Skip to content

Latest commit

 

History

History
113 lines (107 loc) · 10.1 KB

good-contents.md

File metadata and controls

113 lines (107 loc) · 10.1 KB

Good contents

Giới thiệu về hệ thống MCI của Windows - Meigyoku Thmn

Về cơ bản thì đây là 1 hệ thống để play video trong Windows
ý tưởng thì đơn giản: dùng 1 hwnd, bind một video vào nó, rồi play nó, nó sẽ play async với app của mình
hwnd đó của mình sẽ hiện đúng cái video đó luôn
còn muốn làm thêm thanh slide các kiểu thì dựa 100% vào hệ thống message event
play nhạc cũng được và thậm chí mở ảnh gif
cái này mà code được thành module cho javascript thì hơi bị hay, vì nó là async
2 project trên codeproject điển hình nhất là:

Tương ứng với 2 loại API để tiếp cận MCI
rất nhiều game ngày xưa xài cái này để chạy cutscene
nếu video được bật với device type là mpegvideo
thì nếu máy có directvobsub và file phụ đề (ass, srt) bên cạnh
thì nó load cùng luôn, mà máy còn phải có lav decoder hoặc ffdshow decoder nữa

Giải thích dễ hiểu nhất về Big Data - Library

tớ sẽ giải thích từ việc đưa ra 1 vấn đề, và cách giải quyết vấn đề đó
cơ mà, tớ ko phải chuyên gia về big data, nên có thể điều tớ nói ko đúng. Nếu sai thì cậu cứ góp ý nhé 😄
giờ tưởng tượng, cậu là 1 genius kid, được học sinh giỏi liên tục 9 năm, được giải thành phố môn tin học
hiệu trưởng rất ấn tượng về cậu, nên nhờ cậu giải quyết 1 bài toán mà bác ấy rất đau đầu
đấy là làm thế nào để thống kê ra những học sinh có thành tích học tập xuất sắc như cậu, để từ đó bồi dưỡng, cho đi học Harvard hay làm hacker gì đó
bác ấy cũng ko biết nhiều về lập trình, và cũng lười
nên nhờ cậu giúp
để giải quyết công việc đó, cậu cần phải thu thập được thông tin, đấy là dữ liệu điểm thi của các học sinh toàn trường
may mắn là cậu đã có các cô giáo giúp, nên cậu có 1 tập các file text chứa điểm đó
cái việc từ dữ liệu thô, ra dữ liệu báo cáo những genius kid, đc gọi là xử lý dữ liệu
với dữ liệu toàn trường tầm vài trăm người, cậu nghĩ "cái này ko khó lắm, chỉ cần 1 script để trích xuất ra điểm, rồi lọc ra những người có điểm cao, và tóm gọn nó thành 1 bản báo cáo là đủ"
nếu cậu chưa biết, script là 1 chương trình nhỏ, nhằm thực hiện 1 công việc nhanh nào đó. Nó thường ngắn gọn và dễ viết
thế là cậu viết 1 script python khoảng 50 dòng, chạy 1 phát ra 1 report những wonderkid
rồi, để ý mấy chữ in đậm nhé cậu
cậu phải trích xuất (map), lọc (filter) và tóm gọn (reduce) cho công việc này
đó thực ra là 3 thao tác cơ bản khi cậu làm việc với dữ liệu 😄
giờ, thầy hiệu trưởng của cậu rất hài lòng, thầy ấy đi khoe khắp nơi rằng thầy ấy đã giải quyết đc vấn đề đau đầu đó
tiếng lành đồn xa, sở giáo dục nghe đc điều đó
họ mời cậu tới và nhờ cậu làm việc đó với toàn bộ học sinh trong thành phố, ở cả 3 cấp
cậu đồng ý nhanh chóng, rất tự hào vì điều đó
nhưng khi cậu bắt đầu làm, cậu nhận ta số lượng dữ liệu của cậu ko còn là vài trăm, mà là vài trăm nghìn
cậu gặp khó khăn, vì lúc này script của cậu sẽ tốn thời gian hơn, tiêu tốn cpu với ram hơn để làm
vì thế cậu quyết định: đưa tất cả bản ghi vào trong csdl. Cậu chỉ cần index hợp lý là cậu sẽ có thể đưa ra report rất nhanh, mà hiệu quả nữa
cậu viết 1 script để insert vào csdl
rồi viết 1 trang web nhờ vào việc cậu đang học lập trình mảng ứng dụng web
nó là cơ hội tốt để cậu tập tành skill đó
sau 2 tháng, 1 trang web đc hoàn thành
sở giáo dục rất hài lòng, và trong báo cáo cuối năm, họ đưa cậu vào trong báo cáo đó
khiến bộ giáo dục rất bất ngờ
họ lập tức mời cậu tới, nhờ cậu làm điều tương tự với hs cả nước
và hi vọng cậu sẽ giải quyết vấn đề của họ, tìm ra những wonderkid để bồi dưỡng tài năng
cậu hơi do dự, nhưng rồi cũng đồng ý, sau khi bộ trưởng hứa sẽ giúp cậu đi du học Harvard
và nhanh chóng, cậu nhận ra dữ liệu của cậu là hàng triệu
và csdl của cậu trả về report sau hàng giờ
cậu tốn vài tuần để thử optimize tất cả các câu query, tuning csdl và website của cậu
nhưng vô vọng
rồi cậu đọc đc đâu đó, có 1 thứ là elasticsearch, cái này đc dùng chuyên để search
cậu nghĩ: nó có thể có ích
sau khi làm thử 1 số prototype, cậu nhận ra nó rất nhanh
nên cậu viết 1 script để migrate csdl của cậu sang elasticsearch
và kaboom, report đc xuất ra sau vài s
cậu đc đi du học Harvard
bộ trưởng bộ giáo dục rất vui, cậu đc gọi tới khen thưởng
rồi bác chủ tịch nước sau 1 hôm đi công du Mỹ, đã nói với Trump
Trump rất ấn tượng, và đưa vấn đề này lên LHQ
họ gọi cậu tới và mong cậu làm điều tương tự cho toàn thế giới
tới đây, cậu nhận ra
"oh my big data"
tớ nghĩ là qua ví dụ giải quyết vấn đề trên, cậu đã hiểu:

  1. Xử lý dữ liệu là gì
  2. Tại sao phải xử lý nó - để đưa ra các dữ liệu có ý nghĩa, nhằm mục đích phân tích
  3. Vấn đề khi xử lý dữ liệu, cùng 1 số cách giải quyết khi lượng dữ liệu ở vài trăm, vài trăm nghìn, vài trăm triệu
  4. Làm sao để xử lý vài tỷ dữ liệu

mục 4 tớ chưa đề cập tới đâu 😄
giờ thử xem họ làm thế nào với vài tỷ record dữ liệu nha
cậu biết cậu phải xử lý khối dữ liệu lớn. "đây là big data trong truyền thuyết" - cậu nghĩ
thế nên cậu về, thuê server, setup apache hadoop
lúc này, cậu phân phối dữ liệu lên các server khác nhau
lúc này, việc cậu làm là để feed data vào hadoop
để nó phân phối dữ liệu lên các server khác nhau
rồi khi cậu query, cậu sẽ định nghĩa các script hướng dẫn map dữ liệu như thế nào
reduce ra sao
hadoop sẽ lo phần còn lại cho cậu
đó là cách mà họ xử lý big data: phân phối nó ra nhiều server, và tìm kiếm song song trên đó
1 cách đơn giản nhất là vậy
tới đây, tớ nghĩ là cậu đã hiểu rõ, phải ko? 😄

Cách đọc code - Library

Nếu cậu đọc code không hiểu, khả năng là cậu thiếu căn bản.

Tớ recommend cậu làm thế này nha:

  • Đọc code structure để biết các yếu tố cơ bản của project.
    Tớ recommend đọc từ mô tả thư viện, các file config, rồi đọc code xem kiến trúc mà họ theo là gì.
    Sẽ có nhiều thư viện cậu không hiểu, hay các config khó hiểu, nhưng cậu chỉ cần biết nó được dùng để làm gì. Những cái nào chưa biết, cậu nên note lại để hỏi senior member.
    Điều này sẽ giúp cậu nhớ được nơi cần tìm thông tin cần thiết.
  • Đọc yêu cầu mà task của cậu giao cho thật kỹ, và chỉ tìm code liên quan tới phần này.
    Tớ biết rất nhiều novice sẽ đi đọc rất xa ở những chỗ mà không liên quan, nhưng cậu cần hoàn thành công việc trước khi làm việc đó.
    Nếu có những cài đặt khó hiểu, cậu có thể check test case để biết cách sử dụng của nó, hoặc debug (kiến thức từ recommend đầu tiên sẽ giúp cậu) để kiểm tra flow.
  • Note lại những điều cậu chưa hiểu, và hỏi càng sớm càng tốt.
    Nếu cậu không hỏi, kể cả những câu hỏi đơn giản và ngu ngốc, cậu sẽ không biết. Hỏi một câu hỏi ngu ngốc sớm so với hỏi câu hỏi ngu ngốc sau 6 tháng sẽ hoàn toàn khác nhau 😄
  • Nếu đọc được requirement là điều tốt nhất. Hẳn nhiên cậu sẽ khá tốn thời gian ở giai đoạn đầu, nhưng về sau sẽ ổn hơn.
    Cậu nhớ đừng đọc lan man quá. Tớ chứng kiến nhiều novice member đọc cả code project khác khi làm việc rồi.

Khi cậu đọc task & yêu cầu cần làm, cậu phải chắc chắn hiểu rõ tất cả mọi thứ về yêu cầu đó, trước khi thực sự code.
Nếu cậu có requirement, đọc hết requirement liên quan tới phần đó, đồng thời cũng đọc tất cả các reference từ ticket + requirement. Việc này sẽ hơi tốn thời gian, nhưng so với thời gian cậu cứ nhận bug, sửa lỗi nhiều lần chỉ vì cậu không hiểu rõ yêu cầu, thì thời gian này ít hơn nhiều.
Nếu có bất cứ thắc mắc, một lần nữa cậu nên hỏi ngay lập tức.

Thời điểm này cậu không có shortcut nào đâu. Khi cậu hình thành được framework của riêng mình, lúc đó cậu mới biết shortcut.
Cho tới lúc đó, cậu buộc phải bỏ công ra thôi 😄