RSSAmplifier

Blog

Simon Weber

simonmweber.comRSS feed ↗36 posts

Latest posts

Opsgrid

Opsgrid September 20 2020 I’ve built up a number of side projects over the years. The ones that require a backend are hosted on individual vms from BuyVM , which means I need to monitor about a half-dozen servers. While there’s plenty of free Pingdom-style uptime monitoring options out there, cheap options to monitor metrics like cpu, ram, and disk are more rare. The big names usually have a free…

Side project income 2019

Side project income 2019 January 15 2020 2019 was my fourth year running my own small software business. I also quit my job in the spring! I’m now self-employed but spend most of my time consulting, so I still consider the business to be “on the side”. Here’s my active projects as of the end of the year: Autoplaylists for Google Music : iTunes Smart Playlists for Google Music. Autoresponder for…

Plugserv

Plugserv August 3 2019 I’ve been creating websites for a while now. Some of these get consistent visitors, while some are nearly unknown. At some point I realized there was an opportunity here: my popular sites could advertise my other sites. So, I started manually adding small text ads to each. This quickly became unwieldy. I’m closing in on ten active projects, and I got sick of updating all of…

Leaving Venmo after five years

Leaving Venmo after five years April 26 2019 I left Venmo recently, after an eventful five and a half year stay. Over that time we increased quarterly payment volume by over 100x, grew from dozens to hundreds of employees, and were both acquired and spun off. I’d grown too: with the fourth longest tenure at Venmo, I was now leading a team and part of engineering-wide discussions. Unsurprisingly,…

NYC Park Alerts

NYC Park Alerts March 30 2019 I work out at a city rec center , largely because the price - about $10/month - is hard to beat. Schedule consistency is a downside, however. Due to events and maintenance I’ve sometimes shown up to find my location unexpectedly closed. After some research, I found that the city does a pretty good job of posting schedule changes online . But, since there’s no way to…

Side project income 2018

Side project income 2018 January 7 2019 2018 marked my third year running a software business. While last year was focused on growing existing products, this year was more about diversification. I’m now running six separate projects: Analytics for Google Payments : business metrics for Google merchants. Autoplaylists for Google Music : iTunes Smart Playlists for Google Music. Autoresponder for…

MinMaxMeals: cheap, healthy, and fast cooking

MinMaxMeals: cheap, healthy, and fast cooking December 3 2018 In a departure from my typical projects, I’ve launched a cooking site! MinMaxMeals disregards culinary convention in favor of cost, health, and speed – typical meals call for $1 of ingredients and a few minutes in a microwave. Here’s a bit on its origins from the about page : While today I cook this way because it’s practical, it was…

Running Kleroteria for free by (ab)using free tiers

Running Kleroteria for free by (ab)using free tiers July 9 2018 Kleroteria is an email lottery: periodically, a random subscriber is chosen to write to everyone else. I built it to replace The Listserve, which recently shut down after providing years of advice, hundreds of personal stories, and one impromptu picnic. It was a fun and personal corner of the internet that I missed immediately. I…

Analytics for Google Payments: now in public beta

Analytics for Google Payments: now in public beta March 21 2018 Analytics for Google Payments , a Chrome Extension to help Google merchants make sense of their business metrics, is now in public beta. To find out more and try it out, head to the new product site at analytics.simon.codes !

Autoplaylists 2017 user survey results

Autoplaylists 2017 user survey results March 11 2018 In early 2018 I sent out a user survey for Autoplaylists for Google Music . My goal was to get a general idea of user satisfaction, as well as figure out what I should focus on next. Here’s a quick summary of the results: ~30% response rate from mailing list, representing ~5% of daily actives ~6:4 representation of free vs paying users on…

Analytics for the Google Payments Center: accounting data now supported

Analytics for the Google Payments Center: accounting data now supported January 26 2018 tl;dr install the extension here . Last year I launched the beta of Analytics for the Google Payments , a Chrome Extension to help Google merchants make sense of their business metrics. Today I’m announcing the first major change in a while: full support for accounting data. Basically, Analytics used to only…

Side project income 2017

Side project income 2017 January 9 2018 2017 was my second year of running a small software business. Unlike my first year - which you should read about first if you haven’t already - I didn’t launch any new paid products. Instead, I spent most of my time experimenting with my existing products: Autoplaylists for Google Music and Autoresponder for Google Chat . In this post I’ll go over what I…

Repominder

Repominder December 12 2017 I maintain a number of open source projects. Too often, something like this would happen: I merge a pull request I promptly forget about it weeks later, the changes haven’t reached a package registry So, I made Repominder to help OSS maintainers avoid this situation. Now when I forget about changes, I get a weekly email with diffs of affected projects. It also provides…

tabs.executeScript as a content script alternative in Chrome Extensions

tabs.executeScript as a content script alternative in Chrome Extensions July 17 2017 I just updated Autoplaylists for Google Music so it uses chrome.tabs.executeScript instead of a manifest content script. It’s only been a few days, but so far it’s halved sync problems. Since I didn’t find similar recommendations elsewhere, this post explains what motivated the change and how I went about it.…

Analytics for the Google Payments Center

Analytics for the Google Payments Center March 18 2017 tl;dr install the extension here . If you receive money from Google you’re surely familiar with the Google Payments Center. I deal with it in the context of my subscription Chrome Extension Autoplaylists for Google Music . Its main interface is a list of orders: A screenshot from my account with full order numbers removed. This is largely…

Side project income 2016: 0 to $100/month

Side project income 2016: 0 to $100/month January 9 2017, updated March 18 2017 If you’re selling an extension, check out my project Analytics for Google Payments . In 2016, I set a goal to earn money from software I built. Being an employee or contractor wouldn’t count. I wanted the product and business experience of making something from the ground up. I’m pleased to have achieved this: as of…

Publishing your first Chrome Extension, part 2: Analytics and Error Reporting

Publishing your first Chrome Extension, part 2: Analytics and Error Reporting July 18 2016, updated March 18 2017 If you’re selling an extension, check out my project Analytics for Google Payments . Earlier this year, I launched my first paid Chrome extension: Autoplaylists for Google Music . The non-software work involved - like organizing a beta, wrangling paperwork, and finding users - was a…

Publishing your first Chrome Extension, part 1: Taxes and Legal

Publishing your first Chrome Extension, part 1: Taxes and Legal July 11 2016, updated March 18 2017 If you’re selling an extension, check out my project Analytics for Google Payments . Earlier this year, I launched my first paid Chrome extension: Autoplaylists for Google Music . The non-software work involved - like organizing a beta, wrangling paperwork, and finding users - was a bit daunting to…

Autoplaylists (iTunes smart playlists) for Google Music

Autoplaylists (iTunes smart playlists) for Google Music March 1, 2016 Autoplaylists - called “smart playlists” in iTunes - allow you to create playlists that always contain songs matching some set of rules. For example, you could create a playlist that contains only music you haven’t listened to recently, or your most-played songs of a certain genre. They’re one of my favorite ways to listen to…

Automatic Responses for Google Chat and Hangouts

Automatic Responses for Google Chat and Hangouts October 18, 2015 Do you have Google accounts that forward email? If you never log into them, you might be missing Chat/Talk/Hangouts messages. After missing an important message, I made https://gchat.simon.codes . It automatically replies to - and optionally forwards - the messages you’d otherwise miss. Check it out and let me know what you think;…

Python linting at Venmo

Python linting at Venmo August 28, 2015 cross-posted at the Venmo blog Quick! What’s wrong with this (contrived) Python 2 code? import sys class NotFoundError ( Exception ): pass def enforce_presence ( key , entries ): """Raise NotFoundError if key is not in entries.""" for entry in entries : if entry == key : break else : NotFoundError If you said the unused import and missing raise keyword,…

python-libfaketime

python-libfaketime March 29, 2015 I recently released python-libfaketime , which makes it easy to mock the current time during tests. It’s also two orders of magnitude faster than freezegun on my laptop. This is because instead of searching for and monkeypatching imported python stdlib modules, python-libfaketime uses libfaketime to intercept c standard library calls. Here’s how it works: the user…

Python Logging Traps

Python Logging Traps November 24 2014 cross-posted at the Venmo Engineering blog Python’s logging framework is powerful, but gives you plenty of ways to shoot yourself in the foot. To make matters worse, logging mistakes are subtle and slip through code review easily. In my time at Venmo, I’ve seen logging mistakes cause everything from unneeded debugging to application crashes. Here are the most…

Adding a vcs dependency to requirements.txt

Adding a vcs dependency to requirements.txt November 23 2014, updated August 27 2016 It’s sometimes useful to point your requirements.txt at code not yet on pypi. For example, imagine you’ve just sent a bugfix PR to one of the libraries you depend on. Instead of waiting for the PR to be merged and packaged, you can temporarily change your dependency to point at your fork. When adding the…

VCR.py at Venmo

VCR.py at Venmo May 1 2014 Recently at Venmo, I spent some time improving our Python test suite. It was in pretty bad shape when I arrived: builds took 45 minutes and tests were flaky. Now, builds take 6 minutes and are much more dependable. I was asked to write up some blog posts describing our changes, and I decided to start with mocking external interactions. The full post is at the Venmo…

Staying Busy

Staying Busy April 17 2014 I’ve been with Venmo for about six months now, and everything has been great! I’ve worked on all sorts of things - security fixes, features and performance improvements among them - but my main concern has been our test suite. When I first showed up, our builds were flaky and took nearly an hour to run. Now they’re much more stable and run in five minutes. I’ve got some…

Google Helpouts first impressions

Google Helpouts first impressions November 7 2013 Google Helpouts launched on Tuesday. If you haven’t heard of it, it’s a peer-to-peer platform for getting expert help. Naturally, Google Hangouts are used for the actual sessions. I used to provide free computer science tutoring when I was in school, so I figured this might be a nice way to keep giving back. After getting into the private beta a…

Strangers, Go, and Openshift

Strangers, Go, and Openshift July 31 2013 I’ve always liked the idea of Omegle : one-on-one text chats with strangers. I also hang out in irc a lot, and thought it’d be fun to combine the two. This wasn’t a new idea, but since the Recurse Center is all about learning by exploring, I built an Omegle to irc bridge with Twisted. When I hooked it up in #rochack , someone had the idea to have the…

Python protobuf on Google App Engine

Python protobuf on Google App Engine June 18 2013 Today, if you try to use Google Protocol Buffers on App Engine, you’ll run into an error like this one: from google.protobuf import descriptor ImportError : No module named protobuf The problem is that Google’s own App Engine apis also use the google package namespace, and they don’t include the protobuf package. Thankfully, there’s a simple way to…

Chrome extension hacks: Google Music to turntable

Chrome extension hacks: Google Music to turntable June 5 2013, updated March 18 2017 If you’re selling an extension, check out my project Analytics for Google Payments . I just shipped my first Recurse Center project: a Chrome extension that scratches a personal itch. I use turntable.fm every now and then, which lets me dj music with friends. There, I can search for a song, and if someone has…

gmusicapi retrospective

gmusicapi retrospective May 14 2013 gmusicapi has come a long way since I pushed my first commit back in January 2012. The project has grown more than usual during this semester, since – for the first time – I worked on it for school credit. Here’s what I spent my time on: a number of big features: scan-and-match support, album art operations, Music Manager OAuth support, python 2.6 compatibility.…

Development on a Chromebook: an opinionated guide

Development on a Chromebook: an opinionated guide April 20 2013, last updated January 6 2017 I started using a Samsung 550 Chromebook as my on-the-go machine two semesters ago. It worked nicely for taking notes, but I remained a skeptic: how could I ever write code from a glorified web browser? Fast forward 6 months: today, I love hacking on my Chromebook, and I have no problems working offline.…

Tough cookies: a debugging story

Tough cookies: a debugging story February 14 2012 I used to think of (web) cookies as simple key/value pairs. That was before I spent an hour tracking down a bug in gmusicapi . The symptoms were simple. The user would successfully log in. Then, on their first request to a web service endpoint (eg music.google.com/loadalltracks), Google would reject their request and redirect them to a login page.…

What's in a genre?

What’s in a genre? September 07 2012 I’m taking a course on data mining this semester. Our first assignment: mine some data. The dataset and techniques don’t matter; the point is to extract meaning in any way possible. I’m greenhorn data miner; hopefully I’ll be able to look back at this post and laugh at my own naivete. For my dataset I chose my own Google Music library. It’s unique, big enough…

Returning to the east

Returning to the east August 29 2012 I spent the summer as a Google intern at their Mountain View headquarters. Having recently returned to the east, the California sun has now melted into Pennsylvania rain; it’s an anticlimactic end to an otherwise fantastic summer. Google exceeded my expectations. I arrived skeptical, expecting to see their world-famous perks masking a typical BigCo™ culture -…

Cold-email a VP, publish in Phrack

Cold-email a VP, publish in Phrack April 14 2012 In the popular sense of the word, I’m no super-hacker. While coding, my sunglasses and fingerless gloves stay on the desk. My collection of sexy trenchcoats is also lacking. ( credit ) Despite these disadvantages, back in September I discovered a vulnerability in the web interface of a Netgear wireless router. Now published in Phrack , my exploit…