2011年9月30日 星期五

適應生活而朝向什麼的改變?

最近公務人員放榜了,幾家歡喜幾家愁,讓我不禁問自己『是不是應該考慮一下公務員這個職業』。

我:你覺得我應該去準備公務員嗎?
嘉:嗯?
我:但是我覺得那好像不太適合我去做,我能忍受在公文裡面翻來覆去嗎?
嘉:如果去做了,應該就可以慢慢適應吧!?
我:我能嗎?這好像跟我想做的事情相左耶。
嘉:你也適應現在的工作了呀!
我:我有適應嗎?我還是覺得很多事情很鳥。
嘉:但是以前比較氣憤的口氣,現在只是在敘述而已。
我:所以在情緒上已經默默接受嗎?
嘉:很多事情聽起來不合理,你也說的很平淡。
我:嗯。

一個人在某個環境待久了,似乎都還是會產生一些改變,不管是能力、言語、思想、體型,或最重要的心態;大概兩年前一位年輕人說:『我覺得這樣工作會沒有熱情』,一個老一輩的工程師回他『我做這幾十年來每天對工作都充滿熱情』,我想這句為了場面的假話,不知道有多少人在心裡竊笑;雖然我也不過工作3年半多,但我認識『人』這種生物也準備進入第30個年頭,如果『熱情』就是他傳遞出來的感覺,我很希望熱情消磨越快越好。

我想所謂的『熱情』當然不是該位資深工程師心中所充滿的東西,我們明白那是對事情的一種執著,一種信念,一種堅持的能量,而絕大部分的『工作』會慢慢地消磨這種能量,接著我們會說:『工作』給了我一個月固定的錢,支付著我的房貸、我的車貸、小孩的教育費、每年出國的旅遊基金(雖然我一樣都沒有),而我們越常對於工作抱怨能量下降的就越快,而能量越低就對工作的抱怨越多,惡性循環之下工作馬上就變成『真的只是工作』;接著我們會聽到有些人稱這個程序叫做『工作的歷練』,每一個剛進社會的年輕人都是一個帶有菱角的石頭,他們終究在社會這個泥漿裡越磨越光滑,然後我們會稱這件事情叫做『長大了』。

所以我聽到『你適應了』這句話,心中的感受不是升級,而是一種自我墮落的感覺,會不會在五、六年後,我也會昧著良心說出一些鬼話?就因為我又磨到更適應了?其實很多對於『長大』與『適應』的定義,包含了很多看更淡、計較更少、一種人生如浮雲的感覺,除了名與利,甚至包含『熱情』與『希望』。

我真的很希望對於『工作』除了金錢的獲得以外,有著更多對於自己或團隊『成果』的期待,是一種秀出來心中會微微興奮,一種要讓對方驚艷的感覺,而不是去比遮臉的速度。

總之,我從10分憤世忌俗的年輕人變成了9.9分,但我很希望未來的歲月可以有『說實話的勇氣』、『無奈中保有堅持』、『開創的熱情』與『平靜的心』。

最後願我未來告訴小孩的道理也一直落實在自己身上,而不是說出一種自己未達成的遺憾。

SQL 2008_令人無力的評估版到期

如果:

1. 你灌了SQL 2008評估版。

2. 你在180天看到到期訊息,才想起來這件事情。

3. 你怎麼利用維護升級都沒辦法解決SSMS沒辦法開啟的問題。

那麼我勸你立刻進行我最後的做法:

1. 備份你的資料庫檔案。

2. 移除你的SQL 2008。

3. 重新安裝他。

這時你需要一個重要的語法→如何移除SQL 2008(官方參考)

1. 開啟命令提示 cmd

2. 輸入:CD %ProgramFiles%\Microsoft SQL Server\100\Setup Bootstrap\Release

3. 輸入:setup.exe /ACTION =uninstall /FEATURES = Feature_List /INSTANCENAME = MSSQLSERVER

若要安裝,請參考→SQL2008R2完整安裝攻略

註:聽說未到期前可正常利用維護升級方式將其改為正版,但過期後只能利用重灌的方式,但是我也不能測試,我想如果你看到這篇文章,那你也不能測試了。如果你設定還記得了話,重灌到系統恢復只要30-40分。good luck

2011年9月28日 星期三

asp.net_openxml 換行標籤

前幾天發了一篇『利用open xml於word套版列印』,同事在使用時碰到一個問題:雖然資料庫有記載換行字元,但於word檢視時,卻沒有換行的效果。

之前曾經發過一篇『textbox→SQL→Label(換行符號處理)』來處理換行的問題,原理是找到換行字元將其置換成HTML的換行標籤(br標籤)

所以相同的道理是,在open xml想要做出換行的效果,就必須找到open xml的換行標籤。

答案:『<w:br />』

string changeline = "<w:br />";
ValueString.Replace("\r\n", changeline));

2011年9月27日 星期二

Android學習_getWritableDatabase called recursively.

如果有在Android裡面使用SQLite,都會知道要複寫兩個方法,onCreate與onUpgrade,若是希望程式安裝時,資料庫裡面就已經有一些預設值,那麼我們就會想在onCreate裡面insert需要的資料;但這時很有可能會碰到一個錯誤訊息:java.lang.IllegalStateException: getWritableDatabase called recursively.。

原因:在onCreate若要取得SQLiteDatabase的不能使用getWritableDatabase的方法。

解法:觀察onCreate方法中,已經預設傳入SQLiteDatabase,所以在onCreate方法內可以直接使用,而不需要另外取得。

原本的Insert

public long insert(String table, String fields[], String values[])
{
SQLiteDatabase db = this.getWritableDatabase();
/* 將新增的值放入ContentValues */
ContentValues cv = new ContentValues();
for (int i = 0; i < fields.length; i++)
{
cv.put(fields[i], values[i]);
}
return db.insert(table, null, cv);
}

於onCreate中使用的Insert

public long insertDefault(SQLiteDatabase db,String table, String fields[], String values[])
{
ContentValues cv = new ContentValues();
for (int i = 0; i < fields.length; i++)
{
cv.put(fields[i], values[i]);
}
return db.insert(table, null, cv);
}


差別也就只在於SQLiteDatabase的取得。

Android學習_uri轉byte

在進行圖片的處理時,常常會遇到需要將手機內圖片(照片)轉成byte再傳出去(例如facebook的圖片上傳)。

步驟:
1. 將uri傳成inputstream

ContentResolver resolver = getContentResolver();
resolver.openInputStream(uri);


*20120604補充第一步驟程式碼:
byte[] buffer;
ContentResolver resolver = getContentResolver();
buffer = readStream(resolver.openInputStream(Uri.parse(Picuri.toString())));


2. 將inputstream轉成byte[]

public static byte[] readStream(InputStream inStream) throws Exception {
byte[] buffer = new byte[1024];
int len = -1;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();
outStream.close();
inStream.close();
return data;
}


接著,就可以將byte[]擺放傳入自己或別人的方法中,完成圖片的傳遞。

2011年9月24日 星期六

Android小品_Ola Account

說也奇怪,最近回家打開電視,不是理財節目就是政論節目,『夢想街57號』是我比較愛'聽'的節目,裡面的阿娟將許多理財投資觀念用很淺顯易懂的方式闡述,但其實講來講去最根本的當然就是'開源節流';說到開源大家都有很多很多的方式,可以買股票、買基金、談加薪、換工作、兼小差、嫁個有錢人,但節流第一步則不是學會怎麼節省,而是先瞭解自己的現金流,所謂『瞭解現金流』其實也就是記帳。

遙想當年我還在宜蘭打籃球,研究室打電動(?)的時候,不管是用小本子或是excel,都還有一個很好的記帳習慣,但真正開始工作以後,反而停止了這個好習慣;前一陣子在很多廣告牆與公車上有一句曝光率很高的廣告詞『未來的你會感謝現在的你』,所以也讓29.8歲的我想到另一個廣告詞『30歲了,還在這裡做什麼?』。

總之,開源還要想辦法,節流總是可以做了,那記帳就是第一步!

那身為一個半路出家、底子不穩、腦袋很小、很想在生活中使用自己程式的工程師,我馬上就決定要寫自己的記帳程式。
-----------------------------------------------------------------------------
但是記帳本說:你太小看我了;所以剛開始寫沒多久就後悔了,記帳程式可以擴充的範圍實在太廣,想要寫出一個"完善的",似乎也不是一時半刻可以完成,身為一個沒什麼毅力跟腦力的29.8歲窮鬼,實在是不想等到40歲才開始記帳,所以在時程不變、人力不變、品質也不想變的情況下,只好降低程式規模,做人要果決,就在資料庫ola、程式ola、介面ola與計畫經理ola四個人討論的結果,決定做出一個世界超級無敵陽春的......記支出本。

需要的功能完全針對客戶ola的需求:
1. 要可以記下項目跟金錢。
2. 可以修改記下的內容。
3. 一進程式就可以看到本月與本日金額
4. 可以查詢歷史資料
5. 含有一些簡單的統計

所以,登~登~登~登!

1. 一進到畫面有本月份的食、衣、住、行、育、樂、其他的金額統計,接著是本日的各項花費列表,右下角是本月與本日花費的總計。

2. 按下『又花錢』按鈕會跳出輸入對話框,可以輸入項目、金額、日期、時間跟備註。

3. 點選列表會跳出修改的對話框,可以對所有項目進行修改。

4. 長按列表項目會跳出刪除項目的對話框。

5. 點選手機選單按鍵,會跳出歷史與匯出/入的項目。

6. 點選『歷史』項目,會跳到歷史資料頁面。上方為年、月、日的切換選單,若選年則會列出該年總花費、接著是顯示各項目花費、再下面是以月區分的總計;右下角可以切換查詢時間點,若是輸入2011年9月24日,則按下"年"時出現2011年總計、按下"月"出現2011年9月總計、按下"日"則出現該日期各細項。

7. 按下"月"顯示該月各天總計。(點選列表各天可切換到該天項目列表)

8. 按下"日"顯示該天各細項。(點選細項可進入修改頁面)

9. 因為一邊寫一邊用,怕會不小心把資料刪掉,所以增加匯出/入功能。(匯出JSON格式)


最後,許個願,希望這次記帳不要停下來!加油!

2011年9月23日 星期五

asp.net_利用open xml於word套版列印

在每一個單位,每一個處室,不管是公家還是私人,每一個有人在的地方,通常都會有一個需求:我要列印資料。

這時候我們應該可能也許,就會把資料匯成xls、doc、txt、csv,並且跟他說:印吧!

接著,他會說:我要按照我的格式(中式表格:A儲存格跟B左右合併、C跟D上下合併、標題字大之類的),那麼我們就會依照這個格式做一個相同的html檔案,把從資料庫撈出來的資料放到該放的位置,接著說:棒吧!按照你格式的表格。

接著,某些"精實的"外星人就會說:你這....感覺不是word,就是跟我原本的表格長得不太一樣,不能做一樣嗎?這樣我很困擾耶。

好!一般如我的工程師這時候就會放空,然後說服他:你看word跟我的html用word開根本就一模一樣、一模一樣、一模一樣(晃晃晃)

總之,以往在處理類似這樣的功能,都需要花費很大的力氣才能完成一張,有時候表格很複雜的時候更是讓人想要見見原本設計表格的人(?),最近同事又遇到類似的狀況,需求的單位"一定要"作出"一模一樣"的表格列印功能。

最後同事給我三個關鍵字:有空嗎、黑暗執行緒、套版列印跟一個網址
----------------------------------------------------------------

依照黑大的相關文章,也試做了一下整個流程,我個人是覺得效果非常的好,好到我覺得我以前是呆子。

觀念:office2007以後使用標準的openxml作為檔案的定義方式,所以我們可以藉由修改xml的方式來置換已經於word裡面的文字。所以我們可以做好樣板→置換文字→下載檔案的方式來完成套版列印的功能。

流程:
1. 下載需要的sdk(Open XML SDK 2.0 for Microsoft Office)
進到下載頁面以後,會看到兩個可以下載的項目(OpenXMLSDKTool.msi與OpenXMLSDKv2.msi),OpenXMLSDKv2是程式開發所需要使用的SDK,OpenXMLSDKTool則是觀看openxml的工具。


2. 安裝剛剛所下載的兩個msi檔案。

3. 開啟一個專案檔(asp.net),並將需要的dll複製到bin資料夾。
A. DocumentFormat.OpenXml.dll:這個檔案為OpenXMLSDKv2所附的,位置在C:\Program Files (x86)\Open XML SDK\V2.0\lib。
B. WindowsBase.dll:這個為framework原本就有的檔案,位置在C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0。

4. 準備一個docx的樣版(上面有提到office2007才更改為openxml的方式,所以該方法僅適用於docx檔案)。
這個樣板的範例是模仿黑大的方式,需要置換的內容利用"[$$]"包起來,但實際上這是一個提供程式辨別的代號,如果想要使用別種符號定義也可以。

5. 撰寫程式碼
A. 將要放入樣板的資料以Dictionary包裝,比如說我要放入四個資訊:

Dictionary<string, string> dataObject = new Dictionary<string, string>();
dataObject.Add("Name","Ola");
dataObject.Add("Tel", "123");
dataObject.Add("Address", "台北市");
dataObject.Add("Mail", "wangshifu1220@gmail.com");


B. 準備兩個路徑(一個為樣板的原始路徑、另一個為填寫內容後檔案的路徑)

C.置換openxml的程式碼(參考黑大文章)

public static byte[] MakeDocx(string tempFile, string templateFile, Dictionary dct)
{
File.Copy(templateFile, tempFile);
using (WordprocessingDocument wd = WordprocessingDocument.Open(tempFile, true))
{ parse(wd.MainDocumentPart, dct);}
}

private static void parse(OpenXmlPart oxp, Dictionary<string, string> dct)
{
string xmlString = null;
using (StreamReader sr = new StreamReader(oxp.GetStream()))
{ xmlString = sr.ReadToEnd(); }
foreach (string key in dct.Keys)
{ xmlString = xmlString.Replace("[$" + key + "$]", dct[key]);}
using (StreamWriter sw = new StreamWriter(oxp.GetStream(FileMode.Create)))
{ sw.Write(xmlString); }
}

整個道理就是程式在MakeDocx先複製一份樣板檔案,然後讀取WordprocessingDocument的內容,並且交給parse的函式;而在parse函式內將該內容以StreamReader.ReadToEnd()的方式讀取出來,並且去尋找出文件內有[$$]的地方,置換成我們預先儲存在Dictionary的內容。

所以上面[$Name$]的部分就會被置換成ola。

-----------------------------------------------------
依照上述的步驟我們就可以很方便的先處理樣板的docx,並且用置換字串的方式動態改變內容,再將完成的檔案讓使用者下載,來完成一個"完全一模一樣格式"的匯出或列印功能。

注意:在實作過程中,有可能會發生文字無法置換的情況,原因是在進行樣板docx設計時,有可能因為我們的操作,而讓辨識的內容(指文中的[$$])間存在了很多不應該出現標籤,而導致程式無法辨識,若要確認是否因為該原因可以利用Open XML SDK 2.0 Productivity Tool(OpenXMLSDKTool.msi安裝後)來開啟docx檔,即可觀看openxml的內容,用以確認。

2011年9月22日 星期四

Android學習_使用facebook sdk_Part3上傳照片

1. 完成開發facebook相關APP的準備工作
2. 將"文字訊息"貼上塗鴉牆

大部分開發者下一步就是希望可以上傳圖片。

可以先看一下之前傳文字到塗鴉牆的語法:

facebook.request("/me/feed", params, "POST");

第一個參數是要傳到的位置(/me/feed代表塗鴉牆)
第二個參數是傳遞的內容(使用putString方法放入)
第三個參數是傳遞的方法

好,由這邊可以知道要上傳圖片勢必要先找到放置的位置與傳遞的內容;而圖片的放置位置對於facebook來說就是"相簿",而在網路上傳遞圖片的內容當然就是Stream一類。

所以我們要找到上傳的位置,與將圖片塞入params(Bundle)的方法:
1. 上傳位置:如果你去開啟facebook的相簿,可以發現每一本相簿都有一個唯一的ID,而在facebook sdk裡面也當然就是以這個ID作為辨識的方式,所以位置是"/相簿ID/photos"。(相簿ID為15碼)
2. 傳遞內容:在Bundle裡面可以利用putByteArray將類似圖片的內容傳遞出去,所以不管我們要上傳的圖片來自於哪裡,都必須先將該圖片轉為byte[]的格式,再利用params.putByteArray("picture", buffer);的語法加入。

有了以上的各項資訊以後,我們還是不能把圖片正確的上傳,這是因為若是要上傳資訊到facebook就必須要有足夠的權限(當時貼上塗鴉牆的權限為publish_stream),而上傳圖片的權限為user_photos。

程式碼:
1. 加入適當的權限

private void facebookSetting(){
facebook.authorize(this, new String[] { "email","publish_stream", "read_stream","user_photos" },

new DialogListener() {
@Override
public void onComplete(Bundle values) {}

@Override
public void onFacebookError(FacebookError error) {}

@Override
public void onError(DialogError e) {}

@Override
public void onCancel() {}
}
);
}

2. 上傳圖片

public void postToWall_photos(String AlbumID ,String message , byte[] buffer) {
Bundle params = new Bundle();
params.putString("message", message);
try {
params.putByteArray("picture", buffer);
} catch (Exception e) {
e.printStackTrace();
}

try {
facebook.request("/" + AlbumID + "/photos", params, "POST");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

*注意:文字訊息規定於putString時,第一個參數帶"message";而圖片使用putByteArray的時候第一個參數帶"picture"。

*提醒:圖片不管是手機內的資源(uri),即時畫出來的圖片(Bitmap)或是一個Stream類的東西,都必須先轉換成byte[],才符合上傳的的格式。

*將uri轉byte[]請參考

如果因為本篇完成上傳圖片,請留:WOW!有圖有真相。

2011年9月15日 星期四

Android學習_GridView的使用

在使用者介面的安排上,我們常常會使用ListView來展示多組資料,就像下圖的感覺:

但有時候,我們要呈現的項目並不是這麼的寬,可能只是一些簡單的文字或是小圖片,而我們希望他們以格子的方式排列,這時候通常就會想到GridView這類的控制項。

之前操作ListView時,通常都會先定義一個表示"每一列"的layout檔案,來產生出不同風格的列表樣式;在GridView也是一樣,我們可以先定義一個layout來表示"每一格"的樣式:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<TextView
android:id="@+id/lab_MItemType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
/>
<TextView
android:id="@+id/lab_MoneyBroupType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
/>
</LinearLayout>

上面的程式碼表示呈現出GridView中的每一格都有兩個TextView可以放值,而且兩個TextView是呈現垂直排列。

除了定義自己的layout以外,我們必須在要呈現出GridView的Activity的layout上擺上一個GridView標籤:

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview_type"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:numColumns="7"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:columnWidth="90dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>

有幾個GridView獨特的變數紀錄一下
1. android:numColumns:表示每一橫列要展示的個數(若設為auto_fit,似乎就是一行三個)
2. android:verticalSpacing:行跟行中間的間距
3. android:horizontalSpacing:列跟列中間的間距
4. android:columnWidth:每一格的寬度
5. android:stretchMode:格子拉伸模式(none:不要伸縮、spacingWidth:拉伸每列的間距、columnWidth:拉伸每格、spacingWidthUniform:均勻拉伸間距)

呈現出來的效果就像圖中紅框部分:


而要將資料放入的方法,還是應先將資料放入Adapter,再利用setAdapter的方法將資料置入。
可以參考以下三篇:
一維陣列:Android學習_ArrayAdapter的使用
自行處理的二維陣列:Android學習_SimpleAdapter的使用
Cursor的處理:Android學習_SimpleCursorAdapter的使用

Android學習_SimpleCursorAdapter的使用

之前有將一個已經組好的list倒入SimpleAdapter顯示,但我們使用SQLite時,若已經取得了一個Cursor,如果還要以上述的方式重新整理成一個list,就顯得有些不方便,所以我們需要的是另一個繼承於BaseAdapter的SimpleCursorAdapter。

首先,觀察一下SimpleCursorAdapter所需要的變數,共有五個:
1. Content(content)
2. Layout(int)
3. Cursor(Cursor)
4. from(String[])
5. to(int[])

由參數大致上就可以了解用法了,與其他的Adapter相同,我們可以先準備一個定義好的layout,並且將當中諸如textview等物件都放置好;並且以SQLite的Select方式獲得一個Cursor,最後將對應要顯示的內容以一個字串陣列的方式輸入from變數,程式碼如下:
1. 定義一個Layout(Android xml檔案)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<CheckedTextView android:id="@+id/listTextView1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="2px"
android:layout_height="2px"
android:textColor="@drawable/green"
android:visibility="invisible"
>
</CheckedTextView>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<CheckedTextView android:id="@+id/listTextView_t"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/Orange"
android:textSize="40px"
>
</CheckedTextView>

<CheckedTextView android:id="@+id/listTextView2"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/green"
android:textSize="40px"
>
</CheckedTextView>
</LinearLayout>

<CheckedTextView android:id="@+id/listTextView3"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/gray"
android:textSize="25px"
>
</CheckedTextView>

<CheckedTextView android:id="@+id/listTextView4"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/gray"
android:layout_marginRight="10px"
android:textSize="20px"
>
</CheckedTextView>

</LinearLayout>
</LinearLayout>

2. Java程式碼:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listview_mitem,
OnedayCursor, new String[] { "_id","item","money","datevlaue","type" }, new int[] {
R.id.listTextView1,R.id.listTextView2,R.id.listTextView3,R.id.listTextView4 ,R.id.listTextView_t});
RecordListView.setAdapter(adapter);

說明:
1. R.layout.listview_mitem為剛剛定義的layout
2. OnedayCursor為查詢出來的Cursor
3. new String[] { "_id","item","money","datevlaue","type" }為要顯示的欄位,必須要對應OnedayCursor查詢時所定義的欄位名稱。
4. new int[] {
R.id.listTextView1,R.id.listTextView2,R.id.listTextView3,R.id.listTextView4 ,R.id.listTextView_t}最後一個則是指上述欄位應擺放到的物件為何,也就是layout裡面放的物件。


如此,我們就可以很輕鬆的將Cursor的內容,利用ListView展示出來。

所以不管是
一維陣列:Android學習_ArrayAdapter的使用
自行處理的二維陣列:Android學習_SimpleAdapter的使用
Cursor的處理:Android學習_SimpleCursorAdapter的使用(也就是本篇)
我們都可以將各項資訊放置到希望的位置。

2011年9月11日 星期日

20110911_嘉嘉生日快樂頌

『30歲了,還在這裡做什麼?』....當然是,過生日!



當然,生日免不了的就是大餐、大餐與大餐。







前菜跟點心的特點就是,吃起來都很有層次,我跟嘉嘉都一值在驚呼中等待主菜的來臨,我們點了羊肉跟石斑魚,石斑魚就是一個很鮮的魚,並沒有很特別,但是.....那個羊肉,就在一口一口的驚呼中清光,我只能說吃真是人生中美好的一件事情。

最後,lao送新的口罩喔。

2011年9月3日 星期六

火源之界_拉格納羅斯 KO

就在悠閒的午後,11個宅宅在rc頻道裡面,把從火焰馬桶裡跑出來的『那個大螺絲』沖下去了。


感謝:阿龍、辰藍、飛魚、洛琪、kaka、飆魔、豪大、真影、辛苦加班的柚子、++與超人氣ola。

可以迎接快樂的中秋烤肉了~~~~

2011年9月1日 星期四

15個月的紀錄與分享

去年五月二十六號註冊了這個Blog,想要把一些存在電腦裡面頗久的筆記都轉移過來,經過熱血兩個多月也紀錄了一百餘篇,就在我一下懶惰一下熱血之下,文章數來到232篇,也慢慢變成自己在工作中其中一個資料查詢的來源;不知道這樣的一件事情還會持續多久?但『發文章』這件事情的確變成自己一個"維持"熱血的一個奇妙來源。

最近Android火熱,我也熱血的買了手機、熱血的亂玩一通、熱血的發了一堆不知所云的文章,最近甚至熱血的覺得可以分享了,雖然自不量力,但總覺得這件事情還是有這麼一點小小的意義,希望可以順利然後有點成效囉。

最後,僅以這篇慶祝首次、也可能是最後一次單月突破5000瀏覽次數。(賀)