Hacker Newsnew | past | comments | ask | show | jobs | submit | more coding4all's commentslogin

I'll give it a shot. Thanks for posting.


This can be done in Clojure with core.async [1] and transducers [2]

[1] http://clojure.com/blog/2013/06/28/clojure-core-async-channe...

[2] https://www.youtube.com/watch?v=6mTbuzafcII


Clojure for the win yet again.


There's nothing - or very little - language specific here. The idea - as TFA admits - is old and already implemented a few times. Aside from (many) implementations in "esoteric" (Smalltalk, Self, Lisp...) languages, we even have things like LivelyKernel, which is implemented in JavaScript... and almost nobody heard about it.


Did you read the last two paragraphs?

1. >"It is based on Clojure because Clojure comes with a set of attractive properties."

2. >"Clojure also combines an exciting mindset around simplicity with enough pragmatism to make it a successful system for real-world projects."

3. >"Additionally, Clojure's strong view on how state is handled, the distinction between identities and values and focus on immutability make it easier to deal with the complexities that come with "live programming"."

That sounds pretty language specific to me.


1 and 2 are platitudes devoid of content. 3 is a bold claim but doesn't pan out in practice: live programming is creating to changes in code and state, making changes go away only eliminates the problem by eliminating the experience (see [1]).

[1] http://research.microsoft.com/en-us/people/smcdirm/managedti...


I think he means that _using clojure_ (to implement the IDE) is very language specific as opposed to saying "it is based on clojure" or "clojure is cool because X" (which everyone can).


I believe they are talking about the programming experience vs. the implementation. Here is the specific passage:

> Additionally, Clojure's strong view on how state is managed, the distinction between identities and values and the focus on immutability all make it easier to deal with the complexities that come with "live programming".

The first point makes sense; the second point doesn't. Immutability either avoids the problem of change by denying or pushes it up for someone else to handle. So say you have a dictionary: do you handle change directly by mutating the dictionary or do you create a new dictionary to be diffed later? The first way is much easier than the second.

The next sentence is true:

> Having a strong concept of what state is and how state transitions occur makes programming tools simpler.

This is very true, but again detecting a state transition is much easier when you allow for mutation of state (otherwise, diffing must be used, and that's expensive).

But anyways, this isn't really live programming as envisioned by Hancock: there is a manual "re-evaluate this line code" command under the current program state; there is no repairing of the past; compare against the Elm live programming demo, which is fully live at the code level.


To be fair to Clojure, it has a much more nuanced approach to state management than simple encouraging immutability. It pushes that you should be immutable whenever possible, but if you must use state then you should use it in a controlled and understandable way either by atomic operations, transactional memory, or agent. Further, it provides implementations of all of these things.

So Clojure explicitly allows for state transition and provides controlled and standardized ways of handling it. One of the selling points of Clojure is that it speaks to practicality in implementation by providing alternatives, or in the extreme case, complete escape hatches to low level tools that avoid even it's state control mechanisms. It simply encourages first immutability, and second state control in a well defined way.


I agree with this; Clojure's design is incredibly pragmatic about state, including mutable state, like any good Lisp.

People just tend to misinterpret this, or they digest it as "immutability good for live programming" when that isn't true: immutability is great for programming with values, but please don't make an immutable world object and replace it when something changes! Unless you are using Javascript, I guess there is just no other way to deal with the DOM other than diffing.


creating -> reacting.


> Did you read the last two paragraphs?

Probably. I mean I skimmed the article, didn't read it very carefully.

> That sounds pretty language specific to me.

I failed to express myself properly: sure TFA is Clojure-specific, it talks about Clojure implementation of X after all.

My point is that it's 'X' that's important here, much more important than 'Clojure' part.

'X' here is "directness and liveness", which are extremely powerful ideas, first described in seventies, then implemented many times by many different people in many different languages and environments. Probably the most well-known implementation is called "Morphic" and comes from Self ('95, by the way: http://web.media.mit.edu/~jmaloney/papers/DirectnessAndLiven...), but there are others.

It's really a good thing that one of the most powerful ideas in GUI programming finally is getting some traction. It took it only forty years. It's unfortunate that it's coming to Clojure: it would be better for it to come to JS with node-webkit or something similar; that way much more people would have a chance to see and work with such a system.

So, in short, in this discussion my perspective is idea-centric instead of language-centric, which is why I don't consider the "Clojure" part important.


Here's a presentation about the Lively Kernel that Dan Ingalls gave at YOW a few years ago...

https://yow.eventer.com/yow-2011-1004/the-live-web-by-dan-in...


>"They don't see what I see,"

No shit. You haven't showed us anything.


Since when did innovation and skill become a characteristic of being young? What's the new age ceiling for when skill meets opportunity? Does this have anything to do with adults working jobs that would have been occupied by minors just 20 years ago?


Youth culture has been responsible for social and cultural innovation (art, music, fashion...) for as long as they've had the extra leisure to devote to it. The growth of the merchant class, the growth of the middle class and the abolition of child labor all resulted in increased leisure for youth segments of society. Your second question must be missing some punctuation because I'm going to suggest you look into Yanni.


Why did I get down-voted? I answered the question and added a little humor. "Innovation" is not analogous to "invention". (Here's Alan Kay on the subject: https://www.youtube.com/watch?v=gTAghAJcO1o) TLDW: Technological adoption follows patterns of consumption like fashion. When we talk about "innovation" we're really talking about technologies that succeed in the marketplace and were successfully adopted by society.

Over the last decade we've seen major tech growth in two areas: mobile computing (computers as fashion accessories) and social networks. Both happen to be areas where youth culture has historically served a role as early adopters. If you're looking for historical perspective to figure out when 20 somethings were given the keys to the tech kingdom, it happened over the last decade when tech companies started using youth culture to drive consumption and "innovation".

Why do we need companies full of 20 year olds?

1) Because 20 year olds develop products for other 20 year olds. Most of them don't have the experience, wisdom or maturity to do anything else and they are fundamentally still trying to please each other and define themselves as a generation.

2) 20 year olds have a ton of energy, health and are willing to work ridiculous hours on bad code for lower pay.

3) Making millionaires out of a few 20 somethings every year helps feed the fire.


Thank god for Minitube [1] and youtube-dl [2] . youtube-dl can download videos from not only YouTube, but over 500 different services.

[1] http://flavio.tordini.org/minitube

[2] https://rg3.github.io/youtube-dl/


Install adblock, it blocks youtube video ads too


4OD, channel 4's on demand service in the UK, now detects if you're running adblock and prevents you from playing the video unless you disable it.

This will soon be common to all as based services.


4OD also serves ridiculous 2 minuet broadcast TV style blocks of Ads. This is why everyone runs AdBlock on their site, and why they fight a loosing battle to try a force people to view them.

Youtube adverts are tolerable, and sometimes i even watch past the 5 second skip if it is funny or interesting. 4OD ads get blocked outright.


I am pretty sure this option was available for a long time. It would be common already if companies went to take that path


Except it only checks on page load. If you open the page with adblock disabled and then switch it on, it works.


In particular, Adblock Edge. They claim not to whitelist. I doubt ad blocking is going to work for Youtube much longer, though. If they can detect when you're not actually watching, what's to stop them from just not letting you watch the video if you refuse to watch at least two seconds of the ad?

"Mohan said the goal is to make sure that advertisers’ video spots run for at least two seconds while covering at least 50 percent of screens -- the industry standard. "


I am sure someone else, if not adblock, would come with something new to beat this new system too.


Ghostery + NoScript does just fine. Apparently people don't know but, NoScript also blocks flash, silverlight, and html5 videos/storage. I didn't even know Youtube had Ads until I went to a friend's house.

Adblock is one of the worst plugins you can ever install if you still wish to use your browser without hogging resources.


Chrome based browsers have µBlock[1] and µMatrix[2] extensions to mitigate this very issue of hogging resources. Unfortunately these are not ported to Firefox yet.

EDIT: Links to source code for both

[1]https://github.com/gorhill/uBlock

[2]https://github.com/gorhill/uMatrix


NoScript is one of the worst plugins you can ever install if you want to have a modern web experience without per-site configuration. Meanwhile, Ghostery caused a number of web sites to stop working for me - commenting in particular, IIRC, but it's been a few years.

ABP could be better implemented, for sure, but mostly it just works.


It's only January and my ISP merger prediction for 2015 is almost true => https://news.ycombinator.com/item?id=8823319


Read the source of your target language, mature projects, and find some style guides. There's going to be some contradictions in style, but you'll figure out what works best sooner than you might think.


Because Google, Apple, and Microsoft decided profit was better than true choice and freedom. Their products are almost malware at this point.


The reason why the word depression is too general is because depression is a normal conceptial state that everyone will endure at least once in life. Real, debilitating, actual depression, is life-long and persist regardless of any one event. It's not just a function of the mind or an emotional relationship related to life, but an absence that can only be described as emotionally detached, sociopathic, and even as an obligation of guilt and doubt simply for existing in a time you can't accept.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: