Tuesday, March 20, 2012

Một số cái mới trong Java 7

Dạo này lắm việc quá ko có gì note lại đây. Tình cờ hôm qua đọc thử sách trên Amazon Kindle thấy hay nên note lại đây cho mình và cho những người chưa biết.
Những thay đổi này thực sự có ích cho các bạn lập trình let's start.
1, Diamond Operator: Chắc hẳn bạn đã làm việc với kiểu Generics ví dụ bạn khai báo một map:
Map <String, List<Trade>> trades = new TreeMap<String, List<Trade> >();
Bạn có nhìn thấy thừa không, bạn cần khai báo loại map ở cả hai phía.
Nhưng với Java 7 bạn có thể khai báo như sau:
Map <String, List<Trade>> trades = new TreeMap<>();
Trình biên dịch sẽ tự động hiểu bạn cần khai báo gì.
2, Sử dụng String trong câu lệnh switch: Bạn còn nhớ, trước đây khi dùng switch statements bạn bắt buộc phải sử dụng với kiểu dữ liệu đếm được thì nay với Java 7 bạn có thể làm việc đó với cả String, đỡ phải viết if/else nhiều. Sướng nhá!
Thay vì phải khai báo:
private void processTrade(Trade t) {
 String status = t.getStatus();
 if (status.equalsIgnoreCase(NEW)) {
  newTrade(t);
 } else if (status.equalsIgnoreCase(EXECUTE)) {
  executeTrade(t);
 } else if (status.equalsIgnoreCase(PENDING)) {
  pendingTrade(t);
 }
}
Với Java 7 bạn có thể:
public void processTrade(Trade t) {
 String status = t.getStatus();
 switch (status) {
  case NEW:
   newTrade(t);
   break;
  case EXECUTE:
   executeTrade(t);
   break;
  case PENDING:
   pendingTrade(t);
   break;
  default:
   break;
 }
}
3, Tự động quản lý tài nguyên: Chắc chắn một điều tiên quyết mà ai cũng phải nhớ "Đã mở thì phải đóng" nghĩa là bạn mở một cái gì đó, khi làm xong bạn phải đóng lại.
Giống như các Connections, Files, Input/OutStreams...
Bình thường bạn sẽ phải lập trình như sau:
public void oldTry() {
 try {
  fos = new FileOutputStream("tmp.txt");
  dos = new DataOutputStream(fos);
  dos.writeUTF("blog.vn-dev.net");
 } catch (IOException e) {
  e.printStackTrace();
 } finally {
  try {
   fos.close();
   dos.close();
  } catch (IOException e) {
   // log the exception
  }
 }
}
Chú ý java vitual machine chỉ có thể tự quản lý những thằng inplement interface AutoCloseble thôi nhé :).
Nay với Java 7 bạn ko cần phải đóng những gì đã mở :D, nhưng như thế nghe vẻ hơi mất đi tính logic của nó "Mở là phải đóng" nhỉ.
4, Khai báo number với gạch dưới: Đã bao giờ bạn khai báo tới hàng tỷ mà bạn phải đếm những số 0 trong đó, nó mà lớn hơn nữa thì cũng mệt phết. Với Java 7 bạn làm cho phép khai báo số với gạch dưới, vì thế việc "Đếm" rất đơn giản:
Bạn có thể khai báo như sau:
int thousand =  1_000;
int million  =  1_000_000;
int one = 1;
Với số nhị phân bạn cũng có thể sử dụng phương pháp này ví dụ: 0b1
Nhưng bạn không thể convert nó sang số thập phân nữa đâu nhé :)
5, Multi-catch trong Exception: Trước đây với một phương thức bắn ra nhiều Exception, bạn cần khai báo nhiều block catch để bắt chúng. Ví dụ:
public void oldMultiCatch() {
 try {
  methodThatThrowsThreeExceptions();
 } catch (ExceptionOne e) {
  // log and deal with ExceptionOne
 } catch (ExceptionTwo e) {
  // log and deal with ExceptionTwo
 } catch (ExceptionThree e) {
  // log and deal with ExceptionThree
 }
}
Nhưng với Java 7 bạn có thể gộp các block catch kia lại giống như:
public void oldMultiCatch() {
 try {
  methodThatThrowsThreeExceptions();
 } catch (ExceptionOne | ExceptionTwo | ExceptionThree e) {
  // log and deal with all Exception
 }
}


Còn một số phần mới về NIO 2.0 mình sẽ note lại vào ngày mai.

Monday, November 7, 2011

Dấn thân vào con đường mã hóa, bảo mật.

Bắt đầu bằng nguyên lý Kerckhoff:

"Một hệ thống mã hóa phải an toàn ngay cả khi tất cả thông tin về hệ thống đó đều đã được công bố ra ngoài. Bí mật duy nhất của hệ thống là một khóa ngắn."

Mình sẽ tiếp loạt bài này khi học hỏi được cái j mới :)

Tuesday, August 2, 2011

Xăng - nhạc chế của GS Xoay

Am----------------------------------------------Dm
Xăng , sao vừa tăng giá mấy hôm lại tăng
---------------------------------------------Am
Đang thời lạm phát khắp nơi đều căng
------------------------------------------ E
Phen này chết đói dân nhe cả răng
-------------------------------------- Am
Sao lại chơi ác với dân vậy xăng
Xăng bây giờ ta biết kiếm ăn làm sao
Xăng giờ tăng giá mỗi hôm một cao
Bao tiền trong ví mỗi hôm một down
Xăng lại chơi ác với dân vậy sao
----------Dm-------------- E --------------------Am
Giờ xe máy cất trong nhà mình đếch thèm đi
--------------- Dm --------------------------------------E
Đi bằng xe bus chi tiền cũng ít đỡ phải đau đít
------------ Dm ------------ E -------------------- Am
Giờ cưa gái, đến chơi nhà mình cứ tặng xăng
--------------------Dm--------------------------------------- E
Xăng giờ cao giá, lấy lòng ba má không cần hoa lá

(Lặp lại)
Xăng...hay là ta sẽ đi xe đạp chăng
Không chừng cơ bắp mấy hôm lại căng
Nghe đồn sang tháng giá xăng còn tăng
Nhưng mà tăng nữa cũng mặc mẹ xăng

Giờ xe máy cất trong nhà đếch thèm đi
Đi bằng xe buýt chi tiền cũng ít đỡ phải đau đít
Giờ cưa gái, đến chơi nhà mình cứ tặng xăng
Xăng giờ cao giá, lấy lòng ba má không cần hoa lá

Xăng...hay là ta sẽ đi xe đạp chăng
Không chừng cơ bắp mấy hôm lại căng
Nghe đồn sang tháng giá xăng còn tăng
Nhưng mà tăng nữa cũng mặc mẹ xăng.

Nghe đồn sang tháng giá xăng còn tăng
Nhưng mà tăng nữa cũng mặc mẹ xăng!

Tuesday, July 12, 2011

Cài đặt Cygwin để lập trình C/C++ trên Eclipse

Trước hết bạn cần download Eclipse cho C/C++ về, giải nén ra.
http://www.eclipse.org/downloads/
Tiếp đến bạn tải Cygwin cho window về từ
http://cygwin.com/setup.exe

Bước tiếp theo bạn cài đặt Cygwin, chú ý một số gói quan trọng cần phải cài đặt.
1, binutils
2, gcc
3, gcc-core
4, gcc-g++
5, gcc-mingw-core
6, gcc-mingw-g++
7, make
8, gdb (Nếu bạn muốn hỗ trợ debug trên Eclipse)

Sau khi cài đặt xong, đưa thư mục bin trong thư mục cài đặt Cygwin vào PATH.
Kiểm tra các gói trên đã cài đặt đầy đủ chưa bằng lệnh 'cygcheck -c' trên command.


Bạn hãy mở Eclipse và tạo một project mới với lưu ý lựa chọn toolchain là Cygwin.
Chạy thử nào!!!!

Để cấu hình debug, bạn vào: Windows->Preference->C/C++ -> Debug -> Common Source Lookup
sau đó thêm Path mapping:
\cygdrive\c -> c:\
\cygdrive\d -> d:\

Friday, July 8, 2011

Vết chân tròn trên cát

Vết chân tròn (Dm) vẫn đi về© trên con đường mòn(Am)
cát trắng quê tôi(Am)
Anh thương binh(G) vẫn đến trường làng(Dm) vẫn ôm đàn(Em) dạy các em thơ(Em) bài hát quê hương(Am).

Bài hát(Am) có ngọn núi quê anh(Dm) xa a ... vời (G)
Bài hát(Am) có đồng lúa mênh mang(Dm) câu .. hò(G)
Bài hát© có người lính đã hy sinh(Em) âm thầm(Dm)

Cho hôm nay(F) những gót chân son(G) vui quanh(Em)dấu chân tròn (Am).

Bài hát có trận đấu không quên bên đồi
Bài hát có người lính biên cương thương mẹ
Bài hát có ngọn gió cuốn bay theo dấu chân tròn (Như trên).

Để lại(Em) một bài ca(F)trên cát trắng bao la (Am).

Vết chân tròn(Dm) vẫn in hình (C) trên con đường mòn(Am) cát trắng quê tôi (Am).
Như bài ca(G) anh viết trong thầm lặng (C) trên bờ cát không lời(Dm). Cứ hát mãi trong tôi (Em)
Hát mãi(Dm) trong tôi (C) ôi bài ca cuộc đời (Am)cháy mãi(Em)trong tôi (Am)đốt mãi(Em)trong tôi (Am)