Kothar Labs Contact Me

Sat, 24 Feb 2018 / projects / java / compactlist

A memory-efficient List<Long> for Java

CompactList implements the List<Long> interface, but internally it uses a tree of variable word-width segments to improve performance and memory usage compared to an ArrayList.

Performance tends to be worse for appends than an ArrayList but better for inserts. Memory usage is significantly reduced, even for incompressible random data where it approaches the memory use of an array of primitive longs (which happens to be the internal representation in this case).

There are some performance metrics over at the GitHub repository. My aim is to use this for the internal index representation in CSView, which already uses an earlier version of this data structure.

Comments |

Memory usage during random insert for CompactList and other List<Long> implementations

CSView - A lightweight viewer for very large CSV files
Sun, 23 Oct 2016 / projects / csview

CSView is a lightweight viewer that displays the start of a data file immediately so there's no waiting around for very large files to load. Using very little memory CSView can comfortably open files larger than 4GB.

With copy and paste functionality and selectable delimiter support CSView provides a fast, clean and simple way to access very large CSV files.

Comments |

CSView 1.2.0

Backblaze B2 Performance Part 2
Sun, 13 Dec 2015 / projects / go / b2

After my earlier experiments with B2, I had an extremely interesting call with Backblaze about B2 features and performance.

Firstly, they have recently added a caching layer to speed up serving repeatedly requested files. This reduces the delay as the file is reassembled from Reed-Solomon slices. They also suggested that I do some new tests, as they thought I should be seeing faster speeds, even for first-access.

Comments |

Backblaze B2 and Go
Mon, 30 Nov 2015 / projects / go / b2

I've been implementing a Go client library for the Backblaze B2 cloud storage service: go-backblaze. It works extremely well, but is a bit slow to get files back.

Update 12th December: I've spoken to Backblaze, who have been working to improve performance. I have performed some new tests and written them up.

I've implemented a parallel download feature which you can use to download several files at the same time - this doesn't seem to affect the speed of individual downlaods very much, so I assume that the downloads are limited for one of two reasons

  1. There is a download speed cap in place
  2. The downloads each come from separate parts of the cluster file system, and so don't affect each other.

Downloading 5 copies of the same file in parallel doesn't seem to affect the download speed, nor do 5 sequential downloads. Whatever you do, each download seems to run at about 200KiB/sec.

Comments |

Sat, 10 Oct 2015 / projects

After reading this article about Magnetic Poetry I was taken by the idea that the fridge was no longer the central notice board of the home:

Our age-old impulses haven't gone away—changes in technology have just encouraged us to take them elsewhere. “It used to be the fridge door was the center of the home,” Kapell says. “That’s where people would hang their kids’ art, leave notes for each other, put pictures, all that stuff.”

So, I thought I would create a digital magnetic notice board, replete with fridge poetry, postcards and photos. I've got a few loose ends to tie up, but I'm pretty happy with the proof of concept.

Try it out! magnets.kothar.net

Comments |

Magnets screenshot

Wed, 13 May 2015 / projects

Languamatch is a service for locating language exchange partners based on shared interests and skill levels.


Comments |

Languamatch Chat

Thu, 7 May 2015 / projects

Furor is a web content curation tool for businesses.


Comments |


Organise Asana Projects
Thu, 26 Sep 2013 / projects / asana

I was faced recently with wanting to move Asana projects from one workspace to another. Unfortunately this isn't a feature in the Asana interface (yet).

There's a PHP script floating around GitHub which will copy tasks between projects. This requires you to do some manual checking of project IDs, and you need to create the target project in advance, so I've extended the script and written a front-end web interface for it.

You can get the source code on BitBucket.

Visit asana.kothar.net to use the tool

Before you start, you may need to set up a few things that the tool can't do on its own though the API.

  1. Add your new user account (for your destination workspace) to your old workspace, if not already using the same email address
  2. Log in to Asana with your new account
  3. Add any accounts you want to keep task assignments for to the new workspace
  4. Add any custom fields you want to keep to the new workspace (pro workspaces)
  5. Log in to the tool: https://asana.kothar.net
  6. Choose the source workspace and project you’d like to copy
  7. Choose where you’d like to copy to
  8. Hit Go!


Copying Asana projects between workspaces

Mon, 13 May 2013 / projects / slimtweet

SlimTweet tries to shorten a message by applying a set of rules. For example, and will be replaced by &, while it is will be replaced by it's.

Substitutions will be made one at a time until the message reaches a target length (140 characters by default).

If SlimTweet still can't make the message fit, it will start tweaking the Unicode characters which make up your message, without changing its appearance too much. For example, the digraph vi will be replaced by the roman numeral character . When rendered in a standard font, these substitutions are nearly inⅵsible.


Comments |


ExtJS 4.1.1a Repository Update
Thu, 6 Dec 2012 / projects / extjs-public

Another update to the repository today. ExtJS is bumped to version 4.1.1a, and the latest version of GXT - 3.0.1, also gains a new root in the repository.


Javada 0.1.1
Mon, 2 Feb 2009 / projects / javada

I've released a new version of Javada today - just a maintenance fix, after an email request for a pre-compiled version. It's available for download from:


Also note, the licence is now LGPL.


Mon, 21 Jul 2008 / projects / jgraphviz / java

This project is hosted at SourceForge.

Comments |

Circo jGraphViz layout

Thu, 1 May 2008 / projects


Javada automatically generates bindings which allow Ada and Java to talk to each other.


Eclipse Corba Plugin
Thu, 1 Jul 2004 / projects


An Eclipse editor plugin for CORBA IDL files