Book Review: Software Engineering at Google: Lessons Learned from Programming Over Time

Software Engineering at Google: Lessons Learned from Programming Over Time. I feel like this book gets less fanfare than the Google SRE books but it’s just as valuable. Like Google’s SRE books, this book has a mixture of useful information, wonderful explanations, and Google-flavored navel gazing. What I liked: the first 16 chapters or so had me really engaged. I especially enjoyed the author’s clear definition of software engineering vs....

November 3, 2021 · itsahill00

On Call Run Books: There's a Better Way

On call runbooks are a subset of a team’s runbooks used to assist on call responders. I’ve recently had conversations with a few folks about on call runbooks and I thought my view warranted a blog post. In this post, I’ll describe on call runbooks, their pros and cons, and better places to invest developer time. My views in this post assume two-pizza software engineering teams that are on call for own code....

October 26, 2021 · itsahill00

On The Big Rewrite

Content disappears from time to time on the web. This post is my own mirror of John Rauser’s Twitter thread that I frequently reference. Inspired by this HN comment https://news.ycombinator.com/item?id=11554288, I offer a story about software rewrites and Bezos as a technical leader. I was once in an annual planning meeting at Amazon. In attendance was Jeff, every SVP at amazon, my VP and all the directors in my org....

October 12, 2021 · itsahill00

OK Zoomer: My Zoom Pro Tips

I’ve been using Zoom on a daily basis for a while now. If you’re already a seasoned video conference user, these may help! These pro tips are focused on Mac OS use of Zoom, other platforms have similar functionality. Gallery View The default view in Zoom is called “Speaker View”. This keeps your view focused on whoever is speaking. Gallery View shows all participants at once. I prefer Gallery View for brief, informal team meetings....

March 31, 2020 · itsahill00

TLS redirect security

A common technique to help TLS migrations is providing a redirect. For example, this blog, hosted on Wordpress.com, redirects all HTTP requests on port 80 to one using TLS on port 443. $ curl -v http://virtualandy.wordpress.com * Rebuilt URL to: / * Trying 192.0.78.13... * TCP_NODELAY set * Connected to virtualandy.wordpress.com (192.0.78.13) port 80 (#0) > GET / HTTP/1.1 > Host: virtualandy.wordpress.com > User-Agent: curl/7.54.0 > Accept: */* > Referer: > < HTTP/1....

February 11, 2020 · itsahill00

Home Office: January 2020

I spent the majority of the 2010s working from a home office. Sometimes folks ask about my setup, so I thought it was time to show it all in a post. This post does not contain any affiliate links. Desk in standing position Tech Video Conferencing Microphone: Samson Meteor (2014) Camera: Logitech HD Portable 1080p Webcam C615 with Autofocus (2014) Light: Ring Light Webcam Mount (2019). I added a light after changing to a lower light room and reading Scott Hanselman’s Good, Better, Best post....

January 21, 2020 · itsahill00

Office Ergonomics Review

Recently, I had a fair amount of back / neck pain. This surprised me since at $PREVJOB I was measured by a certified ergonomist and given measurements that were suitable for that setup. I realized that it’d been several years since I was at $PREVJOB, and my desk and its contents have changed considerably. It was time to remeasure! Some sites that helped me regain some comfort: Ergonomic Office: Calculate optimal height of Desk, Chair / Standing Desk: This site has loads of graphics, calculators and details setting up a traditional desk as well as a standing desk....

January 10, 2020 · itsahill00

A Fix for OperationalError: (psycopg2.OperationalError) SSL error: decryption failed or bad record mac

I kept seeing this error message with a uwsgi/Flask/SQLAlchemy application: [2019-09-01 23:43:34,378] ERROR in app: Exception on / [GET] Traceback (most recent call last): File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception reraise(exc_type, exc_value, tb) File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "./http.py", line 11, in foo session....

September 4, 2019 · itsahill00

CSV Imports into Google Cloud BigQuery

If you have a large Postgres database, consider trying Google Cloud BigQuery for OLAP-style reporting queries. database> COPY (<query_to_denomralize_report_data>) TO '<dest_filename>' DELIMITER ',' CSV HEADER; Then upload it to GCS: $ gsutil cp <dest_filename> gs://<dest_bucket>/<dest_filename> Then, follow Loading Data into BigQuery (with Google Cloud Storage). For this to work, you’ll have to define the schema and skip the first leading row. My most recent load job took 4 seconds, loading a very large CSV file....

February 11, 2019 · itsahill00

python-dateutil gotcha

A quick note: Don’t naively use dateutil.parser.parse() if you know your dates are ISO8601 formatted. Use dateutil.parser.isoparse() instead. In [1]: from dateutil.parser import * In [2]: datestr = '2016-11-10 05:11:03.824266' In [3]: %timeit parse(datestr) The slowest run took 4.78 times longer than the fastest. This could mean that an intermediate result is being cached. 1000 loops, best of 3: 211 µs per loop In [4]: %timeit isoparse(datestr) 100000 loops, best of 3: 17....

November 30, 2018 · itsahill00