I don't like to predict or set expectations for following years, so instead this is just a small recapitulation of the key aspects of my 2017.
I switched job again (sigh). There's a saying, "things don't change unless you make them change". Sometimes change is hard, so as the company wasn't going to change to my expectations/desires I was the one that changed. And it is a pity as technically I cannot be happier to work there and what we already had but... At least I'm betting strong on the current one and so far I'm really happy (fingers crossed!). Also was a good exercise to do some CV cleanup and simplification, plus the small transparency exercise of adding the reasons of leaving each past position.
I'm in love with Python: After two years using it almost daily, it has some not-so-beautiful things but is so simple, powerful and yet nice to write into. Plus the huge ecosystem, the nice community around it... I'm doing all new experiments and pet projects using Python 3 and even started to give talks and participate at meetups again!
My grandfather died. After months with weekly visits to see him, the inevitable happened. But hey, I really wish to reach 95 as he did (working a garden until being around 90 years old!). This also affected my decision of changing jobs, I needed peace to settle my mind and for the first time in my life I gave my resignation letter with the idea of going home and then doing more interviews.
Talk less, do more. My twitter activity keeps at low levels, but I've done more pet projects than past years and managed to at least write one blog post per month, also tending to be of more appeal or at least have more techy content. I still have lots of ideas but at least some of them materialize now.
Letting go of things. I had hundreds of books, dozens of boardgames and book RPGs and lots of other "tangible decorative things", ranging from a LEGO Death Star to old videogame consoles. Now I keep a few dozen books, very few boardgames and excepting my miniatures (painting is really relaxing when I can spend some time) most decorative things are gone. I even reduced my hobbies both in number and in scope. I feel much better, like I have time again both to do geeky things and to spend time outdoors, with the family and the pets, etcetera.
Read more. Here is a partial ok only. Had a few periods along the year that I couldn't focus on reading as much as I'd wanted, or just needed distractions to ease my mind (videogames, movies, ...). I am hearing a lot of podcasts, watching some talks every month, and doing some online video courses (AWS, now a Google Cloud Platform ongoing one), but one of the points to improve for next year is reading a lot more.
Positive stance: Less complaining, more trying to be part of the solution instead of the problem, or else shutting up and moving on. The attitude of removing toxicity from my surroundings keeps improving things (even if I create a kind of echo chamber). Life is too short to spend my energies with bullshit.
JSON-schema for REST API tests
I wrote a blog post about using JSON-schema to build tests for REST API endpoints that output json at ticketea's engineering blog, so instead of just re-posting I'll just link it: https://engineering.ticketea.com/using-json-schema-for-rest-api-endpoint-tests/
It's a small yet interesting example, and will probably serve me as a quickstart for any future django project as it contains useful bits like:
- classless django views
- an example of pytest-django and two useful features it provides (the
client fixtures). I'm loving the concept of not needing to write scaffolding code
- a small usage example of json-schema :)
Recommended Articles - 2017/11/10
Still a big list but improving from past ones ;)
- "Before scaling up your methodology, consider scaling down the mess. That often is a better solution" @gasproni
- The /bin/true Command and Copyright: An incredibly stupid example of copyrights, thankfully the solution is easy and faster.
- Exploding Git Repositories: Similar to XML bombs and Zip bombs, now how to OOM your repository server.
- Loot Boxes Are Designed To Exploit Us + Gamers Like Opening Loot Boxes Too Much to Stop Now, Even at the Expense of Balanced Gameplay: In the past we had the physical collectible kiosk cards (about movies, TV series...), now is the digital era, but everything is so much simpler to grab your money. I personally hate this mechanics in videogames so much I either don't play them or just cheat the "money" to get unlimited units (if is a singleplayer game), but on the other hand games like Diablo 3 have been abusing the psychology of (perfectly calculated) random loots since before this loot boxes madness... The only videogame I see balancing this pretty well is Hearthstone (but because there I think devs make you pay for playing arenas/tournaments instead of for the cards themselves).
- NGINX Rate Limiting: Interesting article on how to use Nginx's builtin rate limiting features to control HTTP traffic bursts
- Severe flaw in WPA2 protocol leaves Wi-Fi traffic open to eavesdropping + Key Reinstallation Attacks: Breaking WPA2 by forcing nonce reuse: Very severe Wifi issues... read carefully both links to know the scope and small mitigation steps, but let's hope router manufacturers rush to provide patches.
- Introducing Lifecycle Policies for Amazon EC2 Container Registry: ECR is slowly getting better, now supporting specifying policies to kill old container images.
- Finding Truth in History: Some highlights: "History does not reveal causes; it presents only a blank succession of unexplained events"; "...its complexity makes it difficult for us to learn exactly why things happened the way they did"; "Finding truth in history is about understanding that this truth is not absolute".
- One person’s history of Twitter, from beginning to end: A melancholic story of Twitter from its early times to the hate pool it is now. Plus this sentence from the text: "when leadership doesn’t want something fixed it’s close to impossible to fix it. And when leadership doesn’t see something as a problem, it’s not getting fixed at all"
- Our minds can be hijacked: the tech insiders who fear a smartphone dystopia: It seems I'm not alone, and that there are way more extreme cases than just wanting to keep (some) privacy. Very interesting read, which also touches the "variable rewards" topic (loot boxes thing)
- Activision patent matchmaking system pushing microtransactions: If loot boxes issues weren't enough, now this... unbalancing and tweaking matchmaking rules to maximize benefit from buying virtual items and faking for you a sensation of having done well (by matching where your new shiny object outmatches other players who didn't paid for it). So sad to see videogames evolve to this.
- Documents obtained by Privacy International show that UK intelligence agencies may analyse our Facebook and Twitter accounts: The title says all...
- Why Trello Failed to Build a $1 Billion+ Business: "Why I wish I'd sell a company for 425 million dollars". Not a bad read but I personally disagree with the point of view of making your product bigger, fatter and full of features "to better sell it". IMHO Trello decided to stick to a "everyone gets most features" plan and kudos for that (and for the money of the buyout).
- The pitfalls of A/B testing in social networks: On the complexities of A/B testing, community-based A/B testing and specific dating sites challenges. Interesting reading, and I agree with the "you can't really trust anything from an A/B test in social networks" sentence (except maybe if you're Facebook with so many millions of users).
- Adding Kubernetes support in the Docker platform: Unexpected but interesting move!
- Hey Siri: An On-device DNN-powered Voice Trigger for Apple’s Personal Assistant: Extense and detailed (at least for noobs like me) article on how Siri works, really interesting reading.
- Why Surge Prices Make Us So Mad: What Springsteen, Home Depot and a Nobel Winner Know: Really interesting the "please the fans" approach of not too high ticket prices despite demand. Well, and in general the whole article is worth reading. Again Uber gets some hits for being the bad example...
- Windows now includes gaming cheat detection at the system level: Ugh... I'm stuck with Windows 7 for gaming and as time goes by, reasons pile up to keep doing so. Hopefully as almost nobody uses the Universal Windows Platform won't gain traction but I really dislike this invasive "protections".
- Nielsen says it can now measure Netflix streaming: It all sounds "curious" until you realize that in order to measure what you're watching, they have to be listening, right? And with this smart TVs that have already been proven multiple times to send data to the manufacturers, could now mean you might provide that data unwittingly...
- Polygonal Planet Project, a study in tilesets: Beautiful WebGL mini-planet renderer
- Chrome Dev Summit 2017: All the videos from this Google event.
- Pay with Google and speed through checkout: New payment system which promotes both a quick process and no transaction fees... which is nice to hear but makes me wonder if they either want to enter the market or they plan to monetize your shopping behaviours, etc.
- The scale of tech winners: " the four leading tech companies of the current cycle (outside China), Google, Apple, Facebook and Amazon, or ‘GAFA’, have together over three times the revenue of Microsoft and Intel combined (‘Wintel’, the dominant partnership of the previous cycle), and close to six times that of IBM. They have far more employees, and they invest far more."
- Firefox 58 warns you if sites use Canvas image data: Nice that at least one browser cares about this and removes the need for extensions/addons...
- Google Colaboratory: Basically they've setup a free google-hosted jupyter notebook.
- Amazon Aurora with PostgreSQL Compatibility: Amazon keeps growing their could-provided database services... 3x throughput, 6-way replication and up to 64TB, not bad for huge amounts of data!
- Cloud SQL for PostgreSQL adds high availability and replication: And Google Cloud Platform fights back against AWS by also offering their hosted PG with steroids.
- DjangoCon US 2017 and PyGotham 2017: Talks from this two Python-related events are available.
- new "Activity Recognition" Android permission: that shares with apps whether you're walking, driving, sitting... Another darky step, especially since you cannot disable it!
- uncaptcha: 85% success rate defeating Google Captcha (via the audio mode) is quite decent for automation...
- Big data meets Big Brother as China moves to rate its citizens: I'm speechless...
- How the Frightful Five Put Start-Ups in a Lose-Lose Situation: From Spain the scenario doesn't looks as grim, but at least there's hope with some of the new players that enter the market, but it is true that many huge companies eat smaller ones and then they dissapear (and their products die)
- Mobile @Scale 2017 recap: Quite out of the ordinary scenarios but no less interesting talks
- A list of everything that could go in the
<head> of your document: Very cool resource for html templating.
- Documentary on the 80s and 90s Demoscene: The Art Of The Algorithms: Youtube documentary about the Hungarian demoscene. A bit narrowed on scope but still interesting to watch if you like the topic.
- How Netflix works: the (hugely simplified) complex stuff that happens every time you hit Play: Nice entry-level description of how Netflix (but could be generalized to video streaming) works.
- "What's the difference between AI and ML? It's AI when you're raising money, it's ML when you're trying to hire people" @WAWilsonIV
- The Numbers on Your Memory Card Explained: To handle with the mess of speeds, compatibilities and strange codes on them.
- One Bitcoin Transaction Now Uses as Much Energy as Your House in a Week: It is sad that is not a greener option (and seems to be getting worse as transaction calculations cost grows).
- Waymo's fully self-driving cars are here: Despite being a seemingly low-risk scenario (I can’t imagine yet in a huge city center), level 4 self-driving cars and this video look to me like real science fiction.
- GitHub welcomes all CI tools: Nice list of the most used Continuous Integration tools. It is a bit mixed as some like Jenkins don't offer SaaS while CircleCI or TravisCI do, but based on my experience I highly recommend any of the top 3 ones (top 2 if you don't want to self-host and maintain it).
- PostGIS Performance Profiling: Good intro to what happens when you render map tiles regarding using PostGIS and some optimizations.
Overwork and/or crunch time is a recurring topic in the tech industry. From the videogame industry where it can be normal to work +80 hours per week during months to consultancy or startups, more or less everyone has at least once had some overtime experience. After a long time working in the industry (since 2001, fulltime since 2003), I've had varied examples and situations, so instead of just saying "wooo it is terrible!" why not sharing them as a small recapitulation.
Note: This is solely my experience and I talk about my personal overtime experiences, except when explicitly noted.
My first crunch was at a client working at ilitia. We were developing a Windows Live Agents bot (at 2008, who said bots are new in 2017?) for one of the major political parties and we were approaching a hard deadline: Either we shipped before a certain date, or Microsoft couldn't guarantee the bot would be online in time. So, two days before the deadline my colleage and I decided to setup camp at the client office and not move until done. It took 29 hours and so much coffee my colleage's hands were trembling a bit by next day's morning, but we sent it on time.
At Navteq we had a .NET server + J2ME mobile application for the Spanish market used at some relevant events (like "La noche en blanco", a night where most bookstores open at Madrid). When I joined it had severe performance issues rendering the maps and we had an event soon. I took the work laptop home and during most of the night rewrote the entangled server logic so it would serve hundreds of mobile requests per second with the same server hardware.
At Tuenti we kept an internal joke that if we were paid all the extra hours poured in, we'd all be rich (aclaration: we had bonus, performance evals, salary raises, etc.). In my case I tried to stick to the schedule, but there were two recurrent exceptions: I had so much new things to learn I had to frequenty spend hours and hours weekly reading books, articles or source code to be productive coding the next days. And then, more or less yearly we had some big redesign project that usually sucked up the whole tech and got us working overtime for a few months. Sometimes was just a few extra hours per week, other times way more hardcore, like working 13 days in a row, then one sunday "off", usually 10 to 12 hours at the office.
Other examples from other companies are preparing going to launch the new shiny website, that we had been months building and had a branding campaign signed so we had to stay for 20-something hours at the office until we got all the pieces working (and had to do a few horrible last-minute hacks to ship in time), or being at Manhattan debugging problems and publishing hotfixes on a friday night from a bar, switching laptops as the batteries were draining.
In general I think overtime can be justified when it is a special situation, something extra and rare that justifies the extra effort. Overtime causes damage, whenever short-term (sleep issues, zombie-state for a few days, loss of focus) or long term (I left Tuenti in part because after the 4h redesign crunch I got tired and was affecting my personal life). But what it most frequently ends up causing is burnout. I've also seen great, awesome engineers write buggy and messy code due to extended periods of time of sleeping few hours and working insane amount of hours, as tests are sadly the first thing that tends to get cut when under time pressure.
Because of those situations and others I've ommited, I now control a lot my overtime. It is also for the good of my employer, as if I get too tired my productivity will decrease and I'll have more mistakes.
If I'm allowed flexibility I do provide also flexibility: One day I'm late because of a home emergency? No problem, next day I'll make for it. I'm asked to come at 6:30 AM at the office to support a critical release? Fine, as long as nobody complaints if I also go earlier home to rest. But that's not even overtime :)
On the contrary, I've also refused to do on-call when the company was expecting us to do it unpaid and as a norm (truth be said, in the end an on-call was setup).
I'm proud of some of the times I did overtime because I think it was really worth it, other times still agreed to do it because was good for the company (if not so critical), and very few scenarios there was really no other choice without getting into a violent confrontation so I though best to go ahead and take actions later on. But also learning to say no is a skill you develop (and you must).
Things that I do not consider overtime are extra activities in which I participate willingly, although there can be some peer pressure with time you develop resistance to it and I think I've never been manipulated to do them (in fact I quit from some when they weren't fun anymore). Some real examples:
- At ilitia, we setup a CDi ("Club de Desarrollo ilitio"), once per week staying at the office with some beers to do brainstormings, pet projects and think about possible things to build (at the company) to make some money and separate from consulting services. We did product requirement documents, we built proof of concepts, but the general idea and willingness diluted away after a few months
- At Tuenti, we had quarterly HackMeUps, 36-hour hackathons starting thursday. Some were great on the fun part (have drinks and long talks with colleages until late), some on the tech side (quite a few projects ended up in production after some polishing)... I didn't won any but tried to participate in most and usually stayed either all night or until late
- Despite being shy, I like explaining what I know (not much), usually giving talks at user groups and sometimes conferences. I might spend some work time on thinking and peer-testing the talk, but I prefer to spend a few hours at night without any rush thinking the content, the structure, the main goal...
"Work hard and go home" - Slack company motto