JavaScript Is Bad - <AUTHOR> https://ror6ax.wordpress.com/2019/08/27/javascript-is-bad/ <comment><USER2> A certain subset of technical people seems to be unable to understand how it can happen that — what they believe to be — technically inferior solutions can win major market share and become the defacto standard for decades to come.

Don't get me wrong: I am not saying that JavaScript is great, but I am also not satisfied with the status quo of the discussion around it.

I don't really see how this contributes anything to improve the situation. Yes, a prototype was done in 10 days. Yes, the web scene has been vibrant and iterating extremely fast for a long time and that has left marks on the quality of the technology more often than not. But hey, instead of complaining, come up with something that is capable of transforming it to the better!

That's not easy and I suspect it's not solvable by technical means solely. So it's hard. And it's easier to just write blog posts that complain again and again.

<comment><USER3> Complaining is recognizing that there is an issue. This article is trying to raise awareness of some issues. It is a start! I do not think that not providing a solution to all (or some) issues invalidates anything that has been said. Having a solution is not a necessity. I may point out flaws in a system, but I do not need to have a solution ready for it, do I? The flaws exist, with or without a solution.

<comment><USER2> We've been stuck in this for at least a decade now. That is what I am referring to with "I am not satisfied with the status quo of the discussion".

The author of this specific article doesn't even seem to consider that there may be non-technical factors at play that cannot be fixed by coming up with (yet) a better language.

It's the same over and over again, unfortunately.

<comment><USER4> The discussion never resolves, and _will_ never resolve, because the participants aren't the same people - there's literally a constant influx of new, inexperienced developers facing the same issues in a slightly new context (and hence using new language to describe it).

For another example, just go to Reddit's front page. It's the same trendy questions from young people a decade earlier as well.

You'll know an online community is on the path to dissolution when it can 'resolve' problems for good.

The same applies to HN: I'm sure my point has been made many times before, and will be made many times again here.

</comment></comment></comment></comment><comment><USER5> I've read it, just another piece with zero substance. So what's the author's point, why is Javascript bad according to him?

\- because there is no standard library and a lot of things are left to userland

\- because Axios error handling is less than ideal

\- because bugs sit long time in public repos unanswered

\- because some of the language unusual expression parsing quirk, that I've yet to find in a real program

\- because projects like Webpack have tons of funding via open collective, while other important libraries are done on a voluntary basis

I couldn't have put together a more random set of unrelated and largely irrelevant complaints if I tried to.

<comment><AUTHOR> I've tried to explain my point and provide some examples of how the problem manifests in the ecosystem of the language. While my writing skills may need work, I would not call the post random.

<comment><USER5> The stuff you pointed out could be said of any language, any ecosystem, couldn't it?

There is always some library that is not that well designed that got more popular than it should, little response from certain Github repos, some less than ideal language feature that is there due to historical reasons, important code maintained on a voluntary basis.

Tell me an ecosystem that does not suffer from any of these problems, and I will show you a language that hardly no one uses (when compared to Javascript).

This stuff is inevitable, it comes with the years, due to backwards compatibility, stuff piles up over time. Javascript has resisted particularly well.

If you don't like Javascript, switch to Typescript for me it's the enterprise language of the future, for doing both backend and frontend development.

<comment><AUTHOR> I won't start even bigger shitstorm by naming better languages in my opinion. Suffice to say I've never had problems sending headers or getting HTTP status code in any major language, except JS(examples are linked in the post).

<comment><USER6> I have never had a problem sending headers or getting http status code in JS. requite('http') is your friend in node. XMLHttpRequest is your friend in VanilaJS.

Your beef seems to be with a pile of convenience code added by some other projects.

</comment></comment></comment></comment></comment><comment><USER7> Rambling, rambling, rambling. There are so many wrong things in this post that I don't know where to start, from the design controversy to packages syntax without talking about the package manager. But other comments will debunk them better than me.

That said, a lot of people say JavaScript is bad. And yet this language is one of the most popular one in the world.

And people never ask themselves: "oh, maybe there is something I did not understand about the language/ecosystem".

> "There are only two kinds of languages: the ones people complain about and > the ones nobody uses."

Peace.

ps: also, it's not the tools that matter, but what you build.

<comment><AUTHOR> Some people never ask themselves "have I actually read what I am criticising?".

<comment><USER8> Your account is only one hour old, so some advice: learn to accept criticism if you're going to submit your own blog posts to HN.

<comment><USER3> In my opinion, it is a pretty lazy criticism if one could call it that. It implies that popularity necessarily implies quality. This is most definitely not the case.

"Rambling, rambling, rambling" part is especially unnecessary. How about quoting parts from the article instead and let us know what you think is wrong? As it is, I cannot imagine what I would reply to this "criticism", besides the fact that it incorrectly implies that popularity necessarily means quality.

</comment></comment></comment></comment><comment><USER9> I tried C, C++ and Java at university before I trying JavaScript. For me JS was the language that made programming fun and exciting.

Your code didn't have to compile, you just write code and debug it in real time and it ran on both my phone and my computer. For me, the web console felt like magic, playing around with all the quirky APIs the browser offered.

Later, I realized I could buy a domain and then have my js available to anyone who went to my website. It felt like the sky was the limit.

Then we got into hardware, and I realized that I could write js using Johnny5 that ran on my Arduino. Without knowing it, I used Node.JS and that opened the ability to start writing simple backends.

Eventually, I realized my code looked quite bad, nesting callbacks like crazy (which I later learnt was called callback-hell), but at the time, Promises became a thing and without knowing it, I kind of grasped the concept of async functions.

I moved on to creating mobile apps using Phonegap; it was really cool and worked well until you realized that there are slow Android phones to and you had to think about performance.

That lead me to try React Native and all of a sudden I had apps running native UI on both Android and iOS. It also introduced me to Objective-C, Swift and how to deploy native apps.

What I am trying to convey here is that Javascript was fun and exciting early on, I could stack knowledge quite easily and pivot into multiple roles with very low threshold.

Sure, there are many quirks with Javascript but in the end, I'd say it's a part of the language and what makes it fun. Just look at React Hooks. :)

</comment><comment><USER3> Why was this submission flagged? I really would like to have an explanation. One may disagree with it, it may be controversial, but does this really require it to be flagged? After all, it is getting upvotes! I am not exactly new here but I have no idea what it means for a submission to be flagged or why it should be flagged vs. just not voting it up.

</comment><comment><USER10> We need to separate two things.

One is that JavaScript is bad. It's true, but strongly typed languages built on top of JS improve it immensely. Most people today use TypeScript, I used to use Flowtype but the history went the other way, oh well. So that part is being fixed.

The other part is the package management, and the ecosystem, and that's almost independent on JavaScript the language. And well, the situation there sucks so much that I needed to escape to backend world, since I don't want to deal with broken webpack plugins anymore.

Don't get me wrong, it's also broken in python and golang (my current languages), but people at least ADMIT it's a problem, and in golang folks try to fix the vendor/ mess with modules. (Python... ugh.)

I wish the npm mess was getting better, but while yarn at least solved some sub-problem, the whole thing doesn't get better. Back to golang I go, I feel happy here.

(Well unless I have to copy paste Apply for the 30th time.)

</comment><comment><USER11> Javascript is extremely flexible and unopnionated. It is very easy to write horrible code in it and very hard to write good code. The same goes for assembler. But Javascript is still a nice language to compile to, e.g. from Clojurescript (which is a fantastic and very opinionated language). It can run virtually anywhere and modern Javascript engines start up very fast, making them ideal for stuff like AWS lambda and even CLI tools.

<comment><USER12> To me, the fact we need another language to compile to it, is just another proof the language is broken

</comment></comment><comment><USER13> I'd argue that JavaScript was - coincidentally - a lean design. Meaning: minimal MVP, go to market early, grow with consumer demand. Sure, this results in a less intellectually pure programming language, but instead in a rugged workhorse that remains widely accessible. Not sure that's a bad thing.

</comment><comment><USER12> After reading almost all comments, all of this make me think that your positions on the debate are based on psychological characters. Some people are _idealists_ : as Javascript is in some state, but could have been a lot better if history had been different, they CAN'T be happy, they won't. They need to find THE right tool before working with it (I'm an idealist). Then, you have other kind of people which are more _adaptative_ : they tend to accept the situation "as is", and try to withdraw the maximum of benefits of the language. It's easier for them do deal with the issues because they accepted the situation initially. BTW, I think those people are more happy in their daily life. And last, the _negationists_ : they refuse to accept the truth. Those people rely on wrong things (like trends) to evaluate the quality of the language. For them, if JS is used so much, it MUST be good, even if they're not sure why. They believe world auto-regulate itself with natural selection (like ultraliberal people). Plus, if they start to use it, they don't want to hear it's bad because it would question their choice, and by extension, their intelligence.

</comment><comment><USER14> If there's something developers like to complain about it is JavaScript and JIRA among other things...

I agree with the overall thesis but do not like the presentation. The world is run by hacks one uglier than the other. Javascript, despite its faults, had some good parts that let it grow to the size it currently is. Yet I do not know do we need more preaching about that JS is outdated and we should move on, I at least have already shifted my focus to a new more productive language (granted TS isn't that big of a jump). JS to me is legacy, and I am expecting it to be slowly phased-out as soon as better alternatives become available in the form of WASM or by compiling to JS.

But JS had a good run and contrary to a lot of folks who keep complaining about it, I appreciate what it gave us in the form of simple package-manager (npm was revolutionary at the time, and yes it has its faults). All the amazing frameworks and libraries people have put time and thought into (React, Vue etc) which may have not always been the most bug-free, but I see the proliferation of libraries as a good thing - JS ecosystem has always been constantly changing. When the barrier for creating libraries has become so low, it accelerates the adoption and propagation of fantastic new tools that constantly evolve. Sure, I would like to have also the reliability of the more mature ecosystems but what can you do?

I think I have dabbled so long in JS that it doesn't bother me that much anymore. I mean, who can keep questioning why houses look like they do or why cars drive in certain side every day? It just is what it is. I'm busy building stuff so it feels like waste of my time to keep ruminating on these things. And well, I do mainly TS now so it's not that bad.

</comment><comment><USER15> English is bad. JavaScript is bad. US customary measurement system is bad.

And you still have to deal with them all. This site is famously written in something cool that's not JS (EDIT: I thought wrongly that it was Perl). Oh, what's that `hn.js` in the Sources? And you're back to using JavaScript.

JavaScript may be bad, but you need us JS devs to do what we do. We are vital to the advancement of civilization as long as web browsers relying on JS are an essential platform for human communication.

I recently started writing in Golang--it's great! Really enjoyable. The ecosystem is making me act like a better developer. Golang Is Good.

But JavaScript, that's my job. JavaScript isn't going away. We are making it better. We are making better things with it. So "JavaScript Is Bad" all you want. You're still reliant upon it. It's still essential. It's still going to be the first programming language of many developers, especially the self- taught. JavaScript is eating the world.

JavaScript Is Bad. And I'm a bad, bad man. If you can't beat 'em, join 'em.

<comment><USER16> _" This site is famously written in Perl."_

HN? No. [https://en.wikipedia.org/wiki/Arc_(programming_language)](https://en.wikipedia.org/wiki/Arc_\(programming_language\))

<comment><USER15> Thanks! Correction attempted!

</comment></comment></comment><comment><USER17> Javascript is fine. It has first-class functions, a minimal but functional metaobject protocol, lambdas, etc. It is also fast and has familiar syntax to work with. There are many worse programming languages out there. I admire the "everything that is popular is wrong" maxim (it is quite popular), but blaming JS as some sort of ultimate evil is somewhat unsubstantiated.

<comment><USER18> It is exactly because it's so bad (forgiving) and availability (browser) it became popular. Just like many other tech.

<comment><USER17> Being forgiving and being easy to learn are good things. The internets are littered with the graves of unforgiving and hard to learn languages.

<comment><USER18> Yes. Unless you have odd, undefined or unexpected behavior.

</comment></comment></comment></comment><comment><USER16> _" how our pluralistic ignorance allowed toy language to first become de-facto language in the browser"_

I don't know that Eich had lots of obvious choices. I imagine Lua was still pretty obscure in 95. So the choices were probably tcl and lisp if he wanted something lightweight and dynamically typed.

<comment><USER6> Lua makes JS look positively divine.

<comment><USER19> > Lua makes JS look positively divine.

Mmm...just had a quick glance at the language reference. Couldn't see anything that would make it inferior to JS. Care to elaborate?

<comment><USER6> Who needs array length?! That's like, dirty. Write your own by iterating via all elements!

What do you mean you want to be able to get, like, keys of your object?! No one needs that! Write your own by iterating through the elements!

It's a name of a variable! Unless it is an identifier of a field. But we write it the same way. Here we even provide you a doc of this being a "got ya!" We documented it, so it is cool.

Don't even get me started on error stack using pcall() nonsense.

And if you really want to have a good time try figuring out how local variables scope interacts with each other... or with a goto.

I can go on and on and on.

</comment></comment></comment></comment><comment><USER20> This is a classic on Hacker News: Some smug elitist rambling about whatever's currently popular by being super nitpicky because it's not their preferred solution.

How about writing a blog post about what you would use instead of JavaScript and why it's good instead of this? That might even help someone.

</comment><comment><USER21> I don't disagree with the article. However, I'd also argue that JavaScript is good in that it is the best option for functional programming which has an approachable syntax and jobs available.

I guess what I'm saying is that I'd love to be able to start using a better language that allowed me do functional programming on the job. However, I'd rather keep using JavaScript than use a better language that didn't allow me to use functional programming.

<comment><USER22> Have you ever used... A functional language? JavaScript has lambdas and functions, but I would hardly call it functional. Having types and immutability and pattern matching are pretty important. Being able to run multithreaded would also be very nice.

<comment><USER21> With Lodash I also get currying and sort of pattern matching (via conditional execution). To be fair, I probably should have said that I was considering the situation when commonly used libraries are available.

Immutability isn't enforced, but I have all the tools that I need to choose to handle data immutably.

I completely agree with you on types though. I don't know that much about TypeScript, but perhaps it would help?

You definitely have a point that functional programming would be much better in JS if these features were built in and/or enforced. However, the problem is: what's the alternative? Haskell/Clojure/Ocaml jobs aren't exactly common. And at least in terms of Haskell and Ocaml, I've found the syntax to be pretty arcane.

</comment></comment></comment><comment><USER23> There was never ever a design board for the Internet we know today. Actually when looking back many things look like ducktapes on ducktapes on the Internet and we can be happy that a whole industry takes care on it so that it will keep working reliable. I also think that Webpack and OpenSSL are two completely different things (it's like comparing apples with oranges)

Nowadays you either deal with JavaScript one way or the other or stay away from the browser entirely. Deal with it.

Btw. I also think that JavaScript has many flaws which are based on history... but from a practical point of view I don't have time to reinvent the Internet or time get too much bothered by it ;)

</comment><comment><USER24> Where do you get the info that OpenSSL only gets 100k $ a year? I see 2 exceptional sponsors, and 5 Platinum sponsors. That comes down to at least 400k $ a year. This is not including other donations they receive.

</comment><comment><USER25> The word "popular" can mean widely used or widely liked. I think popular in the case of javascript is more the former but people often imply the latter. By usage, death and taxes are popular too!

<comment><AUTHOR> Unfortunately, I keep hearing from many developers that JS is popular and therefore cannot be "that bad". Which it is, in spades.

</comment></comment><comment><USER26> I would very much love to read a prequel article that defines "bad". I define a "good" programming language and framework as having as many of the following properties:

* It can quickly solve a problem, e.g., build a webapp that uploads cat pictures.

* It is here to stay, i.e., my investment in using and learning that tool won't be subject to hyperinflation.

* It has a good enough base, i.e., I can quickly recruit someone to scale-up my problem solving.

According to my definition JS _is_ good, or, at the very least, is good in 2019.

<comment><USER3> It really depends on the type of problem. In many cases, C was really great to use to quickly solve a problem. It is here to stay, and has a good enough base.

<comment><USER26> We seem to a agree. C is also good (according to my definition) to solve problems in the area of system tooling. I tend to see programming languages as DSLs for a specific problem domain. C has become the DSL of software that lies close to the hardware, whereas JS has become the DSL of webapps.

<comment><USER3> Yes, I agree. I do not stick to one "ultimate" programming language. I pick one (or two!) based on the problem at hand. I once used FastCGI + C because it made more sense and was quick to implement. :D

</comment></comment></comment></comment><comment><USER27> So build a better browser with a better language and devs can adopt it. Put up or shut up. You know what's almost as old and quickly written as JS? Complaints about JS.

</comment><comment><USER28> can anyone tell me why he says that the axios snippet is wrong?

<comment><USER29> because nested ifs, I think.

<comment><USER30> Idk where he was going with that, I think he either doesn't know what nested means or he was referencing different codez

</comment></comment></comment><comment><USER31> but TypeScript is great, so JavaScript is not so bad?

</comment><comment><USER32> Hammers are Bad. Look at all the modern tools which are build with sophistication, and look at hammers, and everyone is using hammers.

</comment><comment><USER33> Citing the Wat talk in 2019? That's about as tacky as JNCO jeans

So the bazaar always wins, hmm

</comment><comment><USER34> This piece reads like the author didn't even bother to read over it once before posting it. All over the place. Are there no standards here for things to be upvoted? This is pretty bad writing.

<comment><USER35> "javascript is bad" == upvotes because it resonates with so many people

</comment></comment><comment><USER36> Does it matter?

</comment><comment><USER37> It's just the largest, not the greatest, job creation scheme since the building of the egyptian pyramids.

So churn we all...

Hail the Powers of Babylon!</comment>


Ask HN: Making money as an undergrad - <AUTHOR>

I have been experiencing trouble securing a summer internship. I've been looking for something in the general purview of my machine learning and statistical analysis but the offerings to undergrads aren't great for such things.
I've had thoughts of freelancing, app development, or  some small SaaS venture, but all seem risky. Any tips how I might go about putting my skills to use?
Background: I can program pretty much anything in Java and Python (and other languages). The bulk of my experiences and interests lie involve machine learning in the context of bioinformatics and model development.
Alternatively, if someone just wants to hire me, shoot me an email and I'll send you a copy of my resume. <comment><USER3> Worth noting: There are no jobs in machine learning and statistical analysis.

Jobs come in the flavor of Web Developer in Ruby on Rails, Web Developer in PHP, and occasionally Web Developer in ASP.NET or Enterprise Java. That's 98% of the market, with everything else from finance to space probes to self driving cars and those things you're looking for crammed into the remaining 2% (none of which will be advertised as positions on Monster.com).

Expecting to find a machine learning job with your machine learning degree is akin to expecting to score an internship at Indiana Jones & Co. with your archaeology degree.

I have a degree in Mechanical Engineering specialized in Robotics. Care to guess what I actually do for a living?

</comment><comment><USER4> Two things:

1\. Sometimes you just have to take work that isn't ideal to pay the bills. I worked a full time job doing nights as an ecological surveyor on building projects during the second year of my undergrad. I didn't go to lectures, just had to keep up with the work on my own time. Then I took on extra work doing freelance iOS development on top of that in my final year. I worked like a dog but it was worth it (not least because it paid for me to live and study). Don't have your heart set on getting a job that uses all your skills - <USER2> have to hustle.

2\. I have a ton of spare projects ranging from exploratory data analysis to computational biology software development, and from hardcore pure bioinformatics through to applied crop engineering for food security. I've never supervised a student working remotely before, but I'd be willing to give it a shot if it's a good fit. I can usually find money to pay my students (nothing huge, but living plus a bit money), though again I've never done it internationally. Shoot me an email: firstname.lastname@example.com. Same goes for any other similarly placed students reading this.

</comment><comment><USER5> From your profile I see you're a physics major. Which year of your undergrad are you in?

Being a physics major myself, my advice is probably reasonable. In applying to internships make sure your skills are clearly displayed, applying for jobs with professors is probably the best thing for a freshman or sophmore.

If you haven't done any major programming, I'd suggest contributing to open source projects or building something that takes concerted, consistent effort, to show companies that they can actually use you.

Work of choice will be really hard to come by, unless you're really lucky; happy hunting!

<comment><AUTHOR> I'm a sophomore and a very capable programmer. Physics is beautiful, but I don't expect to be getting paid to lose my head in the clouds anytime soon. Much easier to secure employment doing something in the realm of software development

</comment></comment><comment><USER6> Hey, I'm a 21 year old undergrad who's been freelancing part time. I primarily use oDesk and as long as you have a good understanding of english you've pretty much got most jobs under your belt. Execution, however depends on your skillset. I started out at $5 per hour back in 2011. These days I make(on average) $100/hour working on small-medium tier Ruby on Rails and general front-end projects.

Good luck and I hope you find what you're looking for!</comment>


The Psychology of Loners and Introverts - <AUTHOR> http://mobilepaper.timesofindia.com/mobile.aspx?article=yes&pageid=12&sectid=edid=&edlabel=TCRM&mydateHid=11-09-2010&pubname=Times+of+India+-+The+Crest+Mumbai&edname=&articleid=Ar01200&publabel=TOI

<comment><USER2> University was great for intellectual stimulation, because there were always interesting people around, and interesting discussions.

I haven't seen anything similar in the real world (which excepts online.)

<comment><USER3> Online still hasn't trumped university for me. In university it's practically impossible to not meet people that are very different from yourself, from completely different backgrounds, with polar opposite views from yours.

On the internet, simply because of the nature of similar people congregating, it's hard to avoid groupthink and meet people who are wildly different than you.

<comment><USER2> Just to be clear: I didn't say online trumps university.

</comment></comment></comment><comment><USER4> The formatting is hell to read and Googling for a better one goes back to that copy. But it's worth it!

<comment><USER5> It's not just poor formatting, the person who wrote this simply doesn't speak English well. For example:

 _And this majority has never been able to fathom or accept the loner a mentally sound individual with non-aligned sensibilities,who,for reasons genetic and/or nurtured,simply views the world differently,and correspondingly resides in it unlike the rest.Know man is an island,too._

<comment><USER2> It's unnecessarily convoluted but correct, eg "accept the loner [as] a mentally sound individual" is a legitimate construction and "[K]now man" is a pun.

Philosophers tend to write this way. It's just that it's not punchy and to- the-point, like business writing or advertising.

<comment><USER5> Know man is obviously a pun but there should be an as or a comma after loner. I'm a philosophy minor so I understand flowery language but I don't accept it when it confuses the point. Hume managed to be quite intelligible despite living hundreds of years ago.

</comment></comment></comment></comment><comment><USER6> Do articles like this always emerge at a certain point in the boom bust cycle or tied to politics? Because it seems like right now the societal "noise" has peaked, and the 3/4 populace needs a refresher.

<comment><USER7> It's funny that this shares the HN front page with this Wired piece today, proving many of the Times' points: <http://news.ycombinator.com/item?id=1683618>

Despite the ridiculous punctuation and formatting, and Indianized English, its really refreshing to get a different perspective. Just pinch and zoom;)</comment></comment>


Send snail mail through an api - <AUTHOR> http://livedeliver.com

<comment><USER2> ...PHP?

<comment><AUTHOR> more sdk's to follow</comment></comment>


Linux vs bsd network stack - <AUTHOR> http://www.reddit.com/r/linux/comments/2d5wzg/linux_network_stack/ <comment><USER2> As a Unix admin who deals mostly with Linux, reasons I'd rather use the FreeBSD network stack:

-Primarily, not dealing with iptables

-Relatedly, love working with ipfw[1] or pf[2]

-Interface names are based on the network driver, which is more consistent and useful (have a question about interface em0? man em[3] )

-A sane ifconfig[4] which is, you know, still updated

-Relatedly, no need for a bunch of different/new/inconsistent config programs (ip vs. ifconfig vs. iwconfig)

-CARP[5] is pretty amazing for redundancy and is stupid-simple to set up in FreeBSD10

-Both the OS and the network stack have been tested for IPv6-only support

</comment><comment><USER3> I love this. I'll refer back to my post from several months ago about the poor performance of the Linux network stack ([https://news.ycombinator.com/item?id=7286584](https://news.ycombinator.com/item?id=7286584)).

> 1\. Data Plane Development Kit, which lets you skip the kernel IP stack > (which takes thousands of CPU cycles to process) and do packet processing in > userland taking just tens to hundreds of cycles per packet. > [http://dpdk.org/](http://dpdk.org/)

I wish OS developers saw this as a problem. There is no reason kernel stacks should be so slow for tasks where all processing is done in the kernel. (For packets destined to userspace, you've got the syscall overhead to deal with.)

I recently tested the Linux network stack's PPS performance with an Intel X520 10GbE NIC. I used Debian testing, with the 3.12 kernel. My destination machine was an i7-3930K at stock speed. I wrote a simple kernel module adding an NF_IP_PRE_ROUTING hook returning NF_DROP with no processing, which would be the simplest possible code path. For a packet generator, I used another older machine with another X520, using the "pfsend" tool included with PF_RING, and the card in PF_RING DNA mode. That was easily able to saturate the link at line rate (14.8M PPS).

The result: the kernel was only able to sustain about 2.8M PPS.

I then loaded the DNA driver on the destination machine, used the included "pfcount" tool, and no packet drops - it was receiving the full 14M PPS.

I tested DPDK recently and had similar results.

I also modified the Linux ixgbe driver ixgbe_clean_rx_irq() function, and added a step in between the "fetch packets from RX ring" and "put packet in SKB and send to network stack" functions. Even when I added a bunch of useless comparisons for each packet, I was able to get ~12-13M PPS. I could get line rate by just dropping and not doing any processing.

sidenote (not included in the above post): I also tested FreeBSD. I'm just going off memory here, but it did sustain higher PPS than Linux (same hardware) but not anywhere near line rate. So netmap, PF_RING, DPDK, others are still the way to go if you want to do line rate processing.</comment>


Ask HN: Can I include uncompensated work in next funding round? - <AUTHOR> I am a co-founder for a startup. Near the outset of the company creation, we did a "friends and family" funding round. Since then it has been about a year, and we are going to do another round. During that time I, and the two other co-founders, have been working about 20 hours a week (in addition to our unrelated "day jobs") to keep the company growing and expanding. At the upcoming round, are we allowed to include these "uncompensated work hours" (fair market rate * hours) alongside the newly raised funds, and so be diluted less then the investors from a year ago (who have not added uncompensated value in that time as we have)? <comment><USER2> That isn't exactly uncompensated since you presumably issued stock options (or whatever they're called these days) to yourselves. It's also possible to "take money off the table" in a round in addition to your stock.

[https://bothsidesofthetable.com/should-founders-be- allowed-t...](https://bothsidesofthetable.com/should-founders-be-allowed-to- take-money-off-the-table-16f3a5e6b345)

[https://www.quora.com/Should-founders-get-money-off-the- tabl...](https://www.quora.com/Should-founders-get-money-off-the-table-How- should-they-approach-VC)

</comment><comment><USER3> Did you pay tax on this "uncompensated work hours"? The people who put money in had to pay tax on their contribution.

The answer to this question is you can do whatever you like if the other investors agree.</comment>


How to read 462 books in one year  - <AUTHOR> http://latimesblogs.latimes.com/jacketcopy/2009/01/how-to-read-462.html <comment><USER2> How many of those books are technical books? How many introduce new concepts?

</comment><comment><USER3> Loved the description of how Weinman ingests whole passages of text as single visual units. I want that!

</comment><comment><USER4> That reminds me of a hot-dog-eating contest.</comment>


Embrace your startup failure – the faster you fail, the better - <AUTHOR> http://uk.techcrunch.com/2009/10/07/embrace-your-startup-failure-the-faster-you-fail-the-better/ <comment><USER2> _We went to Seedcamp, and spent three grueling days analysing our product._

Seems like we're in some kind of time warp here. I understand that with modern technology, things can happen faster, sometimes much faster. But how does spending 3 days determining that a business is not viable constitute a failure?

I really hate the whole "failure is OK" meme. Sure, we all understand that not everything goes perfectly all the time. But we also have those "Is this really worth it?" moments. For some of us, this happens all the time - the harder the project, the more often if happens. Sometimes all that separates _real success_ from _real failure_ is pushing through these moments, determined not to allow speed bumps to stop you.

I'm not suggesting that we will never fail or that we should never give up; sometimes that _does_ make sense. I am suggesting that success is elusive until we adopt a personal policy of "failure is not an option".

OP was not a failure and not an example of this.

Failure is not OK.

<comment><USER3> Failure is not an option, as in "Never give up, never surrender?" <http://www.youtube.com/watch?v=bI5hi4c4y9k>

<comment><USER2> I'm at work, so I can't access your link. I don't know what you were getting at.

I do know that if you think that failure is an option, the probability that you use that option increases dramatically. I'm not trying to use some new age self-help B.S. (well maybe just a little), I'm just suggesting that "state of mind" is critical when taking on difficult projects. Almost everyone I know who has accomplished anything big (including myself) had many opportunities to quit. Failure would have been easy. In fact, for a lot of software projects, there are many times when the whole thing looks hopeless, often right before a great demo or big sale.

I didn't care for OP's easy embrace of "failure" and tried to describe why. I hope that's what came across.

</comment></comment></comment><comment><USER4> It takes a lot of effort to admit an idea you get really charged up about doesn't have any viability in the marketplace. Interesting article; failing is a good thing most of the time.

<comment><USER5> We are dealing with the aftermath of this in my company right now. Our former CTO, though a brilliant researcher, was absolutely not in touch with the needs of our clients. He treated the business as an extension of his previous R&D work and rather than focusing on commercializing the research and with a focus on customer requirements...which _can_ be boring, like interfacing with large legacy data sources, he focused on the next cool and unproven researchy thing.

He's been gone for 6 months and we are _still_ digging ourselves out of the crater he tossed us into.

Amazingly, the next release of our software post-CTO, which, now that the reigns were off, _was_ designed to address very outstanding customer requirements, resulted in our first break-even quarter and our first cash flow positive month in the company's history. But we should have been at that point a year and a half ago.

Lesson to self: sometimes viability comes not from a cool idea, but from how that idea is packaged.

</comment></comment><comment><USER6> As Nietzsche said, "...if you gaze into the abyss, the abyss gazes also into you."

The fundamental tension with all entrepreneurs is the willingness to go to the brink of the abyss for your idea, but also have the wherewithal to pivot or pull back. The choice between zombie company (with no high market potential) and starting another idea is tough, There are some ways to make the decision, but a lot of what makes you pull back or dive in seems determined by luck.

</comment><comment><USER7> Critical reasoning is not failure.

</comment><comment><USER3> Is it possible that Sam Collins failed at failure? What if he and his team could have re-purposed their modular utilities/design for HTML5 support? There's still a great need for very high level utilities to aid domain experts in building specialized web services.

</comment><comment><USER8> And what if they did go on, changing their product and target audience while developing ?

Like many others, who started with an exciting idea but ended up with (a completely different yet) exciting product.

<comment><AUTHOR> The thing is that these guys are already part of a company with a different product and revenue stream. This was kind of a 'what happens if we change our product and audience' exercise, and fortunately, instead of spending months wasting money to find out it wouldn't fly, they spent a few days. I guess if they weren't already doing other stuff, soldiering on and seeing what happened would be an option - provided you have some way of paying your rent while doing so.

<comment><USER3> Ohhh, that sheds more light on the quick nix. Thanks jlees.

</comment></comment></comment><comment><USER9> fail early, fail often ;-)

"[x] early, [x] often" is nice rule. Why not apply it to failure?

<comment><USER7> Because failure is not the purpose?</comment></comment>


Best New Web Fonts of 2013 - <AUTHOR> http://typecast.com/blog/best-new-web-fonts-of-2013

<comment><USER2> Anything is better the uniquitous Helvetica Neue, such a dystopian font.</comment>


Ask HN: Best cross-browser testing service? - <AUTHOR>

I'm starting to get more in to polished web apps and find cross-browser testing a nightmare to say the least. What services of setup do you use for testing?<p>Bonus question: Do you test for IE 6, or have you finally crossed that off your list of supported browsers? <comment><USER2> You must support IE6 as bugs in IE6 got workarounds in all and every js code. Unfortunately still 50% of the web is IE6. If you ignore, you'll probably alienate most of corporate users.

I don't use a service, I self check against all browsers. I have each open in their own window or VM.

However there is one self service where you submit the url and they will render it on all known browser permutations. <http://browsershots.org/>

<comment><AUTHOR> Well I think 50% is a bit of an exaggeration... but I see your point. We had an onsite customer demo and cringed as she opened IE6. It wasn't pretty.

I'm on a Mac. I can't imagine the time I'd have to invest to setup VM's (or buy separate machines?) for each IE6, IE7, IE8 and soon IE9, because you know they don't play nice together :)

If you're on a PC, how do you run a Mac VM for testing Mac versions?

</comment></comment><comment><AUTHOR> Another side note: How do you deal with testing the ever-increasing number of pages in a web app? If I do a site re-design, there's hundreds of page "templates" that I have to make sure look good. What about true cross-browser regression testing?

</comment><comment><USER3> Take a look at <http://browserseal.com> \- it has some unique features for automation testing and it also comes with standalone versions of all major browsers</comment>


Community Standards (Clojure) - <AUTHOR> http://blog.fogus.me/2010/08/30/community-standards/

<comment><USER2> How hard is it to throw together an Emacs command that re-styles your parenthesis? I know the creators of Go went so far as a to make a program that converts "valid" Go code into "canonical" Go code. Parentheses seem like an easy problem to solve. If people can re-parenthesize their code with the press of a button, you can still have the community interoperability without having to sacrifice inclusiveness of personal eccentricities.

<comment><USER3> I don't know. I know that other IDEs have such functionality for other languages. I don't worry too much about the previous developer's style, because reformatting is a couple of simple keystrokes. As is reformatting it to another's standard.

I think it is a bit odd that anybody still has this argument.

<comment><USER4> It's not a matter of forming the parens into another style -- that's a solved problem. The problem is that sticking to individual styles can hurt the adoption or contributions to a project.

</comment></comment></comment><comment><USER4> The post mentions Clojure only tangentially. The larger point can apply to any programming language community.

<comment><USER5> Would be good to retitle it. This is a really excellent article and I suspect there are a lot of people who will skim past any link with Clojure in the title.

</comment></comment><comment><USER6> I think Doug Hoyte put it best: "An auxiliary theme of this book, one that applies to any programming language, is that in programming, style is not something to pursue directly. Style is necessary only where understanding is missing."

For instance, as a python programmer, I find it intensely annoying when people don't follow PEP 8 and might complain about it. But the fact that it's the most important thing on my mind means that I haven't really understood the code.

Unless the violations are truly flagrant (such as putting commas in the left margin rather than after the word), then move on with life. We programmers have enough to worry about without having to nitpick over others' paren placement.

</comment><comment><USER7> The essay itself is a pretty wonderful merging of form and content. At its very best, form helps to convey content. As seen here.

</comment><comment><USER8> Great. Thank you ;-))

</comment><comment><USER9>
      1) You lose credibility (whether its unfounded or not is irrelevant)
      2) People refuse to spend much time looking at your code

Over the years I've spent coding I've learned not to judge other coders based on their preferred style. Often enough I'll encounter really brilliant code whose style I find aesthetically unappealing (or "non-standard"), and I would have been worse off if I chose to ignore it. Some people just Think Different, and that's not always a bad thing.

Conversely, I've learned that prickly people who get red-faced upon encountering an unfamiliar style are often worth avoiding.

<comment><USER4> I can sympathize completely with your viewpoint, but in my experience it is a minority one. I tend to value code based on its technical merit as well, but non-standard formatting can work to distract from the very recognition of its beauty.

I would not want to disparage anyone their preferred styling. My only point is that you sacrifice a wider audience by sticking to it.

<comment><USER10> > I can sympathize completely with your viewpoint, but in my experience it is > a minority one.

It's much more common in C and descendants, which saw widespread use before the rise of the Internet.</comment></comment></comment>


The Sorry State of Convenient IPC (2014) - <AUTHOR> http://dev.yorhel.nl/doc/easyipc

<comment><USER2> I believe Q/Kdb+ to have the most natural implementation of IPC that I've seen, as long as you can keep all your gear inside Q.

To connect to another host you just do:

        remote:hopen `:server:port;

The port number is specified with -p on the command line. To send messages:

        answer:remote "sum x"

or if strings are repulsive to you you can pass in an expression like: answer:remote (`sum;x). `sum here is a symbol which is like a reference to a variable (or function). You can also pass a literal function for the remote host to execute, since they're just data.

You can also do asynchronous calls using the negative value of the handle (which is just a file descriptor int, wildly enough): neg[remote] (`incViews;`welcomepage;1)

Completely natural and simple. The only issue that I'm aware of is a 2gb limit for each message. Built-in functions can split your data into blocks to transmit large amounts.

The in-memory representation of data and the network representation are essentially the same. So there's no costly per-byte packing or unpacking going on, simply a memcpy(). In terms of performance and power use (environmental impact) this is a huge win.

It's trivial to expose data to the outside world by creating a web server. Simply define a function called .z.ph (or .z.pp for POST). This one evaluates the URL requested as a Q expression and returns the result as json.

        .z.ph:{.j.j value x 0}

Being able to build services as simply as this allows you to begin to think about the microservice as the unit of program composition, rather than classes, functions, or modules. Microservices have their own issues, but that's a topic for a later rant.

</comment><comment><USER3> Looks to me like DBus is actually pretty good and just needs some good implementations, some bug reports and some active contributors. I'm not super familiar with non-server applications in linux, but isn't DBus also in widespread use?

Most linux server apps I know communicate through the filesystem by leaving a .pid,.lock and/or a .sock somewhere and then setting up a custom channel using a handle to that. It feels kind of hacky, but at least you get to control the crappiness.

<comment><USER4> kdbus actually supports a whole load of fairly sensible communications models, with a reasonably simple API, and ditches the horrible bits of dbus. It's a shame that it's (unnecessarily IMO) bound up in controversy.

Edit: Poettering's talk about kdbus from devconf 2014: [https://www.youtube.com/watch?v=HPbQzm_iz_k](https://www.youtube.com/watch?v=HPbQzm_iz_k)

<comment><USER5> It doesn't seem very general purpose unless there are also non kernel implementations, and you can't sanely remote it as it relies on the kernel for authentication.

<comment><USER4> Its purpose is single host communication. If you assume a single host then you don't have to deal with distributing computing problems at all.

Not sure why having non-kernel implementations is a problem. Is the fact that there is no non-kernel implementation of Unix sockets / TCP/IP / filesystems / name-most-other-Linux-kernel-features a problem for you?

BTW I don't especially care about kdbus, but I do hate that there are no good, featureful communication primitives in Linux.

<comment><USER5> The article was looking for multihost too which is why I mentioned it.

There are some non kernel sockets implementations, but it is less of an issue as every kernel implements them, but kdbus is not implemented anywhere yet. It is also not possible to implement correctly in userspace as the security guarantees rely on a kernel, which is inconvenient. It is unlikely eg FreeBSD will ever implement it.

</comment></comment></comment></comment></comment><comment><USER6> Encoding complex objects is just hard (in the sense that it's going to get ugly, complicated, and usually both); however, just getting framing right (i.e. ensuring that client and server agree on where messages/objects start and end) at least solves many security problems. A simple binary (tag-)length- value works, as do schemes based on [http://cr.yp.to/proto/netstrings.txt](http://cr.yp.to/proto/netstrings.txt).

<comment><USER7> netstrings of JSON is my goto for "trivial protocol that people can easily implement".

<comment><USER6> That's fairly easy when most of your data isn't binary, and when you're using only languages with good UTF-8 support, yes.

<comment><USER8> And no cyclic references.

<comment><USER7> The Object::Remote wire protocol handles that fine.

</comment></comment></comment></comment></comment><comment><USER9> gRPC is probably worth mentioning in this thread (new since the article), though I haven't used it yet and have no idea if it can satisfy his asynchronous requirement.

He considers using message queues and dismisses the idea because "you're still on your own in implementing an RPC mechanism on top of that. And for the purpose of building a simple RPC mechanism, I'm convinced that plain old UNIX sockets or TCP will do just fine.".

In my experience, getting an arbitrary sized message from A to B over a potentially unreliable network is the difficult bit and implementing a basic RPC mechanism is pretty easy. I did a project that required a lot of IPC and ended up using nanomsg (also not mentioned in the article.. it's very similar to zeromq) for [fast] reliable message delivery and wrote my own basic RPC layer on top of this (NanomsgRPC - currently C# only ..). This worked pretty well for me.

A note on nanomsg though: I wouldn't consider it stable enough for production use, but that said, it didn't give me any problems for what I used it for.

</comment><comment><USER10> This is pretty much why Jordan Hubbard &co are bringing Mach IPC and other NeXT/Apple technologies to FreeBSD: [http://youtu.be/49sPYHh473U](http://youtu.be/49sPYHh473U)

It turns out that some of these problems already do have pretty decent solutions.</comment>


Google Maps will now allow drivers to report hazards, slowdowns and speed traps - <AUTHOR> https://lite.cnn.io/en/article/h_ea178fbcbd5a3889f6fdf235a539dc60 <comment><USER2> I've been seeing this for at least a couple of months. Especially speed trap warnings.</comment>


Perl on App Engine - <AUTHOR> http://brad.livejournal.com/2008/07/22/

<comment><USER2> This action item is particularly interesting:

"Server: we need to write an App Engine server for testing, local development, and potentially production deployment. (Replace Bigtable with MySQL, Hypertable, Hbase, Couch DB, etc.)"

An open-source production-capable alternative to AppEngine (that uses its APIs) would help defuse the lock-in issues.

</comment><comment><USER3> Wow, this is a great snapshot into what it will take to move a language to App Engine. Kudos for him taking this up as his 20% project, certainly sounds challenging.

</comment><comment><USER4> This is awesome. The neat thing is that fitzpatrick will probably be able to actually pull it off. I just hope it'll be able to run Catalyst.

<comment><USER5> Running Catalyst is a goal. If it turns out that we have some time to really make it nice, I'd prefer to support any framework that uses HTTP::Engine. Right now, that's nothing, but since HTTP::Engine is basically extracted from Catalyst, getting Catalyst to run will be easy. But it also means that we'll get other Perl frameworks like CGI::App (they've indicated interest, anyway), Continuity, Jifty (perhaps), etc.

The Python guys may be happy with one framework... but this is Perl. There's more than one way to do it :)

BTW, I'm a Catalyst core developer, so I'll certainly do everything I can to make working with Catalyst on GAE enjoyable. That's what I want for _my_ applications. But really, getting the web framework to work is the easy part. Getting a Perl that meets Google's requirements is the hard part.

</comment></comment><comment><USER6> Perl and the GAE deserve each other.

</comment><comment><USER7> The quick description of Sys::Protect (and it's lack of documentation on CPAN so far) make it seem like an implementation of the Safe module with a preconfigured list of unwanted opcodes. I'm interested in know why Safe wasn't considered or how Sys::Protect is related, if at all, to Safe (which I believe has been a standard perl module for quite some time).</comment>


LaunchKit and Google - <AUTHOR> https://library.launchkit.io/launchkit-joins-google-7e6108a706ab#.ytoahs9dq <comment><USER2> I think the most interesting thing about this move is the open sourcing of their tools.

I've been using LaunchKit since near the beginning and love what they've been doing. It's great the service isn't just closing down today.</comment>


EFF: BART Pulls a Mubarak in San Francisco - <AUTHOR> https://www.eff.org/deeplinks/2011/08/bart-pulls-mubarak-san-francisco

<comment><USER2> What I see here is an organization staffed mainly by _lawyers_ indignant that managers at BART did something important without consulting _lawyers_.

Question for those critical of BART's action: do you believe that a significant fraction of BART's users would rather risk getting stranded in San Francisco (which is what would have happened to them if the protester's plans had succeeded) than to lose the ability to use wireless services for the time it takes to transit the four downtown-SF BART stations?

<comment><USER3> Those critical of BART's action will say that stifling communication for any reason is unacceptable and that even if most of the riders would have agreed, they weren't consulted. Some may also say that you can't let the sheeple vote on such matters because they'll vote wrong.

<comment><USER2> >stifling communication for any reason is unacceptable

Do you really mean that? Do you for example condemn the U.S. army convoys in Iraq for travelling with cell-phone jamming equipment after they learned that insurgents were using cell phones to detonate roadside bombs?

<comment><USER3> It's not a position I personally hold, but it's more or less quoted from other comments in a different thread.

</comment></comment></comment></comment><comment><USER3> I wonder what effect this will have on other subway systems. Will they be more or less likely to install cell repeaters in their system now if they can't turn them off?</comment>


Publisher wins rights to Voynich manuscript, a book no one can read - <AUTHOR> https://www.theguardian.com/world/2016/aug/21/tiny-spanish-publisher-wins-rights-voynich-manuscript-book-no-one-can-read?CMP=Share_AndroidApp_Facebook <comment><USER2> I understand nothing past Mickey Mouse will ever be public domain, but how can this conceivably not be subject to expired copyright? Or is this merely a matter of some special claim of authorization by the Beinecke library? The article doesn't enlighten.</comment>


Climate models are accurately predicting ocean and global warming - <AUTHOR> http://www.theguardian.com/environment/climate-consensus-97-per-cent/2016/jul/27/climate-models-are-accurately-predicting-ocean-and-global-warming <comment><USER2> There is less than a year of data about the amount of energy put into the ocean by the Juan de Fuca ridge [1], and only classified data about other oceanic volcanic hotspots (this was collected by the navy's submarines). I think the certainty expressed by advocates for anthropogenic climate change is not justified.

[1] [http://nytimes.com/2016/01/12/science/midocean-ridges- volcan...](http://nytimes.com/2016/01/12/science/midocean-ridges-volcano- underwater.html)

<comment><USER3> I wouldn't be surprised if they ran a simulation, then ran another simulation with the same data, and then calculated difference between runs, calling this "accuracy".

<comment><USER4> > What about the next question – how did the models do? Amazingly well. [...] > This means that since 1992, the models have been within 3% of the > measurements.</comment></comment></comment>


Why George Guidall Is the Undisputed King of Audiobooks - <AUTHOR> https://www.nytimes.com/2017/08/17/books/george-guidall-audiobooks.html <comment><USER2> I'm sure multitudes of people like his style of reading, but I have found it to be incredibly slow and frustrating to listen to. He reads.... with ...... far too many..... pointless..... pauses. One can have meter and flow without the slow.

It's not exactly the same thing, but I much prefer the way that Dan Carlin (Hardcore History podcast) uses his voice to create atmosphere and draw me into the story.

<comment><USER3> When I saw the title, I had similar thoughts. imo Ray Porter is the undisputed king of audiobook narration- one needs only to listen to Ray Porter narrate The Power of the Dog by Don Winslow of 14 by Peter Clines to know he is the best! Best narrator of all time.

</comment></comment><comment><USER4> "There's a rhythm to speech in terms of what's implied. If it's raining in the book, there's got to be something about the voice that evokes the rain."

He really does provide great quality. I have listened to quite a few audiobooks read by him and I often feel like I am not doing them justice when I am doing something else besides listening. It has led me to realize that I should listen to good audiobooks more consciously, and to instead rely on podcasts or librivox* books for easy listening while cleaning or cooking.

* = Not to put down the efforts made by the hundreds of volunteers reading books for this great project, they have led to great audiobooks, but there are also quite a few that are not up to professional standards.

</comment><comment><USER5> His voice reminds me of Geoffrey Palmer's, whose reading of _The Man Who Was Thursday_ for the BBC is excellent.

My main problem with audiobooks are the narrators, especially in fiction; I give up on about 2/3 of the books for that reason. I have a similar problem with TV shows like The Walking Dead - the acting is just too mediocre. Maybe I'm a snob, but it literally yanks my suspension of disbelief away.

I don't think I ever listened to one read by Guidall, though; does anyone have a recommendation?

<comment><USER6> I just finished listening to his narration of Stephen King's The Dark Tower on Audible (the main books, 1-7), and was actually disappointed to find out that King himself has read the (optional?) 8th/4.5th book.

<comment><USER7> He read the first one, but 2 and 3 are Frank Muller, at least the versions I got from audible. Did you check?

<comment><USER8> Muller was in a motorcycle accident and was unable to complete the Dark Tower narration (he eventually passed away from the injuries I believe, tragic), so Guidall finishes out the series.

They are both fantastic narrators, but I did slightly prefer Muller in this series. His voice for Eddie is just perfect.

</comment></comment></comment></comment><comment><USER9> I loved how this wasn't a story about some twenty year old Hotshot CEO of some fad company I had never heard of that has just brought out an iPhone app for audio books, but about a real, old-school professional actor who is successful in an honest profession.

<comment><USER10> I also appreciated that he was not entirely humble about it, without being overly arrogant. I was prepared for a lot of "aww shucks, I guess I've been blessed" style of false modesty, but it was nice to see he is proud of the work he has put in to master a skill.

<comment><USER11> This is ofcourse just the journalists image conveyed in the text. But I too love books read by him.

</comment></comment></comment><comment><USER12> I've enjoyed two books read by Guidall, but I spent several years of my commute listening to Patrick Tull read Patrick O'Brian's _Master & Commander_ series, and I'm not sure any other narrator will ever match that for me. It feels like your British uncle is telling you stories about his time in the Royal Navy.

</comment><comment><USER13> I went to youtube and looked up a clip of him reading, and indeed it was who I expected. My dad listened to a lot of books on tape when I was growing up, and this guy's voice was ubiquitous. It provided a nice moment of nostalgia.

As an adult now though, I much prefer Rob Inglis, whose recording of The Lord Of The Rings is more or less the authoritative way that work should sound, so far as I'm concerned. His volume of work, though, doesn't compare to Guidall so far as I can tell.

<comment><USER14> Rob Inglis is also the fabulous narrator of the Earthsea trilogy audio books.

Recently I've become a fan of Patrick Tull, who did the Aubrey/Maturin series audiobooks extremely well.

</comment></comment><comment><USER15> One of my favorites is David Clarke, who did a superb reading of The Count of Monte Cristo,[1] which is one of the most amazing books I've ever read.

[1] - [https://librivox.org/the-count-of-monte-cristo- version-3-by-...](https://librivox.org/the-count-of-monte-cristo-version-3-by- alexandre-dumas/)

</comment><comment><USER16> I much prefer Tim Gerald Reynolds and Steven Pacey.

Listen to these previews for each of them respectively. They were able to bring the characters to life in a way that Guidall was never able to for me.

Steven Pacey: [https://www.audible.com/pd/Sci-Fi-Fantasy/The-Blade- Itself-A...](https://www.audible.com/pd/Sci-Fi-Fantasy/The-Blade-Itself- Audiobook/B014LL6R5U/)

Tim Gerald Reynolds: [https://www.audible.com/pd/Sci-Fi-Fantasy/Age-of-Myth- Audiob...](https://www.audible.com/pd/Sci-Fi-Fantasy/Age-of-Myth- Audiobook/B0161R0XBQ)

</comment><comment><USER17> About 20 years ago I had a twice a week commute of about 3 hours. I worked my way through the bulk of Lillian Jackson Braun's "Cat Who ..." book as read by Mr. Guidall. Even when I was reading from the dead tree version I'd still hear it in his voice.

My favorite audio books, however, were of Roger Zelazny reading his own Amber books. He obviously wasn't a professional voice artist, but he really brought these non-standard fantasy novels to life with his, literally, authorial voice.

I only have them on actual cassette tapes, I suppose I should look around and see if they are available as digital files.

</comment><comment><USER18> I'm quite fond of John Rafter Lee, personally:

[http://www.audible.com/search?ref_=a_pd_Classi_c2_1_narr&sea...](http://www.audible.com/search?ref_=a_pd_Classi_c2_1_narr&searchNarrator=John+Lee)

I've been hooked on his voice ever since I heard him as Trevor Goodchild in the 90's MTV Aeon Flux cartoon.

</comment><comment><USER19> Can anybody identify the PDF annotation app that G. Guidall is using in this picture?

[https://static01.nyt.com/images/2017/08/15/arts/00AUDIOKING2...](https://static01.nyt.com/images/2017/08/15/arts/00AUDIOKING2alt/00AUDIOKING2alt- superJumbo.jpg)

<comment><USER5> I don't have an iOS device to confirm, but seems to be the latest version of iAnnotate.

</comment></comment><comment><USER20> My vote would be for Richard Poe:

[http://www.audible.com/search/ref=sr_1_1_nsrch?searchNarrato...](http://www.audible.com/search/ref=sr_1_1_nsrch?searchNarrator=Richard+Poe)

</comment><comment><USER21> For me the best was Richard Matthews reading "A Short History Of Nearly Everything"

</comment><comment><USER22> I don't know George Guidall, what I don't know too is why there's so little audiobooks in 2017, specially in French.</comment>


Golang: Err on the Side of Structured - <AUTHOR> https://gist.github.com/andrewstuart/8d60b3b830f1acd0a87abe6b2c3932d5 <comment><USER2> the "switching on error types" he describes looks like the moral equivalent of exception handling in other languages, but without the ability to rethrow.</comment>


Michael Arndt to Write Screenplay for Star Wars: Episode VII - <AUTHOR> http://starwars.com/news/michael-arndt-to-write-screenplay-for-star-wars-episode-vii.html <comment><USER2> ...you posted this eleven times.

<comment><USER3> Twelve times. I flagged 11 of them.</comment></comment>


Ask HN: How to paste slowly (like key typing) - <AUTHOR> I want to record a screen cast of code and make it look like I am typing it but my typing is full of mistakes so I want to pre-type it then paste it but make it look like it is me typing it as I record it.
Does anyone know of an app for this? I want to paste into pycharm on a mac.
Thanks for any tips! <comment><USER2> Check out this page, it has solutions depending on your OS: [https://gist.github.com/ethack/110f7f46272447828352768e6cd1c...](https://gist.github.com/ethack/110f7f46272447828352768e6cd1c4cb)

</comment><comment><USER3> i've used AutoHotkey for this in the past.

Here's a relevant forum link.[0]

I think ahk is mac compatible, but I haven't tried it.

I had a similar problem in college, to which I made a bash script that called cow-say over and over again to make the cow look as if it were typing, and then recorded that section of the screen.

Clunky but effective.

Good luck.

[0]: [https://www.autohotkey.com/boards/viewtopic.php?t=26761](https://www.autohotkey.com/boards/viewtopic.php?t=26761)

<comment><USER4> autohotkey is good for the purpose, the only question is whether you can make the app (or cmd line window) invisible

</comment></comment><comment><USER5> try this: onde you have the entire code ready, working properly, go to the end of the file and "backspace" your entire file clean. Now, from the top of the empty file, repeat "Ctrl-Z" until you have your code restored.

of course, it will not work with too large files... you will be limited to the number of undos of your editor.

( i used to do this on "live coding" sessions )

</comment><comment><USER6> It may not be useful in this case, but if you're doing command line operations you can use asciinema[0] to generate your screencast as a textfile and edit the typos at specific timestamps when you're done.

Example:

Suppose you wanted to type `sudo su` but typed `suod su` then corrected it. Here's part of the file that would be generated:

      [1.886896, "o", "s"]
      [1.984919, "o", "u"]
      [2.047353, "o", "o"]
      [2.150955, "o", "d"]
      [2.54311, "o", " "]
      [2.629135, "o", "s"]
      [2.745892, "o", "u"]
      [3.324734, "o", "\b\u001b[K"]
      [3.481178, "o", "\b\u001b[K"]
      [3.611576, "o", "\b\u001b[K"]
      [3.776223, "o", "\b\u001b[K"]
      [3.896898, "o", "\b\u001b[K"]
      [4.089885, "o", "\b\u001b[K"]
      [5.812011, "o", "u"]
      [5.978867, "o", "d"]
      [6.017407, "o", "o"]
      [6.177912, "o", " "]
      [6.385136, "o", "s"]
      [6.385614, "o", "u"]

You can edit the file, delete the type and correction-delete keys and keep the right one. Yan even edit the timestamp if you want to either with your text editor with macros, or a spreadsheet once you're done and decrement by four seconds.

When you play it with `asciinema play foobar.cast`, it will play `sudo su`.

Quick tip:

      asciinema rec -i 2 deployment_screen.cast

The above records the "screen" to a `deployment_screen.cast` file, and reduces all idle time longer than two seconds to two seconds. If you type a character, then pause for an hour, then type another character, the cast will reduce that dead "half hour" to two seconds. Super useful.

I use that when I'm deploying something for the first time and may have to install additional dependencies or edit some config files and haven't yet scripted the thing. I record the deployment cast and dispatch it, then put it in the target machine and add a `cat /home/user/README.md` in `.bashrc`. The README.md file explains what the target machine is about, the services that are deployed, and where the cast file is.

After all the rough edges are rounded, you can go over the cast file and encode the steps in a Dockerfile or whatever thing you're using and not miss a dependency.

[0]: [https://asciinema.org/](https://asciinema.org/)</comment>


Objc_msgSend's New Prototype - <AUTHOR> https://www.mikeash.com/pyblog/objc_msgsends-new-prototype.html <comment><USER2> > As long as you cast it to the correct type, it always works. The new way of > doing things thus encourages doing things correctly and makes it harder to > do things wrong.

This seems like a really interesting case where removing type information, removing something was presumably thought to be a safety guard, and requiring type casting, makes the type safety stronger by forcing the user to do it explicitly. Maybe it makes sense that dynamic calling mechanisms should require casting (and static type checking is less safe) where static calling mechanisms should use static type checking (and type casting is less safe).

> C specifies that certain types get promoted to wider types when passed as a > variadic argument. Integers smaller than int (such as char and short) get > promoted to int, and float gets promoted to double. If your method signature > includes one of these types, it's not possible for a caller to pass a > parameter as that exact type if it's using a variadic prototype.

Holy crap! I've used these things for many years without knowing this important tidbit. Does anyone know if it's the same in C++, or whether GPUs are currently ignoring or following the spec?

<comment><USER3> Sounds like undefined behavior, to be honest. No wonder Apple doesn't update GCC, they might just decide to optimize all the msgSend calls one day.

<comment> Arcanum-XIII Apple use Clang - they're one of the main contributor (also on LLVM if I'm not mistaken). And they're optimizing the innard of Objective C too.

<comment><USER3> _whoosh_ Oh, I'm sure they are. That doesn't make this any less undefined.

<comment><USER4> What's undefined about it?

</comment></comment></comment></comment></comment><comment><USER5> Are there any conditions where the compiler can optimize away the call to objc_msgSend? Or is it always used for any call between 2 ObjC/Swift methods?

<comment><USER6> Always wondered about this too, but there doesn't seem to be a way of knowing which implementation your code will end up calling in Objective-C. "Final" would be helpful but there's no "final" in the language.

<comment><USER7> Speculative inlining driven by heuristics or PGO should always be possible. Same thing is done for virtual functions in C++ (or any indirect call really).

<comment><USER6> Objective-C's OO model is far more dynamic than you may realize. There're no guarantees even on the object reference type at run time, i.e. that the method you are calling will be applied to an object of a specific type or compatible. ObjC is very permissive in this regard, though it can give warnings in certain cases but they are never 100% precise (from my experience anyway). You could run analysis on the entire end product and still be unsure of what's going to happen at run time.

<comment><USER8> This is also true for languages like Self as well which pioneered inline (and polymorphic) caches in the first place. Self did it using JITs, but you "only" need a sufficient hit rate to make up for the check+branch to justify inlining the most likely option(s) at compile time.

The interesting thing is that by inlining, for the inline case you will often gain additional type information. E.g. to take an example from Ruby, since I don't know Objective C very well. In isolation you have no way of telling what type "foo + 1 + 2 + 3" will return, as it depends entirely on "foo". But lets say most call-sites calling the method where this expression is found passes an integer.

If I can guarantee that "foo + 1" is an Integer addition, then I know it will return an Integer, and so I know the same addition method will be used for the next addition (and by extension the next as well), so I can turn the above into the following Ruby-ish pseudo-code instead:

        if foo.is_a?(Integer)
            # By recursively inlining, I know not just the type of foo, but the type of the full expression.
            inlined foo + 1 + 2 + 3
        else
            foo.send(:+, 1).send(:+, 2).send(:+, 3)
        end

Even when you can't safely inline the actual calls, you can often elide checks or resort to more specialized method caching.

<comment><USER7> Yes, of course with a JIT you can do much better than an AOT compiler, and for dynamic languages is pretty much required to get reasonable performance.

<comment><USER8> Well, compared to profile guided optimization as mentioned by the other commenter earlier, that's really only the case if the profile of called methods vary greatly between runs.

The polymorphic inline caching from Self for example is guided by collecting simple stats. Tracing does the same. A JIT ensures those stats are always completely up to date, but nothing stops you from saving it and using it for an AOT compiler as well.

But often even that is overkill, as you can often statically deduce a _lot_ about the types a method is likely to get called with by simply looking at the call sites, and most programs have very static call profiles.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> That's why we've been warned for years to not call them directly from C I guess! Mike Ash has such amazing content always.

<comment><USER4> I don't see why you can't call objc_msgSend directly if you cast it correctly.

<comment><USER9> You _can_ call it as you could call it before as well only there's a pretty big chance your existing code will break because of this change.

<comment><USER10> No that's not right. The implementation is not changing. The prototype is changing to break code that was poorly formed in the first place. If you had cast to the correct type in your code as you always should have, this change shouldn't break anything.

As far as code breaking changes go, the impact should be low. How many times in a code base should you need to call msg send? And the risk of problems is low. Only if your code was silently relying on float corruption would you notice a change. Anybody making six figures should be able to analyze such a thing without too much whining.

<comment><USER9> Well I'm not sure either who would rely on extensive calling of this function but why would you call it "whining"? Apart from the fact that earning six figures still isn't the norm for most Objective-C developers.

> The prototype is changing to break code that was poorly formed in the first > place.

I guess calling it directly would even be poor form by itself so who knows.

<comment><USER10> > I guess calling it directly would even be poor form by itself so who knows.

The point being that there are limited cases where it is justifiable. For example, a VM or language interop would likely be justified. Those types of cases mean the absolute number of call sites should be small though. In other words, the problem is somewhat self-limiting. Probably, in appropriate use, the function would be called extensively, but likely not from many sites.

> Apart from the fact that earning six figures still isn't the norm for most > Objective-C developers.

I have no horse in this race.. I don't work in the industry for years.

This was also a somewhat tongue-in-cheek remark that I think you are reading too deeply into. The real point is, software engineers are generally paid well relative to median incomes and have a cushy job. On the scale of pain, this doesn't seem like a big deal - not even a Python 2 to 3 transition.

BLS average salary for software engineers is $103k, not including bonuses and stock, etc. I would think the _average_ engineer that would justifiably use msg send directly is being paid greater than the BLS average - which includes all the enterprise LOB app slaves that don't do incredibly well.

</comment></comment></comment></comment></comment></comment><comment><USER4> I wonder if the new signature has any effect on pointer authentication (or was related to those changes). Also, I think the title would be better served with the correct capitalization of the method name, objc_msgSend.

</comment><comment><USER11> As an aside, am I missing something or is Apple's doc on objc_msgSend describing the parameters of the old form? The parameters section doesn't seem to match the declaration section.</comment>


Dalek designer Ray Cusick passes away aged 84 - <AUTHOR> http://www.theregister.co.uk/2013/02/24/dalek_designer_ray_cuscik_passes_away/ <comment><USER2> RIP Ray. :(

People can say what they want, but the Dalek design was both pragmatic and cool, making it the iconic representation of the series. More people think of the Daleks than of any of the Doctors or TARDIS when "Doctor Who" is mentioned.

<comment><USER3> I keep seeing the word "iconic" when people talk about the Daleks. They're just such an original design. They have animial-like features -- an "eye", appendages, "ears" -- yet they're also cold, mechanical killing machines at the same time. They don't try to look humanoid, like so many sci-fi robots. Even the Cybermen are typical "metal men", but Daleks are something from another world.

<comment><USER4> The look and the sound of the Daleks communicates very well that they don't care one wit about anything like our aesthetics nor do their ideas of practicality line up with our own.

And yeah, they look like cold, mechanical things, but then one learns that, no, there are biological creatures in there, but that doesn't mitigate anything, it makes things worse. They aren't detached and emotionless machines, they are creatures who find it rational to live inside of tanks and feel only hate and rage for others beings.</comment></comment></comment>


Quick - is 91 prime? - <AUTHOR> http://balltech.blogspot.com/2008/03/is-91-prime.html

<comment><USER2> For 11 there is an easier trick (or at least it's easier in that you can perform it in your head faster).

Starting from the left add every other digit => n1, Starting with the second digit add every other digit => n2

if n1 - n2 == 0 or if n1 - n2 is divisible by 11 then the number is divisible by 11. Example

13574

1 + 5 + 4 = 10

3 + 7 = 10

Since 10 - 10 == 0, the number is divisible by 11.

Even cooler example 155357548018579643

1 + 5 + 5 + 5 + 8 + 1 + 5 + 9 + 4 = 43

5 + 3 + 7 + 4 + 0 + 8 + 7 + 6 + 3 = 43

43 - 43 == 0, also divisible by 11

<comment><USER3> n1 - n2 == 0 or if n1 - n2 is divisible by 11

aka

if n1 = n2 (mod 11)

Cool trick.

</comment></comment><comment><USER4> Nice math hack. The 11 and 7 ones were new to me.

Here's some more fun: [http://www.jgc.org/blog/2008/02/sum-of-first-n-odd- numbers-i...](http://www.jgc.org/blog/2008/02/sum-of-first-n-odd-numbers-is- always.html)

<comment><USER5> 7 was new to me too, that's an odd one

there's also another trick for 11 that comes from addition. 1234 * 11 = 12340 + 1234 = 13574 (or, by digit: 1 (1+2) (2+3) (3+4) 4). that makes 3 digit multiples easy to detect. for instance, 484: 8 is clearly 4+4, so it's divisible by 11 (440 + 44).

it's slightly more tedious for >3 digit numbers. for instance, 1353: from left to right: 3 = 1 + ..2, 5 = 2 + ..3. 3 == 3, so it'd divisible by 11. i guess i explained this somewhat poorly, sorry for that.

it's also somewhat harder if you have carries.

<comment><USER6> What I use for 11 is take the final digit, subtract the penultimate, add the third last, etc. The result = the original number (mod 11). Obviously it works if you start at the MSD, but then you need to worry about whether there's an even number of digits, in which case you need to negative the answer.

Seven wasn't new to me, but I've never been able to remember it. Maybe I will this time.

</comment></comment></comment><comment><USER7> Of course not: 91 = 100 - 9 = 10^2 - 3^2 = (10 + 3) * (10 - 3).

</comment><comment><USER8> This reminded me so much of a useful rationality anecdote, I almost thought it was going to be a link to it. Alas, it wasn't.

<http://www.spaceandgames.com/?p=27>

Now how _certain_ are you that 51 is prime?

</comment><comment><USER9> hack? tsk tsk. if you get anything under 1000, it's probably quicker to subtract multiples of 70 until it gets to 2 digits - you should just memorize all the 2 digits multiples of 5,7,11,13, etc. Seriously, there aren't that many!

for example, here's a quicker way for 1353 than what staticshock posted. 1353 - 1100 = 253. and 253 - 220 = 33. And clearly 11 divides 33, so 11 divides 1353.

modular arithmetic ftw!

<comment><USER10> This is what I usually do. It is called "adding / subtracting tens", I believe.

</comment></comment><comment><USER10> I knew those already. Studied those as curiosity on Algebra class. Up to 11, but there are rules for up to 17, as far as I know. By the way, took me three seconds to figure it was divisible by 7, using multiplication properties.

<comment><USER11> Actually you can construct a finite automate (= a rule) - that operates on the digits and checks for divisibility - for any fixed number.

</comment></comment><comment><USER12> That reminds me how great the Cryptonomicon is. Normally I read it every 24 months, I am about due another read again.

<comment><USER13> Why every 24 months?

<comment><USER12> yeah - should have picked a prime number. Just seems to work out that way - long enough for the details to get fuzzy so I want to read it again.

</comment></comment></comment><comment><USER14> vedic mathematics offers similar numeric tomfoolery

</comment><comment><USER15> No.

<comment><USER16> Maybe I'm weird, but I knew right away that 91 = 7 x 13. Apparently you felt the same way.

<comment><USER15> I actually figured 91 = 70 + 21 = 10 * 7 + 3 * 7

<comment><USER15> It's funny that I get upvoted for possessing 3rd grade arithmetic skills.

<comment><USER17> 3rd grade in Bulgaria, maybe. To us Americans, that's like an amazing magic trick.

</comment></comment></comment></comment></comment><comment><USER18> the method for 7 works because:

you want to know if 8765 is divisible by 7. take the one's digit and multiply by 21. this gets a number that is divisible by 7 so you can subtract it. this will clear the last digit because we're subtracting this:

last digit * 1 + last digit * 20.

now we have a number that ends in a zero. in this case: 8660

now divide by 10. we can do that because that's dividing by 2 and 5 and that won't affect whether or not 7 can go into the number.

now we have a number to deal with that's at least one digit shorter. repeat until it's obvious if the remaining number divides by 7 or not.</comment>


Jack Dorsey has been buying $10k worth of Bitcoin a week - <AUTHOR> https://coinrivet.com/twitter-ceo-jack-dorsey-has-been-buying-10000-worth-of-bitcoin-per-week/ <comment><USER2> Dumb and impatient money buys at the peak of speculative mania, refuses to sell as the trend turns, then capitulates at the bottom for an 80% loss.

Smart and patient money sells into the speculative mania, then takes the other side of the capitulation trade so they can sell again into the next mania.

Then there's Jack Dorsey and the Winkelvosses who are smart and patient, but they don't trade. They accumulate through both highs and lows because they see a transformative opportunity beyond the boom-bust cycle.

<comment><USER3> To put things in perspective, Jack Dorsey has an estimated net worth of 5.2 billion dollars. His weekly wealth adjusted spending on Bitcoin is almost certainly less than the pennies in your car's cupholders.

</comment></comment><comment><USER4> This seems much more like an ultra-wealthy individual's means of diversification. Holding 1 million in Bitcoin as an insurance policy is relatively small hedge against the end of the (non-digital?) world. I don't think this move is much different than if he were buying up gold for a worst case collapse of USD.

<comment><USER5> I don't really understand that as an argument, honestly. It's like saying "holding $1M in lotto tickets is a great hedge against the end of the world" or "$1M in macaroni." You can buy all sorts of things, why this thing? If the world ends the first thing shutting down is the thing that's using all the power. We'll need it for things like showers and eating.

<comment><USER4> I'm not a huge Bitcoin fan, but it has proven flexible in cross border transactions. The network can run out of any country. If the USD goes to zero for some unknown reason, you get out and land in Russia, your USD could be worthless and you can only fit so much gold in your private jet. Private keys though? Those go with you, and as long as the network is still live, you aren't broke.

Lotto tickets are tied to a short time frame and country. Macaroni has a shelf life and does not transport well. Bitcoin is volatile but deflationary, so short of a network collapse it will likely retain value.

<comment><USER6> I am not seeing the deflationary part. They just split it and created twice as much Bitcoin and Bitcoin cash. There is a new Bitcoin like currency minted every 5 minutes. It is far cheaper to create digital currencies than paper money and far easier to steal. I think it is a delusion. That is not to say the technology cannot be useful. It has a lot of problems. Wait for Bitcoin 2.0

You think he is planning on having to leave the country? How would he have time. The average CEO is working 80Hrs per week. Much more than their over paid thralls. He is CEO of 2 companies. That is 160Hrs per week. Plus the 10 day silent meditation retreats. You guys do not realize the excruciating demands placed on todays CEO's. They truly are our modern hero's. He should be given his own reality show.

<comment><USER7> > They just split it and created twice as much Bitcoin and Bitcoin cash.

Not really - Bitcoin Cash is an entirely different "currency", that shares the history of Bitcoin up to the point where it forked.

> You think he is planning on having to leave the country?

I seriously doubt it. $10k / week for Jack Dorsey is a reasonable amount to use as a hedge against Bitcoin going exponential again. If it does, he's even richer. If it doesn't? Meh, so what. It's "only" $520k / year, and it's unlikely to lose all of its value anyhow.

<comment><USER6> So you are saying that if I owned a bitcoin before the split worth X and owned a bitcoin and bitcoin cash worth X + Y after the split that is not identical printing money.

If the US made dollarsPlus and gave you one for every dollar you currently have and said you can spend them just like dollars. That is a different currency and would not be inflationary I suppose.

</comment></comment></comment></comment></comment></comment><comment><USER8> Worth noting that he sold $80M in stock last year

[https://www.forbes.com/sites/laurengensler/2018/12/13/billio...](https://www.forbes.com/sites/laurengensler/2018/12/13/billionaire- twitter-square-ceo-jack-dorsey-sells-stock-80-million)

<comment><USER9> So the equivalent of the US median household spending ~$8/week on coffee.

</comment></comment><comment><USER10> This is a terribly written article:

>Twitter CEO Jack Dorsey has been buying $10,000 worth of Bitcoin per week

>Speaking on the Tales from the Crypt podcast, Twitter CEO Jack Dorsey has revealed that he has been exceeding his weekly buy limit for Bitcoin

>Twitter CEO Jack Dorsey has revealed that he has been exceeding his weekly buy limit for Bitcoin, purchasing $10,000 worth of the cryptocurrency every week.

The first three sentences contradict each other. Later we learn that $10K is the limit for purchasing bitcoin in the Cash app... is he exceeding the limit or not?

"has been" and "a week" indicate that something is recurring. Nothing in the article supports that. It just mentions that Jack claimed he had already exceeded his limit. That is one week.

Do we know that Jack has the same limits as his customers? The blog post just references a tweet that claims the limit is $10K/week. That's where the $10K in the headline comes from.

Listening to the referenced podcast doesn't yield any points for the "per week" side... Around 8:05 is the part they talk about and Jack says he exceeded his limit so he couldn't join in the #stackingSats drive the podcast is endorsing. Jack then says he thinks he can join tomorrow because his limit resets. I mean, it's a symbolic gesture, perhaps he will just buy his supposed $10K per week and say that $25 was part of #stackingSats who really cares... The point is this article and headline are poorly written.

</comment><comment><USER11> When you are Jack Dorsey, you can waste $10k/week on expresso if you fancy that

Not recommended for the average person however (and I say that while being involved in crypto)

<comment><USER12> There's a cryptocurrency called "Expresso?"

<comment><USER5> Yes, but it's incompatible with DentaCoin; something about staining. It's in the gleaming-whitepaper.

<comment><USER13> DentaCoin! Mine coins by brushing your teeth every day, with this fancy electric toothbrush! Now with WiFi and Bluetooth!

<comment><USER5> That might be fun and useful, the reality is neither ([https://dentacoin.com](https://dentacoin.com)) -- it's literally your dental records on the blockchain for some reason. It's been top-100 in the coinmarketcap rankings for ages.

</comment></comment></comment></comment></comment><comment><USER14> What if he is doing that to support people, who believe in crypto? Considering his other wealth, that's not even a dime.

</comment><comment><USER15> why does he have a 10K weekly buy limit ?

</comment><comment><USER16> You have to own a certain amount of BTC to have a seat at the table. My sense is that JD needs to accumulate to influence BTC either directly or via Cashapp. He probably has a very long way to go....

</comment><comment><USER17> his $10k fleeting interest in bitcoin is like our $100

</comment><comment><USER6> Good to know that Jack believes that putting his money in Bitcoin will give him greater returns than having it in Twitter or Square:0 How should that make Twitturd and Square investors feel?</comment>


Show HN: I made a Chrome extension that let's you review any movie on Netflix - <AUTHOR> https://chrome.google.com/webstore/detail/webwrap/ndgbomimpkpkhdgfjamadadpmfmbajbi <comment><AUTHOR> Or review and comment on any web page :)</comment>


Ask HN: How to build a Robotics portfolio? - <AUTHOR> I know this is a very broad topic so I'll put details here.
I'm a Software Engineer by profession (with ~5 years of industry experience). What particularly interests me in Robotics is Mechanical Design, Motion Planning and Controls.
I have done a few hobby Computer Vision projects so I could definitely make use of that knowledge as well.
I'm confused about what I should be doing to build a Robotics portfolio. Here are some of the options:
1. Build an actual robot to understand how different pieces (mechanical design, navigation, motion planning, controls) fit together - quadruped, biped, hexapod, quadrotor, toy car?
2. Pick existing work and only work on a specific problem - motion planning for quadruped, obstacle avoidance for quadcopter?
3. Build a robot only in simulation without spending time on building and iterating on a physical robot. <comment><USER2> For DIY projects and mechatronics modding you can surely refer to the latest, just released "Robot Builder's Bonanza" 5th ed. book, here from Amazon [https://www.amazon.com/Robot-Builders-Bonanza-Gordon- Mccomb/...](https://www.amazon.com/Robot-Builders-Bonanza-Gordon- Mccomb/dp/1260135012/) . More in general, it depends on what you do want to achieve: reinforcement learning is the latest hottie with small robotics and a very good academic lab with a lot of public materials is in Zurich at ETH [http://rpg.ifi.uzh.ch](http://rpg.ifi.uzh.ch)

<comment><AUTHOR> Thanks for the links.

</comment></comment><comment><USER3> Robotics is really broad field, and just by being a software engineer and also with your computer vision projects you've likely already started building a portfolio that a roboticist will be impressed by.

I think that building a physical robot is extremely valuable to anyone who wants to get into robotics. There's so many problems to solve and things to learn that just won't come up in simulation. That being said it might be better to first build your robot in simulation first, which is also extremely valuable to be able to do.

So, if you want my suggestion I would try and do all three of the things you listed. Pick a problem that sounds easy to start. And try to build a robot in simulation to do just that. Having this simulated environment set up will be invaluable for future endeavors too. Once you finish with that I think it will be extremely valuable to actually build your robot and try out the software there. Almost certainly it won't work the first time but that will be a valuable lesson too.

Another note, walking robots are in general very difficult to do well, quadcopters are more straightforward but still much more involved than the car to build from scratch. The car will be easier to get going, and will be more forgiving mechanically and with the controls. But that means you can quickly get into doing the higher-level motion planning if that's what you're interested in, and there are still interesting control and estimation problems to do there. And believe me even though it sounds very easy you will run into a lot of challenges you probably are not expecting.</comment>


Ask HN: Can we have a 'bookmark' function for HN submissions and comments? - <AUTHOR> I have to either comment or mail myself the link for any HN submission I want to revisit later. Can we get a simple 'star' functionality which allows me to mark items of interest for later? <comment><USER2> Upvotes = stars, links to upvoted comments/submissions are on your profile page:

[https://news.ycombinator.com/upvoted?id=anilgulecha](https://news.ycombinator.com/upvoted?id=anilgulecha)

[https://news.ycombinator.com/upvoted?id=anilgulecha&comments...](https://news.ycombinator.com/upvoted?id=anilgulecha&comments=t)

<comment><AUTHOR> Did not know this! Thanks.. this works :)

</comment></comment><comment><USER3>
        > I have to either comment or mail myself
        > the link for any HN submission I want
        > to revisit later.

As others have commented, that turns out not to be the case. You can click the up-arrow, and then if you visit your profile page and like on the "upvoted stories" link you'll find it there.

So in effect, HN has got a bookmark feature, the (possibly unwanted) side- effect being that you have to upvote the story.

<comment><USER4> I like to believe the upvote is the possible side-effect of bookmarking a story.

<comment><USER3> Sometimes a title, and perhaps first paragraph, look inviting, but you just don't have time _right now,_ so you want to bookmark it and read it later.

So you upvote it, come back later, use the "bookmark" that you put to find it, read it, and discover that it is, in fact, complete rubbish.

It's happened to me more than once, and I find it annoying.

But the most common use-case is that I upvote because I think it's a Good Thing(tm) to have on HN. In that case I really don't care that it's remembered.

For me, bookmarking is a very occasionally useful side-effect of the upvote.

</comment></comment></comment><comment><USER5> You can 'favorite' stories in the newest release of HN, comments can be bookmarked by rightclicking on the date and then clicking 'bookmark this link' (in FF).

</comment><comment><USER6> I do the same all the time... even got a bookmarks folder just for this. would be easier if it was built in :)

<comment><USER2> I disagree. I'd never use this feature, and it's extremely well-covered territory at the browser/device level (e.g. the Pocket app).

I believe HN should be re-designed to be more readable/accessible, but I'm staunchly against adding features that can be implemented elsewhere (browser, separate app, RSS reader, etc.). We're supposed to be hackers, after all -- we can roll our own features.

<comment><USER7> Couldn't you make the same argument for email and any messaging app?

<comment><USER2> Yes, and I will.

Email protocols and servers don't support many of the extra features that people use. Those things are added as extra layers by the client, like Gmail or Outlook. Email doesn't inherently have stars, to-dos, calendar invites, etc.

I'm advocating for the same thing on HN. If you want features, add them to your client (browser, app that consumes the HN API, etc.)</comment></comment></comment></comment>


How HFT caused the Facebook IPO opening delay - <AUTHOR> http://www.nanex.net/aqck/3099.html

<comment><USER2> Hey man, HFT provides a valuable service as a market-maker and enhances liquidity and blah blah blah HFT is perfect and anyone who disagrees just doesn't understand these complicated systems blah blah blah computers selling stocks to other computers is somehow a valuable service.

There, I just summarized the entire spate of pro-HFT propaganda that's about to come pouring in to this thread.</comment>


The Short, Sad Story of Stanwix Melville - <AUTHOR> http://www.nybooks.com/daily/2017/10/30/the-short-sad-story-of-stanwix-melville/ <comment><USER2> I mildly resent the conclusions of the author, that Stanwix's life was "motionless" or "stationary." On the contrary it sounds like he went a great many places, met a great many people, and was involved in a great many things. He traveled by sea to Shanghai, walked many miles along unsettled Central American coastlines to reach a distant city (having to bury a companion along the way), was involved in an actual shipwreck, and so on. Sounds perfectly adventurous to me.

What did he have to do to qualify as having a "greater" life, write a new JavaScript framework?

Not everyone creates the great American novel. That doesn't make your life "lesser." If anything it might mean you spent less time at a desk by yourself.

<comment><USER3> The author is a Harvard PhD and Mount Holyoke professor. Maybe he hasn't lived a very adventurous life, and as a consequence has convinced himself that high status is more important than interesting experience.</comment></comment>