2013年8月31日 星期六

Apache Mahout

Apache MahoutApache Software Foundation旗下的一個開放原始碼的專案,其專案的目的,在於提供具規模可擴充性的機器學習(Machine Learning)程式庫。 

但機器學習是一門很廣闊的領域,而Mahout 的目標是提供各類的經典演算法,以程式庫的方式呈現,Mahout也具備高效及規模可擴充性的特質。 

Mahout在英文翻譯中的意思是「象夫」,有象夫這個名字,是因為Mahout是為了提供規模可擴充性,是基於Apache Software Foundation另一個專案平臺Hadoop之名,以MapReduece的演算法,實作了像群集(clustering)、分類(classification),以及協同過濾(collaborative filtering)的核心演算法。

Mahout 不需要依附在Hadoop之上也可運行,Mahout自身提供了單一節點、非Hadoop的實作版本,開發者可以依據計算能力及規模大,來決定運行的方式。

Mahout所提供的演算法,而非全都分散式的演算法,且都經過高度的最佳化。

因為所以提供的演算法,不論是否是分散式演算法,或是無論在雲端上,都可以提供機器學習或推薦系統良好的環境。

Mahout中提供了許多分類的演算法,像是推薦引擎(Mahout中專指協同過濾式的推薦)、分類演算法、群集演算法、模式探勘(Pattern Mining)、降維(Dimension Reduction),以及向量相似度(Vector Similarity)等,

這些演算法也被運用在各領域中,而可以減少在建置上的成本,也可以結合多種演算法,來達到更有效率的運作,


對於一個推薦系統來說,是節省成本,可以混合多種演算法,對面海量資料也提供規模及擴充性,Mahout是具有足夠彈性的框架

參考資料:

Hadoop Pig

PigApache Hadoop專案的其中一個子專案,Pig提供了一個Script語言Pig Latin。在Pig下有兩種執行模式:
1.          Local模式:適用於測試程式偵錯,在此模式下Pig指存取一台主機並在短時間處裡少量資料。
2.          MapReduce模式:Pig需要把真正的查詢轉換成對應的MapReduce作業,並傳送到Hadoop叢集去執行,在此模式下為Pig LocalHadoop操作結合。
Pig Latin的資料型態表
單一資料型別
描述
範例
標量
int
有符號32為元整數
10
long
有符號64為元整數
資料:10L10I
顯示:10L
float
32位浮點數
資料:10.5F10.5f10.5e2f10.5E2F
顯示:10.5For1050.0F
double
64位浮點數
資料:10.5 or 10.5e2 or 10.5E2
顯示:10.5or1050.0
chararray
字元陣列使用UTF-8格式進行編碼
Hello world
bytearray
位元組陣列

複雜資料型態
Tuple
有序的欄位集
(19,2)
bag
元組集合
{(19,2)(19,2),(18,1)}
map
鍵值對集合
[open#apache]
參考資料:
1.          Pig環境

2.          Pig網路教學

2013年8月26日 星期一

NoSQL

NoSQL是一個資料庫的統稱名詞,它也是個儲存資料的資料庫。但不同於傳統的關聯式資料庫如:MSSQL、MySQLSyBase、Informix、PostgreSQL...等等,其較大差異在於它查詢資料時,主要並不是採SQL語法做查詢,雖然仍有某些NoSQL提供SQL語法查詢,但是,沒有優於關聯式的SQL結構化查詢其次是資料儲存時無須定義schema才能儲存,且儲存時並非得以表格形式儲存。然而它的出現並不是要取代關聯式資料庫,而是在資料儲存會有日增月益的情況時,意指資料只會有增無減為前提,即是有必要採用NoSQL為資料儲存;或者網站服務中,有提供索引文件的查詢、網站流量屬於較高者,資料庫系統會比較適合使用NoSQL類型常見的NoSQL資料庫主要有四類,分別是:Key-Value儲存分散式資料、記憶體資料庫(In-memory Database)、文件資料庫(Document Database)、圖形資料庫(Graph Database)的資料庫。目前,較具主流且被廣泛使用則是Key-Value儲存,該資料庫運用上,特色在於適用儲存大量資料,能夠以Key值快速的查詢到資料,較具代表性先驅有Google、Facebook這兩家公司

如下為各個NoSQL資料庫的用途:

Key-Value 存儲:Google BigTableAmazon Dynamo、Hadoop HBase、Facebook Cassandra、Hypertable
記憶體存儲:Memcached、Redis、Velocity、Tuple space
文件資料庫MongoDB、CouchDB、Riak
料庫AllegroGraph、Neo4j、InfoGrid

NoSQL  秉持著五大原則:

1.NoSQL是Not Only SQL
2.增加機器就能自動擴充資料庫容量
3.打破Schema欄位架構的限制 
4.資料遲早會一致 
5.成熟度不足,版本升級風險高 

參考出處:

http://zh.wikipedia.org/wiki/NoSQL
http://www.ithome.com.tw/itadm/article.php?c=63360&s=1
http://nosql-database.org/

2013年7月31日 星期三

android 開發使用 NFC TAG

在Android系統下,使用NFC必須先在Android系統開啟NFC認證(註冊)才可以在Android系統下使用,

而 NFC message 以 NDEF NFC Data Exchange Format (NDEF)格式為主,

但是 遇到非 NDEF NFC Data Exchange Format (NDEF)格式 也是有其他的方法可以使用。

而使用 NFC 有一些注意到的事項,

Android 2.3.3 (API Level 10)才有支援完整的NFC功能,

Android 4.x 支持 Android Application Record (AAR),

Android 4.0 支持 Beam,

在Android developers官網裡分別有二篇文章說明NFC的使用:<NFC Basics>與<Advanced NFC>。

根據 NFC Basics 學習在Android上,

如何傳送與接收NDEF data message,

來自NFC tag 、 Beaming NDEF Message由一個device到另一個,

操作NFC APIs、Android Beam™,

NDFE data 從 NFC tag 中取出,

交由tag dispatch system進行處理,包括:分析發現的NFC tags、將資料進行分類,並且根據資料啟動應用程式。

一個應用程式想要處理被掃瞄到的NFC tag,可以宣告intent filter與請求要處理的data。

NDEF record的定義:

由四個資訊組合:
1). 3-bit TNF (Type Name Format):
      說明如何解釋Type欄位 (Variable length type)的格式。透過下表說明the tag dispatch system如何透過TNF與type field
      來識別該NDEF message是MIME type或URI。可以被配對到的NDEF message,系統會觸發ACTION_NDEF_DISCOVERED,
      如果無法配對,系統會再倒給ACTION_TECH_DISCOVERED進行配對,如果沒有再退給ACTION_TAG_DISCOVERED。

2). Variable length type:
      描述該record的類型。如果是TNF_WELL_KNOWN,使用該欄位需要參考Record Type Definition (RTD)。

3). Variable length ID:
      該record的unique identifier。該欄位經常不使用,但如果需要唯一識別該tag,可以建立一個ID給他。

4). Variable length payload:
      實際想要讀或寫的資料內容(data payload)。一個NDEF message可包括多個NDEF records,所以不要以為所有的資料
     均寫在NDEF message的第一個record。

以下的註冊就是教你如何在Android系統下使用NFC,

註冊filter ACTION_NDEF_DISCOVERED:
            為了filter ACTION_NDEF_DISCOVERED intents,宣告intent filter要處理的資料類型。
以下例子使用處理MIME Type為text/plain:
<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="text/plain" />
</intent-filter>
以下例子使用處理URI類型:http://developer.android.com/index.html;
註冊處理為http的scheme,developer.android.com的host,以及固定第一個字段為:index.html。
<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
   <data android:scheme="http"
              android:host="developer.android.com"
              android:pathPrefix="/index.html" />
</intent-filter>


註冊filter ACTION_TECH_DISCOVERED:
          如果要註冊filter ACTION_TECH_DISCOVERED,需要在專案中增加一個新的XML檔案,定義該應用程式支持的 tech-list sets。
可以透過呼叫getTechList()來確認偵測到的NFC tag是否與定義的tech-list sets有所匹配。該檔案建議放罝於<project-root>/res/xml目錄下。
舉例來說:
如果一個tag被偵測到,它支持三種標準:MifareClassic、NdefFormatable與NfcA,在定義的tech-list sets就需要加入這些標準,
可能是一個、二個或三個標準都支持,以確保可以處理該intent。以下列出定義常見的tech-list集合:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.IsoDep</tech>
        <tech>android.nfc.tech.NfcA</tech>
        <tech>android.nfc.tech.NfcB</tech>
        <tech>android.nfc.tech.NfcF</tech>
        <tech>android.nfc.tech.NfcV</tech>
        <tech>android.nfc.tech.Ndef</tech>
        <tech>android.nfc.tech.NdefFormatable</tech>
        <tech>android.nfc.tech.MifareClassic</tech>
        <tech>android.nfc.tech.MifareUltralight</tech>
    </tech-list>
</resources>

另外,也可以定義多組tech-list sets。每一個tech-list set是獨立的,如果任何一組tech-list set被匹配到,activity將會被啟動,
該activity也可以透過getTechList()來確認偵測到的NFC tag是否與定義的tech-list sets有所匹配。它提供了 AND 與OR的定義匹配技術。
透過下列範例,說明支持NdefA與NdefB:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech>
        <tech>android.nfc.tech.Ndef</tech>
    </tech-list>
</resources>

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.NfcB</tech>
        <tech>android.nfc.tech.Ndef</tech>
    </tech-list>
</resources>

定義好了resource,可以在AppManifest.xml中指定activity透過<meta-data />定義要使用那一個resource。如下:
<activity>
...
<intent-filter>
    <action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>

<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
    android:resource="@xml/nfc_tech_filter" />
...
</activity>
更多詳細的資料可以參考<Working with Supported Tag Technologies>。


註冊ACTION_TAG_DISCOVERED:
<intent-filter>
    <action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>

擴增實境Augmented Reality

擴增實境為將電腦產生的視覺影像及資訊整合到現實環境的一種應用與技術,與虛擬實境不同的地方在於透過電腦上建構一個虛擬的世界,且藉由特殊界面讓人們進入該虛擬世界中,如同身處在真實世界一般,因此虛擬實境比擴增實境的應用限制來的大。

目前擴增實境可被用來應用於醫療、工業、軍事等,目前高通推出擴增實境開發平台vuforia ,進去該網頁後點擊右上角註冊按鈕如下圖
該平台為免費的開發平台,接下來進到環境建置教學網頁 進行環境建置,由該網頁資料可以了解該平台環境需求為:

Component
Version
JDK
Java SE 7u21
Eclipse IDE
最新版本
Android SDK Downloader
Android SDK Tools revision 22
Android ADT
最新版本
Android SDK Tools
Android SDK Tools revision 22
Android SDK platform support
Android SDK Platform tools revision 17
Cygwin Environment
Latest version 1.7.18-1
Android NDK
Android NDK r8e

2013年7月17日 星期三

REST 與 RESTful 架構

REST( REpresentational State Transfer ),為"具體狀態傳輸",是一種架構模式,用於Web上的架構。Web上所有資源都可統稱resource,因resource以URI表示,具有唯一識別性;因而能用以區分所有的網路資源。Client觸發某個超連結時,Web能夠以該事件啟用下一個狀態或resource,依此藉由Client不斷的觸發而產生的狀態變動

如下為REST 的優點:

  • 支援快取 caching 將改善反應時間跟server的負載能力。
  • 因為不必維持連結狀態,大大改善 server 的 scalability 能力。這表示不同server可以處理同一串 requests。
  • 一個瀏覽器就可以存取任一應用程式跟資源,client 端不需使用別的軟體。
  • 在HTTP之上不依存其他機制跟軟體。
  • 跟其他連結方式相比(如RPC),可以提供相等的功能。
  • 不需要其他的 discovery 機制,因為使用超連結了。
  • 提供比RPC更好的長期相容性,因為 :
  • 如同HTML這種文件具有後前及向後的相容能力
  • 支援新的內容格式不需要丟掉舊的

RESTful所表示是符合 REST principles 的系統稱做 RESTful,細部則是RESTful的環境,Client建構URL跟規劃好的resource做對應,明確排程Web狀態的改變。簡單來說,若是以 HTTP 為基礎來設計 RESTful 系統,即是完善的使用 HTTP,因為 HTTP 本身就是 REST 的實作。


參考出處:
http://ihower.tw/blog/archives/1542
http://blog.kkbruce.net/2012/04/aspnet-web-api-2-rest.html#.Udr-P_kwdsx
http://blog.toright.com/archives/1399

2013年6月30日 星期日

XMSF(Extensible Modeling and Simulation Framework)

XMSF(Extensible Modeling and Simulation Framework)Web-Base技術的開放標準,主要被用來提供跨平台異質性結構系統解決方案,SISO2003 9 月成立了 XMSF Profiles 研究小组( XMSF Profiles SG) XMSF 主要集成 MDABOMSRMLC-BMLMSDL 这五種開放標準提供一个综合的集成驗證環境。


上圖為XMSF集成5種開放標準的環境架構,以下說明個開放標準自XMSF中的應用。
  1. BOMs XMSF 實現基於組件重用系統的基本技術手段之一它負責對系統中的實體對象和交互建立概念模型為系統基於模型的開發和擴展提供可重用的模型片段。
  2. SRML 用於完善BOM 模型中動態變更行為的描述。
  3. MSDL 基於XML 描述系統所有的仿真初始化訊息支持仿真初始化信息的合併重用。
  4. C-BML XMSF 實現仿真系統和C4ISR 互操作目標的重要技術途徑。

XACML( eXtensible Access Control Markup Language,可擴展訪問控制標記語言)

XACML( eXtensible Access Control Markup Language,可擴展訪問控制標記語言)

他是一種Oasis標準使用於授權政策和規範授權決策處理,

以XML檔案格式傳遞資料,並將資訊存取呈現的控制策略,

他用來定義一種通用的保護資源的策略語言,


主要實體(Terminology ):

策略管理點(Policy administration point, PAP)
產生(存放)單一政策(policy)或政策集合(policy set)的系統實體。

策略執行點(Policy enforcement point, PEP)
依照既定的授權決策來執行存取控制的系統實體。 (接收對授權的請求。PEP向PDP發送XACML請求,然後根據PDP的決策行動)。

策略決定點(Policy decision point, PDP)
PDP使用從PAP獲得的策略以及從PIP獲得的附加信息來進行決策的系統實體。

策略資訊點(Policy information point, PIP)
PIP可提供被存取資源的屬性,以及試圖存取該資源的實體(身份證明)。

策略擷取點(Policy retrieval point, PRP)
對於特定的請求(request),找出及取回適當策略的系統實體。


MACML 主要包含了三種結構:

1.Rule
2.Policy Statement
3.Policy set statement

其中介紹一下,

Rule

是策略中最重要的元素單位,一個策略可與多條規則相關聯。每個規則由條件、結果和目標組成。結果會依照條件來回應。

target(目標):這個部份的結果可提供給PDP用來進行授權決策要求的評估。

condition(條件):為一布林運算式。

effect(結果):是符合規則的預期後果。


MACML的目的:

創造一種可移植且標準的方式來描述訪問控制實體及屬性。

並提供一種機制,以簡單的方式來讓拒絕訪問或授權訪問更加精細的控制訪問。


2013年6月19日 星期三

4種執行系統外部程式函式

shell_exec()

原始函式=shell_exec ( string cmd)
$message=shell_exec("ls -al");
echo $message;
此方法執行時可將.sh所執行事項儲存在變數中,如$message儲存了所有顯示資訊,頁面到時候可顯示所有訊息。


exec()

原始函式=exec (string command [, string array [, int return_var]])
exec 執行系統外部命令時不會輸出結果,而是回傳結果的最後一行,如果你想得到結果你可以使用第二個參數,讓其輸出到指定的數組。此數組一個記錄代表輸出的一行,即如果輸出結果有20行,則這個數組就有20條記錄,所以,如果你需要回傳輸出調用不同系統外部命令的結果,最好在輸出每一條系統外部命令結果時清空這個數組,以防混亂。第三個參數用來取得命令執行的狀態碼,通常執行成功都是回傳數值0。


system()

原始函式=system (string command [, int return_var])
system和exec的區別在於system在執行系統外部命令時,直接將結果輸出到瀏覽器,不需要使用echo 或return 來查看結果,如果執行命令成功則回傳true,反之則回傳false。第二個參數與exec第三個參數含意相同。


passthru()

passthru()與system()的差異,在於passthru()直接將結果輸出到瀏覽器,不需要使用echo 或return 來查看結果,不回傳任何數值,且可以輸出二進制,比如影像數據。

執行4種外部指令的時機:
使用 exec() 命令和數據數組處理所有東西。或者對更簡單的命令。
使用 shell_exec(),尤其是不關心結果時。
如果僅需回傳一個 shell 腳本,建議使用 passthru()。
那該使用哪種函式,這完全取決於程式設計師要實現的目的。

php執行外部程式的權限,可參考http://tw2.php.net/manual/en/features.safe-mode.php

2013年5月31日 星期五

學習新知java validate xml API

java validate xml  API 應用來驗證XML  validate,一般來說,如果驗證一份XML文件如果只使用一份Schema時程式碼如下:


DocumentBuilder parser=DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(new File("instance.xml"));
SchemaFactory factory=SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Source schemaFile = new StreamSource(new File("mySchema.xsd"));
Schema schema = factory.newSchema(schemaFile);
   
Validator validator = schema.newValidator();

try {
        validator.validate(new DOMSource(document));
    } 
catch (SAXException e)
 {
        // instance document is invalid!
}

只需要輸入一份XSD檔即可,但是如果是多份schema來驗證一份XML文件且這些schema都有互相關聯,那麼直接套用API季會有錯誤,匯音樂讀取不到<xs:include> ...等造成驗證錯誤。

到網路上搜尋相關解決方法,發現說原來這個錯誤是一個BUG,根據此篇說法可以增加ResourceResolver的程式碼解決這個BUG。或者匯入第3方Jar檔使用其內部資源來解決問題。

2013年5月29日 星期三

區分常用的Web傳輸

1. TCP連接

手機能夠使用連網功能是因為手機底層實現了TCP/IP協定,使手機終端透過無線網路建立TCP連接。 TCP協定可以對上層網路提供接口,使上層網路數據的傳輸建立在“無差別”的網路之上。
建立起一個TCP連接需要經過"三次握手":
  • 第一次握手:客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,待伺服器確認後。
  • 第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態。
  • 第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接會一直保持下去。斷開連接時伺服器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過"四次握手"(與連線時雷同,最終是確定斷開)。

2. HTTP連接

HTTP協定,即超文本傳送協定(Hypertext Transfer Protocol ),是Web連網的基礎,也是手機連網常用的協定之一,HTTP協定是建立在TCP協定之上的一種應用。
HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回傳回應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為"一次連接"。
  1. 在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。
  2. 在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。
由於HTTP在每次請求結束後都會主動釋放連接,因此HTTP連接是一種"短連接",要保持客戶端的在線狀態,須要不斷地向伺服器發起連接請求。通常的做法是即使不需獲得任何數據,客戶端也保持每隔一段固定的時間向伺服器發送一次“保持連接”的請求,伺服器在收到該請求後對客戶端進行回覆,表明知道客戶端“在線”。若伺服器長時間無法收到客戶端的請求,則認為客戶端"下線",若客戶端長時間無法收到伺服器的回覆,則認為網路已經斷開。

3. Socket原理

3.1 插口(Socket)概念
插口(Socket)是通訊的基礎,是支援TCP/IP協定的網路通信的基本操作單元。它是網路通信過程中端點的抽象表示,包含進行網路通信必須的五種信息:
  1. 連接使用的協定,本地主機的IP地址,本地的協定端口;遠地主機的IP地址,遠地的協定端口。
  2. 應用層透過傳輸層進行數據通信時,TCP會遇到同時為多個應用程式過程提供並發服務的問題。
  3. 多個TCP連接或多個應用程式過程可能需要透過同一個TCP協定端口傳輸數據。
  4. 為了區別不同的應用程式和連接,許多計算機操作系統為應用程式與TCP/IP協定交互提供了套接字(Socket)接口。
  5. 應用層可以和傳輸層透過Socket接口,區分來自不同應用程式或網路連接的通信,實現數據傳輸的並發服務。
3.2 建立Socket連接
建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。
套接字之間的連接過程分為三個步驟:伺服器監聽,客戶端請求,連接確認。
  • 伺服器監聽:伺服器器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求。
  • 客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連接的伺服器的套接字,指出伺服器端套接字的地址和端口號,然後就向伺服器端套接字提出連接請求。
  • 連接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就回應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。

4. Socket連接與TCP連接

建立Socket連接時,可指定使用的傳輸層協定,Socket可以支援不同的傳輸層協定(TCP或UDP),當使用TCP協定進行連接時,該Socket連接就是一個TCP連接。

5. Socket連接與HTTP連接

  • Socket
由於通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,直到雙方連接斷開。但在實際網路應用中,客戶端到伺服器之間的通信往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的連接而導致Socket 連接斷連,因此需要經過不斷告訴網路,該連接處於活躍狀態。
  • HTTP
HTTP連接使用是"請求和回應"的方式,不僅在請求時需要先建立連接,而且需要客戶端向伺服器發出請求後,伺服器端才能回傳數據。
  • 總結
很多情況下,需要伺服器端主動向客戶端發送數據,保持客戶端與伺服器數據的實時與同步。此時若雙方建立的是Socket連接,伺服器就可以直接將數據傳送給客戶端;若雙方建立的是HTTP連接,則伺服器需要等到客戶端發送一次請求後才能將數據傳回給客戶端,因此,客戶端定時向伺服器端發送連接請求,不僅可以保持在線,同時也是在"詢問"伺服器是否有新的數據,若有新數據即可傳給客戶端。

參考出處:

2013年5月27日 星期一

電子發票

—現在政府提倡電子發票,解決紙本電子發票收納的困擾,當然最主要是可以帶來減少樹木的砍伐,但現今生活習慣的問題,大多的人還是都拿紙本,所以將電子發票結合了「載具」,希望可以讓電子發票可以更貼近使用者的消費行為,但載具並不是最貼近人們的生活,沒有載具的限制也可以使用一般的「手機條碼」,電子發票提供了生活便利,如:自動對獎、幫你收納發票等等。

載具種類
—7-11的i-Cash
—悠遊卡
—手機號碼條碼(簡稱手機條碼)
—燦坤會員卡
—Happy GO卡
—順發3C會員卡
—全聯福利社會員卡
—中油家族卡

以下網址可以查詢目前還有哪些載具
https://www.einvoice.nat.gov.tw/APMEMBERVAN/Store/Store?CSRT=10024459690924458644

電子發票申請
—https://www.einvoice.nat.gov.tw/APMEMBERVAN/GeneralCarrier/generalCarrier?mp=1

手機條碼操作手冊
https://www.einvoice.nat.gov.tw/wSite/public/Attachment/f1341277754226.pdf

電子發票API
有提供以下的API

查詢中獎發票號碼清單 /PB2CAPIVAN/invapp/InvApp
查詢發票表頭 /PB2CAPIVAN/invapp/InvApp
查詢發票明細 /PB2CAPIVAN/invapp/InvApp
愛心碼查詢 /PB2CAPIVAN/loveCodeapp/qryLoveCode
載具發票表頭查詢 /PB2CAPIVAN/invServ/InvServ
載具發票號碼明細查詢 /PB2CAPIVAN/invServ/InvServ
載具發票捐贈 /PB2CAPIVAN/CarInv/Donate

回傳格式為JSON。

參考網址:
https://www.einvoice.nat.gov.tw/wSite/mp?mp=1


2013年5月25日 星期六

智慧城市-桑坦德

桑坦德位於西班牙北部,利用900萬歐元打造高科技智慧城市研究中心,全城市擁有12000個感應器來實現此計畫,利用GPS定位技術的APP,城市中的每一樣都可能成為城市中行動的感應器。

以下是整理後的智慧城市內容:

1.每一輛公車都會上傳自己的位置訊息、里程數和速度,同時還會上傳當前所處環境的相關數據,比如臭氧和一氧化氮。

2.路上的街燈還可以自動調節自己的亮度,當街上無人行走時,街燈變暗,在月圓之夜,街燈的亮度要低於雨夜的亮度。

3.傳感器還可以幫助優化花園灌溉活動,以達到省水的目的。清潔工們也不需要查看每個垃圾桶,系統會事先提醒哪個垃圾桶需要清空。

4.在公交站等車的人只要打開手機應用,手機便會迅速查找出經過此站台的所有公車線路,同時還會顯示公車的抵達時間

5.遊客們在市中心的景點,可以通過該應用,了解景點造者、建造時間等訊息;該APP還提供即時的超市特價商品訊息。

6.如果共設施出問題需要維修的時候,只需要通過APP,拍一張現場照片就可以了。居民們輕點手機,這一損壞報告便會連帶GPS定位訊息一道上傳給市政府。
(訊息上傳者的個人訊息則受到隱私保護。市民們和當地媒體還可以使用這一應用追蹤修復工作將花費的時間。)

7.停車位尋找,在停車位上都有感知器,可以藉由APP尋找空車位。


下一步,塞爾納市長打算公開更多城市機密。很多曾經保密的數據都將得到公開,包括人口統計數據和房價。接著,他打算推出一款名為“思想匯”的社交應用——有點像“臉書”(Facebook),但是是為當地市民量身定做的——通過這款應用將市民們聯繫起來。“我們希望在市民和政府之間,創造一種全新的、合作的關係。


心得:從桑坦德可以得到未來IOT與OpenData可能應用的場景,提供給學弟們參考。

參考資料:

http://architecture.archina.com/2013/anews_0326/52693.html

http://tw.news.yahoo.com/%E8%A5%BF%E7%8F%AD%E7%89%99%E5%9F%8E%E5%B8%82%E6%A1%91%E5%9D%A6%E5%BE%B7-%E5%85%A8%E6%AD%90%E7%AC%AC-%E6%99%BA%E6%85%A7%E5%9F%8E-030536303.html

2013年4月30日 星期二

Open Government Data在台灣的發展

  4/29日,政府開放資料平台上線(http://data.gov.tw),開放的資料集包含生活地圖、生活品質、藝文活動、觀光旅遊及災害防救等大分類,目前平台還是測試版,測試約持續到年底,目前平臺中的資料多為csv格式,及少量的XML和txt格式,希望未來可以加入JSON格式或以Linked Data技術建立一政府開放資料集。
圖1. 政府資料開放平台 http://data.gov.tw

  除了上述的政府開放資料平台,臺北市、新北市、台中市也有建立地方的公開資料平台公開地方市政資料。

  臺北市政府公開資料平台於2011年9月上線,公開各種便民資料,資料格式分為以可供下載Excel、CSV、MDB、XML、KML、SHP、DGN,和直接由URL或取資料的JSON。
圖2. 臺北市政府開放資料平台 http://data.taipei.gov.tw/ 

  新北市政府資料開放平台約在2012年12月上線,提供的資料格式有csv、XML、JSON和其他文件資料。
圖3. 新北市政府資料開放平台 http://data.ntpc.gov.tw/NTPC/

  臺中市政府資料開放平台在今年初上線,資料格式多為xls文件,或是提供csv格式。
圖4. 臺中市政府資料開放平台 http://data.taichung.gov.tw/

  另外,雖然宜蘭縣政府有一資訊公開網站(http://open.e-land.gov.tw),提供的資料以政府各處室的行政文件為主,甚少公開一些便民資料。

學習新知-政府開放資料_救災部分與交通部運輸研究所資料即時影像

政府資料開放平臺
這個資料平台主要是提供民眾與企業運用,透過政府資料開放,促成跨機關與民間協同合作與服務創新
對於這個平台提供的資料,參考 項目資料,裡面提供多個資料,像說防災資訊_水庫洩洪警戒中央氣象局海嘯警報道路(橋梁)預警性封閉以及救援與應變單位點位..等,資料格式多為XML檔,少數幾筆為CSV格式,但不影響資料使用,以Java程式語言為例,可以透過StringTokenizer類別指定字串與區隔字串(,)建立物件,在呼叫物件的nextToken()方法就能依序提取出資料。
另外交通部運輸研究所網站提供路況查詢資源, 進到網站後勾選集實影像出現如下圖:






以台中為例,點擊地圖上台中攝影機圖案會出現如下圖:

在點擊五權西路-文心路的攝影機圖案會出現如下圖即時影像:

可以對該影像點擊右鍵複製URL來使用影像,這網站除了有即時影像還有路況的災變及事故查詢,如果能搭配政府開放資料平台防災部分使用,不但有完整災害資訊更有即時影像可供使用者完整資料的參考。


文心路即時影像,可以點擊觀看。



NFC近距離無線通訊


無線射頻辨識(Radio Frequency Identification ,RFID)
又稱電子標籤、無線射頻識別,是一種通信技術、非接觸式自動識別系統。R F I D的系統架構可分為標籤、讀卡機與應用程式三個部分,如下說明:
a. 電子標籤( T a g ):標籤依據有無需要電源分為被動式、半被動式、主動式三類。被動式標籤是接收讀取器所傳送的電磁波,轉換成電子標籤內部電路、電圈操作電能,不需額外電源,優點為體積小巧、價格便宜、壽命較長以及資料可攜性高。
b. 讀卡機(Reader):利用電磁波傳遞能量及訊號,可以利用有線或無線通訊方式讀取標籤,讀卡機可利用天線對標籤進行讀取或寫入的動作。不同的RFID系統有各個不同的天線種類,讀卡機大致分為固定式與手持式兩種,固定式的讀卡機大多置放在商場出口、賣場貨架、倉庫的出入口,通常具有方向性且感應距離。讀卡機依據頻率與功率的不同,讀卡機天線的感應距離也有所不同,通常因應場景不同而選擇不同的頻率與距離。
c. 應用程式:RFID應用程式可以結合資料庫、Web及各種應用程式來組成一個應用程式系統,提供全自動或者半自動的系統功能。現存的整合應用系統包含航空業的行李監控、自動化生產監控管制、倉儲管理、運輸監控、保全管制以及醫療管理。

近距離無線通訊
近場通訊(Near Field Communication,NFC),又稱近距離無線通訊,是一種短距離的高頻無線通訊技術,允許電子設備之間進行非接觸式點對點資料傳輸,在十公分內交換資料。近距離無線通訊技術由RFID演變而來,由飛利浦、諾基亞和索尼共同研製開發,其基礎是RFID技術。近距離無線通訊是一種短距高頻的無線電技術,擁有較高的保密性與安全性。在13.56MHz頻率執行於20公分距離內。其傳輸速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三種。目前近距離無線通訊已通過成為ISO/IEC IS 18092國際標準、EMCA-340標準與ETSI TS 102 190標準。NFC採用主動和被動兩種讀取模式,相容於被動式RFID(13.56 MHz ISO/IEC 18000-3)。

心得:近年來NFC的應用越來越廣泛,論文也逐漸討論NFC的各種應用模式
基於手機發展的基礎上,整合NFC可以應用於情境感知相關的用處

OpenSSH Of Windows

OpenSSH 是一個免費的軟體,

它提供了安全的遠端訪問(登入)跟文件傳遞,

他已經被廣泛的運用在各領域中,

包括OS X,Linux的,BSD和Solaris,

現在也被運用到在 手機 跟 windows 上,

但是功能卻沒有在 Linux 上那麼完全,

而且 windows 的跟目錄必須先設定成像 Linux 的目錄,

且傳輸 必須 透過 其他程式來打到傳遞的功能,

例如:PuTTY

不然將會有安全性的問題,

這是因為 windows 並沒有提供 設定允許IP的功能,

但有提供金鑰的設定,

所以必須 透過 PuTTY 或類似的程式,

只要有安裝OpenSSH,

不用透過程式可以進行遠端訪問(登入),

而 OpenSSH 在 windows 上透過遠端訪問(登入)可以對 windows 下達指令,

提供的指令有 chmod 、 chown 、 cygrunsnv 、 ls 、 mkdir 、 rm 、 scp 、sftp 、switch 、sh 等等。



隨身攜帶作業系統

JAVA剖析XML的一種最佳方法DOM4J


DOM4J是目前在XML剖析方面是最優秀的(Hibernate、Sun的JAXM也都使用DOM4J來剖析XML),它合併了許多超出基本XML文件表示的功能,包括合併XPath的使用、XML Schema支援以及用於大資料文件或遵循文件基於事件的處理。

使用方法

目前最新DOM4J包下載網址:http://nchc.dl.sourceforge.net/sourceforge/dom4j/Dom4J-1.6.1.zip   解開後,僅操作XML文件的話把Dom4J-1.6.1.jar此檔案加入程式中即可,倘若需要使用XPath的話必須加入檔案Jaxen-1.1-beta-7.jar。

效能測試

        環境:AMD4400+ 2.0+GHz主頻 JDK6.0
        運行參數:-Xms400m -Xmx400m
        XML文件大小:10.7M
        結果:DOM: >581297ms、SAX: 8829ms、JDOM: 581297ms、DOM4J: 5309ms,時間包括IO的,只是進行了簡單的測試,僅供參考。

比較

  • DOM

DOM是基於樹的結構,通常需要載入整份文件和構造DOM的樹狀,然後才能開始工作。
優點:
  1. 由於整棵樹在記憶體中,因此可以對XML文件隨機訪問。
  2. 可以對XML文件進行修改操作。
  3. 相較SAX,DOM使用也更簡單。
缺點:
  1. 整個文件必須一次性剖析完。
  2. 由於整個文件都需要載入記憶體,對於資料量大文件成本高。

  • SAX

SAX是類似串流的資料,它基於事件驅動的,因此無需將整個文件載入記憶體,使用者只需要監聽自己感興趣的事件即可。
優點:
  1. 無須將整個XML文件載入記憶體,因此消耗記憶體少。
  2. 可以註冊多個ContentHandler。
缺點:
  1. 不能隨機訪問XML中的節點。
  2. 不能修改文件。
  • JDOM
JDOM是純Java的處理XML的API,其API中大量使用Collections類別,它利用強而有力的JAVA語言的諸多特性(方法覆載(overload)、集合概念以及映射),把SAX和DOM的功能結合起來。
優點:
  1. DOM方式的優點
  2. 具有SAX的Java規則
  3. 運用輕鬆、簡單方式處理XML文件。
缺點:
  1. DOM方式的缺點
  • DOM4J
DOM4J以JDOM為基礎,設計上保有JDOM的易用性,避免SAX和DOM的缺點,設計理念為更好的DOM實現,可以說是使用優點避免缺點。
優點:
  1. 容易使用
  2. 效能最好。
  3. 靈活性、功能強大等優勢
    在測試可看出,相較於其它三個XML剖析方式中,此DOM4J方式為最優秀的一個。
    若有剖析程式的問題,可至參考出處查看。

    參考出處:
    http://kree.iteye.com/blog/668280
    http://www.open-open.com/lib/view/open1346822899256.html

    2013年3月31日 星期日

    OpenStreetMap 開放街道圖

    OpenStreetMap是網路上一可以讓所有人編輯的地圖,是一網路地圖協作計畫,可以讓使用者依據GPS收集資訊、空拍和衛星影像或其他資訊編輯繪製地圖,該份地圖本來使用創用CC之姓名標示-相同方式分享方式授權,現已改為開放資料庫授權方式授權。

    OpenStreetMap的使用案例之一為2010年海地地震時使用衛星影像映射道路,在兩天內建構出完整的海地地圖供救災援助使用。

    目前台灣已有OpenStreetMap,tw以及社群致力於台灣OpenStreetMap的發展,並會定期舉辦活動集合編輯台灣之地圖。


    參考資料:
    openstreetmap.tw/
    OpenStreetMap Foundation

    JSON在Android應用


    JSON (Javascript Object Notation) 是一種輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。目前在Android本身已包含了org.json的開發包 (Library),以下利用Android使用HttpURLConnection 讀取
    Google Translate APIJSON資料。
    目前Google Translate APIlibraries for多種語言,像說Objective CPHP Python…等
    首先在AndroidManifest.xml 加入:
    <uses-permission android:name="android.permission.INTERNET"/>開放網路的權限



    接下來撰寫程式邏輯Java檔部分如下圖新增主要的程式碼,接下來撰寫程式邏輯Java檔部分如下圖新增主要的程式碼,首先建立連線,連結至 Google Translate API JSON資料並回傳至手機。


    以下為執行結果圖,輸入android按下翻譯Button回傳翻譯結果

    完整的Project存在Dropbox中,有興趣者可以下載

    情境感知 (Context-Awareness) 應用 2

    情境感知(Context-Awareness) 應用,

    之前說到 醫療照護系統 方面的應用於 情境感知(Context-Awareness) 應用

    這次說明,情境感知(Context-Awareness) 應用 於 智慧型手機,

    現在幾乎人手一支智慧型手機,

    智慧型手機 可以藉由自身的感測器去收集和捕獲用戶的情況,

    來達到對使用者的服務,

    例如透過GPS來收集資訊,定位使用者在何處,

    GPS座標的應用加上感知也可以判斷A點到B點之間的距離多少,

    只要感知取得數據再透過歐式空間的距離公式,

    就可以提供使用者,A點到B點的距離,

    以前透過GPS跟慣性感測器判斷,

    你目前的狀態,

    比如說,慣性感測器感測你目前的速度多少,

    或是 得知你是的狀態是否在上網,

    來得知用戶在靜態或動態,

    得知的速度可以做數據分類,讓感知可以依據收集的資訊,

    來做一個動態的判斷,步行的速度,跑步的速度,行車的速度。


    參考論文:
    LifeMap_A Smartphone-Based Context Provider for Location-Based Services