LaTeX and Zotero for the scientists – Goodbye to MS Word

10-09-2014 Update:

Một mẫu CV với gói ModernCV: writeLatex.

23-07-2014 Update:

Thêm một cuốn sách về LaTeX: LaTeX and friends

Ví dụ 1 về tạo presentation với package Beamer của LaTeX: download.

Ví dụ 2 về tạo presentation với package Beamer của LaTeX: download.

Một số templates khác cho LaTeX: http://liantze.penguinattack.org/latextypesetting.html

OpenOffice bản 4.1.0 portable (04-2014): download.

12-11-2013 Update: Vẽ hình để sử dụng với LaTeX. Các format cho hình vẽ thường được sử dụng với LaTeX là .png và .pdf vì vậy có thể dùng bất cứ chương trình nào để vẽ hình, sau đó lưu lại ở hai định dạng trên là có thể dùng được. Theo ý kiến của bản thân tôi thì với các hình vẽ (biểu đồ, sơ đồ, lưu đồ thuật toán …) thì OpenOffice (xem thêm ở đây, hiện tại là bản 4.0.1, một nhánh khác là LibreOffice) là một công cụ khá hay vì:

+ Bắt điểm tốt hơn MS Word

+ File .pdf sinh ra nhỏ hơn nhiều so với MS Word.

+ Free

+ Nhanh

08-11-2013 Update: Sau một thời gian sử dụng TeXstudio, hôm nay tôi xin giới thiệu với các bạn hai công cụ TeX Editor tốt hơn là TeXnicCenter (bản hiện tại là 2.02) và WinEdt (bản mới nhất là 8.1). Theo kinh nghiệm của cá nhân tôi thì hai phần mềm này tốt hơn so với TeXstudio về: tốc độ biên dịch (mặc dù đều gọi tới MikTeX nhưng không hiểu sao lại nhanh hơn), về giao diện và tính tiện ích. Riêng TeXnicCenter thì biên dịch tốt nhất, có những file TeX không thể dịch với hai phần mềm kia nhưng TeXnicCenter vẫn làm việc tốt, đặc biệt xét tới yếu tố đây là một phần mềm free. WinEdt là một phần mềm bản quyền và có khá nhiều tính năng hay.

23-05-2012 Update: Zotero Tutorial – Hướng dẫn sử dụng Zotero để quản lý tài liệu tham khảo và viết tài liệu khoa học (paper, poster and thesis)

Tại sao lại dùng LaTex?
– Vì LaTeX là công cụ để: viết các báo cáo khoa học (report, paper, book ..) và dành cho các nhà khoa học.
– LaTeX dễ hơn Word (nhất là đối với các tài liệu đòi hỏi theo chuẩn và dài).
– LaTeX là chuẩn và đẹp hơn Word.
– Phần mềm để dùng LaTeX free (trên cả Windows và Linux, Unix)
LaTeX đặc biệt hữu ích cho ai làm PhD hoặc Master, tất nhiên ai đó có thể nói rằng cái gì LaTeX làm được thì Word cũng làm được, nhưng hãy tin tôi, sẽ mất thời gian hơn, chưa chắc đã đúng chuẩn và rất, rất nhiều Master, PhD student đều chuyển từ Word sang LaTeX, vậy thì bạn còn bảo thủ làm gì?
Còn Zotero?
– Free
– Dùng để quản lý tài liệu tham khảo tuyệt vời, tự động lấy metadata về các tài liệu tham khảo, tự động insert và sắp xếp theo chuẩn của các tạp chí theo chuẩn.
– Tốt cho cả người dùng Word và LaTeX.
Bạn có thể dùng EndNote, RefMan … nhưng tất cả đều không cao thủ bằng Zotero.
Hướng dãn sử dụng LaTeX và Zotero trên Windows:
– Cài đặt MikTeX 2.9 (cỡ khoảng 2Gb), có thể xóa thư mục doc vì không dùng đến, còn lại hơn 1Gb.
– Trình soạn thảo tài liệu LaTeX: tốt nhất là TeXStudio 2.3. Có nhiều tranh cãi về TeXMaker, TeXnicCenter, WinShell nhưng TeXStudio vẫn là tốt nhất, vì nó nhanh, trực quan và dễ dùng. Nếu bạn còn không tin, hãy xem ở đây: I’m switching to TeXstudio.
– Tài liệu học LaTeX: tốt nhất là google.com, nhưng trước tiên cũng cần phải đọc và làm hết các examples trong một cuốn sách đàng hoàng. Theo tôi, cuốn cơ bản nhất là LaTeX Beginner’s Guide. Nếu bạn muốn cụ thể hơn nữa, “More Math Into LaTeX, 4th Edition” sẽ là một lựa chọn tuyệt vời.
– Đối với một văn bản LaTeX, bảng (table) và hình ảnh (figure) là hơi rắc rối một chút nhưng hãy tin tôi: khi bạn đã biết LaTeX, bạn sẽ tạm biệt MS Word khi viết các tài liệu khoa học, hoặc thậm chí là CV của mình.
Một số tin đồn về LaTeX:
– LaTeX chỉ dành cho các nhà toán học: điều này không còn đúng nữa, LaTeX dành cho các nhà khoa học.
– LaTeX rất khó: không đúng, LaTeX thậm chí còn dễ hơn Word, bạn không nên bảo thủ.
– LaTeX gồm toàn lệnh như lập trình, người không biết về Tin học không học được: Sai hoàn toàn, với các công cụ soạn thảo trực quan, bạn không cần nhớ hết và chi tiết các lệnh của LaTeX, các lệnh hay dùng cũng chỉ có vài lệnh thôi. Hơn nữa LaTeX có hẳn một cộng đồng đông đảo người dùng (TeX Users Group – TUG) có thể support cho bạn, không có gì mà phải lăn tăn. Về mặt lịch sử, LaTeX là một phiên bản mở rộng của TeX, một ngôn ngữ dành cho việc soạn thảo văn bản được Donald E. Knuth tạo ra để viết cuốn sách “The Art of Computer Programming” vào những năm 1970 (lúc đó còn chưa có Office) khi ông quá thất vọng với các phần mềm soạn thảo văn bản thời bấy giờ (có thể xem thêm ở đây), nghĩa là mục đích nguyên bản của LaTeX là để soạn thảo văn bản khoa học chuyên nghiệp.
– Ôi dào, dùng Word là được rồi, tại sao phải chuyển sang LaTeX làm gì cho mệt: vâng, tôi không nói là Word là xấu hay không tốt, nhưng tại sao không dùng LaTeX, công cụ chính xác dành cho các báo cáo khoa học? Nếu bạn chỉ soạn thảo các văn bản thông thường, OK hãy dùng Word của bạn, nhưng nếu bạn muốn viết các báo cáo khoa học, hãy dùng LaTeX, đơn giản vì đó là công cụ dành cho việc đó. Đừng bảo thủ. Vả lại nó cũng không mệt như nhiều người tưởng.

Thế còn tiếng Việt thì sao? Nghe nói phải cài một cái gì khó lắm mới gõ được tiếng Việt và vẫn lỗi chữ ư hơi gì đó? Không, điều này hoàn toàn không đúng. Để gõ tiếng Việt cần có gói vntex, nhưng việc cài đặt là hoàn toàn tự động, bạn chỉ cần khai báo dùng gói vntex và tự MikTeX sẽ down về (một lần duy nhất).

– Tôi muốn viết một bài báo (paper cho conf, journal) hay book bằng LaTeX thì làm thế nào? Tất cả các conference hay journal, và book đều có các template ở dạng LaTeX (100%) hay Word (không chắc 100%), bạn chỉ việc tìm theo tên của conf, journal hay publication là sẽ tìm được tempate tương ứng. Đối với conf là dễ tìm nhất vì thường tempate nằm ngay ở phần “Paper submission“, về journal thì cũng tương tự.

Một vài templates:

1. CV (sử dụng gói moderncv)

2. Book, Think Complexity

3. Poster

Matrices multiplication on Windows – Matlab is the champion again

Today, I test big matrices (float) multiplication on my laptop (HP Elitebook 6930p – Duo 2 Core 2×2.4Ghz, 4Gb Ram, Windows 7 32 bit, VS 2010) with OpenCV 2.3.1, Armadillo 3.0.2, Eigen 3.0.5 and OpenBLAS 1.0, C/C++ simple matrices multiplication method and Matlab 2010b 32bit. The program is simple: A = matrix(dim1, dim2, float), B = matrix(dim2, dim3, float), C = A*B, ofcourse I did not include the initial time, just the time for calculation. And here are the results.

Matrices’ size C Armadillo OpenCV Eigen C++ (use STL vector class) OpenBLAS Matlab
1000×1000 1.45 0.125 1.76 0.87 1.47 0.062 0.062
2000×2000 11.64 0.94 14.2 6.93 11.23 0.99 0.54
3000×3000 38.11 3.28 47.2 23.51 37.99 1.75 1.7
4000×4000 90.84 7.33 110.37 53.7 90.2 7.91 4.2
5000×5000 180.74 15.65 213.4 104.11 181.02 10.8 7.3
6000×6000 315.46 27.32 376.46 186.1 316.3 25.33 12.74

It is clear that Matlab is the champion, like in SVD test, but I do not understand why OpenCV is the slowest, even slower than simple C and C++ implementation (C and C++ implementation have the same speed). OpenCV is two times slower than Eigen, Armadillo (in my test – I use OpenBLAS with Armadillo) have the same speed with OpenBLAS. I also notice that simple C/C++, OpenCV, Eigen use only one Core and Armadillo, OpenBLAS and Matlab use both 2 Cores of my machine.

OpenCV setting for Visual Studio 2010 – Hướng dẫn thiết lập OpenCV để chạy với Visual Studio 2010

Update ngày 24/04/2014: Bản OpenCV chính thức mới nhất version 2.4.9 đã được tung ra. Có thể download bản dành cho Windows ở đây. Các điểm mới và các lỗi được sửa có thể xem ở đây.

Update ngày 31/12/2013: Bản OpenCV chính thức mới nhất version 2.4.8 đã được tung ra. Có thể download bản dành cho Windows ở đây. Các điểm mới và các lỗi được sửa có thể xem ở đây.

Update ngày 12/11/2013: Bản OpenCV chính thức mới nhất version 2.4.7 đã được tung ra. Có thể download bản dành cho Windows ở đây.

Update ngày 06/11/2013: Bản OpenCV 3.00 (version number đã được thay đổi từ 2.9.0 thành 3.00 được một thời gian) đã được cập nhật. Một số module mới được thêm vào như: androidcamera, matlab, optim, shape, viz … ngoài ra, các module GPU trước đây hầu hết bị đổi thành CUDAxxx (như cuda, cudaarithm, cudafilters …). Nếu không muốn dùng module nào, có thể sửa file CMakeLists.txt để VS không build module đó trong quá trình dịch (ví dụ như Python, Matlab …). Cũng có thể tăng tốc quá trình dịch nhanh lên đáng kể (trong trường hợp có dùng các module CUDA) bằng cách chỉ dịch các code cho CUDA version từ 2.0 trở lên (bỏ các version 1.1, 1.2 và 1.3).

Update ngày 13-08-2013: Bản OpenCV 2.9.0 (các nhà phát triển OpenCV đã quyết định đổi version từ 2.4.9 thành 2.9.0) đã được cập nhật. Các thay đổi chính gồm có: các phần liên quan tới GPU (thêm module cudev), thêm thư viện opencv_bioinspired290 (các hàm liên quan tới retinal filter), và các sửa lỗi khác. Quá trình biên dịch cũng không có gì đáng chú ý so với bản 2.4.9.

Update ngày 09-06-2013: Ngày 07/06/2013 bản OpenCV 2.4.9 với phần GPU đã được chia nhỏ thành các libraries bé hơn đã được update. Bản này build mất khoảng 5h trên cấu hình Laptop 2 Core 2.4 Ghz, Windows 7 SP1 32 bit. Và kết quả thật là hoàng tráng: một thư mục khoảng gần 5 Gb. Không có lỗi nào trong quá trình biên dịch với Visual Studio 2010 SP1 32 bit và CUDA 5.0, tuy nhiên người dùng vẫn phải tương tác trong quá trình dịch (đồng ý update cấu hình của các Project) và tự build project INSTALL để có thư mục include.

Update ngày 21-05-2013: Tự build OpenCV 2.4.9 (bản chính thức hiện tại là 2.4.5) với Visual Studio 2010, CUDA 5.0 từ source code (rất không khuyến khích cho những ai mới bắt đầu với OpenCV hoặc chưa đủ công lực-để chờ đợi và sửa các lỗi phát sinh, tất nhiên nếu không có thư viện CUDA cài trên máy thì thời gian compile cũng không có gì đáng nói). Sau một thời gian tìm hiểu CUDA, một điều ngạc nhiên là tại sao trước đây mình lại thờ ơ với nó thế, trong khi hiệu năng mà nó mang lại cho lĩnh vực xử lý và phân tích hình ảnh (Image processing and Analysis) quả là rất lớn. Nhân tiện build lại OpenCV 2.4.9 nên viết một vài chia sẻ lên đây cho những ai quan tâm. Điều đầu tiên cần biết là hoàn toàn có thể lập trình CUDA mà không cần có một máy tính có card đồ họa CUDA của Nvidia, nhưng muốn chạy chương trình thì cần. Điều thứ hai là bên cạnh CUDA còn có thư viện AMP của AMD cũng là một thư viện lập trình GPU (Graphics Processing Unit) hoặc OpenCL (một nền tảng nhắm đến việc sử dụng song song cả CPU và GPU) nhưng theo kinh nghiệm bản thân tôi (đã thử AMPOpenCL) thì AMP khá là rối rắm (trong khi CUDA đơn giản hơn) và cái gì viết bằng OpenCL thì cũng chạy được trên CUDA. Vì hai nguyên nhân trên, CUDA là lựa chọn lý tưởng hơn cả.

Đầu tiên muốn build OpenCV from source, bạn download OpenCV từ link trên, sau đó giải nén vào một thư mục, chẳng hạn như D:\OpenCV chẳng hạn. Tiếp đến bạn download cmake về, cài đặt bình thường (lưu ý lựa chọn add đường dẫn của Cmake vào biến môi trường của hệ thống). Tiếp đến chạy command.com, chuyển tới thư mục D:\OpenCV, gõ lệnh mkdir build, tiếp đến cd build và gõ lệnh cmake -D:CMAKE_BUILD_TYPE=RELEASE D:\OpenCV. Chờ một lát để cmake detect các tool của hệ thống và sinh ra file solution cho Visual Studio, lưu ý là cmake sẽ tự tìm bộ cài Visual, Python, CUDA trên máy của bạn nên những thứ này cần được cài đặt và cấu hình trước (cũng không có gì phức tạp), nếu không thì các phần thư viện dành cho Python, CUDA sẽ không được build. Với Python, hiện nay OpenCV chỉ hỗ trợ bản 2.7 trở xuống. Tiếp đến các file sẽ được sinh ra trong thư mục build. Bạn thoát khỏi command.com và vào thư mục build, mở file OpenCV.sln và build với Visual Studio 2010, lưu ý là phần compile của CUDA sẽ rất lâu (xem lý do ở đây). Có một lỗi unknown identifier ASSERT trong file steoreocsbp.cpp của GPU, sửa bằng cách thêm lệnh #include <assert.h> vào đầu file này. Nếu không có lỗi gì khác, bạn sẽ có các file của thư viện OpenCV 2.4.9 trong thư mục D:\OpenCV\build\bin\Release để lập trình. Lưu ý là file opencv_gpu249.dll có kích thước khá lớn (>324 Mb).

OpenCV, bản hiện tại là 2.4.0 beta 2, bản ổn định là 2.3.1 là một thư viện được dùng khá phổ biến cho các ứng dụng của Computer Vision và Image Processing. Với các môi trường Linux và Unix based thì việc thiết lập cấu hình để lập trình với OpenCV là khá đơn giản. Tuy nhiên với Visual Studio 2010 thì khá rối rắm. Trong bài viết này tôi sẽ hướng dẫn một cách đơn giản nhất các bước để có thể sử dụng OpenCV 2.4.0 beta 2 với Visual Studio 2010.
1) Download bản OpenCV về máy tính của mình, sau đó giải nén thành thư mục opencv (chẳng hạn trên ổ D:\). Ta có thư mục D:\opencv chứa các file cần thiết của thư viện.
2) Xóa bỏ một số phần không dùng đến trong thư mục buildbuild\common\tbb: chẳng hạn như phần Python, GPU (lớn nhất), x64, vc9 và staticlib. Chỉ cần giữ lại thư mục common, include, x86\vc10 (hai thư mục con là bin và lib) là đủ. Sau khi thực hiện thao tác này cả thư mục opencv của bạn chỉ còn khoảng hơn 300 Mb. Nhỏ hơn nhiều so với 2Gb ban đầu (lúc mới giải nén OpenCV).
3) Thiết lập đường dẫn môi trường của Windows: thêm hai đường dẫn D:\opencv\build\x86\vc10\bin (chứa file .dll của OpenCV) và D:\opencv\build\common\tbb\ia32\vc10 (chứa file .dll của TBB) vào biến môi trường system path của Windows.
4) Tạo hoặc mở một project bất kỳ với Visual Studio, vào mục Property Mangager, kích đúp chuột lên mục Debug và nhấn chuột phải lên mục Microsoft Cpp Win32 như hình sau:


Trong cửa sổ hiện ra, ở mục VC++ Directories, phần Include files, thêm đường dẫn D:\opencv\build\include vào cuối, trong mục Library files, thêm đường dẫn D:\opencv\build\x86\vc10\lib vào cuối.
Trong mục Linker, phần Input, mục Addtional Dependencies, thêm các file sau vào:opencv_legacy240.lib;opencv_core240.lib;opencv_features2d240.lib;opencv_highgui240.lib;opencv_calib3d240.lib;opencv_imgproc240.lib;
opencv_objdetect240.lib;opencv_video240.lib;opencv_haartraining_engine.lib

Đến đây là xong bước cấu hình, thoát khỏi Visual Studio, chương trình sẽ hỏi bạn có muốn lưu lại cấu hình không, nhấn vào Yes và bắt đầu lập trình. Một số ví dụ cơ bản về OpenCV với Visual Studio có thể tìm thấy tại OpenCV Tutorials.
Lưu ý: Nên đặt thư mục chứa OpenCV là opencv vì sẽ ít phải sửa cấu hình khi thay đổi các phiên bản OpenCV khác nhau (chỉ cần thay tên các file .lib theo số phiên bản) và nên xóa các thứ không cần thiết để đỡ tốn bộ nhớ.
Một số bài viết khác về cùng chủ đề:
Link 1
Link 2
Link 3

Armadillo 3.0.0 with OpenBlas 1.0 on Windows

Armadillo 3.0.0 has just released on 09-04-2012. In the release file (armadillo-3.0.0.tar.gz) you can find prebuilt version of blas and lapack libraries. These files are necessary because they are the core of Armadillo. But the prebuilt version of blas and lapack only use one core of the machine. So we can use muticore version of blas and lapack to improve performance of Armadillo. There are three version of Blas we can use: MKL Blas of Intel (not free), AMD Blas-ACML (better on AMD machine), and OpenBlas, an updated version of GotoBlas. After downloading the zip file that contains OpenBLAS, I use MinGW to build OpenBLAS on my laptop, which run Windows 7 with Visual Studio 2010 and get the result files: libopenblas_penrynp-r0.1.0.dll, libopenblas_penrynp-r0.1.0.lib. I download the lapack files (lapack.dll and lapack.lib) from the lapack’s Homepage and then I replace blas_win32_MT.dll and blas_win32_MT.dll, lapack_win32_MT.dll, lapack_win32_MT.lib with my files and now Armadillo runs faster because it uses both 2 cores of my machine (of couse, not for all operations).
Important notes: #define ARMA_USE_LAPACK and #define ARMA_USE_BLAS must be enable in the file config.hpp of Armadillo.
If you enable TBB option, then add the code below to the file include\armadillo of Armadillo:
#if defined(ARMA_USE_TBB_ALLOC)
#include
#include
#endif

SVD of OpenCV 2.4.0 beta – Even slower

In one of my previous posts SVD bench mark on Windows – that why Matlab is the champion, I have said that SVD function of OpenCV 2.3.1 is much slower than Matlab and Armadillo. But today, when I rebuild my program with OpenCV 2.4.0 beta, the result is even worse than OpenCV 2.3.1: with 1000×1000 single matrix, SVD function of OpenCV 2.4.0 took more than 7 minutes and I could not wait for its finishing. I do not know why it is.

Qt Creator 2.4.1 (Qt SDK 1.2) and OpenCV 2.3.1 on Windows with VS 2010

Today, I install Qt SDK 1.2 (Qt Creator 2.4.1 is included) to program with OpenCV 2.3.1 on my laptop, which runs VS 2010 Sp1. And I have some notes to share:
1) You do not need the whole SDK (about 1.2 Gb), so uncheck all the options related to Symbian, that save about 750 Mbs for your hard disk. My QtSDK directory is about 480 Mbs after installing Qt SDK.
2) Qt Creator 2.4.1 is included in Qt SDK, so you do not need to install.
3) You do not need CMake to build a progam created by Qt Creator
4) You do not need to rebuild OpenCV, using the libraries and dlls file in build folder of OpenCV package is OK.
5) There are three notes in order to build a OpenCV (C++) program with Qt Creator:
+ add your OpenCV’s dlls directory to your system’s PATH environment variable.
+ add include folder of OpenCV in your Qt Creator’s project file.
+ add libs file of OpenCV in your Qt Creator’s project file
Like this:
INCLUDEPATH += D:\opencv\build\include \
CONFIG(release,debug|release)
{
LIBS += D:\opencv\build\x86\vc10\lib\opencv_calib3d231.lib \
D:\opencv\build\x86\vc10\lib\opencv_contrib231.lib \
D:\opencv\build\x86\vc10\lib\opencv_core231.lib \
D:\opencv\build\x86\vc10\lib\opencv_features2d231.lib \
D:\opencv\build\x86\vc10\lib\opencv_flann231.lib \
D:\opencv\build\x86\vc10\lib\opencv_gpu231.lib \
D:\opencv\build\x86\vc10\lib\opencv_haartraining_engine.lib \
D:\opencv\build\x86\vc10\lib\opencv_highgui231.lib \
D:\opencv\build\x86\vc10\lib\opencv_imgproc231.lib \
D:\opencv\build\x86\vc10\lib\opencv_legacy231.lib \
D:\opencv\build\x86\vc10\lib\opencv_ml231.lib \
D:\opencv\build\x86\vc10\lib\opencv_objdetect231.lib \
D:\opencv\build\x86\vc10\lib\opencv_ts231.lib \
D:\opencv\build\x86\vc10\lib\opencv_video231.lib
}

CONFIG(debug,debug|release)
{
LIBS += D:\opencv\build\x86\vc10\lib\opencv_calib3d231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_contrib231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_core231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_features2d231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_flann231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_gpu231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_haartraining_engined.lib \
D:\opencv\build\x86\vc10\lib\opencv_highgui231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_imgproc231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_legacy231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_ml231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_objdetect231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_ts231d.lib \
D:\opencv\build\x86\vc10\lib\opencv_video231d.lib
}
6) OpenCV 2 Computer Vision Application Programming Cookbook is a good book for OpenCV and Qt programming and you can see some examples from the book at The author’s website.

Bài giảng Phân tích, thiết kế và đánh giá thuật toán