Friday, July 8, 2011

Hà nội ngày trở về

Hà Nội ơi (Am) mỗi khi lòng xác xơ (Dm)
Tôi vội vã trở về (G)

Lấy cho mình (Am) dù chỉ là chút bóng đêm (F) trên đường phố quen
Dù chỉ là(Em) 1 chiều hương giăng lối cũ (Am)
Tôi bồi hồi khi chạm bóng cửa Ô (Dm)
Như ngày xưa (G) mỗi lần chạm vai gầy áo mẹ (Am)
Ôi nỗi nhớ (C )muôn đời vẫn thế (Dm)
Như giòng sông Hồng (G )cuộn đỏ mãi trong tôi (Am)
Vội vã trở về(E7) vội vã ra đi (Dm)
Chẳng thể nào qua(G ) hết từng con phố (Am)
Nhưng còn đó © mùa thu,(Em) mùa thu đầy gió ©
Và rêu phong(E7) bên những gốc cây già (Am)
Vội vã trở về (E7) cùng tháng năm xưa (Dm)
Sau những con đường(Em) dầu dãi nắng mưa (Am)
Bên quán ngọ © em buồn (Am) nghe lá trút ©
Chiều mưa sa (Em) giăng kín phố dài (Am)

Hà Nội ơi,(Am) mỗi khi lòng xác xơ(Dm)
Tôi vội vã trở về(G) để nghe tim minh (Em) rưng rưng trong nước hồ thu(Am)

Wednesday, June 8, 2011

Public ứng dụng của bạn lên Android Market.

Bạn đã hoàn thành việc phát triển ứng dụng của bạn sau 1 tuần (có thể ít hơn hoặc nhiều hơn :D) làm việc chăm chỉ và bạn muốn phát hành ý tưởng của bạn cho cả thế giới biết. Bài này tôi sẽ chỉ bạn cách làm điều đó.

Trước hết, bạn phải trả lời một số câu hỏi sau:


1, Bạn đã test kỹ càng ứng dụng của bạn một cách rộng rãi?
Nếu câu trả lời là chưa thì bạn hãy quay trở lại với việc test cho thật kỹ càng, không chỉ trên emulator, bạn cần kiểm tra chúng trong thực tế, trên các thiết bị thật. Nếu có điều kiện, bạn hãy kiểm tra trên các thiết bị khác nhau, của các nhà cung cấp khác nhau, trên các phiên bản OS khác nhau.
Một lỗi nhỏ trong code của bạn có thể làm giảm doanh số bán hàng và danh tiếng của bạn.

2, Ứng dụng của bạn có hiệu năng tốt không?
Hiệu năng là rất quan trọng, đặc biệt nếu ứng dụng của bạn là 1 game. Nếu ứng dụng của bạn không thể đáp ứng trong một trường hợp nào đó, hãy xem lại và tối ưu hóa chúng nếu có thể.

3 Ứng dụng của bạn có tương thích với nhiều phiên bản khác nhau của hệ điều hành?
Hãy nhìn vào biểu đồ bên dưới để có yêu cầu min SDK phù hợp với ứng dụng của bạn.



Tiếp theo chúng ta phải chuẩn bị cho ứng dụng của mình sẵn sàng lên Android Market.


1, Yêu cầu các quyền cần thiết.
Hãy chắc chắn rằng bạn đã yêu cầu các quyền cần thiết trong file cấu hình AndroidManifest.xml. Nếu không ứng dụng của bạn có thể chạy không thật sự suôn sẻ. Ví dụ:




2, Tên và icon của ứng dụng.
Hãy chọn một tên và icon thật đặc biệt cho ứng dụng của bạn, bạn có thể cấu hình nó trong file cấu hình AndroidManifest.xml. Ví dụ:


3, Cấu hình version của ứng dụng.
Hãy cấu hình version ứng dụng của bạn nhằm việc update sau này. Thường nó được cấu hình bằng số nguyên và bắt đầu bằng 1, nhưng bạn có thể tùy biến theo ý bạn có thể là 1.0.0b1 hoặc 2.4.13... Ví dụ:


4, Cấu hình phiên bản hệ điều hành tương thích.
Dựa vào API bạn sử dụng để phát triển ứng dụng, bạn hãy cấu hình phiên bản hệ điều hành tương thích bằng các tham số.
android:minSdkVersion: Phiên bản thấp nhất.
android:targetSdkVersion: Bạn phát triển ứng dụng cho phiên bản này.
android:maxSdkVersion: Phiên bản cao nhất có thể chạy ứng dụng, cái này nên bỏ qua.

5, Xóa bỏ file và log.
Rà soát toàn bộ ứng dụng của bạn, hãy xóa bỏ những file không cần thiết, lời gọi log nhằm debug dữ liệu cá nhân, các file không phải là file resource...

6, Export ứng dụng của bạn với certificate.
Đây là bước quan trọng bới ứng dụng của bạn được đảm bảo ứng dụng của bạn đã được xác thực, vì thế bạn nên tạo một mật khẩu đủ mạnh cho private key của bạn và hãy giữ chúng cẩn thận.
Nếu bạn dùng Eclipse IDE, bạn có thể sử dụng Export Wizard trong eclipse để làm điều này.
a, Bạn chọn File > Export
b, Trong cây thư mục bạn chọn Android -> Export Android Application.
c, Hoàn thành các bước wizard (Bạn có thể xem hình vẽ).





Cách khác bạn có thể sử dụng các tools sau keytool, jarsigner, zipalign...


Bước cuối cùng là đăng ký làm một Market Publisher.

1, Đăng ký
a, Đăng ký dưới một Publisher và cấu hình các thông tin cá nhân của bạn http://market.android.com/publish.
b, Đọc và đồng ý các điều khoản của Android Market http://www.android.com/us/developer-distribution-agreement.html.
c, Trả phí là $25 USD qua Google Checkout.
2, Upload ứng dụng của bạn.
Đăng nhập vào tài khoản publisher của bạn, chọn "Upload an Application" điền các thông tin trên form, nếu ứng dụng của bạn có phí, bạn cần đăng ký Google Checkout Merchant. Cuối cùng chọn "Publish" để đăng ứng dụng của bạn.

OK rồi! cảm giác vui vui khi upload ứng dụng đầu tiên của mình lên android market nào... :D

Saturday, May 28, 2011

Google IO 2011

Rất nhiều kiến thức được trình bày tại google io 2011, các bạn có thể vào đây để xem các video:

http://www.youtube.com/user/GoogleDevelopers

Thursday, May 12, 2011

Bắt đầu tập lại guitar

Hôm nay có một niềm vui nho nhỏ, quyết định tập guitar để sau này dùng. Lâu ngày cầm lại cây đàn đau hết tay nhưng dù sao mình cũng sắp đệm được bài "nhỏ ơi" rồi.

Mình giới thiệu gam bài này mình sưu tầm được:

Lần đầu(Dm) ta gặp nhỏ( C), trong nắng(Am) chiều bay bay(Dm)
Ngập ngừng(Dm) ta hỏi nhỏ( C), nhỏ bảo( C) nhỏ không tên(F)
Ừ thì(Dm) nhỏ không tên( C), bây giờ( C) quen nhé nhỏ(Am), nhỏ ơi(Dm)

(Các đoạn sau thì tương tự.)

Lần này ta gặp nhỏ, trong nắng chiều bay bay
Ngập ngừng ta hỏi nhỏ, nhỏ bảo nhỏ chưa yêu
Ừ thì nhỏ chưa yêu, bây giờ yêu nhé nhỏ, nhỏ ơi

Lần này(Dm), nhỏ quay đi( C), không thèm( C) nhìn ta nữa(Am)
Giọt sầu(Dm) rơi một mình( C), chỉ còn(Dm) ta một mình( C), nhỏ ơi (Dm)

Còn j đâu hỡi người, trong nắng chiều phôi phai
Kỷ niệm ta cùng nhỏ, giờ chỉ là hư vô
Nụ cười là hư vô, xa rồi vẫn nhớ hoài, nhỏ ơi.

Tình cờ ta gặp nhỏ, trong nắng vàng ban mai
thẹn thùng ta hỏi nhỏ, nhỏ bảo khờ ghê đi
Ừ thì khờ ghê đi, thương rồi sao chẳng hiểu, nhỏ ơi!


Like it!

Chỉ dẫn lập trình game 3D trên Android (P6)

Xin lỗi các bạn về sự chậm chễ này, dạo này bận quá nên ko có time để post bài nữa. Nhưng mình sẽ tiếp tục loạt bài viết này khi rảnh.
Bài trước mình đã giới thiệu về Java Native Interface. Nhưng hình như các bạn không thể thực hành được bài này.
Và có những email gửi về cho mình nhờ chỉ dẫn cách chạy JNI như thế nào, các bạn đó chạy ví dụ của google mà không được.
Hôm nay tôi sẽ chỉ các bạn cách chạy native như thế nào.

Như các bạn đã biết lập trình game chúng ta cần tận dụng sức mạnh của phần cứng và Java Native Interface là một cách tuyệt vời để thực hiện nó.
Vậy Java Native Interface làm gì?
Có thể các bạn đã biết thực ra Java Native Interface cho phép chúng ta gọi hàm từ thư viện C/C++ khi đó ta có thể giao tiếp nhiều hơn với phần cứng.
Ok, vậy ta có thể hình dung ta cần j rồi, hiểu về C/C++ (Hiểu sâu nhé :D). Một trình biên dịch trên Window (Những ai dùng Linux thì chuyên gia rồi chắc mình không phải hướng dẫn nữa, và mình cũng khuyên các bạn nên chuyển qua Linux (Ubuntu) mà dùng).
Ở đây mình dùng http://www.cygwin.com/. Bạn phải download Android NDK về nhé http://developer.android.com/sdk/ndk/index.html
Eclipse chắc bạn có rồi :D.

Bắt đầu nhé:
Cài đặt cygwin nhé.
Giải nén Android NDK nhé.
Bây giờ ta sẽ chạy một ví dụ của google viết sẵn để hiểu cách làm việc của nó.
Trong thư mục Android NDK bạn vừa giải nén ra có thư mục sample bạn nhìn thấy một số ví dụ ở đây.
Trên eclipse, bạn tạo một project android mới từ source này, ở đây chúng ta chọn hello-jni nhé.

Giờ chúng ta đã có project trên eclipse rồi.
Trên command của windown (cmd), bạn cd tới thư mục của project trên ...\samples\hello-jni
Chạy command:
 android update project -p . -s

Nhớ rằng trước đó đã path cho android trong thư mục ...android-sdk-windows\tools và ...android-sdk-windows\platform-tools
Và path của ...cygwin\bin nữa nhé.

Giờ chúng ta bắt đầu build native code sử dụng command ndk-build.

Hãy chắc chắn rằng bạn đang ở ...\samples\hello-jni như vậy bạn sẽ không phải gõ đường dẫn này nhiều nữa.
Trên command của window bạn chạy ash (Hãy chắc chắn rằng bạn đã set path cho ...cygwin\bin).
Lúc này bạn đang chạy SHELL trên môi trường GNU/Linux chứ không phải command như ở window nữa.
Chạy command su
Của mình là su tannm
Khi đó bạn sẽ nhìn thấy đường dẫn của bạn giống như:

TanNM@TanNM-PC /cygdrive/e/STUDY/android/android-ndk-r5b/samples/hello-jni

Ngon rồi đấy!
Tiếp theo bạn hãy chạy lệnh:
/cygdrive/e/STUDY/android/android-ndk-r5b/ndk-build

Khi đó output sẽ giống như:
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile thumb : hello-jni <= hello-jni.c SharedLibrary : libhello-jni.so Install : libhello-jni.so => libs/armeabi/libhello-jni.so

Quay lại eclipse refresh lại project và chạy.

OK chứ?

Friday, March 18, 2011

Câu lệnh xem size và free của table space trong oracle.

select b.tablespace_name, tbs_size SizeMb, a.free_space FreeMb
from  (select tablespace_name, round(sum(bytes)/1024/1024 ,2) as free_space
       from dba_free_space
       group by tablespace_name) a,
      (select tablespace_name, sum(bytes)/1024/1024 as tbs_size
       from dba_data_files
       group by tablespace_name) b
where a.tablespace_name(+)=b.tablespace_name;