RSSAmplifier

Blog

Jonathan Tsai

jontsai.comRSS feed ↗40 posts

Latest posts

The Hardest Pull Requests I've Ever Gotten Merged

Two of my pull requests were just merged into OpenClaw : fix(slack): allow channel-id reads for name-allowlisted channels fix(slack): honor configured App Home command The commits that made it to main are here: github.com/openclaw/openclaw/commits/main/?author=jontsai They were reviewed and merged by Pete Steinberger. That still feels surreal to type. I’ve been writing software professionally for…

Building Mission Control for My AI Workforce: Introducing OpenClaw Command Center

The Backstory I’m not a “script kiddie” or weekend hobbyist. I’m a UC Berkeley-trained Computer Scientist with over two decades of professional experience in Silicon Valley. I joined Iterable and EasyPost after their Series A rounds — both are now unicorns. At EasyPost, I managed 4 teams totaling ~20 engineers and delivered 8 figures of revenue. I know what production systems look like at scale. A…

SSH Commit Signing Part 2: Automation and Multi-Machine Setup

In my previous post , I covered the basics of signing Git commits with SSH keys instead of GPG. This post covers the automation and multi-machine setup I built to make SSH signing seamless across 12+ machines. The Challenge Managing SSH commit signing across multiple machines introduces several challenges: Multiple keys - Each machine has its own SSH key Multiple emails - Different projects use…

Signing Git commits using SSH instead of GPG

TIL you can sign Git commits using SSH instead of GPG This tip is 🏆, learned from my really smart colleague . tl;dr; To configure Git to use your key: Configure Git to use SSH for commit signing: git config --global gpg.format ssh Specify which public SSH key to use as the signing key and change the filename ( ~/.ssh/examplekey.pub ) to the location of your key. The filename might differ,…

Embrace the power of Regex

Too often, while reviewing code, I’ll see examples like: def extract_id_and_env(key: str) -> dict: """Extracts the object ID from `key` `key` is a string like 'namespace_prefix_12345' In some cases, `key` could also look like `namespace_prefix_12345_environment` Returns a dict with the object ID, an integer """ parts = key.split('_') parsed = { 'id': int(parts[2]), 'environment': parts[3] if…

Use Fully Qualified datetime in Python

Whenever using the datetime module in Python, a highly recommended practice is to just import datetime at the top of the file, and use the fully-qualified module name in the code, as much as possible: datetime.datetime datetime.timedelta datetime.date If one does from datetime import datetime , it’s hard to figure out at-a-glance what datetime is referring to in the middle of a…

Get Is the Worst Function Prefix Ever

tl;dr; Unless the function you are writing is a getter (which complements a setter ), please avoid naming methods get_ . get_ lacks descriptiveness, precision, and is boring . Rationale Software engineers are supposed to creative, and get is possible the least creative function name possible. Too often, I see codebases cluttered with get_ methods throughout, when the implementations of those…

14 Rules for Being a Godly Employee

Back in 2016, I came across this article: https://thecripplegate.com/14-rules-for-being-a-godly-employee/ Recently, I’ve resolved to start my work week by reviewing the 14 rules: Rule #1 – Eagerly start the day’s main work Rule #2 – Do not murmur at your busyness or the shortness of time but buy up the time all around. Rule #3 – Never murmur when correspondence is brought in. Rule #4 – Never…

Use Python iSort to Automagically Organize Imports within your Favorite Editor

tl;dr; isort ( PyPI ; GitHub ) is a wonderful tool that will sort imports in Python automagically, so that you no longer have to either a) ignore eye-sores during code reviews , or b) sound like an angry grandparent asking people to sort/organize imports . Quick Setup If you know your away around the *nix environment, these are the abridged instructions: Make the isort binary available somewhere…

What, How, and Why?

In order to learn, there are three kinds of questions to ask: What? , How? , and Why ? Of these, Why? is the best question to ask, and What? is the worst; How? is in the middle but right near the bottom near What? . The reason Why? is the best question for learning is that it conditions you to go to first principles and learn how to learn . What? is the absolute worst type of question to ask,…

Debugging Address already in use errors

All too frequent an occurrence in the development lifecycle is doing some work, closing up your laptop/suspending the machine, and coming back to your work hours or days later. As you try to start up the local webserver or API server, you get cryptic error messages like the following: Address already in use Another process is already listening on port Port xyzw is currently used by another…

Debugging like a Boss with Slack

Edit: This article also got published on the GoodAudience Blog . I’ve been using println debugging since forever. It’s the best! It’s minimal, is the least surprising form of debugging, and allows you to set-it-and-forget it. I’ve also used interactive debuggers before, but when println debugging techniques are used effectively, I’d argue that step-through interactive debuggers are not necessary…

Kill Netskope Client on Mac

Netskope is a corporate security tool installed on corporate-owned devices that will introduce and override the default SSL certificate authorities by injecting its own local server. For developers, this often poses an inconvenience especially if they need to develop applications that make API calls and HTTP requests to other web services, if the developers are hitting a web service that has not…

TIL: pbcopy

TIL : Discovered a super game changing technique. From command line, you can copy contents of any file to Mac OS clipboard by running this command: cat yourfilename.txt | pbcopy Open your other application, press Command+V to paste as normal Profit. Immensely.

When Slack links don't work, Restart Google Chrome

Periodically, web hyperlinks in Slack would stop working. The fix is surprisingly quite simple: Restart Google Chrome. The best way to restart Google Chrome safely and preserve your current open tabs is to type into the address bar: chrome://restart

Is there an engineering talent shortage in Silicon Valley?

Yes, there is a huge engineering talent shortage in Silicon Valley. There are more companies trying to build disruptive technology that have greater hiring needs than the available supply of engineering talent. I currently work at Iterable , and we are as of present a Series B company with around $30M raised total. We get hundreds of applicants a week, but few of them are qualified enough. I…

Communicating with Engineers: How to File Good JIRA Tickets

By Jonathan Tsai ( @jontsai | https://linkedin.com/in/jontsai ) Original Permalink (working Quip doc) : Communicating with Engineers: How to File Good JIRA Tickets License: CC BY 3.0 This article was originally written as part of a mini-training for the customer success team at Iterable in July 2017. For the most updated version of this article, view the Quip version at the above permalink. Edit:…

How to pretty print JSON from CLI

Software engineers frequently have to deal with JSON and inspect or manipulate it. There are two easy ways of pretty-printing JSON from command-line to aid in visual inspection. The first requires no installation, and the second requires a minimal installation but also provides syntax highlighting and manipulation capabilities. Method 1: Using Python - Nothing to Install Optional : Add alias to…

If you start learning to code in your mid 20s, can you make a good living off it?

I know of several people who start learning to code in their mid 20’s, and are doing fine now. However, it’s very subjective what a “good living” is. Compared to the rest of society, programmers (anyone who writes code) and software engineers (a subset of programmers, with more emphasis on “engineer”) might make a relatively higher salary. However, just as with any field, there are different grade…

IntelliJ ProTips™: Start the IntelliJ JVM process with additional memory

Assorted tips and tricks for IntelliJ Start the IntelliJ JVM process with additional memory Open the application once, normally, after a new install before editing this file . a. Otherwise, the signatures won’t match and the OS will think that the package has been tampered with, and security settings will prevent launching of the application. You will then have to delete the entire application and…

Enriched objects

random: my new favorite coding adjective recently is “enriched” val enrichedObj = obj ++ someAdditionalStuffs reminiscent of / inspired by https://en.wikipedia.org/wiki/Enriched_uranium

Universal Directives for Shell Scripts

When writing shell scripts or other types of executables, you often put a directive at the top of the file to indicate which kind of interpreter to use. #!/bin/python Oh wait, that didn’t work? #!/usr/bin/python Okay, that worked on my Mac. But why all the guesswork? There is another command that is better. Introducing env . Use it as a directive like so: #!/usr/bin/env python And if it’s a bash…

The Most Valuable Programming Languages to Know for the Future

Originally posted on Quora: Jonathan Tsai’s answer to What is the most valuable programming language to know for the future and why? I will have to agree with Michael Hanson’s answer as well as some of the other ones that suggest learning multiple programming languages is more beneficial than picking just one . I myself am a multi-linguist of both human and programming languages. If you randomly…

Hack GitHub Streaks

Tonight, I was doing some research and maintenance on a couple of my open-source projects. In particular, I had recently learned about EditorConfig (which BTW, is a great idea! and a standard EVERYONE should adopt), and wanted to add it to most of my projects. That brought me to my GitHub homepage , and I caught a glimpse of my GitHub streak. Only 2 days! I was on a roll for a few days, and then a…

Equality and Inequalities in JS and PHP

It’s 2015, and from time to time I still see a lot of == peppered throughout codebases that I work with, and just wanted to share a few posts that might change your mind =) tl;dr; === and its complement !== and should be used like 99% of the time because it is faster and more accurate. http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-JavaScript-comparisons…

WordPress' New JetPacks All-Sites Dashboard

The JetPacks 3.3 upgrade that allows you to manage and administer multiple WordPress sites from one WordPress.com account is a breeze to use! I’m not quite used to it yet and still getting acclimated, but I think it’s a great time-saver and will grow on me more over time. I can see it as a great feature to use once a site for daily workflows in updating content once a site’s major structural and…

Upgrading to Ubuntu 14.04.1 LTS

tl;dr; When upgarding from Ubuntu 12.04 to 14.04 LTS, the Apache also gets upgraded from 2.2 to 2.4. There are lots of backwards incompatible changes. I just spent the last 3 hours fixing my server after impulsively upgrading to Ubuntu 14.04.1 LTS from Ubuntu 12.04. Well, not exactly that impulsively. I had seen this pestering MOTD-style message upon login for weeks now, and I figured that since…

Use Intel Hardware Acceleration for Faster Android Emulation

tl;dr; If this is you: Android developer with an Intel-based computer Sick of dealing with a slow emulator Then: Install Intel HAXM (Intel Hardware Accelerated Execution Manager) I never knew this, and thought that I was doomed to a slow emulator or had to debug and deploy over a constantly plugged-in device, which could at times be inconvenient. Thanks to the guys at CodePath ( @thecodepath ) for…

Finally! A mobile school for engineers

Got an email today about a new Android training program starting up in SF for engineers. Best of all, it’s free! I’m definitely going to check them out and try to sign up. Update (2013-09-15) : If you’re unable to attend the class, they may have a “course observer option where you will have access to all the materials for the class, but you just won’t participate in the live classes, discussion…

Pinterest wasn't hacked

Seriously though, I messed up in my previous blog post . Pinterest wasn’t hacked, and I’m sorry that I jumped to conclusions when I actually stumbled upon a spammer’s C&C. I still feel that the actions I took at the time were correct according to the knowledge that I had, but based on what I know now, I would have approached it different (contacted Pinterest first, now that I actually have their…

AWS EC2 Security Vulnerability and Pinterest Hacked

Update 2013-05-12: Pinterest wasn’t really hacked. See follow up to this blog post . – Well, almost hacked. This is rather embarassing (for Pinterest, and maybe AWS?), in that I was able to access what seemed to be their admin page. Furthermore, I discovered through this interface that it seems they do not store passwords encrypted or salted. If I’m not mistaken, I saw usernames, emails, and…

Sticky Footer Redux

I call myself a generalist, but feel that I’m more adept at backend development than web frontend, so I’m always amazed by the simplicity and cleverness of really cool HTML/CSS/JS techniques out there. Responsive Sticky Footer by Timothy Long [ demo ] [ code ] This was very informative. I have yet to use this solution (maybe when I need a dynamically-sized footer), but it seems to be very…

Domino's ShopRunner Flub

On Sunday, February 3, 2013 (Super Bowl Sunday), Domino’s Pizza disabled ShopRunner free delivery on their site. This screenshot was taken from the Domino’s Order Page on Tuesday, February 5, 2013, when they added it back in. Coincidence? Sneaky Domino’s. I didn’t think to take a screenshot at the time, though. Too bad! Let’s see what sharing to Twitter yields…

How to Clone a Car

Today, I was looking up biking directions to my new office . I wanted to take VTA Express from Fremont to Sunnyvale, and then bike the rest of the way. So, I looked up biking directions on Google Maps, and, to have a better idea of the actual road conditions, looked at street view . That’s when I noticed something interesting–all the cars on the road look the same! Am I seeing multiples? The…

Dropbox on NTFS Mount in Ubuntu

After I switched to Ubuntu as my primary OS (dual-boot alongside Windows XP), I had a problem syncing some Dropbox files to an NTFS mount. While some files synced without much trouble, the Dropbox icon would consistently be spinning and several files and folders would not sync. I got around to searching for the issue today “dropbox ntfs ubuntu” and found this helpful blog post that answered my…

Apache on OSX 10.8 Mountain Lion

I upgraded to Mountain Lion (10.8.x) from Lion (10.7.x) a few months ago, and only discovered today that Apache wasn’t working–going to http://localhost showed the default “It works!” page. A quick search for “apache mountain lion” found this helpful guide: AMP Guide for Mac OSX 10.8 . tl;dr; for those who know what they are doing: There is no longer a Web Sharing section in System Preferences >…

Cool Video of Strange Chinese Song

Here’s a cool video. The song, named Tan Te , is sung by Gong LinNa. It is considered both modern and traditional Chinese music. And in case you’re wondering–no, the words don’t make any sense.

Ubuntu'd out

Last night, I made the best decision of my computing life, ever. Old Setup: Two desktop machines under my desk, two 24” LCD monitors, controlled by one keyboard and mouse via Synergy Main computer was Windows XP 32-bit Core2 Quad 8200 4GB RAM (2.8GB usable after OS and video card reserved) Primary uses were general browsing, word processing, gaming (Starcraft 2, WoW, Diablo 3), organizing and…

Brogrammer

--> See original blog post from Twilio Con: https://www.twilio.com/blog/2011/09/twilio-presents-the-definitive-brogramming-primer.html

Code Intro

I’m newer to open-sourcing projects of my own on GitHub, so it’ll take me some time to “wrap” things properly and provide some documentation and examples so that these projects are more useful to others. I think sharing is viral, and I want to thank the open-source community for making it what it is today. I love what Jade Dominguez has done with Jekyll Bootstrap . Through him, I also learned…