Category Archives: Techniques

2 công cụ hỗ trợ về màu sắc cho lập trình viên

Lập trình web hay mobile thì đều tới lúc phải chọn màu sắc sao cho đẹp, vừa mắt và phù hợp với nội dung mình muốn truyền tải. Sau đây là 2 trang web mình thấy khá hay để hỗ trợ dev (vốn không quá ‘giỏi’ về mặt thẩm mỹ, ý kiến chủ quan) trong việc xây dựng trang web hay ứng dụng mobile.

Để chọn palette màu: https://colors.dopely.top/palettes

Để đổi màu từ hex code sang RGBA: https://rgbacolorpicker.com/hex-to-rgba

Mình đang làm việc với flutter, và cách công nghệ này chọn màu với ngôn ngữ Dart làm mình hơi lúng túng — tại có nhiều lựa chọn quá. Nếu truyền mã hex như trên mạng (ví dụ #F4F1DE thành 0xF4F1DE) rồi đặt biến thì nó hơi phiền ở chỗ: (1) nó là một biến int, khó quản lý, (2) nó hiển thị màu không đúng như ý mình. Do đó, mình chuyển nó thành RGBA, rồi gán nó vào một biến Color luôn.

Color mainColor = const Color.fromARGB(255, 244, 122, 95);

Happy coding!

Set working directory of your R script automatically

When you’re working with some datasets in R-studio, you have to define an absolute path to such file and set the working directory of your script accordingly. Doing this would be very time-consuming in some occasions. Luckily, there’s an API call that can simplify the process.

setwd(dirname(rstudioapi::getActiveDocumentContext()$path))

It is best that  you place the R-script and the datasets in the same folder. Make sure to include the given command at the top of your script for the best portability. If your collaborators want to run the R-script on their computer, they wouldn’t have to change the working directory themselves, how cool is that!

 

Kiểm tra số chẵn, số lẻ bằng phép thao tác bit trên c++

Với một người không rành máy móc thì hẳn họ cũng sẽ biết rằng máy tính hoạt động theo nguyên tắc của hệ nhị phân (0 và 1). Các phép thao tác bit (bit-wise operations) trong C++ là một thứ khá hay ho để ta có thể vận dụng hệ nhị phân để giải quyết một số bài toán lập trình, mà chủ đề hôm nay sẽ là về kiểm tra tính chẵn lẻ của một số bất kỳ.

Thuật toán kiểm tra cơ bản rất dễ hiểu. Ta thử xem liệu số n nào đó có chia hết cho 2 hay không: nếu chia hết thì số đó là số chẵn, ngược lại là số lẻ.

Với các thao tác bit, ta sẽ ghép n với số 1 bằng toán tử AND. Toán tử AND sẽ chỉ trả về 1 nếu cả hai bit đầu vào đều là 1, đúng theo bảng chân trị của lý thuyết toán rời rạc. Khi một số lẻ ở hệ thập phân được chuyển đổi sang hệ nhị phân, chữ số cuối cùng sẽ luôn là số 1. Lợi dụng điều này, ta sẽ biết được số n ban đầu là lẻ hay chẵn bằng cách xem xét output của AND.

Ưu điểm của thao tác bit là nó chạy nhanh hơn cách thông thường, với lại làm bạn ngầu hơn với cả những người đã biết lập trình (haha).

Sau đây là đoạn code C++ mô phỏng lại những gì mình vừa nói.

#include <bits/stdc++.h>
using namespace std;
int main(){
     int n = 7;
     if (n & 1){
           cout << "odd number.";
     } //& là ký hiệu của phép AND trên C++.
     else cout << "even number.";
}

Một bài lập trình hay về số nguyên tố

Số nguyên tố là thứ quá đỗi quen thuộc với những ai học toán, cũng như đối với các lập trình viên. Ai học giải thuật đều đã giải qua những bài về số nguyên tố, với độ khó dàn trải từ đơn giản tới phức tạp, từ vòng lặp thử tính chia hết tới sàng số nguyên tố Eratosthene…

Hôm nay mình rảnh thì có nghĩ ra một bài như thế này, các bạn xem qua nhé!

Đề bài: Cho hai số nguyên dương x và y (các test case đưa vào luôn đảm bảo x > y). Viết chương trình kiểm tra xem x2 – y2 có phải là số nguyên tố hay không.

Thoạt nhìn qua thì bài này khá đơn giản. Tính x2 – y2, rồi kiểm tra. Nhưng khi x và y lớn, ví dụ cỡ 1018 thì cách này sẽ chạy quá thời gian.

Hãy quan sát biểu thức x2 – y2. Nếu bạn đã học 7 hằng đẳng thức đáng nhớ, sẽ dễ thấy rằng x2 – y2 có thể được viết dưới dạng (x-y)(x+y). Vì x và y đều là các số nguyên dương, nên x 1 và y 1. Từ đó suy ra: (x+y) 1.

Xét biểu thức còn lại, x-y. Sẽ xảy ra hai trường hợp là (x-y) 1 và (x-y)=1. Với trường hợp đầu tiên, x2 – y2 sẽ không là số nguyên tố vì vi phạm định nghĩa (chỉ có hai ước là 1 và chính nó). Do đó với (x-y)=1, biểu thức ban đầu sẽ tương đương với chỉ x+y. Ta chỉ cần xét x+y là đủ. Sau đây là code miêu tả bài toán này.

bool primeSquare(long long a, long long b)
{
    if (a-b != 1) return false;
    long long num = a + b;
    if (num % 2 == 0) return false;
    for (long long i = 3; i*i <= num; i += 2)
    {
        if (num % i == 0) return false;
    }
    return true;
}

Lost Desktop icons after uninstalling Komorebi on Linux Mint

Komorebi is an application that enables animations for desktop wallpapers. When uninstall Komorebi, there is a possibility that desktop will become unresponsive: desklets are still displaying but no icons, right click doesn’t show anything. To fix it, run this code in Terminal:

gsettings set org.nemo.desktop show-desktop-icons true

Thing should be fine after this.

Best way to install Node.js and NPM

I’m writing this post as I need to install node.js and npm to install packages for reveal.js, I’m on Ubuntu 18.04 Bionic.

Normally we can install node.js via terminal by

sudo apt install nodejs

But this is not the best way since the version is outdated and some dependencies won’t meet. The best way to install the latest node.js and npm is via nvm.

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

Note that the version number can be checked by going directly to the website and see. The above script will download all the package and put nvm into the Linux alias (so we can use the nvm command globally). After this, log out and log in to activate the alias.

Once you log in, run below script

nvm install node

To update:

nvm install node
nvm alias default nodenvm install node
nvm alias default node

From this answer: https://askubuntu.com/a/1009527

Change Footer Text in Slide Master in Powerpoint 2016 and later

It is normal that we use a presentation more than one time for different conference. Anytime doing that, modifying the footer, where the conference’s name and the date are, is an important job to do to avoid embarrassing moment.

It is pretty obvious that you can simply open Slide Master and edit directly the footer text to whatever you want. However, for Powerpoit 2016 and later, when you do that and return to the slide, the old text content is still there and the modification you’ve done is applicable only for new slide.

In order to edit that, now what we should do is manually edit them. Not slide by slide but by Insert -> Header & Footer -> Modify the content, then click “Apply to All”.

It’s a nuisance but we can solve it by that trick.

Proper set-up of Zotero to manage your bibliography

Anyone who works in academy world would hear at least once about using Zotero to manage the reference. In this post I will show you how to install Zotero and set it up properly to max out its capacity by connecting increasing the storage size, connect with sci-hub, and how to grab a paper from a journal in just one click. I mention only Windows platform, but on Linux it is pretty similar.

Where to find Zotero and how to use them?

Well Google is your friend and installing Zotero is as easy as installing other software on a Windows computer. Here is the homepage of the Zotero we are talking about:

https://www.zotero.org/

(by the time I paste that link, I realize Zotero has just introduced a new tool called Zoterobib for fast crafting a abstract. Nice work Zotero!).

Just download the file and install on Windows platform, as well as the Firefox add-on because you will need that.

Download PDF to local computer using Zotero

If you installed Zotero on your lab computer, chance is it will be easy to grab a PDF when you are browser those journals website. If your institute has access to the source, just click the button of the add-on in Firefox while Zotero in running to let it connect to the database and make a copy on your local computer for you. Next time you can navigate inside Zotero and read the PDF however you like.

If you install on your personal computer or if you connect to a paper that your school does not have access, then you have few other choices to get the PDF: (a) message directly the corresponding author of the paper, normally they will reply you very fast if you have interest in their work (we are! we are really happy when there is someone want to read what we are doing!); (b) if you cannot wait, there is the site sci-hub where you can search and download the paper for free, then go to Zotero and attach the PDF to the paper query in Zotero; (c) or you can do the b step automatically by modifying a bit of how Zotero searching for the PDF, thanks to a great tip by Simon on medium. Using (b) and (c) may be illegal in some countries so prepare to secure your connection (tip: don’t worry much, people just don’t care).

Sync your file to your personal or 3rd party storage service (WebDav)

Zotero itself supports free user with 300MB to store and sync the paper they collect across all server and to be fair this is enough. However when you are working with a big database, it is advised to use a WebDav (Dropbox, GDrive…) to sync your files there. I advise you to use pcloud service because they offer 10GB and it is very easier to configure. Guys at Berkeley University wrote a clear instruction to do that. Enjoy your fast 10GB!

Sync file with your Android phone

Last info I want to share is bringing Zotero to Android phone. The situation we may encounter is there is possibility that you want to read again a paper from your library when you are in a seminar without your laptop, or you are on a bus and you cannot wait till home to open and grab the idea. So let us install a connector of Zotero on Android phone to make it work.

There are several apps who help us do that trick. Although they are still having limits, but basically they do the job: connect to Zotero, sync the library and download the PDF. I recommend ZotEZ², don’t let the rating fool you, it really depends on what you want, if you just want to look at the library the most simple way and want to download the PDF and read on your phone, this app deserves a 5-star rating. It is free and with some in-app purchases you can unlock other utilities which is probably useful for you with a rather OK price (~5 euros).

Conclusion

I shared what I am using for my research. Few free to add some more comments if you know Zotero can do more or there is better option to do those tasks (I know there is!). Hope the provided information helps you and your research work. May the force be with you!