Writing parsers like it is 2017 - <AUTHOR> https://blog.acolyer.org/2017/08/15/writing-parsers-like-it-is-2017/ <comment><USER2> Some people have mentioned parser generators, but so far nobody has mentioned Menhir ([http://gallium.inria.fr/~fpottier/menhir/](http://gallium.inria.fr/~fpottier/menhir/)).

It's an LR(1) parser generator for OCaml and Coq with a lot of extremely interesting features, such as genuinely good debugging support for grammars and the ability of generating error messages by example.

What this means is that after you write down your grammar, Menhir will give you examples of all the possible syntax errors that could occur. You can then write error messages for each case and get a parser with built-in error reporting for syntax errors.

This works a lot better than you'd think and I really wonder why nobody else implements this feature. Or for that matter, why they're not advertising it on the webpage! If you want to know more, look in the manual, section 11.

<comment><USER3> There's a Rust parser generator called LALRPOP that is apparently inspired by Menhir.

[https://github.com/nikomatsakis/lalrpop](https://github.com/nikomatsakis/lalrpop) [http://smallcultfollowing.com/babysteps/blog/2016/03/02/nice...](http://smallcultfollowing.com/babysteps/blog/2016/03/02/nice- errors-in-lalrpop/)

I've never used Menhir so I can't compare how similar they are in practice, but I've enjoyed the times I played with LALRPOP much more than the many times I've battled various yacc derivatives.

</comment></comment><comment><USER4> Having written a parser generator myself ([https://github.com/YorickPeterse/ruby- ll](https://github.com/YorickPeterse/ruby-ll)), plenty of handwritten parsers, and having mess with parsing combinators I concluded I really don't like parsing combinators. Perhaps this was due to the APIs of the libraries I worked with (e.g. Nom in Rust), but it just lead to incredibly verbose and hard to work with code.

Since writing recursive descent parsers is not that hard (at least if your grammar is LL(1), see [https://github.com/YorickPeterse/inko/blob/a76a8c23f901c5b2a...](https://github.com/YorickPeterse/inko/blob/a76a8c23f901c5b2a40c410aa2df85261e650769/compiler/lib/inkoc/parser.rb) for an example) I would personally go with this approach whenever possible.

Parser generators definitely have their use cases (and allow you to write a parser much faster), but error reporting is often tricky to get right.

<comment><USER5> I also slightly dislike parser combinators. Mainly because usually you cannot easily debug them by placing a breakpoint.

In the best case scenario the specific parser combinator has good tracing support to enable debugging. However, imho this is still inferior to simple breakpoints and debugging "directly" in one's favorite IDE.

<comment><USER6> The only parser combinator library I used (smug, for common lisp) had little trouble with breakpoints; (any parse with significant backtracking was _annoying_ but breakpoints worked fine) is it common that one cannot use breakpoints for debugging in other parser-combinator libraries?

<comment><USER5> I'm not familiar with Smug, but I would guess that the combinator is implemented using LISP macros which are than expanded into "real" source code (lisp lists) which is evaluated __directly __and can halt on break points.

In programing languages which do not have true macros The combinator API normally creates a data structure representing the grammar which is than __interpreted __Which usually makes debugging harder and the parsing slower.

</comment></comment></comment></comment><comment><USER7> I tried to use nom for one of my projects, but I found that it had two major problems. First, the macro syntax was hard to use, hard to learn, and hard to debug. Sometimes you had to put an expression in parentheses, even if it seems that it should be unnecessary, so that the macros would be able to parse your code. I also found the macros hard to compose, which is ironic for a parser combinator library.

My other problem was with error handling. I wanted to have my own `Error` enum to represent errors in my program. Nom supports a custom error type, but I now had to write out type annotations in many places with the fish syntax (e.g. foo::<&[u8], Ast, Error>()) and they are quite long annotations. In addition, some of the macros would not work—or at least, I couldn't get them to work—with my custom error type, and I had to revert to using functions in a way that was absolutely not compositional.

In the end, since the format I was parsing was simple and regular (Erlang's External Term Format), I wrote a parser by hand and removed the dependency on nom. The result is as just as fast and produces meaningful error messages. It's actually less tedious, because I am using simple functions that have the syntax and semantics that I already know; maybe if I had a more complex format to parse I would sing a different tune, but for the moment I prefer to avoid using nom.

<comment><USER8> I've used nom to implement a Turtle parser. The result was fast (it runs the test suite in 50ms) and the code is pretty readable. Certainly much more readable then if I'd used a homegrown set of functions. I've documented the specification grammar rules next to the nom rules. They match up well.

Nom can be tricky to debug, but Rust can host tests in the same file as the code, so debugging by writing new tests is convenient.

The syntax takes some getting used to. The hardest part for me was learning to order the grammar alternatives correctly. The order matters for performance and correctness.

</comment></comment><comment><USER9> > Many low-level parsers 'in the wild' are written by hand, often because they > need to deal with binary formats, or in a quest for better performance.

I think the main reason for hand-rolled parsers, at least in my experience, has been error reporting.

Most parsing frameworks make it difficult for you to tell the user simple things like misspelled variables, something does exist, but it isn't in-scope when its being called, and basically helpful messages like that.

Error management is only briefly mentioned, and sort of glossed over in Nom's [0] paper. Mostly because Nom was designed for efficiency... But efficiency is not why GCC rolled their own parsers.

[0] [http://spw15.langsec.org/papers/couprie- nom.pdf](http://spw15.langsec.org/papers/couprie-nom.pdf)

<comment><USER10> >Most parsing frameworks make it difficult for you to tell the user simple things like misspelled variables, something does exist, but it isn't in-scope when its being called, and basically helpful messages like that.

I agree that generated parsers make error reporting difficult, but do not think these examples are relevent. If the problem is a misspelled or out of scope identifier, the parser should should still be able to parse the program, which would be syntactically valid.

<comment><USER11> > If the problem is a misspelled or out of scope identifier, the parser should > should still be able to parse the program

That's not necessarily true for all languages. For example, in C, "(e1)&e2" is parsed differently depending on how e1 is declared. If e1 is declared as

        typedef int* e1;

then the "&" in "(e1)&e2" is parsed as the address-of operator, but if e1 is declared as

        int e1;

then "(e1)&e2" is parsed as a bitwise AND.

<comment><USER12> This is a problem for a lot of languages, unfortunately, and it breaks the clean separation between syntax and semantics that we're hoping for when we write a formal grammar.

I've had some success in the past with using GLR or another algorithm that can handle ambiguity, and then choosing among the possible parse trees in another pass that takes semantic information into account. How applicable that is really depends on the language, though; if things are so ambiguous that you're getting an exponential growth in possible parse trees, you may not want to use this approach.

</comment></comment></comment></comment><comment><USER13> It's not _just_ about the language or tools you use. You can produce a memory- safe, beautifully structured parser and use whatever framework you like, but if it doesn't do _full_ recognition of your input before you do any _processing_ then you're likely boned.

Not only is there a high risk that you'll still be passing bad input through to your database, another program, or an unsafe library deep down in your application (YAML in Ruby anyone?), but you get what Meredith Patterson calls a "weird machine" that is programmable by an attacker.

There's a lot more of this at:

[http://langsec.org/](http://langsec.org/)

Stacks of papers, articles, videos, examples etc.

<comment><USER14> _> ... if it doesn't do full recognition of your input before you do any processing then you're likely boned._

There are languages where you need to process some of what you've done before a later part of the source can be dis-ambiguated. How does that sit with what you've said here?

<comment><USER15> The argument that langsec.org makes is that any such languages are missing security properties. In fact they regard most ad-hoc languages as insecure due to the lack of verification, which they believe to be the root cause of many security problems.

</comment></comment></comment><comment><USER5> The article mentioned using Parser Combinators as the sweet spot between Hand Written Parsers and Parser Generators.

Another possible sweet spot would using something I call a "Parsing DSL" which is a sort of a cross between a parser combinator and a parser generator.

TLDR: See the JavaScript Parsing DSL library (Chevrotain) I've authored: [https://github.com/SAP/chevrotain](https://github.com/SAP/chevrotain)

Details: A Parsing DSL means using API similar to hand building a parser but without a-lot of the cruft associated with hand building while enjoying higher level abstractions from the Parsing DSL library such as: 1\. automatic ambiguity detection. 2\. lookahead calculation. 3\. Grammar diagrams 4\. auto- complete. 5\. automatic error recovery 6\. and more...

Under V8 (Chrome/Node) this is much faster than any other library tested and even substantially faster than a naive hand built parser. [http://sap.github.io/chevrotain/performance/](http://sap.github.io/chevrotain/performance/)

(Benchmarked using a simple grammar [JSON])

<comment><USER16> This seems to share some ideas with ometa[1], but perhaps arriving at those ideas from another angle?

[1] [http://www.tinlizzie.org/ometa/](http://www.tinlizzie.org/ometa/)

[https://github.com/alexwarth/ometa-js](https://github.com/alexwarth/ometa-js)

See also ohm:

[https://github.com/harc/ohm](https://github.com/harc/ohm)

<comment><USER5> I'm less familiar with ometa.

Chevrotain shares two main ideas/concepts with Ohm.

1\. Separation of grammar and semantics, but in a less opinionated manner as it does not enforce the separation as Ohm does (it is still possible to embed actions directly in the grammar).

2\. Grammar Inheritance.

Although while those ideas are not common they are also not that rare (For example the same concepts exist in Antlr). I think there are three big conceptual differences.

1\. In Chevrotain Performance is considered as a major feature. Which results in it being two orders of magnitude faster (in the benchmark linked above)

2\. Chevrotain attempts to provides capabilities relevant for writing IDEs, for example automatic error recovery/tolerance and syntactic content assist.

3\. Internal vs External DSL -

From an implementation perspective there is a vast difference as Ohm is an external DSL while Chevrotain is an internal DSL. In practical(user) terms this means that you can place a breakpoint directly in a Chevrotain grammar, but you cannot do so in Ohm. Or that you will need a separate editor to edit an Ohm grammar while you can use any JavaScript editor to create a Chevrotain grammar.

It also means that Ohm could be ported to different target runtimes (Like Antlr actually is) while Chevrotain can only run in an ECMAScript engine.

</comment></comment></comment><comment><USER17> Parser combinators are awesome! I've played with them just a bit. They seem to match my intuition of how a parser's implementation ought to resemble an EBNF grammar.

Just for fun, using the Bennu library[0] I wrote a JSON parser[1]. (Not intended for production use of course; well-optimized JSON parsers exist and browsers kinda ship with them now. If you're looking for a Bennu example or are thinking of experimenting with extending JSON in wacky ways for fun, then it's neat to mess with.) With that specific library, I seemed to create some messy parts when shuffling values through the library's stream abstraction, but I got the hang of it and the parts I thought were messy at least were straight-forward and didn't have issues like hidden edge cases. Something cool is that parsers made with the library and its stream abstraction automatically work incrementally too.

[0] [http://bennu-js.com/](http://bennu-js.com/)

[1] [https://github.com/AgentME/bennu- json/blob/701d17bc4872469dc...](https://github.com/AgentME/bennu- json/blob/701d17bc4872469dcbe3dc736feeb66017105dec/src/index.js#L57), right on my favorite part.

</comment><comment><USER18> The pdf has been posted previously ([https://news.ycombinator.com/item?id=14655528](https://news.ycombinator.com/item?id=14655528)) and the discussion has some comments by the authors.

</comment><comment><USER19> Is there a tool out there that _generates_ grammar by analyzing source code? For example, I'd like to feed the linux kernel source code and get the C grammar as the output?

<comment><USER20> recurrent neural networks, kind of

<comment><USER21> That gives me a kind of funny idea: train a sequence-to-sequence LSTM network on code written in two (or more) programming languages that implement the same functionality. You'd need a big corpus, and the could would probably would have to be a little more complicated than "hello world, but I don't see why it wouldn't work, in principle.

<comment><USER22> Why would you want to mix two languages?

<comment><USER21> Ah, sorry, I meant two codes in two languages that implemented the same functionality. I was thinking of a NN version of say, python 2to3.

</comment></comment></comment></comment></comment><comment><USER23> For me writing parsers like it is 2017, means actually using parser generators like JetBrains MPS or ANTLR, instead of using bison and yacc as some kind of quality measure.

<comment><USER24> In what way is ANTLR better than bison?

<comment><USER25> ANTLR combines lexical analysis and parsing, flex+bison, into a single tool. To me, ANTLR4 sets the bar pretty high. I'm not opposed to learning a new tool like parser combinators but I'd need an article that showed the differences between ANTLR4 and PCs, showing how it was much easier in PCs rather than it was just 2017.

I'd add that ANTLR has really good documentation.

<comment><USER18> ANTLR _is_ a parser generator, isn't it? Do you mean parser _combinators_ where you write _generators_?

<comment><USER25> Ugh. Fixed. Thanks.

But I really would want to read the ANTLR4 vs PCs article. I'm very happy with ANTLR4. But tools is tools.

</comment></comment></comment></comment></comment><comment><USER26> this is a real CSV parser on PicoLisp which understand everything: [https://bitbucket.org/mihailp/tankfeeder/src/default/csv.l](https://bitbucket.org/mihailp/tankfeeder/src/default/csv.l) Real of 2017 parsing.

<comment><USER27> I don't think so? That doesn't appear to support escaping quotes by doubling them (instead, it only supports the \" variety), but doubling quotes is the standard escaping mechanism for CSV data.

<comment><USER28> The problem with CSV is that nothing is standard, not even the eponymous comma as separator.

Seriously, stop using CSV.

<comment><USER27> > The problem with CSV is that nothing is standard, not even the eponymous > comma as separator.

So? The parent claimed it understood everything. I was pointing out that it doesn't. There are plenty of CSV parsers out there that can pretty much handle anything you throw at them, and they work pretty well in practice.

> Seriously, stop using CSV.

I'm a consumer, not a producer. So I'll continue right on using it, thank you very much.

</comment></comment></comment></comment><comment><USER29> Integrating with existing C tooling on larger projects is still one of the hardest parts of introducing Rust into a project.

It would be amazing if someone wrote a gcc/clang wrapper that could detect rust files and "inline replace" them with C file equivalents

<comment><USER23> Which is why Bjarne went with C compatibility in C++, even though he would rather have something more Simula like.

C++ would never had survived in AT&T if it wasn't zero friction compatible with C.

Cyclone, C+@ and Limbo are sadly three examples where things did not went that well at AT&T.

</comment></comment><comment><USER21> It's a bit of a special case, but I am huge fan of Kaitai [1] for generating parsers for reading binary data formats. You declaratively describe the format in a YAML-based DSL, and "compile" it into a parser that can target a variety of languages (C++, Java, Python, etc).

1\. [http://kaitai.io/](http://kaitai.io/)

</comment><comment><USER30> I'm surprised no one has mentioned Ragel: [http://www.colm.net/open- source/ragel/](http://www.colm.net/open-source/ragel/)

Ragel generates very fast code, is modular by design and has good error handling. It supports both compiled and scripted languages (e.g. can generate both Ruby and C) which is useful if you need a fallback.

I've really enjoyed using it to implement the following:

\- A template language for Ruby: [https://github.com/ioquatix/trenni/blob/master/parsers/trenn...](https://github.com/ioquatix/trenni/blob/master/parsers/trenni/template.rl)

\- A SGML parser for Ruby: [https://github.com/ioquatix/trenni/blob/master/parsers/trenn...](https://github.com/ioquatix/trenni/blob/master/parsers/trenni/markup.rl)

\- A HTTP V1 protocol parser: [https://github.com/kurocha/async- http/blob/master/source/Asy...](https://github.com/kurocha/async- http/blob/master/source/Async/HTTP/V1/RFC7230.rl)

\- A URI parser: [https://github.com/kurocha/uri/blob/master/source/URI/RFC398...](https://github.com/kurocha/uri/blob/master/source/URI/RFC3986.rl)

I'll admit, it does take a while to understand how to correctly handle ambiguity when dealing with callbacks/events during parsing, but generally speaking, once you get a bit of experience with how things work, it becomes a very powerful tool in your toolbox.

<comment><USER31> I thought that Ragel was no longer open-source, and supported C/C++ only (admittedly, the second point isn't that big a deal, given the article and its audience).

<comment><USER32> No. It changed from GPL to MIT license, but did not go closed source. [http://www.colm.net/open-source/ragel/](http://www.colm.net/open- source/ragel/)

</comment></comment></comment><comment><USER33> > An unreliable programming language generating unreliable programs > constitutes a far greater risk to our environment and to our society than > unsafe cars, toxic pesticides, or accidents at nuclear power stations. Be > vigilant to reduce that risk, not to increase it. – C.A.R Hoare

No. There is no programming language that prevents the programmer from writing bogus code. Blaming software instability on the programming language would be like blaming unsafe building designs on the architect's drafting tools. Yes, shitty drafting tools can make certain kinds of mistakes easier, but the task of having to design something with careful thought and good engineering principles does not ever go away, no matter what kind of compass and ruler you're using.

Also, unsafe software IS dangerous, but putting it next to those actually life-threatening things actually undermines the message by the contrast.

</comment><comment><USER34> In the comments, there's a link to this timeline of parsing techniques with one or two things I hadn't seen before:

[https://jeffreykegler.github.io/Ocean-of-Awareness- blog/](https://jeffreykegler.github.io/Ocean-of-Awareness-blog/)

Author then modernizes one of the better ones.

</comment><comment><USER35> Nobody mentions OMeta? Not the best performance but fast for playing.

<comment><USER5> Is this what you are referring to? [https://github.com/alexwarth/ometa- js](https://github.com/alexwarth/ometa-js)

Is it still relevant if it has not been updated for several years?

Perhaps Ometa's younger's brother (Ohm) should have been referenced instead: [https://github.com/harc/ohm](https://github.com/harc/ohm) Unfortunately while it seems to have some very nice features, particularly the separation of grammar and semantics.

Its performance is underwhelming. See a benchmark I've created of JSON parsers implemented using many parsing libraries.

[http://sap.github.io/chevrotain/performance/](http://sap.github.io/chevrotain/performance/)

On V8 (Chrome 60) It is the slowest by far, in most cases by two orders of magnitude...

</comment></comment><comment><USER36> How about using a parser generator ? Yacc, ragel, bison, etc[0] ?

Nooooo, we _have_ to use rust, because we are not "2017" if we don't.

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

PS I use C. I say this to align my post with the "Rust is the best and i use rust" mentality of the article.

EDIT: Also, this article says absolutely nothing about actually writing a parser.

<comment><USER37> The article mentions Cloudbleed, which did what you're suggesting (used Ragel), and still managed create a serious vulnerability.

</comment></comment><comment><USER38> Rust still means too much ceremony; there is a line where specifying more details makes the whole thing more difficult to understand and maintain; and that's still besides taking more time to write in the first place. Not everyone is into checking all the boxes, all the time; for good reasons; otherwise we'd all be coding Ada by now. Trying to shame others into adopting that mindset can only cause more division.

<comment><USER39> What's your alternative when writing parsers which need to handle untrusted input? This isn't a general "use Rust everywhere" article, it's focusing on these kinds of parsers and how we can do better against very real issues.

<comment><USER38> But that has nothing to do with Rust; this post and others is more or less claiming between the lines that the only thing that can save us from buggy software is the Rust way, which is bullshit. It didn't work for Java, or Erlang or Haskell; and it won't work for Rust; simply because the solution is experience, not more rules.

</comment></comment></comment><comment><USER40> I wrote a short tutorial [Easy Parsing with Parser Combinators]([http://www.lihaoyi.com/post/EasyParsingwithParserCombinators...](http://www.lihaoyi.com/post/EasyParsingwithParserCombinators.html)), in case anyone's interested in seeing what combinator parsing looks like in practice (though in Scala, rather than Rust)

</comment><comment><USER41> If you guys were going to write an interpreted language AND/OR a transpiler, which toolset would you use?</comment>


Next Steps in DNS-Over-HTTPS Testing - <AUTHOR> https://blog.mozilla.org/futurereleases/2018/11/27/next-steps-in-dns-over-https-testing/ <comment><USER2> And now I'm removing all Mozilla products, and not recommending them.

The browser is now _overriding_ the OS level resolver, and pointing to the Cloudflare stuff.

This feels like Microsoft telemetry; I have no choice but to just shut it down and not use it.

<comment><AUTHOR> > The browser is now overriding the OS level resolver, and pointing to the > Cloudflare stuff.

If you're in the study. Which it asks you whether you want to be.

</comment></comment><comment><USER3> Have Mozilla participated in any recent threads on this topic here at HN? [1]

[1] - [https://news.ycombinator.com/item?id=18531144](https://news.ycombinator.com/item?id=18531144)</comment>


Dear Twitter, help, I need a job - <AUTHOR> https://cyberomin.github.io/life/2018/06/26/twitter-i-need-a-job.html <comment><USER2> What makes these suggestions better?

Unless someone can demonstrate how effective each tweet is (maybe by retweets, or by how quickly employers respond (if at all), or by actual hirings) they're really just as good as each other. Data is key here.

The author is making the _very_ common mistake of believing more information and a more verbose writing style makes better marketing. The opposite is true in so many situations. I can certainly believe that something very short like "I have a first class in X. Please RT" would be _much_ more effective at actually getting retweets.

<comment><AUTHOR> Hey @onion2k, this is not a full proof way of getting a job. Every time I see this, I am asking, why should I hire you? If you can give me something extra, more meat, the context for demonstrable skills, then I can talk to you. That's the point I am coming from.

<comment><USER2> _Every time I see this, I am asking, why should I hire you?_

Maybe you should be asking "Am I the target audience for these tweets?"</comment></comment></comment>


Ask HN: Founders, what would you tell yourself at 15? - <AUTHOR> I've been invited to do a talk tomorrow to a group of 15 year olds about startups. This is something I want to commit a lot of time over the coming years to do, and tomorrow is my debut.
Scotland, where I live, has an incredible history of invention, but the days of Scottish engineers and inventors changing the world are in the increasingly distant past (even Dolly the Sheep has been dead for 10 years).
It has never, for example, produced a software company of note (other than maybe OWL for those who know their hypertext history). I'd like to see this change, and my hunch is that if you can plant some seeds in the minds of enough smart 15 year olds, then by the time these kids are 20-25 they are going to be way better placed to do great things.
In some places (i.e. SV) this can happen serendipitously through interactions with cousins, sisters, neighbours, etc. who are in the industry, but when the ecosystem is so well hidden (as it is here), most kids just don't know about this stuff until much later on (i.e during Uni).
Anyway, I've got quite a good bunch of slides pulled together and I speak fairly well at these sort of things (its no Steve Jobs commencement address, but it is ok).
However, I wanted to round the talk off with a bit of a discussion about ways to put themselves in the best position to do whatever it is they want to do, even if they don't know what it is yet.
Any thoughts on this would be most welcome... <comment><USER2> Here are my top three pieces of advice I wish I had at 15:

Remember: every website you use, every app on your phone, was built by people just like you. There is nothing magical or mystical about technology. Technology is just a tool, and you can learn to master it to solve problems.

If you can see problems in the world, be it not remembering to walk the dog, or being annoyed with washing your car, you probably have an idea for a business. It might not be a billion dollar business, but it will get you thinking.

Get in the habit of starting things. We spend so much of our life planning, waiting, when we should be trying, iterating.

<comment><USER3> Further to your advice of getting into the habit of starting things, I think it's invaluable to also having the habit of finishing what you started.

I'm not saying be incredibly pedantic about it, but finish the things you want to work on. Started that app that you love? Make sure you specify time to work on it. Too often when I was 15 I started projects but never got to a significant stage with them due to wanting to do too much at once or playing silly games like World of Warcraft.

</comment></comment><comment><USER4> Be biased towards action and interpret 'failure' as education and opportunity.

At 15, you can explore a number of avenues that you consider 'dreams'. Spend 2-year blocks of time focused on an outcome, and then 'pivot' after two years if you enthusiasm has begun to wane.

In 10 years, by age 25, you will have built a large knowledge base around your interests. You will be adept at 1 and 5 core areas of expertise. You will have either discovered an extremely rewarding life/work path, or have created tremendous employment opportunities for yourself in areas of fair interest. You will know how to teach yourself.

Best of all, at the tender age of 25, your worst case scenario is having almost your whole professional life to fumble around like everyone else.

</comment><comment><USER5> As a current student, I think what you are doing is quite wonderful, and having just read PG's 'What You'll Wish You'd Known' Speech, I think that such a talk like this could be incredibly powerful and might make a difference in some lives. What I would stress is the abundance of possibilities available, just the sheer amount of magical discoveries that they can go on to accomplish, or discover an hour after your talk (on that point, stressing action now, what they can do as a student is paramount to reaching them and getting them to really take you up on your offer). Too many times, speakers come in and give these lackluster maxim-filled speeches about life, and roads ahead of them. I would try to really imbue within your audience the fact that they can act now, and grasp at openings that could propel them to discoveries 10..15 years from now.

I do think it is quite admirable to try to plant the seeds of this career and of possibilities in these fifteen year olds, and think you could really make a difference somewhere.

If you need anyone to bounce ideas off from the perspective of a current student or give any critiques, feel free to shoot me an email (in my profile), and I would be happy to look it over. Good luck!

</comment><comment><USER6> I think the Jeff Bezos' speech about how it's harder to be kind than clever is always good with the young folks: <http://www.princeton.edu/main/news/archive/S27/52/51O99/>. I'm not suggesting you copy it but rather talk about the lessons/takeaways.

I wouldn't get hung up with the pressure of thinking that, for you to help Scottish youth succeed, then you must help this one group succeed. This is a case, IMO, where a shotgun-approach works better than the rifle approach. You should do lots of speeches, workshops, groups, etc rather than just one. One speech - that's just too much pressure. What if you are nervous and come across geeky/hard to listen to? Too bad - the youth of Scotland will never succeed. But what if this is just one of 100 events? I'm not suggesting you "phone it in" but I am pointing out that there is success in numbers. Influence is a numbers game.

Good luck!

</comment><comment><USER7> Adults lie and manipulate. Often out of ignorance; sometimes out of malice.

To the extent you can, don't waste your time on this.

P.S. (Or, especially) This includes many figures of authority we are taught to trust. Blanket distrust as a compensation mechanism is not very useful, but remember that _trust is earned_ is.

</comment><comment><USER8> I wish I knew how much I could do at age 15. Once you complete one large project, it feels like you can just keep trying. Yet you will never have so much time as you did in your teens. I would tell my younger self to just work on something, even if not a start up. Work on something just so you can see yourself improving. That way one day you won't ever think something is impossible.

</comment><comment><USER9> Write down your questions as you're exploring this brave new world of computers. What excites you? What confuses you? What is the coolest thing you've learned today? In 20 years, it will help to know what the roots of your passion were.

</comment><comment><USER10> Ask them to read/convey ideas from PG's 'What You'll Wish You'd known' essay: <http://www.paulgraham.com/hs.html>. It really is a gem, especially for high- schoolers.

</comment><comment><USER11> Don't get sucked into the "grade race". Life's much more about what you learn and less about getting the 4.0. In the end, the grades don't matter to the extent that your parents tell you they do.

</comment><comment><USER12> I would tell myself to stop being stupid and dreaming of being a rock star. Concentrate in your last year at school and make sure you get into a good University!

</comment><comment><USER13> Btw., Edinburgh-based SkyScanner is a notable Scottish startup.

I would definitely talk about entry-paths into the industry, e.g. Codecademy et al.

</comment><comment><USER14> Finish your shitty project before you start your next shitty project.

<comment><USER15> You seem to be getting downvoted but I found this response hilarious and probably more in tune with how I would actually speak to myself. Unfortunately, I am yet to fully learn this lesson. I get distracted by just about everything and run off into the wild leaving half attempts strewn in my wake.

Thought you'd like to know not everyone is downvoting you ;)

</comment></comment><comment><USER16> Evolve or die.

Don't let fear make decisions.

Be independent but don't be afraid to ask for help.</comment>


Ask HN: How do you find time to code/build your business in the evening? - <AUTHOR> After the kids get to bed, I'm either burned out for the day or doing something else that must be done (laundry, etc.).<p>How do you make/find time to spend the time you want to in order to help with the family, run your part-time (or full-time) business into the evening (etc.), and still be able to have some downtime each day? How do you get focused? <comment><USER3> Don't build in the evening.

In the evening, wind down the day, have a beer and plan out how you're going to use two hours in the morning _tomorrow_ most effectively. Set one clear goal. Then...

1) Go to sleep

2) Wake up early (I recommend 6am)

3) Do the work you thought up last night

I find myself remarkably productive in this cycle. If you've planned well, you'll whiz through the tasks. Focus on "doing one thing" each day and you'll be racing through iteration cycles. I find that I'm usually so productive like this that I can comfortably keep the weekend purely for recreation guilt-free, rather than continuing to iterate on my down time and burning out.

This is how I built <http://goodgecko.com>

It's taken about 3 months* of doing exactly the above, now has paying customers and is an extremely satisfying "side project"!

UPDATE:

*I should elaborate - 3 months since the very barebones MVP. The MVP took about 2 months and featured basic surveys and a one-page sales site. The current product features web, mobile, popup and kiosk surveys and has a fully-realized sales site. The sales site itself took about a month to make...

<comment><USER4> I do like, and have done, the idea. But don't you find yourself dragging in the mid-to-late afternoon at your daytime job?

<comment><USER3> it's different for me since I am also a partner at my "dayjob", so my motivation is very high for both of these projects :)

that said, I think it's normal to feel a little drag now and again - <USER2> it's on a side project or your day job. just take a break and come back to it after a few days.

<comment><USER5> I thought you had quit everything to work full-time on Peashoot… now everything makes more sense!

</comment></comment></comment></comment><comment><USER6> First: [http://www.kalzumeus.com/2010/03/20/running-a-software- busin...](http://www.kalzumeus.com/2010/03/20/running-a-software-business- on-5-hours-a-week/)

Then: 1) I never sacrifice dinner with my family and I try to "be home" from 5-9. Not just physically, but mentally and emotionally.

2) Always prioritize your most difficult work first. If you start with "check HackerNews", time will disappear. Finish a use case first then reward yourself. Pick a new feature to ship each night and the progress will fuel you.

3) I've never liked working super early in the morning, so I take quick power naps in the evening (30min to 1hr.) to refresh and work from 10-1. Solid, uninterrupted 3 hrs.

4) Passive work (like catching up on HN, other sites) can be done with MacBook in lap on the couch if you want to unwind with some Tivo.

5) Don't be afraid to invest appropriately. I'm actually taking vacation next week to complete my punch list: finish coding, meet with an advisor, attend a trade show and prepare product for beta.

</comment><comment><USER7> Eliminate television and other forms of entertainment.

<comment><USER8> Every single hour you're awake you have the mental and physical energy to watch a movie. That's not true of programming.

<comment><USER9> True. I suggest: eliminate watching crap on TV and only watch that which is (to you) truly worth watching.

<comment><USER10> Unfortunately, with Netflix, Hulu, Tivo... I am never in short supply of things to watch on TV that isn't crap. All six seasons of Lost, that's a lot of time gone on!

<comment><USER11> I hope you realize you just said watching Lost is more important than developing your product. All six seasons will still be there next year, and if your product is a success, you'll have all the time you want to watch them.

<comment><USER9> If he's really succesfull he's likely to have less time available, actually :-)

</comment></comment></comment></comment></comment></comment><comment><USER12> I'm the programmer in my startup. I'm also the guy with the day job. We weren't making the necessary progress until we actually analyzed why I wasn't being as productive as we needed in the evening and weekend situations.

Turns out that I basically needed an assistant. Since I was building features for my cofounders, we decided that we should pair program (except they don't know how to program). So they act as the "feature manager" and come up to my apt for 2 hours a nights a week and we work together.

A few key points: the feature managers MUST have their thoughts detailed out. In order for me to crank out code, I need to know exactly what to do. I think there's a cognitive cost when you have to shift from implementation to design mode (and even testing mode). You'll be amazed how much it helps to push those responsibilities out of your brain (and yet still get fast feedback).

Doing this, we've gotten probably 4 months worth of work done in the last month, without me increasing hours. Seeing how efficiently I can implement features made my cofounders realize that it's worthwhile to pay me even 1/4 time, so that I can reduce hours elsewhere. Been a real game changer for our company.

<comment><USER13> I'm in the same boat as you and totally agree with you that it is necessary to separate design from implementation and assign these tasks to different people in order to maintain or boost productivity. We've done the same in my startup and it's working great. Further, we feed off each other's progress and try to stay in sync, which keeps us motivating and grinding.

</comment></comment><comment><USER14> I try and stick to 3 hours 4 times a week (9-12) with three visits to the gym (two in the evening during the week and one on Saturday afternoon) with Saturday evening as "free" time. Usually manage a chunk of time during the day on Sunday as well. So probably 15 hours a week on average doing my own work.

I usually make sure I have what I want to do in the evening sketched out in a notebook at lunchtime - which is when I do research etc.

The thing that makes this possible is pretty much having a "regular" day job that is within walking distance of where I live - 20 minute walk away. With a commute I'd be too tired to do anything at night (I know, I have tried). I usually get home at 6pm - same time as my son gets home from school.

The other thing I have found is that staying up past midnight is a _bad_ idea - I even have an alarm set on my watch to remind me to start shutting down at 23:50.

I tend to sleep most soundly when I've just fixed some horrible bug or implemented some sweet feature!

Note that includes plenty time with 11 year old son and my wife - who has a much more high-pressure job than I have (I do all of the cooking).

</comment><comment><USER15> Thanks for asking this. I've been struggling with exactly the same sort of problem.

For a while I was working late nights and making good progress but since having our 2nd kid it has been very difficult to get back into it. Being depressed over the day job and money definitely doesn't help.

It's interesting that so many people recommend the mornings. I can see the logic but from a practical point-of-view, I don't think it will work. My kids are v. good and sleep from ~7pm to 7am but they're awake earlier in the mornings and just happy to stay in bed. If I get up at 5 or 6am then I'm going risk waking not only my wife but also rousing the 2 children too. Maybe I'll give it a try next week but I'm sceptical.

One thing to bear in mind... when working in the evenings I've found progress is roughly: 1 week of evenings == 1 full-time day. Things take an extraordinarily long time to complete.

</comment><comment><USER16> "Consistency is the authors best friend"

That's something my Dad (a writer himself) told me when I wanted to write a book when I was young. And it's true for business as well! When I wrote just a little bit regularly (a page or two a day) I got a _lot_ done in a month, but then I started just writing in batches, marathon sessions here and there, and nothing really got done plus I lost wind pretty quickly.

Now I'm working a day job and writing code for another startup idea and regularity helps me, this time I plan to stick with the consistency, rather than degrade into spurts, so that I finish this (unlike the book).

</comment><comment><USER17> Make sure you exercise and are healthy. I find once I've taken care of this, I am so much more likely to have focused, productive time on projects.

A good summary of other things that can be done to improve and simplify your life is at zenhabits: <http://zenhabits.net/brief-guide/>

<comment><USER18> Body and mind, a good point to remember indeed.

</comment></comment><comment><USER19> I've agreed with the good lady that I will work in the evenings between Monday and Thursday, which normally gives me three-four hours a night, after the kids have gone to bed. Friday, Saturday and Sunday are for the family with the odd exception, which has the added benefit of giving me some thinking time. I have 30 days holiday a year and use 10 of those days for working on my own stuff; effectively a working holiday but its very useful.

<comment><USER20> I really like this idea. Too often we hear about young, single founder with no commitments. Well yeah it's easy to hack away to 3 AM if you're living in your parents basement! I used to code all night long when I was still in school.

Now I'm 27 with a 9-5.30 job and a partner, friends, family. I like to go swimming, I like eating out and cooking meals in, all that gets in the way of marathon hacking sessions. Carving out dedicated time in the weekly time- budget is a good way to manage the balance.

</comment></comment><comment><USER21> 1) I can actually get a lot more done in a 1 hour lunch break at work than a 2 hour session at night. Other people prefer to work in the mornings before work or even work a full weekend day. There's no reason why it has to be in the evening.

2) I'm lucky enough to have a high paying job, enough so that I can afford to have house cleaners, and I also pay my brother to do our laundry every few weeks (this is a win-win, since he gets spending money). Sometimes I feel bad for not doing these things myself, BUT in reality it's working and that's what counts. To be honest, if I made less, I might consider going for funding instead of working, but since I make good money, I consider that to be my investment in my business. That being said, I still have household chores to do, but you just have to get realistic about how much you can really do, whether that means getting help, or just NOT doing chores (sad, but true)

3) Since I know have much more limited time than other people, I really really REALLY need to find ways to keep the product lean and focused. Everyone says they try to do this, but you know, necessity is the mother of invention.

4) Finally, sometimes I'll be in bed, it's midnight and I need to wake up early for work. I'll start thinking about the product and get so excited I have to get up and work on it for an hour or so. And of course, since I'm pumped, I'm much more productive. This is horrible for my sleep, but I think it's a fair trade for starting a startup, in addition to living a full life with family and work.

5) Assuming you have a supportive spouse, he can take the kids for an outing to the zoo, or whatever, on Saturday mornings and you can get a good 6 hours in. We find it to be a win-win, since they get to spend quality time then.

</comment><comment><USER22> This is about writing, but applies just as well here: [http://whatever.scalzi.com/2010/09/16/writing-find-the- time-...](http://whatever.scalzi.com/2010/09/16/writing-find-the-time-or- dont/)

</comment><comment><USER23> Ahh, stop reading Hacker News? <g>

<comment><USER24> Unrelated, but: is <g> some sort of emoticon? Or what?

<comment><USER25> It's short for <grin>, i.e it's a humor marker.

</comment></comment></comment><comment><USER26> This will likely get lost in the ether, but I'm presuming you work a day job. I do the same, and now I'm going back to school to get a Masters degree. Funny thing about it, though, is that somehow my drive to learn and build has grown. I'm not saying I have more time, or that I don't feel burnt out. I just feel less burnt out about building applications. That said, my job has me on sort of an educational documentation rotation wherein I haven't had the chance to write code in awhile so that may also be why.

My point is, focus on everything else and somehow, the time will manifest itself. Whether it happens because you're avoiding something else, or just because you're not used to doing nothing (like I used to do, and still do, a lot) in your downtime. Just be sure you aren't avoiding the family. :)

</comment><comment><USER27> I'm in the same situation as you. First off, my business is my hobby, so instead of watching TV or playing video games, I try to get something done on my application.

I choose small pieces of work to do that can fit in about an hour. My wife does writing/school in the evenings, so we often sit together and work. If I don't have the mental attention to write code, I work on other things.

Funny enough, I've been very productive while taking my oldest kid to karate. I've built a surprising amount of my application at the dojo :)

I start my day job early (at the office around 7) so that I can get back home and spend more time with the family until bedtime.

I've also learned to accept that my progress might be slow some weeks because I've made the decision to put my family first.

</comment><comment><USER28> I think the short answer to your question is that it is difficult but it can be done.

The biggest problem I have is finding large enough blocks of time (> 30 mins) to concentrate on the task in hand. The only two blocks that I've managed to secure are early in the mornings before the kids get up and on my commute to work. I use the return journey of my commute to plan what I'm going to do the next day. Although this strategy only provides me with a few hours a day, I find that this is sufficient to give my project some sort of momentum.

I tend to avoid evening development as the quality of the work I produce isn't optimal and it would eat into the time that I want to spend with my very supportive wife and children.

</comment><comment><USER29> My day job starts pretty early in the morning (need to leave home by 7:30) so working on weekday mornings is pretty much impossible. I manage to get in a 2hr session after dinner on 3-4 weeknights, but doing so consistently requires a lot of discipline, giving up on TV etc., and an understanding wife/girlfriend.

I also try to tackle the larger/tougher parts of my side-projects on weekends instead. To make my weekends more productive, I try to finish the interruptive boring work such as laundry etc on a weeknight when I don't feel like coding. That way, I don't have to worry about it over the weekend.

</comment><comment><USER30> Take a night course where lectures are mandatory. You'll realize you somehow make the time to attend class and do homework. Now just lead by example and keep making the time, but with your business instead.

</comment><comment><USER31> I find I have limited bandwidth for coding. In my last job, this capacity was completely used. I put my energy and my ideas into my job and absolutely nothing was left for building on the side.

My current job is still technical, but I'm not working as a coder. As such, I have a lot of energy to put into a project. In fact, working on the project is one of the things I look forward to when I get home.

Something to keep in mind when looking at a job. How much of your personal capacity will be left when the day is over?

</comment><comment><USER32> I completely agree with those who suggest the early morning cycle. Especially if you have a family. I wake up about 5/5:30 and a working in peace by 6 until 8. it gives me at least 2 hours of extremely productive time everyday.

This is how we built our current startup: votetocracy.com. When I try to work at night - I have a hundred things floating in my head that distract me.

Another tip that has worked for me: Multi-tasking is bogus.

I have actually tested this with my own work life. I spent a week multi- tasking. Where I decided on several multi-step projects that I wanted to complete over the week and went about them by pushing he first tasks forward one by one on each project on Monday. Then I kept pushing forward the next task on each project. At the end of the week I had several things up in the air. Mostly because I was waiting on others - or others were waiting on me because I was busy doing another task on an another project.

The second trail was with a one project a week approach. The result: It got done early. Those that I had to work on the project with didn't have to wait for me. I didn't have to wait for them.

THe one project approach isn't always possible due to client demands and such. But I do recommend picking at least one project among a few people and as much as possible - limit the noise of other small interruptions and stay focused.

</comment><comment><USER33> At the risk of repeating what fookyong said, have a very clear goal of what you want to do. Then start executing one or two or three items daily.

For me I just finished my mvp for <http://democratic.ly> in 3 weeks. I worked on it after 4pm on weekdays and during the weekend. If I was organized or had more programming skills it could have been much less time to MVP. But from the start I had a very clear goal.

</comment><comment><USER34> On the commute back home, I set the night's agenda by listing out the 3 things that I plan to accomplish. This way, I'm constantly moving forward each night and am not left wondering "what should I do now?" when I reach my desk.

My other tip is to listen to your body's signals. If you're sputtering out, grab a snack and walk around a bit. Speaking of which, it's about time for me to do that right now!

</comment><comment><USER35> I work in a shared office building, and I take a laptop with a self-contained test environment into my day job. I then spend lunch working in a quiet room elsewhere in the building with no internet connection.

It works well for me because I'm awake and thinking about tech problems anyway thanks to the morning, and an hour with no distractions is enough to make small gains.

</comment><comment><USER36> I've gotten a lot out of reading this discussion, but I will toss out the additional suggestion that some tasks you think are necessary may not be. A particular home and/or lifestyle may impose certain tasks and making other choices may reduce those tasks. One obvious example: A house with a large yard requires more maintenance outside than a house with a small yard. But there are lots of things most people take as a given which aren't. If you really just can't find the time, maybe you should track where your time is going and explore the possibility of making some lifestyle changes which might free some of that up. (As for the yard: I recall reading an anecdote once that some guy that had been a devoted gardener discovered golf and basically paved over his yard so he wouldn't have to fuss with it anymore. :-D)

</comment><comment><USER19> Another thing is that I have a clear separation of work and home life. When I leave the office then I don't think about it until I arrive the next day and can generally wind down very quickly. I am probably fortunate that my work does not demand too much overtime.

</comment><comment><USER37> I wake up at 5 am every morning and code until 10 am on my startup then do work from 10 until 6. I also spend the last 2 hours before bed planning and doing any other startup task to make the 5 hours I spend in the morning working more productive.

</comment><comment><USER38> Late in the evening and early in the morning are great times to work.

But neither necessarily coincides with your peak creative period.

The muse comes on her schedule and sleep is just something in the way.

When she's absent, you're just tacking more time onto a long day.

</comment><comment><USER39> Totally agree with @fookyong.

Don't build in the evening (unless you're single, then have at it). After a long day of work, working more is the last thing I want to do. The wife and kids need some attention.

Go to bed early (10pm-ish) with the fam then get up early. I get up at 5am every morning. Your mind is fresh and invigorated. I find in the early hours of the morning I'm very productive, I think clearer and my wife isn't bugging me to come to bed every 15 minutes.

This is how I handle freelance and personal projects on top of the full-time job. It gives me an extra 3 hours a day without wearing me out.

</comment><comment><USER40> I like the ideas of getting up early to do work, I might try that. I'm usually either really tired afterwork so just chill out then sleep, or I'm pumped up and work until the wee hours of the morning.

Also don't underestimate how much time you can scratch on the job. I carry a A4-size book around and jot down ideas, think through problems etc when we're waiting for other people to get to a meeting or some other hold up. It all adds up and saves being bored.

</comment><comment><USER41> Like most people here, I have another activity that prevents me from working on my startup everyday. I try to divide the week like this : 4 days for my first activity (Mon-Thurs), 3 days for my startup(Fri-Sun). This enables me to work efficiently in both domains without thinking about the other one. Add in a lot of sport and some nights out to unwind.

</comment><comment><USER42> I stopped watching TV. It's boring anyways. I work from about 10-12:30AM. Make sure you program only. Stay away from the web unless searching for help related to coding.

I can't do the early morning thing. I sleep till the last minute before getting ready for my day job.

(you have to love your day job to have energy for evening work)

</comment><comment><USER18> I do it when ever it feels right and I'm focused, when ever that might be. Some days that's 8 hours straight, other days I go sit on the beach and think.

Nothing happens at 6am for me, so saying "everyone should do X" is about as pointless as any other 1 rule for all or generalization.

<comment><USER18> Oh and it's in a proper environment, i.e. not an office.

</comment></comment><comment><USER43> This tip is awesome. I just got in to a 9 - 5 and have been trying to figure out how to fit in my projects(what I live for) and this makes it oh so clear. THANK YOU!

</comment><comment><USER44> i suggest u code/build yr biz in the early morning instead, say around 4-5 am, wake up early, code like crazy for e 2-3 hrs. it's super productive when compared to late nites. also, since you have kids, you need to plan out their schedule properly, else they will need yr constant action. automate whenever possible, if u must outsource be sure to review n measure e roi.

<comment><USER45> Translation: I suggest you code/build your business in the early morning instead. Say around 4-5 am: wake up early and code like crazy for 2-3 hours. It's super productive when compared to late nights. Also, since you have kids, you need to plan out their schedule properly or else they will need your constant attention. Automate whenever possible. If you must outsource, be sure to review and measure effective ROI.

<comment><USER44> Cheers Jarin.

<comment><USER46> Meth is a terrible drug. <j/k>

</comment></comment></comment></comment><comment><USER47> Too late, you can't get rid of the kids now :-)</comment>


Show HN: New Cancer Drug Candidates - <AUTHOR> https://experiment.com/projects/synthesizing-and-testing-a-new-drug-candidate-for-treating-cancer <comment><USER2> Shouldn't be Show Hn</comment>


McClatchy Follows BuzzFeed, Vice, and Others in Cutting Staff - <AUTHOR> https://www.miaminewtimes.com/news/mcclatchy-follows-buzzfeed-vice-and-others-in-cutting-staff-11070151 <comment><USER2> In the wise words of Martin Shkreli, who sounds even wiser from jail..

The web media layoffs remind us that there is no money in virtue signaling. Major media will get back to real news. The 'fakeout' caused by companies like Vice and Buzzfeed will retract and the CBS/ABC/NBCs of the world will realize 'woke' culture and uber-progressivism won't pay the bills. People want the news, not preaching. Companies like Buzzfeed (hungry for a merger) are still upside down on cost structure and will go bankrupt. Startups, such as Gawker's latest iteration, actually have a risk of imploding on their own smug, before they prove they're not viable businesses, either. More 20-somethings will realize that their calling of 'speaking truth to power' (by trying to usurp power itself) is a distant second to operating profit. No operating profit, no whining about the benefits of socialism, sorry.

reference: [http://martinshkreli.com/uncategorized/1-26-2019/](http://martinshkreli.com/uncategorized/1-26-2019/)

<comment><USER3> Why is this being down voted? Do people think that unbiased news is a bad thing or something? That these news outlets should have progressive convictions in everything they make?

Sure they can exist, but they shouldn't occupy the entire mainstream landscape unless the entire population is on board with those convictions.

<comment><USER4> Because it's a pointless comment. Fox "News" is the leading provider of television news in the United States by a wide margin. They have a widely conservative bent and one of their anchors has nightly talks with the President.

[https://www.statista.com/statistics/373814/cable-news- networ...](https://www.statista.com/statistics/373814/cable-news-network- viewership-usa/)

The claim that news can be unbiased is silly as all news has to be reported through a lens. The claim that news media has a "liberal bias" is a long standing conservative talking point going back to the 1970s where news media was listed as slightly liberal and then everyone ignored the follow that showed that media had self corrected based on the report.

Claiming that there's a "liberal news problem" just points out that conservatives don't like that "their President" is getting "unfairly attacked" by the media. This completely ignores that conservative media frequently runs literal conspiracy theories that have led to real life shootings with little regard to the outcome.

The point being that claiming that there's some grand liberal conspiracy ignores the fact that most of the news organizations OP cited will actually issue corrections. Fox news rarely issues them and most other mainstream conservative commentators never do because they claim they are "infotainment".

</comment></comment></comment><comment><USER5> For so many news/media companies to be cutting all at the same time, I wonder if they're all having issues with earning enough ad revenue all of a sudden? Maybe the high spenders like Squarespace, BlueApron, and MailChimp are pulling back ad spend?

<comment><USER6> without re-iterating my views about the political affiliation of these outfit. Just seeing the timing of it, all at the same time, is indeed suspicious.

Another posted suggested that they have hired at disproportionally large numbers. Seems like a plausible explanation, if true.

May be it related to some political changes.

Or, may be, there is an unseen 'consolidation' that will commence (layoffs in tech industry, often precedes takeovers).

Just speculating, though.

I definitely feel, that people will _not_ pay for opinion pieces, but will pay for investigative journalism.

However, investigative journalism, in my view, lacks economic model.

It is quite resource intensive, but there is no 'story origination fee' of some sort. So it has to live of donations, which could make it very biased.

<comment><USER7> That is certainly how I feel. There are a lot of good free bloggers out there that have better opinion pieces than those in the establishment media, and there is no way I'm going to pay for the latter. At the same time, I greatly value the media's role in investigative journalism and wish I could support outlets / journalists that break important quality investigative news, but there really isn't a good way to do that.

I think video functions as a much better format for investigative reporting though - it is much more engaging, slightly more trustworthy (because you don't have to e.g. trust the journalist's description of tone / body language, although selective editing can still be done), and harder for other media outlets that haven't done the investigative legwork to just copy and redistribute.

<comment><USER8> While I didn't downvote you, one could certainly make the argument that "how you feel" is, well, maybe a little...idiosyncratic and perhaps not that well- informed?

First: I'm sure there are "good free bloggers" out there, but there's far, far fewer that aren't associated with new media companies now than there were a decade ago. Making money as an independent blogger is _exceedingly_ difficult in 2019 in a way that just wasn't as true in 2009.

Second: McClatchy, BuzzFeed, and Vice are all known for investigative journalism, not opinion pieces. McClatchy was once considered one of the best newspaper companies in the business, primarily based on investigative work; while Vice and BuzzFeed certainly are known for clickbait material, they've both been funding serious news stories for years. "Free bloggers" just aren't competition in this space.

Third: You know that BuzzFeed in particular is in the straits that they're in because they _tried_ to pivot to video, right? Mashable is nearly out of business because of their attempt to do so. Also, investigative journalism tends to rely on, well, investigation, not "descriptions of tone and body language."

Fourth: there is, in fact, a really good way to support investigative journalism. It's--you know what I'm going to say, right?--paying for it. It turns out that an awful lot of newspapers, magazines, and journalism web sites have mechanisms set up that enable you to give them money, often on a recurring basis!

</comment></comment></comment></comment><comment><USER9> It may sound harsh, but IMHO these outlets are highly redundant, from quality of journalism to political stands. Just the same news retold the same way to the same audience

</comment><comment><USER10> If it'll get newspaper to snap out of reporting their opinion pieces and baises, I'm all for it. I don't wish the layoffs on anyone, however, they don't seem to push a great value for their customers.

I want to see good quality reporting, and I don't want them to try to inject their selective editing/political agenda in it.

<comment><USER11> _Each and literally every piece of media you consume has its bias._ Vice, Buzzfeed, McClatchy, etc. make very clear their biases, which is certainly more than one can expect of submarining, facts-optional pieces from much of the "unbiased" media. "Good quality reporting" is inherently and inescapably _biased_. It inherently and inescapably relies upon the point of view of the reporter or the investigator _and_ that of the editor who determines whether a story deserves publication and thus attention (for who in the modern era does not understand at least the basics of an attention economy?).

But, of course, it's funny how this complaint truly surfaces when those biases are ones that the complainant does not _like_. It's _interesting_ how biases that do not challenge the majority intersection of "affluent, white, male" get so much leash in places like HN.

<comment><USER10> So there was something that really opened my eyes, the story goes like this:

Chic fa la has now just gotten in trouble for not letting someone use their bathroom.

Insert other witnesses or talk about 2nd parties in the story.

Chickfla is the group that came under contrivesery for supporting anti gay charities.

Look for that you'll see it in a lot of stories. I started noticing that when I saw the Milo stories on the BBC. They like to harp on something that he did (usually it's something that the writer doesn't like), they'll also inflate the second party members in the story [who was surrounding it] to their liking (we'll the SPLC said this and that), and then they'll try to bring a call back to something that'll make the person look bad and unrelated (i.e. prior controversy).

Like/dislike the guy, the selective journalism/editing and the unrelated call back is: unproductive, dishonest, and is propaganda.

> But, of course, it's funny how this complaint truly surfaces when those > biases are ones that the complainant does not like. It's interesting how > biases that do not challenge the majority intersection of "affluent, white, > male" get so much leash in places like HN.

I think you should point that out if it's a legitimate concern. (I mean not concern trolling i.e. "well all the interviewed was white people" vs "from the people they interviewed were white and se engineers which is a concern when talking about COL")

<comment><USER11> _> Like/dislike the guy, the selective journalism/editing and the unrelated call back is: unproductive, dishonest, and is propaganda._

No, it's _context_. You cannot reduce political action--and "political action" should be understood as _any action between people or groups_ , there is no light switch to turn it off or on--to a single-shot prisoner's dilemma game. The game is infinite. Your history matters. The context of your actions in the body politic matters.

News organizations have a duty to place events into context, and...this is that context.

<comment><USER10> Should we consider the time that you said the N word as an edgy teen in middle school? It's apart of your history.

Different unrelated events aren't context.

<comment><USER11> We certainly should take into context something like that, yes. For me, that particular thing didn't happen--I was never quite so far to the right wing as to think racial slurs were anything but unacceptable--but I was a shitty libertarian know-it-all. I've never been shitty enough to out and deadname trans people like Milo fucking Yiannopoulos, and I've never been shitty enough to cape up for bad-science racists like Charles Murray, but I've been shitty. I said things that made people mad (because they made me feel superior) and hurt people (because they _intellectually made sense_ , because I was _so rational_ and also had never had a hard day in my life).

Then I grew up, then I realized I was being shitty, and I stopped. And since I have made a point of standing up for the right things, instead, while not ducking that I too have been shitty.

That's _more_ context, and that context, eventually and with hard work, does balance the scales.

It just isn't that complicated.

</comment></comment></comment></comment></comment></comment><comment><USER12> When Google and Facebook control 80% of the advertising market through surveillance duopoly, 20% goes to all the publishers in the world. They are starving. I call it Google's War on Journalism.

<comment><USER13> adapt or die. facebook and google offer a demonstrably better ad targeting platform than any newspaper can offer. if people value high quality journalism then they should be willing to pay via subscriptions.

<comment><USER12> Adapt or die or be constantly followed and listened to by the surveillance multinational corporations. I hope you enjoy being spied on 24x7, including in your bedroom.

<comment><USER13> i dont understand, no one is forcing you as an individual to use any of these services or buy any of these devices. they also don't produce news, they just offer a better solution for advertisers. it's not like these media outlets are altruistic truth seekers anyway, although some journalists are. the NYT is a publicly traded business, Buzzfeed built whatever legitimate journalism it does on the back of clickbait gossip trash, and vice has devolved into a caricature of what it once was.

<comment><USER14> > i dont understand, no one is forcing you as an individual to use any of > these services or buy any of these devices

Not to be too contrarian or tin-foil-y, but this is a bit simplistic view of modern advertising platforms.

These companies absolutely have troves of information about you, even if you've never interacted with them directly. Your social circle indirectly shares information about you, retailers share information about you, etc. Regardless of whether you use a platform like Facebook, it has a profile of who you are.

Saying you're not forced to use their services or devices is only trivially true: Sure, you're not forced to use it directly, but you might as well be given that they're collecting your information regardless.

And sure, you're not forced to buy from retailers who share your information or have acquaintances that use Gmail, but it's in the same way that you're not forced to buy produce that Monsanto has touched in some way - basically, good luck.

</comment></comment></comment></comment></comment><comment><USER15> I can't tell if these layoffs are good or bad.

<comment><USER16> If I go by what I see on Twitter, it seems they're mostly cutting LGBTQ+ people and writers of color. Whether that's good or bad depends on your perspective.

edit: I said "If I go by." I didn't say it was the case. It's a non-judgmental observation.

<comment><USER17> They also hired a disproportionately large number into the roles they are cutting so it would make sense that they would be cut at higher rates.

<comment><USER16> >> _" They also hired a disproportionately large number"_

Did they? I haven't seen any statistics.

<comment><USER18> Weird. That is what I was gonna reply to YOUR comment.

<comment><USER16> I asked for a source on a falsifiable assertion.

Do you routinely ask people to go and collect data for casual observations? I don't know why _this_ one has people so up in arms when they happen all the time here at HN.

</comment></comment></comment></comment></comment></comment><comment><USER19> Is this a case of "play stupid games, win stupid prizes"?</comment>


Intel to take stake in German mapping firm HERE in automated driving push - <AUTHOR> https://www.yahoo.com/news/intel-seeking-indirect-stake-mapping-firm-german-cartel-104141946--finance.html?ref=gs <comment><USER2> HERE is a great option for offline navigation on Android.

<comment><USER3> ...except you can't import your existing bookmarks/placemarks.

HERE Maps looks like an interesting app but, with no way to import the hundreds of places I've saved over the years in other GPS apps and things like Google Earth, it's a non-starter for me. I just can't fathom why so many app designers still think that no-one is ever going to want to bring their existing data to the new app [or take their data from that app to elsewhere].

Maps.me[1] is the only Android navigation app I've found that actually allows easy import & export of your data [in KML/KMZ] format. It's not perfect by a long chalk, but it does get a million 'Brownie Points' just for that.

[1] [https://maps.me/en/home](https://maps.me/en/home)

<comment><USER2> I do like Maps.me, but until recently they didn't offer navigation, just maps.

> I just can't fathom...

I, on the other hand, cannot fathom why I would would ever need to save locations long-term in any GPS or mapping program. I occasionally save a location when I'm heading there, but that's it. Maybe you do something very different with your mapping apps than I do.

<comment><USER3> >>Maybe you do something very different with your mapping apps than I do.

I do a lot of camping. So, when I find a good spot, I like to save the location, in case I want to go there again.

I also bookmark quite a few distant-ish places I visit semi-regularly [even though I know the way there] as I like to use the 'distance to destination' and 'ETA' read-outs to monitor my progress.

I also do things like bookmark that nice pub or restaurant I stumble across while on holiday somewhere, so I know some decent places to go, if I'm ever in that area again.

So, yes. My usage of mapping apps is a bit more 'archival' than the transitory way someone like a taxi or delivery driver might use them —which is why I need to be able to import my existing bookmarks.</comment></comment></comment></comment>


Microsoft's Game Pass Is a Kafkaesque Nightmare on PC - <AUTHOR> https://www.escapistmagazine.com/v2/2019/06/11/microsofts-game-pass-is-a-kafkaesque-nightmare-on-pc/ <comment><USER2> They might have updated the page since he posted this, but on the front page of Xbox Game Pass there is a dedicated link at the top that says "Game Pass For PC (beta)". I clicked the link and followed it all the way to the end. (The PC version has the $1/month price.) Got charged $1. No issues (I already have the May update installed).

So it's possible they fixed things in the few hours after the article was launched.

Or it's possible that Shamus clicked the wrong link.

Given the amount of work that would be involved in fixing everything, it's simply more likely that Shamus clicked the wrong link at the beginning. That would also be consistent with him not seeing the $1 intro price later since it's repeated on nearly every page of the signup process...

</comment><comment><USER3> It's post-2009 Microsoft. What did you expect, end-user software that is actually usable? Helpful information about what went wrong? Keep dreaming

<comment><USER4>
      From: Bill Gates
      Sent: Wednesday, January 15, 2003 10:05 AM
      To: Jim Allchin

      Subject: Windows Usability Systematic degradation flame

I am quite disappointed at how Windows Usability has been going backwards and the program management groups don't drive usability issues.

Let me give you my experience from yesterday.

I decided to download (Moviemaker) and buy the Digital Plus pack … so I went to Microsoft.com. They have a download place so I went there.

The first 5 times I used the site it timed out while trying to bring up the download page. Then after an 8 second delay I got it to come up.

This site is so slow it is unusable.

It wasn't in the top 5 so I expanded the other 45.

These 45 names are totally confusing. These names make stuff like: C:Documents and SettingsbillgMy DocumentsMy Pictures seem clear.

They are not filtered by the system … and so many of the things are strange.

I tried scoping to Media stuff. Still no moviemaker. I typed in movie. Nothing. I typed in movie maker. Nothing.

So I gave up and sent mail to Amir saying – where is this Moviemaker download? Does it exist?

So they told me that using the download page to download something was not something they anticipated.

They told me to go to the main page search button and type movie maker (not moviemaker!).

I tried that. The site was pathetically slow but after 6 seconds of waiting up it came.

I thought for sure now I would see a button to just go do the download.

In fact it is more like a puzzle that you get to solve. It told me to go to Windows Update and do a bunch of incantations.

This struck me as completely odd. Why should I have to go somewhere else and do a scan to download moviemaker?

So I went to Windows update. Windows Update decides I need to download a bunch of controls. (Not) just once but multiple times where I get to see weird dialog boxes.

Doesn't Windows update know some key to talk to Windows?

Then I did the scan. This took quite some time and I was told it was critical for me to download 17megs of stuff.

This is after I was told we were doing delta patches to things but instead just to get 6 things that are labeled in the SCARIEST possible way I had to download 17meg.

So I did the download. That part was fast. Then it wanted to do an install. This took 6 minutes and the machine was so slow I couldn't use it for anything else during this time.

What the heck is going on during those 6 minutes? That is crazy. This is after the download was finished.

Then it told me to reboot my machine. Why should I do that? I reboot every night — why should I reboot at that time?

So I did the reboot because it INSISTED on it. Of course that meant completely getting rid of all my Outlook state.

So I got back up and running and went to Windows Update again. I forgot why I was in Windows Update at all since all I wanted was to get Moviemaker.

So I went back to Microsoft.com and looked at the instructions. I have to click on a folder called WindowsXP. Why should I do that? Windows Update knows I am on Windows XP.

What does it mean to have to click on that folder? So I get a bunch of confusing stuff but sure enough one of them is Moviemaker.

So I do the download. The download is fast but the Install takes many minutes. Amazing how slow this thing is.

At some point I get told I need to go get Windows Media Series 9 to download.

So I decide I will go do that. This time I get dialogs saying things like "Open" or "Save". No guidance in the instructions which to do. I have no clue which to do.

The download is fast and the install takes 7 minutes for this thing.

So now I think I am going to have Moviemaker. I go to my add/remove programs place to make sure it is there.

It is not there.

What is there? The following garbage is there. Microsoft Autoupdate Exclusive test package, Microsoft Autoupdate Reboot test package, Microsoft Autoupdate testpackage1. Microsoft AUtoupdate testpackage2, Microsoft Autoupdate Test package3.

Someone decided to trash the one part of Windows that was usable? The file system is no longer usable. The registry is not usable. This program listing was one sane place but now it is all crapped up.

But that is just the start of the crap. Later I have listed things like Windows XP Hotfix see Q329048 for more information. What is Q329048? Why are these series of patches listed here? Some of the patches just things like Q810655 instead of saying see Q329048 for more information.

What an absolute mess.

Moviemaker is just not there at all.

So I give up on Moviemaker and decide to download the Digital Plus Package.

I get told I need to go enter a bunch of information about myself.

I enter it all in and because it decides I have mistyped something I have to try again. Of course it has cleared out most of what I typed.

I try (typing) the right stuff in 5 times and it just keeps clearing things out for me to type them in again.

So after more than an hour of craziness and making my programs list garbage and being scared and seeing that Microsoft.com is a terrible website I haven't run Moviemaker and I haven't got the plus package.

The lack of attention to usability represented by these experiences blows my mind. I thought we had reached a low with Windows Network places or the messages I get when I try to use 802.11. (don't you just love that root certificate message?)

When I really get to use the stuff I am sure I will have more feedback.

<comment><USER5> Apparently this is a supposed email written by Bill Gates. A quick search turned up questionable sources for me, so I'm not sure, but whoever wrote it definitely knew what the torture was like back then...

<comment><USER4> It was originally published in the The Seattle Post-Intelligencer in a series of articles about Gates leaving Microsoft. The email itself was discovered in a trove of internal email messages Microsoft had to turn over as evidence during an anti-trust suit.

[https://blog.seattlepi.com/microsoft/2008/06/24/full-text- an...](https://blog.seattlepi.com/microsoft/2008/06/24/full-text-an-epic-bill- gates-e-mail-rant/)

</comment></comment></comment></comment><comment><USER6> I can verify this experience. I recently returned to Windows gaming after over a decade away, and bruises like this are a reminder of why I switched to the Mac.

However, I really want to know: _How /why did this happen?_

No, not "because Micro$oft sucks!" Microsoft has produced many genuinely excellent things over the years, and it still does. Plus, don't be so lazy. I want to understand this at the organisational level.

Here's an educated guess: To make all this work right, a bunch of different teams _quite far apart_ in the org hierarchy had to all deliver the right things at the right times. Those teams work in different ways, under different deadlines.

So, why didn't they? Some theories, of which several may be true:

1\. Because it's just hard

2\. Because the planning was mishandled, and key teams didn't get assigned the tasks with enough time

2a. ... in fact, it was an incredibly late idea to begin with

3\. Because there was no single person in charge of the effort who had enough organizational clout to override each team's existing pressures/deadlines

4\. Because this is actually two problems:

         a) make a bunch of separate teams do different related tasks
         b) have complete them all by a universally agreed deadline

... and b) just isn't anywhere near as important as a).

Any ideas? I don't know about you, but understanding these organizational problems is _far_ more interesting to me than just dissing Microsoft.

<comment><USER7> > No, not "because Micro$oft sucks!"

Yeah really, because that. They have the resources to do it well. They have the ability to say "no, didn't work, this sucks, it's not being released today (or ever)." They chose not to do do these things. They suck. It's that simple.

I can do a one man effort and screw it up. They're meant to get results worthy of a company with a market cap of more money than god. If they can't AND they release a festering pile of garbage. "Microsoft Sucks!" Is a perfectly reasonable response. You don't praise Ford because they are capable of releasing may cars that don't explode.

</comment></comment><comment><USER8> How did the generation of programmers before us ship products on physical media where they have a single shot to get it perfect and manage to do so a good portion of the time while we with our continuous integration systems, code completion and unit tests can't seem to get it right after many attempts?

It's mind boggling. It should be clear to anyone paying attention that what we are doing now isn't working so cargo culting the latest thought leaders is just going to help you produce the same bloated garbage everyone else is. I'm ashamed at the quality of product (some exceptions obviously) we have been putting out lately as an industry.

I don't have the solution, but it seems to me that we have to slow the hell down. Enough of the 60+ hour a week agile death marches. In order to produce products we can be proud of we need to take the time to consider them completely. "Move fast and break things" is how McDonald's operates, I want to do French Laundry level work where nothing gets to a customer without it being an example of the best our profession can offer.

We need a Gordon Ramsey of code.

<comment><USER9> "Move fast and break things" really means "Move fast and turn a profit".

The pressure to show good returns to institutional investors is the cause of the drop in quality you are seeing.

Just like everything else in the US economy, Wall Street has caused the software industry to hyper focus on short term gains. Quarter after quarter they are draining the nation, and when the bubble pops they will be the first to look elsewhere for new investment opportunities.

</comment></comment><comment><USER10> "...this isn't an unfortunate one-off...a pattern of behavior ...Microsoft's storefronts are always a snarl of broken technology with horrendous usability"

That sums up the situation so well. I never cease to be astonished by this sad fact.</comment>


C++ RPC Library – Based on Protobuf, and Core Library Independent of Network - <AUTHOR> https://github.com/IronsDu/gayrpc <comment><USER2> As entertaining as the product name is, gRPC and gRPC-Web exist...

<comment><AUTHOR> ^_^

</comment></comment><comment><USER3> thanks for the post, i have to brush up on my mandarin to read it tho

<comment><AUTHOR> But now, i not have time to write english doc.

</comment></comment><comment><USER4> Disconcerting and suspicious to see so many Chinese codebases being advertized here. I feel that there is some nation state activity behind it. There is a ban on Chinese work products in sensitive industries (aerospace/defense, military, and government), and other industries should follow suit if they care about security.

<comment><USER5> I'm afraid your comment has broken the HN guidelines, as you'll see if you review [https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html).

If you have evidence beyond "I feel", please let us know at email@example.com so we can investigate. If you don't, please don't post like this, because baseless insinuations poison the community.

Many previous explanations about this can be found at [https://hn.algolia.com/?query=by:dang%20astroturf&sort=byDat...](https://hn.algolia.com/?query=by:dang%20astroturf&sort=byDate&dateRange=all&type=comment&storyText=false&prefix=true&page=0).</comment></comment>


Di-positronium created from electron + positron; one step closer to "gamma-ray annihilation lasers" - <AUTHOR> http://news.bbc.co.uk/2/hi/science/nature/6991030.stm

<comment><AUTHOR> If I were a dictator of a country, I'd take 10% or so of the GDP and mandate the creation of gamma-ray annihilation lasers in 10 years.</comment>


The Incredible Shrinking Plane Seat - <AUTHOR> http://online.wsj.com/news/articles/SB10001424052702304384104579141941949066648 <comment><USER2> The interesting thing I find here is the economics of this decision.

Using Air Canada 777 as an example from SeatGuru [http://www.seatguru.com/airlines/Air_Canada/Air_Canada_Boein...](http://www.seatguru.com/airlines/Air_Canada/Air_Canada_Boeing_777-300ER_77W_new.php)

Adding the 9th seat per row results in an extra 43 seats per plane.

Factoring in only the economy section of the plane, there are 344 seats in the 8 seat configuration, 387 in the 9 seat.

Estimate a long-haul flight costs $1000, that makes an easy calculation of $43,000 extra revenue for the airline. That is only an extra $125/seat in revenue compared to the 8 seat configuration.

Apparently it costs 1 gallon of fuel/pound on domestic flights, so let's say is 30% more on long haul flights and the average person including luggage weighs 200lbs (170lbs for the person plus 30lbs luggage). Jet fuel is currently $2.92/gallon, so let's say the airline buys it at a reduced rate of $2.70, and our 30% brings us to $4.00 per person.

I'm guessing this is much of what airlines are doing with Premium Economy, but you pay a $300+ ticket difference per seat, so for each row in Premium Economy, the airline is making $1000 extra profit over the same row in Economy.

</comment><comment><USER3> In addition to the seat-width, the other dimension that has been shrinking is the seat pitch - the distance between rows of seats. Seat pitch, of course, determines how much leg room you have, whether the seat in front of you hits your knees. A low seat pitch can be extremely uncomfortable - and airlines have been been squeezing seats closer. A seat pitch of 31" seems to be the norm now among most major carriers, down from 32" or even 34" in the past. Now, you have to pay extra to get Economy plus/premium seating to get the 1" of extra leg room, that used to be the standard in the past.</comment>


Spammer expose entire operation, and details of 1.3bn through bad backups - <AUTHOR> http://www.csoonline.com/article/3176433/security/spammers-expose-their-entire-operation-through-bad-backups.html <comment><USER2> Earlier submission: [https://news.ycombinator.com/item?id=13802227](https://news.ycombinator.com/item?id=13802227)

<comment><USER3> This one is a better article.</comment></comment>


Show HN: Python streamexpect, truly cross-platform expect library - <AUTHOR> https://pypi.python.org/pypi/streamexpect <comment><AUTHOR> I thought I'd give a little more information here about why I wrote this library.

A good expect library can save a lot of hassle when dealing with a command line interface to a system when that's all you have. I've gotten a lot of mileage out of Pexpect, but a constant thorn in my side was the lack of support for using Pexpect on serial devices under Windows, because Pexpect requires a file number to work with. I set out to patch Pexpect with functionality to allow it to work with generic streams (anything that defined a read function), but the code in Pexpect didn't really lend itself well to the updates.

About this time I was also dealing with the headaches of string/binary differences between Python 2 and Python 3. I decided that anything I wrote needed to take the same hard-line approach to text vs. binary that Python 3 did.

streamexpect is the end result of that. For 95% of cases, it requires only a single line to initialize:

        with streamexpect.wrap(some_stream) as stream:
            # do stuff with wrapper

Under the hood, there are clear delineations of responsibility that should make it very easy to extend where necessary.

Please let me know your questions, comments, and suggestions!

<comment><USER2> pexpect maintainer here. If this is any kind of criticism on the complexity of pexpect, then you're perfectly correct!

Good job, pexpect is unfortunately too old and widely adopted to go changing API for pythonic sake, its freshly due for a rewrite. Trying to mimic a tcl/expect pattern in python made for unpythonic patterns and user confusion. It was far less confusing in 2002 when most python developers had former experience in tcl/expect -- most people these days never heard of it.

I feel an expect replacement would best work with the asyncio.StreamReader and asyncio.StreamWriter interfaces, and allow expecting on multiple possible patterns and streams at the same time, using asyncio.wait_for -- which supplies its own timeout functionality, and of course interoperates with the asyncio event loop.

Making a python3 asyncio-only library might not be attractive for yesterday's python users, but it might ensure nobody will rewrite it all over again in another 12 years so!

<comment><AUTHOR> I love the idea of integrating with asyncio, and it definitely makes sense to integrate it now while asyncio functionality is still fresh. I've added a tickler issue to the GitHub repo and you'll hopefully see it in 0.3.

And thanks for the good work you do maintaining Pexpect. I wasn't kidding when I said I have gotten a LOT of mileage out of that library!</comment></comment></comment>


Show HN: A Mac Desktop App to Manage S3 and Dynamo - <AUTHOR> https://getcommandeer.com <comment><USER2> How do you manage AWS credentials? We use short lived credentials that are stored in the standard file system location and expire frequently, can your application just use these? We gave up exporting permanent credential a long time ago.

<comment><AUTHOR> We currently use the long-lived user keys, but are working on short-lived role keys as well as support with Okta.

</comment></comment><comment><USER3> Electron? :(

<comment><AUTHOR> Yes, we will be releasing the app for Linux and Windows in the next few weeks. Electron is enabling this. Just make sure you have your RAM upgraded, and you will be fine :)</comment></comment>


Ask HN: Best book for an overview of deep learning applications? - <AUTHOR> Hi HN, one of my goals for 2019 is to get more hands on with deep learning. I'm looking for a resource that covers the different applications of deep learning, such as time series forecasting, text analysis, reinforcement learning, and anomaly detection. I'm not looking for code samples, but instead an understanding about how to go about designing networks when facing different types of problems. <comment><USER2> deep learning for computer vision by pyimagesearch</comment>


Emotional Interface Design: The Gateway to Passionate Users - <AUTHOR> http://thinkvitamin.com/design/emotional-interface-design-the-gateway-to-passionate-users/ <comment><USER2> I think the author makes a valid point re: emotional design, but he also seems to confuse "pleasurable" design with his own personal taste (which appears to be bright and bubbly with heavy illustration). I'd say that sites like Reddit (and HN), Basecamp, Craigslist, Teuxdeux have their own visual personality (that their users enjoy) despite lacking animated cartoon birds. Pleasurable is subjective and will vary widely depending on audience.

I like the modified Maslow's Hierarchy, but I think he's overemphasizing the top piece in this article. Businesses have enough trouble achieving the bottom three pieces (Functional, Reliable, Usable), and often skip them to aim for Pleasurable. [http://carsonified.com/wp-content/uploads/2010/04/maslow- hie...](http://carsonified.com/wp-content/uploads/2010/04/maslow-hierarchy- interface-design.png)

<comment><USER3> When I saw Basecamp as something that's a counterpoint to a 'pleasureable' example I felt like he was missing a vital point - emotional is relative.

To people who value tools that do their job and get out of the way, Basecamp beats Wufoo.

</comment></comment><comment><USER4> I don't get his examples. He talks about designs being both "usable and pleasurable", but I don't see any real difference in the designs. They both have fairly flexible layouts, attractive backgrounds and well formatted text. The only element that WuFoo has that BaseCamp does not is a "warm" color scheme.

The rest of it basically boils down to "give your users feedback, but do it in a 'fun' way." I mean, that's a good lesson to have, but its nothing earth shattering.</comment>