The perfect messenger

There are so many messengers around but none of them seems to meet the criteria I have for a reasonably secure messenger.
Since this gets discussed over and over again, here are:

My Requirements for a messenger service 


  • If there are one or many central operators/brokers/hubs, they can not read ANY messages past, present or future
  • encryption is always end to end.
  • I can change between my different devices and continue a chat (key exchange between my devices)
  • end to end encrypted group chats (this basically means changing keys and distributing them to all participants whenever someone joins or parts) 


  • I can have multiple full identities (not just usernames as aliases that share a profile image+text+contacts-list)
  • I can receive and send messages as all my identities at the same time (no logout+login)
  • Nobody can find out IF I am using this type of messenger at all by knowing my phone number 
  • Neither my phone number nor any other information about my real world identity are stored with the operator (exception for temporary storage of IPv6/IPv4 addresses)
  • optional: If there are one or many central operators/brokers/hubs, they can not know the identities that communicate with each other
  • optional: I can set up my own server/hub/broker


  • texts, images and locations can be shared
  • one to one and group chat 
  • there is a chat history that I can access from all my devices (my be stored encrypted with my own key on a server or local on the client)
  • optional: videos can be shared
  • optional: voice and/or video -chat
  • optional: voice and/or video group-chat


Nexus 7 repairs

The USB port on my generation 1 Nexus 7 tablet (with GSM SIM card) was getting wonky and more often then not it refused to charge.
Luckily the replacement part is cheap.

...while at it I got myself a very nice set of phone-opening tools with scratch-free plastic hooks, spatulas, suction cups, wedges, cleaning tools, scalpels, metric <2mm a="" and="" full="" nbsp="" of="" p="" screwdrivers="" set="" tiny="" torxes="">...I just can't resist a good set of tools.


    Ciclop 3D scanner

    old and busted:  FabScan

    I have a FabScan Cube (build from the kit sold at Wattenrott) for quite some time now. However I'm massively disappointed by the software. The last software (100.9) that supports MacOS is neolithic and can no longer be used since MacOS 10.9 "Mavericks".
    There is a processing script to use the scanner but calibrating it is a game of guessing and source code manipulation. If I got a scan out of it at all (very touchy about environmental light), it was all ball shaped and incomplete.
    A new software (that requires a Raspberry Pi) was promised to be released half a year ago...it never happened.

    new: Ciclop



     So being fed up with the FabScan, I got myself a completely new Ciclop scanner as a factory made kit. The parts are 3D printed very well and everything more or less fits.
    You can 3D print the parts yourself and just get an electronics kit and a number of nuts, bolts and (metric) threaded rods.
    • The scanner is not  stable against torsion forces. So it must rest on a perfectly flat surface.
    • The stepper movement is not very gentle. So any flexible object will move around during scanning.
    • It does require 2 USB ports and 1 power socket (to power the stepper motor).


    Horus is the software that is supposed to operate with the Ciclop.
    It looks very easy to use but seems to still have some practival issues in doing the automatic calibration. Notable one but where it will constantly tell you that the stepper direction is wrong.

    I haven't gotten it to scan using 2 (or more) lasers yet as this results in 2 scans that don't match up at all. With a single laser it has a very limited scan volume and your object should contain all parts of the axis of rotation inside itself but it does work.
    I haven't gotten around to check if the physical dimensions as replicated precisely yet and that there are no distortions.


    Debugging Android Wear support for K-9 Mail

    I started a branch to develop proper Android Wear support for the popular K-9 mail client.
    The last few weeks I was grinding on a strange error.
    It would create PendingIntents for the different actions for each individual message.
    Because on Wear the messages are shown as a stack and you can act on each of them.

    What I found was that it would issue the right action...on the wrong message.
    Always the firt message of the notificaiton.

    I think I found it.
    PendingIntents are not created. They are requested.
    If the same PendingIntent already exists, it is returned.
    The "same" means same Action, same Data, ...  But not same Extras.
    The message ID was transmitted as an Extra.

    This was no problem up to now, because most people you would only ever have one notification.
    But even in the existing code this bug would have hit (and hit hard inc ase of the  "delete" action) if you have multiple accounts configured and choose an action on the second notification, you would get it with the parameters of the same action on the first notification.

    I'm considering the Android Wear branch of K-9 to be BETA-quality now
    and am using it myself daily to find bugs.


    printing working threads on an Ultimaker II extended

    Even at 20 micron and less layer height, most theads have too many threads-per-millimeter/threads-per-inch to be reasonably 3D printed.
    I'm regularly using a thread cutter on 3D printed parts to do this instead.

    Now I have some  solenoid valves with a very strange NPT1/2 thread.
    This is a very rare imperial sized, trapezoidal (getting smaller, not staying at one diameter)
    thread with only 1,814mm per thread instead of 1mm.
    (BTW NPT1/2 isn't even near 1/2" in size. )
    So it looks like a perfect test to 3D print the thread without cutting.

    Due to the extreme heat recently, I had some issues with my Ultimaker II extended at first.

    But int he end it worked out.
    Here is the same thread printed in normal quality,  high quality(at 200% speed) and ulti quality (40 micron).
    The (at first) strange result it, that the thread printed at normal quality was far more clean then the other ones.
    ...that is until you think about a thread as one giant overhang. A thicker layer-height seems to work better for overhangs as it's not as compressed by the next layer. This is no problem in solid areas bu when there is air below the layer...you can guess.

    Fits perfectly!


    implementing K9 mail wear support - stacked notification issue

    I'm currently implementing K9 issue 619 "add Andoid Wear Support".
    You can find the code in branch issue-619_AndroidWearSupport.
    Basic support to delete(if no confirmation on the phone is configured), archive and spam all messages  of a given notification is done and working well.

    My currently issue is that I added stacked notification exactly as documented.
    The problematic code starts in MessagingController:4941 .

    My summary notifcation is only shown on the phone, not the watch. OK.
    BUT: my stacked notifications (With setGroup(...) but no setGroupSummary(true) are ALSO shown on the phone. These are supposed to be only visible on the watch.
    Every documentation, example and StackOverflow posting shows me that I'm doing everything right and that there should be no way for this to ever happen.

    I guess I need an additional pair of eyes to look through at this code.


    Added Android Wear support for K9

    I just added some very first Android Wear support for the K9 mailer.
    The default actions where unsatisfactory as "reply" doesn't work on a watch unless you implement the voice recognition feature. "delete" shouldn't be offered if "confirm delete" is active and thus the user needs to confirm an action on the phone that he/she initiated on the watch.

    For the time being I added "delete" (if confirm is off), "archive" and "spam".
    Extensive checks are done to make sure these actions are possible. Since afterwards the user can not be informed about them failing as Toasts will apear on the phone, not the watch.

    The plan is to
    • have the user select what 3 actions to show on watch+phone for single messages and groups of new messages
    • stack the notifications about multiple new messages
    • add the ability to reply using voice input