1,222 karma · joined April 27, 2011
I recently summarized all my projects and my numbers here, if it's of interest: https://www.simonmweber.com/2019/01/07/side-project-income-2...
SQS ended up being the key to making this work: everything is asynchronous, and the js SDK is used to enqueue messages directly from the frontend.
That setup is described in https://www.simonmweber.com/2018/07/09/running-kleroteria-fo..., if you're interested.
If you're curious on the details, I wrote a post recently about getting to $100/month with them: https://www.simonmweber.com/2017/01/09/side-project-income-2....
You're able to change the subscription cost on the fly (I think; I haven't actually done it). The bigger problem is there's no easy way to do price segmentation. This is fine for my consumer product, but I may end up rolling my own payments setup for an upcoming business product.
I'm working on my next, which provides business analytics for Google merchants: https://www.simonmweber.com/2017/03/18/google-payments-cente....
My SaaS adds autoreplies to Google Chat and Hangouts: https://gchat.simon.codes.
You can find the business details in https://www.simonmweber.com/2017/01/09/side-project-income-2....
For business-focused products I usually do a free time-limited full-access trial + paid subscription. For consumer-focused products I usually do freemium (limited version for indefinite use + paid subscription to remove limits).
In the case I run into problems, I'd consider changing the license.
https://autoplaylists.simon.codes: iTunes-style smart playlists for Google Music.
https://gchat.simon.codes: autoreplies for Google Chat/Hangouts. Particularly useful for people with multiple accounts that forward email.
https://simon.codes/2017/01/09/side-project-income-2016-0-to... has more details on why I chose these and how I got started.
I primarily run https://galliumos.org, but keep ChromeOS around for casual use. I'd highly recommend GalliumOS to people interested in putting linux on it: it makes things like the custom keyboard layout work out of the box.
I'm not sure.
Ideally I'd have a site where I can put my email and encourage folks to write me. This has worked better than video chat for me, since:
1) folks rubber duck [1] themselves while writing, so they ask better questions.
2) it's asynchronous, so we don't have to find a matching slot in our schedules (and don't commit to an amount of time beforehand)
I've redirected all my Helpouts schedule requests to email recently and it's worked well.
> Also, why did you do it for free?
I just never considered charging. I don't think I could do so and feel good about it with the amount of free help I've received (irc, SO, hacker school, college...).
Besides the decline in user growth that Google mentions, here are the major problems I saw while using it:
* hosting a free Helpout meant dealing with constant no-shows [2]. I started charging $1/hour and then refunding it to folks who showed up.
* attendees of free Helpouts were rarely prepared
* the scheduling system was very limited (especially compared to Google Calendar)
That said, when everything worked, it was an amazing experience.
[1] https://helpouts.google.com/103350848301234480355/ls/a344f06...
[2] https://simon.codes/2013/11/07/google-helpouts-first-impress...
[0] http://www.washingtonpost.com/blogs/the-switch/wp/2014/12/19...
Shameless plug: gmusicapi has plenty of contributor-friendly work for all skill levels. If you're interested, shoot me an email or feel free to dive right into some issues.
Why not write a function? This addresses all of the objections. Then refactor by pulling out concerns into other functions.
Need to share logic around the functions? Use a decorator. Passing too many attributes? Create a class to contain them.
I think classes are best avoided until it's obvious that encapsulating state provides a benefit, which I don't see in this case.
If you're looking for more on this topic, Brandon Rhodes gave an excellent talk on this at PyCon US last year [0].
[0] http://pyvideo.org/video/1676/the-naming-of-ducks-where-dyna....
In 2.7+, I'd recommend a dictionary comprehension instead.
There are also tricks you can use to escape. For me, scrunching my face and wiggling my toes always worked consistently.
Generally, though, I think the situation has interesting parallels to piracy. Companies have many options on how to respond to unofficial use:
- cracking down on unofficial users == chasing down pirates
- attempting to control unofficial use (probably at the cost of normal usability) == DRM
- embracing unofficial users == the "piracy as free marketing" view
- viewing unofficial users as a sign of a specific weakness in the product == the "piracy as a service problem" view
I suppose that would make the original reverse engineer similar to someone who cracks a game's DRM?
It can get really hard to tell where the line is, though. For example, multiple for-pay third-party clients for Google Music now exist [0]. Personally, I think this is still a value-add for Google, but I could understand why some would think it's exploitative.
Another thought experiment: say the unofficial use of the platform originally required a fair amount of reverse engineering. Can the person who figured it out be held responsible for other's abusive behavior?