2013-11-14

Download an Google Chrome Extension file (.crx file)

Download file Google Chrome Extension

Đôi khi cần lưu file .crx version cũ khi không muốn cài lại máy và chỉ dùng version mới nhất thì nên download file .crx. Tuy nhiên nếu mở bằng Google Chrome thì cũng khó download được. Cách tốt nhất là dùng 1 chương trình khác download, dùng browser khác hoặc IDM.

Đầu tiên là vào Chrome Extension tìm ID của extension cần lưu.
Sau đó điền vào đường dẫn 

https://clients2.google.com/service/update2/crx?response=redirect&x=id%3Dxxxxxx%26uc

Phần màu xanh là phần sẽ điền ID vào. Ví dụ ID của Adblock Plus là cfhdojbkjhnklbpkdaibdccddilifddb

Vậy URL để download là 
https://clients2.google.com/service/update2/crx?response=redirect&x=id%3Dcfhdojbkjhnklbpkdaibdccddilifddb%26uc

2013-11-09

Unlock and jailbreak iPhone

Cóp nhặt 1 số thứ liên quan khi dev team nhận được 1 cái iPhone cần phải xử

Unlock là gì, jailbreak là gì?

Là 2 quá trình khác nhau. Tuy nhiên unlock thì cần jailbreak.
Jailbreak là quá trình can thiệp để có thể toàn quyền điều khiển iPhone (lấy quyền root).
Unlock là gì? Can thiệp vào baseband để sử dụng SIM của bất kỳ nhà mạng nào à xem baseband ở phần sau à nếu không unlock thì ko call được. Unlock yêu cầu phải jailbreak trước, sau khi jailbreak xong iPhone sẽ có thể cài appà cài unlock tools như ultrasn0w để unlock. Tất nhiên quá trình unlock còn phụ thuộc nhiều yếu tố trong đó chủ yếu là version của baseband.

Baseband là gì?

Firmware là gì à1 dạng giữa phần mềm và phần cứng.
Baseband thực hiện điều khiển các loại sóng bao gồm sóng điện thoại. Nên để call được với iPhone locked phải can thiệp BB. Khi nâng cấp FW thông thường nâng cấp cả BB. Có thể hạ FW nhưng khi hạ FW thì không hạ được BB. Tại sao phải giữ BB à để thực hiện unlock vì tool unlock chỉ support 1 số BB. Ví dụ: ultrasn0w chỉ support unlock 3GS với các BB sau: 0.6.15, 04.26.08, 05.11.07, 05.13.01, 05.12.01.

Kiểm tra BB của iDevice Settings à General à About à Modem Firmware
Nếu máy chưa activate (dính ở Emergency Call) thì dùng f0recast
Các tools cần thiết có thể download tại đây http://ih8sn0w.com/

Boot loader là gì?

Là đoạn code thực hiện quá trình kiểm tra và nạp firmware theo cách Apple mong muốn. Khi iBoot (boot loader của iPhone) được kích hoạt thì không thể downgrade hay restore custom FW.

Recovery mode là gì?

Là quá trình restore hoặc upgrade firmware có nạp iBoot. Để thực hiện cần phải đưa về recovery mode. Ở chế độ này trên màn hình sẽ hiện cọng cáp kết nối logo iTunes.
Cách đưa về recovery mode :
1. Tắt nguồn, tháo cáp
2. Giữ phím Home
3. Trong khi giữ phím Home thì cắm cáp vào
4. Tiếp tục giữ đến khi hiện hình cái cáp và mũi tên hướng lên logo Itunes là máy đã đuợc đưa về Recovery mode.
Cách thoát khỏi Recovery mode:
Giữ cùng lúc phím Home + Power trong 10s đến khi Iphone tắt.

DFU mode là gì?

Là Device Firmware Upgrade, như đã nói đây là 1 chế độ đặc biệt cần khi downgrade firmware. Tại mode này iBoot và OS sẽ bị bỏ qua, iTunes vẫn nhận iPhone nhưng mà hình iPhone đen thui.
Để enter mode này có thể dùng các tool hỗ trợ để việc thực hiện dễ dàng hơn.

Thực hiện manual như sau:
1. Chạy iTunes
2. Cắm phone vào PC
3. Chờ iTunes nhận (detected) được iphone
4. Bấm và giữ nút Power (ở trên) khoảng 3s . Sau đó bấm tiếp nút Home (nút tròn) và giữ (trong khi vẫn giữ nút Power) khoảng 10s.
5. Trong khoảng 3s thì iPhone sẽ tắt và khởi động lại. Màn hình sẽ tối đen. Lúc này đếm nhẩm trong đầu từ 1 -10, khi đếm tới 10 thì buông nút Power ra nhưng vẫn bấm và giữ nút Home. Nên để ý là khi buông nút Power ra thì màn hình phải vẫn còn tối đen. Nếu lúc buông Power mà quả táo đã hiện lên là đã chậm tay và phải làm lại từ đầu. Cái mẹo ở lúc này là phải buông Power trước khi quả táo xuất hiện!
6. Lúc này tay vẫn còn giữ nút Home, chờ thêm vài giây nữa thì iTunes sẽ báo là "detect phone in DFU mode". Lúc này có thể buông nút Home.
Cách thoát khỏi DFU mode (chỉ hữu dụng khi mắc kẹt và áp dụng luôn):
Giữ Home và Power trong khoảng 30s cho đến khi nào iTunes báo đã ngắt kết nối với iPhone thì thôi.

Activation là gì?

Kích hoạt iPhone qua screen Emergency Call và vào được màn hình chính là springboard.
Nếu là bản quốc tế thì chỉ cần cắm vào iTunes. 1 dạng khác là cần cắm SIM (SIM lock) của nhà mạng để unlock à gọi là activate không cần jailbreak
Nếu iPhone lock à cần jailbreak hay gọi là hacktivate (hacktivation).

SHSH là gì, ECID là gì?

ECID được viết tắc từ chữ Exclusive Chip ID là mã số của 1 con chip nhỏ mà Apple đã gắn vào Iphone 3GS và Ipod Touch 3G. Apple có thể chứng thực được iPhone nào khi kết nối với Server của Apple. ECID không thể thay đổi được bằng software, chỉ có thể thay đổi bằng cách thay chip khác.
SHSH như là một tờ chứng nhận cho mã số đó dạng file có ext là shsh. SHSH được lưu trữ trên Server của Apple, khi restore iPhone của mình, bước thứ 2 là gian đoạn "Verifying with Apple Server". Đó chính là lúc Itunes đã kết nối với server và đang kiểm chứng xem ECID của mình có hợp lệ hay không thông qua file .shsh đã lưu tại đó. Cydia có hỗ trợ backup SHSH.
Tại sao phải backup SHSH tại Cydia. Apple không cho restore về phiên bản thấp hơn trừ phiên bản gốc. Tức Apple không cung cấp chứng thực cho việc hạ hay restore xuống FW thấp hơn FW hiện tại khi không có SHSH. Thông thường sau 1 thời gian ra FW mới Apple sẽ closed luôn FW cũ tức chỉ có thể nâng cấp lên FW mới nhất.
Khi restore về phiên bản cũ hơn thì trong giai đoạn verifying với server phiên bản đó phải được server hỗ trợ. Có 2 cách giả server Apple iTunes: server nào online đã có sao lưu SHSH (hiện tại có Cydia của Saurik) hoặc tạo local server dùng file đã lưu có tại local. Phải chỉnh file hosts để chuyển server của iTunes là gs.apple.com thành server mong muốn. Khi restore về FW thấp hơn FW hiện hành mà không được Apple hỗ trợ thì phải có bản sao lưu SHSH để tạo custom firmware.

Backup và thao tác với SHSH

Hai tools dùng backup SHSH là iFaith và TinyUmbrella (yêu cầu phải cài JRE)
Có thể dùng iFaith kiểm tra SHSH đã lưu của iPhone, fetch SHSH về từ server nếu có, backup SHSH lên Cydia
Dùng sn0wbreeze để tạo custom FW à dung restore FW mà iPhone ko bị nâng baseband.

Untethered jailbreak và tethered jailbreak

Untethered jailbreak còn gọi là jailbreak “không dính cáp” JBU khác với  tethered jailbreak: nếu chỉ tethered jailbreak thì trong trường hợp máy hết pin hay tắt nguồn nói chung là khi muốn chạy một app JB nào thì phải thực hiện 1 vài thao tác (cắm cable à dùng redsn0w à chạy Just Boot).

BootROM cũ và BootROM mới

Thời điểm Apple phát hành FW iOS 4.0, Dev-Team chỉ tìm được kẽ hở của FW có thể jailbreak cho 3GS Old-BootRom trong khi đó không thể tìm cách jailbreak New-BootRom. Do thấy Old-BootRom bị "hở sườn" nên Apple thay đổi loại iBoot mới cho 3GS là New-BootRom (iBoot-359.3.2).

Ngoài ra, sau khi sản xuất iPhone 4, Apple vẫn tiếp tục sản xuất The New 3GS 8GB với chip Toshiba, mục đich ngăn chận máy Lock nâng baseband của iPad (0.6.15) để unlocked (ultrasn0w hỗ trợ unlock BB 0.6.15). Đó là các The New 3GS 8GB sản xuất từ tuần 33 năm 2011 trở về sau. Serial Number: xx133xxxxxx, firmware 4.3.5, BB 5.14 (một số thông tin khác là từ tuần 27 năm 2011 trở về sau).

Các The New 3GS 8GB này khi jailbreak bằng cách dùng baseband của iPad 0.6.15 sẽ bị lỗi "NO ALL", mất WiFi, Bluetooth, ECID, IMEI. Đồng thời iTunes báo lỗi (-1), và máy bị treo hình cáp dĩa. Giang hồ đồn đây là loại baseband "Emergency Boot Loader" (EBL). Các máy The New 3GS 8GB bị "NO ALL" iTunes Error (-1) không thể restore và chỉ có thê gửi trả bào hành nếu còn thời hạn.

Ví dụ, số serial của iPhone 4 thường có cấu trúc AABCCDDDEEF, trong đó:
AA = Nhà máy sản xuất và ID của máy móc
B: Năm sản xuất (là chữ số đứng cuối mỗi năm, ) 9=2009, 0=2010, 1=2011, 2=2012)
CC: tuần sản xuất
DDD: Unique identifier (tuy nhiên không liên quan tới UDID của sản phẩm)
EE: Màu sản phẩm
F: Kích cỡ bộ nhớ, trong đó S là 16GB và T là 32GB

Với các version cũ hơn thì quy tắc khác một chút. OSX Daily còn cung cấp một bảng hướng dẫn dễ đọc hơn với 3 ký tự cuối cùng của số serial:
VR0 (iPhone 2G 4GB màu bạc)
WH8 (iPhone 2G 8GB màu bạc)
0KH (iPhone 2G 16GB màu bạc)
Y7H (iPhone 3G 8GB màu đen)
Y7K (iPhone 3G 16GB màu đen)
3NP (iPhone 3GS 16GB màu đen)
3NR (iPhone 3GS 32GB màu đen)
3NQ (iPhone 3Gs 16GB màu trắng)
3NS (iPhone 3Gs 32GB màu trắng)
A4S (iPhone 4 16GB màu đen)
A4T (iPhone 4 32GB màu đen)

Do đó với mỗi loại BootROM thì việc jailbreak sẽ thực hiện khác nhau à nếu dung OLD BootROM thì có nhiều lợi thế hơn khi jailbreak.

BootROM cũ có lỗi vì thế có thể thực hiện untethered jailbreak (không dính cáp) và đồng thời cho phép "bypass" signature check (SHSH) khi restore custom FW à lợi hại nếu có OLD BootROM.

Đưa iPhone về DFU mode bằng iReb à có số giây để biết cách thực hiện à cắm iPhone vào để iTunes nhận, iPhone đang bật à thực hiện theo iReb.
Nếu bị dính recovery mode không thoát được theo cách thông thường à dùng TinyUmbrella để thoát recovery mode

Kiểm tra BootROM là OLD hay NEW bằng cách dung iDetector (iPhone phải đưa về DFU mode trước)

Thực hiện

Apple hiện tại đang để 2 FW active cho 3GS là FW 4.1 và FW 6.1.3.
Kiểm tra baseband à nếu là BB 6.15 thì dùng Redsn0w để downgrade BB 05.13.04 à nếu là BB 5.14 , 5.15 , 5.16 (những thằng không được hỗ trợ) thì nâng lên BB 6.15 rồi làm 1 lần nữa để hạ xuống BB 5.13, ngay cả khi device chưa bao giờ có BB 05.13.04 (đừng hỏi vì sao làm được).  
Tại sao hạ xuống BB 05.13 là theo thông tin thì BB này ít tốn pin hơn BB 6.15 và quan trọng iPhone sẽ bị mất chức năng như định vị GPS bởi vì BB 06.15.00 của iPad không chứa bộ nhớ bản đồ và các lệnh giao tiếp Read/Write với chip GPS.
Nếu máy từ tuần 34 của 2011 trở về sau thì theo cảnh báo của redsn0w không nên up lên BB 6.15 à có thể bị dính NO ALL à QUÁ ĐEN à chỉ có nước chờ tool unlock fix thôi.
Kiểm tra nếu OLD BootROM thì OK rồi, nếu NEW BootROW thì phải có SHSH à xem lại backup SHSH à dùng sn0wbreeze để tạo custom FW à restore lại FW 5.1.1 nếu có SHSH của FW 5.1.1. Nếu không có thì bó tay à chỉ có thể dùng active FW là FW 4.1 hoặc FW 6.1.3 và các FW có backup SHSH.

Tóm lại thực hiện như sau:
Dùng redsn0w JB và nâng BB 6.15 à JB và hạ BB xuống 5.13
Nếu chưa lên FW 6.1.3, tạo custom FW 6.1.3 bằng sn0wbreeze  à restore không nâng BB

Download 6.1.3 nếu cần sn0wbreeze  iPhone2,1_6.1.3_10B329_Restore.ipsw

Đảm bảo redsn0w chạy quyền admin, mode compatibility với Windows XP SP2/SP3
Chọn Extract à Select IPSW à chọn FW 6.0 (lưu ý là 6.0 chứ không phải 6.1.3) à Back chọn JB à chỉ check Install baseband Ipad
Làm thêm 1 lần nữa để hạ BB, đồng thời check install Cydia luôn.
Sau bước này thì vẫn chưa có Cydia để install ultrasn0w à chạy Just Boot (Extract à Select IPSW cũng chọn FW 6.0 à đưa máy về DFU chọn Extras à Just Boot) à iPhone hiện hình quả dứa.
Như vậy là Jailbreak Tethered xong à search & install ultrasn0w trong Cydia à unlock.


2013-04-05

Bypass exception for developing purpose "Trust anchor for certification path not found"

Original: http://stackoverflow.com/questions/6825226/trust-anchor-not-found-for-android-ssl-connection

Dùng bypass exception verify SSL (develop only) trong trường hợp gặp lỗi do cert ko match. Gọi trước khi execute HTTP request


/**
 * Trust every server - dont check for any certificate
 */
private static void trustAllHosts() {
       // Create a trust manager that does not validate certificate chains
       TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
              public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                     return new java.security.cert.X509Certificate[] {};
              }

              public void checkClientTrusted(X509Certificate[] chain,
                           String authType) throws CertificateException {
              }

              public void checkServerTrusted(X509Certificate[] chain,
                           String authType) throws CertificateException {
              }
       } };

       // Install the all-trusting trust manager
       try {
              SSLContext sc = SSLContext.getInstance("TLS");
              sc.init(null, trustAllCerts, new java.security.SecureRandom());
              HttpsURLConnection
                           .setDefaultSSLSocketFactory(sc.getSocketFactory());

              HttpsURLConnection
                           .setDefaultHostnameVerifier(new HostnameVerifier() {
                                  @Override
                                  public boolean verify(String hostname,
                                                SSLSession session) {
                                         return true;
                                  }
                           });
       } catch (Exception e) {
              e.printStackTrace();
       }
}

2013-04-02

ActionBar one-line with tabs

Dùng tabs embedded để ép ActionBar hiển thị trên 1 dòng

Bài viết trên stackoverflow
http://stackoverflow.com/questions/12392541/replicate-actionbar-tabs-with-custom-view/12703960#12703960

Trên Google Group
https://groups.google.com/forum/#!topic/actionbarsherlock/hmmB1JqDeCk

Code dùng reflection


// Hide the home title
ActionBar bar = getSupportActionBar();
bar.setDisplayShowTitleEnabled(false);
// bar.setDisplayShowHomeEnabled(false);

// pre-ICS
if (bar instanceof ActionBarImpl) {
       enableEmbeddedTabs(bar);

       // ICS and forward
} else if (bar instanceof ActionBarWrapper) {
       try {
              Field actionBarField = bar.getClass().getDeclaredField(
                           "mActionBar");
              actionBarField.setAccessible(true);
              enableEmbeddedTabs(actionBarField.get(bar));
       } catch (Exception e) {
              LogUtils.e(TAG, "Error enabling embedded tabs", e);
       }
}

2013-01-11

Đi tới tương lai, bước nhảy alpha trong Doraemon ... và đôi điều suy nghĩ về việc training

Buổi tối rảnh rỗi ...

Mình ngồi nghĩ lại 1 chút về việc training. Đây là cũng là một phần công việc của mình. Có một điều mình luôn tự nhủ "đừng có giải thích gì đó cho một người không thể hiểu hoặc không muốn tìm hiểu". Tuy nhiên nhiều lúc mình lại không làm vậy. Nếu không thể làm được thì mọi công việc training hầu như vô nghĩa. Nó cũng giống như chuyện học vật lý cao siêu mà mọi người hay thấy: đi tới tương lai, không gian n-chiều ...

Mình đề cập chuyện này vì gần đây vừa nhậu và có nói chuyện vui với 1 thằng bạn. 2 thằng gặp nhau nhậu khuya nói chuyện phiếm từ kinh tế, chính trị, rồi qua dạy dỗ con cái ... rồi tới vật lý. Cũng là điều lý thú, nó gợi đến chuyện training kể cả cho bản thân và cho người khác, hoặc cho con trẻ sau này.

 Chẳng là lúc còn đi học phổ thông mình cũng có nghe qua những điều "cao siêu" về vật lý như vậy. Nhưng thực sự thì chẳng có bận tâm tìm hiểu nó là gì, cũng coi truyện Doraemon nào là bước nhảy alpha ... lúc đó game PS hấp dẫn hơn. Hẳn nhiều người cũng như thế. Thực sự nếu tìm hiểu cũng không khó tìm được tài liệu có thể đọc hiểu.

Bắt đầu bằng chuyện đầu tiên "đi tới tương lai", một khái niệm mà thực ra mình cũng không quan tâm cách giải thích bản chất cũng như mãi khi vào đại học mới có thể tìm được các giải thích dễ hiểu (nếu tính theo khái niệm thông dụng mà lớp Toán mình học thì không biết giải thích = ngu "cơ bản"). Mình nhận ra mức độ quan tâm của người muốn tìm hiểu, sự truyền tải và nâng cấp từ những điều người đọc đã biết và theo 1 quá trình mới chính là điểm mấu chốt.

Lúc mới vào ĐH mỗi lần về nhà mình thức rất khuya và hình như xem 1 chương trình trên TV hình như 2 hay 3h gì đó. Mà chẳng hiểu sao những chương trình như vậy rất ít khi chiếu buổi sáng. Cơ bản chương trình đó làm cho nó không có gì khó hiểu và mình nghĩ sau này cũng có thể giải thích cho con mình hoặc kiếm cho nó xem những gì tương tự.

Ý tưởng nó như sau: chấp nhận vận tốc ánh sáng là lớn nhất. Không chấp nhận chuyện này thì dừng ở đây. Còn nó có lớn nhất không thì chẳng ai biết, mà cũng chưa ai nói Einstein sai cả, nên mọi người vẫn cứ cho là vậy. Giả sử có một con tàu di chuyển với vận tốc thấp hơn vận tốc ánh sáng 5km/h. Và lúc đó trên tàu có một cô bé chạy với vận tốc lớn hơn 5km/h cùng chiều con tàu.

Như thế thì tính toán vận tốc tương đối với 1 người dưới đất sẽ phải lớn hơn vận tốc ánh sáng. Điều này là không thể được vì vi phạm việc chúng ta đã chấp nhận vận tốc ánh sáng lớn nhất. Như vậy thì đối với người dưới đất con bé "phải có" tốc độ nhỏ hơn 5km/h, tức cô bé trong mắt người dưới tàu (nếu thấy được, toàn bộ đang là lập luận) phải hoạt động chậm hơn (kiểu từ từ như trong film Matrix ...). Điều này có nghĩa là cô bé trên tàu thì hoạt động bình thường, còn đối với người dưới tàu thấy cô bé hoạt động rất chậm hay nói ngược lại thời gian những người ở dưới tàu trôi qua nhanh hơn.

Nếu con tàu này cứ chạy vòng vòng thì khoảng chênh lệch này càng ngày càng đáng kể. Có khi tàu dừng và cô bé xuống tàu thì thế giới đã trải qua mấy chục năm ... àh như vậy được gọi là đến tương lai nhưng mà chỉ đến rồi thôi ... 1 chiều. Có lẽ như vậy thì ít người muốn vì sẽ mất người thân, thành kẻ ngu ngơ trong 1 thế giới xa lạ. Hoặc họ là những người bị bệnh hiểm nghèo ... cần nền y học tiến bộ hơn. Đến đây thì mình nghĩ một đứa bé vẫn có thể hiểu chừng lớp 5 lúc đó mình nhớ đã tính toán cộng vận tốc.

Về chuyện thứ 2 để kết thúc và đi ngủ mình sẽ nói về bước nhảy alpha trong Doraemon với 1 cách giải thích mình coi được trong một chương trình dạy cho thiếu nhi của Pháp sau này mình mới biết là khá thông thường (xin lỗi lâu quá không nhớ chương trình nó tên gì nữa), lẽ dĩ nhiên không giống cách Doraemon giải thích cho Nobita. Đầu tiên phải nhắc đến khái niệm topology.

Để đơn giản thì hình dung với người không chuyên 1 ví dụ thường dùng là vẽ 1 vòng tròn lên 1 miếng cao su. Rồi chúng ta có thể kéo miếng cao su về 4 hướng, cái hình được vẽ sẽ là hình vuông hay hình chữ nhật hoặc đại loại cũng giống vậy. Như vậy hình tròn với hình vuông là 1 trong topo, nó khác nhau là do bạn cảm nhận được ra sao. Topo là một cái cơ sở cần cung cấp và tới đây mình sẽ nói đến sự hệ thống, quá trình và sự nâng cấp trong training.

Bước thứ 2 một ví dụ để chứng minh việc cảm nhận khác nhau và trong bước này liên quan đến khái niệm "hình dạng vũ trụ". Một game hầu như quen thuộc mà đến giờ nếu ai là game developer vẫn tập làm khi vào một platform mới là asteroid, astronoid hay spaceship, space war ... tiếng Việt đều gọi là "bắn phi thuyền".

Lấy ví dụ game 2D, khi con tàu đi lên hết màn hình phía trên nó lại xuất hiện ở dưới, tương tự như vậy khi đi 2 bên, kể cả đi chéo ...Nếu chỉ nhìn màn hình thì "chúng ta" sẽ giống những con người trong phi thuyền chỉ cảm nhận 2D cứ đi thằng hoài rồi lại về chỗ cũ. Họ có thể lái phi thuyền lên xuống qua, lại nhưng không thể bay ra khỏi màn hình video game được. Vậy liên quan gì đến topology và nâng cấp chứ?

Như vậy "vũ trụ" trong trò game này, có những điểm đầu và điểm cuối "vũ trụ" là một. Vậy có gì trong thế giới 3D đáp ứng được những hoạt động đó. Nếu chỉ băng ngang qua màn hình rồi lại xuất hiện phía bên kia ---> nó có vẻ giống đi vòng quanh 1 hình trụ mở rộng là hình cầu chẳng hạn. Chúng ta "những con người to lớn" nhìn thấy được toàn bộ mô hình 3D, còn những "con người nhỏ bé" trong phi thuyển vẫn tưởng rằng đang đi thẳng trên mặt đất bằng phẳng. Vì sao lại liên quan topology? Bởi về mặt căn bản hình cầu có thể đập dẹp xong rồi kéo ra cho giống màn hình PC :D.

Hay một ví dụ khác là minh họa trên Wikipedia tiếng Việt về topology, tách cafe, hay bánh donut là những topo có 1 lỗ thủng.


Dưới con mắt tôpô học, cái cốc và cái vòng là một


Một tách cà phê trở thành vòng xuyến qua sự biến dạng hình học bảo toàn các bất biến tô pô. Cả tách cà phê và bánh vòng đều có những tính chất tô pô hoàn toàn giống nhau.

http://offroadinghome.blogspot.com/2010/08/gps-maps-106-reading-topo-map.html


Vậy đi từ đầu này sang đầu kia trái đất thì đường nào nhất nhất. Hẳn nhiên nếu có đường xuyên trái đất thì đường thẳng xuyên trái đất đó là ngắn nhất. Vấn đề là trái đất không có một lỗ thủng như vậy.
Lỗ thủng :D là một đặc điểm mà topology nhiên cứu.

Trên Wikipedia có nêu:

"Như vậy có thể nói một cách nôm na rằng tô pô là một ngành nghiên cứu về đặc tính của các cấu trúc đặc có tính siêu co giãn, siêu biến dạng nhưng lại không thể bị cắt rời thành nhiều mảnh, không thể bị đâm thủng hay bị dán dính vào nhau."

Tuy nhiên có một cái hình hay hơn từ đó thêm nhiều hình dung, hình mà trong topo học hay ví dụ là hình cái bánh donut. Phi thuyền có thể đi thẳng lên, sang ngang vạch một đường tròn trên cái bánh donut, hoặc di chuyển chéo vạch một elipse.





Dĩ nhiên câu hỏi cũ đạt ra trong trường hợp này nếu đi từ đầu này sang dầu kia cái bánh (mũi tên xanh), đường nào ngắn nhất. Với những "con người nhỏ bé trong phi thuyền", "đi thằng" là ngắn nhất. Nhưng chúng ta biết rằng đường họ đi trên bề mặt cái bánh donut chẳng phải "đường thẳng". Nếu "tiến bộ", họ nên có 1 con tàu, đi xuyên qua khoảng không giữa cái bánh mới phải. Có thể họ gọi đó là bước nhảy alpha.

Cũng như chúng ta, giống trong một thế giới có nhiều hơn 3 chiều. Nhiều nhà khoa học cho rằng chiều còn lại chính là thời gian. Tuy nhiên ta chỉ cảm nhận được 3 chiều. Nó giống như những "người bạn nhỏ" trong phi thuyền 2D, chỉ cảm nhận được 2 chiều trong thế giới 3 chiều. Và thực sự không cách nào cảm nhận được hơn 3 chiều, tất cả chỉ là tưởng tượng. Ai mà biết hình dạng vũ trụ như thế nào.

Đến đây nếu hỏi không có topo học thì chúng ta sẽ nói bằng cái gì trước. Nếu không tìm ra video game, hay quả đất hay hình cái bánh donut, không đi từ 2D sang 3D chúng ta có thể nói 1 thứ mà chẳng biết có tồn tại không hoặc thậm chí có cũng chẳng có bất kỳ ai có thể cảm nhận. Đó là sự mở rộng, là sự quan trọng của công việc cung cấp cơ sở và phải có quá trình nâng cấp. Tất nhiên training những điều cảm nhận được tính ra phải dễ hơn giải thích bước nhảy "tào lao" alpha mà chẳng ai dám chắc có hay không. Good night ...




2013-01-03

Implementing RESTful clients on Android 4.0

Ai đã từng muốn phát triển một RESTful app trên Android hẳn đã xem qua Google I/O 2010
Developing Android REST client applications. Nếu chưa từng làm thì video này sẽ giới thiệu những vấn đề rất quan trọng khi làm app với REST. Tuy nhiên có nhiều thứ đã thay đổi từ lúc đó đến giờ như Fragment, AsyncTaskLoader ... Mình cũng rất lâu rồi không đụng Android từ lúc chưa ra 3.0, cần update thêm haizzzz...

Trên stackoverflow có một article về việc này
Is the rest client app design approach in google io 2010 still up to date?

Về các cách tiếp cận đề cập trong Google I/O 2010 thì không có source code demo. Để có thêm tham khảo thì link rất hữu ích của Neil Goodman với Part 1 và Part 2.

Có thể tham khảo Robospice
https://github.com/stephanenicolas/robospice

2012-12-16

Ngày cuối năm ...


Ngày cuối năm,

Cũng những ngày này cách đây 4 năm mình đã xin nghỉ công ty mà mình đã làm việc 3 năm, vào đúng 1 ngày trước dịp xét tăng lương. Mọi người kêu sao không đợi qua Tết để nhận thưởng; mình cũng biết chứ, chỉ là cảm thấy rằng ko đợi được. 1 tháng lương đó + tiền tăng lương không đáng giá bằng việc hết phải chán nản từ nhà đi đi về về E-town suốt 2,3 tháng. Lúc đó mình đã từng viết rằng sẽ kiếm một cái gì đó vui vẻ để làm và cố gắng kiếm tiền còn những công việc buồn chán thì kệ nó.

Nói thì nói vậy nhưng hình như sau đó mình chỉ theo vế đầu. Không làm việc cho một công ty nào cả. Bạn bè kêu rằng mình  "lười" nhưng nghĩ lại mình đâu có lười, cũng làm từ trưa tới tối khuya, chỉ là lệch thời gian thôi. Thời gian rồi cũng trôi nhanh dù là làm "tạm bợ", hết tiền thì kiếm việc làm có tiền thì từ từ :D, rồi việc này việc khác, cũng vẫn đủ sống...

1 thời gian theo đuổi những không khí gọi là "mới so với trước đây" + thất bại trong việc mở quán game mất 1 số tiền cũng khá nhiều ... mình xác định mình sẽ lại đi làm thuê. Dù gì làm thuê vẫn còn có tiền đều đặn hàng tháng mà cũng nhẹ đầu hơn, đã vậy còn ra đường và ăn cơm trưa đều đặn hơn. Mình search trên 1 vòng, activate lại account trên mấy trang kiếm việc, rồi chuẩn bị CV dù chưa định gửi đi đâu. Quay qua quay lại cũng chỉ thấy E-Town, Quang Trung ... Lại lần nữa không cảm thấy thoải mái rồi từ chối các offer gọi đến.

Sau đó theo lời gọi của sếp và bạn bè cũ, mình về làm lại ở công ty trước đây, bên đó đang làm 1 số sp mới. Lúc đầu về thì cũng nhiều ý tưởng lắm, công ty cũng đã phát triển hơn. Nhưng rút cuộc 1 thời gian thì cũng chỉ làm 1 mình, phát triển mấy cái sản phẩm mà cuối cùng chẳng ai dùng. Việc thay đổi thói quen của người dùng không hề đơn giản. Năm đó đăng ký học chuyển đổi, rồi cưới vợ. Mọi việc cứ dần trôi qua ... và có lẽ đó là hai chuyện có thể coi là thành công trong năm. 1 năm sau công ty cũ "phá sản". Không phải phá sản theo nghĩa hết tiền, căn bản không phải do thiếu tiền mà thiếu hướng đi và thất bại trong định hướng. Những ngày cuối sếp có hỏi nên giữ lại nhiều developer không, mình nghĩ nên thông báo cho họ kiếm việc mới. Rồi sau đó công ty dọn VP sang Q.7, mình lại ở nhà làm, từ từ mất lửa và bỏ hẳn những việc làm dở version cho iOS, Android... Ý tưởng tốt thì sếp có nhưng có lẽ sếp nghĩ sai về IT. Nó không dễ đến nỗi ai cũng có thể làm và càng không phải là muốn làm gì thì làm. Quan trọng mình nghĩ chỉ đầu tư sơ sài trong khi mong muốn có 1 sản phẩm mang lại tiền là điều không thể.

Thời gian đó mình cũng về xem lại việc làm trong công ty đã cùng mở với thằng bạn. Dù gì công ty cũng có 1 chữ tên mình... 6 tháng sau tự nghĩ mình vẫn chưa thể giúp gì cho nó phát triển hơn mà công việc này giúp mình chán nản hơn và "ít tiền hơn" (tất nhiên)... mình lại tạm thời ra đi. Vẫn chưa thấy hướng đi và làm 1 công ty mà vẫn phải kiếm tiền chỗ khác để sống thì cũng ko khoái, cảm thấy không focus được. Lần thứ 2 lại chuẩn bị CV (update lại tình trạng hôn nhân), lại search và lại cảm thấy 1 chút gì đó lưỡng lự. Không phải sợ rằng mình không đáp ứng được công việc nhưng sợ rằng mình không phải là người thuộc 1 tổ chức nào đó. Đã 3 năm hầu không dậy sớm, công việc 1 mình, schedule chỉ có mỗi tên mình, không daily report... Công ty là một từ gì đó xa lạ và mình vẫn chần chờ...

Với tâm trạng đó xui rủi thế nào mình lại gặp 1 công ty làm 1 sp mới. Và bây giờ khoảng 1 năm sau ... lần thứ 3 nghĩ rằng mình sẽ chuẩn bị CV. Lần này là vì tiền, thời gian và quan trọng là cảm thấy không thoải mái. Đầu tiên, tiền là một phần quan trọng kéo nhiều thứ khác đi xuống, tất nhiên không phải là tất cả. Mình nghĩ mình không thể nào tiếp tục làm nếu quá tốn thời gian mà thu nhập lại không ổn định, không có đủ niềm tin. Mình có thể không nhận gì 1 thời gian nhất định. Nhưng cả team thì khác, tới tháng chưa nhận lương thì tinh thần xuống thảm, không thể làm gì trong cái không khí như vậy. Quan trọng hơn là cảm thấy thời gian trôi qua mà không làm được gì. Cảm thấy mất dần niềm tin từ gia đình người thân- những người đã tôn trọng lựa chọn của mình khi mình đã đánh đổi hướng đi này với những hướng đi khác.

Rút cuộc nhìn lại mình nhận thấy mình đang trốn chạy? Trốn chạy công việc đã từng làm là outsourcing, trốn chạy E-Town, Quang Trung, CNC... Nhìn lại mình thích làm cái gì đó khác, bị hấp dẫn bởi nhưng dự án làm sp mới. Mình cũng nhận ra những gì mình gặp thuộc 2 dạng có tiền thì lại không có những thứ khác (nhân sự cùi, kế hoạch, tiếp cận khách hàng) và ngược lại 1 số có thể làm được cái gì đó (chí ít cũng có người cho là vậy) thì lại không có tiền. Tất nhiên sống bằng niềm tin không xấu, chỉ có điều mình không nhận thấy những căn cứ mình có đủ để tin. Tóm lại là chưa đủ tầm và chưa đủ tài, mà ko dám đối mặt. Còn gia đình và nhiều thứ khác cần tiền... 3-4 năm trời không làm được gì, 4-5 tháng không có lương, mượn tiền vợ và bỏ ra cả vài trăm triệu :(. Không làm IT nữa thì bỏ việc và cũng không cần ở tp này nữa???

Cuối cùng năm 2012, nếu không tận thế thì mình vẫn sẽ theo những gì đã viết 4 năm trước nhưng có lẽ sẽ phải hành động khác.