In my spare time I built some cool stuff; it is always being improved, see the latest project stats.for everyone:
- slides-now is a stand alone slide presentation viewer implemented inside the browser without any server side components. Just drag and drop a Markdown (.md) file into the website page and it will play a stylish HTML5 presentation. I love the simplicity of editing my talks as pure text files, keeping versions using Git and playing them whenever I need without logging in / uploading / etc. It even works when I am offline, because the website is so simple it works from cache.
- read on paper is the simplest way to send readable article from PC to your tablet for easier reading. It saves your eyes and trees!
- deps-ok quickly checks if any of the top level dependencies
are missing or out of date. Faster than using
npm ls. I also wrote grunt-deps-ok grunt plugin.
- grunt-nice-package is an opinionated package.json validator.
- grunt-npm2bower-sync is a fork of another project that copies main properties from package.json to bower.json
- changed is a command line tool that displays changes for a given nodejs package, so you don't have to hunt manually.
- next-update is a stand alone nodejs tool that can check if upgrading your module's dependencies to newer versions breaks any tests. Makes it a breeze to keep your module using the latest and greatest 3rd party tools.
- A homebrew unit testing framework gt that follows QUnit syntax but adds better async testing and code coverage (via istanbul).
- There is static source complexity tool jsc that keeps my code nice and understandable
- I wrote lasso to instrument widget test pages on the fly, giving you insight into the code covered for by the unit tests. There is no setup necessary, and check out the list of unit test frameworks in the examples folder: everything just works!
- Well documented modules with lots of API examples are easier to reuse, maintain and develop. I wrote js API documentation tool xplain that takes an unusual approach of placing unit tests as examples in the API documentation. The specific test syntax is transformed into human readable format, producing documentation that looks hand-crafted, will always stay in sync with the code, and does not require any developer maintenance.
- risk-map is a cool way to visualize the entire project's code complexity and unit test coverage using D3 treemap layout. Shows high risk source files in a very obvious way as large red patches. I talk about my inspiration for the project in this talk. I am currently working on using risk-map and developer's vanity to improve software quality, see man-behind prototype.
- qunit-promises is a QUnit plugin that makes checking promises a breeze.
- qunit-once is a QUnit plugin adding module.setupOnce and module.teardownOnce functions.
- npm-utils is a set of promise-returning functions that run different NPM commands.
- jshint-solid tells how strict your .jshintrc file is. As project matures, you should tighten the Jshint settings. There is grunt-jshint-solid plugin for grunt.
- time-promise is a functional decorator measuring time for sync or promise-returning functions. It is among my four favorite functional adaptors.
- proud collects NPM downloads for all modules authored by a developer with given username. One can generate a proud-badge, even host a simple proud-connect server or use the deployed Heroku proud.herokuapp.com app.
- color-pusher is a widget geared towards real time website color tweaking. Allows anyone to change multiple page colors, including swapping an entire external palette. I created color-pusher to give graphic designers power to tweak live websites without making a round trip to a developer to deploy the new color scheme.
- code-box is a lightbox for code blocks. Adds full screen lightbox to all code elements in your page with single call.
- progress-full-width is a progress bar along the bottom of the page, can be stacked or run on a timer.
- sticky-right-top-icon adds a sticky icon to any element, even if it has scrollable content inside.
I worked for a year at MathWorks, helping to bring the power of MATLAB to the browser.
Earlier I spent four years as a researcher at EveryScape, writing panorama stitching and 3D modeling software. Before that I worked calibrating 3D laser scanners and developing white light scanners. Even before that I wrote distributed database access software that worked across Objective-C, C and Java systems.
Doctorate from Purdue University (West Lafayette, Indiana) working with Dr. Voice Popescu (adviser) and Dr. Mihai Mudure (fellow candidate), developing a novel scanning sensor. We were building 3D models of rooms in real time using a video camera and a bunch of lasers. If you were afraid of lasers, you could be anywhere else in the world, observing the results over the internet, as our system was smart enough to incrementally update the 3D model and send the results in real time.
Some of my github repositories are not up to date, while I am working on cleaning up the code.