2014年8月3日 星期日

[JAVA] 解決 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

[symptom]

最近工作關係,需要串接財政部的發票明細API, domain為 https://www.einvoice.nat.gov.tw/
使用 HttpClient 執行 HttpGet方法時,
卻發生 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 的exception

[root cause]

查了一下,原因是要進行request的url使用https加密連線方法,
但因為java client使用的certification資訊太舊,不認得較新的SSL認證,
所以便發生了SSLPeer Unverified的問題

[solution]

此時,需要更新client端的SSL certification資訊。
下面簡單說明一下步驟:

1. 先開啟一個瀏覽器(我用的是chrome),連至目標的url, 然後透過瀏覽器把這個網站的SSL認識資訊匯出, 獲得一個 sitename.cer 檔, ,


2. 開始 cmd 工具,到你的JRE 環境中 lib\security\ 資料夾底下, 如 C:\Program File\JAVA\jre6\lib\security
在這裡應該會看到一個 cacerts 的檔案, 它就是我們需要更新的憑證檔

3. 執行

keytool -import -keystore cacerts -alias <any Unique Name> -file <filepath>\sitename.cer" -storepass changeit

其中, 以下請改成自己的設定:
<any Unique Name>為這個新增憑證的別名, 不能與其他別名重覆,
<filepath> 為剛剛你匯出sitename.cer 所儲存的路徑

4. 指令會請你確認是否要加入此憑證資訊, 輸入 "y" 進行確認
然後你就會看到 "Certificate was added to keystore" 的資訊, 表示成功

5. 再次執行java的部份,應該就可以成功通過https的連線了

※ 若仍然無法解決 SSLPeerUnverifiedException,代表憑證檔可能沒有成功更新,請檢查一下你的java runtime是否就是你剛剛所更新的jre版本,像我自己就有jre6, jre7, jdk等幾個環境。


[refernece]

http://coldfusion-tip.blogspot.tw/2012/04/javaxnetsslsslpeerunverifiedexception.html

2013年4月24日 星期三

2013年1月8日 星期二

javascript 效能評測

SunSpider 是一個線上評測 Javascript 效能的benchmark test.
按照官方說明,SunSpider只是純粹評測Javascript的核心性能,並不包括DOM或其他browser相關的API:
SunSpider官方網站
http://www.webkit.org/perf/sunspider/sunspider.html


在Javascript 中,有一項JIT(Just in time)的技術,是一項可以加快javascript運作速度的編譯技術,JIT的啟用能夠提高javascript的performance.
refer:
http://blog.csdn.net/wozaiwogu/article/details/7865650
http://ccckmit.wikidot.com/cd:v8

2012年6月11日 星期一

[Android] framework 不支援的streaming mime-type

某些mime-type檔案在網路上可以直接取得,
透過browser點擊網路上的檔案,可以直接存取這些檔案

當檔案是影音檔時,browser會發送intent出去問有哪些AP支援這種mime-type
讓user選擇要download或是streaming play

不過android framework中的streaming player有以下的mime-type不支援

.midi
.mid
Android使用來支援midi的Synthesizer為Sonivox,
但根據Sonivox EAS(Embedded Audio Synthesis) API所載,卻沒有支援streaming play


refer:
http://blog.umito.nl/index.php/2010/05/07/midi-on-android/
http://code.google.com/p/android/issues/detail?id=8201


.imy


2012年6月6日 星期三

[XHTML] XHTML well-form


為解決大部份網頁都是含有錯誤的語法問題
W3C於1998年重組HTML小組,以XML的形式去重新描述HTML,而沒有加入任何新元素。
這套規格後來便成為了“XHTML1.0”

使用XHTML的好處,在於可以用XML的well-form形式去明確定立元素間的關係
與HTML4.0區別開來
而XHTML也嚴謹地定義了一些語法
如:

  1. 所有element和property皆使用小寫
  2. 所有property的value用引號來包覆
  3. 所有非空標籤都需要有結束的標籤
  4. property和value都不能簡化,使用property就需要指定其value
  5. 空的element也要有結束標籤,不然就是要使用“ />”


<div name="main"><br /><hr /></div>



今天遇到一個問題,使用chrome瀏覽 一個網頁時這個網址時,會發生error
Below is a rendering of the page up to the first error.

查看這個網頁的source code,有一行這樣寫著
<tr><td align="center" bgcolor="#FFCC00">--> .jpg <--</td></tr>


有沒有注意到竟然有“-->” 和"<--"
就是有"<" less than小於號和 “>”greater than大於號,
這樣的情況可能會導致兩個XHTML會認為是語法錯誤的問題

在W3C對XML的DTD文件中,針對特殊字元(special characters)有定義其該使用的html字串,如 "<"小於號就要使用 "&#38;#60;" 這樣的一串
refer: http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_Special_characters

另一個問題則是,根據上一點,XHTML parser就會把">" "<"視為是元素的標籤號,如若把那些小破折號都拿掉,變成 “ >.jpg< ”的話,更加會造成破壞well-form格式,一對小於大於號裡,含有其他的小於大於號,"  <> ><<> "
當然在parse XML的過程中就會出錯

由於HTML中沒有明確限制一個開標籤就要對應一個閉標籤,所以html在遇到這類網頁時,大部份情況下還是可以成功render的
當然,安全起見,在編寫網頁時,特殊符號就應該用html字串來取代。

另外在Android device上測試過
從ICS(Android4.0) 之後的Browser就會顯示有錯誤
而ICS之前的版本則可以正常顯示出來
這說明了一點, Android ICS使用了XML parser來處理XHTML網頁
而之前的版本則用HTML的parser來處理,以HTML parser一向高寬容性作風,就不會那麼容易出錯了.

2012年5月29日 星期二

[HTML5]檢測 HTML5 的功能 - Modernizr

HTML5已經是現行網頁開發的趨勢,雖然各大主流的Browser都已經支援大部份的HTML5功能,但是各家Browser支援程度也有所差異,亦有鑒於還有相當部份的user仍在使用老舊的Browser(如IE 6,7等)。
網頁開發者在開發上,不管是要做到相容各個版本,還是只是簡單的告訴user“你的瀏覽器並不支援XXX功能”,都需要進行支援度的判斷

因為HTML5並不是一種獨立的功能或是語言,而是很多獨立功能的集合,所以我們需要判斷的,並不是這個Browser有沒有支援HTML5,而只是需要判斷他有沒有支援HTML5某個功能而已。

在這裡介紹一個javascript的plugin - Modernizr
Modernizr是一個可以測試HTML5 函式庫的opensource。可檢查許多針對HTML5和CSS3功能的支援。
請自行下載modernizr.min.js,引用到自己的網頁內。


當Modernizr執行時,會建立一個static object - Modernizr,透過直接呼叫Modernizr內的object來產生判斷是否有支援某個功能的boolean值。


Canvas

HTML5中透過<canvas>元素,可使用javascript進行繪圖,要知道user的瀏覽器有沒有支援<canvas>,我們可以直接使用:
if(Modernizr.canvas){
  //support!
  // draw something
}else{
  // not support
  alert("你的瀏覽器不支援canvas元素");
}


Canvas Text

有些Browser雖然支援<canvas>,但卻不支援在canvas中繪製文字,這是因為canvas text是在後期才加入的API,故有些早期有支援canvas的browser後來卻沒有引入。
檢查canvas text,我們可以使用:
if(Modernizr.canvastext){
  //support!
  // draw some text
}else{
  // not support
  alert("你的瀏覽器不支援canvas中繪製文字");
}

Video

在HTML5中,不用透過如window media player或flash等的plugin,只要使用<video>元素,指定其src,就可以直接播放影片,相當方便。要檢查有否支援<video>,可使用:



另外,雖然某些browser有支援影片<video>元素,但未必每種影片的格式都會支援,這時便需要判斷browser是否有支援某種codec,而這個檢查,Modernizr也有提供相對的功能




Local Storage

使用local storage,讓用戶端的資料能夠儲存於local端,不用受限於cookies,也可節省時間和頻寬去和server做溝通,使用HTML5 storage,用javascript就可以直接存取儲存起來的data了。檢查是否有支援Local Storage功能,可使用:



Web Workers

Web workers就是為browser提供可在background執行javascript的方法。若有寫過java的朋友,web workers就相等於 thread(執行緒)的作用。
有了background threads,在user操作UI的時候,就可以同時在背後執行一些運算,而又不會讓user的介面操作卡在某個運算的過程中,諸如複雜的數學運算,網路request,data access等,都會是一些耗時的動作,讓這些耗時的動作在background執行,便不會影響user在介面操作上的流暢度。
對於Web Workers的支援,可用:



Application Cache

若果有些網頁的操作不用隨時都使用到網路上最近的資料,像是網路小說,文件,影片等,基本上如果下載完之後,就可以在local site去閱讀或使用的話,可以考慮使用application cache來處理
當browser瀏覽有支援application cache的網站時,一旦browser下載了所有必要的檔案後,即使並未接上網路,我們也可以瀏覽這網站。在離線狀態所做的改變,變網路恢復時也可以被上傳到server裡,gmail離線版就是使用了這個功能。
檢查Application cache:





以下的一些功能比較簡單,我就直接介紹用法了

Geolocation 定位

Modernizr.geolocation


Input Type 表單輸入

HTML5中新增了十幾種表單中的類型,以方便進行某些情況的輸入
像是

  • search
  • number
  • range
  • color
  • tel
  • url
  • email
  • date
  • month
  • week
  • time
  • datetime
  • datetime-local


Modernizr.inputtypes.search

Modernizr.inputtypes.number

Modernizr.inputtypes.range

...
...


Placeholder Text

當輸入欄是空白或不是被focus的時候,會預設在輸入欄中的文字,通常是用來當輸入的說明用的


Modernizr.input.placeholder



Auto Focus

使用autofocus,就可以在一個網頁載入後指定滑鼠遊標直接跳到哪個input輸入欄中,就像到Google首頁時,會自動幫你把遊標跳到search bar裡。

Modernizr.input.autofocus

P.S. 以上所有的用到的Modernizr中的方法都是回傳boolean值
有支援 - true,
沒支援 - false
還要注意的是,像是localstorage, applicationcache,等的複合字,必為小寫,與DOM的寫法不一樣。





以上資料由我自己閱讀 O'Reilly的<<HTML5 建置與執行>> 一書後整理出來,也有引用到當中一些句子說明。

2012年5月22日 星期二

[Webkit] CSS支援能力整理

針對各家的Browser,CSS的支援似乎是存在於其中的最大差異
很多web designer都需要針對不同的瀏覽器來最佳化CSS,來讓網頁能在各個瀏覽器上有最好的呈現效果。

這篇文章旨在整理一些沒有被廣泛支援的style ,能有個了解。

首先,針對Webkit
可以在 Webkit debug的網站上看到現時你正在使用的瀏覽器的webkit 版本
因為某些CSS或是property都是在某個版本之後才開始支援,
先清楚webkit的版本,很重要。



<marquee behavior="alternate" >

marquee,跑馬燈,這個tag並不是W3C所定義的,是IE早期自己發展的
因為歷史悠久,各家的瀏覽器也會支援
refer: http://msdn.microsoft.com/en-us/library/ms533502(v=VS.85).aspx

behavior 是指定其多動的行為
有{scroll | slide | alternate}這三種,沒有設置的話,default 為scroll

今天遇到了一個問題

<marquee behavior='alternate'>來回移動</marquee>

這樣的一句,可以正常顯示的話,
應該是會有"來回移動"這四個字在螢幕上左右來回

來回移動

而問題就是在Android4.0 的Browser上面卻沒有反應
當behavior為scroll / slide時都沒有問題,就只有alternate沒反應

經自己多方測試後,發現是Webkit 535之後的版本才有支援
而Android4.0上的Webkit是534.3,所以沒支援。

refer:
非IE瀏覽器對marquee的支援:
http://www.hoxing.net/Knowledge/Website/20111103326.html
mozilla: https://developer.mozilla.org/en/HTML/Element/marquee
safari: https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariHTMLRef/Articles/Attributes.html



Powered By Blogger

Label Cloud

2009 (1) 不能連localhost (1) 內嵌音訊 (1) 求職 (1) 面試 (1) 音樂 (1) 動畫師 (1) 帳號管理 (1) 排程 (1) 畢展 (1) 創意市集 (1) 惡意程式 (1) 電腦動畫 (1) 權限管理 (1) adobe (1) android (4) animation (1) animator (1) apache (3) art (5) art taipei 2008 (1) audio (2) bbs (1) birthday (1) black and white (1) browser (2) career (2) certification (1) cgw (1) cinematography (1) code (3) Collie (1) color (2) command (16) competition (1) computer science (3) connection (1) cover (1) crafyJS (1) creative (1) CSS (1) DBN (2) design (7) developer (1) display (1) drawing (1) eclipse (3) embed (1) engine (1) EntityJS (1) exception (1) exhibition (1) flower (1) frame (1) freebsd (11) french (1) friends (3) function (1) game (1) google (2) graphic (3) html (2) HTML5 (1) https (1) illustrator (1) image processing (1) interactive storytelling (1) internet (3) interview (1) introduce (1) ip (1) japan (1) java (4) javascript (3) JIT (1) jmonkey (1) job (1) jquery (1) LAMP (1) LimeJS (1) linux (8) liquid galaxy (1) ListView (1) localhost (1) log (1) mail (1) marquee (1) midi (1) mime-type (1) mis (1) MIT (2) mo-cap (1) mobile (1) Modernizr (1) motion capture (1) movie (1) music (3) narrative (2) NCCU (3) news (1) note (10) originality (1) otaku (1) painting (4) performance (1) photography (2) photoshop (7) php (1) player modelling (1) poster (1) postfix (1) programming (5) QuarkJS (1) resource (1) schema (1) scroll (1) self aware (1) semantic (1) server (1) share (1) sketch (2) software (4) solve (2) Sonivox (1) speaking (1) ssl (1) SSLPeerUnverifiedException (1) streaming (1) Subversion (1) sunspider (1) SVN (3) svn server (1) system (1) taipei (1) test (1) tfam (1) tool (1) TortoiseSVN (1) tutor (1) ubuntu (3) update (1) uri (1) video (1) vim (1) w3c (1) wap wcss css css2.0 (1) web (8) WebGL (1) webkit (2) well-form (1) wiimote (1) wiiusej (1) workshop (1) xhtml (1) xml (2)