<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description>難搞的處女座，生活總是圍繞著電腦、書以及睡覺，偶爾喜歡作作夢，外表很沉默其實比任何人都來的健談，典型選擇性完美主義者外加些倔強、固執的個性，這就是我，銘。</description><title>Libersky</title><generator>Tumblr (3.0; @libersky)</generator><link>http://blog.alone.tw/</link><item><title>test2</title><description>&lt;p&gt;test&lt;/p&gt;

&lt;pre class="brush: cpp"&gt;

/* $Id: main.cpp,v 1.1 2004/01/25 22:57:25 zongo Exp $
**
** Ark - Libraries, Tools &amp;amp; Programs for MORPG developpements.
** Copyright (C) 1999-2004 The Contributors of the Ark Project
** Please see the file "AUTHORS" for a list of contributors
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
 
 
#include &lt;iostream&gt;
#include &lt;sstream&gt;
 
#include &lt;string&gt;
 
#include "xmlRead.h"
#include "ogreGeometryReader.h"
#include "ogreMeshReader.h"
 
 
/****************************************************************************/
 
class OgreSkeletonReader
{
  std::ostream&amp;amp; errors;
 
public:
  OgreSkeletonReader(std::ostream&amp;amp; e) : errors(e) {}
  void parse(XmlNode&amp;amp; root)
  {
  }
 
  bool write(std::ostream&amp;amp; os)
  {
      return true;
  }
};
 
/****************************************************************************/
void parseStory (XmlNode&amp;amp; node) 
{
  for (XmlNode cur=node.firstChild() ; cur ; cur=cur.nextSibling()) 
  {
      if (cur.isName("keyword")) 
      {
          std::string key = cur.getString();
          std::cout 

&lt;/string&gt;&lt;/sstream&gt;&lt;/iostream&gt;&lt;/pre&gt;

&lt;p&gt;test&lt;/p&gt;</description><link>http://blog.alone.tw/post/84593427969</link><guid>http://blog.alone.tw/post/84593427969</guid><pubDate>Sat, 03 May 2014 14:19:00 +0800</pubDate></item><item><title>test</title><description>&lt;pre class="”brush:" css&gt; 

public static void main() 
{
    Console.WriteLine("Highlight me!"); 
}
&lt;/pre&gt;</description><link>http://blog.alone.tw/post/84591167674</link><guid>http://blog.alone.tw/post/84591167674</guid><pubDate>Sat, 03 May 2014 13:39:00 +0800</pubDate></item><item><title>紅米手機(Hongmi‎) Q&amp;A</title><description>&lt;p&gt;最近家裡包括我在內四個人除了我之外手機全部換成了 紅米手機(繼續使用 WT19i)，老媽前幾個月才跟我講低頭族的新聞，家裡裝了無線分享器之後，老媽也變了一個人&amp;#8230;(可以吃飯吃到一半老媽跑去看 LINE 訊息的奇景)。雖然小米手機一直以人性化體驗、軟體而自豪，不過並沒有到完美的境界，開箱之後還是會有一些設定需要修改，這裡整理一份 Q&amp;amp;A。&lt;/p&gt;

&lt;p&gt;※ Q&amp;amp;A 基於 紅米手機(Hongmi‎) JHBTWBA 13.0&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;h3&gt;Q：連接 USB 狀態列只出現：「已連接 USB 看照片傳檔案」&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;A：升級 JHBTWBA 13.0 (目前紅米最新的 OTA)之後，不會出現 USB 電腦連線 選擇項目(以往可以選擇 USB 儲存裝置、媒體裝置 (MTP)、相機 (PTP)、僅限充電、內建光碟機)，解決方法很簡單，編輯 &lt;strong&gt;data/property/persist.sys.usb.config&lt;/strong&gt; 文件内容將原本的內容 &lt;strong&gt;mtp,adb(或者僅有 mtp)&lt;/strong&gt; 取代為 &lt;strong&gt;mass_storage,adb,&lt;/strong&gt;，接著重新啟動手機即可(取得 Root 權限後利用 Root Explorer 之類的軟體去編輯)。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Q：如何開啟 開發人員選項&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;A：設定 -&amp;gt; 關於手機 -&amp;gt; 在 Android 版本上面連點數次，即可解放 開發人員選項。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Q：如何開啟 USB 偵錯&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;A：如果要用電腦操作手機做一些類似 adb 的操作，需要依賴 USB 偵錯模式，參考「如何開啟 開發人員選項」並在 開發人員選項 設定中找到 USB 偵錯，並設定為啟用。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Q：如何 ROOT 手機(取得紅米手機 ROOT 權限)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;A：目前大陸有不少廠商推出一鍵 ROOT 軟體，目前 follow 紅米速度最快得應該算是 &lt;a href="http://www.mgyun.com/vroot" target="_blank"&gt;VRoot(ROOT 大師)&lt;/a&gt;，在 PC 安裝並執行 VRoot 之後，將手機啟用 USB 偵錯模式並接上電腦，接下來選取一鍵 Root，重啟之後即可順利取得 Root 權限。&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.alone.tw/post/83198235116</link><guid>http://blog.alone.tw/post/83198235116</guid><pubDate>Sat, 19 Apr 2014 21:47:00 +0800</pubDate><category>android</category></item><item><title>Windows 7 SP1 多版本整合光碟製作(32 位元、64 位元 簡易版、家用入門版、家用進階版、專業版、旗艦版、企業版) 單 ISO 製作</title><description>&lt;p&gt;最近剛好有需求需要製作 Windows 7 SP1 多版本光碟(32 位元、64 位元 簡易版、家用入門版、家用進階版、專業版(企業版似乎需要另外整合))，所以就上網找了一下相關資料，發現並不會太複雜，就動手 DIY 一張原版源的 Windows 7 SP1 光碟(教學也適用 Windows 7 Release(SP0)。&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;h2&gt;Windows 7 SP1 多版本整合光碟製作&lt;/h2&gt;

&lt;h3&gt;需要材料&lt;/h3&gt;

&lt;ul&gt;&lt;li&gt;Windows 7 Service Pack 1 x86 ISO&lt;/li&gt;
&lt;li&gt;Windows 7 Service Pack 1 x64 ISO&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/zh-tw/download/details.aspx?id=5753" target="_blank"&gt;Microsoft Windows AIK(自動化安裝套件)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;能夠編輯 ISO 檔案的工具(eg. UltraISO)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;※ Windows AIK 可以到 Microsoft Download Center 進行下載(上面有超連結)。會利用其中的 ImageX Tool for Windows 工具。&lt;br/&gt;
※ Windows 7(SP1) ISO 檔請自行取得。&lt;/p&gt;

&lt;h3&gt;開始&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;ol&gt;&lt;li&gt;安裝 Windows AIK。&lt;/li&gt;
  &lt;li&gt;將兩個 ISO 中的 &lt;strong&gt;install.wim&lt;/strong&gt;(位於 ISO 中 sources 目錄下面) 分別複製出來，並分別命名為 x86.wim、x64.wim&lt;/li&gt;
  &lt;li&gt;將 x86.wim/x64.wim 兩個檔案，放到 C:\allinone\ 中(allinone 是空資料夾，請自行建立)&lt;/li&gt;
  &lt;li&gt;接著開啟 Windows AIK 工具&lt;/li&gt;
  &lt;li&gt;分別輸入以下指令：&lt;/li&gt;
  &lt;/ol&gt;&lt;p&gt;cd C:\allinone&lt;br/&gt;
  imagex /export ./x86.wim 1 ./install.wim /check /compress maximum&lt;br/&gt;
  imagex /export ./x86.wim 2 ./install.wim /check /compress maximum&lt;br/&gt;
  imagex /export ./x86.wim 3 ./install.wim /check /compress maximum&lt;br/&gt;
  imagex /export ./x86.wim 4 ./install.wim /check /compress maximum&lt;br/&gt;
  imagex /export ./x86.wim 5 ./install.wim /check /compress maximum&lt;br/&gt;
  imagex /export ./x64.wim 1 ./install.wim x64_1 /check /compress maximum&lt;br/&gt;
  imagex /export ./x64.wim 2 ./install.wim x64_2 /check /compress maximum&lt;br/&gt;
  imagex /export ./x64.wim 3 ./install.wim x64_3 /check /compress maximum&lt;br/&gt;
  imagex /export ./x64.wim 4 ./install.wim x64_4 /check /compress maximum&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;上面指令執行完會出現 &lt;strong&gt;Successfully exported image #&lt;/strong&gt;1. 類似的字樣&lt;/p&gt;

&lt;blockquote&gt;
  &lt;ol&gt;&lt;li&gt;拷貝一份 Windows 7 Service Pack 1 x86 ISO，命名為 tw_windows_7_with_sp1_x86+64_dvd.iso&lt;/li&gt;
  &lt;li&gt;將 C:\allinone 下面的 install.wim 取代 tw_windows_7_with_sp1_x86+64_dvd.iso 目錄 sources 下面的 install.wim。(利用 ISO 編輯工具)&lt;/li&gt;
  &lt;li&gt;將 tw_windows_7_with_sp1_x86+64_dvd.iso 目錄 sources 下面的 ei.cfg 刪除。&lt;/li&gt;
  &lt;li&gt;儲存。Windows 7 多版本整合光碟製作完成!&lt;/li&gt;
  &lt;/ol&gt;&lt;/blockquote&gt;

&lt;p&gt;Enterprise 企業版貌似需要另外整合，有興趣可以自行研究。個人推測只要將 Enterprise x86/x64 ISO 利用 imagex 推進去 install.wim 即可完成整合。&lt;/p&gt;

&lt;p&gt;※之後有測試過 Enterprise 企業版 整合，確實可以利用上述方式整合成功，Windows 7 Enterprise 企業版 ISO 比較特別，裡面沒有所有版本，只有 Enterprise 企業版，即使刪除 ei.cfg 也無法獲得其他版本，整個 ISO 中只有 Enterprise 企業版。企業版整合後，ISO 還是會小於 4.7G，不過 Wikipedia 上面標註 Windows 7 企業版 與 旗艦版所能使用的功能是一樣的，所以 Ming 建議一般 user 不需要另外整合企業版。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://lh4.googleusercontent.com/-6r22NTLrmwM/UxaLDRvMuzI/AAAAAAAAADw/XNvr9F6FBZs/s520/sshot-1.png" alt="Windows 7 SP1 9in 1"/&gt;&lt;/p&gt;

&lt;h3&gt;參考資料&lt;/h3&gt;

&lt;ol&gt;&lt;li&gt;&lt;a href="http://blog.xuite.net/b122422182com/iTeach/59328408-%E5%A4%9A%E7%89%88%E6%9C%AC%2F%E5%A4%9A%E5%90%88%E4%B8%80+windows+7+%E5%AE%89%E8%A3%9D%E5%85%89%E7%A2%9F%E8%A3%BD%E4//%BD%9C" target="_blank"&gt;多版本/多合一 windows 7 安裝光碟製作&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><link>http://blog.alone.tw/post/78605790779</link><guid>http://blog.alone.tw/post/78605790779</guid><pubDate>Wed, 05 Mar 2014 10:16:00 +0800</pubDate><category>Windows</category></item><item><title>手機刷 CyanogenMod(CM) 核心/系統以 Sony WT19i 為例</title><description>&lt;p&gt;最近手機一直提示儲存空間不足，想要安裝或者更新應用程式都沒辦法，或者只能從砍舊有的程式下手，加上 Sony 預裝的系統 CPU 有鎖頻、不支援 swap &amp;#8230; ，基於上述原因決定趁著假期前將系統刷成 CM 9，將過程順便筆記一下，供大家參考。關於 CyanogenMod 的介紹，請參考 Wikipedia，&lt;a href="http://zh.wikipedia.org/wiki/CyanogenMod" target="_blank"&gt;點我&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://lh5.googleusercontent.com/-lZ21dU6T-N8/UvJx_CHmwiI/AAAAAAAAADU/dzThhxb8KOI/s480/Screenshot_2014-02-06-01-11-12.png" alt="CM"/&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;範例機型：&lt;a href="http://www.sonymobile.com/us/support/phones/live-with-walkman/" target="_blank"&gt;Sony Ericsson Live with Walkman WT19i&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CyanogenMod Downloads(WT19i 代號為「coconut」)：&lt;a href="http://download.cyanogenmod.org/" target="_blank"&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;※1‧WT19i 目前較推薦使用 cm-9.1.0-coconut.zip(基於 Android 4.0.4)，下載完將 .zip 檔案放置於手機 SD 卡根目錄)。&lt;/p&gt;

&lt;p&gt;※2‧請務必妥善做好備份，下述操作會將原先資料清空。&lt;/p&gt;

&lt;p&gt;※3‧手機可能需要解鎖(s-off)，詳細請參考網路教學(解鎖會失去原廠保固)。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;ol&gt;&lt;li&gt;下載/安裝 &lt;a href="http://www.flashtool.net/download.php" target="_blank"&gt;Flashtool&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;安裝驅動程式，驅動程式安裝檔位置：「C:\Flashtool\drivers\Flashtool-drivers.exe」。(不知道機型的話就全勾吧，會有點久)&lt;/li&gt;
  &lt;li&gt;接著關機狀態音量鍵按上(+)(壓住不放)，USB 線接上，然後將手機開機，確定手機右上的燈是否變藍色，代表進入所謂的 &amp;#8220;fastboot mode&amp;#8221; (驅動安裝失敗未必代表沒有成功進入，過程有遇到，要確定是否連上請在第 6 步驟確認)。&lt;/li&gt;
  &lt;li&gt;將剛剛從 CM downloads 下載下來的 .zip 檔案用壓縮軟體打開，將「boot.img」單獨解壓縮出來，並放置於「C:\Flashtool\x10flasher_lib\」目錄下面。&lt;/li&gt;
  &lt;li&gt;開啟「命令提示字元(cmd.exe」，輸入：「cd C:\Flashtool\x10flasher_lib\」&lt;/li&gt;
  &lt;li&gt;接著輸入：「fastboot.exe -i 0x0fce getvar version」，出現 version: 0.3 finished. 字樣之後代表手機成功進入 &amp;#8220;fastboot mode&amp;#8221;。&lt;/li&gt;
  &lt;li&gt;接著輸入：「fastboot.exe flash boot boot.img」，出現 OKAY、finished 字樣代表完成。&lt;/li&gt;
  &lt;li&gt;將 USB 線拔掉，接著開機，壓著音量鍵下(-)，會進入 &amp;#8220;CWM Recovery&amp;#8221;(音量鍵控制上下，HOME 鍵選擇)，執行 &amp;#8220;wipe data/factory reset&amp;#8221;、&amp;#8221;wipe cache partition&amp;#8221;、以及 &amp;#8220;advanced/wipe Dalvik Cache&amp;#8221;&lt;/li&gt;
  &lt;li&gt;接下來返回主畫面執行 &amp;#8220;install zip from sdcard/choose zip from sdcard/XXXXXXXX.zip&amp;#8221; (XXXXXXXX 為 CM downloads 下載下來的 .zip 檔案)。&lt;/li&gt;
  &lt;li&gt;出現 complete 字樣代表刷機成功，執行 &amp;#8220;reboot system now&amp;#8221; 重啟手機。&lt;/li&gt;
  &lt;li&gt;開始享受 CyanogenMod System&amp;#160;!&lt;/li&gt;
  &lt;/ol&gt;&lt;/blockquote&gt;

&lt;p&gt;※ CyanogenMod 系統刷完就已經取得 root 權限，並已經安裝 SuperSU，毋須自行取得 root 權限。&lt;/p&gt;

&lt;h2&gt;Q&amp;amp;A&lt;/h2&gt;

&lt;h3&gt;Q：出現：&amp;#8221;&amp;lt; waiting for device &amp;gt;&amp;#8221;&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;A：手機連結電腦失敗，請檢查驅動程式(Driver)。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Q：怎麼沒有 Google Play&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;A：受限於 Google，CM 無法搭載 Google 服務架構，請以 Google 服務架構為關鍵字，應該就有你要的東西了~&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Q：使用 Google Play 下載/更新程式遇到「從伺服器擷取資訊時發生錯誤[RPC:S-3]」&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;A：我在用 Titanium Backup(鈦備份) 還原原本手機設定的時候有遇到這個問題，解決方法：設定 &amp;gt; 帳號與同步處理 &amp;gt; 點進去 Google Play 使用的帳號 &amp;gt; 點功能鍵(右下角三條線實體按鈕) &amp;gt; 移除帳戶，在重新加入一次問題即可迎刃而解。&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.alone.tw/post/75701510103</link><guid>http://blog.alone.tw/post/75701510103</guid><pubDate>Thu, 06 Feb 2014 00:57:00 +0800</pubDate><category>Android</category></item><item><title>Anti-Virus Comparative(AV-C) Summary Report 2013 </title><description>&lt;p&gt;2013 年初的時候有發一篇 &lt;a href="http://blog.alone.tw/post/42994522183/av-comparatives-av-c-2013" target="_blank"&gt;AV-Comparatives(AV-C) 2013 受測廠商一欄表&lt;/a&gt;，一轉眼就過了一年，奧地利第三方非營利安全產品測試組織 AV-C 發表了 2013 年度安全產品測試報告(Summary Report 2013)，為 2013 的測試進行總結。&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;h3&gt;報告下載&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.av-comparatives.org/wp-content/uploads/2014/01/avc_sum_201312_cn.pdf" target="_blank"&gt;簡體中文&lt;/a&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;a href="http://www.av-comparatives.org/wp-content/uploads/2014/01/avc_sum_201312_en.pdf" target="_blank"&gt;English&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Overall winner of 2013 (Product of the Year)：Kaspersky Lab&lt;/p&gt;

&lt;p&gt;Top Rated Products 2013：Avast/AVIRA/Bitdefender/BullGuard/ESET/Fortinet/F-Secure&lt;/p&gt;

&lt;p&gt;其它各項獎項列於報告中，有興趣可以下載 AV-C 報告觀看。&lt;/p&gt;</description><link>http://blog.alone.tw/post/75243914926</link><guid>http://blog.alone.tw/post/75243914926</guid><pubDate>Sat, 01 Feb 2014 19:10:00 +0800</pubDate><category>security</category></item><item><title>Install 64 bit Windows 7 on UEFI BIOS Motherboard (Legacy BIOS Mode)</title><description>&lt;p&gt;前幾天去光華幫老爸買新電腦，最後買了 ASUS X550VC，現在筆記型電腦預裝系統八成都是 Windows 8 了，不過電腦是爸媽要用的，加上我一直不太喜歡廠商裝的系統一堆雜七雜八的東西(處女座www)，回來第一件事情就是想把電腦洗成 Windows 7 SP1。&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;不過一直無法 USB 開機，心裡暗想不妙，應該是要處理 UEFI BIOS 的問題，這算是第一次經手 UEFI BIOS 的 Notebook (家裡電腦清一色都還是 Legacy BIOS)。&lt;/p&gt;

&lt;p&gt;廢話不多說，直接看方法：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;ol&gt;&lt;li&gt;進去 UEFI BIOS 中&lt;/li&gt;
  &lt;li&gt;切換到 Boot 頁面，將 Launch CSH(有可能叫做 Legacy 之類的) 改為 [&lt;strong&gt;Enabled&lt;/strong&gt;]&lt;/li&gt;
  &lt;li&gt;切換到 Security 頁面，將 Secure Boot Control 改為 [&lt;strong&gt;Disabled&lt;/strong&gt;]&lt;/li&gt;
  &lt;li&gt;Save Change&lt;/li&gt;
  &lt;li&gt;正常 USB 開機&lt;/li&gt;
  &lt;/ol&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;※現在筆電分割大多為 GPT 格式，進去分區之後，記得先把所有分區刪除在重新建立。&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;上面的方法其實就是切換為傳統 BIOS，當然還有其它直接在 UEFI 開機的方式(利用 UEFI Shell)，UEFI、GPT 有自己的好處(四個以上主分區、硬碟 2T 以上支持..等等)，不過網路上哀嚎遍野就是了，是否是好設計就見仁見智了&amp;#8230;。&lt;/p&gt;

&lt;p&gt;文末參考資料有提供在 UEFI BIOS 直接啟動的方式(其實也是順便儲存一路上找來的資料，供自己以後參考)，有需要可以試試看。&lt;/p&gt;

&lt;h2&gt;參考資料&lt;/h2&gt;

&lt;ol&gt;&lt;li&gt;&lt;a href="http://society.com.tw/?p=387" target="_blank"&gt;製作UEFI開機的USB隨身碟 (可以將Windows讓GPT磁碟可以開機)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diybbs.zol.com.cn/3/308_22291.html" target="_blank"&gt;预装Win8系统的电脑安装Win7的方法（EFI安装Win7）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://diybbs.zol.com.cn/3/308_22292.html" target="_blank"&gt;预装Win8系统EFI主板电脑安装Win7的方法（Legacy安装Win7）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.techbang.com/posts/4356" target="_blank"&gt;即將換掉傳統 BIOS 的 UEFI，你懂了嗎？（一）&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><link>http://blog.alone.tw/post/74794288517</link><guid>http://blog.alone.tw/post/74794288517</guid><pubDate>Tue, 28 Jan 2014 11:23:00 +0800</pubDate><category>Windows</category></item><item><title>Cron task on Windows Server</title><description>&lt;p&gt;最近參與學校一個網站系統的架設、維護，網站架上學校的 server 後一直沒有出太大的問題，今天負責的指導老師突然找我過去，問我怎麼無法登入 Administrator，我 try 幾個比較可能的密碼，還是無法順利登入，伺服器設定沒有動過、昨天還有順利登入過，各種詭異，要趕車回家於是就跟老師說回去在試試看，有進度再回報。&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;回家吃完飯，用自己的電腦登入 Administrator，還是一直出現：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;You have exceeded the maximum login attempts. This account has been locked for up to 5 minutes.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;看來網站封鎖機制並非傳統網站系統針對 IP 或者塞 cookie 去防範，是直接凍結帳戶登入。&lt;/p&gt;

&lt;p&gt;不過在學校出現這個 message 到回家已經是四個小時前的事情了，並非 5 minutes 左右的事情，查了一下可以在 phpmyadmin 中把 user 的 &amp;#8216;logintries&amp;#8217; 資料值設定為 0，修改後可以順利登入。&lt;/p&gt;

&lt;p&gt;不過這樣好像不太妙，我們有 Server 權限當然可以隨時進去 phpmyadmin 修改資料表，可是一般使用者一來沒有權限(請黑客們手下留情&amp;lt;(_ _)&amp;gt;) 二來開放之後，使用者一多，遇到這種問題就得進資料庫改值，會是一件很麻煩的事情。&lt;/p&gt;

&lt;p&gt;在解決問題的討論串之中，有提到了問題發生的地方，問題貌似是出在一個叫作 cron 的東西。&lt;/p&gt;

&lt;p&gt;到系統後臺果然發現 Site statistics 中的 Cron 狀態顯示為：&lt;strong&gt;cron is not running.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google Developers 中是這麼解釋 Cron Service 的：&lt;/p&gt;

&lt;p&gt;&lt;em&gt;透過「應用服務引擎 Cron Service」，您可以定期設定排程工作；這些排程工作會依照您定義的時間或時間間隔執行作業，通常稱作「Cron 任務」。「應用服務引擎 Cron Service 」會自動觸發 cron 任務。舉例來說，您可以使用此服務每天寄送電子郵件報告、每 10 分鐘更新快取資料，或每小時更新摘要資訊。&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;簡單的說就是類似工作排程的東西，linux-base 系統是透過 crontab 去實現排程，不過學校 server 作業系統是 Windows Server 2008，當然沒有 crontab 指令可以用。&lt;/p&gt;

&lt;p&gt;最後在萬能的 Stack Overflow 上面找到答案，用 Windows 系統中的工作排程器，不過 Stack Overflow 上面提供的方法是用 browser(瀏覽器) 去跑 cron，想了想好像會跑出很多視窗，於是又找了找，找到的解決方案就是用 Shell 調用 php.exe 去 run /lib/cron.php，問題即可迎刃而解。&lt;/p&gt;

&lt;p&gt;Shell script (.bat) 內容大致上為：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;php\php.exe &lt;strong&gt;your site&lt;/strong&gt;\lib\cron.php&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;並在工作排程器中設定：&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;一般 &amp;gt; &lt;strong&gt;不論使用者登入與否均執行(W)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;觸發程序 &amp;gt; 新增(N) &amp;gt; 開始工作: &lt;strong&gt;在排程上&lt;/strong&gt; &amp;gt; 設定 &lt;strong&gt;僅一次&lt;/strong&gt; &amp;gt; 進階設定 &lt;strong&gt;重複工作每隔 15 分鐘&lt;/strong&gt;(自由設定，多久要 run 一次 cron 執行排程工作) &amp;gt; 持續時間: &lt;strong&gt;不限制&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;動作 &amp;gt; 新增 &amp;gt; 程式或指令碼 &lt;strong&gt;Shell script(.bat)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;問題應該就可以解決了!(cron 開始會處理凍結時間控管)&lt;/p&gt;</description><link>http://blog.alone.tw/post/73615650342</link><guid>http://blog.alone.tw/post/73615650342</guid><pubDate>Fri, 17 Jan 2014 22:56:00 +0800</pubDate><category>windows</category></item><item><title>[Linux] 解決手動編譯 Python 3 出現：no module named '...'</title><description>&lt;p&gt;今天早上要在 LinuxMint 上面裝 Python 3，LinuxMint 雖然有 apt-get install python3，心血來潮決定自己手動編譯最新版本試試看，到 Python 官方 &amp;gt; Download &amp;gt; Python 3.3.3 compressed source tarball (for Linux, Unix or Mac OS X)，下載了 Python-3.3.3.tgz，接著把他解壓縮出來後，chmod 設定一下資料夾權限，接著就開始進行手動編譯作業。&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;參考 README 文件提供的安裝步驟：&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;./configure&lt;/li&gt;
&lt;li&gt;make&lt;/li&gt;
&lt;li&gt;make test&lt;/li&gt;
&lt;li&gt;sudo make install&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;建議可以先 chmod 777 * 整個目錄，不然會有權限不足的問題(即使使用 root 身分)。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Python-3.3.3 # ./configure
  creating Modules/Setup
  creating Modules/Setup.local
  creating Makefile&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;接下來&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Python-3.3.3 # make&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;make 測試了一堆項目，執行的過程發現有些項目會出現類似：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;test_idle skipped &amp;#8212; No module named &amp;#39;_tkinter&amp;#39;
  test_idle skipped &amp;#8212; No module named &amp;#39;&amp;#8230;&amp;#8217;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;原本不以為意，不過把這訊息丟到 Google search 去，發現不少人遇到這個問題過，簡單的說就是 Python 3 有功能會需要相依這些軟體，如果不解決這問題的話，到時候有需要使用的時候，必須要重新編譯(ImportError: No module named &amp;#8230; 的元兇)，所以就開始著手解決問題。&lt;/p&gt;

&lt;p&gt;舉 test_idle skipped &amp;#8212; No module named &amp;#39;readline&amp;#8217; 這條訊息來說，缺了 readline 一定是先安裝 readline&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Python-3.3.3 # sudo apt-get install readline-common
  readline-common 已經是最新版本了。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;#8230;&amp;#8230; 開我玩笑嗎。&lt;/p&gt;

&lt;p&gt;查了一下 Google 發現網路上一大票這種問題，典型的解決方案都是要我們編輯&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;./Modules/Setup.dist&lt;/p&gt;
  
  &lt;p&gt;./Setup.py&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;這幾個檔案或者使用 export PATH、LD_LIBRARY_PATH，等千奇百怪的方法。
實際試過之後，還是無法解決問題&amp;#8230;。
整個很 Orz ，還在想要不要乾脆直接 apt-get install python3.2 算了。&lt;/p&gt;

&lt;p&gt;想歸想，遇到問題還是得解決，之後一定還會有很多機會需要自己手動編譯，這也是 Linux-based 吸引人的特性之一(對於能夠認同 Open source 哲學的人來說)。&lt;/p&gt;

&lt;p&gt;皇天不負苦心人，最後在茫茫資料中，看到了一個被發問者評為正確答案的回答。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I installed libncurses5-dev and libreadline5-dev, recompiled python and reinstalled (make / make install).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;決定死馬當活馬醫，反正前面已經嘗試一堆沒有效果的方法了，多來一個也沒啥差別。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;apt-get install libncurses5-dev libreadline5-dev
  make&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr&gt;&lt;p&gt;Modules/Setup.dist is newer than Modules/Setup;
check to make sure you have all the updates you
need in your Modules/Setup file.
Usually, copying Modules/Setup.dist to Modules/Setup will work.&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;running build
running build_ext
Python build finished, but the necessary bits to build these modules were not found:&lt;/p&gt;

&lt;p&gt;_curses          __curses_panel                       _tkinter&lt;br/&gt;
_lzma             _ssl&lt;/p&gt;

&lt;p&gt;To find the necessary bits, look in setup.py in detect_modules() for the module&amp;#8217;s name.&lt;/p&gt;

&lt;p&gt;（！）， readline 竟然消失在列表上了，一定有啥巫術。&lt;/p&gt;

&lt;p&gt;仔細看一下 apt-get install libncurses5-dev libreadline5-dev 這行，我發現了 lib&lt;em&gt;module name&lt;/em&gt;-dev 這樣的規則，好像發現新大陸一樣，一路試了：&lt;/p&gt;

&lt;p&gt;例如，openssl&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;apt-get install libssl-dev&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;success!，以此類推，把 lib 後綽是 dev 的裝上去(查資料才知道，make 會需要用到開發包，開發包有包含 include 等開發會用到檔案的樣子)，解決所有依賴問題，覆蓋一張 make install 完成 Python 3.3.3 安裝！&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;make install&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;手動編譯成功，截圖紀念：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://lh3.googleusercontent.com/-NPTGTY2LRko/Uo4dlH6s3bI/AAAAAAAAACQ/X9xyMOG0PCE/s505/20131121_009.png" alt="LinuxMint run Python3.3.3"/&gt;&lt;/p&gt;

&lt;p&gt;快期中考了, 我竟然花一堆時間在搞這種東西 &amp;#8230;&amp;#8230;。&lt;/p&gt;

&lt;p&gt;順帶一提，這篇文章是用 Logdown 的 Markdown 編輯器寫完，在丟過來餵給 Tumblr 的 Markdown 引擎，各種羨慕 Logdown 的 Markdown 編輯器 &amp;#8230;。&lt;/p&gt;</description><link>http://blog.alone.tw/post/67660143182</link><guid>http://blog.alone.tw/post/67660143182</guid><pubDate>Thu, 21 Nov 2013 22:54:00 +0800</pubDate><category>linux</category></item><item><title>Windows 系列系統覆蓋主引導扇區 - GNU GRUB救援筆記</title><description>&lt;p&gt;※這篇有點年代了，寫作風格有點鬆散，文章內有不少與問題無關緊要的故事，急著解決問題的話，可以先參考以下幾篇：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://www.path8.net/tn/archives/2027" title="Linux系统启动故障总结:单用户模式/GRUB引导故障/Linux救援模式" target="_blank"&gt;Linux系统启动故障总结:单用户模式/GRUB引导故障/Linux救援模式&lt;/a&gt;&lt;/p&gt;
  
  &lt;p&gt;&lt;a href="http://bruce30262.pixnet.net/blog/post/95082628" title="Win7 + Linux Mint 14.1 雙系統安裝實錄" target="_blank"&gt;Win7 + Linux Mint 14.1 雙系統安裝實錄&lt;/a&gt;&lt;/p&gt;
  
  &lt;p&gt;&lt;a href="https://help.ubuntu.com/community/Boot-Repair" title="Boot-Repair" target="_blank"&gt;Boot-Repair&lt;/a&gt;&lt;/p&gt;
  
  &lt;p&gt;&lt;a href="http://apexu.com/apexu/tw/modules/publisher/item.php?itemid=1" title="使用ubuntuliveCD重新安裝grub2" target="_blank"&gt;使用ubuntuliveCD重新安裝grub2&lt;/a&gt;&lt;/p&gt;
  
  &lt;p&gt;&lt;a href="http://17610376.blog.51cto.com/366886/116032" title="GRUB使用说明及Linux和Windows双系统Grub丢失恢复和linux硬盘安装方法" target="_blank"&gt;GRUB使用说明及Linux和Windows双系统Grub丢失恢复和linux硬盘安装方法&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Good luck!&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;前言：禮拜五難得沒熬夜(其實是太累攤下去就沒起來了)，禮拜六早晨很正常的七點左右起床，刷牙洗臉之前先把身旁的筆電打開，接著進入Windows XP準備一天的開始，卻看到罕見的錯誤訊息，詳細已經忘記了，不過中文相關資料不多，英文相關資料也不多，解決方式嘗試之後，搬出了系統還原，結果不還原還好一還原就近不去系統了。&lt;/p&gt;

&lt;p&gt;連假，算了，決定來重裝系統，禮拜六先花了半天的時間製作Ming XP，經過無數次的測試，版本號從Ming XP1.1 &amp;gt; 1.3 &amp;gt; 1.5 &amp;gt; 1.6 &amp;gt; 跳至1.7終於完成理想的系統(沒錯也在VMWare中重裝了四五次)，裝完系統之後開機，該死，MBR果然被Windows洗掉了，看來還原系統環境之前得先折騰選單了，Ubuntu之前更新完也被洗掉過一次，雖然估計得花點時間，不過應該是不會太久才是。&lt;/p&gt;

&lt;p&gt;大致想了一下解決方案，參考網路上很多文章，最後都是無解，禮拜六忙到了凌晨三四點，早上睡到十點起來決定先把XP環境還原好，XP環境還原好差不多要回鄉下了，這次跟自己說好不帶筆電回鄉下加上昨天折騰整個晚上都沒結果，MBR被覆蓋的問題決定等到228回來臺北在說。&lt;/p&gt;

&lt;p&gt;假期很快過去，中午回到了濕冷的臺北，當然沒忘記GRUB選單被覆蓋掉的問題，(經過五小時，過程略，在229這個四年一次的日子開始的五分鐘內，我終於搞定這個問題了)&lt;/p&gt;

&lt;p&gt;正文開始：&lt;/p&gt;

&lt;p&gt;首先，記得將開機磁區改為Linux所在區，這是回鄉下的第一個突破口，可是之後又卡住了，接下來參考網路上的方法：&lt;/p&gt;

&lt;p&gt;(以下操作在Fedora 15 LXDE Live CD指令環境完成)&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;su&lt;/li&gt;
&lt;li&gt;mount /dev/sda3 /mnt&lt;/li&gt;
&lt;li&gt;grub-install /dev/sda3 (沒錯，不需要chroot)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;接下來開機看到grub&amp;gt;_的畫面，又卡住了，接下來嘗試看看&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;find /boot/grub/stage1&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;原本其實找不到stage1的，鍵入之後竟然給我了(hd0,2)&lt;/p&gt;

&lt;p&gt;接著root過去，然後setup (hd0)&lt;/p&gt;

&lt;p&gt;竟然成功通過檢查得到done~&lt;/p&gt;

&lt;p&gt;重新開機想說應該成功了，結果又看到grub&amp;gt;_&lt;/p&gt;

&lt;p&gt;再查了一些資料回到Fedora Live CD 打開命令提示字元，無論如何都洗不掉MBR，還是沒有收穫。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.path8.net/tn/archives/2027" target="_blank"&gt;http://www.path8.net/tn/archives/2027&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://kenshinnn.blogspot.tw/2009/03/linuxmbr.html" target="_blank"&gt;http://kenshinnn.blogspot.tw/2009/03/linuxmbr.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;參照網路文章進入了Debian，興喜若狂的輸入update-grub，成功，shutdown -r now，又是那個grub&amp;gt;_的畫面，又在一次進入Debian，想了很久決定把MBR先洗掉在寫入&lt;/p&gt;

&lt;p&gt;本來打算拿出Spfdisk(一直很不願意用，有慘痛經驗)，最後決定找在Linux下重寫MBR的方式，dd指令祭出之後，grub-install + update-grub 雙管齊下(不確定哪個導致成功)，開機終於看到了GRUB畫面。&lt;/p&gt;</description><link>http://blog.alone.tw/post/64291457715</link><guid>http://blog.alone.tw/post/64291457715</guid><pubDate>Thu, 17 Oct 2013 20:04:00 +0800</pubDate><category>linux</category></item><item><title>[C++] rand()/srand() 亂數種子原理</title><description>&lt;p&gt;認識 srand() / rand() 算蠻長的時間了，寫過 C/C++ 的人都知道，他們是 標準 C/C++ 用於產生亂數的函數組合。Ming 這次負責迎新活動上面一個小程式，這個小程式用於將各班級不對齊的人數，自動計算並分配成 n 組(實際上就是做直屬分配 / 共 n 人 j 人一組以某班人數 p 為基準共 n 組)。&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;迎新活動結束後，無聊又拿程式起來 run run 看，赫然發現一件奇怪的事情，有某個學長連續好幾次的結果都跟 Ming 同組(&lt;s&gt;如果是學妹我可能就沒動力修了&lt;/s&gt;)，再看看其它人也有這個狀況，一二年級會變動可是 二、三 年級結果都是相似的，慘了有 bug &amp;#8230; 。&lt;/p&gt;

&lt;p&gt;有 bug 要修阿，原先以為是我分配邏輯寫錯(首次使用不熟的 2d vector)，查了分配部分的程式碼找了許久還是找不到問題點，結果又把程式 run 了幾次，發現有幾次結果是會改變的，接著我就開始懷疑是不是 srand() / rand() 有問題。&lt;/p&gt;

&lt;p&gt;簡單提一下我對直屬分配程式的作法是這樣：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;// STL 容器&lt;br/&gt;
  vector&amp;lt;vector&amp;lt;wstring&amp;gt; &amp;gt; classVector;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
  
  &lt;p&gt;// handleVector() 負責處理 各班人員姓名讀入 / classVector 賦值 / 亂數排序(關鍵 - srand() 寫在 handleVector() 中)&lt;br/&gt;
  handleVector(fileNameOne,classVector,1);&lt;br/&gt;
  handleVector(fileNameTwo,classVector,2);&lt;br/&gt;
  handleVector(fileNameThree,classVector,3);&lt;br/&gt;
  handleVector(fileNameFour,classVector,4);&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;我懷疑是函數執行間隔速度過短，間接導致 srand((unsigned int)time(NULL)); 中的 time() 函數抓到的時間是幾乎沒有差異性的(每次傳入的 seed 一樣的話，會導致亂數結果相同)。&lt;/p&gt;

&lt;p&gt;我初步的處理方式是在 handleVector() 中加入 Sleep(1000)，讓每次執行函數時延遲 1 秒鐘的時間，重新執行程式後，輸出結果前會先延遲四秒鐘左右Sleep(1000) * 4。&lt;/p&gt;

&lt;p&gt;不過大致上得到的結果是正確的 -&amp;gt; 每次的結果都是散的(正確)。&lt;/p&gt;

&lt;p&gt;興高采烈的以為修好 bug 之後，跟老師討論了這個結果，結果老師說 srand 的 seed 用 time() 是不適合的做法，回去問了一下資深的網友，他說傳 time() 沒有問題，問我是不是重複 srand() 了 &amp;#8230; 這句話有點當頭棒喝的感覺。&lt;/p&gt;

&lt;p&gt;handleVector 執行了四次 &amp;#8230;，srand() 也重覆跑了四次，也就是說當這四次函數執行時間非常非常短的時候，傳入的 seed 是一樣的。(A秒執行 time() 跟 A秒執行 time() 會讓 time() == time()，也就是說傳入的 seed == seed，導致每次 rand() 結果都是一樣的)&lt;/p&gt;

&lt;p&gt;把 srand() 搬到 main() 程式入口點中，程式果然正常了，而且又沒有 Sleep(1000) 延遲四秒鐘才輸出的問題。&lt;/p&gt;

&lt;p&gt;只知其然，而不知其所以然 不太好，要了解 srand() 的原理，最快的方法當然是直接看內部實現的代碼了(標準 C++ 的優點之一)。&lt;/p&gt;

&lt;p&gt;首先看一下 srand() 的代碼：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;void __cdecl srand (unsigned int seed)&lt;br/&gt;
  {&lt;br/&gt;
         _getptd()-&amp;gt;_holdrand = (unsigned long)seed;&lt;br/&gt;
  }&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;srand 傳入一個 seed (例如我們傳入 time() 返回值)， _getptd()-&amp;gt;_holdrand 將 seed 存到 _holdrand 變數，初始化完成。&lt;/p&gt;

&lt;p&gt;接下來看一下 rand() 的代碼：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;int __cdecl rand (void)&lt;br/&gt;
  {&lt;br/&gt;
          _ptiddata ptd = _getptd();&lt;br/&gt;
          return( ((ptd-&amp;gt;_holdrand = ptd-&amp;gt;_holdrand * 214013L + 2531011L)&amp;#160;&amp;#187; 16) &amp;amp; 0x7fff );&lt;br/&gt;
  }&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;呼叫 rand() 後，會對 _holdrand 變數(存 seed) 做 (((_holdrand * 214013L + 2531011L)&amp;#160;&amp;#187; 16) &amp;amp; 0x7fff)  操作，並將這個操作後的值返回，且將這個新的值覆蓋原本的 _holdrand 變數。&lt;/p&gt;

&lt;p&gt;一直不理解 rand() 為何被稱作&amp;#8221;偽亂數&amp;#8221;的原因(之前有測試過，rand() 得出的結果蠻平均的)，看完這兩段應該有豁然開朗的感覺，也就是說其實所謂的 rand() 是透過人為的算法去操控的，並非實際意義上的 &amp;#8220;亂數&amp;#8221;，不過 rand() 得到的值還算穩定，作為小程式開發還算堪用，&lt;/p&gt;

&lt;p&gt;也就是說，如果像我一樣一直 srand ，就會讓 _holdrand 一直被刷新，而當 time() == time() 的時候，會導致下一次 rand() 做 (((_holdrand * 214013L + 2531011L)&amp;#160;&amp;#187; 16) &amp;amp; 0x7fff) 操作時，得到一樣的結果。&lt;/p&gt;

&lt;p&gt;他的過程有點像是根據傳入的 seed 產生一個無窮大的序列，每次 rand() 就會從中取一個數字出來(當然這個序列實際上是不存在的，便於理解)，而上面兩行程式碼就是產生這個序列的作用程式碼，透過原始數字 A 做第一次計算，後面不斷利用這個數字做一定的運算，得到 A2 A3，由於每次計算後的值都會不同，所以可以保持 rand() 的品質。&lt;/p&gt;

&lt;p&gt;重複 srand() 或者 srand(常數) 都會導致這個不斷透過固定計算生成的虛擬序列，變成同一個序列。&lt;/p&gt;

&lt;p&gt;例如：
A 的內部實現是 a*a
那我連續傳入 A(1) A(1) A(1) 都會得到一樣的結果(rand 的計算方式有異曲同工，也是透過實際運算得出後面的數字，所以稱為偽亂數)。&lt;/p&gt;

&lt;h3&gt;結論：&lt;/h3&gt;

&lt;p&gt;這次歸根究底其實是自己對於 srand()/rand() 實際原理沒有實際掌握的原因，才犯了重複 set seed 這種低級的錯誤 &amp;#8230;。&lt;/p&gt;

&lt;p&gt;經過這次 bug，有更深的體會應該要更加關注程式的細節、隨手可得的原始碼(如果看得懂的話，可以便於了解內部實現)。&lt;/p&gt;

&lt;p&gt;一次深刻的經驗，了解程式 bug 的影響，這次幸好問題是發生在學校的小 program，出包最多就是修正問題、重新分配一次，如果是實際專案，出包的話影響的是實際的公平性(有違亂數分配程式的初衷)，那可能接下來就是收到一大堆客訴電話、信函了 &amp;#8230;。&lt;/p&gt;

&lt;p&gt;P.s. 羨慕 Logdown 的 Markdown 編輯器(昨天文章寫到一半電腦放著去上學，結果回來自己莫名關機了，還有 restore 可以按，超溫馨.__.)，Tumblr 一直沒在 Markdown 編輯器下功夫阿 &amp;#8230;(有一些很奇怪的解析問題 &amp;#8230;)。&lt;/p&gt;</description><link>http://blog.alone.tw/post/64149021859</link><guid>http://blog.alone.tw/post/64149021859</guid><pubDate>Wed, 16 Oct 2013 06:04:00 +0800</pubDate><category>c/c++</category></item><item><title>進程(Process、行程)、線程(Thread、執行緒)、多線程(Multithreading、多執行緒)、Intel 超線程技術(Hyper-Threading、超執行緒技術) 簡介</title><description>&lt;p&gt;昨天跟某個大陸網友在聊天，他傳了一張進程截圖過來，表示他在編譯他們公司的專案，原來是在進行 分布式編譯是四個進程，問他同時四個在編譯工作？，網友：四核心八線程，所以是八個。&lt;/p&gt;

&lt;p&gt;其實對於 進程(Process) 的概念還算清楚(作業系統實現的概念，工作管理員打開裡面一個個就是了)，可是對於 線程(Thread) 一直有點模糊，然後 CPU 的四核心八線程 又是啥意思呢？其實也有點「霧裡看花」&lt;/p&gt;

&lt;p&gt;Thread 算是還蠻重要的概念，主要的應用地方還蠻多的&amp;#160;&amp;#187; 1. CPU(&lt;a href="http://zh.wikipedia.org/wiki/%E8%B6%85%E5%9F%B7%E8%A1%8C%E7%B7%92" title="Intel Hyper-Threading" target="_blank"&gt;超線程技術&lt;/a&gt;) 2.作業系統(&lt;a href="http://zh.wikipedia.org/wiki/%E7%BA%BF%E7%A8%8B" title="Thread" target="_blank"&gt;線程&lt;/a&gt;) 3.開發(&lt;a href="http://zh.wikipedia.org/wiki/%E5%A4%9A%E7%BA%BF%E7%A8%8B" title="Multithreading" target="_blank"&gt;多線程&lt;/a&gt;)，由硬體至系統到開發都有 Thread 的概念，所以決定好好跟他認識一下。&lt;/p&gt;

&lt;p&gt;下面基本上都是理論的東西，沒有實作，算是筆記一下自己的理解。&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;h2&gt;進程(Process)&lt;/h2&gt;

&lt;p&gt;進程在傳統上來說會跟「程式(Program)」意義共用&lt;/p&gt;

&lt;p&gt;程式(Program)，本身只是指令、資料及其組織形式的描述，意思就是實際上程式只是一個概念上的東西，如果有學過物件導向的話，程式(Program) 比較像是 Object 的概念。&lt;/p&gt;

&lt;p&gt;而 進程(Process) 是 程式(Program) 實體化的概念，進程才是程式（那些指令和資料）的真正執行實體項。若干 進程 有可能與同一個程式相關聯，且每個行程皆可以同步（循序）或非同步（平行）的方式獨立執行。&lt;/p&gt;

&lt;p&gt;面向行程設計的系統（如早期的UNIX，Linux 2.4及更早的版本）中，進程是程式的基本執行實體；在面向線程設計的系統（如當代多數作業系統、Linux 2.6及更新的版本）中，行程本身不是基本執行單位，而是 線程(Thread) 的容器。&lt;/p&gt;

&lt;p&gt;所以可以知道，進程(Process)在作業系統中的定義由各自作業系統 設計、實現，UNIX 系統將 進程(Process) 作為最基本的執行單位(現代作業系統則是 Thread)，而現代化的作業系統，則將進程設計為裝載 線程(Thread) 的一個設計。&lt;/p&gt;

&lt;p&gt;所以在最底層的處理中，作業系統不是直接處理 進程(Process)，而是 線程(Thread)，當然 進程(Process)並非只是一個單純的容器，作業系統通常還會賦予 進程(Process) 一些實體的意義，eg. 父進程(Parent Process)、子進程..等等 (具體實現、設計不清楚，Ming 還沒學過 作業系統 理論，所以只能稍微介紹到這裡)&lt;/p&gt;

&lt;p&gt;進程在作業系統中呈現的舉例：xxx.out、xxx.exe &amp;#8230; 等等&lt;/p&gt;

&lt;p&gt;&lt;img alt="lawlietfox.exe" src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/september/01/03.png" class="center"/&gt;&lt;/p&gt;

&lt;p&gt;進程包含 父進程、子進程 的概念&lt;/p&gt;

&lt;p&gt;&lt;img alt="Evernote.exe" src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/september/01/01.png" class="center"/&gt;&lt;/p&gt;

&lt;p&gt;父進程、子進程不一定是由同一個廠商實作(例如下圖的 Lawlietfox、Microsoft PowerPoint 僅互為呼叫關係)由 父進程 呼叫皆可以算 子進程，父進程 結束工作後，作業系統會將子進程變為獨立進程(UNIX-base 則是由 init 收養)&lt;/p&gt;

&lt;p&gt;&lt;img alt="Lawliet" src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/september/01/02.png" class="center"/&gt;&lt;/p&gt;

&lt;p&gt;進程內也可以包含一個以上的 &lt;strong&gt;線程&lt;/strong&gt;(多線程)。&lt;/p&gt;

&lt;h2&gt;線程(Thread)&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;線程(Process)&lt;/strong&gt; 是作業系統能夠進行運算排程的最小單位，被包含在 進程(Process) 中，在進代作業系統中，被設計為 進程(Process) 中的實際運作單位。&lt;/p&gt;

&lt;p&gt;意思就是一個 進程(Process) 中可以包含一條或多條 線程(Thread)。&lt;/p&gt;

&lt;p&gt;一個進程包含一個線程(單線程)：&lt;/p&gt;

&lt;p&gt;&lt;img alt="單線程" src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/september/01/06.png" class="center"/&gt;&lt;/p&gt;

&lt;p&gt;一個進程也可以包含多個線程(**多線程(Multithreading)**)：&lt;/p&gt;

&lt;p&gt;&lt;img alt="多線程" src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/september/01/06.png" class="center"/&gt;&lt;/p&gt;

&lt;p&gt;線程(Thread) 從開發的角度上來看，就是一條 程式碼執行的路徑。&lt;/p&gt;

&lt;p&gt;例如，下面程式碼，進入 main() 之後，就會按照程式碼撰寫的路徑循序執行，進程(Process) 只擁有一條 線程(Thread)的狀況下，僅能一次完成一項工作。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;int main()&lt;br/&gt;
  {&lt;br/&gt;
    cout &amp;#171;&amp;#160;&amp;#8220;Hello, world&amp;#8221; &amp;#171;&amp;#160;endl;&lt;br/&gt;
    cout &amp;#171;&amp;#160;&amp;#8220;Hello, Tumblr&amp;#8221; &amp;#171;&amp;#160;endl;&lt;br/&gt;
    message();&lt;br/&gt;
    sendFile();&lt;br/&gt;
    message();&lt;br/&gt;
    return 0;&lt;br/&gt;
  }&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;我們都知道程式呼叫 函數(function) 之後，程式的控制權會轉到 function 裡面去，那麼如果上面是一個 IM(即時通訊軟體)，可能就會出現問題，當呼叫 message() 的時候，你不能做其它操作(例如：senfFile(送出檔案給對方))，你想送檔案給對方，呼叫 sendFile()，程式的控制權就會轉移到 sendFile() 中，也就是說這段時間 使用者無法再進行 訊息傳送、UI&amp;#8230;等等(UI 畫面會整個卡死)。&lt;/p&gt;

&lt;p&gt;當然這不是使用者所希望的，所以就有 &lt;strong&gt;多線程(Multithreading)&lt;/strong&gt; 的概念，可以幫助同時執行多項操作：UI、Message、sendFile、addFriend。聰明的你一定想到，那如果用多個進程是否也可以(UI.exe、sendFile.exe、addFirend.exe)？。&lt;/p&gt;

&lt;p&gt;答案是可以，前面忘記講一個很重要的概念，一個 進程(Process) 下面的一條或多條 線程(Thread)，部分資源(eg. 虛擬位址空間，檔案描述符和訊號處理&amp;#8230;等等)是共享的(呼叫棧(call stack)、暫存器環境(register context)、線程本地儲存(thread-local storage))、，也就是說 線程(Thread) 間的通信相對 進程(Process) 來說會比較容易。&lt;/p&gt;

&lt;p&gt;有研究過 防毒軟體(Antivirus software) 的人一定知道，有些 防毒軟體 兩、三個進程，有的軟體可以到 七、八個進程，分成多個 獨立進程 雖然有缺點，但是也有一些優點，例如：便於開發、更新、升級、穩定性(例如以 瀏覽器(browser) 的分頁來說 Firefox 單獨只有 firefox.exe 這個進程(可能還有另外一個 plugin-container.exe)，所有分頁是用多條線程完成，而 Chrome 則是每個分頁都相當於一個執行個體(多進程)，所以 Firefox 崩潰通常都是整個 進程 崩潰(plugin-container.exe 可能還活著)，而 Chrome 則透過多進程的方式避免一個分頁出問題，導致整個程序都出問題，當然相對 多線程 來說開發上會比較麻煩。&lt;/p&gt;

&lt;p&gt;&lt;img alt="chrome.exe" src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/september/01/04.png" class="center"/&gt;&lt;/p&gt;

&lt;h3&gt;番外篇：Intel 超線程技術(Hyper-Threading、超執行緒技術)&lt;/h3&gt;

&lt;p&gt;常常聽到賣家在強調 四核心八線程(執行緒)、&lt;strong&gt;超線程技術(H-T)&lt;/strong&gt;，這是什麼意思呢？。&lt;/p&gt;

&lt;p&gt;在 Intel 還沒有發展超線程技術前，一個 CPU核心 只能執行一條線程，四個CPU核心 只能執行四條線程，所以多核心可以一次執行四條線程的處理，而單核心一次只能執行一條線程(不具備多線程)，，所以後來有 多核心CPU 的概念，為了就是能夠一次執行多條線程操作。&lt;/p&gt;

&lt;p&gt;當然人類是不滿足的，為了能夠更加有效的利用資源，Intel 發展出 超線程技術(Hyper-Threading)，可以讓一個 CPU(物理核心) 變成兩個邏輯核心，也就是說 單核心的CPU 也能具備多線程的能力。&lt;/p&gt;

&lt;p&gt;當然，這種設計有利有弊，會造成耗電、發熱增高，所以 H-T 技術沉寂一段時間。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;單核心單線程時代能夠有線程的概念是由於作業系統實現 時分復用 的設計。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr&gt;&lt;p&gt;大致上就是這樣子，因為 Ming 沒有學過 作業系統 理論，所以可能描述的 理論過程 與實際上有些出入，還請各位先進、前輩不吝指教。&lt;/p&gt;

&lt;p&gt;還有一些 Mutual exclusion、Semaphore、時分復用 的概念沒寫到，有興趣可以自己找一下資料，描述了一些 作業系統&amp;lt;&amp;gt;線程(Thread) 間調度處理上的運作。&lt;/p&gt;

&lt;h3&gt;引用、參考資料&lt;/h3&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://ask.zol.com.cn/q/21945.html" title="四核心八线程和四核心的区别" target="_blank"&gt;四核心八线程和四核心的区别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.techbang.com/posts/1311-search-text-to-explain-words-hyper-threading-order-intel-core-i7-has-a-core-of-key-technologies-8" title="【搜文解字】超執行緒：令Intel Core i7擁有8核心的關鍵技術" target="_blank"&gt;【搜文解字】超執行緒：令Intel Core i7擁有8核心的關鍵技術&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html" title="进程与线程的一个简单解释" target="_blank"&gt;进程与线程的一个简单解释&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zh.wikipedia.org/zh-tw/%E6%8A%A2%E5%8D%A0%E5%BC%8F%E5%A4%9A%E4%BB%BB%E5%8A%A1%E5%A4%84%E7%90%86" title="搶佔式多任務處理" target="_blank"&gt;搶佔式多任務處理 - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zh.wikipedia.org/zh-tw/%E6%97%B6%E9%97%B4%E7%89%87" title="時間片" target="_blank"&gt;時間片 - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zh.wikipedia.org/zh-tw/%E7%BA%BF%E7%A8%8B" title="多核心處理器" target="_blank"&gt;多核心處理器 - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zh.wikipedia.org/zh-tw/%E7%BA%BF%E7%A8%8B" title="執行緒" target="_blank"&gt;執行緒 - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zh.wikipedia.org/zh-tw/%E5%A4%9A%E7%BA%BF%E7%A8%8B" title="多執行緒" target="_blank"&gt;多執行緒 - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zh.wikipedia.org/zh-tw/%E8%B6%85%E5%9F%B7%E8%A1%8C%E7%B7%92" title="超執行緒" target="_blank"&gt;超執行緒 - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mail.tajen.edu.tw/~reler/object/OOP4.ppt" title="程式，行程，執行緒" target="_blank"&gt;程式，行程，執行緒&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.alone.tw/post/59939987956</link><guid>http://blog.alone.tw/post/59939987956</guid><pubDate>Sun, 01 Sep 2013 13:23:00 +0800</pubDate><category>Other</category></item><item><title>避免 Google 重新定向(快速進入其它語系的 Google)</title><description>&lt;p&gt;今天想要找點英文資料，輸入一個關鍵字出來都是&amp;#8221;中文&amp;#8221;，bing 好像又找不太到，所以就決定去 google.us 了，結果發現無論是輸入：google.com 或者 google.us 都會被重定向到 google.com.tw，找了一下資料之後發現可以透過：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;google.us/&lt;font color="#ff0000"&gt;ncr&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;在 Google 網址後面加入 &lt;font color="#ff0000"&gt;ncr&lt;/font&gt; 的方式，避免 Google 自動定向到所屬國家去。&lt;/p&gt;</description><link>http://blog.alone.tw/post/58901770828</link><guid>http://blog.alone.tw/post/58901770828</guid><pubDate>Wed, 21 Aug 2013 17:00:00 +0800</pubDate><category>Other</category></item><item><title>[Windows] 更改系統預設 工作管理員(taskmgr.exe)</title><description>&lt;p&gt;最近覺得需要一款功能較為豐富、詳細的 Task Manager，最後選擇免費、開源的「Process Hacker 2」，Windows 老使用者在開管理員無外乎就是直接在工作列上「右鍵→啟動工作管理員」、「Ctrl+Shift+ESC(Windows 7改成這樣真的有夠難按)」，如果要啟動工作管理員還要跑到資料夾中去點，感覺有點麻煩，所以就找了一下資料，將系統預設 工作管理員 為 Process Hacker、Process Explorer &amp;#8230; 等等第三方工作管理員。&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;首先打開 regedit&lt;/li&gt;
&lt;li&gt;找到 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe]&lt;/li&gt;
&lt;li&gt;右鍵→新增→「字串值」&lt;/li&gt;
&lt;li&gt;名稱「Debugger」&lt;/li&gt;
&lt;li&gt;數值資料(第三方工作管理員路徑) 例如：「D:\Windows\PF\ProcessHacker\ProcessHacker.exe」&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;關閉 regedit 之後，在試著用習慣的方式進入預設工作管理員，就會發現預設打開的是第三方的工作管理員了!&lt;/p&gt;</description><link>http://blog.alone.tw/post/58478948624</link><guid>http://blog.alone.tw/post/58478948624</guid><pubDate>Sat, 17 Aug 2013 11:55:00 +0800</pubDate><category>Windows</category></item><item><title>[Windows] 開啟 Windows 虛擬解析度</title><description>&lt;p&gt;最近缺幾個 Icon 給 仿dock 使用，所以用 Photoshop 隨便打幾個字弄了一個出來(典型殺雞用牛刀)，想按另存新檔匯出的時候卻遲遲不跳出令存新檔視窗，試了一下還是無法讓他匯出，上網查了一下發現是解析度的問題，Photoshop 在小於 1024*768 的解析度底下，是跑不出另存新檔視窗的(可以儲存 .psd 但不能存其它格式)。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/july/28/downscalingsupported/02.png" alt="02"/&gt;&lt;/p&gt;

&lt;p&gt;知道原因出在哪裡後，趕緊去調整螢幕解析度，結果發現 Ming 這臺 Netbook 最高的解析度就是 1024*600(囧&amp;#8230;)，找了一些選項還是無法修改，最後只好上網找資料，很自然的輸入「虛擬解析度」這個關鍵字，拜 Netbook(小筆電) 風行一段時間所賜(加上許多人還捨不得讓他退役)，遇到相關問題的網友還挺多的，最後終於找到一篇有用的解法&amp;#8230;&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;h2&gt;開啟虛擬解析度&lt;/h2&gt;

&lt;ol&gt;&lt;li&gt;打開 regedit (註冊表編輯器)&lt;/li&gt;
&lt;li&gt;編輯(E)→尋找(F)&lt;/li&gt;
&lt;li&gt;尋找目標：display1_downscalingsupported&lt;/li&gt;
&lt;li&gt;Enter&lt;/li&gt;
&lt;li&gt;將值由 0 改為 1&lt;/li&gt;
&lt;li&gt;重新開機&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;重開機後，到 螢幕解析度 調整的地方：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/july/28/downscalingsupported/03.png" alt="02"/&gt;&lt;/p&gt;

&lt;p&gt;good job!，試一下 Photoshop 也可以正常另存圖片，當然畫面是強行模擬的，當然不可能有原始 1024*768 的清晰，使用完畢之後就趕緊調整回來了。&lt;/p&gt;

&lt;p&gt;最近比較多遇到這個問題的大概就是 Windows 8 Modern UI(Metro) 無法順利使用。&lt;/p&gt;

&lt;h2&gt;Q&amp;amp;A&lt;/h2&gt;

&lt;h3&gt;Q：找不到 display1_downscalingsupported 註冊表鍵值&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;有些顯示卡不支援此參數。可以考慮 虛擬桌面 軟體的方案，虛擬桌面軟體大都有 虛擬解析度 的功能，不過如果是為了使用 Windows 8 Modern UI 那虛擬桌面大概也無解了，請節哀 &amp;#8230; (或者可以試試看網路上提供的一些 虛擬解析度 軟體，沒使用過就不多做介紹)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Q：此解決方案適用於？&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;Windows XP/Vista/7/8 都可以試試看(原先找到的介紹頁面是 work 在 Windows 8 底下，而 Ming 在 Windows 7 底下也找的到)，故可以猜測這個註冊表鍵值應該不是系統原生鍵值，而是因各家顯示卡驅動而異。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;參考資料&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://studyhost.blogspot.tw/2012/04/1024x768windows-8-metro-apps.html" title="讓解析度低於1024x768的小平板(或觸控小筆電)可以運行Windows 8 Metro Apps" target="_blank"&gt;解析度低於1024x768的小平板(或觸控小筆電)可以運行Windows 8 Metro Apps - .NET Walker&lt;/a&gt;;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.alone.tw/post/56680235758</link><guid>http://blog.alone.tw/post/56680235758</guid><pubDate>Sun, 28 Jul 2013 17:40:00 +0800</pubDate><category>Windows</category></item><item><title>[Linux] LinuxMint 安裝 gcin(使用 Terminal)</title><description>&lt;p&gt;最近把慣用的 Linux-based 系統從 Ubuntu 換成 LinuxMint 了，LinuxMint 算是最近蠻火紅的 Linux-based，訴求主要還是面向一般使用者，安裝 LinuxMint 13 KDE(Maya；Long Term Support) 後，發現竟然沒有內建中文輸入法，於是只好自己動手安裝了。&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h2&gt;Install&lt;/h2&gt;

&lt;p&gt;安裝過程仰賴 Terminal。&lt;/p&gt;

&lt;h3&gt;Step 1&lt;/h3&gt;

&lt;p&gt;取得 root 權限&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;sudo -i -H&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Step 2&lt;/h3&gt;

&lt;p&gt;匯入金鑰&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;sudo apt-key adv &amp;#8212;keyserver keyserver.ubuntu.com &amp;#8212;recv-keys 835AB0E3&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Step 3&lt;/h3&gt;

&lt;p&gt;加入更新源&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;echo &amp;#8220;deb &lt;a href="http://cle.linux.org.tw/gcin/download/debian" target="_blank"&gt;http://cle.linux.org.tw/gcin/download/debian&lt;/a&gt; eliu release&amp;#8221;&amp;#160;&amp;#187; /etc/apt/sources.list&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;或者(上下擇一即可)，利用 vim(或者 vi) 手動加入一行&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;vim /etc/apt/sources.list
  加入：deb &lt;a href="http://cle.linux.org.tw/gcin/download/debian" target="_blank"&gt;http://cle.linux.org.tw/gcin/download/debian&lt;/a&gt; eliu release&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Step 4&lt;/h3&gt;

&lt;p&gt;更新源並安裝 gcin&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;sudo apt-get update
  sudo apt-get install gcin&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;完成!&lt;/p&gt;</description><link>http://blog.alone.tw/post/56509194375</link><guid>http://blog.alone.tw/post/56509194375</guid><pubDate>Fri, 26 Jul 2013 19:03:50 +0800</pubDate><category>Linux</category></item><item><title>[Firefox OS] Firefox OS + ZTE Open  實機試玩</title><description>&lt;p&gt;今天以 COSCUP 線路組組員身分參加「COSCUP 2013 Hands-on」，活動的主題名稱是：「一小時 Firefox OS App 就上手」，講者是「Mozilla Taipei 工程師團隊」，演講內容主要是 Firefox OS App Develop，現場也有開放 ZTE Open 手機實機試玩!&lt;/p&gt;

&lt;p&gt;不囉嗦先上模糊的圖吧&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;&lt;img src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/july/24/01.jpg" width="525" alt="01"/&gt;&lt;img src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/july/24/02.jpg" width="525" alt="02"/&gt;&lt;img src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/july/24/03.jpg" width="525" alt="03"/&gt;&lt;img src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/july/24/04.jpg" width="525" alt="04"/&gt;&lt;img src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/july/24/05.jpg" width="525" alt="05"/&gt;&lt;img src="https://sites.google.com/a/alone.tw/space/images/blog/article/2013/july/24/06.jpg" width="525" alt="06"/&gt;&lt;/p&gt;

&lt;h2&gt;模擬器環境&lt;/h2&gt;

&lt;p&gt;Firefox OS App 是用 HTML+ CSS+JavaScript+Web API 做開發，開發的概念也很新潮，Firefox OS App 的概念是把 網頁 包裝成 App 的形式。&lt;/p&gt;

&lt;p&gt;想要開發 Firefox OS App，建議最少安裝 Firefox OS 模擬器(Firefox OS Simulator)，Firefox OS 模擬器速度相較於 Android 速度上優異許多，而且是用 Firefox Plugin 形式包裝，內帶一個簡單的除錯器，也推薦可以搭配 Firebug plugin。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://nightly.mozilla.org/" title="Firefox Nightly Builds" target="_blank"&gt;《Firefox Nightly》&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://addons.mozilla.org/zh-tw/firefox/addon/firefox-os-simulator/" title="Firefox OS Simulator" target="_blank"&gt;《Firefox OS Simulator》&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://addons.mozilla.org/zh-tw/firefox/addon/firebug/?src=search" title="Firebug" target="_blank"&gt;《Firebug》&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;開發資源&lt;/h2&gt;

&lt;p&gt;Hands-on 現場，Mozilla Taipei 有提供一些簡報，並釋出 PDF 版供下載，Ming 有備份一份當天的簡報起來，有興趣的可以下載來看(版權為 Mozilla Taipei 工程師團隊所有)：&lt;/p&gt;

&lt;h3&gt;簡報&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.google.com/file/d/0B8nXqBt2HVnJcHZhN0pFd3FiRGs/edit?usp=sharing" title="COSCUP_HandsOn_WebAPI.pdf" target="_blank"&gt;《2013 COSCUP Hands On - Firefox OS Web API》&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.google.com/file/d/0B8nXqBt2HVnJMV9JR2xBdHA2TkE/edit?usp=sharing" title="Firefox_OS_Simulator.pdf" target="_blank"&gt;《2013 COSCUP Hands On - Firefox OS Simulator》&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.google.com/file/d/0B8nXqBt2HVnJN3JqZVZsLW00dDg/edit?usp=sharing" title="Firefox_Marketplace.pdf" target="_blank"&gt;《2013 COSCUP Hands On - Firefox Marketplace》&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Firefox OS MDN&lt;/h3&gt;

&lt;p&gt;MDN，內有不少 Firefox OS Develop 資源，有興趣可以翻一下裡面的相關文件。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS" title="Firefox OS - Mozilla | MDN" target="_blank"&gt;《Firefox OS MDN》&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;To Do List Example App&lt;/h2&gt;

&lt;p&gt;Hands-on 現場，Mozilla Taipei 工程師團隊 有提供一個 Firefox OS App example，用 Web API 去實現一個 To Do List(版權為 Mozilla Taipei 工程師團隊所有)。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.google.com/file/d/0B8nXqBt2HVnJS2xOZm1TbHhLU1k/edit?usp=sharing" title="todo.zip" target="_blank"&gt;《To Do List App Example for Firefox OS Download》&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;結語&lt;/h2&gt;

&lt;p&gt;Firefox OS 相較 Android/iOS 沒有太大的亮點(開發部分的 Web API 還有網頁包裝的概念還挺新潮的)，設備的流暢性又欠佳(雖然這應該是硬體的問題，不過今天操作過程確實有點卡卡，給人的印象就是有點不太好)，加上 Marketplace 相較於 Google Play 的數量又是天差地遠，Firefox OS 唯一的優勢大概就是質的部分(有一套上架準則)。&lt;/p&gt;

&lt;p&gt;總覺得 Firefox OS 會扮演手機界 Linux 的腳色(一股清流，也意味著不會大紅大紫Orz..)，不過我想 Mozilla 的初衷應該也是這樣子！？。&lt;/p&gt;</description><link>http://blog.alone.tw/post/56330146875</link><guid>http://blog.alone.tw/post/56330146875</guid><pubDate>Wed, 24 Jul 2013 21:08:00 +0800</pubDate><category>Firefox OS</category></item><item><title>[Linux]apt-get update 出現 ppa.launchpad.net 404 Not Found</title><description>&lt;p&gt;今天在 Konsole 中使用 apt-get update 指令，結果一直返回錯誤結果，仔細看了一下錯誤提示，顯示無法取得某個後來加入的 ppa 源。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;W: 無法取得 &lt;a href="http://ppa.launchpad.net/blueman/ppa/ubuntu/dists/precise/main/source/Sources%EF%BC%8C404" target="_blank"&gt;http://ppa.launchpad.net/blueman/ppa/ubuntu/dists/precise/main/source/Sources，404&lt;/a&gt;  Not Found&lt;br/&gt;
  W: 無法取得 &lt;a href="http://ppa.launchpad.net/blueman/ppa/ubuntu/dists/precise/main/binary-i386/Packages%EF%BC%8C404" target="_blank"&gt;http://ppa.launchpad.net/blueman/ppa/ubuntu/dists/precise/main/binary-i386/Packages，404&lt;/a&gt;  Not Found&lt;br/&gt;
  錯誤 &lt;a href="http://ppa.launchpad.netprecise/mainSources" target="_blank"&gt;http://ppa.launchpad.netprecise/mainSources&lt;/a&gt; 404  Not Found&lt;br/&gt;
  錯誤 &lt;a href="http://ppa.launchpad.net" target="_blank"&gt;http://ppa.launchpad.net&lt;/a&gt; precise/main i386 Packages 404  Not Found&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;h2&gt;解決方法&lt;/h2&gt;

&lt;p&gt;上網找了一下，問題很快就有解答了，原因應該是出自該 ppa  源被砍檔，所以會報錯。&lt;/p&gt;

&lt;p&gt;只要把該報錯的 ppa 源刪除即可，作法也不難，所有 ppa 源都會在 /etc/apt/sources.list.d/ 這個路徑下面&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;sudo cd /etc/apt/sources.list.d/&lt;br/&gt;
  ls&lt;br/&gt;
  rm -i &lt;em&gt;ppaname.list&lt;/em&gt; &lt;em&gt;ppaname.list.save&lt;/em&gt;&lt;br/&gt;
  rm：是否移除普通檔案‘blueman-ppa-precise.list’? y&lt;br/&gt;
  rm：是否移除普通檔案‘blueman-ppa-precise.list.save’? y&lt;br/&gt;
  apt-get update&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;參考資料&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://lvii.is-programmer.com/2011/12/6/remove-ppa-apt-repository.31183.html" title="PPA 源删除" target="_blank"&gt;PPA 源删除 - 一木不成林&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.alone.tw/post/55163684796</link><guid>http://blog.alone.tw/post/55163684796</guid><pubDate>Thu, 11 Jul 2013 18:08:00 +0800</pubDate><category>linux</category></item><item><title>XAMPP for Windows 設置</title><description>&lt;p&gt;最近需要使用到 AMP(Apache + MySQL + PHP) 環境，原本首選是Drupal 社群的 TWAMP 麻瓜架站包(也用好幾年了)，不過在 Windows 7 環境有點不如意，所以輾轉找其它解決方案，最後決定使用 XAMPP。&lt;/p&gt;

&lt;p&gt;之前在租屋處有設置過一次，不過隔了一些時間想要在家裡電腦也佈署一下發現好像細節都忘記了，決定寫篇文章把要調整的一些小地方筆記一下。&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Name：XAMPP&lt;/li&gt;
&lt;li&gt;Web Links：&lt;a href="http://www.apachefriends.org/" title="XAMPP Offical Website" target="_blank"&gt;http://www.apachefriends.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;About：XAMPP是一個把Apache網頁伺服器與PHP、Perl及MySQL集合在一起的安裝包，允許用戶可以在自己的電腦上輕易的建立網頁伺服器。&lt;/li&gt;
&lt;li&gt;Download：&lt;a href="http://www.apachefriends.org/en/xampp.html" title="XAMPP Download" target="_blank"&gt;《link》&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;銘使用 XAMPP for Windows Portable(v1.8.1)，並在 Windows XP SP3 運行。&lt;/p&gt;

&lt;h2&gt;Setup&lt;/h2&gt;

&lt;ol&gt;&lt;li&gt;Portable 版本下載後解壓縮到本地端。(任意:\xampp)&lt;/li&gt;
&lt;li&gt;執行 :\xampp\ 目錄底下的 setup_xampp.bat&lt;/li&gt;
&lt;li&gt;執行 xampp-control.exe&lt;/li&gt;
&lt;li&gt;Start Apache、Mysql 兩個 Moduble，Status change detected: running 出現且 Module 轉成綠色底色代表 start 成功。&lt;sup&gt;[1]&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;進入 &lt;a href="http://localhost/xampp/index.php" title="XAMPP localhost" target="_blank"&gt;http://localhost/xampp/index.php&lt;/a&gt; 並 選擇語系。&lt;/li&gt;
&lt;li&gt;成功進入後臺。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;出現 Error: Apache shutdown unexpectedly. 可能的情況是：1. XAMPP 位於多層目錄之下，且未執行 setup_xampp.bat 2. 端口遭到占用，可以使用 netstat -nao(or：netstat -nao | find &amp;#8220;0.0.0.0:&lt;em&gt;XX&lt;/em&gt;&amp;#8221;) 並且配合 tasklist /fi &amp;#8220;pid eq &lt;em&gt;PID&lt;/em&gt;" 找出占用端口並 kill。&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;Security&lt;/h2&gt;

&lt;p&gt;開心地安裝完之後，可以開始檢視 XAMPP 後臺提供的各項參數，在左邊頁面中可以看到 Security(安全) 項目，點進去後會發現預設設定的 XAMPP 三項安全檢查都是呈現 不安全 的紅字，XAMPP 預設沒有針對 XAMPP 後臺、Mysql、phpmyadmin 設置密碼，為了安全考量建議設置上密碼。&lt;/p&gt;

&lt;p&gt;要設置 XAMPP 後臺(.htaccess 目錄保護)、Mysql、phpmyadmin 請連結至：&lt;a href="http://localhost/security/xamppsecurity.php" title="XAMPP Security setting" target="_blank"&gt;http://localhost/security/xamppsecurity.php&lt;/a&gt; 可以針對這些項目做設定。[1]&lt;/p&gt;

&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;勾選 Safe plain password in text file? 選項，會將設定的密碼明文存放至 xampp\security\xamppdirpasswd.txt / mysqlrootpasswd.txt 中&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;Remark&lt;/h2&gt;

&lt;ol&gt;&lt;li&gt;網頁檔案置於 xampp\htdocs 目錄中。&lt;/li&gt;
&lt;li&gt;phpmyadmin 地址：&lt;a href="http://localhost/phpmyadmin/" title="XAMPP phpmyadmin" target="_blank"&gt;http://localhost/phpmyadmin/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;bin 目錄位於 xampp\mysql\bin (存放 mysql.exe 等等文件)。&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;Reference&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://goo.gl/8ylbQ" title="【系】如何查詢哪個程式佔用了指定Port" target="_blank"&gt;【系】如何查詢哪個程式佔用了指定Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.apachefriends.org/zh_tw/xampp-windows.html#1953" title="XAMPP Q&amp;amp;A" target="_blank"&gt;XAMPP Q&amp;amp;A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cfanist.blogspot.tw/2008/10/xampp.html" title="Xampp的Web登入管理設定檔位置" target="_blank"&gt;Xampp的Web登入管理設定檔位置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.yam.com/linjahau/article/11490142" title="xampp security setting manual" target="_blank"&gt;xampp security setting manual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.alone.tw/post/50746514821</link><guid>http://blog.alone.tw/post/50746514821</guid><pubDate>Sun, 19 May 2013 02:36:00 +0800</pubDate><category>Server</category></item><item><title>int main(int argc, char **argv)</title><description>&lt;p&gt;關於 C/C++ 入口函數 main() 的參數，「int argc / char **argv」，銘看過的入門書剛開始都選擇跳過解釋這兩個參數，個人猜測是因為還沒有講到 function 概念，所以沒有講，今天看 Windows API 的 example 的時候，發現書上的 example 使用了很大量的 int argc / char **argv，當時在火車上其實我有點納悶這兩個參數，我知道這是一些 IDE 會自行加入的參數，不過沒有太多印象，手邊也沒有網路，只能透過 example 大概知道是再命令列中的附加參數讀取。&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;到了租屋處後，找了一下資料，初步了解 argc / argv 兩個參數的用途，簡單的說就是可以在外部命令列中加入附加的參數，並且透由 argc / argv 協作讀取使用者填寫的參數。&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;int argc // 附加參數數量(同時也是 argv 的大小)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;例如有一個程式 shutdown.exe，我在命令列中輸入：&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;shutdown.exe -r -t 0&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;argc 的值會是：4&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;char **argv(char ^argv) // 紀錄各個參數。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;argv 的大小 = 使用者輸入的參數數目大小。&lt;/p&gt;
&lt;p&gt;可以透過：&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;argv[i]&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;方式讀入命令列輸入的參數，延續上面的例子&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;cout &amp;#171;&amp;#160;argv[0]; // 輸出：shutdown.exe&lt;/li&gt;
&lt;li&gt;cout &amp;#171;&amp;#160;argv[1]; // 輸出：-r&lt;/li&gt;
&lt;li&gt;cout &amp;#171;&amp;#160;argv[2]; // 輸出：-t&lt;/li&gt;
&lt;li&gt;cout &amp;#171;&amp;#160;argv[3]; // 輸出：-0&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;如果要讀取使用者所有輸入的參數可以：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;for(int i = 0;i &amp;lt; argc;i++)&lt;br/&gt;{&lt;br/&gt;        cout &amp;#171;&amp;#160;argv[i] &amp;#171;&amp;#160;endl;&lt;br/&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;即可讀到命令列所送進的所有參數。&lt;/p&gt;
&lt;p&gt;參考資料：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.opencv.org.cn/index.php?title=Main%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0argc%EF%BC%8Cargv%E8%AF%B4%E6%98%8E&amp;amp;variant=zh-tw" target="_blank"&gt;http://www.opencv.org.cn/index.php?title=Main%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0argc%EF%BC%8Cargv%E8%AF%B4%E6%98%8E&amp;amp;variant=zh-tw&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://welkinchen.pixnet.net/blog/post/18122440--int-main%28int-argc,-char*-argv%5B%5D%29-%E5%8F%83%E6%95%B8%E7%9A%84%E4%BD%9C%E7%94%A8" target="_blank"&gt;http://welkinchen.pixnet.net/blog/post/18122440&amp;#8212;int-main%28int-argc,-char*-argv%5B%5D%29-%E5%8F%83%E6%95%B8%E7%9A%84%E4%BD%9C%E7%94%A8&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.alone.tw/post/50343240459</link><guid>http://blog.alone.tw/post/50343240459</guid><pubDate>Mon, 13 May 2013 22:41:00 +0800</pubDate><category>C/C++</category></item></channel></rss>
