Archive for the ‘KHMT’ Category
Gaming experts talk with Vietnamese students
Gaming specialists from the United States are visiting Vietnam to discuss with students a number of issues that are important to their industry. During a stop at the port city of Da Nang, more than 1,000 students showed up for a conference on game developers and their techniques. Donald Marinelli, a professor of Drama and Arts Management at Carnegie Mellon University who co-directs the Entertainment Technology Center, led the panel, “The Achievements of the Game Developers.” Marinelli and the other gaming experts also discussed how games impact real life during an event for students from Van Lang University in Ho Chi Minh City. The Entertainment Technology Center is a partnership between Carnegie Mellon’s School of Computer Science and the College of Fine Arts that focuses on digital arts and entertainment. A training cooperation program between Carnegie Mellon and the Software Engineering Group of Vietnam is sponsoring the trip.
So, what did he say?
Maybe I’m good at creating and developing games but I definitely do not recommend that you become addicted to them.
(Via ACM TechNews.)
MD5 pseudo code
From this site: http://www.md5-creator.com/what-is-md5.php
Easy pseudo code to understand.
What is Md5?
In cryptography, MD5 (Message-Digest algorithm 5) is a widely-used cryptographic hash function with a 128-bit hash value. As an Internet standard (RFC 1321), MD5 has been employed in a wide variety of security applications, and is also commonly used to check the integrity of files.
MD5 was designed by Ronald Rivest in 1991 to replace an earlier hash function, MD4. In 1996, a flaw was found with the design of MD5; while it was not a clearly fatal weakness, cryptographers began to recommend using other algorithms, such as SHA-1 (recent claims suggest that SHA-1 has been broken, however). In 2004, more serious flaws were discovered making further use of the algorithm for security purposes questionable.
Source: http://en.wikipedia.org/wiki/Md5
MD5 Pseudocode
//Note: All variables are unsigned 32 bits and wrap modulo 2^32 when calculating
//Define r as the following
var int[64] r, k
r[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}
r[16..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}
r[32..47] := {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23}
r[48..63] := {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}
//Use binary integer part of the sines of integers as constants:
for i from 0 to 63
k[i] := floor(abs(sin(i + 1)) × 2^32)
//Initialize variables:
var int h0 := 0x67452301
var int h1 := 0xEFCDAB89
var int h2 := 0x98BADCFE
var int h3 := 0x10325476
//Pre-processing:
append "1" bit to message
append "0" bits until message length in bits ≡ 448 (mod 512)
append bit length of message as 64-bit little-endian integer to message
//Process the message in successive 512-bit chunks:
for each 512-bit chunk of message
break chunk into sixteen 32-bit little-endian words w(i), 0 ≤ i ≤ 15
//Initialize hash value for this chunk:
var int a := h0
var int b := h1
var int c := h2
var int d := h3
//Main loop:
for i from 0 to 63
if 0 ≤ i ≤ 15 then
f := (b and c) or ((not b) and d)
g := i
else if 16 ≤ i ≤ 31
f := (d and b) or ((not d) and c)
g := (5×i + 1) mod 16
else if 32 ≤ i ≤ 47
f := b xor c xor d
g := (3×i + 5) mod 16
else if 48 ≤ i ≤ 63
f := c xor (b or (not d))
g := (7×i) mod 16
temp := d
d := c
c := b
b := ((a + f + k(i) + w(g)) leftrotate r(i)) + b
a := temp
//Add this chunk's hash to result so far:
h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d
var int digest := h0 append h1 append h2 append h3 //(expressed as little-endian)
Advice to Incoming Freshman in Computer Science
Source: http://csel.cs.colorado.edu/~brooksbp/fresh-advice.html
OS jokes
Source: http://www.rinkworks.com/stupid/cs_os.shtml
Many others here.
* Customer: “How much do Windows cost?”
* Tech Support: “Windows costs about $100.”
* Customer: “Oh, that’s kind of expensive. Can I buy just one window?”
–* Tech Support: “What version of Windows do you have installed?”
* Customer: “… Double glazed.”
–Overheard in a software shop:
* Woman #1: “What this Linux thing?”
* Woman #2: “It’s a program that if you have it on your computer, you can’t turn the computer off.”
* Woman #1: “Oh.”
–For my work-study job, I work tech support at a small college. One night I was working Help Desk and the phone rings. I pick it up to have a student telling me she can’t get the computer to work.
* Me: “What operating system are you running?”
* Student: “Hunh?”
* Me: “Do you have a Mac or a PC?”
* Student: “Um, I don’t know.”
* Me: “Ok. What does the screen look like?”
* Student: “It’s yellow.”
* Me: “Ok. What does it say on the computer CPU?”
* Student: “What’s that?”
* Me: “The big grey box.”
* Student: “It doesn’t say anything.”
* Me: “Never mind that…do you have a little ‘Start’ button at the bottom of the monitor?”
* Student: “Monitor?”
* Me: “The thing that looks like a TV sceen sitting on the grey box.”
* Student: “Oh! That! No. No start button.”
* Me: “Ok. Is there a little apple symbol anywhere on the screen?”
* Student: (very puzzled) “Why would I have fruit on my computer?”
–
How to set up your own home web server
OMG this is a SO good tutorial. Thanks Jeff.
Thay Playboy bằng Einstein
Giờ đây bạn có thể gắn một tấm poster Albert Einstein trên đầu giường rồi quay phim gởi cho ba mẹ mà không nhất thiết phải gỡ tấm poster Playboy đang thật sự nằm ở đó
Những nghiên cứu sinh về AI của ĐH Stanford vừa phát triển một công nghệ mới tên là ZunaVision. Công nghệ xử lý video này cho phép ta cắt bỏ một phần của một bề mặt phẳng nào đó trong đoạn phim và thay bằng hình ảnh khác — không nhất thiết là hình ảnh tĩnh. Tức là, bạn có thể quay một đoạn video căn phòng của bạn rồi sau đó dùng công nghệ này để thử đặt các tấm ảnh khác nhau vào và nhìn từ mọi phía. Bạn cũng có thể đứng hát bên cạnh thần tượng âm nhạc của mình nếu chọn được một mặt bằng phẳng để thay hình của mình vào.
Thật ra trước đây các nhà làm phim cũng đã có thể làm như vậy, nhưng chi phí công nghệ và thời gian tiền bạc tốn kém hơn nhiều. Giờ đây ZunaVision cho phép chúng ta có thể chỉnh sửa video tự làm của mình trong chốc lát rồi upload lên youtube.
Cái hay của công nghệ này là khả năng linh hoạt của nó. Trong video, bạn có thể đi qua đi lại trước bề mặt phẳng nhưng công nghệ này vẫn phân biệt được đâu là pixel của bạn và đâu là của tấm hình cần thay thế. Tương tự, các bóng đổ lên không gian ban đầu cũng sẽ được thấy trên không gian thay thế mới. Bạn cũng có thể thoải mái zoom và di chuyển camera trong khi quay mà không sợ công nghệ này “không theo kịp”. Các chuyển động của camera dường như không ảnh hưởng gì đến tấm ảnh thay thế.
Nói vậy đủ rồi, giờ bạn thử vào trang chủ của ZunaVision và xem đoạn giới thiệu ở đó hay dưới đây là hiểu.
Thêm nữa, nếu thích bạn có thể thử upload một đoạn video lên đó để thử.
Trang chủ của ZunaVision: http://zunavideo.stanford.edu/
Biết qua Extreme makeover: computer science edition — Stanford University
Được giới thiệu bởi ACM TechNews số ngày 17/11/2008
How to deal with Adobe CS3 wacky installations
How to deal with Adobe CS3 wacky installations
Applied for: all Adobe CS3 products (e.g. Photoshop, Illustrator, InDesign, Flash, etc.)
Note: this tutorial is designed for Windows users. MAC OS X users, however, would find some interesting information and may come up with similar solutions.
Fact: so you have a situation while trying to install an Adobe CS3? Me too! Fortunately I’ve worked it out. And now you’ve found me!
I don’t know why Adobe makes things so complicated but here are some of the annoying messages popping up all the time you start the setup:
- Setup has encountered an error and cannot continue. Contact Adobe Customer Support for assistance. The installation source for this product is not available. Verify that the source exists and that you can access it.
- Critical errors were found in setup — session has dependencies that cannot be satisfied. Please see the Setup log file for details.
- Add yours.
Funny enough, here is the step-by-step solution. You may want to restart your computer after each step and then run setup again.
- If you’re running setup from CD/DVD, copy it to your HDD (e.g. “D:\Adobe Photoshop CS3″).
- If that doesn’t work, check the installation files, especially files in “payloads” folder. Maybe some setup files are missed or corrupted.
- Go to “\Program Files\Adobe” and delete the product (that you’re trying to install) folder, if any. (i.e. Adobe Photoshop CS3, Adobe InDesign CS3, etc.)
- Go to “\Program Files\Common Files\Adobe” and search for your product name (i.e. photoshop, illustator, etc.) — on result delete any file that is not in other product folder. Pay attention to “\Program Files\Common Files\Adobe\Installers” — skim through each folders and check if “setup.exe” has the same icon as your product’s. (Like PS for Photoshop, ID for InDesign, AI for Illustrator, etc.) Delete that whole folder, if any.
- Run regedit from Start > Run > regedit (on Windows Vista you need to run as Administrative privilege), search for your product name (photoshop, indesign) and delete any key found.
- Run cmd form Start > Run > cmd (needed Administrative privilege on Windows Vista). Type cd \windows\System32, enter. Type regsvr32 jscript.dll, enter. Type regsvr32 vbscript.dll, enter.
- Download and Install Installer CleanUp Utility from here, run it and remove any current/previous version(s) of your Adobe product.
- If all of the above doesn’t work, try this last harsh solution: download and run Adobe CS3Clean script from here. Remember to read the readme carefully.
Feel free to contact me. Good luck!
–Hoang
Decode một mật mã nhỏ [1]
Vừa rồi có một người nhờ tôi decode một đoạn code như thế này:
01010100 01101111 01101101 - 01101000 01110101 01101101 - 01100011 01110101 01100001 - 01110010 01101001 01100101 01101110 01100111 - 01100101 01101101. 01000101 01101101 - 01111001 01100101 01110101 - 01100001 01101110 01101000, - 01110110 01100001 - 01100101 01101101 - 01101101 01110101 01101110 01101110 - 01101110 01101111 01101001 - 01100011 01101000 01101111 - 01110100 01100001 01110100 - 01100011 01100001 - 01101101 01101111 01101001 - 01100010 01101001 01100101 01110100. - 01000101 01001101 - 01011001 01000101 01010101 - 01000001 01001110 01001000.
Đoạn code rõ ràng là mã nhị phân, hơn nữa các số lại được nhóm theo từng bộ 8 ký tự rất giống 8 bits của 1 byte. Những ký tự ‘-’, ‘ ‘, ‘.’, ‘,’ có lẽ là những dấu ngắt từ và ngắt câu bình thường. Quan sát một chút, tất cả các số nhị phân này đều bắt đầu bằng 0 nên tôi mạnh dạn mở ngay calulator (calc) lên chuyển thử mấy số nhị phân đầu tiên ra thập phân. Ah, số thứ 3 và số thứ 6 có cùng giá trị. Tôi copy tất cả dán vào notepad thử tìm xem còn những số nào giống nhau. Có khá nhiều. Vậy rất có thể văn bản được mã hóa theo khóa kiểu Caesar. Nếu đúng vậy thì thật mừng
, vì cùng lắm thì tôi sẽ brute force attack.
Nhưng trước tiên phải chuyển hết văn bản sang số nhị phân đã. Tôi viết một đoạn code nhỏ để làm việc này cho nhanh.
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("code.txt");
ofstream fout("decode.txt");
int main() {
char ch;
int i,s,p;
while (!fin.eof()) {
fin.get(ch);
if (ch=='0' || ch=='1') {
s=0; p=128;
if (ch=='1') s+=(ch-48)*p;
for (i=0; i < 7; i++) {
p/=2;
fin.get(ch);
if (ch=='1') s+=(ch-48)*p;
}
fout << s;
}
else
fout << ch;
}
return 0;
}
Chạy thử, file decode.txt cho ta:
84 111 109 - 104 117 109 - 99 117 97 - 114 105 101 110 103 - 101 109. 69 109 - 121 101 117 - 97 110 104, - 118 97 - 101 109 - 109 117 110 110 - 110 111 105 - 99 104 111 - 116 97 116 - 99 97 - 109 111 105 - 98 105 101 116. - 69 77 - 89 69 85 - 65 78 72.
Hừm, rõ ràng là mã hóa Caesar, những “ký tự” như 109 và 117 lặp lại khá nhiều (đây hẳn là các nguyên âm). Cụm 101 109 lặp lại 2 lần. Nhìn vào cấu trúc mỗi tiếng có không quá 5 ký tự, tôi đoán đây là văn bản Tiếng Việt, có lẽ không dấu. Tuy nhiên đoạn 110 110 – 110 làm tôi khá lúng túng, trong văn bản Tiếng Việt không dấu không thể tìm từ nào 2 ký tự cuối giống nhau cả. Liệu đây có phải đây là văn bản Caesar? Chắn chắn rồi.Nhận thấy số hiệu của các ký tự khá lớn, tôi nghĩ chắc phải (1) chia lấy dư cho 26 (số chữ cái từ A-Z) hoặc (2) lùi tất cả về cùng một lượng nào đó. Cũng có khả năng xấu nhất là (3) phải tìm bảng đối chiếu từng số với mỗi ký tự, công việc này chắc chắn là khó khăn hơn nhiều. (Dù sao thì nhờ vào một bảng phân bố số lượng các chữ cái thì việc này cũng không đến nỗi quá mất thời gian.)

Vậy là tôi tiếp tục với đoạn mã C++. Thử (1) chia cho 26 xem sao.
//fout << s; fout << (char) (s%26 + 97); // cộng thêm 97 vì 97 là vị thứ của chữ 'a' trong bảng mã ASCII
Kết quả:
g h f - a n f - v n t - k b x g z - x f. r f - r x n - t g a, - o t - x f - f n g g - g h b - v a h - m t m - v t - f h b - u b x m. - r z - l r h - n a u.
Ký tự có vẻ loạn xạ ngầu. Không sao, thử dịch lên và xuống vài đơn vị xem sao. Thay vì xuất ra (char) (s%26 + 97) tôi thử ((s+1)%26 + 97) và ((s-1)%26+97). Vẫn không thành công. Có thể tiếp tục thử thêm nhiều trường hợp những tôi quyết định không làm nữa. Bởi vì cách làm này tương đương như cách sau.
Chuyển qua phương án sau. Tôi thấy trong code số 65 là nhỏ nhất, nên quyết định shift tất cả về 65 đơn vị. Thử xem
.
//fout << s; //fout << (char) (s%26); fout << (char) (s-65+97); // dịch lui 65 đơn vị, cộng thêm 97 vì 97 là vị thứ của chữ 'a' trong bảng mã ASCII
Kết quả:
t - ˆ • - ƒ • - ’ ‰ … Ž ‡ - … . e - ™ … • - Ž ˆ, - – - … - • Ž Ž - Ž ‰ - ƒ ˆ - ” ” - ƒ - ‰ - ‚ ‰ … ”. - e m - y e u - a n h.
Mới đầu thì toàn là ký tự loạn xạ, nhưng thật bất ngờ, đoạn cuối có một văn bản đọc được: “-em – yeu – anh”.
Vậy là đã có chút manh mối, có thể tiếp tục với cách decode này. Tại sao lại chỉ có 1 phần văn bản được decoded?
(còn nữa.)
GLAT
[Mạn phép chủ nhân blog viết tiếp loạt bài về "Câu hỏi phỏng vấn"
]
Về các câu hỏi phỏng vấn độc chiêu và trí tuệ thì chắc không công ty nào bằng Microsoft và Google. Microsoft thì blog này đã nói nhiều rồi, ở bài này tôi xin giới thiệu một bộ test của Google: Google Labs Aptitude Test (GLAT). Một điều hay ho là bạn không cần phải đến đại bản doanh của Google để làm test mà chỉ cần tải nó về, làm và gửi đến Google Labs. Và theo như Google thì “Score high enough and we’ll be in touch”. Ở đây có ai muốn làm cho Google không nhỉ
?
(Nguồn hình từ Cruftbox.)




Thú thật là những câu hỏi này làm tôi “khó chịu” và thú vị hơn so với của Microsoft. Bác nào bí thì có thể tham khảo câu trả lời ở đây hay đây.
Câu hỏi phỏng vấn (5)
Các câu hỏi kỳ này rất lý thú: câu 1-4 liên quan đến lý thuyết toán, câu 5-6 dẫn đến nhiều hướng suy nghĩ hay, câu 7-9 là các thuật toán thú vị!
Nguồn: Blog KHMT
- Giả sử

(mũ x đến vô cùng). Vậy
bằng bao nhiêu?
Ví dụ, ta có thể lý luận như sau. Dễ thấy rằng
. Do đó
, hay
. Nhưng nếu
thì, theo lý luận trên,
cũng dẫn đến
. Sao lạ thế?
à? - Gọi S là một tập 10 số khác nhau giữa 1 và 100. Chứng minh rằng S có hai tập con không giao nhau với tổng bằng nhau.
- Có một tập hợp các điểm trên mặt phẳng. Không phải tất cả cùng nằm trên một đường thẳng. Chứng minh rằng có một đường thẳng chỉ đi qua hai điểm mà thôi.
- Có một cái đồng hồ mà kim giờ và kim phút giống hệt nhau. Có bao nhiêu thời điểm trong ngày mà nhìn đồng hồ này ta không thể biết được là mấy giờ?
- An và Bình thay phiên nhau chọn các số nguyên từ 1 đến 9. Số đã chọn không được chọn lại. Ai chọn được 3 số có tổng bằng 15 trước là thắng. Ai sẽ thắng?
- Bạn có 300 lít xăng và một cái xe tải. Xa tải chỉ chở được tối đa 100 lít xăng. Bạn muốn chở xăng đến bán ở chợ xăng cách khởi điểm 100 cây số. Vấn đề là xe tải chạy rất tốn xăng, mỗi cây số tốn 1 lít. Bạn được phép chở xăng để dọc đường rồi sau đó quay lại lấy để chở đi tiếp. Hỏi: Làm thế nào để bán được nhiều xăng nhất? (Nhớ là nếu bạn để xăng đâu đó dọc đường rồi quay lại lấy thêm xăng thì đoạn quay lại cũng tốn xăng.)
- Có 30 sinh viên đứng thành vòng tròn. Họ nhắm mắt lại. Giáo sư Tèo đội cho mỗi người một cái mũ. Tổng cộng có 20 mũ đen, 10 mũ trắng. Sau đó các sinh viên được quyền mở mắt. Họ thấy các mũ khác nhưng không biết mình đang đội mũ màu gì. Họ không được quyền trao đổi thông tin.
Giáo sư Tèo nói: “Ít nhất một trong số các bạn đang đội mũ đen“.
Sau đó giáo sư Tèo ra lệnh: “Sinh viên nào đã xác định được rằng mũ mình đang đội là màu đen thì ngồi xuống“.
Dĩ nhiên, chẳng ai ngồi xuống vì không ai biết mình đang đội mũ màu gì.
Một phút sau, giáo sư Tèo lập lại lệnh trước: “Sinh viên nào đã xác định được rằng mũ mình đang đội là màu đen thì ngồi xuống“.
Vẫn không ai di động. Giáo sư Tèo lập lại lệnh này, mỗi phút một lần, trong vòng 30 phút kế tiếp.
Câu hỏi 1: cái gì xảy ra? Khi nào?
Câu hỏi 2: khi giáo sư Tèo nói “Ít nhất một trong số các bạn đang đội mũ đen” thì các sinh viên có thêm thông tin gì không? Vì rõ ràng là mỗi sinh viên đều biết là có mũ đen trong đám. - Ta có n mẫu máu. Mỗi mẫu máu thuộc về một trong m nhóm máu. (Ta không biết chính xác m là bao nhiêu, và m không nhất thiết phải là hằng số.) Có một thiết bị mà nếu bỏ vào đó hai giọt máu từ hai mẫu máu khác nhau thì thiết bị sẽ cho biết hai mẫu máu có cùng nhóm máu hay không. Nếu bỏ vào thiết bị này hơn hai giọt máu thì câu trả lời không đáng tin cậy nữa.
Ta muốn trả lời câu hỏi sau đây: có hay không hơn n/2 mẫu máu thuộc về cùng một nhóm máu. Dùng thiết bị trên để thử, làm thế nào để trả lời câu hỏi này với tổng số ít nhất các phép thử? (Chỉ cần ít nhất về mặt asymptotic là được.) Ví dụ: cách dễ nhất là thử tất cả các cặp mẫu máu nhưng như vậy cần dùng đến
phép thử.
Ngoài ra, ta cũng giả sử rằng mỗi mẫu máu có khá nhiều giọt. - Có N anh cướp biển sắp bị xử chém. Họ xếp thành một hàng dài. Mỗi người đội một chiếc nón, xanh hoặc đỏ. Cướp biển số 1 chỉ thấy nón (và màu nón) của cướp biển số 2, 3, … N; cướp biển số 2 chỉ thấy nón của số 3, 4, … N; vân vân. Dĩ nhiên, vì thế mỗi cướp biển không biết màu nón mình đang đội và màu nón của các cướp biển đứng trước mình trong hàng.
Đao phủ bắt đầu chém từng cướp biển một, từ số 1 đến số N. Tuy nhiên, trước khi chém mỗi cướp biển thì đao phủ cho hắn một cơ hội: đoán màu nón của mình. Nếu nói đúng màu nón thì được tha. Tất cả các cướp biển đều nghe thấy nhau trả lời, nhưng không biết ai bị chém ai không.
Trước hôm ra xử bắn, bọn cướp biển họp lại và tìm một thuật toán trả lời để cho tổng số cướp biển bị chém là ít nhất trong trường hợp tệ nhất (in the worst case). Ví dụ: nếu cướp biển số 2k-1 trả lời bằng màu nón của cướp biển 2k, và cướp biển 2k lập lại câu trả lời này, thì tệ nhất cũng chỉ có một nửa số cướp biển bị chém.
Nếu bạn là cướp biển thì bạn thiết kế thuật toán thế nào?