How to disable “Seen” in Facebook Messenger by using AdBlock Plus

Seen

Go to AdBlock Plus Options page and add this url facebook.com/ajax/mercury/change_read_status.php$xmlhttprequest to the extension’s custom filters.

Limit elasticsearch official docker container memory

Elastic Search
  1. Pull Elasticseach official docker image:
    docker pull docker.elastic.co/elasticsearch/elasticsearch:5.6.3
  2. Run new container with parameter -e "ES_JAVA_OPTS=-Xms256m -Xmx1g":
    docker run -d \
    --net meete \
    --name elasticsearch \
    --hostname elasticsearch \
    -e "ES_JAVA_OPTS=-Xms256m -Xmx1g" \
    -e "http.host=0.0.0.0" \
    -e "transport.host=127.0.0.1" \
    -e "xpack.security.enabled=false" \
    docker.elastic.co/elasticsearch/elasticsearch:5.6.3

Reference link: https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

Cannot “Move to trash” in Ubuntu

Ubuntu
  1. Reason:

    There is no folder named .Trash-{UID}, or application doesn’t have permission to read and write file in that folder.

  2. Solution:

    Step 1: Find your UID (by default, current user has UID=1000)
    Run cat /etc/passwd | grep $(whoami)
    Result looks like this: ubuntu:x:1000:1000:ubuntu,,,:/home/ubuntu:/bin/bash
    You can see 1000, it is your UID.
    Step 2: Create trash folder for current user
    Run sudo mkdir .Trash-1000, you get 1000 from previous step.
    If folder exists, you can ignore this step.
    Step 3: Set permission for created trash folder.
    sudo chown $(whoami):$(whoami) .Trash-1000

Now, you can move file to trash.

Chuyển blog sang server mới

Moving Day

Sau một thời gian gắn bó với OpenShift, thì mới đây OpenShift thông báo rằng sẽ đóng cửa OpenShift v2 để chuyển lên v3 vào cuối tháng 9 này.

Qua OpenShift v3 thì RedHat đã chuyển mô hình deploy theo dạng container (nếu bạn nào đã quen với Docker thì không còn lạ gì vụ này)

Mất một buổi tối hì hục config thử blog trên OpenShift v3 để chuyển qua nhưng vấn đề là:
– Vì mình dùng gói Starter (miễn phí) nên chỉ được 1 GiB storage.
– Yêu cầu tối thiểu để tạo một container cho Data Store (MySQL, MariaDB,…) là 1 GiB storage.
=> Không còn dung lượng để tạo storage cho container chứa WordPress.

Cuối cùng thì quyết định chuyển sang 000webhost.com.

000webhost.com là một trong những hosting miễn phí tốt nhất, tốc độ không tệ chút nào. Hồi trước mình có xài rồi, xong bẵng đi một thời gian họ ngưng cung cấp dịch vụ, gần đây họ đã trở lại với diện mạo mới.
Chuyển qua server mới, mình có cài thêm plugin để cache và optimize resource các kiểu, thấy có vẻ tốc độ cải thiện hẳn.
Referral link của mình nè: https://www.000webhost.com/791955.html

How to fix Ubuntu wallpaper was not changed

Ubuntu

How to fix Ubuntu wallpaper was not changed?
Run this command to fix:
gsettings set org.gnome.settings-daemon.plugins.background active true
Hope this helpful to you!

Ubuntu 17.10 Awkward Artful Issues

Ubuntu

Các vấn đề mình gặp phải khi sử dụng Ubuntu 17.10 Awkward Artful:

GNOME:
– Không mention được trên Facebook khi bật chế độ gõ tiếng Việt (STelex).
– Nút ‘Show Applications’ ở góc dưới bên phải màn hình không hoạt động.
– Không drag ‘n’ drop được, như khi upload tấm ảnh này thì phải chọn từ trình duyệt, không kéo ảnh từ Files thả vô được.
Unity:
– Nhấn Windows + Space để chuyển chế độ gõ không được.
+ Chạy lệnh ibus-daemon -xdr để fix. Nếu không được thì tiếp tục vào System Setting > Text Entry đổi phím Super trong 2 hotkey sang phím khác, Ctrl chẳng hạn.
– Lỗi Could not apply the stored configuration for monitor khi Login.
+ Chạy lệnh rm $HOME/.config/monitors.xml để fix.
+ Nếu màn hình không hiện wallpaper thì làm theo hướng dẫn tại https://ansidev.000webhostapp.com/2017/09/13/ubuntu-wallpaper-was-not-changed/

Unofficial Zalo App

Zalo 256x256

Một ứng dụng mới ra lò của Safe Studio.
Tình hình là app Zalo Desktop cho Ubuntu quá nhiều lỗi, không thấy team Zalo fix, tính năng cũng rất nghèo nàn.
Thế nên hôm nay mình ngồi viết cái app Zalo để dùng trên Ubuntu.

Thực chất app của mình chỉ phiên bản web của Zalo tại: https://chat.zalo.me/
Phiên bản hiện tại chưa có bất kỳ tính năng nào do mình viết cả.
App mình viết chủ yếu dành cho Linux mặc dù có thể build cho Windows và Mac, tuy nhiên app chính chủ Zalo cho Windows mình dùng thử thấy không tồi, còn macOS thì chưa có cơ hội trải nghiệm.

Vì vậy, nếu các bạn có nhã ý build app cho 2 platform trên thì mình rất sẵn lòng hợp tác.

Thông tin về app các bạn có thể xem tại các link sau đây hoặc ngay tại trang này.
GitHub: https://github.com/SafeStudio/unofficial-zalo
Download: https://github.com/SafeStudio/unofficial-zalo/releases
Report Issue: https://github.com/SafeStudio/unofficial-zalo/issues

P/s: App đã lên https://electron.atom.io/apps/

How to disable IPv6 in Ubuntu

IPv6

Step 1: Open /etc/sysctl.conf
sudo nano /etc/sysctl.conf
Step 2: Add following lines:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Step 3: Check whether IPv6 was disabled
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
If result is 1, it’s OK, else go to step 4.
Step 4: Activate sysctl.conf
sudo sysctl -p
Do step 3 again.

Hope this helpful to you!

exa – Sự thay thế đáng giá cho ls

exa

Nếu bạn là người dùng Linux lâu năm thì chắc chắn bạn đã từng sử dụng lệnh ls. Hôm nay mình sẽ giới thiệu cho các bạn một công cụ thay thế đang giá cho ls: exa.

1. Các tính năng của exa:

– Highlight thông tin hiển thị bằng các màu sắc khác nhau.
– Có thể hiển thị nhiều thông tin mở rộng nếu bạn sử dụng các tham số khác nhau.
– Xem trạng thái chỉnh sủa của thư mục sử dụng git. (Chỉ thư mục thôi nhé, không có file, vì vậy mình vẫn khuyên bạn dùng git status nếu bạn muốn xem thạng thái chỉnh sửa).
– Hỗ trợ chế độ tree view (hiển thị cấu trúc thư mục dạng cây).
– Nhỏ gọn và nhanh hơn ls.

2. Cài đặt:

2.1. macOS:

sudo apt-get install libhttp-parser2.1
wget https://the.exa.website/releases/exa-linux-x86_64-0.7.0.zip
unzip exa-linux-x86_64-0.7.0.zip
sudo mv exa-linux-x86_64 /usr/local/bin/

2.2 Linux:
    2.2.1 Ubuntu, Debian

sudo apt-get install libhttp-parser2.1
wget https://the.exa.website/releases/exa-linux-x86_64-0.7.0.zip
unzip exa-linux-x86_64-0.7.0.zip
sudo mv exa-linux-x86_64 /usr/local/bin

    2.2.2 Fedora, CentOS

sudo yum install http-parser.x86_64
wget https://the.exa.website/releases/exa-linux-x86_64-0.7.0.zip
unzip exa-linux-x86_64-0.7.0.zip
sudo mv exa-linux-x86_64 /usr/local/bin/

    2.2.3 ArchLinux

Sử dụng lệnh yaourt:
yaourt -S exa-git

2.3 Window:

Chưa được hỗ trợ (vì tác giả không dùng Windows.)

Để biết cách sử dụng exa nhanh nhất bạn gõ exa --help.

Lời giải cho bài toán dãy số Kim tự tháp

All Giza Pyramids

Hôm nay trên forum của grokking.org có đăng một bài toán như sau:

Đề bài:

Cho dãy số sau:

    1
  2 3 4
5 6 7 8 9

Hỏi tổng của dòng thứ N là gì?

Lời giải:

Viết lại dãy số

    1
  3 3 3
7 7 7 7 7

Đến đây, bài toán trở thành việc xác định số tại dòng thứ N là số mấy (Xn) và có bao nhiêu số như vậy (Yn).

Khi đó, tổng tại dòng thứ N là Sn = XnYn.

Ta có các nhận xét sau:

n = 1: X1 = 1

n = 2: X2 = 3 = 1+2.1

n = 3: X3 = 7 = 1+3.2

...

n = m: Xm = 1+m(m-1)

Chứng minh bằng quy nạp => Xn = 1+n(n – 1)

Đã có công thức tính X, bây giờ ta đi tìm công thức tính Y. Tương tự:

n = 1: Y1 = 1 = 2.1-1

n = 2: Y2 = 3 = 2.2-1

n = 3: Y3 = 5 = 2.3-1

...

n = m: Ym = 2m-1

Chứng minh bằng quy nạp ta tìm được công thức tính Yn = 2n-1

Suy ra Sn = XnYn = [1 + n(n – 1)](2n – 1) = 2n33n2 + 3n – 1.

Công thức thì đúng chứ không sai. Tuy nhiên, nếu để ý thì

Sn = n3 + (n-1)3

Vậy câu hỏi mới đặt ra ở đây là có cách tiếp cận nào để cho ra Sn = n3 + (n-1)3 luôn hay không?

Sự khác biệt giữa abstract và interface?

Object Oriented Programming

Nếu bạn là lập trình viên thì chắc chắn bạn phải biết đến OOP (Object Oriented Programming – lập trình hướng đối tượng). Và câu hỏi mà mình sẽ trả lời trong bài viết này chắc chắn đã/đang hoặc sẽ là câu hỏi dành cho bạn.

  1. Khái niệm

Abstract class là một class cha cho tất cả các class có cùng bản chất. Bản chất ở đây được hiểu là kiểu, loại, nhiệm vụ của class.

Interface là một cách thức hoạt động mà bạn có thể thêm vào bất kì class nào. Các class này có thể có cùng bản chất hoặc không. Cách thức hoạt động ở đây không đồng nghĩa với phương thức (hoặc hàm).

  1. Sự khác biệt
  • Abstract class có đầy đủ tính chất của một class, ngoại trừ việc nó không cho phép tạo instance, nghĩa là sẽ không thể khởi tạo được các đối tượng thuộc một abstract class. Interface không phải là class.
  • Abstract class không cho phép đa kế thừa (multiple inheritance), nghĩa là một sub-class chỉ có thể extends một class/abstract class. Interface cho phép đa kế thừa, nghĩa là một sub-class có thể implements nhiều interface để bổ sung cách thức hoạt động của chính nó.
  • Abstract class có thể implements interface, nhưng interface không thể extends abstract class.
  • Cả 2 đều là “bản thiết kế” cho các lớp dẫn xuất, do đó chúng chỉ chứa các khai báo properties và method mà không quan tâm bên trong thực hiện những gì. Nhưng abstract class là “bản thiết kế” cho class còn interface là “bản thiết kế” cho method.
  • Abstract class có thể chứa các method đã được implement, interface thì không.
  • Toàn bộ những method và properties trong interface không cần khai báo access modifier vì mặc định là public. Abstract class thì phải bắt buộc khai báo (public, protected) và bắt buộc có từ khóa abstract trong các method và properties được khai báo trừu tượng.
  • Method của abstract class có thể sử dụng những access modifiers như private, protected, default, public, static nhưng method của interface chỉ sử dụng public và asbtract.
  • Class implements interface bắt buộc phải implement toàn bộ những method và properties đã khai báo trong interface. Class extends abstract class chỉ bắt buộc implement những abstract method (trừ khi nó cũng là abstract class)

3. Nên dùng cái nào cho đúng?

Abstract class

  • Bạn muốn chia sẻ mã các class có quan hệ chặt chẽ với nhau.
  • Bạn muốn các class con của abstract class có cùng các properties hoặc method, hoặc bạn muốn thay đổi access modifier (thay vì mặc định là public).
  • Bạn muốn khai báo non-static hoặc non-final fields. Mục đích là để định nghĩa những method có thể truy cập và thay đổi trạng thái của của các đối tượng mà nó thuộc về

Interface

  • Bạn muốn các class khác nhau về bản chất nhưng có cùng cách thức hoạt động.
  • Bạn muốn chỉ định hành vi của một kiểu dữ liệu cụ thể, nhưng không quan tâm đến ai thực hiện hành vi của nó.
  • Bạn cần đa kế thừa.

Bài viết có tham khảo các nguồn:

JQuery tips for HTML select

JQuery Logo

I am working on the next version of Bible for WordPress plugin, and I learned some tips while playing with HTML select.

I hope this helpful!

%d bloggers like this: