發表文章

目前顯示的是 10月, 2011的文章

奇怪的 Android SharedPreferences??

我一開始的寫法 SharedPreferences sp=this.getSharedPreferences("Info", MODE_PRIVATE); sp.edit().putString("Id", "GGYY"); sp.edit().commit(); String x= sp.getString("Id","YYGG"); 上面的寫法會導致一直無法寫入設定,所以x都是YYGG的預設值 一定要寫成 Editor e = sp.editor(); e.putString("Id", "GGYY"); e.commit(); String x= sp.getString("Id","YYGG"); 這樣 x 就會變成之前儲存的 GGYY,怎麼會這樣呢??

C#, Java, Objective-C (iOS 5以前) 三種語言的 Property與Field 介紹

C#, Java, Objective-C (iOS 5 以前 ) 的 Property 與 Field 介紹 很久以前就想寫這篇文章了,在我得知我都亂用 Objective-C 的 Property 之後 Orz 下面是我的心得,不一定正確 在物件導向的世界有兩個 Term , field 跟 property 。定義不知道是不是 field 只能給自己人使用,而 property 則是此物件要讓外部的 Class 存取的屬性。原本 property 的用意就是封裝,不讓外部的元件亂設定自己的屬性,或是你要設定之前,我再幫你檢查一次, ex: Id (身分證)  這個欄位,你可能就只能設定某些值~ 首先是 C# private string _Msg;    // 這是 field public string Msg        // 這是 property {      get                          //getter     {          return _Msg;      }      set                          //setter      {            _Msg = value;      } } 上面可以看到 property 的寫法很累綴,所以 C# 又有另一種寫法 public string Msg {   get; set;   } 這樣子你也不用另外定義一個 field 了。由 Compiler 自動幫你產生。而外部使用的時候則是 classA.Msg = "Hello"; return classA.Msg; 這裡我很推薦的就是 C# 是使用 "=" 來呼叫 setter 的,這樣直覺多了。 也因為這個原因,我有時候會不使用 property ,而直接使用 field 。 public string Msg; 自己的想法是,外部元件使用ClassA時是一樣的寫法 (IntelliSense 會看到不一樣 ) ,然後我也不需要 filter ,所以不必為了 property 而 property 。 不知道這樣設計會有甚麼問題? 接下來是 Java public class ClassA{         st

Coding Faster: Getting More Productive with MicrosoftR Visual Studio (閱讀筆記)

第一次用 iPad 上的 GoodReader看完一本電子書,GoodReader真是不錯用,可以註解,然後也可以裁切出要看的範圍,就不用每次都在拖那些空白了。進入正題,這本書主要是教一些Visual Studio的快速鍵為主,有些我已經知道的就不列出來了。下面只有列我之前沒在用的或是我覺得一定會用的~有時間的人可以自己去看看這本書,很快的,因為作者都截圖跟表格了。比較奇怪的是這本書的附錄之後還有很大的篇幅~ 先介紹一個比較實用的東西,常常我在程式裡面會有 LoadSetting() 跟 SaveSetting() 這兩個函式 內容的東西大部分都剛好是相反的 ex: LoadSetting:     tbMyName.Text = Settings.Default.MyName; 那在 SaveSetting:     Settings.Default.MyName = tbMyName.Text; 以前常常都是手動去複製貼上 其實VS的取代視窗可以用 Regular Expression 的方式 搜尋 {[^=]+}={[^;]+}; 取代為  \2 = \1; 1. http://studiostyles.info 可以下載Theme。 2. devenv /ResetSettings [settings file]用途是在同一台電腦,上班的環境有兩台螢幕,回家只有一台螢幕,你就可以做兩個不同的捷徑,這樣就可以有不同的Window Layout。 3. Navigating Property Tabs in the Project Properties: Ctrl+PageDown, Ctrl+PageUp在專案的屬性視窗想要切頁籤的時候,我每次都用滑鼠按的,因為NB不好按Ctrl+PageDown 4. You can also see the template in the My Documents\Visual Studio \Templates\ItemTemplates\ folder. 5. 預設的Templates在這裡C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ProjectTemplates,因為我的Project都要多一

Android 3D 手機 NTT DOCOMO AQUOS Phone SH-12C 簡評 (自動重開的手機,強烈不推)

經過一陣子的試用之後,發現就是會自動重開機,原因不名,WiFi有開沒開都會,接著USB 線,Debug完之後沒動過一陣子,他也會自動重開,不適合正常使用,開發可能還可以Orz。 最近聽說HTC EVO 3D很難用,想到之前部門買了一支3D手機,於是便借來玩看看。 這支手機是 NTT DOCOMO AQUOS Phone(SH-12C),Sharp出的,查了一下規格感覺還滿厲害的,1.5GHz,1G RAM。 剛拿到手機的時候,一拆封大家都趕著看他的3D功能,於是立刻開啟了Camera切到3D模式,或是把桌面切成3D模式。那時候總會突然發生crash的情況,此起彼落的抱怨聲源源不絕,那時候雖然有懷疑過是不是電量不夠導致直接關機,但同事說某些操作也會reset。那時候以為就是一台趕著出3D的Android Phone而已。 今天拿來測試之後,還沒發生當機的情況,看起來一開始真的是電力不夠的問題,系統預設只有英文、日文,裝個 MoreLocale2 就可以切換成中文了。 下面列舉了幾個我覺得不錯的地方 1. 他的螢幕是可以決定甚麼角度的視角要顯示甚麼,所以左眼的定義可能就是相對於螢幕中間n度這樣,藉由切換左右眼的顯示畫面來達到裸視3D的功能。藉由這樣的硬體功能達到一個叫作VeilView的功能。啟動VeilView之後,旁邊的人看你的手機可能會看到一塊漂亮的格子布,不像防窺片那樣會全部都是暗暗的,我覺得還滿帥的。 2. 備份至SD功能,在他的Notification Window 裡面有一個 MicroSD Settings可以選擇要自動備份哪些東西,雖然現在用Google系統沒甚麼需要備份(聯絡人跟日曆都會同步)了,但他還是多了目前我沒辦法自動備份的東西,SMS, Bookmark, Notepad。WM 6.5 的My Phone也可以雲端備份簡訊說,但倒了~ 3. Launcher也不錯,Notification Window顯示的資訊滿多的,一般長按桌面圖示,左下角會出現垃圾桶,拖過去就是從桌面移除,右下角則多了一個我沒看過的Info,只要拖到Info,就可以知道這個widget是哪一支程式提供的。像我之前就常常不知道某個widget是哪支程式Orz。 剛裝好的時候桌面上會有一些捷徑,點了之後會跳到Market要求你安裝,像是太鼓達

Titanium Studio Mobile 還不成熟啊~

看了一些介紹,感覺還不錯就去試用看看了 結果我先裝了Windows版的之後才看到說無法測試iOS,所以又灌在OSX上面 執行起來之後,原來它也是用 Eclipse去改的,也有用到Aptana的套件,關係有點亂Orz 突然想到一句台詞:「又是一個死太監!」 Eclipse的設計真是太強了。 裝好之後先開了一個預設的樣板,目前我用的Titanium SDK 是 1.7.1,Android是正常跑出來了。 但iOS會出現一個錯誤,查了一下是Bug,它的builder script沒有寫好,導致compile時Default.png沒有複製到輸出目錄去。修改之後,再Build一次,iOS模擬器這次出來了,程式第一個畫面也載入了,但過不久,模擬器就自動關掉了Orz 放棄~

Android SuperUser.apk 跟 su 之間的關係

Android SuperUser.apk 跟 su 之間的關係 此篇文章記錄了 Android 被 Root 之後,使用者怎麼允許其他 apk 取得 root 的權限 首先先來看第三方 APK 是怎麼執行特殊權限的指令,下面是 DroidVNCServer 的 Code ,是先執行 su 再執行需 root 權限的 C 程式 Process sh = Runtime.getRuntime().exec("su"); OutputStream os = sh.getOutputStream(); writeCommand(os, "chmod 777 " + getFilesDir().getAbsolutePath() + "/androidvncserver"); writeCommand(os, getFilesDir().getAbsolutePath() + "/androidvncserver " + password_check + " " + rotation + " " + scaling_string + " " + port_string + " " + testmode); 上面可以看到新增一個 Process object 有了 root  權限 之後,就可以執行 androidvncserver 這支程式了。 所以,第三方 APK 一定要先執行  sh 這支程式,但如果每支程式都可以隨便取得 root 的話就麻煩了,所以 su 就要搭配一支通知使用者的程式就是 SuperUser.apk 。 su.c 的流程,首先因為第三方 APK 執行 su ,所以  su  可以取得 ppid ,就是 ProcessId of Parent Process 。 有了 PPID 之後,就可以透過 "ls –l" 去查 /proc/$(PPID) 這個檔案的 owner 是誰。格式會是 app_$(user_id) ,所以取得 user_id ,也就是執行第三方 APK 的使用者,真正的 U