You know that things are getting serious when supermarkets run out of toilet paper.
You know that things are serious when when hardware stores run out of woodchip wallpaper.
Protocol buffers, Google’s own data exchange format, love em or hate em. They don’t work particularly well on Android because the proto compiler spits out enormous blobs of Java code. Even empty messages will already result in around 15Kb of source and declare more than four dozen methods. Raccoon needs to implement 75 message types in order to talk to the Playstore. That comes down to a bit more than 3 Mb of uncompressed bytecode, scattered across 310 class files with more than 70k methods.
When they came up with Dalvik and the DEX format, they pulled a Bill gates: 65k methods should be enough for everyone. Surprise! Who’d ever think that there would be apps including giant blobs of generated parser code.
So, I don’t want to build a multi DEX APK. Luckily, there’s a protobuf-javalite runtime, promising a smaller footprint (it’s actually what the Playstore APK uses as well). Surprise! I still exceed the 65k limit, plus the normal and the lite runtime don’t seem to be API compatible, so I can’t make a raccoon library that works out of the box on PC and Android. Thanks Google! You really put an effort into making Android a compatibility hell on every level!
Arguing that people should allow governments unlimited access to their private life, by pointing out that they are already on Facebook, is about as dumb as arguing that it is ok to hack people’s middle finger off, because they’ve already lost a thumb to the buzz saw.
Gradle is annoying me. I got an artefact that depends on another artefact which I got in three different variants (there might be more in the future):
These artifacts provide protocol buffer parsers required for communicating with Google Play. Exactly one of them is required. Slim and Nano implement fewer message types (Full exceeds some resource limits on Android), but otherwise all three have the same API. The idea is that they are drop in replacements for each other. Pick and choose, the rest of the library is agnostic.
With Maven, there are optional dependencies, Gradle has this very elaborate “feature variant” concept. Really, by now, I’d be happy to simply omit those artifacts from the dependency graph, but then Gradle can’t build the APK downloader library itself.
It’s dark outside, you are doing some late night coding in a bright lit room and suddenly you become aware of two yellow slitted eyes silently staring at you from an arms length away through the basement window…
Days are getting shorter again, meaning I get to see a lot of front door’s with blue LEDs on them. A fingerprint scanner, no doubt. How serious can you take a security solution that advertises its presence to passersby across the street?
(Using biometrics to unlock anything is a dumb idea anyways. Would you install a traditional front door that doesn’t allow for changing keys?)
Looking at a VPN provider for a client. Their website informs me that my status is currently “unprotected” and my online activities can be spied upon!
checks the HTML code of that page
Google Fucking Analytics!
PLEASE MAKE THE PAIN STOP!!!
Progress: We moved from Visual Basic to Node.js…
Well, that was a waste of time. Raccoon and Google Play communicate with each other by exchanging protocol buffer files (think: binary XML). The problem with protocol buffers is that Android only supports 64k methods per DEX file and the protoc compiler exceeds that limit effortlessly. Of course, Android also offers a dirty hack to put more than one DEX file in an APK, if you are willing to bundle yet another compatibility library. I’m not, so I thought that switching to java-proto-lite would be a good idea. Lo and behold, the proto parser code shrunk by a magnitude! Sadly, the lite runtime doesn’t work with the proto2json export library. So yeah, lean code or being able to cleanly export pb to json. Tough choice.
Horrible job interview questions for future Android developers:
In your own words, what is a Context?
(Watch em squirm)