Monday, 24 June 2013

[FMLEXER] tập thể dục với các bài lập trình đơn giản

EXER là viết tắt của từ exercise - bài tập/ thể dục

FMLEXER tiếp nối chuỗi bài viết FMLB không ai thèm chơi

Đề bài và script để tạo đề bài để ở đây

https://github.com/familug/fmlexer/tree/master/fmlexer01 

Người chơi hãy dùng bất cứ ngôn ngữ gì để thu được kết quả mong muốn.

Dùng phần mềm `tree` để in cấu trúc thư mục.


Cài đặt server chat XMPP - ejabberd

XMPP (Extensible Messaging and Presence Protocol): trước đây là Jabber, là giao thức mở dựa trên nền tảng XML dùng trong nhắn tin nhanh (instant messaging) và thông tin hiện diện trực tuyến (presence information).
(http://vi.wikipedia.org/wiki/XMPP)

Mạng XMPP có thể dùng đơn lẻ: các máy trong mạng chat với nhau, hoặc kết nối với các hệ thống nhắn tin (instant messaging systems) khác - thông qua các gateway: máy của mạng nay chat được với máy thuộc mạng kia .
Các hệ thống nhắn tin này có thể là 1 mạng XMPP khác hay mạng ICQ, google talk...




YAML là gì?

YAML (http://www.yaml.org/) là 1 định dạng dũ liệu được thiết kế nhằm mục đích để người và máy (các ngôn ngữ lập trình) cùng đọc được.

YAML được dùng vào mục đích tương tự JSON, XML nhưng ngắn gọn xúc tích hơn.
Ví dụ về 1 đoạn YAML được biểu diễn như sau:
-
  name: HVN
  mail:   hvn@familug.org
-
  name: SAM
  mail:   hai.lt@familug.org
http://yaml-online-parser.appspot.com/ Là 1 trang chuyển đổi YAML sang JSON. Bạn nên dùng trang này trong lúc đọc, vừa học vừa hành lúc nào cũng tốt hơn.


YAML để làm gì?

suy nghĩ trong đêm

00 h 36
Mưa rơi rả rích, đêm chỉ có tiếng nhạc, tiếng mưa và tiếng gõ phím.
Chất kích thích của ly cà phê Trung Nguyên vẫn còn mạnh lắm, chưa ngủ được.

Nếu may mắn, chỉ vài ngày nữa thôi là sẽ xa Việt Nam một thời gian không ngắn cũng chẳng dài, luyên thuyên tí cho đêm nhanh qua.

Mình đã viết bài cho cái blog này hơn 3 năm nay, đơn giản vì nó có ích cho người khác và cho chính bản thân. Nói ngu lỡ tèo, thì ít ra cũng làm cho đời được từng này, chẳng phải kinh khủng nhưng cũng chẳng phải tầm thường.

Mình ghét cái ý nghĩ viết blog thì phải  uyên thâm, phải giỏi, phải hơn người. Điều cũ với người này nhưng có thể là mới với người khác. Nếu mỗi người chia sẻ những gì mình biết, mình học được mỗi ngày thì sẽ có bao nhiêu điều thú vị được chia sẻ ?

Sunday, 23 June 2013

copy từ urxvt đến X clipboard

hvn@archhvn: ~ () $ whatis urxvt
urxvt (1)            - (a VT102 emulator for the X window system)

không như GNOME Terminal, urxvt không hỗ trợ copy bằng Ctrl Shift C, việc copy từ urxvt đến 1 cửa sổ nào khác phải thực hiện thông qua sự trợ giúp của của 1 script hoặc 1 clipboard manager

Tổ hợp mặc định cho việc copy và paste của X là Ctrl InsertShift Insert

Ở đây tớ dùng clipboard manager Parcellite để copy từ urxvt đến các cửa sổ khác:

Parcellite - Lightweight GTK+ Clipboard Manager

rsync - công cụ copy siêu đẳng

bạn sẽ cần tool này, vì chỉ cần học đúng 1 câu lệnh là nó đã có thể tiết kiệm cho bạn hàng đống thời gian!

hvn@archhvn: ~ () $ whatis rsync
rsync (1) - a fast, versatile, remote (and local) file-copying tool 

rsync là một công cụ dùng để copy trên UNIX-like OSes, nó nổi tiếng nhờ thuật toán delta-copy (tức chỉ copy phần khác nhau), bạn có thể cài nó và dùng thay lệnh `cp` 

Thursday, 20 June 2013

PLEAC - học các ngôn ngữ lập trình theo kiểu "perl cookbook"

Là một dư án mã mở, PLEAC - Programming Language Examples Alike Cookbook chuyển đổi các ví dụ từ Perl Cookbook sang nhiều ngôn ngữ khác nhau.

Một vài ngôn ngữ điển hình:
Ocaml: http://pleac.sourceforge.net/pleac_ocaml/index.htm
Perl: http://pleac.sourceforge.net/pleac_perl/index.html
Groovy: http://pleac.sourceforge.net/pleac_groovy/index.html
Python: http://pleac.sourceforge.net/pleac_python/index.html
Ruby: http://pleac.sourceforge.net/pleac_ruby/index.html
...

git và tig là đôi bạn thân

Mới khám phá ra `tig` gần đây nhưng nó đã trở nên vô cùng thân thiết với `git` của tớ.
Với một giao diện trên nền ncurse, màu mè con bà bán chè, tig giúp bạn dễ dàng xem các commit ... và nhiều tính năng khác nữa (chưa dùng tới)


Cài đặt:

Script hay làm bằng tay?

Bình thường tớ sẽ luôn trả lời là script vì viết script rất vui :D

Nhưng khi cần thực hiện xong công việc càng nhanh càng tốt, ngồi viết script chưa hẳn đã là điều hay ho. Trước khi thò tay định viết scritp để thực hiện một công việc gì đó nhằm tự động hóa nó, mục đích chính là làm xong công việc nhanh hơn, chính xác hơn, hiệu quả hơn, bạn nên tự hỏi mình vài câu:

- Liệu bạn làm thủ công có nhanh hơn không?
Nếu câu trả lời là có, đừng viết! Nếu bạn không thạo việc viết scritp, bạn sẽ tốn thêm thời gian để debug, google cách làm, đọc document cách dùng thư viện... và kết quả là bạn làm tay sẽ nhanh hơn. Bởi vậy, cần thật thành thạo và chính xác thì mới mang lại hiệu quả. Ví dụ:
bạn cần đổi tên 10 thư mục, thêm vào mỗi tên 1 dòng chữ XXX. Nếu bạn biết viết 1 câu lệnh bash với for, if, mv, bạn sẽ hoàn thành công việc này sau khoảng 20 giây. Nhưng nếu không thạo cú pháp, bạn lại mất thời gian debug, google thì có thể mất đến 3 phút, làm tay còn nhanh hơn.

- Script này có được sử dụng lại không?

Monday, 17 June 2013

Những điều nhảm nhí khi học lập trình

Nhảm nhí hay không phụ thuộc vào cách nhìn của bạn đọc, nhưng với mình thì chúng đúng là nhảm nhí, và rất phổ biến :3

1. x++ và ++x khác nhau thế nào?
Damn!  bạn không cần quan tâm đến thứ này. Khi nó là một thứ nên tránh thì mọi người hết lượt cắm đầu vào để tìm hiểu, và không chắc liệu có nhớ được lâu không.
Trong khi học C , thứ các bạn cần học là  hiểu về con trỏ, quản lý bộ nhớ, sử dụng các thư viện mà hệ điều hành cung cấp, các thư viện  của bên thứ 3...
Hãy viết x = x + 1; và đừng bao giờ quan tâm về câu hỏi nhảm nhí này nữa. (trừ khi bạn muốn học viết obfuscated C )


2. scanf và kiểu chương trình CLI tương tác trực tiếp với người dùng
Kiểu như: viết chương trình C cho người dùng nhập vào họ tên, mã sinh viên, điểm, ... blah blah blah. Đại khái là khi viết bạn sẽ phải dùng hàm scanf, fget, gets...

Saturday, 15 June 2013

[Editor] Sublime Text 2

Sublime Text 2- là một text editor khá phổ biến có thể cài đặt trên cả windows lẫn linux.
  • Cài đặt: 
                         sudo add-apt-repository ppa:webupd8team/sublime-text-2
                         sudo apt-get update
                         sudo apt-get install sublime-text-2
Về cách thức làm việc thì cũng như các text-editor khác: highlight, tab, chia không gian làm việc, hỗ trợ cài thêm các pakaged.
Mình cũng mới sử dụng sơ sơ thấy thích thích mọi người ai có nhã hứng thì cài và tìm hiểu nhé.


[python] Tạo HTTP Server đơn giản bằng 1 dòng lệnh

Share file nhanh chóng trong mạng LAN, đơn giản chỉ với 1 dòng lệnh.
Chuyển đến folder cần share
$ cd ~/shared

Với Python 2.x
$ python -m SimpleHTTPServer

Với Python 3.x

Friday, 14 June 2013

[bash] Tắt máy tự động

7h, cu Hít muốn đi ăn cơm nhưng chương trình wget vẫn đang download dở đống file và chẳng biết bao giờ mới xong.
7h 01, cu Hít định gõ sudo shutdown -h 120 để máy sẽ tắt sau 120 phút, nhưng lúc ấy nhỡ chưa xong thì sao?!!!
7h 02, nghĩ...
7h 03, một ý tưởng vô cùng bình thường mà không tầm thường đã nảy ra, cu Hít thò tay vào test

Ý tưởng rằng, khi wget chạy, nó sẽ xuất hiện khi grep output của lệnh `ps`. Nếu nó không còn ở đó nữa nghĩa là đã xong, lúc ấy thì tắt máy.
Nếu chuyển đoạn trên sang bash sẽ là: lặp cho đến khi không còn thấy wget trong output của lệnh `ps`, rồi shutdown.

7h 04, mọi thứ đã sẵn sàng, gõ thôi:

Danh sách port và service tương ứng trên Linux


Bạn muốn biết cổng nào dùng cho dịch vụ nào?
 tcpmux 1/tcp
 tcpmux 1/udp
 compressnet 2/tcp
 compressnet 2/udp
 compressnet 3/tcp
 compressnet 3/udp
 rje 5/tcp
 rje 5/udp
....
Nội dung bạn cần nằm ở

Wednesday, 12 June 2013

Xử lý text trên Linux

công việc này nghe có vẻ nhàm chán
và thực sự thì nó đúng là như vậy, ít nhất đối với tớ. Mỗi lần đọc 1 quyển sách lập trình, cứ đến đoạn xử  lý string là mình cố tua thật nhanh cho hết :v

Nhưng nó cần thiết, quan trọng, và thậm chí mang tính sống còn. Nếu bạn xử lý tất cả mọi thứ bằng tay thì không bàn tới, nhưng nếu bạn muốn tự động hóa mọi thứ, bạn sẽ phải viết script, và xử lý text lại trở nên quan trọng.
Vì: trên UNIX-like OS, output của các utils đều là text cả. Các chương trình giao tiếp với nhau thông qua text (dùng pipeline của sh/bash...), bởi vậy, chán cũng phải làm, thậm chí là làm giỏi :3

Dưới đây là một problem đơn giản, bạn nào ngứa tay thì làm thử, dùng cái gì cũng được, miễn thu được kết quả:

[LATEX] Đồ án tốt nghiệp đề tài "SỬ DỤNG SALTSTACK TRIỂN KHAI HỆ THỐNG PRIVATE CLOUD OPENSTACK"

Đây là ĐATN của tớ viết toàn bộ sử dụng LATEX gồm bản báo cáo

https://bitbucket.org/hvnsweeting/datn/src/96c8e2902bdf4f69fe5b9f17d48b933188ba7f4c/tttn.tex?at=master

và slide
https://bitbucket.org/hvnsweeting/datn/src/96c8e2902bdf4f69fe5b9f17d48b933188ba7f4c/slide.tex?at=master

Monday, 10 June 2013

[vim] Hướng dẫn học dùng vim

Bài viết [TẤT NHIÊN]  mang tính chủ quan và dựa trên kinh nghiệm dùng vim của tớ.
Đọc xong bài này bạn sẽ:
- biết học dùng vim cơ bản thế nào
- biết tìm chỗ để học nâng cao
- hiểu biết về những thứ xung quanh vim

vim là gì?
vim (1) - Vi IMproved, a programmers text editor


vim là phiên bản phát triển từ vi (visual - đọc là vi-eye) , thường được dùng để edit các file text khi lập trình hay cấu hình hệ thống.

Những đặc điểm nổi bật của vim

Sunday, 9 June 2013

WM và hành trình đi vào thế giới ArchLinux

:v
tít nhảm nhí vãi

WM là thứ đầu tiên tớ hóng được từ ArchLinux, và cũng là dấu mốc mở đầu một chân trời mới.


Window Manager (WM) là một loại chương trình để quản lý cửa sổ
Desktop Environment (DE) là một bộ gồm nhiều chương trình để tạo nên một môi trường desktop, các DE nổi tiếng có thể kể đến như: Gnome, KDE, LXDE, XFCE, e17. Bất kỳ Desktop Environment nào cũng bao gồm một WM, nhưng nếu đang dùng Ubuntu, có lẽ bạn sẽ không để ý nó tên là gì.

Đây chính là sự khác biệt, khi ở một nơi, bạn thấy nó đập vào mặt ở mọi chỗ,

Friday, 7 June 2013

[KVM] Tăng tốc máy ảo bằng virtio

Sẽ viết một bài cài máy ảo sử dụng KVM sau.

KVM là gì?
Định nghĩa theo trang chủ:
KVM (for Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V).

Nói đơn giản nó sẽ cho phép bạn cài máy ảo lên máy bạn đang dùng, tương tự như VirtualBox, VMWare.  KVM được tích hợp sẵn vào kernel của Linux từ phiên bản 2.6.20

Virtio 

Thursday, 6 June 2013

[SmartUsing] Dùng github/bitbucket để lên kế hoạch cá nhân

Nếu bạn thường xuyên bắt đầu một việc gì đó khi thích thú (học 1 cái gì đó chẳng hạn), và rồi vài hôm sau bạn quên mất, hay bạn muốn lên kế hoạch để thực hiện như những gì bạn đề ra.
Có rất nhiều ứng dụng để take note, báo thức, lên kế hoạch trên các smartphone cũng như trên web. Nhưng mới đây tớ "phát hiện" ra có thể sử dụng github hay bitbucket để thực hiện việc này, khá là thú vị.

Wednesday, 5 June 2013

Ý nghĩa của các câu lệnh Linux

Dưới đây là các câu lệnh thường gặp trên Linux và lý giải tại sao nó có tên như vậy:


  • cp — CoPy files and directories
  • dc — Desk Calculator
  • dd — (Data Description) convert and copy a file
  • df — Disk Free: report file system disk space usage
  • du — Disk Usage
  • ed — EDitor
  • ln — make LiNks between files

Tuesday, 4 June 2013

[CSS] Dropdown menu



Chào cả nhà hôm nay vừa thi tốt nghiệp cấp 3 xong. Trời có nắng nhưng được cái có gió. Và có mấy đứa đi chụp ảnh mảnh ở hồ sen nào đấy rồi up ảnh lên face + không biết đã khao ván trượt chưa nữa
Đi vào vấn đề chính nào hôm nay mình sẽ trình bày cách để xây dựng 1 thanh menu 2 level . Trước hết để tiện cho việc trình bày bạn nào chưa có cái bảng các thuộc tính của CSS thì tìm trên mạng hoặc liên hệ mình để lấy(mail:dong.tm1212@gmail.com). Để xây đựng Dropdown menu cần 1 số lệnh sau :

  1. Margin : Lệnh này để căn chỉnh khoảng cách giữa các đối tượng cùng cấp với nhau và có 4 giá trị theo thứ tự trên phải dưới trái, 3 giá trị thì là trên phải(trái = lề phải) dưới, 2 giá trị : trên(=dưới) phải(=trái), 1 giá trị: tất cả bằng nhau,  ngoài ra còn có auto nó sẽ tự co khi co màn hình(theo mình biết là vậy).ps: còn có cách chỉnh riêng từng giá trị bằng các thêm-top,-bottom,-left,-right sau margin
  2. Padding: giống như margin để căn chỉnh khoảng cách nhưng là khoảng cách giữa đối tượng và lề của nó . Các dùng giá trị như margin

Thư viện trên Linux

UPDATED: thêm lệnh liệt kê tất cả thư viện

bài này cung cấp cho bạn hiểu biết cơ bản về Linux library (và nó có thể đúng với các UNIX-like OS khác như BSD, Solaris, ...)
Ai nên đọc bài này:
  • C/C++ programmer
  • Sysadmin - để troubleshooting
  • Người thích tìm hiểu về Linux
Library ở đây chỉ thư viện dùng trong lập trình (program library), là nơi chưa các hàm, lập trình viên chỉ cần import chúng và dùng.

Có 3 loại library:
  1.  static libraries
  2.  shared libraries
  3. dynamically loaded libraries.
Một số khái niệm liên quan:

Sunday, 2 June 2013

CSS-Cách chèn code vào 1 trang web

Chào cả nhà hôm nay mình có nghịc twitter bootstrap toét cả mắt do chưa chỉnh customize nên toàn màu trắng là màu trắng nhưng cái này viết css ah nhầm giúp làm giao diện nhanh ghê!!!

Đi vào bài hôm nay mình sẽ trình bày về các cách để chèn code css vào một trang web.
Có 3 cách để chèn code vào trang web :

  • Cục bộ: Viết ngay code css trên ngay thành phần cần tác động thông qua thuộc tính style= " property1: value1 ; property2 : value2";.... Phạm vi tác động nhỏ , chỉ thẻ chứa nó mới có style đó.          
           Ví dụ: style="text-transform:uppercase; color: red ; "
          
khi add vào thẻ h1 với chứ tôi yêu vn, kết quả sẽ là: Tôi yêu VN

Saturday, 1 June 2013

Partitioning - Phân vùng ổ cứng

Nó là phần rắc rối nhất / dễ gây hoang mang nhất khi cài đăt một hệ điều hành.
Bài này đưa ra những khái niệm cơ bản về phân vùng để người dùng không còn sợ hãi.

Có 2 partition scheme (sơ đồ phân vùng ???) phổ biến là MBR và GPT

1. MBR (master boot record)
MBR (master boot record) của một đĩa cứng có khả năng chứa một bảng phân vùng có thể định nghĩa 4 phân vùng chính (primary partition). Do con số 4 này có vẻ hạn chế đối với những ổ cứng cỡ lớn nên người ta sinh ra khái niệm phân vùng mở rộng (extended partition, vậy bạn có thể có 3 primary + 1 extended). Bên trong extended partion ta có thể thoải mái định nghĩa các phân vùng logic (logic partition)

2. GPT (GUID partition table)