<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0EHRnc-eCp7ImA9WhRaEUg.&quot;"><id>tag:blogger.com,1999:blog-7330772</id><updated>2012-02-14T03:00:37.950+08:00</updated><category term="linux" /><category term="apache" /><category term="yahoo" /><category term="selinux" /><category term="java" /><category term="mysql" /><category term="sso" /><category term="php" /><category term="無病呻吟" /><category term="redis" /><category term="security" /><category term="ssh" /><category term="ghost" /><category term="mongodb" /><category term="gps" /><category term="picasa" /><category term="urmap" /><category term="vsftpd" /><category term="ldap" /><category term="tape" /><category term="opensource" /><category term="shell" /><category term="flickr" /><category term="drupal" /><category term="memcached" /><category term="windows" /><category term="performance" /><category term="qrcode" /><category term="heroku" /><category term="ubuntu" /><category term="vbscript" /><category term="j2ee" /><category term="openwebmail" /><category term="greasemonkey" /><category term="scripts" /><category term="backup" /><category term="google" /><category term="pxe" /><title>仙人掌世界</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.brandonc.me/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.brandonc.me/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/brandonc/JmKH" /><feedburner:info uri="brandonc/jmkh" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DkQGQXk_fip7ImA9WhRUFUw.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-1676665295050325361</id><published>2012-01-22T03:39:00.002+08:00</published><updated>2012-01-26T01:58:40.746+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T01:58:40.746+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><title>[Java Performance]Chapter 3:JVM Overview</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Vt8SKeooMVpwyfDb5uJgpF_J1bg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vt8SKeooMVpwyfDb5uJgpF_J1bg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Vt8SKeooMVpwyfDb5uJgpF_J1bg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vt8SKeooMVpwyfDb5uJgpF_J1bg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;這篇談JVM的概觀與各元件用途與描述HotSpot VM在各元件上的優化技術&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;HotSpot VM High Level Architecture&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;JVM 有三個主要元件：&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;VM Runtime&lt;/li&gt;
&lt;li&gt;JIT Compiler&lt;/li&gt;
&lt;li&gt;Memory manager&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;img border="0" height="614" src="http://3.bp.blogspot.com/-Pwu9sI1hCyQ/TxPfn1lngcI/AAAAAAAAA-8/rHC4lmKmwsI/s640/Java_Performance.pdf+%2528page+79+of+722%2529.png" width="640" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
32bit JVM限制使用4 GB的記憶體，在windows約能配置1.5G左右的Java Heap&amp;nbsp;Space，Linux&amp;nbsp;約 2 .5G~3G的 Java Heap Space，新版的linux kernel約能配置在 2G左右，solaris在3.3G，64bit JVM則能使用更多的記憶體。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Java objects在Hotspot內部的 reference 稱為 ordinary object pointer(oops)，64bit JVM的oops與32bit JVM相較會佔用更多CPU cache，少8~15 %的CPU cache效率，與佔用更多Java Heap Space；在HotSpot VM可經由壓縮指標的方法將完整的64bit壓縮成32bit空間，其啟動方式在JVM 加入選項為 -XX:+UseCompressedOops (該功能在新版JDK版本已預設啟用)。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;HotSpot VM Runtime&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Hotspot VM Runtime的職責&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;parsing of  command line arguments&lt;/li&gt;
&lt;li&gt;VM life cycle&lt;/li&gt;
&lt;li&gt;class loading&lt;/li&gt;
&lt;li&gt;byte code interpreter&lt;/li&gt;
&lt;li&gt;exception handling&lt;/li&gt;
&lt;li&gt;synchronization&lt;/li&gt;
&lt;li&gt;thread management&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Java Native Interface&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;VM fatal error handling&lt;/li&gt;
&lt;li&gt;&lt;i&gt;C++ heap management&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;Command Line Options&lt;/span&gt;&lt;br /&gt;
共分成三類&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;standard&amp;nbsp;options 規範於JVM Spec，通用於各種發行版本(e.g HotSpot、JRocket、J9)&lt;/li&gt;
&lt;li&gt;nonstandard&amp;nbsp;options 出現在不同發行版本不同版次的JVM，使用-X做為prefix&lt;/li&gt;
&lt;li&gt;developer options&amp;nbsp;出現在不同發行版本不同版次的JVM，使用-XX做為prefix，用+ 或 - 表示啟用或停用功能 e.g -XX:&lt;span style="color: red; font-size: large;"&gt;+&lt;/span&gt;AggressiveOpts 表示啟用，&amp;nbsp;-XX:&lt;span style="color: red; font-size: large;"&gt;-&lt;/span&gt;AggressiveOpts&amp;nbsp;表示停用，部份option能有額外參數如 -XX:OptionName=&lt;n&gt;&amp;nbsp;&lt;n&gt;，表示可填入數字，可用k/m/g做為suffix，當作kilo/mega/giga單位&lt;/n&gt;&lt;/n&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;VM lifecycle&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
Hotspot VM Runtime負責launching和shutdown Hotspot VM，使用java, javaw(without console), javaws(java web start)&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;解析command line options&lt;/li&gt;
&lt;li&gt;設立Java Heap sizes與JIT compiler 類型&lt;/li&gt;
&lt;li&gt;設立Environment variables像是LD_LIBRARY_PATH與CLASSPATH&lt;/li&gt;
&lt;li&gt;如果command line沒有定義Main-Class，則從JAR中的manifest取得Main-Class&lt;/li&gt;
&lt;li&gt;使用JNI_CreatJavaVM創建Hotspot VM&lt;/li&gt;
&lt;li&gt;當Hotspot VM完成初始化，Main-Class 載入與取得 main method 參數&lt;/li&gt;
&lt;li&gt;執行 main method&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
當  main method 執行完成會檢查有無 exception、呼叫JNI DetachCurrentThread 操作減少thread count、檢查thread count數量確保已沒有進行中的操作、shutdown Hotspot VM(JNI_DestoryJavaVM)。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;VM Class Loading&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
class loading 指的是mapping class name 或 interface name 到 class object 的處理過程，常見的class loading 發生在bytecode resolution，在Java API部份則透過Class.forName()、ClassLoader.loadClass()、reflection API、JNI_FindClass觸發。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
java.lang.Object、java.lang.String、java.lang.System、java. lang.Thread、java.lang.ThreadGroup、java.lang.reflect.Method、java.lang.ref.Finalizer, java.lang.Class 等在 JNI_CreatJavaVM 時即已載入。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Class Loading Phases&lt;/b&gt;&lt;br /&gt;
1.load class phase&lt;br /&gt;
使用 class/interface name 去尋找binary的Java classfile，沒找到拋出NoClassDefFound error，此外這階段會檢查classfile syntax，驗證不過拋出ClassFormatError 或 UnsupportedClassVersionError(e.g&amp;nbsp;編譯jdk 7版本在jdk 6執行)，完成載入Java class前必需先載入class本身的super class/interface 因此可能會拋出ClassCircularityError、IncompatibleClassChangeError&lt;br /&gt;
&lt;br /&gt;
2.link phase&lt;br /&gt;
檢查classfile semantics、constant pool symbols、type checking 驗證不過拋出VerifyError，這階段會做semantic check用於解析相關的symbolic reference&lt;br /&gt;
&lt;br /&gt;
3.initializing phase&lt;br /&gt;
初始化static fields、static initializer(第一次執行Java Code)，若有superclass則會先initializing superclass&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Class Loader Delegation&lt;/b&gt;&lt;br /&gt;
class loader 可以經由其它class loader 代理載入class，在Java SE  class loader 的階層，搜尋會從下層住上層(parent)尋找class&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;bootstrap class loader 從Hotspot VM的BOOTCLASSPATH載入&amp;nbsp;class, 如&amp;nbsp;rt.jar 等Java SE的libraries&amp;nbsp;&lt;/li&gt;
&lt;li&gt;extension class loader 從$JRE_HOME/lib/ext載入class&lt;/li&gt;
&lt;li&gt;system class loader 從 CLASSPATH 載入 class，也是預設的class loader&amp;nbsp;&lt;/li&gt;
&lt;li&gt;application class loader 則由開發著自訂class載入路徑，如web container 的實作會為每個webapp分配獨立的 class loader 用於載入/WEB-INF/classes、/WEB-INF/libs/*中的class&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Type Safety&lt;/b&gt;&lt;br /&gt;
Java class / interface 完整的名稱包含了package 名稱與 Class name&amp;nbsp;，於class loader 本身也定義了一層 namespace，所以有種狀況是A class loader 與 B class loader 載入同樣名稱的class但會被區分成不同的class，因此若有相互引用的狀況下Hotspot會做相容檢查(e.g 同method signature 則相容，可使用)，失敗則丟出LinkageError&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Interpreter&lt;/span&gt;&lt;br /&gt;
HotSpot VM interpreter 是基於 template 方法的 interpreter，JVM startup 時 HotSpot VM runtime 會產生與放置於記憶體中，其內部資訊的資料結構稱為 TemplateTable，用於對應每個byte code的machine dependent code的參考關系，於debug版本的Hotspot VM 可以用-XX:PrintInterpreter看TemplateTable。&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Synchronization&lt;/span&gt;&lt;br /&gt;
HotSpot VM對同步化提供最佳化機制，並區分為無競爭與競爭&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;無競爭 可以啟用偏向鎖(-XX:+UseBiasedLocking)(JDK 1.6預設開啟)，當有同步化的需要時再由輕量級鎖(CAS)轉成重量級鎖&lt;/li&gt;
&lt;li&gt;競爭 &amp;nbsp;啟用adaptive spinning(JDK 1.6預設開啟) 透過一段時間在同Thread執行週期裡重試取得 lock，避免thread離開/進入檢查lock是否可用，降低context switch&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Thread Management&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;Thread Model&lt;/b&gt;&lt;br /&gt;
Hotspot VM的Java Thread(VM 底層) / java.lang.Thread / OS thread 是一對一對應的，Java Thread start時候作業系統創建 OS Thread，Java Thread terminated 時作業系統回收OS Thread；thread 的scheduling 由作業系統分配到可用的CPU上，於thread&amp;nbsp;priorities則各作業系統不一樣。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Internal VM Threads&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;VM Thread 負責處理VM operation&lt;/li&gt;
&lt;li&gt;Period task thread 也稱WatcherThread用於模擬timer interrups&lt;/li&gt;
&lt;li&gt;Garbage collection threads 用於GC&lt;/li&gt;
&lt;li&gt;JIT compiler threads 用於 runtime 時編譯 bytecode 為 machine code&lt;/li&gt;
&lt;li&gt;Signal dispatcher thread 用接收process signal 與分派給Java level的signal handling method (e.g kill &amp;nbsp;pid時丟給 Shutdown Hooks API)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;VM Operations and Safepoints&lt;/b&gt;&lt;br /&gt;
VM Thread會從VMOperationQueue取得操作指令，通常這類的操作指令是為了讓Hotspot VM進入safepoint，進入safetpoint時所有Java executing thread會block，native code 會預防執行結果傳回 Java code，因此在safepoint進行中不會有中途變更Java Heap，最常件的VMOperation就是支援garbage collection時的先置操作，也是俗稱的 stop-the-world&lt;br /&gt;
&lt;br /&gt;
其它像是偏向鎖的revocation(切換成重量級鎖)、thread stack dumps、 thread suspension 與 stopping (i.e java.lang.Thread.stop())、JVMTI的修改操作 都會需要進入 safepoints&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;VM Fatal Error Handling&lt;/span&gt;&lt;br /&gt;
OS拋出 segmentation fault(linux) / Access Violation error(windows) 時 HotSpot VM預設會在Launcher起動的地方產生記錄檔 hs_err_pid&lt;pid&gt;.log，或者以 -XX:ErrorFile&amp;nbsp;指定紀錄檔存放路徑，也能以 -XX:OnError=cmd1  args; cmd2 指定VM crash時的執行指令，OnError參數需作業統系統的debugger tools支援(e.g GDB)，&lt;/pid&gt;有些發行版本不支援OnError功能或著需要偵查附加debugger前的錯誤，可以改用-XX:+ShowMessageBoxOnError 選項。&lt;br /&gt;
&lt;br /&gt;
JDK 1.6對於 OutOfMemoryError 使用特定選項&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;-XX:OnOutOfMemoryError=&lt;cmd&gt;cmd1 args; cmd2&lt;/cmd&gt;&lt;/li&gt;
&lt;li&gt;-XX:+HeapDumpOnOutOfMemoryError&lt;/li&gt;
&lt;li&gt;-XX:HeapDumpPath=&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;HotSpot VM Garbage Collectors&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Generational Garbage Collection&lt;/span&gt;&lt;br /&gt;
HotSpot VM基於以下兩個假設，使用年代做為垃圾收集的方法&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;大部份物件很快就不在使用&lt;/li&gt;
&lt;li&gt;從舊物件到新物件間的關聯較少&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;The young generation&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
新產生的物件配置於這裡，這裡配置的空間較小，GC耗費時間相對短暫， GC執行次數較頻繁，基於大部份物件很快就不使用的假設，young GC(minor garbage collection)能有效率的大量清除垃圾物件&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;The old generation&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
物件會長時間使用，最終會從young generation 提升到  old generation ，在這個年代配置的空間通常比young generation大，使用空間成長較為緩慢，執行GC(major garbage collection)的次數較少，但耗費時間較長&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;The permanent generation&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
這年代是由HotSpot VM 存放metadata，如class data structure, interned string&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Xak-MF1R6ko/TxWHciHZrnI/AAAAAAAAA_I/XYf4SttdmHY/s1600/Java_Performance.pdf+%2528page+105+of+722%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="528" src="http://4.bp.blogspot.com/-Xak-MF1R6ko/TxWHciHZrnI/AAAAAAAAA_I/XYf4SttdmHY/s640/Java_Performance.pdf+%2528page+105+of+722%2529.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
分析是否為不可用的物件需要做object graph的分析，由於會有old-to-young的關聯存在因此也需要掃描old generation物件，Hotspot VM&amp;nbsp;為了降低minor GC要掃描的old generation範圍，使用一種資料結構Card Table對應整個old generation空間，若old generation物件有變更reference field 那也會在Card Table標記該物件所在區塊為修改過(dirty)，當minor GC時old generation只要掃描修改過區塊的物件，不用掃描所有在old generation的物件。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-JFj1qPWBMcQ/TxWPq_UIb_I/AAAAAAAAA_Q/4M4V5FCum08/s1600/Java_Performance.pdf+%2528page+106+of+722%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://2.bp.blogspot.com/-JFj1qPWBMcQ/TxWPq_UIb_I/AAAAAAAAA_Q/4M4V5FCum08/s640/Java_Performance.pdf+%2528page+106+of+722%2529.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span style="font-size: large;"&gt;The Young Generation&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
young generation 又細分成三塊區域，eden用於配置新物件，兩塊 Survivor space 給物件累積存活次數(minor gc掃描)，當物件存活次數超過設定值(TenuringThreshold)，再將物件提升到Old generation，其目地是要讓短期物件在young generation回收，老物件提升到Old generation。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-W6fwuhqTlgI/TxWUVftHLFI/AAAAAAAAA_Y/7fWvZJI8640/s1600/Java_Performance.pdf+%2528page+107+of+722%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="http://4.bp.blogspot.com/-W6fwuhqTlgI/TxWUVftHLFI/AAAAAAAAA_Y/7fWvZJI8640/s640/Java_Performance.pdf+%2528page+107+of+722%2529.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
由於Survivor space空間可能會不足以接收來至於edem的物件，這種狀況下可能會將短期的物件直接提升到Old Generation，也稱為premature promotion，因此造成Old Generation空間快速的的被短期物件填滿，造成更多major GC；當minor gc從eden要提升物件，但Survivor space與Old Generation都放不下的時候會造成major GC，也稱為&amp;nbsp;promotion&amp;nbsp;failure(gc log可看到) 。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span style="font-size: large;"&gt;Fast Allocation&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
為了要快速配置物件到Young Generation，GC會在執行完成後在將該區塊給清空(Copying Garbage Collector)，當要配置物件時可以連續配置在物件尾端，此方法稱為bump-the-pointer。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
在multithread application時為了避免同時配置eden會需要全域鎖，因此每個Thread都有配置一塊空間放置新物件，稱為Thread-Local Allocation Buffers(TLABs)每個thread都擁有一部份獨立的eden區塊，不會有其它Thread共用因此不需要鎖，當使用的buffer滿載的時候再同步化使用 eden。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span style="font-size: large;"&gt;Garbage Collectors：Spoiled for Choice&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
HotSpot VM有四種garbage collector每種garbage collector有不用的使用策略&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;b&gt;The Serial GC&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Serial GC在young generation的方法就前面所描述的GC過程，在Old generation則使用 mark-compact garbage collector 將物件標記清除，再將保留下的物件移動與放一起，然而Serial GC限制於僅能使用單個Virtual Processor，若硬體環境下有多個Virtual Processor就會閒滯多餘的Virtual Processor效能，因此Serial GC適用pause time要求不高的應用程式與執行多VM的環境(e.g 同時運行多個GUI應用程式)&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-klmTDQSSTNI/TxWmVyQvXJI/AAAAAAAAA_g/1LvCK_VML94/s1600/Java_Performance.pdf+%2528page+109+of+722%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://1.bp.blogspot.com/-klmTDQSSTNI/TxWmVyQvXJI/AAAAAAAAA_g/1LvCK_VML94/s640/Java_Performance.pdf+%2528page+109+of+722%2529.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-AyfETbCIJKI/TxWmrk3gcVI/AAAAAAAAA_w/tG7PGj1m904/s1600/Java_Performance.pdf+%2528page+110+of+722%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="230" src="http://4.bp.blogspot.com/-AyfETbCIJKI/TxWmrk3gcVI/AAAAAAAAA_w/tG7PGj1m904/s640/Java_Performance.pdf+%2528page+110+of+722%2529.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;b&gt;The Parallel GC：Throughput Matters!&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Parallel GC運作方式類似Serial GC但同時可以使用多個Virtual&amp;nbsp;Processor&amp;nbsp;進行GC，相對Serial GC可以增加整體GC效率與Throughput，適用於batch processing、scientific computing 等要求Throughput、不要求latency的應用程式&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;b&gt;The Mostly-Concurrent GC：Latency Maters!&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
由於Serial GC與Parallel GC在 GC時都會需要stop-the-world，而major GC時掃描的物件較多，停滯時間較長，並不適用於要求反應速度的應用，Concurrent Mark-Sweep GC是種適用於major GC的collector能有較短暫停滯，也能運用多個CPU，所以較適用於有要求低延遲的應用，其GC過程有分4個階段，在initial mark與remark階段才需要stop-the-world，但代價是整體GC時間較長、空間效率較差、throughput 較低。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-ehV3CSFeUJM/TxW4s_Iv8OI/AAAAAAAAA_4/bweE0bYLTsY/s1600/Java_Performance.pdf+%2528page+111+of+722%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="304" src="http://1.bp.blogspot.com/-ehV3CSFeUJM/TxW4s_Iv8OI/AAAAAAAAA_4/bweE0bYLTsY/s640/Java_Performance.pdf+%2528page+111+of+722%2529.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;b&gt;The Garbage-Firs t GC：CMS Replacement&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
在JDK 1.6u20後期引入，未來用於替代CMS GC，其方法將Java Heap分成許多相等大小的區塊稱為Regions，並由G1動態調整Regions做為Young Generation空間，大部份的GC時間僅用在Young Regins(Young Generation)，具備CMS優點，且較省空間&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;b&gt;Comparisons&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
以下簡要的說明Application如何影響GC的工作&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Allocation：當各Generation達到特定的可用空間限制即會啟動GC(CMS需自定比率，其它則等到各Generation滿載)，當application的allocation rate越高則GC更頻繁&lt;/li&gt;
&lt;li&gt;Live data size：當物件越多，GC要做更多的分析&lt;/li&gt;
&lt;li&gt;Reference updates in the old generation：當Old Generation的物件變更Reference頻繁則minor GC檢查old-to-young與CMS remark的要分析的變更區塊就越多&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-klzPJ9c_SPw/TxW9TDrPL-I/AAAAAAAABAA/9QhEhW2TArI/s1600/Java_Performance.pdf+%2528page+114+of+722%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="174" src="http://4.bp.blogspot.com/-klzPJ9c_SPw/TxW9TDrPL-I/AAAAAAAABAA/9QhEhW2TArI/s640/Java_Performance.pdf+%2528page+114+of+722%2529.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span style="font-size: x-large;"&gt;Hotspot VM JIT Compilers&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
javac 產出bytecode，JIT會將bytecode轉為intermediate representation(IR)並做優化如：&lt;a href="http://en.wikipedia.org/wiki/Constant_folding" target="_blank"&gt;constant folding&lt;/a&gt;、&lt;a href="http://en.wikipedia.org/wiki/Common_subexpression_elimination" target="_blank"&gt;common subexpression elimination&lt;/a&gt;、&lt;a href="http://en.wikipedia.org/wiki/Inline_function" target="_blank"&gt;inlining of function&lt;/a&gt;較複雜優化技術有&lt;a href="http://en.wikipedia.org/wiki/Loop_optimization" target="_blank"&gt;improving&amp;nbsp;the execution of loop&lt;/a&gt;、&lt;a href="http://en.wikipedia.org/wiki/Bounds-checking_elimination" target="_blank"&gt; range check elimination&lt;/a&gt;、&lt;a href="http://en.wikipedia.org/wiki/Loop_unrolling" target="_blank"&gt;unrolling&lt;/a&gt;、&lt;a href="http://en.wikipedia.org/wiki/Loop-invariant_code_motion" target="_blank"&gt;loop invariant code motion&lt;/a&gt;，接著依不同的編譯策略將IR轉換成machine code(instruction selection與分配值給暫存器)。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Hotspot的JIT Compiler分為兩種&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Client JIT&amp;nbsp;Compiler的目標在快速啟動與快速編譯因此適用於反應快速的GUI application，採用較簡化的優化方法但編譯時間較短，整體的效能會較Server&amp;nbsp;JIT&amp;nbsp;Compiler差&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Server&amp;nbsp;JIT&amp;nbsp;Compiler的目標在高效能與高吞吐的Java application，會最大化的運用編譯優化策略，編譯優化的內容較多也較為複雜，編譯的時間較Client JIT&amp;nbsp;Compiler長&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
JAVA 6 HostSpot VM提供混合式的JIT Compiler，稱為tiered compilation，提供Client JIT&amp;nbsp;Compiler快速啟動的能力與Server JIT Compiler的效能優化，使用&amp;nbsp;-server -XX: +TieredCompilation 啟用，適用於JAVA 6 u25之後。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span style="font-size: x-large;"&gt;HotSpot VM Adaptive Tuning&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Java 5 HotSpot VM 會在JVM啟動時依硬體規格與作業系統環境自動選擇 garbage collector、設定Java Heap size、 JIT Compiler，其自動調整Java Heap的方式稱為&lt;a href="http://docs.oracle.com/javase/1.5.0/docs/guide/vm/gc-ergonomics.html" target="_blank"&gt;ergonomics&lt;/a&gt;。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Java 5 HotSpot VM會依2G記憶體，2 virtual processors識別為server-class machine，並對server-class machine採用Parallel GC、server JIT compiler、1/64~1GB做為最小Java Heap Size、1/4~1GB 做為最大Java Heap Size，可是特定的作業系統(windows 32bit)與隨著JDK持續演進此標準不太一定，可透過 java -XX:+PrintCommandLineFlags -version得知實際環境的ergonomics預設值。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;span style="font-size: large;"&gt;Adaptive Java Heap Sizing&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;span style="text-align: left;"&gt;ergonomics對&lt;/span&gt;&lt;span style="text-align: left;"&gt;Parallel GC&lt;/span&gt;&lt;span style="text-align: left;"&gt;(UsePar&lt;/span&gt;allelGC/UseParallelOldGC)額外啟動adaptive heap sizing&lt;span style="text-align: left;"&gt;功能&lt;/span&gt;，透過評估&amp;nbsp;object allocation rate 與 object lifetime&amp;nbsp;自動決定 young generation 空間大小，若有指定-Xmn，-XX:NewSize，-XX:MaxNewSize，-XX:NewRatio，-XX:SurvivorRatio 則會做為初始值並再自動調整，若要自行調整可經由-XX:-UseAdaptiveSizePolicy關閉adaptive heap sizing。&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;span style="font-size: x-large;"&gt;補充&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
不同作業系統不同版本在預設的Command Options與Ergonomics機置都有異因此在Java HotSpot VM 23後的版本可透過&lt;a href="http://marxsoftware.blogspot.com/2011/01/hotspot-jvm-options-displayed.html" target="_blank"&gt;&amp;nbsp;-XX:+PrintFlagsFinal&amp;nbsp;&lt;/a&gt;得知相關的執行參數結果&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
e.g.java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version&lt;/div&gt;
&lt;div&gt;
&lt;a href="http://4.bp.blogspot.com/-NHC3xPl3XUA/Txilvnd2hKI/AAAAAAAABAI/DvOv5vldIF0/s1600/1.+bash.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="562" src="http://4.bp.blogspot.com/-NHC3xPl3XUA/Txilvnd2hKI/AAAAAAAABAI/DvOv5vldIF0/s640/1.+bash.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;Reference：&lt;/span&gt;&lt;/div&gt;
Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning&lt;br /&gt;
&lt;a href="http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html"&gt;http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Java HotSpot VM Options&lt;br /&gt;
&lt;a href="http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html"&gt;http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Memory Management in the Java HotSpot™ Virtual Machine&lt;br /&gt;
&lt;a href="http://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf"&gt;http://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Troubleshooting and Diagnostic Guide&lt;br /&gt;
&lt;a href="http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf"&gt;http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
John Coomes, Peter Kessler, Tony Printezis Garbage Collection-Friendly Programming&lt;br /&gt;
&lt;a href="http://dl.dropbox.com/u/2331008/docs/TS-2906.pdf"&gt;http://dl.dropbox.com/u/2331008/docs/TS-2906.pdf&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-1676665295050325361?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/tlS5DFbLeDU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/1676665295050325361/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=1676665295050325361" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/1676665295050325361?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/1676665295050325361?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/tlS5DFbLeDU/java-performancechapter-3jvm-overview.html" title="[Java Performance]Chapter 3:JVM Overview" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Pwu9sI1hCyQ/TxPfn1lngcI/AAAAAAAAA-8/rHC4lmKmwsI/s72-c/Java_Performance.pdf+%2528page+79+of+722%2529.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2012/01/java-performancechapter-3jvm-overview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EDRX4zfSp7ImA9WhRaEEk.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-7485153930055656288</id><published>2012-01-02T19:31:00.000+08:00</published><updated>2012-02-12T20:27:54.085+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-12T20:27:54.085+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="qrcode" /><category scheme="http://www.blogger.com/atom/ns#" term="heroku" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="redis" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="opensource" /><title>使用 TOTP 與 Google Authenticator 實作 Two-Factor authentication</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n9Dd6x11vpMQpUI9zF2RuFWRS1s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n9Dd6x11vpMQpUI9zF2RuFWRS1s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n9Dd6x11vpMQpUI9zF2RuFWRS1s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n9Dd6x11vpMQpUI9zF2RuFWRS1s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;在食衣住行育樂都需要的網路的時候，現代人擁有許多網路帳號，但絕大部份使用的密碼就三、四組互換，在web 2.0風潮下大多數網路服務皆使用email做為帳號名稱，因此使用的眾多服務下帳號密碼只有少數幾種組合，當某個有使用網站帳號被竊(e.g.&lt;a href="http://www.informationsecurity.com.tw/article/article_detail.aspx?aid=6554" target="_blank"&gt;資料庫外洩&lt;/a&gt;、病毒側錄密碼)，同時也影響位在其它網站帳號，尤其現今資安事件逐漸從惡作劇變往金融犯罪的趨勢，帳號到手可以形成買賣(e.g.網路遊戲)，個資到手進行詐騙，一組帳號可以剝n層皮。&lt;br /&gt;
&lt;br /&gt;
帳號盜用除了對個人造成影響，直接或間接牽連的還有諸多網友與網路服務提供者，由於公眾網路服務不像公司內部能強制要求資安政策，因此網路服務要能提供安全保護機制就顯的特別重要，Google 去年底開始提供&lt;a href="http://en.wikipedia.org/wiki/One-time_password" target="_blank"&gt;One-Time Password&lt;/a&gt;(OTP)做&lt;a href="http://en.wikipedia.org/wiki/Two-factor_authentication" target="_blank"&gt;Two-Factor authentication&lt;/a&gt;帳號驗證，於傳統帳號密碼驗證多加一層動態產生的密碼，只要兩者沒被同一人取得就能避免帳號驗證通過。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
往常OTP的&lt;a href="http://en.wikipedia.org/wiki/Security_token" target="_blank"&gt;security token&lt;/a&gt;取得方式常見的有&lt;a href="http://en.wikipedia.org/wiki/File:SecureID_token_new.JPG" target="_blank"&gt;實體裝置產生&lt;/a&gt;、發送手機簡訊，但此類方式&lt;a href="http://www.zdnet.com.tw/news/web/0,2000085679,20130566,00.htm" target="_blank"&gt;成本會是最大的制約&lt;/a&gt;，難以規模化推廣到大眾市場，現今 Smartphone 已日漸普及，軟體式OTP則可成為可行的替代方案，Google 去年提供了Google Authenticator 應用程式可在&lt;a href="http://support.google.com/accounts/bin/answer.py?hl=en&amp;amp;answer=1066447" target="_blank"&gt;多個行動平台使用&lt;/a&gt;，目前得知用於帳號認證的網路服務有&lt;a href="http://support.google.com/accounts/bin/static.py?hl=en&amp;amp;page=guide.cs&amp;amp;guide=1056283" target="_blank"&gt;Google 2-step verification&lt;/a&gt;，&lt;a href="http://support.google.com/accounts/bin/static.py?hl=en&amp;amp;page=guide.cs&amp;amp;guide=1056283" target="_blank"&gt;Amazon AWS MFA&lt;/a&gt;&amp;nbsp;，其服務端實作驗證流程不困難，未來可能會變成一種常見的帳號驗證方法。&lt;br /&gt;
&lt;br /&gt;
以下參考&lt;a href="http://thegreyblog.blogspot.com/2011/12/google-authenticator-using-it-in-your.html" target="_blank"&gt;國外部落格文章&lt;/a&gt;與&lt;a href="http://code.google.com/p/google-authenticator/" target="_blank"&gt;Google Authenticator Android原始碼&lt;/a&gt;&amp;nbsp;實作Two-Factor authentication&amp;nbsp;驗證流程，也釋出&lt;a href="https://github.com/parkghost/TOTP-authentication-demo" target="_blank"&gt;原始碼&lt;/a&gt;供需要的人參考。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://github.com/parkghost/TOTP-authentication-demo"&gt;https://github.com/parkghost/TOTP-authentication-demo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;環境需求&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;JDK&lt;/li&gt;
&lt;li&gt;Maven&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;安裝與執行指令&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;1.安裝與啟動&lt;a href="http://redis.io/" target="_blank"&gt;Redis&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: bash"&gt;wget http://redis.googlecode.com/files/redis-2.4.5.tar.gz
tar xzf redis-2.4.5.tar.gz
cd redis-2.4.5
make
src/redis-server
&lt;/pre&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;2.&lt;/span&gt;&lt;span style="font-size: large;"&gt;安裝與啟動&lt;a href="https://github.com/parkghost/TOTP-authentication-demo" target="_blank"&gt;TOTP Authentication Demo&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: bash"&gt;git clone git@github.com:parkghost/TOTP-authentication-demo.git
cd TOTP-authentication-demo
mvn package
java $JAVA_OPTS -jar target/dependency/jetty-runner.jar target/*.war&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;操作流程&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;1.進入網站&lt;/span&gt;&lt;br /&gt;
http://localhost:8080/&lt;br /&gt;
(demo site:&amp;nbsp;&lt;a href="http://totp-authentication-demo.heroku.com/"&gt;http://totp-authentication-demo.heroku.com&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;2.建立帳號&lt;/span&gt;&lt;br /&gt;
&lt;img border="0" height="504" src="http://1.bp.blogspot.com/-XfnH2Ae9NbA/TwGK6Bm6CkI/AAAAAAAAA9A/uQ6zvwFHfHQ/s640/1.jpg" width="640" /&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;
&lt;br /&gt;
帳號建立成功後伺服器端會產生此組帳號的secret key，這組secret&amp;nbsp;key在伺服器端與OTP裝置都需要持有，之後雙邊才能透過相同的secret&amp;nbsp;key、時間、雜湊演算法來產生OTP與驗證OTP，詳細的TOTP規格請參考&lt;a href="http://tools.ietf.org/html/rfc6238" target="_blank"&gt;RFC6238&lt;/a&gt;。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-vq0ufFtbwzk/TwlJRXpr6XI/AAAAAAAAA94/SiuUAk4u2ZM/s1600/Screen+Shot+2012-01-08+at+%25E4%25B8%258B%25E5%258D%25883.43.30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="526" src="http://1.bp.blogspot.com/-vq0ufFtbwzk/TwlJRXpr6XI/AAAAAAAAA94/SiuUAk4u2ZM/s640/Screen+Shot+2012-01-08+at+%25E4%25B8%258B%25E5%258D%25883.43.30.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
這裡經由 QRCode 使&amp;nbsp;&lt;a href="http://support.google.com/accounts/bin/answer.py?hl=zh-Hant&amp;amp;answer=1066447" target="_blank"&gt;Google Authenticator&amp;nbsp;&lt;/a&gt;簡化secret&amp;nbsp;key的輸入流程與避免輸入錯誤，其QRCode內嵌資料需符合&amp;nbsp;&lt;a href="http://code.google.com/p/google-authenticator/wiki/KeyUriFormat" target="_blank"&gt;Google Authenticator 的內容規格&lt;/a&gt;&amp;nbsp;。&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="text-align: -webkit-auto;"&gt;e.g&lt;/span&gt;.&amp;nbsp;otpauth://totp/Brandon@brandonc.me?secret=GUK6JNO7TEERYTNC&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span style="font-size: large;"&gt;3.使用&lt;a href="http://itunes.apple.com/us/app/google-authenticator/id388497605" target="_blank"&gt;Google Authenticator &lt;/a&gt;保存secret key與產生TOTP&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-LV6v1vDecS8/TwGK7ubh-BI/AAAAAAAAA9M/OQF19-za2qM/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://2.bp.blogspot.com/-LV6v1vDecS8/TwGK7ubh-BI/AAAAAAAAA9M/OQF19-za2qM/s640/3.jpg" width="426" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-9roROEZj5Tc/TwGK8LI2oDI/AAAAAAAAA9Y/bdkSRZo8FFA/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-9roROEZj5Tc/TwGK8LI2oDI/AAAAAAAAA9Y/bdkSRZo8FFA/s640/4.jpg" width="426" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-HE5TeJV-qrE/TwGK-R6doLI/AAAAAAAAA9g/4rFET11sVfE/s1600/5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-HE5TeJV-qrE/TwGK-R6doLI/AAAAAAAAA9g/4rFET11sVfE/s640/5.PNG" width="426" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-WhjhB3b-gKE/TwGK_ELWRMI/AAAAAAAAA9o/wvlzxQmoUCo/s1600/6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://2.bp.blogspot.com/-WhjhB3b-gKE/TwGK_ELWRMI/AAAAAAAAA9o/wvlzxQmoUCo/s640/6.jpg" width="426" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
Google Authenticator 每 30 秒會產生 6 個數字的做為security token&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span style="font-size: large;"&gt;4.驗證帳號&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;img border="0" height="500" src="http://3.bp.blogspot.com/-lwEvR-58bCc/TwGLABaxqrI/AAAAAAAAA9s/eeF2w-a2rng/s640/7.jpg" width="640" /&gt;&lt;br /&gt;
由於不同裝置間會有時間誤差，在服務端的實作要加上容錯機制(e.g.&amp;nbsp;產生正負90秒內的驗證結果，有一組成功即通過驗證)&lt;br /&gt;
&lt;br /&gt;
Update 20120106&lt;br /&gt;
&lt;br /&gt;
台灣區密碼未加密的中獎清單...&lt;br /&gt;
&lt;a href="http://plainpass.com/p/plaintext-password-sites.html"&gt;http://plainpass.com/p/plaintext-password-sites.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-7485153930055656288?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/CXFs_6exsaw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/7485153930055656288/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=7485153930055656288" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/7485153930055656288?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/7485153930055656288?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/CXFs_6exsaw/web-2.html" title="使用 TOTP 與 Google Authenticator 實作 Two-Factor authentication" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-XfnH2Ae9NbA/TwGK6Bm6CkI/AAAAAAAAA9A/uQ6zvwFHfHQ/s72-c/1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2012/01/web-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQDRnY-eyp7ImA9WhRWFUU.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-9065438369146322488</id><published>2011-12-20T02:33:00.000+08:00</published><updated>2012-01-03T18:42:57.853+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T18:42:57.853+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><title>[Java Performance]Chapter 2:Operating System Performance Monitoring</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DmA5_g9sYxcSBx2r22tQRTpDacI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DmA5_g9sYxcSBx2r22tQRTpDacI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DmA5_g9sYxcSBx2r22tQRTpDacI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DmA5_g9sYxcSBx2r22tQRTpDacI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;這篇談到如何在作業系統層級搜集數據(CPU、Memory、Network I/O、Disk I/O)，從數據中分析可能的效能問題&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;名詞定義：&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Performance monitoring： 使用非侵入式的方法從作業系統或應用程式搜集、觀察數據，如使用作業系統提供的工具(e.g.&amp;nbsp;vmstat)搜集效能數據，但不會影響應用程式的行為與效能，這方法適用於大部份的環境(production / development/ testing ...)使用&lt;/li&gt;
&lt;li&gt;Performance profiling：&amp;nbsp;使用侵入式方法搜集較特定目標數據，如某method的total cpu time/輸入參數，但可能會調整到應用程式行為或者降低效能，這方法比較適用於development/ testing 環境&lt;/li&gt;
&lt;li&gt;Performance tuning：&amp;nbsp;通常是 monitoring與profiling之後，發覺問題進而修改程式碼 / 設定參數，增進應用程式效能&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;CPU Utilization&lt;/span&gt;&lt;br /&gt;
應用程式有沒有最大化利用CPU效能，可經由分析作業系統的CPU運作數據得知，一般作業系統會把CPU&amp;nbsp;Utilization區分為User &amp;nbsp;CPU&amp;nbsp;Utilization與 System(kernel)&amp;nbsp;CPU&amp;nbsp;Utilization，過高的System CPU&amp;nbsp;Utilization表示可能有共用資源競爭(ie.&amp;nbsp;lock contention)或大量 I/O 裝置互動，經由降低System&amp;nbsp;CPU&amp;nbsp;Utilization可以提高應用程式performance與 scalability&lt;br /&gt;
&lt;br /&gt;
當CPU從 register/cache 找不到指令，等待從memory取得指令的狀況叫作stall(耗費數百個CPU clock cycles)，經由降低stall能增進CPU效能，如降低context switch來減少cpu cache miss&lt;br /&gt;
&lt;br /&gt;
數據搜集工具：&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Windows&lt;/th&gt;
&lt;th&gt;Linux&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(GUI)Performance Monitor&lt;br /&gt;
typeperf&lt;/td&gt;
&lt;td&gt;(GUI)gnome-system-monitor&lt;br /&gt;
(GUI)xosview&lt;br /&gt;
vmstat&lt;br /&gt;
mpstat&lt;br /&gt;
sar&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
typeperf&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-7nhOCKcyuZ0/Tu8vW-O4q2I/AAAAAAAAA7I/h3OLOyIfmbw/s1600/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%25888.26.31.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://1.bp.blogspot.com/-7nhOCKcyuZ0/Tu8vW-O4q2I/AAAAAAAAA7I/h3OLOyIfmbw/s640/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%25888.26.31.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vmstat(us/sy)&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-ChbXfien8DM/Tu8u_rpDPII/AAAAAAAAA7A/DFywRKFqAnc/s1600/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%25888.32.13.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://3.bp.blogspot.com/-ChbXfien8DM/Tu8u_rpDPII/AAAAAAAAA7A/DFywRKFqAnc/s640/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%25888.32.13.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;CPU Scheduler Run Queue&lt;/span&gt;&lt;br /&gt;
單個CPU同時只能處理一項工作，當沒有CPU資源可用時，作業系統會將新的工作存放在CPU scheduler's run queue之中，等CPU有空閒時再從run queue中取出執行，如果累積的工作過多(Run Queue Depth / CPU virtual Processors &amp;gt; 4)則會觀察到回應速度逐漸緩慢，那就要注意或者進行調整，如增加更多的CPU並分散工作、調整演算法與資料結構&lt;br /&gt;
&lt;br /&gt;
數據搜集工具：&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Windows&lt;/th&gt;&lt;th&gt;Linux&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;(GUI)Performance Monitor&lt;br /&gt;
typeperf&lt;/td&gt;&lt;td&gt;vmstat&lt;br /&gt;
mpstat&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Load_(computing)" target="_blank"&gt;load average&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
typeperf&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-y1PqXQbAFcY/Tu9FPPOAImI/AAAAAAAAA7Q/SLQaHrNqOUQ/s1600/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258810.07.27.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="194" src="http://2.bp.blogspot.com/-y1PqXQbAFcY/Tu9FPPOAImI/AAAAAAAAA7Q/SLQaHrNqOUQ/s640/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258810.07.27.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vmstat(r)&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-rHIEwmHwLvw/Tu9Fi-kP--I/AAAAAAAAA7Y/CguRXf5XmLA/s1600/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258810.08.59.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="128" src="http://3.bp.blogspot.com/-rHIEwmHwLvw/Tu9Fi-kP--I/AAAAAAAAA7Y/CguRXf5XmLA/s640/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258810.08.59.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uptime(load average 也是一種觀測的方法)&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-u7caYsRDPgU/Tu9NK5CCqNI/AAAAAAAAA7g/InJaUwwM7i4/s1600/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258810.41.12.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-u7caYsRDPgU/Tu9NK5CCqNI/AAAAAAAAA7g/InJaUwwM7i4/s1600/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258810.41.12.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Memory Utilization&lt;/span&gt;&lt;br /&gt;
應用程式向作業系統申請memory時，若作業系統認為physical memory不足則會使用disk(ie.&amp;nbsp;virtual memory)替代memory避免應用程式崩潰，但由於disk IO較physical memory慢許多倍(millisecond &amp;nbsp;vs&amp;nbsp;nanosecond)，然而JVM's garbage collector在進行gc會掃描所有java heap中的物件，若物件存放在disk那就會被disk io速度拖慢，gc的"stop the world"時間就越長，可觀察&lt;br /&gt;
&lt;div&gt;
swapping(page in/page out)行為得知&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
數據搜集工具：&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Windows&lt;/th&gt;&lt;th&gt;Linux&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;(GUI)Performance Monitor&lt;br /&gt;
typeperf&lt;/td&gt;&lt;td&gt;vmstat&lt;br /&gt;
top&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
typeperf(5 second intervals)&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-iOVCwGcAoII/Tu9ZyWOH2gI/AAAAAAAAA7o/BYGqHYsCtFs/s1600/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258811.35.19.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="32" src="http://2.bp.blogspot.com/-iOVCwGcAoII/Tu9ZyWOH2gI/AAAAAAAAA7o/BYGqHYsCtFs/s640/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258811.35.19.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-xEn7Q44e_c8/Tu9buBmf4oI/AAAAAAAAA74/2amMixujB4w/s1600/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258811.43.30.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://2.bp.blogspot.com/-xEn7Q44e_c8/Tu9buBmf4oI/AAAAAAAAA74/2amMixujB4w/s640/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258811.43.30.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
vmstat(swpd/free/si/so)&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-y9V4GAB4sqk/Tu9afzda_HI/AAAAAAAAA7w/SJERsnI4ahM/s1600/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258811.38.22.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://3.bp.blogspot.com/-y9V4GAB4sqk/Tu9afzda_HI/AAAAAAAAA7w/SJERsnI4ahM/s640/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%258811.38.22.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Monitoring Lock Contention&lt;/span&gt;&lt;br /&gt;
許多Java應用程式不能scale是遇到了lock contention(e.g.&amp;nbsp;大量的thread排隊等待取得鎖住的共用的物件)，像是synchronized method 或 synchronized blocks，經由觀察voluntary context switch(很昂貴，需要耗費80,000 clock cycles)，如果voluntary context switch佔用 3% 之上的CPU clock cycles 則可能有lock contention&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
可用的數據搜集工具：&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Windows&lt;/th&gt;&lt;th&gt;Linux&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Intel VTune&lt;br /&gt;
AMD CodeAnalyst&lt;/td&gt;&lt;td&gt;pidstat&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
pidstat(cswch:voluntary context switches)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-sbrNs8FhipU/Tu9pRjCJUAI/AAAAAAAAA8A/EAOU6wOi5WM/s1600/Screen+Shot+2011-12-20+at+%25E4%25B8%258A%25E5%258D%258812.41.18.png"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-sbrNs8FhipU/Tu9pRjCJUAI/AAAAAAAAA8A/EAOU6wOi5WM/s640/Screen+Shot+2011-12-20+at+%25E4%25B8%258A%25E5%258D%258812.41.18.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
假設上面的結果是在3.0Ghz dual core的 CPU下運作，估算平均每秒有3500次voluntary context switches&lt;br /&gt;
每個voluntary context switches 成本&amp;nbsp;80,000 clock cycles&lt;br /&gt;
單個virtual Processor的voluntary context switches 成本為 3500 / 2 * 80,000 = 140,000,000 clock cycles&lt;br /&gt;
單個virtual Processor的CPU clock cycle在3,000,000,000&lt;br /&gt;
平均佔用CPU clock cycles 為 140,000,000 / 3,000,000,000 = 4.7%&lt;br /&gt;
4.7% &amp;gt;&amp;nbsp;3% 所以可能有lock contention&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Monitoring Involuntary Context Switches&lt;/span&gt;&lt;br /&gt;
involuntary context switches 發生在超出執行時間或者被更高priority的thread佔用時，觸發的context switch若有很高的involuntary context switches&amp;nbsp;表示同時有太多的thread在等待執行，從high run queue depth、high System CPU&amp;nbsp;utilization、high number of migrations 同樣可以看出來thread過多的狀況&lt;br /&gt;
&lt;br /&gt;
(數據搜集工具同voluntary context switches)&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Monitoring Thread migrations&lt;/span&gt;&lt;br /&gt;
在多核的狀況下會有ready-to-run threads在多核中轉移(migrations)因而降低效能，可經由processor set綁定java process避免這個狀況，在linux環境可以使用taskset指定processor set&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Network I/O Utilization&lt;/span&gt;&lt;br /&gt;
受限於network bandwidth 或 netwok I/O performance 也許會造成應用程式 performance與scalability的限制，經由更換韌體/硬體與網路環境改善限制&lt;br /&gt;
&lt;br /&gt;
大量的讀寫小量資料會使用到大量的system CPU(high number of system calls)，可採用nonblocking Java NIO取代blocking java.net.Socket，經由降低thread緩充讀寫的次數改善應用程式效能&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
數據搜集工具：&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Windows&lt;/th&gt;&lt;th&gt;Linux&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;br /&gt;
(GUI)Performance Monitor&lt;br /&gt;
typeperf&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://blogs.oracle.com/timc/entry/nicstat_the_solaris_and_linux" target="_blank"&gt;nicstat&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
typeperf&lt;br /&gt;
&lt;span style="font-family: Courier; font-size: 10pt;"&gt;typeperf \Network Interface(*)\Bytes Total/sec &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-veRtMI4IRJc/Tu96gsQ82RI/AAAAAAAAA8I/h9QgB6qFXH8/s1600/Screen+Shot+2011-12-20+at+%25E4%25B8%258A%25E5%258D%25881.54.28.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="42" src="http://1.bp.blogspot.com/-veRtMI4IRJc/Tu96gsQ82RI/AAAAAAAAA8I/h9QgB6qFXH8/s640/Screen+Shot+2011-12-20+at+%25E4%25B8%258A%25E5%258D%25881.54.28.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
nicstat(&lt;span style="font-family: Courier; font-size: 13px;"&gt;yukonx0是network interface名稱&lt;/span&gt;)&lt;br /&gt;
&lt;span style="font-family: NewCenturySchlbk; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="font-family: Courier; font-size: 10pt;"&gt;nicstat -i yukonx0 1&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-G1TMg8zjrfM/Tu96wL5hgQI/AAAAAAAAA8Q/ItszPY8U8hw/s1600/Screen+Shot+2011-12-20+at+%25E4%25B8%258A%25E5%258D%25881.55.58.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" src="http://2.bp.blogspot.com/-G1TMg8zjrfM/Tu96wL5hgQI/AAAAAAAAA8Q/ItszPY8U8hw/s640/Screen+Shot+2011-12-20+at+%25E4%25B8%258A%25E5%258D%25881.55.58.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="font-family: Courier; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Disk I/O Utilization&lt;/span&gt;&lt;br /&gt;
如果應用程式有disk的操作，在linux之下可以使用iostat -xm 5&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-LcvprCzi1-k/Tu99dSNtGoI/AAAAAAAAA8Y/U3PHYA-R_vs/s1600/Screen+Shot+2011-12-20+at+%25E4%25B8%258A%25E5%258D%25882.07.29.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="146" src="http://4.bp.blogspot.com/-LcvprCzi1-k/Tu99dSNtGoI/AAAAAAAAA8Y/U3PHYA-R_vs/s640/Screen+Shot+2011-12-20+at+%25E4%25B8%258A%25E5%258D%25882.07.29.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
有幾種策略可以改善I/O&amp;nbsp;utilization&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;更快的storage device&lt;/li&gt;
&lt;li&gt;檔案分散在多個磁碟&lt;/li&gt;
&lt;li&gt;調效作業系統去快取大量的file system data structure&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
在應用程式階層可以使用buffered stream，減少 system calls(提高CPU效率)&amp;nbsp;，如使用java.io.BufferedOutputStream/BufferedInputStream&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-9065438369146322488?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/weYi7-NV4Uk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/9065438369146322488/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=9065438369146322488" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/9065438369146322488?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/9065438369146322488?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/weYi7-NV4Uk/java-performancechapter-2operating.html" title="[Java Performance]Chapter 2:Operating System Performance Monitoring" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-7nhOCKcyuZ0/Tu8vW-O4q2I/AAAAAAAAA7I/h3OLOyIfmbw/s72-c/Screen+Shot+2011-12-19+at+%25E4%25B8%258B%25E5%258D%25888.26.31.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2011/12/java-performancechapter-2operating.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4MQX48fip7ImA9WhRXFkg.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-3509043941950244242</id><published>2011-12-15T00:38:00.000+08:00</published><updated>2011-12-23T22:36:20.076+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-23T22:36:20.076+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><title>[Java Performance]Chapter 1:Strategies, Approaches, and Methodologies</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0Rli8u3s1C_XL_VXXitQKqGxrzQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0Rli8u3s1C_XL_VXXitQKqGxrzQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0Rli8u3s1C_XL_VXXitQKqGxrzQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0Rli8u3s1C_XL_VXXitQKqGxrzQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;在軟體開發流程中該在何時評估效能？&lt;br /&gt;
&lt;div&gt;
&lt;blockquote class="tr_bq"&gt;
傳統上瀑布式開發(Analysis &amp;gt; Design &amp;gt; Code &amp;gt; Test)會在測試階段進行效能測式，當效能結果不符合要求，調整代價可能很高，因此在擬定需求時就需要將效能指標定義出來，由需求驅動開發過程中各階段的效能測試&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;期望的throughput為多少？&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;期望latency為多少？&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;要能負載多少的 concurrent users 或者 concurrent tasks？&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;在最大數量的 concurrent users&amp;nbsp;或者&amp;nbsp;concurrent tasks負載下，可接受的latency&amp;nbsp;或者throughput為多少？&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;最糟糕狀況下可接受的latency為多少？&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;garbage collection 引入的延遲否容許？&lt;/li&gt;
&lt;/ul&gt;
假設某些use case可能造成高度的效能風險，那應該在Analysis階段之前製作prototype驗證效能的可行性&lt;/blockquote&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
使用自動化的效能測試&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
自動化佈署、自動化效能測試、自動化統計與分析效能數據，利於追蹤早期的效能問題&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
兩種效能分析方法：Top Down and Bottom Up&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
Top Down方式適用於應用開發者從software stack層次、調整程式，調整程式設定，選擇JVM GC collector、調效JVM command line options來分析效能&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Bottom Up方式適用效能專家從&lt;a href="http://en.wikipedia.org/wiki/Comparison_of_CPU_architectures" target="_blank"&gt;CPU架構&lt;/a&gt;、CPU數量，作業系統、JVM版本，收集CPU statistics資訊分析無效率的指令、&lt;a href="http://en.wikipedia.org/wiki/CPU_cache#Cache_miss" target="_blank"&gt;cache misses&lt;/a&gt;狀況等問題，來選擇合適的軟硬體環境&lt;/blockquote&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
選擇合適的平台與評估系統&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
Sun 的&lt;a href="http://en.wikipedia.org/wiki/UltraSPARC_T1" target="_blank"&gt;SPARC T-series&lt;/a&gt; CPU針對多 thread 切換造成的CPU cache misses效能問題，在每顆CPU&amp;nbsp;core 中設計多組的hardware thread，相較一般CPU在一顆core一組hardware thread的設計有更好的效率&lt;/blockquote&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-3509043941950244242?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/qfwNH392VL0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/3509043941950244242/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=3509043941950244242" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/3509043941950244242?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/3509043941950244242?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/qfwNH392VL0/java-performancechapter-1strategies.html" title="[Java Performance]Chapter 1:Strategies, Approaches, and Methodologies" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2011/12/java-performancechapter-1strategies.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUDSX89cSp7ImA9WhRWFUU.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-6649106796422515806</id><published>2011-12-06T12:15:00.001+08:00</published><updated>2012-01-03T18:41:18.169+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T18:41:18.169+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><title>Java時間解析度</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/frDyvzLaxyLjPcv5w9fa5sCiwwg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/frDyvzLaxyLjPcv5w9fa5sCiwwg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/frDyvzLaxyLjPcv5w9fa5sCiwwg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/frDyvzLaxyLjPcv5w9fa5sCiwwg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks"&gt;Inside the Hotspot VM: Clocks, Timers and Scheduling Events - Part I - Windows&lt;/a&gt; 說明作業系統在讀取時間與時間event(schedule/trigger)的限制，因此從java api取得的 nanosecond 的數值並不精確，越高的解析度(nanoseconds &amp;gt; microseconds &amp;gt; milliseconds)精確度越低，文中也提供了些應用上的建議。&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;需要讀取精確的時間使用 System.currentTimeMillis()&lt;/li&gt;
&lt;li&gt;需要比較時間差異使用 System.nanoTime()&lt;/li&gt;
&lt;li&gt;需要等待系統回應(e.g.&amp;nbsp;wait/sleep)，設定時間別小於10 milliseconds&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
另外從二段openjdk version "1.7.0-ea" 的源始碼來看，使用 wait/sleep 的 nanos 的參數並意義不大&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Object.wait(long timeout, int nanos)
&lt;br /&gt;
&lt;pre class="brush: java"&gt;    public final void wait(long timeout, int nanos) throws InterruptedException {
        if (timeout &amp;lt; 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (nanos &amp;lt; 0 || nanos &amp;gt; 999999) {
            throw new IllegalArgumentException(
                                "nanosecond timeout value out of range");
        }

        if (nanos &amp;gt;= 500000 || (nanos != 0 &amp;amp;&amp;amp; timeout == 0)) {
            timeout++;
        }

        wait(timeout);
    }
&lt;/pre&gt;
Thread.sleep(long millis, int nanos)
&lt;br /&gt;
&lt;pre class="brush: java"&gt;    public static void sleep(long millis, int nanos) throws InterruptedException {
        if (millis &amp;lt; 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (nanos &amp;lt; 0 || nanos &amp;gt; 999999) {
            throw new IllegalArgumentException(
                                "nanosecond timeout value out of range");
        }

        if (nanos &amp;gt;= 500000 || (nanos != 0 &amp;amp;&amp;amp; millis == 0)) {
            millis++;
        }

        sleep(millis);
    }
&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-6649106796422515806?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/la1f-gRS4ok" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/6649106796422515806/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=6649106796422515806" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/6649106796422515806?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/6649106796422515806?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/la1f-gRS4ok/nano.html" title="Java時間解析度" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2011/12/nano.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EHRnc9fip7ImA9WhRaEUg.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-4486141768463618562</id><published>2011-11-21T21:14:00.001+08:00</published><updated>2012-02-14T03:00:37.966+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-14T03:00:37.966+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="mysql" /><category scheme="http://www.blogger.com/atom/ns#" term="memcached" /><category scheme="http://www.blogger.com/atom/ns#" term="redis" /><category scheme="http://www.blogger.com/atom/ns#" term="mongodb" /><category scheme="http://www.blogger.com/atom/ns#" term="opensource" /><title>Memcached vs Redis vs MongoDB vs MySQL 效能比較</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nDwjYXBK05y4eJhainj7KfBiqiI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nDwjYXBK05y4eJhainj7KfBiqiI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nDwjYXBK05y4eJhainj7KfBiqiI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nDwjYXBK05y4eJhainj7KfBiqiI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;"記憶體是新一代的硬碟"在高流量網站內已是稀鬆平常的事情，像是採用&amp;nbsp;&lt;a href="http://memcached.org/"&gt;Memcached&lt;/a&gt;&amp;nbsp;做分散式快取服務即是典型的應用模式，Memcached 使用概念簡單且相關應用情境、文件、工具、演算法都已相當成熟，許多知名網站都運用 Memcached 提升scalability，像是GAE、Heroku 等PaaS 環境也有提供 Memcached 的收費服務，這些市場訊息已說明大規模的使用記憶體是可以合乎成本效益的。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://redis.io/"&gt;Redis&lt;/a&gt;&amp;nbsp;是近年隨著 NoSQL 熱潮出現的 Key-Value store，其功能涵蓋了 Memcached 並且提供許多高階功能，在許多應用情境下相較&amp;nbsp;Memcached，能降低開發與營運複雜度，比如：&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;豐富的資料結構(strings, hashes, lists, sets and sorted sets)&amp;nbsp;更易於設計適當的資料粒度增進資料重用的機會，且可依不同的資料結構特性在redis server上做組合與計算，降低開發上的複雜度與資料傳輸&lt;/li&gt;
&lt;li&gt;永續保存功能可充當簡易的資料庫降低重覆資料的一致性問題或一些特殊應用，像是當系統當機後能快速回復快取資料，避免大量重建的衝擊&lt;/li&gt;
&lt;li&gt;資料覆寫功能 提升讀取效能，提升&amp;nbsp;availability&lt;/li&gt;
&lt;li&gt;&lt;i&gt;2.6能寫scripting (lua)&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;3.0的版本預期還會加上Cluster做HA與Balancing有些data grid的樣子&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
但效能是否能與&amp;nbsp;Memcached 匹敵呢？以下透過大量的 get/set 操作做簡單的比較，並且加入MySQL與MonogoDB 做為參考&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;一、測試環境&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Hardware Overview:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Model Name: MacBook Pro&lt;br /&gt;
&amp;nbsp; Model Identifier: MacBookPro8,2&lt;br /&gt;
&amp;nbsp; Processor Name: Intel Core i7&lt;br /&gt;
&amp;nbsp; Processor Speed: 2 GHz&lt;br /&gt;
&amp;nbsp; Number of Processors: 1&lt;br /&gt;
&amp;nbsp; Total Number of Cores: 4&lt;br /&gt;
&amp;nbsp; L2 Cache (per Core): 256 KB&lt;br /&gt;
&amp;nbsp; L3 Cache: 6 MB&lt;br /&gt;
&amp;nbsp; Memory: 8 GB&lt;br /&gt;
&amp;nbsp; HDD: 500G(5400RPM)&lt;br /&gt;
&lt;br /&gt;
System Software Overview:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; System Version: Mac OS X 10.7.2 (11C74)&lt;br /&gt;
&amp;nbsp; Kernel Version: Darwin 11.2.0&lt;br /&gt;
&amp;nbsp; 64-bit Kernel and Extensions: Yes&lt;br /&gt;
&lt;br /&gt;
Software Overview:&lt;br /&gt;
&amp;nbsp; Java: "1.6.0_29" HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Memcached Version: 1.4.5&lt;br /&gt;
&amp;nbsp; Memcached Client:&amp;nbsp;&lt;a href="http://code.google.com/p/xmemcached/"&gt;xmemcache&lt;/a&gt;&amp;nbsp;1.3.5&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Redis Version: 2.4.2&lt;br /&gt;
&amp;nbsp; Redis Client: &lt;a href="https://github.com/xetorthio/jedis"&gt;jedis&lt;/a&gt; 2.0&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; MongoDB Version: mongodb-osx-x86_64-2.0.0&lt;br /&gt;
&amp;nbsp; MongoDb Client:&amp;nbsp;&lt;span class="s1"&gt;mongo&lt;/span&gt;-java-driver&amp;nbsp;2.7.2&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; MySQL Version: 5.5.11-log Community Server&lt;br /&gt;
&amp;nbsp; MySQL Client:&amp;nbsp;&lt;span class="s1"&gt;mysql&lt;/span&gt;-connector-java 5.1.6 +&amp;nbsp;&lt;span class="s1"&gt;tomcat&lt;/span&gt;-&lt;span class="s1"&gt;jdbc 7.0.22&amp;nbsp;&lt;/span&gt;(connection-pool)&lt;br /&gt;
&lt;div class="p1"&gt;
&lt;span class="s1"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;二、測試方法&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;每組測式含三種方法 Set/Get/Set-Get(50/50)，各別產生500,000個請求&lt;/li&gt;
&lt;li&gt;不同的壓力測試Thread(50/100/150/200) * 資料量(64/128/256/512/1024)&amp;nbsp;bytes&lt;/li&gt;
&lt;li&gt;壓力測試工具&amp;nbsp;&lt;a href="https://github.com/parkghost/NoSQLBenchmark"&gt;https://github.com/parkghost/NoSQLBenchmark&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;三、測試案例&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
共同的 Server 執行環境設定&lt;/div&gt;
ulimit -n 10000 &lt;br /&gt;
&lt;br /&gt;
&lt;span style="text-align: left;"&gt;共同的&amp;nbsp;&lt;/span&gt;Client&amp;nbsp;&lt;span style="text-align: left;"&gt;執行環境設定&lt;/span&gt;&lt;br /&gt;
java -server -Xms512m -Xmx512m&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
1.Memcached&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;blockquote class="tr_bq"&gt;
memcached -m 2048&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
2.Redis(without persistence)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;blockquote class="tr_bq"&gt;
disable RDB and AOF&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
3.Redis(RDB)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
save 900 1&lt;br /&gt;
save 300 10&lt;br /&gt;
save 60 10000&lt;br /&gt;
rdbcompression yes&lt;/blockquote&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
4.Redis(AOF - no)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;blockquote class="tr_bq"&gt;
appendonly yes&lt;br /&gt;
appendfsync no&lt;br /&gt;
no-appendfsync-on-rewrite no&lt;br /&gt;
auto-aof-rewrite-percentage 100&lt;br /&gt;
auto-aof-rewrite-min-size 64mb&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
5.Redis(AOF - every second)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
appendonly yes&lt;br /&gt;
appendfsync everysec&lt;br /&gt;
no-appendfsync-on-rewrite no&lt;br /&gt;
auto-aof-rewrite-percentage 100&lt;br /&gt;
auto-aof-rewrite-min-size 64mb&lt;/blockquote&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
6.Redis(AOF - always)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
appendonly yes&lt;br /&gt;
appendfsync always&lt;br /&gt;
no-appendfsync-on-rewrite no&lt;br /&gt;
auto-aof-rewrite-percentage 100&lt;br /&gt;
auto-aof-rewrite-min-size 64mb&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
7.MongoDB&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
8.MySQL - MyISAM&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;blockquote class="tr_bq"&gt;
max_connections = 300&lt;br /&gt;
table_open_cache = 400&lt;br /&gt;
thread_cache_size = 4&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
9.MySQL - Innodb(innodb_flush_log_at_trx_commit=0)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
max_connections = 300&lt;br /&gt;
table_open_cache = 400&lt;br /&gt;
thread_cache_size = 4&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
innodb_log_file_size = 512m&lt;br /&gt;
innodb_flush_log_at_trx_commit = 0&lt;br /&gt;
innodb_buffer_pool_size = 2g&lt;br /&gt;
innodb_log_buffer_size = 16m&lt;/blockquote&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
10.MySQL - Innodb(innodb_flush_log_at_trx_commit=1)&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
max_connections = 300&lt;br /&gt;
table_open_cache = 400&lt;br /&gt;
thread_cache_size = 4&lt;br /&gt;
&lt;br /&gt;
innodb_log_file_size = 512m&lt;br /&gt;
innodb_flush_log_at_trx_commit = 1&lt;br /&gt;
innodb_buffer_pool_size = 2g&lt;br /&gt;
innodb_log_buffer_size = 16m&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
11.MySQL - Innodb(innodb_flush_log_at_trx_commit=2)&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
max_connections = 300&lt;br /&gt;
table_open_cache = 400&lt;br /&gt;
thread_cache_size = 4&lt;br /&gt;
&lt;br /&gt;
innodb_log_file_size = 512m&lt;br /&gt;
innodb_flush_log_at_trx_commit = 2&lt;br /&gt;
innodb_buffer_pool_size = 2g&lt;br /&gt;
innodb_log_buffer_size = 16m&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b style="font-size: x-large;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b style="font-size: x-large;"&gt;四、測試結果&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
所有結果數據與圖表有興趣可自行從&lt;a href="https://github.com/parkghost/NoSQLBenchmark/tree/master/results" target="_blank"&gt;Github下載&lt;/a&gt;，下面僅顯示 Thread:200 / Bytes:1024 壓力的圖表&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
1.Memcached&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-m0XL8V3wl6M/TtSh0hCr-gI/AAAAAAAAA5M/l49RJq9Ajdo/s1600/Method_Threads-DataSize1024-DataStoreMemcached.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="512" src="http://2.bp.blogspot.com/-m0XL8V3wl6M/TtSh0hCr-gI/AAAAAAAAA5M/l49RJq9Ajdo/s640/Method_Threads-DataSize1024-DataStoreMemcached.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Do27m9ca5cc/TtSh5Eb0HYI/AAAAAAAAA5U/HNj0zOkYu9Y/s1600/Method_DataSize-Threads200-DataStoreMemcached.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="512" src="http://2.bp.blogspot.com/-Do27m9ca5cc/TtSh5Eb0HYI/AAAAAAAAA5U/HNj0zOkYu9Y/s640/Method_DataSize-Threads200-DataStoreMemcached.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;div style="text-align: center;"&gt;
xmemcached(client library) 會將 get 操作轉成 mget 因而減少許多 get 指令，減少網路傳輸&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
2.Redis(without persistence)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
3.Redis(RDB)&lt;br /&gt;
4.Redis(AOF - no)&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-bscpK_2rBxM/TtSiYpYESaI/AAAAAAAAA5g/SviO1_3S1BA/s1600/Method_Threads-DataSize1024-DataStoreRedis.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="512" src="http://3.bp.blogspot.com/-bscpK_2rBxM/TtSiYpYESaI/AAAAAAAAA5g/SviO1_3S1BA/s640/Method_Threads-DataSize1024-DataStoreRedis.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-IQVvbNSppts/TtSiYCaLRbI/AAAAAAAAA5c/WmnaAoWWywM/s1600/Method_DataSize-Threads200-DataStoreRedis.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="512" src="http://3.bp.blogspot.com/-IQVvbNSppts/TtSiYCaLRbI/AAAAAAAAA5c/WmnaAoWWywM/s640/Method_DataSize-Threads200-DataStoreRedis.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
AOF寫入的效能依數據量增加而下降的比較明顯&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
5.Redis(AOF - every second)&lt;br /&gt;
6.Redis(AOF - always)&lt;br /&gt;
&lt;br /&gt;
當磁碟寫入&amp;nbsp;70M/s 的時候，Redis開始不能寫入資料，雖然停頓一陣子又能繼續運作，但已有寫入失敗，因而不能完成測試&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
[8112] 23 Nov 20:43:03 * Background AOF rewrite successful&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;[8112] 23 Nov 20:43:03 * Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.&lt;/span&gt;&lt;br /&gt;
[8112] 23 Nov 20:43:18 * Starting automatic rewriting of AOF on 101% growth&lt;br /&gt;
[8112] 23 Nov 20:43:18 * Background append only file rewriting started by pid 8253&lt;br /&gt;
[8253] 23 Nov 20:43:32 * SYNC append only file rewrite performed&lt;br /&gt;
[8112] 23 Nov 20:43:32 * Background AOF rewrite terminated with success&lt;br /&gt;
[8112] 23 Nov 20:43:35 * Parent diff successfully flushed to the rewritten AOF (239673418 bytes)&lt;br /&gt;
[8112] 23 Nov 20:43:35 * Background AOF rewrite successful&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
7.MongoDB&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;a href="http://3.bp.blogspot.com/-0EzRVOS_bE4/TtSjY7uoWLI/AAAAAAAAA5w/adlPgheeE4o/s1600/Method_Threads-DataSize1024-DataStoreMongodb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="512" src="http://3.bp.blogspot.com/-0EzRVOS_bE4/TtSjY7uoWLI/AAAAAAAAA5w/adlPgheeE4o/s640/Method_Threads-DataSize1024-DataStoreMongodb.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-O6XT8ziw0iM/TtSjYcyYFqI/AAAAAAAAA5s/y2nBrQeyoak/s1600/Method_DataSize-Threads200-DataStoreMongodb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="512" src="http://3.bp.blogspot.com/-O6XT8ziw0iM/TtSjYcyYFqI/AAAAAAAAA5s/y2nBrQeyoak/s640/Method_DataSize-Threads200-DataStoreMongodb.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;div style="text-align: center;"&gt;
同時讀取寫入的時候throughput&amp;nbsp;降到低點&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
8.MySQL - MyISAM&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
9.MySQL - Innodb(innodb_flush_log_at_trx_commit=0)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
10.MySQL - Innodb(innodb_flush_log_at_trx_commit=1)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
11.MySQL - Innodb(innodb_flush_log_at_trx_commit=2)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;a href="http://1.bp.blogspot.com/-r36T-wi_osE/TtSj1prGmrI/AAAAAAAAA6E/Wjt-GA4frw4/s1600/Method_Threads-DataSize1024-DataStoreMySQL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="512" src="http://1.bp.blogspot.com/-r36T-wi_osE/TtSj1prGmrI/AAAAAAAAA6E/Wjt-GA4frw4/s640/Method_Threads-DataSize1024-DataStoreMySQL.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-JrX1LJQ2_6M/TtSj02uDtRI/AAAAAAAAA58/9wvYp4FJ_3E/s1600/Method_DataSize-Threads50-DataStoreMySQL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="512" src="http://2.bp.blogspot.com/-JrX1LJQ2_6M/TtSj02uDtRI/AAAAAAAAA58/9wvYp4FJ_3E/s640/Method_DataSize-Threads50-DataStoreMySQL.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
MyISAM表現的還算平穩，但 Innodb 在 select 的時候反應很奇怪&lt;/div&gt;
&lt;br /&gt;
所有測試&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-VRdghBuCJDs/TtSl5EvAytI/AAAAAAAAA6U/t6PyeKuUE3U/s1600/Method_Threads-DataSize1024.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="512" src="http://3.bp.blogspot.com/-VRdghBuCJDs/TtSl5EvAytI/AAAAAAAAA6U/t6PyeKuUE3U/s640/Method_Threads-DataSize1024.png" width="640" /&gt;&lt;/a&gt;&lt;b style="font-size: x-large;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-poM1nYU5RPU/TtSl4Yos8nI/AAAAAAAAA6M/xtGIVgPIjm8/s1600/Method_DataSize-Threads200.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="512" src="http://4.bp.blogspot.com/-poM1nYU5RPU/TtSl4Yos8nI/AAAAAAAAA6M/xtGIVgPIjm8/s640/Method_DataSize-Threads200.png" width="640" /&gt;&lt;/a&gt;&lt;b style="font-size: x-large;"&gt;五、結論&lt;/b&gt;&lt;br /&gt;
&lt;b style="font-size: x-large;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
雖說是玩票性質的的測試，但數據還是找的出一些結論：&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Memcached的TPS領先Redis 約30%&lt;/li&gt;
&lt;li&gt;Memcached&amp;nbsp;979M 記憶體用量比Redis(RDB)&amp;nbsp;960.43M&amp;nbsp;多了一些些，疑?印像跟網路上說的不太一樣，可能數據太少還不足以評較&lt;/li&gt;
&lt;li&gt;Memcached在client的實作較Redis的先進&lt;/li&gt;
&lt;li&gt;Redis(AOF) 寫入的TPS比Redis(RDB)少了約55%&lt;/li&gt;
&lt;li&gt;Redis(AOF) 使用的記憶體比Redis(RDB)多了很多&lt;/li&gt;
&lt;li&gt;Redis(AOF)&amp;nbsp;寫入系統的檔案很大，重寫之後比RDB檔案大一些&lt;/li&gt;
&lt;li&gt;Redis 在 bgsave/bgrewriteaof 要fork一個process來寫檔案會吃到兩倍的記憶體&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-GRGZv_N74Fw/TtSz7181xRI/AAAAAAAAA6c/AnGkReEy7hM/s1600/Screen+Shot+2011-11-20+at+%25E4%25B8%258B%25E5%258D%25884.21.08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="435" src="http://4.bp.blogspot.com/-GRGZv_N74Fw/TtSz7181xRI/AAAAAAAAA6c/AnGkReEy7hM/s640/Screen+Shot+2011-11-20+at+%25E4%25B8%258B%25E5%258D%25884.21.08.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;以get/set來看MongoDB的效能跟MySQL MyIsam 接近&lt;/li&gt;
&lt;li&gt;MongoDB 在同時讀寫時TPS下降非常多&lt;/li&gt;
&lt;li&gt;mongo-java-driver&amp;nbsp;GC佔掉整體時間的1.85%，創建過多物件(可能是為了asynchronous write 的實作)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-KA0l1WBNd7o/TtU_8CdzFjI/AAAAAAAAA60/lvUYO-ItIgQ/s1600/Screen+Shot+2011-11-30+at+%25E4%25B8%258A%25E5%258D%25884.25.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="417" src="http://4.bp.blogspot.com/-KA0l1WBNd7o/TtU_8CdzFjI/AAAAAAAAA60/lvUYO-ItIgQ/s640/Screen+Shot+2011-11-30+at+%25E4%25B8%258A%25E5%258D%25884.25.58.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-mHNGln9GoNQ/TtU_pVPthzI/AAAAAAAAA6s/zX1qV__oj20/s1600/Screen+Shot+2011-11-30+at+%25E4%25B8%258A%25E5%258D%25884.23.13.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="418" src="http://1.bp.blogspot.com/-mHNGln9GoNQ/TtU_pVPthzI/AAAAAAAAA6s/zX1qV__oj20/s640/Screen+Shot+2011-11-30+at+%25E4%25B8%258A%25E5%258D%25884.23.13.png" width="640" /&gt;&lt;/a&gt; &lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;MySQL Innodb 的 select 結果不知道是怎麼一回事&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
測試下 Memcached 的吞吐量約為&amp;nbsp;Redis 的1.25 倍，但若 Redis 啟用AOF可能會有IO的問題，若是實際應用上有利用&amp;nbsp;Redis 特性，那整體效能到是可能優於採用 Memcached。&lt;br /&gt;
&lt;br /&gt;
對於開發測試程式過程也有些心得，第一個版本的測式程式用Python開發，但Threading模組的效能實在太差，Memcached吞吐量連20k都跨不過去，記憶體用量吃很兇；第二版改用JMeter 與 java sampler，但參數化與流程控制組合設定起來不夠彈性，加上即時數據的顯示，整體吞吐量較最後純Java版本少了約10%，若要再加入顯示圖表就更不用說了。&lt;br /&gt;
&lt;br /&gt;
順道一題，對岸同胞整理了許多關於Redis的技術文章，對於了解Redis有很大的幫助&lt;br /&gt;
&lt;a href="http://blog.nosqlfan.com/html/3537.html"&gt;http://blog.nosqlfan.com/html/3537.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-4486141768463618562?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/3TRI7vJ8Bgg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/4486141768463618562/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=4486141768463618562" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/4486141768463618562?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/4486141768463618562?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/3TRI7vJ8Bgg/memcached-vs-redis.html" title="Memcached vs Redis vs MongoDB vs MySQL 效能比較" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-m0XL8V3wl6M/TtSh0hCr-gI/AAAAAAAAA5M/l49RJq9Ajdo/s72-c/Method_Threads-DataSize1024-DataStoreMemcached.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2011/11/memcached-vs-redis.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YBQnsyfip7ImA9WhRVEkQ.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-2959556654767810576</id><published>2009-02-17T14:46:00.002+08:00</published><updated>2012-01-11T23:19:13.596+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T23:19:13.596+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="yahoo" /><title>Subscription TV programs from Yahoo Pipe</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oMPx7bWXMV_tEhi3BMPJq5a06ok/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oMPx7bWXMV_tEhi3BMPJq5a06ok/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oMPx7bWXMV_tEhi3BMPJq5a06ok/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oMPx7bWXMV_tEhi3BMPJq5a06ok/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Are you always missing TV programs or checking menu each day, so I create a pipe using Yahoo Pipe that can help you comfortable get TV programs timetable by RSS.&lt;br /&gt;
Limitation:  &lt;br /&gt;
The pipe just support 200 item maximal.   &lt;br /&gt;
The date range within five day.&lt;br /&gt;
1.Open Browser and jump to the &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=WuxYUJv53RGgmmaL6icw5g" target="_blank"&gt;pipe&lt;/a&gt;.&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/_G26NPuPoi1w/SZpc47vgr1I/AAAAAAAAAvg/9wPxAUyY4A4/s1600-h/image%5B60%5D.png"&gt;&lt;img alt="image" border="0" height="352" src="http://lh5.ggpht.com/_G26NPuPoi1w/SZpc6KcWcWI/AAAAAAAAAvk/dXrzU7hqbLs/image_thumb%5B30%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;br /&gt;
2.Enter keyword of TV program in the textbox after them click &lt;strong&gt;Run Pipe.&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SZpc7SIj0dI/AAAAAAAAAvo/7CLoLgvbQZg/s1600-h/image%5B67%5D.png"&gt;&lt;img alt="image" border="0" height="352" src="http://lh6.ggpht.com/_G26NPuPoi1w/SZpc8-Is03I/AAAAAAAAAvs/Vg-MiGm10-I/image_thumb%5B33%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SZpc90r9RJI/AAAAAAAAAvw/Uxcbb0DpH1s/s1600-h/image%5B68%5D.png"&gt;&lt;img alt="image" border="0" height="349" src="http://lh4.ggpht.com/_G26NPuPoi1w/SZpdAHnpsZI/AAAAAAAAAv0/56CJw6MtZsQ/image_thumb%5B34%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt;  &lt;br /&gt;
3. Right click &lt;strong&gt;Get as RSS&lt;/strong&gt; , select &lt;strong&gt;Copy Link Location&lt;/strong&gt;.&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/_G26NPuPoi1w/SZpdCObrOvI/AAAAAAAAAv4/WzQz-3tAaKI/s1600-h/image%5B72%5D.png"&gt;&lt;img alt="image" border="0" height="350" src="http://lh4.ggpht.com/_G26NPuPoi1w/SZpdDtULBoI/AAAAAAAAAv8/TVz702c6V_w/image_thumb%5B36%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;br /&gt;
4.Jump to &lt;a href="http://www.xfruits.com/" target="_blank"&gt;xFruits&lt;/a&gt; and then sign up a account by yourself.&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_G26NPuPoi1w/SZpdFmLTwbI/AAAAAAAAAwA/ZBcqrOMU_pw/s1600-h/image%5B43%5D.png"&gt;&lt;img alt="image" border="0" height="352" src="http://lh4.ggpht.com/_G26NPuPoi1w/SZpdG9bWgdI/AAAAAAAAAwE/LUgE36kNqFA/image_thumb%5B21%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;a href="http://lh4.ggpht.com/_G26NPuPoi1w/SZpdIIW5_jI/AAAAAAAAAwI/bxn8ioc6hgo/s1600-h/image%5B44%5D.png"&gt;&lt;img alt="image" border="0" height="352" src="http://lh3.ggpht.com/_G26NPuPoi1w/SZpdJMeY_fI/AAAAAAAAAwM/hG-YcR3U5rU/image_thumb%5B22%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;br /&gt;
5. I would like to get notifications by Mail so that click RSS to Mail and then fill the form.&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_G26NPuPoi1w/SZpdKYq8PCI/AAAAAAAAAwQ/D4_ciLIJSMA/s1600-h/image%5B32%5D.png"&gt;&lt;img alt="image" border="0" height="352" src="http://lh5.ggpht.com/_G26NPuPoi1w/SZpdLjjImxI/AAAAAAAAAwU/DzCmxetOhyM/image_thumb%5B16%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/_G26NPuPoi1w/SZpdM0e8mjI/AAAAAAAAAwY/mmwSj0s2ouQ/s1600-h/image%5B88%5D.png"&gt;&lt;img alt="image" border="0" height="349" src="http://lh5.ggpht.com/_G26NPuPoi1w/SZpdNxOjqSI/AAAAAAAAAwc/8R9hJHGeLpo/image_thumb%5B46%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;br /&gt;
6.Well, You will get mail very soon.&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_G26NPuPoi1w/SZpdPDRBcII/AAAAAAAAAwg/yBfujKv_JnU/s1600-h/image%5B84%5D.png"&gt;&lt;img alt="image" border="0" height="352" src="http://lh3.ggpht.com/_G26NPuPoi1w/SZpdQCLQwpI/AAAAAAAAAwk/Cn5tVkATiVY/image_thumb%5B44%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;br /&gt;
Resources:&lt;br /&gt;
Pipes: Rewire the web  &lt;br /&gt;
&lt;a href="http://pipes.yahoo.com/pipes/" title="http://pipes.yahoo.com/pipes/"&gt;http://pipes.yahoo.com/pipes/&lt;/a&gt;&lt;br /&gt;
xFruits - Compose your information system  &lt;br /&gt;
&lt;a href="http://www.xfruits.com/"&gt;http://www.xfruits.com/&lt;/a&gt;&lt;br /&gt;
Yahoo! Pipes Tutorial - An example using the Fetch Page module to make a web scraper  &lt;br /&gt;
&lt;a href="http://www.daybarr.com/blog/2007/12/11/yahoo-pipes-tutorial-an-example-using-the-fetch-page-module-to-make-a-web-scraper" title="http://www.daybarr.com/blog/2007/12/11/yahoo-pipes-tutorial-an-example-using-the-fetch-page-module-to-make-a-web-scraper"&gt;http://www.daybarr.com/blog/2007/12/11/yahoo-pipes-tutorial-an-example-using-the-fetch-page-module-to-make-a-web-scraper&lt;/a&gt;&lt;br /&gt;
電視時刻 - Yahoo!奇摩電影  &lt;br /&gt;
&lt;a href="http://tw.movie.yahoo.com/tv_index.html" title="http://tw.movie.yahoo.com/tv_index.html"&gt;http://tw.movie.yahoo.com/tv_index.html&lt;/a&gt;&lt;br /&gt;
The Regex Coach - interactive regular expressions  &lt;br /&gt;
&lt;a href="http://weitz.de/regex-coach/index.html"&gt;http://weitz.de/regex-coach/index.html&lt;/a&gt;&lt;br /&gt;
Java Regular Expression的學習筆記  &lt;br /&gt;
&lt;a href="http://www.javaworld.com.tw/jute/post/view?bid=20&amp;amp;id=130126&amp;amp;sty=1&amp;amp;tpg=2&amp;amp;age=0" title="http://www.javaworld.com.tw/jute/post/view?bid=20&amp;amp;id=130126&amp;amp;sty=1&amp;amp;tpg=2&amp;amp;age=0"&gt;http://www.javaworld.com.tw/jute/post/view?bid=20&amp;amp;id=130126&amp;amp;sty=1&amp;amp;tpg=2&amp;amp;age=0&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-2959556654767810576?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/Ue4VFODTLro" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/2959556654767810576/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=2959556654767810576" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/2959556654767810576?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/2959556654767810576?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/Ue4VFODTLro/subscription-tv-programs-from-yahoo.html" title="Subscription TV programs from Yahoo Pipe" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_G26NPuPoi1w/SZpc6KcWcWI/AAAAAAAAAvk/dXrzU7hqbLs/s72-c/image_thumb%5B30%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2009/02/subscription-tv-programs-from-yahoo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YMQXk4eip7ImA9WhRVEkQ.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-2653202427555581205</id><published>2009-02-04T18:11:00.005+08:00</published><updated>2012-01-11T23:19:40.732+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T23:19:40.732+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="flickr" /><category scheme="http://www.blogger.com/atom/ns#" term="gps" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>How to create kmz with picture icon</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/51io_ujb8gD4xw1hDx9Yx6abzDA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/51io_ujb8gD4xw1hDx9Yx6abzDA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/51io_ujb8gD4xw1hDx9Yx6abzDA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/51io_ujb8gD4xw1hDx9Yx6abzDA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;1. Take pictures and star GPS logger&lt;br /&gt;
2. Write geo-information to pictures(To reference posted  article:&lt;a href="http://parkghost.blogspot.com/search/label/gps"&gt;GPS 記錄器、相簿、工具、節點編輯...&lt;/a&gt;)&lt;br /&gt;
3. Launch Friendly Flicker&lt;br /&gt;
4.open a text file and put into below text and save to doc.kml(UTF8 format)&lt;br /&gt;
doc.kml&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;kml xmlns="http://earth.google.com/kml/2.1"&amp;gt;
&amp;lt;Document&amp;gt;
&amp;lt;name&amp;gt;Recent Uploads with geodata&amp;lt;/name&amp;gt;
&amp;lt;open&amp;gt;1&amp;lt;/open&amp;gt;

&amp;lt;/Document&amp;gt;
&amp;lt;/kml&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_G26NPuPoi1w/SYlpQd6J4LI/AAAAAAAAAsg/a6x6JVoG4lw/s1600-h/clip_image002%5B4%5D.jpg"&gt;&lt;img alt="clip_image002" border="0" height="364" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpRbZ-3bI/AAAAAAAAAsk/mNy0hBOChys/clip_image002_thumb%5B1%5D.jpg?imgmax=800" style="border: 0px none; display: inline;" title="clip_image002" width="480" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_G26NPuPoi1w/SYlpSCgGtFI/AAAAAAAAAso/Nx4uaXblPdM/s1600-h/image%5B35%5D.png"&gt;&lt;img alt="image" border="0" height="364" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpTJirB5I/AAAAAAAAAss/03Bjua9usxI/image_thumb%5B19%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="349" /&gt;&lt;/a&gt; &lt;br /&gt;
5. click tab “選項”then select all options.&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpT9WGKlI/AAAAAAAAAsw/nZZClQ-iLVs/s1600-h/image%5B11%5D.png"&gt;&lt;img alt="image" border="0" height="364" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpUnNxwMI/AAAAAAAAAs0/E_f7Ah-91NY/image_thumb%5B5%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="349" /&gt;&lt;/a&gt; &lt;br /&gt;
6.Select “清單顯示”that faster than icon mode.&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpVgJzWDI/AAAAAAAAAs4/RD5GvzTMlgY/s1600-h/image%5B15%5D.png"&gt;&lt;img alt="image" border="0" height="364" src="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpWS4EebI/AAAAAAAAAs8/47BH669g7Bg/image_thumb%5B7%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="349" /&gt;&lt;/a&gt; &lt;br /&gt;
7. Input search conditions then click “搜尋相片.&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpXZdqIZI/AAAAAAAAAtA/HFNhJ3YJvG4/s1600-h/image%5B19%5D.png"&gt;&lt;img alt="image" border="0" height="364" src="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpYUcYjsI/AAAAAAAAAtE/2JvD2SPirH8/image_thumb%5B9%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="349" /&gt;&lt;/a&gt; &lt;br /&gt;
8.While all of picture information loaded. right click on list and select "選擇全部相片”&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpZF7TPdI/AAAAAAAAAtI/dSRYcurP52Y/s1600-h/image%5B31%5D.png"&gt;&lt;img alt="image" border="0" height="379" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpaZMSmKI/AAAAAAAAAtQ/hUnTd3lc0Bs/image_thumb%5B17%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="349" /&gt;&lt;/a&gt;&lt;br /&gt;
9.Copy below text then put into firendly flickr.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;style id="normal/photo/{url}"&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;labelstyle&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;color&amp;gt;00ffffff&amp;lt;/color&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;scale&amp;gt;1&amp;lt;/scale&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;/labelstyle&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;iconstyle&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;scale&amp;gt;2&amp;lt;/scale&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;hotspot x="0.5" y="0.5" xunits="fraction" yunits="fraction"&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;icon&amp;gt;&amp;lt;br /&amp;gt;               &amp;lt;href&amp;gt;{image_st}&amp;lt;/href&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;/icon&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;/iconstyle&amp;gt;&amp;lt;br /&amp;gt;   &amp;lt;/style&amp;gt;
&amp;lt;style id="highlight/photo/{url}"&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;labelstyle&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;color&amp;gt;ffffffff&amp;lt;/color&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;scale&amp;gt;1&amp;lt;/scale&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;/labelstyle&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;iconstyle&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;scale&amp;gt;2&amp;lt;/scale&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;hotspot x="0.5" y="0.5" xunits="fraction" yunits="fraction"&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;icon&amp;gt;&amp;lt;br /&amp;gt;               &amp;lt;href&amp;gt;{image_st}&amp;lt;/href&amp;gt;&amp;lt;br /&amp;gt;           &amp;lt;/icon&amp;gt;&amp;lt;br /&amp;gt;       &amp;lt;/iconstyle&amp;gt;&amp;lt;br /&amp;gt;   &amp;lt;/style&amp;gt;
&amp;lt;stylemap id="styleMap/photo/{url}"&amp;gt;
   &amp;lt;pair&amp;gt;
     &amp;lt;key&amp;gt;normal&amp;lt;/key&amp;gt;
     &amp;lt;styleurl&amp;gt;#normal/photo/{url}&amp;lt;/styleurl&amp;gt;
   &amp;lt;/pair&amp;gt;
   &amp;lt;pair&amp;gt;
     &amp;lt;key&amp;gt;highlight&amp;lt;/key&amp;gt;
     &amp;lt;styleurl&amp;gt;#highlight/photo/{url}&amp;lt;/styleurl&amp;gt;
   &amp;lt;/pair&amp;gt;
 &amp;lt;/stylemap&amp;gt;
&amp;lt;placemark&amp;gt;
   &amp;lt;styleurl&amp;gt;#styleMap/photo/{url}&amp;lt;/styleurl&amp;gt;
   &amp;lt;name&amp;gt;{title}&amp;lt;/name&amp;gt;
   &amp;lt;snippet maxlines="4"&amp;gt;
  
   &amp;lt;/snippet&amp;gt;
       &amp;lt;description&amp;gt;
       &amp;lt;!--[CDATA[                &amp;lt;a href="{url}"&amp;gt;&amp;lt;img src="{image_s}" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;               &amp;lt;b&amp;gt;Title:&amp;lt;/b&amp;gt;{title}&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;               &amp;lt;b&amp;gt;Descript:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;{descript}&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;               &amp;lt;b&amp;gt;Date time:&amp;lt;/b&amp;gt;{date_time}&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;               &amp;lt;b&amp;gt;Model:&amp;lt;/b&amp;gt;{model}&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;               &amp;lt;b&amp;gt;Tags:&amp;lt;/b&amp;gt;{tag1},{tag2},{tag3} ...&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;               &amp;lt;a href="{url}"&amp;gt;Open photo page&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;               &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;               ]]--&amp;gt;
       &amp;lt;/description&amp;gt;
   &amp;lt;point&amp;gt;
       &amp;lt;coordinates&amp;gt;{longitude},{latitude}&amp;lt;/coordinates&amp;gt;
   &amp;lt;/point&amp;gt;
&amp;lt;/placemark&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
10.Click tab 進階模版 and  啟動&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpa9imgTI/AAAAAAAAAtU/QueEVOAvXr0/s1600-h/clip_image006%5B4%5D.jpg"&gt;&lt;img alt="clip_image006" border="0" height="364" src="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpb3568dI/AAAAAAAAAtY/YHuHHmDB7Rs/clip_image006_thumb%5B1%5D.jpg?imgmax=800" style="border: 0px none; display: inline;" title="clip_image006" width="349" /&gt;&lt;/a&gt;&lt;br /&gt;
11.Click “複製到剪貼簿”(the friendly fickr will get picture information form web site and apply the template before put inside.)&lt;br /&gt;
※Because the FF do not supprt photo id parameter , so that use url to generate id. after step replace surplus urls.&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpcmNzGeI/AAAAAAAAAtc/5OUurADWyCM/s1600-h/clip_image008%5B4%5D.jpg"&gt;&lt;img alt="clip_image008" border="0" height="364" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpdoHF13I/AAAAAAAAAtg/JRTuBeTKYbo/clip_image008_thumb%5B1%5D.jpg?imgmax=800" style="border: 0px none; display: inline;" title="clip_image008" width="348" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpea5UhtI/AAAAAAAAAtk/jDvpmGqEMys/s1600-h/image%5B7%5D.png"&gt;&lt;img alt="image" border="0" height="364" src="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpfW8c79I/AAAAAAAAAto/NwnGj69ytH4/image_thumb%5B3%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="481" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpgNxzkEI/AAAAAAAAAts/CD2DhwDxIQ4/s1600-h/clip_image010%5B4%5D.jpg"&gt;&lt;img alt="clip_image010" border="0" height="364" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYlphGzPWFI/AAAAAAAAAtw/Fnt8rN3Hgdc/clip_image010_thumb%5B1%5D.jpg?imgmax=800" style="border: 0px none; display: inline;" title="clip_image010" width="480" /&gt;&lt;/a&gt;&lt;br /&gt;
12.Replace the picture id. copy below option to replace dialog. and select Regular Expressions and select option Perl&lt;br /&gt;
&lt;pre class="brush: xml"&gt;photo/http://www.flickr.com/photos/(.*?)/(.*?)/
photo/\2&lt;/pre&gt;
&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYlph_6y2PI/AAAAAAAAAt0/MRwIeydh1pI/s1600-h/clip_image012%5B4%5D.jpg"&gt;&lt;img alt="clip_image012" border="0" height="364" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpi-vgsnI/AAAAAAAAAt4/N9bp01cjd84/clip_image012_thumb%5B1%5D.jpg?imgmax=800" style="border: 0px none; display: inline;" title="clip_image012" width="425" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpjndXawI/AAAAAAAAAt8/AgpemlkDX7g/s1600-h/clip_image014%5B4%5D.jpg"&gt;&lt;img alt="clip_image014" border="0" height="364" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpklX52LI/AAAAAAAAAuA/eTZNRDogIVo/clip_image014_thumb%5B1%5D.jpg?imgmax=800" style="border: 0px none; display: inline;" title="clip_image014" width="480" /&gt;&lt;/a&gt;&lt;br /&gt;
14.compress to zip file and rename the extension to *.kmz&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/_G26NPuPoi1w/SYlplUPXxZI/AAAAAAAAAuE/CSrCwprg2Ss/s1600-h/clip_image016%5B4%5D.jpg"&gt;&lt;img alt="clip_image016" border="0" height="364" src="http://lh4.ggpht.com/_G26NPuPoi1w/SYlpmcNF8NI/AAAAAAAAAuI/A3xg0c-YzEQ/clip_image016_thumb%5B1%5D.jpg?imgmax=800" style="border: 0px none; display: inline;" title="clip_image016" width="410" /&gt;&lt;/a&gt;&lt;br /&gt;
15.After that you can place in internet such as google page to share anyone.&lt;br /&gt;
16.This site can validator your kmz.&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_G26NPuPoi1w/SYlpnP8WGjI/AAAAAAAAAuM/jtOHMFJBmyM/s1600-h/clip_image018%5B4%5D.jpg"&gt;&lt;img alt="clip_image018" border="0" height="364" src="http://lh4.ggpht.com/_G26NPuPoi1w/SYlpn0Xf_MI/AAAAAAAAAuQ/NPUxv7JCFO8/clip_image018_thumb%5B1%5D.jpg?imgmax=800" style="border: 0px none; display: inline;" title="clip_image018" width="454" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://maps.google.com/?q=http://parkghost.googlepages.com/20080810.Beipu.kmz" target="_blank"&gt;Demo&lt;/a&gt; … Google Map&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_G26NPuPoi1w/SYlpozZ3ajI/AAAAAAAAAuU/I9n5zM_0m7w/s1600-h/clip_image020%5B4%5D.jpg"&gt;&lt;img alt="clip_image020" border="0" height="364" src="http://lh6.ggpht.com/_G26NPuPoi1w/SYlpp5thDXI/AAAAAAAAAuY/rysHt5Jq2SU/clip_image020_thumb%5B1%5D.jpg?imgmax=800" style="border: 0px none; display: inline;" title="clip_image020" width="454" /&gt;&lt;/a&gt;&lt;br /&gt;
Save the kmz link to My Map that will show pictures by postition when you move .&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_G26NPuPoi1w/SYlprXctQzI/AAAAAAAAAuc/dpshUtAlNio/s1600-h/image%5B42%5D.png"&gt;&lt;img alt="image" border="0" height="350" src="http://lh4.ggpht.com/_G26NPuPoi1w/SYlptA3mE3I/AAAAAAAAAug/4GEoVkrZhOg/image_thumb%5B22%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;br /&gt;
Double click *.kmz … Google Earth&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYlpvefEjMI/AAAAAAAAAuk/Ql54PVDDTzc/s1600-h/image%5B3%5D.png"&gt;&lt;img alt="image" border="0" height="338" src="http://lh6.ggpht.com/_G26NPuPoi1w/SYlpxsH6_DI/AAAAAAAAAuo/qOYD4rVaMPs/image_thumb%5B1%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="484" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-2653202427555581205?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/uM6Pbalx-ps" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/2653202427555581205/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=2653202427555581205" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/2653202427555581205?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/2653202427555581205?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/uM6Pbalx-ps/how-to-create-kmz-with-picture-icon.html" title="How to create kmz with picture icon" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_G26NPuPoi1w/SYlpRbZ-3bI/AAAAAAAAAsk/mNy0hBOChys/s72-c/clip_image002_thumb%5B1%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2009/02/how-to-create-kmz-with-picture-icon.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8AR34yfip7ImA9WhRXE08.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-3124977438353946857</id><published>2009-02-04T13:18:00.005+08:00</published><updated>2011-12-20T02:54:06.096+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-20T02:54:06.096+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scripts" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>ubuntu configuration memo</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XY_6vSRuHlF5jHJ4gN4zCrcZkuQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XY_6vSRuHlF5jHJ4gN4zCrcZkuQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XY_6vSRuHlF5jHJ4gN4zCrcZkuQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XY_6vSRuHlF5jHJ4gN4zCrcZkuQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;b&gt;Install gcin and liu&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: bash" name="code"&gt;sudo apt-get install gcin
tar -zxf liu_gcin120.tar.gz
sudo ./liu_gcin120/install.sh
gedit ~/.gnomerc

#gcin environment

export GTK_IM_MODULE=gcin
export XMODIFIERS="@im=gcin"

gcin &amp;amp;&lt;/pre&gt;
&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYklFKg5pmI/AAAAAAAAAr4/GdYuK1-hXms/s1600-h/clip_image002%5B4%5D.jpg"&gt;&lt;img alt="clip_image002" border="0" height="160" src="http://lh6.ggpht.com/_G26NPuPoi1w/SYklF-gNT4I/AAAAAAAAAr8/bd14uhwvDhM/clip_image002_thumb%5B1%5D.jpg?imgmax=800" style="border-width: 0px; display: inline;" title="clip_image002" width="484" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Launch System &amp;gt; Preferences &amp;gt; Sound &amp;gt; gcin Setup&lt;br /&gt;
click &lt;b&gt;Setting for gtab input methods&lt;/b&gt; then unselect &lt;b&gt;Auto-send when keycodes are filled&lt;/b&gt;&lt;br /&gt;
relogin x-window&lt;br /&gt;
&lt;b&gt;Disable alert sound&lt;/b&gt;&lt;br /&gt;System &amp;gt; Preferences &amp;gt; Sound &amp;gt; Soulds Tab&lt;br /&gt;unselect “play alert sound”&lt;br /&gt;
&lt;b&gt;Install stardic&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: bash; toolbar: false" name="code"&gt;
sudo apt-get install stardict&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Add firefox search plugin(/usr/lib/firefox-3.0.5/searchplugins)&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Install windows applications&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: bash; toolbar: false" name="code"&gt;
sudo apt-get install wine&lt;/pre&gt;
&lt;br /&gt;
Download the wine-door package from the &lt;a href="http://www.wine-doors.org/"&gt;link&lt;/a&gt; after that follow below commands to install&lt;br /&gt;
&lt;pre class="brush: bash; toolbar: false" name="code"&gt;
sudo dpkg -i wine-doors_0.1.2_all.deb&lt;/pre&gt;
&lt;br /&gt;
Install pdf-XChange right click on PDFXVwer.exe and select &lt;b&gt;Open With Wine Windows Program Loader (This tool is useful to highlight and comment in pdf file)&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Install IE6 just access &lt;/b&gt;&lt;a href="http://www.tatanka.com.br/ies4linux/page/Installation:Ubuntu"&gt;link&lt;/a&gt;&lt;b&gt; and fellow the instructions&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Configuration Pidgin&lt;/b&gt;&lt;br /&gt;
right click on pidgin icon and select &lt;b&gt;Blink on New Message. &lt;/b&gt;Again, click plugins and select below plugins.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;History&lt;/li&gt;
&lt;li&gt;Offline Mesasge Emulation&lt;/li&gt;
&lt;li&gt;Message Notification&lt;br /&gt;Notify For&lt;br /&gt;■ IM Windows&lt;br /&gt;■ Chat windows&lt;/li&gt;
&lt;/ul&gt;
Accouns &amp;gt; select account which you are using &amp;gt; Modify&lt;br /&gt;
Enter &lt;b&gt;Local alise&lt;/b&gt; and select &lt;b&gt;New mail notifications&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYklGpTfmbI/AAAAAAAAAsA/foA0xwI4M_k/s1600-h/clip_image004%5B4%5D.jpg"&gt;&lt;img alt="clip_image004" border="0" height="364" src="http://lh3.ggpht.com/_G26NPuPoi1w/SYklHAXJaSI/AAAAAAAAAsE/igdDJnyYMp4/clip_image004_thumb%5B1%5D.jpg?imgmax=800" style="border-width: 0px; display: inline;" title="clip_image004" width="335" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Install chm reader&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: bash; toolbar: false" name="code"&gt;
sudo apt-get install gnochm&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Issue&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: the default font size is small&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Download the &lt;/i&gt;&lt;a href="http://launchpadlibrarian.net/17175304/gnochm-fontsize.patch"&gt;font-patch&lt;/a&gt;&lt;i&gt; from the &lt;/i&gt;&lt;a href="https://bugs.launchpad.net/gnochm/+bug/86889"&gt;link&lt;/a&gt;&lt;i&gt; after that follow below commands to apply.&lt;/i&gt;&lt;br /&gt;
&lt;pre class="brush: bash; toolbar: false" name="code"&gt;
sudo patch -b /usr/bin/gnochm &amp;lt; gnochm-fontsize.patch&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Install Google gadget&lt;/b&gt;&lt;br /&gt;
Download the &lt;a href="http://getdeb.agetta.de/ubuntu/hardy/go/google-gadgets_0.10.4-0~getdeb1_i386.deb"&gt;package&lt;/a&gt; from the &lt;a href="http://www.getdeb.net/app/Google+Gadgets"&gt;link&lt;/a&gt; after that follow below commands to install.&lt;br /&gt;
sudo dpkg -i google-gadgets_0.9.3-0~getdeb1_i386.deb&lt;br /&gt;
Launch Applications &amp;gt; Accessories &amp;gt; Google Gadget (GTK)&lt;br /&gt;
&lt;b&gt;Install Notes.&lt;/b&gt;&lt;br /&gt;
Download &lt;b&gt;IBM Lotus Notes 8.5 Client for Linux (Debian Install)&lt;/b&gt; from &lt;a href="http://www14.software.ibm.com/webapp/download/home.jsp"&gt;IBM&lt;/a&gt; after that follow below commands to install.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: bash" name="code"&gt;
mkdir notes
tar -xf '/home/brandon/Desktop/notes85_notes_linux_deb_beta2_prod.tar' -C notes
sudo dpkg -i notes/ibm_lotus_notes-8.5.i586.deb
/opt/ibm/lotus/notes/notes&lt;/pre&gt;
&lt;b&gt;Install JDK with Netbean / Eclipse&lt;/b&gt;&lt;br /&gt;
Download JDK from &lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;Sun&lt;/a&gt;&lt;i&gt; &lt;/i&gt;after that follow below commands to install.&lt;br /&gt;
&lt;pre class="brush: bash" name="code"&gt;chmod u+x jdk-6u11-linux-i586.bin
./jdk-6u11-linux-i586.bin
gedit /home/brandon/.bashrc
export $JAVA_HOME=/home/brandon/jdk1.6.0_11
export PATH=$PATH:$JAVA_HOME/bin&lt;/pre&gt;
&lt;a href="http://lh5.ggpht.com/_G26NPuPoi1w/SYklHzgM0_I/AAAAAAAAAsI/A1wLE5sJ8EM/s1600-h/clip_image006%5B4%5D.jpg"&gt;&lt;img alt="clip_image006" border="0" height="364" src="http://lh3.ggpht.com/_G26NPuPoi1w/SYklIuNfC1I/AAAAAAAAAsM/Pc4vq9fRe10/clip_image006_thumb%5B1%5D.jpg?imgmax=800" style="border-width: 0px; display: inline;" title="clip_image006" width="472" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download Netbean from &lt;a href="http://www.netbeans.org/downloads/index.html"&gt;link&lt;/a&gt;&lt;i&gt; &lt;/i&gt;after that follow below commands to install.&lt;br /&gt;
&lt;pre class="brush: bash; toolbar: false" name="code"&gt;sudo '/media/Brandon'\''s HDD/untitled folder/netbeans-6.5-ml-java-linux.sh' --javahome $JAVA_HOME&lt;/pre&gt;
Download Eclipse from &lt;a href="http://www.eclipse.org/downloads/"&gt;link&lt;/a&gt;&lt;i&gt; &lt;/i&gt;after that follow below commands to install.&lt;br /&gt;
&lt;pre class="brush: bash" name="code"&gt;sudo tar -zxvf eclipse-jee-ganymede-SR1-linux-gtk.tar.gz -C /opt/
gedit ~/.gnomerc

#JAVA Environment
export JAVA_HOME=/home/brandon/jdk1.6.0_11
export PATH=$PATH:$JAVA_HOME/bin &lt;/pre&gt;
&lt;i&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/_G26NPuPoi1w/SYklJP3vAOI/AAAAAAAAAsQ/e7vWtQHWwpA/s1600-h/clip_image008%5B8%5D.jpg"&gt;&lt;img alt="clip_image008" border="0" height="160" src="http://lh4.ggpht.com/_G26NPuPoi1w/SYklJ0APMrI/AAAAAAAAAsU/uE95Eni9zJw/clip_image008_thumb%5B5%5D.jpg?imgmax=800" style="border-width: 0px; display: inline;" title="clip_image008" width="484" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Add new Launcher in deskop&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYklK_I-JHI/AAAAAAAAAsY/fBID5n_wyqY/s1600-h/clip_image010%5B4%5D.jpg"&gt;&lt;img alt="clip_image010" border="0" height="364" src="http://lh6.ggpht.com/_G26NPuPoi1w/SYklLs72p0I/AAAAAAAAAsc/agZBVfbPMi4/clip_image010_thumb%5B1%5D.jpg?imgmax=800" style="border-width: 0px; display: inline;" title="clip_image010" width="409" /&gt;&lt;/a&gt;&lt;br /&gt;
Install Mail-Notification and enable SSL. (&lt;a href="http://parkghost.googlepages.com/mail-notification_5.4.dfsg.1-1build1.deb"&gt;package&lt;/a&gt;)&lt;br /&gt;(Reference : http://glyphobet.net/blog/essay/286)&lt;br /&gt;
&lt;pre class="brush: bash" name="code"&gt;sudo dpkg -i mail-notification_5.4.dfsg.1-1build1.deb&lt;/pre&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-3124977438353946857?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/mYzst8cmvh8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/3124977438353946857/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=3124977438353946857" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/3124977438353946857?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/3124977438353946857?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/mYzst8cmvh8/ubuntu-configuration-memo.html" title="ubuntu configuration memo" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_G26NPuPoi1w/SYklF-gNT4I/AAAAAAAAAr8/bd14uhwvDhM/s72-c/clip_image002_thumb%5B1%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2009/02/ubuntu-configuration-memo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UFQn46cSp7ImA9WhRVEkQ.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-8403349414740533839</id><published>2009-02-04T12:45:00.004+08:00</published><updated>2012-01-11T23:20:13.019+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T23:20:13.019+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scripts" /><category scheme="http://www.blogger.com/atom/ns#" term="greasemonkey" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Google Notebook Gadget Resizer</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XCTZnUiVSK4ASNvv97WcVxgPazQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XCTZnUiVSK4ASNvv97WcVxgPazQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XCTZnUiVSK4ASNvv97WcVxgPazQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XCTZnUiVSK4ASNvv97WcVxgPazQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;The default height of notebook gadget is 200px , it’s too short that need often to scroll down/up , so that write a script to change the height.&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/_G26NPuPoi1w/SYkdGDfIy0I/AAAAAAAAAqw/d-yqkfc_xf8/s1600-h/image%5B48%5D.png"&gt;&lt;img alt="image" border="0" height="364" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYkdIQae1xI/AAAAAAAAAq0/JWTU211Nwgc/image_thumb%5B26%5D.png?imgmax=800" style="border-width: 0px; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;br /&gt;
Install Greasemonkey   &lt;br /&gt;
&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748" title="https://addons.mozilla.org/en-US/firefox/addon/748"&gt;https://addons.mozilla.org/en-US/firefox/addon/748&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/_G26NPuPoi1w/SYkdJ_jg_QI/AAAAAAAAAq4/MsUYTSkgB5s/s1600-h/image%5B49%5D.png"&gt;&lt;img alt="image" border="0" height="364" src="http://lh6.ggpht.com/_G26NPuPoi1w/SYkdLwPpfYI/AAAAAAAAAq8/VF8sI2ydXYs/image_thumb%5B27%5D.png?imgmax=800" style="border-width: 0px; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;br /&gt;
User Script:Google Notebook Gadget Resizer   &lt;br /&gt;
&lt;a href="http://userscripts.org/scripts/show/41679"&gt;http://userscripts.org/scripts/show/41679&lt;/a&gt;&lt;br /&gt;
&lt;h5&gt;

&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYkdNXDYVTI/AAAAAAAAArA/eoFR1RxH0fA/s1600-h/image%5B50%5D.png"&gt;&lt;img alt="image" border="0" height="364" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYkdO_hMkzI/AAAAAAAAArE/B1FpPrOu_Yo/image_thumb%5B28%5D.png?imgmax=800" style="border-width: 0px; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;/h5&gt;
Result:&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/_G26NPuPoi1w/SYkdQ_eWFQI/AAAAAAAAArI/TyNvMOZUj_Q/s1600-h/image%5B51%5D.png"&gt;&lt;img alt="image" border="0" height="364" src="http://lh5.ggpht.com/_G26NPuPoi1w/SYkdS1rgMpI/AAAAAAAAArM/b5_0mzuZCk8/image_thumb%5B29%5D.png?imgmax=800" style="border-width: 0px; display: inline;" title="image" width="484" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;h4&gt;

Code:&lt;/h4&gt;
&lt;pre class="brush: javascript" name="code"&gt;// ==UserScript==
// @name          Google Notebook Gadget Resizer
// @description   To change height of gadgets in iGoogle
// @include       http://www.google.com/ig*
// @include       http://www.google.com.tw/ig*

// @author        parkghost@hotmail.com
// @version       1.0
// ==/UserScript==

// This script are working on Google notebook gadget and some similar gadgets which content type is url and not using dynamic-height feature.
//
// you can fellow below instruction to modify default height of Google notebook gadget or add more gadget to apply new height.
//
// 1.input "about:config" in url box
// 2.search "greasemonkey.scriptvals.userscripts.org/Google Notebook Gadget Resizer.oGadgets"
// 3.The properly is a array of url pattern with height that can modify of you want to.
//
// default:
// ({'http://www.google.com/notebook/ig':"600px", 'url pattern':"400px"})
//
// The url of gadget you could look at page source that place in iframe tag.(ex.http ://87.gmodules.com/ig/ifr?view=home&amp;amp;&lt;b&gt;url=http://itszero.googlepages.com/iGoogleTVSchedule.xml&lt;/b&gt;&amp;amp;nocache=0&amp;amp;up_timeRange=0&amp;amp;up_showPrograms=6&amp;amp;up_fontSize=0.75&amp;amp;up_favoriteChannels=&amp;amp;up_defaultChannel=74&amp;amp;lang=en&amp;amp;country=us&amp;amp;.lang=en&amp;amp;.country=us&amp;amp;synd=ig&amp;amp;mid=87&amp;amp;ifpctok=-5100993727886241321&amp;amp;parent=http://www.google.com&amp;amp;extern_js=/extern_js/f/CgJlbhICdXMrMAo4ACwrMBA4ACwrMBI4ACwrMBM4ACwrMBU4ACw/GgLq_VyeDu0.js)
//
// The URL parameter is good to become a URL pattern.
// http://itszero.googlepages.com/iGoogleTVSchedule.xml

var oGadgets = {'http://www.google.com/notebook/ig':'600px','url pattern':'400px'};
var oGadgetsStr = GM_getValue('oGadgets');
if(oGadgetsStr){
 oGadgets = eval(oGadgetsStr);
}else{
GM_setValue('oGadgets',uneval(oGadgets));
}
var oFrames = document.getElementsByTagName('iframe');
for(var i=0 ; i &amp;lt; oFrames.length ; i++){ 
 for(var key in oGadgets){
   var re = new RegExp(key); 
   if(re.test(oFrames[i].src)){
     oFrames[i].style.height = oGadgets[key];
   }
 }
}&lt;/pre&gt;
&lt;h4&gt;

Resources:&lt;/h4&gt;
Greasemonkey Manual:API&lt;br /&gt;
&lt;a href="http://wiki.greasespot.net/API_reference" title="http://wiki.greasespot.net/API_reference"&gt;http://wiki.greasespot.net/API_reference&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Managing Gadget Height&lt;br /&gt;
&lt;a href="http://code.google.com/apis/gadgets/docs/ui.html#Dyn_Height" title="http://code.google.com/apis/gadgets/docs/ui.html#Dyn_Height"&gt;http://code.google.com/apis/gadgets/docs/ui.html#Dyn_Height&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-8403349414740533839?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/zinZmvnMgtk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/8403349414740533839/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=8403349414740533839" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/8403349414740533839?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/8403349414740533839?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/zinZmvnMgtk/google-notebook-gadget-resizer.html" title="Google Notebook Gadget Resizer" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_G26NPuPoi1w/SYkdIQae1xI/AAAAAAAAAq0/JWTU211Nwgc/s72-c/image_thumb%5B26%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2009/02/google-notebook-gadget-resizer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UHQ30_fCp7ImA9WhRVEkQ.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-431542330820989067</id><published>2009-01-05T15:55:00.002+08:00</published><updated>2012-01-11T23:20:32.344+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T23:20:32.344+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="j2ee" /><title>Write EJB Client</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pDuEb3JT_bi8xTXR1Ebwa9W8VAE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pDuEb3JT_bi8xTXR1Ebwa9W8VAE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pDuEb3JT_bi8xTXR1Ebwa9W8VAE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pDuEb3JT_bi8xTXR1Ebwa9W8VAE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;The JNDI could support java client&amp;nbsp; to get EJB instance from Container.&lt;br /&gt;
We have two type configuration for JNDI. First one,To hardcode properties in program look like listen 1, Other one is put properties in file jndi.properties and place on root directory of classes.&lt;br /&gt;
Listing 1&lt;br /&gt;
&lt;pre class="brush: java"&gt;Properties props = new Properties();        
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
InitialContext ctx = new InitialContext(props);
helloworld = (HelloWorld)ctx.lookup("HelloWorldBean/remote");&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Listing 2 (jndi.properties)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: text "&gt;java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Ps. if application depoly on EJB container the container will import jndi properties form default configuration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-431542330820989067?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/1Ycwgv32ou0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/431542330820989067/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=431542330820989067" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/431542330820989067?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/431542330820989067?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/1Ycwgv32ou0/write-ejb-client.html" title="Write EJB Client" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2009/01/write-ejb-client.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQEQ345cCp7ImA9Wx9aE04.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-261634671478565164</id><published>2008-09-24T10:05:00.005+08:00</published><updated>2011-03-05T21:38:22.028+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-05T21:38:22.028+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><title>Linux remote desktop using VNC</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q9q2ENzLY_eTf5-sGvbO7Ado2dc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q9q2ENzLY_eTf5-sGvbO7Ado2dc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q9q2ENzLY_eTf5-sGvbO7Ado2dc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q9q2ENzLY_eTf5-sGvbO7Ado2dc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Steps：  &lt;br /&gt;1.install vncserver   &lt;br /&gt;&lt;pre class="brush: bash"&gt;&lt;br /&gt;[root@hostname ~]#yum install vncserver   &lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;2.startup vncserver   &lt;br /&gt;&lt;pre class="brush: bash"&gt;&lt;br /&gt;[root@hostname ~]# service vncserver start   &lt;br /&gt;Starting VNC server: no displays configured [ OK ]   &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3.change environment who user you want to login   &lt;br /&gt;&lt;pre class="brush: bash"&gt;&lt;br /&gt;[root@hostname ~]#su – root   &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4.startup a vncserver instance and assign login password   &lt;br /&gt;&lt;pre class="brush: bash"&gt;&lt;br /&gt;[root@hostname ~]# vncserver   &lt;br /&gt;&lt;br /&gt;You will require a password to access your desktops.   &lt;br /&gt;&lt;br /&gt;Password:   &lt;br /&gt;Verify:   &lt;br /&gt;&lt;br /&gt;New 'hostname:1 (root)' desktop is hostname:1 &lt;a href="http://xx.xx.xx.xx:5801/"&gt;http://xx.xx.xx.xx:5801&lt;/a&gt;   &lt;br /&gt;&lt;br /&gt;Creating default startup script /root/.vnc/xstartup   &lt;br /&gt;Starting applications specified in /root/.vnc/xstartup   &lt;br /&gt;Log file is /root/.vnc/hostname:1.log&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;5.stop the vncserver instance.&lt;br /&gt;&lt;pre class="brush: bash"&gt;&lt;br /&gt;[root@hostname ~]# vncserver -kill :1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;6.Modifiy default startup script /root/.vnc/xstartup&lt;/p&gt;&lt;br /&gt;&lt;pre class="brush: bash"&gt;# Uncomment the following two lines for normal desktop:&lt;br /&gt;unset SESSION_MANAGER   &amp;lt;= remove the mark&lt;br /&gt;exec /etc/X11/xinit/xinitrc  &amp;lt;= remove the mark&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;7.Use Vnc Client as like OpenVnc and UltraVnc to connect the server.&lt;br /&gt;Resources:&lt;br /&gt;http://forum.icst.org.tw/phpbb/viewtopic.php?t=11500&lt;br /&gt;http://linux.vbird.org/linux_server/0310telnetssh.php#vnc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-261634671478565164?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/wkzZcSwmw5A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/261634671478565164/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=261634671478565164" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/261634671478565164?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/261634671478565164?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/wkzZcSwmw5A/forwarduse-vnc-on-linux.html" title="Linux remote desktop using VNC" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/09/forwarduse-vnc-on-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4GQX44fip7ImA9WhRXE08.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-3770343871965516433</id><published>2008-05-29T00:02:00.001+08:00</published><updated>2011-12-20T02:55:20.036+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-20T02:55:20.036+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ghost" /><category scheme="http://www.blogger.com/atom/ns#" term="pxe" /><title>學生電腦安裝手冊(舊存檔)</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MD83VZML-F8wMIxewhaGGNrgrJk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MD83VZML-F8wMIxewhaGGNrgrJk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MD83VZML-F8wMIxewhaGGNrgrJk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MD83VZML-F8wMIxewhaGGNrgrJk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;在挖資料時發現以前寫的安裝手冊，把它丟上來給有需要的人&lt;br /&gt;
-------------------------------歷 史 的 分 隔 線-----------------------------------&lt;br /&gt;
一、... 傳播架構... 1&lt;br /&gt;
二、... 硬體環境... 1&lt;br /&gt;
三、... 軟體環境... 1&lt;br /&gt;
四、... Step 1前置步驟... 2&lt;br /&gt;
五、... Step 2製作開機映像檔... 3&lt;br /&gt;
六、... Step 3製作PXE開機選單... 8&lt;br /&gt;
七、... Step 4製作Ghost映像檔... 12&lt;br /&gt;
八、... Step 5多點傳播... 16&lt;br /&gt;
九、... Step 6修改各PC端IP、Hostname 19&lt;br /&gt;
十、... Step 7測試群組與IP.. 21&lt;br /&gt;
十一、參考資源... 21&lt;br /&gt;
十二、附錄一... 22&lt;br /&gt;
&lt;a href="" name="_Toc128880410"&gt;&lt;b&gt;一、 &lt;/b&gt;&lt;b&gt;傳播架構&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD1-7VsZ0DI/AAAAAAAAAPw/6q8RapbbkRQ/s1600-h/clip_image002%5B6%5D.gif"&gt;&lt;img alt="clip_image002" border="0" height="163" src="http://lh4.ggpht.com/parkghost/SD1-8VsZ0EI/AAAAAAAAAP4/MBEUv0PQScE/clip_image002_thumb%5B3%5D.gif?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;
PC1為製作映像檔之電腦，Multicast Server為傳播映像檔給所有電腦之伺服器，其傳播過程分為兩階段，其一：PC1 經由網路&lt;u&gt;備份&lt;/u&gt;映像檔至Multicast Server (Step1 - 4)，其二：Multicast Server 經由網路&lt;u&gt;還原&lt;/u&gt;映像檔給所有電腦，過程中所以使用的技術(DHCP、TFTP、PXE、GHOST)可於參考資源中查尋。&lt;br /&gt;
&lt;a href="" name="_Toc128880411"&gt;&lt;b&gt;二、 &lt;/b&gt;&lt;b&gt;硬體環境&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
l PC兩部(一台為Server另一台為製作映像檔用) &lt;br /&gt;
l PC需有PXE開機功能&lt;br /&gt;
l PC與Multicast Server需連接網路，屬同網段&lt;br /&gt;
&lt;a href="" name="_Toc128880412"&gt;&lt;b&gt;三、 &lt;/b&gt;&lt;b&gt;軟體環境&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
l Norton Ghost v8.2 Corporate Edition &lt;br /&gt;
l 3com Dynamic Access Boot Services&lt;br /&gt;
l Tftpd32 v2.83&lt;br /&gt;
&lt;b&gt;     &lt;/b&gt;&lt;br /&gt;
&lt;a href="" name="_Toc128880413"&gt;&lt;b&gt;四、 &lt;/b&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/a&gt;&lt;b&gt;前置步驟&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;PC1:&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
依老師需求規劃分割區、安裝系統、使用者帳號和權限、網路群組名稱、TCP/IP資訊、軟體&lt;br /&gt;
Note&lt;br /&gt;
若有多個系統則考量是否需另外安裝開機選單&lt;br /&gt;
部份軟體在不同使用者會有註冊檔、權限問題，需登入各使用者環境，執行各類軟體測試(參閱附錄一)&lt;br /&gt;
&lt;i&gt;&lt;u&gt;&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;Multicast Server:&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
安裝Ghost Enterprise、DABS、tftpd32&lt;br /&gt;
Note&lt;br /&gt;
安裝3com DABS 時安裝種類為Server&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SD1-_FsZ0FI/AAAAAAAAAQA/QYA8069c-gg/s1600-h/clip_image004%5B3%5D.jpg"&gt;&lt;img alt="clip_image004" border="0" height="186" src="http://lh5.ggpht.com/parkghost/SD1_AlsZ0GI/AAAAAAAAAQI/TgHFyuRjJYQ/clip_image004_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;     &lt;/b&gt;&lt;br /&gt;
&lt;a href="" name="_Toc128880414"&gt;&lt;b&gt;五、 &lt;/b&gt;&lt;b&gt;Step 2&lt;/b&gt;&lt;/a&gt;&lt;b&gt;製作開機映像檔&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;Multicast Server:&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
執行Ghost boot wizard&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SD1_EFsZ0HI/AAAAAAAAAQQ/fzP66jgwQIA/s1600-h/clip_image006%5B3%5D.jpg"&gt;&lt;img alt="clip_image006" border="0" height="197" src="http://lh3.ggpht.com/parkghost/SD1_HFsZ0II/AAAAAAAAAQY/S2as3dP_Ss8/clip_image006_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
挑選TCP/IP Network Boot Image&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD1_KlsZ0JI/AAAAAAAAAQg/W8eV2gE0peA/s1600-h/clip_image008%5B3%5D.jpg"&gt;&lt;img alt="clip_image008" border="0" height="197" src="http://lh4.ggpht.com/parkghost/SD1_MVsZ0KI/AAAAAAAAAQo/nINtgsek3Oc/clip_image008_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
挑選PXE Packet Driver&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD1_PlsZ0LI/AAAAAAAAAQw/V9QorA0ESFY/s1600-h/clip_image010%5B3%5D.jpg"&gt;&lt;img alt="clip_image010" border="0" height="197" src="http://lh5.ggpht.com/parkghost/SD1_RlsZ0MI/AAAAAAAAAQ4/bV2qWZVLBDg/clip_image010_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SD1_T1sZ0NI/AAAAAAAAARA/Wx-326h3xzw/s1600-h/clip_image012%5B3%5D.jpg"&gt;&lt;img alt="clip_image012" border="0" height="197" src="http://lh4.ggpht.com/parkghost/SD1_VVsZ0OI/AAAAAAAAARI/ETR4dTSBAMw/clip_image012_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SD1_X1sZ0PI/AAAAAAAAARQ/rIeKFmnH3qY/s1600-h/clip_image014%5B3%5D.jpg"&gt;&lt;img alt="clip_image014" border="0" height="197" src="http://lh4.ggpht.com/parkghost/SD1_ZVsZ0QI/AAAAAAAAARY/_XPwviQEcB8/clip_image014_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
l 製作Ghost映像檔參數(用於Step 4):以Session Name 為Backup   &lt;br /&gt;&lt;u&gt;-clone,mode=create,src=1,dst=@mcBackup -sure –rb&lt;/u&gt;&lt;br /&gt;
l 多點傳播參數(用於Step 5): 以Session Name 為Restore   &lt;br /&gt;&lt;u&gt;-clone,mode=restore,src=@mcRestore,dst=1 -sure -rb&lt;/u&gt;&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SD1_cFsZ0RI/AAAAAAAAARg/bDlJakX3KCk/s1600-h/clip_image016%5B3%5D.jpg"&gt;&lt;img alt="clip_image016" border="0" height="197" src="http://lh4.ggpht.com/parkghost/SD1_dVsZ0SI/AAAAAAAAARo/9iz3Qud9L9o/clip_image016_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD1_flsZ0TI/AAAAAAAAARw/nhz2J-faMfM/s1600-h/clip_image018%5B3%5D.jpg"&gt;&lt;img alt="clip_image018" border="0" height="197" src="http://lh3.ggpht.com/parkghost/SD1_hFsZ0UI/AAAAAAAAAR4/2rvJNZ11H6Q/clip_image018_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD1_jlsZ0VI/AAAAAAAAASA/66OBbb6KiRM/s1600-h/clip_image020%5B3%5D.jpg"&gt;&lt;img alt="clip_image020" border="0" height="197" src="http://lh6.ggpht.com/parkghost/SD1_k1sZ0WI/AAAAAAAAASI/KPrquBUmvxo/clip_image020_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD1_nlsZ0XI/AAAAAAAAASQ/G4kR8ar2fNQ/s1600-h/clip_image022%5B3%5D.jpg"&gt;&lt;img alt="clip_image022" border="0" height="197" src="http://lh5.ggpht.com/parkghost/SD1_plsZ0YI/AAAAAAAAASY/tfL2uwYdOLc/clip_image022_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD1_rlsZ0ZI/AAAAAAAAASg/fgPRXCey0uM/s1600-h/clip_image024%5B3%5D.jpg"&gt;&lt;img alt="clip_image024" border="0" height="197" src="http://lh4.ggpht.com/parkghost/SD1_tVsZ0aI/AAAAAAAAASo/baYp5aLcmho/clip_image024_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;     &lt;/b&gt;&lt;br /&gt;
&lt;a href="" name="_Toc128880415"&gt;&lt;b&gt;六、 &lt;/b&gt;&lt;b&gt;Step 3&lt;/b&gt;&lt;/a&gt;&lt;b&gt;製作&lt;/b&gt;&lt;b&gt;PXE&lt;/b&gt;&lt;b&gt;開機選單&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;Multicast Server:&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
執行Boot Image Editer&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD1_vlsZ0bI/AAAAAAAAASw/emxUErcewiM/s1600-h/clip_image026%5B3%5D.jpg"&gt;&lt;img alt="clip_image026" border="0" height="187" src="http://lh3.ggpht.com/parkghost/SD1_xFsZ0cI/AAAAAAAAAS4/DbHzTCjDnuo/clip_image026_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
按Create a PXE menu boot file&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SD1_y1sZ0dI/AAAAAAAAATA/--LXA0LiO3o/s1600-h/clip_image028%5B3%5D.jpg"&gt;&lt;img alt="clip_image028" border="0" height="187" src="http://lh5.ggpht.com/parkghost/SD1_0lsZ0eI/AAAAAAAAATM/0cQlOD4jvQw/clip_image028_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
按Add&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD1_2VsZ0fI/AAAAAAAAATU/z006g0nyII8/s1600-h/clip_image030%5B3%5D.jpg"&gt;&lt;img alt="clip_image030" border="0" height="223" src="http://lh6.ggpht.com/parkghost/SD1_31sZ0gI/AAAAAAAAATc/w0-fUefX_YM/clip_image030_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
按Browser挑選開機檔案存檔位址&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD1_5lsZ0hI/AAAAAAAAATk/gvZs38EbaZo/s1600-h/clip_image032%5B3%5D.jpg"&gt;&lt;img alt="clip_image032" border="0" height="165" src="http://lh6.ggpht.com/parkghost/SD1_61sZ0iI/AAAAAAAAATs/Js-BXHtGJkU/clip_image032_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
按Save&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD1_8VsZ0jI/AAAAAAAAAT0/YNNqF4TTJzU/s1600-h/clip_image034%5B3%5D.jpg"&gt;&lt;img alt="clip_image034" border="0" height="223" src="http://lh3.ggpht.com/parkghost/SD1_-FsZ0kI/AAAAAAAAAT8/CvZhgbvPz7c/clip_image034_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
選取開機選單存檔位址(需與開機映像檔為同一資料夾)&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD2AAVsZ0lI/AAAAAAAAAUE/Bqg2t2hfIFY/s1600-h/clip_image036%5B3%5D.jpg"&gt;&lt;img alt="clip_image036" border="0" height="170" src="http://lh5.ggpht.com/parkghost/SD2ABlsZ0mI/AAAAAAAAAUM/cAKBWBcYGko/clip_image036_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
Note&lt;br /&gt;
第一次執行Boot Image Editor則會出現下列畫面(皆預設選項即可)&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SD2AD1sZ0nI/AAAAAAAAAUU/UA9wm1onTwg/s1600-h/clip_image038%5B3%5D.jpg"&gt;&lt;img alt="clip_image038" border="0" height="123" src="http://lh5.ggpht.com/parkghost/SD2AFlsZ0oI/AAAAAAAAAUc/J7YEzhM1ERU/clip_image038_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SD2AIFsZ0pI/AAAAAAAAAUk/9Lhc3RKRlFM/s1600-h/clip_image040%5B3%5D.jpg"&gt;&lt;img alt="clip_image040" border="0" height="123" src="http://lh3.ggpht.com/parkghost/SD2AJFsZ0qI/AAAAAAAAAUs/GVLdew-EOJE/clip_image040_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SD2AL1sZ0rI/AAAAAAAAAU0/IQnSYRPScgM/s1600-h/clip_image042%5B3%5D.jpg"&gt;&lt;img alt="clip_image042" border="0" height="123" src="http://lh3.ggpht.com/parkghost/SD2ANFsZ0sI/AAAAAAAAAU8/k_oNhBq1sOY/clip_image042_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;     &lt;/b&gt;&lt;br /&gt;
&lt;a href="" name="_Toc128880416"&gt;&lt;b&gt;七、 &lt;/b&gt;&lt;b&gt;Step 4&lt;/b&gt;&lt;/a&gt;&lt;b&gt;製作&lt;/b&gt;&lt;b&gt;Ghost&lt;/b&gt;&lt;b&gt;映像檔&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;Multicast Server:&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
我的電腦→控制台→網路連線→區域連線→內容&lt;br /&gt;
更改為虛擬IP(可避免與實體IP的衝突)&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD2APlsZ0tI/AAAAAAAAAVE/SYeZ6sMEfww/s1600-h/clip_image044%5B3%5D.jpg"&gt;&lt;img alt="clip_image044" border="0" height="244" src="http://lh4.ggpht.com/parkghost/SD2ATVsZ0uI/AAAAAAAAAVM/OTBtuARoous/clip_image044_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="233" /&gt;&lt;/a&gt;&lt;br /&gt;
執行TFTPD32&lt;br /&gt;
按Settings&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD2AVlsZ0vI/AAAAAAAAAVU/0rFGFM-fzns/s1600-h/clip_image046%5B3%5D.jpg"&gt;&lt;img alt="clip_image046" border="0" height="195" src="http://lh6.ggpht.com/parkghost/SD2AX1sZ0wI/AAAAAAAAAVc/SNdRt_JnQ3E/clip_image046_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
勾選PXE Compatibility，按OK&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD2AbVsZ0xI/AAAAAAAAAVk/n189vmPbmLI/s1600-h/clip_image048%5B3%5D.jpg"&gt;&lt;img alt="clip_image048" border="0" height="244" src="http://lh6.ggpht.com/parkghost/SD2Ad1sZ0yI/AAAAAAAAAVs/PcI5XeYGYSg/clip_image048_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="195" /&gt;&lt;/a&gt;&lt;br /&gt;
設定下列資訊，按Save&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD2AgVsZ0zI/AAAAAAAAAV0/Xng89mKHu-8/s1600-h/clip_image050%5B3%5D.jpg"&gt;&lt;img alt="clip_image050" border="0" height="195" src="http://lh3.ggpht.com/parkghost/SD2AiFsZ00I/AAAAAAAAAV8/PAk5Pp9pKL8/clip_image050_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/parkghost/SD2AjVsZ01I/AAAAAAAAAWE/-_nzPYfZhAY/s1600-h/clip_image052%5B3%5D.jpg"&gt;&lt;img alt="clip_image052" border="0" height="107" src="http://lh5.ggpht.com/parkghost/SD2AklsZ02I/AAAAAAAAAWM/SX8OZH1YtuM/clip_image052_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="204" /&gt;&lt;/a&gt;&lt;br /&gt;
啟動GhostCast Server&lt;br /&gt;
設定下列資訊&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD2AnVsZ03I/AAAAAAAAAWU/jd0VWiF4g1c/s1600-h/clip_image054%5B3%5D.jpg"&gt;&lt;img alt="clip_image054" border="0" height="173" src="http://lh6.ggpht.com/parkghost/SD2Ao1sZ04I/AAAAAAAAAWc/Yo6N3N6r778/clip_image054_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
按Accept Clients&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD2ArlsZ05I/AAAAAAAAAWk/m6dYig_bWV8/s1600-h/clip_image056%5B3%5D.jpg"&gt;&lt;img alt="clip_image056" border="0" height="173" src="http://lh3.ggpht.com/parkghost/SD2AtFsZ06I/AAAAAAAAAWs/jX7-FMgoYcI/clip_image056_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;PC1:&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
進入BIOS將網路開機功能開啟&lt;br /&gt;
重新開機後PC1會經由網路取得 IP設定→開機選(bootmenu.pxe)→開機映像檔(bootimg.sys)→進入Ghost畫面與開始傳輸)&lt;br /&gt;
Note&lt;br /&gt;
如果在備份或還原過程過於緩慢或過多PC中斷，可能有電腦正在傳送大量封包或病毒干擾(將其暫停傳輸)&lt;br /&gt;
&lt;b&gt;     &lt;/b&gt;&lt;br /&gt;
&lt;a href="" name="_Toc128880417"&gt;&lt;b&gt;八、 &lt;/b&gt;&lt;b&gt;Step 5&lt;/b&gt;&lt;/a&gt;&lt;b&gt;多點傳播&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;Multicast Server:&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
啟動GhostCast Server&lt;br /&gt;
設定下列資訊&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SD2Av1sZ07I/AAAAAAAAAW0/ER_dTwlnkWQ/s1600-h/clip_image058%5B3%5D.jpg"&gt;&lt;img alt="clip_image058" border="0" height="173" src="http://lh5.ggpht.com/parkghost/SD2AxlsZ08I/AAAAAAAAAW8/LmEFo9mrDE8/clip_image058_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
Note&lt;br /&gt;
這時的開機映像檔參數為下(作法請方參照Step 2)&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SD2A0FsZ09I/AAAAAAAAAXE/OmgVeWrWNdU/s1600-h/clip_image060%5B3%5D.jpg"&gt;&lt;img alt="clip_image060" border="0" height="197" src="http://lh6.ggpht.com/parkghost/SD2A11sZ0-I/AAAAAAAAAXM/ZlPQY9f5Ck8/clip_image060_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
按Accept Clients&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD2A4lsZ0_I/AAAAAAAAAXU/S8d2lCQl9aI/s1600-h/clip_image062%5B3%5D.jpg"&gt;&lt;img alt="clip_image062" border="0" height="173" src="http://lh3.ggpht.com/parkghost/SD2A6FsZ1AI/AAAAAAAAAXc/yds6G8zwagk/clip_image062_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
先執行下列PC步驟，當所有電腦都連線時即可按下Send開始傳送&lt;br /&gt;
&lt;i&gt;&lt;u&gt;&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;所有要安裝的PC(&lt;/u&gt;&lt;/i&gt;&lt;i&gt;&lt;u&gt;需與PC1&lt;/u&gt;&lt;/i&gt;&lt;i&gt;&lt;u&gt;為同一機型):&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
進入BIOS將網路開機功能開啟&lt;br /&gt;
(重新開機後PC1會經由網路取得bootmenu.pxe並執行預設的bootimg.sys進入Ghost畫面與開始傳輸)&lt;br /&gt;
Note&lt;br /&gt;
如果已設好PXE的電腦可以用Wake-On-LAN的方式分段式的啟動&lt;br /&gt;
MC-WOL ethernet-address [/a ip-address] [/p password]&lt;br /&gt;
Example1: MC-WOL 00:01:02:58:A3:C7&lt;br /&gt;
需注意如同時啟動過多電腦則會導致bootimg.sys傳輸中斷&lt;br /&gt;
&lt;b&gt;     &lt;/b&gt;&lt;br /&gt;
&lt;a href="" name="_Toc128880418"&gt;&lt;b&gt;九、 &lt;/b&gt;&lt;b&gt;Step 6&lt;/b&gt;&lt;/a&gt;&lt;b&gt;修改各&lt;/b&gt;&lt;b&gt;PC&lt;/b&gt;&lt;b&gt;端&lt;/b&gt;&lt;b&gt;IP&lt;/b&gt;&lt;b&gt;、&lt;/b&gt;&lt;b&gt;Hostname&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
我的電腦→內容→電腦名稱&lt;br /&gt;
按變更&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SD2A81sZ1BI/AAAAAAAAAXk/8UwpOnhUwAc/s1600-h/clip_image064%5B3%5D.jpg"&gt;&lt;img alt="clip_image064" border="0" height="244" src="http://lh5.ggpht.com/parkghost/SD2A-lsZ1CI/AAAAAAAAAXs/GThjBJI5iMQ/clip_image064_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="227" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SD2BA1sZ1DI/AAAAAAAAAX0/VG47q_8muQQ/s1600-h/clip_image066%5B3%5D.jpg"&gt;&lt;img alt="clip_image066" border="0" height="244" src="http://lh5.ggpht.com/parkghost/SD2BClsZ1EI/AAAAAAAAAX8/996R8XAejYI/clip_image066_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="205" /&gt;&lt;/a&gt;&lt;br /&gt;
我的電腦→控制台→網路連線→區域連線→內容&lt;br /&gt;
選擇Internet Protocol(TCP/IP)，按內容&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD2BFVsZ1FI/AAAAAAAAAYE/VGazflySNxc/s1600-h/clip_image068%5B3%5D.jpg"&gt;&lt;img alt="clip_image068" border="0" height="244" src="http://lh4.ggpht.com/parkghost/SD2BHVsZ1GI/AAAAAAAAAYM/1-WGP-s6pjE/clip_image068_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="214" /&gt;&lt;/a&gt;&lt;br /&gt;
設定IP與 DNS資訊&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SD2BKFsZ1HI/AAAAAAAAAYU/RZUscOMt9bI/s1600-h/clip_image070%5B3%5D.jpg"&gt;&lt;img alt="clip_image070" border="0" height="244" src="http://lh3.ggpht.com/parkghost/SD2BMFsZ1II/AAAAAAAAAYc/GFoC7w_kTWc/clip_image070_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="233" /&gt;&lt;/a&gt;&lt;br /&gt;
開始→電腦關機→重新啟動&lt;br /&gt;
&lt;b&gt;     &lt;/b&gt;&lt;br /&gt;
&lt;a href="" name="_Toc128880419"&gt;&lt;b&gt;十、 &lt;/b&gt;&lt;b&gt;Step 7&lt;/b&gt;&lt;/a&gt;&lt;b&gt;測試群組與&lt;/b&gt;&lt;b&gt;IP&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
開始→執行→輸入cmd&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD2BNlsZ1JI/AAAAAAAAAYk/ftMp9IfHc7c/s1600-h/clip_image072%5B3%5D.jpg"&gt;&lt;img alt="clip_image072" border="0" height="125" src="http://lh3.ggpht.com/parkghost/SD2BPFsZ1KI/AAAAAAAAAYs/etgB-4A-P4U/clip_image072_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
輸入ipconfig&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SD2BSFsZ1LI/AAAAAAAAAY0/Rd7-xJ7sbes/s1600-h/clip_image074%5B3%5D.jpg"&gt;&lt;img alt="clip_image074" border="0" height="161" src="http://lh3.ggpht.com/parkghost/SD2BUFsZ1MI/AAAAAAAAAY8/COM3KJSXPh0/clip_image074_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
將所有PC*停留此畫面檢查&lt;br /&gt;
選擇任一PC進入網路芳鄰檢查群組中是否有所有電腦&lt;br /&gt;
&lt;a href="" name="_Toc128880420"&gt;&lt;b&gt;十一、 &lt;/b&gt;&lt;b&gt;參考資源&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
tftpd32 home page &lt;a href="http://tftpd32.jounin.net/"&gt;http://tftpd32.jounin.net/&lt;/a&gt;&lt;br /&gt;
用Ghost軟體實現基於PXE的網路硬碟克隆&lt;a href="http://tools.yesky.com/15/2187015.shtml"&gt;http://tools.yesky.com/15/2187015.shtml&lt;/a&gt;&lt;br /&gt;
GHOST V8.0 使用詳解 &lt;a href="http://www.51testing.com/html/31/566.html"&gt;http://www.51testing.com/html/31/566.html&lt;/a&gt;&lt;br /&gt;
神出鬼沒 揭開Ghost 9的真面目 &lt;a href="http://www.jcwcn.com/html/Ghost/16_48_07_890.htm"&gt;http://www.jcwcn.com/html/Ghost/16_48_07_890.htm&lt;/a&gt;&lt;br /&gt;
PXE——RPL的掘墓人 &lt;a href="http://www.coollan.net/win98/PXE-RPL.htm"&gt;http://www.coollan.net/win98/PXE-RPL.htm&lt;/a&gt;&lt;br /&gt;
Intel® Boot Agent - PXE Related Resources &lt;a href="http://www.intel.com/support/network/adapter/pro100/bootagent/sb/cs-008191.htm"&gt;http://www.intel.com/support/network/adapter/pro100/bootagent/sb/cs-008191.htm&lt;/a&gt;&lt;br /&gt;
Wake-On-LAN &lt;a href="http://www.matcode.com/wol.htm"&gt;http://www.matcode.com/wol.htm&lt;/a&gt;&lt;br /&gt;
&lt;a href="" name="_Toc128880421"&gt;&lt;b&gt;十二、 &lt;/b&gt;&lt;b&gt;附錄一&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
由於使用者的權限會直接引響軟體的使用，所以切記在製作映像檔前需先登入所有使用者的操作環境，測試每一項自行安裝的軟體，否則事後的補救是極浪費時間與人力的。&lt;br /&gt;
一般的權限問題設置軟體執行目錄權限來解決，而某些特定的軟體則需另行找尋解決方法，已知目錄權限問題的軟體如下：&lt;br /&gt;
l Dr.eye 6&lt;br /&gt;
l Apache 2.x&lt;br /&gt;
l Mysql 4.0&lt;br /&gt;
l Cakewalk 9&lt;br /&gt;
l C++Builder 6&lt;br /&gt;
l …&lt;br /&gt;
操作步驟：&lt;br /&gt;
在任一資料夾→工具→資料夾選項&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD2BXVsZ1NI/AAAAAAAAAZE/gVuoaCg9XOI/s1600-h/clip_image076%5B3%5D.jpg"&gt;&lt;img alt="clip_image076" border="0" height="184" src="http://lh3.ggpht.com/parkghost/SD2BZFsZ1OI/AAAAAAAAAZM/o6G_MA8lU0o/clip_image076_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
檢視→勾除”將使用簡易檔案共用”&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD2BclsZ1PI/AAAAAAAAAZU/WfBKEwn6NQk/s1600-h/clip_image078%5B3%5D.jpg"&gt;&lt;img alt="clip_image078" border="0" height="244" src="http://lh5.ggpht.com/parkghost/SD2BelsZ1QI/AAAAAAAAAZc/3r_p7VqKarw/clip_image078_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="216" /&gt;&lt;/a&gt;&lt;br /&gt;
以Dr.eye為例:&lt;br /&gt;
在C:\Program Files\Inventec 右鍵→內容&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SD2BiFsZ1RI/AAAAAAAAAZk/ZFZ8hAr8rRs/s1600-h/clip_image080%5B3%5D.jpg"&gt;&lt;img alt="clip_image080" border="0" height="184" src="http://lh6.ggpht.com/parkghost/SD2Bj1sZ1SI/AAAAAAAAAZs/JZ67Wd5jE_M/clip_image080_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
選安全性→按進階&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SD2BmlsZ1TI/AAAAAAAAAZ0/frWlvUHSv5s/s1600-h/clip_image082%5B3%5D.jpg"&gt;&lt;img alt="clip_image082" border="0" height="244" src="http://lh4.ggpht.com/parkghost/SD2BoVsZ1UI/AAAAAAAAAZ8/6tcdbpKa0JA/clip_image082_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="199" /&gt;&lt;/a&gt;&lt;br /&gt;
勾除”從父項繼承套用到子物件…”&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SD2BsFsZ1VI/AAAAAAAAAaE/pxKP_s3mz00/s1600-h/clip_image084%5B3%5D.jpg"&gt;&lt;img alt="clip_image084" border="0" height="197" src="http://lh6.ggpht.com/parkghost/SD2Bt1sZ1WI/AAAAAAAAAaM/HO6jClqol5g/clip_image084_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
按移除&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SD2Bv1sZ1XI/AAAAAAAAAaU/NvcrrqDVc1s/s1600-h/clip_image086%5B3%5D.jpg"&gt;&lt;img alt="clip_image086" border="0" height="110" src="http://lh4.ggpht.com/parkghost/SD2BxVsZ1YI/AAAAAAAAAac/KX7DdtxFslg/clip_image086_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
按新增&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD2B0VsZ1ZI/AAAAAAAAAak/tuOuqiwBt34/s1600-h/clip_image088%5B3%5D.jpg"&gt;&lt;img alt="clip_image088" border="0" height="197" src="http://lh6.ggpht.com/parkghost/SD2B11sZ1aI/AAAAAAAAAas/-0wWhy1wOvE/clip_image088_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
輸入Everyone，按確定&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SD2B4FsZ1bI/AAAAAAAAAa0/-2968o5pQWo/s1600-h/clip_image090%5B3%5D.jpg"&gt;&lt;img alt="clip_image090" border="0" height="135" src="http://lh4.ggpht.com/parkghost/SD2B5VsZ1cI/AAAAAAAAAa8/NA4dK5mMwzg/clip_image090_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
勾選完全控制，按確定&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SD2B8VsZ1dI/AAAAAAAAAbE/iTDTeBbJVh8/s1600-h/clip_image092%5B3%5D.jpg"&gt;&lt;img alt="clip_image092" border="0" height="244" src="http://lh6.ggpht.com/parkghost/SD2B91sZ1eI/AAAAAAAAAbM/vKq0HN-K5VQ/clip_image092_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="204" /&gt;&lt;/a&gt;&lt;br /&gt;
勾選 “以顯示從此套用到子物件…”，按確定&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SD2CA1sZ1fI/AAAAAAAAAbU/tFCDPB0F8U8/s1600-h/clip_image094%5B3%5D.jpg"&gt;&lt;img alt="clip_image094" border="0" height="197" src="http://lh6.ggpht.com/parkghost/SD2CC1sZ1gI/AAAAAAAAAbc/1YRP7m9rAAY/clip_image094_thumb.jpg?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
特定軟體&lt;br /&gt;
l SQL Server&lt;br /&gt;
解決步驟:&lt;br /&gt;
1. 將目錄權限開啟&lt;br /&gt;
2. 建置SQL使用者帳號&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-3770343871965516433?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/N9Pf_vUKyyM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/3770343871965516433/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=3770343871965516433" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/3770343871965516433?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/3770343871965516433?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/N9Pf_vUKyyM/blog-post.html" title="學生電腦安裝手冊(舊存檔)" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/parkghost/SD1-8VsZ0EI/AAAAAAAAAP4/MBEUv0PQScE/s72-c/clip_image002_thumb%5B3%5D.gif?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/05/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMBQng4fip7ImA9WxdTFk0.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-1823426052094426300</id><published>2008-05-12T20:20:00.003+08:00</published><updated>2008-05-12T22:27:33.636+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-12T22:27:33.636+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="qrcode" /><title>QR Code 雜記</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2OzK6AeGiY37d3sIxuz_IDmajl8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2OzK6AeGiY37d3sIxuz_IDmajl8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2OzK6AeGiY37d3sIxuz_IDmajl8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2OzK6AeGiY37d3sIxuz_IDmajl8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;h1&gt; &lt;/h1&gt;  &lt;h1&gt;技術議題&lt;/h1&gt;  &lt;p&gt;字元編解碼：&lt;/p&gt;  &lt;p&gt;ISO規格定訂為JIS(日文)，台灣行動上網連盟(OMIA)定訂為UTF-8，於不同規格的軟體解碼時會有字元集的轉換問題，使用英文則可避免此問題。&lt;/p&gt;  &lt;p&gt;列印大小：&lt;/p&gt;  &lt;p&gt;資料的應用方式是主要決定圖像大小的因素Symbol version(模組數)，一個黑點即是一個模組，而模組列印大小(墨點數)決定於列印與讀取裝置的解析度。(&lt;a href="http://www.denso-wave.com/qrcode/vertable1-e.html"&gt;各Symbol version模組數、資料量、錯誤更正等級對照表&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/parkghost/SCg14cuQT3I/AAAAAAAAAOk/vv-g3if1N4I/s1600-h/qrsizefig%5B7%5D.gif"&gt;&lt;img style="border: 0px none ;" alt="qrsizefig" src="http://lh3.ggpht.com/parkghost/SCg15suQT4I/AAAAAAAAAOs/6EMiak_45c0/qrsizefig_thumb%5B5%5D.gif?imgmax=800" border="0" height="242" width="319" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;QR Code Size Decision Factor&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;來源：&lt;a href="http://www.denso-wave.com/qrcode/qrgene1-e.html"&gt;http://www.denso-wave.com/qrcode/qrgene1-e.html&lt;/a&gt;&lt;a href="http://www.denso-wave.com/"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/parkghost/SCg6ScuQT_I/AAAAAAAAAPk/9Ca0bId-pTM/s1600-h/qrversion%5B1%5D.gif"&gt;&lt;img style="border: 0px none ;" alt="qrversion" src="http://lh3.ggpht.com/parkghost/SCg17suQT6I/AAAAAAAAAPs/yzTF4hN6xAM/qrversion_thumb.gif?imgmax=800" border="0" height="187" width="428" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;symbol versions&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;來源：&lt;a href="http://www.denso-wave.com/qrcode/qrgene2-e.html"&gt;http://www.denso-wave.com/qrcode/qrgene2-e.html&lt;/a&gt;&lt;a href="http://www.denso-wave.com/"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/parkghost/SCg18suQT7I/AAAAAAAAAPE/ONUmm3k8gAw/s1600-h/prtdot4%5B2%5D.gif"&gt;&lt;img style="border: 0px none ;" alt="prtdot4" src="http://lh4.ggpht.com/parkghost/SCg198uQT8I/AAAAAAAAAPM/V9wocWS6_cU/prtdot4_thumb.gif?imgmax=800" border="0" height="174" width="204" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Printer Head Density and Module Size&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;來源：&lt;a href="http://www.denso-wave.com/qrcode/qrgene3-e.html"&gt;http://www.denso-wave.com/qrcode/qrgene3-e.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;辨視效果：&lt;/p&gt;  &lt;p&gt;主要決定於兩區塊"影像品質"與"辨視方法"：影像品質看掃描的裝置品質(一般要求30萬像數、可近拍)、裝置設定、拍攝環境與方式，辨視方法則依Symbol version複雜度(越高辨視度相對下降)，影像處理方法(去雜訊、翻轉、樣式比對)引響辨視穩定性(正確率、失敗率、錯誤率)與所需成本(時間與空間)。&lt;/p&gt;  &lt;h1&gt; &lt;/h1&gt;  &lt;h1&gt;行動條碼引申參考&lt;/h1&gt;  &lt;p&gt;二維條碼目前於行動商務之應用大致可分為四類，包括：   &lt;br /&gt;1.自動化文字輸入：以二維條碼儲存個人資訊，如地址、電話號碼、行事曆等，進行名片、行程資料等之快速交換。    &lt;br /&gt;2.數位內容下載：以二維條碼儲存數位內容之基本資料、進行數位內容之下載。    &lt;br /&gt;3.網址快速連結：於使用手冊、產品規格、報章雜誌、廣告宣傳資料等資料附加二維條碼資料，以提供使用者進行網址快速連結、電話快速撥號等。    &lt;br /&gt;4.身分鑑別及商務交易：於手機上顯示二維條碼資料，作為交易身分見別資料、或行動付款憑證，可用於如入場券、販賣機、會員身份確認、行動付款等應用。    &lt;br /&gt;(來源：&lt;a href="http://www.meworks.net/meworksv2a/meworks/page1.aspx?no=344&amp;amp;step=1&amp;amp;newsno=3829"&gt;中文版-OMIA行動條碼應用標準規範v3-2_2007-06-08.doc&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;OMIA行動條碼規格：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/parkghost/SCg1_8uQT9I/AAAAAAAAAPU/xs-pjMyruGo/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border: 0px none ;" alt="image" src="http://lh3.ggpht.com/parkghost/SCg2BsuQT-I/AAAAAAAAAPc/Ve0nb6Kr-Fc/image_thumb%5B4%5D.png?imgmax=800" border="0" height="91" width="407" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h1&gt; &lt;/h1&gt;  &lt;h1&gt;參考連結&lt;/h1&gt;  &lt;h3&gt;&lt;a name="label-0"&gt;Introduction&lt;/a&gt;：&lt;/h3&gt;  &lt;p&gt;Rex’s blah blah blah » 行動條碼 / 二維碼 / Mobile Barcode / QRCode&lt;/p&gt;  &lt;p&gt;&lt;a href="http://people.debian.org.tw/%7Echihchun/2006/07/04/mobile-barcode/"&gt;http://people.debian.org.tw/~chihchun/2006/07/04/mobile-barcode/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3公分圖案 儲存4千字資訊&lt;/p&gt;  &lt;p&gt;&lt;a href="http://paper.udn.com/udnpaper/POH0040/121378/web/"&gt;http://paper.udn.com/udnpaper/POH0040/121378/web/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;QRCode 官方站(英文)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.denso-wave.com/qrcode/aboutqr-e.html"&gt;http://www.denso-wave.com/qrcode/aboutqr-e.html&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Code Standard：&lt;/h3&gt;  &lt;p&gt;行動上網聯盟 --- OMIA&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.omia.org.tw/"&gt;http://www.omia.org.tw/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;OMIA動條碼共通規範3.2之中英文版&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.meworks.net/meworksv2a/meworks/page1.aspx?no=96&amp;amp;step=1&amp;amp;newsno=3830"&gt;http://www.meworks.net/meworksv2a/meworks/page1.aspx?no=96&amp;amp;step=1&amp;amp;newsno=3830&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;ISO/IEC 18004:2006&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=43655"&gt;http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=43655&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Survey：&lt;/h3&gt;  &lt;p&gt;マイボイスコム定期アンケート（携帯電話のＱＲコード）&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.myvoice.co.jp/biz/surveys/11101/index.html"&gt;http://www.myvoice.co.jp/biz/surveys/11101/index.html&lt;/a&gt;(&lt;a href="http://whatjapanthinks.com/2007/10/30/qr-code-usage-in-japan/"&gt;英譯&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;What Japan Thinks&lt;/p&gt;  &lt;p&gt;&lt;a href="http://whatjapanthinks.com/tag/qr-code/"&gt;http://whatjapanthinks.com/tag/qr-code/&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Application：&lt;/h3&gt;  &lt;p&gt;QR Code and Two dimensional Bar Code News&lt;/p&gt;  &lt;p&gt;&lt;a href="http://2d-code.co.uk/"&gt;http://2d-code.co.uk/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Bar code Insight 条码观察家&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.donews.com/barcoder/archive/2007/04.aspx"&gt;http://blog.donews.com/barcoder/archive/2007/04.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;All about Mobile Life&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mobile.kaywa.com/qr-code-data-matrix/index.html"&gt;http://mobile.kaywa.com/qr-code-data-matrix/index.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;TABA臺灣農產品生產紀錄追溯網&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.taba.org.tw/index.asp?a=dp&amp;amp;mp=7&amp;amp;ShowSearch=Y"&gt;http://www.taba.org.tw/index.asp?a=dp&amp;amp;mp=7&amp;amp;ShowSearch=Y&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;農產品產銷履歷諮詢服務&lt;/p&gt;  &lt;p&gt;&lt;a href="http://220.128.133.13/taft/admin/elearn.php"&gt;http://220.128.133.13/taft/admin/elearn.php&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;QRコードBlog&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.qrcodeblog.com/"&gt;http://www.qrcodeblog.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;いばらき農産物ネットカタログ&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ibrk.jp/vipsv2/search.aspx?no=00021454"&gt;http://ibrk.jp/vipsv2/search.aspx?no=00021454&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;中央氣象局推出的手機入口網站&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cwb.gov.tw/V5/wap/wap.htm"&gt;http://www.cwb.gov.tw/V5/wap/wap.htm&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;二維碼QR Code的擅場時代&lt;/p&gt;  &lt;p&gt;&lt;a href="http://bbs.mayacode.com/simple/index.php?t892.html"&gt;http://bbs.mayacode.com/simple/index.php?t892.html&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Software：&lt;/h3&gt;  &lt;p&gt;DoCoMo &lt;a name="p01"&gt;QR-factory&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nttdocomo.co.jp/english/service/imode/make/content/barcode/tool/"&gt;http://www.nttdocomo.co.jp/english/service/imode/make/content/barcode/tool/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;フリーソフト -&amp;gt; QR Code Editor | Psytec&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.psytec.co.jp/docomo.html"&gt;http://www.psytec.co.jp/docomo.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;OMIA與中華電信研究所合作之離線版行動條碼編碼軟體&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.meworks.net/meworksv2a/meworks/page1.aspx?no=96&amp;amp;step=1&amp;amp;newsno=3495"&gt;http://www.meworks.net/meworksv2a/meworks/page1.aspx?no=96&amp;amp;step=1&amp;amp;newsno=3495&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;QuickMark_WebCam&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.quickmark.com.tw/cht/basic/download.asp#QuickMark_WebCam"&gt;http://www.quickmark.com.tw/cht/basic/download.asp#QuickMark_WebCam&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Decode Library：&lt;/h3&gt;  &lt;p&gt;Open Source QRCode Library(C#)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeproject.com/KB/cs/qrcode.aspx"&gt;http://www.codeproject.com/KB/cs/qrcode.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A C/C++ library for decoding QR code based on JIS X 0510 and ISO/IEC18004. (C/C++)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://trac.koka-in.org/libdecodeqr"&gt;http://trac.koka-in.org/libdecodeqr&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;工研院QRcode編解碼軟體(dll)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.meworks.net/meworksv2a/meworks/page1.aspx?no=72518"&gt;http://www.meworks.net/meworksv2a/meworks/page1.aspx?no=72518&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Open Source QR Code Library(Java)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://qrcode.sourceforge.jp/"&gt;http://qrcode.sourceforge.jp/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Google ZXing ("Zebra Crossing")(Java)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://code.google.com/p/zxing/"&gt;http://code.google.com/p/zxing/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-1823426052094426300?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/s_4rZCm2pfo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/1823426052094426300/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=1823426052094426300" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/1823426052094426300?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/1823426052094426300?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/s_4rZCm2pfo/qr-code.html" title="QR Code 雜記" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/parkghost/SCg15suQT4I/AAAAAAAAAOs/6EMiak_45c0/s72-c/qrsizefig_thumb%5B5%5D.gif?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/05/qr-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UDRXYzcCp7ImA9WhRVEkQ.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-5618266848798315871</id><published>2008-04-21T19:37:00.007+08:00</published><updated>2012-01-11T23:21:14.888+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T23:21:14.888+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="picasa" /><category scheme="http://www.blogger.com/atom/ns#" term="flickr" /><category scheme="http://www.blogger.com/atom/ns#" term="urmap" /><category scheme="http://www.blogger.com/atom/ns#" term="gps" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>GPS 記錄器、相簿、工具、節點編輯...</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k33nx-44RODz2qZYm5CmJutiUj0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k33nx-44RODz2qZYm5CmJutiUj0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k33nx-44RODz2qZYm5CmJutiUj0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k33nx-44RODz2qZYm5CmJutiUj0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;GPS應用廣泛，尤其整合了網路資源後能擴展的方向很多，本篇是一則實作測試文，為了偷懶不多作說明與修飾，若你有進一步的興趣請勤奮的點選連結，有很多DEMO可以把玩。  &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;strong&gt;20080412阿里山出遊路線分享&lt;/strong&gt;&lt;a href="http://www.mobileaction.com.tw/product/product_i-gotU_USB.jsp"&gt;&lt;strong&gt;(I-gotU GT-100)&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;span style="font-style: italic;"&gt;[旅程中2個大斷層，跟沒結尾的冏況，所以出現大橫貫與圖片辜兒等精采結局請勿受到驚嚇]&lt;/span&gt;    &lt;br /&gt;
step 1. 安裝&lt;a href="http://ds.mobileaction.com/i-gotU/Softwares/i-gotU_Desktop.exe"&gt;i-gotU Desktop&lt;/a&gt;&lt;br /&gt;
step 2. 將 &lt;a href="http://parkghost.googlepages.com/20080413.alisanoriginal.mdb.rar"&gt;*.mdb(Link)&lt;/a&gt; 放至 C:\Documents and Settings\&lt;b style="color: red;"&gt;******&lt;/b&gt;\Application Data\MobileAction\GPSTracer 取代 Tracer.mdb &lt;br /&gt;
step 3. 選取兩筆track→合併&lt;br /&gt;
---------- (分隔線)繼續下列步驟或匯出&lt;a href="http://parkghost.googlepages.com/20080413.alisanoriginal.gpx.rar"&gt;*.gpx(Link)&lt;/a&gt;使用其它軟體後製(edit、gpscoding、gpstagging…)---------&lt;br /&gt;
step 4. 於下方的"相簿"右鍵→新增圖片&lt;br /&gt;
step 5. 選取圖片右鍵→儲存GPS &lt;br /&gt;
step 6. 點選上片track 會重新載入Google Map(&lt;span style="color: red;"&gt;Ps. &lt;/span&gt;&lt;a href="http://ds.mobileaction.com/i-gotU/Softwares/i-gotU_Desktop.exe" style="color: red;"&gt;i-gotU Desktop&lt;/a&gt;&lt;span style="color: red;"&gt;圖片太多(大)可能會當&lt;/span&gt;) &lt;br /&gt;
step 7. 匯出html,gpx,kml… &lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SAxrjns-HCI/AAAAAAAAAGE/CM6CizN_3aQ/s1600-h/clip_image002%5B3%5D.jpg"&gt;&lt;img alt="clip_image002" border="0" height="175" src="http://lh5.ggpht.com/parkghost/SAxrlns-HDI/AAAAAAAAAGM/-NsuOWN-aNY/clip_image002_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;
(相關討論請參考：&lt;a href="http://www.mobile01.com/topicdetail.php?f=130&amp;amp;t=463411&amp;amp;p=1"&gt;[Mobile01分享]i-gotU(GT-100)旅程紀錄&lt;/a&gt; 或 &lt;a href="http://ds.mobileaction.com/i-gotU/Manuals/i-gotU%28Chinese%20%28Traditional%29%29.chm"&gt;i-gotU操作手冊&lt;/a&gt;)&lt;br /&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h3&gt;
Geocode aware &lt;/h3&gt;
&lt;b&gt;&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=191804"&gt;GPicSync&lt;/a&gt;&lt;/b&gt;&lt;b&gt;：&lt;/b&gt;&lt;br /&gt;
Automatically geocode pictures from your camera and a GPS track log.&lt;br /&gt;
&lt;a href="http://picasa.google.com.tw/"&gt;Picasa：&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Picasa&lt;/b&gt; is a &lt;a href="http://en.wikipedia.org/wiki/Software_application"&gt;software application&lt;/a&gt; for organizing and editing &lt;a href="http://en.wikipedia.org/wiki/Digital_photography"&gt;digital photos&lt;/a&gt;, Google began offering Picasa for &lt;a href="http://en.wikipedia.org/wiki/Freeware"&gt;free download&lt;/a&gt;.&lt;br /&gt;
&lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt;：&lt;br /&gt;
Google Earth lets you fly anywhere on Earth to view satellite imagery, maps, terrain, 3D buildings and even explore galaxies in the Sky. You can explore rich geographical content, save your toured places and share with others.&lt;br /&gt;
&lt;a href="http://richielin-programer.blogspot.com/"&gt;Friendly.Flickr：&lt;/a&gt;&lt;br /&gt;
一個整合Flickr上下傳的編輯工具&lt;br /&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h3&gt;
Geotagging Albums&lt;/h3&gt;
&lt;h1&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SAxrmXs-HEI/AAAAAAAAAGU/4Y_7ZOgw3d0/s1600-h/clip_image003%5B3%5D.gif"&gt;&lt;img alt="clip_image003" border="0" height="35" src="http://lh3.ggpht.com/parkghost/SAxrnHs-HFI/AAAAAAAAAGc/b5rqgU15CAI/clip_image003_thumb.gif?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="210" /&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h1&gt;
(&lt;a href="http://picasaweb.google.com/parkghost/TestAlbum/photo#5190233330323203186" target="_blank"&gt;Demo&lt;/a&gt;)&lt;/h1&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SAxrqHs-HGI/AAAAAAAAAGk/q33xN0h7jck/s1600-h/clip_image005%5B3%5D.jpg"&gt;&lt;img alt="clip_image005" border="0" height="175" src="http://lh5.ggpht.com/parkghost/SAxrrns-HHI/AAAAAAAAAGs/YbvbgurbyzQ/clip_image005_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="240" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/parkghost/SAxruHs-HII/AAAAAAAAAG0/u8obe1NCDDo/s1600-h/clip_image007%5B3%5D.jpg"&gt;&lt;img alt="clip_image007" border="0" height="175" src="http://lh3.ggpht.com/parkghost/SAxrwHs-HJI/AAAAAAAAAG8/CXnpYNSlntA/clip_image007_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SAxrz3s-HKI/AAAAAAAAAHE/yEiAAFic4uA/s1600-h/clip_image009%5B3%5D.jpg"&gt;&lt;img alt="clip_image009" border="0" height="175" src="http://lh4.ggpht.com/parkghost/SAxr1Xs-HLI/AAAAAAAAAHM/lTR9Q6wu0MI/clip_image009_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="240" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/parkghost/SAxr5Hs-HMI/AAAAAAAAAHU/APeCePkG5EU/s1600-h/clip_image011%5B3%5D.jpg"&gt;&lt;img alt="clip_image011" border="0" height="175" src="http://lh5.ggpht.com/parkghost/SAxr6ns-HNI/AAAAAAAAAHc/G0T_-MvtQE8/clip_image011_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SAxr7Xs-HOI/AAAAAAAAAHk/QRxGYOV7Nug/s1600-h/clip_image013%5B3%5D.jpg"&gt;&lt;img alt="clip_image013" border="0" height="31" src="http://lh4.ggpht.com/parkghost/SAxr8Xs-HPI/AAAAAAAAAHs/3mPs63DjQQs/clip_image013_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="150" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;
(&lt;a href="http://www.panoramio.com/photo/9467328" target="_blank"&gt;DEMO&lt;/a&gt;)&lt;/h1&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SAxr_ns-HQI/AAAAAAAAAH0/i1SuoZ3V6Jg/s1600-h/clip_image015%5B3%5D.jpg"&gt;&lt;img alt="clip_image015" border="0" height="175" src="http://lh3.ggpht.com/parkghost/SAxsBHs-HRI/AAAAAAAAAH8/dqdRcxHzyVQ/clip_image015_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="240" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/parkghost/SAxsE3s-HSI/AAAAAAAAAIE/-7PaQG28ms4/s1600-h/clip_image017%5B3%5D.jpg"&gt;&lt;img alt="clip_image017" border="0" height="175" src="http://lh4.ggpht.com/parkghost/SAxsGXs-HTI/AAAAAAAAAIM/X76D8spGQJw/clip_image017_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SAxsHHs-HUI/AAAAAAAAAIU/X5HzafJTZd8/s1600-h/clip_image018%5B3%5D.gif"&gt;&lt;img alt="clip_image018" border="0" height="30" src="http://lh6.ggpht.com/parkghost/SAxsH3s-HVI/AAAAAAAAAIc/a4-0tWANiiI/clip_image018_thumb.gif?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="102" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;
(&lt;a href="http://www.flickr.com/photos/49672816@N00/map/" target="_blank"&gt;DEMO&lt;/a&gt;)&lt;/h1&gt;
上傳圖片前先注意有無允許自動匯入GPS資訊(否則就要手動調整囉)&lt;br /&gt;
You→Your Account→Privacy &amp;amp; Permissions→&lt;a href="http://www.flickr.com/account/geo/exif/?from=privacy"&gt;Import EXIF location data&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SAxwzXs-HWI/AAAAAAAAAIk/ARSRPwvSuUA/s1600-h/clip_image020%5B3%5D.jpg"&gt;&lt;img alt="clip_image020" border="0" height="178" src="http://lh6.ggpht.com/parkghost/SAxw03s-HXI/AAAAAAAAAIs/HvnJHvl9_y0/clip_image020_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/parkghost/SAxxlns-HYI/AAAAAAAAAI0/NwKp07ok26k/s1600-h/clip_image022%5B3%5D.jpg"&gt;&lt;img alt="clip_image022" border="0" height="178" src="http://lh3.ggpht.com/parkghost/SAxxnHs-HZI/AAAAAAAAAI8/kANcCuFxbQ8/clip_image022_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SAxxq3s-HaI/AAAAAAAAAJE/InhKBvgW_XU/s1600-h/clip_image024%5B3%5D.jpg"&gt;&lt;img alt="clip_image024" border="0" height="178" src="http://lh5.ggpht.com/parkghost/SAxxsns-HbI/AAAAAAAAAJM/rYCkHMDHPXo/clip_image024_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div id="AtomRSS"&gt;
除了在photostream 頁面下方的KML(僅單頁)   &lt;br /&gt;
Subscribe to parkghost's photostream – &lt;span style="color: #cccccc;"&gt;&lt;a href="http://api.flickr.com/services/feeds/photos_public.gne?id=49672816@N00&amp;amp;lang=en-us&amp;amp;format=rss_200" title="RSS 2.0 feed"&gt;Latest&lt;/a&gt; | &lt;a href="http://api.flickr.com/services/feeds/geo/?id=49672816@N00&amp;amp;lang=en-us&amp;amp;format=rss_200" title="geoRSS feed"&gt;geoFeed&lt;/a&gt; | &lt;a href="http://api.flickr.com/services/feeds/geo/?id=49672816@N00&amp;amp;lang=en-us&amp;amp;format=kml_nl" title="Google Earth network link"&gt;KML&lt;/a&gt;&lt;/span&gt; &lt;/div&gt;
也有第三方做的 &lt;a href="http://kmlphotos.metaltoad.com/"&gt;http://kmlphotos.metaltoad.com/&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SAxxuns-HcI/AAAAAAAAAJU/AsZsR4TjdmM/s1600-h/clip_image026%5B3%5D.jpg"&gt;&lt;img alt="clip_image026" border="0" height="178" src="http://lh6.ggpht.com/parkghost/SAxxv3s-HdI/AAAAAAAAAJc/LEdHrLz8MEQ/clip_image026_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
點選&lt;a href="http://lh3.ggpht.com/parkghost/SAxxxHs-HeI/AAAAAAAAAJk/es3cYlbCFu4/s1600-h/clip_image027%5B3%5D.gif"&gt;&lt;img alt="clip_image027" border="0" height="21" src="http://lh6.ggpht.com/parkghost/SAxxy3s-HfI/AAAAAAAAAJs/74PcwByEdV0/clip_image027_thumb.gif?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="97" /&gt;&lt;/a&gt;就會啟動Google Earth，紅點即是Flickr的圖片位址&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/parkghost/SAxx23s-HgI/AAAAAAAAAJ0/aN9U4m14ifo/s1600-h/clip_image029%5B3%5D.jpg"&gt;&lt;img alt="clip_image029" border="0" height="178" src="http://lh4.ggpht.com/parkghost/SAxx5Xs-HhI/AAAAAAAAAJ8/2hFPJg9WfBY/clip_image029_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/parkghost/SAxzDXs-HiI/AAAAAAAAAKE/h3fViZTPR9E/s1600-h/clip_image0303.gif"&gt;&lt;img alt="clip_image030" border="0" height="109" src="http://lh4.ggpht.com/parkghost/SAxzEXs-HjI/AAAAAAAAAKM/KtfkclGHR1g/clip_image030_thumb.gif?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="179" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;
(&lt;a href="http://map.answerbox.net/album.php?id=15117&amp;amp;photo=251552&amp;amp;bbs=1" target="_blank"&gt;DEMO&lt;/a&gt;)&lt;/h1&gt;
整體來說還有很大的進步空間…&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SAxzHns-HkI/AAAAAAAAAKU/eZuDYNZu2LI/s1600-h/clip_image0323.jpg"&gt;&lt;img alt="clip_image032" border="0" height="178" src="http://lh4.ggpht.com/parkghost/SAxzJXs-HlI/AAAAAAAAAKc/Bj1rLzXdl4A/clip_image032_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h3&gt;
整合Flickr與 Urmap與Google Map/Earth&lt;/h3&gt;
(來源請參考：&lt;a href="http://www.mobile01.com/topicdetail.php?f=130&amp;amp;t=319156&amp;amp;last=2725926"&gt;UrKML / UrGPX照片軌跡整合線上地圖的小工具&lt;/a&gt;)&lt;br /&gt;
&lt;b&gt;匯出KMZ&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://lh4.ggpht.com/parkghost/SAxzMXs-HmI/AAAAAAAAAKk/CGss0yqAhJw/s1600-h/clip_image0343.jpg"&gt;&lt;img alt="clip_image034" border="0" height="163" src="http://lh5.ggpht.com/parkghost/SAxzNns-HnI/AAAAAAAAAKs/mFcrBzh-RWo/clip_image034_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Flickr with Google Earth&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://lh3.ggpht.com/parkghost/SAxzSHs-HoI/AAAAAAAAAK0/96psdYcofbA/s1600-h/clip_image0363.jpg"&gt;&lt;img alt="clip_image036" border="0" height="178" src="http://lh6.ggpht.com/parkghost/SAxzT3s-HpI/AAAAAAAAAK8/XaAS4pJQ8zI/clip_image036_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;KML with Google Map(&lt;a href="http://maps.google.com/?q=http://parkghost.googlepages.com/20080413.alisan.kml"&gt;DEMO&lt;/a&gt;)&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://lh6.ggpht.com/parkghost/SAx7K3s-HqI/AAAAAAAAALE/yZpshFZUaZU/s1600-h/clip_image0383.jpg"&gt;&lt;img alt="clip_image038" border="0" height="178" src="http://lh5.ggpht.com/parkghost/SAx7Mns-HrI/AAAAAAAAALM/8cF0VYDe3Yw/clip_image038_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Flickr with Google Map(&lt;a href="http://parkghost.googlepages.com/20080413.alisan.G.html"&gt;DEMO&lt;/a&gt;)&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;1: 5mi&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://lh4.ggpht.com/parkghost/SAx7RXs-HsI/AAAAAAAAALU/5P9wfmeEndM/s1600-h/clip_image0403.jpg"&gt;&lt;img alt="clip_image040" border="0" height="178" src="http://lh3.ggpht.com/parkghost/SAx7THs-HtI/AAAAAAAAALc/tykJpsLNX4M/clip_image040_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;1:2000ft&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://lh3.ggpht.com/parkghost/SAx7XHs-HuI/AAAAAAAAALk/-s73mel6ddA/s1600-h/clip_image0423.jpg"&gt;&lt;img alt="clip_image042" border="0" height="178" src="http://lh5.ggpht.com/parkghost/SAx7Yns-HvI/AAAAAAAAALs/QO9p7etOZ4M/clip_image042_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Flickr with Urmap(&lt;a href="http://parkghost.googlepages.com/20080413.alisan.U.html"&gt;DEMO&lt;/a&gt;)&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;1:6.4km&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://lh5.ggpht.com/parkghost/SAx7cns-HwI/AAAAAAAAAL0/SYT8xEEJC3M/s1600-h/clip_image0443.jpg"&gt;&lt;img alt="clip_image044" border="0" height="178" src="http://lh4.ggpht.com/parkghost/SAx7eXs-HxI/AAAAAAAAAL8/U1Pj7bIEwdA/clip_image044_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;1:200m&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://lh6.ggpht.com/parkghost/SAx7i3s-HyI/AAAAAAAAAME/O6vQJaXn_P4/s1600-h/clip_image0463.jpg"&gt;&lt;img alt="clip_image046" border="0" height="178" src="http://lh5.ggpht.com/parkghost/SAx7kns-HzI/AAAAAAAAAMM/7oYrS613jjE/clip_image046_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h3&gt;
Editor&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;a href="http://wiki.openstreetmap.org/index.php/JOSM"&gt;JOSM&lt;/a&gt;&lt;br /&gt;
File→Open→*.gpx&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SAx7nHs-H0I/AAAAAAAAAMU/5pYvs2TOOkI/s1600-h/clip_image0483.jpg"&gt;&lt;img alt="clip_image048" border="0" height="184" src="http://lh3.ggpht.com/parkghost/SAx7oHs-H1I/AAAAAAAAAMc/9FWzkTV6bmM/clip_image048_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.peterdamen.com/GoogleWMS/"&gt;使用Google Map圖資&lt;/a&gt;    &lt;br /&gt;
(Ps.基本上空照圖是要收費的，所以大部份OpenSource是沒有空照圖的)&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SAx7rns-H2I/AAAAAAAAAMk/P57KoPjZ0VM/s1600-h/clip_image0503.jpg"&gt;&lt;img alt="clip_image050" border="0" height="178" src="http://lh5.ggpht.com/parkghost/SAx7tns-H3I/AAAAAAAAAMs/AtdBKSvkcEg/clip_image050_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/parkghost/SAx7v3s-H4I/AAAAAAAAAM0/Wc0H1EihbbM/s1600-h/clip_image0523.jpg"&gt;&lt;img alt="clip_image052" border="0" height="178" src="http://lh3.ggpht.com/parkghost/SAx7xHs-H5I/AAAAAAAAAM8/Huorg2raNMw/clip_image052_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SAx7zns-H6I/AAAAAAAAANE/vKwvr5MaVYk/s1600-h/clip_image0543.jpg"&gt;&lt;img alt="clip_image054" border="0" height="184" src="http://lh3.ggpht.com/parkghost/SAx71Hs-H7I/AAAAAAAAANM/QTrrKvJc42k/clip_image054_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;a href="http://lh5.ggpht.com/parkghost/SAx73ns-H8I/AAAAAAAAANU/BzKhSA6iF4s/s1600-h/clip_image0563.jpg"&gt;&lt;img alt="clip_image056" border="0" height="178" src="http://lh3.ggpht.com/parkghost/SAx75Hs-H9I/AAAAAAAAANc/D2JPKvm570U/clip_image056_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
左手邊垃圾桶按鈕→刪點&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/parkghost/SAx79ns-H-I/AAAAAAAAANk/kFY4lOdHBT4/s1600-h/clip_image0583.jpg"&gt;&lt;img alt="clip_image058" border="0" height="178" src="http://lh3.ggpht.com/parkghost/SAx7_Hs-H_I/AAAAAAAAANs/eJDtg_mReH8/clip_image058_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
(隨便玩玩~呵) 繞圈圈&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SAx8CHs-IAI/AAAAAAAAAN0/YwP04AE06fk/s1600-h/clip_image0603.jpg"&gt;&lt;img alt="clip_image060" border="0" height="184" src="http://lh4.ggpht.com/parkghost/SAx8DXs-IBI/AAAAAAAAAN8/cDNkLYWyl2k/clip_image060_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/parkghost/SAx8HHs-ICI/AAAAAAAAAOE/8ot8P_XzSwM/s1600-h/clip_image0623.jpg"&gt;&lt;img alt="clip_image062" border="0" height="178" src="http://lh5.ggpht.com/parkghost/SAx8Ins-IDI/AAAAAAAAAOM/TL8gpBJrw68/clip_image062_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
Desktop Componet&lt;br /&gt;
&lt;h3&gt;
&lt;small&gt;&lt;a href="https://swinglabs.dev.java.net/"&gt;swinglabs&lt;/a&gt; &amp;gt; &lt;strong&gt;&lt;a href="https://swingx-ws.dev.java.net/"&gt;swingx-ws&lt;/a&gt; &lt;/strong&gt;&amp;gt; &lt;/small&gt;JXMapViewer&lt;/h3&gt;
&lt;a href="http://lh3.ggpht.com/parkghost/SAx8XHs-IEI/AAAAAAAAAOU/N-PjeIIQxN0/s1600-h/image2.png"&gt;&lt;img alt="image" border="0" height="177" src="http://lh6.ggpht.com/parkghost/SAx8a3s-IFI/AAAAAAAAAOc/r2x3BBqWfM4/image_thumb.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;
一些詞條 (Wikipedia)&lt;/h3&gt;
&lt;b&gt;&lt;u&gt;GPS tracking&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;：&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
A &lt;b&gt;GPS tracking&lt;/b&gt; unit is a device that uses the &lt;a href="http://en.wikipedia.org/wiki/Global_Positioning_System"&gt;Global Positioning System&lt;/a&gt; to determine the precise location of a vehicle, person, or other asset to which it is attached and to record the position of the asset at regular intervals. The recorded location data can be stored within the tracking unit, or it may be transmitted to a central location data base, or internet-connected computer, using a &lt;a href="http://en.wikipedia.org/wiki/Cellular_network"&gt;cellular&lt;/a&gt; (&lt;a href="http://en.wikipedia.org/wiki/GPRS"&gt;GPRS&lt;/a&gt;), &lt;a href="http://en.wikipedia.org/wiki/Radio"&gt;radio&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/Satellite"&gt;satellite&lt;/a&gt; modem embedded in the unit. This allows the asset's location to be displayed against a map backdrop either in real-time or when analysing the track later, using customized software. Such systems are not new; &lt;a href="http://en.wikipedia.org/wiki/Amateur_radio"&gt;amateur radio&lt;/a&gt; operators have been operating their free GPS based nationwide realtime &lt;a href="http://en.wikipedia.org/wiki/Automatic_Position_Reporting_System"&gt;Automatic Position Reporting System&lt;/a&gt; since &lt;a href="http://en.wikipedia.org/wiki/1982"&gt;1982&lt;/a&gt;.&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Data loggers&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;：&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
A GPS logger simply &lt;a href="http://en.wikipedia.org/wiki/Data_logging"&gt;logs&lt;/a&gt; the position of the device at regular intervals in its internal memory. Modern GPS loggers have either a &lt;a href="http://en.wikipedia.org/wiki/Memory_card"&gt;memory card&lt;/a&gt; slot, or internal &lt;a href="http://en.wikipedia.org/wiki/Flash_memory"&gt;flash memory&lt;/a&gt; and a &lt;a href="http://en.wikipedia.org/wiki/USB"&gt;USB&lt;/a&gt; port. Some act as a &lt;a href="http://en.wikipedia.org/wiki/USB_flash_drive"&gt;USB flash drive&lt;/a&gt;. This allows &lt;a href="http://en.wikipedia.org/wiki/Download"&gt;downloading&lt;/a&gt; of the data for further analysis in a computer.&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;a href="http://en.wikipedia.org/wiki/Gpx"&gt;GPX&lt;/a&gt;&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;：&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;GPX&lt;/b&gt;, or &lt;b&gt;GPS eXchange Format&lt;/b&gt; is an &lt;a href="http://en.wikipedia.org/wiki/XML_schema"&gt;XML schema&lt;/a&gt; designed for transferring &lt;a href="http://en.wikipedia.org/wiki/GPS"&gt;GPS&lt;/a&gt; data between software applications. It can be used to describe &lt;a href="http://en.wikipedia.org/wiki/Waypoint"&gt;waypoints&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Course_%28navigation%29#Track"&gt;tracks&lt;/a&gt;, and routes. The format is open and can be used without the need to pay licence fees.&lt;br /&gt;
&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Geotagging"&gt;Geotagging：&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Geotagging&lt;/b&gt;, sometimes referred to as &lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Geocoding"&gt;Geocoding&lt;/a&gt;&lt;/b&gt;, is the process of adding geographical identification &lt;a href="http://en.wikipedia.org/wiki/Metadata"&gt;metadata&lt;/a&gt; to various media such as websites, &lt;a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29"&gt;RSS&lt;/a&gt; feeds, or images and is a form of geospatial metadata. This data usually consists of &lt;a href="http://en.wikipedia.org/wiki/Latitude"&gt;latitude&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Longitude"&gt;longitude&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Coordinates"&gt;coordinates&lt;/a&gt;, though it can also include &lt;a href="http://en.wikipedia.org/wiki/Altitude"&gt;altitude&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Bearing_%28navigation%29"&gt;bearing&lt;/a&gt;, and place names.&lt;br /&gt;
&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Geocoding"&gt;Geocode：&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Geocoding&lt;/b&gt; is the process of assigning geographic identifiers (e.g., codes or &lt;a href="http://en.wikipedia.org/wiki/Geographic_coordinates"&gt;geographic coordinates&lt;/a&gt; expressed as &lt;a href="http://en.wikipedia.org/wiki/Latitude"&gt;latitude&lt;/a&gt;-&lt;a href="http://en.wikipedia.org/wiki/Longitude"&gt;longitude&lt;/a&gt;) to map features and other data records&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;a href="http://en.wikipedia.org/wiki/Waypoint"&gt;Waypoint&lt;/a&gt;&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;：&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Waypoints are sets of coordinates that identify a point in physical space. For the purposes of &lt;a href="http://en.wikipedia.org/wiki/Navigation"&gt;terrestrial navigation&lt;/a&gt;, these coordinates usually include &lt;a href="http://en.wikipedia.org/wiki/Longitude"&gt;longitude&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Latitude"&gt;latitude&lt;/a&gt;, and sometimes &lt;a href="http://en.wikipedia.org/wiki/Altitude"&gt;altitude&lt;/a&gt; (particularly for air navigation).&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Track&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;、Route&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;： &lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
An ordered collection of points may be expressed as a &lt;b&gt;track&lt;/b&gt; or a &lt;b&gt;route&lt;/b&gt;. Conceptually, tracks are a record of where a person has been, routes are suggestions about where they might go in the future. So, for instance, there might be timestamps for each point in a track (because someone is recording where &lt;i&gt;and when&lt;/i&gt; they were there), but timestamps for each point in a route are unlikely to be provided, because the author is suggesting it, and nobody might ever have travelled it.&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;a href="http://en.wikipedia.org/wiki/Keyhole_Markup_Language"&gt;KML&lt;/a&gt;&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;：&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Keyhole Markup Language&lt;/b&gt; (&lt;b&gt;KML&lt;/b&gt;) is an &lt;a href="http://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt;-based &lt;a href="http://en.wikipedia.org/wiki/Markup_language"&gt;language&lt;/a&gt; schema for expressing geographic annotation and visualization on existing or future &lt;a href="http://en.wikipedia.org/wiki/World_Wide_Web"&gt;Web&lt;/a&gt;-based, two-dimensional maps and three-dimensional &lt;a href="http://en.wikipedia.org/wiki/Earth"&gt;Earth&lt;/a&gt; browsers. KML was developed for use with &lt;a href="http://en.wikipedia.org/wiki/Google_Earth"&gt;Google Earth&lt;/a&gt;, which was originally named Keyhole Earth Viewer. It was created by &lt;a href="http://en.wikipedia.org/wiki/Keyhole%2C_Inc"&gt;Keyhole, Inc&lt;/a&gt;, which was acquired by &lt;a href="http://en.wikipedia.org/wiki/Google"&gt;Google&lt;/a&gt; in 2004. The name "Keyhole" is an homage to the &lt;a href="http://en.wikipedia.org/wiki/KH-11"&gt;KH&lt;/a&gt; reconnaissance satellites, the original eye-in-the-sky military &lt;a href="http://en.wikipedia.org/wiki/Reconnaissance"&gt;reconnaissance&lt;/a&gt; system first launched in 1976. &lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;KMZ&lt;/b&gt;&lt;b&gt;：&lt;/b&gt;&lt;br /&gt;
KML files are very often distributed as &lt;b&gt;KMZ&lt;/b&gt; files, which are &lt;a href="http://en.wikipedia.org/wiki/Data_compression"&gt;zipped&lt;/a&gt; KML files with a .kmz extension&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-5618266848798315871?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/R_tbNnNF05M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/5618266848798315871/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=5618266848798315871" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/5618266848798315871?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/5618266848798315871?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/R_tbNnNF05M/gps.html" title="GPS 記錄器、相簿、工具、節點編輯..." /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/parkghost/SAxrlns-HDI/AAAAAAAAAGM/-NsuOWN-aNY/s72-c/clip_image002_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/04/gps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEICQ3s4eip7ImA9WxVQF08.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-1821281231623883371</id><published>2008-03-28T23:21:00.017+08:00</published><updated>2009-02-04T13:49:22.532+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-04T13:49:22.532+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="backup" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="shell" /><title>自動分割大型檔案備份至GMail</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RHmzvdvi4jUjhFsLR2JpAv8DJXc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RHmzvdvi4jUjhFsLR2JpAv8DJXc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RHmzvdvi4jUjhFsLR2JpAv8DJXc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RHmzvdvi4jUjhFsLR2JpAv8DJXc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;前陣子還有一台Lab的備份主機可以放系統備份，可惜在當兵期間系統就蒙主恩招，現在沒有異地備份總有一種不踏實的感覺，要定期下載備份存檔總會忘記，好在網路上也有許多免費空間可以利用，尤其是GMail這樣好用又大碗的選擇不好好利用實在是太浪費了 :P&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; &lt;br /&gt;1.申請GMail&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2.安裝軟體(Postfix、Mutt、&lt;a href="http://www.rarlab.com/"&gt;Rar&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;選擇Rar的原因是只用Tar加split哪怕是傳輸中+-1Byte，就完了，rar有的加入還原資訊的選項，比較保險!!!。&lt;br /&gt;Ps.執行rar指令若出現下行訊息&lt;br /&gt;&lt;code&gt;rar: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.4' not found (required by rar)&lt;/code&gt;&lt;br /&gt;表示需要GLIBC_2.4。如果沒有GLIBC_2.4可以使用rar_static  &lt;pre class="brush: bash" name="code"&gt;cp rar_static /usr/local/bin/rar&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3.Script&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: bash" name="code"&gt;#!/bin/bash&lt;br /&gt;#backup to local and mail&lt;br /&gt;#Author: Brandon Chen&lt;br /&gt;#Email: parkghost@gmail.com&lt;br /&gt;&lt;br /&gt;src_path=/var/www/html&lt;br /&gt;dst_path=/var/www/alumni/backup/&lt;br /&gt;&lt;br /&gt;bak_file="alumni"`date +%Y%m%d%H%M`&lt;br /&gt;bak_data_recovery=15%&lt;br /&gt;bak_split_size=19m&lt;br /&gt;bak_mail_to=*****@gmail.com&lt;br /&gt;&lt;br /&gt;db_user=*****&lt;br /&gt;db_name=*****&lt;br /&gt;db_password=*****&lt;br /&gt;&lt;br /&gt;if ! test -d $dst_path"/mail"&lt;br /&gt;then&lt;br /&gt;  mkdir -p $dst_path"/mail"&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;cd $dst_path&lt;br /&gt;mysqldump -u$db_user -p$db_password $db_name &amp;gt; $bak_file".sql"&lt;br /&gt;tar --exclude .svn -zcf $bak_file".tar.gz" $src_path&lt;br /&gt;&lt;br /&gt;cd mail&lt;br /&gt;rm -rf * #remove old files&lt;br /&gt;rar a -rr$bak_data_recovery -m5 -v$bak_split_size $bak_file".rar" ../$bak_file".tar.gz" &amp;gt; /dev/null&lt;br /&gt;rar a -rr$bak_data_recovery -m5 $bak_file".sql.rar" ../$bak_file".sql" &amp;gt; /dev/null&lt;br /&gt;&lt;br /&gt;for name in `ls`&lt;br /&gt;do&lt;br /&gt;  mutt -s $bak_file -a $name $bak_mail_to &amp;lt; /dev/null&lt;br /&gt;done&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4.修改Postfix的最大寄送郵件大小&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: bash" name="code"&gt;[root@alumni ~]# vi /etc/postfix/main.cf&lt;br /&gt;message_size_limit = 40960000 #增加此行&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5.加入系統排程&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: bash" name="code"&gt;[root@alumni ~]# crontab -e&lt;br /&gt;0 0 15,30 * * /var/www/alumni/scripts/backup.sh&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-1821281231623883371?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/OQlUE4NsuXE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/1821281231623883371/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=1821281231623883371" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/1821281231623883371?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/1821281231623883371?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/OQlUE4NsuXE/gmail.html" title="自動分割大型檔案備份至GMail" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/03/gmail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkACQHg7fip7ImA9WxZQFUo.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-8406407010120294144</id><published>2008-02-21T15:23:00.002+08:00</published><updated>2008-02-21T15:26:01.606+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-21T15:26:01.606+08:00</app:edited><title>消費的成長</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dV_lOjWFN2T1r3FzrFi5G6a7MXo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dV_lOjWFN2T1r3FzrFi5G6a7MXo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dV_lOjWFN2T1r3FzrFi5G6a7MXo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dV_lOjWFN2T1r3FzrFi5G6a7MXo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;從&lt;a href="http://mmdays.com/2008/02/17/product-design/"&gt;五里迷霧中設計新產品&lt;/a&gt;這篇文中看到的，還滿有趣的現像，消費的成長。&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h5&gt;You Are What You Spend&lt;/h5&gt;  &lt;p&gt;&lt;a href="http://www.nytimes.com/2008/02/10/opinion/10cox.html?_r=2&amp;amp;scp=3&amp;amp;sq=financial+spending&amp;amp;st=nyt&amp;amp;oref=slogin&amp;amp;oref=slogin"&gt;http://www.nytimes.com/2008/02/10/opinion/10cox.html?_r=2&amp;amp;scp=3&amp;amp;sq=financial+spending&amp;amp;st=nyt&amp;amp;oref=slogin&amp;amp;oref=slogin&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.google.com/parkghost/R70m2vt_vmI/AAAAAAAAAEY/yYhBRs0p1DM/10chart.large%5B9%5D" target="_blank"&gt;&lt;img style="border: 0px none ;" alt="10chart.large" src="http://lh3.google.com/parkghost/R70m3vt_vnI/AAAAAAAAAEg/vknWI99zMGQ/10chart.large_thumb%5B5%5D" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-8406407010120294144?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/xzTrR7K6gaY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/8406407010120294144/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=8406407010120294144" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/8406407010120294144?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/8406407010120294144?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/xzTrR7K6gaY/blog-post.html" title="消費的成長" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/02/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UNRXc_eyp7ImA9WhRVEkQ.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-837837896595176983</id><published>2008-02-01T17:08:00.001+08:00</published><updated>2012-01-11T23:21:34.943+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T23:21:34.943+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>PHP 的新世代</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rSl38q8oHbeYcJoHo5qad-n0qA0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rSl38q8oHbeYcJoHo5qad-n0qA0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rSl38q8oHbeYcJoHo5qad-n0qA0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rSl38q8oHbeYcJoHo5qad-n0qA0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;曾幾何時PHP走入了開發的社群，走進企業的青睞，漸漸其它語言的框架也移植到了PHP，&lt;br /&gt;
講究MVC趨勢，PHP也有Template Engine(&lt;a href="http://smarty.php.net/"&gt;Smarty&lt;/a&gt;、&lt;a href="http://www.thewebmasters.net/php/FastTemplate.phtml"&gt;FastTemplate&lt;/a&gt;、&lt;a href="http://www.whenpenguinsattack.com/2006/07/19/php-template-engine-roundup/"&gt;...&lt;/a&gt;)，在講究快速開發的，&lt;br /&gt;
PHP的類&lt;a href="http://www.rubyonrails.org/"&gt;RoR&lt;/a&gt;框架如同雨後春筍一個一個出現，早之前在新興的&lt;a href="http://www.phpwact.org/php/mvc_frameworks"&gt;PHP Framework&lt;/a&gt;中評選了Cakephp當作開發框架，&lt;br /&gt;
雖然Scaffolding與Bake雛型令人驚艷，可惜早在1.03的版本時，Cake仍缺少許多基礎功能需求(I18n)&lt;br /&gt;
與不夠完整(Form validate)，穩定性也不夠(@@花了不少時間找Bug)，&lt;br /&gt;
近期1.2版補足不少功能，&lt;a href="http://tempdocs.cakephp.org/#TOC94573"&gt;Behaviors&lt;/a&gt;、&lt;a href="http://tempdocs.cakephp.org/#TOC142222"&gt;Authentication&lt;/a&gt;、&lt;a href="http://tempdocs.cakephp.org/#TOC151678"&gt;Security&lt;/a&gt;還滿實用的，&lt;br /&gt;
社群持續激蕩出新的&lt;a href="http://bakery.cakephp.org/"&gt;Idea&lt;/a&gt;令人激賞，只是核心部份總看不到下一步的發展(&lt;a href="http://tempdocs.cakephp.org/"&gt;連1.2文件也要藏起來&lt;/a&gt;....暈)。&lt;br /&gt;
&lt;br /&gt;
觀看Zend Framework之整體優了不少：&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;架構彈性(不像Cakephp限定流程)&lt;/li&gt;
&lt;li&gt;開發穩定(有穩定的班底、開發週期)&lt;/li&gt;
&lt;li&gt;社群層面較廣(廠商、開發人員)&lt;/li&gt;
&lt;li&gt;官方支持(IDE、前端Cache)&lt;/li&gt;
&lt;li&gt;文件完整(除了core的，還有proposal可以參考)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h3&gt;
Zend Framework 1.5.0 Preview Release now available&lt;/h3&gt;
&lt;h5&gt;
&lt;a href="http://devzone.zend.com/article/3020-Zend-Framework-1.5.0-Preview-Release-now-available" title="http://devzone.zend.com/article/3020-Zend-Framework-1.5.0-Preview-Release-now-available"&gt;http://devzone.zend.com/article/3020-Zend-Framework-1.5.0-Preview-Release-now-available&lt;/a&gt;&lt;/h5&gt;
還是沒有看到&lt;a href="http://framework.zend.com/wiki/display/ZFPROP/Zend_Build_Script+-+Wil+Sinclair"&gt;Zend_Build&lt;/a&gt;還是停留在&lt;a href="http://framework.zend.com/wiki/display/ZFPROP/Home"&gt;New Proposals&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;
&amp;nbsp;&lt;/h3&gt;
&lt;h3&gt;
Zend Framework &lt;/h3&gt;
&lt;h3&gt;
&lt;a href="http://framework.zend.com/whyzf/future/" title="http://framework.zend.com/whyzf/future/"&gt;http://framework.zend.com/whyzf/future/&lt;/a&gt;&lt;/h3&gt;
&lt;br /&gt;
&lt;h3&gt;
Lifting the Skirt on Zend Framework 1.5 - Zend_Form&lt;/h3&gt;
&lt;a href="http://devzone.zend.com/article/3030-Lifting-the-Skirt-on-Zend-Framework-1.5---Zend_Form" title="http://devzone.zend.com/article/3030-Lifting-the-Skirt-on-Zend-Framework-1.5---Zend_Form"&gt;http://devzone.zend.com/article/3030-Lifting-the-Skirt-on-Zend-Framework-1.5---Zend_Form&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;
用設定檔來做表單似乎還不錯，看來未來整合Zend_Build會更強大&lt;/h3&gt;
&lt;h3&gt;
&amp;nbsp;&lt;/h3&gt;
&lt;h3&gt;
Content Indexing with Zend_Search_Lucene&lt;/h3&gt;
&lt;a href="http://www.slideshare.net/shahar/content-indexing-with-zendsearchlucene/" title="http://www.slideshare.net/shahar/content-indexing-with-zendsearchlucene/"&gt;http://www.slideshare.net/shahar/content-indexing-with-zendsearchlucene/&lt;/a&gt;&lt;br /&gt;
目前看到最好的例子&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-837837896595176983?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/MklmrNYyfis" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/837837896595176983/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=837837896595176983" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/837837896595176983?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/837837896595176983?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/MklmrNYyfis/php.html" title="PHP 的新世代" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/02/php.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QNRnc9eCp7ImA9WxZSF00.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-4038257546269817167</id><published>2008-01-30T23:03:00.001+08:00</published><updated>2008-01-30T23:03:17.960+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-30T23:03:17.960+08:00</app:edited><title>平平都是Google Map，還是差很多....</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4rYzG2rL0j3wozg7s_MJ4-CcT5g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4rYzG2rL0j3wozg7s_MJ4-CcT5g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4rYzG2rL0j3wozg7s_MJ4-CcT5g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4rYzG2rL0j3wozg7s_MJ4-CcT5g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;當初看到Google Map 空照圖橫空出現，現在Street View出來了，從平面多層擴到立體全面，這就像是搜尋後所出現的&amp;quot;o&amp;quot;越來越多，一個比一個精采，不難想像View變成Video，環境與技術遲早會突破。雖然仍只有部份地區有畫面，影像也不即時，縫合的部份不夠細膩，在台鄉民，還是只能說些酸話，努力忍住口水。 &lt;/p&gt;  &lt;p&gt;台灣的Map還在弄圖資、加商店、補資訊，最最最基本的路途規畫也沒有...。&lt;/p&gt;  &lt;p&gt; 美國Google的新功能&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://maps.google.com/support/bin/topic.py?topic=10779"&gt;http://maps.google.com/support/bin/topic.py?topic=10779&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Street View&lt;/p&gt;  &lt;p&gt;&lt;a title="http://maps.google.com/support/bin/topic.py?topic=11640" href="http://maps.google.com/support/bin/topic.py?topic=11640"&gt;http://maps.google.com/support/bin/topic.py?topic=11640&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mashable.com/2007/05/31/top-15-google-street-view-sightings/"&gt;http://mashable.com/2007/05/31/top-15-google-street-view-sightings/&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh4.google.com/parkghost/R6CRlLfXLqI/AAAAAAAAADg/dWRhkvCuMKU/StreetView%5B5%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="174" alt="StreetView" src="http://lh3.google.com/parkghost/R6CRm7fXLrI/AAAAAAAAADo/q3vjU--Ki0U/StreetView_thumb%5B1%5D" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;迎擊風雪 回家過年&amp;#8212;&amp;#8212;谷歌緊急推出春運交通圖幫助出行 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://googlechinablog.com/2008/01/blog-post_30.html"&gt;http://googlechinablog.com/2008/01/blog-post_30.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh5.google.com/parkghost/R6CRrbfXLsI/AAAAAAAAADw/sg2pRAPr9JQ/1-775256%5B5%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="147" alt="1-775256" src="http://lh4.google.com/parkghost/R6CRtLfXLtI/AAAAAAAAAD4/YXNy-vLxn7k/1-775256_thumb%5B1%5D" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;台灣 Google 地圖導覽 &amp;#8592;還停留在 &lt;font color="#ff0000"&gt;簡單好操作&lt;/font&gt;冏!!! &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.google.com.tw/intl/zh-TW_tw/help/maps/tour/"&gt;http://www.google.com.tw/intl/zh-TW_tw/help/maps/tour/&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;引用： &lt;/p&gt;  &lt;p&gt;&lt;a href="http://briian.com/?p=1681"&gt;幾張 Google Street View 的「驚鴻一瞥」&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.yam.com/e21mm/article/10783187"&gt;Google Map新功能掀隱私權爭議 可採人臉偵測技術解爭端&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=45010"&gt;Google Maps修改隱私政策 街景圖可刪人臉與車牌&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-4038257546269817167?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/j2xrZ__yThs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/4038257546269817167/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=4038257546269817167" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/4038257546269817167?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/4038257546269817167?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/j2xrZ__yThs/google-map.html" title="平平都是Google Map，還是差很多...." /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/01/google-map.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMFRH8_eSp7ImA9Wx9aE04.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-3754581640552919932</id><published>2008-01-23T20:19:00.001+08:00</published><updated>2011-03-05T21:40:15.141+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-05T21:40:15.141+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scripts" /><category scheme="http://www.blogger.com/atom/ns#" term="vbscript" /><title>自訂副檔名搜尋</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/65-oKFoDc8RXesdQVaqgDJxm7FQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/65-oKFoDc8RXesdQVaqgDJxm7FQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/65-oKFoDc8RXesdQVaqgDJxm7FQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/65-oKFoDc8RXesdQVaqgDJxm7FQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="font-weight:bold;"&gt;SearchFileByExt.vbs&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: vb"&gt;&lt;br /&gt;start = Now&lt;br /&gt;WScript.Echo(&amp;quot;Start:&amp;quot; &amp;amp; start)&lt;br /&gt;strComputer = &amp;quot;.&amp;quot; &lt;br /&gt;Set objWMIService = GetObject(&amp;quot;winmgmts:&amp;quot; _ &lt;br /&gt;&amp;amp; &amp;quot;{impersonationLevel=impersonate}!\\&amp;quot; &amp;amp; strComputer &amp;amp; &amp;quot;\root\cimv2&amp;quot;) &lt;br /&gt; Set colFiles = objWMIService.ExecQuery _ &lt;br /&gt;(&amp;quot;Select * from CIM_DataFile where Extension = 'mp3' OR Extension = 'wma'&amp;quot;) &lt;br /&gt;For Each objFile in colFiles &lt;br /&gt;Wscript.echo(objFile.Caption)&lt;br /&gt;'objFile&lt;br /&gt;'objFile.Delete &lt;br /&gt;Next &lt;br /&gt;finish = Now&lt;br /&gt;WScript.Echo(&amp;quot;Finish:&amp;quot; &amp;amp; finish)&lt;br /&gt;WScript.Echo(&amp;quot;Cost:&amp;quot; &amp;amp; DateDiff(&amp;quot;n&amp;quot;,start,finish))&lt;br /&gt;&lt;/pre &gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-3754581640552919932?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/5kWf4WjiMZA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/3754581640552919932/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=3754581640552919932" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/3754581640552919932?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/3754581640552919932?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/5kWf4WjiMZA/blog-post.html" title="自訂副檔名搜尋" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/01/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMAQng8cSp7ImA9Wx9aE04.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-4018866789636141581</id><published>2008-01-23T20:17:00.003+08:00</published><updated>2011-03-05T21:40:43.679+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-05T21:40:43.679+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scripts" /><category scheme="http://www.blogger.com/atom/ns#" term="vbscript" /><title>vbscript 版 wget</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jC9QicQhZkefG9ZX-JP7yTKW5iA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jC9QicQhZkefG9ZX-JP7yTKW5iA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jC9QicQhZkefG9ZX-JP7yTKW5iA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jC9QicQhZkefG9ZX-JP7yTKW5iA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="font-weight: bold"&gt;PingList.vbs&lt;/span&gt;  &lt;br /&gt;  &lt;pre class="brush: vb"&gt;&lt;br /&gt;&amp;lt;package&amp;gt;&lt;br /&gt;&amp;lt;job&amp;gt;&lt;br /&gt;&amp;lt;runtime&amp;gt;&lt;br /&gt;&amp;lt;named&lt;br /&gt;name=&amp;quot;SourceUrl&amp;quot;&lt;br /&gt;helpstring=&amp;quot;HTTP檔案位址&amp;quot;&lt;br /&gt;type=&amp;quot;string&amp;quot;&lt;br /&gt;required=&amp;quot;true&amp;quot;&lt;br /&gt;/&amp;gt;&lt;br /&gt;&amp;lt;named&lt;br /&gt;name=&amp;quot;DestinationFile&amp;quot;&lt;br /&gt;helpstring=&amp;quot;儲存檔案位址&amp;quot;&lt;br /&gt;type=&amp;quot;string&amp;quot;&lt;br /&gt;required=&amp;quot;true&amp;quot;&lt;br /&gt;/&amp;gt;&lt;br /&gt;&amp;lt;example&amp;gt;&lt;br /&gt;Example : wget /SourceUrl:&amp;quot;http://xxx/xxx.exe&amp;quot; /DestinationFile:&amp;quot;C:\Documents and Settings\All Users\桌面\xxx.exe&amp;quot;&lt;br /&gt;&amp;lt;/example&amp;gt; &lt;br /&gt;&amp;lt;description&amp;gt;&lt;br /&gt;用途：下載Web檔案&lt;br /&gt;版本：1.0&lt;br /&gt;作者：Parkghost&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;/runtime&amp;gt;&lt;br /&gt;&amp;lt;SCRIPT language=&amp;quot;VBScript&amp;quot;&amp;gt;&lt;br /&gt;If WScript.Arguments.Named.Exists(&amp;quot;SourceUrl&amp;quot;) And WScript.Arguments.Named.Exists(&amp;quot;DestinationFile&amp;quot;) Then&lt;br /&gt;strUrl = WScript.Arguments.Named.Item(&amp;quot;SourceUrl&amp;quot;)&lt;br /&gt;strFile = WScript.Arguments.Named.Item(&amp;quot;DestinationFile&amp;quot;)&lt;br /&gt;Const adTypeBinary = 1&lt;br /&gt;Const adSaveCreateOverWrite = 2&lt;br /&gt;Const ForWriting = 2&lt;br /&gt;Dim web, varByteArray, strData, strBuffer, lngCounter, ado &lt;br /&gt;Err.Clear &lt;br /&gt;Set web = Nothing&lt;br /&gt;Set web = CreateObject(&amp;quot;WinHttp.WinHttpRequest.5.1&amp;quot;)&lt;br /&gt;If web Is Nothing Then Set web = CreateObject(&amp;quot;WinHttp.WinHttpRequest&amp;quot;) &lt;br /&gt;If web Is Nothing Then Set web = CreateObject(&amp;quot;MSXML2.ServerXMLHTTP&amp;quot;) &lt;br /&gt;If web Is Nothing Then Set web = CreateObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;) &lt;br /&gt;web.Open &amp;quot;GET&amp;quot;, strURL, False &lt;br /&gt;web.Send &lt;br /&gt;If Err.Number &amp;lt;&amp;gt; 0 Then &lt;br /&gt;SaveWebBinary = False &lt;br /&gt;Set web = Nothing &lt;br /&gt;WScript.Quit&lt;br /&gt;End If &lt;br /&gt;If web.Status &amp;lt;&amp;gt; &amp;quot;200&amp;quot; Then&lt;br /&gt;SaveWebBinary = False &lt;br /&gt;Set web = Nothing &lt;br /&gt;WScript.Quit&lt;br /&gt;End If &lt;br /&gt;varByteArray = web.ResponseBody &lt;br /&gt;Set web = Nothing&lt;br /&gt;&lt;br /&gt;'Save the file&lt;br /&gt;'On Error Resume Next &lt;br /&gt;Set ado = Nothing &lt;br /&gt;Set ado = CreateObject(&amp;quot;ADODB.Stream&amp;quot;) &lt;br /&gt;If ado Is Nothing Then &lt;br /&gt;Set fs = CreateObject(&amp;quot;Scripting.FileSystemObject&amp;quot;) &lt;br /&gt;Set ts = fs.OpenTextFile(strFile, ForWriting, True) &lt;br /&gt;strData = &amp;quot;&amp;quot; &lt;br /&gt;strBuffer = &amp;quot;&amp;quot; &lt;br /&gt;For lngCounter = 0 to UBound(varByteArray) &lt;br /&gt;ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1))) &lt;br /&gt;Next &lt;br /&gt;ts.Close &lt;br /&gt;Else &lt;br /&gt;ado.Type = adTypeBinary &lt;br /&gt;ado.Open &lt;br /&gt;ado.Write varByteArray &lt;br /&gt;ado.SaveToFile strFile, adSaveCreateOverWrite &lt;br /&gt;ado.Close &lt;br /&gt;End If &lt;br /&gt;SaveWebBinary = True &lt;br /&gt;Else&lt;br /&gt;WScript.Arguments.ShowUsage()&lt;br /&gt;End if&lt;br /&gt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;&amp;lt;/job&amp;gt;&lt;br /&gt;&amp;lt;/package&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-4018866789636141581?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/bg3lQkOCP3w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/4018866789636141581/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=4018866789636141581" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/4018866789636141581?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/4018866789636141581?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/bg3lQkOCP3w/vbscript-wget.html" title="vbscript 版 wget" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/01/vbscript-wget.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYHRX4-eip7ImA9Wx9aE04.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-587541663583347661</id><published>2008-01-23T20:12:00.001+08:00</published><updated>2011-03-05T21:02:14.052+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-05T21:02:14.052+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scripts" /><category scheme="http://www.blogger.com/atom/ns#" term="vbscript" /><title>解決vbscript len function 無法判斷 double byte 字元</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/27LLu_4ETMklT9h0Rl1C47fN808/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/27LLu_4ETMklT9h0Rl1C47fN808/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/27LLu_4ETMklT9h0Rl1C47fN808/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/27LLu_4ETMklT9h0Rl1C47fN808/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="brush:vb"&gt;&lt;br /&gt;strText = ("中文123")&lt;br /&gt;WScript.Echo(strText  &amp;amp; ":" &amp;amp; Len(strText))&lt;br /&gt;WScript.Echo(strText  &amp;amp; ":" &amp;amp; newLen(strText))&lt;br /&gt;&lt;br /&gt;Function newLen(text)&lt;br /&gt;oldlen = Len(text)&lt;br /&gt;newLen = 0&lt;br /&gt;For i = 1 To oldlen&lt;br /&gt;If Asc(Mid(text,i,1)) &gt; 0 Then&lt;br /&gt; newLen = newLen + 1&lt;br /&gt;Else&lt;br /&gt; newLen = newLen + 2&lt;br /&gt;End If&lt;br /&gt;Next&lt;br /&gt;End Function&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-587541663583347661?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/JYRmBD64d1k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/587541663583347661/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=587541663583347661" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/587541663583347661?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/587541663583347661?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/JYRmBD64d1k/vbscript-len-function-double-byte.html" title="解決vbscript len function 無法判斷 double byte 字元" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/01/vbscript-len-function-double-byte.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMCRX06fyp7ImA9Wx9aE04.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-8650548746927519848</id><published>2008-01-23T19:50:00.001+08:00</published><updated>2011-03-05T21:41:04.317+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-05T21:41:04.317+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scripts" /><category scheme="http://www.blogger.com/atom/ns#" term="vbscript" /><title>網路連線測式(Ping by List)</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/u7rMuslZrIQJaSRxjYfYl2Sqxeg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u7rMuslZrIQJaSRxjYfYl2Sqxeg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/u7rMuslZrIQJaSRxjYfYl2Sqxeg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u7rMuslZrIQJaSRxjYfYl2Sqxeg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;PingList.vbs&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: vb"&gt;&lt;br /&gt;Msg = "站點" &amp;amp; vbTab &amp;amp; paddingStr("位址",27) &amp;amp; vbTab &amp;amp; paddingStr("IP",15) &amp;amp; vbTab &amp;amp; "回應時間" &amp;amp; vbNewLine&lt;br /&gt;Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")&lt;br /&gt;Set objXML = CreateObject("Microsoft.XMLDOM")&lt;br /&gt;objXML.async = False&lt;br /&gt;objXML.Load "ipList.xml"&lt;br /&gt;If objXML.parseError.errorCode &lt;&gt; 0 Then&lt;br /&gt; WScript.Echo("設定檔載入錯誤")&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;Set objList = objXML.getElementsByTagName("*")&lt;br /&gt;Set nodes = objList.item(i).selectSingleNode("//site").childNodes&lt;br /&gt;&lt;br /&gt;For Each node In nodes&lt;br /&gt; Dim ProtocolAddress&lt;br /&gt; Dim ResponseTime&lt;br /&gt; Set objNamedNodeMap = node.attributes  &lt;br /&gt; Set objPing = objWMIService.ExecQuery("select * from Win32_PingStatus where address = '" &amp;amp; node.text &amp;amp; "'")&lt;br /&gt; For Each objStatus in objPing&lt;br /&gt;  ProtocolAddress = objStatus.ProtocolAddress&lt;br /&gt;  ResponseTime = objStatus.ResponseTime&lt;br /&gt; Next &lt;br /&gt; Msg = Msg &amp;amp; objNamedNodeMap.item(0).text &amp;amp; vbTab &amp;amp; paddingStr(node.text,25) &amp;amp; vbTab &amp;amp; paddingStr(ProtocolAddress,15) &amp;amp; vbTab &amp;amp; ResponseTime &amp;amp; vbNewLine &lt;br /&gt;Next&lt;br /&gt;WScript.Echo(Msg)&lt;br /&gt;&lt;br /&gt;Function paddingStr(str,lenght)&lt;br /&gt; If Len(str) &gt; lenght then&lt;br /&gt;  paddingStr = str&lt;br /&gt; Else&lt;br /&gt;  'todo:double byte analysis&lt;br /&gt;  paddingStr = str &amp;amp;  Space(lenght - Len(str))&lt;br /&gt; End If&lt;br /&gt;End Function&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ipList.xml&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;big5&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;site&amp;gt;&lt;br /&gt;&amp;lt;item name=&amp;quot;HiNet&amp;quot;&amp;gt;www.hinet.net&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;item name=&amp;quot;Yahoo&amp;quot;&amp;gt;tw.yahoo.com&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;item name=&amp;quot;Pchome&amp;quot;&amp;gt;www.pchome.com&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/site&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-8650548746927519848?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/JHb5dbAt1I0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/8650548746927519848/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=8650548746927519848" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/8650548746927519848?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/8650548746927519848?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/JHb5dbAt1I0/ping-by-list.html" title="網路連線測式(Ping by List)" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2008/01/ping-by-list.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEACRXg5eCp7ImA9Wx9aE04.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-4714532651403622062</id><published>2007-05-12T13:55:00.002+08:00</published><updated>2011-03-05T21:46:04.620+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-05T21:46:04.620+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="ldap" /><title>Ldap Install Guide</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_EnMUWxzYfyHosvVqLwthOm0kqA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_EnMUWxzYfyHosvVqLwthOm0kqA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_EnMUWxzYfyHosvVqLwthOm0kqA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_EnMUWxzYfyHosvVqLwthOm0kqA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="brush: bash"&gt;  &lt;br /&gt;yum install openldap-servers.i386 openldap-devel openldap-clients compat-openldap  &lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;p&gt;#加入Samba.schema&lt;/p&gt; &lt;br /&gt;&lt;pre class="brush: bash"&gt; cd /etc/openldap/schema&lt;br /&gt;wget http://www.samba.org/cgi-bin/cvsweb/samba/examples/LDAP/samba.schema?rev=1.1.4.1&lt;br /&gt;mv samba.schema?rev=1.1.4.1 samba.schema &lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;p&gt;#編輯ldap設定檔&lt;/p&gt; &lt;br /&gt;&lt;pre class="brush: bash"&gt;&lt;br /&gt;vi /etc/openldap/slapd.conf&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;p&gt;#slapd.conf #add&lt;/p&gt; &lt;br /&gt;&lt;pre class="brush: bash"&gt;  include /etc/openldap/schema/samba.schema &lt;/pre&gt; &lt;br /&gt;&lt;p&gt;#取得加密密碼&lt;/p&gt; &lt;br /&gt;&lt;pre class="brush: bash"&gt; &lt;br /&gt;slappasswd -s root-dn-passwd {SSHA}F+zPYmGidD3HdO5eO3aidWTKjaRZDsUe &lt;br /&gt;&lt;/pre&gt; &lt;p&gt;#modify&lt;/p&gt; &lt;br /&gt;&lt;pre class="brush: bash"&gt; suffix "dc=im,dc=nuu,dc=edu,dc=tw" rootdn "cn=Manager,dc=im,dc=nuu,dc=edu,dc=tw" rootpw {SSHA}n9G1cmwcsikHDF1OAByZzrjr1f836S3i &lt;br /&gt;&lt;/pre&gt; &lt;p&gt;#chown&lt;/p&gt; &lt;br /&gt;&lt;pre class="brush: bash"&gt; chown -R ldap:ldap /var/lib/ldap/  &lt;br /&gt;&lt;/pre&gt; &lt;p&gt;#TLS&lt;/p&gt; &lt;br /&gt;&lt;pre class="brush: bash"&gt;./CA -newcert&lt;br /&gt;./CA –newca&lt;br /&gt;openssl req -new -nodes -keyout newreq.pem -out newreq.pem&lt;br /&gt;./CA -sign&lt;br /&gt;mkdir /etc/openldap/ssl&lt;br /&gt;mv demoCA/cacert.pem /etc/openldap/ssl&lt;br /&gt;mv newcert.pem /etc/openldap/ssl/servercrt.pem&lt;br /&gt;mv newreq.pem /etc/openldap/ssl/serverkey.pem&lt;br /&gt;chown ldap:ldap /etc/openldap/ssl/serverkey.pem&lt;br /&gt;chmod 600 /etc/openldap/ssl/serverkey.pem &lt;br /&gt;scp /etc/openldap/ssl/cacert.pem &lt;br /&gt;root@203.64.178.106:/etc/openldap/ssl/cacert.pem&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;在客戶端的/etc/openldap/ldap.conf 中加入&lt;br /&gt;TLS_CACERT /etc/openldap/ssl/cacert.pem ,&lt;br /&gt;注意此文件時從服務器上生成的。 &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-4714532651403622062?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/lZViNgHLkQg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/4714532651403622062/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=4714532651403622062" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/4714532651403622062?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/4714532651403622062?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/lZViNgHLkQg/ldap-install-guide.html" title="Ldap Install Guide" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2007/05/ldap-install-guide.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMNRHs5cSp7ImA9WxVQF0g.&quot;"><id>tag:blogger.com,1999:blog-7330772.post-8095474379713011055</id><published>2007-05-12T13:54:00.003+08:00</published><updated>2009-02-04T20:28:15.529+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-04T20:28:15.529+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="selinux" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="vsftpd" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><category scheme="http://www.blogger.com/atom/ns#" term="openwebmail" /><title>Some Selinux Tips</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Pls7IjIoAFjKsUNsjAYVFddqta8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pls7IjIoAFjKsUNsjAYVFddqta8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Pls7IjIoAFjKsUNsjAYVFddqta8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pls7IjIoAFjKsUNsjAYVFddqta8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="brush: bash" name="code"&gt;&lt;br /&gt;vi /etc/selinux/targeted/booleans.local&lt;br /&gt;allow_ypbind=0&lt;br /&gt;ftpd_disable_trans=1&lt;br /&gt;httpd_disable_trans=1&lt;br /&gt;or&lt;br /&gt;setsebool ftpd_disable_trans 1&lt;br /&gt;setsebool httpd_disable_trans 1&lt;br /&gt;for vsftpd&lt;br /&gt;modprobe ip_nat_ftp 2&gt; /dev/null&lt;br /&gt;modprobe ip_conntrack_ftp 2&gt; /dev/null&lt;br /&gt;for openwebmail&lt;br /&gt;touch /var/log/openwebmail.log&lt;br /&gt;chcon -u system_u /var/log/openwebmail.log&lt;br /&gt;chcon -t httpd_sys_script_rw_t /var/log/openwebmail.log&lt;br /&gt;chcon -t httpd_unconfined_script_exec_t /var/www/cgi-bin/openwebmail/openwebmail*&lt;/p&gt; &lt;p&gt;for awtstats&lt;br /&gt;chcon -t httpd_unconfined_script_exec_t /usr/local/awstats/wwwroot/cgi-bin/*&lt;/p&gt; &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7330772-8095474379713011055?l=blog.brandonc.me' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brandonc/JmKH/~4/LEm1LeNaFKQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.brandonc.me/feeds/8095474379713011055/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7330772&amp;postID=8095474379713011055" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/8095474379713011055?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7330772/posts/default/8095474379713011055?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/brandonc/JmKH/~3/LEm1LeNaFKQ/some-selinux-tips.html" title="Some Selinux Tips" /><author><name>Brandon</name><uri>http://www.blogger.com/profile/14085068422339060191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://bp0.blogger.com/_G26NPuPoi1w/R5tn1LfXLmI/AAAAAAAAADE/Q6SJN7NChVg/S220/crestock-265373-1024x768.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.brandonc.me/2007/05/some-selinux-tips.html</feedburner:origLink></entry></feed>

