Thực sự là 1 trải nghiệm mới sẽ cố hoàn thành trong tuần này.
Nhiệm vụ là thiết lập 1 server lên 1 cái case máy tính cũ, không có màn hình.
Sẽ viết tổng kết khi xong.
Dụng cụ cần thiết:
1 cái null modem cable
1 em laptop hay máy tính khác có cổng serial để cắm cái dây trên.
1 case máy tính sẽ được cài server
START:!
Saturday, March 24, 2012
Thursday, March 22, 2012
[Android] Con đường tìm kiếm... tên nhà mạng
đúng là cả 1 con đường... vì thật vất vả.
nếu 2 method API cung cấp mà lấy được tên nhà mạng thì không có gì để nói: đó là
Telephony... getNetworkOperatorName() getSimOperatorName()
có nhiều trường hợp kết quả trả về sẽ không giống những gì bạn cần lấy - tên nhà mạng sim bạn đang dùng - dòng chữ hiện ở thanh status bar đã kéo xuống hay ngoài lock screen.
Mò từ android open source, 2 chỗ nói trên đều lấy tên nhà mạng từ chỗ khác, dùng các class không được public ra api... sẽ cố dùng reflect để mò ra nó sau.
http://grepcode.com/file/repository.grepcode.com$java$ext@com.google.android$android@2.3.7_r1@com$android$systemui$statusbar$CarrierLabel.java
Quá trình tìm hiểu phát hiện ra rằng code open source của android có nhiều phần khác biệt với code SDK đưa vào sản phẩm thật. Điển hình là phần lấy tên nhà mạng này @@
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.6_r2/android/telephony/ServiceState.java#ServiceState.getOperatorAlphaLong%28%29
http://stackoverflow.com/questions/499528/what-happened-to-android-provider-telephony
nếu 2 method API cung cấp mà lấy được tên nhà mạng thì không có gì để nói: đó là
Telephony... getNetworkOperatorName() getSimOperatorName()
có nhiều trường hợp kết quả trả về sẽ không giống những gì bạn cần lấy - tên nhà mạng sim bạn đang dùng - dòng chữ hiện ở thanh status bar đã kéo xuống hay ngoài lock screen.
Mò từ android open source, 2 chỗ nói trên đều lấy tên nhà mạng từ chỗ khác, dùng các class không được public ra api... sẽ cố dùng reflect để mò ra nó sau.
http://grepcode.com/file/repository.grepcode.com$java$ext@com.google.android$android@2.3.7_r1@com$android$systemui$statusbar$CarrierLabel.java
Quá trình tìm hiểu phát hiện ra rằng code open source của android có nhiều phần khác biệt với code SDK đưa vào sản phẩm thật. Điển hình là phần lấy tên nhà mạng này @@
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.6_r2/android/telephony/ServiceState.java#ServiceState.getOperatorAlphaLong%28%29
http://stackoverflow.com/questions/499528/what-happened-to-android-provider-telephony
Wednesday, March 21, 2012
Thuốc - ăn uống
Vịt là thức ăn bổ dưỡng, trị được nhiều bệnh, nhưng không dùng cho người bị cảm cúm, người tiêu chảy nên dùng hạn chế.
trứng vịt vị ngọt, tính mát, có tác dụng tư âm, giáng hỏa, thanh nhiệt, hóa đàm; dùng chữa bệnh ho khan, ít đờm, ho do phế âm hư. Còn thịt vịt tính hàn, có tác dụng tư âm, dưỡng vị. Thịt vịt chữa các chứng bệnh tiểu tiện bất lợi, nhiệt bệnh, hư lao; bổ ngũ tạng và thủy đạo.
trứng vịt vị ngọt, tính mát, có tác dụng tư âm, giáng hỏa, thanh nhiệt, hóa đàm; dùng chữa bệnh ho khan, ít đờm, ho do phế âm hư. Còn thịt vịt tính hàn, có tác dụng tư âm, dưỡng vị. Thịt vịt chữa các chứng bệnh tiểu tiện bất lợi, nhiệt bệnh, hư lao; bổ ngũ tạng và thủy đạo.
Thursday, March 15, 2012
Automate Android Dev
Vài tip nhỏ
Auto1: adb connect siêu tốc (on Linux)
Một lệnh bạn thường xuyên phải sử dụng khi test trên máy thật qua AdbWireless
adb connect 192.168.1.x
dùng để adb vào 1 máy trong mạng.
C1: thêm vào ~/.bashrc dòng
alias 'adbc=adb connect'
C2: (tớ đang dùng :D ): viết 1 cái script nhỏ nội dung như sau:
#!/bin/sh
IP=192.168.1.
adb connect $IP$1
đặt tên là adbc, chmod a+x adbc để nó chạy được. Copy file vào 1 thư mục nào đó (vd /usr/bin/) hoặc thêm thư mục hiện thời của bạn vào biến PATH (export $PATH=$PATH:dia_chi_hien_thoi)
giờ thì chỉ cần gõ adbc 7, bạn sẽ gửi lệnh adb connect 192.168.1.7 :D
Auto2:
Vì bạn thường xuyên sử dụng log để test nên hãy thêm dòng này vào template của Eclipse:
Windows > Preferences > Java > Editor > Templates
tạo 1 template mới:
log
Log.d(TAG, "${enclosing_method}");
dòng này sẽ tự tạo 1 dòng log với tên của method mà bạn ghi nó. TAG là 1 constant nên được đặt trước, thường là tên package của chương trình.
Saturday, March 10, 2012
Một Mình
a songI like :D
by Thanh Tùng
Gió nhớ gì ngẩn ngơ ngoài hiênMưa nhớ gì thì thầm ngoài hiên
Bao đêm tôi đã một mình nhớ em
Ðêm nay tôi lại một mình
[ Lyrics from: http://www.lyricenter.com/v3855-thanh_tung~_lyrics.html ]
Nhớ em vội vàng trong nắng trưa
Áo phơi trời đổ cơn mưa
Bâng khuâng khi con đang còn nhỏ
Tan ca bố có đón đưa
Nhớ em giọt mồ hôi tóc mai
Gió sương mòn cả hai vai
Ðôi chân chênh vênh con đường nhỏ
Nghiêng nghiêng bóng em gầy
Vắng em còn lại tôi với tôi
Lá khô mùa này lại rơi
Thương em mênh mông chân trời lạ
Bơ vơ chốn xa xôi
Vắng em đời còn ai với ai
Ngất ngây men rượu say
Ðêm đêm liêu xiêu con đường nhỏ
Cô đơn, cùng với tôi về.....
Labels:
Guitar
Wednesday, March 7, 2012
Android learning path
1. Sqlite3
2. ListView and Adapter
3. Content Provider
4. Testing
5. PhoneGap
6. Naming convention + better code / understand
7. Agile android.
2. ListView and Adapter
3. Content Provider
4. Testing
5. PhoneGap
6. Naming convention + better code / understand
7. Agile android.
Friday, March 2, 2012
[Android] Preferences
Preferences là 1 cách để lưu trữ các tùy chọn của người dùng trong chương trình, quyết định trạng thái của chươgn trình. Nó được chứa trong 1 file xml , mỗi chương trình đều có 1 file preferences mặc định với tên : tên_của_package_preferences
Thay vì phải truyền các extra qua intent để gửi các thông tin sang activity khác, bạn có thể lưu vào preferences rồi lấy ra lúc cần thiết, việc lưu vào preferences được thực hiện 1 cách "tức thì" nên bạn sẽ không bao giờ phải lo rằng lúc gọi để lấy thông tin từ preference ra thì nó chưa kịp lưu giá trị được gửi vào trước đó :D
Tốt nhất là nên dùng preferences mặc định (tránh những lỗi có thể xảy - gõ sai tên file chẳng hạn ) và tạo 1 class theo singleton pattern với các method set - get các giá trị cần lưu trữ để dễ dàng truy cập lúc cần.
...
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
private static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
Thay vì phải truyền các extra qua intent để gửi các thông tin sang activity khác, bạn có thể lưu vào preferences rồi lấy ra lúc cần thiết, việc lưu vào preferences được thực hiện 1 cách "tức thì" nên bạn sẽ không bao giờ phải lo rằng lúc gọi để lấy thông tin từ preference ra thì nó chưa kịp lưu giá trị được gửi vào trước đó :D
Tốt nhất là nên dùng preferences mặc định (tránh những lỗi có thể xảy - gõ sai tên file chẳng hạn ) và tạo 1 class theo singleton pattern với các method set - get các giá trị cần lưu trữ để dễ dàng truy cập lúc cần.
...
Subscribe to:
Posts (Atom)