Kothar Labs Contact Me

MacOS Catalina — Notarization and App Store Signing with Java 11
Sun, 13 Oct 2019 / projects / blog / csview

With the release of macOS Catalina (10.15) there have been some changes to the way software needs to be signed. In particular, Apple has introduced a new ‘Notarization’ service which allows developers to pre-register the digital signature of an application so that it can be later checked by the operating system when a user downloads software outside the App Store.

Earlier versions of macOS still required software to be signed by the developer to allow it to run on a user’s system, however notarization takes this one step further, and presumably allows Apple to disable malicious applications when macOS phones home to check if the app has been notarized.

If you’re using Xcode for development and packaging of your app, this is all handled for you in the latest versions. Unfortunately, CSView is written in Java, requiring a custom build and packaging process, and this process has not survived the update to Catalina. It appears that some of the existing configuration was not compatible with the new sandboxing requirements in Catalina, so simply notarizing the old versions of the app was not sufficient, even for versions distributed through the App Store.

I took this as a good opportunity to update to Java 11, and the rest of this article covers the changes I’ve needed to make to the packaging process.

Comments | Read more...

Ditto Open Beta
Sun, 23 Jun 2019 / projects / asana / ditto

Ditto is a tool for transferring Asana projects between workspaces. It is a complete rewrite of an earlier project with the unwieldy title 'Organise Asana Projects' but colloquially known as 'Kothar' by the Asana community.

Ditto, or 'Kothar 2', fixes a number of longstanding issues with the original implementation, allowing faster and more accurate project copies to be created. It's also much more pleasant to work with from the development side, which means I am more inclined to spend time updating and improving it.

Comments | Read more...

Ditto Logo - Beta

CompactList
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 | Read more...

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

CSView - A fast 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.

Updated October 2019 - Version 1.3.4 has been updated for compatibility with macOS Catalina. There are no new features in this release.

Updated June 2019 - Version 1.3.3 has a number of bugfixes: high-DPI rendering is fixed on Windows, and CSV files with empty columns no longer cause alignment problems.

Updated April 2019 - Version 1.3 now supports searching in files, high-DPI display resolutions and has improved rendering on MacOS Mojave.

Comments | Read more...

CSView 1.3.0 Screenshot

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 | Read more...

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 | Read more...

Magnets
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 | Read more...

Magnets screenshot

Languamatch
Wed, 13 May 2015 / projects

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

languamatch.com

Comments | Read more...

Languamatch Chat

Furor
Thu, 7 May 2015 / projects

Furor is a web content curation tool for businesses.

furor.io

Comments | Read more...

Furor

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

UPDATE: Ditto - the successor to this tool - has now been launched. Please give it a go and let me know how you get on!

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!

Comments

Copying Asana projects between workspaces

SlimTweet
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.

slimtweet.kothar.net

Comments | Read more...

slim_tweet

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.

Comments

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:

https://bitbucket.org/mikehouston/javada/downloads

Also note, the licence is now LGPL.

Comments

jGraphViz
Mon, 21 Jul 2008 / projects / jgraphviz / java

This project is hosted at SourceForge.

Comments | Read more...

Circo jGraphViz layout

Javada
Thu, 1 May 2008 / projects

https://bitbucket.org/mikehouston/javada

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

Comments