Using the default Elsevier latex template, there is a URL in each bibliography reference with “Bdsk-Url” fields. To remove this URL,
1. Open the BTS (bibliography style) file being used (by default “els article-num.bst”).
2. For each BibTeX item type (e.g. “inproceedings”), find the corresponding function in the above BST file (e.g. “FUNCTION {inproceedings}”), then comment out “write.url” in the end of this function (i.e. change it to “%write.url”).

(To remove such URLs for IEEE template, please refer to

If you have better solutions, please let me know. Thanks.

I installed the NVIDIA Web Driver on my MacBook Pro (Mid 2014 w/ GT750M) due to sluggish High Sierra. At first, it seemed to improve the graphics performance a bit. However, when I tried to restart the MacBook later, it just stuck on Apple logo with progress bar not finishing moving.

In Safe Boot, I can’t access the NVIDIA Driver Manager. Right now my solution is to clear the Macbook’s NVRAM (nonvolatile random-access memory). Caution: it will also reset several other settings. The method is: press Option, Command, P, and R together, and then start the computer.

If you have better solutions, please leave your comments. Thanks.

Several times after I force-restart my Mac (recently in High Sierra), I found Safari lost all its saved passwords. It seems the Mac loses the keychain containing these passwords. The solution may be simple:
Go to System Preferences -> iCloud, if “Keychain” is unchecked, check it. Then all passwords should be accessible in Safari again.

This method is learned from

(change count=1024 for the size you need)

sudo -s
swapoff -a
dd if=/dev/zero of=/swapfile bs=1M count=1024
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile

  1. Download intellij-java-google-style.xml from GitHub:
  2. On Mac, IntelliJ Preferences -> Editor -> Code Style -> Java -> (Click “Gear” icon) -> Import Scheme -> Import IDEA code style XML

  1. Disable “duplicated code” detection
    • Settings → Editor → Inspections → General → Duplicated Code
    • (Or better) in the source code, use @SuppressWarnings(“Duplicates”)
    • Ref.: stackoverflow
  2. Show source file structure
    1. From menu: “View” -> “Tool Windows” -> “Structure”
    2. Quick key: CMD + 7
  3. Reformat all codes under a folder: in Project view, select the folder, then Code -> Reformat Code

This is reading notes on Professional C++ by Marc Gregoire.

  1. In switch statement, expression must be integer type.
    1. Why can’t be string? Because C++ does not recognize string as a type. Ref:
  2. Array initialization
    1. in C style:
      1. int myArray[3] = {0}; // all 0
      2. int myArray[3] = {1}; // first 1, other two 0
      3. int myArray[] = {0,1,2}; // an array of 3 elements, [0;1;2]
    2. in C++ style:
      1. array<int, 3> myArray = {0, 1, 2}
    3. For array of variable length, use vector
  3. Range-based for loop
    1. for (int i : myArray)
  4. __func__ is implicitly declared (i.e. can be used as function name directly inside of a function) as:
    1. static const char __func__[] = “func-name”;
  5. Alternative function syntax (with trailing return type):
    1. auto func(int i) -> int // {…}
  6. Function return type deduction (use compiler to figure out return type)
    1. auto func(int i) // {…}
    2. all returns should resolve to the same type
    3. in recursive calls, first return must be non-recursive
  7. Type inference
    1. by auto:
      1. auto result = func();
    2. by decltype:
      1. int x = 1; decltype(x) y = 2;
  8. const int i = 1 is not equal to #define i 1
  9. int *j; later *j is called “dereference”
  10. C++ coding style:
  11. Better only use static_cast (according to Ira Pohl)