這是個困擾很久的問題,毛巾用沒幾天後,就會開始有一股味道,用洗潔精去洗,卻越洗越黏,實在讓人受不了。
心理也很納悶,難道就只有我家會遇到這種問題嗎?於是就上網找一找,好多五花八門的說法,感覺好複雜,最後挑了一個最簡單的:放一些鹽和毛巾戳洗,再泡個幾分鐘,然後再戳洗,最後再用水沖乾淨,味道真的不見了。
閱讀全文...
Happy coding.
The secret to creativity is knowing how to hide your sources.— Albert Einstein
Good artists copy, great artists steal. – Pablo Picasso
2012年9月10日 星期一
2012年8月30日 星期四
還沒成為標準,就已經鬧分家的HTML5
原本在HTML5標準制定上合作的標準制定組織WHATWG和W3C 分手了。
WHATWG宣佈正在為HTML制定一個 living standard ,它將隨著新技術的加入而不斷進化,但也變得更複雜。
而 W3C 依舊採用傳統的方法來制定標準,將需要耗費許多時間來完成 HTML 標準訂定。
看起來不是個良性發展,因為以後開發者要討論時,要先確認是那個版本?
閱讀全文...
WHATWG宣佈正在為HTML制定一個 living standard ,它將隨著新技術的加入而不斷進化,但也變得更複雜。
而 W3C 依舊採用傳統的方法來制定標準,將需要耗費許多時間來完成 HTML 標準訂定。
看起來不是個良性發展,因為以後開發者要討論時,要先確認是那個版本?
閱讀全文...
2012年8月28日 星期二
NFC給人便利的同時,卻也隱藏著很大的危險
當下 NFC 技術的主要作用於快速的傳輸檔案、簽到、執行預定的動作,進行行動支付等等,可以說在很大程度上方便我們的生活,但往往也成為駭客想覬覦利用,入侵智慧手機的最佳途徑。
今年舉行的黑帽技術大會(Black Hat)上,來自安全諮詢公司(Accuvant)的首席顧問 Charlie Miller 發表了如何利用 NFC 技術以及智慧手機上相應了漏洞,完成對智慧手機的入侵攻擊。
第一個腳中了一箭的是 Android。Miller 通過使用一個定制的 NFC 標籤,讓 Android 手機與該標籤連接之後,便會向手機發送一段惡意代碼,讓手機打開惡意檔案或惡意的網頁,進而完全控制手機。目前大部分的 Android 手機上都有部分的 NFC 漏洞,並且在Android 4.0系統中,Google 還為具有 NFC 功能的手機添加了一項 Android Beam 功能。利用 NFC 漏洞以及 Android Beam 功能在接觸或者靠近 NFC 標籤時可以自動下載檔案或打開網頁鏈結。利用此一漏洞,便可以使用特製的 NFC 標籤,在沒有用戶進行任何操作以及未經用戶許可的情況下,打開手機流覽器,並且訪問惡意網頁。
另一個因 NFC 而腳上也中了一箭是 Nokia 推出的 N9Miller 表示利用 NFC 技術攻擊 N9 比 Android 更簡單。其中 N9 第一次通過 NFC 連接藍牙設備時完全不需要人工配備,這是最為危險的地方。
Miller 已經向 Google 和 Nokia 報告了相關問題。基本上這類問題應可以通過系統升級的方式解決,此外養成良好的軟體使用習慣更是杜絕駭客攻擊的最好方法。
閱讀全文...
今年舉行的黑帽技術大會(Black Hat)上,來自安全諮詢公司(Accuvant)的首席顧問 Charlie Miller 發表了如何利用 NFC 技術以及智慧手機上相應了漏洞,完成對智慧手機的入侵攻擊。
第一個腳中了一箭的是 Android。Miller 通過使用一個定制的 NFC 標籤,讓 Android 手機與該標籤連接之後,便會向手機發送一段惡意代碼,讓手機打開惡意檔案或惡意的網頁,進而完全控制手機。目前大部分的 Android 手機上都有部分的 NFC 漏洞,並且在Android 4.0系統中,Google 還為具有 NFC 功能的手機添加了一項 Android Beam 功能。利用 NFC 漏洞以及 Android Beam 功能在接觸或者靠近 NFC 標籤時可以自動下載檔案或打開網頁鏈結。利用此一漏洞,便可以使用特製的 NFC 標籤,在沒有用戶進行任何操作以及未經用戶許可的情況下,打開手機流覽器,並且訪問惡意網頁。
另一個因 NFC 而腳上也中了一箭是 Nokia 推出的 N9Miller 表示利用 NFC 技術攻擊 N9 比 Android 更簡單。其中 N9 第一次通過 NFC 連接藍牙設備時完全不需要人工配備,這是最為危險的地方。
Miller 已經向 Google 和 Nokia 報告了相關問題。基本上這類問題應可以通過系統升級的方式解決,此外養成良好的軟體使用習慣更是杜絕駭客攻擊的最好方法。
閱讀全文...
Java 7 漏洞危及 Mac 機用戶
根據 computerworld
的消息指出安全專家又發現新的 Java 危機,可能會危發許多 Mac 用戶了!
這次是從 Java 7 中找到的,此 Bug 可以透過 Browser 操控電腦。暫時尚未有 Patch 推出,但對 Mac OS X Lion 及 Mountain Lion 用戶可能影響比較少,因為自 Lion 起已經沒有內置 Java 於系統裡。
但是,Lion 之前的版本就要小心了!安全專家表示,現在最佳的防護方式是刪除 Java,等待修正版推出才重新安裝。
閱讀全文...
這次是從 Java 7 中找到的,此 Bug 可以透過 Browser 操控電腦。暫時尚未有 Patch 推出,但對 Mac OS X Lion 及 Mountain Lion 用戶可能影響比較少,因為自 Lion 起已經沒有內置 Java 於系統裡。
但是,Lion 之前的版本就要小心了!安全專家表示,現在最佳的防護方式是刪除 Java,等待修正版推出才重新安裝。
閱讀全文...
2012年8月23日 星期四
Read Excel(xls) with Java
這原本是客戶的需求,產出的文件希望從pdf改成excel,雖然最後需求被否決了,還是花了點時間了解一下,避免到時回馬槍,殺得措手不及。
沒想到用 java 還蠻幸福的,Apache 提供了一組 API 來操作微軟的文件,所以相關的 jar 檔和文件都可以在 官網 Apache POI - the Java API for Microsoft Documents 找到,這時最新版本是3.8。
接下來就來小小的測試一下:
仔細看了文件,不同的 excel 版本所需的 API 不同,Office 2007(+) 包含了 xml ,至於之前的版本使用OLE2,因此提供不同的 API 來處理不同版本的文件。
事前準備:Book1.xls 文件(即2007以前的版本),內容如下:
從官網下載下來那一整包裡面包含一堆jar檔,這次範例只用到poi-3.8-20120326.jar,記得將它加到CLASSPATH裡面。
如果沒有用IDE之類的編輯器,可以像我一樣,使用bat file,做些設定就可以編輯測試,這樣就不用每次測試個小程式,還要搬出每隻大怪獸。
build.bat 內容如下(請改成你自己使用的相關目錄):
run.bat 內容如下(請改成你自己使用的相關目錄):
ReadXls.java
編譯:
執行及結果:
後記:
無意間發現了API在取得Row個數時,提供了不同的method,getLastRowNum()和getPhysicalNumberOfRows(),這兩者差異,需要再仔細的研究研究。
閱讀全文...
沒想到用 java 還蠻幸福的,Apache 提供了一組 API 來操作微軟的文件,所以相關的 jar 檔和文件都可以在 官網 Apache POI - the Java API for Microsoft Documents 找到,這時最新版本是3.8。
接下來就來小小的測試一下:
仔細看了文件,不同的 excel 版本所需的 API 不同,Office 2007(+) 包含了 xml ,至於之前的版本使用OLE2,因此提供不同的 API 來處理不同版本的文件。
事前準備:Book1.xls 文件(即2007以前的版本),內容如下:

從官網下載下來那一整包裡面包含一堆jar檔,這次範例只用到poi-3.8-20120326.jar,記得將它加到CLASSPATH裡面。
如果沒有用IDE之類的編輯器,可以像我一樣,使用bat file,做些設定就可以編輯測試,這樣就不用每次測試個小程式,還要搬出每隻大怪獸。
build.bat 內容如下(請改成你自己使用的相關目錄):
@echo off
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_14
set PATH=%PATH%;%JAVA_HOME%\bin
set CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;D:\Study\java\apache\poi-3.8\poi-3.8-20120326.jar
echo ***** Compile %1.java Start *****
javac %1.java
pause
run.bat 內容如下(請改成你自己使用的相關目錄):
@echo off
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_14
set PATH=%PATH%;%JAVA_HOME%\bin
set CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;D:\Study\java\apache\poi-3.8\poi-3.8-20120326.jar
echo ***** Run %1 Start *****
java %1
ReadXls.java
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
public class ReadXls {
public static void main(String[] args) {
try {
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("Book1.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
System.out.println("LRM="+sheet.getLastRowNum());
System.out.println("PNOR="+sheet.getPhysicalNumberOfRows());
for (int idx=0; idx<sheet.getLastRowNum(); idx++) {
HSSFRow row = sheet.getRow(idx);
System.out.println(
String.format("%s\t%s\t%s\t",
row.getCell(0).toString(),
row.getCell(1).toString(),
row.getCell(2).toString()
)
);
}
System.out.println("============================================");
for (int idx=0; idx<sheet.getPhysicalNumberOfRows(); idx++) {
HSSFRow row = sheet.getRow(idx);
System.out.println(
String.format("%s\t%s\t%s\t",
row.getCell(0).toString(),
row.getCell(1).toString(),
row.getCell(2).toString()
)
);
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
編譯:
D:\Study\java\apache\poi-3.8\test>build.bat ReadXls
***** Compile ReadXls.java Start *****
請按任意鍵繼續 . . .
執行及結果:
D:\Study\java\apache\poi-3.8\test>run.bat ReadXls
***** Run ReadXls Start *****
LRM=3
PNOR=4
日期 姓名 電子信箱
21-八月-2012 Apple apple@test.com
19-八月-2012 Bill bill@test.com
============================================
日期 姓名 電子信箱
21-八月-2012 Apple apple@test.com
19-八月-2012 Bill bill@test.com
18-八月-2012 Cat cat@test.com
後記:
無意間發現了API在取得Row個數時,提供了不同的method,getLastRowNum()和getPhysicalNumberOfRows(),這兩者差異,需要再仔細的研究研究。
閱讀全文...
訂閱:
文章 (Atom)