<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="http://blog.markplace.net/styles/rss.css" type="text/css"?>
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
>
 <channel>
  <atom:link href="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20" rel="self" type="application/rss+xml" />
  <title>&#x4d;&#x61;&#x72;&#x6b;&#x27;&#x73;&#x20;&#x50;&#x6c;&#x61;&#x63;&#x65;</title>
  <link>http://blog.markplace.net/</link>
  <description> A place for Mark's murmuring, blah, blah, blah, ... 
</description>
  <pubDate>Tue, 25 Nov 2025 09:59:29 +0000</pubDate>
  <generator>http://lifetype.net</generator>
    <item>
   <title>&#x48;&#x6f;&#x77;&#x20;&#x74;&#x6f;&#x20;&#x61;&#x64;&#x64;&#x20;&#x70;&#x61;&#x73;&#x73;&#x77;&#x6f;&#x72;&#x64;&#x20;&#x70;&#x72;&#x6f;&#x74;&#x65;&#x63;&#x74;&#x69;&#x6f;&#x6e;&#x20;&#x69;&#x6e;&#x20;&#x43;&#x6f;&#x64;&#x65;&#x49;&#x67;&#x6e;&#x69;&#x74;&#x65;&#x72;&#x20;&#x53;&#x63;&#x61;&#x66;&#x66;&#x6f;&#x6c;&#x64;&#x69;&#x6e;&#x67;</title>
   <description>
    &lt;p&gt;
It is really bad that &lt;a href=&quot;http://codeigniter.com/&quot;&gt;CodeIgniter&lt;/a&gt; does not support password protection in scaffolding. I just go thorugh most scaffolding related posts in &lt;a href=&quot;http://codeigniter.com/forums/&quot;&gt;CodeIgniter forum&lt;/a&gt;, it seems no easy and clear solution for it. So, I just come out my own based on &lt;a href=&quot;http://codeigniter.com/user_guide/general/hooks.html&quot;&gt;hooks function&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Here comes the code. Just follow it, and you will get a simple password protection for scaffolding:
&lt;/p&gt;
&lt;p&gt;
1. Enable hook in your CodeIgniter application 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	application/config.php 
	&lt;/p&gt;
	&lt;p&gt;
	[...]&lt;br /&gt;
	$config[&#039;enable_hooks&#039;] = TRUE; &lt;br /&gt;
	[...]
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
2. Add a hook setting for pre-controller
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	application/hooks.php
	&lt;/p&gt;
	&lt;p&gt;
	[...]&lt;br /&gt;
	$hook[&#039;pre_controller&#039;][] = array(&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#039;class&#039;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; &#039;SimpleHttpAuth&#039;,&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#039;function&#039; =&amp;gt; &#039;authenticate&#039;,&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#039;filename&#039; =&amp;gt; &#039;SimpleHttpAuth.php&#039;,&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#039;filepath&#039; =&amp;gt; &#039;hooks/SimpleHttpAuth&#039;,&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#039;params&#039;&amp;nbsp;&amp;nbsp; =&amp;gt; array()&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;
	[...]
	&lt;/p&gt;
&lt;/blockquote&gt;
&amp;nbsp;
&lt;p&gt;
3. Put the following scripts into application/hooks/SimpleHttpAuth/SimpleHttpAuth.php 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&amp;lt;?php&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; class SimpleHttpAuth&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private $user = &amp;quot;username&amp;quot;;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private $pass = &amp;quot;password&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function __constructor()&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
	&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function authenticate()&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $router =&amp;amp; load_class(&#039;Router&#039;);&lt;br /&gt;
	&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if($router-&amp;gt;scaffolding_request === TRUE)&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!$this-&amp;gt;isAuthenticated()) {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; header(&#039;WWW-Authenticate: Basic realm=&amp;quot;Scaffolding&amp;quot;&#039;);&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; header(&#039;HTTP/1.1 401 Unauthorized&#039;);&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; die(&#039;Authorization Required&#039;);&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
	&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function isAuthenticated() {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isset($_SERVER[&#039;PHP_AUTH_USER&#039;]) &amp;amp;&amp;amp; isset($_SERVER[&#039;PHP_AUTH_PW&#039;])) {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $httpd_username = filter_var($_SERVER[&#039;PHP_AUTH_USER&#039;], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW);&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $httpd_password = filter_var($_SERVER[&#039;PHP_AUTH_PW&#039;], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW);&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($httpd_username == $this-&amp;gt;user &amp;amp;&amp;amp; $httpd_password == $this-&amp;gt;pass) {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return TRUE;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
	&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
	?&amp;gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Now, you can have password protection scaffolding in CodeIgniter. 
&lt;/p&gt;
   </description>
   <link>http://blog.markplace.net/marks_place/15/2009/10/06/404</link>
   <comments>http://blog.markplace.net/marks_place/15/2009/10/06/404</comments>
   <guid>http://blog.markplace.net/marks_place/15/2009/10/06/404</guid>
      <dc:creator>markwu</dc:creator>
      
    <category>可以做人幹嘛寫程式</category>
         <pubDate>Tue, 06 Oct 2009 10:50:48 +0000</pubDate>
   <source url="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20">Mark&#039;s Place</source>
     </item>
    <item>
   <title>&#xe6;&#x88;&#x91;&#xe5;&#x80;&#x91;&#xe7;&#x9c;&#x9f;&#xe7;&#x9a;&#x84;&#xe9;&#x83;&#xbd;&#xe9;&#x82;&#xa3;&#xe9;&#xba;&#xbc;&#xe5;&#xae;&#xb9;&#xe6;&#x98;&#x93;&#xe8;&#xa2;&#xab;&#xe7;&#x85;&#xbd;&#xe5;&#x8b;&#x95;&#xe5;&#x97;&#x8e;&#xef;&#xbc;&#x9f;</title>
   <description>
    &lt;p&gt;
我們真的都那麼容易被煽動嗎？。對！真的就有那麼容易。
&lt;/p&gt;
&lt;p&gt;
最近有消息說到 Yahoo 不準用帳號裡面有 taiwan 或是 taipei 等字眼來註冊，很多人就開始磨刀霍霍向 Yahoo，開始說 Yahoo 不尊重台灣人云云。我無法證實 Yahoo 到底有沒有這樣的想法，但是從程式角度來說，這純粹是 Yahoo 的 bug 吧（或說是把規格定的太嚴謹了）。
&lt;/p&gt;

&lt;p&gt;
要判斷帳號裡面有沒有某些字串，在 PHP 裡面的寫法通常是： 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$pattern = &amp;quot;taiwan&amp;quot;;&lt;br /&gt;
	if( !strstr( $userName, $pattern ) )&lt;br /&gt;
	... 註冊程序 ...
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
或是用
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$pattern = &amp;quot;taiwan&amp;quot;;&lt;br /&gt;
	if( !strpos( $userName, $pattern ) )&lt;br /&gt;
	... 註冊程序 ...
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
或者還可以用 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$pattern = &amp;quot;/taiwan/&amp;quot;&lt;br /&gt;
	if( !preg_match( $pattern, $userName ) )&lt;br /&gt;
	... 註冊程序 ...
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
這些寫法，不僅無法讓使用者用 taiwan 來註冊，當然也無法用 ilovetaiwan 或是 iliveintaiwan 來註冊。
&lt;/p&gt;
&lt;p&gt;
而這個只要調整一下程式，應該馬上就可以解決了。 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$pattern = &amp;quot;taiwan&amp;quot;&lt;br /&gt;
	if( $userName != $pattern ) )&lt;br /&gt;
	... 註冊程序 ...
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
為什麼 Yahoo 要這樣做？假設你的網站允許使用者有次網域，請問你允不允許使用者的網址是 admin.yahoo.com 還是 webmaster.yahoo.com，這會不會讓人誤會這兩個網址是 Yahoo 的官方網站？
&lt;/p&gt;
&lt;p&gt;
所以～當然你還是可以繼續相信這是 Yahoo 故意欺負台灣人；而我比較想相信這應該是無心的 bug。
&lt;/p&gt;
&lt;p&gt;
不過也還好有那麼多人討論這件事，Yahoo 才願意把這個 Bug 修正吧！
&lt;/p&gt;
   </description>
   <link>http://blog.markplace.net/marks_place/15/2008/11/14/395</link>
   <comments>http://blog.markplace.net/marks_place/15/2008/11/14/395</comments>
   <guid>http://blog.markplace.net/marks_place/15/2008/11/14/395</guid>
      <dc:creator>markwu</dc:creator>
      
    <category>可以做人幹嘛寫程式</category>
         <pubDate>Fri, 14 Nov 2008 15:49:53 +0000</pubDate>
   <source url="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20">Mark&#039;s Place</source>
     </item>
    <item>
   <title>&#xe8;&#xb7;&#xa8;&#xe7;&#xb6;&#xb2;&#xe5;&#x9f;&#x9f;&#xe7;&#x9a;&#x84;&#x20;&#x46;&#x6c;&#x61;&#x73;&#x68;&#x20;&#xe6;&#x96;&#x87;&#xe4;&#xbb;&#xb6;&#xe5;&#xad;&#x98;&#xe5;&#x8f;&#x96;&#xe7;&#xb6;&#xb2;&#xe7;&#xab;&#x99;&#xe8;&#xb3;&#x87;&#xe6;&#x96;&#x99;</title>
   <description>
    &lt;p&gt;
最近遇到一個跨網域的 Flash 文件存取網站資料問題。透過 Google 找了一些資料，發現基本上 Flash 文件是不允許你跨網域（甚至是次網域）存取網站資料的。如果你希望 Flash 能夠跨網域存取網站資料，唯一的方式是在 Flash 文件存放的目錄中，加上一個原則檔 crossdomain.xml，裡面可以描述對這個 Flash 的存取原則：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
	&amp;lt;!DOCTYPE cross-domain-policy SYSTEM &amp;quot;http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;cross-domain-policy&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;allow-access-from domain=&amp;quot;*.abc.com&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;allow-access-from domain=&amp;quot;*.def.com&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/cross-domain-policy&amp;gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
這表示 *.abc.com 與 *.def.com 都可以透過這個 Flash 文件來存取網站資料。
&lt;/p&gt;
&lt;p&gt;
更詳細的資料請參考：&lt;a href=&quot;http://livedocs.adobe.com/flash/9.0_tw/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;amp;file=00001085.html&quot;&gt;允許跨網域資料載入&lt;/a&gt;。 
&lt;/p&gt;
   </description>
   <link>http://blog.markplace.net/marks_place/15/2008/11/02/392</link>
   <comments>http://blog.markplace.net/marks_place/15/2008/11/02/392</comments>
   <guid>http://blog.markplace.net/marks_place/15/2008/11/02/392</guid>
      <dc:creator>markwu</dc:creator>
      
    <category>可以做人幹嘛寫程式</category>
         <pubDate>Sun, 02 Nov 2008 17:35:40 +0000</pubDate>
   <source url="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20">Mark&#039;s Place</source>
     </item>
    <item>
   <title>&#xe9;&#x80;&#x8f;&#xe9;&#x81;&#x8e;&#x20;&#x53;&#x61;&#x6d;&#x62;&#x61;&#x20;&#xe5;&#x9c;&#xa8;&#x20;&#x57;&#x69;&#x6e;&#x64;&#x6f;&#x77;&#x73;&#x20;&#x58;&#x50;&#x20;&#x28;&#x48;&#x6f;&#x73;&#x74;&#x29;&#x20;&#xe8;&#x88;&#x87;&#x20;&#x56;&#x4d;&#x77;&#x61;&#x72;&#x65;&#x20;&#x55;&#x62;&#x75;&#x6e;&#x74;&#x75;&#x20;&#x28;&#x47;&#x75;&#x65;&#x73;&#x74;&#x29;&#x20;&#xe4;&#xb8;&#xad;&#xe5;&#x85;&#xb1;&#xe7;&#x94;&#xa8;&#xe6;&#xaa;&#x94;&#xe6;&#xa1;&#x88;</title>
   <description>
    &lt;p&gt;
在使用 Samba 前，請先記得 K 一下&lt;a href=&quot;http://linux.vbird.org/&quot;&gt;鳥哥的 Linux 私房菜&lt;/a&gt;中有關 &lt;a href=&quot;http://linux.vbird.org/linux_server/0370samba.php&quot;&gt;Samba 伺服器&lt;/a&gt;的章節，除了使用手冊外，大概找不到更清楚的文件了。
&lt;/p&gt;
&lt;p&gt;
在 Ubuntu 8.10 的 Server 安裝當中，可以事先將 Samba Server 裝上，免除還要再安裝 Samba Server。如果忘了裝，直接透過 apt-get 也可以很簡單的安裝：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo apt-get install samba&lt;/strong&gt; (透過 apt-get 安裝 Samba)&lt;/span&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
安裝好了後，Ubunut 中的 /etc/samba/smb.conf 已經足以應付大部分的設定（預設使用 Ubunut 內的帳號與密碼，不需另外設定），但是還是稍做修改才能讓你存取到自己 /home 目錄下的檔案，修改如下（我只列出有修改的部分）： 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	[global]&lt;br /&gt;
	   unix charset = utf8&lt;br /&gt;
	   display charset = utf8&lt;br /&gt;
	   dos charset = cp950&lt;br /&gt;
	   security = user&lt;br /&gt;
	[homes]&lt;br /&gt;
	   comment = Home Directories&lt;br /&gt;
	   browseable = no&lt;br /&gt;
	   read only = no&lt;br /&gt;
	   create mask = 0644&lt;br /&gt;
	   directory mask = 0755&lt;br /&gt;
	   valid users = %S 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
改完後記得要重啟 Samba 設定：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo /etc/init.d/samba restart&lt;/strong&gt; (重啟 Samba 伺服器) &lt;/span&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
如果，有時間可以仔細看一下 /etc/samba/smb.conf 中的一些敘述，他建議以下列的方式來修改 smb.conf： 
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo cp smb.conf smb.conf.master&lt;/strong&gt; (先將 smb.conf 複製到 smb.conf.master)&lt;/span&gt;&lt;br /&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo vim smb.conf.master&lt;/strong&gt; (直接修改 smb.conf.master 而非 smb.conf)&lt;/span&gt;&lt;br /&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;su root&lt;/strong&gt; (切換到 root 權限)&lt;/span&gt;&lt;br /&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;testparm -s smb.conf.master &amp;gt; smb.conf&lt;/strong&gt; (透過 testparm 來檢查 smb.conf.master 的語法正確性，並且把沒用的東西拿掉，然後存到 smb.conf)&lt;/span&gt;&lt;br /&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;exit&lt;/strong&gt; (離開 root)&lt;/span&gt;&lt;br /&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo /etc/init.d/samba restart&lt;/strong&gt; (重新啟動 Samba 伺服器)&lt;/span&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
然後你就可以在 Windows XP 下透過 \\ubuntu-ip\username 來存取你的 home 目錄，當然你得要輸入自己在 Ubuntu 中的帳號與密碼。
&lt;/p&gt;
&lt;p&gt;
其實如果你的 VMware 中的 Ubuntu 是透過 NAT 來連結網路，那麼比較簡單的方式，是用 Samba 讓某個目錄整個開放，/etc/samba/smb.conf 的修改如下（我只列出有修改的部分）：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	[global]&lt;br /&gt;
	   unix charset = utf8&lt;br /&gt;
	   display charset = utf8&lt;br /&gt;
	   dos charset = cp950&lt;br /&gt;
	   security = share&lt;br /&gt;
	[myfiles]&lt;br /&gt;
	   comment = My Files&lt;br /&gt;
	   path = /home/username&lt;br /&gt;
	   browseable = no&lt;br /&gt;
	   read only = no&lt;br /&gt;
	   create mask = 0644&lt;br /&gt;
	   directory mask = 0755&lt;br /&gt;
	   public = yes 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
然後重啟 Samba 伺服器，直接在 Windows XP下透過 //ubuntu-ip 或是直接在網路芳鄰中，就可以瀏覽了。
&lt;/p&gt;
&lt;p&gt;
其他就不多寫了，因為鳥哥的文件寫得很清楚，Ubuntu 的 &lt;a href=&quot;https://help.ubuntu.com/community/SettingUpSamba&quot;&gt;Setting Up Samba&lt;/a&gt; 英文文件也寫得很清楚。 &lt;br /&gt;
&lt;/p&gt;
   </description>
   <link>http://blog.markplace.net/marks_place/15/2008/11/02/391</link>
   <comments>http://blog.markplace.net/marks_place/15/2008/11/02/391</comments>
   <guid>http://blog.markplace.net/marks_place/15/2008/11/02/391</guid>
      <dc:creator>markwu</dc:creator>
      
    <category>可以做人幹嘛寫程式</category>
         <pubDate>Sun, 02 Nov 2008 17:11:33 +0000</pubDate>
   <source url="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20">Mark&#039;s Place</source>
     </item>
    <item>
   <title>&#xe5;&#x9c;&#xa8;&#x20;&#x57;&#x69;&#x6e;&#x64;&#x6f;&#x77;&#x73;&#x20;&#x58;&#x50;&#x20;&#x28;&#x48;&#x6f;&#x73;&#x74;&#x29;&#x20;&#xe8;&#x88;&#x87;&#x20;&#x56;&#x4d;&#x77;&#x61;&#x72;&#x65;&#x20;&#x55;&#x62;&#x75;&#x6e;&#x74;&#x75;&#x20;&#x28;&#x47;&#x75;&#x65;&#x73;&#x74;&#x29;&#x20;&#xe4;&#xb8;&#xad;&#xe5;&#x85;&#xb1;&#xe7;&#x94;&#xa8;&#xe7;&#xa1;&#xac;&#xe7;&#xa2;&#x9f;&#xe7;&#x9a;&#x84;&#xe6;&#x96;&#xb9;&#xe5;&#xbc;&#x8f;</title>
   <description>
    &lt;p&gt;
&lt;a href=&quot;http://blog.markplace.net/marks_place/15/2008/11/01/389&quot;&gt;在 VMware 中的 Ubuntu 新增硬碟的方式這一篇文章中&lt;/a&gt;，描述了如何為 Ubuntu 新增新的硬碟。透過 VMware 的 Hard disk mapping 功能，我們則可以把這顆新增的硬碟對應成 Windows XP 的一台新硬碟，然後直接對這顆硬碟的資料作處理。 
&lt;/p&gt;
&lt;p&gt;
如果我們將新增的硬碟格式化成 Ext3 的格式，則我們可以在 Windows XP 中安裝 Ext2/3 的驅動程式，讓 Windows XP 可以辨認並且讀取 Ext2/3 的硬碟，目前有下面幾項選擇：
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.fs-driver.org/index.html&quot;&gt;Ext2 Installable File System For Windows&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.ext2fsd.com/&quot;&gt;Ext2fsd&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.chrysocome.net/explore2fs&quot;&gt;Explore2fs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
或者，我們也可以直接把新增的硬碟格式化成 NTFS，Windows XP 直接就可以辨認了。如果要格式化新增的硬碟必須安裝 &lt;a href=&quot;http://www.linux-ntfs.org/&quot;&gt;Linux-NTFS&lt;/a&gt; 套件，然後就可以做相關 NTFS 的磁區處理：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo apt-get install ntfsprogs&lt;/strong&gt; (安裝 ntfsprogs 的相關工具)&lt;/span&gt;&lt;br /&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo mkntfs /dev/sdc1&lt;/strong&gt; (透過 mkntfs 格式化 sdc1 這個磁區)&lt;/span&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
但是，格式化成 NTFS 硬碟後，反而變成 Ubuntu 無法讀取。要讓 Ubuntu 可以讀取 NTFS磁區，首先要安裝 &lt;a href=&quot;http://www.ntfs-3g.org&quot;&gt;NTFS-3G&lt;/a&gt;。基本上，他已經預設安裝在 Ubuntu 中，所以只要透過下面指令就可以存取這顆硬碟：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo mount -t ntfs-3g /dev/sdc1 /opt&lt;/strong&gt; (透過 NTFS-3G 將 /dev/sdc1 mount 到 /opt 這個目錄)&lt;/span&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
也可以直接加到 /etc/fstab 中，開機後就可以自動 mount 進來了：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	...&lt;br /&gt;
	&lt;strong&gt;&lt;span style=&quot;color: #ff0000&quot;&gt;/dev/sda1 /mnt/windows ntfs-3g defaults 0 0&lt;/span&gt;&lt;/strong&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
不過使用這樣的方法，缺點是 Windows XP 與 VMware 中的 Ubuntu無法同時共用這台硬碟。如果真的要同時共用，可能使用 Samba 還會來的比較方便。
&lt;/p&gt;
   </description>
   <link>http://blog.markplace.net/marks_place/15/2008/11/01/390</link>
   <comments>http://blog.markplace.net/marks_place/15/2008/11/01/390</comments>
   <guid>http://blog.markplace.net/marks_place/15/2008/11/01/390</guid>
      <dc:creator>markwu</dc:creator>
      
    <category>可以做人幹嘛寫程式</category>
         <pubDate>Sat, 01 Nov 2008 15:46:45 +0000</pubDate>
   <source url="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20">Mark&#039;s Place</source>
     </item>
    <item>
   <title>&#xe5;&#x9c;&#xa8;&#x20;&#x56;&#x4d;&#x77;&#x61;&#x72;&#x65;&#x20;&#xe4;&#xb8;&#xad;&#xe7;&#x9a;&#x84;&#x20;&#x55;&#x62;&#x75;&#x6e;&#x74;&#x75;&#x20;&#xe6;&#x96;&#xb0;&#xe5;&#xa2;&#x9e;&#xe7;&#xa1;&#xac;&#xe7;&#xa2;&#x9f;&#xe7;&#x9a;&#x84;&#xe6;&#x96;&#xb9;&#xe5;&#xbc;&#x8f;</title>
   <description>
    &lt;p&gt;
通常在 VMWare 中預設的 Ubuntu 安裝應該只會有 8G 的硬碟，每次我都會為了如何擴充在煩惱。而每次 Clone 一個新的環境，總是要把之前 /home 目錄下的資料與程式備份下來，這也是件很煩惱的事。
&lt;/p&gt;
&lt;p&gt;
後來想一想，乾脆新增一個硬碟，然後把這個新硬碟 mount 到 /home，從此再也沒有這些煩惱。 更好的是，我還可以把 Apache 與 MySQL 的資料與設定目錄都指定到這個新的硬碟中，到時候只要重新 ln 回去就可以了。
&lt;/p&gt;
 
&lt;p&gt;
作法如下：
&lt;/p&gt;
&lt;p&gt;
首先，在 VMWare 中新增硬碟，隨便你自己要設多大。
&lt;/p&gt;
&lt;p&gt;
Ubuntu 開機後，開終端機就可以開始操作了：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$&lt;strong&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;sudo fdisk -l | grep &quot;Disk /dev&quot;&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;(列出這台虛擬機器中現有的硬碟)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
	Disk /dev/sdb doesn&#039;t contain a valid partition table&lt;br /&gt;
	Disk /dev/sda: 8589 MB, 8589934592 bytes&lt;br /&gt;
	Disk /dev/sdb: 68.7 GB, 68719476736 bytes&lt;br /&gt;
	&lt;/p&gt;
	&lt;p&gt;
	這個是你的硬碟列表， /dev/sdb 代表第二顆的 SCSI 硬碟。你的也有可能是 /dev/hdb，這個代表 IDE 的第二顆磁碟機。因為這時還沒設定任何磁碟分割，所以會有第一行的錯誤訊息。
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
知道你的新硬碟代號後，再來就透過 fdisk 來做磁碟分割：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo fdisk /dev/sdb&lt;/strong&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;(透過 fdisk 來對剛剛新增的硬碟 sdb 做分割)&lt;/span&gt;&lt;br /&gt;
	Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel&lt;br /&gt;
	Building a new DOS disklabel with disk identifier 0x5f491e37.&lt;br /&gt;
	Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
	After that, of course, the previous content won&#039;t be recoverable.&lt;br /&gt;
	&lt;br /&gt;
	The number of cylinders for this disk is set to 8354.&lt;br /&gt;
	There is nothing wrong with that, but this is larger than 1024,&lt;br /&gt;
	and could in certain setups cause problems with:&lt;br /&gt;
	1) software that runs at boot time (e.g., old versions of LILO)&lt;br /&gt;
	2) booting and partitioning software from other OSs&lt;br /&gt;
	   (e.g., DOS FDISK, OS/2 FDISK)&lt;br /&gt;
	Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)&lt;br /&gt;
	&lt;br /&gt;
	Command (m for help): &lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;m&lt;/strong&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;(列出支援的指令&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
	Command action&lt;br /&gt;
	   a   toggle a bootable flag&lt;br /&gt;
	   b   edit bsd disklabel&lt;br /&gt;
	   c   toggle the dos compatibility flag&lt;br /&gt;
	   d   delete a partition&lt;br /&gt;
	   l   list known partition types&lt;br /&gt;
	   &lt;strong&gt;&lt;span style=&quot;color: #ff0000&quot;&gt;m   print this menu&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
	   &lt;span style=&quot;color: #ff0000&quot;&gt;&lt;strong&gt;n   add a new partition&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
	   o   create a new empty DOS partition table&lt;br /&gt;
	   p   print the partition table&lt;br /&gt;
	   q   quit without saving changes&lt;br /&gt;
	   s   create a new empty Sun disklabel&lt;br /&gt;
	   t   change a partition&#039;s system id&lt;br /&gt;
	   u   change display/entry units&lt;br /&gt;
	   v   verify the partition table&lt;br /&gt;
	   &lt;span style=&quot;color: #ff0000&quot;&gt;&lt;strong&gt;w   write table to disk and exit&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
	   x   extra functionality (experts only)&lt;br /&gt;
	&lt;br /&gt;
	Command (m for help): &lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;n&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;(建立新分割&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
	Command action&lt;br /&gt;
	   e   extended&lt;br /&gt;
	   p   primary partition (1-4)&lt;br /&gt;
	&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;p&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;(建立主要分割&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
	Partition number (1-4): &lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;(主要分割磁區代號為 1&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
	First cylinder (1-8354, default 1): &lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;(選擇預設&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
	Using default value 1&lt;br /&gt;
	Last cylinder, +cylinders or +size{K,M,G} (1-8354, default 8354): &lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;8354&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;(選擇預設&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
	Using default value 8354&lt;br /&gt;
	&lt;br /&gt;
	Command (m for help): &lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;w&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;(寫入磁碟分割，並且離開&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
	The partition table has been altered!&lt;br /&gt;
	&lt;br /&gt;
	Calling ioctl() to re-read partition table.&lt;br /&gt;
	Syncing disks.
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
這樣應該就可以把新的硬碟磁碟分割好了。再來就是 format 硬碟：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$&lt;strong&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;sudo mkfs.ext3 /dev/sdb1&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;(&lt;/span&gt;&lt;/span&gt;其中sbd1就是剛剛分割出來的磁區。如果不確定，可以用 &lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo fdisk -l&lt;/strong&gt; 來看)&lt;/span&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
格式化好之後，我們要先把這個磁碟機暫時 mount 到任何一個目錄，然後把 /home 底下的東西都複製這個磁碟機中，複製完再把這個硬碟 unmount：
&lt;/p&gt;
&lt;blockquote&gt;
	$&lt;strong&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;sudo mount /dev/sdb1 /opt&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;(&lt;/span&gt;&lt;/span&gt;先把新硬碟 mount 到/opt&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
	$&lt;strong&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;sudo cp -vax /home/* /opt&lt;/span&gt;&lt;/strong&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;(&lt;/span&gt;&lt;/span&gt;然後把 /home 複製到新硬碟&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo umount /dev/sdb1&lt;/strong&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;(unmount 新硬碟&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;)&lt;/span&gt;
&lt;/blockquote&gt;
&lt;p&gt;
最後再這個磁碟機加入 /etc/fstab 中，讓他以後開機就自動 mount。 
&lt;/p&gt;
&lt;blockquote&gt;
	....&lt;br /&gt;
	&lt;span style=&quot;color: #ff0000&quot;&gt;&lt;strong&gt;/dev/sdb1 /home ext3 defaults,errors=remount-ro 1 0&lt;/strong&gt;&lt;/span&gt;
&lt;/blockquote&gt;
&lt;p&gt;
加入後，透過 mount 就可以把 /home 用 /dev/sdb1 來取代了。
&lt;/p&gt;
&lt;blockquote&gt;
	$&lt;span style=&quot;color: #0000ff&quot;&gt;&lt;strong&gt;sudo mount -a&lt;/strong&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;(未重開機時，可以用這個指令來執行剛剛對 /etc/fstab 的修改)&lt;/span&gt;
&lt;/blockquote&gt;
&lt;p&gt;
這樣就 Okay了。
&lt;/p&gt;
   </description>
   <link>http://blog.markplace.net/marks_place/15/2008/10/31/389</link>
   <comments>http://blog.markplace.net/marks_place/15/2008/10/31/389</comments>
   <guid>http://blog.markplace.net/marks_place/15/2008/10/31/389</guid>
      <dc:creator>markwu</dc:creator>
      
    <category>可以做人幹嘛寫程式</category>
         <pubDate>Fri, 31 Oct 2008 17:06:37 +0000</pubDate>
   <source url="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20">Mark&#039;s Place</source>
     </item>
    <item>
   <title>&#x56;&#x4d;&#x77;&#x61;&#x72;&#x65;&#x20;&#xe4;&#xb8;&#xad;&#xe8;&#xa4;&#x87;&#xe8;&#xa3;&#xbd;&#x20;&#x55;&#x62;&#x75;&#x6e;&#x74;&#x75;&#x20;&#x49;&#x6d;&#x61;&#x67;&#x65;&#x20;&#xe5;&#xbe;&#x8c;&#xe8;&#xa9;&#xb2;&#xe5;&#x81;&#x9a;&#xe7;&#x9a;&#x84;&#xe4;&#xbf;&#xae;&#xe6;&#x94;&#xb9;</title>
   <description>
    &lt;p&gt;
最近需要一些環境來測試 Server 的一些設定，VMware 是用的最主要的工具。但是每 Clone 一次，虛擬主機網路卡的 Mac Address 就被改掉一次，而 Host Name 也需要做相對應的修改。以下是需要修改的部分做個記錄（免得自己忘記）：
&lt;/p&gt;

&lt;p&gt;
修改網路卡的 Mac Address：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	把 /etc/udev/rules.d/70-persistent-net.rules中的第一組 eth0 刪除（因為他是舊的 Mac Address），把 eth1的設定改成 eth0。
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
修改 Host Name 設定：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	把 /etc/hostname 中的電腦名稱，改成你自己要用的名稱。
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
修改 Hosts 設定：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	把 /etc/hosts 中的電腦名稱，改成你自己要用的名稱。
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
然後下 sudo reboot 重新開機就可以了。
&lt;/p&gt;
&lt;p&gt;
另外，在 VMware 的機器中，我也都會加上 &lt;a href=&quot;http://chitchat.at.infoseek.co.jp/vmware/vmtools.html#vmw&quot;&gt;vmw&lt;/a&gt; 方便我對映象檔做 defragment 與 shrink。 
&lt;/p&gt;
   </description>
   <link>http://blog.markplace.net/marks_place/15/2008/10/31/386</link>
   <comments>http://blog.markplace.net/marks_place/15/2008/10/31/386</comments>
   <guid>http://blog.markplace.net/marks_place/15/2008/10/31/386</guid>
      <dc:creator>markwu</dc:creator>
      
    <category>可以做人幹嘛寫程式</category>
         <pubDate>Fri, 31 Oct 2008 09:07:19 +0000</pubDate>
   <source url="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20">Mark&#039;s Place</source>
     </item>
    <item>
   <title>&#xe7;&#x94;&#xa8;&#x20;&#x50;&#x48;&#x50;&#x20;&#xe5;&#x91;&#xbc;&#xe5;&#x8f;&#xab;&#x20;&#x4d;&#x53;&#x53;&#x51;&#x4c;&#x20;&#x53;&#x74;&#x6f;&#x72;&#x65;&#x20;&#x50;&#x72;&#x6f;&#x63;&#x65;&#x64;&#x75;&#x72;&#x65;</title>
   <description>
    &lt;p&gt;
剛剛試了一堆方法，要在不知道對方 Store Procedure 的內部參數名稱下去取用他的執行結果。但是找了半天，網路上找到的資料儘是要你透過 &lt;a href=&quot;http://tw.php.net/manual/tw/function.mssql-init.php&quot;&gt;mssql_init()&lt;/a&gt; 去指定 Store Procedure，然後透過 &lt;a href=&quot;http://tw.php.net/manual/tw/function.mssql-bind.php&quot;&gt;mssql_bind()&lt;/a&gt; 設定輸入參數與輸出結果，最後透過 &lt;a href=&quot;http://tw.php.net/manual/tw/function.mssql-execute.php&quot;&gt;mssql_execute()&lt;/a&gt; 來執行這個 Store Procedure，實在有夠複雜。
&lt;/p&gt;
&lt;p&gt;
到 &lt;a href=&quot;http://tw.php.net/manual/tw/index.php&quot;&gt;PHP 的使用手冊&lt;/a&gt;上找了一下，原來&lt;a href=&quot;http://tw.php.net/manual/tw/function.mssql-execute.php#34787&quot;&gt;最簡單的方法早就在哪&lt;/a&gt;！有種『眾裡尋他千百度﹐幕然回首﹐那人卻在燈火闌珊處』的 fu。下次記得要先看手冊。
&lt;/p&gt;

&lt;blockquote&gt;
	&lt;p&gt;
	$myServer = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
	$myUser = &amp;quot;user&amp;quot;;&lt;br /&gt;
	$myPass = &amp;quot;pass&amp;quot;;&lt;br /&gt;
	$myDB = &amp;quot;db&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	$s = @mssql_connect( $myServer, $myUser, $myPass )&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; or die( &amp;quot;Couldn&#039;t connect to SQL Server on $myServer&amp;quot; );&lt;br /&gt;
	$d = @mssql_select_db($myDB, $s)&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; or die( &amp;quot;Couldn&#039;t open database $myDB&amp;quot; );&lt;br /&gt;
	&lt;br /&gt;
	$result = mssql_query( &amp;quot;StoreProcedure &#039;params_1&#039;,&#039;params_2&#039;,...&amp;quot; );&lt;br /&gt;
	$record = mssql_fetch_row( $result );&lt;br /&gt;
	&lt;br /&gt;
	print_r($record); 
	&lt;/p&gt;
&lt;/blockquote&gt;
   </description>
   <link>http://blog.markplace.net/marks_place/15/2008/03/18/363</link>
   <comments>http://blog.markplace.net/marks_place/15/2008/03/18/363</comments>
   <guid>http://blog.markplace.net/marks_place/15/2008/03/18/363</guid>
      <dc:creator>markwu</dc:creator>
      
    <category>可以做人幹嘛寫程式</category>
         <pubDate>Tue, 18 Mar 2008 11:35:45 +0000</pubDate>
   <source url="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20">Mark&#039;s Place</source>
     </item>
    <item>
   <title>&#xe7;&#x94;&#xa8;&#x20;&#x4e;&#x75;&#x53;&#x4f;&#x41;&#x50;&#x20;&#xe4;&#xbe;&#x86;&#xe6;&#x95;&#xb4;&#xe5;&#x90;&#x88;&#xe4;&#xb8;&#x8d;&#xe5;&#x90;&#x8c;&#xe7;&#xb3;&#xbb;&#xe7;&#xb5;&#xb1;&#xe4;&#xbd;&#xbf;&#xe7;&#x94;&#xa8;&#xe8;&#x80;&#x85;&#xe5;&#xb8;&#xb3;&#xe8;&#x99;&#x9f;&#xe8;&#xaa;&#x8d;&#xe8;&#xad;&#x89;</title>
   <description>
    &lt;p&gt;
最近剛好需要整合不同系統使用者帳號認證，我預備採用的方式是 SOAP，兩邊軟體一邊必須實作 SOAP Server 來提供帳號認證，另一邊需要實作 SOAP Client 來使用帳號認證。
&lt;/p&gt;
&lt;p&gt;
SOAP Client 的部份會送傳下列資料到 Server 端，並且透過 Server 端所實作的 getUserInfo，來取回使用者認證資料，傳送資料如下：
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;loginId：使用者帳號&lt;/li&gt;
	&lt;li&gt;password：使用者密碼（傳送時先透過 MD5 編碼）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
SOAP Server 則會實作一個 User 的 WSDL 提供給 Client 端讀取，並且實作一個 getUserInfo 的方法，用來將認證的資料 userInfo 傳回給 Client 端，userInfo 包含：
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;validUser：是否為系統中的使用者&lt;/li&gt;
	&lt;li&gt;userName：使用者全名&lt;/li&gt;
	&lt;li&gt;eMail ：使用者的電子郵件信箱&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
我試過 PHP 內建的 &lt;a href=&quot;http://tw2.php.net/manual/tw/ref.soap.php&quot;&gt;SOAP&lt;/a&gt;、&lt;a href=&quot;http://pear.php.net/package/SOAP/&quot;&gt;PEAR::SOAP&lt;/a&gt; 與 &lt;a href=&quot;http://sourceforge.net/projects/nusoap/&quot;&gt;NuSOAP&lt;/a&gt;，其中 NuSOAP用起來最方便。在 0.72 以前，因為 Class 命名跟內建的 SOAP 衝突，所以需要修改 Class 名稱，但是在 0.73 後則已經沒有問題。所以建議使用 0.72 的都升級到 0.73。
&lt;/p&gt;

&lt;p&gt;
在 NuSOAP 中，如果 Server 端已經提供 WSDL，那你幾乎不需作任何設定，拿了就用：
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	$soapclient = new nusoap_client(&#039;&lt;strong&gt;http://others/soapserver.php?wsdl&lt;/strong&gt;&#039;, true);&lt;br /&gt;
	$error = $soapclient-&amp;gt;getError();&lt;br /&gt;
	if ($error) {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$result = $soapclient-&amp;gt;call( &#039;&lt;strong&gt;getUserInfo&lt;/strong&gt;&#039;, &lt;strong&gt;array( &#039;loginId&#039; =&amp;gt; &#039;nusoap&#039;, &#039;password&#039; =&amp;gt; md5(&#039;123456&#039;) )&lt;/strong&gt; );&lt;br /&gt;
	&lt;br /&gt;
	if ($soapclient-&amp;gt;fault) {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br /&gt;
	} else {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; $error = $soapclient-&amp;gt;getError();&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($error) {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; print_r($result);&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
	} 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
就這樣！$result 中儲存的就是 Server 端回傳的資料，並且已經幫你 Parsing 好，變成 PHP 的陣列：&amp;nbsp;
&lt;/p&gt;
&lt;blockquote&gt;
	Array&lt;br /&gt;
	(
	&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; [validUser] =&amp;gt; 1
	&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; [fullName] =&amp;gt; Nu Soap
	&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; [eMail] =&amp;gt; nusoap@soaptest.com
	&lt;br /&gt;
	)
&lt;/blockquote&gt;
&lt;p&gt;
完整的 SOAP Server/Client 實作，就請自行參考我 &lt;a id=&quot;res_208&quot; href=&quot;http://blog.markplace.net/gallery/1/1-208.zip&quot; title=&quot;SOAP 使用者認證範例&quot;&gt;附上的程式&lt;/a&gt;。
&lt;/p&gt;
   </description>
   <link>http://blog.markplace.net/marks_place/15/2008/03/16/360</link>
   <comments>http://blog.markplace.net/marks_place/15/2008/03/16/360</comments>
   <guid>http://blog.markplace.net/marks_place/15/2008/03/16/360</guid>
      <dc:creator>markwu</dc:creator>
      
    <category>可以做人幹嘛寫程式</category>
         <pubDate>Sun, 16 Mar 2008 14:15:28 +0000</pubDate>
   <source url="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20">Mark&#039;s Place</source>
                    </item>
    <item>
   <title>&#xe7;&#xbe;&#x8e;&#xe4;&#xb8;&#xad;&#xe4;&#xb8;&#x8d;&#xe8;&#xb6;&#xb3;&#xe7;&#x9a;&#x84;&#x20;&#x5f;&#x49;&#x47;&#x5f;&#x46;&#x65;&#x74;&#x63;&#x68;&#x46;&#x65;&#x65;&#x64;&#x41;&#x73;&#x4a;&#x53;&#x4f;&#x4e;</title>
   <description>
    &lt;p&gt;
其實我還是搞不懂，為什麼 Google Gadget 要搞個雞肋出來，這個雞肋就是 &lt;a href=&quot;http://code.google.com/apis/gadgets/docs/remote-content.html#Fetch_JSON&quot;&gt;_IG_FetchFeedAsJSON()&lt;/a&gt;。為什麼說他是雞肋？因為：
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Cache 功能不足，到現在還是無法定義 Cache Interval。怪的是 _IG_FetchXmlContent() 與 _IG_FetchContent()都可以。&lt;/li&gt;
	&lt;li&gt;沒辦法取用 RSS Feed 中的其他資料屬性。所以如果真的要在 Google Gadget 中，完整利用 RSS Feed 中的各項屬性資料，或是外加 (Extra) 的資料，還是得用 _IG_FetchXmlContent() 來抓。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
原本要將 &lt;a href=&quot;http://www.dzone.com&quot;&gt;DZone&lt;/a&gt; 的推噓數字也加到『&lt;a href=&quot;http://www.google.com/ig/directory?url=blog.markplace.net/idzone/idzone.xml&quot;&gt;愛D爽&lt;/a&gt;』(請用台語念)，可是用 _IG_FetchFeedAsJSON 就是沒有一個屬性可以拿的到～殘念。
&lt;/p&gt;
&lt;p&gt;
雞肋！雞肋！食之無味，棄之可惜！&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
   </description>
   <link>http://blog.markplace.net/marks_place/15/2008/03/03/347</link>
   <comments>http://blog.markplace.net/marks_place/15/2008/03/03/347</comments>
   <guid>http://blog.markplace.net/marks_place/15/2008/03/03/347</guid>
      <dc:creator>markwu</dc:creator>
      
    <category>可以做人幹嘛寫程式</category>
         <pubDate>Mon, 03 Mar 2008 19:27:12 +0000</pubDate>
   <source url="http://blog.markplace.net/rss.php?blogId=1&amp;profile=rss20">Mark&#039;s Place</source>
     </item>
   </channel>
</rss>