tag:blogger.com,1999:blog-17293364226239535672024-03-13T07:53:02.538-07:00Join tomorroWAstonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.comBlogger70150tag:blogger.com,1999:blog-1729336422623953567.post-33978553679179501132018-12-27T23:08:00.000-08:002018-12-27T23:08:00.643-08:00Concurrency and asynchronous operations with C++/WinRT簡單紀錄一下Concurrency and asynchronous operations with C++/WinRT<br />
<br />
The Windows::Foundation Windows Runtime namespace contains four types of asynchronous operation object.<br />
<span style="color: orange;">- IAsyncAction,</span><br />
<span style="color: orange;">- IAsyncActionWithProgress<tprogress>,</tprogress></span><br />
<span style="color: orange;">- IAsyncOperation<tresult>, and</tresult></span><br />
<span style="color: orange;">- IAsyncOperationWithProgress<tresult tprogress="">.</tresult></span><br />
<br />
在使用asynchronous Windows function時有2種方式<br />
- blocking<br />
- non-blocking<br />
<span style="color: yellow;">blocking適合用在console program或是background thread,不適合用在UI thread.</span><br />
<br />
<br />
*********************************<br />
coroutine介紹<br />
*********************************<br />
C++/WinRT 整合了 C++ coroutines into the programming model to provide a natural way to cooperatively wait for a result.<br />
只要在function前宣告成上述提到的4種asynchronous operation object,即為coroutines。如下ProcessFeedAsync<br />
<br />
<span style="color: cyan;">IAsyncAction ProcessFeedAsync()</span><br />
<span style="color: cyan;">{</span><br />
<span style="color: cyan;"> Uri rssFeedUri{ L"https://blogs.windows.com/feed" };</span><br />
<span style="color: cyan;"> SyndicationClient syndicationClient;</span><br />
<span style="color: cyan;"> SyndicationFeed syndicationFeed{ co_await syndicationClient.RetrieveFeedAsync(rssFeedUri) };</span><br />
<span style="color: cyan;"> print_function();</span><br />
<span style="color: cyan;">}</span><br />
<br />
下例即為如何呼叫此coroutine:<br />
<span style="color: cyan;">int main</span><br />
<span style="color: cyan;">{</span><br />
<span style="color: cyan;"> auto processOp{ ProcessFeedAsync() };</span><br />
<span style="color: cyan;"> processOp.get();</span><br />
<span style="color: cyan;">}</span><br />
<br />
MS對coroutine的解釋:<br />
A coroutine is a function that can be suspended and resumed. In the ProcessFeedAsync coroutine above, when the co_await statement is reached, the coroutine asynchronously initiates the RetrieveFeedAsync call and then it immediately suspends itself and returns control back to the caller (which is main in the example above). main can then continue to do work while the feed is being retrieved and printed. When that's done (when the RetrieveFeedAsync call completes), the ProcessFeedAsync coroutine resumes at the next statement.<br />
<br />
<br />
*********************************<br />
coroutine回傳值<br />
*********************************<br />
coroutine可以回傳Windows Runtime type,如上。也可以回傳非Windows Runtime type,如concurrency::task. 範例如下<br />
<span style="color: cyan;">concurrency::task<std::wstring> RetrieveFirstTitleAsync()</std::wstring></span><br />
<span style="color: cyan;">{</span><br />
<span style="color: cyan;"> return concurrency::create_task([]</span><br />
<span style="color: cyan;"> {</span><br />
<span style="color: cyan;"> Uri rssFeedUri{ L"https://blogs.windows.com/feed" };</span><br />
<span style="color: cyan;"> SyndicationClient syndicationClient;</span><br />
<span style="color: cyan;"> SyndicationFeed syndicationFeed{ syndicationClient.RetrieveFeedAsync(rssFeedUri).get() };</span><br />
<span style="color: cyan;"> return std::wstring{ syndicationFeed.Items().GetAt(0).Title().Text() };</span><br />
<span style="color: cyan;"> });</span><br />
<span style="color: cyan;">}</span><br />
<br />
<span style="color: cyan;">int main()</span><br />
<span style="color: cyan;">{</span><br />
<span style="color: cyan;"> winrt::init_apartment();</span><br />
<span style="color: cyan;"><br /></span>
<span style="color: cyan;"> auto firstTitleOp{ RetrieveFirstTitleAsync() };</span><br />
<span style="color: cyan;"> // Do other work here.</span><br />
<span style="color: cyan;"> std::wcout << firstTitleOp.get() << std::endl;</span><br />
<span style="color: cyan;">}</span><br />
<br />
<br />
*********************************<br />
coroutine參數<br />
*********************************<br />
如果需要在coroutine中傳遞參數,要用const,以確保thread safe.<br />
<br />
<br />
*********************************<br />
coroutine的thread<br />
*********************************<br />
coroutine在碰到co_await, co_return, or co_yield時會rutern。<br />
但如果在coroutine裡面沒有機會使用到這幾個時,可以直接使用<br />
co_await winrt::resume_background();<br />
這樣可以讓自己被丟到system thread pool,返回caller的thread,然後讓system啟動一個thread來完成自己的coroutine.<br />
<br />
然而使用co_await winrt::resume_foreground(UI_thread)可以讓自己的thread回到UI thread,這個方式可以用來update UI.<br />
<br />
值得注意的是在suspension點之後,原來的thread可能會消失不見,resume之後可能會是另一條thread來執行。但是如果我們使用的是Windows Runtime type (IAsyncXXX)的話,C++/WinRT會自動幫我們處理。C++/WinRT會在suspension之前先紀錄calling context,等到resume時會檢查並確保是在calling context. 如果不是使用(IAsyncXXX)的話,請記得確認此library有提供這個技術。<br />
<br />
<br />
*********************************<br />
Canceling an asychronous operation, and cancellation callbacks<br />
*********************************<br />
使用 IAsyncXXX.Cancel()來取消一個async operation.<br />
或用 IAsyncXXX.callback()來註冊取消一個async operation之後要執行的function.<br />
<br />
*********************************<br />
Reporting progress<br />
*********************************<br />
使用 IAsyncActionWithProgress或IAsyncOperationWithProgress來回報進度。<br />
<br />
*********************************<br />
Fire and forget<br />
*********************************<br />
宣告coroutine為winrt::fire_and_forget,即為不等待結束。<br />
<br />Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-54631042066328458592018-12-27T19:34:00.000-08:002018-12-27T19:34:13.910-08:00The visual studio behavior with WinRT runtime component<b>When "windows runtime component" project created with winrt type.</b><br />
1. VS default create Class.idl, Class.h, Class.cpp under root of project folder.<br />
2. when project built, VS will generate some files in "<u>Generated Files</u>" folder.<br />
- Class.g.h<br />
- module.g.cpp<br />
- <u>folder "winrt"</u><br />
- $project_name.h // define template for Class<br />
- <u>folder "impl"</u><br />
- $project_name.0.h // define template for $project_name.1.h<br />
- $project_name.1.h // define IClass for $project_name.2.h<br />
- $project_name.2.h // define Class for $project_name.h<br />
- <u>folder "source"</u><br />
- Class.h // this file content is same as default created Class.h<br />
- Class.cpp // this file content is same as default created Class.cpp<br />
<br />
<b>3. When change members in Class.idl and rebuild project.</b><br />
3.1. <u>files under root project folder.</u><br />
- Class.h // <span style="color: #cccccc;">not re-generated.</span><br />
- Class.cpp // <span style="color: #cccccc;">not re-generated.</span><br />
3.2. <u>files under "Generated Files" folder.</u><br />
- Class.g.h // <span style="color: orange;">re-generated, not content is not affected.</span><br />
- module.g.cpp // <span style="color: orange;">re-generated, not content is not affected.</span><br />
- <u>files under "Generated Files/winrt" folder.</u><br />
- $project_name.h // <span style="color: cyan;">re-generated, add members.</span><br />
- <u>files under "Generated Files/winrt/impl" folder.</u><br />
- $project_name.0.h // <span style="color: cyan;">re-generated, add members.</span><br />
- $project_name.1.h // <span style="color: orange;">re-generated, not content is not affected.</span><br />
- $project_name.2.h // <span style="color: orange;">re-generated, not content is not affected.</span><br />
- <u>files under "Generated Files/winrt/source" folder.</u><br />
- Class.h // <span style="color: cyan;">re-generated, add members.</span><br />
- Class.cpp // <span style="color: cyan;">re-generated, add members.</span><br />
<br />
<b>4. When rename class name in Class.idl</b><br />
4.1. <u>files under root project folder.</u><br />
- Class.h // <span style="color: #cccccc;">not re-generated.</span><br />
- Class.cpp // <span style="color: #cccccc;">not re-generated.</span><br />
4.2. <u>files under "Generated Files" folder.</u><br />
- Class.g.h // <span style="color: orange;">not re-generated</span>. just because new class file generated.<br />
- NewClass.g.h // <span style="color: red;">new class file generated.</span><br />
- module.g.cpp // <span style="color: cyan;">re-generated, content changed.</span><br />
- <u>files under "Generated Files/winrt" folder.</u><br />
- $project_name.h // <span style="color: cyan;">re-generated, content changed to new class related.</span><br />
- <u>files under "Generated Files/winrt/impl" folder.</u><br />
- $project_name.0.h // <span style="color: cyan;">re-generated, content changed to new class related.</span><br />
- $project_name.1.h // <span style="color: cyan;">re-generated, content changed to new class related.</span><br />
- $project_name.2.h // <span style="color: cyan;">re-generated, content changed to new class related.</span><br />
- <u>files under "Generated Files/winrt/source" folder.</u><br />
- Class.h // <span style="color: orange;">not re-generated</span>. just because new class file generated.<br />
- Class.cpp // <span style="color: orange;">not re-generated</span>. just because new class file generated.<br />
- NewClass.h // <span style="color: red;">new class file generated.</span><br />
- NewClass.cpp // <span style="color: red;">new class file generated.</span><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-48077376708834388652018-10-11T00:27:00.000-07:002018-10-11T00:33:31.565-07:00amazon echo's skills最近在研究如何開發amazon echo的程式,也就是如何讓擁有amazon echo裝置的人可以有更多話語跟echo裝置互動。<br />
<br />
在amazon echo的世界裡,有一個虛擬的助手叫alexa,alexa擁有依些基本對話功能,基本對話能力是amazon開發時就已經內建在echo裏面了,但是amazon不希望echo只能做這些事,所以開放一些SDK,讓全世界有興趣的工程師一起來擴張amazon的能力。這個能力在amazon的世界裏面稱做skill。<br />
<br />
可以對比成:android的世界裏面,開發者可以開發許多app,在amazon的世界裏面,這些app稱做skill。<br />
<br />
不廢話進重點。<br />
<br />
當一個開發者想要開發skill時,要先知道skill怎樣分類,amazon將skill分成四大類。<br />
1. Custom skill<br />
2. Smart Home Skill API<br />
3. Video Skill API<br />
4. Flash Briefing Skill API<br />
接下來分別簡單說說這四大類。<br />
<br />
<b><u>Custom skill</u></b><br />
這一類就是讓開發者完全自己定義要如何跟使用者互動,如:到某個網站查詢資料,開發互動式遊戲等等。<br />
<b><u><br /></u></b>
<b><u>Smart Home Skill API</u></b><br />
這一類可以讓使用者控制IoT裝置,如Smart TV,電燈,門鎖等等。<br />
<b><u><br /></u></b>
<b><u>Video Skill API</u></b><br />
這一類skill者要是讓使用者控制雲端的視頻服務,如播放影片,暫停播放,播歌等等。<br />
<b><u><br /></u></b>
<b><u>Flash Briefing Skill API</u></b><br />
<div>
最後一類是播放簡報,這裡的簡報意指使用者事前已經設定好的資料,如報紙的頭條新聞,讓alexa播報出來。</div>
<div>
<br />
參考資料:https://developer.amazon.com/docs/ask-overviews/build-skills-with-the-alexa-skills-kit.html</div>
Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-34285484912836650812016-10-11T22:49:00.001-07:002016-10-11T22:49:17.527-07:00如何解決eclipse無法在ubuntu 16.04上啟動狀況:<br />
ubuntu升級到16.04版之後,eclipse無法啟動,會一直卡在splash畫面。<br />
<br />
解決方式:<br />
問題應該是在16.04裡GTK+ 3的版本。<br />
<br />
請先用下面步驟確認:<br />
打開一個terminal視窗,然後輸入<br />
<span style="color: red; font-family: Arial, Helvetica, sans-serif;">export SWT_GTK3=0</span><br />
然後在terminal視窗裡下命令啟動Eclipse.<br />
如果這樣可以使得eclipse正常啟動。那請在eclipse.ini中加入下列2行敘述。<br />
<br />
<span style="color: red; font-family: Arial, Helvetica, sans-serif;">--launcher.GTK_version</span><br />
<span style="color: red; font-family: Arial, Helvetica, sans-serif;">2</span><br />
<br />
請加在 --launcher.appendVmargs 前面。<br />
<br />
相關的bug<br />
<a href="https://bugs.launchpad.net/ubuntu/+source/java-common/+bug/1552764" target="_blank">Ubuntu bug 1552764</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-9039305638684683322016-05-30T00:15:00.001-07:002016-05-31T00:00:56.983-07:00密碼學最近在學習AllJoyn security 2.0,裏面有一些密碼學的東西,也順便一起看一下,有幾個不錯的概念網站,順便紀錄下來。<br />
<br />
<br />
PK(金鑰加密系 統,Public Key Cryptosystems)的作用包括「<span style="color: lime; font-size: large;">資料保密</span>」和「<span style="color: orange; font-size: large;">身份認證</span>」兩方面。<br />
<br />
當你需要寄送<span style="color: lime; font-size: large;">加密</span>檔案給某人(假設為A君)時,需先向PK伺服器查詢A君的公 開金鑰,再以取得的公開金鑰進行資料加密。由於檔案是用A君的公開金鑰加密的,因此只有A君的私密金鑰才能解密。只要A君妥善保管好自己的私密金鑰,就能 確保檔案的隱密性。<br />
<br />
至於<span style="color: orange; font-size: large;">身份確認</span>方面,你需要事先透過適當的安全管道把代表自己身份的電子簽章檔送給A君,電子簽章檔可以是文字檔或簽名、印章的影像檔。 當你把利用A君公開金鑰加密的資料檔Email給對方時,可以附加上利用自己私密金鑰加密的電子簽章檔。<br />
<br />
A君收到你寄送去的資料檔和電子簽章檔之後,可以使用他自己的私密金鑰對資料檔解密,同時向PK伺服器查詢你的公開金鑰,再利用取得的公開金鑰對電子簽章檔<span style="color: lime; font-size: large;">解密</span>。<br />
比對解密後的電子簽章檔和你事先交付的電子簽章檔無誤之後,A君就能<span style="color: orange; font-size: large;">確認</span>資料檔確實是你寄送給他的。<br />
<br />
PK登記手續只需辦理一次,之後就可以透過網路隨時更換寄存在PK伺服器裡的 公開金鑰。使用者只要勤於更換公開金鑰和私密金鑰,甚至每一對公開金鑰和私密金鑰只用一次,用過即換,即可保障通訊內容安全無虞。<br />
<br />
<br />
參考書目<br />
<a href="http://security.nknu.edu.tw/psnl/publications/2005/01_CHENG,PEI-CHI/Thesis.pdf" target="_blank">Live-CA:結合 IC 卡的 PKI 憑證管理系統之設計與實現--國立高雄師範大學資訊教育研究所碩士論文</a><br />
<br />
<a href="http://avp.toko.edu.tw/docs/class/3/%E5%AF%86%E7%A2%BC%E5%AD%B8%E5%8E%9F%E7%90%86%E8%88%87%E6%8A%80%E8%A1%93.pdf" target="_blank">稻江科技暨管理學院提供的教學:密碼學原理與技術</a><br />
<br />
<a href="http://ivanlin-tw.blogspot.tw/2010/06/pki.html" target="_blank">Ivan Blog:何謂PKI?</a><br />
<div>
<br /></div>
<div>
<div>
<a href="https://www.ctimes.com.tw/art/print.asp?O=HJNB1B8AWJGAR-STDM" target="_blank">建構安全的網路世界 :公開金鑰基礎建設(PKI)的現況與應用</a></div>
</div>
<div>
<br /></div>
<div>
<a href="http://www.slideshare.net/kennychennetman/pki-32338637" target="_blank">金鑰管理 (PKI)</a></div>
<div>
<br /></div>
<div>
<a href="http://www.synnex.com.tw/asp/fae_qaDetail.asp?from_prg=&topic=FAE&group=&parent=&classifyid=01997&seqno=17477" target="_blank">聯強E程式:PKI(Public Key Infrastructure)簡介</a><br />
<br />
<a href="http://www.study-area.org/tips/certs-v2-20020914/certs.html#sslx509" target="_blank">SSL/X.509 簡介</a></div>
Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-37989573363437030752016-04-28T19:32:00.000-07:002016-04-28T19:32:03.604-07:00[轉貼]用gcc 自製 Library轉自 PTT LinuxDev<br />
—<br />
<br />
作者: cole945 (躂躂..) 看板: LinuxDev<br />
標題: [心得] 用gcc 自製Library<br />
時間: Sun Nov 5 04:15:45 2006<br />
<br />
<br />
Library可分成三種,static、shared與dynamically loaded。<br />
<br />
<br />
<div>
<span style="font-size: x-large;">1. Static libraries</span><br />
Static 程式庫用於靜態連結,簡單講是把一堆object檔用ar(archiver)包裝集合起來,檔名以`.a’ 結尾。優點是執行效能通常會比後兩者快,而且因為是靜態連結,所以不易發生執行時找不到library或版本錯置而無法執行的問題。缺點則是檔案較大,維護度較低;例如library如果發<br />
現bug需要更新,那麼就必須重新連結執行檔。<br />
<br />
<span style="font-size: large;">1.1 編譯</span><br />
編譯方式很簡單,先例用`-c’ 編出object 檔,再用ar 包起來即可。<br />
<br />
<span style="color: orange;">____ hello.c ____</span><br />
<span style="color: orange;">#include </span><stdio .h=""><span style="color: orange;"><br />void hello(){ printf(“Hello “); }<br /><br />____ world.c ____<br />#include </span><stdio .h=""><span style="color: orange;"><br />void world(){ printf(“world.”); }<br /><br />____ mylib.h ____<br />void hello();<br />void world();</span><br /><br /><span style="color: red;">$ gcc -c hello.c world.c /* 編出hello.o 與world.o */</span><br /><br /><span style="color: red;">$ ar rcs libmylib.a hello.o world.o /* 包成limylib.a */</span></stdio></stdio><br />
<stdio .h=""><stdio .h=""><br /></stdio></stdio></div>
<div>
這樣就可以建出一個檔名為libmylib.a 的檔。輸出的檔名其實沒有硬性規定,但如果想要配合gcc 的’-l’ 參數來連結,一定要以`lib’ 開頭,中間是你要的library名稱,然後緊接著`.a’ 結尾。<br />
<br />
<br />
<span style="font-size: large;">1.2 使用</span><br />
<br />
<span style="color: orange;">____ main.c ____</span><br />
<span style="color: orange;">#include “mylib.h”</span><br />
<span style="color: orange;">int main() {</span><br />
<span style="color: orange;"> hello();</span><br />
<span style="color: orange;"> world();</span><br />
<span style="color: orange;">}</span><br />
<br />
<br />
使用上就像與一般的object 檔連結沒有差別。<br />
<br />
<span style="color: red;">$ gcc main.c libmylib.a</span><br />
<br />
也可以配合gcc 的`-l’ 參數使用<br />
<br />
<span style="color: red;">$ gcc main.c -L. -lmylib</span><br />
<br />
-L 參數用來指定要搜尋程式庫的目錄,`.’ 表示搜尋現在所在的目錄。通常預設會搜/usr/lib 或/lib 等目錄。<br />
-l 參數用來指定要連結的程式庫,’mylib’ 表示要與mylib進行連結,他會搜尋library名稱前加`lib’後接`.a’的檔案來連結。<br />
<br />
<span style="color: red;">$ ./a.out</span><br />
<span style="color: lime;">Hello world.</span><br />
<br />
<br />
<br />
<span style="font-size: x-large;">2. Shared libraries</span><br />
Shared library 會在程式執行起始時才被自動載入。因為程式庫與執行檔是分離的,所以維護彈性較好。有兩點要注意,shared library是在程式起始時就要被載入,而不是執行中用到才載入,而且在連結階段需要有該程式庫才能進行連結。<br />
<br />
首先有一些名詞要弄懂,soname、real name與linker name。</div>
<div>
<br />
soname 用來表示是一個特定library 的名稱,像是libmylib.so.1 。前面以`lib’ 開頭,接著是該library 的名稱,然後是`.so’ ,接著是版號,用來表名他的介面;如果介面改變時,就會增加版號來維護相容度。</div>
<div>
real name 是實際放有library程式的檔案名稱,後面會再加上minor 版號與release 版號,像是libmylib.so.1.0.0 。一般來說,版號的改變規則是(印象中在APress-Difinitive Guide to GCC中有提到,但目前手邊沒這本書),最尾碼的release版號用於程式內容的修正,介面完全沒有改變。中間的minor用於有新增加介面,但相舊介面沒改變,所以與舊版本相容。最前面的version版號用於原介面有移除或改變,與舊版不相容時。</div>
<div>
linker name是用於連結時的名稱,是不含版號的soname ,如: libmylib.so。通常linker name與real name是用ln 指到對應的real name ,用來提供彈性與維護性。<br />
<br />
<br />
<span style="font-size: large;">2.1 編譯</span><br />
<br />
shared library的製作過程較複雜。<br />
<br />
<span style="color: red;">$ gcc -c -fPIC hello.c world.c</span><br />
<br />
編譯時要加上-fPIC 用來產生position-independent code。也可以用-fpic參數。(不太清楚差異,只知道-fPIC 較通用於不同平台,但產生的code較大,而且編譯速度較慢)。<br />
<br />
<span style="color: red;">$ gcc -shared -Wl,-soname,libmylib.so.1 -o libmylib.so.1.0.0 hello.o world.o</span><br />
<br />
-shared 表示要編譯成shared library<br />
-Wl 用於參遞參數給linker,因此-soname與libmylib.so.1會被傳給linker處理。<br />
-soname用來指名soname 為limylib.so.1<br />
library會被輸出成libmylib.so.1.0.0 (也就是real name)<br />
<br />
若不指定soname 的話,在編譯結連後的執行檔會以連時的library檔名為soname,並載入他。否則是載入soname指定的library檔案。可以利用objdump 來看library 的soname。<br />
<br />
<span style="color: red;">$ objdump -p libmylib.so | grep SONAME</span></div>
<div>
<span style="color: lime;">SONAME libmylib.so.1</span><br />
<br />
若不指名-soname參數的話,則library不會有這個欄位資料。在編譯後再用ln 來建立soname 與linker name 兩個檔案。<br />
<br />
<span style="color: red;">$ ln -s libmylib.so.1.0.0 libmylib.so</span></div>
<div>
<span style="color: red;">$ ln -s libmylib.so.1.0.0 libmylib.so.1</span><br />
<br />
<span style="font-size: large;">2.2 使用</span><br />
與使用static library 同。<br />
<br />
<span style="color: red;">$ gcc main.c libmylib.so</span><br />
<br />
以上直接指定與libmylib.so 連結。或用<br />
<br /></div>
<div>
<span style="color: red;">$ gcc main.c -L. -lmylib</span><br />
<br />
linker會搜尋libmylib.so 來進行連結。如果目錄下同時有static與shared library的話,會以shared為主。使用-static 參數可以避免使用shared連結。<br />
<br />
<span style="color: red;">$ gcc main.c -static -L. -lmylib</span><br />
<br />
此時可以用ldd 看編譯出的執行檔與shared程式庫的相依性<br />
<br />
<span style="color: red;">$ldd a.out</span><br />
<br />
<span style="color: lime;">linux-gate.so.1 => (0xffffe000)</span><br />
<span style="color: lime;">libmylib.so.1 => not found</span><br />
<span style="color: lime;">libc.so.6 => /lib/libc.so.6 (0xb7dd6000)</span><br />
<span style="color: lime;">/lib/ld-linux.so.2 (0xb7f07000)</span><br />
<br />
輸出結果顯示出該執行檔需要libmylib.so.1 這個shared library。會顯示not found 因為沒指定該library所在的目錄,所找不到該library。因為編譯時有指定-soname參數為libmylib.so.1 的關係,所以該執行檔會載入libmylib.so.1。否則以libmylib.so連結,執行檔則會變成要求載入libmylib.so<br />
<br />
<span style="color: red;">$ ./a.out</span><br />
<br />
<span style="color: lime;">./a.out: error while loading shared libraries: libmylib.so.1</span><br />
<span style="color: lime;">cannot open shared object file: No such file or directory</span><br />
<br />
因為找不到libmylib.so.1 所以無法執行程式。有幾個方式可以處理。<br />
a. 把libmylib.so.1 安裝到系統的library目錄,如/usr/lib下<br />
b. 設定/etc/ld.so.conf ,加入一個新的library搜尋目錄,並執行ldconfig更新快取<br />
c. 設定LD_LIBRARY_PATH 環境變數來搜尋library<br />
<br />
這個例子是加入目前的目錄來搜尋要載作的library<br />
<br />
<span style="color: red;">$ LD_LIBRARY_PATH=. ./a.out</span><br />
<span style="color: lime;">Hello world.</span><br />
<br />
<br />
<span style="font-size: x-large;">3. Dynamically loaded libraries</span><br />
Dynamicaaly loaded libraries 才是像windows 所用的DLL ,在使用到時才載入,編譯連結時不需要相關的library。動態載入庫常被用於像plug-ins的應用。<br />
<br />
<span style="font-size: large;">3.1 使用方式</span><br />
動態載入是透過一套dl function來處理。<br />
<br />
#include <dlfcn .h=""><br /></dlfcn></div>
<div>
void *dlopen(const char *filename, int flag);<br />
開啟載入filename 指定的library。<br />
<br />
void *dlsym(void *handle, const char *symbol);<br />
取得symbol 指定的symbol name在library被載入的記憶體位址。<br />
<br />
int dlclose(void *handle);<br />
關閉dlopen開啟的handle。<br />
<br />
char *dlerror(void);<br />
傳回最近所發生的錯誤訊息。<br />
<br />
<span style="color: orange;">____ dltest.c ____</span><br />
<span style="color: orange;">#include <stdio .h=""><br />#include <stdlib .h=""><br />#include <dlfcn .h=""><br /><br />int main() {<br /> void *handle;<br /> void (*f)();<br /> char *error;<br /><br /> /* 開啟之前所撰寫的libmylib.so 程式庫*/<br /> handle = dlopen(“./libmylib.so”, RTLD_LAZY);<br /> if( !handle ) {<br /> fputs( dlerror(), stderr);<br /> exit(1);<br /> }<br /><br /> /* 取得hello function 的address */<br /> f = dlsym(handle, “hello”);<br /> if(( error=dlerror())!=NULL) {<br /> fputs(error, stderr);<br /> exit(1);<br /> }</dlfcn></stdlib></stdio></span></div>
<div>
<span style="color: orange;"> /* 呼叫該function */</span><br />
<span style="color: orange;"> f();</span><br />
<span style="color: orange;"> dlclose(handle);</span><br />
<span style="color: orange;">}</span><br />
<br />
編譯時要加上-ldl 參數來與dl library 連結<br />
<br />
<span style="color: red;">$ gcc dltest.c -ldl</span><br />
<br />
結果會印出Hello 字串<br />
<br />
<span style="color: red;">$ ./a.out</span><br />
<br />
<span style="color: lime;">Hello</span><br />
<br />
關於dl的詳細內容請參閱man dlopen<br />
<br />
—<br />
參考資料:<br />
Creating a shared and static library with the gnu compiler [gcc]<br />
<a href="http://www.adp-gmbh.ch/cpp/gcc/create_lib.html">http://www.adp-gmbh.ch/cpp/gcc/create_lib.html</a><br />
Program Library HOWTO<br />
<a href="http://tldp.org/HOWTO/Program-Library-HOWTO/index.html">http://tldp.org/HOWTO/Program-Library-HOWTO/index.html</a><br />
APress – Definitive Guide to GCC</div>
Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-57508863424455408252014-10-08T18:58:00.000-07:002014-10-08T18:58:25.210-07:00在ubuntu上,如何設定開機自動執行一些script1. 針對個別使用者:請將指令加到 ~/.bashrc<br />
通常是將一些變數設定在此,讓terminal開啟時有一些環境變數可以用。<br />
如:<br />
export PATH=$JAVA_HOME/bin:$PATH<br />
<br />
2. 針對系統開機時自動執行:請將指令加到 /etc/rc.local<br />
此檔案本身就有範例。<br />
<br />Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-61449412286128025762014-07-28T23:15:00.000-07:002014-07-28T23:15:00.742-07:00Android NDK setup in Eclipse.網路上已經有<a href="https://www.google.com.tw/search?q=eclipse+ndk&qscrl=1" target="_blank">太多文章</a>教大家如何設定Eclipse裏面的NDK環境。<br />
<br />
但是常常會發生一個狀況就是在Eclipse裏面找不到可以設定NDK路徑的地方。<br />
<br />
<b>本文即教大家如何讓NDK的選項出現,好設定NDK路徑。</b><br />
<br />
網路上大家都說要在Eclipse \ Windows \ Preference \Android \ NDK 中設定路徑,但就是不知道什麼原因沒有出現上述的畫面,如下圖。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-bLbDtiRz-0U/U9c6mQj2WXI/AAAAAAAAFyE/az6CVR9gHuY/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-bLbDtiRz-0U/U9c6mQj2WXI/AAAAAAAAFyE/az6CVR9gHuY/s1600/1.png" height="327" width="400" /></a></div>
<br />
解決方式如下:<br />
第一種 > 網路直接安裝:<br />
1. 開啟 Eclipse \ Help \ Install New Software.<br />
2. 在work with中設定<br />
<br />
<pre class="prettyprint" style="background-color: #f7f7f7; border: 1px solid rgb(221, 221, 221); color: #006600; font-size: 13px; line-height: 19px; margin-bottom: 5px; margin-top: 5px; overflow: auto; padding: 1em;"><span class="pln" style="color: black;">https</span><span class="pun" style="color: #666600;">:</span><span class="com">//dl-ssl.google.com/android/eclipse/</span></pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-H2IeB60rHDw/U9c6mSDi0mI/AAAAAAAAFyE/REFUgicVhAc/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-H2IeB60rHDw/U9c6mSDi0mI/AAAAAAAAFyE/REFUgicVhAc/s1600/3.png" height="235" width="400" /></a></div>
<br />
3. 然後再按下旁邊的add,之後下方會出現一個可安裝的軟體列表。<br />
4. 選擇所有軟體之後,進行下一步,逐步安裝。<br />
5. 安裝完成之後,重新啟動Eclipse即可看見NDK選項。<br />
<br />
第二種 > 下載到本機後安裝:<br />
此種方法是上述的作法無法順利完成,可以採用第2種方法。<br />
1. 先下載<a href="http://developer.android.com/sdk/installing/installing-adt.html" target="_blank">ADT</a>到本機端。(下載後不需解壓縮)<br />
2. 一樣開啟 Eclipse \ Help \ Install New Software.<br />
3. 在work with中,先點選Add,會出現一個對話框。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-NFNEuQJmCXQ/U9c6nCnwSNI/AAAAAAAAFyE/qcC8fu6J-fo/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-NFNEuQJmCXQ/U9c6nCnwSNI/AAAAAAAAFyE/qcC8fu6J-fo/s1600/4.png" height="131" width="400" /></a></div>
<br />
4. 在對話框的Name裏面可以隨意填,只要自己認得即可。<br />
5. 在對話框的Location選擇旁邊的Archive,然後選到第1步驟下載的檔案。<br />
6. 接下來的步驟跟第一種方法的4, 5步驟相同。<br />
<br />
完成之後,如同下圖。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-6UNQNHG91bM/U9c6mf6oWMI/AAAAAAAAFyE/hDsdAxOHe4Q/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-6UNQNHG91bM/U9c6mf6oWMI/AAAAAAAAFyE/hDsdAxOHe4Q/s1600/2.png" height="223" width="400" /></a></div>
<br />
<br />Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-23015993236772632362014-03-19T00:56:00.000-07:002014-03-19T00:56:50.530-07:00adb device 無法發現裝置前一陣子突然間手上的android device無法被ubuntu認識。<br />
下了adb device指令一直沒有出現device裝置。<br />
<br />
查了好幾個地方都沒有問題。<br />
查看 /etc/udev/rules.d/99-android.rules也都正確。(<a href="http://astone-working.blogspot.tw/2012/09/adb-devices-no-permissions.html" target="_blank">參考資料</a>)<br />
<br />
最後同事教了一招。<br />
在home目錄下有一個 .android 的目錄<br />
裏面會有一個 adb_usb.ini 檔,請將 device 的 usb vendor id 加到此檔最後一行即可。<br />
如何查詢device usb vendor id 請參考<a href="http://astone-working.blogspot.tw/2012/09/adb-devices-no-permissions.html" target="_blank">連結</a>。<br />
<br />
<br />
最後檔案會如下範例:<br />
$ <b>cat .android/adb_usb.ini </b><br />
<span style="color: orange;"># ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.</span><br />
<span style="color: orange;"># USE 'android update adb' TO GENERATE.</span><br />
<span style="color: orange;"># 1 USB VENDOR ID PER LINE.</span><br />
<span style="color: orange;"><b>0x0110</b></span><br />
<div>
<br /></div>
<div>
其中,0x0110就是查出來的usb vendor id.</div>
<div>
<br /></div>
<div>
重新啟動adb一次就可以了。</div>
<div>
$ adb kill-server</div>
<div>
$ adb devices</div>
<div>
<br /></div>
<div>
<br /></div>
Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-63813010213560488292014-02-16T19:47:00.000-08:002014-02-16T19:47:17.366-08:00在 ubuntu裡安裝sun java<br />
<ol>
<li>下載JDK</li>
<ol>
<li>首先下載官方的JDK. 官方網站有許多的選項,其中JDK是指Java Development Kit,如果你是開發人員,應該選擇這個。另外JRE是指Java Runtime Environment。</li>
<li>官方下載網站:<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">http://www.oracle.com/technetwork/java/javase/downloads/index.html</a></li>
<li>接下來要選擇Java版本,Java分為許多版本,其中Java SE是指Standard Edition,選擇好一個版本之後,按下download,會連到更詳細的連結,這時請選擇你的OS平台,其中還分成rpm跟non-rpm,因為ubuntu不支援rpm安裝方式,所以請選擇non-rpm的版本下載。</li>
<li>以下假設下載的檔明為jdk6.bin</li>
<li>請先將此檔案改成可執行的權限</li>
<li>chmod a+x jdk6.bin</li>
<li>直接執行它即可得到一個解壓縮的路徑</li>
<li>./jdk6.bin</li>
<li><br /></li>
</ol>
<li>安裝JDK</li>
<li>設定路徑</li>
<li><ol>
<li>export JAVA_HOME=/usr/java/jdk1.7.0 </li>
</ol>
</li>
<li>export PATH=$JAVA_HOME/bin:$PATH </li>
<li>export CLASSPATH=.:$JAVA_HOME/lib </li>
<li></li>
</ol>
Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-35120456275147298992014-02-13T01:28:00.000-08:002014-02-13T01:28:21.826-08:00如何在eclipse下build有system權限的apk<br />
以下為各位介紹如何在eclipse下build有system權限的apk. 並相關會遇到的問題。<br />
<br />
當我們要寫一支system permission的apk時,需要在AndroidManifast.xml加入下面文字:<br />
<span style="color: orange;"> android:sharedUserId="android.uid.system"</span><br />
<span style="color: orange;"> < uses-permission android:name="android.permission.REBOOT" / ></span><br />
<span style="color: orange;"> < uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" / ></span><br />
.....<br />
然而,加入之後,會有一些狀況,描述如下:<br />
<br />
<br />
<u><b>1. eclipse build error:</b></u><br />
在eclipse的perference中,有一些android的相關設定。<br />
在Android\Lint Error Checking\ProtectedPermissions預設是error等級(詳如下圖),也就是說當eclipse檢查到某些被定義成system權限的字串時,會提示user error訊息。<br />
這樣的機制導致於無法build這個apk.<br />
如:< uses-permission android:name="android.permission.REBOOT" / > 就被判定為 error 等級<br />
<br />
解決方式:<br />
到preference中將ProtectedPermissions設成warning即可通過eclipse檢查。也可build出具system權限的apk.<br />
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEiO1kLp3-p3R-StDpvqUSLZ0VthBmRGFMVh2n6ZgiY1CqrnKo9m62CQD0QsT_5RZ0VMmSWCucQbtx-pJbPz7KBU0nJthvTh8-sRCduqNyXgnYfTpjgIVr_3S8Dp4yKpsVWSQVgbvRnTA/s1600/Eclipse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEiO1kLp3-p3R-StDpvqUSLZ0VthBmRGFMVh2n6ZgiY1CqrnKo9m62CQD0QsT_5RZ0VMmSWCucQbtx-pJbPz7KBU0nJthvTh8-sRCduqNyXgnYfTpjgIVr_3S8Dp4yKpsVWSQVgbvRnTA/s320/Eclipse.png" height="176" width="320" /></a></div>
<div>
<br /></div>
<div>
<b><u>2. adb install:</u></b></div>
<div>
雖然#1經過修改eclipse裡面的設定可以避開檢查,成功build出apk。</div>
<div>
但是adb install會因權限呼叫PackageManager檢查signature。結果會出現沒有signatures.</div>
<div>
<br /></div>
<div>
adb logcat如下:</div>
<div>
<span style="color: #76a5af;">E/PackageManager( 176): Package com.test.android.testreboot has no signatures that match those in shared user android.uid.system; ignoring!</span></div>
<div>
adb install回應如下:</div>
<div>
<span style="color: #76a5af;">Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE</span></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b><u>3. adb push:</u></b></div>
<div>
既然adb install不成功,那改用adb push.</div>
<div>
adb push雖然不會因權限檢查signature,但是android執行時會因權限檢查signatures,導致於下列error.</div>
<div>
adb logcat如下:</div>
<div>
<span style="color: #76a5af;">E/PackageManager( 176): Package </span><span style="color: #76a5af;">com.test.android.testreboot</span><span style="color: #76a5af;"> has no signatures that match those in shared user android.uid.system; ignoring!</span></div>
<div>
<br /></div>
<div>
<b><u>#2跟#3的解決方式:</u></b></div>
<div>
用相對應的platform key去sign過即可解決問題。</div>
<div>
Sign key語法如下:</div>
<div>
<span style="color: orange;">java -jar signapk.jar [pem certificate file of platform] [pk8 certificate file of platform] [origin.apk] [target.pak]</span></div>
<div>
example:</div>
<div>
<span style="color: orange;">java -jar signapk.jar platform.x509.pem platform.pk8 origin.apk target.pak</span></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
其他資訊#1:</div>
<div>
如果沒有加上</div>
<div>
android:sharedUserId="android.uid.system",</div>
<div>
只有加</div>
<div>
<uses-permission android:name="android.permission.REBOOT"></uses-permission></div>
<div>
是可以build出apk,也可以用adb install方式安裝,但是runtime會出現下列錯誤訊息:</div>
<div>
<br /></div>
<div>
adb logcat如下:</div>
<div>
<span style="color: #76a5af;">E/AndroidRuntime( 1131): java.lang.SecurityException: Neither user 10048 nor current process has android.permission.REBOOT.</span></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
其他資訊#2:</div>
<div>
eclipse的權限檢查不是檢查</div>
<div>
android:sharedUserId="android.uid.system"</div>
<div>
而是檢查</div>
<div>
< uses-permission android:name="android.permission.REBOOT" / ></div>
<div>
< uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" / ></div>
<div>
導致上述問題的,應該還有其他項目,目前沒有找到哪裡有詳細列出檢查的項目。</div>
<div>
<br /></div>
<div>
<br /></div>
</div>
Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-5796883650964189662014-02-09T22:21:00.000-08:002014-07-08T18:41:55.037-07:00How to contribute code to AOSP1. You need a google account. Click <a href="https://accounts.google.com/SignUp?" target="_blank">here</a> to register a new one.<br />
2. Setup your environment.<br />
3. Download Android source code from AOSP.<br />
3.1. #repo init -u<br />
4. Modify file.<br />
5. Commit in your local.<br />
6. push code to AOSP.Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-36928791440180868112013-12-19T00:24:00.001-08:002013-12-19T00:24:57.428-08:00Eclipse cannot load SWT librariesAfter installed eclipse in ubuntu 12.04. you may meet the following problem.<div>
<h1 itemprop="name" style="border: 0px; font-family: 'Trebuchet MS', 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 23px; line-height: 1.3; margin: 0px 0px 7px; padding: 0px; vertical-align: baseline;">
<span style="background-color: orange;">Eclipse cannot load SWT libraries</span></h1>
</div>
<div>
<div>
<span style="color: orange;">The log looks like belows.</span></div>
<div>
<span style="color: orange;"> 11 java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:</span></div>
<div>
<span style="color: orange;"> 12 no swt-gtk-3740 in java.library.path</span></div>
<div>
<span style="color: orange;"> 13 no swt-gtk in java.library.path</span></div>
<div>
<span style="color: orange;"> 14 Can't load library: ~/.swt/lib/linux/x86_64/libswt-gtk-3740.so</span></div>
<div>
<span style="color: orange;"> 15 Can't load library: ~/.swt/lib/linux/x86_64/libswt-gtk.so</span></div>
</div>
<div>
<br /></div>
<div>
The solution is: </div>
<div>
<span style="color: red; font-size: large;">echo "-Djava.library.path=/usr/lib/jni/" >> /etc/eclipse.ini</span></div>
<div>
<br /></div>
<div>
refer from: <a href="http://stackoverflow.com/questions/10165693/eclipse-cannot-load-swt-libraries">http://stackoverflow.com/questions/10165693/eclipse-cannot-load-swt-libraries</a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-53445267114277132362013-07-18T23:37:00.000-07:002013-07-18T23:39:11.202-07:00git revert without change-idWe can use git revert to revert a commit. But if you need a change-id, you will find git revert won't invoke commit-msg hooks. And you won't get a change-id for this commit.<br />
Here is a workaround.<br />
<br />
<span style="color: red;">git revert -n </span><span style="color: red;"><</span><span style="color: red;"><commit-id</span><span style="color: red;">></span><span style="color: red;">></span><br />
<span style="color: red;">git commit</span><br />
<br />
refer to <a href="https://www.kernel.org/pub/software/scm/git/docs/git-revert.html" target="_blank">git-revert</a>,<br />
<span style="color: #f3f3f3; font-family: serif;">-n</span><br />
<span style="color: #f3f3f3; font-family: serif;">--no-commit</span><br />
<dd style="font-family: serif;"><div style="margin-bottom: 0.5em; margin-top: 0.1em;">
Usually the command automatically creates some commits with commit log messages stating which commits were reverted. This flag applies the changes necessary to revert the named commits to your working tree and the index, but does not make the commits. In addition, when this option is used, your index does not have to match the HEAD commit. The revert is done against the beginning state of your index.</div>
<div class="paragraph">
<div style="margin-bottom: 0.5em; margin-top: 0.5em;">
This is useful when reverting more than one commits' effect to your index in a row.</div>
</div>
</dd>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-51895582222543149802013-07-15T00:50:00.001-07:002013-07-15T00:50:25.641-07:00how to add an existing git repo. to gerrit project.1. Create new project in gerrit. command as below.<br />
<span style="color: red;">ssh -p 29418 </span><span style="color: cyan;">user</span><span style="color: red;">@</span><span style="color: cyan;">gerrit.server</span><span style="color: red;"> gerrit create-project --name </span><span style="color: cyan;">gerrit_project_name</span><br />
<br />
2. Push existing git repo. to gerrit server as below.<br />
<span style="color: red;">git push ssh://</span><span style="color: cyan;">user</span><span style="color: red;">@</span><span style="color: cyan;">gerrit.server</span><span style="color: red;">:29418/</span><span style="color: cyan;">gerrit_project_name</span><span style="color: red;"> HEAD:refs/heads/master</span>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-35010576839632214832013-05-09T20:22:00.000-07:002013-05-09T20:22:52.969-07:00如何開啟 windows telnet server (for windows 7)<br />
<ol>
<li>Click on Start / Control Panel / Program Features / Turn Windows Features on or off.</li>
<li>Check "Telnet Server" and "Telnet Client" on. (as below picture)</li>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvHHX-SjX_IldT7FZqGir1Z-k-Q_88Cyrl1AKcAwR2AqoYVMQvOso0wceHVI8jN_7zabPs033lp1s2HTXwbWjKAx-DjmiIbz2zqobwkBnRpc1OXcluum2wFKuAssvzyf28EOB8gCzrEWw/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvHHX-SjX_IldT7FZqGir1Z-k-Q_88Cyrl1AKcAwR2AqoYVMQvOso0wceHVI8jN_7zabPs033lp1s2HTXwbWjKAx-DjmiIbz2zqobwkBnRpc1OXcluum2wFKuAssvzyf28EOB8gCzrEWw/s1600/1.png" /></a></div>
<br />
You still can NOT telnet to your server until now. just because you will get the following error.<br />
<b><span style="color: yellow;">Access Denied: Specified user is not a member of TelnetClients group.<br />Server administrator must add this user to the above group.<br />Telnet Server has closed the connection</span></b><br />
<b><br /></b>
Please follow the steps to solve the problem.<br />
<ol></ol>
<ol>
<li>Open the Local Users and Groups snap-in. In the <b>Start Search box</b>, type <b>mmc lusrmgr.msc</b>.</li>
<li>In the navigation pane, click <b>Groups</b>.</li>
<li>In the details pane, right-click <b>TelnetClients</b>, and then click <b>Properties</b>.</li>
<li>In the TelnetClient Properties dialog box, click <b>Add</b>.</li>
<li>select user who you allows to telnet to your windows7.</li>
</ol>
<ol>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjfyrOytRL4t5uxk-FdavjRVWqNR0mnou1dSy8d6Y2mnd33oLy1lrM7lqylZkKLfb1RvBeTkTeYYxKNxkiCEwMQM-DCkwambJ2ir0_Y2KXyeumvM3RDPBclEw3JZOtpRhsgtSTiTFqUvE/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjfyrOytRL4t5uxk-FdavjRVWqNR0mnou1dSy8d6Y2mnd33oLy1lrM7lqylZkKLfb1RvBeTkTeYYxKNxkiCEwMQM-DCkwambJ2ir0_Y2KXyeumvM3RDPBclEw3JZOtpRhsgtSTiTFqUvE/s1600/1.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
and then enjoy your telnet in win7.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-23463938173887549282013-01-14T19:46:00.001-08:002013-01-14T19:47:25.905-08:00MVP in Android一個簡單的介紹有關android如何實作MVP pattern.<br />
<a href="http://magenic.com/Blog/AnMVPPatternforAndroid.aspx" target="_blank">An MVP Pattern for Android</a><br />
<br />
實際範例,可以下載回來自己測試,了解MVP架構。(其中包含了 unit test 的使用)<br />
<a href="https://code.google.com/p/mvp-hello-world/" target="_blank">mvp-hello-world</a><br />
<br />
<br />Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-21146053007303365082012-09-25T03:17:00.001-07:002012-09-25T03:17:54.168-07:00adb devices no permissions 的解決方法使用adb devices 出现如下:<br />
<b>List of devices attached</b><br />
<b>???????????? no permissions</b><br />
<br />
解决方法:<br />
1. 找出usb vid,pid<br />
$ <b><span style="background-color: yellow;"><span style="color: #444444;">lsusb</span></span> #</b><b>列出usb device內容</b><br />
Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub<br />
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub<br />
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub<br />
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub<br />
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub<br />
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub<br />
Bus 003 Device 003: ID 192f:0916 Avago Technologies, Pte.<br />
Bus 003 Device 002: ID 0e8f:0022 GreenAsia Inc.<br />
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub<br />
Bus 002 Device 005: ID 18d1:4e26<br />
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub<br />
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub<br />
<br />
只要插入usb device查乙次,拔出usb device查詢一次,比較差異就可以知道我們要的usb device是哪一個。<br />
如:<br />
Bus 003 Device 002: ID 0e8f:0022 GreenAsia Inc.<br />
其中的0e8f就是vid,0022就是pid.<br />
<br />
2. 編輯權限<br />
$ <b style="background-color: yellow;"><span style="color: #444444;">sudo vim /etc/udev/rules.d/70-android.rules</span></b><br />
加入以下內容<br />
<span style="background-color: red;">SUBSYSTEM=="usb", ATTRS{idVendor}=="<b>0e8f</b>", ATTRS{idProduct}=="<b>0022</b>",MODE="0666" </span><br />
<br />
3. 重新啟動 udev service<br />
$ <span style="background-color: yellow;"><span style="color: #444444;"><b>sudo chmod a+rx /etc/udev/rules.d/70-android.rules</b> </span></span><br />
$ <span style="background-color: yellow;"><span style="color: #444444;"><b>sudo service udev restart</b> </span></span><br />
<br />
4. 重新啟動 adb<br />
$ <b style="background-color: yellow;"><span style="color: #444444;">sudo ./adb kill-server </span></b><br />
$<b style="background-color: yellow;"> <span style="color: #444444;">./adb devices</span></b><br />
<span style="background-color: yellow;"><br /></span>
完成Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-78977342607934472152012-09-18T20:16:00.000-07:002014-10-05T19:25:55.704-07:00UML中的關聯<br />
class之間的關係有以下幾種<br />
<b><span style="font-size: large;">1. Association / 關聯 / knows a</span></b><br />
X知道Y的存在<br />
X可能以pointer(指標)或reference(參考)知道Y的存在<br />
在概念模型階段方向性(箭頭)通常不太有意義可以省略<br />
<br />
<b><span style="font-size: large;">2. Dependency / 相依 / use a</span></b><br />
A dependency exists between two elements if changes to the definition of one element (the supplier) may cause changes to the other (the client).<br />
X相依Y<br />
Y若改變 X可能會受到影響 但X的改變不會影響到Y<br />
X可能有某個function可以call Y的function<br />
舉個例子:<br />
有一個 class Circle,提供 drawCircle 的功能,然 drawCircle 內部是使用 java 的 graphic 來實作繪圖。則我們可以說:Circle use a graphic. 也就是 Circle 相依於 graphic.<br />
<br />
<b><span style="font-size: large;">3. Composition / 組合 / has a</span></b><br />
car 組合 wheel<br />
Composition是一種整體完全擁有部分<br />
如車子(car)擁有4個輪子(wheel)<br />
當車子(car)消滅時4個輪子(wheel)同時也會消滅<br />
<br />
<b><span style="font-size: large;">4. Aggregation / 聚合</span></b><br />
car 聚合 passenger<br />
Aggregation是一種"擁有性"比較弱的關係<br />
如:<br />
車子(car)裡面有4個人(passenger)<br />
當車子(car)消滅時4個人(passenger)不會消滅<br />
<br />
<tb><b>
Composition跟Aggregation在意義的差異在於:</b><br />
Composition是『同生共死』,當System物件死亡時,Component物件也要跟著死亡。Aggregation是『生死有命』,當System物件死亡時,Component物件並不特別去處理。<br />
在C#、Java這類有garbage collection的語言,composition幾乎不會用到,但在C++,只要用到pointer,就得自己去delete,所以在composition對於C++就很重要。
</tb><br />
<table><tbody>
<tr></tr>
</tbody></table>
<br />
再舉個例子,(from <a href="http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming)#Aggregation" target="_blank">wiki</a>)<br />
a university owns various departments (e.g., chemistry), and each department has a number of professors. If the university closes, the departments will no longer exist, but the professors in those departments will continue to exist. Therefore, a University can be seen as a composition of departments, whereas departments have an aggregation of professors. <b>In addition, a Professor could work in more than one department, but a department could not be part of more than one university.</b><br />
<br />
<b><span style="font-size: large;">5. Inheritance / 繼承 (UML以繼承表示泛型關係)</span></b><br />
X繼承Z,Y繼承Z,此時Z和X,Y之間就存在著泛型關係。<br />
Z是共同化(抽象化),X/Y則是特性化(具體化)<br />
如:<br />
BMW / Benz 繼承Car,則Car和BMW / Benx就存在泛型關係<br />
<div>
<br /></div>
<img src="https://lh3.googleusercontent.com/-sMa7PsA0WX4/UFk3KkyPZbI/AAAAAAAACt8/AlVn_WZNm9U/s800/1.jpg" />Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-49577126384097822952012-05-01T23:26:00.002-07:002012-05-01T23:26:25.999-07:00在Linux下使用兩張網卡的設定在一些場合,需要讓同一台電腦,用兩張不同的網卡,來做不同的事情,今天要說的就是這個。最常應用的狀況就是:一個網卡用於對內網路,一個網卡用於對外網路。<br />
<div>
<br /></div>
<div>
設定如下:</div>
<div>
一般我們現在用的NB通常會有ethernet介面跟wifi介面,我們假設要用wifi連上internet(前題是wifi 熱點已經可以上網),用ethernet連私有網路。</div>
<div>
<br /></div>
<div>
<b>wifi設定應該如下:</b></div>
<div>
<b><span style="color: red;">wlan_IP: 192.168.0.X</span></b></div>
<div>
<b><span style="color: red;">Submask: 255.255.255.0</span></b></div>
<div>
<b>以上資料由熱點的DHCP提供。</b></div>
<div>
<br />
ethernat設定如下:</div>
<div>
<b><span style="color: red;">eth0_IP: 172.16.0.X</span></b></div>
<div>
<b><span style="color: red;">Submask: 255.255.255.0</span></b></div>
<div>
<div>
<b>以上資料由內部的DHCP提供。</b></div>
</div>
<div>
<br /></div>
<div>
我們要做的事:</div>
<div>
<u><b>1. 先查出這兩張網卡的gateway.</b></u></div>
<div>
我的方式比較簡單,只要停用其中一個網卡,利用 route -n 即可知道。如:</div>
<div>
Destination = 0.0.0.0 的那一行就是default gateway.</div>
<img src="https://lh3.googleusercontent.com/-oEGIBM6XWHM/T6DSxPoWx5I/AAAAAAAACqQ/UNaJ4mtlbaM/s800/1.png" />
<br />
<div>
我們可以用這個方式查出兩個gateway的IP.</div>
<div>
<br /></div>
<div>
<u><b>2. 查出 route的設定</b></u></div>
<div>
完成之後,將兩張網卡都啟動,再次執行route -n,察看目前預設的route狀況</div>
<div>
<br /></div>
<div>
<u><b>3. 修改route成我們要的方式</b></u></div>
<div>
因為 linux環境中只能有一個 default gateway,所以我們可以先用下列指令新增default gateway.</div>
<div>
<span style="color: yellow;">sudo route add default gw {default_gateway_ip1}</span></div>
<div>
用下列指令將不要的default gateway 移除</div>
<div>
<div>
<span style="color: yellow;">sudo route delate default gw {default_gateway_ip2}</span></div>
</div>
<div>
但是這樣做只是將大家的default gateway換掉,並沒有做到分開。</div>
<div>
為了要將內網/外網分開,所以我們要加一條指令,設定封包流動的方法</div>
<div>
<span style="color: yellow;">route add -net 172.16.0.0 netmask 255.255.0.0 gw 172.16.100.1</span></div>
<div>
上面這一條指令的意思就是,只要是要到172.16.*.*的封包,都請傳送到172.16.100.1的gateway。</div>
<div>
其餘的就請透過 default gateway來傳送。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
參考資料</div>
<div>
1. <a href="http://linux.vbird.org/linux_server/0230router.php">鳥哥的Linux私房菜--第八章、路由觀念與路由器設定</a></div>
<div>
2. <a href="http://ithelp.ithome.com.tw/question/10082745">兩張網卡,不能2個gateway嗎?</a></div>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-63649323136437733142012-04-25T23:28:00.000-07:002012-04-25T23:28:42.499-07:00android default luncher 決定流程今天介紹一下Android如何決定使用哪一個luncher的。<br />
我們在market上可以下載很多不同廠商製作的luncher,那當我們的luncher超過一個時,Android如何決定要使用哪一個luncher?<br />
<br />
基本上Android system會先查看有多少luncher被安裝了,如果多於一個時,Android會再查看是否有default的luncher設定,如果有的話,優先使用deault luncher,如果沒有的話,會跳一個視窗讓使用者選擇要使用的luncher,同時也可以選擇將這個luncher設成預設。整個流程如下。<br />
<a href="http://goo.gl/photos/fJg2ABp2jg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://lh4.googleusercontent.com/-eXwQb5D5jb8/T5jlBL4jm8I/AAAAAAAACpk/vCoP3-RZ6cY/s512/launcher2.png" /></a><br />
那如果已經設定一組default的luncher之後,如何變更呢?<br />
只要到 [設定] / [應用程式] / [管理的應用程式] / [全部] 頁面,點選目前預設的luncher,然後點擊 [清除預設值],然後按 [Home] 時即會出現可以選擇luncher的視窗了。Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-80566193839191046952012-04-24T00:12:00.000-07:002012-04-24T00:12:35.061-07:00Linux 環境下如何擷取Android畫面開發Android難免會需要擷取Adnroid的畫面,不管是開發前期,開發中,或是最後製作說明文件。<br />
提供幾個方法可以擷取Android畫面的方式:<br />
1. 最困難,也最簡單的方法:最困難是使用前要安裝一堆環境,但是最後最容易使用。本方法適用於一般app的開發者。<br />
<span style="color: red;">就是透過eclipse裏面的ddms直接擷取畫面。</span><br />
2. 有點簡單的方法:<br />
如果你已經有build好的Android source tree的話,<span style="color: red;">在out/host/linux-x86/bin目錄下執行 ./ddms</span>會呼叫ddms的UI介面,然後選擇Menu中的device -> capture screen 就可以了。<br />
3. 最簡單的方式:<br />
這跟#2一樣,適用於已經有build好的Android source tree的使用者,<span style="color: red;">直接到out/host/linux-x86/bin目錄下執行 ./screenshot2 -d {要存的檔名}</span>即可。Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-84947832591743239232012-04-23T23:51:00.000-07:002013-01-14T21:34:46.440-08:00ANDROID_SWT問題<br />
在Linux環境下執行ddms時有時候會出現<br />
<span style="color: red;">SWT folder '/XXXX/android/out/host/linux-x86/framework/x86' does not exist.</span><br />
<span style="color: red;">Please export ANDROID_SWT to point to the folder containing swt.jar for your platform.</span><br />
這是因為swt.jar找不到。<br />
<br />
很簡單的方法可以解決:<br />
<span style="color: orange;">先用 locate swt.jar 找到哪裡有swt.jar.</span><br />
<span style="color: orange;">然後直接 export ANDROID_SWT={找到的路徑}</span><br />
就可以正常使用了。<br />
Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-74208611842978371402012-01-11T00:20:00.000-08:002012-01-11T00:20:46.839-08:00file compare tool in lunix今天跟大家介紹在ubuntu下如何做檔案比對。<br />
在windows下我們很容易找到一些如windiff, winmerge等等之類的軟體,同樣在ubuntu環境下也有一些軟體工具可以做同樣的事。<br />
<br />
<span style="color: yellow;">1. KDiff3</span><br />
home: http://kdiff3.sourceforge.net/<br />
command: sudo apt-get install kdiff3<br />
優點:○目錄比對<br />
缺點:×即時編輯<br />
<br />
<span style="color: yellow;">2. Diffuse</span><br />
home: http://diffuse.sourceforge.net/<br />
command: sudo apt-get install kdiff3<br />
優點:○即時編輯<br />
缺點:×目錄比對<br />
<br />
<span style="color: yellow;">3. Kompare</span><br />
home: http://www.caffeinated.me.uk/kompare/<br />
command: sudo apt-get install kdiff3<br />
優點:○目錄比對<br />
缺點:×即時編輯<br />
<br />
~~~附加一提~~~<br />
自己試了一下上面提到的軟體都沒有提供:滑鼠右鍵選取兩個檔案,直接進入比對視窗。<br />
但是透過修改設定就可以達到功能要求。<br />
1. change context menu for diffuse<br />
sudo vim /usr/share/applications/diffuse.desktop<br />
=====修改以下內容=====<br />
Exec=diffuse %F %F<br />
====================<br />
<br />
2. change context menu for kdiff3<br />
sudo vim ~/.local/share/applications/userapp-kdiff3-DHDL7V.desktop<br />
=====修改以下內容=====<br />
Exec='/usr/bin/kdiff3' %f %f<br />
====================<br />
<br />
3. change context menu for kompare<br />
sudo vim /usr/share/applications/kde4/kompare.desktop<br />
=====修改以下內容=====<br />
# Exec=kompare -caption "%c" -o %U<br />
Exec=kompare %f %f<br />
====================<br />
<br />
<br />
當然,如果你不想安裝任何軟體,也是有一些網站提供基本的檔案比對服務。<br />
1. comparemyfile<br />
home:http://www.comparemyfiles.com/<br />
<br />
最後,也提供一個最新的參考連結。<br />
http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools<br />
<div><br />
</div><br />
<div><div></div></div>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-54833180658885153382011-12-29T02:30:00.000-08:002011-12-29T02:30:25.714-08:00如何設定android開發環境這裡來介紹一下如何設定android的開發環境。<br />
我們分為幾個階段:<br />
1. linux基本環境設定<br />
2. android apk 開發環境設定<br />
3. android os 開發環境設定<br />
<br />
首先,<b><span style="font-size: large;">linux環境設定:</span></b><br />
<br />
1. 安裝 ubuntu version 10.04 LTS 64bit (以下是以ubuntu來舉例說明)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>1.1. 設定 eth0.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>1.2. 設定 samba service. (這個是為了方便與windows共享檔案用)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://ithelp.ithome.com.tw/question/10027945</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>1.3. 最好執行 system / administration / update manager 將系統更新到最新.<br />
2. 安裝瀏覽器 google chrome. (也可以用內建的firefox)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>下載位置: https://www.google.com/chrome?hl=zh-TW<br />
3. 安裝 ssh (方便用其他電腦連線進去作業)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://twntwn.info/blog/ajer001/archives/2822</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: orange;">安裝指令: sudo apt-get install ssh</span><br />
4. 安裝中文輸入法 gcin.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://cle.linux.org.tw/trac/wiki/GcinInstallUbuntu</span><br />
<br />
<br />
接下來,<b><span style="font-size: large;">安裝 android apk 開發環境:</span></b><br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://developer.android.com/sdk/requirements.html</span><br />
<br />
1. 安裝 jdk 6 (non-rpm version for ubuntu)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://source.android.com/source/initializing.html</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: orange;">安裝指令: sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"</span><br />
<span style="color: orange;"><span class="Apple-tab-span" style="white-space: pre;"> </span>安裝指令: sudo apt-get update</span><br />
<span style="color: orange;"><span class="Apple-tab-span" style="white-space: pre;"> </span>安裝指令: sudo apt-get install sun-java6-jdk</span><br />
2. 安裝 eclipse<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>下載位置: http://www.eclipse.org/downloads/<br />
3. 安裝 android sdk<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://developer.android.com/sdk/installing.html</span><br />
4. 安裝 android adt from eclipse.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://developer.android.com/sdk/eclipse-adt.html</span><br />
5. 安裝相關 android sdk 元件.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>5.1. 設定 android sdk folder for eclipse.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>5.2. 啟動 android sdk manager and download necessary components.<br />
6. 安裝 android ndk (非必要步驟)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://developer.android.com/sdk/ndk/index.html</span><br />
<br />
<br />
最後,<b><span style="font-size: large;">安裝 android os 開發環境</span></b><br />
<br />
1. 安裝必要元件.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://source.android.com/source/initializing.html </span> (key word: "Installing required packages")<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: orange;">安裝指令: sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc</span><br />
<span style="color: orange;"><span class="Apple-tab-span" style="white-space: pre;"> </span>安裝指令: sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so</span><br />
<span style="color: orange;"><span class="Apple-tab-span" style="white-space: pre;"> </span>安裝指令: sudo apt-get install sharutils //for uudecode</span><br />
<br />
2. 設定 USB Access 權限<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://source.android.com/source/initializing.html</span> (key word: "Configuring USB Access")<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: orange;">安裝指令: sudo vim /etc/udev/rules.d/51-android.rules</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>add following lines:<br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>----------------------------------------------------------</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>SUBSYSTEM=="usb", SYSFS{idVendor}=="vendor id here", MODE="0666"</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>SUBSYSTEM=="usb", SYSFS{idVendor}=="vendor id here", OWNER="user name here" GROUP="group name here"</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>----------------------------------------------------------</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="background-color: red;">!!NOTE: This is known to work on both Ubuntu Hardy Heron (8.04.x LTS) and Lucid Lynx (10.04.x LTS).</span><br />
<br />
3. 設定 ccache (加快 build image 速度)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: lime;">參考資料: http://source.android.com/source/initializing.html</span> (key word: "Setting up ccache")<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: orange;">安裝指令: mkdir ~/data/ccache</span><br />
<span style="color: orange;"><span class="Apple-tab-span" style="white-space: pre;"> </span>安裝指令: vim ~/.bashrc</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>add following lines at end of file:<br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>----------------------------------------------------------</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>export USE_CCACHE=1</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>export CCACHE_DIR=~/data/ccache</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>----------------------------------------------------------</span><br />
<br />
4. 設定開啟檔案最大值<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: orange;">安裝指令: sudo vim /etc/security/limits.conf</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>add following lines at end of file:<br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>----------------------------------------------------------</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>user_name_here - nofile 4096</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>root - nofile 4096</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>----------------------------------------------------------</span><br />
<br />
<br />
<br />
<br />
<b><span style="font-size: large;">其他實用的設定</span></b><br />
1. format history command:<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: orange;">安裝指令: vim ~/.bashrc</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>add following line at end of file:<br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>----------------------------------------------------------</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>export HISTTIMEFORMAT="%F %T "</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>----------------------------------------------------------</span><br />
<br />
2. format vim editor<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><span style="color: orange;">安裝指令: vim ~/.vimrc</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>add following lines<br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>----------------------------------------------------------</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>set hlsearch "高亮度反白</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>set backspace=2 "可隨時用倒退鍵刪除</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>set autoindent "自動縮排</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>set ruler "可顯示最後一行的狀態</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>set showmode "左下角那一行的狀態</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>set nu "可以在每一行的最前面顯示行號啦!</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>set bg=dark "顯示不同的底色色調</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>syntax on "進行語法檢驗,顏色顯示。</span><br />
<span style="color: yellow;"><span class="Apple-tab-span" style="white-space: pre;"> </span>----------------------------------------------------------</span>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-88248608372839859672011-11-18T02:23:00.001-08:002011-11-18T02:23:38.656-08:00android CTS 介紹---cts plan 包含哪些東西1. CTS從大到小包含了<br />
Plan > package > suite > case > method<br />
<br />
<br />
<b>Plan: </b><br />
User can create plan in cts shell. Plan should include packages, suites, cases or methods. Picture below shows the “add plan” command.<br />
<img border="0" src="http://2.bp.blogspot.com/-NQfVsMXWMa4/TsYp_U86dxI/AAAAAAAACnw/8-fe6lFtx9E/s1600/1.PNG" /><br />
<ul><li>Cts test plan comes from [android source tree]/out/host/linux-x86/repository/plans/[xml file]<xml file="" style="text-align: left;">;</xml><br />
</li>
<img border="0" src="http://3.bp.blogspot.com/-Yq0CEYM2wZg/TsYqCM80H6I/AAAAAAAACnw/PeD3nW_o3Wk/s1600/2.PNG" />
<li>User can also create cts plan by adding xml file manually, without cts shell. This means when user types command “ls --plan”, cts shell search xml immediately.</li>
<li>Cts shell will check contents in plan when processing user command, following picture shows the error message for the item.</li>
<img border="0" src="http://2.bp.blogspot.com/-m06ZYM4VEu0/TsYqB_A1EEI/AAAAAAAACnw/kda2BMj5GbI/s1600/3.PNG" /> </ul><b>Package:</b><br />
<ul><li><xml file="">Package comes from [</xml>android source tree]/out/host/linux-x86/repository/plans/*.xml</li>
<img border="0" src="http://2.bp.blogspot.com/-zVGNhtxKQGk/TsYp-iThm8I/AAAAAAAACnw/bVfgFCAKJi0/s1600/4.PNG" />
<li>Each package should responds to one xml and one apk file in <xml file="">[</xml>android source tree]/out/host/linux-x86/repository/testcase/. <span class="Apple-style-span" style="color: red;">(but some package don’t.)</span></li>
<img border="0" src="http://3.bp.blogspot.com/-aAac-yi17iQ/TsYp-ukY0uI/AAAAAAAACnw/yf7x9Sf62QQ/s1600/5.PNG" /> </ul><b>Suite:</b><br />
<ul><li>Following picture shows the xml structure. It show the relationship between suite, TestCase(Case) and Test(Method).</li>
<img border="0" src="http://2.bp.blogspot.com/-B49nvdQFhQg/TsYp-i7_WJI/AAAAAAAACnw/6YVkbsTxnLg/s1600/6.PNG" />
<li>And picture below shows the source code for corresponded class method.</li>
<img border="0" src="http://1.bp.blogspot.com/-Q3NoXkGhQiA/TsYp_A7KEhI/AAAAAAAACnw/n18Tiy1jkAI/s1600/7.PNG" /> </ul><ul><li>We can find Suite in each xml file in <xml file="">[</xml>android source tree]/out/host/linux-x86/repository/testcase/*.xml.</li>
</ul><br />
<b> Case: </b><br />
<ul><li>It corresponds to class name in java file.</li>
<li>Test case is recorded in xml as suite child node. We can find them in source code as a class name.</li>
</ul><br />
<b> Method:</b><br />
<div class="separator" style="clear: both; text-align: center;"></div><ul><li>Method is recorded in xml as TestCase child node. We can find them in source code as a class method.</li>
</ul><div><br />
</div><div><br />
</div>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-83377682354077965302011-11-18T02:23:00.000-08:002011-11-18T02:23:17.606-08:00android CTS 介紹---運作方式需要設備.<br />
<br />
<ul><li>Host side: PC with linux OS or windows OS.</li>
<li>Client side: tablet.</li>
</ul><br />
運作流程.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><ul><li>When cts start on host pc. Host pc will install test apk to tablet via adb.</li>
<li>After installing, tablet will start apk to test. And send result to host pc.</li>
<li>Host pc send adb command to remove apk on tablet.</li>
<li>Host pc gathers result information and generates xml report.</li>
</ul><div class="separator" style="clear: both; text-align: center;"><a href="http://source.android.com/images/cts-0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="284" src="http://source.android.com/images/cts-0.png" width="320" /></a></div>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-1578143116999778732011-10-31T18:10:00.000-07:002011-10-31T18:10:56.304-07:00今早看到一則新聞:<br />
<a href="http://chinese.engadget.com/2011/10/31/kinect-hack-makes-presentation-slides-work-around-you-video/">懂得閃避的文字 -- 用 Kinect 便能解決 Keynote 之「遮蔽問題」</a><br />
<br />
大意是說,日本明治大學利用 Kinect 來解決投影片會投到人身上的問題。其動機是非常好的,不過,就現實生活來講,演講者可以粗略地分成兩種:第一種是只站在演講桌後方,動也不動,這樣的人應該用不到這套技術。第二種人可能像Jobs Steve一樣在投影機前面亂亂跑,這樣的人可能需要這樣的技術。<br />
<br />
所以我們就第二種人來討論,當演講者在投影機前面亂亂跑的時候,投影片上的文字圖案應該也會亂亂跑,我想如果我是聽演講的人,應該很不舒服吧。而且可能會模糊焦點。<br />
如果,就這樣的狀況來探討的話,是否可以對這樣的技術再做一些加強,比如說:<br />
<br />
1. 投影片上的文字、圖案都不需要自動調整,只要不打光在演講者身上就可以了。<br />
2. 前面的作法是不打光在演講者身上,這樣的效果很容易造成演講者光線偏暗。或許我們可以利用Kinect捕捉人影的技術,動態在演講者身上投射微光。讓整場演講的效果更專注在演講者身上。<br />
<br />
也許這樣的投影機會更受消費者歡迎。這樣的技術不難,也許再過一陣子就會有廠商開發出來了喔!Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-51525978432480153712011-10-03T03:20:00.000-07:002011-10-03T03:20:16.106-07:00如何建立android unit test專案前置作業:<br />
1. 先建立要被測試的專案,假設要被測試的專案是com.myCompany.myHello.要被測試的class是MyHelloActivity.<br />
<img src="https://lh4.googleusercontent.com/-6HHY4gVS9_4/TomEAFEijnI/AAAAAAAAClk/vN6zYQ3mpX0/s800/cts_0.png" /><br />
<br />
2. 開始建立unit test project<br />
<br />
步驟:<br />
1. 在Eclipse 裡開新專案, new > project > Android > Android test Project.<br />
<img src="https://lh6.googleusercontent.com/-P2td2ZFjrbk/TomD_nuGCbI/AAAAAAAAClU/sUfN1Uu0kVM/s800/cts_1.PNG" /><br />
<br />
2. 設定值如下說明<br />
2.1. 假設test專案名稱為myTestProject.<br />
2.2. 被測試專案為myHello.<br />
<img src="https://lh5.googleusercontent.com/-x-qsS8fiNtY/TomD_pG1P6I/AAAAAAAAClY/2ckmquJGHg8/s800/cts_2.JPG" /><br />
<br />
3. 完成之後,會在eclipse的package explorer出現一個test專案,如下:<br />
<img src="https://lh4.googleusercontent.com/-6x2o084WHt8/TomEAREFozI/AAAAAAAACls/lJI3Eq_o5bo/s800/cts_3.png" /><br />
<br />
4. 接著新增加一個test case class,如下圖。<br />
為什麼要用ActivityInstrumentationTestCase2,原文解釋:Android offers several, but the one that tests in the most realistic environment is ActivityInstrumentationTestCase2, so you will use it as the base class. Like all activity test case classes, <span class="Apple-style-span" style="color: red;">ActivityInstrumentationTestCase2 offers convenience methods for interacting directly with the UI of the application under test.</span><br />
<img src="https://lh5.googleusercontent.com/-C7THUyyXApM/TomEAarSSeI/AAAAAAAAClo/fs8EjJVIcmw/s800/cts_4.PNG" /><br />
<br />
5. 完成之後eclipse自動generate出一個myTestClass.java檔,請加入<br />
import com.myCompany.MyHelloActivity;<br />
並MyTestClass的建構子,如下:<br />
<script class="brush:html" type="syntaxhighlighter">
<![CDATA[
public MyTestClass() {
super("com.myCompany", MyHelloActivity.class);
}
]]>
</script><br />
這裡的”com.myCompany”指的是package name.,也就是告訴super class說,我要使用com.myCompany的MyHelloActivity的class.<br />
<br />
6. 加入setUp() function,這個function是整個test project在開始test 程序之前會先被呼叫的,在這裡需要先確保需要使用到的變數都先被初始化。<br />
<script class="brush:html" type="syntaxhighlighter">
<![CDATA[
@Override
protected void setUp() throws Exception {
super.setUp();
mActivity = this.getActivity();
}
]]>
</script><br />
在setUp()裡,也許你需要加上<br />
setActivityInitialTouchMode(false);<br />
如果在你的test procedure裡有送出一些key events,一定要將touch mode設定成off。如果沒有用到key events,可以不管這一行。<br />
<br />
7. 加入preconditions() function,這個function是用來做前置測試用,先確保等一下要被呼叫的test functions裡面用到的變數,物件都是有用的資訊。跟setUp()作用很相似,Android development help裡面提到,preconditions只會被呼叫一次,但是setUp是每一個test function被呼叫之前都會先被執行一次。<br />
<script class="brush:html" type="syntaxhighlighter">
<![CDATA[
public void testPreconditions() {
assertNotNull(mView);
}
]]>
</script><br />
<br />
8. 原文補充:The purpose of testing initial conditions is not the same as using setUp(). The JUnit setUp() runs once before each test method, and its purpose is to <span class="Apple-style-span" style="color: red;">create a clean test environment</span>. The initial conditions test runs once, and its purpose is to <span class="Apple-style-span" style="color: red;">verify that the application under test is ready to be tested</span>.<br />
<br />
10. 最後加入要測試的functions,根據測試結果只要是test開頭的function都會被執行。<br />
<script class="brush:html" type="syntaxhighlighter">
<![CDATA[
public void testFoo() {
assertNotNull(mView);
}
]]>
</script><br />
<br />
11. 執行unit test<br />
<img src="https://lh3.googleusercontent.com/-w8es5J7RMt0/TomEAC-5hcI/AAAAAAAAClg/3ON5vBDiCW4/s800/cts_10.PNG" /><br />
<br />
12. 範例原始碼<br />
<script class="brush:html" type="syntaxhighlighter">
<![CDATA[
package com.myCompany.test;
import com.myCompany.MyHelloActivity;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
public class MyTestClass extends ActivityInstrumentationTestCase2<myhelloactivity> {
static final String TAG = "MyTestClass";
Activity mActivity = null;
public MyTestClass() {
super("com.myCompany", MyHelloActivity.class);
Log.i(TAG, "===>MyTestClass construction");
}
@Override
protected void setUp() throws Exception {
Log.i(TAG, "===>setUp");
super.setUp();
mActivity = this.getActivity();
}
public void testPreconditions() {
Log.i(TAG, "===>testPreconditions");
String str = mActivity.getString(com.myCompany.R.string.app_name);
assertNotNull(str);
}
public void testmonkey() {
Log.i(TAG, "===>testmonkey");
String str = mActivity.getString(com.myCompany.R.string.app_name);
assertNotNull(str);
}
public void testMonkey() {
Log.i(TAG, "===>testMonkey");
String str = mActivity.getString(com.myCompany.R.string.app_name);
assertNotNull(str);
}
public void test_1() {
Log.i(TAG, "===>test_1");
String str = mActivity.getString(com.myCompany.R.string.app_name);
assertNotNull(str);
}
public void test_2() {
Log.i(TAG, "===>test_2");
String str = mActivity.getString(com.myCompany.R.string.app_name);
assertNotNull(str);
}
public void test_3() {
Log.i(TAG, "===>test_3");
String str = mActivity.getString(com.myCompany.R.string.app_name);
assertNotNull(str);
}
public void testabc() {
Log.i(TAG, "===>testabc");
String str = mActivity.getString(com.myCompany.R.string.app_name);
assertNotNull(str);
}
public void test5() {
Log.i(TAG, "===>test5");
String str2 = mActivity.getString(com.myCompany.R.string.app_name);
assertNotNull(str2);
}
}
]]>
</script><br />
<br />
13. 執行結果,如下圖。<br />
根據這樣的資訊,我們可以知道在每個test procedure被執行之前,都會先呼叫setUp(),所以我們應該將變數的初始化放在這個地方。Android development裡面提到testPreconditions只會被執行一次,但是系統執行test開頭的的順序似乎是以function name的ascii順序來執行的。<br />
<img src="https://lh4.googleusercontent.com/-YyhJ6NWXQXY/TomD_5R_MbI/AAAAAAAAClc/bKgIn_QoDNA/s800/cts_9.png" /><br />
<br />
14. 參考來源:<br />
<a href="http://developer.android.com/resources/tutorials/testing/helloandroid_test.html">Android develop: http://developer.android.com/resources/tutorials/testing/helloandroid_test.html</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-33743558489906115682011-09-29T22:02:00.000-07:002011-09-29T22:02:53.683-07:00[Android App] 緊急電話簿 v1.5終於改版了,這次也算是大翻修,增加了交通運輸的服務電話,在經過一些思考之後,交通服務電話應該是比較會被大家用到的,也希望大家在緊急的時候都能得到協助。<br />
趕緊來介紹一下新版本功能吧!<br />
<br />
<br />
緊急電話簿更新 v1.5 版本了。<br />
新的版本修改部分如下:<br />
<br />
<b>[修改部分]:</b><br />
<br />
1. 修正永豐銀行、新光銀行服務電話。<br />
2. 加大字體大小。<br />
3. 自動辨識螢幕大小適時旋轉,提供更方便的操作介面。<br />
<br />
<br />
<b>[新增部分]:</b><br />
<br />
增加交通運輸公司服務電話,有:<br />
<br />
<b>鐵路部分</b>:高鐵、台鐵、台北捷運、高雄捷運。<br />
<br />
<b>航空部分</b>:桃園機場、松山機場、高雄小港機場、中華航空、立榮航空、長榮航空、華信航空、復興航空、遠東航空、德安航空。<br />
<br />
<b>國道客運部分</b>:三重客運、國光客運、日統客運、台中客運、和欣客運、統聯客運、阿羅哈客運、新竹客運。<br />
<div><br />
</div><br />
相關連結<br />
<table><tbody>
<tr><td><span class="Apple-style-span"><a href="https://market.android.com/details?id=com.ete.taiwan.emgcall&feature=search_result">程式下載:Android Market 連結</a></span></td></tr>
<tr><td><span class="Apple-style-span"><a href="http://astone-working.blogspot.com/2011/04/android-app-v12.html">[Android App] 緊急電話簿 v1.2</a></span></td></tr>
<tr><td><span class="Apple-style-span"><a href="http://astone-working.blogspot.com/2011/03/android-app.html">[Android App] 緊急電話簿</a></span></td></tr>
</tbody></table><br />
<br />
<br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">希望,這份資料可以提供給大家必要時的幫助。</div><div><br />
</div>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-88757683578471024402011-09-27T02:54:00.000-07:002011-09-27T02:54:38.108-07:00UML筆記---簡介<div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">什麼是</span><span lang="EN-US">UML</span><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">?</span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">字面翻譯:統一塑模語言</span><span lang="EN-US">(Unified Modeling Language)</span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">為了讓所有設計、撰寫軟體的相關人員有共通的語言,達到軟體開發的目標。根據</span><span lang="EN-US">wiki</span><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">說明,目前</span><span lang="EN-US">UML</span><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">並非工業標準,但是正在逐漸變成工業標準。</span><span lang="EN-US">UML</span><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">裡定義了很多圖表讓設計人員,開發人員可以明白系統功能。</span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"><br />
</span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"><b>常見的圖表可以分成三大類:</b></span></div><div class="MsoNormal"><b><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">結構性圖形(</span><span lang="EN-US">Structure diagrams</span><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">)強調的是系統式的塑模:</span><span lang="EN-US"><o:p></o:p></span></b></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">類別圖</span><span lang="EN-US">(Class Diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">元件圖</span><span lang="EN-US">(Component diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">複合結構圖</span><span lang="EN-US">(Composite structure diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">部署圖</span><span lang="EN-US">(Deployment diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">物件圖</span><span lang="EN-US">(Object diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">套件圖</span><span lang="EN-US">(Package diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">剖面圖</span><span lang="EN-US">(Profile diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"><br />
</span></div><div class="MsoNormal"><b><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">行為式圖形(</span><span lang="EN-US">Behavior diagrams</span><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">)強調系統模型中觸發的事件:</span><span lang="EN-US"><o:p></o:p></span></b></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">活動圖</span><span lang="EN-US">(Activity diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">狀態機圖</span><span lang="EN-US">(State Machine diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">使用個案圖</span><span lang="EN-US"> (Use Case Diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"><br />
</span></div><div class="MsoNormal"><b><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">溝通性圖形(</span><span lang="EN-US">Interaction diagrams</span><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">)屬於行為圖形的子集合,強調系統模型中的資料流程:</span><span lang="EN-US"><o:p></o:p></span></b></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">通信圖</span><span lang="EN-US">(Communication diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">交互概述圖</span><span lang="EN-US">(Interaction overview diagram) (UML 2.0)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">時序圖</span><span lang="EN-US">(Sequence diagram)<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "新細明體","serif"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 新細明體; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">時間圖</span><span lang="EN-US">(UML Timing Diagram) (UML 2.0)</span></div><div class="MsoNormal"><span lang="EN-US"><br />
</span></div><div class="MsoNormal"><span lang="EN-US">參考資料:<a href="http://zh.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E5%A1%91%E6%A8%A1%E8%AA%9E%E8%A8%80">統一塑模語言 on wiki</a></span></div>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-66844924062557153222011-06-13T06:00:00.000-07:002011-06-13T06:01:48.220-07:00Android Porting 問題(三)<span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">根據 google 文件,開始 build 之後,突然之間出現了以下錯誤訊息。</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br />
</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: yellow; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><b>『GL/glx.h : No such file or directory』</b></span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br />
</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br />
</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br />
</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">看起來應該是找不到 glx 的問題。</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br />
</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">請安裝下列 package</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br />
</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br />
</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"></span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"></span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: red; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><b>sudo apt-get install libgl1-mesa-dev</b></span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"><br />
</span><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: white; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-size: 13px; line-height: 18px;">再重新 build 乙次就可以啦!</span>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-6432887971606987752011-06-13T03:04:00.000-07:002011-06-13T03:04:24.419-07:00Android Porting 問題(二)一旦開始 build 就會發生一大堆問題,接下來就是見招拆招了!<br />
<div><br />
</div><div>我遇到的第二個問題是</div><div><span class="Apple-style-span" style="color: yellow; font-family: Verdana, sans-serif;"><b>『/usr/bin/ld: cannot find -lncurses』</b></span></div><div><br />
</div><div>目前可以將他歸類為</div><div> cannot find -lxxxx 錯誤類別。<br />
其中xxxx為類別名稱<br />
<br />
解決方式:直接安裝缺少的module.<br />
如<br />
<b><span class="Apple-style-span" style="color: red; font-family: Verdana, sans-serif;">sudo apt-get install libncurses-dev</span></b></div><div><br />
</div><div>網路參考資料</div><div><a href="http://i-pogo.blogspot.com/2010/01/usrbinld-cannot-find-lxxx.html">波哥的IT私房菜</a></div>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-26295477400727566852011-06-13T02:45:00.000-07:002011-06-13T03:05:10.358-07:00Android Porting 問題(一)<span class="Apple-style-span" style="font-family: inherit;">根據 google 文件,開始 build 之後,突然之間出現了以下錯誤訊息。</span><br />
<b><span class="Apple-style-span" style="color: yellow; font-family: Verdana, sans-serif;">『X11/Xlib.h : No such file or directory』</span></b><br />
<span class="Apple-style-span" style="font-family: inherit;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: inherit;">看起來應該是找不到 xlib 的問題。</span><br />
<span class="Apple-style-span" style="font-family: inherit;">請安裝下列 package</span><br />
<span class="Apple-style-span" style="font-family: inherit;"><br />
</span><br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: red; font-family: Georgia, 'Times New Roman', serif;"><b>sudo apt-get install <span class="Apple-style-span" style="font-size: 14px; line-height: 17px; white-space: pre;">x11proto-core-dev</span></b></span></div><div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: red; font-family: Georgia, 'Times New Roman', serif;"><b>sudo apt-get install <span class="Apple-style-span" style="font-size: 14px; line-height: 17px; white-space: pre;">libx11-dev</span></b></span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="font-size: 14px; line-height: 17px; white-space: pre;"><span class="Apple-style-span" style="font-family: inherit;"><br />
</span></span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="font-size: 14px; line-height: 17px; white-space: pre;"><span class="Apple-style-span" style="font-family: inherit;">再重新 build 乙次就可以啦!</span></span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="font-size: 14px; line-height: 17px; white-space: pre;"><span class="Apple-style-span" style="font-family: inherit;"><br />
</span></span></div></div><div><span class="Apple-style-span" style="color: #004000; font-size: 14px; line-height: 17px; white-space: pre;"><span class="Apple-style-span" style="font-family: inherit;"><br />
</span></span></div><div><span class="Apple-style-span" style="color: #004000; font-family: monospace; font-size: 14px; line-height: 17px; white-space: pre;"><br />
</span></div>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-74001798130101573942011-05-27T01:04:00.000-07:002011-05-27T01:04:00.571-07:00滑鼠滾輪一次只能滾動一行怎麼辦我有一只滑鼠(INTOPIC),已經用了很久,都沒有問題,只是最近重灌 windows xp 系統發現,滑鼠的滾輪一次只能捲動一行。上 google 大神去搜尋,幾乎沒有什摩解決方法。每次到『控制台 / 滑鼠』裡面設定完之後,下次開機又回復原樣,真是氣死我也!記得,以前也遇過這件事情,後來忘了如何解決。<div><br />
</div><div>接下來,我把這次的解決方法公佈給大家!</div><div><br />
</div><div>其實,因為現在的作業系統幾乎都支援USB滑鼠的驅動程式,所以我們只要將滑鼠插上USB就可以使用,很少人會再去安裝滑鼠驅動程式。這就是關鍵了!我到INTOPIC網站搜尋我的型號的滑鼠時,還真的有驅動程式!當然啦!死馬當活馬醫啦!</div><div><br />
</div><div>沒想到就這樣成功了!</div><div><br />
</div><div>如果,各位有遇到一樣的狀況的話!希望給你一點幫助!</div><div><br />
</div><div><br />
</div>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-11827849607860635252011-04-14T19:57:00.000-07:002011-05-03T02:25:18.573-07:00[Android App] 緊急電話簿 v1.2緊急電話簿更新 v1.2 版本了。<br />
新的版本修改部分如下:<br />
<br />
<b>[修改部分]:</b><br />
修正 1999 為全台各縣市政府通用的服務電話。<br />
<br />
<b>[新增部分]:</b><br />
增加了兒童燙傷基金會、失蹤兒童通報、失蹤老人通報、平交道緊急事故通報、台電客服、警廣路況通報、高速公路拖吊申訴、國稅局。<br />
<br />
並台灣電信業者服務電話:有中華電信、台灣大哥大、遠傳、威寶、亞太等。<br />
另外,也增加各大壽險業者保戶免費服務電話:台灣人壽、南山人壽、保德信人壽、保誠人壽、紐約人壽、國泰人壽、富邦人壽等等。<br />
<br />
產物保險部分加入:國泰產物保險、富邦產物保險、華南產物保險、新安東京產物保險、蘇黎世產物保險等等。(車禍受傷時很重要)<br />
<br />
同時將原本只有3個分頁的電話增加到5個分頁!<br />
新版縮圖如下:<br />
<table><tbody>
<tr> <td><br />
<img border="0" height="320" src="http://4.bp.blogspot.com/-C-Rx7UpF39c/TaewRR1BhGI/AAAAAAAAChc/kZ6h0ty53X0/s320/device_1.2_0.jpg" width="213" /></td><td><br />
<img border="0" height="320" src="http://4.bp.blogspot.com/-1c9QNCOdfbs/TaewjAMOBHI/AAAAAAAAChs/qwV_5cNvgp4/s320/device_1.2_3.jpg" width="213" /></td><td><br />
<img border="0" height="320" src="http://4.bp.blogspot.com/-GoqQlaQBhI0/TaewqX-o_9I/AAAAAAAACh0/0dWYSqlJwyw/s320/device_1.2_4.jpg" width="213" /></td> </tr>
</tbody></table><br />
<br />
<span class="Apple-style-span" style="font-size: large;">前一版本介紹連結<a href="http://astone-working.blogspot.com/2011/03/android-app.html">[Android App] 緊急電話簿</a></span><br />
<br />
<br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">希望,這份資料可以提供給大家必要時的幫助。</div><div><br />
</div>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-51119058184715826392011-04-07T01:09:00.000-07:002011-04-07T01:09:33.830-07:00如何動態設定 height in tablerowAndroid 程式開發中用 TableRow 來製作 UI 是一個不錯的選擇。<br />
只是要好好研讀 API 就是了。<br />
<br />
在開發中,有一個問題一值無法解決。就是動態設定 TableRow 的 Height.<br />
<br />
原始碼如下:<br />
<br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">TableLayout table = new TableLayout(this);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">table.setBackgroundResource(R.drawable.bg); </span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">table.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">TableRow.LayoutParams lp_tr = new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">TableRow tr = new TableRow(this);</span><br />
<span class="Apple-style-span" style="background-color: yellow; font-family: Arial, Helvetica, sans-serif;">table.addView(tr);</span><br />
<span class="Apple-style-span" style="background-color: yellow; font-family: Arial, Helvetica, sans-serif;">tr.setLayoutParams(lp_tr);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">tr.setGravity(Gravity.BOTTOM);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">Resources res = getResources();</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">Bitmap bmp = null;</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">bmp = BitmapFactory.decodeResource(res, R.drawable.XX);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">ImageView v1 = new ImageView(this);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">v1.setImageBitmap(bmp);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">tr.addView(v1);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">HorizontalScrollView scrollview = new HorizontalScrollView(this);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">scrollview.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1));</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">scrollview.addView(table);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">this.setContentView(scrollview);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">其中,黃色的部份很重要(先後順序),要先 AddView 再設定 LayoutParams 不然,會白費工夫!</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><br />
</span>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-56740365865741801712011-03-24T20:21:00.000-07:002011-05-03T02:25:18.574-07:00[Android App] 緊急電話簿Android確實是一股不可忽視的潮流,所以最近也趕趕時髦,來開始寫一些 Android 的小程式。<br />
恰巧,最近日本發生9.0的大地震,一股腦聯想到災難來臨了。想到這裡就聯想到:手機到底在沒有sim卡時是要打112還是113求救?<br />
對於記憶力不太好的我,這時就需要碰碰運氣了。<br />
有鑒於此,就想說:做一個小程式來幫助自己記住這些資訊!於是,緊急電話簿就誕生了!先來介紹他吧。<br />
<br />
<table style="border:5px solid gold; width:100%"><tbody>
<tr>
<td colspan=3 style="font-size:16px; color:black; background-color:gold; border:1px solid gold"><b>小檔案</b></td></tr>
<tr><td rowspan="5" align=center ><img src="https://lh5.googleusercontent.com/_5OYPtMwG84c/TYv90hdrqjI/AAAAAAAACek/Lx5F298XkxY/s800/icon.png" /></td>
<td style="border-bottom:1px solid gold;background-color:gold;color:black">中文姓名</td><td style="border-bottom:1px solid gold">緊急電話簿</td>
</tr>
<tr><td style="border-bottom:1px solid gold;background-color:gold;color:black; width:10%">英文姓名</td><td style="border-bottom:1px solid gold">Emergency Call</td></tr>
<tr><td style="border-bottom:1px solid gold;background-color:gold;color:black">生日</td><td style="border-bottom:1px solid gold">2011/3/16</td></tr>
<tr><td style="border-bottom:1px solid gold;background-color:gold;color:black">血型</td><td style="border-bottom:1px solid gold">Android 1.6</td></tr>
<tr><td style="border-bottom:1px solid gold;background-color:gold;color:black">所在地</td><td colspan=2 style="border-bottom:1px solid gold"><a herf="https://market.android.com/details?id=com.ete.taiwan.emgcall&feature=search_result" href="https://market.android.com/details?id=com.ete.taiwan.emgcall&feature=search_result">Android Market 前去看看</a></td></tr>
<tr><td colspan=3 style="border-bottom:1px solid gold;background-color:gold;color:black">自我介紹</td></tr>
<tr><td colspan=3 style="border-bottom:1px solid gold">緊急電話簿收錄了在台灣不常用但是緊急時不能沒有的電話。<br />
如:家暴專線、張老師專線、反詐騙專線等等。<br />
政府提供很多便利專線,但是太多反而記不住,現在可以利用智慧型手機的功能,幫助我們記住這些資訊,需要的時候就不用擔心了!<br />
如有這些資料有『更新』或是『需要新增加』的緊急聯絡電話,請直接線上回報,我們將儘快更新版本。</td></tr>
<tr><td colspan=3 style="border:1px solid gold;background-color:gold;color:black">生活照</td></tr>
<tr><td colspan=3 style="border:1px solid gold"><img src="https://lh6.googleusercontent.com/_5OYPtMwG84c/TYv7gMheDNI/AAAAAAAACeM/whlpvOoXJso/s800/ss-0-320-480-160-0-5f2fe822da6618ba5bec7575def3261547282f71.jpg"><img src="https://lh6.googleusercontent.com/_5OYPtMwG84c/TYv7jKy-LJI/AAAAAAAACeQ/U-B6O2vjO8o/s800/ss-1-320-480-160-0-54c188eeac872021f8e59539824d5abd4d395001.jpg"></td></tr>
</tbody></table>祝福大家都有平平安安的一天!Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com1tag:blogger.com,1999:blog-1729336422623953567.post-73102166674766155392010-04-29T03:07:00.000-07:002010-04-29T03:07:21.178-07:00EWF 跟 ghost 的問題今天發現用 ghost restore image 後,ewf 作用不正常!後來發現是 ghost 跟 ewf 匹配性的問題!<br />
解決方式:重新註冊 ewf component, command 如下<br />
<br />
<span class="Apple-style-span" style="font-size: x-large;"><span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"><span class="Apple-style-span" style="color: red;">rundll32 ewfdll.dll,ConfigureEwf</span></span></span><br />
<span class="Apple-style-span"><span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;">相關訊息請參考 MS 網站。</span><br />
<span class="Apple-style-span" style="font-size: x-large;"><a href="http://msdn.microsoft.com/en-us/library/ms912881(WinEmbedded.5).aspx">Using EWF with Cloning</a></span>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-6358872167923093122010-04-19T00:53:00.000-07:002010-04-19T00:56:59.907-07:00『相片分享器』----- 產品描述 --- 路況還有嗎?<br />
等一下出門會不會遇到塞車?要怎樣避開塞車路段?讓i@home告訴你現在的即時路況。<br />
<br />
<img src="http://lh3.ggpht.com/_5OYPtMwG84c/S8wGR2OTWoI/AAAAAAAACZg/LBWRPp0SXVU/s800/s15.jpg" style="border: 10px solid gray; width: 450px;" /><br />
圖十三:路況選單畫面<br />
<br />
<img src="http://lh5.ggpht.com/_5OYPtMwG84c/S8wGRlq-_zI/AAAAAAAACZc/sIxIQP_f1Cs/s800/s14.jpg" style="border: 10px solid gray; width: 450px;" /><br />
圖十四:及時路況畫面<br />
<br />
<br />
<br />
未來發展:<br />
我們希望i@home不只是一台功能限制的機器,他不應該只是一台只能看照片、看影片、撥音樂的機器,它應該要隨著時代的進步,讓開發者自動增加他的功能,讓使用者越來越依賴他,進而成為IA HOME的一部份。<br />
<br />
<b>延伸閱讀:</b><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_19.html">1.『相片分享器』----- 產品概念</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_1043.html">2.1.『相片分享器』----- 產品描述 --- 相簿</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_1539.html">2.2.『相片分享器』----- 產品描述 --- 行事曆</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_6344.html">2.3.『相片分享器』----- 產品描述 --- 氣象</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_2140.html">2.4.『相片分享器』----- 產品描述 --- 路況</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-90471840756347849012010-04-19T00:48:00.000-07:002010-04-19T00:56:59.909-07:00『相片分享器』----- 產品描述 --- 氣象天氣呢?<br />
想知道下週出遊天氣狀況嗎?你再也不用在電視機前面等著下一次的氣象預報,只要切換到i@home頻道,馬上可以知道最新的氣象預報。<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh3.ggpht.com/_5OYPtMwG84c/S8wGRpfk-xI/AAAAAAAACZY/8ck_h75_HJE/s800/s12.jpg"><br />
圖十:氣象選單畫面<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh5.ggpht.com/_5OYPtMwG84c/S8wGRUuH31I/AAAAAAAACZQ/vFeRoYd7XZM/s800/s10.jpg"><br />
圖十一:氣象主畫面---今日天氣<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh5.ggpht.com/_5OYPtMwG84c/S8wGRT3PRzI/AAAAAAAACZU/V4UaBWl7cjM/s800/s11.jpg"><br />
圖十二:氣象主畫面---一週天氣<br />
<br />
<br />
<b>延伸閱讀:</b><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_19.html">1.『相片分享器』----- 產品概念</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_1043.html">2.1.『相片分享器』----- 產品描述 --- 相簿</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_1539.html">2.2.『相片分享器』----- 產品描述 --- 行事曆</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_6344.html">2.3.『相片分享器』----- 產品描述 --- 氣象</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_2140.html">2.4.『相片分享器』----- 產品描述 --- 路況</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-64727763793254150102010-04-19T00:46:00.000-07:002010-04-19T00:56:59.910-07:00『相片分享器』----- 產品描述 --- 行事曆還有嗎?當你看完照片之後,想不想下次再一起出去?定個行事曆吧!<br />
馬上在i@home上面訂出行事曆(或是利用電腦),系統自動通知你設定好的朋友,下次一起出遊的日期。你再也不會錯過任何一次美好的聚集了!<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh3.ggpht.com/_5OYPtMwG84c/S8wGKmi8ywI/AAAAAAAACY8/OFh5S1FxpJs/s800/s5.jpg"><br />
圖五:行事曆選單畫面<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh4.ggpht.com/_5OYPtMwG84c/S8wGKoEtZUI/AAAAAAAACZA/XDNNsZUSaxI/s800/s6.jpg"><br />
圖六:日行事曆瀏覽模式<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh3.ggpht.com/_5OYPtMwG84c/S8wGK72H34I/AAAAAAAACZE/NvwkVD9NBn4/s800/s7.jpg"><br />
圖七:週行事曆瀏覽模式<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh3.ggpht.com/_5OYPtMwG84c/S8wGKxyv9NI/AAAAAAAACZI/gP_ywJBJ4Hs/s800/s8.jpg"><br />
圖八:月行事曆瀏覽模式<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh3.ggpht.com/_5OYPtMwG84c/S8wGK36LmNI/AAAAAAAACZM/QyFwWzoCpdY/s800/s9.jpg"><br />
圖九:行事曆列表瀏覽模式<br />
<br />
<br />
<b>延伸閱讀:</b><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_19.html">1.『相片分享器』----- 產品概念</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_1043.html">2.1.『相片分享器』----- 產品描述 --- 相簿</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_1539.html">2.2.『相片分享器』----- 產品描述 --- 行事曆</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_6344.html">2.3.『相片分享器』----- 產品描述 --- 氣象</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_2140.html">2.4.『相片分享器』----- 產品描述 --- 路況</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-50596268398615754912010-04-19T00:41:00.000-07:002010-04-19T00:56:59.911-07:00『相片分享器』----- 產品描述 --- 相簿首先,我們希望他輕、薄、短、小,一定要打破電腦的形象,因為我們不是在做一台電腦,我們是在做一台家電,一台可以備份資料的家電。一定要簡單易用,想想看,現在有哪種設備是越複雜越好的?如果我們看看 DVD player ,幾乎只剩下一個 power & eject 按鈕而已,如果沒有特別需求,只要將DVD放進去就會自動 play 了。我們的想法也很簡單,機器上也只有一個按鈕 [copy] ,和幾種記憶卡插槽。當使用者加記憶卡插入時,按下[copy]就會自動備份到i@home中。然後備份完就可以拔出。<br />
<br />
接下來呢?電視畫面出現剛剛備份的資料夾,馬上可以全家一起欣賞今天的成果。這就是i@home的核心價值。<img style="width:450px; border:10px solid gray" src="http://lh4.ggpht.com/_5OYPtMwG84c/S8wGE7j8l6I/AAAAAAAACY4/gB2pZ0MVTSk/s800/s4.jpg"><br />
圖一:相簿選單畫面<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh3.ggpht.com/_5OYPtMwG84c/S8wGEP-WoWI/AAAAAAAACYs/V0QQEgwDXm8/s800/s1.jpg"><br />
圖二:進入我的照片資料夾<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh5.ggpht.com/_5OYPtMwG84c/S8wGEHhQ2LI/AAAAAAAACYw/bP6wXJ1gF9I/s800/s2.jpg"><br />
圖三:照片欣賞模式<br />
<br />
剩下的呢?剩下的就全部交給系統背景去處理,包括資料備份、資料分類、網路分享(以後進階功能)、系統維護等等。<br />
<br />
當然,i@home只做這些功能嗎?我們剛剛提到了,這是核心功能,是最重要的事情。其他可以有其他很多功能加入,但是絕對不能超過這項功能的風采。接下來,我們再來看來有什麼功能可以加入。<br />
<br />
<br />
社群:<br />
正所謂『獨樂樂不如眾樂樂』,如果我們的照片可以和我們的朋友分享,這不是一件非常快樂的事情嗎?<br />
試想:今天跟一些朋友一起去爬山,每個人都帶了一台相機,每個人都拍了一些照片,但是回到家只能自己欣賞,或是copy然後放到網路上分享,坐在電腦前面分享,倒不如直接將記憶卡放進i@home,然後備份,完成後,系統自動通知你已經設定好的朋友,你的朋友馬上會知道有新的照片發布。然後他們也拿起遙控器在電視上一起分享今天的喜悅。<br />
<br />
<img style="width:450px; border:10px solid gray" src="http://lh6.ggpht.com/_5OYPtMwG84c/S8wGEjcPcdI/AAAAAAAACY0/HG9Zm7sQQLU/s800/s3.jpg"><br />
圖四:當朋友新增照片時,本機器會自動通知。<br />
<br />
<br />
<b>延伸閱讀:</b><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_19.html">1.『相片分享器』----- 產品概念</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_1043.html">2.1.『相片分享器』----- 產品描述 --- 相簿</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_1539.html">2.2.『相片分享器』----- 產品描述 --- 行事曆</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_6344.html">2.3.『相片分享器』----- 產品描述 --- 氣象</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_2140.html">2.4.『相片分享器』----- 產品描述 --- 路況</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-8709596332370275702010-04-19T00:35:00.000-07:002010-04-19T00:56:59.913-07:00『相片分享器』----- 產品概念產品概念:<br />
隨著數位設備持續的增加,數位資料也呈現爆炸性的成長,不論是電腦、數位相機、數位攝影機、手機,每樣設備都在増加數位資料,而且是倍數的成長。照片從30萬像素、100像素、500萬像素、突破千萬像素,影片資料由VGA到HD到Full HD,已經不需要專業的設備,而是一般家庭都可以擁有的。在這樣的世代裡,『如何保存資料』,相信必定成為未來重要的產業議題。<br />
<br />
目前為什麼少有人有這樣的需求?分析原因應為,現在正處於資料爆炸初期,相對應的設備都還可以容納,也還刊用,但是再過一陣子(也許是半年、也許是一年),當現有設備漸漸不敷使用時,或是現有設備接近生命結束週期時,這樣的需求就會逐漸浮現。<br />
<br />
資料保存說簡單可以很簡單,說難也可以做得很難。簡單的做法可以用硬碟定期備份,或是光碟燒錄備份。但是這樣真的有保障嗎?尤其是現在的資料,已經不是一片、兩片光碟可以了事的。就拿我自己的例子,我的照片資料至少已經有50G以上了。如果用光碟備份,也得備上數十片4.7G DVD。只是我還擔心過幾年光學塗料退化後,資料就不見了。所以這樣的備法也只是保心安而已。真正要做到比較有保障的做法,以目前看來應該是用硬碟機作 RAID 會比較好。但是有多少人懂RAID?懂了,又有多少人會用 RAID?<br />
<br />
<table><tbody>
<tr><td><br />
對於一般的使用者,到底有沒有簡單易用,而且有保障的備份裝置?如果你上網搜尋一下應該會找到不少NAS設備,NAS又是啥東西?它的全名是 Network Attached Storage,但是幾乎都是網路用硬碟,少有廠商加入備份功能。即使加入備份功能,操作上還是非常複雜,非得跟電腦用網路連線在一起才有辦法操作他。</td><td><img src="http://www.techworld.com/cmsdata/news/3209469/Promise%20SmartStor%20NS4600.jpg" style="width: 200px;" /></td></tr>
</tbody></table><br />
我覺得我們應該要在將產品重新定位一下,是否有一種產品可以讓不懂電腦的人也可以簡單備份資料?何謂不懂電腦?我將他定義為不會自行安裝硬體的人,這樣的人不在少數。或者是家中的長者,也是屬於這一類的客群。有鑑於此,接下來要為大家介紹的就是一台可以不費吹灰之力,可以讓你在家中欣賞自己拍攝出來的作品的設備。我們稱他為i@home.<br />
<br />
<br />
<b>延伸閱讀:</b><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_19.html">1.『相片分享器』----- 產品概念</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_1043.html">2.1.『相片分享器』----- 產品描述 --- 相簿</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_1539.html">2.2.『相片分享器』----- 產品描述 --- 行事曆</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_6344.html">2.3.『相片分享器』----- 產品描述 --- 氣象</a><br />
<a href="http://astone-working.blogspot.com/2010/04/blog-post_2140.html">2.4.『相片分享器』----- 產品描述 --- 路況</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-87219713992607609022010-04-11T23:12:00.000-07:002010-04-11T23:13:17.628-07:00『我的旅行寫真製造機』-- 介面呈現說了這麼多,都沒有提到使用者介面應該如何呈現,今天就來說說使用者介面吧!<br>使用者介面在現今這個世代已經成為非常重要的東西。必須考慮實用性、方便性、直覺性、美觀性,還有一大堆我說不來的。如果一個功能好的產品,沒有好好的用軟體包裝起來,相信效果一定大大打折扣。<br>以下就來介紹這部機器的人機介面吧。<br><img src="http://lh6.ggpht.com/_5OYPtMwG84c/S8KaTDsjLyI/AAAAAAAACXM/PiVutwuAlcs/s800/1.jpg"><br><br>首先要考慮的是,它不會是24小時持續不斷的有人在操作(當然如果有一天夯到無時無刻都一直有人在操作,那真是太令人振奮了),所以在待機時,我們可以加上一些影音撥放,如:成品展示、操作流程教學等等。等到有使用者將記憶卡插入機器裡時,第一個畫面就會出現,當然要先讓使用者選擇合適的語言介面。<br><img src="http://lh6.ggpht.com/_5OYPtMwG84c/S8KaTmqxwvI/AAAAAAAACXQ/wKzhHXSfgYU/s800/2.jpg"><br><br>接著開始讀取記憶卡內容,下方顯示讀取進度,上方可以顯示下一步驟的操作流程,才不會讓使用者站在機器前面空等待。<br><img src="http://lh6.ggpht.com/_5OYPtMwG84c/S8KaT52ohRI/AAAAAAAACXU/JcGgT6V_TMk/s800/3.jpg"><br><br>接下來開始選擇版面主題。在這裡主題樣本是非常重要的,這裡的主題就是讓使用者覺得物超所值的地方。<br><img src="http://lh3.ggpht.com/_5OYPtMwG84c/S8KaUM6A33I/AAAAAAAACXY/VjjlValIx5I/s800/4.jpg"><br><br>主題選定之後,就讓使用者開始選擇有哪些照片是要做成紀念冊的。一剛開始會先用縮圖模式,使用者雙擊照片時就切進放大模式。<br><img src="http://lh5.ggpht.com/_5OYPtMwG84c/S8KaUu9M05I/AAAAAAAACXc/sya9S4f6zws/s800/5.jpg"><br><br>在放大模式下,上方功能列會出現一個按鈕讓使用者切回縮圖模式,畫面上方會提示使用者還有多少照片可以選擇。<br><img src="http://lh5.ggpht.com/_5OYPtMwG84c/S8KadXipn7I/AAAAAAAACXg/V2l281v2vuE/s800/6.jpg"><br><br>接者,等使用者選完照片後,系統自動將照片跟主題版面連結在一起。(本步驟沒有讓使用者一頁一頁編輯,是因為沒有多少使用者希望花太多時間在處理編輯,而且系統設計應該是以越簡單,越容易操作為主要目標)系統馬上編輯出預覽頁面。<br><img src="http://lh6.ggpht.com/_5OYPtMwG84c/S8KadsKNWVI/AAAAAAAACXk/tWCZHUyDUWM/s800/7.jpg"><br><br>除非,使用者對系統自動編排結果不滿意,還想要手動更動,不然這裡直接按下完成,就可以了。<br><img src="http://lh4.ggpht.com/_5OYPtMwG84c/S8KaeP-NgHI/AAAAAAAACXo/9UMeTOXiaVg/s800/8.jpg"><br><br>最後就出現製作中的進度畫面,並列印收據資料,隔天退房時,讓服務人員將這份寶貴的禮物親手交到貴賓的手上。<br><img src="http://lh4.ggpht.com/_5OYPtMwG84c/S8KaeoUnGcI/AAAAAAAACXs/xVrTsj5VpZg/s800/9.jpg"><br><br>以上就是人機介面大致上的呈現。<br><img src="http://lh3.ggpht.com/_5OYPtMwG84c/S8Kae0uhiOI/AAAAAAAACXw/IAxg8xISjX4/s800/10.jpg"><br><br>2010年11月在台北將會有花卉博覽會,為期半年,這半年我相信會帶進相當多的觀光客,到底我們如何讓這些觀光客有更多對台灣的認識?我想這應該也是一種方式吧!Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-18341302946416515312010-03-21T09:27:00.000-07:002010-03-25T08:05:27.833-07:00『我的旅行寫真製造機』-- 附件註一:台北國際觀光旅館計有23間:<br />
<table border=1 cellpadding=0 cellspacing=0><tr><td>圓山大飯店<br>The Grand Hotel</td><td>國賓大飯店<br>The Ambassador Hotel</td></tr>
<tr><td>台北華國大飯店<br>Imperial Hotel Taipei</td><td>華泰王子大飯店<br>Gloria Prince Hotel</td></tr>
<tr><td>國王大飯店<br>Emperor Hotel</td><td>豪景大酒店<br>Hotel Riverview Taipei</td></tr>
<tr><td>台北凱撒大飯店<br>Caesar Park Hotel</td><td>康華大飯店<br>Golden China Hotel</td></tr>
<tr><td>神旺大飯店<br>San Want Hotel</td><td>兄弟大飯店<br>Brother Hotel</td></tr>
<tr><td>三德大飯店<br>Santos Hotel</td><td>亞都麗緻大飯店<br>The Landis Taipei</td></tr>
<tr><td>國聯大飯店<br>United Hotel</td><td>台北寒舍喜來登大飯店<br>Sheraton Taipei Hotel</td></tr>
<tr><td>台北老爺大酒店<br>Hotel Royal Taipei</td><td>福華大飯店<br>Howard Plaza Hotel</td></tr>
<tr><td>台北君悅大飯店<br>Grand Hyatt Taipei</td><td>晶華酒店<br>Grand Formosa Rege</td></tr>
<tr><td>西華大飯店<br>The Sherwood Hotel</td><td>遠東國際大飯店<br>Far Eastern Plaza</td></tr>
<tr><td>六福皇宮<br>The Westin Taipei</td><td>陽明山中國麗緻大飯店<br>Hotel Landis China</td></tr>
<tr><td>美麗信花園酒店<br>MIRAMAR GARDEN TAIPEI</td><td></td></tr>
</table><br><br><br />
興建中台北國際觀光旅館計有6間:<br />
<table border=1 cellpadding=0 cellspacing=0><tr><td>統一國際大飯店<br>President International Hotel</td><td>美福國際觀光旅館<br>Jaguar Hotel</td></tr>
<tr><td>台北四季酒店<br>Four Seasons Hotel</td><td>台北寒舍艾美酒店<br>Le Meridien Taipei Hotel<br />
</td></tr>
<tr><td>宜華國際觀光旅館<br>Yihwa International Hotel</td><td>台北慶城福華大飯店<br>Taipei ChingCheng Howard Hotel</td></tr>
</table><br />
<b>【延伸閱讀】</b><br />
<a href="http://astone-working.blogspot.com/2010/03/blog-post.html">1.『我的旅行寫真製造機』-- 產品概念</a><br />
<a href="http://astone-working.blogspot.com/2010/03/blog-post_21.html">2.『我的旅行寫真製造機』-- 產品規格</a><br />
<a href="http://astone-working.blogspot.com/2010/03/blog-post_3948.html">3.『我的旅行寫真製造機』-- 商業運作模式</a><br />
<a href="http://astone-working.blogspot.com/2010/03/blog-post_9883.html">4.『我的旅行寫真製造機』-- 產品競爭力</a><br />
<a href="http://astone-working.blogspot.com/2010/03/blog-post_5729.html">5.『我的旅行寫真製造機』-- 核心技術、研發時程評估(初估)、人員計劃</a><br />
<a href="http://astone-working.blogspot.com/2010/03/blog-post_1320.html">6.『我的旅行寫真製造機』-- 推廣策略</a><br />
<a href="http://astone-working.blogspot.com/2010/03/blog-post_471.html">7.『我的旅行寫真製造機』-- 成本分析(粗估)</a><br />
<a href="http://astone-working.blogspot.com/2010/03/blog-post_9615.html">8.『我的旅行寫真製造機』-- 經營目標</a><br />
<a href="http://astone-working.blogspot.com/2010/03/blog-post_4367.html">9.『我的旅行寫真製造機』-- 附件</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-72439861555546223872010-03-21T09:26:00.001-07:002010-03-25T07:55:14.251-07:00『我的旅行寫真製造機』-- 經營目標<div style="color:green; font-size:20px">經營目標:</div>DET必須致力於研發更多樣化的『我的旅行寫真書』並相關旅遊個人化紀念商品。期望每種DET的商品都能為每個旅者帶來更豐富、更有紀念價值的回憶。<br><br><div style="color:green; font-size:20px">品牌經營:</div><b>『我們一定要了解,一個品牌之所以能夠對消費者產生強大影響力,是因為這個品牌具有讓人強烈渴望的美感與心靈價值,而不是單純因為產品本身所具有的功能。』~~數位時代「乘法」的品牌經營模式。</b><br>所以DET應致力於提供消費者在旅程中所有美好事件的回憶,並致力於讓消費者看到DET品牌時立即可以聯想到『提供美好旅程事件』的公司。我們的品牌經營從兩個角度來看:<ul><li>產品:『我的旅行寫真書』要以世界第一個結合當地特色與個人化為主軸,並以精緻、紀念為核心價值,開發出全新的紀念品市場跟相片沖洗市場。<li>價格:走精緻路線的『我的旅行寫真書』必須以高價策略,在消費者的心目中建立精品形象。全球應該建立起統一售價,避免低價產生品質不良的趨勢。</ul><br><b>【延伸閱讀】</b><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post.html">1.『我的旅行寫真製造機』-- 產品概念</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_21.html">2.『我的旅行寫真製造機』-- 產品規格</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_3948.html">3.『我的旅行寫真製造機』-- 商業運作模式</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_9883.html">4.『我的旅行寫真製造機』-- 產品競爭力</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_5729.html">5.『我的旅行寫真製造機』-- 核心技術、研發時程評估(初估)、人員計劃</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_1320.html">6.『我的旅行寫真製造機』-- 推廣策略</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_471.html">7.『我的旅行寫真製造機』-- 成本分析(粗估)</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_9615.html">8.『我的旅行寫真製造機』-- 經營目標</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_4367.html">9.『我的旅行寫真製造機』-- 附件</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-80775900474759947552010-03-21T09:26:00.000-07:002010-03-25T04:09:42.351-07:00『我的旅行寫真製造機』-- 成本分析(粗估)本項分成研發成本、營運成本及企劃成本:<br><b>研發成本:總計估350萬。</b><br><ul><li>硬體研發:小計估320萬。<ul><li>前端主機系統:估20萬。<br>本項包括:主機、螢幕、觸控裝置、讀取設備、熱感式列印機、其他週邊。<li>前端機構整合:估30萬。<br>機構應先尋找是否有現成可用的模子,如果最後有需要才開始設計機構。<li>後端列印系統:估70萬。<br>跟廠商合作,請廠商提供或購買列印設備、墨水設備等等。<li>後端成冊自動化系統:估200萬。</ul><li>軟體研發:小計估30萬。<ul><li>開發軟體:估20萬。其餘皆攤在人事費用裡。<li>美編軟體:估10萬。<li>相片購買:估10萬。</ul>(另可跟Microsoft申請中小企業合法軟體贊助計畫。)</ul><b>營運成本:總計估335萬。</b><br><ul><li>初期建置成本:小計估35萬。<br>辦公室:option.<br>工作/研發設備:估35萬。<br>包含7 workstations + 2 servers + 網路設備.<li>人事成本:小計約300萬(7個月)。<br>計算方式:43萬/月 * 7月。<br>專案管理1員:8萬。<br>軟體開發2員:8萬+4萬。<br>硬體開發1~2員:8萬+4萬。<br>美編1員:3萬。<br>市場企劃1員:5萬。</ul><b>企劃成本:約50萬。</b><br>包含成品寫真書製作推廣、產品包裝、產品企劃等等。<br><b>總結上述成本7個月大約會花費735萬左右。</b><br><br><b>二年評估:(第8~24月)</b><br><ul><li>人事成本:估300萬/7月*(24-7)月=730萬。<li>企劃案投入:估200萬。(1~2次的國際展覽,視營運方向決定)<li>硬體改良:估100萬。</ul><b>總計2年約需投入資金1760萬。</b><br><br><div style="color:green; font-size:20px">機器成本分析(粗估):</div>每台機器成本大約估計在11萬,列舉如下:<ul><li>前端操作主機系統:<ul><li>主機設備:3萬<li>機構:0.5萬<li>熱感式列印機:0.5萬</ul><li>後端管控系統:<ul><li>主機設備:2萬</ul><li>後端成冊系統:<ul><li>列印系統:3萬<li>成冊系統:2萬</ul></ul><br><div style="color:green; font-size:20px">寫真書成本分析(粗估):</div>寫真書以12張A4大小專用紙計算。<br>專用紙成本:5*12頁=60<br>油墨成本:10*12頁=120<br>總成本:180元<br><br><div style="color:green; font-size:20px">成本回收試算(粗估):</div>對於DET來說,以前七個月研發時期所投入資金來計算的話,共投入735萬。<br><br />
每套設備總成本約估計11萬,若是賣20萬。每套設備獲利9萬。<br>735 / 9=81.6<br>故需要賣出80套設備才可以攤平成本。<br><br>對於飯店業者,需投入20萬硬體成本。<br>若是每本寫真書賣價為500元,若是寫真書成本可以控制在200元。則每本獲利300元。<br>200000 / 300 = 666.6<br>所以只要賣出667本即可攤平機器成本。<br><br />
<div style="color:green; font-size:20px">贊助支援計畫:</div><ol><li>經濟部科技研究發展專案之『創新科技應用予服務計畫』。<br><a href="http://doit.moea.gov.tw/newlink.asp?go=url441">http://doit.moea.gov.tw/newlink.asp?go=url441</a><li>微軟WebsiteSpark計畫。<br><a href="http://www.microsoft.com/taiwan/WebsiteSpark">http://www.microsoft.com/taiwan/WebsiteSpark</a></ol><br><br><b>【延伸閱讀】</b><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post.html">1.『我的旅行寫真製造機』-- 產品概念</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_21.html">2.『我的旅行寫真製造機』-- 產品規格</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_3948.html">3.『我的旅行寫真製造機』-- 商業運作模式</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_9883.html">4.『我的旅行寫真製造機』-- 產品競爭力</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_5729.html">5.『我的旅行寫真製造機』-- 核心技術、研發時程評估(初估)、人員計劃</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_1320.html">6.『我的旅行寫真製造機』-- 推廣策略</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_471.html">7.『我的旅行寫真製造機』-- 成本分析(粗估)</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_9615.html">8.『我的旅行寫真製造機』-- 經營目標</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_4367.html">9.『我的旅行寫真製造機』-- 附件</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-38780546500427952932010-03-21T09:25:00.000-07:002010-03-25T03:50:39.052-07:00『我的旅行寫真製造機』-- 推廣策略每個好的產品一定都需要好的行銷,好的行銷可以加速產品的曝光跟發展。所以我們也需要為『我的旅行寫真書』做好的行銷。<br />
根據『中華民國97年來臺旅客消費及動向調查』報告指出,<b>『受訪旅客在臺主要住宿於旅館(每百人次有84人次),其中住宿旅館類型依序為國際觀光旅館(占52.79%)、一般旅館(占38.47%)、觀光旅館(占8.74%);旅客對旅館的整體滿意度為80%,對民宿的整體滿意度為48%(普通占51%),對青年旅館.活動中心的整體滿意度為71%。』</b>,所以<ul><li>短期:先以台北知名國際觀光旅館(註1)為主,提供飯店整套系統(賣斷/租賃),初期配合專員介紹推廣,並代為操作。進而加強改善不易操作之介面跟流程。<br />
<li>中期:以台北奠定之基礎為底,大量複製成功經驗到全台灣。<br />
<li>長期:以台灣為基礎,整套模式輸出全球。</ul><img height="386" src="http://lh4.ggpht.com/_5OYPtMwG84c/S6NQlrUShnI/AAAAAAAACUM/xyrYjjWXPLg/s800/p91.jpg" width="712" /> 推廣方式可以跟飯店業者結盟,使用海報、數位看板等裝置大量曝光,並以『精緻』、『紀念』為主軸,塑造產品形象。<br><br>
<b>【延伸閱讀】</b><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post.html">1.『我的旅行寫真製造機』-- 產品概念</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_21.html">2.『我的旅行寫真製造機』-- 產品規格</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_3948.html">3.『我的旅行寫真製造機』-- 商業運作模式</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_9883.html">4.『我的旅行寫真製造機』-- 產品競爭力</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_5729.html">5.『我的旅行寫真製造機』-- 核心技術、研發時程評估(初估)、人員計劃</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_1320.html">6.『我的旅行寫真製造機』-- 推廣策略</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_471.html">7.『我的旅行寫真製造機』-- 成本分析(粗估)</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_9615.html">8.『我的旅行寫真製造機』-- 經營目標</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_4367.html">9.『我的旅行寫真製造機』-- 附件</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0tag:blogger.com,1999:blog-1729336422623953567.post-18897902075906748652010-03-21T09:24:00.000-07:002010-03-25T03:44:23.049-07:00『我的旅行寫真製造機』-- 核心技術、研發時程評估(初估)、人員計劃<div style="color: #6aa84f; font-size:20px">核心技術:</div>核心技術是一家公司長遠存在的基礎,DET的核心技術必須建立於:<ol><li>硬體:研發高品質、快速將相片製作成寫真書的機器。<li>軟體:研發不需透過學習亦可操作的人機介面,優異的影像處理技術。另外結合雲端運算方式提供飯店業主越來越多的服務。</ol><div style="color: #6aa84f; font-size:20px">研發時程評估(初估):</div>硬體部分:<ul><li>前端主機整合:3months.<li>前端機構整合:3months.<li>後端主機整合:1months.<li>後端列印&成冊自動化系統:6months</ul>軟體部分:<ul><li>前端編輯系統:6months.<li>後端結帳、控管系統:3months.<li>美編:2months.</ul><img border="0" height="246" src="http://lh3.ggpht.com/_5OYPtMwG84c/S6NQftDJzpI/AAAAAAAACUI/C6yTMzF07p0/s640/p81.jpg" width="640" /><div style="color: #6aa84f; font-size:20px">人員計劃:</div><ul><li>專案管理1員:負責全案工作管制、技術協助、機構開發、成品用料技術整合、市場企劃協助。<li>軟體開發2員:負責開發前端編輯系統、後端結帳系統、後端機械控制系統。(資深*1員, 新手*1員)<li>硬體開發1~2員:負責主機系統整合,列印系統整合,成冊自動化系統設計。<li>美編1員:負責版型開發、禮盒包裝設計、圖片/相片來源規劃、視覺規劃,協助市場企劃。<li>市場企劃1員:負責規劃產品行銷策略,並推廣。</ul>總計約7位。<br><br><b>【延伸閱讀】</b><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post.html">1.『我的旅行寫真製造機』-- 產品概念</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_21.html">2.『我的旅行寫真製造機』-- 產品規格</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_3948.html">3.『我的旅行寫真製造機』-- 商業運作模式</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_9883.html">4.『我的旅行寫真製造機』-- 產品競爭力</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_5729.html">5.『我的旅行寫真製造機』-- 核心技術、研發時程評估(初估)、人員計劃</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_1320.html">6.『我的旅行寫真製造機』-- 推廣策略</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_471.html">7.『我的旅行寫真製造機』-- 成本分析(粗估)</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_9615.html">8.『我的旅行寫真製造機』-- 經營目標</a><br>
<a href="http://astone-working.blogspot.com/2010/03/blog-post_4367.html">9.『我的旅行寫真製造機』-- 附件</a>Astonehttp://www.blogger.com/profile/06842650331389614324noreply@blogger.com0