Updates for older platforms to protect against potential nation-state activity - <AUTHOR> https://blogs.technet.microsoft.com/msrc/2017/06/13/june-2017-security-update-release/ <comment><USER2> I can't help but feel that Microsoft providing these security updates long past XP's stated EOL date will only decrease security in the long run. After all, if any "big enough" vulnerability results in getting a patch anyways, why upgrade/firewall that old XP system running your equipment? And I'd bet that people will expect the same treatment for Windows 7, too.

People never learn when disaster is narrowly averted. People learn when their decisions mean everything is on fire.

<comment><USER3> Imagine if you will a hospital system say, the VA, which owns a number of MRI machines, x-ray equipment, or similar which runs Windows XP. Now imagine that these machines were built by a company that was acquired and dismantled and therefore can no longer provide updates. Now imagine that these machines are connected to the local network behind the firewall, but can not be air gapped... for reasons. These machines work just fine, other than having an old OS. Should they get scrapped?

<comment><USER4> >Should they get scrapped?

Of cause not, but the hospital knew that the Windows XP running their multi- million dollar scanners would be end-of-life before the scanner it self. They should have required that the software be placed in escrow for the life time of the scanner, so that other parties could do any needed updates, if the supplier failed to do so.

I'm sorry, I get that you can't throw away expensive hardware, just because Microsoft no longer patch that version of Windows required to run the software but: EVERYONE knew that the hardware would be in use beyond end of life date for the operating system. So why isn't that included in contracts and support plans? Do banks and hospitals even care enough to ask how the supplier plans to deal with an EOL operating system?

<comment><USER5> > They should have required that the software be placed in escrow for the life > time of the scanner, so that other parties could do any needed updates, if > the supplier failed to do so.

People do that?

<comment><USER6> If you're big enough, you can negotiate any contract you want.

And "if company ceases to maintain and release updates to product, we will receive the source code for our use" doesn't sound like too poison of a pill for Sales to push through.

</comment></comment></comment></comment></comment><comment><USER7> Kudos to Microsoft for doing this. Who else in the world is patching 16-year- old code well past it's EOL, for free?

<comment><USER8> I don't remember their name. They're a small RTOS vendor based in San Diego. Maybe 8 years ago, we were using their previous (i.e., not under current development) RTOS, and we hit a bug. We called them up, asking for them to create a fix. My boss mentioned that our support agreement had lapsed (expecting that he would have to send them a check to get them to work on it). They said, "Doesn't matter. We wrote it; we'll fix it."

I would gladly give them credit by name, if I could just remember who they are...

<comment><USER9> Express Logic? (makers of ThreadX)

<comment><USER8> Yes, that sounds right.

</comment></comment></comment></comment><comment><USER10> Could be related to the _The Shadow Brokers_ threatening to release a new stash of exploits in June, this time targeting Windows 10.

From their announcement on 2017-05-15 [1]:

> _In February Microsoft is missing patch Tuesday. TheShadowBrokers is > knowing, Microsoft is missing to be making patches for Eternal exploits.

[..]

In March Microsoft is releasing patch for SMB vulnerabilities. TheShadowBrokers is knowing this is being for Eternal exploits. TheShadowBrokers is still waiting and not releasing.

[..]

In April, 90 days from theequationgroup show and tell, 30 days from Microsoft patch, theshadowbrokers dumps old Linux (auction file) and windows ops disks.

[..]

Eternal exploits is not being ZeroDays. [..] patch was being available for 30 days before theshadowbrokers is releasing dump to public.

[..]

TheShadowBrokers Monthly Data Dump could be being:

web browser, router, handset exploits and tools

select items from newer Ops Disks, including newer exploits for Windows 10

compromised network data from more SWIFT providers and Central banks

compromised network data from Russian, Chinese, Iranian, or North Korean nukes and missile programs

More details in June._

Their latest message is from 2017-05-29 [2]:

> _Q: What is going to be in the next dump?

> TheShadowBrokers is not deciding yet. Something of value to someone. See > theshadowbrokers' previous posts. The time for "I'll show you mine if you > show me yours first" is being over. Peoples is seeing what happenings when > theshadowbrokers is showing theshadowbrokers' first. This is being wrong > question. Question to be asking "Can my organization afford not to be first > to get access to theshadowbrokers dumps?"_

[1] [https://steemit.com/shadowbrokers/@theshadowbrokers/oh- lordy...](https://steemit.com/shadowbrokers/@theshadowbrokers/oh-lordy-comey- wanna-cry-edition)

[2] [https://steemit.com/shadowbrokers/@theshadowbrokers/theshado...](https://steemit.com/shadowbrokers/@theshadowbrokers/theshadowbrokers- monthly-dump-service-june-2017)

<comment><USER11> What the hell is with all those present progressive forms?

<comment><USER10> Has been discussed on HN at length in the respective threads. Some people believe it's to make language analysis harder.

</comment></comment></comment><comment><USER12> I imagine Microsoft gets a dump truck full of cash to open support up on XP like this. I wonder who paid?

<comment><USER13> Well, the US government's already paying them to maintain XP to begin with. So the patches already exist internally at Microsoft, and it costs them nothing if they just decide "Hey, this patch is such a big deal, we also want to let everyone else have it". Isn't really gonna change the fact that the US government's still paying them for the work.

And computer security benefits from herd immunity tactics, so it's best to get virus updates in as many hands as possible. It's why Microsoft has never really prevented pirated copies of Windows from getting security updates. They benefit from not having old machines potentially causing problems for newer ones, and even just avoiding the bad PR from massive malware attacks.

<comment><USER14> For that matter the government may well be dictating the patch release schedule too. And certainly the skeptical among us can wonder what else may be in these patches.

</comment></comment></comment><comment><USER15> I keep a winxp vm around for some old games. Many of the download links at [https://support.microsoft.com/en- us/help/4025687/microsoft-s...](https://support.microsoft.com/en- us/help/4025687/microsoft-security-advisory-4025685-guidance-for-older- platforms) , especially in table parts 2 and 3 for winxp go to 404 pages. Also, ie for winxp does not seem to be able to even open the windows update website any more. Any tips?

<comment><USER16> Have you tried manually installing SP3 first? I remember an old PC I had to troubleshoot wouldn't install anything else until I had that.

<comment><USER17> I tried to install Xp in a VM a few weeks ago to see if I could run a few old games. The iso I had was for XP Sp2, and I couldn't find a download link for the Sp3 installer on the whole Microsoft site. Links from search engines become "the file is no longer available" or something similar

</comment></comment></comment><comment><USER18> How the fuck are some government orgs still on Windows XP?? Seriously, we need government-wide standards in place so this sort of thing doesn't happen.

<comment><USER19> We have government wide standards, they standardize on Microsoft's proprietary non-standard products.

Microsoft built this mess for profit, and continue to profit off of taxpayers indefinitely as hobbled state institutions are forced to pay permanent support contracts for old OSes because the states themselves _mandated they use this shit_ by law. I'd love to see how many campaign contributions MS made to representatives pushing laws standardizing on Word or other bullshit MS only tech in state institutions and even worse, in schools.

Public education is infested with Microsoft giving away / heavily subsidizing their locked in products so children are hooked on them for life, and nobody is outraged about it.

Hell, the whole war for the classroom _from all parties involved_ is disgusting. Microsoft, Apple, _and_ Google all push free access to their proprietary services and products to lock kids into their ecosystems. And while Google's platform, Chromebooks, are much more open than their competitors, they offset that by also having the ulterior motive of farming these kids for their big data research (not to say MS and Apple aren't doing it too, just saying Google is far from innocent here).

The whole intersection of state and software globally is a giant mess of corruption. There is way too much profit to be made off taxpayers money for anything close to good intentions to win the day.

<comment><USER7> _I 'd love to see how many campaign contributions MS made to representatives pushing laws standardizing on Word or other bullshit MS only tech in state institutions and even worse, in schools._

I keep hearing it will be the Year Of The Linux Desktop and it keeps never happening. That's why. No need for any wacky conspiracy theories, for the average user who just wants their computer to be a tool to get work done, the choices are Windows or Mac, and for large organisations who want to centrally manage machines, the choice is... Windows.

<comment><USER20> > for the average user who just wants their computer to be a tool to get work > done, the choices are Windows or Mac

And yet Chromebook and iPad sales are booming at the expense of the PC. My sample size is ~20 family members. Those with Chromebooks love them and those with Windows 8/10 despise them. From a support perspective, it's considerably less for Chromebooks vs multiple issues with malware on the Windows devices.

Caveat emptor, YMMV etc.

</comment></comment></comment></comment><comment><USER21> Why is nobody punishing the responsible nation states? I think the nation states who have such irresponsible intelligence agencies should pay every last dime of Microsoft's patching efforts and the damages the hacks and leaks cause.

<comment><USER22> Well it's a combination of the us and Russia in this case.

<comment><USER23> If we are talking malware being leaked or escaping to the wild, it's more like the US, Israel and maybe some not-yet-caught European states cooperating with them.

</comment></comment></comment><comment><USER24> Sad part is that there will still be owners of WinXP who won't patch their systems.

<comment><USER25> Because the manufacturer of their embedded system went bust, for example.

<comment><USER24> Or they just don't patch their systems.

</comment></comment></comment><comment><USER26> What the heck does "nation-state activity" means?

<comment><USER27> Russia

<comment><USER28> > Russia

Is that a new way of saying "NSA"?

All joking aside... this is likely the tail-end result of the Shadow Brokers leak coupled with the recently-used exploits in the failed crypto-locker variant "Wanna Cry".</comment></comment></comment>


Rails 3.0 final coming - <AUTHOR> http://github.com/rails/rails/commit/851552bd8038ebee87080123c24f252c074e0b29 <comment><USER2> Almost exactly a week since the last announcement. Right on schedule!

</comment><comment><USER3> It's on the blog now: <http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s- done>

<comment><USER4> Wonder if the blog is running Rails 3 ;)

"Status: 500 Internal Server Error"

<comment><USER5> It's not: <http://news.ycombinator.com/item?id=1644940>

</comment></comment></comment><comment><USER6> congratulations to the team, the effort is amazing

<comment><USER7> yup. I think this is one of the most anticipated releases. These guys really did some good work.

Congratz to the Rails team.</comment></comment>


Ask HN: How's working remotely from a tiny home, vanhome, or boat? - <AUTHOR> Please share your experiences and how you set it up! <comment><USER2> Probably 20 years ago I did this for 6-9 months. I had a CDPD modem for getting access to the Internet, which was ok for doing e-mail, chat, web browsing (though slowly), and SSH remote access. At some point IIRC I switched to some sort of a hot-spot. My job at the time was managing a number of sysadmins and the projects they were working on. I would also do some amount of sysadmin work, but it was mostly text based.

It was wonderful to be able to spend a week out at a camp site by a river, or out in the woods. My setup was a VW camper van, specifically the Adventurewagen. It was quite comfortable for 4 season camping, but you needed to be economical with water. Power was also an issue, it had 2 "golf cart" batteries, and a tiny solar cell, but no generator. I would often end up running the engine to get power enough to run my equipment, which I didn't like doing for various reasons. YMMV. I rarely had access to plug-in power. Often I would charge up while driving, but it made it hard to park in the wilderness for a week.

Today with better Internet availability, it should be even fewer technical difficulties.

If I were to do it today, I'd probably get one of those "solid state generators" that is just a giant LiPO battery pack. Charge it up using an inverter while driving, or at a plugin. I suspect that cafe's wouldn't love you bringing in a giant battery pack to charge. At the time, in CA, cafes were requiring people plugging in to pay, not sure if that is still the case.

</comment><comment><USER3> Need a permanent address here in the USA for lots of legal things like health insurance, taxation, and H1B visa things. So that could be solved by borrowing someone's address where there is mutual trust.

Then the next thing you would need is a relatively high speed and stable internet connection because for some reason people think that video chat is the best way to solve problems instead of a simple phone call or slack message or email. That's kind of hard to find in the US for people who are constantly on the move, for both technical and money reasons.

If you manage to solve those two problems, you then have to finance and ensure the safety and security of whatever thing you're living in. And you would have to ask yourself if it is worth living in a van in the woods compared to living in a house in the suburbs.

Good luck!

<comment><USER2> I've heard of services oriented towards boaters and RVers that provides a physical address and then either forwards or scans to electronic documents, your mail.

These days, the cell services can work, depending on how much Internet you need (RDP, video chat, or you can deal with more flaky service). I've had surprise access while off-roading/4 wheeling, and Verizon seemed to be the best in that regard. But unless you have a Earth Roamer you are probably not going to be quite that remote.

StarLink might be a great option when it becomes available.

<comment><USER4> There are address services for businesses too, which might also offer the service to individuals. I think they are called registered agent services or something like that. They recieve mail, accept subpoenas, etc.</comment></comment></comment>


Jair Bolsonaro accuses NGOs of setting fires in Amazon rainforest - <AUTHOR> https://www.theguardian.com/world/2019/aug/21/jair-bolsonaro-accuses-ngos-setting-fire-amazon-rainforest <comment><USER2> > "On the question of burning in the Amazon, which in my opinion may have been > initiated by NGOs because they lost money, what is the intention? To bring > problems to Brazil"

He is making dangerous claims without evidence while failing to acknowledge his role in encouraging illegal logging in the first place. Bringing problems to his own country and the planet. >:-(

</comment><comment><USER3> "Claims without evidence" is one of the polite euphemisms that the press must use with distressing frequency these days, even though it is much more accurate to say "lied through his teeth."

By the way, could you please change the title to reflect the actual headline of the story? "Jair Bolsonaro claims without evidence that NGOs are setting fires in Amazon rainforest"

<comment><USER4> > even though it is much more accurate to say "lied through his teeth."

Making baseless assertions is not the same thing as lying.

Furthermore, the context makes it quite clear that Bolsonaro's comment means that he suspects that certain groups might be behind a problem because they have the motivation to react badly regarding Bolsonaro's reforms.

It might be nonsense but believing in silly things is not the same as lying.</comment></comment>


Julia v1.3 - <AUTHOR> https://github.com/JuliaLang/julia/releases/tag/v1.3.0 <comment><USER2> It was on HN the day ago a bit prematurely, [https://news.ycombinator.com/item?id=21636661](https://news.ycombinator.com/item?id=21636661)

From the announcement on discourse some hours ago: [https://discourse.julialang.org/t/julia-v1-3-0-has-been- rele...](https://discourse.julialang.org/t/julia-v1-3-0-has-been- released/31549)

> At long last, the Julia developers are pleased to announce the release of > Julia v1.3.0, the third minor release in the 1.x series. Binaries are > available for all of your favorite platforms (Linux, Windows, macOS, and > FreeBSD) at > [https://julialang.org/downloads](https://julialang.org/downloads) 56.

> As a minor release, v1.3.0 contains no breaking changes, only new features, > performance improvements, and marginal, undisruptive changes in behavior. > The best reference for the changes in 1.3 is the NEWS file 109 for 1.3.0. > There have also been a couple of blog posts highlighting some exciting new > features in 1.3, including multithreading 52 and Pkg artifacts 69.

> Note that 1.3, like 1.2 and 1.1 before it, does not have long term support. > As of this release, 1.2 has been effectively superseded by 1.3, which means > there will not likely be any further 1.2.x releases. Julia 1.0 is still > currently the only long term support version.

> We encourage everyone to give it a try. Packages can test with 1.3.0 on CI > by specifying 1.3 on Travis, AppVeyor (with Appveyor.jl 1), and Cirrus (with > CirrusCI.jl 2). As always, let us know in the issue tracker 6 if you run > into any issues.

> Happy coding!

</comment><comment><USER3> Is it easier now to package and distribute single binary for a program written in Julia? In 2018 I was looking into Julia but the prospect of distributing it like python codes made me cringe.

<comment><USER4> Not quite yet. However, now that many people have adopted Julia, we've had an influx of people looking to fund projects for static compilation of binaries from Julia. This is leading to some efforts to fix this problem, like PackageCompilerX.jl

</comment></comment><comment><USER5> The release notes: [https://docs.julialang.org/en/v1/NEWS/](https://docs.julialang.org/en/v1/NEWS/)

</comment><comment><USER6> Big discussion yesterday:

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


What to do when a high-rep user is willfully breaking site rules/meta consensus? - <AUTHOR> http://meta.stackoverflow.com/questions/301016/what-to-do-when-a-high-rep-user-is-willfully-breaking-site-rules-meta-consensus

<comment><USER2> [https://sergworks.wordpress.com/2012/09/26/why- stackoverflow...](https://sergworks.wordpress.com/2012/09/26/why- stackoverflow-sucks/)

and

[http://michael.richter.name/blogs/awhy-i-no-longer- contribut...](http://michael.richter.name/blogs/awhy-i-no-longer-contribute- to-stackoverflow)

seem relevant.</comment>


The Ten Commandments for C Programmers (1987) - <AUTHOR> https://www.lysator.liu.se/c/ten-commandments.html <comment><USER2> This should probably carry a date stamp; my guess would be that it dates from 1990 or so.

Most of the advice is still good, but I would object to (3):

* Excessive casting can be a problem in itself, as it hides genuine type errors (e.g. you think you're casting an int to long, but in reality the variable is a pointer)

* Casting NULL is pointless, as it's already defined by the standard to be a pointer constant, compatible with all data pointers.

* Much of the language about "prototypes" (a.k.a. standard C) was justified at the time, but no longer reflects reality nowadays. It would have to be a very exotic platform that still uses a pre-ANSI C compiler.

<comment><USER3> >* Casting NULL is pointless, as it's already defined by the standard to be a pointer constant, compatible with all data pointers.

You should still cast NULL when passed as an unnamed argument to a variadic function. While NULL is defined to be a null pointer constant, that doesn't mean it has a pointer type (all integer literals with a value of zero are null pointer constants in C, but they have an integer type).

(Strictly speaking, all unnamed pointer arguments to variadic functions should be converted to a compatible pointer type that the variadic function expects. For example, the printf-line of functions expect a pointer-to-void argument for a conversion specifier %p. If you pass a pointer-to-int instead, technically the behaviour is undefined.)

(To whom it may concern: I would appreciate at least a rebuttal. It's not like this is a subjective matter.)

<comment><USER4> It's unfortunate that you're getting downvoted; there's for sure real dragons at the intersection of the NULL literal and variadic functions since it's totally legal for NULL to be defined as such:

      #define NULL 0

<comment><USER5> Much, much more subtly nasty, it's also legal for NULL to be defined as:

      #define NULL ((void*)0)

and then passed to a function that expects variadic int* parameters on a machine where register-sized addresses are word-aligned and thus int* has a different sizeof (and/or bit-level representation) than void*.

</comment></comment></comment></comment><comment><USER6> > if thou thinkest ``it cannot happen to me'', the gods shall surely punish > thee for thy arrogance

This one is a universal experience. :)

<comment><USER7> Hmhrhm... _If thou aren 't abide by them, my wrath follows, and make it go BAM!_

edit: _...my wrath follows, and it shall go BAM!_

</comment></comment><comment><USER8> #3 sounds extremely obsolete. I don't completely understand what they mean, but perhaps they are thinking pre-C89, when it wasn't as common to list the args in function declarations, so the compiler could not always correctly convert the type?

I remember in the 90s some libraries (like X11 headers) would put the types of function arguments inside an ifdef to be able to compile in some archaic place.

Edit: or maybe they are thinking of varargs. This could still be an issue with printf today.

</comment><comment><USER9> I get why they are using King James language but a button to translate to modern English would help.

<comment><USER10> It's not even correct - "thy arrogance" should be "thine arrogance"

<comment><USER11> when thou least expect it.

Should be "when thou expectest it least"

lest thou tear thy hair

Should be "lest thou tearest thine hair" as I seem to recall the h sound acting like vowel for words that sound different based on what follow them.

lest grievous harm befall thy program.

Should be "befalleth"

<comment><USER12> Too bad you can't "requesteth a pull" to update the language a bit.

<comment><USER13> I believe "-eth" is a 3rd person ending (he/she/it), e.g. _If thy header files fail_ should be "faileth".

"The third person sing. Present, ending in _th_ , as _taketh_ , _bringeth_ &c. is now confined to sermons and grave discourse." \- John Hunter, _Text-book of English Grammar_ 1848

My favourite _-eth_ , from the start of _Moonlighting_ 's Atomic Shakespeare episode:

 _Good morrow, sir. I 'm Lucentio, come hither for to see fair Padua, pleasant garden of great Italy, to seek out and happily begin a course of learning and studies herein._

 _You 've mistaken me, sir, for someone who careth._

[https://youtu.be/ijUr6p8xSBM?t=140](https://youtu.be/ijUr6p8xSBM?t=140)

</comment></comment></comment></comment></comment><comment><USER14> The DMR link => [http://cm.bell-labs.co/who/dmr/](http://cm.bell- labs.co/who/dmr/)

</comment><comment><USER15> The C++ "equivalent" of this are the "C++ Core Guidelines", which, like the language itself, are a couple of orders of magnitude larger:

[https://github.com/isocpp/CppCoreGuidelines/blob/master/CppC...](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)

</comment><comment><USER16> "If thy header files fail to declare the return types of thy library functions, thou shalt declare them thyself with the most meticulous care, lest grievous harm befall thy program.

The prophet Ansi, in her wisdom, hath added that thou shouldst also scourge thy Suppliers, and demand on pain of excommunication that they produce header files that declare their library functions. For truly, only they know the precise form of the incantation appropriate to invoking their magic in the optimal way."

This commendment made me afraid of the dark. Was it common in those days to have to guess to calling convention of libfunctions?

</comment><comment><USER17> See also from 2010: [https://news.ycombinator.com/item?id=1876981](https://news.ycombinator.com/item?id=1876981)

</comment><comment><USER18> I'd supplement the first commandment with "Fear not the -Wall, for it clears thou path to truth".

Personal reminder: "Initialize thou variables or endure the torturous trials of doubtful debugging"

"Never refuse the helping hand of thou compiler" and "No one seeking a refuge after arduous truth seeking journey in C has been turned away from StackOverflow."

</comment><comment><USER19> _Thou shalt not follow the NULL pointer_ should probably be appended with _and thou shalt not map the zero page._

<comment><USER20> Kind of hard when the operating system does it for you... [https://groups.google.com/d/msg/comp.unix.aix/0dv4N0qmgVQ/ty...](https://groups.google.com/d/msg/comp.unix.aix/0dv4N0qmgVQ/tyhnSiOLD0cJ)

<comment><USER19> OSX (well, OSX ld, not OSX itself) actually does this for you and unmaps the entire low 4GB for good measure, giving new meaning to 32-bit clean.

</comment></comment></comment><comment><USER21> 11\. Thou shalt try C++ or Rust

<comment><USER22> I wonder if anyone's ever tried something like "C with slices, destructors, and copy/move semantics".

<comment><USER23> That plus "avoid pure virtual classes", "no use of the heap", "C standard library and header-only libraries only", "compile with no exceptions" gets you close to embedded C++. Except also with classes.

<comment><USER24> Is this something you would recommend to newcommers? I wouldn't. I can agree that on technical level such subset has a decent set of features and gets the job done. On the other hand when learning how to use this subset, you'll still come across stack overflow answers and other C++ materials that will contradict such methodology, and other coworkers will occasionally challenge that particular stack of choices with their own favourite C++ features. You still have to learn how exceptions work and why avoid them, what is heap and how to disable it, what are pure virtual classes and so on.

I dislike the argument that C++ is great because you can limit yourself to appropriate subset. It becomes a different thing while still being called C++, which is miscommunication. If you can brand your subset as EmbeddedC++ and gain widespread audience, then we're closer to good thing. (except there's lot of embedded happening on Linux boards where "normal" C++ is acceptable)

My frustration mostly comes from working on huge embedded C++ project where each separate corner of codebase used its own subset of language. This brings down complexity and reduces mental overhead locally, but reasoning about the whole system is impossible.

<comment><USER25> I would much rather recommend something like "C with bounds-checked arrays" than a form of "standard" C++ to newcomers. Yes, StackOverflow will not help much, but I think avoiding the huge amount of features that the rest of C++ brings is well worth it. You are probably not advocating for dumping everything at once onto a beginner, so why not pick a subset that is both really small and gets you quite far?

> You still have to learn how exceptions work and why avoid them, what is heap > and how to disable it, what are pure virtual classes and so on.

Do you mean later on? As I see it, you _do not_ have to learn about the things you do not use and can concentrate on the basics. Once you are comfortable and need to venture out into projects where other parts of C++ are used, you would need to, of course.

<comment><USER24> Yeah I think our views are mostly aligned.

I was pointing out that if you as beginner manage to set correct boundaries for C++, you still need to know what's on the other side in order to avoid it. You've constrained yourself to smaller language (a good thing), but you haven't eliminated all the baggage / mental overhead that rest of C++ brings. The optimal approach would be to pick a language that's already well suited to problem. I would always choose enhanced C over degraded C++.

<comment><USER25> Yeah, I certainly agree that the features cost you even if you do not use them.

</comment></comment></comment></comment></comment></comment></comment><comment><USER26> This probably needs some context ... C at the time was still developing, lots of stuff was optional, parameters were int if you didn't define their type. V6 unix was a decade old and already wouldn't compile on K&R compilers, struct became genuinely unique types (requiring the creation of union, because struct could no longer be tweaked to do the same thing).

This was written at the end of that period where most people had an understanding of 'how it should be', while others were still using some of the older idiom ....

</comment><comment><USER27> Instead of the second, I'd rather put: "Thou shalt understand pointers, before using them"

<comment><USER28> The second item is warning against a particular misuse of pointers that was apparently widespread at the time. On VAX Unix, it happened that the memory at address zero of a process was readable and contained zeroes. So a lot of code would misuse a NULL pointer as being equivalent to a pointer-to-an-empty- string, for instance: worked fine on the VAX!. So it's kind of a specific flavour of commandment 10. These days the common machines don't have a readable address zero, and all the old non-portable code has faded into history.

<comment><USER8> 16-bit x86 also had the interrupt handler table at linear address 0, I seem to recall some compilers for DOS that would make NULL point at that.

<comment><USER29> Yes. At least writing to interrupt vector table usually crashed your computer right at the point. I remember a certain DSP architecture that system flags near zero address. It was an interesting experience to debug a program that failed because a write to struct member through null pointer switched the machine to a different instruction set.

</comment></comment></comment></comment><comment> matt-attack Can someone explain #9?

<comment><USER30> [https://stackoverflow.com/questions/38035628/c-why-did- ansi-...](https://stackoverflow.com/questions/38035628/c-why-did-ansi-only- specify-six-characters-for-the-minimum-number-of-significa)

<comment><USER31> Better explanation than mine - thanks I learned something.

</comment></comment></comment><comment><USER32> this and the tao of programming were foundational to my young mind in the nineties, but while the commandments somewhat hold true, the commentary aged a little.

</comment><comment><USER33> I wish more programmers obeyed #7.

<comment><USER15> For C, obeying #7 is not even that difficult. It's much more of a challenge in C++ and probably Rust (and other languages).

<comment><USER34> > 7 _Thou shalt study thy libraries and strive not to reinvent them without > cause, that thy code may be short and readable and thy days pleasant and > productive._

> Numberless are the unwashed heathen who scorn their libraries on various > silly and spurious grounds, such as blind worship of the Little Tin God > (also known as ``Efficiency''). While it is true that some features of the C > libraries were ill-advised, by and large it is better and cheaper to use the > works of others than to persist in re-inventing the square wheel. But thou > should take the greatest of care to understand what thy libraries promise, > and what they do not, lest thou rely on facilities that may vanish from > under thy feet in future.

I'm not sure I follow. Why this would be difficult in any language with a usable package manager and a reasonable ecosystem?

<comment><USER15> Most people don't even know what's available to them in the standard library of C++ and under-use things in it. Especially STL algorithms but not just that.

</comment></comment></comment></comment><comment><USER35> I was with them until "one true brace style". The rest are good advice.

<comment><USER36> Same but for perhaps a different reason

> As a lamentable side issue, there has been some unrest from the fanatics of > the Pronoun Gestapo over the use of the word ``man'' in this Commandment, > for they believe that great efforts and loud shouting devoted to the ritual > purification of the language will somehow redound to the benefit of the > downtrodden (whose real and grievous woes tendeth to get lost amidst all > that thunder and fury). When preaching the gospel to the narrow of mind and > short of temper, the word ``creature'' may be substituted as a suitable > pseudoBiblical term free of the taint of Political Incorrectness.

Not sure that was necessary. If you happen to disagree that Language is a valid place to fight for gender equality, you'd better serve your cause ignoring calls to equalize your language, rather than go on an anti-PC rant that smacks of an alt-right /r/unpopularopinion post. Just Another Old Man Yelling At Clouds.

<comment><USER37> > If you happen to disagree that Language is a valid place to fight for gender > equality, you'd better serve your cause ignoring calls to equalize your > language, rather than go on an anti-PC rant that smacks of an alt-right > /r/unpopularopinion post.

What if you happen to want to signal solidarity with the alt-right crowd? Why assume a flamboyant alt-right-style rant is an accidental coincidence? (Nto sure of the 1990 date is for the commandments, the annotations, or both, but in ant case, while it wasn't called the alt-right then, the subculture and attitudes certainly existed at the time this was written; 1990 would have been well into the first wave of it's vigorous embrace of flamboyant attacks on "political correctness" as a signal of group identity, which started in the mid-1980s as I recall.)

<comment><USER38> The PC movement began well before the 1980s.

<comment><USER37> > The PC movement began well before the 1980s.

There's no such thing as "the PC movement"; every ideological movement has ideas of correct usage of terminology related to the ideas that motivate the movement, the term "political correctness" has been used as a derogatory term for different of those ideas among different and unrelated ideological movements at different times. (e.g., in the 1930s-1950s it was used in a New York times article describing Nazi drive for uniformity in expressed ideas, as well as by American Socialists attacking the American Communists.)

However, attacks against expression of anti-sexist and anti-racist ideas as "political correctness" by the same segment of the American Right has been extremely popular twice, the first in the 1980s-1990s, and the second we're in right now.

</comment></comment></comment></comment></comment><comment><USER39> > Beware, in particular, of the subtle and terrible ``All the world's a 32-bit > machine'', which is almost true today but shall cease to be so before thy > resume grows too much longer.

That's cute. What year was it written?

<comment><USER40> 1987 by the look of it.

[https://groups.google.com/forum/#!msg/comp.lang.c/CYgWkWdWCc...](https://groups.google.com/forum/#!msg/comp.lang.c/CYgWkWdWCcQ/thMt3RfByAgJ)

<comment><USER41> Yeah... the reference to the abundance of VAXen isn't something one encounters often this side of the fall of the Berlin Wall.

<comment><USER39> Which side is that?

<comment><USER42> The outside

<comment><USER39> What about HN readers/commenters on the inside?

</comment></comment></comment></comment></comment></comment><comment><USER43> >Thou shalt study thy libraries and strive not to reinvent them without cause, that thy code may be short and readable and thy days pleasant and productive.

That's why my teacher ought to go to hell, how many times do I need to say that

<comment><USER4> There's a difference between re-implementing to understand, and re- implementing to ship into production.

It's common for a blacksmith to make a set of tools as a exercise, but they'll also commonly get some quality tools to do real work with.</comment></comment>


Is String Theory About to Unravel? - <AUTHOR> http://www.smithsonianmag.com/science-nature/string-theory-about-unravel-180953637/?all <comment><USER2> Readers may also be interested in yesterday's comments about the article, at [https://news.ycombinator.com/item?id=8779532](https://news.ycombinator.com/item?id=8779532) .</comment>


Ask YC: college interview tips. - <AUTHOR>

I am a junior interviewing at a college CS department in a few weeks. I plan to ask about the student's attitudes, aptitudes, how they adapt, and how their prospects or outlooks change. I also plan to inquire about what I should do over the summer specifically to prepare; job, classes, etc. as well as a few miscellaneous questions about the curriculum.<p>Any do's and dont's would be appreciated. <comment><USER2> Maturity is the best thing you can convey. To that end, it will benefit you to appear to have (and to have) your own things going on: ask questions that will tell you how to accomplish your future goals. For instance, if you're a programmer and you're interested in startups, ask about entrepreneurship on campus, on-campus attitudes around that, etc. Similarly, do not ask how you can best prepare for college -- college isn't/shouldn't be a destination.</comment>


Nexus 4 available from Google today starting at noon PST - <AUTHOR> http://www.theverge.com/2012/11/27/3696884/nexus-4-google-play-today

<comment><AUTHOR> According to the e-mail, this time around they will only sell in the U.S.

</comment><comment><USER2> Nexus 4 round two... Starts... Noon!</comment>


Ask HN: Getting on the "Ask HN" list. - <AUTHOR>

I recently submitted an "Ask HN" item that sank without a trace.  I shrugged - clearly no one was interested, and that was fine.
Then I noticed that it never showed up on this list:
http://news.ycombinator.com/ask
All the items there have at least two points.  If something doesn't get a vote, does it not get on the "/ask" list?
(EDIT: corrected typo) <comment><USER2> It looks like items on /ask are now ranked the same way as items on /news -- so yes, posts with no votes won't get onto the list.

Personally I'd be happier if /ask was in pure chronological order.

<comment><AUTHOR> I don't mind them being subject to a similar ranking, but I'd like them to appear for at least a time before they drop down the rankings.

</comment></comment><comment><USER3> Incidentally, since this particular post of yours has now got some votes, why don't you re-post your earlier question here?

<comment><AUTHOR> OK: from <http://news.ycombinator.com/item?id=1270978>

I'm looking to organise an event in November and I'm looking for easy ways for people to pay. One is direct deposit into the company bank account, another is by check. Yet another is cash.

What are the pros and cons of setting up a business PayPal account? I've found precious little that seems authoritative and unbiased, so I would appreciate any pointers.

Other advice and comments also welcome.

Thanks.

PS: The event will be announced here, but is likely to be of interest to only a small proportion of HNers.

PPS: We're in the UK.

<comment><USER4> We looked around for this kind of thing for some events we did. Nothing was really very nice. In the end we got a credit card merchant account (also for billing for our service) and knocked up a very simple booking system which takes people's details and makes them a nice invoice.

(Tip: make sure it's easy for people to register multiple attendees in one transaction!)

PayPal scares me, as it's not a bank and the agreement you 'sign' effectively says they can keep your money if their automated systems don't like the look of you. This may be inconvenient.

NOTE: We're in the UK, dealing with UK organisations.

<comment><AUTHOR> Thanks for that very useful. I've added the note that we're in the UK.

PayPal also bothers me. If they think something is suspicious then they just freeze everything and hold your money, and it's your problem to sort it out. I don't like how that can work, especially since the detector is probably automatic, and sensitive. The horror stories are, well, horrific.

<comment><USER4> Feel free to email me for any more details, and who knows, maybe even code...

(contact info in profile)</comment></comment></comment></comment></comment>


FSF receives two major surprise end-of-year donations - <AUTHOR> https://www.fsf.org/blogs/community/a-message-from-richard-m-stallman <comment><USER2> The Pineapple donation was almost exactly 1 year ago... hardly end-of-year and hardly "surprise"

<comment><USER3> The linked article doesn't say anything about "end-of-year". But it does refer to the donations as a "surprise".</comment></comment>


Interesting New Facebook Feature: People You May Know - <AUTHOR>

Facebook just added a feature called "People You May Know: Found based on your existing connections".
The algorithm seems to look for people who: 1. You aren't currently friends with. 2. Are friends with 4+ of your friends. 3. Are friends with at least two of your friends who come from different groups.
I think it's somewhat creepy, but more than that an interesting and useful application of data mining to the vast data on Facebook. <comment><USER2> Creepy YES! Do I really want to look at my ex's who are still friends of friends of mine? Just waiting for an emotional distress lawsuit to happen.

</comment><comment><USER3> I was really impressed with this feature -- I got a ton of new friend requests in the days following the rollout.</comment>


That "Five Monkeys Experiment" Never Happened (2014) - <AUTHOR> http://www.throwcase.com/2014/12/21/that-five-monkeys-and-a-banana-story-is-rubbish/ <comment><AUTHOR> ars posted this link as a comment in a separate thread, and given how often I see the "five monkeys and a banana" story tossed around, I thought this deserved more attention.</comment>


How to prevent your monitoring system from overwhelming you - <AUTHOR> http://tipsoftech.com/how-to-prevent-your-monitoring-system-from-overwhelming-you/

<comment><USER2> So basically, buying your application will make all the excessive alerts go away? I fail to see how.

<comment><USER3> Yeah...this is an ad, not info.</comment></comment>


Most Pressed Keys and Programming Syntaxes - <AUTHOR> http://www.mahdiyusuf.com/post/9947002105/most-pressed-keys-and-programming-syntaxes-2

<comment><USER2> I admit, the Lisp one at the end made me laugh.

For most other languages the focus seems to be mainly on letters (typing out keywords/identifiers), so in that sense there is little evidence that one language would be easier to write than another.

Additionally, I imagine that some of the code is auto-completed by an IDE, which this analysis fails to account for.

<comment><USER3> Shouldn't shift be twice as hot as the parentheses?

<comment><USER4> No because this heat map is clearly generated "offline". That is, this is built from a source-file dataset. An "online" dataset would be the output of a key logger. Online analysis would show the number of right parentheses to be a tiny fraction of left parentheses due to auto insertion and other paredit-like operations.

<comment><USER5> Still, the OP is right - for every character that can only be types by pressing SHIFT should also increase the counter for SHIFT.

<comment><USER4> If you want to be pedantic...

"Shouldn't shift be twice as hot as the parentheses?"

For offline analysis? No. Shift should be as hot as the _SUM_ of both types of parentheses. In practice, both parentheses will be equal in count modulo some epsilon for unmatched parenthesis in strings and comments. Therefore, shift will be _close to_ twice as either parenthesis.

For online analysis? No. Shifted characters can come into existence without being typed. For parenthesis, autocompletion is one way. Automatic bracket matching is another. There are many more, including template expansion, copy/paste, and several paredit operations.

<comment><USER6> If you want to be pedantic...

Shift is used for many combinations besides just parentheses, such as that capital at the start of this sentence. It would likely be more than twice as much.

<comment><USER7> A lot of emotions here. Making some of us jump to keyboard without reading carefully.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> If this were actual keys pressed while programming rather than an analysis of completed code, the action on app switch and editor meta-keys would rival that of the highest ranking regular keys.

</comment><comment><USER9> It would be nice to see these heat maps normalized by the average frequency of each key. Then you can really see what stands out about each particular language.

<comment><USER10> ... and normalized against the frequency of each letter in a dictionary of common English words. Most likely, 'e' is common in programming because it's the most common letter in English:

<http://en.wikipedia.org/wiki/Letter_frequency>

</comment></comment><comment><USER11> _Vaguely_ related, if anyone is interested in tracking their own typing (and individual key counts) check out <http://whatpulse.org> it's pretty great :-) (my profile, <http://whatpulse.org/stats/users/210575/>)

<comment><USER12> ...so this captures every key and mouse movement on your computer, then sends it to a 3rd party server for 'analysis'.

Seems legit.

<comment><USER13> I realize you're probably joking :) but the software just "pulses" the number of keystrokes and clicks to the server whenever you tell it to.

It can generate keystroke data like this, but the data is stored locally.

</comment></comment></comment><comment><USER14> I skimmed comments here and couldn't find anything that talks about why e is so popular? Is it because ETAOIN? Because almost no "{" "}" pressed in C/Java. Almost no ":" used in Python. "/" key is more popular than "[" "]" in Objective-C. This makes no sense. I don't believe that blog post.

<comment><USER15> Just off the top of my head, I'd guess it's due to a lot of e's in words that, depending on the language, you'll see in almost every single method or function. Things like return, end, else, true, include, self, private, etc.

<comment><USER16> Don't forget set / get, which ubiquitous in almost every language.

</comment></comment></comment><comment><USER17> I would like to see what a heatmap generated from a "real" typing session would look like (with a keylogger). You could see the influence of the editor as well.

Since these are generated offline, the keyboard heatmaps are meaningless and the representation is slightly misleading IMO.

</comment><comment><USER18> A live sample would be much more interesting, both would be best. I'd be most interested in the meta keys. As a scandinavian especially {}, [] etc. buttons are very awkward to press. Infact, so are most special characters used in programming.

As mentioned, auto-complete and similar functionality change the heatmap, but that's what people actually press. This data would be alot better for actual use.

Though I don't mean it as a scold, it wasn't really in the hands of the author to collect such vast amounts of live data, and surely a lot more work than was his intension.

</comment><comment><USER19> It's not really measuring "pressed keys", it's measuring a final product -- I'd be interested to see which languages highlight the backspace/delete keys more.

</comment><comment><USER20> I'd be interested in seeing which keys I press most when I'm programming in APL.

<comment><USER21> They tried measuring that and accidentally created the runes to summon an angry Elder God, with predictable consequences.

</comment></comment><comment><USER22> Next bit would be interesting to look at hand position of programmers in different languages. I know when I am programming Perl my right hand tends to move back and forth into different positions while my left hand stays in the standard position. Wondering if I am unique there or if it is common, and how other languages affect this.

</comment><comment><USER23> I'd be curious to see the same analysis done but with alternate keyboard layouts, such as dvorak or colemak.

<comment><USER24> It'd come up exactly the same, unless you're going to pick out the dvorak- users on github. Even then I wouldn't expect much difference. We're measuring characters in code, not actual keypresses.

</comment></comment><comment><USER25> "Shift" is a big omission, though you can guess at it from the emphasis on certain numeric keys. One of the great things about Python is that there are fewer chorded characters. It's also one of the worst things about Lisp on a standard keyboard.

<comment><USER26> Hi, I added shift counting to Mahdi's code a while ago: (<https://github.com/zaki/Keyboard-Heatmap-1>), so it should be easy to generate more correct heatmaps (in multiple keyboard layouts too) if you are interested.

</comment></comment><comment><USER27> Interesting, but a different visualisation would be even more interesting: heat maps showing deviations from the mean. This would highlight the differences between the languages, which (except for the case of Lisp) are rather subtle.

</comment><comment><USER28> It would be nice to consider how auto-completion actually biases the real distribution of key-presses, e.g. I wouldn't expect closing parenthesis or brackets to be pressed as often as their opening counterparts.

</comment><comment><USER29> Not if you're an emacs user. I use key-chords most programming language forms.

Also, for Lisp, I never touch the closing paren. M-( does both at the same time.

</comment><comment><USER30> Here are the keys directly under my fingers on the home row: A R S T N E I O

And I can visually see the reasoning behind Colemak being like this, now.

</comment><comment><USER31> It'd be useful to use the histograms to distinguish between different programming languages for automatic language detections of something like gists.

<comment><USER32> highlight.js [1] does this, though by running highlighters rather than using some learning-based mechanism. It feels wasteful to run this on display rather than storage, though. SourceClassifier [2] also works, though with less languages. And here's [3] an implementation made with Bayes and Go.

[1] <http://softwaremaniacs.org/soft/highlight/en/> <http://softwaremaniacs.org/media/soft/highlight/test.html>

[2] [http://blog.chrislowis.co.uk/2009/01/04/identify- programming...](http://blog.chrislowis.co.uk/2009/01/04/identify-programming- languages-with-source-classifier.html)

[3] <https://github.com/octplane/go-code-classifier>

</comment></comment><comment><USER33> Interesting how "i" is more common in some languages than others. C and C++ make sense (for(i = 0; i < n; i++)), but Ruby is a puzzler.

<comment><USER34> "nil" "if" and "elsif"

EDIT: though looking at my sources, where it seems to also be popular, it mostly seems to match inside non-syntax (field, nickname, to_i, strip, index, client).

<comment><USER35> How about |i|?

<comment><USER34> not popular in my sources apparently, though there are many |obj, idx| :)

</comment></comment></comment></comment><comment><USER36> I can understand 0 and 1 being frequently used. But I wonder why 5,6 & 7 seem to be under-used compared to the other numbers?

<comment><USER37> I was thinking the same thing until I looked at Perl, which has 4 being quite frequent.

The reason, of course, is that 4 is also $, which is used to denote a scalar in Perl.

Thus, because 5,6,7 correspond to %,^,&, which generally get used to a lesser degree for things like modulo, hashes, exponentiation and logical-and, they're used less.

</comment></comment><comment><USER38> What looks strange to me is that semicolon is is not one of the most common in C-derived languages.

</comment><comment><USER39> Why is E the most common across multiple languages (except Lisp (which I assume is due to the parentheses))? I assume it's usage is higher because it's a vowel, but none of the other vowels are nearly that high.

<comment><USER40> E is the most common letter in the English language. There was even a fun book written without the e: <http://en.wikipedia.org/wiki/Gadsby_(novel)>

<comment><USER41> There is also _A Void_ : it was originally written in French, which (I think) uses the letter "e" more often than English and then translated to English. In both cases it did not use the letter "e" at all.

I only know about this because it was referenced in a book on cryptanalysis. The simplest sort of cipher can be broken by paying attention to the relative frequency of letters in the original text. I remember a useful mnemonic for remembering the most common letters: the sentence "a sin to err" contains them. E, followed by t and a, are the most common out of those (t and a are very close).

<comment><USER42> 'r' and 'h' are very close, and some sources have 'h' as more common.

</comment></comment></comment></comment><comment><USER43> What kind of C programming is this guy doing? '*' is relatively untouched.

<comment><USER44> Guess: maybe all the pointers to structs are typedef-ed away?

</comment></comment><comment><USER45> Dear author: would you consider also generating the results for Dvorak?

<comment><USER46> and programmer dvorak :D

</comment></comment><comment><USER47> I wonder what a programming language designed to minimize shifting would look like. Python does a pretty good job because it uses few curly brackets and no semicolons.

<comment><USER34> sadly, highly dependent on keyword layout, e.g. my keyboard has square brackets and the equals sign only accessible via a key combination, while the US keyboard does not.

It seems the only safe character across many countries are 0-9a-z.,-\ plus space/tab/return. Not a lot to work with :)

<comment><USER48> That's part of why I always use a US layout, even on UK keyboards. Also because I've grown up with it.

</comment></comment></comment><comment><USER49> Gotta say, I expected more square brackets for Objective-C.</comment>


Ask HN: Self taught programmer, now wanting to learn more about CS theory - <AUTHOR> Please show me the best free / online courses to allow me to gain a further understanding of CS theory and other closely related theory (Maths, cryptography, etc). If this has been asked before or something similar please link. Thanks. <comment><USER2> Two books (get used copies for cheap);

* Foundations of Computer Science - [http://infolab.stanford.edu/~ullman/focs.html](http://infolab.stanford.edu/~ullman/focs.html)

* Specifying Software: A Hands-On Introduction - [https://www.amazon.com/Specifying-Software-Hands-Introductio...](https://www.amazon.com/Specifying-Software-Hands-Introduction-Tennent/dp/0521808146/ref=sr_1_2?keywords=specifying+software&qid=1573621751&s=books&sr=1-2) The name is a misnomer. See the ToC. This is actually a practical introduction to CS theory.

<comment><USER3> Pretty cool that the authors on the Foundations of Computer Science make the chapter PDF's available free since it is no longer in production. Just skimming through parts of it, definitely seems like a good learning resource.

</comment></comment><comment><USER4> [https://teachyourselfcs.com/](https://teachyourselfcs.com/)

<comment><USER5> This is one of the best resources in the context of the questions.

</comment></comment><comment><USER6> My current favorites:

[https://runestone.academy/runestone/books/published/pythonds...](https://runestone.academy/runestone/books/published/pythonds/index.html)

Grokking Algorithms

Classic Computer Science Problems in Python

<comment><USER7> +1 for Grokking Algorithms!

</comment></comment><comment><USER8> This was recommended to me:

[https://www.edx.org/course/introduction-to-computer- science-...](https://www.edx.org/course/introduction-to-computer-science-and- programming-using-python-0)

You can do it for free (or pay to get academic credit). I haven't yet managed to start the course.

</comment><comment><USER9> maths:

\- Linear algebra (fischer's book)

\- analysis (koenigsberger's book)

\- discrete maths (zorich's books)

\- probability theory (all of stats - wassermann)

foundations:

\- parallel programming (A minicourse on multithreaded programming Charles E. Leiserson, Harald Prokop.)

\- algorithms and datastructures (Widmayer's book)

core:

\- systems (Computer Systems: A Programmer's Perspective" (3rd Edition) by R. Bryant and D. O'Hallaro)

\- network (Computer Networking: A Top-Down Approach, James F. Kurose and Keith W. Ross)

\- numerical methods

\- data modeling and dbs

\- formal methods and functional programming (Miran Lipovača. Learn you a Haskell for great good!)

(eth zurich's bachelors)

All the books are one google search away.

</comment><comment><USER10> I'm really enjoying Types and Programming Languages right now. Imagine that rather than explaining typing using metaphors (a useful activity), people started at a much lower level and built up from there. That's this book!

[https://www.cis.upenn.edu/~bcpierce/tapl/](https://www.cis.upenn.edu/~bcpierce/tapl/)

</comment><comment><USER11> TLA+. This will make you a better programmer.

[http://lamport.azurewebsites.net/video/videos.html](http://lamport.azurewebsites.net/video/videos.html)

<comment><USER12> TLA+ and similar tools are certainly interesting but hardly something I could recommend as an early step to take for someone wanting to learn more about CS.

If you want to prove protocols correct, sure, but for someone wanting to move from knowing something about programming to something more, this is not one of the first (20) steps I would recommend.

<comment><USER13> I get what you mean, but it's worth remembering that TLA+ is a language that is designed foremost for _thinking_ about CS stuff, and at the end of the day, it's "just" an improved notation for mathematics (particularly the kind of math that's relevant for describing systems). In fact, Lamport didn't even believe it was possible for TLA+ to practically run on a computer when he invented it (someone else did TLC).

So, here are a few reasons that recommend learning TLA+:

* If you already know how to program, you can learn it pretty quickly; almost certainly in less than a month. Just use TLC as a highly responsive yet infinitely patient teaching assistant.

* Once you learn TLA+, you'll not only find it easier to think about systems and algorithms, but you'll also have more opportunities to practice since you just need pencil and paper. I find myself doodling in TLA+. I'll even go so far as to say that TLA+ has a Tetris Effect[1].

* This is probably true of most esoteric technologies, but since TLA+ is pretty obscure, the community is still in that sweet spot that is the intersection of smart and friendly. Lamport answers questions in the mailing list.

* Just my opinion, but TLA+ (or something very much like it) is part of the future of CS pedagogy.

[1] [https://en.wikipedia.org/wiki/Tetris_effect](https://en.wikipedia.org/wiki/Tetris_effect)

</comment></comment></comment><comment><USER14> [https://bigmachine.io/products/the-imposters- handbook/](https://bigmachine.io/products/the-imposters-handbook/)

<comment><USER15> I really enjoyed this one too!

</comment></comment><comment><USER16> [https://github.com/ossu/computer-science](https://github.com/ossu/computer- science)

</comment><comment><USER17> How to Design Programs

[https://www.htdp.org/](https://www.htdp.org/)

<comment><USER18> It's more like an opposite - learn programming for CS people :)

</comment></comment><comment><USER19> go to edx.org and take cs50 from Harvard University</comment>


AsiaBSDCon 2020 Cancelled - <AUTHOR> https://2020.asiabsdcon.org/ <comment> 1-6 Just when BSD should have gained more momentum. #systemdsux #jailsWereAroundBeforeContainers #ZFS

<comment> 1-6 The program for this convention was very slim pickings anyway... Netflix is the only big company presenting (of course). I'm saddened how cloud providers have given no love to BSD.

<comment><USER2> What advantages does BSD have over Linux?

<comment> 1-6 For me, I like understanding what's going on under the hood. OS's like FreeBSD are very straightforward. When I use even a carrier-grade Linux distro, I'm more detached to the internals and entrusting my setup more to some other party. You lose compatibility for more stability.

</comment></comment></comment></comment><comment><USER3> Kinda suprised NABShow in Vegas hasn't been cancelled yet...I feel like any day now.

<comment><USER4> I have direct connections who will be incredibly negatively impacted by the financial repercussions of all the lost business opportunities if NAB weren't to happen. Broadcast Media is contracting at best, and this won't help.

I'm not saying it won't be the right call, but it will have rippling effects beyond mere inconvenience.

<comment><USER5> As opposed to the rippling effects beyond mere inconvenience if they let it go through.

</comment></comment></comment><comment><USER6> So when something like this happens, what do people do about potentially $1000 in unrefundable airfare?

<comment><USER7> depending on your airline, they may offer credit or let you change your flight without any fees.

[https://www.delta.com/us/en/advisories/other- alerts/coronavi...](https://www.delta.com/us/en/advisories/other- alerts/coronavirus-situation)

</comment></comment><comment><USER8> Yikes. Curious what's gonna happen for WWDC.</comment>


Don't Get Distracted - <AUTHOR> https://www.calebthompson.io/talks/dont-get-distracted/ <comment><USER2> I enjoyed that, there is some guilt in building software. You never know how it could be used, like Facebook being used to sway elections, bully people... it seems like ANY technology can be weaponized.

(Also the menu on the top left resembles a swastika by the way.)</comment>


Microsoft pushes Windows 10 Holographic as the one-stop option for VR and AR - <AUTHOR> http://arstechnica.com/information-technology/2016/06/microsoft-pushes-windows-10-holographic-as-the-one-stop-option-for-vr-and-ar/ <comment><USER2> Posted another article on this topic before I found yours.

Microsoft is terrible at naming things. This needs to be called Microsoft Doors.</comment>


Zuckerberg outlines plan for 'privacy-focused' Facebook - <AUTHOR> https://www.bbc.co.uk/news/world-us-canada-47477677 <comment><AUTHOR> The article references there being no firm plan/timeline for this action.

I am curious if this is in response to internet denizen traffic (Reddit,HN, etc.) or (probably more likely) to users leaving FB en-masse (see [https://news.ycombinator.com/item?id=19322448](https://news.ycombinator.com/item?id=19322448))?</comment>


Is the Mill CPU real? (2014) - <AUTHOR> http://blog.kevmod.com/2014/07/the-mill-cpu/ <comment><USER2> It might not end up with the hoped for performance per watt -- or even with all that good performance, period. It might not even be built in silicon.

But it is a damn interesting architecture.

You don't get to present bits and pieces of it over several EE380 talks unless the grownups think it is interesting, too.

(It is also a lot less like the Itanic than it initially seemed. I think we will know a lot more in about a month, since there will be a new talk in Amsterdam about the new vector model and their µthreading model.)

</comment><comment><USER3> Some responses to comments here:

We do not have an FPGA implementation, although we are working on it.

The reason getting to product is slow is that we are by choice a bootstrap startup, with three full-timers and a dozen or so part-timers. Compare a CPU project at a major such as Intel or ARM, with hundreds of full-time engineers, big budgets, and five years of development before the product is even announced - all for minor modifications to an established and well understood design.

The Mill architecture is notable primarily in what it takes out of the CPU, rather than what it puts in.

Patents are a backbreaking amount of work. To economize in filing costs our attorneys have consolidated what we expected to be separate patents into single filings - no less work, just fewer/bigger and hence cheaper. So far the twenty filings that have gone in represent around two thirds of the core technology. And if you think that 80-odd pages of patentese is fun then you are more kinky than should be let out in public.

"Architecture astronaut" is a cute term, not restricted to architecture; I have more than enough experience with those full of ideas - for someone else to do. We have done a lot of architecture over the decade, but a fair amount of work too. For a live demo the result of some of our work see [http://millcomputing.com/docs/specification/](http://millcomputing.com/docs/specification/)

While I have worked in academia, I am more comfortable in an environment making real things for real people (or trying to) rather than sheepskins.

The purpose of our talks is to get professional validation of the design in a way we can afford. It is not to sell you something; it will be quite a while before we have something to sell, and you are not our customer.

We have a private placement in process and welcome Reg-D qualified investors. If you do not know what that is then you probably aren't. For details: [http://millcomputing.com/investor-list](http://millcomputing.com/investor- list). We are not cruising Sand Hill Road. We estimate ~$6M to an FPGA, and $25M to a product. Heavy semi is serious industry.

In early days I did my first compiler for a Bob Barton-designed machine, the Burroughs B6500. That compiler is still in use forty five years later. I wish Barton were still here today; the Mill owes a great deal to his design philosophy.

Ivan

</comment><comment><USER4> The most interesting thing I took from the Mill videos I watched is the way they define the processor features in code. They can describe the whole specification in code, compile and test the CPU. Then get enough information from the simulation to actually put together the layout for the physical cpu. You can add or remove features from the CPU by implementing the proper functions, and test the specification before committing to silicon. My background is software, so maybe it's not as impressive as it sounds, but it really caught my ear as an elegant solution to customizing a processor architecture for different needs.

[http://millcomputing.com/docs/specification/](http://millcomputing.com/docs/specification/)

<comment><USER5> What do you mean by code? Most digital chip design is done in Verilog or VHDL which are hardware description languages.

<comment><USER6> Take a look at Chisel ([http://chisel.eecs.berkeley.edu](http://chisel.eecs.berkeley.edu))... they call it a "Hardware Construction Language" instead of a HDL, as you describe how the hardware works in chisel code, which is just a Scala embedded language. It is then able to generate FPGA or VLSI optimized verilog, and a C++ cycle accurate simulator. I have been using it for the past ~9 months designing a new chip.

<comment><USER7> What is your experience with Chisel? How much more productive are you compared to writing Verilog?

I am interested in trying out new tools, but information on Chisel is pretty sparse.

</comment></comment></comment></comment><comment><USER8> I really hope that mills go into production. One thing that current comments have not mentioned is that there are huge security wins using a mill. Even if there are concerns about performance I think that the security architecture has use cases that will see mills brought into production.

</comment><comment><USER3> The original of this discussion was a blog post on kevmod.com. I posted the following comment on that blog, repeated here verbatim as possibly of general interest: ++++++++++++++++++++++++++++++++++++++++++++++++++++ Your skepticism is completely justified. The Mill may never reach market – we are a startup, and most startups fail; its a fact of life. Although we've survived for over a decade, which is pretty good for startups these days.

But it sounds like you are less skeptical about Mill Computing the company, but more about Mill the technology and architecture. There are fewer ground to doubt that. As fast as we have been able to get the patents filed (I seem to have been doing nothing else for the last two years. I _hate_ patents) we have been completely opening the kimono and showing the technical community, in detail, how each part works. Why? because we wanted outside validation before wasting another decade in something that was fatally flawed in some way we had overlooked.

If there was any part of the public Mill that one could point at and say "See? that won't work, because …" then the web would have been all over us. Buy you know? Skepticism we get, aplenty. What we don't get is _informed_ skepticism. In fact, the more senior and skilled the commenter, the more they fall in love with the design. Like Andy Glew said one time (and if you don't know who that is then you are not in the CPU business) – "Yeah, it'll work, just the way he says it will".

Sometimes people complain that our presentations are insufficiently detailed to fairly evaluate. Guilty as charged; they are oriented for a high level audience interested in the subject, but not for the specialist. However, if you ask for details on our forum (mill computing.com/forum/themill) or the comp.arch newsgroup, as hundreds have, you will get all the details you want until they flood out your ears and collect in puddles on the floor.

In these days of internet time, when idea to market is measured in days or weeks, it's east to forget that not all the economy works that way. Building steel mills, cement plants, and yes, CPU silicon takes a _long_ time and a _lot_ of money. We have deliberately swapped money for time: we are a bootstrap startup, not looking for VC funding. There's good and bad in that choice: a decade without a paycheck is not easy, but today we own it – all of it – and feel we got a good deal.

The proof of the Mill pudding will be when there's a product with pins on the bottom, and that won't happen for some years yet. We learned in our first presentation not to make projections of what the eventual chip will have for numbers. Yes, we have guesstimates internally, but we're quite sure those will be off by a factor of two. The problem is that we have no clue which direction they will be off.

If you have the technical chops to understand a CPU design from first principles then please dig as deep as you can into our stuff and tell us – and the world – what you find. Otherwise you will just have to join us as we wait and work and see. We've never said anything different.

Ivan

</comment><comment><USER9> I suspect that they have versions of it running in FPGAs but they aren't releasing anything to a wider audience because it's an FPGA and probably 5-50x slower than it would be if it was in custom silicon.

So it's incredibly useful for them to test out ideas, but would probably garner a lot of bad impressions even if you explain "look this is super slow" because people have the idea that revolutionary is supposed to be extra fast, extenuating circumstances be damned.

<comment><USER10> I think I remember them saying either in one of the talks or in a comment somewhere (sorry I can't be more specific), that, yes, they do have it working on an FPGA, but since the purpose is only to test the design, it doesn't run anything like impressively fast, because they aren't utilizing the resources efficiently.

EDIT: by resources, I mean, the specialized logic and chunks of RAM that exist inside FPGAs.

Found it: [https://groups.google.com/forum/#!topic/comp.arch.fpga/BTojR...](https://groups.google.com/forum/#!topic/comp.arch.fpga/BTojRuH6p08)

<comment><USER9> If you can describe something for an FPGA it's not a huge leap to get it into silicon. A lot of people got pissed once they realized that the custom bitcoin mining ASICs were actually the open-source FPGA designs simply "burned" into an ASIC.

I suspect that the reason everything is taking so long is that they have to re-write so much of the core stuff (standard library, OS, drivers, etc). But once you can boot linux on a very slow FPGA I can't see a lot of reasons not to start making the ASICs.

<comment><USER11> You are certainly right in a sense, because both FPGA and silicon is usually described using some VHDL or Verilog. So once they have a working FPGA, it's not too difficult to get it into _some_ silicon.

However, to get it into _fast_ and _power-efficient_ silicon is still a ridiculous amount of work. FPGA technology is vastly different from directly designing VLSI circuits. For one thing, they'll most likely have to use different pipeline designs to squeeze the cycle times low enough.

I worry that the Mill people are vastly overconfident. There are very interesting ideas there, but I suspect that they are trying to improve so many aspects of a CPU at once that they will be unable to execute any of them well. The end result is likely that sub-par execution leads to inefficiencies that accumulate to the point where any of the theoretical advantages of their design gets overwhelmed - especially since many of their ideas can be integrated by competitors as well. That said, I'd love to be proven wrong here.

<comment><USER9> So at first I totally agreed with you, which is why I didn't post anything right away. But now that my subconscious has had a day to chew on things, I think I don't agree quite as much.

The really interesting thing about the Mill is that it does away with a HUGE portion of what a CPU does: out-of-order execution (OOE). These days the amount of die space that's dedicated to reordering and dependency checking and the commit engine is substantial, and that stuff really slows a processor down because the thing that are happening at the end of the pipeline depend on what's happening at the beginning. At 4GHz the best-case scenario the wavelength is 75mm, and the 1/4 wavelength is thus 19mm, on the order of the size of the die!

What the Mill does is push the reordering and dependency checking to the compiler so that the hardware itself is "dumb" at least insofar as not doing all the checking for OOE and multiple dispatch, etc. Further since the instructions are ordered as blocks and that blocking is done by the compiler, the processor doesn't even need any logic to assign instructions to functional units; that's done at compile time.

I agree that fast and power efficient silicon is a challenge, but again because they're not mixing execution with reasoning about execution (OOE, multiple dispatch, commit engine, etc) it's much, much easier to make the layout fast. I believe that instructions and data will flow through the Mill in a way that makes regular CPU architects envious.

I still suspect that a huge amount of the delay is due largely to the general weirdness of the architecture; it's not like an x86 to ARM port because those have a lot of the same basic assumptions baked in and the only difference is the instruction and data encoding. On the Mill few of the assumptions are the same and so you might have to re-write a LOT of code to boot a Linux kernel.

<comment><USER11> You make a very good point. I do like to give you one additional aspect to consider: While the Mill saves on instruction scheduling logic (and register renaming, and certainly also has the benefit of re-thinking opcodes and instruction decode), there are other features that add complexity again. Making a subroutine call appear as if it were a single instruction has got to be tricky, for example.

In the end, I have only seen CPU design from a physical design tool support point of view. I don't really have the necessary experience to judge the relative complexity of out-of-order+register renaming vs. whatever the Mill aims to do. You're probably right that the Mill is simpler.

Part of it is that all we really know about all this comes from a bunch of talks that focus on what the Mill looks like to the user. Who knows what their physical design story is. I just hope, for their own sake, that they have been working on that part of it for a significant amount of time as well.

<comment><USER2> > Making a subroutine call appear as if it were a single instruction has got > to be tricky, for example.

I suspect they use the same machinery for that as they use for handling mispredicted control flow and interrupts/exceptions/faults.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> On the other hand, their wiki does have a lot of extremely interesting details about the processor and ISA design, and they have presented several concrete examples of how to get around the problems with Itanium.

It would be nice to hear from some more people in the industry about it, or see some more results, but I remain cautiously optimistic.

</comment><comment><USER13> I have the same impression as you and commented here a while back. I think the answer to your question falls somewhere in the middle.

They are smart guys with interesting ideas, but will not be buying fab capacity or selling products anytime soon or most likely ever.

However there is a lot of value in provocative thinking. It adds to the collective knowledge and inspires new perspectives and approaches to problem solving. That alone makes me glad their around.

On the high end of expectations they may sell some patents or license some IP, but still not in the form of a complete or competitive product.

</comment><comment><USER14> I've subscribed to the hype, but my knowledge of the domain is near zilch. It would definitely be interesting to hear a high level engineer at a company like Intel or ARM comment on the design.

<comment><USER2> Take a look at the comp.arch newsgroup.

Names to look for, apart from Ivan Godard, are Andy Glew, Mitch Alsup, and Terje Mathisen.

[https://www.linkedin.com/in/andyglew](https://www.linkedin.com/in/andyglew)

[https://www.linkedin.com/pub/mitch- alsup/7/153/869](https://www.linkedin.com/pub/mitch-alsup/7/153/869)

[https://www.linkedin.com/pub/terje- mathisen/1/18/b74](https://www.linkedin.com/pub/terje-mathisen/1/18/b74)

They don't necessarily believe that it will succeed or that the whole architecture is good -- but the consensus seems to be that it at least is interesting.

</comment></comment><comment><USER15> Ivan Godard posted twice recently [http://www.reddit.com/user/igodard](http://www.reddit.com/user/igodard)

</comment><comment><USER16> Last I heard, they've been spending most their time getting patents filed since the US switched to first-to-file in 2011. There might be more physical progress once that's done, or so I hope.

</comment><comment><USER17> I filed the Mill CPU under "call me when you ship" quite a while ago, because the constant "let me tell you how we will solve that with Mill" threat-squats got really old and in 30 years of doing this I've seen way to many "no, really, this is going to change all of computing as we know it" architectures proposed, that never amounted to anything worthwhile, and here in 2015 I'm still buying the 8086's grandkid. At least ARM and MIPS are keeping it somewhat interesting, and Power 7 and T5 are looking at interesting architecture innovations, and, most importantly, are actually shipping something instead of hanging out on HN telling us how _awesome_ it will be one day.

</comment><comment><USER18> I'm interested to see how a compiler for the Mill CPU would handle such large instruction widths. Whilst it doesn't have the restriction VLIW had of having a fixed instruction width, I'm not entirely convinced we would often see 30+ operations packed in the same instruction.

<comment><USER19> The pipelining talk gives some good examples of where most the the instruction level parallelism comes from. [http://millcomputing.com/docs/pipelining/](http://millcomputing.com/docs/pipelining/)

Most of the rest of the CPU design is really just to enable this.

</comment></comment><comment><USER20> I have watched most of the Mill videos, and while they are certainly impressive and innovative, I believe Ivan Godard is a perpetual non-finisher. He comes up with grandiose complicated ideas, which turn out incredibly difficult to implement, debug, and close. And by the time he makes much progress, he has another idea that takes his focus, and starts working on that. He has these massive goals, which are certainly noteworthy, but possibly does not realize it's likely not possible to do them in one step.

You have to release incrementally, get something out the door, and then move to the next. Not "Let's design and architect a complete ASIC from scratch, based on an architecture from scratch, using a prototype simulator from scratch, with a toolchain built from scratch, with a new ABI for Linux, and a complicated debugger. Oh, and this is actually a family of processors (low perf/high perf), not just a single processor we are building."

It's the opposite of MVP. If he really wanted to make progress, he would find a way to incrementally build one piece of his suite of technology IP that he can license to existing CPU manufacturers and get into production. Then you have revenue, and can rinse and repeat. Otherwise the Mill as vaporware is a virtual certainty.

<comment><USER21> I believe the appropriate term for someone like this is "architecture astronaut"

Edit: Apparently this is where I heard the term: [http://www.joelonsoftware.com/articles/fog0000000018.html](http://www.joelonsoftware.com/articles/fog0000000018.html)

Obviously this was written from a software engineering perspective, but it seems at least marginally fitting, as the topic in question is literally computer architecture.

<comment><USER22> "Researcher" is also an appropriate term that also happens to have the virtue of not being pejorative.

Even though they're not popular in the business world, we do also need people who will change their goal when confronted with new ideas, rather than just the ones who filter ideas based on their service to a goal.

We even gave a Turing award someone like that a few years ago.

<comment><USER23> "Researcher" is appropriate for someone who actually produces academic output. It may not be immediately practical, but it consists of new ideas that have been formalized and tested sufficiently to pass peer review of other researchers.

Has the Mill architecture done that? Are there any actual papers about it? Anything beyond marketing fluff?

It seems like there are some ideas behind the Mill that seem interesting when you hear about them, but I haven't seen anything rigorous enough to even be reviewable.

And it doesn't look like that is the intent, either. Rather, from all appearance, it looks like they are trying to drum up interest for investment.

<comment><USER22> This may just be a semantic quibble, but I'd say that someone that produces academic output (usually in the form of original research) is an "academic", and the academy has it's own peculiar rules for deciding which output has merit.

The Mill stuff is just an example of research taking place outside of the academy.

<comment><USER23> If you are not producing any academic output, are not producing any commercial output, and are not even producing any patents, all you are producing is high- level handwavy talks, how do you distinguish that from a charlatan?

Ideas in a vacuum are not worth much. I have some random ideas for systems that I think would work better than current systems that people use all the time; stuff I would like to get to some time to develop into something real. However, without actually either rigorously formalizing those ideas and having them reviewed against the current literature, or producing a shipping implementation that demonstrates their feasibility empirically, they're pretty much worth the cost of the paper they are (not) written on.

<comment><USER22> (sent from a mobile; please pardon the typos)

Detrminatuon of charlatanism and crackpottery is also a function of past performance; no one considers that Shinichi Mochizuki's proof of the ABC Conjecture is the product of a crackpot, even though people are still working to understand it nearly 3 years hence.

According to the Financial Times:

"Godard has done eleven compilers, four instruction set architectures, an operating system, an object database, and the odd application or two. In previous lives he has been founder, owner, or CEO of companies through several hundred employees, both technical and as diverse as a small chain of Country Music nightclubs and an importer of antique luxury automobiles. Despite having taught Computer Science at the graduate and post-doctorate levels, he has no degrees and has never taken a course in Computer Science."[1]

Mill may turn out to be another Xanadu. On the other hand, the nice thing about computers is that you can use them to simulate anything, including a better computer (with respect to X), so it's not crazy to think that Mill may have something serious to offer.

Also, Godard sounds a lot like this this guy: [http://en.wikipedia.org/wiki/Robert_S._Barton](http://en.wikipedia.org/wiki/Robert_S._Barton) who designed this [http://en.wikipedia.org/wiki/Burroughs_large_systems](http://en.wikipedia.org/wiki/Burroughs_large_systems).

[1] [http://www.ftpress.com/authors/bio/de5f140d-e5bf-4e83-b020-1...](http://www.ftpress.com/authors/bio/de5f140d-e5bf-4e83-b020-1db28a80b71c)</comment></comment></comment></comment></comment></comment></comment>


Drawing with HTML5 Canvas - <AUTHOR> http://ajaxdraw.altervista.org/ <comment><USER2> It seems you have to select the drawing tool for every new line you make.

(Chrome, OSX.)

</comment><comment><USER3> FWIW, dysfunctional on iPad. Wants to select and scroll instead of draw.

<comment><USER4> Further proof that mouse events and touch events are not the same.

I'm working on a concept for the iPad that is similar and came here hoping that it would work on a touch screen as well, but looks like there's no silver bullet.

</comment></comment><comment><USER5> A little bit broken on Safari/OSX, isn't there a way to avoid getting the text selection cursor?

Also, select all, selects the whole page, instead of the objects on the canvas.</comment>


Ask HN: what things about yourself do you track regularly? - <AUTHOR>

I am building a web dashboard for myself to input and track weight, expenses, training sessions, stuff like that. Possibly even mood and other more exotic variables (the cognitive cost of maintaining the input goes down if it all goes into one dashboard so I can afford to track more stuff then).<p>I might as well build something that others can use, hence my question :) <comment><USER2> I use Apple's Numbers to track weight, blood pressure, intensity of workout (number of meters rowed, time, number of push-ups and pull-ups).

I have tried apps from time to time but nothing gives me the flexibility of a simple spreadsheet. For example, I can add notes to explain odd circumstances (ie. indulged in drinking, slept late, etc.)

<comment><USER3> Check out runningahead - while it won't do blood pressure, it does a great job tracking physical activities and weight... supports notes, weather, and other variables. Not sure it will handle # of pullups/pushups as it tracks activities mainly in time. However... you could just say 1 second per pull up and put it in as seconds. They have good built in reporting - and it's free (ad supported). I am not affiliated in any way, just a long time user. spreadsheets didn't work for me as web access was important...

</comment></comment><comment><USER3> diet and weight - myfitnesspal.com workouts - runningahead.com & strava.com places i go - foursquare.com finances - mint.com auto gas efficiency - fuelly.com

Though I use the apps, not the sites</comment>


Why I (Still) Love Tech: In Defense of a Difficult Industry - <AUTHOR> https://www.wired.com/story/why-we-love-tech-defense-difficult-industry/ <comment><USER2> This is the same author as the amazing 2015 Businessweek full-issue article, What Is Code?, which was quite popular on HN.

[https://www.bloomberg.com/graphics/2015-paul-ford-what-is- co...](https://www.bloomberg.com/graphics/2015-paul-ford-what-is-code/) [https://news.ycombinator.com/item?id=9698870](https://news.ycombinator.com/item?id=9698870)</comment>