跳到主要內容

發表文章

目前顯示的是 十月, 2012的文章

範例 - JavaScript 等比例縮小圖片

max-width、max-height以及這兩個的 min 版本是偶爾能在某些CSS中看到的屬性設定
不過因為IE不會辨識這些屬性,所以就直接寫JavaScript 調整圖片大小

var img = this.getElementsByTagName("img")[0];

img.onload = function () {
    var maxWidth = "300",
        maxHeight = "80";

    if (img.offsetHeight >= (maxHeight / maxWidth) * img.offsetWidth) {
        img.style.width = img.offsetWidth / img.offsetHeight * maxHeight + "px";
        img.style.height = maxHeight + "px";
    } else {
        img.style.height = img.offsetHeight / img.offsetWidth * maxHeight + "px";
        img.style.width = maxWidth + "px";
    }
};

Python 基礎資料結構介紹與常見BIF示範

參考頁面:[Python]如何在Python排序(Python Sorting)

Python保存資料使用的是類似陣列的清單結構
撰寫時型別由Python編譯器處理,不須再宣告型別
List能混合存入各類型的資料,如字串和數字混合放置,是最常被用到的資料結構
另外List中也能包含其他的list,就像多重陣列一樣
Tuple 資料結構類似 List,差別在於 List 內的資料是可變動的
Tuple 內指標指向的對象則不可變更

除了  List 和 Tuple 外
Python 另外還有 Dictionary 跟 Set 也是常用到的資料結構

Python 安裝配置與 Eclipse PyDev 設定

參考文章:Python: Eclipse+Pydev環境安裝教學
在 Windows 7 環境安裝 Python 2.6.6

本篇文章介紹 Python 3 在 Windows 環境的安裝配置過程
另外開發過程會以PyDev作為IDE

Java 數值轉換函式區別 - 以Integer.parseInt()、Integer.valueOf()為例

之前對於Java在數值轉換中為什麼會提供這兩種功能幾乎一樣的方法感到疑惑 看了原始碼就可以得到解答 public static Integer valueOf(String s) throws NumberFormatException {   return new Integer(parseInt(s, 10)); }
public static int parseInt(String s) throws NumberFormatException {   return parseInt(s,10); }
答案在於回傳型別的不同 parseInt()回傳 int 基本型別,valueOf()則回傳Integer型別 除了Integer外,其他的數值型別也有同樣的方法(Double、Float...etc)
在Java1.4版本以前這兩種方法有差異,但在後來版本裡因為有auto boxing機制而沒差了

JavaScript 少用全域變數的理由

在 JavaScript: The Good Parts 書中即有討論到這個議題(心得文連結)
容易造成變數名稱紊亂這點,可以盡量用匿名函式的寫法解決
在匿名函式中使用的變數名稱就不會跟全域變數產生衝突
但除了這個問題外,還有效能的考量
JavaScript搜尋變數的方式是 區域變數 -> 更上層的區域變數 -> .... -> 全域變數
若有常用到的全域變數,把它另存成區域變數對效能有很大的幫助

var data;

function displayData(){
//caching variables
  var _data = data;
  ....
}

另一個考量則是JavaScript的GC(Garbage Collection)機制
全域變數只有在離開頁面或重新載入時,才會將全域變數回收
就算指定全域變數為null值,如:data = null;
因為JavaScipt的null也是一種物件,所以這樣做並不會移除參考
而在區塊中(含function)宣告的變數則是區塊範圍結束後就被回收
所以多用區域變數就可以避免記憶體等資源被長時間占用

Excel 開啟產出的 .CSV檔為亂碼的解決方式

CSV檔為以逗號區隔欄位,用來儲存資料的純文字格式
指定了編碼的純文字格式應該是與亂碼無緣
但有時以微軟的Excel開啟.csv檔卻會發現內容為亂碼
發生的原因是微軟內部系統處理格式時會在開頭暗中寫入一串判別的字碼
而微軟系統就以文字檔案中是否含這串暗碼來判定要以UTF-8或ASCII格式讀取檔案

所以我們若要讓我們產出的CSV檔能正確的被Excel讀取,就要在檔案開頭加入暗碼


public CSVWriter(OutputStream out){
    this.out=out;

//Corresponding to Microsoft Excel, make file won't open with scrambles in Excel
    byte[] BOM_UTF8 = { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF };
    try {
out.write(BOM_UTF8);
    } catch (IOException e) {
System.err.println("BOM寫入CSV失敗");
    }
    ....
}

IE 中checkbox的checked=true不打勾問題解決

這個問題是發現在IE中會沒辦法看到checkbox的選項被打勾
檢查其屬性checked=true無誤

追查下發現原因為在該checkbox尚未被IE初始化(還沒加入DOM樹中)前設定此屬性

解決方法有兩種 -
1.將其加入DOM樹中再設定屬性
2.改為設定其 defaultChecked=true

Ajax跨網域議題 - 使用JSONP取得資料

參考文章:【原創】說說JSON和JSONP,也許你會豁然開朗,含jQuery用例
使用 JSONP 跨站請求

JSON為JavaScript中常用的資料交換格式
簡單、輕型的特性讓他成為Web 開發的首選,這裡就不多提了

而在Web開發的過程中,我們有時會遇到跨網域存取資料的需求
不管是基於分散流量需求,又或者是使用雲端提供業者的服務
使用第三方提供的服務、資源
甚至在同一個專案目錄底下開發的檔案也可能因啟用HTTPS而導致網域的不同

我們有這麼多會碰上跨網域的情況
但Browser 本身的安全機制會禁止我們直接從其他網域取得資料
瀏覽器唯一能從其他網域取得資源的機會就是JavaScript的匯入
也因此衍伸出一個非官方的解決方案,也就是JSONP
JSONP的全名是JSON with Padding
這項技巧本身與JSON沒有實際關係,僅僅是因為JSON是實作上最使用的格式

[轉載] POI設置EXCEL單元格格式為文本、小數、百分比、貨幣、日期、科學計數法和中文大寫

轉載來源


以下將要介紹的每一種都會用到這三行中的變量

            HSSFWorkbook demoWorkBook = new HSSFWorkbook();  
            HSSFSheet demoSheet = demoWorkBook.createSheet("The World's 500 Enterprises");  
            HSSFCell cell = demoSheet.createRow(0).createCell(0);

第一種:日期格式

            cell.setCellValue(new Date(2008,5,5));
//set date format
            HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
            HSSFDataFormat format= demoWorkBook.createDataFormat();
            cellStyle.setDataFormat(format.getFormat("yyyy年m月d日"));
            cell.setCellStyle(cellStyle);

第二種:保留兩位小數格式
            cell.setCellValue(1.2);
            HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
            cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
            cell.setCellStyle(cellStyle);

這裡與上面有所不同,用的是HSSFDataFormat.getBuiltinFormat()方法,之所以用這個,是因為0.00是Excel內嵌的格式

第三種:貨幣格式

            cell.setCellValue(20000);
            HSSFCellStyle cellS…