Chủ Nhật, 18 tháng 2, 2018
Tôi đã tải khóa học từ Hocmai.vn về máy tính như thế nào?
Việc học qua các nền tảng học tập trực tuyến - MOOCs (Massive Open Online Courses) ở Việt Nam đã không còn quá xa lạ nữa. Và một trong những nhu cầu của người học đó chính là tải những khóa học mà mình đã mua về máy tính, điện thoại của mình. Tuy nhiên nhà cung cấp không cho phép tải về vì lí do bản quyền. Vọc một hồi thì mình đã tìm ra cách tải khóa học từ Hocmai.vn, đương nhiên là làm thủ công do mình không học về các ngôn ngữ lập trình ứng dụng như Python, Java hay C++, C#.
Copy link dán vào Chrome ta download được file .ts. Và kéo đến cuối trang ta thấy có tới 182 link lận, chả lẽ mình copy từng link một rồi download về chăng? Lâu lắm đó....
Xem cấu trúc của các link, ta thấy nó có khuôn là:
Kết quả:
Trong đó aes-128-cbc là kiểu mã hóa, d là decrypt, [input file] là đường dẫn tới file nhập vào, [output file] là đường dẫn tới file kết quả (nếu không tồn tại hệ thống sẽ tự tạo), [key_hex] là key giải mã, tuy nhiên phải chuyển key đó sang dạng hex (dùng hàm bin2hex trong PHP để chuyển).
Gõ câu lệnh trên vào Command Prompt xem nào
Mình nghĩ các file này cần phải ghép vào thành 1 file duy nhất thì mới có thể xem được. Dùng thử mấy phần mềm không thấy phần mềm nào vừa ý hết luôn (do Free mà). Cuối cùng mình tìm thấy ffmpeg, thấy có vẻ ổn nên download về nối thử.
Xem hướng dẫn ở đây ta thấy có câu lệnh nối file.
Làm sao để có file list bây giờ? Copy thì lâu lắm đó... Mình edit lại đoạn code kia:
Mở file output.ts xem có coi được không:
Hmm... Thấy được rồi đó, lên Hocmai.vn xem có đúng thời gian không nào....
Các bạn có thấy vô lý không? Đề mục ghi 41 phút mà video có 12 phút thôi à... Mà chả sao, miễn là download được video là OK rồi.
"Nơi tình yêu bắt đầu"
Ngày mùng 2 Tết, trong lúc lục lại tin nhắn thì thấy tài khoản Hocmai.vn của đứa bạn nó share cho mình. Login vào coi có gì thì thấy có mấy khóa học Toán với Văn. Đang chán nên mở một bài xem, và mình tò mò về cách gửi dữ liệu nên mở luôn Fiddler để capture request tới server của Hocmai.vn. Trong lúc load video thì mình thấy cái này.
Đọc file có tên "siêu dài" kia mình thấy có các đường dẫn tới file .tsĐây là 2 truy vấn đầu tiên trước khi load video. Thực chất còn có một số truy vấn nữa nhưng mình đặc biệt chú ý 2 cái này do nó có chữ media và dung lượng thấp hơn so với truy vấn tải video (trong khung màu xanh). Copy URL, dán lên trình duyệt, mình tải được 2 file là:
- 9TwO4IkFcJAVVNa1tI1hpXZchDNXlU2BZ0Cm4v1eTIK8kffrWn0Z4KvII3Mp5V7fD6dPCwP946hcTQSV50tYVc43t5DZKQxUnC1RS4QS1B-n1_naAcChpI_J0VOSXKDrLbMJPzCmahb0pbRtaWm9tsBJDLGIe6t4If7rMwDL8DvyqXan9gYKQ3WVPaOAm3aS
- hocmai.key
Mình copy 4 dòng đầu lên Google tìm ta có kết quả thế này:
Vào link đầu tiên, ta có thể hiểu đó là kỹ thuật HTTP Live Streaming, các bạn có thể đọc tài liệu đó tại đây. Để cho nhanh mình sẽ tiếp tục, ta có thể hiểu đơn giản đó là kĩ thuật gửi những file media có kích thước nhỏ, độ dài khoảng 10 giây. Danh sách các file nhỏ đó (theo thứ tự) và thuộc tính nằm trong file có đuôi là .m3u8 (.m3u đối với MP3 playlist), nhưng mà sao mình chẳng thấy file .m3u8 nào cả??? Hay là nó chính là cái file có tên "siêu dài" kia rồi, chắc vậy đó!
Đọc đến gần cuối ta thấy kĩ thuật này cho phép mã hóa các file đã được chia nhỏ. Và kiểu mã hóa trong kỹ thuật này là AES-128. Nhưng mà mã hóa AES-128 có nhiều loại chứ, thôi kệ, chắc là loại CBC.
Copy link dán vào Chrome ta download được file .ts. Và kéo đến cuối trang ta thấy có tới 182 link lận, chả lẽ mình copy từng link một rồi download về chăng? Lâu lắm đó....
Xem cấu trúc của các link, ta thấy nó có khuôn là:
https://stream2.hocmai.vn/media/A2lOBPCU0Lem7VL8iRtjVg/1518949705/mars/sun/thcs-online/2016_2017/Lop_9/Toan_10_diem_thay_Quang/CD_rut_gon_can_thuc/2016_06_18_Can_thuc/01_720.mp4/hocmai-[STT]-v1-a1.tsTrong đó [STT] là số trong khoảng 1 - 182, vậy áp dụng vào để code là xong.
Kết quả:
Chắc một số bạn sẽ thắc mắc, tại sao mình lại làm như thế mà không đọc file để lấy link cho chuyên nghiệp. Đó là vì mục đích của mình là làm sao cho nhanh nhất, dành thời gian vào cái chính chứ không quan trọng quá cái phụ.
Giờ ta đã có link download của file .ts rồi, copy vào file .txt rồi import vào IDM để tải cho nó nhanh.
OK, giờ mình đã có đủ những thứ cần thiết, giờ thì đi decrypt nó thôi.
Làm thế nào để decrypt file .ts
Để decrypt được file .ts đã tải ở trên mình sử dụng OpenSSL để thử.
Câu lệnh để giải mã file:
openssl aes-128-cbc -d -in [input file] -out [output file] -nosalt -iv 0 -K [key_hex]
Gõ câu lệnh trên vào Command Prompt xem nào
Thành công!
Tuy nhiên khi mở file kết quả lên bị dính lỗi.
Convert nó thử sang file .mp4. Kết quả sau khi convert từ trang convertio.co xem nhé:
Kết quả sau khi convert:
Thành công!
Liệu có thể decrypt bằng cách sử dụng hàm PHP được không?
Để decrypt file .ts đã bị mã hóa, ta sử dụng hàm openssl_decrypt() trong PHP. Chi tiết về hàm này bạn có thể tìm thấy trên trang php.net.
for ($i=1; $i <= 182; $i++) {
$decrypt_file = fopen('C:\Program Files (x86)\Ampps\www\Dec/hocmai-'.$i.'-v1-a1_out.ts', 'w+');
$data = openssl_decrypt(file_get_contents('./Bai1/TS/hocmai-'.$i.'-v1-a1.ts'), "AES-128-CBC", file_get_contents('./Bai1/hocmai.key'),
OPENSSL_RAW_DATA);
fwrite($decrypt_file, $data);
fclose($decrypt_file);
if ($data = false){
echo 'Failed';
};
}; //Đừng copy cả đống code vào nhá, nhớ edit đi. :v
Sau khi chạy code, được thư mục Dec có các file .ts đã được giải mã, tuy nhiên không thế xem được, giống như ở trênMình nghĩ các file này cần phải ghép vào thành 1 file duy nhất thì mới có thể xem được. Dùng thử mấy phần mềm không thấy phần mềm nào vừa ý hết luôn (do Free mà). Cuối cùng mình tìm thấy ffmpeg, thấy có vẻ ổn nên download về nối thử.
Xem hướng dẫn ở đây ta thấy có câu lệnh nối file.
Làm sao để có file list bây giờ? Copy thì lâu lắm đó... Mình edit lại đoạn code kia:
for ($i=1; $i <= 182; $i++) {
$decrypt_file = fopen('C:\Program Files (x86)\Ampps\www\Dec/hocmai-'.$i.'-v1-a1_out.ts', 'w+');
$data = openssl_decrypt(file_get_contents('./Bai1/TS/hocmai-'.$i.'-v1-a1.ts'), "AES-128-CBC", file_get_contents('./Bai1/hocmai.key'), OPENSSL_RAW_DATA);
fwrite($decrypt_file, $data);
fclose($decrypt_file);
if ($data = false)
{ echo 'Failed';};
}
$list = fopen('C:\Program Files (x86)\Ampps\www\Dec\list.txt', "a");
$file = 'hocmai-'.$i.'-v1-a1_out.ts';
fwrite($list, "file "."'".$file."'"."\n");
}
fclose($list);
Run nó ta được file list.txt chứa danh sách theo đúng dạng đã cho ở trên. Giờ ta sẽ ghép nó vào 1 file output.ts.Mở file output.ts xem có coi được không:
Hmm... Thấy được rồi đó, lên Hocmai.vn xem có đúng thời gian không nào....
Các bạn có thấy vô lý không? Đề mục ghi 41 phút mà video có 12 phút thôi à... Mà chả sao, miễn là download được video là OK rồi.
Bài viết chỉ mang tính tham khảo, không nên áp dụng viết tool rồi share lên mạng đâu nhé, Hocmai.vn kiện đó.
Chúc các bạn năm mới vui vẻ!
Thứ Năm, 15 tháng 2, 2018
Chia sẻ API Google Dịch cho chatbot ChatFuel
Hôm nay là mùng 1 Tết của năm 2018, mình xin gửi tới các bạn những lời chúc tốt đẹp nhất, chúc các bạn có một năm mới tràn đầy niềm vui và hạnh phúc... và ăn ít bugs hơn.
Vào việc chính nào! Mình sẽ chia sẻ source code API Google Dịch để sử dụng cho ChatFuel và những mục đích khác (nếu bạn có khả năng và ý tưởng).
Và đây là kết quả:
Vậy là có thể dùng hàm file_get_contents để lấy dữ liệu, giờ thì decode nó ra và tạo tin nhắn gửi tới ChatFuel thôi.
Khi dịch nhiều hơn 1 câu, bot chỉ dịch được câu đầu còn các câu sau không dịch. Mình đã thử lại và thấy đoạn JSON trả về lại có dạng như sau:
Ta thấy nó chia ra thành 2 phần, vậy thì làm sao để nối 2 phần lại với nhau. Ta thấy đoạn văn bản ta dịch có hai câu và đoạn JSON trả về cũng chia ra làm 2 key kết quả như trên ảnh. Vậy số câu bằng số key JSON. Vậy làm thế nào để xác định số câu trong đoạn văn bản. Ta thấy kết thúc câu là một dấu chấm, dấu phẩy, dấu hỏi chấm, dấu chấm than... Vậy chúng ta sẽ dựa vào sự xuất hiện của những dấu này để xác định số câu. Bình thường sau các dấu trên phải có dấu cách để tách thành 2 câu riêng biệt nhưng nếu sau những dấu trên không phải là dấu cách mà lại là kí tự đầu tiên của câu thì 2 câu đó được coi là 1 câu.
Nếu mình giải thích nó hơi khó hiểu thì bạn hãy xem ảnh dưới:
Nice! Giờ thì ngon rồi, cho vào ChatFuel rồi xài thôi!
Vào việc chính nào! Mình sẽ chia sẻ source code API Google Dịch để sử dụng cho ChatFuel và những mục đích khác (nếu bạn có khả năng và ý tưởng).
Mình lấy API này từ đâu?
Vào một ngày xấu trời, trong lúc đang bí ý tưởng về tính năng cho chatbot của mình, mình nảy ra ý tưởng dịch văn bản trên chatbot. Mình đã tham khảo trên Google Cloud Platform và thấy dịch vụ này phải trả tiền, chi tiết bạn có thể xem ở hình dưới.
Vì vậy mình đã thử tìm trên Google cái API Google Translate Free và đã có kết quả.
URL:https://translate.googleapis.com/translate_a/single?client=gtx&sl=[sourceLang]&tl=[targetLang]&dt=t&q=[sourceText]
Mình thử thay giá trị của [sourceLang] là en (Tiếng Anh), targetLang là vi (Tiếng Việt), sourceText là 'Hi', truy cập thử thì phải một file là f.txt có nội dung như sau:
Đây là một đoạn JSON nên có thể dễ dàng decode nó sang dạng mảng được, và đây là kết quả:
Ta thấy trong đoạn JSON này sẽ trả về 3 dữ liệu là đoạn văn bản đã được dịch, đoạn văn bản gốc và ngôn ngữ của văn bản gốc. Vậy là ổn rồi, bắt đầu code thôi.
Bắt đầu code
$data = file_get_contents('https://translate.googleapis.com/translate_a/single?client=gtx&sl='.$_GET[src_lang].'&tl='.$_GET[tar_lang].'&dt=t&q='.urlencode($_GET[q]));
echo $data;Vậy là có thể dùng hàm file_get_contents để lấy dữ liệu, giờ thì decode nó ra và tạo tin nhắn gửi tới ChatFuel thôi.
$data = json_decode(file_get_contents('http://translate.googleapis.com/translate_a/single?client=gtx&sl='.$_GET[src_lang].'&tl='.$_GET[tar_lang].'&dt=t&q='.urlencode($_GET[q])),true);
# Tạo đoạn tin nhắn.
$reply = array(
'messages' => array(
0 => array(
'text' => 'Bot đang dịch nè. Đợi một nốt nhạc thôi.'
),
1 => array(
'text' => '*Bản dịch:* ' .$data[0][0][0]
),
),
);
echo json_encode($reply);
Kết quả:Vấn đề đầu tiền
Sau khi thêm tính năng vào chatbot, mình đã test thử khá nhiều lần và thấy có vấn đề khi cho dịch nhiều hơn 1 câu.Khi dịch nhiều hơn 1 câu, bot chỉ dịch được câu đầu còn các câu sau không dịch. Mình đã thử lại và thấy đoạn JSON trả về lại có dạng như sau:
Ta thấy nó chia ra thành 2 phần, vậy thì làm sao để nối 2 phần lại với nhau. Ta thấy đoạn văn bản ta dịch có hai câu và đoạn JSON trả về cũng chia ra làm 2 key kết quả như trên ảnh. Vậy số câu bằng số key JSON. Vậy làm thế nào để xác định số câu trong đoạn văn bản. Ta thấy kết thúc câu là một dấu chấm, dấu phẩy, dấu hỏi chấm, dấu chấm than... Vậy chúng ta sẽ dựa vào sự xuất hiện của những dấu này để xác định số câu. Bình thường sau các dấu trên phải có dấu cách để tách thành 2 câu riêng biệt nhưng nếu sau những dấu trên không phải là dấu cách mà lại là kí tự đầu tiên của câu thì 2 câu đó được coi là 1 câu.
Nếu mình giải thích nó hơi khó hiểu thì bạn hãy xem ảnh dưới:
Từ thuật toán trên ta sẽ có đoạn code sau:
$req = $_GET['q'];Ghép nó vào đoạn code ban đầu, ta được kết quả:
# Đếm số câu.
$text = '';
$count = 0;
for ($i=0; $i <= strlen($req); $i++) {
if (($req[$i] == '.' or $req[$i] == '!' or $req[$i] == '?') && $req[$i+1] == ' ') {
$count = $count + 1;
}
}
$count = $count +1;
# Tạo chuỗi kết quả.
for ($i=0; $i <= $count; $i++) {
$text = $text.$data[0][$i][0];
}
Nice! Giờ thì ngon rồi, cho vào ChatFuel rồi xài thôi!
Vấn đề thứ hai
Mình tiếp tục test để tìm vấn đề. Đến lúc dịch Tiếng Nhật thì chatbot lại gửi cho mình một bản dịch không đúng một tí nào. "日本語" có nghĩa là "Tiếng Nhật" nhưng khi đặt giá trị src_lang là auto (tự động phát hiện ngôn ngữ) thì kết quả lại như thế này:
Thậm chí đặt giá trị src_lang là ja (Japan) kết quả cũng chẳng khả quan hơn.
Mình nghĩ trong lúc thực thi hàm file_get_contents, giá trị 日本語 đã bị biến đổi sang giá trị khác, mình thử cách gửi/nhận dữ liêu bằng cURL thì lại nhận kết quả đúng.
Khi mình encode thử thành dạng JSON thì không thể encode được, lên StackOverflow thì dùng code: (array) json_decode($string) đê decode trước rồi encode sau, in ra kết quả đúng:
Mình update lại ChatFuel và tiếp tục test, đến bây giờ vẫn chưa có vấn đề gì. Trong source code mình đã viết thêm một mảng nữa để xác định ngôn ngữ nhập vào, bạn có dùng hay không là tùy bạn.
Source Code:
$req = $_GET['q'];Nếu có lỗi, các bạn có thể báo cáo cho mình tại đây. Cảm ơn các bạn, chúc các bạn năm mới vui vẻ, thành công!
$fp = file_get_contents_curl('https://translate.googleapis.com/translate_a/single?client=gtx&sl='.$_GET['src_lang'].'&tl='.$_GET['tar_lang'].'&dt=t&q='.urlencode($_GET['q']),5 );
# Hàm mình tham khảo trên GitHub: https://gist.github.com/jrivero/5598138 .
function file_get_contents_curl($url, $retries=5)
{
$ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36';
if (extension_loaded('curl') === true)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // The URL to fetch. This can also be set when initializing a session with curl_init().
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // TRUE to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly.
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // The number of seconds to wait while trying to connect.
curl_setopt($ch, CURLOPT_USERAGENT, $ua); // The contents of the "User-Agent: " header to be used in a HTTP request.
curl_setopt($ch, CURLOPT_FAILONERROR, TRUE); // To fail silently if the HTTP code returned is greater than or equal to 400.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // To follow any "Location: " header that the server sends as part of the HTTP header.
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); // To automatically set the Referer: field in requests where it follows a Location: redirect.
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // The maximum number of seconds to allow cURL functions to execute.
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); // The maximum number of redirects
$result = curl_exec($ch);
curl_close($ch);
}
else
{
$result = file_get_contents($url);
}
if (empty($result) === true)
{
$result = false;
if ($retries >= 1)
{
sleep(1);
return file_get_contents_curl($url, --$retries);
}
}
return $result;
}
# Convert dữ liệu xâu thành mảng.
$data = (array) json_decode($fp);
# Mảng chứa tên ngôn ngữ.
$lang = array(
'af' => 'Afrikaans',
'ga' => 'Ireland',
'sq' => 'Albania',
'it' => 'Italia',
'ar' => 'Ả Rập',
'ja' => 'Nhật',
'az' => 'Azerbaijan',
'kn' => 'Kannada',
'eu' => 'Basque',
'ko' => 'Hàn',
'bn' => 'Bengal',
'la' => 'Latinh',
'be' => 'Belarus',
'lv' => 'Latvia',
'bg' => 'Bulgaria',
'lt' => 'Litva',
'ca' => 'Catalan',
'mk' => 'Macedonia',
'zh-CN' => 'Hán giản thể',
'ms' => 'Malaysia',
'zh-TW' => 'Hán phồn thể',
'mt' => 'Maltese',
'hr' => 'Croatia',
'no' => 'Norwegian',
'cs' => 'Séc',
'fa' => 'Iran',
'da' => 'Đan Mạch',
'pl' => 'Ba Lan',
'nl' => 'Hà Lan',
'pt' => 'Portuguese',
'en' => 'Anh',
'ro' => 'Romani',
'eo' => 'Esperanto',
'ru' => 'Nga',
'et' => 'Estonia',
'sr' => 'Serbian',
'tl' => 'Filipino',
'sk' => 'Slovakia',
'fi' => 'Phần Lan',
'sl' => 'Slovenia',
'fr' => 'Pháp',
'es' => 'Tây Ban Nha',
'gl' => 'Galicia',
'sw' => 'Swahili',
'ka' => 'Georgian',
'sv' => 'Thụy Điển',
'de' => 'Đức',
'ta' => 'Tamil',
'el' => 'Hy Lạp',
'te' => 'Telugu',
'gu' => 'Gujarati',
'th' => 'Thái',
'ht' => 'Haitian Creole',
'tr' => 'Thổ Nhĩ Kỳ',
'iw' => 'Hebrew',
'uk' => 'Ukraina',
'hi' => 'Hindi',
'ur' => 'Urdu',
'hu' => 'Hungary',
'vi' => 'Việt',
'is' => 'Iceland',
'cy' => 'Welsh',
'id' => 'Indonesia',
'yi' => 'Yiddish',
);
# Đếm số câu.
$text = '';
$count = 0;
for ($i=0; $i <= strlen($req); $i++) {
if (($req[$i] == '.' or $req[$i] == '!' or $req[$i] == '?') && $req[$i+1] == ' ') {
$count = $count + 1;
}
}
$count = $count +1;
# Tạo chuỗi kết quả.
for ($i=0; $i <= $count; $i++) {
$text = $text.$data[0][$i][0];
}
# Tạo đoạn tin nhắn.
$reply = array(
'messages' => array(
0 => array(
'text' => 'Bot đang dịch nè. Đợi một nốt nhạc thôi.'
),
1 => array(
'text' => '*Bản dịch:* ' .$text
),
2 => array(
'text' => 'Số câu: '.$count
),
3 => array(
'text' => 'Ngôn ngữ của văn bản gốc: Tiếng '.$lang[$data[2]]
)
),
);
echo json_encode($reply);
Thứ Tư, 14 tháng 2, 2018
Làm thế nào để cài đặt chương trình có đuôi file tải về là .tar, tar.gz, tar.bz hoặc tar.bz2 trên Kali Linux
Việc cài đặt một phần mềm nào đó trên Linux không hề đơn giản như đối với Windows, Linux và các bản GNU/Linux có rất nhiều cách cài đặt phần mềm với các dạng file khác nhau. Những gói cài đặt như .deb, .rpm các bạn có thể tìm kiếm cách cài đặt trên Google. Mình chỉ hướng dẫn về cách cài đặt với gói .tar, tar.gz, tar.bz hoặc tar.bz2 trên Kali Linux hay các Distro Linux khác.
File .tar là gì?
Riêng tệp TAR không phải là tệp nén, chỉ đơn giản là một định dạng được sử dụng để lưu trữ các tệp tin (trộn nhiều tệp vào một tệp). Trên Unix và Linux lưu trữ và nén thường được thực hiện bởi hai tiện ích riêng biệt.
Các tệp TAR là hình thức lưu trữ phổ biến nhất được sử dụng trên hệ thống Unix. TAR thực sự là viết tắt của "tape archive", và là tên của loại tệp, và cũng là tên của tiện ích có thể được sử dụng để mở các tệp này (cái này tìm hiểu câu lệnh "tar" nhé).
Định dạng ban đầu được thiết kế cho các mục đích sao lưu bằng gói, tuy nhiên nó thường được sử dụng cho tải và gói ứng dụng. Nó cho phép bạn đặt một số tập tin vào một file duy nhất, giúp lưu trữ các tập tin dễ dàng hơn hoặc phân phối chúng.
Các tệp TAR không thể chạy một tệp trong kho lưu trữ mà không cần giải nén nội dung của toàn bộ tệp lưu trữ. Điều này có nghĩa là nó có thể hơi chậm khi chỉ trích xuất một phần của tệp.
Làm thế nào để cài đặt chương trình file .tar
Trước khi làm điều này, bạn nên tìm kiếm trên Google phần mềm đó để tìm cách dễ hơn (cài thông qua câu lệnh apt hay cài từ gói .deb) rồi hãy cài bằng cách này nếu không có. Mình nghĩ chắc chắn sẽ có nhưng sẽ không được đảm bảo bằng bộ cài trang chủ đưa ra.
Trong hướng dẫn này, mình sẽ cài đặt WinRAR từ gói cài tải từ trang chủ
Mở Terminal lên (dùng tổ hợp phím Ctrl+Alt+T) copy đoạn mã sau:
# Chuyển sang thư mục /usr/srcMột số phần mềm có thể còn cần thêm lệnh ./configure nhưng thường trong hướng dẫn trên trang chủ sẽ có.
cd /usr/src
# Lấy file từ server của WinRAR
sudo wget -c http://www.rarlab.com/rar/rarlinux-x64-3.8.0.tar.gz
# Giải nén file vừa tải về
sudo tar -xzf rarlinux-x64-3.8.0.tar.gz
# Chuyển sang thư mục rar (thư mục rar là kết quả của lệnh giải nén trên)
cd rar
# Tiến hành cài đặt
sudo make
# Xóa file rarlinux-x64-3.8.0.tar.gz vừa tải về cho nhẹ máy
sudo rm -f /usr/src/rarlinux-x64-5.5.0.tar.gz
Mẹo: Để lấy đường dẫn rarlinux-x64-3.8.0.tar.gz như trên bạn nên copy link từ trang chủ của phần mềm xuống nhé 😂.
Chúc các bạn thành công!
Hướng dẫn sửa lỗi 'cURL error 60: SSL certificate problem: unable to get local issuer certificate' khi sử dụng AMPPS
Là một lập trình viên, chắc hẳn là các bạn đã phải "ăn" rất nhiều bugs rồi đúng không nào? Hôm nay mình sẽ hướng dẫn các bạn cách sữa lỗi 'cURL error 60: SSL certificate problem: unable to get local issuer certificate' khi sử dụng AMPPS
Mình sử dụng Ubuntu nên sẽ khác so với Windows, nhưng cùng là về một phương pháp thôi.
Lỗi này xuất hiện khi bạn nhận/gửi dữ liệu tới một server/máy chủ khác. Thông thường localhost sẽ không có chứng chỉ SSL nên bây giờ chúng ta phải thêm cho nó.
Lưu file và restart Apache để sử dụng nhé.
Mình sử dụng Ubuntu nên sẽ khác so với Windows, nhưng cùng là về một phương pháp thôi.
Lỗi này xuất hiện khi bạn nhận/gửi dữ liệu tới một server/máy chủ khác. Thông thường localhost sẽ không có chứng chỉ SSL nên bây giờ chúng ta phải thêm cho nó.
Hướng dẫn thêm chứng chỉ SSL cho AMPPS
Tải file cacert.pem tại đây (qua link rút gọn để ủng hộ mình nhé)
Copy nó vào thư mục cài đặt Ampps:
Copy nó vào thư mục cài đặt Ampps:
- Linux: /usr/local/ampps
- Windows: C:/Program Files/Ampps
Tìm file php.ini (ở Windows nó nằm trong thư mục apache, ở Linux nó nằm trong thư mục php-5.6/etc, tên thư mục có thể khác tùy phiên bản).
Mở file php.ini đó lên, thêm vào cuối 2 dòng sau:
curl.cainfo = "PATH-TO-cacert.pem-file"Thay PATH-TO-cacert.pem-file bằng đường dẫn tới file cacert.pem mà bạn đã tải ở trên.
openssl.cafile = "PATH-TO-cacert.pem-file"
Lưu file và restart Apache để sử dụng nhé.
Đối với Ubuntu hay những distro thì việc chỉnh sửa sẽ phức tạp hơn vì phải có quyền root mới chỉnh sửa được file, các bạn nên dùng Terminal để việc chỉnh sửa dễ dàng hơn (thêm "sudo" trước mỗi câu lệnh)
Thứ Tư, 31 tháng 1, 2018
Python vượt qua Java trở thành ngôn ngữ hàng đầu
Theo cuộc khảo sát gần đây của hiệp hội Computing Machinery (ACM), Python đã vượt qua Java để trở thành ngôn ngữ hàng đầu được đưa vào ứng dụng rộng rãi trong bộ môn lập trình và khoa học máy tính của sinh viên Mỹ.
Trong nghiên cứu gần đây ở bộ môn khoa học máy tính cho hay 39 trung tâm đào tạo hàng đầu của nước Mỹ năm 2014 đã cùng sử dụng ngôn ngữ lập trình Python để thay thế cho Java. Môn lập trình mới này được xem là có sự tương tác và dễ sử dụng nhất dành cho người mới bắt đầu.
8 trong số 10 ngành khoa học máy tính hàng đầu hiện nay sử dụng Python để dạy mã hóa, cũng như 27 trong số 39 trường hàng đầu, chỉ ra rằng đây là ngôn ngữ phổ biến nhất cho việc giảng dạy các khóa học khoa học máy tính. 3 lớp học trực tuyến lớn nhất hiện nay là Coursera, edX và Udacity cũng đang sử dụng Python dành cho người mới.
Để chuẩn bị cho sinh viên ra trường làm việc được ngay thì khi còn đi học họ đã được trang bị ngôn ngữ lập trình được sử dụng rộng rãi trong ngành công nghiệp cao ngày. Trước đây C++ và Java đã thay thế Pascal - ngôn ngữ phổ biến trong dạy học những năm 1980
Python được phát minh ra cách đây 23 năm nhưng mãi đến gần đây ngôn ngữ này mới được xem như là công cụ tuyệt vời. Python sở hữu những phẩm chất được xem là tổ hợp của các ngôn ngữ lập trình kinh điển khác. Python có cú pháp đơn giản hơn Java, C++ và cho phép người mới bắt đầu có thể lập trình ngay lập tức. Ngoài ra ngôn ngữ Python có thể được mở rộng để sử dụng trong ngành công nghiệp nặng hay được dùng để phân tích dữ liệu trong ngành tài chính.
Mặc dù đây là cuộc khảo sát không chính thức nhưng việc sử dụng ngôn ngữ lập trình mới cho thây sự ảnh hưởng xu thế trong các chương trình đào tạo.
Ngôn ngữ phổ biến khác được đưa vào giảng dạy còn có Matlab - ngôn ngữ toán học định hướng thường được sử dụng để bắt đầu với các nhà khoa học và kỹ sư lập trình. Matlab cũng được xem như là ngôn thứ thay thế Java trong tương lai, ngôn ngữ cổ điển như C và C++ vẫn được sử dụng nhưng xu hướng ngày càng giảm mạnh. Tuy nhiên, không phải tất cả đều ủng hộ Python, Viện công nghệ Massachusetts và Đại học California, Berkeley đã loại bỏ ngôn ngữ này ra khỏi chương trình học.
Nguồn: PCWorld VN
Thứ Hai, 22 tháng 1, 2018
71 lời khuyên về giao diện người dùng (Phần 1)
Good UI – Những giao diện người dùng tuyệt vời!
Một giao diện người dùng (UI) tuyệt vời là một giao diện có tỷ lệ chuyển đổi cao và dễ dàng sử dụng. Hay nói cách khác, nó hấp dẫn cả phía doanh nghiệp và cả phía người dùng. Dưới đây là một danh sách những ý tưởng hay ho chúng tôi đã khám phá ra để các bạn có thể tối ưu hóa giao diện người dùng của mình một cách hiệu quả nhất. Và danh sách này vẫn được chúng tôi tiếp tục cập nhật.- Thử đánh số từng đoạn nội dung Cũng giống như bài chia sẻ này, sẽ tốt hơn rất nhiều nếu mỗi nội dung được đánh 1 con số, rõ ràng. Người dùng dễ theo dõi và nắm được trọng tâm, thay vì hơn 70 đầu mục nội dung trải dài, không có thứ tự.
- Hãy hiển thị chế độ tùy chọn thay vì để ẩn chúng đi Không ai muốn click vào cái nút “mũi tên xuống” chết tiệt đó để rồi lại click để lựa chọn thêm phát nữa. Hãy đơn giản và đơn giản hóa mọi thao tác của người dùng, đừng bắt họ phải click chuột hay lựa chọn quá nhiều lần.
- Hãy hỏi ít thông tin hơn thay vì yêu cầu người dùng nhập thông tin quá nhiều Người ta vốn đã chịu bỏ ra thời gian và công sức để điền vào form là một may mắn lắm rồi. Nhưng khi yêu cầu họ nhập quá nhiều thông tin, hơn nữa những thông tin đó cũng chẳng cần thiết lắm, thì người dùng của bạn rất dễ chán nản và out ra ngay. Với lại, không phải ai cũng online bằng máy tính đâu, phần trăm người dùng thiết bị di động hiện nay khá cao nên việc gõ trên thiết bị di động cũng không phải dễ dàng gì. Hãy loại bỏ càng nhiều thông tin càng tốt. Càng ít mục, tỷ lệ chuyển đổi sẽ càng cao.
- Hãy để lại dấu ấn cá nhân Giới thiệu bản thân hoặc sản phẩm của bạn với một cái tên, một hình ảnh hay nơi xuất xứ là một trong những cách để làm cho thương hiệu của bạn mang tính cá nhân hơn. Ví dụ như khi nhắc đến một sản phẩm của bạn, người ta nghĩ ngay đến bạn và chỉ bạn mới có mà thôi. Điều này khiến cho họ cảm thấy sản phẩm của bạn có chất lượng cao hơn các bên khác một chút.
- Hãy làm nổi bật lời kêu gọi hành động của bạn thay vì thiết kế nó trông tương đồng với những thông điệp xung quanh Hãy để lời kêu gọi hành động của bạn nổi bật hơn một chút, khác biệt với những yếu tố xung quanh, điều này giúp giao diện người dùng của bạn trông hoành tráng hơn nhiều. Bạn có thể dễ dàng tăng độ tương phản của nó bằng một số cách sau đây: Sử dụng tông màu đối lập (Đen – trắng, sáng – tối, đậm – nhạt,…). Về chiều sâu, bạn có thể làm cho một mục xuất hiện gần hơn trong khi những mục nội dung còn lại trông có vẻ xa hơn một chút (ý tôi ở đây là đổ bóng và độ dốc). Cuối cùng, bạn cũng có thể lấy những gam màu bổ xung từ bảng màu (ví dụ như vàng, tím…) để nâng cao độ tương phản hơn nữa. Tựu chung lại, độ tương phản giữa lời kêu gọi hành động với những phần còn lại của trang nên được lưu ý để có được một giao diện người dùng hoàn hảo.
- Hãy quyết đoán thay vì do dự Bạn sẽ gửi thông điệp của mình đến khách hàng với một giọng run rẩy, không chắc chắn hay muốn gửi tới họ thông điệp với một sự tự tin. Nếu bạn kết thúc thông điệp của mình bằng một dấu “?” hay sử dụng những cụm từ như là “có lẽ”, “có thể”, ” nếu có thích?”, “có muốn?”, thì khi đó bạn sẽ có ít uy quyền hơn đấy.
- Hãy thử để bố cục trang web là một cột thay vì nhiều cột Cách bố trí một cột sẽ giúp bạn dễ dàng kiểm soát câu chuyện của mình hơn. Nó có thể khiến cho người đọc dễ dàng đoán biết được nội dung từ trên xuống dưới. Trong khi đó, cách tiếp cận nhiều cột sẽ dẫn tới việc làm người dùng mất tập trung vào mục đích cốt lõi của một trang . Hãy dẫn dắt người đọc với một câu chuyện và một lời kêu gọi hành động nổi bật ở cuối.
- Hãy thử đưa ra một món quà thay vì chốt sale ngay tắp lự Một cử chỉ thân thiện như tặng khách hàng một món quà có thể chỉ là một chiêu bài. Tuy nhiên, sâu xa hơn thì việc tặng quà cũng là một chiến thuật thuyết phục hiệu quả dựa trên nguyên tắc tương hỗ (có qua có lại). Rõ ràng là, tặng một món quà nhỏ cho khách hàng của mình có thể gây thiện cảm với họ hơn. Và trong giao tiếp kinh doanh, tặng quà được xem như là một nghệ thuật lấy lòng tinh tế nhất.
- Hãy thử hợp nhất các chức năng tương tự thay vì phân mảnh UI Trong suốt quá trình thực hiện, người ta dễ vô tình tạo ra nhiều mục, nhiều yếu tố và nhiều tính năng, nhưng tất cả lại đều thực hiện một chức năng tương tự nhau. Nó dựa trên nguyên lý “Entropy” – mọi thứ bắt đầu mờ dần theo thời gian. Hãy để ý và gộp những chức năng trùng lặp lại bởi vì nó có thể tạo áp lực cho khách hàng của bạn. Thông thường, giao diện người dùng (UI) càng có nhiều phân mảnh thì khách hàng của bạn phải đối phó với nhiều rắc rối hơn. Hãy xem xét lại việc sắp xếp UI của bạn một lần bằng cách hợp nhất các chức năng tương tự vào một cái mà thôi.
- Thay vì tự mình nói về bản thân hãy để khách hàng nói về bạn (Social Proof Marketing) Để hiểu về Social Proof bạn có thể tưởng tượng mình đang ở trong một bữa tiệc. Nhạc nổi lên và lúc này mọi người đều ngại ngần không muốn ra nhảy. Thế nhưng, một khi đã có ai dẫn đầu, những người còn lại sẽ nhanh chóng theo đuôi tham gia vào cuộc vui. Social Proof (Kiểm chứng xã hội) là một chiến thuật thuyết phục tuyệt vời, áp dụng trực tiếp để tăng tỷ lệ chuyển đổi. Thấy người khác đang ủng hộ và nói tốt về bạn sẽ là một cách tuyệt vời để thúc đẩy lời kêu gọi hành động. Hãy để lại một vài lời phản hồi của khách hàng hay đưa ra các thông tin chứng thực nhằm chứng minh rằng những người khác cũng đã dùng sản phẩm của bạn.
- Hãy thử lặp lại lời kêu gọi hành động của bạn thay vì chỉ đưa chúng ra có một lần Lặp lại lời kêu gọi hành động của bạn trên cùng một trang hoặc lặp đi lặp lại trên nhiều trang khác nhau là một chiến lược thích hợp với những trang dài. Tuy nhiên, bạn cũng sẽ không muốn lời kêu gọi hành động của mình hiển thị đến cả chục lần trên cùng một màn hình khiến cho người xem phát hoảng. Các trang dài đang trở thành tiêu chuẩn và tư tưởng “ép” hết mọi thứ lên phía trên đang dần thay đổi. Trang web của bạn sẽ không bị ảnh hưởng gì khi để một mục nho nhỏ ở phía trên còn những mục quan trọng hơn ở phía dưới. Khi người đọc kéo đến cuối trang, họ sẽ dừng lại và nghĩ sẽ phải làm gì tiếp theo, do vậy, đây là một nơi lý tưởng để đưa ra lời mời chào hay kêu gọi hành động.
- Cố gắng phân biệt rõ ràng những kiểu chọn mục khác nhau để tránh nhầm lẫn Giao diện trực quan như màu sắc, chiều sâu và độ tương phản là những dấu hiệu giúp người dùng hiểu được hệ thống ký hiệu cơ bản trong giao diện của bạn (Tôi đang ở đâu và tôi có thể đi đến đâu?). Để truyền đạt rõ ràng điều này với người dùng, thì bạn phải phân biệt rạch ròi giữa hành động trỏ chuột (dành cho các links, các nút bấm), các thành phần được chọn (như là các mục đã chọn) và những dòng text đơn giản, rồi sau đó áp dụng thống nhất trên một giao diện. Ví dụ, tôi đã chọn màu xanh dương để bất cứ khi nào click vào sẽ ra màu xanh dương, và chọn màu đen cho bất cứ mục nào đã được chọn hoặc chỉ ra chỗ người đó đang vào là chỗ nào. Khi áp dụng đúng cách, người dùng sẽ dễ dàng tìm hiểu và sử dụng hơn để định hướng giao diện của bạn. Đừng gây khó dễ cho người dùng bằng cách làm các chức năng này trở nên không rõ ràng.
- Hãy đưa ra lời gợi ý thay vì để người dùng tự lựa chọn Khi đưa ra nhiều mục sản phẩm, người dùng sẽ rất phân vân khi phải chọn lựa một cái cho mình. Lúc này, việc gợi ý sản phẩm thích hợp nhất cho người dùng sẽ trở nên rất hữu ích.
- Hãy để lệnh Hoàn tác (Undo) thay vì phải xác nhận ngay(Có hoặc Không) Hãy tưởng tưởng bạn đang thay đổi hoặc chỉnh sửa thông tin của mình trên một trang web chẳng hạn. Đôi khi bạn nhấn “OK” quá sớm và nhận ra rằng thông tin của mình có gì đó không ổn hay chưa hoàn thiện. Nhiều trang web chỉ đưa ra cho bạn 2 sự lựa chọn một là Đồng ý thay đổi (Có), hai là Không Đồng ý thay đổi (Không). Vì một sơ xuất nhỏ như vậy đã khiến bạn phải quay lại từ thao tác đầu tiên. Do vậy, hãy để người dùng của mình an tâm hơn bằng cách cho phép hoàn tác các hành động thay vì để người dùng xác nhận Có hoặc Không.
- Hãy nói rõ sản phẩm, dịch vụ này dành cho ai thay vì nhắm đối tượng mục tiêu đến tất cả mọi người Bạn đang nhắm mục tiêu đến tất cả mọi người hay chỉ nhắm chính xác đến đối tượng mục tiêu của mình? Việc nhắm đối tượng mục tiêu chính xác sẽ khiến lượng khách hàng của bạn không bị loãng, sản phẩm hoặc dịch vụ của bạn có thể tiếp cận đến đúng người, và bạn sẽ trở nên độc quyền hơn. Khi tiếp cận không đúng người, những khách hàng đó sẽ cảm thấy sản phẩm hay dịch vụ của mình không như mong đợi, và từ đó họ sẽ dễ dàng mất niềm tin vào chúng ta. Do vậy, đây là một ý tưởng chuyển đổi khá tuyệt vời để bạn có thể nói ra chính xác sản phẩm hoặc dịch vụ của bạn dành cho ai.
- Cố gắng giữ tập trung vào một nội dung thay vì chết chìm trong các links liên kết Thật dễ dàng để tạo ra được một trang với nhiều đường links bên trái, bên phải, hy vọng đáp ứng nhu cầu của khách hàng nhiều nhất có thể. Tuy nhiên, nếu bạn đang làm một trang có tính chất tường thuật, kể chuyện để nhằm hướng tới một lời kêu gọi hành động ở phía dưới thì hãy suy nghĩ thật kĩ. Bạn phải hiểu rằng là bất kỳ một đường link nào xuất hiện ở phía trên lời kêu gọi hành động có thể làm khách hàng của bạn xao lãng, lạc hướng và quên mất đi mục đích chính của bài viết ở dưới cùng mà bạn muốn họ thực hiện. Hãy chú ý đến số lượng đường link trên trang web của bạn và có thể cân bằng giữa style khám phá trang (hơi nặng một chút về đường link) và style dạng ống (với một vài đường link và tỷ lệ chuyển đổi cao hơn) thì tốt. Loại bỏ những đường link không liên quan là một cách chắc chắn để tăng cơ hội cho khách hàng tiếp cận nhiều hơn đến nút kêu gọi hành động quan trọng nhất.
- Hãy show trạng thái của đơn hàng Một điều rất giản đơn thôi, nhưng có thể nó sẽ kéo được rất nhiều khách trung thành về cho bạn. Điều gì khiến bạn không thể thông báo cho khách hàng biết khoản nào đã được sử dụng? Đã được thanh toán? Đã được xem?… Thôi đi, đừng làm trò nữa, hãy thiết thực đi, bạn muốn sự mập mờ hay muốn sự tin tưởng nào?
- Hãy cố gắng thử thêm lợi ích thay vì những nút ấy chỉ thực hiện một nhiệm vụ Đơn giản bạn hãy tưởng tượng 2 nút hiển thị trên cùng một trang. Một nút với nội dung là “Save You Money – Sign Up” (Tiết kiệm chi phí – Đăng ký ngay) và một nút yêu cầu “Sign Up” (Đăng ký ngay). Tôi cá với bạn là cái nút đầu tiên sẽ có cơ hội được sử dụng cao hơn là cái thứ hai. Vì sao cùng một mục đích nhưng nút đầu tiên sẽ có tỷ lệ chuyển đổi cao hơn là cái thứ hai? Là bởi vì, nút đưa ra lợi ích sẽ nhắc mọi người là vì sao phải “Đăng ký ngay”, do đó sẽ dễ thuyết phục khách hàng hành động hơn.
- Hãy thử để các thao tác trực tiếp thay vì đặt thanh menu Làm gì có ai rảnh để mà click vào từng nội dung và rê rê chuột sang góc bên kia màn hình để ấn nút chọn “rename” hoặc “delete”, mà nhỡ tay xóa nhầm thì sao? Thiết thực hơn đi, hãy để các thao tác đó ngay trên phần nội dung mà người dùng cần xử lý, tất cả những việc người dùng cần làm là rê chuột vào nội dung đó và click.
- Cố gắng mở rộng phạm vi thay vì tạo thêm nhiều trang Chẳng ai muốn thực hiện một mục đích nào đó mà chủ yếu là có lợi cho bạn với quá nhiều thao tác họ phải thực hiện. Thử tính toán công bằng nhé, lý do gì họ phải click vào cái nút kia, để đợi thêm vài giây cuộc đời để rồi nhập thông tin cho bạn làm Marketing? Hãy thiết thực hơn đi.
- Thử thay đổi hiệu ứng hiển thị Menu bên phải từ từ hiển thị ra sẽ gây chú ý được cho người dùng. Nó khác với việc ngay khi load trang nó đã có ở đấy rồi, người dùng sẽ không để ý và sớm bỏ qua nó thôi.
- Hãy để người dùng tự tham gia vào thay vì yêu cầu họ đăng ký ngay Thay vì yêu cầu khách hàng đăng ký ngay lập tức thì tại sao đầu tiên lại không mời họ thực hiện một nhiệm vụ để chính họ trải nghiệm các ứng dụng của chúng ta. Trong những tương tác đầu tiên, những lợi ích của sản phẩm có thể được show ra cho mọi người xem, cũng như có thể làm cho chính sản phẩm trở nên khác biệt, mang tính cá nhân. Một khi người dùng bắt đầu thấy giá trị của sản phẩm và xem làm thế nào họ có thể để cho nó trở thành của riêng họ thì lúc đó họ sẽ cởi mở hơn trong việc chia sẻ thêm thông tin cho bạn đấy.
- Bỏ bớt các đường viền chạy ngang chạy dọc để tránh gây sự chú ý cho người dùng vào nó Những đường viền thường tập trung sự chú ý nhiều hơn là nội dung chính. Sự tập trung của người dùng vào nội dung chính thực sự rất quan trọng mà chúng ta chỉ có thể nắm bắt vào một thời điểm nhất định nào đó mà thôi.
- Hãy thuyết phục khách hàng bằng những lợi ích thay vì những tính năng Tôi nghĩ đây chính là ý tưởng Marketing 101. Người ta có xu hướng quan tâm đến lợi ích của dịch vụ, sản phẩm hơn là các tính năng của nó. Bởi những lợi ích mang lại cho họ nhiều giá trị rõ ràng và cụ thể hơn. Chris Guillebeau – tác giả cuốn sách “Khởi nghiệp với 100 đô” có viết rằng người ta thực sự quan tâm làm sao để có được nhiều tiền, nhiều tình cảm và nhiều thời gian rảnh rỗi hơn trong khi lại mong có ít stress, ít cãi vã, ít rắc rối xảy đến với mình hơn. Tuy nhiên, tôi vẫn tin rằng vẫn còn nhiều người quan tâm đến tính năng hơn, nhưng hãy nhớ là phải gắn liền với lợi ích bất cứ khi nào có thể nhé.
- Hãy thiết kế cho những phần dữ liệu trống Có những trường hợp bạn sẽ có 0, 1, 10, 100 hoặc hơn 10.000 kết quả dữ liệu được hiển thị theo nhiều cách khác nhau. Chúng ta thường quên thiết kế cho trường hợp khi không có gì để hiển thị cả, do vậy chúng ta rất dễ bị người dùng bỏ qua. Lần đầu tiên người dùng nhìn vào ứng dụng của bạn, và tất cả những dữ liệu chúng ta đưa là chỉ là một khoảng trống mà không có bất kì sự chỉ dẫn nào, điều này khiến họ không biết phải làm gì tiếp theo. Do vậy, hãy mời họ làm một nhiệm vụ hoặc chỉ dẫn họ đến một nơi khác trong website của bạn.
- Sử dụng chiến lược Opt-out thay vì Opt-in Opt-Out (or Unsubscribe): Với lệnh này, người dùng có thể hủy lệnh đăng kí nhận thông tin qua email của mình. Bằng cách này sẽ khiến người dùng thoải mái trong việc lựa chọn có nhận thông tin qua email hay không. Còn khi sử dụng Opt-In (Subcribe) thì người dùng bắt buộc phải xác nhận sẽ nhận thông tin qua email, họ không thể lựa chọn cho những mục đích cụ thể của mình khi đăng ký nhận thông tin, điều này sẽ gây khó dễ cho người dùng.
- Cố gắng thống nhất giao diện thay vì làm cho mọi người phải bối rối trong quá trình sử dụng: Một giao diện người dùng phù hợp hoặc các thao tác đơn giản là một cách tuyệt vời khiến cho khách hàng không phải đau đầu, bối rối khi dùng thử một giao diện hay một sản phẩm của bạn. Bạn có thể tùy ý sáng tạo phông màu hay style cho các tính năng, nhưng làm như vậy người dùng sẽ rất dễ bị rối mắt và dễ nhầm lẫn khi sử dụng website của bạn.
- Hãy để một số các thông tin mặc định cho người dùng dễ hình dung trong việc đăng kí Sử dụng các giá trị mặc định hoặc điền trước form mẫu theo kiểu gợi ý sẽ khiến người dùng không phải mất công nghĩ ngợi và chọn lựa. Đây là một kỹ thuật khá là phổ biến để giúp người dùng thao tác nhanh hơn và đồng thời cũng tôn trọng khoảng thời gian có hạn của họ. Điều khiến người dùng chán ngấy đến tận cổ đó là phải nhập đi nhập lại những thông tin ta đã hỏi trước đó. Do vậy, hãy cho hiển thị những từ gợi ý hoặc các thông tin có sẵn giúp người dùng không mất công và mất thời gian. Càng ít thao tác càng tốt.
- Hãy thiết kế theo quy ước chung thay vì chế ra những kiểu mới Nguyên tắc chung trong việc thiết kế đó là đặt nút “Quay lại” (Back) ở bên trái và “Chuyển tiếp” (Forward) ở bên phải, hay như trước nút “Xóa” (Delete) có biểu tượng thùng rác và “Cài đặt” (Setting) sẽ là một cái bánh xe. Trước giờ vẫn là vậy và ở bất cứ trang web nào cũng thế. Bây giờ, bạn không thể đổi lại và ấn định vào trong trí óc người dùng là nút “Quay lại” (Back) sẽ ở bên phải và nút “Chuyển tiếp” (Forward) sẽ ở bên trái được, hay như thay thế biểu tượng thùng rác trước nút “Delete” bằng biểu tượng hoa lá cành gì đó cũng vậy. Việc này sẽ khiến người dùng của bạn không quen.
- Hãy thử nhắc tới việc tránh để mất mát thay vì nhấn mạnh vào những lợi ích có được Theo quy luật tâm lý, ai cũng thích có thêm một cái gì đó, nhưng lại ghét mất đi những gì thuộc về mình. Điều này có thể áp dụng vào việc quảng bá cho một gói sản phẩm và dịch vụ. Ngụ ý rằng sản phẩm của bạn sẽ được bảo vệ quyền lợi, người dùng sẽ không bị mất đi thứ gì khi sử dụng dịch vụ của bạn, điều này sẽ hiệu quả hơn là cố gắng cung cấp cho người dùng những thứ mà họ chưa có. Ví dụ như các công ty bảo hiểm, họ đang rao bán những khoản đền bù sau khi tai nạn xảy ra, hay là họ đang bán cho chúng ta một giải pháp để bảo vệ những gì mà chúng ta đang có?
- Hãy tách thông tin thành các cấp bậc rõ ràng Một hệ thống có cấp bậc sẽ giúp người dùng dễ dàng phân biệt những phần thông tin quan trọng với những phần ít quan trọng hơn. Một hệ thống có cấp bậc rõ ràng được nhận biết dựa trên sự khác nhau về việc: căn lề, khoảng cách dòng, cỡ chữ, kích cỡ của các thành phần khác (như kích cỡ hình ảnh…), khoảng cách giữa các chữ… Khi kết hợp các phương pháp khác nhau (tăng cỡ chữ của tiêu đề, đồng thời đổi màu chữ), có thể tạo hiệu ứng tốt với người dùng, giúp họ tập trung vào những nội dung trong page hơn. Một hệ thống cấp bậc rõ ràng vừa có khả năng thu hút, vừa giúp giảm tốc độ đọc lướt trang từ trên xuống dưới của người dùng. Trải nghiệm của người dùng trên page cũng giống như một chuyến đi vậy. Bạn có thể đi đường cao tốc và đến đích nhanh hơn (phía cuối cùng của page) hoặc bạn có thể chọn một con đường có phong cảnh đẹp, ghi nhớ những điều thú vị trên con đường đó, rồi dừng lại để ngắm nhìn. Bạn sẽ chọn con đường nào?
Đăng ký:
Nhận xét
(
Atom
)











































































