TechCrunch50: You Want Advertising? We'll Give You Advertising  - <AUTHOR> http://www.techcrunch.com/2009/07/03/techcrunch50-you-want-advertising-well-give-you-advertising/ <comment><USER2> We looked at both shows, but no-starter on TC50 is that you can't have any public exposure before the event. This seems pretty silly, in my opinion. Most decent startups should have exposure before a singular event. Banking on entry into one event is a poor decision (more foolish is banking on winning the competition, as that's where 99% of the publicity goes).

DEMO has less stringent requirements when it comes to the amount of publicity a startup has before the event, which, in my opinion, allows companies that aren't sitting on their butts when it comes to marketing have a nice big event at which to launch.

Edit: I should also note that I've had one group of friends go to DEMO, and one get into the TC50 Demo Pit. The former got a ton of exposure and new users. The latter got no benefit in terms of attracting users. Granted, this is a minimal sample size.

</comment><comment><USER3> Great drama, though Mike does have a point - the $1mil prize is only useful if IDG has a magazine in your niche. That said, DEMO still has the most mainstream press walking the floor (nytimes, etc) and it covers much more than just web startups. Quick rule of thumb: you want mainstream press: Demo. You want exposure in Silicon Valley: TC50. Neither event is necessary. Why launch with a flood of 40-100 other companies when you could launch in a down news cycle and get all the attention for your company? And although it's fun, beware of manufactured drama

</comment><comment><USER4> That Mikey Arrington sure is a scrappy little thing, aint he?

Honestly, though, I can't believe anyone would pay to play at DEMO.

<comment><USER5> Well, to play devil's advocate:

Attendees looking to invest in new companies probably like DEMO because the presenters are convinced enough they have a great product that they'll come up with the funds to go there. They're showing both a solid demo and enough leadership/backing to procure the money to play.

At TechCrunch50, investors can see a different sort of startup. One who has a lot of potential, but may not have had the drive/opportunity to gather any real money in the first place.

From a purely investment risk perspective, companies that are already finding capital with a good idea and a good demo have more going for them than startups that merely have an idea and a good demo.

Because of this, perhaps VC firms (and big business partners) like DEMO more and angels/seed funds like TechCrunch 50 more.

(again, just playing devil's advocate here)

<comment><USER4> And, of course, the big gaping hole in that argument is that if you can effectively raise money to participate in DEMO, then you don't need DEMO's help with raising money.

I'd be curious to see a breakdown of success vs. failure from DEMO and TC50 launches. I'm betting, even without knowing _anything_ about the selection criteria of either or having ever spent any time at all looking at the companies launching at either, that TC50 produces more success stories.

Hmmm...actually I just checked out the DEMO site...there's an awful lot of old companies "launched" at DEMO (RealNetworks, really!?!?).

So, now I not only can't believe anyone would pay to present at DEMO, I _also_ can't believe anyone would be willing to sit through that kind of crapfest. It's just a bunch of ads. Why would anyone, particularly someone representing millions or billions of dollars, want to sit through a bunch of ads?

I just don't get it, obviously. Pretty swish website they have, though.

Edit: DEMO 09 appears to have had roughly half the participants as DEMO Fall 08. Perhaps the rules changed, or perhaps folks made the connection that it's not the best use of time/effort/money. I dunno.

<comment><USER5> > And, of course, the big gaping hole in that argument is that if you can > effectively raise money to participate in DEMO, then you don't need DEMO's > help with raising money.

That sounds a bit like a reflexive argument to my comment.

Conferences aside and all other things being equal-- if you were an investor, would you rather put your money in a team you know can already raise $20,000 if they need it versus someone with unknown skills/means in that area?

Surely it's not a negative. You know the old adage that most investors are happy to invest in companies that don't really need their money.

But of course, just because a company can raise $20k doesn't mean they don't need "real" money-- which is surely why they got the initial funds so they could demo and raise more.

<comment><USER4> Sure. I think your devil's advocate positions were quite well-reasoned. I'm just returning the favor. A few companies I respect have done DEMO. I don't think they're idiots, just because they wasted $20k on DEMO. Everybody makes mistakes. But, I really don't think I'd be willing to sit through that particular dog and pony show, if I were an investor.

</comment></comment></comment></comment></comment><comment><USER6> As a socially interesting analysis I think there is enough of a parallel here to think of this as a flame-war between TC50 and DEMO - on the million dollar scale..

I have to say though as someone who has taken little or no interest in either event the Techcrunch "prize" seems vast... I know I'd kill for a full $1,000,000 in advertising on their sites... it could worth billions :D

I dont like Arrington much: but I have to admit he has some style :)

</comment><comment><USER7> Right now, the big winner is the startups... The more money and goodies going their way, the better off they are.

The more noise about launches, the better for entrepreneurs.

disclosure: we were a tc50 company last year (this only minimally impacts the content of this comment)

<comment><USER8> That was my first thought as well. But it I'm afraid the "right now" is the key part of your first sentence.

It doesn't really seem like TC is trying to help startups with the prize. It looks more like an attempt to push out DEMO so they can become the only major startup demo-event.

The article is written as if DEMO added the prize money as an attack on TC50 and as if DEMO is trying to trick entrepreneurs with fake rates and hidden expenses. None of it backed up in any way.

To me the article look like FUD and the TC50/DEMO war fairly one sided.

<comment><USER9> Exactly. The post starts with: "Despite our best intentions, it looks like the DEMO v. TechCrunch50 war will continue" but clearly Michael Arrington is fueling the war as much as DEMO is: "if DEMO increases their number, we'll increase ours to stay at 2x whatever they are at"

Being the peaceful one would be not to react to what the other one is doing...

</comment></comment></comment><comment><USER10> In the same way they question DEMO's advertising giveaway you could probably question the TechCrunch one. It's just going to be advertising on there site? Unless your aiming your startup purely at the tech community doesn't sound great.

</comment><comment><USER11> Anyone wondering how this can be a profitable decision for TC? Do they gross so much off TC50 that they can afford to give away $4M for an edge in a contest they were already winning by a landslide?

<comment><USER12> TechCrunch probably couldn't sell enough ad space this year.

</comment></comment><comment><USER13> I'd be interested to find anecdotal evidence from HN startups; did you apply for or launch at TC50 or DEMO? How did it go?

</comment><comment><USER14> Wow, $20,000 is quite a lot of money, I would rather spend it on surviving a few more months as a startup to make a better product to make my users happy. Who are really the only ones who will eventually make your product popular or unpopular.

May be they are targeting companies that have already been funded.

<comment><USER15> >> Maybe they are targeting companies that have already been funded.

This is definitely the case.

I can't imagine an angel would be happy if their money was spent to present at DEMO. A YC company would have to spend their entire 3 month stipend to get a spot. Insanity.</comment></comment>


How to design a multi-user ajax web application to be concurrently safe - <AUTHOR> http://stackoverflow.com/questions/4815226/how-to-design-a-multi-user-ajax-web-application-to-be-concurrently-safe <comment><USER2> A bunch of research was done on this kind of problem in the 1990s under the heading "Operational Transformation".[1] Google have subsequently applied it to Wave and Google Docs.

If you are prepared to accept some suckiness, you can probably do something simpler, borrowing partly from synchronous lockstep RTS simulations.

Put a single canonical model on your server. The server accepts command objects from clients, then forwards them to other clients. If each client is running the same code and applies the same command objects[2] in the same order, they will have identical local models.

It'll drift, of course. Periodically you need to do some sort of checksum and repair. But it's probably simpler than a fully-dressed OT system.

In terms of implementation, I'm working towards this sort of a system currently for an app I am trying to write. AngularJS on the front end, emitting command objects to a server which rebroadcasts to other clients. I don't have the details nailed down. For example, I don't have a firm concept of how or whether to try and coalesce multiple changes locally. And I don't have a firm view on the server system.

[1] [http://en.wikipedia.org/wiki/Operational_transformation](http://en.wikipedia.org/wiki/Operational_transformation)

[2] [http://en.wikipedia.org/wiki/Command_pattern](http://en.wikipedia.org/wiki/Command_pattern)

[3] [http://www.altdevblogaday.com/2011/07/09/synchronous-rts- eng...](http://www.altdevblogaday.com/2011/07/09/synchronous-rts-engines-and- a-tale-of-desyncs/)

<comment><USER3> In some hyp. CMS, I considered just using a token, since the users just edit the same entity only occasionaly.

The first one would hold the token (be able to edit the entity), and the other ones would just see and if they wanted, request a token to edit.

Much simpler than OT/merging/etc, I thought... I wonder if it would work well.

<comment><USER4> However, in this situation, it's better to ask for forgiveness than permission.

<comment><USER3> I don't get how this applies here. "Asking for permission" simplifies the system, in this description. Of course, if the conflict rate gets too high, a token-based system fails.

</comment></comment></comment></comment><comment><USER5> Very thorough answer but I am think there are a lot of scenarios where you don't need every aspect of this solution. I think unique ids and message ordering can handle many cases although not the scenario in the answer. Not sure if someone mentioned but operational transforms might also apply.

<comment><USER6> Besides OT, check out CRDT.

[https://github.com/dominictarr/scuttlebutt](https://github.com/dominictarr/scuttlebutt)

</comment></comment><comment><USER7> I don't understand the question. How is using ajax any different than a non- ajax architecture? Doesn't this all boil down to "use optimistic locking" ?

<comment><USER8> The answer is there is no good answer, at least technically. The best solutions lie in UX, where a user is alerted to the conflict and decides which copy to keep.

</comment></comment><comment><USER9> One way to do this is:

\- have a way of working out which users can see which objects

\- whenever an object changes, note that all observers need to see an update

\- either push that notification to the user, or record it ready for the next time they poll

\- when a user sees "object X has been updated", have them poll for it's latest state (which may be "deleted").

Possible optimisation: you can decorate some or all the "X has changed" messages with the details of the change, creating a journal

This assumes the server can act as a serialisation point for all updates and so provide a single coherent time-series.

It also requires that the server be able to fail updates which are the result of stale UI data. (e.g. someone tries to edit an object someone else has deleted).

</comment><comment><USER10> I've been pondering this recently and have come to the following conclusions:

* State is expressed as a fold on a stream of events. The Event Sourcing pattern.

* Clients send commands and receive updates to the state on separate channels. (CQRS)

* Sharejs seems to be about the only thing that makes sense to manage client states.

I'd quite like to build the server in Haskell as it's such a good fit for expressing folds over streams.

One thing that I've not really got a handle on though is the correspondence between OT and Event sourcing... Is OT simply the operation that you use to fold the stream of events into a state or is there more to it than that? Enlightenment gratefully received!

</comment><comment><USER11> Hi,

Why not look at ShareJS ([http://sharejs.org/](http://sharejs.org/)) and DerbyJS ([http://derbyjs.com/](http://derbyjs.com/))?

Cheers, Victor

<comment><USER12> There's also MeteorJS ([http://meteor.com/](http://meteor.com/)) and others...

For the most part combining pub-sub (Redis or others) with a comet/websocket solution (socket.io, SignalR, etc) and and data entities (backbone, angular) that can be used with such a backend (observer) pattern isn't too difficult with the tools available.

Unfortunately there are a lot of options for each part of this, and getting a "right" solution is hard.. there are the auto-magical solutions like you mention, just the same... years of .Net dev make me leary of "magic". I prefer using the most mature/maturing parts and building something useful, like legos.</comment></comment>


Ask HN: Most desirable features in a parser for a data interchange format? - <AUTHOR> Dear HN,<p>If you were entrusted with the mission of designing the ideal parser for a data interchange format (say XML, JSON, YAML, etc...) what features would you add? <comment><USER2> The lesson of history is that there is no "ideal" parser; it seems that every major version of every programming environment (Java, Python, PHP, .net, ...) gets a new XML parser because people could not stand to use the last one.

Here are some features (sometimes mutually incompatible) that parsers can have:

      * fast
      * low memory consumption
      * streaming operation
      * building a complete document tree
      * streaming document chunks
      * being strict
      * being lenient
      * being extremely lenient (handle "last Thursday" as a date)
      * intelligent error handling
      * intelligent error handling of errors discovered downstream (ex. some invariant of the document is found to be untrue when we are using the output of the parser,  we can point the user to the line number and give a clear explanation of the problem)
      * static orientation (take a document with a known schema and populate POJOs with them)
      * dynamic orientation (easily handle any document without anything known about structure)
      * really,  really, fast
      * use same parser for multiple formats (or at least look that way)</comment>


FBI TAKEDOWN NOTICE - <AUTHOR> http://phrack.com/ <comment><USER2> What makes this so scary, is that it is so utterly believable. I mean, how many of us would be utterly stunned if the FBI _did_ seize Phrack?

</comment><comment><USER3> > GET [http://phrack.com](http://phrack.com) HTTP/1.1 > User-Agent: > Mozilla/5.0 (Linux; Android 6.0.1; ASUS_Z00LD Build/MMB29P) > AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile > Safari/537.36 AppEngine-Google; > (+[http://code.google.com/appengine;](http://code.google.com/appengine;) > appid: populace-soho)

HTTP/1.1 200

Content-Length: 1565 Accept-Ranges: bytes Keep-Alive: timeout=15, max=100 Server: Apache Last-Modified: Fri, 31 Mar 2017 18:04:05 GMT Connection: Keep- Alive Etag: "6df31bbd34f5f59ce93f4244fd863328173fdfd0" Date: Sat, 01 Apr 2017 14:33:56 GMT Content-Type: text/html

<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "[http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">](http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">)   <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="content-language" content="en" /> <meta name="description" content="304183039b6f7a2595db858f05eab355" /> <meta name="keywords" content="phrack" /> <meta name="robots" content="follow,index,all" />

       <meta name="revisit-after" content="7 days" />

       <title>SEIZED SITE</title>

       <link href="/css/style.css" rel="stylesheet" type="text/css">

SEIZED SITE

 FBI TAKEDOWN NOTICE

                                THIS HACKING SITE HAS BEEN SEIZED

           by the Federal Bureau of Investigation, in accordance with a seizure
           warrant obtained by the United States Attorney's Office for the Southern
           District of New York and issued pursuant to 18 U.S.C.  paragraph 983(j) by
           the United States District Court for the Southern District of New York

Truncated? No

<comment><USER3> I'm curious what the meta description content value means.

<comment><USER4> It's the MD5 hash of "April1st"

<comment><USER5> So an april fools prank, confirmed.

</comment></comment></comment></comment><comment><USER6> Wow. Just wow.

</comment><comment><USER4> looks legit.</comment>


5 Filters I Use to Consider Startup Investments - <AUTHOR> http://www.k9ventures.com/2010/09/investment-criteria/

<comment><USER2> All good rules except for the one about distributed teams. Some of the best teams I've worked with have been fully or partly distributed, and as long as everyone has worked with everyone before, it works out fine. In fact, it's a good way to get extra productivity out of everyone, since there's less distraction from being together in an office.</comment>


Everything You Should Know About Sound (2016) - <AUTHOR> https://waitbutwhy.com/2016/03/sound.html <comment><USER2> _We often measure loudness using a unit called the decibel (named after Alexander Graham Bell)._

Not really. Decibels themselves are unitless: we just have to use them because the magnitude of sound pressure levels varies across a real large range so it's very useful to have a compressive scale.

Pedantry ahoy!

1\. The unit of loudness is the _phon_. Loudness is not independent of frequency: [https://en.wikipedia.org/wiki/Phon](https://en.wikipedia.org/wiki/Phon)

2\. sound _intensity_ is measured as a sound pressure level (SPL [https://en.wikipedia.org/wiki/Sound_pressure](https://en.wikipedia.org/wiki/Sound_pressure)) in dB: re 20muPa in air, 1 muPa in water. It is a frequency independent measure, though there are perceptual weighting scales (a- and b-weightings are common) to normalize things for occupational exposure limits.

Sound intensity and sound loudness are related but not at all the same. Loudness is a _percept_ , intensity is a physical measure of a system.

I can play a 100 kHz tone at extremely high sound pressure levels and you will never hear it. It's not loud, to a human. It's probably quite loud if you're a bat.

<comment><USER3> Thanks for the clarification. Learned something new today =)

What I've always wondered though: can loud sounds outside the frequency range that is audible to us cause hearing damage?

So, say we have a 120dB 60kHz audio source, would that be dangerous for our hearing? Would we be able to sense it (although not hear it)

<comment><USER4> "It is known that exposure to noise of a certain frequency does not induce a higher TS at that frequency, but rather at 0.5 to 2 octaves above that frequency, depending on the species"[1] ("auditory threshold shift (TS)").

[1] [https://www.frontiersin.org/articles/10.3389/fnagi.2015.0000...](https://www.frontiersin.org/articles/10.3389/fnagi.2015.00007/full)

A meta observation: When the internet was new, and then the web, there was a puzzle of how society might adapt to information becoming more easily accessible than it had been. Bomb making instructions was a commonly used example. Society responded narrowly, by for instance outlawing such instructions. There's an entwined puzzle around _understanding_ information. If science education someday fails less pervasively, how might society adapt? It's perhaps not a near-term challenge, but maybe something to think about.

<comment><USER5> Bomb making intructions are not illegal however.

</comment></comment></comment></comment><comment><USER6> Maybe somebody has a recommendation on a similar article, but on _programming_ sound? Somehow there's much less material on working with sound (especially low-level details about low-latency realtime sound effects) than on working with images.

<comment><USER7> Programming sound is hard. Real-time stuff is almost always coded in C or C++ because it needs to be performant and latency is always a consideration. One dropped sample can be heard and you can't afford to delay because things need to feel responsive if they are real-time. There are lots of interesting projects out there but there is also a wealth of creative coding in the area, especially in environments like Max/MSP, PureData who are creating algorithms from scratch inside and possibly porting them out to other code bases. One good project is [1] which is aimed at making C++ coding for audio easier and more accessible. The focus is quite wide and aims at webaudio, VST, faust code etc.

[1] [https://github.com/iPlug2/iPlug2](https://github.com/iPlug2/iPlug2)

<comment><USER6> I've figured as much about performance, somehow while working with video I rarely reach for C++ lately, the firm realtime nature of sound makes performance harder than video even though the bitrate is orders of magnitude lower. Thanks for the link, will be looking at that and PortAudio.

</comment></comment></comment><comment><USER8> _The next time you're talking to someone, I want you to stop and think about what's happening. Your brain has a thought. It translates that thought into a pattern of pressure waves. Then your lungs send air out of your body, but as you do that, you vibrate your vocal chords in just the right way and you move your mouth and tongue into just the right shapes that by the time the air leaves you, it's embedded with a pattern of high- and low-pressure areas. The code in that air then spreads out to all the air in the vicinity, a little bit of which ends up in your friend's ear, where it passes by their eardrum. When it does, it vibrates their eardrum in such a way as to pass on not only the code, but exactly where in the room it came from and the particular tone of voice it came with. The eardrum's vibrations are transmitted through three tiny bones and into a little sac of fluid, which then transmits the information into electrical impulses and sends them up the auditory nerve and into the brain, where the information is decoded. And all of that happens in an eighth of a second, without any effort from either of you._

Something quite intruiging - to me - about sound (and in particular music and speech) is that it is spread across time. At any one instant of frozen time, nothing in particular is happening with a sound - this is different to vision, where if you imagine freezing time, you get a still image. So the way sound is processed before it reaches the level of consciousness must need some kind of time buffer. So when, say, you are appreciating a drum pattern in a piece of music, your brain is processing the last few seconds of sound, noticing and highlighting the patterns and then presenting it to your consciousness as a kindof rhythmic artifact that you can appreciate and anticipate while it is still happening.

<comment><USER9> If you freeze video, you get an image. If you freeze sound, you get an "image" on the speaker. It "stays" where it is. (At the voltage potential it is.) We put HPFs on subwoofers so they don't stay offset like that.

The same way vision in human sight makes very little sense without things being able to move (integration over time), hearing in the human sense seems to be the same. Recording the change in pressure over time of the surrounding air, instead of photons hitting you. But I am pretty certain that "vision" that works in "single blips" with no refresh is just as pointless as a paused audio recording for survival of an animal.

<comment><USER10> Why would you put a high pass filter on a subwoofer?

<comment><USER11> To eliminate DC Offset (i.e. 0Hz).

</comment></comment></comment></comment><comment><USER12> > each increase of 10 dB doubles the loudness.

I understand a 10 db increase to represent an increase by a factor of 10, and that an increase of log(2) = (~3) db was a doubling.

<comment><USER13> That's power, not necessarily loudness.

Loudness has to do with perception, which also has a lot to do with content. For most people (a fairly wide margin here) _music_ sounds about twice as loud when it's +10dB.

<comment><USER14> yep, he vaguely mentions this in footnote 6

</comment></comment></comment><comment><USER15> I enjoyed this part: "Researching for this post and learning about what sound is gave me a new perspective on the tree falling in the forest with nobody there to hear it question. I now think that no, it doesn't make a sound. It makes an air pressure wave and that's it."

</comment><comment><USER16> Do I get this correct? In the case of a sound so loud that is leaving vacuum behind, there should be another wave on the opposite direction that fils up the vacuum, when the original wave gets very weak. Does this second wave make a sound and/or destroy things?

</comment><comment><USER17> It's uncanny how similar sound and radio waves are in terms of propagation, despite being entirely different types of energy.

That said, there isn't a lot of visual diagrams on radio wave propagation. If you happen to know of some great diagrams, please share.

<comment><USER18> [https://www.youtube.com/user/ElectromagnetismAnim/videos](https://www.youtube.com/user/ElectromagnetismAnim/videos)</comment></comment>


Companies vs Candidates - <AUTHOR> http://blog.jobbox.io/companies-employ-but-candidates-have-got-the-power/

<comment><USER2> Website seems down, so here's a cached version: [http://webcache.googleusercontent.com/search?q=cache:vXdZ- Ls...](http://webcache.googleusercontent.com/search?q=cache:vXdZ- Ls89RwJ:blog.jobbox.io/companies-employ-but-candidates-have-got-the- power/+&cd=1&hl=en&ct=clnk&gl=us)</comment>


How will 3D printing affect the chinese economy? - <AUTHOR>

So with the inevitability of 3D printing. Any thoughts on how that might affect the chinese economy as so many simple toys and that come from china could now be printed at ones computer for even less? <comment><USER2> I don't think the production of simple toys will be affected at all by 3D printing, at least for the considerable future. Mass-production is so incredibly cost-effective for items that are all the same.

3D printing is nice for prototyping and for custom fitted, user-adapted items. This will likely remain a high-end segment for a long time. Eventually, we might be going for an economy in which every product ordered is printed and produced adapted on demand to customer's wishes, but I'm not sure how realistic that is. There will likely always be something to win by exploiting scale. Especially for low-end products.

2D printing didn't replace print shops with specialized mass-production equipment for printing books/magazines either.

<comment><USER3> That will be the case until people have 3D printers in their homes, and you can download a toy instead of buying it.

<comment><USER4> In that case, I WILL download a car.

</comment></comment></comment><comment><USER5> You'd be amazed at how cheap mass produced injection molded parts are, 3D printing won't ever come close to those prices. Also you're forgetting about the assembly cost which is the Chinese advantage.

Really I don't think it will change even the prototype industry much, maybe for first runs but for production models I like to select the finish, shine, paint, etc and a 3D printer just can't do that at the same cost. Even comparing turnaround time, I can get a prototype rushed from order to me in 24 hours for less than a $1000. If you're willing to wait a week, a few hundred and it looks like a factory part.

</comment><comment><USER6> Not less. A machine designed to do everything can never beat a single-purpose factory line. Admittedly though, they may save on time and transportation costs.

My prediction is that in order for these machines to become mainstream some companies will need to allow reproduction of their product designs first, and create a digital channel specifically for delivering the designs to consumers and their 3d printers.

</comment><comment><USER7> I am surprised that so many here have a generally pessimistic view on 3D printing. While I am no expert in the topic - it seems like a technology that could drastically accelerate production of custom parts, simple objects, even simple machines which would require some assembly. I've read that 3D Printing kiosks will be deployed later this year in certain retail chains for ordering and pickup in a system similar to those photo kiosks at your local Walmart/Target. When the tech advances to a point where downloading build files + materials cost is comparable to the cost of transporting cheap goods from China we will see mass adoption. The cost of importing from China is heavily subsidized by cheap oil transportation fuels. That being said, I see a bright future for instafab technology and the resulting products. Future 3D designers could gain followings, build entire brands & businesses around the resulting distribution model.

</comment><comment><USER8> China is slowing, but surely, going towards a service oriented economy. The stated goal of the PRC governement for their next 5-year plan was to move from 40% of the economy in services to 70%. This goal is, IMHO, attainable for China which not only has a vast higher education system, but is also following the example of Japan, Korea and Taiwan who went through the same transition.

As that will clearly decrease the need for manufacturing in China, the ability for us to print the goods they are now creating cheaply will hardly affect their economy.

</comment><comment><USER9> They will always be able to do things cheaper. Because their manpower is cheaper, they will buy and sell stuff in larger quantities and produce it with their own materials (which is at the moment the costly part).

For now, unless you have a Makerbot and want ABS lego, consumers simply can't afford 3D printing their toys with commercial 3D printers. It's just like with regular printers: the ink is more expensive than the printer itself!

However, that's not to say that it will always remain that way and I can't wait for that day to come!

</comment><comment><USER10> Maybe they'll produce cheaper 3D printers and make profit again!

</comment><comment><USER11> In the same way that inkjet printing affected the book publishing industry.

Try printing a full-length book on your desktop printer, and let me know how much the total cost of your time, the paper, and the ink is.

Compare it to the cost of a normal paperback and then note that the quality of the typesetting on your printed version sucks, and there's no cover.</comment>


Static Images - <AUTHOR> http://zerodistraction.com/blog/2012/4/22/static-images.html

<comment><USER2> Thats too bad wired isn't on that. You should write to them, I might as well. Many companies are publishing fanastic epub format works though. A great example would be Martha Stuart, who has done an amazing job with the digital versions of Living. Thanks for the post!</comment>


Ask HN: Someone working on a Inbox (by Gmail) alternative? - <AUTHOR> All I want is to have reminders/todo's in the same list as my emails.
I don't want anything else. Just plain and simple. Would pay $10/month for it. No Slack or Gdocs or whatever integrations.
Do you know anyone working on this? <comment><USER2> Airmail for macOS tries to do that: [http://docs.airmailapp.com/airmail-for- mac/services-provided...](http://docs.airmailapp.com/airmail-for-mac/services- provided-by-airmail/todo-done-memo-airmail-for-macos), [https://thesweetsetup.com/apps/favorite-email-client- os-x/](https://thesweetsetup.com/apps/favorite-email-client-os-x/)

<comment><AUTHOR> Looks cool, but it doesn't seem that one can add reminders to the same hierarchy as emails. Also, I have an Android.

<comment><USER3> Yes, reminders in the same hierarchy as emails is the secret sauce of Inbox for me.

Doesn't look like any alternative has it.

</comment></comment></comment><comment><USER4> One of my buddies is working on this, you may find it helpful: [https://kanbanmail.app/](https://kanbanmail.app/)

<comment><AUTHOR> Thanks for sharing, my feedback (only for my case, so don't take it as absolute):

\- Too complicated

\- Mobile app is a must for email

\- Can't add reminders

</comment></comment><comment><USER5> Would you trust some fresh company with your e-mail? (remember about the "I forgot my password" feature on accounts associated with that e-mail)

</comment><comment><USER6> I am the developer of [https://www.centask.com](https://www.centask.com) it has reminders and todo's with Gmail emails in the same list or hierarchy

<comment><AUTHOR> Cool. In my case, I would need a better UI and a mobile client (from what I can see from your videos it doesn't have both).

</comment></comment><comment><USER7> Superhuman [https://superhuman.com/](https://superhuman.com/)

<comment><AUTHOR> As I understand it you can't add Inbox-style reminders, can you? Also, it's $35/month and it has a lot of feature that I don't need (like collecting peoples Social Media profiles etc.)

<comment><USER8> You can set reminders for emails to come back to your inbox both at send and separately when reviewing email. It also has read receipts. And the hotkeys and shortcuts are super powerful. Worth the $ if you have to spend a lot of time in email for the efficiency increase alone.

<comment> Fire-Dragon-DoL It's not the reminder of emails that the OP is talking about. You can do that in Gmail. It's the freedom of adding any reminder to your inbox, not related to emails, that made a huge difference.

</comment></comment></comment></comment><comment><USER9> I'm very tempted to create this...

</comment><comment> Fire-Dragon-DoL Same here, looking hard for it. I'm even considering writing it myself.

</comment><comment><USER10> There's no real money in this, because once you need to build push notifications of new emails, the cost is untenable.

</comment><comment><USER11> FastMail.com</comment>


Show HN: Artpacks.org – Archive of the ANSI and ASCII art scene (1990 to present) - <AUTHOR> http://artpacks.org <comment><USER2> My BBS: [http://artpacks.org/1995/ice9507a.zip/MA- UNH1.ICE](http://artpacks.org/1995/ice9507a.zip/MA-UNH1.ICE)

I was never especially good at making art, but this was my favorite of the things I did make: [http://artpacks.org/1995/fsn-0895.zip/CT- ASY.ANS](http://artpacks.org/1995/fsn-0895.zip/CT-ASY.ANS)

I feel bad for people who were born too late and missed out on the whole BBS scene. Those years were tons of fun, and nothing on the internet has ever been quite like that world.

</comment><comment><USER3> I was in GRiM around ~1992 and an iCE trial artist ~1993 ;-) But I'm probably not in any of these packs. I didn't make it into iCE though, I heard there was some kind of Canadian merger and the management changed.

I first discovered all these ansis on Sanctuary in 305. I never met Tempus Thales but I think we lived in the same neighborhood. I got enough positive feedback from my ansis that I went on to get a BFA in studio art.

<comment><USER4> I almost made it into iCE when MiRAGE (formerly DREAM? I think.. Shihear Kallizard ran it) merged, but I think I was inactive at the time and I really wasn't an iCE-level artist). But I have no copies of my old art and I have never found any online so time to start digging through these.

<comment><USER3> Mirage, that sounds familiar. My impression was ACiD and iCE were the two top groups and you had to be pretty good to get in. Everything was tenebristic because of the way the ansi colors mixed (had no idea what tenebrism was) and the subject matter was almost entirely games/comics characters.

<comment><USER4> Well apparently DREAM (which was a WWIVnet based ANSI group led by Shihear Kallizard) became LTD, or split into LTD and something else.. I was able to find a few of my works for LTD on sixteen colors and they are pretty bad.

</comment></comment></comment></comment><comment><USER5> Don't forget [http://asciiarena.com/](http://asciiarena.com/)

It has the history of Amiga's Ascii scene. 3879 collys.

If someone is not familiar with the term "ascii colly": It was (usually) a .txt file made by a single person. As they originated from Amiga scene, they were mostly in latin1 encoding. In many cases released under some group's name. A typical colly featured 20-60 requested or gifted ascii logos, foreword, index of logos, greetings, respects, some other messages. And of course guest art from other artists (for artist logo, group logo, file_id.diz or headers for "greetings", "respects" etc.). In these text files the file_id.diz was put between @BEGIN_FILE_ID.DIZ and @END_FILE_ID.DIZ tags.

Too bad the site is going down, because the site, as it is today, is consuming too much of the server resources. Some handy web developer could save the site. Currently it seems that there isn't a person in "today's" Amiga scene who had the time or skills to save the site.

<comment><USER6> Please have them contact the archive team, I guarantee they'd want to at least backup all of this: [http://archiveteam.org/index.php?title=Main_Page](http://archiveteam.org/index.php?title=Main_Page)

</comment></comment><comment><USER7> Nice work! There's a great presentation from BSides Las Vegas a few years ago about the ANSI art scene, definitely worth checking out if anyone is interested: [https://www.youtube.com/watch?v=ILNs1GChGDk](https://www.youtube.com/watch?v=ILNs1GChGDk)

<comment><USER8> There are still a couple of ANSI and ASCII art groups with quite an active membership. Perhaps the most notable is Blocktronics: [http://blocktronics.org](http://blocktronics.org)

<comment><AUTHOR> And don't forget Break ([http://breakascii.org/](http://breakascii.org/)) & Impure! :)

</comment></comment></comment><comment><USER9> Fantastic! Anybody know what's being used to render the art as PNGs? Anybody know of a Python library that does the same thing?

I've just realized how much I'd love it if these were distributed as cbz files.

Side note, if the demoscene represents the "high-art" movement in computer art (at least art that originates pre-internet), then the ANSI scene is like the underground graffiti movement.

Their art literally "tagged" every page of every BBS I went to, and being both art scenes, there was some interesting overlaps sometimes between the two scenes (some ANSI groups made demos/intro, some demo groups made ANSI/ASCII art, both had deep roots in computer piracy), but a definite different identity that I'm glad to see has survived to this day.

It's also thrilling to see both scenes alive and fairly vibrant today.

I kind of wish there was a post-ANSI art scene, maybe using unicode, or encoded HTML <div> tags or something equally crazy and inventive.

<comment><USER3> "I kind of wish there was a post-ANSI art scene, maybe using unicode, or encoded HTML <div> tags or something equally crazy and inventive."

If you look at the early issues of WIRED magazine, I would say that's the post-ANSI aesthetic, but that's just my opinion. 1994 and the Internet really killed off the BBS thing fast, otherwise I think Ripterm (or something like it) would have replaced ANSI because modems were getting faster [http://www.bbsdocumentary.com/library/PROGRAMS/GRAPHICS/RIPS...](http://www.bbsdocumentary.com/library/PROGRAMS/GRAPHICS/RIPSCRIPT/) For me, 1994 was switching from primarily Pascal, TheDraw & DeluxePaint to HTML, Photoshop & Java.

As far as the demo scene, I was not really part of that but I think (correct me if I'm wrong) that was based more on the C64/Amiga which had powerful graphics/music capabilities way before the PC. So I would guess the demo scene came first and the ANSI "BBS" art was more a product of the IBM PC-compatible world. I remember going to an Amiga club meeting and a few of these guys had big boxes of disks and they would just trade like that, they had limited Internet access through the local university but they didn't have a BBS.

I offered to host their MODs (Amiga music modules) on my BBS. Because of that, I had the largest collection of MOD music in the area. It was like Napster before Napster ;-)

<comment><USER5> Your information about Amiga isn't correct. In Europe Amiga had really vital Amiga BBS scene. ANSI "BBS" art as a product of IBM-PC world is only true, if you're talking about this so-called "block ascii" that was made using PC's CP437 character set. On Amiga there was a huge amount of artists doing "line ascii" based ansi art for boards (ISO-8859-1).

For example in 1995 in Sweden there were still loads of Amiga boards: [http://www.textfiles.com/bbs/BBSLISTS/elite01.txt](http://www.textfiles.com/bbs/BBSLISTS/elite01.txt)

This is the list of boards the list maintainer considered worthy to be listed.

<comment><USER3> Good to know. That was so long ago, it's possible I just had PC-based lists and forgot there were other lists.

</comment></comment></comment></comment><comment><AUTHOR> FYI: There's some hidden navigation on this site.

On desktop devices, use the arrow keys, esc and enter/return.

On mobile, swipe to navigate between ascii and ansi files within a single .zip file.

</comment><comment><USER10> The first code I ever shipped was an ANSI viewer that was included in several artpacks. It's so great that I can still find it after almost 20 years. I really wish that I'd kept a copy of the source.

</comment><comment><USER11> Funny that this appears now, because I recently decided that I'd like to get back into ASCII art by making ASCII art shrimp. Of course, they are less detailed and smaller in size than much of the artwork here, but that's part of the fun. I started by asking a few people on tilde.town if they'd like to add any and fairly quickly I had a decent collection.

You can see them at [http://tilde.town/~owenversteeg/](http://tilde.town/~owenversteeg/). If you have any to add, please let me know and I'll put them up!

</comment><comment><USER12> Found a minor bug - files with "%" in the name don't work, e.g.:

[http://artpacks.org/1997/303pack1.zip/BYM%CMTS.ANS](http://artpacks.org/1997/303pack1.zip/BYM%CMTS.ANS) [http://artpacks.org/1997/303pack1.zip/BYM%FRST.ANS](http://artpacks.org/1997/303pack1.zip/BYM%FRST.ANS)

By sheer chance, these were the first two ones I tried, so I was rather confused at first...

<comment><USER5> Ah, the same with # if in the pack's name.

</comment></comment><comment><USER13> Can someone explain to me (or provide a link) how you make this type of ascii art?

I've made this kind of ascii art before and it's boring: [http://www.incredibleart.org/links/ascii.html](http://www.incredibleart.org/links/ascii.html)

I want to make ascii art like this: [http://artpacks.org/1990/acidnews.zip/INN.ANS](http://artpacks.org/1990/acidnews.zip/INN.ANS)

See the difference?

<comment><USER13> I discovered that the characters used in that style are called "Block" or "High" ascii and are only found in DOS! That explains why I've never been able to make that style on linux.

<comment><USER5> PabloDraw is available on Linux if you have Mono and gtk-sharp2.

<comment><USER13> Thank you for your comments! I will try this out later today!

</comment></comment></comment></comment><comment><USER14> Question: How do you scroll in the years and ansi pages?

</comment><comment><USER15> This brings back memories. I was never an artist myself but I used some of the scene art for my BBS in the mid to late 90's. I wish there was a way to search based on keywords.

Even the tech is interesting. It uses a JSON API at api.artpacks.org to get the data and renders the art into <canvas> elements.

<comment><AUTHOR> Thanks for noticing the tech. Its held up under the load pretty well considering that the files are all only stored in their original .zip format (rather than unzipped and stored staticly). That, and its hosted on a $5/month DigitalOcean instance. :-)

The rendering engine indeed renders to canvas and was created by Andy Herbert ([https://github.com/ansilove/ansilove.js](https://github.com/ansilove/ansilove.js)). It was based on a popular PHP ANSI->PNG library called AnsiLove (written by Frederick Cambus: [https://github.com/ansilove/ansilove](https://github.com/ansilove/ansilove))

If anyone wants to build anything on the API, please let me know (email in profile), and I'll try harder to keep it stable. :-)

Search is coming soon.

If anyone wants to help, the most needed item is RIPscrip rendering. We use ripscrip.js ([https://github.com/andyherbert/ripscript.js](https://github.com/andyherbert/ripscript.js)) at the moment, but the rendering is broken on a lot of files.

<comment><AUTHOR> Oh, and Andy is on here too! [https://news.ycombinator.com/user?id=andy_herbert](https://news.ycombinator.com/user?id=andy_herbert)

</comment></comment></comment><comment><USER16> Mistigris ftw, Al's House of Meat BBS was the most eye searing board I remember from the early 90s.

</comment><comment><USER17> Sadly, I think this along with the 90's BBS and demoscene era is something people born post-Windows 95 will never really "get" because they didn't live through it. It was an amazing lowtech creative era to be part of growing up.

<comment><USER18> Absolutely. Such good memories from those days.

</comment></comment><comment><USER19> Late last year MiST released our 20th anniversary pack, you can find it on artpacks.org -- it was interesting seeing everyone back together again (the power of Facebook I suppose). It looks like we might start releasing regularly again too!

<comment><AUTHOR> Its been really surprising how much Facebook is responsible for the recent uptick in art scene production. Blocktronics has been a huge inspiration to everyone.

</comment></comment><comment><USER20> iCE reunion in this thread!

Most of my work was loaders (i.e., code, like [http://artpacks.org/1995/ice-9506.zip/BZ- COLRS.EXE](http://artpacks.org/1995/ice-9506.zip/BZ-COLRS.EXE)) and sadly, artpacks.org can't display those (yet) ... but with the recent major advances in emulating DOS in Javascript, I'm sure it's only a matter of time.

The one mentioned above had bouncing squares that distorted the pixels underneath in a way that eventually yielded a psychedelic 320x200 pattern. Here's a screenshot: [http://i.imgur.com/VG5ziRP.png](http://i.imgur.com/VG5ziRP.png)

</comment><comment><USER21> Where's the pre-1990 ASCII art? I first saw ASCII art in 1972. Snoopy surfing and shouting "Kowabunga!" printed on a line printer on the Santa Monica High School's UNIVAC in 1972. Let's capture the older works too.

<comment><USER5> You mean this stuff? [http://artscene.textfiles.com/asciiart/snoopy.untab](http://artscene.textfiles.com/asciiart/snoopy.untab)

At least some of it is preserved in textfiles.com.

</comment></comment><comment><USER22> Pretty amazing seeing stuff I did back in 1995! [http://artpacks.org/1995/fire1095.zip/SL- TST.ANS](http://artpacks.org/1995/fire1095.zip/SL-TST.ANS)

I wasn't good, but those were surely some fun days.

</comment><comment><USER23> Wow. Great stuff. Some friends and I started CiA.

One of my masterpieces: [http://artpacks.org/1996/cia40oz2.zip/TE- WETHR.JPG](http://artpacks.org/1996/cia40oz2.zip/TE-WETHR.JPG)

<comment><USER3> What did you use for that? POVRay?

<comment><USER23> Probably 3D Studio or 3D Studio MAX which had just come out that year.

</comment></comment></comment><comment><USER24> Ah, very nice. For those interested, another site with similar goals that launched last year (i think) was [http://sixteencolors.net/](http://sixteencolors.net/)

<comment><AUTHOR> Both have been around quite a while SixteenColors for a bit longer.

Artpacks.org re-launched with a new design and client-side rendering this year.

</comment></comment><comment><USER25> haliphax // remorse / break / pen15 / vinyl / simple / the!click / ruckus / punc / etc.

:)

</comment><comment><USER26> ohh i wonder if theres any PETSCII in there :)

<comment><USER25> not likely, as PETSCII are actually executables, if I remember correctly.

</comment></comment><comment><USER27> <3 <3 <3</comment>


Employee Equity: Restricted Stock and RSUs - <AUTHOR> http://www.avc.com/a_vc/2010/11/employee-equity-restricted-stock-and-rsus.html

<comment><USER2> Granting someone an RSU doesn't put a financial burden on them to exercise. Also, if you leave a company, you often have a short period (90 days) to exercise any vested options.

If you have 100,000 options at $1/share then you would have to pay $100,000 to exercise if you want to quit. That's often enough to discourage employees from leaving.

With RSUs or restricted stock, you lose some of that implicit lock-in (as I understand it). There may be a way to re-create the lock-in with RSUs, but certainly not with restricted stock.

For reference, OpenDNS did the reverse and gave out restricted stock for our first 3.5 years of being in business and then moved to giving out option grants.

<comment><USER3> Currently receiving RSUs & work for a company that provides financial reporting solutions for companies that reward with equity. Part of the lock-in is simply the desire of the employee to wait for the vest date.

Simply put, for the first year, I received a non-negligible amount of RSUs that vest evenly over 2 years beginning a year after grant. I was receiving these on a monthly basis based on company performance. My first awards began vesting in June of this year, and will continue (monthly) until March of next, with the second half of the grants beginning vesting in June of next again.

It's a pretty strong argument to convince me to stay until at least March of 2012, which at least keeps me here for as long as I've been anywhere else (will have been a total of 4 years). Additionally these shares vest and the value is deposited into my ESPP plan, making it a no brainer to hold onto these shares for the time being, as the company is continuing to grow.

RSUs are a great benefit to the employee, there's no cost up front to them, and it's an obvious correlation between share price & value - vs options that can sometimes be very confusing for employees.

Like OpenDNS however, any further grants coming my way are more likely to be of the Option variety. Personally options are less of a reason for me to stay - if they're granted at a price that is "just out of reach" - there's not going to be much benefit for those 100000 options granted at $1 when the stock price is $1.01.

Lastly, nobody has to pay to quit, often times an option exercise is simply an exercise to cover cost of shares - so the 100000 options at $1.00 would be a benefit of $1000, without the employee having to front the $100000.

</comment></comment><comment><USER4> I have always struggled with the tax consequences combined with the high volatility and lack of liquidity in receiving equity in a start up type of company, with the confusion of the tax laws around it. I don't mind paying more in taxes if I can delay the issuance of stock (in the RSU scenario), but I have a hard time paying taxes up front on something as volatile and illiquid as stock in a start up company. Hopefully the RSU scenario will get tested and more accountants / lawyers will be more comfortable with this scenario.

</comment><comment><USER5> As someone who is moving to the US and will be paid, in part, in restricted stock, I am now wondering if I'm going to get a tax bill with that stock...</comment>


An Introduction to Vectorization - <AUTHOR> https://blog.cr.yp.to/20190430-vectorize.html <comment><USER2> This is all rather disingenuous (the bit on anti-vector campaigners, which is probably the point of the entire blog post).

> Do they seriously believe that Intel and AMD and ARM have all screwed up by > supporting vectorization?

The benefit of vectorization of course depends on the total workload. In a web/application server where e.g. 5% of resources is spent on encryption and 95% on other things like networking it could very well be that enabling vectorization and thus having lower clock speeds results in decreased performance.

> You might run into an anti-vectors campaigner who wants to take this freedom > away

I really don't see much campaigning in the slides, that merely say:

> We do not give a machine code implementation using SSE etc

> – We (and others) have found that using these extensions causes overall > performance of cryptographic systems to slow down

> – Just looking at run times of algorithms on their own is not a good measure > of overall performance in the wild

> – Would caution NIST against putting too much emphasis on academic measures > of performance of algorithms for this reason

I don't see any indication they're against the option of vectorization, but merely warn that systems performance is going to be what matters, and not just the algorithm.

<comment><USER3> Does the clock speed permanently reduce as soon as you use a vector instruction? I would have thought that the clock speed goes back up once the temperature has gone down.

<comment><USER4> It isn't about temperature directly. Recent Intel CPUs instantly incur a noticeable penalty as soon as certain 256 bit or wider instructions are encountered. It doesn't matter if it's only a single instruction, you pay the penalty before anybody notices the temperature.

After some fraction of a second it does revert to normal, if you haven't used any such instructions again.

</comment></comment></comment><comment><USER5> By the author of Salsa20 and ChaCha algorithms, Daniel J. Bernstein.

<comment><USER6> Thanks for pointing this out. He has his own set of candidate submissions to the NIST post quantum competition, so throwing shade at other candidates makes a bit more sense now.

I've done some analysis on one of his candidates and it was _by far_ the slowest on cores which do not feature wide vector operations. My opinion is that you shouldn't just optimise for Intel (as many submissions do) for all the obvious reasons.

Edit: A quote from the slides by Nigel Smart which Bernstein criticises - "[We] Would caution NIST against putting too much emphasis on academic measures of performance of algorithms for this reason"

\- I couldn't agree more.

<comment><USER7> SIMD is available on more than just Intel. What platforms did you test on?

<comment><USER6> Indeed. I was actually looking at very small / embedded cores which do lack SIMD. Think ARM M0/M3/RISC-V-IMC.</comment></comment></comment></comment>


GNOME 3.6 released - <AUTHOR> http://library.gnome.org/misc/release-notes/3.6/index.html.en

<comment><USER2> It's nice to see Gnome is more than alive with over 1100 people commiting since previous version.</comment>


How I ended up writing new real-time kernel - <AUTHOR> http://dmitryfrank.com/articles/how_i_ended_up_writing_my_own_kernel <comment><USER2> That was a great writeup, thanks. The author has a real talent for writing engaging explanations.

I've been making my way through _The Design and Implementation of the FreeBSD operating System_ [1], which is a bit denser and more formal. It was nice to read about some of the same ideas in a different implementation. I'd recommend the book to anybody who enjoyed the post.

[1] [http://www.amazon.com/Design-Implementation-FreeBSD- Operatin...](http://www.amazon.com/Design-Implementation-FreeBSD-Operating- Edition/dp/0321968972)

<comment><USER3> Thank you for such a positive feedback!

And thanks for sharing the book, I'll probably get to it. I've read a couple of books on Linux Kernel before writing TNeo, but haven't read anything on FreeBSD yet.

</comment></comment><comment><USER4> From the overview on Bitbucket ([https://bitbucket.org/dfrank/tneokernel](https://bitbucket.org/dfrank/tneokernel)):

 _TNeo: a real-time kernel (RTOS)

TNeo is a compact and fast real-time kernel for embedded 32/16 bits microprocessors. It performs a preemptive priority-based scheduling and a round-robin scheduling for the tasks with identical priority.

TNeo was born as a thorough review and re-implementation of TNKernel v2.7. The new kernel has well-formed code, inherited bugs are fixed as well as new features being added, it is well documented and tested carefully with unit- tests.

Currently it is available for the following architectures:

ARM Cortex-M cores: Cortex-M0/M0+/M1/M3/M4/M4F (supported toolchains: GCC, Keil RealView, clang, IAR)

Microchip: PIC32/PIC24/dsPIC_

Like TNKernel, it has a custom but very simple FOSS license:

 _Permission to use, copy, modify, and distribute this software in source and binary forms and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation._

Plus the usual all caps disclaimer boilerplate.

</comment><comment><USER5> Honest question: What's the value, if any, of using intrusive linked lists in this context? That is, I would have handled linked lists as something like:

        struct TN_ListItem {
            TN_ListItem * prev;
            TN_ListItem * next;
            void * data;
        }

I can immediately see that each TN_ListItem would take up an extra word of memory in order to store the pointer to the data. Is that the main crux of the issue, or is there something more?

<comment><USER6> Twice the allocations? That can matter for performance reasons.

<comment><USER7> Or even more if the item is included in multiple lists.

</comment></comment></comment><comment><USER8> About FreeRTOS:

> First, I don't like their policy: the license states that it's forbidden to > compare FreeRTOS to any other kernel! (...)

> FreeRTOS may not be used for any competitive or comparative purpose, > including the publication of any form of run time or compile time metric, > without the express permission of Real Time Engineers Ltd. (this is the norm > within the industry and is intended to ensure information accuracy)

It's quite abusive an probably not legal.

<comment><USER3> Agreed. I'm not a lawyer, so not sure about legality, but since this clause is persisted for so long in their license, it seems they have no problems with it.

</comment></comment><comment><USER9> Really thorough and interesting write-up. I don't have much to add, but wanted to express my admiration for the author's grit and perseverance on seeing a problem through to its end.

<comment><USER3> Thank you very much for your feedback!

</comment></comment><comment><USER10> This is well worth a thorough read (I admit at this point I've only properly read the intro and a couple of (the most) interesting looking sections; skimmed the rest) - an entertaining style and very informative.

Love the perseverance that essentially took you from "this kernel has a bug somewhere.." to "I wrote a kernel"!

<comment><USER3> Thanks for the feedback!

</comment></comment><comment><USER11> This was a really good article. I've never used a RTOS, but I'm getting into robotics and I'll keep TNeo in mind if I ever need one. I'm using bigger ARM systems capable of running Linux but I'm curious about possible performance gains from using embedded programming style on these powerful machines.</comment>


How innovative is Clojure as a Lisp dialect from Lisp expert's perspective? - <AUTHOR> https://www.reddit.com/r/lisp/comments/acid7a/how_innovative_is_clojure_as_a_lisp_dialect_from/ <comment><USER2> Outside of applying the research of persistent immutable data structures (which I think is from the Okasaki paper[0]), I think the most innovative part of Clojure is the fact that it's _actually used_ \-- they've managed to build a community and ecosystem with high quality packages and buzz around lisp.

I don't pick Common Lisp/Scheme/Racket despite desperately wanting to because IMO Haskell has a better package ecosystem in my eyes, which is saying a lot. For example, try and find a HTTP server (by far the most common usecase for new projects IMO) that is both multi threaded and async IO capable (i.e. maximally using every core) -- it's surprisingly difficult, I found decent seeming libraries that did either-or, with varying levels of polish and paradigms involved.

I personally prefer CL to Clojure but I just can't imagine trying to convince an enterprise to use Common Lisp these days especially since I can't even really convince myself... Clojure would have the same problem but the ecosystem + buzz is the differentiator in my mind.

[0]: [https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf](https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf)

<comment><USER3> >> " _I think the most innovative part of Clojure is the fact that it 's actually used_"

Popularity is not "innovative".

<comment><USER2> IMO it depends on the lens through which you're looking. If "Clojure" in that sentence to you means the language and the features, then no, popularity is clearly not an innovative feature and is basically orthogonal. It obviously doesn't matter how popular the language is if what we're talking about is whether it supports <language feature x>.

However, if "Clojure" in that sentence is interpreted in a wider, more general and necessarily less concrete sense -- to represent the language, ecosystem, branding, etc -- good marketing/advertising, community management, and general operations-level can be rife with places to innovate.

An excellent language that never gets adopted has effectively zero value IMHO until it's corpse is ransacked by a language that _does_ get adopted. People rediscover things that older languages have done all the while almost every week it seems -- creating a language and the requisite community to actually drive adoption can be considered innovative if the rest of the rest of the landscape is sufficiently similar. Clearly the Clojure project is doing _something_ differently from the Common Lisp/Scheme/Racket crowd.

<comment><USER4> It's too early to say. Clojure's still very young in Lisp terms, so it's natural that it has more hype around it now than languages that were cool 30 years ago. It's also not exactly taking over the world, and I think you're forgetting the buzz Lisp had in the 80s. It will be an innovation in the sense you mean if it has wide adoption and hype in 2050, but it's certainly not anything unprecedented yet.

</comment></comment></comment></comment><comment><USER5> As a Lisp dialect it isn't that innovative besides a few syntactic improvements [0]. I'd gladly use Common Lisp instead if it could do something like ClojureScript. But by design it'd be hard to pull off.

Like a good politician Clojure is pretty unimpressive in of itself, for any given characteristic, someone has a better take. But as a whole it's one of the few sensible choices out there.

[0] I feel like they're generally underrated. Adding [] {} and #{} might not seem like much, but when writing DSLs they really do make all the difference.

<comment><USER6> Parenscript is pretty close, as is js-cl. The issue is mostly that no one has written something like figwheel or shadow-cljs yet.

<comment><USER5> Never heard of js-cl, but Parenscript definitely isn't. It's a glorified s-exp notation for javascript. ClojureScript doesn't compile to plain js. It maintains a lot of it's characteristics at run-time. And this is possible because Clojure does something very similar on the JVM. This in turn enables you to write code targeting both platforms without too much effort.

WISP is a little more like the Parenscript of Clojure (though it's written in javascript itself) [https://github.com/Gozala/wisp/blob/master/doc/language- esse...](https://github.com/Gozala/wisp/blob/master/doc/language- essentials.md)

<comment><USER6> js-cl is a (still-partial) Common Lisp implementation in JavaScript. [https://github.com/jscl- project/jscl/blob/master/README.md](https://github.com/jscl- project/jscl/blob/master/README.md)

Parenscript is a bit more than just a glorified s-expression wrapper for JavaScript: it also implements a lot of the core CL macros (defun, let, lambda, etc.) in ways that are close to the CL semantics. It's limited by the fact that it doesn't want to have its own runtime: so, while there is some degree of source-level compatibility, it doesn't have things like restarts and CLOS that would require runtime support (although, there is a library called the Parenscript object system that provides some degree of source compatibility with CLOS.

<comment><USER5> Yea, it looks like js-cl is more like it. You'd want to implement some reasonable subset of CL. And ClojureScript really didn't have to compromise on much, which is why it's been embraced so easily.

Most of the time you just have a .cljc file and pretty much the same exact code just works on both platforms. In a few places you'll use the #? reader macro that lets you do different stuff based on platform, and that's it.

Well, you basically get simple macros for free as long when you have an s-exp based notation for something. Which is why I do in fact like them. Something like Parenscript or Wisp is really great for lightweight websites.

I remember way back around 2010 or 2011 playing around with CL and Parenscript a bit and it looks like the landscape isn't too different today.

</comment></comment></comment></comment></comment><comment><USER7> the best innovative: Clojure is a functional programming language based on relational database theory.

```

                   Clojure -> DBMS, Super Foxpro

                       STM -> Transaction,MVCC

Persistent Collections -> db, table, col

                  hash-map -> indexed data

                     Watch -> trigger, log

                      Spec -> constraint

                  Core API -> SQL, Built-in function

                  function -> Stored Procedure

                 Meta Data -> System Table

```

I don't care about static or dynamic types, nor about FP, LP, or OO. For me, they are overly complex, unreliable, and unscientific. I think they are very bad and upset me.

The production methods and business management ideas of large industries are also more mature than FP&OO. I have used them as programming ideas.

I think that RMDB is the simplest and most reliable in theory and practice, and it is the most rigorous, long-term, high-stress test in critical situations.

Before using clojure, I was a Foxpro programmer. I used clojure as a super Foxpro, and I also used it successfully in the field of WebApp and R language mixed programming. I will continue to apply this routine to the AI field in the future.

The main development goal of clojure is to write the database. The development idea is actually from the database, not the FP.

[https://github.com/linpengcheng/PurefunctionPipelineDataflow](https://github.com/linpengcheng/PurefunctionPipelineDataflow)

<comment><USER8> >I don't care about static or dynamic types,(...) I think that RMDB is the simplest and most reliable in theory and practice

But... RDMBs are often statically typed (you specify the column type when creating it), and strongly typed (they often don't do auto-conversions of data types.)

<comment><USER7> With reference to the database, as long as I use spec to strictly define (standardization) the core data model, I can ensure the correctness of the system.

I've turned the traditional work of ensuring code correctness from in-code type system validation to data self-validation. Turn the work into verifying the core data model instead of validating the input and output data types of the function.

A system requires only a few core data models, and development is built around the core data model.

Persistent data structures ensure that the modification of the immutable big data model are high performance and memory efficient.

In addition, using my pure function pipeline data stream ([https://github.com/linpengcheng/PurefunctionPipelineDataflow](https://github.com/linpengcheng/PurefunctionPipelineDataflow)) makes debugging, parallelism and extension very simple.

<comment><USER7> Similar to industry, verify that all finished products meet the standards before entering the warehouse.

Also similar to databases, verify their compliance before data enters the database.

That is "Data as a service, Warehouse as the core, operates around it".

</comment></comment></comment></comment><comment><USER9> There are alot of interesting points of view in that thread, unfortunately they're all from people who've spent very little time with Clojure.

The biggest innovation I think, its putting Clojure on the JVM allowing for tight host integrations. This has been my way of introducing Clojure in a number of places it wouldn't otherwise have been able to go.

In terms of writing better code, the performant immutable datastructures yield more power than I can sum up a single comment.

<comment><USER10> The jvm is really nice. Operationaly, it's kind of a pain. You can upgrade the installation on bare metal, you can play the packer game and ship new vms, or you can have crazy fat docker containers. K8s can sort of deal with the vm model, but it's beta.

Go is pretty nice in this regard. I should look into racket and chicken again for static binaries. I gotta say "from scratch " is a fun way to start a dockerfile

<comment><USER11> If you want to write a program in a Lisp and ship it as a compiled binary, your best bet is to use Common Lisp and compile it with SBCL. A stripped SLAD binary will be way smaller with way less overhead then running a whole host of bytecode on a VM like Racket or Clojure.

<comment><USER6> sbcl also has the ability to statically link all your C dependencies using CFFI's STATIC-IMAGE-OP

<comment><USER7> Clojure can also do it. Java Abstracted Foreign Function Layer [https://github.com/jnr/jnr-ffi](https://github.com/jnr/jnr-ffi)

<comment><USER6> I don't think that's exactly the same: CFFI has the ability to bind C libraries with minimal boilerplate just like jnr-ffi does. But, in addition, with CFFI (and sbcl built with a particular set of flags) you can generate an CL image that only depends on GLIBC because you've statically linked all your .so dependencies into the resulting image.

</comment></comment></comment></comment></comment></comment><comment><USER12> It's kind of a trick question. Clojure pulled together a bunch of ideas from other languages and packaged them on the JVM. I'm not sure any single feature is particularly innovative.

Lisp is well known for its ability to adopt ideas from other languages, and most of the important Clojure features (immutable data, transactional memory, etc.) were already available for Common Lisp and Scheme, either built-in or as libraries.

My guess is that most Clojure users came from Java rather than another Lisp. Moving from Java is an obvious win (IMO), but as a CL user I don't see much reason to use Clojure.

<comment><USER13> Scheme and CL have immutable data structures, but not persistent data structures.

<comment><USER14> But the paper that introduced the term 'persistent data structure' said they already existed in Lisp and gave the example of a persistent queue built by sharing the tail of an existing one with a new head?

<comment><USER15> Doesn't have to be built-in to exist in the Lisp ecosystem.

<comment><USER14> Sorry I don't understand what that means?

A Lisp list is a persistent data structure.

<comment><USER15> A Clojure seq offers much more than that. But you can re-create it in CL, it's just not built-in.

<comment><USER14> I was replying to

> Scheme and CL have immutable data structures, but not persistent data > structures.

And I said they do. You've said Clojure persistent data structure offer more. Ok, but I just said they existed in Lisp and they do.

</comment></comment></comment></comment></comment></comment></comment><comment><USER16> I found the conversation to be sub-par and disappointing. I also find it discouraging that these arguments inevitably boil down to a Clojure-vs-Common- Lisp argument. What about Racket, Guile, Chicken Scheme, etc.?

<comment><USER17> Probably because CLojure feels the closest to Common Lisp, so it's the best comparison.

</comment></comment><comment><USER18> Vsevolod Dymokin, a known name in the CL Community, especially for his work around NLP in CL has posted a detailed article on his views about Clojure. [1]. Worth a read.

FWIW, when I worked in Clojure in it's early days, I disliked when it dropped into Java stack traces and dealing with Java exceptions made dealing with Clojure REPL not a great experience. I don't know the state of things today.

[1]: [http://lisp-univ-etc.blogspot.com/2011/11/clojure- complexity...](http://lisp-univ-etc.blogspot.com/2011/11/clojure- complexity.html)

<comment><USER19> It is still far away from CL conditions, but clojure 1.10 has improved error messages A LOT through spec (a sort of optional typing system), and the plan is to improve it even better (cryptic error messages have been for some time the top issues in the yearly community feedback poll).

</comment></comment><comment><USER20> I think people here are making a lot of good points put I want to be a bit more specific. I don't have a lot of experinace with others lisps so please correct me.

\- The EDN ([https://github.com/edn-format/edn](https://github.com/edn- format/edn)) data format is a further development of the code is data idea. 'Tagged Literals' are interesting feature and used in Clojure to make code shared between different Hosts, mostly JS/JVM.

\- Transducers are a new interesting features that are fairly unique to Clojure ([https://clojure.org/reference/transducers](https://clojure.org/reference/transducers))

\- Reducers ([https://clojure.org/reference/reducers](https://clojure.org/reference/reducers))

\- Clojure Multimethods are different from CLOS in CL and one interesting feature are stand alone hierarchies. Some people would maybe call this an step back from CLOS. [https://clojure.org/reference/multimethods](https://clojure.org/reference/multimethods)

\- Concurrency primitives like Agents and Refs (featuring Software Transactional Memory) are fairly unique to Clojure.

\- Metadata. In Clojure most types can have metadata attached, meaning data that flows threw the program with your data but does not effect things like equality or size.

\- Protocols are dynamic single dispatch system

\- spec. Clojure Spec is a core part of Clojure now and used internally as well. Its a type of dynamic specification system and not like most systems of this type ([https://clojure.org/guides/spec](https://clojure.org/guides/spec))

Some more information here: [https://clojure.org/reference/lisps](https://clojure.org/reference/lisps)

</comment><comment><USER21> I think Clojure is certainly innovative in that it includes software transactional memory in its core language. Scheme doesn't, Common Lisp doesn't, and perhaps most other lisps do not. It's not very often used, but it's a welcome addition to the core language.

<comment><USER3> STM has nondeterministic performance characteristics and doesn't live up to expectations.

<comment><USER22> Can you elaborate? I have used it successfully in many projects. People keep saying it has bad performance but I haven't seen any proof yet.

<comment><USER23> "Nondeterministic" doesn't mean "bad", just that things can be OK until suddenly they aren't, and you can't really predict it a priori.

</comment></comment></comment></comment><comment><USER24> I think I am qualified to answer this: I wrote reasonably complex systems in Common Lisp before I gradually moved to Clojure several years ago. I have written several fairly large apps and systems in Clojure and Clojurescript (this includes [https://partsbox.io/](https://partsbox.io/) as my current project and apps like an e-commerce search engine processing hundreds of requests per second for many years).

I used to think Common Lisp was a fantastic language, but I always tried to keep an open mind remembering the Blub paradox. Then I started working with Clojure and after the initial friction (some things were just plain annoying in the beginning) things clicked for me. It was, quite simply, a much better language.

The major improvements over Common Lisp for me were: 1) immutable data structures: these days I can't even imagine dealing with code that mutates data in-place, 2) a great approach to concurrency and parallelism (it's really difficult to get yourself deadlocked in Clojure), 3) Rich Hickey coming out every year or so with a solution to yet another problem (core.async, transducers, spec), 4) really flexible data structures.

I know there are many CL advocates who will try to point out that CL has all these things. But these will be the same people who will be annoyed when Java programmers point out that Java has all these things, too. It's just a matter of friction, elegance and ease of use.

One additional factor which is often glossed over is Clojurescript. Most software these days exists in some form in the browser, too. Being able to use pretty much the same language (cljc files can be compiled both server-side and client-side to Javascript!) on both sides brings many advantages.

People sometimes ask me if I miss CLOS or the MOP. Not at all. It's a great set of concepts, worth learning (the green book makes for great reading). But I found that larger systems using CLOS were really difficult to understand and follow (just following the code flow is a nightmare if you have a lot of multimethods), and systems that used the MOP in any but the most basic ways were intractable without a debugger. Besides, please see above what I wrote about immutability: I'd much rather have immutable data structures.

Clojure's emphasis on functions and data, while it may be based in the 60s, is one of the really good ideas. And Clojure is really, really good at tackling complexity, it's just not apparent in the language design. While other languages focus on syntax sugar, Clojure's focus is on getting things done on a large scale. You don't see that, but things like namespaced keywords, clojure.spec, pre/post conditions, maps, sets, all play together to allow you to create extensible and reusable code.

Also, it's easy to discount certain solutions in Clojure as "also existing" elsewhere, but without actually using them in real systems one often doesn't see the full advantage. Transducers are a good example: I think they are under-appreciated and under-utilized. Common Lisp veterans will laugh and say that SERIES did the same thing back in the 80s. But SERIES was all about optimization and anyone who actually tried to use it will have stories to tell about how easy it is to use. Transducers, on the other hand, if used to build data-processing pipelines processing Clojure maps with namespaced keys, are an elegant and efficient tool for building composable systems. Plus, once you've coded your pipeline using transducers, it's a snap to parallelize it.

Looking at it differently: to "get" Clojure one has to understand that there is no silver bullet: no single revolutionary "feature". Instead, the gains come from tiny improvements all over the place: immutable data structures, good built-in library for dealing with them, core.async, transducers, spec, Clojurescript, not having to convert to JSON or XML on the way to the client, re-using the same code on server-side and client-side, and more.

In practical terms, I would never be able to write and maintain by myself the system I'm currently working on ([https://partsbox.io/](https://partsbox.io/)) without Clojure and Clojurescript. It isn't impossible, but I can't imagine tackling the complexity in a comparable time frame.

I can't imagine going back to Common Lisp. I sometimes have to look at the code I've written in CL, and it looks clunky. Especially place-oriented programming (setf all over the place) is something I really really don't want to go back to. It's a nightmare, particularly if you intend to have any kind of concurrency.

I still try to keep an open mind, remembering about the Blub paradox. I make it a rule to regularly check and learn about new languages. There are some which I found really good for certain types of applications and which I would use instead of Clojure in certain cases (Elixir is a good example). I still haven't found anything comparable which is a general-purpose language, especially if you consider the client-side story — but I'm checking all the time

See also my answer to a similar question posted on Quora several years ago: [https://www.quora.com/What-do-veteran-Lisp-programmers- think...](https://www.quora.com/What-do-veteran-Lisp-programmers-think-of- Clojure/answer/Jan-Rychter)

Also, as a general observation: most (not all, but most) criticism of Clojure seems to be written by people who did not write anything significant in it, and much of that by people who simply do not write large software systems at all. Reading many discussions, I gloss over most comments, as they are simply beside the point and not even worth addressing.

<comment><USER6> This is really interesting, I write mostly Common Lisp as hobby projects (at varying levels of scale, I've submitted patches for sbcl and mcclim and I've written a bunch of libraries) and at work I help maintain a data pipeline written in Clojure. I've generally found that I much prefer the "feeling" of writing Common Lisp and have come to think that immutability in the core + being hosted on the jvm forces some compromises on the interactive development front that make writing Clojure always feel like something of a chore.

<comment><USER24> I had similar feelings in the very beginning, but I was quickly won over (I didn't see compromises in interactive development, though, unless you mean difficult debugging because of lazy sequences). Debugging in general was something I missed the most (after all, even in CL, I implemented return-from- frame in CMUCL to get better interactive debugging). And to this day I think CL has better interactive debugging than Clojure.

But Clojure has so many advantages that it isn't even a close contest.

Also, _most_ of the code I write today isn't hosted on the JVM, it runs in the browser. Or gets compiled to _both_ JVM bytecode and highly optimized JavaScript.

<comment><USER6> The more I've used Clojure, the less I've liked it: protocols don't work correctly, multimethods are badly designed, core.async isn't source-compatible between CLJ/CLJS, unless you know what to avoid, etc.

As far as interactive development compromises go, I'm mostly thinking about how in Clojure, it seems like the only practical way to load your new code is to use something like tools.namespace/refresh (or whatever it is). And, that essentially involves throwing away everything and rebuilding it from scratch: while that has some nice properties (e.g. you don't end up with an inconsistent image state), it's also really annoying because you have to restart all your servers, etc.

And, the other thing that makes CL standout from every system I've used except Smalltalks, is that Quicklisp loads third party systems into the current image without restarting: there are a bunch of tools I've seen floating around that claim to be able to do this for Clojure, but I've never really been able to make any of them work consistently.

</comment></comment></comment></comment><comment><USER25> My comments from Reddit threads:

"I have not used Clojure professionally, but I welcome it, and applaud the effort that has gone into its creation and development. It's being used to solve real problems for real customers, and supplying jobs for those wanting to work in a Lisp family language. I also have a personal fondness for the immutable data structure work.

Is it perfect? Nothing is perfect. I'd rather focus on the wins than lament blemishes."

and

"Not all of us CL people are like that, even the language lawyers who read the standard for entertainment. :)

I find a lisp that explores a different part of design space to be inherently interesting, btw. The constraints surrounding Clojure are different from those around CL, so design choices have been different. The lessons learned when these choices collide with real world users cannot be obtained in any other way."

</comment><comment><USER26> I think the Sequences abstraction[1] is a pretty important one. I'm not sure it's unique to Clojure though, I have no other practical Lisp experience.

[1] [https://clojure.org/reference/sequences](https://clojure.org/reference/sequences)

</comment><comment><USER27> Never used Lisp, but huge Clojure user, the real innovation is the immutable data structures:

RICH HICKEY: Ok, so, problem number one on that list was place oriented programming. Absolutely, this is the problem. Almost all the programs I wrote, lots of the things on that list were multi-threaded programs, you know, they're crazy hard in C++. Just impossible to get right, when you adopt a normal mutability approach, you know, mutable objects. So, this is the number one self-inflicted programming problem. It seemed, you know, clear to me that the answer was to make functional programming and immutable data the default idiom. So the challenge I had was, were there data structures that would be fast enough to say, "we could swap this for that". And the objective I had, _the goal I had was to get within 2x for reads and 4x for writes. And I did a lot of work on this, this was actually the main research work behind Clojure, was about these persistent data structures. Eventually I found...you know I looked at Okasaki 's stuff and, you know, the fully functional approach and none of that gets here. And then I found Bagwell's structures were not persistent, but I realized could be made so, and they just have tremendously great characteristics combining the persistence with the way they're laid out, the way memory works._ They made it. They made this bar, and I was able to get my friend to try my programming language. You know, we (?) have large library of pure functions to support this, and, you know, immutable local bindings. Basically if you fall into Clojure, your first hurdle is not the parentheses, right? It's this, this functional paradigm, everything is gone, there's no mutable variables, there's no state, there's no mutable collections and everything else, but there's a lot of support, there's a big library. You just have to, you know, sort of learn the idioms. So I think this was straight- forward, the critical thing that's different about Clojure is, by the time I was doing Clojure, the people who invented this stuff had adopted a lot more, right? I think most of the adherents in the functional programming community considered functional programming to be about typed functional programming, statically typed functional programming is functional programming. And I don't think so, I think that this is, you know, this falls clearly in the 80/20 rule. And I think the split here is more like 99/1\. The value props are all on this side, and I think Clojure users get a sense of that, they get a feel for that. This is the thing that makes you sleep at night.

[https://github.com/matthiasn/talk- transcripts/blob/master/Hi...](https://github.com/matthiasn/talk- transcripts/blob/master/Hickey_Rich/EffectivePrograms.md)

<comment><USER28> I would go as far as to say that a language with more traditional syntax (for instance Python style) with pervasive immutable data structures would do very well. Few of the benefits Clojure brings to day to day development seem to require a lisp syntax.

<comment><USER27> Maybe – s-expressions have a killer app though, which is that they are so simple that the level of effort to port Clojure to other platforms (ClojureScript, Clojure CLR, etc) is within reach of one person. I am irrationally bullish on Clojure, but this is the key to the bet – platform reach has network effects which I believe may outweigh in longrun the resistance to alien syntax. My Clojure codebase ([http://www.hyperfiddle.net/](http://www.hyperfiddle.net/)) runs on JVM, node, browsers, lambdas, and inside Datomic cluster as stored procedure. Same code! Same library artifact! Simultaneously targeting all these different platforms!

<comment><USER29> > which is that they are so simple that the level of effort to port Clojure to > other platforms (ClojureScript, Clojure CLR, etc)

I don't see why that would be at all relevant to porting to other platforms? Most languages with richer syntax would parse to a backend-independent AST first, and so porting to a new platform would not require touching the parsing code at all - you'd be working on the same level as S-exprs, effectively.

<comment><USER27> the s-expressions make the compiler simple. Clojure the language was designed to make portability simple. you need both

<comment><USER29> A well-designed grammar isn't difficult to parse into S-expressions. And they were writing compilers for languages with rich grammars (e.g. Algol-60) back in 1960s - often in hand-written assembly, on punch cards! I think a claim that it makes the implementation overly complex strains credulity.

</comment></comment></comment></comment></comment></comment><comment><USER30> Clojure is radically practical :)

</comment><comment><USER31> Lots of user names with 4-6 characters in this thread- Definitely an HN topic of yore!

</comment><comment><USER32> I wonder how good clojure is with soft real-time like graphics rendering/games, or as an embedded script engine.

<comment><USER27> For real-time graphics, i think there is an impedance mismatch with the GPU data structures which are basically big mutable array buffers

<comment><USER33> maybe used as a dsl interface for gpu ... I don't know

<comment><USER27> I think you want the same datastructures moving up and down all layers of stack, otherwise you pay a marshalling penalty at each layer which is terrible for perf. If this is true, then we'd need to see fast immutable memory models inside GPUs that could natively represent persistent trees (moving away from pointers to mutable array buffers). Otherwise, the imperative way will always be at least C times faster, which seems a dealbreaker for the trailblazing researchers who forge the path the application layer follows.</comment></comment></comment></comment>


Say Hello to Wello - <AUTHOR> https://azoi.com/

<comment><USER2> Ah I missed this while being out of the country. Great piece of hardware.</comment>