Archive for January, 2010
Sống để được…ghét?
by vietfov on Jan.26, 2010, under live life
Bài viết gốc được đăng trên blog Mr Wang Says So từ… tháng 8 – 2008, VietNamNet dịch, đăng lên và được mình 100% đăng lại. Xuyên suốt bài viết là một loạt hiệu ứng ngược, và những hiệu ứng ngược này có vẻ rất hiệu quả ở mức độ hấp dẫn của nó. Ý nghĩa ngang tàng, hiện đại, hài hước, tinh tế & thâm thuý.
Bài phát biểu của Adrian Tan (một luật sư tranh tụng người Singapore) tại lễ tốt nghiệp của Trường Nanyang Technological University (Singapore).
Đừng đặt cuộc sống trong giới hạn của những người trung bình
Thật là một vinh dự lớn lao khi được dành mười phút phát biểu tại đây mà chẳng lo bị phản bác, mỉa mai hay trả thù. Tôi nói điều này với tư cách một người Singapore và hơn hết là với tư cách một người chồng.
Vợ tôi là một người tuyệt vời, hoàn hảo ở mọi khía cạnh duy chỉ ngoại lệ một điều. Cô ấy là biên tập viên của một tờ tạp chí. Cô ấy kiếm sống nhờ “sửa lưng” người khác. Cô ấy đã mài dũa kỹ năng chuyên môn của mình hơn một phần tư thế kỷ, chủ yếu nhờ luyện tập tại nhà qua những cuộc trao đổi giữa hai vợ chồng.
Nói dễ hiểu hơn, tôi là một luật sư tranh tụng. Tôi dành thời gian mỗi ngày để chỉ ra sai lầm của người khác. Tôi kiếm sống bằng việc phản bác.
Dẫu vậy đời sống hôn nhân của chúng tôi vẫn cực kỳ hạnh phúc. Đơn giản vì mỗi khi có cuộc tranh cãi giữa một biên tập viên và một luật sư, kẻ chiến thắng không ai khác ngoài vợ.
Và chính thế nên tôi muốn bắt đầu bài này bằng một lời khuyên nhỏ cho cánh mày râu: một khi đã chinh phục được trái tim nàng, bạn chẳng nhất thiết phải chinh phục nốt mấy cuộc tranh luận.
Hôn nhân được coi là một dấu mốc của cuộc đời. Một số trong các bạn đã kết hôn. Một số chưa từng kết hôn. Một số sẽ kết hôn. Một số rất thích tận hưởng trải nghiệm này và sẽ kết hôn nhiều, nhiều lần nữa. Cũng tốt thôi.
Dấu mốc lớn tiếp theo trong cuộc đời các bạn là ngày hôm nay: lễ tốt nghiệp. Kết thúc quá trình giáo dục. Hoàn tất việc học.
Có một lời nói dối vĩ đại mà các bạn có thể đã được nghe, rằng “Học tập là hành trình cả đời”. Rồi vì lẽ đó mà bạn sẽ học nữa, lấy bằng thạc sĩ, rồi tiến sĩ, rồi giáo sư, cứ thế. Bạn biết ai đã nói với bạn như thế chứ? Giáo viên. Bạn không thấy có chút mâu thuẫn quyền lợi nào ở đây sao? Dù gì đi nữa thì đây cũng là thị trường giáo dục. Họ sẽ ra sao nếu thiếu các bạn? Họ cần những khách hàng thường xuyên.
[ . . . . ]
Các bạn có thể đang mong mỏi tới ngày đi làm, tìm được tình yêu, kết hôn, gây dựng gia đình. Những sinh viên như các bạn ắt hẳn trông đợi một công việc lương cao, nơi mà bạn phải làm quần quật với một mớ trách nhiệm.
Đó là những gì được trông mong, hy vọng. Và nếu các bạn sống đúng y như thế, thật sự quá sức lãng phí.
Nếu các bạn trông đợi như thế, các bạn sẽ tự giới hạn mình. Các bạn sẽ sống cuộc đời bị bao bọc trong ranh giới được đặt ra bởi những người trung bình. Tôi không có ý đánh giá họ. Nhưng không ai nên khát khao trở thành họ. Các bạn chẳng cần phải bỏ ra bấy nhiêu năm học hỏi từ bao con người ưu tú của Singapore để chuẩn bị tinh thần trở thành kẻ trung bình.
Cái các bạn nên chuẩn bị tinh thần là Đời, là một mớ hỗn độn. Bạn chẳng thể trông mong bất cứ điều gì từ nó. Đời là bất công. Tất cả vốn dĩ đã không cân bằng. Đời là bất khả khống chế. Mọi điều tốt xấu cứ thế ập đến từng ngày, từng giờ, từng khoảnh khắc. Tấm bằng là lá chắn yếu ớt bao bọc bạn trước số phận.
Điều đầu tiên và quan trọng nhất: đừng làm việc
Công việc là thứ miễn cưỡng, là thứ không ai mong muốn.
Công việc có thể giết bạn. Người Nhật có từ “Karoshi” để chỉ việc tử vong vì làm việc quá sức. Đó là hậu quả rõ ràng nhất của công việc. Nó còn có thể giết bạn theo nhiều cách khác. Nếu bạn làm việc, ngày này qua ngày khác, tâm hồn bạn sẽ bị bào mòn từng chút từng chút một, rã ra cho đến khi chẳng còn lại gì. Một hòn đá chỉ còn trơ lại cát và bụi.
[ . . ]
Đừng lãng phí phần lớn cuộc đời để làm thứ mình không thích cốt để hưởng tí an nhàn chút tuổi già. Bạn có thể không bao giờ chạm được tới cái đích đó.
Hoãn cái ham muốn tìm một công việc lại. Thay vì thế, hãy vui chơi. Tìm một thứ mà bạn hứng thú. Thực hiện nó. Lặp đi lặp lại. Rồi bạn sẽ giỏi vì hai lý do: bạn thích nó, và bạn làm nó thường xuyên. Sớm muộn gì thì nó cũng có giá trị.
Tôi thích tranh luận, và tôi yêu ngôn ngữ. Vì thế tôi trở thành luật sư. Tôi thích nó và thậm chí có thể làm không công. Nếu không trở thành luật sư, tôi cũng sẽ chọn một nghề liên quan đến viết lách – một nhà báo thể thao chẳng hạn.
Vậy các bạn nên làm gì? Hãy tìm một chỗ cho riêng mình. Tôi nghĩ việc tìm kiếm chẳng hề khó khăn với các bạn. Tại thời điểm này của cuộc đời, các bạn hẳn đã biết mình muốn làm gì. Sẽ tuyệt vời hơn nữa nếu các bạn không thể ngăn mình theo đuổi đam mê. Tại thời điểm này của cuộc đời, các bạn nên biết thứ mình hứng thú.
Hãy tìm một thứ truyền động lực cho bạn, thiêu đốt bạn, trở thành đam mê của bạn. Mỗi ngày, bạn phải tỉnh dậy mang trong mình nhiệt huyết không ngừng nghỉ. Nếu không, bạn hẳn đang làm việc.
Đa số các bạn trong tương lai sẽ phải tham gia vào nhiều loại hoạt động giao tiếp. Tôi có một thông điệp thứ hai: hãy thận trọng với sự thật. Có rất nhiều thời điểm nguy hiểm, tuyệt nhiên không thể nói hay viết ra sự thật. Nó có khả năng xúc phạm và làm tổn thương ghê gớm, rồi bạn sẽ nhận ra rằng: với những người càng gần gũi bao nhiêu, bạn càng phải thận trọng bấy nhiêu để che giấu sự thật. Thường thì im lặng là một tính tốt. Nó còn là một kỹ năng tuyệt vời. Đứa con nít nào cũng có thể bật ra sự thật trước khi lường tới hệ quả. Phải rất trưởng thành mới có khả năng trân trọng giá trị của sự im lặng.
Để có thể che giấu sự thật, bạn trước hết phải thừa nhận nó. Phải tuyệt đối trung thực với bản thân. Đừng bao giờ cố qua mặt kẻ trong gương.
Tôi đã bảo rằng các bạn không nên làm việc, tránh nói ra sự thật. Giờ thêm một điều nữa: hãy cố “được” ghét.
Nó không dễ như bạn tưởng. Bạn có biết ai ghét bạn không? Tất cả những vĩ nhân có đóng góp vào lịch sử nhân loại đều đã từng bị ghét, không phải bởi một người, mà thường là rất nhiều người. Sự căm ghét lớn đến mức những vĩ nhân này bị xa lánh, lăng mạ, giết hại hay trong một trường hợp nổi tiếng, bị đóng đinh vào thập tự.
Không nhất thiết phải xấu xa mới bị ghét. Một người có thể bị ghét vì cố gắng thực hiện lẽ phải theo tiếng nói của bản thân. Thật sự quá dễ để được yêu mến, bạn chỉ cần tỏ ra dễ tính và ít giữ chính kiến. Dần dà an phận là một kẻ trung bình. Hẳn bạn không muốn thế. Trên thế giới có rất rất nhiều kẻ tồi tệ, và nếu bạn không chống lại họ, bạn sẽ tồi tệ giống như họ. Quá được yêu mến là dấu hiệu chứng tỏ bạn đang đi sai đường.
Điều cuối cùng: hãy yêu đi
Tôi không nói “được yêu”. Nó cần đánh đổi quá nhiều. Nếu một người chủ động thay đổi vẻ ngoài, tính cách và giá trị bản thân, họ có thể được bất cứ ai yêu.
Tôi khuyến khích bạn yêu một người. Nghe có vẻ hơi quái. Bạn có thể cho rằng nó phải xảy đến tự nhiên mà không cần cân nhắc. Sai lầm. Xã hội hiện đại chống lại tình yêu. Chúng ta soi mọi người dưới lăng kính hiển vi hòng tìm ra thiếu sót và nhược điểm của họ. Thật quá dễ dàng để tìm một lý do không yêu ai đó, hơn là làm ngược lại. Chỉ cần duy nhất một lý do để từ chối. Tình yêu lại đòi hỏi sự chấp nhận toàn diện.
Yêu một người có rất nhiều lợi ích. Đó là sự ngưỡng mộ, học hỏi, thu hút và, cho những ai thích từ hay hơn, thứ mà chúng ta gọi là hạnh phúc. Khi đang yêu ai đó, chúng ta cố gắng hoàn thiện bản thân ở mọi khía cạnh. Chúng ta nhận ra sự tầm thường của vật chất. Chúng ta vui khi là con người. Yêu thương có lợi cho tâm hồn.
Yêu một người vì lẽ đó rất quan trọng, và cũng quan trọng không kém là chọn đúng người để yêu. Tình yêu không đến ngẫu nhiên, từ cái nhìn đầu tiên, tại một sàn nhảy đông đúc. Nó vươn mình chậm rãi, cắm rễ trước khi chia cành và đơm hoa. Nó không phải ngọn cỏ dại yếu ớt, mà là thân cây đủ khỏe mạnh để đương đầu gió bão.
Bạn sẽ nhận ra, khi có một ai đó để yêu, khuôn mặt sẽ chẳng quan trọng bằng trí óc, cơ thể sẽ chẳng quan trọng bằng trái tim.
Bạn cũng sẽ nhận ra chẳng có nỗi đau nào quá lớn khi yêu thương không được đáp lại. Bạn làm mọi thứ không phải để được đền đáp.
Cuối cùng, bạn sẽ nhận ra yêu thương ai đó vốn chẳng thể đo lường. Hoặc là yêu với từng tế bào trong cơ thể mà chẳng hề hối tiếc, hoặc là không gì cả.
Đừng làm việc. Tránh nói ra sự thật. Cố “được” ghét. Yêu một ai đó. Bạn sẽ có một cuộc đời đầy bận rộn.
*
[Trần Lê Anh Minh (dịch) - VNN]
DateTime C# issue
by vietfov on Jan.26, 2010, under IT
Việc xử lý với chuỗi thời gian thường hay gặp trong các chương trình đồng bộ, thống kê, schedule tasks. Vấn đề tưởng chừng như đơn giản khi sử dụng lớp DateTime, tuy nhiên lớp này lại tái hiện nguyên chuẩn thời gian trên hệ thống thời gian hiện tại của hệ điều hành.
Ví dụ với chuỗi ngày “25/02/2010″ ghi trong DB, khi cần đọc, hệ thống dùng chuẩn vi-VN sẽ thông báo đó là ngày 25 tháng 2, tuy nhiên với chuẩn en-US lại là ngày 2 tháng 25, dẫn đến System.FormatException. Sẽ là tai hoạ nếu đây là hệ thống backup hoặc tính lương nhân viên… Hoàn toàn khác với PHP, quy về một chuẩn format chung mặc định là Unix timestamp.
Vì vậy mới có trường hợp coder kêu đúng nhưng khách hàng lại báo sai.
Để khắc phục, các hàm Parse hoặc lưu DateTime trong DB hoặc khi nhập DateTime trong DateTimePicker không nên để mặc định mà cần dùng chung một chuẩn Format riêng (Custom). Nghĩa là khi sử dụng chuẩn vi-VN thì luôn lưu trữ, lấy thông tin theo kiểu vi-VN này (25/02/2010) và để dạng custom của nó là “dd/MM/yyyy”. Cho dù hệ thống hiện tại sử dụng định dạng gì đi nữa thì kết quả vẫn thể hiện đúng, nó vẫn hiểu đâu là ngày, đâu là tháng.
IFormatProvider culture = new CultureInfo(“vi-VN”, true);
string timeDayFormat = “dd/MM/yyyy”;
string timeHourFormat = “HH:mm:ss”;
string timeDayHourFormat = “dd/MM/yyyy HH:mm:ss”;DateTime d = DateTime.ParseExact(“25/02/2010″, timeDateFormat, culture)
Console.WriteLine(d.toString());// output
// Đối với hệ thống sử dụng en-US:
// 02/25/2010
// Đối với hệ thống sử dụng vi-VN:
// 25/02/2010
Tham khảo (trích msdn):
| Định dạng | Description | Examples |
|---|---|---|
| “d” | Ngày của tháng. Từ 1-31. | 6/1/2009 1:45:30 PM -> 1
6/15/2009 1:45:30 PM -> 15 |
| “dd” | Ngày của tháng. Từ 01-31. | 6/1/2009 1:45:30 PM -> 01
6/15/2009 1:45:30 PM -> 15 |
| “ddd” | Tên viết tắt của ngày trong Tuần. | 6/15/2009 1:45:30 PM -> Mon (en-US)
6/15/2009 1:45:30 PM -> Пн (ru-RU) 6/15/2009 1:45:30 PM -> lun. (fr-FR) |
| “dddd” | Tên đầy đủ của ngày trong Tuần. | 6/15/2009 1:45:30 PM -> Monday (en-US)
6/15/2009 1:45:30 PM -> понедельник (ru-RU) 6/15/2009 1:45:30 PM -> lundi (fr-FR) |
| “f” | Giá trị phần mười (1/10) của giây trong lớp thời gian. | 6/15/2009 13:45:30.617 -> 6
6/15/2009 13:45:30.050 -> 0 |
| “ff” | Giá trị phần trăm (1/100) của giây trong lớp thời gian. | 6/15/2009 13:45:30.617 -> 61
6/15/2009 13:45:30.005 -> 00 |
| “fff” | milliseconds | 6/15/2009 13:45:30.617 -> 617
6/15/2009 13:45:30.0005 -> 000 |
| “ffff” | milliseconds (hàng ngàn) | 6/15/2009 13:45:30.6175 -> 6175
6/15/2009 13:45:30.00005 -> 0000 |
| “fffff” | milliseconds (hàng chục ngàn) | 6/15/2009 13:45:30.61754 -> 61754
6/15/2009 13:45:30.000005 -> 00000 |
| “ffffff” | milliseconds (hàng trăm ngàn) | 6/15/2009 13:45:30.617542 -> 617542
6/15/2009 13:45:30.0000005 -> 000000 |
| “fffffff” | milliseconds (hàng triệu) | 6/15/2009 13:45:30.6175425 -> 6175425
6/15/2009 13:45:30.0001150 -> 0001150 |
| “F” | Giá trị phần mười (1/10) của giây, khác 0 | 6/15/2009 13:45:30.617 -> 6
6/15/2009 13:45:30.050 -> (no output) |
| “FF” | Giá trị phần trăm (1/100) của giây, khác 0 | 6/15/2009 13:45:30.617 -> 61
6/15/2009 13:45:30.005 -> (no output) |
| “FFF” | Giá trị phần ngàn (1/1000) của giây, khác 0 | 6/15/2009 13:45:30.617 -> 617
6/15/2009 13:45:30.0005 -> (no output) |
| “FFFF” | Giá trị phần chục ngàn (1/10000) của giây, khác 0 | 6/1/2009 13:45:30.5275 -> 5275
6/15/2009 13:45:30.00005 -> (no output) |
| “FFFFF” | Giá trị phần trăm ngàn (1/100.000) của giây, khác 0 | 6/15/2009 13:45:30.61754 -> 61754
6/15/2009 13:45:30.000005 -> (no output) |
| “FFFFFF” | Giá trị phần triệu (1/1.000.000) của giây, khác 0 | 6/15/2009 13:45:30.617542 -> 617542
6/15/2009 13:45:30.0000005 -> (no output) |
| “FFFFFFF” | Giá trị phần chục triệu (1/10.000.000) của giây, khác 0 | 6/15/2009 13:45:30.6175425 -> 6175425
6/15/2009 13:45:30.0001150 -> 000115 |
| “g”, “gg” | Trước/ sau công nguyên | 6/15/2009 1:45:30 PM -> A.D. |
| “h” | Giờ. 1-12 | 6/15/2009 1:45:30 AM -> 1
6/15/2009 1:45:30 PM -> 1 |
| “hh” | Giờ. 00-12 | 6/15/2009 1:45:30 AM -> 01
6/15/2009 1:45:30 PM -> 01 |
| “H” | Giờ. 0-23 | 6/15/2009 1:45:30 AM -> 1
6/15/2009 1:45:30 PM -> 13 |
| “HH” | Giờ. 00-23 | 6/15/2009 1:45:30 AM -> 01
6/15/2009 1:45:30 PM -> 13 |
| “K” | Time zone information. | 6/15/2009 1:45:30 PM, Kind Unspecified ->
6/15/2009 1:45:30 PM, Kind Utc -> Z 6/15/2009 1:45:30 PM, Kind Local -> -07:00 |
| “m” | Phút. 0-59 | 6/15/2009 1:09:30 AM -> 9
6/15/2009 1:09:30 PM -> 9 |
| “mm” | Phút. 00-59 | 6/15/2009 1:09:30 AM -> 09
6/15/2009 1:09:30 PM -> 09 |
| “M” | Tháng. 1-12 | 6/15/2009 1:45:30 PM -> 6 |
| “MM” | Tháng. 01-12 | 6/15/2009 1:45:30 PM -> 06 |
| “MMM” | Tên viết tắt của Tháng. | 6/15/2009 1:45:30 PM -> Jun (en-US)
6/15/2009 1:45:30 PM -> juin (fr-FR) 6/15/2009 1:45:30 PM -> Jun (zu-ZA) |
| “MMMM” | Tên đầy đủ của Tháng. | 6/15/2009 1:45:30 PM -> June (en-US)
6/15/2009 1:45:30 PM -> juni (da-DK) 6/15/2009 1:45:30 PM -> uJuni (zu-ZA) |
| “s” | Giây. 0-59 | 6/15/2009 1:45:09 PM -> 9 |
| “ss” | Giây. 00-59 | 6/15/2009 1:45:09 PM -> 09 |
| “t” | Chữ cái đầu tiên của định danh AM/PM | 6/15/2009 1:45:30 PM -> P (en-US)
6/15/2009 1:45:30 PM -> 午 (ja-JP) 6/15/2009 1:45:30 PM -> (fr-FR) |
| “tt” | AM/PM | 6/15/2009 1:45:30 PM -> PM (en-US)
6/15/2009 1:45:30 PM -> 午後 (ja-JP) 6/15/2009 1:45:30 PM -> (fr-FR) |
| “y” | Năm. 0-99 | 1/1/0001 12:00:00 AM -> 1
1/1/0900 12:00:00 AM -> 0 1/1/1900 12:00:00 AM -> 0 6/15/2009 1:45:30 PM -> 9 |
| “yy” | Năm. 00-99 | 1/1/0001 12:00:00 AM -> 01
1/1/0900 12:00:00 AM -> 00 1/1/1900 12:00:00 AM -> 00 6/15/2009 1:45:30 PM -> 09 |
| “yyy” | Năm. Tối thiểu là 3 ký tự. | 1/1/0001 12:00:00 AM -> 001
1/1/0900 12:00:00 AM -> 900 1/1/1900 12:00:00 AM -> 1900 6/15/2009 1:45:30 PM -> 2009 |
| “yyyy” | Năm. 4 ký tự. | 1/1/0001 12:00:00 AM -> 0001
1/1/0900 12:00:00 AM -> 0900 1/1/1900 12:00:00 AM -> 1900 6/15/2009 1:45:30 PM -> 2009 |
| “yyyyy” | Năm. 5 ký tự. | 1/1/0001 12:00:00 AM -> 00001
6/15/2009 1:45:30 PM -> 02009 |
| “z” | Giờ lệch với giờ UTC. | 6/15/2009 1:45:30 PM -07:00 -> -7 |
| “zz” | Giờ lệch với giờ UTC. Có số 0 đứng đầu. | 6/15/2009 1:45:30 PM -07:00 -> -07 |
| “zzz” | Giờ:Phút lệch với giờ UTC. Có số 0 đứng đầu. | 6/15/2009 1:45:30 PM -07:00 -> -07:00 |
| “:” | Ký tự tách giờ. | 6/15/2009 1:45:30 PM -> : (en-US)
6/15/2009 1:45:30 PM -> . (it-IT) 6/15/2009 1:45:30 PM -> : (ja-JP) |
| “/” | Ký tự tách ngày. | 6/15/2009 1:45:30 PM -> / (en-US)
6/15/2009 1:45:30 PM -> – (ar-DZ) 6/15/2009 1:45:30 PM -> . (tr-TR) |
| “string”
‘string’ |
Chuỗi tách giờ. | 6/15/2009 1:45:30 PM (“arr:” h:m t) -> arr: 1:45 P
6/15/2009 1:45:30 PM (‘arr:’ h:m t) -> arr: 1:45 P |
| % | Xác định ký tự với kiểu Custom | 6/15/2009 1:45:30 PM (%h) -> 1 |
| \ | Ký tự bồi. | 6/15/2009 1:45:30 PM (h \h) -> 1 h |
| Any other character | Ký tự luôn không đổi sau khi định dạng. | 6/15/2009 1:45:30 AM (arr hh:mm t) -> arr 01:45 A |
Handgrips
by vietfov on Jan.22, 2010, under IT
Trong nhà có cái đồ bóp, thế là sáng dậy bóp 2 cái, tối ngủ bóp 2 cái, hay trước khi làm gì cũng lấy tay bóp bóp 2 cái.
Bắt cóc, Internet & An toàn thông tin
by vietfov on Jan.17, 2010, under IT

24g ngày 16-1. Lúc này, điều quan trọng nhất là bảo đảm an toàn tuyệt đối cho con tin.
00g18 ngày 17-1 lực lượng đặc công đã tràn sâu vào nhà nghỉ nhưng vẫn đang tìm phương án giữ an toàn cho con tin.
Chủ nhà nghỉ cho biết, căn phòng tên Minh sử dụng là phòng nghỉ bình dân nên không có điện thoại cũng như internet…
Sau 30 phút tắt đèn. Đến 0g 35 phút, đối tượng bật đèn quan sát. Thế nhưng, các lực lượng chức năng đã cố tình để lại một hiện trường vắng lặng. Vẫn chưa có quyết định cuối cùng.
TP Huế dường như không ngủ, mọi người thức để chờ đợi. Dù nhiều ngả đường đã bị chặn nhưng người dân vẫn tụ tập và thức cùng lực lượng giải cứu…
Theo bài báo thì đối tượng đó có điện thoại, nếu có đồng bọn hoặc điện thoại hắn có 2,5G/3G thì chắc chắn tính chất bảo mật của phương án của các chú công an phe ta sẽ không còn. Cái này gọi là vi phạm quy tắc ATTT đây hehehe
YMSG Authentications
by vietfov on Jan.07, 2010, under IT
Cái YMSG protocol mà mình giới thiệu ở phần trước, từ mấy tháng nay đã không authenticating thành công tới server csc.msg.yahoo.com nữa, nhiều bạn thắc mắc điều này nhưng mình không có time để xem lại. Đợt này bỗng nhiên phong trào tìm hiểu ymsg lại lên cao, qua việc các bạn sv add nick hỏi mình rất nhiều, và cũng có dự án liên quan đến vấn đề này nên mình cũng tiếp tục soi xét cái ymsg này hehe.
Nguyên nhân đơn giản là Yahoo đã thay đổi hàm authentication, việc đơn giản nhất là ta chỉ cần đổi kết nối server tới cn.csc.msg.yahoo.com [do server này vẫn sử dụng thuật toán cũ]
Riêng với các đường kết nối qua đường httpweb (hầu như) vẫn không thay đổi,
Giới thiệu qua một vài cách Authenticate với các máy chủ Y!Messenger
- YMSG 16
Cách xác định một tài khoản đúng cùng với chuỗi Challenge String trả về được thực hiện bằng cách truy vấn url tới
https://login.yahoo.com/config/pwtoken_get?src=ymsgr&ts=&login=USERNAME&passwd=PASSWORD&chal=CHALLENGESTRING
Với các mã trả về (int)
- 0 : Thành công (Đúng ID & Pass)
- 1212: Không thành công (Sai ID || Pass)
[
100 - if username or password is missing.
1013 - username contains @yahoo.com or similar which needs removing.
1212 - is the username or password is incorrect.
1213 - is a security lock from to many failed login attempts
1214 - is a security lock
1218 - if the account has been deactivated by Yahoo
1235 - if the username does not exist.
1236 - locked due to to many login attempts
]
Kèm theo một chuỗi ymsgr=<OURTOKEN>
OURTOKEN chính là giá trị token mà máy chủ web trả về cho phiên giao dịch hiện tại, tiếp tục truy vấn đến:
https://login.yahoo.com/config/pwtoken_login?src=ymsgr&ts=&token=OURTOKEN
Ta sẽ nhận được 3 tham số quan trọng (nếu quá trình kết nối không bị lỗi)
- crumb=OURCRUMB Chính là một giá trị cần để hash kiểu YahooBase64()
- Y=MMM Cookie
- T= KKK Cookie
— Đây là một bước mà YMSG version 0×10(16) [Yahoo 9] sử dụng trong thuật toán đăng nhập.
Lưu ý các packet login đến server16 (vd: scs1.msg.yahoo.com) không được server này *lắng nghe*.
- Cách sử dụng Cookie giống như quá trình đăng nhập trên webbrowser.
Cách thức này đỡ phức tạp hơn rất nhiều vì không dùng trực tiếp các thuật toán phức tạp (miễn là phù hợp với những ràng buộc với cookie/ session thực hiện), rồi truy vấn tới server mailchat của yahoo webcs[xxx].msg.[xx].yahoo.com
(Tương tự như module chat bắt gặp được khi duyệt webmail của yahoo: http://mail.yahoo.com) – Khi ta login để check mail, đồng nghĩa với việc ta cũng được login vào dịch vụ chatmail (trên browser) – Sử dụng một HTTPRequest bất kỳ để lấy đúng cookie, tuy nhiên cách này hạn chế một số chức năng so với các cách khác (webcam, enviroment…).
- Sử dụng Yahoo API
Bắt chước Google/ facebook (có lẽ vậy) Yahoo cũng đã dành cho các developer các thư viện API để giao tiếp với dịch vụ !Messenger. Tuy nhiên mỗi ứng dụng của bạn đều phải đăng ký với Yahoo & phải dùng các mã chứng thực do họ cung cấp.
http://developer.yahoo.com/dotnet/
Và còn rất nhiều cách khác như: Qua hãng thứ 3, qua đường Wap (Wireless Application Protocol)
Trên đây là những cách Authenticate mà mình tổng hợp được, mong là sẽ tiếp tục trao đổi về các vấn đề này. Hy vọng sẽ có nội dung chi tiết về source-code ở các bài sau.
—-
The YMSG protocol that I introduced in the previous section, some months ago was not successful authenticating to server csc.msg.yahoo.com.
Simply cause Yahoo has changed their authentication function, the easiest way is navigation connect to server cn.csc.msg.yahoo.com [this server is still using the old algorithm]
Some connection via httpweb (almost) has not changed
Introduced through several ways Authenticate with server Y! Messenger
* YMSG 16
To detect true account after get the correct Challenge-String returns, take query to this url
https://login.yahoo.com/config/pwtoken_get?src=ymsgr&ts=&login=USERNAME&passwd=PASSWORD&chal=CHALLENGESTRING
With the return code (int)
- 0: Success (Correct ID & Pass)
- 1212: No successful (Wrong ID | | Pass)
…
Accompanied by a series ymsgr = <OURTOKEN>
OURTOKEN is the token value that the Web server returns as current session, to continue, query:
https://login.yahoo.com/config/pwtoken_login?src=ymsgr&ts=&token=OURTOKEN
We will get three important parameters (If connection is not faulty)
- Crumb = OURCRUMB This is a string value needs to hashed by YahooBase64 () function.
- Y = MMM Cookie
- T = KKK Cookie
- This is a step that YMSG version 0×10 (16) [Yahoo 9] algorithm used to login.
Note that any login packets push to server16 (eg scs1.msg.yahoo.com) is not *listened* by.
* Use cookie- like the way WebBrowser login.
Here is the simple way to login in, because it’s not used directly for complex algorithms (exemption is consistent with the binding to the cookie /session made), then query to yahoo mailchat server: webcs[xxx].msg.[xx].yahoo.com
(Similar to the chat module is encountered while browsing yahoo webmail: http://mail.yahoo.com) – When we login to check mail, means we are also logining to the service chatmail (at browser) — We can using any HttpRequest function to get a right cookie, but is limited by a number of IM’s functions compared to other (webcam, Environment …).
* Use Yahoo API
Mimic Google / facebook (maybe so) Yahoo also offers developers the API library to communicate with !Messenger service. However, each application must be registered with Yahoo and add authentication code provided by them.
http://developer.yahoo.com/dotnet/
And many other ways such as through a 3rd party, via WAP (Wireless Application Protocol)
Hopefully there will be more detail of content on source-code in my next articles.

