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