How to Manage Windows Using Hammerspoon


I found that the windows management built in macOS is difficult to use. As a result, I always using my mouse to move and resize my window, which is less efficient. We should keep our hands on the keyboard as much as possible. After finishing the MIT-Missing-Semester, I came across the hammerspoon tool. I really like this one :)


According to the official site’s introduction, hammerspoon is a tool for powerful automation of OS X, which is just a bridge between the operating system and a Lua scripting engine. The windows management is kind of automation.

Hw02 of CS61A of UCB(2021-Fall)


The summation(n, term) function from the higher-order functions lecture adds up term(1) + ... + term(n). Write a similar function called product that returns term(1) * ... * term(n).

This problem is quite easy, we just need to use * instead of +. The logic is similar to summation(n, term) function in the lecture.

Hw01 of CS61A of UCB(2021-Fall)


Skip :)

Fill in the blanks in the following function for adding a to the absolute value of b, without calling abs. You may not modify any of the provided code other than the two blanks.

This problem is easy if we know that we can bind names to functions. In this problem:

The solutions for exercise09 of Missingsemester(2020)


Suppose a password is chosen as a concatenation of four lower-case dictionary words, where each word is selected uniformly at random from a dictionary of size 100,000. An example of such a password is correcthorsebatterystaple. How many bits of entropy does this have?

In order to calculate the bits of entropy, we need to know how many possibilites there.

The solutions for exercise08 of Missingsemester(2020)


Most makefiles provide a target called clean. This isn’t intended to produce a file called clean, but instead to clean up any files that can be re-built by make. Think of it as a way to “undo” all of the build steps. Implement a clean target for the paper.pdf Makefile above. You will have to make the target phony. You may find the git ls-filessubcommand useful. A number of other very common make targets are listed here.

How to Use Logging in Python


Recently I was fine-tuning my deep learning model, and I habitually started to use print to print some key information on the terminal. So my workflow is like:

  1. I type some hyperparameters to train my model.
  2. I manually opened an Excel to record the hyperparameters used and the model evaluation results. And I will go back to step 1. If I am not satisfied with results.

Soon, I became bored with this workflow (In fact, I kept this for quite a long time.). However, I suddenly forgot to record key information manually. As a result, I had to navigate in the history output of the the terminal slowly.

The solutions for exercise07 of Missingsemester(2020)

Use journalctl on Linux or log show on macOS to get the super user accesses and commands in the last day. If there aren’t any you can execute some harmless commands such as sudo ls and check again.

When I run log show --last 1d, it keeps running for along time. I don’t know how long it make take, so I will just execute harmless sudo ls to check the log.

The solutions for exercise 05&06 of MIT.Missing-semester(2020)


From what we have seen, we can use some ps aux | grep commands to get our jobs’ pids and then kill them, but there are better ways to do it. Start a sleep 10000 job in a terminal, background it with Ctrl-Z and continue its execution with bg. Now use pgrep to find its pid and pkill to kill it without ever typing the pid itself. (Hint: use the -af flags).

How to draw a simple relation graph in Python


The process of drawing a simple relation graph in python can be broken down into 2 steps.

  1. Define a graph.
  2. Draw a graph.

In this step, we will use the networkx package.

If you are using conda, you can just type conda install networkx

If you are using pip, you can just type pip install networkx