Mẹo vặt Erlang
Erlang
14
White

Ngoc Dao viết ngày 21/03/2016

Bài viết này đề cập các vấn đề nho nhỏ gặp phải và cách giải quyết khi làm việc với Erlang.

Cài Erlang từ mã nguồn

Để có thể ./configure, make, make install trơn tru, trên Ubuntu cần cài các gói:

sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
sudo apt-get install libssl-dev
sudo apt-get install libpam0g-dev

Trên CentOS:

sudo yum install gcc
sudo yum install ncurses-devel
sudo yum install openssl-devel
sudo yum install libpam0g-dev

Erlang có chương trình debugger có GUI rất mạnh, nhưng nó đòi wxWidgets. Erlang R13B01 đòi wxWidgets 2.8. Ví dụ trên Ubuntu, trước khi build cần cài thêm các gói sau:

sudo apt-get install libwxbase2.8-dev
sudo apt-get install libwxgtk2.8-dev
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install libglut3-dev

Để bật debugger, chạy erl -smp, rồi gõ debugger:start().

Để cài trên Snow Leopard ở chế độ 64 bit từ mã nguồn, khi configure cần thêm tham số --enable-darwin-64bit.

Tra cứu tài liệu

  • Tài liệu ở erlang.org hơi khó tra.
  • Trang erldocs giúp tra cứu rất nhanh.
  • Cách khác là download tài liệu về máy của mình, xem cấu trúc thư mục của nó để tìm đúng chỗ cần thiết.

Tìm vị trí của phần tử trong danh sách

string:str(List, [Element]). Bất ngờ chưa!

Unicode

Tham khảo:

Hiển thị Unicode trên Eshell (Erlang emulator)

Trước tiên là cách dùng Regular Expression cho Unicode, ví dụ tiếng Nhật:

Bật Eshell với chỉ định cho LC_CTYPE:

LC_CTYPE=ja_JP.UTF-8 erl

Test:

1> lists:keyfind(encoding,1,io:getopts()).
{encoding,unicode}
2> "ベトナム".
[12505,12488,12490,12512]
3> io:format("~ts~n",[v(2)]).
ベトナム

Để hiển thị đúng cần modifier t, t ở đây là Unicode translation modifier.
v(2): kết quả của câu lệnh thứ 2, trường hợp này là chuỗi ký tự vừa nhập.

Regexp với Unicode

4> {match, M}=re:run("名前=キムタク","名前=(.*)",[unicode, {capture,all_but_first,list}]).
{match,[[12461,12512,12479,12463]]}
5> io:format("~ts~n", [M]).
キムタク
ok

Chuỗi gõ ở Eshell và ở tập tin mã nguồn không phải bao giờ cũng là một

Ví dụ trong tập tin mã nguồn lưu ở dạng UTF-8:

V = "tiếng Việt",
io:format("~p~n", [V])

Biên dịch rồi chạy sẽ ra kết quả:

[116,105,225,186,191,110,103,32,86,105,225,187,135,116]

Tất cả phần tử của mảng đều < 256, nghĩa là trình biên dịch đã biến đổi thành mảng byte tương thích với UTF-8. Còn nếu gõ trực tiếp từ Eshell:

1> "tiếng Việt".
[116,105,7871,110,103,32,86,105,7879,116]

Nghĩa là nếu có hàm nào đó nhận tham số là chuỗi Unicode, thì khi thử nghiệm ở Eshell, cần có bước biến đổi trung gian:

2> B = unicode:characters_to_binary("tiếng Việt").
<<116,105,225,186,191,110,103,32,86,105,225,187,135,116>>
3> L = binary_to_list(B).
[116,105,225,186,191,110,103,32,86,105,225,187,135,116]

Tham khảo

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Ngoc Dao

102 bài viết.
300 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
66 8
Làm thế nào để nâng cấp trang web mà không làm gián đoạn dịch vụ? Đây là câu hỏi phỏng vấn các công ty lớn thường hỏi khi bạn xin vào vị trí làm lậ...
Ngoc Dao viết gần 3 năm trước
66 8
White
42 1
Bài viết này giải thích sự khác khác nhau giữa hai ngành khoa học máy tính (computer science) và kĩ thuật phần mềm (software engineering), hi vọng ...
Ngoc Dao viết hơn 2 năm trước
42 1
White
38 2
Nếu là team leader, giám đốc công ty hay tướng chỉ huy quân đội, vấn đề cơ bản bạn gặp phải là “hướng mọi người đi theo con đường bạn chỉ ra”. Thử...
Ngoc Dao viết hơn 2 năm trước
38 2
Bài viết liên quan
White
3 0
Chú thích: Bài này đăng lần đầu năm 2009 để chia sẻ kinh nghiệm, sau khi tác giả viết xong thư viện closed source để bán. Hiện tại năm 2016 đã có t...
Ngoc Dao viết hơn 2 năm trước
3 0
White
2 0
Trong xử lí song song, các đơn vị thực hiện nhiệm vụ xử lí thường gặp là: thread, process, core, CPU, node. Thường mỗi node ứng với một server vật ...
Ngoc Dao viết hơn 2 năm trước
2 0
White
3 0
Khi xây dựng hệ thống server phân tán chạy song song trên nhiều node, ta thường gặp bài toán có pattern sau: Có 3 node, mỗi node chạy một process ...
Ngoc Dao viết hơn 2 năm trước
3 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
102 bài viết.
300 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!