Cover photo
Stefan Hoth
Works at Novoda
Attended HTW Berlin
Lives in Berlin, Germany
8,630 followers|12,663,206 views


Stefan Hoth

Shared publicly  - 
I just want to note that +The New York Times is running this as a headline. About a terrorist. 

I've got a more serious article brewing in my head about the entire situation – not merely the attack in Colorado Springs, but the attack in Minneapolis a week before, and the fact that there's a rising tide of terrorism within the US which both the media and the government seem determined to ignore – but that's not for tonight.

Right now, I just want to point out that when members of the radicalized far right in the US commit terrorist acts, they get human-interest pieces about their lives. Compare this, for a moment, to the stories we get when Muslims commit terrorist acts abroad (since they almost never do in the US): "should we expel all refugees?" Or the stories when an unarmed black man is gunned down, analyzing what he did that made someone shoot him.

And note that the radicalized far right has been the source of nearly all the terrorist attacks in the US for the past century and a half: the exceptions can be counted. (Anarchist and communist terrorism in the early 20th century; a few incidents from the radicalized far left in the 1960's; and 9/11) Yet this is how we choose to set our priorities.

If I had not already been disappointed nearly beyond repair at the common sense of the editorial teams of many of our major newspapers, this would have done me in. 
31 comments on original post
Add a comment...

Stefan Hoth

Shared publicly  - 
TL;DR: If you're doing bytecode instrumentation as part of your Android build, or if you are providing plugins that do instrumentation, and you want it to work with Instant Run, you need to switch to the Transform API.


While it's currently possible to add bytecode instrumentation to the build process, there is (was) no API for it. The general mechanism was to find the dx task, grab its inputs, and replace them with your own outputs. Then the tasks dependencies had to be rewired to include the new intermediary task.

This is problematic for several reasons:
- It's impossible to differentiate some of the inputs (sub-modules vs external libraries)
- Dealing with legacy multi-dex makes it harder as the computation of the main dex class list must also include the output of the instrumentation.
- combining more than one third-party instrumentation is fragile and prone to breakage.

On top of this, this will simply not work with Instant Run. While the original build of the APK does go through the regular build steps, the hotswap mode runs different tasks.

During a regular build, Instant Run adds the following steps:
- Instrumentation of the project classes to add an indirection for code replacement.
- Copy of the classes to compare later and produce the override class.
This must happen after any third party instrumentation, which is not possible with old the mechanism of hooking up instrumentations (since they are added at the end just before dx).

During a hotswap build, Instant Run will run javac, and then compare the output to the previous build output to generate the override class(es). Then, it runs a different dx task that only dx the override classes and nothing else. This flows is very different from the regular build and the old mechanism of hooking up instrumentation would completely miss this.

To fix this, we created the Transform API. Its goal is to provide an API to hook up first and third party instrumentations into the build process. The API does not deal with Gradle tasks, but instead handles what needs to be instrumented, with the plugin doing the task instantiation and wiring.

For information about the transform API please see here:

The Transform API is currently in beta, and we'd like to stabilize it as soon as possible, so we'd love to get feedback. Please join our development Google Groups and give us your feedback:!forum/adt-dev

2 comments on original post
Add a comment...

Stefan Hoth

Shared publicly  - 
Now that Focus 1.1 release is out and healthy it's time for the heavy duty stuff.

I've been playing a bit with my Nexus 6P, mainly Kernel stuff. Couple interesting points:

 - This is the most up-to-date with CodeAurora that a Qualcomm based Nexus has ever shipped. And trust me, they tend to ship with really old rebased Kernel trees from CAF...

 - There's an interesting new way for Google to group cpus into sets which allows the framework to "queue" tasks specifically to certain cpus (not sure it's the most correct way to explain, but you kinda get the picture). So for example on the N6P they've set the cpus 4 to 7 on a special "boost" cpuset which will be used for special fast bursts such as opening an app or some very high priority request (maybe I/O?) and they've set 0 to 4 to deal with background tasks with a nice level above of >= 10 (by default a background thread on Android defaults to 10). It's interesting to see a multi-cluster chipset being used like this with this new cpuset (which is basically the reason why multi-clustered socs exist in the first place)

 - They set the min frequency of the high performance cluster to 634MHz for some reason I haven't figure out yet. On FK I've set it to 384MHz to test. Hopefully will be able to see some battery improvements (not that the battery is bad in the first place but #batteryperfmatters )

 - The low power cluster goes to 1,5GHz and the high perf goes to 1,9GHz. I don't have numbers to back me up, but I would much rather have something like 2,3GHz low perf cores and 1,3GHz high perf or maybe some other setup with pairs of cpus with different max freqs. Maybe I'll play with this sometime

 - Input boost frequency on the low power cluster goes to 1,3GHz (at least for full second). If the high perf cluster has a special cpuset for burst activities I wonder if we need to have such a high input boost freq. I'll play with this. Maybe we can find a sweetspot without hurting performance

 - The I/O is amazingly fast on this device. Considering it's Encrypted this is a huge achievement. Sequential reads and writes are coming close to the early desktop SSDs. If oems start using something similar to Apple's storage solution we'll have blazing fast I/O in the near future. Unfortunately (or maybe fortunately) Apple's way ahead of every other OEM on this by shipping almost SSD grade storage solution (yes they don't use eMMC on the 6S)

- Stock Kernel still ships with a high value of uninterruptible threads increasing the runqueue value. I know we have 8 cpus and ideally we can allow for 1 task per core, but then it loses some headroom. It's like a road with 8 lanes, it can have 8 cars running concurrently, but if you add more they have to be queued behind. The first thing I did was trying to reduce this number to something acceptable. My 6P currently has a load average of 1.38 which compared to ~8.00 on stock Kernel I think it's pretty fucking good. I think Google Kernel devs have started to work on this - they added a patch on their kernel_common with a tracer inside the scheduler to identify this things
 - Google now inits all the power/perf default settings from inside /system/bin/ so you can't mess with Google's default values from a standard init file anymore. You can overwrite their values on the ramdisk, but you can't edit the file anymore

 - I think mpdecision binary is gone and core management (and all the decisions of when/if they should be online or offline) is now handled by msm_performance driver inside drivers/soc/qcom/. The driver is huge, I doubt I'll touch it, but I'm happy to see this handled in-kernel. If there's a userspace daemon somewhere I haven't found it yet

Sorry for some rough language, I just wrote what came on my mind.

I think I've dumped everything I can remember for now.

In a couple days I'll give my thoughts of the 6P and how I feel about it after transitioning from an iPhone 6/6S;

TL:DR - fucking read the post.
32 comments on original post
Add a comment...

Stefan Hoth

Shared publicly  - 
Just. Listen. About a parallel universe that women live in.

/via +Ann-Katrin B​
There's this thing that happens whenever I speak about or write about women's issues. Things like dress codes, rape culture and sexism. I get the comments: Aren't there more important things to wor...
Mona Sturm's profile photo
Add a comment...

Stefan Hoth

Shared publicly  -
Hey gang, it’s finally here! My first ever official charity tee. Proceeds from every shirt sold benefit the amazing work of St Jude Children’s Hospital. Available for 2 weeks only and then gone forever! You know you want one ;-) Get yours here:
111 comments on original post
Add a comment...
Have him in circles
8,630 people
Daniel Koller's profile photo
Stanley Waita's profile photo
arinda daniel's profile photo
David Poole's profile photo
Elliott Abraham's profile photo
luxury “shopping” Hu's profile photo
Mark James's profile photo
Dario Urbanski's profile photo
Craig Pardo's profile photo

Stefan Hoth

Shared publicly  - 
It took a while but it's finally here: Introduction to Eddystone Beacons, learn how to manage them using the Proximity Beacon API

#gde #blogpost #android #eddystone
Bluetooth beacons are transmitters that use Bluetooth Low Energy 4.0 (BLE) to broadcast signals that can be heard by compatible or smart devices. …
View original post
Sebastian Mauer's profile photoFederico Monaco's profile photo
Add a comment...

Stefan Hoth

Shared publicly  - 
Huge thanks to for providing devices for GDG Basel IoT hackathon. Want to hack with us next week-end? ‪#‎onion‬ ‪#‎iot‬ ‪#‎gdg‬ ‪#‎hackathon‬
View original post
Richard Vowles's profile photo
WiFi should be a gateway, not a default. IoT means low power, battery operated, WiFi doesn't cut it. My preference is dash7, and I wish more of these companies would take it up :-( however, awesome Onion put some skin in your conference :-)
Add a comment...

Stefan Hoth

Shared publicly  - 
Ischab ischab ischab Polizei! <3 
 ·  Translate
Julian Vollmer's profile photo
Add a comment...

Stefan Hoth

Shared publicly  - 
They're like regular groups, but super.

Telegram Updated To v3.3 With Supergroups, Admins, And More
4 comments on original post
Add a comment...

Stefan Hoth

Shared publicly  - 
How to name-drop JobScheduler like a pro
Pro-tip by +Joanna Smith

If you have some heavy work to do, and it doesn’t need to be done RIGHT NOW OMG NOW NOW, then I’m going to kindly ask you to use JobScheduler ( Because it’ll get your job done, while using other jobs to intelligently schedule the work to minimize use of the radio, which is a clear battery win. So just do it. Please.

JobScheduler was introduced in Lollipop, and is pretty cool because it doesn’t perform work solely based on time, but rather based on conditions. You can define those conditions when you are creating the job, through the JobInfo object ( For example, you can use setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) for jobs that you want to execute when the user is on WiFi. Or you can use setPersisted(true) for jobs that you want to persist across a potential reboot. Or you can read the documentation to see how to play with other criteria you might care about, from back-off policies to time limits for scheduling the job. (Basically, this is where the magic happens, so spend some time getting this right.)

To build that JobInfo object, though, you need two things every time (the criteria are the bonus bits): a job number - to help you distinguish which job this is - and a JobService ( Your JobService is actually going to be a Service that extends the JobService class. Which means you need to implement a few methods:

+onStartJob() is called by the system when it is time for your job to execute. This is where the one tricky part about JobScheduler exists. Your JobService runs on the main thread. That’s right, the main thread. So use onStartJob() to either perform simple work, or to kick off a background service for complicated work. If you kick off another service, you’ll need to return true, but if you’re done with everything, go ahead and return false.

+onStopJob() is called by the system if the job is cancelled before being finished. Perhaps because the conditions are no longer being met, like the device has been unplugged. So use this for safety checks and clean up. And then return true if you’d like the system to reschedule the job, or false if it doesn’t matter and the job will be dropped._

+_jobFinished() is not a method you override, and the system won’t call it. That’s because you need to be the one to call this method once your service or thread has finished working on the job. This is how to system knows to release your wakelock. If you forget, your app is going to look pretty guilty in the battery stats lineup. jobFinished() takes two parameters: the current job, so that it knows which one we are talking about, and a boolean indicating whether you’d like to reschedule the job. Perhaps your work failed for some reason. This will kick off the JobScheduler’s exponential backoff logic for you (or else the logic you specified in JobInfo).

As with any service, you’ll need to add this to your AndroidManifest.xml. What’s different, though, is that you need to add a permission that will allow this service to be a JobService.
       android:permission=“android.permission.BIND_JOB_SERVICE" >

Finally, you schedule a job using JobScheduler (, which you can get from the system. Then, call schedule() using that super perfect JobInfo object that you created, and you are good to go.

Not so scary, is that? There are a lot of pieces, to be sure, and you’ll need to think carefully about when and what should trigger your job. But it’s actually pretty easy to work with. And that means you can now bring it up in conversation without fearing that you’ll suddenly seem uninformed. You go, you! (But, specifically, go #BuildBetterApps.)
16 comments on original post
Rakeeb Rajbhandari's profile photo
Add a comment...

Stefan Hoth

Shared publicly  - 
“In contrast, the best job applicants I’ve seen sent in their thought process. Sketches. Diagrams. Pros and cons. Real problems. Tradeoffs and solutions. Prototypes that illustrate interaction and animation. Things that move, change and animate. Things that use real data." - These are the people I want to work with, too, the ones that should consider +Novoda​.

/via +Sebastiano Poggi​
Only one of these weather apps is attempting to solve the real problem.
Sebastiano Poggi's profile photo
That's exactly what we look for when we interview designers, in fact :) 
Add a comment...
Stefan's Collections
Have him in circles
8,630 people
Daniel Koller's profile photo
Stanley Waita's profile photo
arinda daniel's profile photo
David Poole's profile photo
Elliott Abraham's profile photo
luxury “shopping” Hu's profile photo
Mark James's profile photo
Dario Urbanski's profile photo
Craig Pardo's profile photo
  • HTW Berlin
    Angewandte Informatik - Dipl. (FH), 2004 - 2008
Basic Information
Looking for
Apps with Google+ Sign-in
  • GDG-X
  • Ropasc Lisp
  • Plague Inc.
  • Fallout Shelter
  • TwoDots
Software developer, community manager and geek living in Berlin, Germany.
I'm Stefan. I'm a software developer so this means I sit in front of the computer the whole day and besides checking all my mail accounts and social media networks I produce software bits which don't work at the first try. Mostly they do after the second or third try.

Besides the work I'm into bringing people together - work wise. I know a lot of people with different talents. So just ask me if you're having a particular problem.

Furthermore I really like to build communities. I'm a co-organizer for GDG Berlin, Berlin Hack and Tell and the Instant Startup Show Berlin. Also I help plan other stuff occasionally. If you think you need assistance on planning developer related events you can contact me as well. I'd really like to help out.

Since the end of 2011 I'm the official German Ambassador to Germany for, an achievement-based social portfolio builder where all bad-ass code monkeys around the globe can be found.

In early 2012 I started contracting for Google to help grow and organize the Developer Programs in the German speaking countries (DE, AT, CH). Talk to me if you want to partner up with Google in this region - I'll try my best to help you.

Also in 2012 I co-founded an initiative called OpenTechSchool which organizes programming workshops and related topics to bring people into tech. We do it such a manner to lower the entry barrier people (often women) perceive in the tech scene. Small groups, calm and helpful coaches, all volunteers from the local community help to create an inviting learning atmosphere. Check it out!

Cheers from Berlin,

PS: Wow, you really read all that? Kudos!
Bragging rights
member of c-base Berlin
software developer, connector, community builder
Android development, web development, community management, event management
  • Novoda
    Android Software Craftsman, 2014 - present
  • OpenTechSchool
    Co-Founder, 2012 - present
  • Berlin Hack and Tell
    Co-Organizer, 2011 - present
  • GDG Berlin
    Co-Lead, 2010 - present
  • Geeklist Ambassador Program
    Official Ambassador to Germany, 2011 - 2014
  • JNamic development
    freelance developer, 2008 - 2014
  • Instant Start-up Show Berlin
    Co-Organizer, 2012 - 2013
  • Google (external contractor)
    Developer Programs Support Associate for DE/CH/AT, 2012 - 2013
Map of the places this user has livedMap of the places this user has livedMap of the places this user has lived
Berlin, Germany
Dresden, Germany - Perleberg, Germany
Stefan Hoth's +1's are the things they like, agree with, or want to recommend.
Swarm by Foursquare - Android Apps on Google Play

Swarm, the new app from Foursquare, is the fastest way to keep up and meet up with your friends. With Swarm, you can easily see who’s out ne

reddit sync

reddit sync is a great new way to enjoy reddit on the go. Easily sync your favorite subreddits for later offline viewing. Reddit Sync aims t

Textra SMS

Let's face it, the stock Android Messaging app really sucks! So time to try something new, but it has to be pretty special, right? It's here

GitHub Selfies

Selfies! For GitHub! Hooray!

Sky Force 2014

The mobile blaster legend is back to celebrate its 10-year anniversary in super-destructive style. Harnessing the intensity of classic arcad


2048++ is hands down the cleanest, most responsive 2048 app for Android.★ Six game modes/variations: 2048, 243, 16384, Blitz, Fibonacci, and


Mit der ARTE App können Sie einen Großteil der ARTE-Sendungen nach der TV-Ausstrahlung 7 Tage lang in voller Länge online (wieder-) sehen. S

Documentos de Google

Crea y edita documentos, y colabora en documentos de otros usuarios, todo desde tu teléfono o tableta Android con la aplicación gratuita Doc

Hojas de cálculo de Google

Con tu teléfono o tablet Android y la aplicación gratuita Hojas de cálculo de Google, creas hojas de cálculo, las editas y trabajas en ellas

Transit App

Wherever you are, just pull Transit out of your pocket and quickly know when the next bus or train is arriving. Not sure what's the fastest


The Google Maps app for Android phones and tablets makes navigating your world faster and easier. Find the best spots in town and the inform

Google Keep

Записывайте идеи и планы, получайте напоминания в нужное время или в определенном месте. Делайте голосовые заметки, и Google Keep автоматиче

Google I/O 2014

The official Google I/O 2014 app was built to be your co-pilot to navigate the conference, whether you're attending in-person or remotely.*

The Walk: Fitness Tracker Game

LIGHTNING SALE - 80% OFF! (normally $4.99) Created with the NHS and the UK's Department of Health, The Walk helps you walk more, every singl

Save 50% In Celebration of Day Against DRM - O'Reilly Media

In Celebration of Day Against DRM - Save 50% on ALL O&#39;Reilly Ebooks &amp; Videos

Talon for Twitter

Get fully immersed in your Twitter with this beautiful, feature PACKED Twitter client with a design that actually makes sense!Created with A

Use Android’s ContentObserver in Your Code to Listen to Data Changes

When you are using a content provider as a client, chances are that you want to know whenever the data changes. That’s what Android’s class

Link Bubble

★★★ "I’m tempted to call this something of a revelation." - The Next Web ★★★ ★★★ "This app may very well change the way I browse the web on



Great little Park with a wide variety of animals. Short ways, beautiful setup and many things to see and do for kids.
Public - 2 months ago
reviewed 2 months ago
Expensive tourist trap. Very slow and very noisy place.
Public - 5 months ago
reviewed 5 months ago
Attentive and friendly staff, nice atmosphere, fair prices and not to forget great food. One of the best places around - and we tried quite a few.
Public - a year ago
reviewed a year ago
It's a very nice cafe with a daily menu for lunch and very delicious breakfast offers. You can go there all day but it tends to be crowded on the weekends and summer evenings. The service is very nice and they offer a free Wifi for customers.
Food: ExcellentDecor: ExcellentService: Very Good
Public - a year ago
reviewed a year ago
18 reviews
Food was OK (not better) but the noisy room and especially the horrible service made for a bad experience. Wouldn't recommend it if you find other options around.
Public - a year ago
reviewed a year ago
Good food and a good mango lassi, too.
Public - a year ago
reviewed a year ago