Decaffeinating a Large CoffeeScript Codebase Without Losing Sleep - <AUTHOR> http://eng.datafox.com/javascript/2017/07/18/decaffeinating-large-coffeescript-codebase/ <comment><USER2> It's pretty wild having seen CoffeeScript spread like a wildfire in the early 2010s, only to be discarded nearly as fast a couple years later.

<comment><USER3> Same, the JS cool-kids swore up-and-down that CoffeeScript was the future and we'd be fools to not jump on.

It's another reminder that no-one knows the future.

<comment><USER4> CoffeeScript always felt forced onto me during the height of 37Signal's influence of software development trends at the time. At the only rails shop I ever worked at it was heavily resisted.

It was at the same time I was reading more and more of Resig blogs and books (Secrets of the JavaScript ninja) and I really began to learn and grok just plain normal JavaScript. I said to myself, "you know, this really isn't that bad"

Haven't looked back since. I hate the direction ES is going.

<comment><USER5> What do you dislike about ES' direction? The increase in language features in general, or more specific things?

<comment><USER4> Increase in features yes and the continual succumbing to developers who just can't seem to think outside the strict OO paradigm.

Prototypical inheritance is really not that hard to understand.

I would rather see JavaScript fix the existing functionality, such as sometimes the prototype chain not being correctly established when instantiating a new object.

</comment></comment></comment></comment></comment><comment><USER6> Plain vanilla JS (and therefore TypeScript) still lacks one killer feature from the Coffee family: Null propagation operators (`a ? b` => `a != null ? a : b`, `a?.x` => `a == null ? null : a.x`, etc). Even C# has it.

<comment><AUTHOR> I agree, it's one of the features we'll miss.

There is a Stage 1 Null Propagation proposal: [https://github.com/tc39/proposal-optional- chaining](https://github.com/tc39/proposal-optional-chaining)

<comment><USER7> There's a babel transform for this in case you want to start using it now, before browsers support it:

[https://github.com/babel/babel/tree/7.0/packages/babel- plugi...](https://github.com/babel/babel/tree/7.0/packages/babel-plugin- transform-optional-chaining)

<comment><USER6> I want to use TypeScript too, which will probably not adopt it until standardization.

<comment><USER8> We definitely want to implement it! But many parts of that specification are still in flux, so like you said, we'd like to see the proposal stabilize first to avoid problems.

</comment></comment></comment></comment></comment><comment><USER9> CoffeeScript was great, and I'm pleased how relatively easy it's been to move away from it now that ES6 offers most of the same benefits.

I've recently started moving our existing CoffeeScript + React codebase – it's been okay, though I still miss the terse CoffeeScript syntax. A similar blog post that's helped is Bugsnag's: [https://blog.bugsnag.com/converting-a-large- react-codebase-f...](https://blog.bugsnag.com/converting-a-large-react- codebase-from-coffeescript-to-es6/)

<comment><USER10> If you miss the syntax, why not wait out for CoffeeScript 2? They're going to add all of the ES6 features, to my understanding.

<comment><USER9> There are a few reasons we made the switch:

\- Familiarity. Most of our team have a little experience with Javascript, but none at all with CoffeeScript. It's not that different, but there's still a cognitive overhead.

\- Documentation. Almost all documentation for front-end work, especially with React, is in ES6 now. There's an additional overhead in translating it.

\- React – CJSX was IMO awesome, but there's no ongoing support for it. Embedding JSX in CoffeeScript is less satisfactory.

\- Webpack. We've had various problems getting features of Webpack 2 to work correctly with pre-2.x CoffeeScript – HMR etc. that only really work with ES6 modules. We could wait for CoffeeScript 2, but it's already becoming a drag on velocity.

In short, CoffeeScript was great, but the benefits are much more marginal now. My preference for terse syntax isn't that high a priority for the rest of my team, so I'm happy to take advantage of the more standard ES6 that we can now use.

<comment><USER11> Actually if you still really want JSX in CoffeeScript, it's now built in: [https://github.com/jashkenas/coffeescript/pull/4551](https://github.com/jashkenas/coffeescript/pull/4551)

</comment></comment></comment></comment><comment><USER12> This article is missing one important thing: CoffeeScript now supports native import and export statements, but decaffeinate doesn't. I recently migrated several large codebases and had to escape all the import and export statements (which wasn't very hard), but it got a little hairy where we were directly exporting instead of assigning it to a variable first.

I'm going to miss CoffeeScript, but being able to use ES7 features (notably async/await) is worth it.

<comment><AUTHOR> When we performed our conversion, decaffeinate@2 did support ES2015 import/export - it was actually the default which could be disabled using (`--keep-commonjs`).

With decaffeinate@3, you can convert using ES2015 module syntax with the `--use-js-modules` flag.

Although we don't plan on using CoffeeScript for the reasons outlined in the article, I do want to mention CoffeeScript 2 does aim to target ES.next features and offer interoperability. Specifically, CoffeeScript 2 does support async/await [http://coffeescript.org/v2/#async- functions](http://coffeescript.org/v2/#async-functions).

</comment></comment><comment><USER13> Thanks, this is something I've been thinking about for a while.

<comment><AUTHOR> No problem! Hope it comes in handy :).

</comment></comment><comment><USER14> Hopefully the fate of TypeScript will be the same. If one wants Java in the browser, one can just create Java applets.

<comment><USER15> I can't tell if you're joking; applets are being officially deprecated in Java 9 and browsers disable them by default now.</comment></comment>


Free seneca books to calm your mind - <AUTHOR> http://www.openculture.com/2017/10/three-huge-volumes-of-stoic-writings-by-seneca-now-free-online-thanks-to-tim-ferriss.html <comment><USER2> Sadly pdf is not a useful format to put in readers. Not sure whether they cover the exact same ground but these have more file variety:

Gutenberg [http://www.gutenberg.org/ebooks/author/1308](http://www.gutenberg.org/ebooks/author/1308)

Standard ebooks [https://standardebooks.org/ebooks/seneca/](https://standardebooks.org/ebooks/seneca/)

</comment><comment><USER3> If you have time you should check this one out: [https://en.wikipedia.org/wiki/Epistulae_Morales_ad_Lucilium](https://en.wikipedia.org/wiki/Epistulae_Morales_ad_Lucilium)

</comment><comment><USER4> Bit cringey when Seneca's mansplaining to a mother struggling with son's death why she shouldn't be so gloomy.</comment>


How Web Forums Make Neuroticism Viral - <AUTHOR> https://www.truthhawk.com/web-forums-make-neuroticism-viral/ <comment><USER2> > It is weirdos and neurotics that are most disposed to spending all their > time posting online

This is not true. Every single human being has multiple different sides/personas depending on the context in which they engage.

For example, many people think "Trolls" are some mythical category of assholes they will never run into in real life, but the thing is, everyone can act like a troll depending on the circumstance. This is why Twitter can't fix the spam problem. Because they think the goal is to eradicate this mythical group of people. But the reality is everyone on Twitter is in one way or another annoying to someone else, without even them realizing.

I am probably much much busier person than OP in real life, but I still have time to post on HN. I am definitely not a weirdo and neurotic who has nothing better to do. I probably spend less time posting online than the OP spend time watch TV shows.

The reason I say this is because without understanding WHO exactly "trolls" are, you will always lose. When you understand trolls are just ordinary people like yourself, only then you can find a way to deal with them.

p.s.

I have acted like a neurotic person on certain forums when I was in a desperate situation, and I am perfectly aware of that. That doesn't mean I am a weirdo who has nothing better to do. Anyone in those situations would probably behave that way too. Knowing that doesn't make it any less annoying, but my point is that I can sympathize, and I know that these people are not all weirdos.

<comment><USER3> When they he says neurotic the author is probably not talking about people like you who occasionally take internet slapfights too seriously. They're probably talking about people like that dude on 4chan who wrote a 97 page document about another poster

[http://i1.kym- cdn.com/photos/images/original/000/622/581/94e...](http://i1.kym- cdn.com/photos/images/original/000/622/581/94e.jpg)

[http://per.vyrd.net/of/utv.pdf](http://per.vyrd.net/of/utv.pdf)

<comment><USER4> I can think of a few dudes who wrote several hundred pages about someone they barely even knew [1], but we don't usually consider them neurotic.

[1] [https://en.wikipedia.org/wiki/New_Testament#The_Gospels](https://en.wikipedia.org/wiki/New_Testament#The_Gospels)

<comment><USER5> They believed a man walked on water, changed water into wine and was resurrected from the dead. Maybe neurosis is the explanation.

<comment><USER6> More like psychosis.

<comment><USER7> Just good storytelling. The people who believe it OTOH...

</comment></comment></comment></comment></comment></comment><comment><USER8> Perhaps this is the reason that Dungeons and Dragons DM advice is so detailed and exhaustive that it would take hours to prepare each session, while actual D&D games with very little DM prep are usually still fun.

I got the "I must shoot 10,000 free throws to be prepared" attitude about becoming a developer -- must know Linux, concurrency, all interview questions, salary negotiation, and so on. It was daunting but ultimately correct, I got the kind of job I wanted and doubt I could have done it without being neurotic about it.

Or maybe I would have been fine and I'm still being neurotic and overdoing it. This article's perspective is helpful because "Remember that all this advice is coming from neurotics" was not something I took into account.

</comment><comment><USER9> A webcomic called Toothpaste For Dinner has my favorite take on this idea: [http://www.toothpastefordinner.com/index.php?date=051810](http://www.toothpastefordinner.com/index.php?date=051810)

</comment><comment><USER10> my favorite "game"

Nicky Case: WE BECOME WHAT WE BEHOLD; a game about news cycles, vicious cycles, infinite cycles

"ᴛʜᴇ ᴍᴇᴅɪᴀ's vicious cycles. Here's the feedback loop:

      conflict → the media blows it up → even more conflict" [1]

[https://ncase.itch.io/wbwwb](https://ncase.itch.io/wbwwb) ( need ~5min)

[1] [http://blog.ncase.me/we-become-what-we-behold-a-post- mortem/](http://blog.ncase.me/we-become-what-we-behold-a-post-mortem/)

<comment><USER11> Required reading on the matter:

[https://medium.com/@parkermolloy/5-things-the-media-does- to-...](https://medium.com/@parkermolloy/5-things-the-media-does-to- manufacture-outrage-ba79125e1262)

</comment></comment><comment><USER12> > It is weirdos and neurotics that are most disposed to spending all their > time posting online

Uh.. hey...

But seriously, I think it's also simple the case that an anonymous internet forum is a great place to vent your innermost feelings.

</comment><comment><USER13> This reminds me of an Atlantic article that I found quite disturbing : [https://www.theatlantic.com/magazine/archive/2000/12/a-new-w...](https://www.theatlantic.com/magazine/archive/2000/12/a-new- way-to-be-mad/304671/)

It is about the origin pathological ideas and how the internet might make them more prevalent.

<comment><USER14> Really interesting topic, I read the intro and the end. But the last paragraph seems to underline it: most of the people haven't seen a Psychologist or talked to anyone.

I'm quite convinced that online communication is really Lo-Fi. Though I'm still wondering whether it does more harm than it does good. I can only speak for myself, over the last 10 years I decreased my online life a lot and I recommend others to do the same. (Apart from work, but I mean that's just coding stuff and mostly researching. ;)) Ironically there's a global trend in the last 10 years making "online" cool and most people spend many hours socializing online.

</comment></comment><comment><USER15> Having both been on the Something Awful forums and read some of the major stories there about the low points of the site's history and community dramas, this article makes sense to me. The reason why many forums, even "normal" ones about mothers, have mass social dysfunction because they're self-selecting communities.

</comment><comment><USER16> This was a big cause of the death of CampusNetwork, which in 2004-5 was a credible competitor to Facebook. Because it encouraged for campus-wide conversation -- rather than just conversation with your immediate contacts -- it gravitated towards politically extreme conversation that dissuaded mainstream participation. Which is a shame, because it did act as a good way to meet new people, which isn't Facebook's forte.

<comment><USER17> Yeah, the thing that has to be understood, IMO, is that everyone will say they want to be part of a brave new forum where interesting ideas are discussed and there is a lot of intellectual stimulation.

This is a complete and utter lie. People routinely tell it to themselves without realizing its blatant falsity.

Most people find conflict unsettling and can handle it only in the smallest doses. People identify their ideas with themselves and take attacks or criticisms of them as personal slights. In written media like online discussion, these responses are amplified because there is little room for tone or other dampening/mitigating signals from the speaker, and the written form makes the harsh words seem more final and official. A slighted person will often feel the need to respond on the record, whereas in person they may have been more likely to dismiss the remark.

Cognitive dissonance creates a powerful feeling of unease. When that signal is received, the common interpretation is to make some passing attempt to rebut, like "You know, it's not even worth the time", so that you feel like you won, and then to never return to the place that caused bad feelings.

The reason that reddit has always been a big echo chamber and unable to really get mainstream adoption is because it has a fixed front page. This doesn't account for the differing mainstream tastes. reddit has a steady supply of atheistic young men because that's the audience that they appeal to when you load up reddit.com.

Despite the lies they tell themselves so they can feel noble and open-minded, people DO NOT want to be challenged. They want their egos stroked.

If confronted with an idea that seems contradictory to something important to their self-conception, they will immediately become defensive; this is true even among friends when it can sometimes be recovered, but strangers online have zero social capital to deploy to absorb this hit. For most, taking a position in a discussion is nothing more than a way to signal allegiance to a tribe. If your users do not have a way to ensure their experiences aligns with their tribal values and preferences, they will leave.

This is important for tech entrepreneurs and people seeking to "bridge the gap". It's bigger than many people realize, and much bigger than people will willingly admit. Efforts in this direction must be baby steps, and no one should expect to perform a great reconciliation.

<comment><USER18> > the thing that has to be understood, IMO, is that everyone will say ...

> ... a complete and utter lie

I'd say that's an overly broad generalization, if it wasn' for "IMO" and the following

> People identify their ideas with themselves

Which is an obvious self-reference. I would on occasion say "you" to mean "one", but actually mean "me" in an hypothetical fashion.

But then comes the offensive attack:

> Despite the lies they tell themselves so they can feel noble and open- > minded, people DO NOT want to be challenged. They want their egos stroked.

This is an informal accusation that would upset people because its unfounded. See, I can write an informal accusation all the same, but I don't expect you to like it. I can't really write a formal argument about it, because I lack training in formal rhethorics.

<comment><USER17> >Which is an obvious self-reference. I would on occasion say "you" to mean "one", but actually mean "me" in an hypothetical fashion.

I don't think it's [just] me. Identity politics is based on attempting to program this impulse.

>This is an informal accusation that would upset people because its unfounded.

I think the evidence is abundant. It upsets people because it trivializes their behaviors and makes them feel unimportant and predictable (that is, it fails to stroke their egos). People like things that make them feel in control and important. Commentary around psychological realities rarely does this because psychology itself is about analyzing and generalizing human behavior.

</comment></comment></comment></comment><comment><USER19> How about checking your phone every five seconds even though you know you have no notifications for neuroticism? Stop picking on my internet forums.

</comment><comment><USER20> All brilliantly stated. I would only add that it's not "all" participants in communities (on and offline), but archetypes, legends and hierarchies spring up espousing the "ultimate", perfect or essential ways of performing the activity...

almost no one can or does live up to them. That confuses neophytes.... so don't be stymied by sage advice!

</comment><comment><USER21> Bland neuroticism makes itself viral. The threads are easy to come up with and everyone can chip in. The OP gets an anonymous confessional and the rest get to feel better about themselves.

Those kinds of forums are top results because they minimize distress. Google having solid advice for every little thing would drive people neurotic.

</comment><comment><USER22> _If you're a talented artist, you probably spend your time actually making art rather than discussing technique online. Top amateur athletes are too busy actually training and playing to spend five hours a day on a forum for their hobby._

Is this _always_ true?

I mean, of course it's true at the _extremes_ ; if someone literally spends _all_ their waking hours posting on forums about X, they're probably not getting very much X done.

But discussion and polemic is more complementary to some occupations and disciplines than others, one must acknowledge—as this article seemingly doesn't. Publishing academics spend a lot of time on rigourous and structured rebuttals of each other's theories, a kind of highly professional and esoteric Reddit with long bibliographies. They probably partake of some informal channels to soft-trial some of their positions and hone some of the thorny bits before pushing to production, so to speak. They might spend a lot of time on that.

Attorneys learn how to write more eloquent and persuasive pleadings and briefs by way of practice. A lot of practice. Surely some of them chisel the background knowledge and social skills required to operate in their world online. If that's a serious learning tool, you're probably using it more than 15 minutes/day. You might even have a senior badge on some PHPBB legal board.

A lot of skills can be learned or improved on the Internet by reading and participating in sometimes contentious discussions about them. The strong religion in motorcycle repair and boating forums isn't all puffery and neurotic wheel-spinning; a lot of the commentators are quite well-informed about the range of available componentry and DIY techniques, even if they sometimes bite each other's heads off in arguments about the One True Way to overhaul a marine toilet or which ape hangers are the best.

The hours developers spend arguing about React vs. Angular on HN aren't necessarily wasted; some of the discussions are rich, vibrant and informative, and make both the writers and the readers better developers or technical managers.

I myself learned a great deal about history and politics in high school by arguing heatedly with informed people online. If I were an aspiring politician or writer, expository writing in support of a particular ideological conviction would have legitimate value and relevance as a skill set, and this kind of exercise helps to hone it.

It takes a certain kind of personality to devote a lot of energy to online discussions. Some people don't like to think and argue about methodology or meta- issues, or otherwise engage their analytical faculties very much when socialising. They just _do_. Good for them. However, this is a difference of style rather than substance. Everyone has to have "continuing education" of _some_ description to remain fluent in their field. And yes, of course there's a limit beyond which pure theory and no practice lies for simple reasons of time and economics, but it just depends.

So, I don't disagree with the fundamental premise, but as is so often the case, this article paints the online world with a broad brush.

<comment><USER17> I totally agree that engaging with the community is immensely valuable in technical pursuits like law and coding. I'm sure a lesser amount of engagement is also beneficial for skills that are somewhat more subjective, like art. These are great ways to stay apprised of the state of the art and to keep a pulse on the zeitgeist.

However, I think that the author is correct that a lot of fansites/forums/groups for [what are normally considered] casual interests are full of very obsessive people whose advice and opinions are not worth taking seriously. In some cases, these people may be completely non-functional and detached from reality.

It's really important that we step back and allow ourselves to see and enjoy the whole picture, instead of allowing the bubble of our online hangouts to color perceptions too much. The big picture is usually much wider, much less exclusive, and much less angry, and it's really healthy to appreciate that, _especially_ when a community starts piling on.

</comment></comment><comment><USER23> I think this could be extended to the mass media in general. Where do we get our information from? Journalists. What do journalists do? They write news articles. They don't actually do any of the things they write about, they only write. We very seldom (in comparison) get perspective from the people who are doing things - because they are too busy doing them to talk about it.

<comment><USER24> >We very seldom (in comparison) get perspective from the people who are doing things - because they are too busy doing them to talk about it.

Actually, journalists interview these people.

<comment><USER23> And that interview is filtered through the journalist's perspective.</comment></comment></comment>


DAO Is yet Another OOP Shame - <AUTHOR> http://www.yegor256.com/2017/12/05/data-access-object.html <comment><USER2> I'm a Domain Driven Design True Believer. But sometimes we all write stuff that's just CRUD and transaction scripts (in DDD parlance not SQL)

I also read the guys arguments against how ORMs are still SQL like, I contend that's caused by most (non functional?) languages not treating querying against collections as first class citizens.

I'm a big fan of C# and my favorite feature is Linq. With Linq you can query any data source using native type safe C# syntax, pass Linq expressions around and they will get translated on the fly to a query language that the source understands. You can send your Linq expression to sql Server, Mongo etc in production and mock out your source in your unit tests to use Lists and still test your queries.

</comment><comment><USER3> This seems to be an argument for or against simplicity. DAOs are just one pretty useful way to abstract database access. In the beginning they are almost always too much for what you need as far as data access, but provide a consistent way to access persisted data. You don't need them, but they are a safeguard against the future where it gets more complex and you don't want to refactor a bunch of code.

There's also multiple ways to implement and having a DAO that spits out transfer objects or value objects that aren't connected to the db is perfectly fine and nice and OOP.

In some situations with complex data structures that require lots of transactions the DAO becomes more important.

In the end, Im not sure what the article complains about. Author shows a simple example as being bad, but doesn't show an example where it's needed. And the negative isn't substantial.

If anything it gets you thinking more like the database system and that could be a pain if you switch off of relational or between systems that represent data differently.

<comment><USER4> >In the end, Im not sure what the article complains about.

It seems that the way an ORM abstracts talking to the database is not the way he would like it to happen. So he makes his own custom abstractions that involve sending raw sql strings instead. That's better?

<comment><USER2> I am always concerned when I see developers think they are their problem is it's own special snowflake that they need to write something custom to handle cross cutting concerns like configuration, database access, logging, security, etc.

It makes it harder to ramp people up when you aren't using a popular package (preferably open source with an agreeable license) and there is usually only that one person in the company that understand it's weird quirks instead of being able to Google for a solution to a problem.

<comment><USER4> I think is why a system like SQLAlchemy in Python is nice--if you really need to build something up from lower-level parts, you can, while still staying in the framework.

</comment></comment></comment></comment><comment><USER5> It sounds like one issue is the conflation of Object and Data Structure.

Book, in the presented example, has no behaviour so it is a DataStructure, making it an object introduces needless overhead.

Also, I believe DAOs are intended to be used in more complex cases. For example, I may have a BookSeries class in my database, and I may want it's instances to have a numberOfBooks property. NumberOfBooks would be a computed value, and it would be the job of the DAO to populate that field when retrieving the BookSeries.

This could go even further, where a class exist that does not map to the database table at all.

<comment><USER6> > It sounds like one issue is the conflation of Object and Data Structure.

Do you mind expanding on this a little bit? I am very confused. A "data structure" is an implementation of an abstract data type ([https://en.wikipedia.org/wiki/Data_structure](https://en.wikipedia.org/wiki/Data_structure)). A "class" is also an implementation of abstract data type (from this book [https://www.amazon.ca/Object-Oriented-Software- Construction-...](https://www.amazon.ca/Object-Oriented-Software-Construction- Book-CD-ROM/dp/0136291554) page 165).

I am not sure how you can have a data structure Book without any operations. Even if it were a C struct, accessing a field would consist an operation around that data structure.

</comment></comment><comment><USER7> Part of the problem comes from having a DAO that mimics your use cases when writing data. That is, adding a new Pipe is a business concern. Here, the author has turned it into a data concern. A business concern should be modeled in the domain layer and persisted through the data access layer. By the time we write to the database, there should be no thought involved. The work has been done and we want to record it. How we do that is purely up to our technical requirements.

Several years ago, I wrote an application using the repository pattern and there were repositories everywhere. But they seemed like a step up from the unstructured chaos of the DAO. It was a bigger mess when all was said and done.

Having struggled through the same issues as the author, I can say that after having learned and applied and DDD, CQRS, and Event Sourcing, I don't see the problem anymore. My concerns are one or more levels above "how do I write to or read from the database?". The database becomes a technical implementation detail and not the cause of crisis in architecting a system. In the past few months, I've used EF as an ORM, EF using just stored procedures, and Dapper, both through a DAO interface. All of these solutions worked and were easy to implement because I was simply recording changes to data, not putting the data at the heart of my logic.

<comment><USER8> I'm quite happy designing (in C# or Java) DAO-like classes with methods corresponding to meaningful queries and transactions (the specific and often complex operations needed by the application, _never_ "save an object" or "find all").

I encapsulate all database access, including dealing with connections and transactions; I have a single point of authority regarding where data come from and how I call update operations; and all objects coming in or out of the DAO are free of database dependencies (no persistence nonsense).

DAO/DTO designs, in my experience, tend to go bad when there's inappropriate repetition and complication: slightly different validation in different operations, validation in client code, multiple similar queries without consolidation, unwarranted different classes used in different cases, translation between back-end dumb containers of data and marginally different front-end dumb containers of data instead of thinking about a proper data structure, and so on.

</comment></comment><comment><USER9> I think I disagree with most of the arguments for this, and I think the author's example of his own "something like DAO" is worse organization. I haven't used "DAO" but from what I understood reading this, it's my preferred pattern of doing database access in which objects are just data, and any database interaction would either return a data object, or take one as a parameter.

From my personal experience, I've found that trying to write database interaction _methods_ on an object seemed to result in (subjectively) messier and harder to maintain code, compared to using _functions_ that take or return objects. To achieve Encapsulation, I'd merge this into functions `static void update(Book b)` or `static Book get()` within the `Book` class.

Though, this preference comes from having been corrupted by functional principles and a strong preference for immutable data objects.

</comment><comment><USER10> I'm always intensely wary of Yegor's articles. On the one hand, I do agree with him on many points. On the other hand, I couldn't agree less when he makes statements like "objects should be immutable".

</comment><comment><USER11> Few years ago I'd understand immediately that this is about Data Access Object. But when I saw this title now, my first thought was that it is about the DAO hack [1].

[1] [https://www.coindesk.com/understanding-dao-hack- journalists/](https://www.coindesk.com/understanding-dao-hack-journalists/)</comment>


Ask HN: What do you think of e-cigarettes? - <AUTHOR>

Hi,
As usual, I am looking for new ways to hack my brain. This time I'm looking at nicotine.
But not the tobacco; the vaporizing, pure kind -- ecigarette. It seems to be much more safer and doesn't fuck with lungs, which is why I'm even considering it.
I never smoked anything in my life so it's like not I'm trying to drop my habits. I just want new highs.
I'd be glad for any advice such as: THIS IS GOING TO KILL YOU.
Thanks. <comment><USER2> I started smoking in November of last year because nicotine is very interesting to me, and I planned to get an e-cig shortly thereafter. Well, the e-cig never happened, and after smoking for about 6 months, all the effects of nicotine that I enjoyed were gone. I smoked because I had to, not because I enjoyed it anymore. I've now nearly quit, but in retrospect, what a terrible, terrible decision to start in the first place.

Don't do it, you'll regret it.

</comment><comment><USER3> I think it's generally agreed that addiction is the opposite of hacking your brain. Unless by hack, you mean like with an ax.

<comment><USER4> It also doesn't do what the OP thinks it does. It's more like a Hawthorne effect - eventually your body adjusts to anything.

A few years ago I had to give up nicotine (and caffeine and alcohol) cold turkey; I did not become appreciably dumber, past the expected adjustment phase. It really doesn't do _that_ much for you, certainly not enough to be worth the addiction.

</comment></comment><comment><USER5> "a new way to get new high" = hacking your brain? one way to hack your brain - sit in complete silence focusing on your breath only for as long as possible..

other ways include picking on drawing(over painting)

"hacking" brain has nothing to do with drugs in my opinion.

(a tangential thought into the misuse of "hacking" - you are not hacking your appetite by eating a macburger instead of a home made meal that probably takes more time with the right nutrition value. )

May I suggest you to reword your question to "want to smoke e-cigarretes" instead of the "hacking". My concern is that some 16year old enthusiastic kid will read your question and consider this as "hacking the brain".

</comment><comment><USER6> As an avid e-cig user, I would advise against it. If you are not already addicted to nicotine, then there is no need to start. Although there are some studies that suppose nicotine might help people stave off alzheimers and help with other mental disorders unless you think you stand a good chance of suffering from one of these in the foreseeable future and you think nicotine might be beneficial, there is no need to start a habit that will quickly control you.

If you really want to try e-cigs, there is nicotine free liquid available and one company (the original inventor) announced today that they will be bringing out an e-cig device that will have the active ingredient lobelia, also known as "Indian Tobacco" instead of nicotine. This is because they will be able to market it as a dietary supplement, something which the FDA will not be able to ban (they're guessing anyway).

The FDA are currently in court with 2 e-cig distributors because they decided suddenly to the joy of various associates of the pharmaceutical industry to classify all e-cigs as drug delivery devices (even though no medical claims were made by the two in question - the largest distributors of e-cigs in America) and confiscated their shipments. In a strange turn of events the two e-cig companies are arguing their products should be classified as tobacco products.

<comment><USER7> Mayo Clinic warns that lobelia "can be toxic" and is not recommended "as a treatment for any condition, including nicotine withdrawal": <http://www.mayoclinic.com/health/lobelia/AN01877>

<comment><USER6> Interesting but nicotine can also "be toxic" and induce similar side effects to lobeilia at certain levels as well. They sound like the act in the same fashion and the amount of lobeilia which will be contained in the device likely won't cause any ill affects.

From wiki: Native Americans used lobelia to treat respiratory and muscle disorders, and as a purgative. Today it is used to treat asthma and food poisoning, and is often used as part of smoking cessation programs. It is a physical relaxant, and can serve as a nerve depressant, easing tension and panic. The species used most commonly in modern herbalism is Lobelia inflata (Indian Tobacco).

The company who are bringing out the product are highly regarded for their dedication to health and safety. They are the only company who have had all their liquid rigorously tested for impurities by an independent clinic in New Zealand. They have also courted the health authorities in every country they have sold their product in and I imagine their new liquid will undergo the same scrutiny.

To be honest, after watching the orchestrated smear campaigns conducted against e-cigs in the past year, it wouldn't surprise me if there was a concerted effort to do the same to lobelia.

</comment></comment></comment><comment><USER8> The weird, unregulated and unknown chemicals in the nicotine packets will kill you.

You'll also be the kooky spaz smoking the electronic cigarette, killing your chances to have normal interpersonal relationships with other human beings.

If you want to look stupid and do something socially alienating and dangerous at the same time, why not take a more tried-and-true approach, like rollerblading or riding one of those strap-in mountain skateboard things? At least that would be sort of fun...

</comment><comment><USER9> Hack your brain?! For what?! is life to boring, too long, too sane. This is the kind of question I hope my kids never asks (or wants to) and if they do, I would get them a job, or a date.

Want a new high? try running a marathon, benchpressing 315lbs, or screwing the hotest chick in your town. The two previous suggestions may be helpful for the later.

<comment><AUTHOR> I'm actually a distance runner because (along with other things) I enjoy (mild) high after a run :)

</comment></comment><comment><USER10> It sucks. It produces almost no smoke, the cartridges that they claim "contain as much nicotine as a pack of cigarettes" last for 2 hours of intermittent puffs, the thing decides to start "cleaning" itself regularly after about a day, and the battery runs out way too fast.

It's a good idea, I think, whose time has not come yet.

* Disclaimer: I bought 2 different kinds. Smoking Everywhere and Smoke Free. Smoke Free was better in that it was actually the size of a cigarette and produced more "smoke" (vapor), but they both sucked so bad I was back to exclusively real cigarettes within 4 days.

<comment><USER6> It's a shame your first experience was with over-priced inefficient garbage. Try one of big battery models (with a manual switch) from one of the American or European e-cig start-ups and drip bottled liquid directly onto cheap atomizers which should be considered disposable items. I got through about 2 a month and buy them in bulk for around $6 each.

Here's my list of all the big boys: [http://www.e-cignews.com/items/A_run_down_of_all_the_big_bat...](http://www.e-cignews.com/items/A_run_down_of_all_the_big_battery_model_e_cigarettes_on_the_)

<comment><USER11> May I ask where you get you atomizers from?

<comment><USER6> sure, sometimes Centraltrade (a wholesaler in China | e-liquid.cn), Bestecig.com (A manufacturer in China..atomizers are great, avoid his batteries though) and totallywicked-eliquid.com (A seller In America and the UK). They all do bulk deals and there are some others too I haven't used like Puresmoker.com (USA) and eastmall.net (China)

</comment></comment></comment></comment><comment><USER12> That addiction - that very, very strong addiction - will never leave you. Ever.

Understand? If you quit entirely, and never smoke for 10 years, if you were to smoke at all, it would be the greatest thing, ever. Good luck not starting again if you ever do. Even reading this thread about someone considering something I know is so utterly stupid flicks the switch in my brain.

If you want new highs, go get some real drugs that you can actually use to hack your brain and/or make yourself a better person. Nicotine has absolutely no redeeming qualities whatsoever. It is a POISON. How could deliberately setting out to get yourself addicted to a poison with no positive benefits not be an absolutely idiotic thing to do? Especially when it's without the enjoyment/day punctuating/social aspects of smoking normal cigarettes. I can't imagine many things that look more depraved and pathetic than someone sucking on some electronic cigarette gadget. You want to be /that/ guy? Really?

Whatever "high" you seem to think is there isn't. Maybe about as much of a beneficial "high" as holding your breath and spinning around really fast a few times. Gee, that sounds worth a lifetime of powerful addiction to an expensive poison, doesn't it? Go huff on a whipped cream container or something if you want a head-rush that badly.

There is no possible way you wouldn't regret this.

</comment><comment><USER13> This is going to kill you:

[http://health.usnews.com/articles/health/healthday/2009/07/2...](http://health.usnews.com/articles/health/healthday/2009/07/22/e-cigarettes- pose-a-health-hazard-fda-warns.html)

<comment><USER11> Nah, I think that article is posed wrong. They compare smoking the electronic cigs to not smoking at all. Of course not smoking is better. Much much better. But by blocking them from the market they are denying another use case. For people that already smoke tobacco. I don't know if you smoke tobacco and if so, if you tried ecigs. I do, and I have. And smoking ecigs is much much much better although in a "lesser evil" manner. The e-liquid (what gets vaporized in ecigs) manufacturers should, I believe, purposefully try and try pretty hard to mach the level of toxins and carcinogens in common cigarettes. They don't. What is readily perceivable is to a net BIG gain. I have used these devices for about 3 months last year. They were wonderful. I would ABSOLUTELY prefer them to regular cigarettes even if they would not have a wonderful potential for quitting smoking altogether which I strongly believe (with arguments) they do. Outright denying that opportunity should be considered criminal in my humble opinion.

<comment><USER13> OP has said he is currently a non-smoker. Starting smoking e-cigarettes for the mild "high" of nicotine is just dumb.

I've made no statement about them as an alternative to smoking traditional cigarettes.

</comment></comment></comment><comment><USER14> Nicotine is way too addictive to be worth it. It may be socially accepted and not obviously harmful, but it's up there with heroine in terms of how hard it is to stop.

</comment><comment><USER15> How does nicotine help your brain? Relaxation?

<comment><USER16> Nicotine makes you feel better for a short while. The reason you've been feeling bad is because you lack nicotine. Non smokers are always on the level of 'feeling good', they don't need nicotine to compensate for their lack of nicotine.

Don't start smoking. You don't need it.</comment></comment>


Capital One mobile and web logins are down - <AUTHOR> https://twitter.com/AskCapitalOne/status/941680641065803778 <comment><USER2> I suspect something seriously bad has happened. From my Reddit comment on a discussion of this in /r/personalfinance:

\</comment><comment></comment><comment>--

I wonder if this is related to the mysterious email I got from them early this morning.

That email said that a $165 credit from "STRIPE VIA QB*2 8 9 DE" was posted to my credit card account on the 13th and the funds are now available.

This was quite unexpected since I have never asked for any kind of refund or charge back on my Capital One card, and I can't even figure out who could possibly be doing this. In 2017, here is my entire Capital One card usage:

• in-store at Walmart (many times)

• in-store at Rite Aid (once)

• in-store at Home Depot (once)

• in-person at an automobile repair place (twice)

• online purchase of event tickets from Ticketfly (once)

None of these were for $165, and I don't think any of the in-store merchants above use Stripe. Not sure if Ticketfly uses them or not, but my Ticketfly purchase was only around $50.

In fact, going back to the end of 2007 I have no $165 purchases on my Capital One card.

So I wonder if they have had some massive screw up (accident or hack) that has resulted in the wrong accounts being credited or debited, and so now they are down while they try to straighten it out. It just seems too much of a coincidence that I get a reported credit that I completely cannot explain shortly before they go offline for an extended time outside of normal maintenance windows.

<comment><USER2> UPDATE: I was able to get in and check my account. In my recent activity there was a week ago a $165 charge from the same vendor. The listing on the website gives a more detailed name:

      STRIPE VIA QB*2 8 9 DE WWW.QUICKBOOK CA 94043 US

The listing for the credit gives:

      STRIPE VIA QB*2 8 9 DE 877-887-7815 CA 94043 US

Googling that phone number, most of the hits are for people saying they have unauthorized charges on their credit card. A variety of cards are mentioned.

My conclusion: it was a fraudulent charge. Capital One figured out it was fraudulent before it showed up on my statement, and reversed it. Since people with other credit cards are reporting similar unrecognized charges, this suggests some merchant got hacked.

</comment></comment><comment><USER3> I have been without access for 4 hours now. I have been with Capital One 360 since they were formally ING Direct and this is the first major outage I have experienced with them. Other than today, I have had a wonderful experience with their web and mobile apps. They say they haven't been hacked, but there is no ETA on a fix and no information into the nature of the outage. I was able to use my debit card, so I assume the sky isn't falling - but unnerved to say the least.</comment>


Android app combines Wifi and Cellular on multiple devices - <AUTHOR> http://www.xda-developers.com/android/get-your-videos-faster-with-videobee-for-android/

<comment><AUTHOR> (Shameless self-promotion) We just released the app as an Open Beta on Google Play:

[https://play.google.com/store/apps/details?id=com.shoelacewi...](https://play.google.com/store/apps/details?id=com.shoelacewireless.app.videobee&hl=en)

and would love to hear any feedback from you.</comment>


Visual Studio Code for Go - <AUTHOR> https://github.com/Microsoft/vscode-go <comment><USER2> We're a 100% Go shop and everyone on my team but me uses Visual Studio Code for Go. It's really amazing. (My mind has just been so corrupted by years of vim usage I'm trapped.)

It's bizarre to think my team writes in a language created by Google in an editor created by Microsoft on System76 laptops running Ubuntu. Never would have been possible in the Gates or Ballmer eras.

<comment><USER3> Can anyone who uses Visual Studio Code compare its functionality to the native Visual Studio? I forgot about this project because it's seldom mentioned:

[https://code.visualstudio.com/Download](https://code.visualstudio.com/Download)

<comment><USER4> Code completion is not as good. I believe VSC uses gocode. VS 2015 also has a cool new feature that shows you references to each function right above the function declaration. Clicking on the reference count will open a quick jump contextual menu.

I wouldn't compare the two products. VS has a SQL editor. It manages database connections. There is an integrated merge tool that is actually quite good. You have project templates, which I haven't found with VSC (I haven't really looked).

<comment><USER5> > VS 2015 also has a cool new feature that shows you references to each > function right above the function declaration. Clicking on the reference > count will open a quick jump contextual menu.

This feature is actually also available in VS Code[0], though only for C# currently. We should be able to add support for this in Go as well[1].

[0] [https://code.visualstudio.com/Docs/editor/editingevolved#_re...](https://code.visualstudio.com/Docs/editor/editingevolved#_reference- information)

[1] [https://github.com/Microsoft/vscode- go/pull/75](https://github.com/Microsoft/vscode-go/pull/75)

<comment><USER6> Very nice feature. While you're in there tinkering under the hood, how about wiring it up for JavaScript & Python, too? (I'm mostly kidding, because this appears to be exactly the direction you're already heading.)

But PLEASE enable basic drag and drop text editing as soon as you can. Since the 1980s, EVERY text component, text editor, IDE, and word processor Microsoft has ever made has had the basic editing ability to drag a selected bit of text and drop it into a new location, with the maddening exception of VS Code where, when you try to drag your selection, you just lose the selection.

There are multiple requests for this in the feature request section of the VSC website, but unfortunately everybody calls it by a different name, so a single, higher-priority issue that would be suggested to most voters as they look over the top of the list is instead recorded as a bunch of low-priority issues lost down in the weeds, discovered by so few that it keeps getting recreated as a new issue.

</comment></comment></comment></comment></comment><comment><USER7> I'm going to add the customary "I love this new MS" line here. About 10 years ago a friend of mine offered to make an introduction with her cousin, who was an exec at MS, to see about a job when I got out of college. I said "no way, they're working on such boring and dull stuff there"

But after having worked in C# for a few years now (loving the language) and seeing all the open source moves they're making, it seems like a really exciting place to work these days.

And I'm sure there's a ton of renewed energy there.

<comment><USER8> I'm kind of a MS fanboy, but please don't believe their lies: \- VS is still not free; the community edition can only be legally used by very small companies with slim revenue \- the Xamarin acquisition will turn out to be a slap in the face of developers who want to cross target Android and WP \- the desaster of the Metro App API that has been replaced by UWP after being hailed as the future of application development for Windows (for a time, you could develop Windows 8.1 Metro Apps only on Windows 8.1 machine, not a Windows 8 machine)

Anybody doing any non-desktop application development on Windows is shouldering the full risk of obsolescence within 2 year.

I would really, really like a cooperation between Google and Microsoft in the area of the utterly braindead 90ies API of Android development by switching to XAML + C# ... ah, a man can dream!

<comment><USER9> > but please don't believe their lies

That's a somewhat harsh accusation, where are they lying? Their web page clearly explains the usage scenarios and who can use it for "free" [0] (scroll down to "Usage").

[0]: [https://www.visualstudio.com/en-us/products/visual-studio- co...](https://www.visualstudio.com/en-us/products/visual-studio-community- vs.aspx)

</comment></comment></comment><comment><USER5> Maintainer of the extension here. Happy to answer any questions about VS Code or the Go support specifically.

<comment><USER10> Hi there!

I'm giving the Go plugin (latest) for VS Code (latest) a try but I'm not being able to rename code occurrences.

"Cannot rename due to errors: Error: Command failed /foo/go/bin/gorename -offset /Users/foo/go/src/github.com/foo/hello/hello.go:#79 -to helloNurse"

"rename: -offset \"/Users/foo/go/src/github.com/foo/hello/hello.go:#79\": no identifier at this position"

Do I have to do anything specific for it to work or it should just work?

Found a related issue ([https://github.com/Microsoft/vscode- go/issues/165](https://github.com/Microsoft/vscode-go/issues/165)) which led me to ([https://github.com/Microsoft/vscode/issues/1580](https://github.com/Microsoft/vscode/issues/1580)) which is already merged, but I'm still not able to rename symbols.

Code: (tried to rename helloWorld to helloNurse)

'''

package main

import (

        "fmt"

)

func main() {

        helloWorld()

}

func helloWorld() {

        fmt.Printf("hello, world\n")

}

'''

<comment><USER10> Just in case anyone else got stuck in same matter, I got a reply here [https://github.com/Microsoft/vscode- go/issues/165#issuecomme...](https://github.com/Microsoft/vscode- go/issues/165#issuecomment-193548533).

</comment></comment></comment><comment><USER11> I like VS Code a lot. It is cross platform and not too heavy. It has a lot of the modern features and look/feel. Don't have to load 50 million plugins to get something reasonable working. I've pretty much stopped using vim/emacs/notepad++ and numerous other editors though occasionally I use vim because I'm on a ssh connection. To me it seems the right balance between complexity and simplicity.

<comment><USER12> What is it, though? "Build and debug modern web and cloud applications." Is it like Atom (built on top of a browser)?

<comment><USER11> Very similar to Atom. Based on the same framework I think. You really can't tell it is running on a browser. It is more tuned for javascript and other web technologies but with the right plugin, it works fine for Go, Python, C, etc.

<comment><USER13> It's based on Electron, which hosts Chrome in a desktop app. But the actual editor code is different.

</comment></comment></comment></comment><comment><USER14> I have been working for sometime with Visual Studio Code and with this Go extension. I used to use Sublime 3 for Go development, but with this extension I have noticed that I use more often vscode than sublime for Go development.

It is also a big plus that vscode works very well with TypeScript and you can work seamlessly with TypeScript front and Go backend code.

One nice thing is that you can navigate e.g. function calls easily, which places call a function or directly find correct function in question like foo.New() by pressing F12 or shift+F12. When using Sublime to navigate to foo.New() would probably reveal quite many functions that are in your workspace path.

Go extension also imports automatically packages that you use in your code. Renaming types or functions also works nicely if your code compiles.

There are certainly things to be improved like not being able to conveniently use directories outside your vscode project e.g. common packages across different projects. But over all developer experience is really nice.

<comment><USER15> Note that YouCompleteMe supports Jump To Definition for Go. (YCM has a sublime plugin, among other editors)

</comment></comment><comment><USER16> Even if you don't like MS or distrust them, seriously...

VS Code is a very good spiritual successor to TextMate. It has better performance characteristics for me than Atom, and I find extending it much less intimidating than Atom. I'm still more comfortable with Emacs keys, but I found it easy to add the emacs keys I miss.

Its license is such that even if MS abandons it I suspect the community will keep it going. So give it a try.

</comment><comment><USER17> A bit off topic, but usually I tend to avoid browser based UIs for desktop applications, but the quality of current Rust support in Visual Studio Code made me open an exception just to use it.

<comment><USER15> Huh, maybe I should try it. I'm a Sublime+Vim person, and I'm pretty comfortable with my setup (and have found browser based UIs to be too slow for usage as an editor so I avoid them).

</comment></comment><comment><USER18> I really love VSCODE. Like _really_ love it.

In all fairness I am aware that I can also a _bit_ of a Microsoft 'fanboy' at times... so I held off on trumpeting around the office how truly great I think it is.

Of course if it came up in passing or anything like "should I open that in sublime?" came up, I'd make a sweeping grandiose statement like "anything but VSCODE is for chumps" (and we'd all laugh then move on about our day)

Anyways, a developer from another team recently saw over my shoulder and said "oh yeah, I'm really liking VSCODE... I've pretty much switched to it full time now" and _that_ was the moment I thought maybe it's not me just being a fanboy... this particular developer was pretty much known as our resident "sublime expert" so much so that he'd given multiple lunchtime presentations and talks around the office on subjects like "how to turn it up to 11 with your sublime text editing" and "snippets for sublime - making you a bajillion times more productive"

Anyways, I know how we used to have the religious holy wars about VI/M vs. EMACS vs. whatever, so people really tend to fall in love with "their" text editor and are not really quick to switch _BUT_ VSCODE has really got something special going on.

</comment><comment><USER19> I've never programmed in Go before. Coming from a C# background. Can someone tell me, how does Go feel? Is is pleasant to work in, or is it tricky like C.

<comment><USER16> Hi. I know C# in amateur fashion and Go professionally. I think a lot of people here will give you a very positive review of Go. Since they've got that covered, let me tell you what you're giving up from C# or F# and why I won't use Go. Maybe you can form a balanced conclusion from the aggregates, because I find Go to be very polarizing.

 _Concurrency_

Async: Go uses channels for all concurrency. Period. This mechanism, is sort of like half of the Erlang Actor philosophy, but even more lightweight. Channels and goroutines are constantly coming into and out of existence and you feel no real shame doing it. Even simple tasks often need them becuase Go's I/O libraries tend to be async-first.

Compared to C# and F#'s async, I think you will find this to be very different, but not particularly better in terms of performance. F# offers a very similar abstration with very similar performance characteristics and C# async methods are using a very similar mechanism under the covers to provide closure over computation chains in what amounts to a kind of effectful state monad. Don't sell your home team short on this front; MS's work there is cutting edge.

 _Error Handling_

In daily programming, Go's weakest story is error handling. While many people rightly cricisize try-catch error handling as a primitive and error prone mechanism, the Go solution is to say, "We all hate C but actually C erorr handling was fine so long as you have multiple return values at the syntactic level." So you often return a success value (which is nullable) and an error value (which is nullable) and then ask the caller to check on the null.

This is basically error code checking. People will say it isn't, but really it is. It really is. And unlike some other langauges Go provides no facilities for "chaining" these operations. So you end up writing if err != nil { ... } over and over.

In the case of chained I/O operations, this is really tiresome. It also often leads to code repeating or some somewhat convoluted dispatch logic.

Go Error values also suffer from Go's other issue, it doesn't have an extensible type system. Instead it has "interfaces". In practice, what this means is that it's very difficult to expose new error types or give your clients good ways to dispatch on them. While this means error handling code is lightweight, it also often means it has to do silly things like regex and error message string to find out what a specific failure was.

Some people value that approach. If you're writing an executable it's actually good, becuase it's probably better to fail fast in a recognizable way. But if you're writing a library and offering OTHER people that facility you can't support them well (and you will not be well supported by Go libraries).

 _Build Tooling_

Go's general toolchain is solid and its compiler is wicked fast. But its build story is still really, really bad. Go originally had this mountain of filesystem around every project that was tricky and error prone to share around projects.

With recent releases, they've moved to something that resembles Ruby On Rails's "vendor" approach, where a sub directory contains a whole checkout of each dependency's code. This is actually a pretty major improvement (in part becuase it works better with Github, which is Go's primary distribution mechanism). But even with this change, managing a codebase over time is error prone. Unlike Maven and Nuget, there is no enforced concept of version releases (nor discipline around snapshotting) in Github. So if the maintainer of the library has poor discipline (or if there is code poorly tagged during a maintainer change), it can be difficult to get the exact version of a library you want with the exact bugfixes you need.

Google's response to this is, "We don't have this problem because everyone at Google always keeps /master clean and we basically never make breaking API changes." But if you talk to them internally, the reality is more what you'd expect. Sometimes a lot of time is lost fixing that.

 _Everything else I wanted to say (aka "Conclusions")_

On balance, Go is a good environment for making executables. But a lot of why people like it stems from negative experiences they've had with scripting languages and their poor packaging story, Java and its problems keeping up with other managed language runtimes (and oh god its package process is just silly and antiquated).

You've already got cutting edge concurrency, static builds, a lightweight crossplatform runtime with CoreCLR, and pretty fast cross-compilation. For you, what you might find refreshing is how very clean and unified the Go langauge is. It is many things, but one thing it excels at appealing to is the pythonic there-is-one-way-get-in-line crowd. It is small, purpose-built, and singularly uncomplicated. C# has a "history" and "legacy feature support." Things like delegates that have fallen out of fashion now but are still lurking in the codebase or backing other more modern features.

If you want to try the concurrency model but don't know if you wanna commit to a whole new runtime, do try F# if you haven't yet. You can get great performance and the channel based concurrency out of it, and I think most people would agree its error handling is light years ahead of what Go offers.

If you'd like to try a totally new language with really cool concurrency semantics on a purpose-built runtime, can I recommend Nim-lang.org? Nim is _amazing_. It's got one of the most ambitiously cool ideas I've seen for micro-optimized concurrency code since reading Marlow's paper on Haxl for facebook.

<comment><USER20> > Go uses channels for all concurrency.

Go uses goroutines for concurrency, not channels. Goroutines are like threads, but they are managed by the Go runtime instead of the OS, and they use less system resources (a new goroutine uses just a few kilobytes, and its stack is resized on demand if necessary).

Go uses channels as a synchronisation mechanism. But other synchronisation mechanisms can be used (i.e. mutexes or atomic operations).

> Even simple tasks often need them because Go's I/O libraries tend to be > async-first.

That's quite the contrary. Most libraries are synchronous. You don't need callbacks (like in Node.js) or async/await (like in Python 3). This is made possible by goroutines and that's a big advantage of Go.

I very much like the async/await mechanism offered by C# or Python because it makes side-effects explicit. But its drawback is its "virality": if you introduce an async operation in a function, you have to "propagate" the change by converting all callers to async/await.

About the error handling, I'm still on the fence. Your comment summarizes very well the drawbacks of Go on this topic. But what we gain in terms of simplicity and making error handling very explicit is probably worth it. I think that error handling is still a subject of tension in every language and the problem is not fully solved (even in Rust, Haskell or Erlang). Time will tell.

> But its build story is still really, really bad.

I think you meant "packaging story" instead of "build story". It's true that at this moment, the Go project has not rallied around a single and universal packaging tool (like npm in Node.js). But in practice, if you vendor your dependencies, I think it's easy to manage a large codebase without errors.

> do try F# if you haven't yet. [...] its error handling is light years ahead > of what Go offers

I'd be curious to read a short example.

> Marlow's paper on Haxl for facebook

I agree about this paper.

<comment><USER21> > I very much like the async/await mechanism offered by C# or Python because > it makes side-effects explicit.

It's also potentially faster and more efficient than goroutines, because it packs the state to be shared on context switches into what is typically a very tight structure instead of saving the entire stack.

> I think that error handling is still a subject of tension in every language > and the problem is not fully solved (even in Rust, Haskell or Erlang). Time > will tell.

Can you elaborate as to what the problems you see with error handling in those languages are?

<comment><USER20> Rust error handling can be concise thanks to the try! macro, but macros bring their own problems (like making more difficult to write refactoring and static analysis tools).

Haskell error handling can be concise thanks to monads, but they need higher kinded types which bring their own share of complexity.

The conversation on the "RFC: Stabilize catch_panic", found on Rust's issue tracker, illustrate some unsettled questions I had in mind ([https://github.com/rust-lang/rfcs/pull/1236](https://github.com/rust- lang/rfcs/pull/1236)).

For example, kentonv wrote:

 _All code can fail, because all code can have bugs. Obviously, we don 't want every single function everywhere to return Result<T, E> as a way to signal arbitrary "I had a bug" failures. This is what panic is for._

graydon wrote:

 _Currently you 've adopted a somewhat-clunky error-type with manual (macro- assisted) propagation. Some rust code uses that correctly; but much I see in the wild simply calls unwrap() and accepts that a failure there is fatal._

ArtemGr wrote:

 _The only way to maintain both the safety and the no-panic invariants is to remove the panics from the language whatsoever. Explicit errors on bounds check. No assertions (you should make the assertion errors a part of the function interface instead, e.g. Result). Out of memory errors returned explicitly from every heap and stack allocation._

 _If you 'd like to keep the assertions, the smooth allocations and other goodies then you either need a way to catch the panics or end up making programs that are less reliable than C. No modern language crashes the entire program on an out-of-memory or an integer overflow, but Rust will._

 _The libraries we have, they do panic, it 's a matter of fact. Withing the practical constraints and without some way of catching panics you can't make a reliable program that uses external crates freely._

BurntSushi wrote:

 _If something like catch_panic is not stabilized, what alternative would you propose? (Option <T> and Result<T, E> are insufficient.)_

On the same topic, there is this post about introducing a `?` operator or a `do` notation (inspired by Haskell) to streamline error handling:

[http://m4rw3r.github.io/rust-questionmark- operator/](http://m4rw3r.github.io/rust-questionmark-operator/)

And there is RFC 243, about "First-class error handling with `?` and `catch`":

[https://github.com/rust-lang/rfcs/pull/243](https://github.com/rust- lang/rfcs/pull/243)

But I'm sure you're quite aware of these discussions :-)

My general feeling is that, whatever programming language you consider (Python, JavaScript/Node, Go, Rust, Haskell, Erlang, etc.), the right way to handle errors is still an open question.

<comment><USER21> > Rust error handling can be concise thanks to the try! macro, but macros > bring their own problems (like making more difficult to write refactoring > and static analysis tools).

No, it's not more difficult to write static analysis tools. You use libsyntax as a library. Refactoring tools, maybe, but it's a lot better than refactoring with code generation :)

> For example, kentonv wrote:

How does that describe an unsolved problem? It illustrates that Rust's bifurcation of errors into Result and panics works.

> graydon wrote:

I think it's a relatively minor issue that would be solved with "?" or something like what Swift does. Switching to Go's system would make it worse; Graydon's criticism applies even more so to Go than to Rust.

> ArtemGr wrote:

Catching panics is important, yes. No argument there. It doesn't change the overall structure of Rust's error handling story, though.

<comment><USER20> > No, it's not more difficult to write static analysis tools.

I agree it's solvable, but I'd argue it's a bit more difficult to write static analysis tools when macros are implied. But maybe I'm missing something.

Here is an example:

 _The subsystem types in the sdl2 crate starting in 0.8.0 are generated by a macro, so racer has issues evaluating the type of video(). A workaround is to explicitly declare the type of renderer._ (source: [https://github.com/phildawes/racer/issues/337](https://github.com/phildawes/racer/issues/337))

But my real concern is how to write refactoring tools when macros are implied. It's seems a lot harder than writing static analysis tools, because the refactoring tool wants to examine the source code with macros _expanded_ , but has to modify the source code with macros _unexpanded_. In other words, the tool has to map from source with expanded macros, back to source with unexpanded macros. How do you solve that?

As a sidenote, I agree that refactoring generated code doesn't sound fun too :-)

> How does that describe an unsolved problem? It illustrates that Rust's > bifurcation of errors into Result and panics works.

I quoted kentonv here because it shows that Rust and Go have converged towards _structurally_ similar solutions to error handling, by using two complementary mechanisms: explicit error checking one one hand (using Result<T,E> in Rust and using multiple return values in Go) and panic/recover on the other hand.

The big difference is that Rust have sum types (instead of using multiple return values in Go) and macros (try! instead of repeating `if err != nil { return err }` in Go).

> Catching panics is important, yes. No argument there. It doesn't change the > overall structure of Rust's error handling story, though.

You're right.

<comment><USER15> > a bit more difficult to write static analysis tools when macros are implied. > But maybe I'm missing something.

Most Rust static analysis tools hook into the compiler and get this for free.

Racer has that problem because racer implements a rudimentary minicompiler that's much faster than Rust. When you want autocompletion, it needs to be fast. Running a full type check is a non-starter here. So you implement your own "type searcher" which is able to perform some level of inference and search for items. Being deliberately incomplete, it doesn't handle some cases; looks like macros are one of them. Since racer uses syntex handling macros would not be much harder (just run the macro visitor first; three lines of code!), but I assume it doesn't for performance reasons or something.

(disclaimer: I only have a rough idea of racer's architecture; ICBW)

> But my real concern is how to write refactoring tools when macros are > implied

This is a problem with refactoring whether or not you're using tools. And like you mention there's exactly the same problem with generated code. If anything, Rust macros being hygenic are nicer here, since you can trace back where the generated code comes from and _attempt_ to refactor the source.

And macros like try do not affect refactoring tools at all; being self- contained. Its user-defined macros that mess things up.

<comment><USER20> > Most Rust static analysis tools hook into the compiler and get this for > free. Racer has that problem because racer implements a rudimentary > minicompiler that's much faster than Rust.

I didn't know that. Understood. Thank you for the explanation.

> And macros like try do not affect refactoring tools at all; being self- > contained. Its user-defined macros that mess things up.

What do you mean by "self-contained"? How is it different from user-defined macros?

<comment><USER15> > What do you mean by "self-contained"?

It doesn't introduce any new identifiers or anything. As far as refactoring is concerned, it's just another block with nothing interesting inside it. This is sort of highlighted by the fact that we can and do plan to add syntax sugar for try!() -- if it was a language feature it wouldn't cause refactoring issues, so why is that the case here?

User defined macros (there may be some exported library macros that do this too, but try is not one of them) may define functions or implement traits or something, which might need to be modified by your refactor, which might need fiddly modification of the macro internals.

(Also, note that due to Rust's macro hygiene, all variables defined within a macro are inaccessible in the call region, unless the identifier was passed in at the call region. This helps too)

<comment><USER20> Thanks for the very clear answer.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER22> VSCode's API is great for extensions. Markdown Viewer is incredibly useful in VSCode. I also really like the way VSCode does its Git integration.

I've gotta say though, I'm still getting used to the non-tab layout...

</comment><comment><USER23> I hate to be that guy, but I guess I will, because aesthetics are important to me when choosing a tool i'll be using for several hours a day.

I _love_ how Atom looks. Alongside the nicer extension system, the aesthetics of the default theme are what lured me away from Sublime Text.

I sadly can't say the same for Visual Studio Code, which I hear so many great things about, but can't bring myself to use for more than a few minutes. From what i've been able to tell, the only visual customisation available is choosing the syntax colour theme.

<comment><USER24> There is support for full color schemes for the entire UI not just the text colors. There is also support for loading TextMate and Sublime themes.

[https://code.visualstudio.com/docs/customization/themes](https://code.visualstudio.com/docs/customization/themes)

I personally use a nice dark theme, similar to the one shown in that screenshot. There are also a large range of extensions and VS Code is _really_ fast.

<comment><USER23> What about changing the appearance of the fairly unpleasant left-most bar (with the code/search/version/debugging switcher), the super in-your-face status bar, etc?

</comment></comment></comment><comment><USER25> I had a good experience overall with this plugin (once it was set up, which wasn't exactly trivial), but it keeps auto-completing in comments so when I hit [return] it inserts some random word rather than going to the next line. Every time I want to go to the next line I have to press [esc] then [return].

</comment><comment><USER26> This is great. I love how definitions are display on hovering over any variable or function, the go to definition feature and the split window feature, which makes it sweet and easy to keep reference code bits while coding ... I think with the definition display on hover, it even beats vim.

</comment><comment><USER27> Not related to Go plugin, but in VsCode I hate the tabs in the left panel, feels very different and I could not even adjust it after 6 months.

However, the Go plugin is really nice and works perfectly, even, the debugger works /most of the time/ . It is fast and handy. Recommended.

<comment><USER28> As a long time Sublime user, having side-bar tabs in editors like Brackets or VS Code is definitely quite annoying. I wish they offered the option to place tabs on the top as an alternative.

<comment><USER29> I agree. Please vote for this:

[https://visualstudio.uservoice.com/forums/293070-visual- stud...](https://visualstudio.uservoice.com/forums/293070-visual-studio- code/suggestions/7752519-implement-tabs)

This is the sole blocker for me. With 20 years of muscle memory, tabs and tab hot-keys (i.e. command+1, command+2, etc.) are simply not optional.

</comment></comment></comment><comment><USER30> Years ago, when MS was thick in the anti-trust contentions, pops and I agreed that were they to break up, it would be great to have one segment be "tools." MS has long had and offered some great programming support -- compilers, development environments, etc.

However, with monolithic MS, those too often seem tied to and influenced by the larger corporation's goals. You know, world dominance, crushing the opposition, and all that.

I hope that this new push by MS is genuine and does not morph into another embrace, extend, and -- purposefully or simply inevitably -- extinguish effort.

I'm not in the thick of it. This is probably an outdated and way far outside observation. Nonetheless, MS support still leaves me looking for the strings attached.

</comment><comment><USER31> I find it funny that README refer syntax highlighting as "colorization".

<comment><USER32> Looks like it's an old naming convention of theirs:

[https://msdn.microsoft.com/en- us/library/ms173075(v=vs.80).a...](https://msdn.microsoft.com/en- us/library/ms173075\(v=vs.80\).aspx)

At least as far back as Visual Studio 2005.

</comment></comment><comment><USER33> I've used it on a macbook for a short time for node/javascript development, but found it buggy and had to switch back to sublime. The _undo_ (cmd+z) would occasionally get in a weird state where the undo would happen partially (not all lines or columns?) and the whole history would be screwed, or outright stop doing anything. Few times i had to close the file to get last saved version. Perhaps it's something I was doing wrong but it was enough not to use the product, which was great otherwise! Will try again when I hear of new versions coming out..

<comment><USER34> That was fixed for me with 0.10.0 on Yosemite. Can't find it from my phone, but there was an issue on GitHub I was tracking.

</comment></comment><comment><USER35> I wonder why this was featured today, I have been using vscode for Go since a few months now. It is totally amazing, especially the ctrl+P option! It isn't highlighted but it is a little gem.

</comment><comment><USER36> Delve integration is better than I anticipated. Breakpoints, step in, step over work as expected. Step out not functional but that's a given as delve doesn't do it either. Call stack is implemented. Variables doesn't seem to automatically work, but adding a var to Watch is ok.

With the debug tools, linter, and navigate in/out of definitions, this looks like a pretty efficient workflow.

Caveats: I can't compare to Atom, or anything other than vanilla Vim (haven't configured either of them with any of the go integrations).

<comment><USER36> Edit: after a restart I can now see Locals in the Variables window! Seems to be related to breakpoint location - if I break at main.main entry I can see variables.

</comment></comment><comment><USER37> Wait, does the debugger work now? The last time I picked up Visual Studio code with a C# core project I couldn't' get the debugger to work with dnx web

<comment><USER38> The debugger for C# works on Windows only (for now, since the Linux/OSX debuggers will need to use gdb or lldb). Debuggers for other languages are supported by extensions. For instance, there's a javascript and Typescript debugger built in.

</comment></comment><comment><USER39> I code a lot in Go. I use Sublime Text mostly and this feels like an upgrade. Integration with Git, better plugins/support I am loving it.

</comment><comment><USER40> Seems like Acme got a serious competition... :)

</comment><comment><USER41> Visual Studio Code is my favorite editor. I've mentioned it before but I wanted to add that I'm working on a PHP project and by using XDebug on a local server and VSCode as an editor/debugger I have a really nice lightweight debugging solution. The PHP extension to VSCode is solid.

<comment><USER9> Is that all fully/smoothly integrated into VSCode? Along the lines of setting a breakpoint in PHP Storm and waiting for it to light up when it's hit? If so, that's sweet.

<comment><USER41> Yes, yes it is sweet. Set a breakpoint in VSCode editor, run, inspect some variables in VSCode editor debug panel, stop debugging, fix code, run with debugging again -- everything you would expect from smooth debugging experience.

<comment><USER9> Thanks, I'll revisit VSCode again.

</comment></comment></comment></comment><comment><USER42> What does Visual Studio Go offer that I don't get from vim-go? Does it have gofmt hooks on file save?

</comment><comment><USER43> Debug support, syntax highlighter, looks very nice. Having trouble getting go build on save working.

</comment><comment><USER44> WTF!? I already posted this exact link 4 days ago and it got almost no attention :D Sometimes HN is weird. [https://news.ycombinator.com/item?id=11193028](https://news.ycombinator.com/item?id=11193028)

<comment><USER45> try again at the most crowded time of HN. it may get better exposure.

</comment></comment><comment><USER46> I've been a .net dev for years now and it's such a joy to see stuff like this come out of MS. I'm a heavy VS user and haven't had the need to switch to VSC yet. I might check it out for angular/js apps.

</comment><comment><USER47> VS Code seems a bit of overkill to use as an editor for golang editing. As someone already mentioned in the comments, my mind is also corrupted with Vim awesomeness and vim with vim-go works shockingly every-time.

</comment><comment><USER48> I've found myself always coming back to VSCode for my (stupid simple, nothing crazy like Docker or anything) Go projects. They've really done a fine job with the editor and extensions. Bravo Microsoft!

</comment><comment><USER49> If you write Go and haven't tried LiteIDE I'd recommend it strongly.

<comment><USER50> Only if you want to suffer from their old and battered gui. It's not the nineties anymore, how hard can it be to use a decent gui lib?

<comment><USER49> I happen to like the UI, on OS X at least.

</comment></comment></comment><comment><USER51> Anyone used Atom with the Go plugin, can you compare?

</comment><comment><USER52> If it has source-navigator capability(generate call-graphs etc like what source nagivator does, or similar to ctags) that will be awesome!

</comment><comment><USER53> What's the difference between lukehoban's Go extension?

<comment><USER11> This is the same thing since he works for Microsoft.

</comment></comment><comment><USER54> Would love have support like this for Python.

</comment><comment><USER55> I use it daily, this one is very good.

</comment><comment><USER56> JFC, that's how VS looks nowadays?

<comment><USER57> VSCode. Totally different product. It's more of a lightweight code editor and less of an IDE.

<comment><USER58> interesting to see the language support for VSC: [https://code.visualstudio.com/docs/languages/overview](https://code.visualstudio.com/docs/languages/overview)

</comment></comment></comment><comment><USER59> I like VsCode especially for js css and html5 stuff. The problem I have with it is that it starts to lag when my codebase gets larger eg above 600 lines. Thats the reason why I switch to Atom. I think Atom is the best free text editor.

<comment><USER60> I'm having almost 34k lines of code for some html file, over 6mb (yes, there is a specific purpose for such a large html file for particular processing) and it works flawlessly in VS Code. I remember searching for text editor that would handle the file nicely and allow working with it. Opening that file in the first VS Code release was a pleasant surprise that performance was good.

If I remember correctly I tried Atom before VSCode as I thought: well, that's a nice looking editor. But oh, it was just unusable for such a large file.

<comment><USER61> How is a 6 MB file, with only 34,000 lines, considered "large" these days?

Smartphones from a couple of years ago already had multi-core, multi-GHz processors, and 2 GB or more of RAM. A 6 MB file would fit into memory well over a hundred times, even assuming lots of overhead.

Any moderately reasonable text editor should be able to handle a file of that size with total ease, at least for the basic operations.

<comment><USER60> I agree that it is not and was surprised that I had to search for a text editor that would handle that file nicely, provide syntax highlighting and allow me to do some regex search/replace.</comment></comment></comment></comment>


Ask HN: Assessing supply and demand for C2B2C platforms? - <AUTHOR> How to gain traction and find the first users for a 2 sided platform, where I need users to provide content, and other users that are interested in that content? Its a kind of a chicken-egg problem. Whats your experience? <comment><USER2> Produce the content yourself. First it solves the "where do I get content problem?" Second it allows you to tailor the content to the consuming users. Third if you have a platform that allows users to post content you will need to moderate the content so creating good content yourself reduces the amount that needs to be moderated and insures that the content is not _entirely_ bot spam.

<comment><AUTHOR> Good advice. I've thought of this, however it would take a lot of time to write quality material. It seems this is one of the "do things that dont scale" advice.

<comment><USER2> If it takes a lot of time to write quality material, that will probably not be the default for users unless it is a community norm. Otherwise it will default toward text messages and emoji.

<comment><AUTHOR> Okay thanks for the advice!</comment></comment></comment></comment>


Competitor startup Clinkle hires away PayPal vice president - <AUTHOR> http://news.cnet.com/8301-1035_3-57617864-94/paypal-executive-leaves-for-mobile-payments-startup-clinkle/

<comment><AUTHOR> PayPal might suffer death from 1000 cuts.

Which is fine by me, any way that works.</comment>


What Is SS7 and Was It Used to Spy on Trump's Cell Phone? - <AUTHOR> https://motherboard.vice.com/en_us/article/598xyb/what-is-ss7-and-is-china-using-it-to-spy-on-trumps-cell-phone <comment><USER2> these old protocols :-) fun stuff. same goes for some ISP stuff. it's so hard to 'fix' it because it basically means replacing most of the hardware out in the field. which is not within anyones budget..</comment>


Kickstarter is now accepting Canadian projects - <AUTHOR> http://www.kickstarter.com/canada <comment><USER2> Does anyone know the back story on why Kickstarter is so restrictive?

Kickstarter can't be used to raise money for causes, whether it's the Red Cross or a scholarship, or for "fund my life" projects, like tuition or bills.

Indiegogo has no problem with it though.

Kickstarter also requires each project team to sign up for their own Amazon payments account. Why wouldn't Kickstarter just collect the money and then wire it / cut a check to the funding recipient?

Also, why does Indiegogo charge upfront while Kickstarter waits until the campaign is successful?

The whole crowdfunding space seems to operate pretty illogically. Are there legal complexities that aren't apparent to an outsider that force their hand?

<comment><USER3> We're not "so restrictive." Our guidelines ask projects to be on-topic exactly like Hacker News' guidelines for comments do. We're a funding platform for creative projects. We built Kickstarter because we believed that there should be a space for creative ideas to be shared and find support. Every single guideline is there to support and strengthen that mission.

<comment><USER4> Hi YanceyKSR, a question for you:

Kickstarter's FAQ clearly states that you need to be a US, UK (or now Canadian) citizen/business and you should prove it (SSN/government-issued IDs, address etc..) in order to launch a project.

So, can I ask you how this project has been published (and funded) [http://www.kickstarter.com/projects/1054394377/idae-the- book...](http://www.kickstarter.com/projects/1054394377/idae-the-booklet-for- extreme-situations) given the fact that the company is Italian, the team members seems to be all Italian judging from their names, the location indicated was "Milan, Italy" and the product was going to be made in / shipped from Italy?

Maybe it's just "ok" to have somebody in the US/UK/CAN that acts as a middleman for the project?

N.B. the above project is just an example, I'm Italian and I've searched from something that seemed to be founded from Italy

<comment><USER5> > Kickstarter's FAQ clearly states that you need to be a US, UK (or now > Canadian) citizen

I thought the citizen part sounded strange so I did a quick check. According to [0] you only need to be a permanent resident.

[0] [http://www.kickstarter.com/help/guidelines](http://www.kickstarter.com/help/guidelines)

<comment><USER4> Sorry for my poor/wrong usage of the word "citizen", I meant resident with SSN, US address, bank account, ID card, US credit/debit card etc.. as stated in the FAQ [1]. So definitely you shouldn't be able to launch a project by residing in another country and just "faking" a US address using something like those shipping forwarding services used to buy stuff in the USA

[1] [http://www.kickstarter.com/help/faq/creator+questions](http://www.kickstarter.com/help/faq/creator+questions)

</comment></comment></comment></comment></comment><comment><USER6> They've also announced their intent to launch in Australia: [http://www.kickstarter.com/australia](http://www.kickstarter.com/australia)

</comment><comment><USER7> Oh, that's awesome eh! I can't wait to put up my "Brew in a Canoe" project!

</comment><comment><USER8> Kickstarter is so restrictive is because they wanted to maximized profit & also result of their taste. Put restriction on hackers who really innovate and create real products? well good luck with that, I am with freedom.

<comment><USER9> Crowdfunding with no restrictions, rules or protections is just an anonymous PayPal account or a shoebox with a hole cut in the top.

Nobody is stopping you from doing that if your desire is absolute freedom in how you collect donations and what you do with them. The point of Kickstarter is to find a balance between allowing creators to do whatever they want and helping them end up successfully funded.

You sarcastically say good luck with that as if this isn't a proven method that leads to far more success, but it is. While it's always been possible to solicit donations for a project, it's really only been successful and widespread since the the existence of projects like Kickstarter that put pressure on the creator to actually deliver.

The pretty website and the name aren't what makes Kickstarter successful. The rules are. Nobody was waiting all this time with a project they wanted crowdfunded just hoping for someone to launch a website to make putting that up easier. They were waiting for a platform that users trust and are interested in. They wanted a chance to actually be funded if they chose to put themselves out there. If they thought they could get that "with freedom" they would have done so already.

So good luck finding people that want to throw money at your ideas with no rules, restrictions or protections in place. I think you'll find it's a pretty shallow pool. Keep in mind that absolute freedom from the perspective of a creator equals absolutely no accountability from the perspective of backers and crowdfunding requires both to be successful.</comment></comment>


Thinking about Thinking about Seymour: Livestream [video] - <AUTHOR> https://www.media.mit.edu/events/papert/ <comment><USER2> If you haven't been exposed to Papert - check out some of his old videos from the 70s and 80s.

[https://www.youtube.com/watch?v=bOf4EMN6-XA](https://www.youtube.com/watch?v=bOf4EMN6-XA) \- One really powerful idea he had was ensuring that we stay "somatic" with our computer instruction - playing with abstract concepts in a physical way. Watch the video - he explains it better than I can.

[https://www.youtube.com/watch?v=xMzojQFyMo0](https://www.youtube.com/watch?v=xMzojQFyMo0) \- One from the 1970s - perhaps I'm wrong, but it seems like some of these computers they're using don't even have monitors, just control the turtle.

[https://www.youtube.com/watch?v=4V-0KfBdWao](https://www.youtube.com/watch?v=4V-0KfBdWao) \- I also like this discussion - it reminds me that school is a prison for children, unless I work to elevate it beyond that.

I just kind of watch these periodically to remind me of the wonder that computing was back then.

<comment><USER3> Papert on idea aversion and the difference between Mathematics and a school's maths curriculum [https://vimeo.com/29322262](https://vimeo.com/29322262)

</comment></comment><comment><USER3> > In my vision, space-age objects, in the form of small computers, will cross > these cultural barriers to enter the private worlds of children everywhere. > They will do so not as mere physical objects. This book is about how > computers can be carriers of powerful ideas and of the seeds of cultural > change, how they can help people form new relationships with knowledge that > cut across the traditional lines separating humanities from sciences and > knowledge of the self from both of these. It is about using computers to > challenge current beliefs about who can understand what and at what age. It > is about using computers to question standard assumptions in developmental > psychology and in the psychology of aptitudes and attitudes. It is about > whether personal computers and the cultures in which they are used will > continue to be the creatures of "engineers" alone or whether we can > construct intellectual environments in which people who today think of > themselves as "humanists" will feel part of, not alienated from, the process > of constructing computational cultures.

\-- Mindstorms

</comment><comment><USER4> > empower children to experiment, explore, and express themselves.

A lesson for boys & girls of ALL ages. Good man, Seymour!</comment>


Ask HN: Italian and 38. Am I a bad prospect employee? - <AUTHOR>

I was wondering how many Italians landed jobs via HN, and how many 35+ (not only italians).
I managed to get some technical written tests, and 1 pre-interview via Skype, but as soon as I mention being Italian and 38 (15yrs work experience) everything starts going wrong.
The opportunities I look for are as a frontend engineer and/or UX engineer (as in research & low-fi mockups, not as in pixel-perfect photoshop comps).
Is this something someone experienced, or am I just not good enough? <comment><USER2> Your linkedin page says you're based in Italy. Are you applying to jobs in the US? Could it simply be your visa status (or fear that the visa process takes too long)?

<comment><AUTHOR> Maybe! But it happens also when I apply for remote jobs :)</comment></comment>


I'm not an enterpreneur, I'm a dirty hack - <AUTHOR> http://maxkle.in/im-not-an-enterpreneur-im-a-dirty-hack/ <comment><USER2> The guy is celebrating mediocrity and claims he is proud of doing shoddy work.

I guess it's a sign the tech world has reached the mainstream though, the kids who used to make fun of or ostracize the nerdy ones with good grades are now posting "insightful" blog posts about how awesome it is to be average.

Yay?

</comment><comment><USER3> At our company, we call this the "cowboy way". Sometimes you shoot from the hip. We know the limits though. I'm frequently frustrated by architecture astronauts, but sometimes they're good to have around. The key is balancing the astronauts and the cowboys. Neither camp is 100% right.

</comment><comment><USER4> Wow, that's a terrific article. Even if I don't agree with 100% of it, I really like his no-BS delivery.

<comment><USER5> I liked it. It was much better than "Cats". I'm going to read it again and again.

</comment></comment><comment><USER6> I liked a lot of these.

<comment><USER7> Détente?</comment></comment>


Why Are so Many Babies Born around 8:00 A.M.? - <AUTHOR> https://blogs.scientificamerican.com/sa-visual/why-are-so-many-babies-born-around-8-00-a-m/?WT.mc_id=SA_TW_BIO_BLOG_INFO&sf90723294=1 <comment><USER2> TLDR; Because that's when c-sections are scheduled.

<comment><USER3> Well that saved me reading a pointless article.

</comment></comment><comment><USER4> As a male, the most common time for me to drop 6lbs in one sitting is 8am. Related?</comment>


JavaScript OTP One-Liner - <AUTHOR> https://gist.github.com/Zibri/90f5ac6d05c6c1011f5ce501c34891c9 <comment><AUTHOR> How about this? If you don't need gauth compatibility I think this is as good as that.</comment>