clj.orcery

Language, Expression and Design

Tuesday

11

August 2015

to visualise with style

by Chris Zheng,

I started travelling with just a backpack and a sitar ever since August of last year. It's been an extremely rewarding and life changing experience and I've finally have found a place to call home in Pune. Career wise, I'm working with Helpshift - an in-app mobile support platform founded by two amazing individuals - Abinash and BG. Helpshift has amazing people and a superb engineering culture. It's a real treat to be able to work here. Coupled with the great weather and amazing food, I consider myself extremely lucky. One of the things that I have been tasked with is to be able to make sense of a code…

Thursday

23

July 2015

hara is not a framework

by Chris Zheng,

When clojure libraries reach a certain size, they tend to be broken down into smaller pieces. Examples of such projects are pinot and lamina where one project suddenly turns into 5 overnight. The most ambitious effort was clojure.contrib - and that was broken down into something like 30 different pieces, each with a seperate repo, maintainer, etc. hara bucks the trend with an emphasis on integration and wholistic design. Progress has been stop, start and painfully slow at times. It has taken more 3 years for the code to reach critical mass and for me to get a half decent website off the ground. In terms of its evolution…

Sunday

24

May 2015

Manipulate source code like the dom

by Chris Zheng,

I've always believed that most programming problems are expression problems. Being able to say what it is that we want usually gets us 95% of the way to solving the problem. The rest usually takes care of itself. Libraries and tools should help us express ourselves through higher paradigms of thinking, where the most powerful features are declarative paradigms that allow us to just say what we want and for the library to figure out how to get us there. Source code manipulation has always been a great source of difficulty. Most source code manipulation programs are really just built upon regular expressions with some parsing and then lots of…

Friday

03

April 2015

revisiting my workflow tooling

by Chris Zheng,

I've migrated vinyasa.pull/pull to alembic.still/distill and vinyasa.lein/lein to alembic.still/lein in my profiles.clj file. alembic offers a much more superior solution for dependency management, using classlojure for isolation of different library versions though the function name distill is slightly confusing so I've renamed distill to pull and load-project to pull-project: {:user {:plugins [[cider/cider-nrepl "0.9.0-SNAPSHOT"]] :dependencies [[org.clojure/tools.nrepl "0.2.7"] [org.clojure/tools.namespace "0.2.9"] [spyscope "0.1.5"] [alembic "0.3.2"] [im.chit/vinyasa.inject "0.3.4"] [im.chit/vinyasa.reflection "0.3.4"]] :injections [(require 'spyscope.core) (require '[vinyasa.inject…

Saturday

07

March 2015

gita - the introspective jgit wrapper

by Chris Zheng,

I'm stoked to announce gita - a new clojure wrapper for jgit. It looks somewhat like the shell version in that there is only a single top-level function (git). (use 'gita.core) (git) ; Subtasks for git are: ; ; [:add :apply :archive :blame :branch :checkout ; :cherry :clean :clone :commit :describe :diff ; :fetch :gc :init :log :ls :merge :name :notes ; :pull :push :rebase :reflog :reset :revert :rm ; :stash :status :submodule :tag] ; There's documentation already on the github page already on workflows for creating a repo, committing files and branching and there could be more but I'm a basic git user and so I don't know how all the other commands work. So I'm…

Sunday

15

February 2015

just how costly is reflection?

by Chris Zheng,

The other day, I got a message from ztellman to clean up my reflection warnings. I didn't know about this feature, where you can set your global vars in your project.clj and have it give out a warning every time the compiler sees a statement in the code that is ambiguous. In order to decide what method to use, the compiler needs to create reflection code in order to make the interop call work: Reflection warning, hara/reflect/pretty/classes.clj:14:13 - reference to field getName can't be resolved.` I find the meta ^ tags quite ugly, so marking up nice clean clojure code with type signatures didn't…

Read More

Saturday

14

February 2015

hy there clojars

by Chris Zheng,

I'm not sure if there is a REST api for clojars. If there isn't there should be. In any case, I couldn't find anything on the internet about it so I thought it'd be cool to scrape some usage statistics of my most-favorite lisp with with my second-most favorite lisp. I would honestly use hy alot more if it wasn't for the fact that I'm too used to immutable data structures. I discovered the language about 6 months ago and have been looking for any excuse to use it. I've used alot of python libraries for graphing and I do miss the some of the scientific visualisation libraries like mayavi…

Read More

Wednesday

11

February 2015

updates: vinyasa 0.3.2, lein-repack 0.2.9

by Chris Zheng,

I've been travelling around for the past 4 months and so it was hard to get too much done. Having said that, the time off gave me a much needed break and it's nice to be able to come back to some of my old projects with new eyes. lein-repack is a tool I created a while for splitting up a big project into a bunch of little ones for the purposes of deployment. It's been much neglected with minimal documentation for a while now so I've done some cleaning up of old code as well as improved documentation for the library. I've also included a nice diagram of what…

Read More

Friday

16

January 2015

iroh lives on

by Chris Zheng,

I've deprecated iroh. It's a little sad because he was one of my most favorite characters but the move made sense because it was really two libraries in one: Class reflection functions have been moved to hara.reflect, latest version at 2.1.8 Convenience macros have moved to vinyasa.reflection, latest version at 0.3.0 Not much has changed except a name change and a version increment. Please see the docs for more details.…

Read More

Thursday

30

October 2014

verbs, nouns and file watch semantics

by Chris Zheng,

I've recently had a fascination with file watchers semantics in clojure libraries. Having trialed bunch of them in the past, I decided that it was time to have a go at one myself and wanted to share some of my thoughts: Typically file watchers are implemented using either one of two patterns: verb based - (add-watch directory callback options) noun based - (start (watcher callback options)) The difference is very subtle and really centers around the verb start. If the verb start does not exist, we can treat the file-watch as an action on the file object. However if it does exist, we can treat the file-watch as an object…

Read More