Ask HN: Do You Read at Work? - <AUTHOR> More specifically, do you read books related to your career but perhaps not related 100% to your current job? (e.g., you are a frontend developer and you are reading TAOCP).<p>If so, how much time do you read at work? 1h/day? 20% of your work time? Do you read physical books or PDFs? Do you read at your desk or in another area of your office? Do you read even if your company does not have a "you can read at work" policy?<p>(Excluded: blogs, forums, documentation, and research papers). <comment><USER2> In the current job I am on there are significant patches of time where I do not have a ticket and any tickets I could take will rely on other peoples in those cases I tend to read or watch instructional videos on technical subjects but as a general rule not directly related to my work since I am pretty competent at my job and the amount of benefit I can glean is minimal.

I would say often 4-8 hours a week.

Also some times if I have had a full day and done a lot but it is still early to take off and I don't want to start on anything I will read or watch videos. This will be the issue in any job really, so I would say at the minimal I do 1-3 hours a week on reading and instructional video watching.

</comment><comment><USER3> I read at work, but I do try to keep it related to technologies and topics that would help me to do my job.

I subscribe to Safari Books Online, so I normally do most of the reading through there.

Depending upon the amount of downtime I have I may read something not directly related, or more about general CS than the work tech stack. But I generally try not to read about tech I may just be using for a hobby project.</comment>


Parents who don't vaccinate kids tend to be affluent, better educated - <AUTHOR> https://science.slashdot.org/story/19/02/02/1658208/parents-who-dont-vaccinate-kids-tend-to-be-affluent-better-educated <comment><USER2> I m willing to bet hard currency that the fields they graduated in have currently a replication crisis?

</comment><comment><USER3> Better educated, but probably not in the hard sciences. I would be surprised if those with graduate degrees in biology don't vaccinate at the same rate as those with graduate degrees in history or business.

</comment><comment><USER4> Also there could be the Kruger Effect[1]. But what is most important, we have to assume, that parents do their best for their children and trust them in it, as simple as it is. [1][https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect](https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect)

</comment><comment><USER5> It's really perplexing that Marin county would have one of the highest rates of non-vaccinated children.</comment>


Youtube-dl - Supported sites - <AUTHOR> http://rg3.github.io/youtube-dl/supportedsites.html

<comment><USER2> It had me the first time I noticed support for porn.</comment>


The Long-Term Effects of Short-Term Emotions - <AUTHOR> http://www.technologyreview.com/blog/post.aspx?bid=355&bpid=24970&nlid=2854

<comment><USER2> There's another way to look at this. I can see how evolution would select for these strategies:

#1: Punish people who don't go along with the group. While the person loses $5 in the short run, the message is clear: cooperation or nothing.

#2: There is a heuristic that remembers past decisions so that we don't have to recalculate them again. That saves energy and time.

</comment><comment><USER3> What a facinating if terrifying idea! I'd love to see a study that repeated the game for several more sessions to see if the initial biases faded with additional experience or not.

</comment><comment><USER2> I would love to see a study that examines whether money is a good proxy for desires. It seems that many psychological studies are based on the assumption that people would naturally want money. There are people who this wouldn't apply to, such as the ultra-rich or people who have an ideal that they only take money they worked for.</comment>


Show HN: Timepiece - It's not a smart watch, it's making your watch smarter - <AUTHOR> http://timepiece.io/

<comment><USER2> The effect of their demo was obviously faked through video editing, so I'm curious how the actual implementation will work.

Will they embed some kind of see-through display in the watch glass?

Or will this be some kind of VR/AR where a Google Glass type device superimposes info on your watchface?

</comment><comment><USER3> How would this work? The screen in the video is clearly video-composited, is there a prototype or is this actually simply an idea? If so, is it really "coming soon"?

</comment><comment><USER4> This is a watch I might be willing to wear. I hate the cheap look of all the smart watches. I'm not a Vertu phone kind of guy. I want my phone to be a phone. But a watch is Jewelry to me, and I want it to look nice. Omega like. Not necessarily Rolex, I don't like those much, but I want it to look like a Dress watch.</comment>


Uber Executive, Linked to an Old Harassment Claim, Resigns - <AUTHOR> https://www.nytimes.com/2017/02/27/technology/uber-sexual-harassment-amit-singhal-resign.html <comment><USER3> This stinks of scapegoating, of cover up, of distraction.

I'm sure Uber hopes this is a best/least impact course of action for them to begin to erase last week's terrible publicity from everyone's minds.

They a. Fire someone who has only been there a month -- so don't lose too hard employee investment wise. b. Happened to find someone to fire who fits extremely well into a narrative that makes it appear as though they are toughening up and tackling the root of these recent sexual harassment accusations when in reality the good old boys will be sticking around.

Capitalism may improve greatly once we have robot overlord higher-ups that are optimized for economic success only and not power drunk once they don a suit, prove they are a little more cunning and opportunistic than most people that still have fully operating empathetic brain parts, and are, quite frankly often the most idiotic but belligerent (read infantile) people in the room-- though of course if some current top-dogs design/get a stake in the business logic of our future corporate AIs I'm sure our mechanized leaders will be just as ruthless and scummy.

I suspect there's a host of tie wearing, sycophantic, despicable wretches out there for every corporate leader to whom one could actually ascribe any virtue or nobility--to one whom you can call leader without having the taste of vomit well up in your mouth.

I'm not sure if that's a problem caused by capitalism or merely exacerbated by it. Chicken/egg sort of thing.

Of course I can only draw upon my limited experience, but I've met very few people in high stakes positions at major companies that I actually liked or even considered intelligent and deserving of the benefits they receive--then again ours is often a system of reward based on raw time spent and bribes offered rather than actual merit. Furthermore, it's an unfortunate fact that valuable qualities are often uncoupled; the person of great intellect may well be a piss poor leader nine times out of ten. Granted, anyone in a higher-up position at a major company has a hell of a lot of stress, responsibility, and pressure on them, but that does not legitimate disgusting behavior as an acceptable outlet, nor does it legitimate chest buffing since effective leadership at major corporation scale often relies on the minor leadership and autonomy of subordinates anyway.

Hierarchies are foolish.

<comment><USER4> I am definitely _not_ looking forward to robot overlords, and I think that touting them as some sort of panacea is absurd. You just replaced an opaque decision-making process with an _incredibly fast /efficient_ opaque decision- making process.

<comment><USER5> Yep. My first thought was of Stross' Accelerando, and then the issue of the paperclip maximizer.

</comment></comment></comment><comment><USER6> Why did Google let an executive who had credible complaints against him resign on his own, and even threw a goodbye party for him? I can only imagine how the victim felt when he or she heard about that party.

<comment><USER7> If credible illegal behaviour has happened, why did Google not forward the information to law enforcement?

If Amit did do something bad, allowing him to resign makes Google complicit in letting him off the hook scot free. In that case how would the poor victim feel?

If Amit did not do something bad, how can he ever clean his name from the allegation?

Really poorly handled by Google. And now made even worse by leaking stuff to the press. Stuff like that belong in a court of law, not in some HR department.

<comment><USER8> Not all bad actions are illegal. It's generally legal to ask people to have sex with you, even if they're working for you. But it would be a poor company which tolerated that from its managers.

<comment><USER9> Is that true? Isn't harassment at least a misdemeanor?

<comment><USER10> Generally speaking, no. It can escalate to the point where other criminal statutes apply (harassment, stalking, assault). But on its own, I don't think the US has any criminal penalties specifically for sexual harassment?

<comment><USER9> Ah! Here it is. The _Employer_ is legally liable:

[https://www.avvo.com/legal-guides/ugc/penalties-sexual- haras...](https://www.avvo.com/legal-guides/ugc/penalties-sexual-harassment)

</comment></comment></comment></comment></comment></comment><comment><USER11> Travis is such a coward. How is firing someone hired last month going to fix the rampant toxicity over at Uber? I think the biggest action Travis could take is stepping down as CEO. It sounds like he is central to all of the reports of the culture of sexism and harassment over at Uber we've heard thus far. Travis needs to go, the entire HR team needs to go and all higher up executives and management staff needs to go as well.

<comment><USER12> I'm definitely not on Uber's side in this and would not be surprised if it's completely true, but is there clear evidence that Travis is the root of the problem? I see that HR doesn't want to fire people he's fond of, but is that on orders from Travis himself?

I think he probably should resign anyway just as a good faith gesture, but I'm curious how culpable he is personally.

<comment><USER13> > I see that HR doesn't want to fire people he's fond of

If the the descriptions we've read so far about Uber HR's response to sexual harassment and discrimination claims as well as Travis's role in them are corroborated, the board needs to do a major housecleaning at Uber starting from the CEO, many people in HR and many of these managers who were directly carrying out these actions. Anything short of that sends the signal that women are indeed considered second class citizens in the tech ecosystem.

Anything short of this would leave Uber as a silicon valley pariah. Top engineers and managers would be reluctant to join the company. Those who stay in Uber long term will have their brands tarnished. If we, as a group (silicon valley startup ecosystem) fail to respond in this manner, the entire industry's brand will be tarnished forever.

We claim to be a meritocratic and progressive bunch. It pains me to say this as a guy in this industry, I had never imagined how serious and ugly the sexism in some parts of the industry is. Yes I had known at a surface level that women have more obstacles to overcome to make it in this industry. But still Susan Fowler's blog was shocking to me. This new blogpost has doubled the shock. I hope my actions from this point on will be guided by this knowledge.

<comment><USER14> > We claim to be a meritocratic and progressive bunch.

"Claim", yes.

It sure is odd that, over the span of my career, observed incidence of workplace bullying and harassment has shown a strong positive correlation with the frequency of such claims as those you describe; by comparison, at those places I've worked which have no such attachment to one specific end of the political spectrum, the worst I've seen is thoughtlessness. That's bad too, to be sure, but those who've engaged in it have mostly been mortified when called on it and tried hard to avoid it in future - which is the correct, and honorable, response. Meanwhile, in Silicon Valley...

Well, I was going to make a reference to the emperor having no clothes, but that's not really apropos, is it? After all, he had his dick hanging out by accident.

<comment><USER13> _" bullying and harassment has shown a strong positive correlation with the frequency of such claims as those you describe"_

 _" which have no such attachment to one specific end of the political spectrum, the worst I've seen is thoughtlessness."_

My comment was not to start a partisan political thread but your anecdotal claims hold no merit here since CEO of Uber is known to spout Ayn Rand bullshit in public and is known as a Trump supporter.

I was not calling Uber's culture progressive and meritocratic. It's clearly not. I was challenging the rest of the community to treat Uber in a way that was appropriate for a meritocratic and progressive community.

</comment></comment></comment></comment></comment><comment><USER15> This seems like an absurd attempt at trying to lay the blame for recent reports on someone who was hired a month ago?

<comment><USER16> Or an effort to actually clean house.

There is not enough evidence from this one act to make ANY judgment on whether Uber is fixing their problem or carrying on as usual.

<comment><USER17> In the best case, firing a very expendable recent hire for a good reason is much less painful than getting rid of an important engineer, or even HR and top management. Fixing the problem would require company-destroying purges.

<comment><USER18> No, the best case would be actually fixing the problem. Heaven forbid we "get rid of an important engineer", when, literally, that's the exact problem that got Uber into this mess. Multiple times complaints were met with "well, he's a high performer, so try to stay on his good side, and well, if he gives you a negative review, we can't do anything about that".

If removing the problem would destroy the company, that's a much bigger issue in itself.

<comment><USER17> I meant "the best case" as the morally best possibility in which Uber is least evil: neglecting the serious behaviour problems, but at least firing someone who deserved to be fired. They might also have fired an innocent, or a conniving expendable employee, to improve their image. Today's commotion about their CEO insulting a humble Uber driver suggests a ruthless PR campaign of distraction and damage control.

</comment></comment></comment></comment></comment><comment><AUTHOR> "Harassment is unacceptable in any setting," Mr. Singhal said in a statement. "I certainly want everyone to know that I do not condone and have not committed such behavior. In my 20-year career, I've never been accused of anything like this before, and the decision to leave Google was my own."

<comment><USER19> So the implication is then what? Uber made the whole thing up? He's never been accused before he was accused at Google, or before he was accused in the media?

<comment><AUTHOR> Just to be clear: I have no way of knowing the facts and am just commenting based on my memory of what I read.

What he says doesn't contradict what Uber said.

Uber let him go for not revealing the accusations. They have no way of knowing what the results of the investigation were.

<comment><USER20> "What he says doesn't contradict what Uber said. Uber let him go for not revealing the accusations"

What he said directly contradicts what Uber said. Uber said there was an accusation. He says there has never been an accusation. These are direct contradictions. 1!=0.

<comment><USER21> I think that's an incorrect interpretation of what he said. He does not say there has never been an accusation, he says there has never _before_ been an accusation.

</comment></comment></comment></comment></comment><comment><USER22> I remember when Singhal's hiring was discussed here on HN last month. People wondered what would attract Singhal to Uber. Now we know: the company culture.

<comment><USER23> If history offers any clues, Ellison might be taking a look at mr Singhal right about now.

<comment><USER24> It can't be that Singhal's life has just _ended_. Everyone is more than their worst moments. Everyone deserves a second chance. The guy did a complete rewrite of Google's search engine... he made Google what it is today. The guy deserves to use his talents somewhere. I hope he gets the help he needs and moves on with his life peacefully.

<comment><USER25> Nah, I disagree.

It's time for housecleaning in this industry. If it is true that he jumped before he was pushed at Google, then they must have had some serious evidence against him.

Should Hans Reiser be given a second chance because he's good at file systems?

Turn it around, if an engineer does amazing work all their career, and behaves within societal norms, do they at some point accumulate enough credit to allow them a "get out of jail free" pass?

<comment><USER23> Not sure I'd give Singhal a pass --depending on evidence provided, that said, I'd probably give someone who develops a cure for even one of the cancers a pass. It's probably not the PC thing to say, but if someone could have such a positive on their side of the scale, I think I could give them a pass.

Your example has some false equivalence, Hans is a convicted murderer, Singhal is an accused sexual harasser. Those are not equivalent.

In a purely procedural society such a hypothetical person does not get a pass --in a more relative society he gats a pass. Kind of how we look the other way regarding historical figures of importance and their flaws when what they achieved transcends those flaws.

<comment><USER25> The false equivalence was deliberate!

This is one of those subtle things that can be problematic, we don't have a good moral calculus on where to draw the line. Slippery slope or reductio, your choice.

Large companies often run a simple financial thought experiment:

"How much liability does this expose us to (a.k.a. how much to make this go away -- hence the popularity of confidentiality clauses in settlements)" vs. "What is this person worth to us"

If we accept that he left Google before they forced him out, then (cynically) Google must have decided that the liability was greater than his value.

But when we consider this from the perspective of someone who has been abused at their place of employment, they may be facing a career change, PTSD, you name it. Both of the women that have written about their experiences at Uber describe stark psychological responses to their experiences - these can/will have lifelong impact. Does a track record of technological innovation excuse even one instance of that?

<comment><USER23> Obviously I can't speak for the affected people, and different people will react differently to a similar event, that said, if it happened to me, I do think I could excuse it, but not forgive it. That is, I'd be willing to "take one for the team". But then again, having been robbed at gunpoint in highschool, while kind of scary hasn't scarred me measurably.

As another example, I knew women who complained about sexual harassers to me, but as I encouraged them to seek out HR and report, they said the harassment, in their estimation, didn't warrant getting their supervisor in trouble, that they could handle it. Different people have different tolerances and different ways to address unfavorable circumstance.

<comment><USER26> > I'd be willing to "take one for the team"

> But then again, having been robbed at gunpoint in highschool, while kind of > scary hasn't scarred me measurably.

A mildly dismissive viewpoint followed by an irrelevant appeal to emotion followed by an anecdote. This feels a little unfair to those who've actually gone through sexual harassment (which is a spectrum and ranges in severity). Surely, there's something to be said of the psychological damage that results from sexual harassment as well.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER27> Looks like they hired him without complete background check. Its good attempt. This will look like PR stunt unless they step-up and take action on their long-term employee(s) - regardless of high performer or not - who might have involved in the harassments.

<comment><USER28> I think it's insane that "allegations" of harassment are enough to get you fired. That sets the bar far too low, below any standard of evidence.

Replace google with some shit company that didn't want you to leave and you'll see what I mean. I warned my boss at my current job that my last one ain't gonna be too happy about me leaving since I was nearly irreplaceable. I'm still betting they said terrible things about me, but what kind of bullshit evidence is that?

<comment><USER29> According to the article, he was not fired because of the allegations, but fired because he did not disclose the nature of his departure from Google.

When you're a high up enough executive you need to be trustworthy - his first action with the company proved that he isn't.

<comment><USER28> He resigned on his own terms. I know executives pull that crap all the time to avoid getting "fired" but the fact is he quit voluntarily

<comment><USER30> There is something called "lying by omission" or telling the truth, but not the whole truth.

Also, if you are told to resign or you will be fired, that's not resigning on your own terms.

</comment></comment></comment></comment></comment><comment><USER31> It does feel a bit like Uber's CEO trying to get rid of credible replacements.

</comment><comment><USER32> Also discussed here: [https://news.ycombinator.com/item?id=13747177](https://news.ycombinator.com/item?id=13747177)

</comment><comment><USER33> Folks, look.. I'd love to hop on the Uber hate wagon, but they didn't take liberties with my personal info in a malicious way, change the level of their service or drastically change the terms of the agreement. That and they provided a service that I still find useful and commensurate for what I pay. I could not care less what social struggles take place internally, and my once a month fare doesn't do much to further any ill wills being schemed in a dark room somewhere at Uber HQ. Don't construe this as me endorsing any bad actors; I'm simply wondering how much of this outrage among HN posters is really translating to Lyft and Taxi conversions, and how much of it is just internet outrage and virtue signaling puffery.

<comment><USER34> Using "virtue signaling" is in vogue, and I don't like it. Yes, the idea is real, but it has become an easy way of dismissing the legitimacy of the person it is invoked against, without doing any work to actually support the accusation.

It is also telling that it is used exclusively to undercut progressive stances -- things like feminism, liberal immigration policies, fair pay, etc. It is never used to undermine the position of someone who who has made a typically conservative stance. Let me demonstrate.

Statement 1: "I wouldn't want to work there because they have a reputation as having a sexist work environment."

Rejoinder 1: "Your obvious virtue signaling is a joke. I don't care what you think."

Statement 2: "I believe in the constitution and believe guns are a significant foundation to the freedoms we enjoy."

Rejoinder 2: "You are just virtue signaling. Ooh, look at me, I'm such a patriot. Ha ha."

Why is it we only see type 1 rejoinders and not type 2?

<comment><USER35> Thanks for pointing this out. I've noticed this as well. But, you should be careful with comments like these, as someone will probably accuse you of both being "triggered", and of being a "cuck".

I'm still not sure if I'm annoyed or delighted to see Shakespearean insults coming back into fashion, although I've yet to see some commenter riposte that someone's wit is as thick as a Tewkesbury mustard...

<comment><USER34> Whenever someone uses "cuck" unironically, it tells me what tribe they belong to. It often saves me a lot of time, as there is no need to engage them in conversation.

<comment><USER36> Which, ironically, is virtual signaling. That's the modern world though - <USER2> everyone retreat to your corners and come out throwing buzzwords at each other.

"Misogynist"

"Cuck"

If only we could talk about ideas, not labels.

</comment></comment></comment></comment></comment><comment><USER37> Has there been a tech company that has been this highly called out on their culture before this?

<comment><USER38> Well, there was that Ellen Pao suit a year or so back.

And a bunch of others:

[https://duckduckgo.com/?q=sexual+harassment+silicon+valley&t...](https://duckduckgo.com/?q=sexual+harassment+silicon+valley&t=ftas&ia=news)

</comment></comment><comment><USER39> It must feel like hell to be working at Uber and wake up everyday to this news. On the other side some people crave the drama, this is surely up to the standards. What's next? Travis is supporting Trump?

</comment><comment><USER40> I have no idea what the allegations made against Singhal are, or whether there is any veracity to them, but I do know that if we treat allegations as a guilty verdict, then allegations, whether honest or not, become an extremely powerful, career ending strike against someone.

I understand why Uber would drop him, even if just for PR purposes, but I'm curious why a forum which is so concerned with upholding of classic American values(as discussed during the recent Trump EO banning certain people from certain states) would be willing to dismiss another American virtue: innocent until proven guilty.

<comment><USER41> He resigned. So for whatever reason, he agreed to leave of his own volition.

Whether that's because he is actually guilty of the accusations and knows it, or the CEO forced him to for publicity reasons (or both)... who knows. But nobody has been branded officially "guilty" of a crime in terms of the American legal system.

<comment><USER42> He resigned before being dismissed by Google according to the article.

</comment></comment></comment><comment><USER43> Regardless of whether Amit is a scapegoat, we clearly need to applaud Uber for encouraging this resignation. Another high level executive with sexual harassment history is not needed, and I hope this signals a change of direction for Uber that is followed up by further cleaning of house.

</comment><comment><USER44> The problem is HR ignoring sexual harassment reports. Fire whoever needs to be fired in HR, and implement a real HR policy.

Leaking cherry-picked names to the press and scapegoating will not calm things down.

</comment><comment><USER5> I am "impressed" by how much weight an harassment claim carries in certain circles these days.

Its almost as if the suits treat it like social leprosy.

</comment><comment><USER45> How did Uber hire him without background check? I think Uber HR Head should also resign.

</comment><comment><USER46> I wonder if the timing was intentional at Google. Top level technical talent leaves, Google throws a party for him, then suddenly it comes out after the Uber scandal that he's involved in similar proceedings?

Someone at Google was angry about the departure.

</comment><comment><USER47> Glad to see Uber has taken actions to fire Singhal. He well deserves this. Sexual harassment should not be tolerated anywhere anytime. Singhal is such a hypocrite. He says "Harassment is unacceptable in any setting" while he did it himself at Google(Of course he denies it but Google's internal investigations found it credible). He said he wanted to focus on philanthropy while he joined Uber less than a year after he left Google.</comment>


Hyperspace in the 1970s: Tony Buzan's early hypertext system for paper - <AUTHOR> https://frieze.com/article/one-diagram-mind-them-all-hyperspace-1970s <comment><USER2> If something reminds me of Hyperlinks, then it is this guy with his 20k interlinked paper cards.

[https://takesmartnotes.com/uncategorized- en/2017/03/welcome-...](https://takesmartnotes.com/uncategorized- en/2017/03/welcome-letter/)

[https://zettelkasten.de/posts/luhmann-folgezettel- truth/](https://zettelkasten.de/posts/luhmann-folgezettel-truth/)

<comment><USER3> This has sent me down quite a rabbit hole! Now reading a book about it (How to Take Smart Notes) and trying to find some suitable software to make a slip-box (zettelkasten) with.

</comment></comment><comment><USER4> This guy is a great teacher (enjoyed his YouTube lecture), it seems to me that Hyperspace planted the Idea of HyperText which now has become the Internet, however the core idea originated from neuroscience - how neurons are interconnected in the brain, therefore, the most appropriate name for internet should be "Neural Network" which co-incidentally is now used only in the field of ML.

<comment><USER5> The word "hyperspace" seems to appear only in the article's title, but your comment made me wonder.. It would make sense that "hypertext" arose from "hyperspace". I traced back the etymology and it looks like the 19th-century mathematician Bernhard Riemann was the first to coin the word, at least the concept of nth-dimensional geometry.

The idea of higher dimensions was quite popular among artists in the early 20th century [0], and I theorize that somehow the stream reached Ted Nelson when he came up with "hypertext".

From his "Brief Words on the Hypertext" (1967): "'Hyper-' is used in the mathematical sense of extension and generality (as in 'hyperspace,' 'hypercube')."

He also mentions how "hypermedia" represents "complexes of branching and responding graphics, movies and sound – as well as text".

The use of the word "branching" is reminiscent of neural networks, and it makes me wonder about the correspondences between the structure of the brain (or "mind") and space itself.

[0] [https://en.wikipedia.org/wiki/Fourth_dimension_in_art](https://en.wikipedia.org/wiki/Fourth_dimension_in_art)

<comment><USER4> Nice find and thanks for sharing the sources.

</comment></comment></comment><comment><USER6> Prezi seems to be the closest modern presentation tool building on these ideas. I think the concept of engaging spatial intelligence is brilliant but I find the creation UX not as intuitive as I'd like. [https://prezi.com/](https://prezi.com/)

Anyone have other examples of mindmappy software with good UI?

<comment><USER7> I've often found JS-based presentations even cooler than Prezi. There're many examples, one which I like is: [https://impress.js.org](https://impress.js.org)

Although, the creation UX is more tailored to programmers than people who don't code.

<comment><USER6> Interesting demo, thanks! Haven't tried on computer yet. On ios firefox it's flashy but glitchy when animating through slides. JS based would be killer with no glitchiness.

<comment><USER7> You're welcome! I've mostly tried it on PC/Mac with no glitches. Maybe iOS Safari can handle JS better than FF.

</comment></comment></comment></comment><comment><USER8> The beauty of it is that you can start with pen and paper. Mind mapping apps are like multi-vitamins; just pick one and go. I prefer SimpleMind for its touch-friendly UI, cross-platform support, and consistent updates, but you can use almost anything out there to get rolling.

</comment><comment><USER9> If you find this interesting, I recommend the Moonwalking with Einstein

<comment><USER10> I just finished this book and really enjoyed it.</comment></comment>


Show HN: TextBlast Bulk SMS – Send Personalized Mass Messages Easily - <AUTHOR> https://textblast.learn.uno <comment><USER2> This looked interesting as a way for me to let me friends know about my music gigs without giant group texts.

I installed the app (on iOS) and tried to send a test, got this popup: "TextBlast will open your SMS app for each contact and prefill the message and the contact name, you will have to send and press back after it is sent, the next message will appear."

While I'm sure this is just an unfortunate limitation imposed by iOS on apps, and probably a smart one at that, it also makes it nearly useless for it's proposed use case.

If I have to click two specific small buttons for each message to send, that would be a pretty large amount of work to send even 100 messages. I have a hard time actually considering this "Bulk SMS" or "Sending Mass Messages Easily", the two claims they managed to make in the headline.

Also, minor compared to the first issue, but there is no Search function while adding contacts to a group.

<comment><USER3> I wonder if the same limitation exist on Android? Also wonder if this can work with Google Voice? What the monetization strategy is? Finally is my contact list safe?

<comment><AUTHOR> The same limitation appeared recently on the play store (so it's still possible to do in Android if I would publish in alternative store). The monetization is simple: every SMS is sent by your device so the pricing is the pricing of your network provider. Also if you want to send messages to more than 10 contacts you need to unlock the premium textblast through an in app purchase. So yes your contact list is safe. I doesn't work with Google Voice looks like it's only US based and I am in Europe.

</comment></comment></comment><comment><USER4> Hah, I built a mass text messaging SaaS product called TextBlast in 2012 :P had the domain TextBlast.org. I've since shut it down but funny coincidence.

<comment><AUTHOR> Funny fact indeed :)</comment></comment>


Posterous DoS and Outage - <AUTHOR> http://blog.posterous.com/todays-outage-and-changes-for-custom-domains

<comment><USER2> _adding an A record with our new address: 188.8.131.52_

Wouldn't a CNAME be a better idea?

<comment><USER3> I've noticed this in a bunch of places, weebly, tumbler, heroku: Why aren't this done using CNAMEs for _exactly_ this reason? Also, it'd give them more freedom over their infrastructure, would be able to separate it on different datacenters etc.

<comment><USER3> Ah, the answer is in the comments. A root-domain can't be CNAME, so to avoid confusion they just tell people to use A.

My DNS provider has a web-forward service, though, so I can translate domain.tld to www.domain.tld before even hitting my server.

<comment><USER4> They should be providing both as an option. There are a lot of people who use sub-domains, and in that case a CNAME is a better option.

</comment></comment></comment></comment><comment><USER5> I was still impacted by this yesterday and was surprised they couldn't mitigate the attack better. I like Posterous as a platform but am concerned about keeping my stuff there at this point.</comment>


2D Game Art for Programmers - <AUTHOR> http://2dgameartforprogrammers.blogspot.in/2012/09/apache-helicopter.html <comment><USER2> C++ Game Programming for Artists

* First we pick a nice API, let's see, yeah SDL with OpenGL is a good choice

* Let's create a full screen surface and set the happy little flags to make it a double buffer

* Let's just write some happy little class wrappers for our main game components. There we are.

* We start with a happy little box twirling around. Just gently use the OpenGL API and map the textures so that they fit. A happy little light lives in the upper right corner. Now lets add some other boxes over there.

* Ever so softly write some game logic. If you're feeling adventurous, try using multiple threads, but don't forget to use some locks.

* To finish it all up, we just plug in the user input. How wonderful!

See you next time when we write an operating system!

<comment><USER3> I thought this was going to be a snarky response at first - "I'm a programmer so I can't do art; as an artist can you do programming?!" - but I was wrong.

I'd love for there to be a Bob Ross style course on game programming, his soothing voice combined with his rose-tinted vision of _everything_ would be awesome. Happy little clouds

<comment><USER2> It's meant to be a little snarky - from a macro level everything looks simple if you just segment it into ten steps. The problem is that each steps contains many many details and years of experience and hard work that can't even be verbalized properly.

<comment><USER4> I'm reminded of the John Gnagy art lessons where you make everything out of boxes. But the flow tended to be like:

Box -> Two boxes -> Three boxes -> Horse!

I guess it made it seem plausible that you can draw things just fine with rectangles. Never got the hang of it though.

<comment><USER5> Try and read the earlier post. I think they do explain the approach a lot better. I don't intend to make you into the next daVinci but enable my readers to create decent game art or at the very least better looking place holder art for their games.

</comment></comment></comment></comment></comment><comment><USER6> I have found Inkscape to be quite an under-appreciated tool. It is much easier to learn than Illustrator for a beginner, quite light on systems resources and has great keyboard shortcuts.

Earlier when there was a logo to be designed I used to use GIMP. But I find Inkscape's text handling to be much superior (especially with manual kerning) and flexible. In fact, I do most of my website mockups with Inkscape these days.

<comment><USER7> It's also just damned useful. You can open up PDFs and grab diagrams out of research papers. You can re-save PDFs after converting all the text to paths, to avoid font embedding problems. You can manipulate the saved files with d3.js.

It's very quickly become one of my favorite tools.

Connectors still suck, though.

</comment></comment><comment><USER8> One thing that I would really love in tutorials like this is _why_ certain decisions are made. I am a terrible artist, but I would like to learn how to draw something that doesn't make people want to puke, if for no other reason than to give a real artists a starting point, but this tutorial doesn't help.

Even at the first step, it says 'Lets start building the body with 3 rectangles'. But if I started with a blank page, and though 'How am I going to draw a helicopter', my first thought wouldn't be draw three random rectangles and start from there. Learning tools is important, but I want a tutorial that shows me how to break complex objects into manageable parts.

<comment><USER9> <http://www.drawright.com/>

I haven't read the book yet, but it's on my Amazon wishlist because it's supposed to teach you exactly this. The descriptions on the site and on Amazon don't give much insight, but you can find the introduction and first chapter on Google Books to get an idea of what it's all about.

Pretty sure this was first introduced to me on HN, so others can probably expound further.

<comment><USER10> I own this book, it is not the right book for learning how to illustrate.

Don't get me wrong, "Drawing on the Right Side of the Brain" is a decent book. If you follow it, in a few short drawing sessions it will lift you from a person who can't draw at all to a person who is a novice at life drawing with some impressive looking portraiture. You will be amazed at your own progress at life drawing. You however will not progress much further than a novice.

For drawing game assets and other types of illustrations, you need to learn to draw from your imagination. This is a very different skill from drawing from life and a skill that "Drawing on the Right Side of the Brain" will not teach you. I can't make recommendations of books myself, but I can suggest looking at this [1] thread over at cgsociety.

[1] <http://forums.cgsociety.org/showthread.php?t=844409>

<comment><USER11> I just went through this process myself. Drawing from your imagination takes taking the rules that a book like "Drawing from the right side of your brain" shows you and basically practicing. For example, once you learn how to draw the basic human face you can take the memory you have of drawing that face and tweak it a bit. You tweak it until you have something more monstrous, like an ogre for example.

That is why most of the stuff that we see drawn from a persons imagination still has very recognizable human components to it. It takes a lot of practice but books these and other lessons you will find are meant to be a building block so that you can draw from your imagination.

</comment></comment></comment></comment><comment><USER12> From the same blog, this is the starting point where he breaks down a very simple process of drawing with circles and introduces some basic concepts.

[http://2dgameartforprogrammers.blogspot.in/2011/10/lets- get-...](http://2dgameartforprogrammers.blogspot.in/2011/10/lets-get-started- with-circles.html)

<comment><USER5> Thanks for posting the link to the beginnings.... This is where people interested in trying out inkscape and game art creation should start. The helicopter is the most complex and daunting project on my blog so far.

</comment></comment><comment><USER13> Being a little disillusioned with Adobe tools, and assembling a game dev enviroment on Linux, I am trying to setup some of my game art workflow using Gimp/Inkscape/Blender/other.

What I'm hoping to acchieve is have a bunch of scripts in Python (as all those listed apps are conveniently scripted with it) to speed up the asset generation, and possibly explore some of the design aspects achievable through procedural methods, as designers using Adobe tools do have a slight tendency to be uniform in their output.

Many of the methods in these articles may well be in part scripted, for instance [http://2dgameartforprogrammers.blogspot.in/2012_02_01_archiv...](http://2dgameartforprogrammers.blogspot.in/2012_02_01_archive.html)

<comment><USER14> I use Inkscape as my primary means of collecting games resources and assembling them into a re-distributable package. I have my own build system that takes general Inkscape(SVG) objects, parses the namespace/hierarchy as described (Hint: CTRL-SHIFT-X .. drag the XML Editor to a second monitor..) and outputs a package tree that deposits directly into res/ &etc.

Paired with MOAI, I'm having a wonderful time handling the game asset pipeline in a structured manner.

The SVG DOM makes for a very vibrant playground when you want to automate things, and getting it all packed down to a .PNG tilemap can be done with very, very little script code ..

</comment></comment><comment><USER15> I've always found Photoshop difficult to draw in, and haven't really enjoyed drawing on a computer since Deluxe Paint. However, Inkscape (a program that I've not seen before) looks great, and I will be trying out the tutorial. Thanks.

I'm also tempted to say we should all post our helicopter drawings!

<comment><USER16> Same here with Deluxe Paint, though having used Inkscape they are of course nothing alike.

Vector graphics is well and fine for some things, and Inkscape is a great app for that, but personally I like the pixels... Grafx2 is another alternative if you liked Deluxe Paint.

I really miss the simple elegance in Deluxe Paint (of course I can run it in UAE, but

I recently went through about 30+ packages in the Android market trying to find a tolerable paint app for Android, and they all failed spectacularly when I compared them to my minimum "equivalence with Deluxe Paint" metric (proper zoom being the biggest one, which is a bizarre thing to do badly on a platform where most users will have tiny screens), but it's the same on Linux. GrafX2 is reasonably close in terms of functionality but the UI is very cluttered.

<comment><USER17> Pixelesque is the standard-bearer on Android. If you're looking for the zoom, try pinch-to-zoom gestures.

</comment></comment></comment><comment><USER5> Thanks for the mention of my blog on the Hacker News. I just which there would have been a link to the earlier posts. The post got harder and more complex (with the helicopter pushing the limits of what could be considered easy to follow art tutorials for beginners).

</comment><comment><USER18> As an engineer I find CorelDRAW far more useful (and usable?) than Photoshop and Illustrator sometimes. I do use Photoshop for quite a bit of work. However, CorelDRAW makes some things that require jumping through hoops in Photoshop really easy. It's almost like a melding of a technical drafting and an artist's illustration tool.

It can, for example, ingest AutoCAD geometry and use it for further illustration. Since I've been using AutoCAD for a long, long time this aspect of it comes with no effort.

In the case of the OP's example, I'd probably find a 2D or 3D model of a helicopter for either ACAD or SolidWorks; load into the appropriate tool; edit, stylize, simplify; export as a flat 2D DXF and then import into CorelDRAW. From there you can manipulate further, stroke, fill, shade, etc. Do it all in layers and then output whatever it is you might need.

Maybe this can be done in Photoshop, I don't know. It seems that I am always Googling for how to do the simplest things in PS. Yes, of course, I don't use it enough. That said, things like having to jump through hoops to draw a stroked circumference drives me up a wall sometimes. In a program like CorelDRAW it's just a matter of drawing a circle without fill, which makes far more sense to me than having to draw a path and then stroking it.

I've done some pretty interesting graphics in CorelDRAW for such projects as photorealistic renderings of product models that are not only interesting graphically but also dimensionally accurate because of the link to the underlying CAD data.

For a lot of the work I do on the web and iOS apps Photoshop can be simpler to wrestle with.

</comment><comment><USER17> Or, How to Draw A Helicopter:

1) Draw some rectangles

2) Draw the rest of the fucking helicopter

<comment><USER19> This image is always my first reaction to these types of posts:

<http://www.flipkik.com/uploads/pics/how-to-draw-an-owl.png>

<comment><USER20> That's pretty funny. But that's really all there is to it. There's no secret formula, just practice.

</comment></comment></comment><comment><USER21> Here is the direct download for the portable Windows version of Inkscape:

[http://downloads.sourceforge.net/inkscape/InkscapePortable_0...](http://downloads.sourceforge.net/inkscape/InkscapePortable_0.48.2-1.paf.exe)

<comment><USER22> Why Portable version? Why not the regular download?

</comment></comment><comment><USER11> If you want to learn how to draw, besides the basic drawing courses or books, another good idea is to learn about Photography when it comes lighting and composition. I know a lot of people on this site have DSLR cameras so learning how to use those properly would be a great step. Photography lessons are great in helping to learn how to see the world correctly. A lot of what you will learn will be transferable when it comes to learning how to draw.

</comment><comment><USER23> Makes me wish I could draw worth a damn.

<comment><USER24> If you aren't good at something, then you can only improve.

<comment><USER13> Is it worth it, though? Some people just don't have eye for it.

I've tried to train a musician for almost a year. He had the best of intentions, as did I, all with ample practice. In the end we gave up, he just couldn't hear when he's wrong. It's easier with programming - something just doesn't work as expected. Art does not work like that.

<comment><USER25> You have a point that some people don't have the talent to decompose objects from their mind'e eye into basic shapes. I would argue that some forms of drawing are based more on practical skill sets, which can be learned, as opposed to the ability to detect the pitch released from a musical instrument. (I make that claim as a guitarist myself)

Trying to improve your drawing ability is worth the time and effort spent. I have been working on improving my artistic lens for the past month. Am I yet at the skill level I want to be? No. Have I sacrificed a lot of time? No.

I sit down once a day whenever I can find 10 minutes, set a timer, and sketch whatever comes to mind. On busy days I skip this practice, but always make it up in the following days.

You can see the progress in this imgur album: <http://imgur.com/a/GTF6w#0> . These are by no means exact representations of the image in my mind at the time. On the other hand, they are quickly getting closer to my imagination everyday.

For a practical book on the topic of drawing, I recommend [http://www.amazon.com/The-Drawing-Right-Side- Brain/dp/087477...](http://www.amazon.com/The-Drawing-Right-Side- Brain/dp/0874774241) .Reading that book helped me gain a lot more confidence and understand a lot of the science behind drawing ability.

I also have a large amount of bookmarks on improving your pixel art skill set. If those would be of interest then I am happy to share those links.

<comment><USER13> I applaud your persistence but I'd argue that you might be better off refining your work, than just making new sketch each time.

But it's art - I can imagine you developing your own style this way, and I'd absolutely have no problem with it.

And I guess it is easier to keep one-sketch-a-day as a habit than feverishly improving single piece to no end.

</comment></comment></comment></comment></comment><comment><USER26> Lovely tutorials.

</comment><comment><USER27> superb! What else does a linux artist want :)

</comment><comment><USER28> 2D is the BEST!</comment>


John Carmack starting port of Wolf 3D in Haskell - <AUTHOR> https://twitter.com/id_aa_carmack/status/331918309916295168 <comment><USER2> In case you were not aware, the iOS source code for Wolfenstein 3D Classic Platinum is licensed under GPL. It is available here:

[http://download.zenimax.com/idsoftware/src/wolf3d_ios_v21_sr...](http://download.zenimax.com/idsoftware/src/wolf3d_ios_v21_src.zip)

I thought this story was cool:

 _"[...] They were using the software rasterizer on the iPhone. I patted myself on the back a bit for the fact that the combination of my updated mobile renderer, the intelligent level design / restricted movement, and the hi-res artwork made the software renderer almost visually indistinguishable from a hardware renderer, but I was very unhappy about the implementation.

I told EA that we were NOT going to ship that as the first Id Software product on the iPhone. Using the iPhone's hardware 3D acceleration was a requirement, and it should be easy -- when I did the second generation mobile renderer (written originally in java) it was layered on top of a class I named TinyGL that did the transform / clip / rasterize operations fairly close to OpenGL semantics, but in fixed point and with both horizontal and vertical rasterization options for perspective correction. The developers came back and said it would take two months and exceed their budget.

Rather than having a big confrontation over the issue, I told them to just send the project to me and I would do it myself. Cass Everitt had been doing some personal work on the iPhone, so he helped me get everything set up for local iPhone development here, which is a lot more tortuous than you would expect from an Apple product. As usual, my off the cuff estimate of "Two days!" was optimistic, but I did get it done in four, and the game is definitely more pleasant at 8x the frame rate.

And I had fun doing it."_ [1]

[1] [http://www.idsoftware.com/iphone- games/wolfenstein-3d-classi...](http://www.idsoftware.com/iphone- games/wolfenstein-3d-classic-platinum/wolfdevelopment.htm)

<comment><USER3> It would properly take two months, which is properly optimistic, they would get it done in four months instead.

And JC got it done in 4 days....

This isn't 10x programmer anymore, this is 30x!!

<comment><USER4> Well, you better know the code you have written...

<comment><USER5> ...many years ago!

</comment></comment></comment></comment><comment><USER6> Carmack has been thinking about functional programming for a while and posted his thoughts on applicable lessons for C++ a year ago:

[http://www.altdevblogaday.com/2012/04/26/functional- programm...](http://www.altdevblogaday.com/2012/04/26/functional-programming- in-c/)

He's a great developer and has always pushed boundaries. I look forward to his postmortem after this project is finished.

<comment><USER7> _Maybe if all of the objects just referenced a read only version of the world state, and we copied over the updated version at the end of the frame… Hey, wait a minute..._

This sounds like a game development reference that I'm missing. Can anyone explain?

<comment><USER8> He's referring to the utility of immutable data for solving certain parallelism issues - rather than attempt to coordinate all the code that uses a data structure, you can double-buffer it and queue up the write events for the "next frame" instance.

This is a hugely successful pattern throughout a number of aspects of gaming, graphics being one of the most classic examples. Double-buffered graphics don't suffer as much from tearing and other display artifacts.

<comment><USER9> > This is a hugely successful pattern throughout a number of aspects of > gaming, graphics being one of the most classic examples.

Not really, no. Immutability comes at the cost of performance compared to mutability. The gap is shrinking between the two, but it's still wide enough that using pure immutable structures for frame buffers, shaders and other graphical concepts is simply not an option to write games.

Haskell is interesting in the sense that it doesn't prevent you from using mutable structures (e.g. Lenses, Writer) but it encodes this information in the type system. I'm really curious to read the conclusions that Carmack will draw from his experience but I wouldn't be surprised to read that at the very low levels, mutable structures are just unavoidable for high performance games.

Also, mutable structures accessed by concurrent threads is a problem that's much less difficult than most people claim, and it's often much easier to reason about locks and semaphores than about immutable lazily initialized structures.

<comment><USER10> I don't know where to start.

> using pure immutable structures for frame buffers, shaders and other > graphical concepts is simply not an option to write games.

Seeing as people have written games in Haskell, this is clearly not true.

> Haskell is interesting in the sense that it doesn't prevent you from using > mutable structures (e.g. Lenses, Writer)

Lenses and Writer both only use immutable data. It is possible to use actual mutable data in the ST and IO monads.

> but it encodes this information in the type system.

This is true of IO, but not of ST. With ST, runST :: (forall s. ST s a) -> a, hides the effects.

> it's often much easier to reason about locks and semaphores than about > immutable lazily initialized structures.

I don't know what you mean by this. In terms of functional correctness, immutable data-strucutures, lazy or otherwise, are much easier to reason about. If you are talking about resource-usage, sure, it's a little harder to reason about lazy data-structures than strict ones, but give me a space leak over a race condition to track down any day.

<comment><USER11> It'll be interesting to see how the performance issues play out, no? In order to get reliable memory behaviour, you still have to go through a certain amount of voodoo to appease the gods that govern the interplay of laziness and GC. There are comparatively few people who really know how to optimise Haskell code from top to bottom—in part because there is such a distance between top and bottom.

<comment><USER12> "It'll be interesting to see how the performance issues play out, no?"

Not really. There's no question whatsoever that GHC can run a fine Wolf3D on fractions of a modern hardware setup. You could do it in pure Python with no NumPy. There's tools to help with the laziness stuff and a 3D rendering loop will fit those perfectly.

<comment><USER13> Sure, Wolf3D is almost a quarter of a century old by now.

But the performance _limits_ of immutable structures for simulation and graphics are certainly interesting to me.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> _I also had to make one last minute hack change to the original media -- the Red Cross organization had asserted their trademark rights over red crosses (sigh) some time after we released the original Wolfenstein 3D game, and all new game releases must not use red crosses on white backgrounds as health symbols. One single, solitary sprite graphic got modified for this release._

I always wondered about color choices for some games' health packs.

<comment><USER15> As much as thats annoying, it does make a lot of sense. If you can assert that everything which bears that logo is going to be medically related (and not just something random), especially in wars and the like, means you can be more certain of someones intentions.

<comment><USER13> Wars observe trademarks? I thought the Red Cross was established by international treaty. <https://en.wikipedia.org/wiki/First_Geneva_Convention>

<comment><USER16> No, but if there is a red cross on white on a sign, it's good to know it's not just advertising from back before the region became a warzone.

<comment><USER17> How long before?

[http://upload.wikimedia.org/wikipedia/commons/0/0d/Knights_T...](http://upload.wikimedia.org/wikipedia/commons/0/0d/Knights_Templar_Cross.svg)

<comment><USER18> Both the cross of the Knights Templar, and the similar Maltese cross used by the Knights Hospitalier are quite distinct from the straight cross the Red Cross uses. I very much doubt anyone anywhere where variations like that are likely to be seen would confuse them.

</comment></comment></comment></comment></comment></comment><comment><USER19> Here's a question for my fellow HNers.

In the article linked from his tweet, Carmack describes how he ported Wolfenstein3D to the iPhone. He apparently didn't start off with their own original code base, but used the open source project "Wolf3D Redux" (<http://wolf3dredux.sourceforge.net>) as a starting point. This was possible because id open sourced their original game, and "Wolf3D Redux" is distributed under the GNU GPL v2.

Carmack also states: "I think the App Store is an extremely important model for the software business."

Therefore my question: is it possible to publish GPL'd games in the App Store? I seem to remember that this was not possible, since ToS of the app store impose further constraints which is forbidden under the terms of the GPL.

<comment><USER20> It's possible, though it depends on the wishes of the original authors.

Stockfish Chess [1] is the one GPL v3 licensed app that I know of which has been available for... quite some time, now. I've seen several other Chess apps build on that engine, which go as far back as when I was just starting iOS development.

Now, VLC was the one case where one volunteer for the project invoked the GPL to get Apple to take an iOS port of the app off the store [2]. Based on that situation, it seems that if the original authors of a GPL licensed codebase want to pursue a claim against an app that uses that code, they can, and Apple will take it seriously.

I don't believe that situation has changed.

EDIT: For your own sake, it's probably best if you approach the original author to see if they can make an exemption, in writing, for the DRM situation. IANAL, but that seems like it would be the cleanest way to go about handling GPL licensed code without issue.

[1] - <http://stockfishchess.org>

[2] - [http://www.tuaw.com/2011/01/08/vlc-app-removed-from-app- stor...](http://www.tuaw.com/2011/01/08/vlc-app-removed-from-app-store/)

<comment><USER21> Remember, you'll need to contact all the authors and they all have to consent to (essentially) relicense their code. Any open source project that accepts patches may have dozens of actual authors. You can't just ask the project maintainer/chief contributor.

<comment><USER20> Ideally, a well-organized project would have a copyright assignment process to resolve those sorts of issues.

However, as far as I know you're right. If there's no clear authority as to who retains ownership and licensing rights to the code, and the contributions made to it, it's going to get messy.

<comment> Tuna-Fish > Ideally, a well-organized project would have a copyright assignment process > to resolve those sorts of issues.

A lot of projects, notably including Linux, intentionally avoid copyright assignment to make it impossible for anyone to relicense the codebase. Making sure that there are thousands of copyright holders from hundreds of jurisdictions, many of who are not easily reachable or even knowable, all bound by common license terms protects the project from situations where some project participants would do something not agreed by the rest, either willingly or because they were forced to (eg. through bankruptcy).

<comment><USER20> That's a good observation, some inefficiencies are quite intentional. I didn't even know that about Linux until just the other night, when I was looking for non-GNU GPL projects that didn't require this process.

LWN.net has covered both sides of this subject quite well, in recent months, with the tedious process of relicensing VLC [1] and the GnuTLS copyright assignment controversy [2].

The politics of OSS make for some excellent reading.

[1] - <https://lwn.net/Articles/525718/>

[2] - <https://lwn.net/Articles/529522/>

</comment></comment></comment></comment></comment></comment><comment><USER22> His post about the iOS port of Wolf3D was a great read, and also a crystal clear reminder of why I never play 3D games on a touchscreen-only device. The means of input are so truly terrible that I do not understand why anyone bothers. But, clearly, there's an audience that does not care, and it was neat to read about all the things Carmack tried to figure out how best to pull it off.

<comment><USER23> You should try Galaxy on Fire 2.

The trend seems to be towards difficult 3D controls, but you cannot write off the entirety of 3D games because you haven't seen good samples.

</comment></comment><comment><USER24> What would be the immediate benefits of this? Would it be mostly related to multithreading?

And on a side note: As a NoScript user, I'm surprised that I've had to give Javascript permissions to Twitter just so I can visit that idsoftware.com link inside of the tweet. Obviously I don't visit Twitter often, but that should never be the case for it or any site.

<comment><USER25> It's fun... He's a developer who enjoys doing stuff, it doesn't matter if it has a purpose. To him it does, and he has enough followers that he felt he should share it with people, which makes sense considering I can't wait to see the result.

And I'm sorry, but if you turn off javascript this day and age you should expect more sites to not work then to work. You're turning off part of the browser, and you do not like having to turn it on to use the browser? Seems a little backwards to me... considering the extremely small population of noscript users.

I also understand that I'll probably get down voted into oblivion as every single noscript users is probably on this site. But it's true...

<comment><USER26> No, I'd agree. I've stopped building <noscript> tags into my sites as virtually every browser supports Javascript now. If folks are smart enough to turn off Javascript they're just as capable of turning it back on.

I personally block Flash by default (mostly to stop audio ads), and I have no problem turning it back on when a site requires it.

<comment><USER27> Folks don't want to turn it on, because it's not needed for most cases and it's the perfect way (after flash and java) to get malware.

I don't know what's happening to web development, but since this app fever developers are fighting for eye candy and LESS accessibility. Sometimes I see a page that fails to work without JS, open the source and see just JS code. Where is the content? Web apps are often times also walled gardens, and completely break the functionality of the browser (based on linking, rendering text & images and using the back button).

Now even simple websites completely disable access to content just to show some silly animation.

<comment><USER28> I can't think of a way of getting malware from JavaScript anymore than from a simple link, that's just plain false.

The move to "web-page-apps" is not about eye candy, it's about speed, responsiveness and yes, usability. About not trying to awkwardly force an app down the http/html way.

A broken website/app is simply broken: if things do not work as expected, that's not the fault of webapps per se or JavaScript - it's all doable and not a big deal anymore (the back button thing).

<comment><USER29> >The move to "web-page-apps" is not about eye candy, it's about speed, responsiveness and yes, usability

No, it is about following fads, just as web development has always done. Creating sites that are slower, less responsive, and offer terrible usability is clearly not done for reasons of speed, responsiveness and usability. Enhancing a page with javascript can increase responsiveness and usability. Replacing the page with javascript is moronic.

<comment><USER30> There are cases where a "full Javascript" page provides clear benefits (eg, GMail).

<comment><USER29> Perhaps I should have been more clear. I'm just talking about web pages, basically just information exchange. Twitter being the example here. Browser applications are a different thing, and obviously have to be delivered in javascript. There's nothng wrong with browser applications, but pretending web pages should be built as browser applications is insanity.

<comment><USER31> GMail is just some text and links too. Why does it get a free pass, but twitter doesn't?

<comment><USER32> GMail does have a no-javascript fallback, that has all of the important functionality.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER33> I'm more than a little curious at what folks are thinking this will prove. I mean, to a large extent this feels like it would be akin to watching a master photographer switch from film to digital. The vast majority of the craft is hard to see at the implementation layer.

I mean, consider everyone's favorite sort method. Seeing it implemented in any language does little really show how amazing the original insight was.

I rush to say that I am highly interested in seeing this. Nor do I question what Carmack is looking to see. It is strictly the talking heads around this that have me somewhat... off.

<comment><USER34> I think its more like watching a master photographer experimenting with a new way of taking pictures (think HDR or something), to keep your reference.

In the Clang world Carmack usually lives in, the tools for game development are extremely mature. There is decades of knowledge and experience that went into the current generation of 3D Engines/Games.

Game Development in Haskell on the other hand is extremely new, as in never been done on a larger scale. Of course alot of the knowledge and experience can be reused, but it is starting from scratch to a large degree.

So id see this as an experiment of a very talented programmer who wants to see if he can translate his immense knowledge of graphics programming into a working game prototype built with a functional language like Haskell.

<comment><USER33> In my head, I was thinking of someone like Ansel Adams when I made my comparison. So, I was thinking of pioneers in the field. I believe I see what you mean, that at this point there is plenty of knowledge in digital photography. I was just trying to invoke the idea that the algorithms and thought processes that go into creating a project are not necessarily reflected in the actual program that is written.

Now, I have little doubt that a lot of this is because he used to have to program so close to the metal. The abstraction was the computer, to a large extent. The hope now, I suppose, is that he can focus on creating abstractions with the aim of a maintainable and flexible engine.

<comment><USER34> Yep, but even then its still just Wolf3D which basically is a 20 year old game/technology. Certainly a good first step into graphics programming in functional languages but i doubt we will ever see something like Unreal Engine 4 written in Haskell. All the effort put into C-based Engines has such a legacy that starting from scratch would be an immense effort for questionable benefits.

</comment></comment></comment></comment><comment><USER35> A bit off-topic: has John Carmack made any comments on Go programming language ? It sounds like a language that should appeal to him. The name makes it not easy to google for (I've tried golang, etc). I couldn't find anything, is it because Go has a far way to go before it's mature enough to use in games ?

<comment> Tuna-Fish As of right now, Go is essentially completely uninteresting to game dev because it's not possible to guarantee steady frame rates in it. (The GC solution is bad for latency.)

Also, I doubt Carmack would be interested in Go -- based on his previous talks, he seems to be going for a more functional approach. Go is imperative to the bone.

<comment><USER36> Well I would agree if we are talking about very demanding current gen style games (which id software indeed typically produce) but if we look at indie- style games then having garbage collection doesn't preclude a language from being used in games development, or having steady frame rates.

There's no technical reason I can think of why Go wouldn't work just as well as C# (XNA/XBLA/MonoTouch/Android) or Java (Minecraft etc) for game development.

Garbage Collector sweeps can indeed be a performance problem but there are obvious ways of minimizing it's impact during gameplay.

Overall I think (read guess) that unless you are doing some sort of physics simulation, typical game logic requires relatively little cpu power and for the graphics there is hardware acceleration doing the heavy lifting.

<comment> Tuna-Fish Go will likely eventually have a GC that will not be that terrible. However, right now it's a simple parallel mark & sweep. If you allocate more than a 1000 objects, and do any allocation during simulation, there _will_ be very noticeable GC pauses. The current Go GC is not anywhere near the capability of C# or Java GC, and would _not_ be suitable for minecraft-level games.

> Overall I think (read guess) that unless you are doing some sort of physics > simulation, typical game logic requires relatively little cpu power and for > the graphics there is hardware acceleration doing the heavy lifting.

Well, it of course depends on the game. AAA games spend all the CPU budget allocated to them.

<comment><USER36> I realize that it doesn't compare to Java's GC (which is likely state-of-the- art) but is it really terrible?

Granted I haven't used Go myself (leaning towards Rust) but I've read that Go is already being employed in production scenarios with good results.

<comment> Tuna-Fish It's perfectly passable for web serving and other such high-latency tasks. In a GC, the goals of throughput and latency are diametrically opposed -- optimizing for one makes the other worse. The present simplistic GC is a typical throughput-oriented design.

<comment><USER36> I just remembered these (I knew I'd seen some game examples in Go):

<http://www.youtube.com/watch?v=BMRlY9dFVLg> <http://www.youtube.com/watch?v=iMMbf6SRb9Q>

which are game examples as part of a game engine framework written in Go, seems to move smoothly with lots of objects including 2d physics.

</comment></comment></comment></comment></comment></comment></comment><comment><USER37> Can someone tell me what exactly a 'port' is? Is it just rewriting all the code base in a target language?

<comment><USER38> Rewriting the code base in another language would be considered a 'rewrite'. Usually, ports are in the same language but targeted at a different platform whether that be an OS or architecture, or even something like a different graphics library (OpenGL game ported to DirectX).

<comment><USER18> Referring to total rewrites in different languages as "ports" has a history in the game development world going back to the beginning, when those doing "ports" often did not even get access to original source or assets, and the games would be written in asm for the target platform anyway.

</comment></comment></comment><comment><USER39> My heart goes out to the poor Redux project maintainer. Can just imagine him a few months from now checking on his old email address that he's forgotten about and finding John's invite. Friendly reminder to everyone to keep your project contact info current.

</comment><comment><USER40> This is encouraging, have been working on my game in Haskell for last few weeks, it is fun. Hope to see more insight & progress from John soon.

</comment><comment><USER41> So how do you keep state like health points in a functional language? :)

<comment><USER42> One way you could do it is by using mutable state. Impure languages, such as Scheme or Ocaml, let you use mutable like normal imperative languages do and in Haskell you can use mutable references inside some special monads (and you even ave more than one kind of mutalbe reference, depending on what monad you are on: IORef, STRef, etc)

The other way is to not use state. If you squint a bit, you can see that if you explicitly encode your "state" as function arguments you can kind of update it by calling the function recursively:

       go 0 acc = acc
       go n acc = go (n-1) (n * acc)

       fact n = go n 1

In the previous example, the code I wrote does exactly the same thing as the usual imperative loop might have done, but the accumulator is a parameter on the helper function instead of being a mutable variable.

In general, if you are OK with this kind of non-destructive updates that I used here, you can encode all your state as extra parameters that you thread around your functions. You can do this by hand in most cases but in some situations the state is very pervasive and correctly threading it around can be complex and error prone. In that case, you can look into use things like the State monad (not to be confused with the ST monad!) to do that implicitly pass that parameter around for you.

<comment><USER41> But for a game your state needs to update at specific time intervals, otherwise you walk too slow or too fast. How can that ever be purely expressed?

Personally, I would love to see more functional possibilities in imperative languages, but have regular imperative possibilities as well. E.g. running the game and keeping state seems pretty suitable for imperative code. But doing certain updates or calculations could be expressed better with functional code.

<comment><USER42> > But for a game your state needs to update at specific time intervals, > otherwise you walk too slow or too fast. How can that ever be purely > expressed?

In this case you want ot have a system that reacts to an event that fires on a regular interval (as well as other sorts of input events). If you search for Functional Rdeactive Programming you will find some example libraries out there that try to do this in a pure manner (although I would personally have to say that this is all still a bit on the experimental side of things).

That said, Haskell still lets you do things the imperative way if you want! All you need to do is put the impure code in the IO monad, where it belongs.

You are only forced to be purely functional if you want to or if whoever is calling you must be a pure function. So basically, the idea is that your `main` function is impure code in the IO monad and it can call either more impure code or pure "helper" functions. Increasing the percentage of your code that is pure is a nice thing but its not mandatory.

</comment></comment></comment></comment><comment><USER43> Any word on a Quake port to iOS?

</comment><comment><USER44> it's gonna be another perl 6.

<comment><USER45> John Carmack is actually pretty good at writing Wolfenstein 3D.</comment></comment>


LinkedIn Uses Rapportive To Access Your Email Header Information (Section 1.D) - <AUTHOR> http://www.linkedin.com/legal/pop/pop-privacy-policy#main

<comment><USER2> The use of LinkedIn accessing your data across social networks and email was also discussed in the comments on [http://www.interactually.com/linkedin- creepiest-social-netwo...](http://www.interactually.com/linkedin-creepiest- social-network/)</comment>


The smug style in American liberalism - <AUTHOR> http://www.vox.com/2016/4/21/11451378/smug-american-liberalism <comment><USER2> An excellent article and summarizes why I'm drifting away from the left as time goes on.

 _" If the smug [liberal] style can be reduced to a single sentence, it's, 'Why are they voting against their own self-interest?' But no party these past decades has effectively represented the interests of these dispossessed. Only one has made a point of openly disdaining them too.

Abandoned and without any party willing to champion their interests, people cling to candidates who, at the very least, are willing to represent their moral convictions. The smug style resents them for it, and they resent the smug in turn.

...

The smug style, at bottom, is a failure of empathy. Further: It is a failure to believe that empathy has any value at all. It is the notion that anybody worthy of liberal time and attention and respect must capitulate, immediately, to the Good Facts.

...

Make no mistake: I am not suggesting that liberals adopt a fuzzy, gentler version of their politics. I am not suggesting they compromise their issues for the sake of playing nice. What I am suggesting is that the battles waged by liberalism have drifted far away from their old egalitarian intentions.

I am suggesting that open disdain for the people they say they want to help has led them to stop helping those people, too.

...

I am suggesting that they instead wonder what it might be like to have little left but one's values; to wake up one day to find your whole moral order destroyed; to look around and see the representatives of a new order call you a stupid, hypocritical hick without bothering, even, to wonder how your corner of your poor state found itself so alienated from them in the first place. To work with people who do not share their values or their tastes, who do not live where they live or like what they like or know their Good Facts or their jokes."_

<comment><USER3> The person who wrote this is a _member_ of the socialist Left. This is a critique of the style among establishment Liberals (who support right-of- center Neoliberal economics / very weak social democracy and social liberalism), not the Left (who support the spectrum of leftist policy from strong social democracy to socialism to communism as well as social liberalism): Mother Jones and Slate, not Jacobin and Dissent. The distinction is extremely important now that the rift between the two is as large as it is.

If you're disgusted with the smugness _and_ support Nordic or Euro style taxation and proper redistribution, then it'd be toward, not away from the Left (not to say there are no smug Actual Leftists, just that they have no voice in our current media.)

</comment></comment><comment><USER4> So, politics is how we decide on public policies that determine how we as a society function and all that should be based on emotional reactions.</comment>


Ask news.YC:  For the lisp experts - tell me how you learned the language. - <AUTHOR> <comment><USER2> I'm no expert, but I'd suggest two things.

First, while learning recognize the tricky learning curve and keep poking at complex material as you learn. Macros especially feel dense and frivolous before you see them in action. I'd suggest _On Lisp_ both for being full of excellent examples and free. If you're looking at Scheme, then keep SICP by you at all times.

Secondly, more so than in other languages, code to learn. Lisp's parentheses are a turn off to everyone until they reach some critical mass of application and understanding.

Learning Lisp reminds me of learning Chinese: the very medium you write with is vastly different from the norm and rather complex, but as you get into it you learn that there is a whole lot of sense to it.

<comment><USER3> I would also suggest keeping the Scheme spec, R5RS, around too.

</comment></comment><comment><USER4> I happened to learn it bottom-up. One day when I was in college, I picked up a book about implementing a Lisp interpreter in C. I knew C, Pascal and Fortran back then, but nothing about Lisp except it's a language for AI with full of parentheses. I was more curious about writing-an-interpreter-in-C part rather than Lisp itself. At home I typed the C source into my 386 DOS machine, and immediately fascinated by how the simple fundamental idea enabling such a rich language. (The book is in Japanese and I think out of print. Probably there are similar books in English, though I don't know).

Then I went on to reading existing Scheme/Lisp implementations and start hacking it. Aubrey Jaffer's SCM gave me a good idea of run-time data representations of Scheme and a simple mark-sweep GC. I learned how to compile Scheme code by looking the output of Joel Bartlett's Scheme->C. STk (now stklos) showed the power of CLOS-style metaobject protocol by mapping Tk protocol to Scheme object cleanly like a magic. Other implementations I looked at was T, VSCM, Scheme48, ...

I also started writing tools I use at work in Scheme. Solving real problems is, after all, the best way to learn the language.

<comment><USER5> There's a great article on learning Haskell by writing a Scheme interpreter:

[http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutoria...](http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html)

</comment></comment><comment><USER6> The book, "The Little Schemer" is the absolute best and fastest way to break your mind of its old habits and get into lisp programming. Try to write each piece of code before looking at the answer. (Use PLT Scheme.) Afterwards, your freshly broken mind will be ready for all the other concepts that are also important to lisps.

"On Lisp" is great whether you go with Common Lisp or Scheme. I actually tried to learn Common Lisp from scratch with that book, and I slowly slogged my way through five chapters. I got a lot out of it but it would have been better had I learned what car, cdr, mapcar, etc. meant first. Maybe you could try that.

Any time you can get away with writing something in Scheme (or CL, whatever) do it. Just code with it all the time.

<comment><USER7> I'm no expert, but I thought I'd add that The Little Scheme is a most _enjoyable_ way to get into Lisp.

I don't think it's that important that you use DrScheme (I suppose that's what you mean with PLT Scheme). If you do, make sure the 'language' is set to standard Scheme, not some 'safe' subset. In The Little Schemer, you go from absolute zero all the way to using continuation passing style, motivating and deriving the Y Combinator, and writing a metacircular evaluator.

</comment></comment><comment><USER8> In my case, none of the previously mentioned books. Too complex, with too many assumptions about what you know.

Specially PCL, it helps to feel several 'whoaaa lisp can do that!' moments, but not really to learn the small basic things that are common in lisp.

Instead, I learnt with COMMON LISP: An Interactive Approach downloadable for free here: [http://www.cse.buffalo.edu/pub/WWW/faculty/shapiro/Commonlis...](http://www.cse.buffalo.edu/pub/WWW/faculty/shapiro/Commonlisp/)

It takes your hand and teaches slowly, but with a solid foundation. If you do al exercises (and you should), you will implement one or two of the very complex projects showcased in On Lisp, but with the difference that you will understand the code from top to bottom (since you wrote it).

Take into account that I have not read "The Little Schemer", so take it out from the list of lisp books I criticise.

</comment><comment><USER9> I picked up the language after running sawfish as a window manager. This took me to emacs and from there to Common Lisp. I can highly reommend 'A Gentle Introduction To Symbolic Computation' if you are new to programming and 'Practical Common Lisp' if you aren't new to this field. If you follow that up with 'On Lisp' and (optionally) 'Lisp In Small Pieces' you cant go wrong.

</comment><comment><USER10> Right now, for fun, I'm reading Practical Common Lisp, The Little Schemer, and ANSI Common Lisp. I pick up the book nearest me whenever I have the chance :). I would say it's working well enough for a spare time activity.

Practical Common Lisp is available online here: <http://www.gigamonkeys.com/book/>

</comment><comment><USER11> I approached it by following my guru's advice, after having fun with Python, OCaml, Erlang; learing Lisp was pain first and then fun. Paul's book explained a lot, as well as Successful Lisp. And yes, browing HyperSpec a lot makes sense!

</comment><comment><USER12> Started by writing Emacs-lisp stuff, then read more about it and got to learn Scheme and started using it for projects, finally wrote a Scheme compiler, lost interest and switched to Python :)

</comment><comment><USER13> There was a book by Hofstadter (of Godel, Escher, Bach fame) which has a nice introduction. Perhaps the book was called Metamagicum.

<comment><USER14> Are you referring to Metamagical Themas? That book is a collection of columns he wrote for Scientific American, and only a couple of those have anything to do with Lisp.

<comment><USER15> Yes, I refer to those. They have been my first contact with Lisp. The Wizard Book (SICP) was useful later on.

I did only remember the German title (Metamagicum). Thanks for finding the English one.

</comment></comment></comment><comment><USER16> <http://www.eblong.com/zarf/zplet/lists.html>

</comment><comment><USER17> I recently did this, as in about a month ago, I became interested in learning Lisp. I started with a bunch of things. First I tried to get various working environments going like:

Emacs + Slime + SBCL

Emacs + Quack + PLT Scheme

I also tried DrScheme (which is a great learning environment).

Not knowing what i'd really need I also did some searching and discovered a few books:

<http://mitpress.mit.edu/sicp/>

<http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html>

<http://www.gigamonkeys.com/book/>

i also purchased the little schemer. I learned various interesting things from these different sources.

1\. practical common lisp was essentially useless to me since i'd already been kind of feeling sold on using scheme and had very little interest in common lisp. what it DID teach me was how datastructures in lisp are created under the hood (or how one might go about implementing them). from this perspective it was very nice and helpful when understading, car, cdr and mapcar. although i wish i'd had a nice example of implementing a scheme in C.

2\. reading The Little Schemer, has been the single most satisfying read of my entire computing life. so much so that i bought The Seasoned Schemer and The Reasoned Schemer without hesitation at price. this book will teach you to "think lisp" if you can just make it through the first book you will honestly know everything you need to about the lisp mindset and be ready to actually write useful code and no be shocked or surprised by anything. i can't stress enough how useful this book is READ IT.

3\. Teach Yourself Scheme in Fixnum days has been a powerful reference for me and I honestly hope that it grows and evolves, it's easy to reference and great for when you start actually hacking on projects. It's just simple and obvious.

4\. SICP is a mammoth work and also has a very nice video series. If you're serious about Lisp and even more serious about Scheme and furthermore serious about computing. You must read this. My approach so far has been to read top down (ie. cover to cover) and also use it as a reference. I get sheer joy from reading it, but it's amazing how practical it can be as well.

Personally I've settled on scheme, i dont' really like common lisp i find it irritating and with projects like Chicken: <http://www.call-with-current- continuation.org> out there I feel really comfortable. I re-wrote my entire blog using nothing but chicken and the web-scheme egg. I recently wrote an irc bot for fun during a huge bot writing session that broke out in a channel i frequent (don't ask we all just started writing bots for some reason).

If you're looking for good platforms the best I can recommend are:

SBCL (hands down nothing really compares so far)

PLT Scheme (aka DrScheme if you like GUI's)

Chicken (the absolute best imho BSD licensed scheme)

Hope this helps everyone. This is such an awesome thread i hope it continues for awhile.

</comment><comment><USER18> First I'll tell my story to answer the question, then I'll put resources mentioned in a list at the end.

I've been picking up bits and pieces, and would not call myself anything near an expert. I knew what Lisp was from a Languages class in college, and we actually used lisp to implement a language. Roughly none of it stuck, except for car, cdr, and the idea of using prefix notation and the 'everything is an expression' idea.

Relearning it started with just reading PG's essays and getting curious. Being too lazy to order it online, I looked in every bookstore and library I encountered for ANSI Common Lisp, but never found it. It's rather pricey, too, which is why I was hesitant.

I started with SICP and the video lectures. Something important came up in another part of my life, though, and I basically put Lisp on hold for several months.

When I finally got settled down again, I started playing with with emacs-lisp. I knew emacs would be useful no matter what happened next. I downloaded the manual (which is dense) and scrounged for tips on the internet. The idea was that I'd get familiar thinking in that style and using it for practical things, before moving on to something more serious. Emacs-lisp has some limitations (no closures, for example), so it wasn't too long before I started looking elsewhere.

My next two sources were _On Lisp_ by Paul Graham and _Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp_ by Peter Norvig. Both books include speedy overviews of Lisp, and point you to Guy Steele's _Common Lisp The Language (2nd ed)_ (CTL2), which can be found online, for authoritative reference. Both books are good because they are exciting and fun. Norvig has a fairly gentle introduction, while Graham assumes you're already familiar with many Lisp operators. I don't actually think that's a big problem, and you shouldn't let it scare you away from at least trying to read it. I think it's easier to read the first few chapters of _On Lisp_ first and get excited about looking up the details, than it is to slog through a reference or a mundane introduction beforehand.

I've set aside Lisp again, (though I'm keeping my eye open for opportunities to use it), though I have obtained a copy of _ANSI Common Lisp_ which I also highly recommend. Even if you don't need the introduction, the book includes a large reference section that's a bit more 'user-friendly' than CTL2. The last significant reference I've used is _Practical Common Lisp_ by Peter Siebel, which can be found online.

 _On Lisp_ , by Paul Graham <http://www.paulgraham.com/onlisp.html>

_Paradigms of Artificial Intelligence: Case Studies on Common Lisp_ by Peter Norvig

 _ANSI Common Lisp_ by Paul Graham

The GNU Emacs Lisp Reference Manual: [http://www.gnu.org/software/emacs/manual/html_mono/elisp.htm...](http://www.gnu.org/software/emacs/manual/html_mono/elisp.html)

 _Practical Common Lisp_ by Peter Siebel <http://www.gigamonkeys.com/book/>

_Common Lisp the Language: 2nd Edition_ by Guy Steele [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai- repository/a...](http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai- repository/ai/html/cltl/cltl2.html)

 _Structure and Interpretation of Computer Programs_ by Harold Abelson and Gerald Jay Sussman with Julie Sussman <http://mitpress.mit.edu/sicp/full- text/book/book.html>

<comment><USER19> Everyone beat me to the punch, but my starting list for Common Lisp is:

1\. A Gentle Introduction to Symbolic Computation. <http://www.cs.cmu.edu/~dst/LispBook/index.html>

2\. Practical Common Lisp <http://www.gigamonkeys.com/book/>

3\. ANSI Common Lisp <http://www.paulgraham.com/acl.html>

4\. On Lisp <http://www.paulgraham.com/onlisptext.html>

5\. Paradigms of Artifical Intelligence Programming <http://norvig.com/paip.html>

6\. Lisp in Small Pieces [http://www.amazon.com/Lisp-Small-Pieces-Christian- Queinnec/d...](http://www.amazon.com/Lisp-Small-Pieces-Christian- Queinnec/dp/0521545668)

SICP is also amazing...and there are at least three sets of videos to go with the book (Abelson/Sussman and HP/MIT, ArsDigita, and UC-Berkeley.)

<comment><USER19> For Scheme:

1\. How to Design Programs [ www.htdp.org ]

(1.5) I've heard good some good things about using Concrete Abstractions or Simply Scheme before SICP...

I know Simply Scheme introduces some non-standard functions, though. I've only glanced at both, so I can't give a full recommendation yet. I just ordered them both in hard copy. These two are probably only useful if you're still new to programming and want to gain more confidence before moving on to SICP.

[http://gustavus.edu/+max/concrete-abstractions- pdfs/index.ht...](http://gustavus.edu/+max/concrete-abstractions- pdfs/index.html)

2\. Structure and Interpretation of Computer Programs [ Buy the book and check out all three sets of videos...the instructor's manual is pretty much a waste of $, though, IMHO. ]

</comment></comment></comment><comment><USER20> From R5RS.</comment>