Dec 19, 2012

Sự khác biệt về hàm main của C và C++

Thoạt đầu tưởng chừng như không có sự khác biệt giữa 2 ngôn ngữ với hàm 'main': hàm đặc biệt quan trọng trong chương trình. Nhưng thưc tế lại khác xíu.
Cho 2 đoạn mã sau.
Đoạn 1: Viết bằng c:
#include <stdio.h>
float main(int a, int b, int c)
{
    printf("Chao cac ban\n");
}
Đoạn 2: Viết bằng cpp:
#include <iostream>
using namespace std;
int main( int n, char x, float t) 
{
    cout << "Chao cac ban" <<endl;
    return 0;
}
Cả 2 đoạn mã điều chạy được, tuy nhiên nếu compile đoạn mã cpp sẽ dính 2 cái Warning. Còn đối với c thì không có gì. Điều thú vị hơn là nếu trong đoạn mã cpp ta thay đổi kiểu trả về của 'main' từ 'int' sang 'float' thì lại dính error.
Đây là lí do:
  • Trong C, nó chỉ yêu cầu tồn tại một hàm tên 'main', vậy là đủ, nó không quan tâm đến chuyện tham số đầu vào hay kết quả trả về.
  • Trong C++, nó khuyến cáo sử dụng 2 mẫu:
    int main(int argc, char** argv); // hoặc
    int main() //
Nếu không rơi vào 2 trường hợp này: thay đổi số lượng tham số sẽ gây warning, còn thay đổi kiểu trả về gây ra error.

Dec 18, 2012

Giải quyết vấn đề laptop nóng và hao pin khi dùng Linux

Một trong những vấn đề khá đau đầu khi sử dụng Linux trên laptop đó là hiện tượng nóng máy và pin xài không lâu. Qua một năm ngồi mày mò, chinh chiến, làm đủ thứ trò đồi bại với cái máy, cuối cùng mình cũng tìm ra được một số giải pháp xử lý vấn đề này.
Bài viết này tập hợp các thủ thuật, phương pháp nhằm giải quyết các vấn đề sau trên linux
  1. Laptop quá nóng khi sử dụng trên Linux.
  2. Thời lượng dùng pin trên Linux quá ngắn.
  3. Chế độ tiết kiệm pin của Linux không ổn định.

1. Sử dụng các tools:
  1. PowerTOP:Một ứng dụng được viết của Intel giúp giải quyết các vấn đề về sử dụng tài nguyên trên Linux. Khá hay dành cho máy nào dành kiến trức Intel.
  2. cpufrequtils:Quản lí tài nguyên CPU.
  3. pm-utils: Xem hướng dẫn chi tiết ở đây: Pm-utils ArchWiki
  4. lm_sensors: Cách dùng khá đơn giản. Chỉ việc tải về và chạy lệnh "sensors-detect" rồi nhấn 'y' mỗi khi chương trình thông báo là xong.
  5. laptop-mode-tools: Hướng dẫn sử dụng https://wiki.archlinux.org/index.php/Laptop_Mode_Tools. Đây là chương trình khá hiệu quả và có các tùy chỉnh rất phong phú.
  6. powersave: Tổng hợp các script để mở rộng khả năng dùng pin của Linux. Trong trang git của tác giả đã có hướng dẫn khá chi tiết và cụ thể.
2. Tắt card rời đối với card Radeon. Mở file /etc/fstab và gõ đoạn sau:
debugfs /sys/kernel/debug debugfs 0 0
Dùng một trình soạn thảo bất kì để mở file /etc/modprobe.d/blacklist.conf thêm vào cuối file dòng sau:
blacklist radeon
Sau đó mở file /etc/rc.local ở cuối file thêm vào dòng sau:
modprobe radeon
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
exit 0

Đây là một giải pháp cực kì hiệu quả, giải quyết được vấn đề nóng máy, tốn pin, chạy không ổn định bên Linux. Và nếu không cần đến quá nhiều tài nguyên bên card đồ họa rời, thì đây là 1 thủ thuật rất nên sử dụng. Phương pháp chuyển đổi giữa 2 chế độ card đồ họa được gọi là "Hybrid graphics". Đây là 1 tài liệu rất hay về chủ đề này: link đây. Trong đó có cả cách tắt card ATI và NVIDIA.

3.Các biện pháp khác. - Giảm nguồn sáng của laptop.
- Để làm mát laptop có thể dùng quạt tản nhiệt. Loại từ 100k đến vài triệu tùy vào hầu bao.
- Dùng một trình soạn thảo bất kì mở file /etc/default/grub tìm đến dòng GRUB_CMDLINE_LINUX_DEFAULT và sửa thành:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pcie_aspm=force i915.i915_enable_rc6=1 i915.i915_enable_fbc=1"
Sau đó ta gõ lệnh sau để tùy chỉnh lại grub:

sudo grub-mkconfig -o /boot/grub/grub.cfg

- Đối với các sản phẩm của Dell. Vào Ubuntu Software Centre hoặc các package manager đối với các bản Linux khác và search keyword là dell, trong phần technical item cài đăt các gõi hỗ trợ laptop của hãng này. Điển hình có gói i8kutils, aircraft-manager...

- Tắt bluetooth: Mở /etc/rc.local và thêm dòng sau:
rfkill block bluetooth
- Cập nhật thường xuyên các driver của hệ thống. Nâng cấp các phiên bản linux mới để fix các bugs cũng như cải thiện tốc độ.
4. Nguồn tham khảo:

Dec 14, 2012

Hướng dẫn khôi phục GRUB 2 sau khi cài Windows

Thông thường, khi cài Windows trước rồi mới cài Linux thì việc GRUB tự động cấu hình menu boot là chuyện không có gì phải lo lắng. Tuy nhiên, trong một số trường hợp, ta cài Linux trước, cài Windows sau, và dĩ nhiên menu boot bên Windows không nhận diện được Linux :( . Cài mới lại Linux rất tốn công và không đáng để làm vậy [Thực tế nho nhỏ là gần 1 năm mình đã dùng cách ấy].
Tutorial sau sẽ hướng dẫn bạn khôi phục lại GRUB2, đồng thời có thể boot được vào cả 2 HĐH.

Công cụ:
- Hệ điều hành Linux, bản distro mình dùng là Ubuntu.
- 1 cái USB hoặc đĩa cài đặt Ubuntu.

B1. Dùng USB hoặc CD chạy live.
B2. Ctrl + Alt + T hoặc tìm chương trình để mở shell command.
B3. Nhấn lệnh "sudo fdisk -l" để xem danh sách các phân vùng trong ổ đĩa. Đồng thời xác định ổ đĩa chứa Linux.
Như ta thấy trong hình mình họa, đĩa cứng được xác định ở /dev/sda và phân vùng chứa hệ điều hành Linux là /dev/sda2
B4. Gõ lần lượt các lệnh sau:
sudo mount /dev/sdx# /mnt  # x# là phân vùng chứa hđh Linux
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
sudo chroot /mnt
sudo grub-install --recheck /dev/sdx  # x là ổ đĩa cần tạo boot menu
sudo reboot
B5. Rút USB hoặc đĩa CD và vào bản Linux trên máy tính.
B6. Mở terminal và gõ lệnh "sudo update-grub" để cập nhật lại grub.
Vậy là xong, giờ có thể dùng song song 2 hệ điều hành.
Nguồn: http://www.lancelhoff.com/restore-grub2-after-installing-windows/
P/s: Lâu lắm rồi mới viết blog, trình có kém đi một chút