Heilmeier’s Catechism

Nếu chưa tự trả lời một cách rõ ràng được những câu hỏi dưới đây, có lẽ chưa nên thực hiện nghiên cứu/dự án.

Một tập các câu hỏi được cho là của Heilmeier, mà bất kỳ ai đang đề xuất một dự án nghiên cứu hay cố gắng phát triển sản phẩm nên trả lời được.

  1. Bạn đang cố gắng để làm điều gì? Hãy phát biểu rõ ràng các mục tiêu của bạn mà tuyệt đối không dùng các thuật ngữ khó hiểu.
  2. Cho đến nay vấn đề đã được giải quyết ra sao, và đâu là những giới hạn của cách làm hiện tại? (nói cách khác đâu là những vấn đề mà các nghiên cứu/dự án hiện tại chưa giải quyết hoặc chưa giải quyết được?)
  3. Điểm mới trong cách tiếp cận của bạn – tại sao bạn nghĩ nó sẽ thành công?
  4. “Khách hàng” của nghiên cứu/dự án là ai? Hay nói cách khác ai sẽ quan tâm đến vấn đề nghiên cứu hay sản phẩm?
  5. Nếu thành công, nó sẽ tạo ra sự khác biệt nào? (Nếu thành công, nghiên cứu/dự án của bạn sẽ có tác động như thế nào đến thế giới/cộng đồng?)
  6. Rủi ro và và lợi ích của dự án/nghiên cứu là gì?
  7. Chi phí dành cho dự án/nghiên cứu là bao nhiêu?
  8. Thời gian để làm dự án/nghiên cứu là trong bao lâu?
  9. Đâu là thời điểm trung hạn và thời điểm cuối cùng để đánh giá thành công của dự án/nghiên cứu? (Có cách nào để đánh giá tiến độ và sự thành công của nghiên cứu?)

————————————–

Source: http://en.wikipedia.org/wiki/George_H._Heilmeier#Heilmeier.27s_Catechism

A set of questions credited to Heilmeier that anyone proposing a research project or product development effort should be able to answer.

  1. What are you trying to do? Articulate your objectives using absolutely no jargon.
  2. How is it done today, and what are the limits of current practice?
  3. What’s new in your approach and why do you think it will be successful?
  4. Who cares?
  5. If you’re successful, what difference will it make?
  6. What are the risks and the payoffs?
  7. How much will it cost?
  8. How long will it take?
  9. What are the midterm and final “exams” to check for success?

Áp lực sợ bỏ lỡ

Khái niệm này được định nghĩa là áp lực, lo lắng mình sẽ bỏ lỡ một thông tin, mối quan hệ, đồ giảm giá, etc nào đó (có vẻ) có ích ngay tại thời điểm hiện tại hoặc trong tương lai.

Ví dụ, bạn nhìn thấy một cuốn sách, thông tin, bài báo mà người khác share và nói là hay, có ích, bạn sẽ có cảm giác là cần mua, đọc nó. Bạn lưu lại và tự nhủ là khi nào có thời gian sẽ đọc. Cuối cùng, bạn chẳng bao giờ/hiếm khi động tới. Thậm chí khi mua/lưu lại, bạn sẽ bị não bộ đánh lừa và có cảm giác là đã đọc xong nội dung trong đó.

Việc có quá nhiều thông tin/vật dụng cũng khiến cho những thông tin/vật dụng cần thiết và hữu ích thật sự bị đẩy xuống dưới và bị bỏ qua một cách đáng tiếc.

Trong thời đại thông tin bùng nổ và cạnh tranh khốc liệt thì áp lực sợ bỏ lỡ lại càng lớn. Mình cũng đang bị mắc vào. Số lượng trong danh sách lưu lại (bằng pm pocket: https://getpocket.com/) để đọc sau của mình đã lên tới hơn 1500 và mục cũ nhất chưa đọc là cách đây 204 ngày.

Chắc phải thực hiện chiến lược là cái gì đọc được luôn trong ngày, tuần thì mới lưu lại còn không thì bỏ qua luôn, và định kỳ dọn dẹp những bài quá lâu không động tới.

Những thứ tưởng là cần nhưng cuối cùng hoá ra lại không cần lắm.

Check-list vào cuối ngày/tuần/tháng

  1. Mình đã hoàn thành, đạt được những gì trong ngày làm việc?
  2. Những gì mình còn chưa hoàn thành trong kế hoạch đặt ra?
  3. Những ý tưởng hay nào mình đã nghĩ ra, thử suy nghĩ sâu sắc hơn xem sao?
  4. Những bài học/kinh nghiệm nào mình đã rút ra trong ngày?
  5. Mình đã học thêm được kiến thức/tri thức gì trong ngày/tuần/tháng?
  6. Sự kiện gì là quan trọng đối với mình trong ngày/tuần/tháng?
  7. Mình đã sử dụng thời gian như thế nào trong ngày? Sử dụng như vậy đã hợp lý chưa? Mình đã lãng phí thời gian ra sao? Có thể khắc phục được không?
  8. Những gì mình làm có quan trọng, giúp mình tới gần hơn GOAL đặt ra hay không?
  9. Review lại short-term và long-term GOAL.
  10. Check lại to-do list cho ngày hôm sau/thời gian tới? Timeline,…

Checklist cho luận văn thạc sĩ

Checklist cho luận văn thạc sĩ (Cho các sinh viên đang viết luận văn thạc sĩ)

  1. Có thực hiện lại được không? (Reproducibility). Để thực hiện lại được, nên cố gắng đóng gói chương trình sao cho với mỗi kết quả trong luận văn thạc sĩ, chỉ cần chạy một script duy nhất để tái hiện lại được các kết quả từ dữ liệu thô. Ngay cả các bảng số liệu, hình vẽ cũng nên sinh ra bằng chương trình máy tính.
  2. Có tính mới mẻ không? (Novelty). Có tính mới mẻ về mặt khoa học là yêu cầu dành cho những luận văn thạc sĩ xuất sắc. Nhưng luận văn thạc sĩ cũng nên cũng có tính mới về mặt thực hành.
  3. Đã chỉnh sửa lại nhiều lần chưa? Không chỉ tự mình chỉnh sửa mà nên nhờ thầy hướng dẫn và nhiều người khác mà mình tin cậy đọc và chỉnh sửa giúp.
  4. Đã hiểu rõ các nghiên cứu trước chưa?
  5. Tự bạn đánh giá xem mình có đủ điều kiện tốt nghiệp thạc sĩ chưa?

Bài viết dựa trên nguồn tiếng Nhật: 【卒論修論のさしすせそ】https://twitter.com/nh_m_/status/423322673993633792
さ:再現性あるの
し:新規性あるの
す:推敲は何度もしましたか
せ:先行研究ちゃんと理解してるの
そ:卒業できると思ってるの
#noted #teaching

Cài đặt Theano, TensorFlow và Keras cho Deep Learning

1. Giới thiệu

Bài viết hướng dẫn cách cài đặt Theano, TensorFlow và Keras cho Deep Learning.

2. Bước 1: Cài đặt Anaconda

Anaconda là một bản phân phối miễn phí cho Python. Tải bản Anaconda phù hợp với HĐH của bạn tại đây. Sau đó cài đặt theo hướng dẫn.

3. Cài đặt Theano với conda

conda install Theano

Xem hướng dẫn cài đặt Theano tại đây.

4. Cài đặt Keras

Cài đặt Keras bằng lệnh

conda install keras

Với python 2, dùng pip

pip install keras

Mặc định lệnh này sẽ cài đặt luôn backend tensorflow.

Bạn có thay đổi backend TensorFlow thành Theano bằng cách thay đổi file cấu hình ~/.keras/keras.json. Xem hướng dẫn tại đây.

Tạo hình vẽ/diagram và chuyển định dạng file từ pdf sang eps trên Mac OS X

Update: Ngoài cách dưới đây, có thể dùng TikZ  GIMP để vẽ hình và chuyển định dạng file.

Khi cần đưa hình vẽ vào LaTeX, mình hay sử dụng định dạng .eps và package graphicx.

Trong LaTeX sẽ chèn hình vẽ (chẳng hạn img.eps) vào một file LaTeX như sau.

\usepackage[dvips]{graphicx}
\begin{figure}[!t]
\begin{center}
\includegraphics[width=0.4\textwidth]{draw/img.eps}
\caption{System architecture}
\end{center}
\end{figure}

Trên Windows, để vẽ hình/diagram mình hay dùng Visio, sau đó in ra thành ps, dùng Adobe Acrobat để chuyển thành eps, và sau đó dùng epstool để sửa lại bounding box.

Trên máy Mac, sau một hồi mày mò mình đã tìm ra cách để thực hiện các bước ở trên. Đó là dùng công cụ Drawing của LibreOffice để vẽ hình, export ra pdf, dùng pdfcrop để crop file pdf tạo ra sau đó dùng xpdf để chuyển file pdf đã crop thành file eps. Được cái tất cả các phần mềm trên đều miễn phí nên không lo nguy cơ bảo mật trong các bản crack.

Các bước thực hiện như sau. Các bước dưới đây giả định bạn đã cài đặt MacTeX trên Mac OS X.

    1. Step 1: Download và cài đặt LibreOffice tại: https://www.libreoffice.org
    2. Step 2: Mở LibreOffice và dùng Drawing để vẽ hình. Drawing trong LibreOffice hỗ trợ vẽ diagram và flowchart khá tốt dù không xịn như Microsoft Visio.
    3. Step 3: Lưu bản drawing trong LibreOffice dưới định dạng pdf, ví dụ img.pdf
    4. Step 4: Sử dụng lệnh pdfcrop để crop file pdf vừa tạo ra
       pdfcrop img.pdf

      Lệnh này sẽ tạo ra file img-crop.pdf trong cùng thư mục với img.pdf

    5. Step 5: Download xpdf tại: http://www.foolabs.com/xpdf/download.html
    6. Step 6: Giải nén file: xpdfbin-mac-3.04.tar.gz
       tar xvfz xpdfbin-mac-3.04.tar.gz
    7. Step 7: Copy các file trong thư mục xpdfbin-mac-3.04/bin64  vào /usr/local/bin. Để copy được có thể bạn cần quyền root.
    8. Step 8: Chuyển file img-crop.pdf sang định dạng eps
       pdftops -eps img-crop.pdf

      Lệnh này sẽ tạo ra file img-crop.eps. Bạn có thể đổi tên file thành img.eps nếu thích.

Sau các bước thực hiện trên, bạn có thể đưa file ảnh .eps vào trong LaTeX một cách dễ dàng mà không cần quan tâm đến bounding box.

Đức hạnh của Benjamin Franklin

Nguồn: Wikipedia

Franklin đã hoàn thiện nhân cách bằng một kế hoạch gồm mười ba đức tính, mà ông đã khởi đầu theo đuổi từ tuổi 20 (năm 1726) và vẫn tiếp tục theo đuổi tới tận cuối cuộc đời. Trong tự truyện của mình (xem phần tham khảo dưới đây) ông đã liệt kê mười ba đức tính:

  1. Chừng mực. Ăn không tới chán; uống không quá nhiều.”
  2. Yên lặng. Chỉ nói những điều mang lại lợi ích cho bạn và người khác; tránh những cuộc cà kê mất thì giờ.”
  3. Trật tự. Hãy để mọi thứ của bạn đều có vị trí của chúng; hãy để mỗi phần công việc của bạn đều được thu xếp một khoảng thời gian.”
  4. Kiên định. Quyết tâm làm điều bạn phải làm; làm bằng được điều bạn quyết tâm.”
  5. Tiết kiệm. Không chi gì ngoài những thứ tốt cho bạn và người khác; ví dụ, không nên lãng phí thứ gì.”
  6. Siêng năng. Không nên bỏ phí thời gian; luôn sử dụng chúng một cách hiệu quả; bỏ mọi hành động không cần thiết.”
  7. Chân thật. Không nên lừa dối; hãy suy nghĩ một cách ngay thẳng và thành thật, và, nếu bạn nói, hãy nói điều bạn biết.”
  8. Công bằng chính trực. Không làm hại người khác, giúp đỡ người khác là bổn phận của bản thân.”
  9. Điều độ. Tránh những sự thái quá; cố chịu đựng tới mức bạn cho là đủ.”
  10. Sạch sẽ. Không nên để sự không sạch sẽ hiện diện trên thân thể, quần áo hay nơi ở của bạn.”
  11. Yên bình. Không nên quan tâm tới những điều vặt vãnh, hay những rủi ro thông thường hoặc không tránh được.”
  12. Trinh tiết. Điều tiết sinh dục, đừng để làm tổn hại thân thể của mình hoặc an ninh hay danh dự của người khác.”
  13. Khiêm tốn. Học theo Jesus và Socrates.”

Continue reading

Mastering Programming

Dịch từ bài viết “Mastering Programming” của tác giả Kent Beck.

Qua nhiều năm quan sát những lập trình viên bậc thầy, tôi đã nhận thấy những mô thức chung trong quy trình làm việc của họ. Qua nhiều năm huấn luyện những lập trình viên ở mức thạo nghề, tôi đã nhận thấy sự thiếu vắng những mô thức đó. Tôi đã thấy sự khác biệt (mà) khởi đầu cho những mô thức đó, có thể tạo ra.

Đây là những cách thức mà những lập trình thu được hiệu quả tốt nhất có thể từ hơn 3 tỉ giây quý báu của họ ở trên trái đất này (ý nói là thời gian trong 1 năm – lời người dịch).
Bài luận này sẽ làm bạn sáng tỏ hơn về những điều đó. Một “công nhân thạo nghề” học cách giải quyết những vấn đề lớn hơn bằng cách cùng một lúc giải quyết nhiều vấn đề hơn. Một bậc thầy học cách giải quyết những vấn đề còn lớn hơn thế bằng cách giải quyết ít vấn đề hơn cùng một lúc. Các phần của lời khuyên này sẽ được chia nhỏ sao cho việc tích hợp những giải pháp riêng biệt sẽ là một vấn đề nhỏ hơn việc chỉ giải quyết chúng đồng thời.

Thời gian

  • Phân chia. Lấy một dự án lớn, cắt nó thành các phần nhỏ, và sắp xếp lại các phần sao cho phù hợp với hoàn cảnh. Tôi luôn có thể phân chia các dự án nhỏ hơn và luôn tìm thấy những cách thay đổi trật tự của các phần mà phù hợp với các nhu cầu khác nhau.
  • Một việc tại một thời điểm. Chúng ta tập trung vào tính hiệu quả đến mức chúng ta giảm số lượng số vòng phản hồi (feedback cycles) trong một nỗ lực để giảm tổng chi phí. Điều này dẫn đến những tình trạng gỡ lỗi phức tạp mà chi phí của nó có thể còn lớn hơn tổng phí về số vòng phản hồi mà chúng ta đã tránh.
  • Viết chương trình chạy được, chạy đúng, và chạy nhanh (Make it run, make it right, make it fast). (Ví dụ của một việc tại một thời điểm, phân chia công việc, và dễ dàng sửa đổi).
  • Những sửa đổi dễ dàng. Khi bạn phải đối mặt với một sự thay đổi phức tạp, đầu tiên hãy làm cho nó dễ đi (tôi cảnh báo rằng điều này có khó), sau đó thực hiện việc sửa đổi dễ (ví dụ: phân chia công việc, làm một việc tại một thời điểm, tập trung, và sự cô lập. Đây là một ví dụ của việc phân chia công việc.
  • Sự tập trung. Nếu bạn cần thay đổi một vài thành phần, đầu tiên hãy sắp xếp lại mã chương trình sao cho sự thay đổi chỉ cần xảy ra trong một thành phần.
  • Sự cô lập. Nếu bạn chỉ cần thay đổi một phần của một thành tố, hãy trích xuất thành tố đó ra để thay đổi trên toàn bộ thành tố con đó.
  • Quản lý các hệ thống cơ sở. Bắt đầu các dự án bằng việc so sánh với những hệ thống đã có. Điều này có thể chống lại thiên hướng muốn bắt đầu sửa chữa mọi thứ của chúng ta, nhưng khi bạn xem xét các hệ thống cơ sở, bạn sẽ thực sự biết liệu có đúng là bạn đang làm công việc sửa chữa những thứ hiện có không.

Học tập

  • Trước khi thực thi chương trình, dự đoán chính xác điều gì sẽ xảy ra.
  • Các giả thuyết cụ thể. Khi chương trình hoạt động không đúng, hãy minh định những gì bạn cho là sai trong chương trình trước khi thực hiện sự thay đổi. Nếu bạn có hai hay nhiều hơn các giả thuyết, hãy phân tích sự khác biệt giữa các giả thuyết đó.
  • Loại bỏ chi tiết không liên quan. Khi báo cáo một lỗi, hãy tìm những bước ngắn nhất để sinh lại lỗi đó. Khi cô lập một lỗi, hãy tìm những ví dụ (test case) ngắn nhất. Khi sử dụng một API mới, bắt đầu từ những ví dụ đơn giản nhất. “Tất cả những thứ này không thành vấn đề” là một giả thuyết quá mạnh và có khi là sai lầm.
    • Ví dụ, hãy xem một lỗi trên mobile, sinh lại nó với chương trình curl.
  • Đa quy mô. Di chuyển tự do giữa các quy mô (ví dụ khi thực thi trên dữ liệu nhỏ sang thực thi trên dữ liệu lớn — cách hiểu của người dịch). Có thể đây là một vấn đề thiết kế, không phải là vấn đề kiểm thử. Có thể vấn đề này liên quan đến con người chứ không phải là một vấn đề công nghệ [Lừa đảo, điều này luôn đúng].

Những thứ vượt trên cả logic

  • Tính đối xứng. Những thứ gần như nhau có thể phân chia chia thành những phần giống hệt nhau và những phần khác biệt rõ ràng.
  • Tính thẩm mỹ.
  • Nhịp điệu. Chờ đợi cho đến thời điểm đúng bảo toàn năng lượng và tránh sự lộn xộn.
  • Cân bằng (tradeoffs). Tất cả những quyết định là chủ đề của việc tradeoff. Quan trọng hơn là biết quyết định phụ thuộc vào cái gì hơn là biết câu trả lời bạn lựa chọn hôm nay (hoặc câu trả lời này bạn đã lựa chọn hôm qua).
  • Danh sách niềm vui (Fun list). Khi các ý tưởng không thứ tự đến, hãy ghi chép chúng và quay trở lại làm việc nhanh chóng. Xem lại danh sách khi bạn tạm dừng.
  • Chăm sóc các ý tưởng. Các ý tưởng giống như là những chú chim nhỏ dễ sợ hại. Nếu bạn doạ chúng đi, chúng sẽ dừng việc đến với bạn. Khi bạn có một ý tưởng, hãy chăm chút nó một chút. Kiểm chứng để loại bỏ chúng nhanh nhất có thể, nhưng từ dữ liệu chứ không phải là từ sự thiếu sự say mê.
  • Nguyên tắc 80/15/5. Sử dụng 80% thời gian của bạn cho những công việc nguy cơ thấp hoặc những công việc được trả lương vừa phải. Sử dụng 15% thời gian của bạn cho các việc nguy cơ cao/trả lương cao có liên quan. Sử dụng 5% thời gian của bạn cho những việc làm cho bạn thích thú, không quan tâm tới kết quả. Hãy dạy những người tiếp nối bạn làm 80% công việc của bạn. Vào thời gian ai đó sẵn sàng để đảm nhận công việc, một trong số 15% thí nghiệm của bạn (hoặc ít thường xuyên hơn, một trong số 5% thí nghiệm) sẽ cho kết quả và trở thành phần 80% của bạn. Lặp lại điều đó.

Kết luận

Dòng chảy trong trong bản phác thảo này dường như bắt đầu từ việc giảm nguy cơ bằng việc quản lý thời gian đến việc chấp nhận mạo hiểm một cách có ý thức bằng cách sử dụng toàn bộ não bộ và nhanh chóng quyết định độ ưu tiên của các ý tưởng.