131 comments

[ 5.6 ms ] story [ 111 ms ] thread
First of all, I'm using Linux and it opened on Firefox instead of Chromium.

Secondly, it seemed quite slow, and I can't use Ctrl+Shift+Up to select a paragraph above and Ctrl+Shift+Down to do the same to the paragraph below, like on Emacs.

Either way, the live interpretation of Clojure code looks really great, keep on working and good luck!

For Linux the script is doing "if chrome, else if firefox". Better to use xdg-open.
So it's looking for Chrome, a closed source browser that I'd never use, instead of Chromium. Too bad.
Seems like you can use any browser you'd like by going to: http://localhost:8833/

once the server is up and running.

Thank you, that's cool! How can I kill the server, though?

  light server stop
if you look through the script file, it has a series of options.

  light table
  light server start | stop | restart
  light update [version]
but as far as I can tell it always checks for updates first and will install them before it checks any of the arguments passed.
>So it's looking for Chrome, a closed source browser that I'd never use, instead of Chromium. Too bad.

TMI.

You are of course free to use or not use anything you like, but the above sounds entitled and self-centered. At this point, who the duck cares if YOU are "never gonna use a closed source browser"?

It's a post about a new editor in a pre-pre-alpha stage. Something like "Seems to be requiring Chrome. Why such a restriction?" would be far better, no entitlement, no open/closed source zealotry, not tied to specific personal preferences regarding source license, etc.

It seems as if every single key press, whether or not it affects the output (for example, writing in a comment or hitting enter to reorganize and space out code) causes every single function to be evaluated again.

You can test this out by adding something like this...

(time (+ 1 1))

...and start typing in a comment on a new line and seeing how the elapsed time that is outputted changes on every single key press. Performance optimizations are probably not as important right now, but that's something that can be improved.

Still, as a basic test of the concept, it looks pretty interesting overall and I can see myself using this. As long as the idea is sound, everything else can be improved over time. Keep it up!

It works perfectly on mac. Great work Chris, this demo gave me a sense of an Apple product "it just works", i typed in code and immediately it just worked.
Click the full-screen view. While this is of course a purely aesthetic impression, the clean-slate feeling is wonderful.
Thanks for considering Windows user in this release.
Heads up, just sent an e-mail to feedback, with an error on starting up the system on powershell. Not sure if it's my environment or not.
You first need to allow remote scripts to be executed with: set-executionpolicy remotesigned

Then you have to "Unblock" the downloaded ps1 file (Properties, click Unblock at the bottom).

Next you have to make sure that java.exe is in your path. After that you are good to go!

This line does not appear to be working - any ideas? (new-object System.Net.WebClient).DownloadFile("http://temp2.kodowa.com/playground/light.ps1, "light.ps1")
you can just manually download that script if you need to at the url it uses:

  http://temp2.kodowa.com/playground/light.ps1
that's what I ended up doing - working fine now :)
For me, the issue was trying to load Light Table via the 64-bit version of PowerShell. Switching to the x86 version (and setting the remote code signing) had me working in no time.
I'll check on this, I use 64bit powershell and 64bit jvm.
I haven't been able to get it working on Windows 7. After much hoop jumping I've gotten stuck on this error while trying to run the jar:

Exception in thread "main" java.lang.IllegalStateException: Can't change/establish root binding of: warn-on-reflection with set (compiler.clj:1)

Are you running the jar with prod as an arg?

  java -jar lighttable-full.jar prod
Yes. I get the same result with or without the "prod" argument.
I was running it under JRE6... switching to JRE7 got past the error and it is working fine now.
Alas it has issues. I tried to install, with the initial commands not working. Downloaded the script myself, set execution policy and it stated running. Download issues arise (probably due to being behind a proxy requiring authentication) and after a few minutes the script managed to remove itself.

I will try again when I have a real internet connection.

Random, but does anybody know what color scheme his colors are based on? I'd love to crib that for Vim.
Everything so far works fanatically. Awesome job.
I somehow fail to see how it does something useful for recursive functions.
i'm interested to see his solution here.

how will this development style mesh with infinite loops, and side effect code.

Clojure in general prefers the loop/recur construct over real recursion. You still can't see each iteration of the loop, though; perhaps that's what you meant by useful.
anything where there is more than one invocation of a function
I just tried some factorial code... and it just shows the last recursion, but it is still nice that it evaluates on the spot
On windows, I had to run set-executionpolicy Unrestricted since the light.ps1 isn't signed..
I can't wait to try this when I get home. Thanks ibdknox
I find this to be a very efficient way to learn clojure :)
Is there any interesting piece of code that might help me see this working to its true potential? I tried the factorial function expecting it to show all the recursive calls. What can I expect to see here? Call trace over multiple functions?

EDIT: Just tried this , atleast this shows the last calls made to the functions

(defn my-add [a b] (+ a b))

(defn fact[x] (if (<= x 1) 1 (* x (fact (- x 1)) )))

(my-add (fact (my-add 3 3)) (fact (my-add 2 5)))

---------------

OUTPUT

(defn my-add [||720|| ||5040||] (+ ||720|| ||5040||))

(defn fact[||1||] (if (<= ||1|| 1) 1 (* ||1|| (fact (- ||1|| 1)) )))

(my-add (fact (my-add 3 3)) (fact (my-add 2 5)))|| => 5760||

A little example I've come up with is writing a bunch of tests for a function you are implementing and seeing them automatically executed.

Try to fix fib by changing a, b and i values:

  (defn fib [n]
    (loop [a 1, b 1, i 1]
      (if (= i n)
        a
        (recur b (+ a b) (inc i)))))

  (= (fib 0) 0)
  (= (fib 1) 1)
  (= (fib 2) 1)
  (= (fib 3) 2)
  (= (fib 4) 3)
  (= (fib 10) 55)
Hello world:

(javax.swing.JOptionPane/showMessageDialog nil "Hello World")

Script hangs on server launch process -- cat server.log yields a NoClassDefFoundError for java/util/concurrent/LinkedTransferQueue.

That's pretty strange - any idea where my machine is borked?

That class was added in Java 7 - maybe you have older Java?
it was compiled for java 6, but should run on 7.. I have no idea what's going on there.
Doesn't work on my iMac (from '11 all software up-to-date). :S
now it worked when I restarted it. First time it was all white
I also got the all-white window on first startup - MB Air with Lion, fwiw.
I understand you're working fast and it's early.

But not providing hashes and using a two stage downloader and not using ssl and using auto updates and not using code signing means that your app will now be the weakest link in terms of security for all but the worst configured computers.

While it's almost certain no one is targeting you or your users now, that could change when people see such a weakness or could leave people open to local attackers that you'll never have a chance to notice.

What is a two stage downloader? Serious question :)
The script that you download and execute goes back out to the internet to download the real executable, so it makes it (somewhat) difficult to review beforehand or to make sure you're running the official version
To reply to the post you deleted about downvotes...

I didn't downvote you, because I appreciate you bringing up a relevant technical concern.

But sometimes people bring food over to my house and I just eat it. At the alpha stage of development, I think it's reasonable that your option is to not download.

Glad I'm not the only one who thought this. I'd appreciate either signed packages or SSL, otherwise this is very, very insecure.
If anyone is going to update their software manually, surely it's going to be HN/code editor users (I know I do). And anyway, it's a preview release that people won't be using as their main editor anyway. Install, play around, uninstall.
It's early and we honestly didn't think down those lines. Ultimately, the deployment mechanism will look different than this, but this was the path of least resistance. At the very least though we can do a few of these things to remove some of the danger - we'll get on it.
Yeah, I am not that exercised about the security risk but it made a really bad first impression. I primarily use Windows, I wouldn't mind so much if I were Unix-based. Also, installing it in my Documents folder under Windows is weird.

On the plus side, I like the prototype itself and will be interested to see where it goes.

(comment deleted)
Is there an easy way to get the editor to evaluate a different language? It's just I don't really use lisp but would like to try it out properly. I've tried poking about int he ./light script but don't see anything.

Fantastic software by the way. Could really see this having a big impact on a lot of people's development style.

Light Table is also being developed for Javascript and Python; but this alpha/early version is Clojure-only.
A quick search failed me but I am pretty sure my question has been discussing elsewhere, in which case I would appreciate a redirect/summary. Is there a difference between LightTable and Emacs' eval-last-sexp and similar functions? What is LightTable supposed to add? besides support for Clojure.
It's prettier. And it shows parameter expansion in some cases I think. And some day it will have some fancy-ass version of narrow-to-tag (which actually does sound like a real step forward).
Nice work, Chris! I can't wait to start learning Clojure with it.
Hey, I can't figure out how to get this thing to work with C#. What the heck?

j/k. Thanks, for the preview, guys.

Who thought "It's Playtime" was a better title for this than "Light Table Playground released"? Why does this keep happening to Light Table posts?

Edit: Now "It's playtime - Light Table Playground released", after ibdknox altered the blog title. So... success?

I still think it's ridiculous, though.

I don't know, but it's starting to make me sad. It doesn't seem to fall under the "editorial spin" guidelines - if anything it was clarification.

Hopefully the mystery will bring more people in? haha ;)

It's either an auto-renaming script or a human with the personality of an auto-renaming script.
My current hypothesis is that it's an individual moderator (perhaps showing off) running a script without official sanction, hence the silence from the admins.

The way the post on the subject[0] was buried without official comment after over 500 upvotes suggests a certain amount of institutional blindness.

[0] http://news.ycombinator.com/item?id=4102013

I think PG did comment on a subsequent post asking why post on subject[0] was taken down. I am not sure if commenting on a soon-to-be-killed post constitutes an official comment though, perhaps it was decided there is no need since according to policy meta-concerns should be dealt with using email.
So instead of having a thread pop up to address meta-concerns, they have to be dealt with privately causing any front page title change to now have 10-20 comments at the top discussing the title change. All the actual discussion about the article is well beneath the fold now
>Hopefully the mystery will bring more people in? haha ;)

I know that's why people use mysterious titles, but trust me - that's done, it's over, it's the old and busted of social news.

It's one of those things that may have worked when social news was new and interesting and still a novelty, and people would click all sorts of stuff wily-nily just to see what neat treasure lies underneath.

But we're all over that, and now what we're dealing with is information overload - how to manage the signal:noise ratio in the information we consume and maximize the signal.

The expectation of informative titles is a key part of that, so all mysterious titles do now now is piss people off for making them click to see what the article was about, instead of just telling them in the submission title, which is what it's for.

You as a submitter (or advertiser, I've seen studies on this for SEM) are much better served writing a concrete, informative title. You may have less clickthroughs (but sometimes more - specifics are very effective), but every single one of them will be someone interested in whatever you linked to (or are selling, in the latter case), more likely to read, buy, participate, etc., and less likely to close the window annoyed at having been tricked into wasting a few seconds and attention on something they don't care about.

Uggh. I'm very interested in LightTable but probably wouldn't have clicked on that one, unless it got to 300 points or so.
I clicked on this when it was still Light Table Playground and that was interesting to me, but "It's Playtime"? What the hell is that? It doesn't tell me anything at all about the article and I only figured it out by clicking on the comments.

I don't see anything wrong with having a title that is different than the source's title if it gives CONTEXT, which it did in this case.

The original title ("Light Table Playground released") was significantly more informative.
If it was intended to prefer the author's title, even "It's playtime - Light Table Playground released" is far better.
To be fair, I added that after it got changed with the hope it might end up reverted :)
This has got to stop. I don't know if the rewriting is getting especially bad lately, or if it's just happening more to the articles I'm reading.

He's already altered the page title to "It's playtime - Light Table Playground released"...can we at least get someone to include the subtitle on HN?

(comment deleted)
The new title is definitely better, imho. I hate titles that keep me guessing about what the article is actually about.

"It's Playtime" has zero informative value. At least with the edit I now know it's about Light Table, and can click or skip as necessary and not waste any cycles guessing, or clicking and finding it's something I'm not interested in.

Uninformative titles are a plague. Concrete titles (and concrete language in general, but that's a whole nother blog post) are always better than vague ones, no matter how catchy, cutesy, or kitschy you may think it is.

I'm really hoping someone makes something similar to this for Vim.
VimClojure https://github.com/vim-scripts/VimClojure is something similar for vim. LightTable seems to focus on showing execution trace which isn't always desirable(a function that delete files, gets file over the network, does a lengthy computation etc). VimClojure provides you completions, repl, looking up doc, going to source etc.
I'm really hoping someone makes something similar to this for Vim.
Perhaps provide some interesting piece of code to look at?
I used it and it's not bad at all for a "playtime".

But since I've no idea how to write code in Closure, it's not useful for me.

What I want is a Python version. A Python enabled Light Table would definitely replace Python's REPL for me.

Better start coding!
Not quite, Granger committed to making a Python version in the Kickstarter.
...and got enough funding for it.
The funding floor for Python is the commitment.
Love it. As someone who's only played around with Clojure, it's a wonderful tool for learning / refreshing.
(comment deleted)
I was highly surprised this worked for Snow Leopard and it being almost 2 releases old.

Nice job.

A fair number of people were still on Snow Leopard (because Lion is a bit of a disaster), so we were very intentional about making that work.
I'm getting this on Snow Leopard (x86):

  --- Checking for updates... 
  --- Starting server... (this takes several seconds) 
  --- Server up! 
  The application cannot be opened because it has an incorrect executable format.
But, hitting localhost:8833 does bring up the app.
> because Lion is a bit of a disaster

How so?