
Skit – I built another JavaScript framework - mef
https://medium.com/on-coding/oh-god-i-built-another-javascript-framework-fb32f0f8ec12
======
taylorhughes
Skit author here. We've been using skit internally to build LaunchKit
([https://launchkit.io/](https://launchkit.io/)) for the past 4-6 months.

We have skit sitting on launchkit.io, with a REST API in Django sitting behind
it (serving prelaunch native mobile clients from api.launchkit.io).

Logged-in requests that load data hit the API first from node, using the same
JS API client that runs in the browser. The logged-in user cookie is actually
an encrypted OAuth token from the backend API, so our website is actually a
first-class API client just like our mobile apps. No separate session logic,
etc.

I prerender the first results in the "reviews" list using a template on the
server, then when you scroll down the list the additional items are loaded and
rendered with the same template in the browser. It seems weird/foreign but in
practice it's not that weird.

So far it's been fun, and honestly it's worked far better than I expected it
to when I started tinkering.

Would love any feedback / etc., here or on twitter @taylorhughes

~~~
outsidetheparty
Haven't played with the framework at all yet, but I have to say that was the
best _announcement_ for a framework I think I've ever read. Totally subverted
my knee-jerk oh no not ANOTHER one reaction I've come to expect...

~~~
humanarity
Agree. It was great subversive announcement and marketing. All of our
objections were encapsulated (horrible, terrible, oh no) and lightly
dispatched. It was very skill full writing. Also the comments on this thread
really work.

------
aerovistae
First impression is this is way more straightforward than other frameworks.

First criticism, this:

events.listen(dom.get('.thing'), 'click', function() {

That is a longer way of saying

$('.thing').on('click', function(){

Which could really just be:

on.click('.thing', function(){

As in, make the most common things more concise. Your current way isn't bad at
all; it's just longer than it needs to be. Could be reorganized, I think.

~~~
taylorhughes
Yeah, all this stuff in skit is my personal preference .. as you can tell from
the post, I am not big on brevity. Agree that this stuff could be more
elegant, though.

~~~
1day1day
I prefer the more verbose, approach. Less magic = less errors. Don't let
people show you some snippet that is "less characters = must be
better"mentality

~~~
johnmaguire2013
I don't think that's the argument. In English, the words "yes" and "no" are
very short. Why? Because they're used often. They're not particularly hard to
screw up. They're quick to say and quick to write. Similarly, it's good if a
framework can use, sure, brevity, in its more common function calls.

Similarly, in jQuery, the most common function call is one character that's
obvious if you mess up. You don't have to go to such extremes as `$`, but you
should think about that sort of thing when you're designing APIs, imo.

------
stormpat
Skit literally means "Shit" in swedish.

~~~
taylorhughes
+1000

~~~
gustaf
It does :)

------
qrohlf
I definitely get where this is coming from - I've been using
gulp+browserify+watchify+react+express+mongoose lately, and even though I
really do like all of the tools individually just wiring all of the different
bits and pieces together feels like a chore and is very error-prone.

I think there's a lot of space in the frontend arena for a convention-over-
configuration frontend framework that ties in ES6 & jsx transforms, jshint,
css bundling, sourcemap generation, and production bundling & minification in
a nice way with sane defaults and strong conventions.

That way I don't end up using [http://octo-
labs.github.io/snowflake/](http://octo-labs.github.io/snowflake/) for every JS
project.

~~~
bshimmin
Is the absolutely horrific scrolling experience (retina MBP, Chrome) I get on
the Snowflake page part of the joke?

------
dvcc
Seems like an interesting medium between Meteor/Derby.js and just a front-end
framework; however it doesn't provide the same tracking of models. So it's
more of a hand-off, but at least it prevents having to duplicate logic.

At the same time, I feel like this could have been done with just a plugin to
some existing framework instead of creating just another. But that's just
because I am losing track of everything that is out there.

~~~
fiatjaf
There's still space for something like Meteor that instead of templates uses
virtual-dom.

~~~
paultannenbaum
You can use virtual-dom diffing in Meteor. [https://github.com/reactjs/react-
meteor](https://github.com/reactjs/react-meteor)

------
ksenzee
I was hoping for an actual skit, parodying the Yet Another JavaScript
Framework phenomenon.

------
davedx
Just want to chime in as another dev who's tinkered in the isomorphic area:
great work, and I completely agree this area is still way too complicated. A
modern framework should support this out-of-the-box IMHO.

FWIW your framework makes me think of a modern backbone.js. I'll try and find
some time to take it for a spin sometime soon. Good luck with it!

------
spectrum1234
Great simple concept. This + react is how all frameworks need to think.

------
serve_yay
I wonder what the first two letters of YACC stand for.

------
Entalpi
I am so sorry to not to be the last one to say this; Skit == "Poop" in
Swedish.

I bet it's awesome though.

------
beeskneecaps
"Eventually, this webpage got so complicated and unwieldy that I started
avoiding making changes to it."

Skipped unit testing didn't you? Uncle Bob Martin would be upset with you.

Without tests, someday you'll be afraid to change Skit as well.

------
__luca
Hi, are there any tests for Skit? How have you been testing it?

~~~
taylorhughes
I haven't automated my testing process enough yet, and I feel terrible about
it. Going to prioritize this now that the project is public. For shame, I
know.

------
bmull
I'm skit developer #1. And it's awesome.

------
snyp
this framework just looks like so much fun!

