Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Failed to load latest commit information.
Latest commit message
Commit time
April 23, 2019 13:16
November 30, 2015 11:13
April 14, 2020 17:34
April 29, 2019 18:51
November 29, 2015 04:04
December 10, 2015 08:31
March 31, 2016 18:41
December 7, 2015 14:54
November 21, 2015 23:04
August 20, 2020 15:57
November 22, 2015 20:40
November 22, 2015 20:40

English | 简体中文

Hacker Scripts

Based on a true story:

xxx: OK, so, our build engineer has left for another company. The dude was literally living inside the terminal. You know, that type of a guy who loves Vim, creates diagrams in Dot and writes wiki-posts in Markdown... If something - anything - requires more than 90 seconds of his time, he writes a script to automate that.

xxx: So we're sitting here, looking through his, uhm, "legacy"

xxx: You're gonna love this

xxx: - sends a text message "late at work" to his wife (apparently). Automatically picks reasons from an array of strings, randomly. Runs inside a cron-job. The job fires if there are active SSH-sessions on the server after 9pm with his login.

xxx: - scans the inbox for emails from "Kumar" (a DBA at our clients). Looks for keywords like "help", "trouble", "sorry" etc. If keywords are found - the script SSHes into the clients server and rolls back the staging database to the latest backup. Then sends a reply "no worries mate, be careful next time".

xxx: - another cron-job that is set to specific dates. Sends automated emails like "not feeling well/gonna work from home" etc. Adds a random "reason" from another predefined array of strings. Fires if there are no interactive sessions on the server at 8:45am.

xxx: (and the oscar goes to) - this one waits exactly 17 seconds (!), then opens a telnet session to our coffee-machine (we had no frikin idea the coffee machine is on the network, runs linux and has a TCP socket up and running) and sends something like sys brew. Turns out this thing starts brewing a mid-sized half-caf latte and waits another 24 (!) seconds before pouring it into a cup. The timing is exactly how long it takes to walk to the machine from the dudes desk.

xxx: holy sh*t I'm keeping those

Original: (in Russian) ( link) Pull requests with other implementations (Python, Perl, Shell, etc) are welcome.


You need these environment variables:

# used in `smack-my-bitch-up` and `hangover` scripts

# used in `kumar_asshole` script

For Ruby scripts you need to install gems: gem install dotenv twilio-ruby gmail

Cron jobs

# Runs `` monday to friday at 9:20 pm.
20 21 * * 1-5 /path/to/scripts/ >> /path/to/smack-my-bitch-up.log 2>&1

# Runs `` monday to friday at 8:45 am.
45 8 * * 1-5 /path/to/scripts/ >> /path/to/hangover.log 2>&1

# Runs `` every 10 minutes.
*/10 * * * * /path/to/scripts/

# Runs `` hourly from 9am to 6pm on weekdays.
0 9-18 * * 1-5 /path/to/scripts/

Code is released under WTFPL.