Technical notes to self on tools for building web things.

Technical notes to self on tools for building web things.

I’m redoing a micro site (vanyarose.com) starting with internals and asked myself what a feasibly ideal client-side foundation looks like, to me. I narrowed the tool candidates to:

  1. meteor
  2. angular (and grunt or yeoman)
  3. component

  1. Meteor:

Meteor has some stunning characteristics for building and spiking ideas… free/performant/FAST deployments… latency-compensated UI CRUD et al operations, automatic js/css/transpilers file handling, universal db access/manipulation api across server/client… etc.

While Meteor is broken up into many small components under the hood, none of it is particularly exposed as such. For instance meteor’s reactive features are not public modules in their own right. Meteor fails to suite my taste because it seems unnecessarily monolithic. I would love to see their stack and services decoupled into the small open-source parts in their own right, where modules would be swappable, extendable, easy to contribute to, and authors decentralized.

  1. Angular:

Angular generally feels like a tight and well considered architecture. The controllers, two-way data-binding, dependency-injection, routing, and scope system all dance quite well together. Its a well-rounded tool that makes me feel comfortable ignoring backbone, ember.js, et al (for now). Above all I think there is one “killer” (game-lingo) Angular feature…

Directives. I really–really–like them. They amount to wielding a runtime-compiler that extends html’s behaviour, and the results of using them (well) can be eye-opening. There is also a painful learning curve that eases and intensifies as I try or don’t try skill-pushing techniques.

Angular is even more monolithic than meteor. They’ve rolled their own version of Q, jQuery, underscore/lodash, and so on. I don’t like this. While angular is amazing in a variety of ways, it is far from being an assembly of discrete open-source modules that are well composed, swappable, extendable and easy to contribute-to/hack-on (i.e. via github). As a developer I am happy that I can offer angular services to clients, now, but there is a way of building that I think would make me happier and also be better for the world:

  1. Component.js

In essence, there is nothing that Meteor and Angular do that couldn’t be matched by composition of small modules. Perhaps one roadblock was/has been the build and meta-architecture stories where no elegant community-driven tooling exists for tying (and thus promoting) an ecosystem of modules on the client-side. Component.js fills this weak spot like a fertile soil making rich apps composed from small modules readily feasible. Frameworks then need only be a micro-layer of patterns/conventions and/or sugar atop these small modules, if needed at all.

In terms of the problems that component.js solves, from least-to-most novel:

1: a commonjs module system 2: a package system (version control, installing components from the command line, etc.) 3: a build system both for apps (consumers of components), and individual components 4: pipeline knowledge that is agnostic to intent meaning better intellectual mileage and code reuse (i.e. angular/meteor are for web apps, component is for anything you want… art, apps, animation, games, …)

The package system is good in that it is: fast fast fast and handles basically any files (js, fonts, images, css, etc. and plugins can augment this). Contrast this with something like bower that merely provides sugar for the status quo (http://dailyjs.com/2013/01/28/components/).

The package system is good. The build makes it better. There is a default build system in place, but there is also the npm-available component builder that lets you programmatically use this system (to adjust, extend, etc). There are a handful of plugins that extend the default build system to accept new filetypes. For instance you could use livescript instead of javascript or Rework instead of CSS. There are also plugins that help integrate the component builder with LiveReload. I expect as component matures novel and impressive plugins will emerge.

I’ve realized that component’s build system allows you to avoid many use-cases for grunt. I am also realizing that the pipeline from packages to modules to app code is fusing into a single concept without falling into the monolithic mindset of meteor. I find such a fact amazing. It is a foundation that motivates me to build. It is fun because the decoupled and decentralized authorship creates an inherently easy community to engage and contribute to. When I’m writing components I feel like I’m contributing to the web. When I’m writing angular modules, say, I feel like I’m contributing to other angular developers. The latter makes me feel nice, but the former makes me feel great.

So while using component.js sans meteor means no amazing deployment story (for now), and sans angular no amazing HTML DSLs (for now), I am happy that my knowledge is not trapped within a framework, my modules can readily be used by others in radically different contexts/stacks, and that I work in a culture where monolithic anything is shunned. It seems fair to say that there is a unix vibe with component.js, and a desire for less fragmentation between peoples.

Finally I should note that component could cooperate with angular, but I feel that entertaining the monolithic structure inside a component app is not ideal and goes against both the goals and potential of component.

Brainstorming better copywriting and i18n

Looking forward to more brainstorming and of course peeping prior art. Fork and/or make issues if you’re inclined!

FF Chartwell: a graphing-based typeface

FF Chartwell

A clever and genuinely interesting-looking product; graphing with nothing “more” than a typeface.

I enjoy seeing a product that capitalizes on the programmatic promises offered by opentype. This is the first time I have seen that promise realized in a non-typographic format.

"Much of the essence of building a program is in fact the debugging of the specification."

Fred Brooks (The Mythical Man-Month)

Learning Haskell, I haven’t had this much fun in months.

Learning Haskell, I haven’t had this much fun in months.

"

Apple’s products are replete with Apple-like features and details, embedded in Apple-like apps, running on Apple-like devices, which come packaged in Apple-like boxes, are promoted in Apple-like ads, and sold in Apple-like stores. The company is a fractal design. Simplicity, elegance, beauty, cleverness, humility. Directness. Truth. Zoom out enough and you can see that the same things that define Apple’s products apply to Apple as a whole. The company itself is Apple-like. The same thought, care, and painstaking attention to detail that Steve Jobs brought to questions like “How should a computer work?”, “How should a phone work?”, “How should we buy music and apps in the digital age?” he also brought to the most important question: “How should a company that creates such things function?”

Jobs’s greatest creation isn’t any Apple product. It is Apple itself.

"

John Gruber (24 August 2011)

(Source: daringfireball.net)

Zizek + Assange + Democracy Now

Required viewing.

Beautiful: Metric & Calibre typefaces

(Source: daringfireball.net)

Icograda 2009 Biennial Review on Web Design Served

Behance curates a site called Web Design Served which features daily hand-picked web design from the Behance network. Tonight I received an email from them noting I had just been featured. I’m flattered that they picked one of my projects. Thanks Behance!

Hello Backbone.js

Another interesting teaching format. It would be nice if a git-like diff could be displayed to live-toggle between the last state and the new state. But on the whole, this is a lovely way to learn, and more compelling than a blog format or book format.

It was several months ago when I linked to another teaching format that I loved (but cannot find link right now!)

"Make no little plans. They have no magic to stir men’s [people’s] blood and probably themselves will not be realized. Make big plans; aim high in hope and work, remembering that a noble, logical diagram once recorded will never die, but long after we are gone will be a living thing, asserting itself with ever-growing insistency. Remember that our sons and grandsons [daughters and granddaughters] are going to do things that would stagger us. Let your watchword be order and your beacon beauty. Think big."

Daniel Burnham, Chicago architect. (1846-1912)

(Source: ontko.com)

Laminate x TKYO

I am excited to be a member of the new Laminate x TKYO network. I joined to see what would become of the opportunity, which to me seems different than typical networks like Art Fox or Behance. There’s something quite personal and physical about this network. The technical execution is still lacking but the heart is far and away more present then other giant networks, so far.

My new profile is at: http://www.laminate.tkyo.co.uk/tkyo-members/jason-kuhrt/ and my studio space reveal is at http://www.laminate.tkyo.co.uk/artspace/jason-kuhrt-wp/.

NDP off to a terrible start

If you are going to doubt something sensitive like this then damn well make sure it’s backed up with bullet-proof facts and sources. Unchecked doubt and casting undue aspersions on a whim isn’t useful, especially for an MP whose remarks are official fodder for any opposition.

If Mulcair has good reason for his suspicions then he needs to cite them, otherwise he ought to be a lot more straight forward and less a cliché of some film-esq left-wing contrarian. I’m happy the NDP retracted his comments but good riddance, I can’t believe this crap happened in the first place.

Some “Majority”

3.9 in 10 Canadians of only 61% of the eligable-to-vote-Canadians support Harper.

Assuming those that do not vote tilt toward non-conservatism for any or all of the following reasons:

…then the actual support for Harper among Canadians may be at pinned around 2 in 10 or 3 in 10. Some “Majority”, be it 2,3 or 3.9.

Historic Election

Tonight I witnessed the most radical Canadian election in my lifetime). Two amazing things happened that I feel great about:

First, Elizabeth May, the leader of the Green Party, gets voted in. she is the first MP from the Green Party to get voted into Parliament. I am extremely happy to have such a well spoken and inspiring person from a party I strongly support become an MP. I think this is just the beginning for the Green Party.

Second, the NDP, for the first time in history have won over 43 seats and become the official opposition. the NDP won 61 new seats tonight… Incredible. I voted NDP in this election to help ward off a Conservative Government but I also genuinely like the party and Jack Layton, the leader.

And there are some shocking things that also occurred:

The Bloc Quebecois is almost annihilated losing some 40 seats and are left with just 3 or 4. Duceppe, the BQ leader is not elected in his own riding and steps down as BQ leader. Liberals get lowest seat count in history and for the first time are not the official opposition. Michael Ignatieff is not elected in his own riding and steps down as Liberal leader.

But worst of all in my opinion, Canada is now led by a majority Conservative government. If this means I can expect an intensified version of the last several years, then I am terrified. I will say that his winning speech tonight was promising, but it does nothing to reassure me against the draconian actions I anticipate.