[Home] [Projects] [Twitter] [Github] [Blog] [Screencasts]
(Javascript specialist, available for work in Germany, or remotely)

typescript-tools and typescript-tools.vim

(status: active)

TypeScript (Microsoft, October 2012) offers EcmaScript 6 features for EcmaScript 5 engines, augmented with an optional static type system, on top of which language services for language-aware developer tools are provided in the form of a TypeScript/JavaScript API.

typescript-tools makes these language services, combined with source dependency chasing, available through a nodejs commandline server (commands in, JSON info out); a Vim plugin uses this server to support type and JSDoc information, jump-to-definition, completion, compiler errors, project navigation, etc.

typescript-tools is also the basis for Emacs and Sublime plugins.

ISBN book organizer

(status: not recently active, technology experiment)

Partly a technology experiment, to learn about working with Ionic, Angular and Cordova (barcode scanner and SQLite plugins) on Android. Also intended for home use (scan book ISBN barcode, lookup general book info from some remote source, edit/augment with local info, store in local database).

JavaScript Petri Nets

(status: work in progress, unpublished, not recently active)

SVG-based in-browser editor and simulator for Coloured Petri Nets with JavaScript inscriptions; basic editor done; code generation target designed; integration of editor, code generator, and simulator planned; uses ideas from my old Haskell-Coloured Petri Nets tool, adapted for JavaScript and browsers.

I started this as a technology experiment many years ago, to get acquainted with things like SVG, in-browser filesystem handling, and multi-module JS project (SVG is standard by now, filesystem APIs still have no common standard, and standard module handling is about to come to ES6, at last)

Javascript development tools - resources

(status: list active, resources inactive, need review)

We started the js-tools mailing list as a discussion forum for JavaScript tool developers, and for questions and announcements relating to JavaScript developer tools. I created a resource listing for JS developer tool links (it is a github repo, so to provide information updates, just open an issue on the repo).

Once upon a time, I hoped that JS tool developers would use our mailing list as a one-stop shopping and announcement medium, and would eagerly join me in keeping resource listing information up to date. Unfortunately, JS tool developers, even though often present on the mailing list, and sometimes engaging in discussions, prefer using tool-specific forums for announcements. And pull requests for the resource listing have been so rare that the listing has grown quite stale.

Tern plugin for Vim

(status: project still active, I'm no longer involved)

A Vim plugin that provides tern-based JavaScript editing support (type and JSON information, jump-to-definition, completion, etc.). Tern and tern plugin for Vim are authored by Marijn Haverbeke, I helped out with the Vim side of things when the project started.

I mostly provided expertise in Vim plugin development (having supported various compiler plugins for many years, such as haskellmode for Vim).

Sudoku Web App

(technology experiment; status: done, inactive)

An experiment in HTML web app interactions. Sudoku grid with solution helpers: players can create problems, store them as bookmarks, and solve them with or without help (mark possible field candidates, eliminate impossible candidates, identify and set unique candidates); emphasis on UI, not on solving; layout is relative to font size, can be zoomed to adapt to device or window dimensions.

estr - EcmaScript traversals and transformations

(status: no longer active - use typescript-tools or tern instead)

Scope-based JS code navigation, directly in JS code editors, or via scope-annotated tags files and scoped-tags plugin in Vim; refactoring: scope-preserving variable renaming (rewriting source code while preserving formatting and comments); in the image, notice how renaming x in one scope did not affect xs in several nearby scopes.

Scope-aware tags files for Vim

(status: no longer active - use typescript-tools or tern instead)

Standard tags files have no support for tags with non-global lexical scope. Scoped tags (generated by estr) make lexical scope information available to tags files (using the extensible tags file format) and this Vim plugin adds source navigation commands to Vim, making use of this richer information. In the image, notice how only the xs belonging to the same scope are highlighted, not the various nearby xs (as a plain search would).

Cross and Circle

(technology experiment; status: done, inactive)

Sketch of a client/server app. Generic Cross and Circle game running in the browser (can be used without server); minimal graphics, realized via DOM/CSS; layout is relativ to display size, fits device or window dimensions; if the game is delivered via the nodejs HTTP server, multiple viewers can join the game, such that all moves are replicated in all viewers; client/server communication uses JSON via AJAX (XmlHttpRequest) / Comet (longpolling).

Module loader

(status: inactive)

An older project (end 2010), extensively documented in a blog post on loading JavaScript modules; in practice, one would use an AMD loader like RequireJS, so the code is mostly of interest in connection with the explanatory blog post.

In my early experiments with larger browser apps, it quickly became apparent that hand-listed script elements do not provide a suitable basis for modular app development; from this requirement resulted a simple module loader and a blog post describing how to convert a script-based project to a module-based project, step by step.