X-Mouse Button Control, Web Navigation, Tilt Wheel and Remote Desktop

I recently decided to buy the X-keys L-Trac Red Trackball because I just like track balls and this was one of the best reviewed trackballs I could find. Over all I’m happy with my purchase but I have had some issues and I wanted to explain in this article how I solved them. My hope is that others with similar issues can find this article and save themselves some time.

The challenge with the L-Trac is that it only comes with three buttons (you can buy more though but other than the foot peddles that would take up more room than I want to use and don’t appear terribly easy to use). This left me a bit in the lurch because I really liked being able to navigate back in web browsers when I’m just using the Trackball and for some apps I use (like Balsamiq and Excel) the ability to left/right tilt is a requirement for a good experience.

My online research pointed to X-Mouse Button Control as the solution. This is a free piece of non-open source software that lets you remap mouse buttons in a dizzying variety of ways. The good new is that it solved my missing button problems. The bad news is that it took me a while to figure out how to make it work right. So I thought I would share what I learned to hopefully save others time in the future.

For Web Navigation the easiest solution appeared to be using chording. That is, to combine one button (I choose the left trackball button) to change the trackball scroll wheel into a navigation wheel (e.g. scroll up goes forward, scroll down goes back). This absolutely works but it’s kind of a pain because the super smooth scroll wheel has no clicks or other indications when it has incremented so it’s easy to over or under scroll and end up way more pages away than I intended. A much nicer solution was to chord the left button with the middle button as back and the right button as forward. To do this you have to:

  1. Go to Left button and set it to "Button Chording"
  2. Go to the Right Button in the chording menu and set it to Forward
  3. Go to the Middle Button in the chording menu and set it to Back
  4. I unchecked "Block" in the chording menu because I often hold down the left button and use it with the track ball to do selections so I didn’t want chording to interfere with dragging.

For simulating the tilt wheel left/right the obvious solution would be to use "Change Movement to Scroll" feature which turns the track ball into a huge mouse up/mouse down, left tilt/right tilt sphere. But in practice I found the feature to be clunky. How far it scrolled depended on how far I moved the cursor and regardless of the sensitivity setting the scrolling always felt jumpy and hard to control. In the end I took a different route. I set up chording, this time with my right button and I programmed wheel up and wheel down to map to tilt left and tilt right. This proved to work really well and gave a really nice scroll experience. Setting this up requires:

  1. Go to Right Button and set to "Button Chording"
  2. Go to Wheel Up and set to Mouse Wheel Tilt Left in the chording menu
  3. Go to Wheel Down and set to Mouse Wheel Tilt Right in the chording menu
  4. In this case I did activate "Block" in the chording because otherwise I accidentally trigger the right click menu which is annoying.

One last problem I ran into is that I use Remote Desktop a lot and I wanted my trackball to work properly there. To get this to work right I had to:

  1. On the machine I’m Remote Desktoping from go to "Add" on the Application / Windows Profiles menu
  2. Select "mstsc.exe" as the app (this is easiest if you have Remote Desktop running so you can select it from the Process Menu)
  3. Then set everything to "No Change" for the remote desktop profile on the machine I’m remote desktoping from The idea is to completely disable X-Mouse Button Control on the machine I’m Remote Desktoping from when I’m using Remote Desktop.

Then on the machine I’m Remote Desktoping to:

  1. Install X-Mouse Button Control
  2. Configure all the chording on the machine I’m remote desktoping to as given at the start of this post

Now my trackball behaves itself just fine both on my primary box and my remote desktop box and I have a nice forward/back navigation experience as well as a nice left/right tilt experience. It took me quite a bit of experimentation to figure this all out so I’m hoping that this post will help save other folks some time if they if they have similar problems.

The block chain and the CAP Theorem

In this article I argue that depending on how one programs one’s client, one can build a Consistent and Partition Tolerant or Available and Partition Tolerant system on top of Bitcoin or really any block chain. And no, that isn’t a contradiction and no this doesn’t violate the CAP theorem.
[Note: Lots of updates in response to feedback]

Continue reading The block chain and the CAP Theorem

How to make block chains strongly consistent

Block chains can be strongly consistent but not in the normal deterministic sense we are used to from consensus protocols like Paxos. Instead the strong consistency is probabilistic. That is, if one waits for long enough then the probability of a particular transaction being removed from the chain falls to negligible levels. This then provides the basis for a protocol that can treat the block chain as strongly consistent, where the protocol is “Wait until a transaction is X blocks deep in whatever chain one sees”.
Continue reading How to make block chains strongly consistent

Going off chain for storage

It turns out that building a distributed database with ACID behavior (aka a block chain) isn’t easy, it requires a lot of code and a lot of processing. As a result block chains like Bitcoin can process around 4 transactions/second. A pretty slow pace for a globe spanning system. To work around this and other issues I explore below, we hear more and more about off block chain storage. But it turns out that if you store off the chain then you lose the chain’s ACID guarantees. In many cases that loss is fine but it does call into question if the use case that can leverage off chain storage really needs the chain at all.
[Update: Thank you to Shawn Cicoria for pointing out that my original price quote for storing a Gigabyte of data in Ethereum was off by a factor of 32. My mistake is that I did the calculations forgetting that the gas price is per Ethereum Word which is 32 bytes.]
Continue reading Going off chain for storage

How do we build apps for this wonderful mesh based Internet anyway?

Previously I waxed poetic about the amazing powers of Serval to create mesh based Internet infrastructure for developing and less developed countries (LDCs). The thesis being that if we had meshes of Wifi endpoints that could move data around without charge then people could have local applications on their smart phones that run peer to peer and could take advantage of this infrastructure. But how do we build those apps? That is where Thali comes in. But yes, we need more. See below.
Continue reading How do we build apps for this wonderful mesh based Internet anyway?

Building local Internet infrastructure for disadvantaged communities

Smart phones are showing up in the poorest of countries. Even the Internet is showing up but it’s still quite expensive. But for a reasonable price we can deploy Wifi based local mesh infrastructures that can let people run applications on their smart phones and communicate locally with people around them. We have the technology! Below I explain what that technology is and why it’s all Serval's fault.
Continue reading Building local Internet infrastructure for disadvantaged communities

A quick and dirty way to calculate endpoints needed for forming a mesh with radios

I needed to figure out how many Wifi endpoints which had a range of around 300 feet would be needed to form a mesh that covers a square mile. I do a bunch of 1/2 baked math below to estimate that 138 endpoints would be needed for complete coverage.
Continue reading A quick and dirty way to calculate endpoints needed for forming a mesh with radios

Serval and Thali

Serval is a project that wants to enable mobile phones to work no matter what. They have built mesh technology to let mobiles make voice calls as well as share data and have an app available on Android to use this technology. This is a technology that Thali could potentially really leverage. In the first section below I give a quick walk through of Serval. In the next section I compare and contrast Serval and Thali’s ways of solving similar problems. Then I conclude that hopefully we can reach a point where Thali just runs on top of Serval.
Continue reading Serval and Thali