Japanese hidden tenon joint technique - <AUTHOR> http://www.aisf.or.jp/~jaanus/deta/j/jigokuhozo.htm <comment><USER2> Wild! In English, this seems to be a "blind wedged tenon" or a "foxtail joint": [http://www.craftsmanspace.com/knowledge/wedged-tenon-and- mor...](http://www.craftsmanspace.com/knowledge/wedged-tenon-and-mortise- joint.html)

I wonder if this might have useful application for 3D printing, since creating the wedged mortise would can be done easily. Possibly the tenon could even be created with the wedges in place?

</comment><comment><USER3> It's a fox joint or fox wedge joint.

[http://www.basiccarpentrytechniques.com/Woodwork%20Joints/Wo...](http://www.basiccarpentrytechniques.com/Woodwork%20Joints/Woodwork%20Joints%205.html) (You need to scroll down a ways)</comment>


Visual Studio 2019 Time Travel Debugging with Azure VMs - <AUTHOR> https://devblogs.microsoft.com/visualstudio/introducing-time-travel-debugging-for-visual-studio-enterprise-2019/ <comment><USER2> This seems pretty fantastically innovative. I'm curious if any other IDEs have a similar feature?

<comment><AUTHOR> Based on a search for the keywords "time travel debugging" [1] of HN I'm not sure how innovative it is as there are a number of articles for other environments. Still, it seems like the inclusion in VS 2019 makes it easier to perform this, with the caveat that you're using Azure. I'm surprise that it's not available for a local production stack. UPDATE: I was wrong. This is available for a local stack: [https://devblogs.microsoft.com/dotnet/debugging- net-apps-wit...](https://devblogs.microsoft.com/dotnet/debugging-net-apps- with-time-travel-debugging-ttd/) The announcement is more related to working with Azure VMs.

[1] [https://hn.algolia.com/?query=time%20travel%20debugging&sort...](https://hn.algolia.com/?query=time%20travel%20debugging&sort=byPopularity&prefix=false&page=0&dateRange=all&type=story)</comment></comment>


Ask HN: What you think about differential unit testing? - <AUTHOR>

Our website currently has little/no unit tests (we have selenium testing and manual testing).  We would like to start testing more, but we're running into a quandary as how to start.  Much of our code is not written in a way that lends itself to unit testing so to be able to start testing, we have to refactor, which might break everything.
One approach that's come up is called "differential unit testing" where I don't need to go in a write the tests - but I measure the inputs and outputs of different functions and I monitor if they changed after my code changes (at least that's how I understand it.)  There's a paper about it at http://web.engr.illinois.edu/~taoxie/publications/ast07-diffut.pdf.  I first encountered a version of the idea at http://zachholman.com/talk/move-fast-break-nothing/ (their case they are running both in parallel so it's easier to check each case - but the concept would be the same if I had common input cases and output cases.)
Now it's question how I implement such an approach. One way might be put in certain waypoints in my code where I can run a stack trace and save it - then use those inputs to different functions as my test cases.  I save a "baseline" and then as I change my code, I run the tests, looking for changes.
I can see several issues with the approach.  It might test too many versions - I don't know which are important changes to test and which are insignificant (without manual intervention.)  I might actually have a broken implementation to start  - and I'm comparing agains that. maybe others..
I'm not try to suggest this approach would replace more traditional unit testing - but as a form of "canary" to detect when something is not how it use to be at a more granular and earlier level than doing full integration testing.
I'm curious if anyone else has tried this approach and what your opinions are? <comment><USER2> GitHub has done this, when rewriting their permissions code. They gave a talk about it at rubyconf 2014 and you can learn more about their experience and wrapped up the ruby code they used in a gem available at [https://github.com/github/scientist](https://github.com/github/scientist)

You might find it useful to read their source, the same techniques could probably be easily adapted for your usage.

Unfortunately I am heading off to work and don't have time to elaborate further but to very briefly answer your question, yes I have found differential testing to be hugely beneficial. I don't use it to replace unit tests but lean on it heavily when doing a rip and replace of a sub-system such as when I am rewriting a ruby service in scala.

<comment><AUTHOR> great! thanks for the info and link. If you have a chance, I'd love to hear more about your experiences and challenges with the approach. thanks!

</comment></comment><comment><AUTHOR> links: [http://web.engr.illinois.edu/~taoxie/publications/ast07-diff...](http://web.engr.illinois.edu/~taoxie/publications/ast07-diffut.pdf)

[http://zachholman.com/talk/move-fast-break- nothing/](http://zachholman.com/talk/move-fast-break-nothing/)</comment>


Mechanical linkages - video collection - <AUTHOR> https://www.youtube.com/user/thang010146/videos

<comment><USER2> There's also "Five Hundred and Seven Mechanical Movements" by Henry T. Brown.

The following site uses the 21st edition of the book, published in 1908.

[http://507movements.com/about.html](http://507movements.com/about.html)</comment>


Map shows percentage of Europeans who identify with the EU flag - <AUTHOR> https://kyso.io/eoin/do-i-identify-with-eu-flag <comment><AUTHOR> This is particularly relevant because the EU's new Commission president has expressed pro United States of Europe sentiment in the past.</comment>


Internet overuse linked to depression, but questions remain - <AUTHOR> http://www.guardian.co.uk/lifeandstyle/besttreatments/2010/feb/03/internet-overuse-linked-to-depression-but-questions-remain

<comment><AUTHOR> "in partnership with the British Medical Journal," a great example of a new story that analyzes a research study well. The article applies a lot of good criteria for evaluating a research study

<http://norvig.com/experiment-design.html>

to this finding announced today.</comment>


The investor deck I used to try to raise $1M - <AUTHOR> http://www.techvibes.com/blog/investor-deck-transparency-and-lessons-learned-2014-01-16

<comment><AUTHOR> I'd love HN feedback on the deck as well - the good - the bad - for others to learn from.</comment>


SmartShortcuts: Excel Formula Auditor - <AUTHOR> http://www.smartshortcuts.com/

<comment><AUTHOR> I created this program a few months ago, but never put it up on the net. It's a simple Excel formula auditor. The trick to creating it was figuring out the regex to decipher an Excel formula into individual cell references. Enjoy!</comment>


Windows 10 is making too many PCs obsolete - <AUTHOR> http://www.computerworld.com/article/3209977/microsoft-windows/windows-10-is-making-too-many-pcs-obsolete.html <comment><USER2> Blame Intel more than Microsoft for this one.

Intel has been turning out Atom chips and machines based on Atom that are purposefully crippled in various ways. For instance I had a Netbook that had a crummy screen (too small to run some programs that expect a larger screen) and would let you plug in a VGA monitor, but not run in a dual-monitor mode. You could plug it into a monitor, keyboard, and mouse and use it as a mini- desktop, but it would not boot unless you unfolded the machine first, etc.

In the case of "Clover Trail", Intel packaged a PowerVR GPU instead of an Intel GPU and their contract with Imagination didn't come with continued support to update drivers.

On the other hand, WDDM drivers have been pretty stable since Vista so why exactly Win 10 Creators Edition needs updated drivers is an interesting question.

Unlike the ARM ecosystem, Intel makes a very limited number of SKUs (and can afford to spend much more developing each SKU, thus get higher performance) and those SKUs themselves are frequently variations of the same die where various features are artificially fused off.

On some sense "pay for the features you use" makes sense, but on another level, it's anti-consumer behavior.

<comment><USER3> At this point, I wonder why Intel doesn't buy Imagination.

<comment><USER2> Intel makes it's own GPUs now. (Barely) good enough GPUs that mainstream users don't feel the need for a discrete GPU; this might have starved NVIDIA for business if it wasn't for the "Deep Learning" boom. That doesn't stop Intel from starving their platforms of PCIe lanes to limit the usefulness of discrete graphics.

<comment><USER3> Oh, I know, just thinking from a patent, acquihire perspective. Imagination is for sale, at one would assume a bargain price, after losing Apple as a customer.

</comment></comment></comment></comment><comment><USER4> You got to give this to Apple, wether you consider their computers overpriced or not; their newest OS is still officially supported by computers going back to 2009. That's 8 years, and 8 major OS releases.

There are certainly many more moving pieces in the Windows realm though, simply considering how backwards compatible Windows tends to be, how much it has changed in the past few years and how many different systems it runs on. I'm very curious to know what the reasons behind Windows CU's incompatibility are.

<comment><USER5> On other side update iphone 4s (2011) to ios 8 (2014) makes it horribly slow, while technically still 'works'.

<comment><USER6> Its even worse than that. Apple blocks you from going back to the older version of the OS. I had to literally throw away my 4s, (it was working fine otherwise) because it had become unusable for me after updating the OS.

</comment></comment></comment><comment><USER7> I'm still running an 8 yr old PC with an Intel Core2 that continues to be supported by Windows 10 and all its updates. I would say it's more chip based than MS fault.

<comment><USER8> According to wiki, processor in my wife's PC is from 2009. Windows 10 runs on it no problem.

</comment></comment><comment><USER9> A machine from 2013 is older, it's slower, the hardware has seen better days and there are features built into a modern OS that just won't work with a chip set that the user bought from Best Buy at the bargain rack.

We all wanted Windows and MS to push computing forward for the longest time and now that they actually are, people are bitching about it. Not because it's bad for business, it's bad for them personally and anecdotally. Go figure.

This article seems like a rant and not supported by data.

<comment><USER10> And yet none of those things will totally preclude it from running a modern OS. I've got a CPU and motherboard in my desktop from 2012, and it's never been taxed enough to make me upgrade. What features does Windows 10 have that require a chipset upgrade?

<comment><USER9> If it runs fine with its current OS and hardware, there's no need to upgrade. Keep your current OS, your current hardware and you're fine. It's not Microsofts duty to support very old hardware.

<comment><USER11> Actually it is, Windows 10 is supported until 2020 and I think it's entirely reasonable to expect all Win10 hardware to be updateable until then as MS very clearly say the OS is not supported without all updates installed. Cf support.microsoft.com/en-gb/help/13853/windows-lifecycle-fact-sheet

</comment></comment></comment></comment><comment><USER12> I think this might be related to the fact that the GPU used in those machines is normally a smartphone GPU and it's a bit of a pain to support.

</comment><comment><USER13> I don't get how - if MS will give them support until 2023 then it means 10yrs support which for those low end PCs is enough. And if somebody wants to use it after that date - LXDE/XFCE might be better anyway for this type of HW.

<comment><USER14> It is better. I bought an Intel Compute Stick when they first came out. Used Windows 8 on it just long enough for someone, Ian Morrison([http://www.linuxium.com.au/](http://www.linuxium.com.au/)), to get the Linux version on the internet. Besides some occasional wireless issues, mostly Bluetooth now, Lubuntu 17.04 works great. I use it on vacations all the time just plug it into the hotel TV and load up Netflix and wait for the buffering to finish over the overloaded hotel Wifi.

</comment></comment><comment><USER15> I'd like to see discussion about this on the front page, but I'd prefer articles with more substance. This is just a rant.

</comment><comment><USER16> Did the graphics driver ABI change in Win 10? If not, what's the problem? So if Intel is not willing to support PowerVR GPU, we still have old tested driver that works under Win 10, right? So it's more about MS' willingness to test newer versions of Win 10 for compatibility with last Clover Trail drivers. They can probably dedicate 5 people to do that without experiencing significant dent to their revenue and the one employee/multiple revenue streams philosophy they adhere to, right?

</comment><comment><USER17> LXDE

<comment><USER18> Doesn't even have to be light. Gnome and/or KDE will run happily on any PC - they are monsters for goodness sakes! Totally OP for most distros. A lot of the early linux adoption compatibilty issues (winmodems stole too much of my youth) are gone now. Everything just works. Just wipe Windows.

</comment></comment><comment><USER19> In other words Windows 10 is making itself obsolete.

</comment><comment><USER20> Linux is a better fit for netbooks anyway.

</comment><comment><USER21> I'm a bit confused by the author's position here.

They complain about MS "forcing" Win10 down their throat, and then again about them not supporting Clover Trail and so not being able to force Creators down their throat.

It all feels a bit incoherent to me. I mean sure we all love a good incoherent rant about how Microsoft are the devil, but I really do have to question why some people are so fanatically anti-Microsoft, and yet somehow still end up owning Microsoft devices.

</comment><comment><USER22> First with the Skylake CPUs only being supported on Windows 10, now with these Atoms not being supported anymore. That makes two.

Strike three and you're out, Microsoft! And I mean if this happens again soon, it should be clear to everyone that Microsoft is indeed abandoning hardware at a much faster rate with Windows 10.

<comment><USER23> I fail to see the problem. If you don't like Windows, don't use it. They're under no obligation to support whatever hardware you want to use. In reality, people are going to do whatever it takes to keep using Windows, and if that means having to run out and buy brand-new hardware to do so, that's what people will do. Microsoft could restrict Windows to a small number of allowable systems and customers will happily toss their old stuff in the trash and buy these approved systems just to keep using Windows.

<comment><USER24> i have nearly 2000 games in my Steam account. i'll stick with windows for that.

<comment><USER23> That's fine, just don't complain about it then.

<comment><USER24> hmm.... but why?</comment></comment></comment></comment></comment>


Organic computing device created using four rat brains (2015) - <AUTHOR> http://hexus.net/tech/news/cpu/84638-organic-computing-device-created-using-four-rat-brains/ <comment><USER2> That's got to be the biggest waste of unethical computing power I've ever seen. It's a good proof of concept. Organic computing is the future, but this smells a bit too much like Leonardo Da Vinci.</comment>


Need advice on cover letter as an independent contractor - <AUTHOR> Currently I'm working as a contractor, but I got that position by applying to a full time job (they can't help me with relocation). Then I thought it would be nice trying to apply to some other companies as an independent contractor. But I don't know how to write good cover letter and introduce myself as a contractor. Please critique my letter and give some advice(s).
Dear [company-name],
I came across your Python Developer job advertised on your website and I found it very interesting! I would like to discuss how I can help.
In particular, as an independent contractor I can offer [company-name]:
- very experienced Python developer. My last project was [project-details]
- expertise in multiple python frameworks, such as Django and Pylons.
- strong Linux skills, including postgresql, mysql, nginx, apache administration
Please find my CV attached for your consideration.
I look forward to discussing your project requirements in more detail soon.
Yours faithfully, [name] <comment><USER2> Another term for an independent contractor is "consulting business". I've found that it is easier to market a one person business as something like "Acme Consultants" than under my own name. To put it another way, I find it's easier to write:

 _Acme Consultants has a long history of creating value for business. We love Python and are experts in web development._

Probably because self promotion is not something I do naturally.

Good luck.

</comment><comment><USER3> You might consider having a link to your work portfolio. A web site or on line CV can be a bit more expressive than a standard CV. I give potential computer vision clients a link to my computer vision portfolio (www.3drocketsurgery.com). I give other clients a different site.

Now when you email a potential client, they just click on a link. It's even less "friction" than opening a rather dry CV document.

</comment><comment><USER4> This seems fine. Being straightforward is good -- hiring managers don't want to spend hours on each application.

<comment><AUTHOR> Sounds great! I just had doubts, because most of job ads require full-time developers, but I'm sending my offer as a contractor.</comment></comment>


HTML5 takes the Internet by storm - <AUTHOR> http://www.bbc.co.uk/news/business-17946128

<comment><USER2> Oh the irony:

"Cannot play media. You do not have the correct version of the flash player. Download the correct version"</comment>


Why Are So Many More Men Dying from Coronavirus? - <AUTHOR> https://www.nytimes.com/2020/04/02/opinion/coronavirus-men-women.html <comment><USER2> After many years, our family will no longer support our Public Radio station. We tend to be aligned with the issues that NPR supports, but they are now attempting to politicize a public health issue by refusing to broadcast the daily Whitehouse Press briefings. That is intolerable. We are in the midst of a global pandemic that endangers every American.

Public Radio should be required to broadcast the ENTIRE LIVE Corona Virus Press Briefings including the question and answer period. This is an EMERGENCY! If Public Radio cannot support the government, why do they recieve any government funding? This is seriously messed up.

If Public Radio wants to digest these briefings and then present them in a curated context, that's fine and I would appreciate it. But I am tired of being forced to go out to my car to listen to the local rightwing AM radio station.

<comment><USER3> But it sounds like you want NPR to be forced to be a right wing radio station?

<comment><USER4> No, it sounds like they are voting with their pocketbook. Let NPR do what they want, I say.</comment></comment></comment>


The U.S. Census Bureau Gave Up Names of Japanese-Americans in WWII (2007) - <AUTHOR> https://www.scientificamerican.com/article/confirmed-the-us-census-b/ <comment><USER2> The Obama White House has proposed adding a new racial category for Middle Easterners to the census. It is a poor plan for many reasons; now we have another.

[http://www.usatoday.com/story/news/politics/2016/09/30/white...](http://www.usatoday.com/story/news/politics/2016/09/30/white- house-wants-add-new-racial-category-middle-eastern-people/91322064/)

<comment><USER3> "Middle Eastern" is not a race though. I'm Turkish and we are very Caucasian. :)

<comment><USER4> Well, of course there's really no such thing as race to begin with, it's a big bag of various cultural and historical prejudices with all kinds of different people thrown together into arbitrary "races". Racism had to be invented to justify slavery and colonialism.

<comment><USER5> I'm with you on the prejudice part. But pedantically, its not so easy to dismiss 'race'. We see strong genetic pooling around the world. We can make up a new word for that, or use the one we have. Unfortunately the current word has been muddied by history.

<comment><USER6> There certainly are genetic differences around the world, but they line up only vaguely with race. If race were about genetics, then there would be a ton of different races in Africa, and we'd probably lump all other people under one "non-African" race.

My favorite way to illustrate the arbitrary nature of race is to ask what the race is of our current (alas, soon to be former) president. Typically the answer is "black." Yet his mother was "white." If it were genetic, we'd say he was mixed, but we're still operating under the influence of old arbitrary rules where having just a small amount of black ancestry makes you "black."

<comment><USER7> The answer to your question is 'black' because of political correctness. This is a great example of why it's pernicious - as it robs us of ability to describe the world.

There is actually a more appropriate term - 'mulatto' which was specifically created to describe people born to black / white parents. Today it's considered 'dated and offensive', so we don't have a 'polite' and 'correct' way to describe the ethnicity of our (current) President.

Would you deny the existence of dog breeds because there exist labradoodles or any other mixes?

<comment><USER8> Even before mulatto fell out of use, most white people called anyone with "a single drop of black blood" black. I grew up an a racist part of the southern US, and I assure you that my neighbors would have considered "mulatto" to be a kind of black person.

<comment><USER5> Strangely, we still do that. Imagine if a 'single drop of white blood' (whatever that means) meant you were white. Then America would be 99% white?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> "I'm sad to learn it," he says of the new discovery. "It would be sadder yet to continue to deny that it happened, if, as now seems clear, it did happen. You cannot learn from and correct past mistakes unless you know about them." I wonder if this will ever be said about Snowden in the NSA

<comment> at-fates-hands >> You cannot learn from and correct past mistakes unless you know about them.

I must getting older, because I see this statement a lot and when you look back, its clear we never do learn from our past mistakes.

<comment><USER10> > I must getting older, because I see this statement a lot and when you look > back, its clear we never do learn from our past mistakes.

Hence the current JavaScript development stack(s)

</comment></comment></comment><comment><USER11> If this bothers you, what are you doing about it?

Is your company retaining data that can be used against your customers? Is it implementing tech (end-to-end encryption, data minimization, anonymization, decentralization, etc.) to reduce their exposure? Don't wait until someone shows up with a NSL, claiming all Muslims are terrorists and therefore spying on everyone who believes in Islam or is suspected of being a friend of a Muslim person is a national security issue. Then it will be too late. Start now. We are all responsible for what happens next.

Are you calling your elected representatives? Let them know now that you abhor civil rights violations, especially in the name of security, and will hold them accountable - now before they are caught up in sensationalized threats and secret briefings.

<comment><USER12> Throw a wrench into the works if this happens: report a bunch of your conservative Christian customers as Muslims. It'll suck for them but it serves them right anyway.

(Make sure to leave the country before the authorities figure out what happened.)

<comment><USER11> I would absolutely oppose this; everyone is due the same freedoms and rights. However, I think you are joking ...

</comment></comment></comment><comment><USER13> Excerpts from the article:

1."What it suggests is that the statistical information was used at the microlevel for surveillance of civilian populations, ...

(appears suspiciously similar to what is occurring now)

2\. "At the time, available evidence (and Bureau lore) held that there had been no … release of microdata,"

(Hahaha)

3\. The Census Bureau has improved its confidentiality practices considerably in the last six decades, former director Prewitt says.

(How could this be? The government requested and the govenment got the information. It happened then, it could happen now.)

The more things change the more they remain the same.

To be fair anyway, the picture is not black and white. The government had a real and valid fear (proven wrong by events) that the japanese population could be used to foment trouble in the states during the war. However the action still does leave a bad impression

</comment><comment><USER14> Why is anyone surprised? If we should've learned anything from the last couple of weeks, it should be that it turns out that despite recent progress, America hasn't strayed far from its roots.

The powers of government have long been used as a weapon against various groups over our history. All that's happened recently is the removing of the mask.

<comment><USER15> um, well, if you're going to take it in that direction... FDR was a democrat.

<comment><USER16> Why do so many people think this is a useful point? Who cares what party someone is in?

<comment><USER15> that's exactly my point! neither party has some kind of monopoly on intolerant ideas.

<comment><USER16> Then why bring it up?

<comment><USER15> i don't think there's any reason to engage with you because you're just willfully ignoring the implication of the text i responded to. see ya.

</comment></comment></comment></comment></comment></comment><comment><USER6> A sad chapter in our history. What's terrifying to me is that many prominent people _still defend it today_. And not just people associated with the winner of the recent presidential election.

<comment><USER17> Interesting fact: _Korematsu v. United States_ , the Supreme Court decision upholding the internment of Japanese Americans, was never explicitly overruled by the Supreme Court because there has not been a similar controversy before the court.

</comment></comment><comment><USER18> France doesn't ask for or record race/ethnicity on its censuses for exactly this reason. If you don't store it, you can't be made to give it up.

<comment><USER19> Nowadays you can do it with drone, camera and facial recognition software. If president Le Pen needs the info she could get in 2 days.

<comment><USER20> That would take the complicity of hundreds, if not thousands, of people.

I doubt it would exactly be a secret or entirely quick, implementing racial recognition on a national scale.

Releasing information, especially today, takes only a few (Let's ignore bureaucracy and assume it takes only a few sign-offs to give away massive data dump legally)

</comment></comment></comment><comment><USER21> The US government can contact one of the many consumer data brokers and obtain a list of every Muslim in America in about five minutes. They have no need to use the Census or anything else.

"Experian's Ethnic InsightSM is a comprehensive predictive name analysis process that identifies the ethnic origin, probable religion and language preferences of individuals."

</comment><comment><USER22> This is a great precedent to why folks don't want to register their firearms.

</comment><comment><USER23> [http://ibmandtheholocaust.com/](http://ibmandtheholocaust.com/)

IBM was contracted to collect census data for many of the European govts. with their wonderful new Hollerith machines in the 1930s.

This was then passed on / sold to the Third Reich and used to filter who went where.

You didn't think it was all done with pencil and paper did you ?

<comment><USER11> Allegedly, IBM also was the subcontractor who ran the internment camps (or some part of them) for American citizens of Japanese ancestry.

</comment></comment><comment><USER24> I wonder if they'll do the same for Muslim Americans for the upcoming presidential term.

<comment><USER25> I'm certain the federal government as a whole already does. Various TLAs hand over data to the FBI easily, 'cuz terrorists. The census dept. is no longer important, compared to others, such as NSA, NRO, etc.

</comment></comment><comment><USER18> Looks like the EU decision that people shouldn't have to transfer data to the USA is a good move.

</comment><comment><USER26> And nobody goes to prison for it. Nobodies legacy is tarnished.

Why are we even talking about this?

</comment><comment><USER27> Wait, what? Government can't be trusted?!?!?

</comment><comment><USER28> And they will again. More kinds of people.

</comment><comment><USER29> Well there are no records of any Japanese running around with katanas chopping heads from that time.

On the other hand in blindly immigrant accepting Europe though... We learned our lesson since last year.

<comment><USER30> Are you joking? The Japanese military committed many atrocities in invaded countries:

[https://en.m.wikipedia.org/wiki/Nanking_Massacre](https://en.m.wikipedia.org/wiki/Nanking_Massacre)

<comment><USER19> I think the GP meant civilian Americans chopping other Americans heads with katanas.

Also isn't the katana mostly stabbing weapon? Slicing someone in two requires too much effort IMO.

<comment><USER31> From the little kendo I did, it's both, but mostly slashing. You wouldn't so much slice them in two as open them up from shoulder to hip, if you can. If you're going for the neck though, the basic technique is throat-stabbing, not slicing the head off. If the enemy has good armor, I guess you'd have to go stabby, I can't imagine a katana can slice through good steel plates (or mail, really).

But 1) the spear is the stabby weapon of choice when not in close quarters. From horseback you'd only use the katana to slice. Certainly, you wouldn't try stabbing someone with a katana from horseback.

And 2) the Japanese mostly didn't have excellent armor. They had shitty iron, so making good steel was very expensive for them. They couldn't have mass- produced steel plate armor.

The amazing thing about katanas is not that they're better than european swords (they're not), it's that they were able to make good weapons at all out of shit-tier iron.

<comment><USER12> >The amazing thing about katanas is not that they're better than european swords (they're not), it's that they were able to make good weapons at all out of shit-tier iron.

How are they not better? I'm pretty sure European swords never had that neat feature of higher hardness at the blade than at the back side, giving the sword better strength while still staying sharp on the cutting edge.

Katanas are really different swords from medieval European swords, designed for an entirely different type of fighting. European swords are a product of the type of warfare they waged, which involved a lot of metal armor with knights. A katana wouldn't work too well here, so European swords are designed to crush armor and to be good at stabbing straight through the armor. Katanas were designed to use against unarmored or lightly-armored foes (I think Japanese samurai armor was basically leather), and are designed to be used in slashing motions more. I'd say that for their purpose and their style of fighting, katanas are definitely better. But against heavily armored opponents, they're just not the right weapon.

<comment><USER32> Some European swords do show a degree of differential tempering and differential hardening. I don't know what technique they used though. IIRC correctly if you polish some of the swords the same way you do a JP blade, you get hamon-esque patterns:

[http://www.archaeologie- online.de/magazin/fundpunkt/forschun...](http://www.archaeologie- online.de/magazin/fundpunkt/forschung/2006/scotts-talisman-damastsalat-und- nanodraht/seite-3/)

Also remember that JP swords are a few hundred years more modern than what we typically think of when we think EU swords. However the Vikings had some knowledge of carbon/crucible steel making as early as 9th-10th century:

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

Masamune was like 14th century with the famous Maramasa and Kotestu being 16th century onward.

</comment></comment></comment></comment></comment></comment><comment><USER33> How do we know that they won't give muslin citizen's data to Trump?

</comment><comment><USER34> It would be far more difficult for President Pence to round up all of the homosexuals as he promised, but luckily for him, now we have Facebook and Google. Also, if Obama and Clinton hadn't protected and enabled the NSA, and completely ignored the mass data collection of private companies, it wouldn't be far too late for people afraid of being targeted to delete their accounts now.

Why shouldn't people want to share their real names online? If you have nothing to hide you have nothing to fear, Muslim.</comment>


Windows Terminal Preview Available - <AUTHOR> https://www.microsoft.com/en-us/p/windows-terminal-preview/9n0dx20hk701 <comment><USER2> The new terminal is pretty good, but what's more impressive to me about this is how bad it is.

It's so clearly incomplete that opening the preferences launched a JSON editor window in Visual Studio (not VSCode).

The level of openness it takes to open such a central utility built by what would historically be a low-profile team is quite remarkable, and I am convinced will result in an excellent product ... in time.

For now? It's almost good enough to be my daily driver but not quite.

Good luck to the development team! I'll be watching.

<comment><USER3> Might be your system file settings. Mine opened up in VSCode, talking of which, don't forget that VSCode also opened a JSON file long before they added the settings interface.

I couldn't find documentation for settings either so don't fully know what's capable but they do seem limited for now.

<comment><AUTHOR> Can confirm; it opens the default .json file editor. It's whatever the default setting is (which was VS2019 for me, as I don't work with json and didn't have it set).

</comment></comment></comment><comment><USER4> I know I'm not the only one who chuckled at the fact that it's rated "E for Everyone".

Honest question: aren't ESRB ratings contractually loaned from the ESRB entity itself? The fact that one is displayed here seems to indicate the ESRB legitimately reviewed and rated the Windows terminal. Or does it grant a license to Microsoft to set the ESRB value as it sees fit?

<comment><AUTHOR> Interesting point. Kotaku got a nastygram over it a while back: [http://web.archive.org/web/20090409100222/https://kotaku.com...](http://web.archive.org/web/20090409100222/https://kotaku.com/gaming/legal/esa- threatens-kotaku-213676.php)

I'm guessing you could reasonably argue genericide at this point, but I doubt they'll go after microsoft.

Update: did some more homework; esrb has started doing this in many places: [https://en.wikipedia.org/wiki/Entertainment_Software_Rating_...](https://en.wikipedia.org/wiki/Entertainment_Software_Rating_Board#Expansion_and_recent_developments)

<comment><USER4> thanks for the info; very interesting.

</comment></comment></comment><comment><USER5> Posted this about a week ago with pc mag commentary: [https://news.ycombinator.com/item?id=20252541](https://news.ycombinator.com/item?id=20252541)

</comment><comment><USER6> It would be great if it would replace backslashes with forward slashes and allow this blunder to be gradually phased out of Windows...

<comment><USER7> Forward slashes have worked in the terminal for a long time.

      PS C:\Users> cd rthom/Desktop
      PS C:\Users\rthom\Desktop>

</comment></comment><comment><USER8> I installed it via the store, store says it is installed but I cannot find any way to actually launch the terminal?

<comment><USER9> It's in the start menu.

</comment></comment><comment><USER10> Any reason to use it instead of ConEmu?

</comment><comment><USER11> It's 2019. They are about 6 years too late. People used to complain about people copying MS for Linux, but they are clearly trying to copy Linux terminal emulators to stay relevant.

<comment><USER12> What's the matter with following consumer/user demand? They may be late, but it looks many appreciate it, so I'd say this is meeting customer demand in addition to plugging their support for people's workflow where it's lacking.</comment></comment>


New Satellites Will Hunt Pirates, and Maybe Terrorists - <AUTHOR> https://www.bloomberg.com/news/articles/2018-11-30/spacex-to-loft-satellites-to-hunt-pirates-and-maybe-terrorists <comment><USER2> > The company he formed in 2015 had a simple pitch to government agencies: "We > convert a capital expense to an operation expense." Raytheon Co., the giant > defense contractor, was an early investor and customer. It has engineers > working with Hawkeye's 31-person team and, in turn, will sell some of the > company's findings to its own government customers.

Essentially, open market spooks for hire, selling limited space intelligence to countries that can't afford their own space programs.

<comment><USER3> It's been done with optical imagery for a while, but this is probably the first SIGINT.

<comment><USER4> So ... SIGINTaaS ?

<comment><USER3> Exactly. They have given talks at the last few GRCon. They were initially geolocating AIS traffic.

</comment></comment></comment></comment><comment> crooked-v Pirates, and maybe terrorists, and definitely lots of ordinary people spuriously prosecuted under anti-terrorism laws.

<comment><USER5> Or just people they don't like and eventually everybody. I think in a few decades the surveillance infrastructure of 1984 will look benign and quaint. Winston Smith actually could hide for a while.

<comment><USER6> > Winston Smith actually could hide for a while.

Actually, he couldn't. He thought he could hide. But we find out in the ministry of truth and room 101 that everything he did "secretly", like writing in his diary or his rendezvous with julia, were known to the authorities.

But I agree, unless we wake up, I think a mix of 1984 and Minority Report style of dystopian future awaits us.

<comment><USER7> Not disputing this outcome, but what is your solution for violent piracy and it's effect on shipping?

<comment><USER8> > _what is your solution for violent piracy and it 's effect on shipping?_

This is what I don't understand. The economy of US, Russia, and other naval powers suffers because of piracy. New navy ships need field tests, new sailors need training. We're at peace time, so it's hard to do realistic trials.

Why not just station some navy ships in the pirate-infested areas? Have them hunt down and sink any violent pirate boats. Equip civilian ships with satellite-based "911" signal saying "we're at (lat, lon), we're under attack", so the combat vessels know where to look for targets?

<comment><USER9> I've read that they (the navies) are reluctant about adding firepower, because the pirates would so the same (or "natural selection" would mean the knife- wielding pirates will stay home and only the AK-47 and RPG-wielding ones will continue), which will mean all the ships would need defending against powerful pirates.

It's a bit like policing in the US.

A sister comment to yours has a saner opinion, I'd add why not fight the African poverty/corruption that cause these people to attack ships.

<comment><USER7> At one stage, non-armed-forces vessels were being permitted to carry semi- and automatic weapons under very stringent controls. If you imagine those locks on the duty-free drinks trolley on a plane, and upscale it: they could unlock the weapons in defined areas and were permitted to use force to repel attack from unidentified craft.

[https://www.telegraph.co.uk/news/worldnews/piracy/8858159/Ar...](https://www.telegraph.co.uk/news/worldnews/piracy/8858159/Armed- guards-to-protect-British-ships-from-pirates.html)

<comment><USER8> That obviously invites an arms race with pirates, and probably reduces survivability of the crews. That's why I asked about a different solution - where merchant crews are unarmed, but armed forces provide separate, rapid response service with overwhelming force.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> The intelligence community was hunting RF emissions with trucks during WWII. Three quarters of a century of top-dollar aerospace and electronic warfare R&D later... I'd be surprised if they didn't have this capability by the 70s. What do you think the National Reconaissance Office _is_?

<comment><USER11> I don't think the NRO puts much effort into finding illegal fishing, or other kinds of activity that don't impact US national security.

<comment><USER7> Having a capability and chosing what you use it for are different things. I also believe that the life of RF detection by third parties, and radio between parties has been entirely parallel. For every signal, there is a device hunting that signal in amongst the noise.

</comment></comment></comment><comment><USER12> Tracking / Signal Hunting technology for planes and boats has always seemed to generate the most fantastical ideas.

There has been a good amount of progress, but it really stalled for a while when ICBMs seemed to negate the importance of aircraft. The US had the quite sophisticated Northern Early Warning Line at one time to monitor all airspace in the North Pole. It's very hard, even today, to get good satellite tracking there because it is a Pole.

The craziest thing I've heard is what the British tried before radar was invented. A Hoover Dam like wall 200 feet high that was supposed to amplify the sounds of planes approaching from Germany that would alert a human operator.

[http://www.andrewgrantham.co.uk/soundmirrors/locations/denge...](http://www.andrewgrantham.co.uk/soundmirrors/locations/denge/)

<comment><USER13> RF snooping has traditionally been done by "fishing trawlers".

</comment></comment><comment><USER14> So basically in 5-10 years they'll be using satellites for domestic surveillance? After all, pretty much every other "anti-terror" measure seems to "trickle down" to local LEOs

</comment><comment><USER15> These may not work well for low frequency sources. The satellites are above the ionosphere, which reflects/absorbs low freq RF.

Comm signals at, for example, 3.5MHz wouldn't get through the ionosphere.</comment>


Backed By $3.25 Million From NEA, 500 Startups, Launches Visual "Learn To Code" - <AUTHOR> http://techcrunch.com/2013/04/11/backed-by-3-5-million-from-nea-500-startups-felicis-others-tynker-launches-its-visual-learn-to-code-platform-for-children/

<comment><USER2> Shows how clueless the NEA is at making proper decisions - They could of just as easily backed the pre-existing free Scratch program used world wide that already does the same thing.</comment>


On Toxic Femininity - <AUTHOR> https://quillette.com/2018/07/09/on-toxic-femininity/ <comment><USER2> Seeing the existence of toxic femininity acknowledged only brings out the pain, the bitterness and the loneliness suffered in a long life of such abuse. No acknowledgement, however admirably expressed, can undo that damage nor justify my forgiving it.</comment>


Iris is an ISLisp implementation which has strong extensiblity - <AUTHOR> https://islisp.js.org/ <comment><AUTHOR> The title sucks, but HN doesn't seem to like editorializing there: This appears to be a new implementation of ISLisp[1] in Go and Javascript (Gopherjs).

[1]: ISO/IEC JTC 1/SC 22/WG 16

<comment><USER2> I'm the author. Thank you for your comment. Could you tell me why you feel so, and give a good title? I'll change it.

<comment><AUTHOR> Sure. Excited to try it out; hopefully will get a chance over the weekend.

I don't know if many HNers are going to know about ISLisp is, or what's special about your implementation.

Maybe:

        ISLisp in JS/Go: Standards-compliant Lisp smaller than Common-Lisp

<comment><USER2> Thank you for your advice. I've changed the text. I hope to get a chance.</comment></comment></comment></comment>


Announcing the tokio-io Crate - <AUTHOR> https://tokio.rs/blog/tokio-io/ <comment><USER2> I would really like a better information around the difference between Tokio & Futures:

* What is Tokio & why was there a need for its own terminology? (Reactors, Core, Proto etc..)

* What are the differences between Futures and Tokio? When would I use one? When would I use the other?

* Can I use futures without tokio?

* For all of the structs in Futures, Streams, Sinks, etc.. where are the examples?

<comment><USER3> Even what IS tokio for us casual observers would be nice to know! Futures I can infer, but tokio? I have no clue and the article doesn't help.

<comment><USER4> Tokio is "do that network transfer or disk read without freezing the program".

Except that takes a specific tokio package for each operation rather than being a kitchen sink of everything in one crate.

<comment><USER5> Oh so tokio is just the generic interface for any "do thing x without freezing", where the actual x comes from whatever implementation you include.

<comment><USER6> That's my understanding. It's a generic framework/interface for doing any kind of IO task without freezing the program.

</comment></comment></comment></comment></comment><comment><USER7> Has anyone tried using this to implement a game or any complex GUI really in functional reactive style yet?

I've been playing with ScalaRx a bit (not to be confused with RxScala...) and it's a really clean feeling abstraction for GUI, which I normally hate.

It'd be interesting to see similar ideas applied in Rust.

<comment><USER8> To someone who knows more about Tokio than me: is this even possible with Tokio's current design? Or is Tokio too I/O centered, such that its core abstractions wouldn't be useful in something like this?

<comment><USER9> Writing a game is quite possible, but most of Tokio's higher-level abstractions are focused on request-response protocols. I've been working on some tooling ([https://github.com/sirpent- team/comms](https://github.com/sirpent-team/comms)) for non-request-response but it's been slow going.

</comment></comment></comment><comment> mike-cardwell Hmm. I have a Framed<TcpStream,MyCodec>. I used to call into_inner() on this to get the stream when it came time to upgrading to a TlsStream<TcpStream>, but that function has gone with this upgrade. I don't see any equivalent function to do this either anymore. Any ideas?

<comment> mike-cardwell Seems that the removal of into_inner was a mistake. There's a commit from 9 hours ago adding it back:

[https://github.com/tokio-rs/tokio-io/pull/29/files](https://github.com/tokio- rs/tokio-io/pull/29/files)

</comment></comment><comment><USER10> Bytes seems like too many things in order one. It should use [http://burntsushi.net/rustdoc/byteorder/](http://burntsushi.net/rustdoc/byteorder/)

<comment><USER11> Looks like it does? [https://github.com/carllerche/bytes/blob/master/Cargo.toml#L...](https://github.com/carllerche/bytes/blob/master/Cargo.toml#L23)

<comment><USER10> Oh :blush:. In that case, odd to reexport a bunch rather than just link API ind doc.

</comment></comment></comment><comment><USER12> So Codec and UdpCodec from tokio-core are not related ?

<comment><USER8> Yeah, they seem to be independent traits.

</comment></comment><comment><USER13> Finally! I was waiting for bytes crate. Really need it for vectored I/O in my project. Super happy</comment>


In case of a DNS outage, we're doomed. - <AUTHOR> http://udi.posterous.com/in-case-of-a-dns-outage-were-doomed

<comment><USER2> Okay, so bring on my half-baked "evil http" URI scheme. "e<http://184.108.40.206,news.ycombinator.com/> would give you both the IP address and Host: header to send. Of course, you have to know good values for both fields or none of this matters.

I mostly meant this as something silly, but it turns out that people who do work on staging or dev versions of sites with certain hostname requirements might actually find it useful. I originally wrote about it here: <http://rachelbythebay.com/w/2011/12/17/nondns/>

<comment><AUTHOR> yep, this is one possible solution :)</comment></comment>


Lisp: it's not about macros, it's about READ (2012) - <AUTHOR> http://jlongster.com/Lisp--It-s-Not-About-Macros,-It-s-About-Read <comment><USER2> Okay, I'll put something heretical out there:

Lisp just isn't that much better than our current languages. Sorry.

Sure, when Lisp came out it was "advanced". Garbage collection, AST parsing and manipulation, macros, packages, a standard library, modules, homoiconic data structures, etc.

However, the good features of Lisp are now _normal features_ of any modern language. And some of those features have gone into the dustbin for good reasons. And some of them (static vs dynamic typing) are personal taste.

I remember using Lisp in 1984. It was completely eye-opening relative to the BASIC, assembly, and C I was using up to that point. However, it didn't run well on small machines that we plebians were using back then. So, we plebians moved back to assembly, C and possibly Pascal.

Lisp _STILL_ has the same problem on small processors. The embedded world is desperate need of a good language for rapid development, and yet Rust seems to be the only new contender? No offense to Rust, but is that the best we can do?

Where is a good dynamic language that is always online and runs in <8K of flash/RAM?

<comment><USER3> > However, the good features of Lisp are now normal features of any modern > language. And some of those features have gone into the dustbin for good > reasons. And some of them (static vs dynamic typing) are personal taste.

I definitely agree that with each passing year, languages that are not recognizable as being related to lisp have more features that mad lisp special in the past.

Features I regularly use that are good, but aren't "normal features of any modern language" (some are implementation details, but common to most CL implementations)

1 CLOS

2 Homoiconicity

3 A good interactive debugger with incremental compilation

4 Generalized references

5 An equivalent to reader macros

In addition, while some form of AST parsing and manipulation may exist in many modern languages, it is typically much less accessible than in LISP. I think this is largely because of the lack of homoiconicity, but also partly a culture issue.

There are probably other features that I don't use that others make good use of as well.

As a last comment, it baffles me that #3 is something that is extraordinarily rare to find outside of the lisp, smalltalk and forth families, but is regularly mentioned as a huge productivity boost by programmers that use it.

There's actually no reason I can think of that non-pure statically typed languages couldn't have such tooling either, with the restriction that global variables (including functions) never change type.

<comment><USER4> Some more stuff:

1\. The condition system including restarts to recover from errors.

2\. A uniform syntax that can be fluently manipulated with paredit-style modes.

3\. VM image saving/loading.

4\. Runtime access to the compiler and very complete reflection.

5\. A package system (ASDF) that lets you dynamically recompile and reload an entire system with all its dependencies just by calling a function.

6\. First-class namespaces.

7\. Well-defined multiple dispatch.

8\. Metaobject protocol.

9\. Language specification with conceptual clarity.

10\. High-quality optimizing compilation despite extreme dynamicity.

I think the list could go on for a while...

<comment><USER3> I think VM image saving/loading is still debatable as to whether or not it's good, assuming that it's the primary way of generating a binary image, as it is in most lisps.

A lot more work has to go into guaranteeing reproducible builds, and it tends to be a fairly non-compact representation of your executable. If CL were a little bit less customizable at load-time, that would allow for much faster FASL loading, which in turn would make the reliance on saved-images less important.

Obviously there are uses for that feature, and having a feature doesn't by itself make a language worse, but when that feature is a square-peg, but still the best fit for a particular round-hole, it causes problems.

<comment><USER4> I found it pretty easy to generate images in a reproducible way: just load your packages, run whatever setup you want, then save the image. Compactness hasn't been a problem for me but I suppose it could be. Admittedly I don't have much real experience with deploying Lisp applications in any serious way; I'm curious about what problems people run into.

<comment><USER3> Have you read any of the XCVB papers? They dig deeper into the issues with generating reproducible images, in particular with parallel builds.

</comment></comment></comment></comment></comment></comment><comment><USER5> It's all about the read. But a different one. The human ability to read code.

You can write very dense code in Lisp (and the author makes the point several times on how little lines of code you need for this vs. that). However, who's going to read that and understand it?

Especially problematic with code that looks like a regular s-expression but has a completely different semantic thanks to macros.

Lisp is great if you want to write code. Reading it...you mileage may vary

<comment><USER6> > a completely different semantic thanks to macros.

Most of the time, you use functions. Sometimes, you need to define "WITH-X" macros or "DO-Y" iterators, or a custom "DEFINE-Z" to shorten declarations (I tend to use macrolet for that).

        (defun rgb (r g b) (format nil "#~@{~2,'0x~}" r g b))

        (defparameter *background* (rgb 10 10 30))
        (defparameter *foreground* (rgb 90 90 255))

        (with-html-output-to-string (s)
          (:html
           (:head
            (:title "Hello")
            (:style :media "screen"
                    :type "text/css"
                    (str (cl-css:css
                          `((:body :background-color ,*background*
                                   :color ,*foreground*)))))
            (:script :type "text/javascript"
                     (str
                      (ps:ps
                        (setf (ps:@ window onload)
                              (lambda () (alert "Message")))))))

           (:body
            (:h1 "Heading"))))

The above is an example of what I consider a heavy usage of macros, and yet somehow I find it readable.

(the output is here: [http://pastebin.com/raw/S5cb5ufC](http://pastebin.com/raw/S5cb5ufC))

<comment><USER7> For me the #1 rule for macros is to never, ever use one if you can use a function instead. With this in mind, surely you could just write

        (html
          (head
            (title "Hello")
          (style :media "screen" :type "text/css" ........))))

What is the value of a macro in this context?

<comment><USER6> The macro is documented here: [http://weitz.de/cl- who/#syntax](http://weitz.de/cl-who/#syntax)

In particular, each list beginning with a keyword is transformed into an (X)HTML tag. It is an easy way to handle all current and future HTML elements without defining a function for each element and their attributes. You might be thinking: "we could generate invalid HTML", and yes, it is true. Other libraries exist to generate HTML, but this one is quite popular.

The other interesting thing is that by processing the tree at compile time, you can make some optimizations. For example, the following form:

        (:html (:body (:h1 "Hi")))

... is expanded as:

        (WRITE-STRING "
Hi
" *STANDARD-OUTPUT*)

... because it does not depend on external data. However, if instead of a constant string, you place (str (something)), you have instead:

        (WRITE-STRING "
" *STANDARD-OUTPUT*)
          (LET ((CL-WHO::*INDENT* NIL))
            NIL
            (STR (SOMETHING)))
        (WRITE-STRING "
" *STANDARD-OUTPUT*)))

</comment></comment></comment></comment><comment><USER8> > So what are macros? All they are is read packaged up nicely into formal > system.

Macroexpansion happens during a different phase altogether, and would work exactly the same even if programmers had no access to the reader at all. The reader transforms an unstructured character stream into structured data, while macroexpansion transforms already-structured data into different structured data. (Read-macros are another story, but it's clear they're not what the author had in mind.)

Too often these kinds of posts only add to the confusion they're attempting to clear up.

</comment><comment><USER9> tldr it's not about macros it's about homoiconicity;

<comment><USER10> Surprised op didn't refer to it by name. We can handle big words.

</comment></comment><comment><USER11> Previous discussion: [https://news.ycombinator.com/item?id=3607248](https://news.ycombinator.com/item?id=3607248)

</comment><comment><USER12> How is this any different from `eval`, except that lisp's syntax is particularly well suited to being `eval`'d by virtue of being so easy to parse?

<comment><USER13> I think the main benefit comes from being able to build tools to transform, refactor, etc. your code in very little effort.

<comment><USER14> Yes, it raises the abstraction level to allow 'meta' programming as the normal level. Brown university had a chapter on their old PAIP book saying that they voluntarily skipped parsing because it's of no interest, so they used a scheme as a basis for classes.

</comment></comment></comment><comment><USER15> This article helps explain the how, but doesn't really cover the _why_. Coming from a functional programming perspective (Ruby, Elixir, Clojure [yes I know]), I don't see where macros become useful or anything more than a curiosity outside of a couple situations:

1\. Implementing a DSL, which is its own beast and is more often a bad idea than not; or

2\. Actually, I can't think of anything else.

Granted, I might be spoiled by modern conveniences already implemented in Clojure, such as cond. It's just hard to see what macros can give me that I can't accomplish with functions. If code is data, then aren't functions, which operate on data, already what we're looking for?

<comment><USER16> "Implementing a DSL, which is its own beast and is more often a bad idea than not"

Those using languages supporting that disagree. Let's assume the DSL is syntax embedded in a language like LISP or Haskell so you don't get stuck in the DSL. Essentially, there's not much difference between a DSL and library in terms of what's required to use it. You still learn what you type to achieve a certain effect. You still can use rest of language. Main difference is both (a) matches the problem domain more closely and (b) limits you to expressing just what you need to solve the problem.

These are why the BASIC-oriented 4GL's were quite successful. LISP, too, given it's also easy to process. REBOL & recently Red take it further. Kay et al are working wonders where a whole system is expressed in readable code that's a tiny fraction of code in a non-DSL system.

The combo of easy-to-modify language and DSL toolkit (esp Racket or Red) also leads to methodologies like this one from sklogic where it's easy to do components with a series of DSL's that are thrown together & many pieces autogenerated:

"The method is very simple:

* describe the problem in plain English (maybe with some diagrams)

* iterate it a few times until you have a syntax you think is unambiguous enough

* strip this syntax from all the sugar you just introduced in order to define an AST

* find DSLs in your toolbox that are potentially close to the one you're building and cherry-pick the necessary language components from them

* write a sequence of very simple transforms that would lower your source AST into a combination of the parts of the ASTs of the target DSLs of your choice

* Done. An efficient DSL compiler is ready, with a language designed as closely to your current view of the problem domain as possible.

* If you later find that your DSL is inadequate and your understanding of the domain was insufficient, than just start over again, this entire process is so cheap and simple that it does not really matter."

It also helps with verification. You can define DSL's for specific types of OS components or app software that make correct-by-construction easier. CertiKOS is doing that:

[http://flint.cs.yale.edu/certikos/publications/ctos.pdf](http://flint.cs.yale.edu/certikos/publications/ctos.pdf)

[http://flint.cs.yale.edu/certikos/certikos.html](http://flint.cs.yale.edu/certikos/certikos.html)

</comment></comment><comment><USER17> Fantastic article, but I still don't quite understand what kind of real-world tasks on typical projects become easier with AST manipulation. After all, how often do you write a debugger?

<comment><USER18> > Fantastic article, but I still don't quite understand what kind of real- > world tasks on typical projects become easier with AST manipulation. After > all, how often do you write a debugger?

A good example comes from Python: decorators had to be added as a special extension in 2003 ([https://www.python.org/dev/peps/pep-0318/](https://www.python.org/dev/peps/pep-0318/)) and the `with` statement in 2005 ([https://www.python.org/dev/peps/pep-0343/](https://www.python.org/dev/peps/pep-0343/)). Both are very useful for web programming, but do not need PEP committees and years of work when you have macros (examples: [https://github.com/vsedach/cliki2/blob/master/src/accounts.l...](https://github.com/vsedach/cliki2/blob/master/src/accounts.lisp#L213) [https://github.com/vsedach/cliki2/blob/master/src/wiki.lisp#...](https://github.com/vsedach/cliki2/blob/master/src/wiki.lisp#L155))

</comment></comment><comment><USER19> It always struck me as odd that many programming languages have standard printers that will output any data structure expressible in the language, but they don't have accompanying readers - this forces one to roll one's own or use a completely separate serialization technique. This is useful even when not in a homoiconic language for day-to-day tasks.

</comment><comment><USER20> Ha! LISP macros and read both work because of a very simple bug in the original definition of LISP. Don't even bother with it or Scheme or Racket --- they're all utterly broken and needlessly confusing!

<comment><USER21> Which bug are you referring to?

<comment><USER20> The definition of quote is broken. I personally explained it to John McCarthy. He agreed.

<comment><USER22> Care to elaborate?

<comment><USER20> OK, you asked! LISP was originally developed as a language for writing recursive functions of symbolic expressions (S-expressions). It was roughly based on lambda calculus, the language developed by Alonzo Church. But roughly is the key word. S-expressions are given by the context-free grammar:

S ::= A | [] | (S . S)

One can write data structures this way and lists by using the abbreviation:

(S1 . (S2 . ( ... ( SK . ()) ...))) == (S1 S2 ... SK)

The terms that manipulated these S-expressions were called M-expressions. They were first-order terms. McCarthy's key idea was to use a conditional in conjunction with a label form to define recursive functions (in the service of various AI applications). The M-expressions were defined roughly as follows:

M ::= S | x | if[M; M; M] | f[M; ...; M]

f ::= lambda[[x1; ...; xn]; M] | label[g; M]

(I'm not 100% confident that I remember the exact details on this syntax but the idea is correct!)

McCarthy wanted to show that his new language was Turing-complete. So he wanted to exhibit a universal function APPLY (derivable from f above) such that for any function f and arguments M1; ...; Mk such that f[M1; ...; Mk] evaluates to S-expression S, well, given a representation of f[M1;...;Mk], lets call it, hat(f[M1;...;Mk]), well

APPLY[hat(f); hat(M1);...;hat(Mk)] would evaluate to hat(S). This is pretty much a standard formulation of the recursion-theoretic argument. In order to close the sale, McCarthy had to exhibit such an APPLY and also the hat(.) function. Sadly for all of us LISP lovers (!) he botched the definition of hat(.)! It left people utterly confused for 30+ years. Such a shame.

Fixed a couple of typos. Sorry! Fixed one other typo! It's been a while...

<comment><USER23> I still don't understand. You said the definition of _quote_ is wrong, but didn't mention it at all in your elaboration.

<comment><USER20> Fair enough, I felt I was droning on but it's true that I didn't show the key mistake. Here it is.

If you want to represent an arbitrary M-expression as an M-expression, it's most natural to use S-expressions for the representation language, these are the -values- in M-expression LISP. (In lambda calculus we have more choices, normal-forms or weak-head normal-forms). McCarthy defined hat(.), naturally enough, by induction on the structure of M-expressions. For each M-expression, we need an S-expression representation. (Note that we use uppercase symbols for the symbolic constants and lowercase symbols for identifiers.) Here goes:

hat(S) == (QUOTE S)

hat(x) == X

hat(if[M1; M2; M3]) == (IF hat(M1) hat(M2) hat(M3))

etc..

But HOLD ON! The S-expressions have inductive structure(!). The definition of hat(S) should have been:

hat(A) == (SYM A)

hat(()) == (NIL)

hat((S1 . S2)) == (PAIR hat(S1) hat(S2))

There are sensible mathematical properties that this latter representation has that the former doesn't. It's a bit of a long story. But the bottom line is that QUOTE, was defined erroneously. (And John McCarthy burst out laughing when I explained it to him.)

RM

apologies, more typos.

<comment><USER24> I've written a Lisp compiler that handles quotations this way, so that QUOTE is not part of the target language. (Not that this was my own idea.) I can sort of see why you'd call McCarthy's s-expression Lisp a mistake, in that it adds something (QUOTE) not in the original M-expression Lisp, which you can do without. It still seems to me like a strange thing to emphasize, but OK.

BTW, the M-expression syntax for IF was "test -> consequent; alternative" which got encoded as a COND expression. (Doesn't matter, I'm just pointing it out as long as I'm commenting.)

<comment><USER20> Thank you for reminding me, McCarthy also invented COND which eventually led to the great modern pattern matching forms.

An ironic side-story of this that may or may not be of interest:

Because QUOTE was mis-defined, McCarthy had to hack his definition of APPLY/EVAL to get it to work. One consequence of this hacking was that the S-expression LISP "defined" by his version of APPLY/EVAL was a higher-order language while the M-expression LISP that he was attempting to model was strictly first-order. So in his S-expression LISP he could write the MAP function (called "mapcar" back in the day) but the syntax of M-expressions leaves no way to express MAP.

I find it so ironic that it took this little representation error to lead to LISP having the essential property of lambda calculus. (Guy Steele fixed most of the trouble with the grammar and introduced proper lexical scoping in Scheme but he didn't catch the quote bug.) It's also fair to say that M-expression LISP wouldn't have changed the world as S-expression LISP did.

I don't know if Paul Graham reads HN but Paul once wrote a book on macros in LISP. As far as I know, he doesn't know this story about QUOTE. It doesn't seem to have slowed him down.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> I can say an image with sbcl (lisp implementation) with a load of functions and libraries. I can't save an image with python, ruby and javascript.

<comment><USER26> You can checkpoint at a lower level [https://en.m.wikipedia.org/wiki/Application_checkpointing](https://en.m.wikipedia.org/wiki/Application_checkpointing) or using a virtual machine.

But in practice it's not that useful to checkpoint a running program because of external state. You can't checkpoint sockets when they are connected to some other machine.

</comment></comment><comment><USER27> An article that mentions abstracting things and then immediately uses CAR and CDR...

</comment><comment><USER28> Nope. Lisp is about extending itself with new special forms and embedding DSLs into itself ( SETFs, LOOPs, DEFSTRUCTs, even whole CLOS, to name a few).

With macros one could introduce new special forms, which differs from mere high order procedures by having its own evaluation rule implemented as a macro. In particular some of its arguments could be left unevaluated before application, which gives one laziness and other nice things (for an ordinary procedure, according to the general evaluation rule, all the arguments will be evaluated in order before application of the procedure).

Lisp isn't about hipsters. It is about fundamentals of programming.

Here is a simple illustration:

[http://karma-engineering.com/lab/wiki/Bootstrapping8](http://karma- engineering.com/lab/wiki/Bootstrapping8)</comment>


Premier League dataset from 2008 to 2016 (super detailed) - <AUTHOR> https://github.com/jargnar/premier-league-data <comment><USER2> I suspect this won't be up long once the Premier League lawyers find out. They're ultra-protective about their match data etc.</comment>


We Analyzed 10M Pages. Here's Where Most Fail with ADA and WCAG 2.1 Compliance - <AUTHOR> https://accessibe.com/blog/knowledgebase/we-analyzed-10000000-pages-and-heres-where-most-fail-with-ada-and-wcag-21-compliance <comment><USER2> Creating accessible websites is a pain. And doing it properly is expensive.

There's many screenreaders and they can get expensive. They also can have quirks of their own. UK government accessibility blog is a good resource on how to create accessible websites and forms[0].

I also tested accessibe.com's frontpage to see how accessible their own site is. For this test I used Google Chrome with Lighthouse[1] accessibility testing set to desktop. Lighthouse reported a score of 84/100 where bigger is better.

Some links don't have text, but an image with an alt text. Some text colors are not WCAG contrast compliant. The viewport maximum-scale is limited to 1, so the user cannot zoom on the website on a mobile device.

I also ran another accessibility checker called axe[2]. It reported 88 issues. Funnily enough, on the blog post they slammed icon fonts such as fontawesome or icomoon, and they themselves use icomoon without a screen readable text. Most of the issues were related to links not having discernible text, elements not having sufficient color contrast, and lack of landmarks on the page content.

[0]: [https://accessibility.blog.gov.uk/](https://accessibility.blog.gov.uk/)

[1]: [https://developers.google.com/web/tools/lighthouse](https://developers.google.com/web/tools/lighthouse)

[2]: [https://chrome.google.com/webstore/detail/axe-web- accessibil...](https://chrome.google.com/webstore/detail/axe-web- accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd)</comment>


Blossom Under the Hood: Our Tech Stack - <AUTHOR> https://www.blossom.io/blog/2012/10/24/technology-stack.html

<comment><AUTHOR> Let me know if you have any questions or want to chat about trade-offs :)</comment>


The Nobel Prize in Chemistry 2016 - <AUTHOR> http://www.nobelprize.org/nobel_prizes/chemistry/laureates/2016/popular-chemistryprize2016.pdf <comment><USER2> I am reaching Feynman's "pleasure of finding things out". Gotta say his nanotechnology lecture was ver inspiring. I'm glad we've made much progress on it. I hope this ends up creating tiny super bots some day. The kind surgeons can "hangout" inside a body and perform a delicate surgery.

</comment><comment><USER3> That was a great read, so many different kind of small "machines"! I think for the first time I feel hopeful about the relatively "near" future (next 50 years) of nanotech.

<comment><USER4> They're not really machines, as a machine is defined as a contraption that converts one form of energy to another (e.g. a lever), these are just molecules that look like machines but have no handles with which to use as the analogous machine.

<comment><USER5> Converting UV light into rotary motion doesn't count?

<comment><USER3> It definitely does, by any reasonable definition of "machinery", which is why "cellular machinery" is a term in fact.

</comment></comment></comment></comment><comment><USER6> I am super proud as I had lectures with Ben at University of Groningen whilst doing master and PhD courses. Super cool guy, straight to the point.

</comment><comment><USER7> What about Drexler, Merkle and Freitas?

</comment><comment><USER8> I wonder if software could assist progress here.

Anyone know if tools exist for modeling chemical behavior _on a level that would be useful for simulating the assembly of 'machines' like in the article?_

I see these researchers are jumping up a level of abstraction, thinking in terms of new primitives (e.g. 'rotaxanes')—maybe the software could begin its modeling in terms of rules obeyed by these new primitives (rather than starting from quantum mechanics or whatever).

Edit: added italics.

<comment><USER9> Computational chemistry (and/or computational solid state physics) is a field with 50+ years of history and a ton of exceptionally active research groups.

Your most likely starting point is density functional theory; [https://en.wikipedia.org/wiki/Density_functional_theory](https://en.wikipedia.org/wiki/Density_functional_theory), [https://en.wikipedia.org/wiki/Kohn–Sham_equations](https://en.wikipedia.org/wiki/Kohn–Sham_equations). Classical molecular mechanics is even older than that.

<comment><USER8> Thanks! The article on density functional theory is very interesting so far.

Any idea on the second part of my question, though? Whether it might be possible to explicitly model the behavior of these higher-level constructs, e.g. modeling catenane interactions rather than molecular interactions.

<comment><USER10> what you're describing is essentially what people try to do with molecular dynamics and kinetic Monte Carlo methods, which are even older methods than density functional theory. There's currently a lot of interest in the materials community in developing ways to link these abstractions -- often highly abstracted models just aren't good enough for quantitative results, because they are difficult to parameterize, or they abstract away important physics.

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

<comment><USER8> Perfect! That's exactly the kind of thing I was thinking. Sounds like the different scales aren't really 'sealed off' as much as I was hoping, though, and that underlying details are still critical to doing actual work in the field :/ Ah, well.

</comment></comment></comment></comment></comment><comment><USER11> Fascinating work. Now I wish I had continued on my PhD in chemistry 35 years ago. Oh well... this field would have been close to what I would have worked on, or at least enough that it might have attracted me. Building things no one else ever built is pretty inspiring.

</comment><comment><USER12> Great stuff. Sadly, we're still a really far away from Drexler's vision of nanotechnology.</comment>


A Closer Look at BuildABrand's Closed Beta - <AUTHOR> http://www.reynoldsftw.com/2009/12/a-closer-look-at-buildabrands-closed-beta/

<comment><USER2> Sign up for the closed beta at <http://buildabrand.com>

</comment><comment><AUTHOR> interested if any other hackernews users have used this on the beta?</comment>


Using C++17 std::optional - <AUTHOR> https://www.bfilipek.com/2018/05/using-optional.html <comment><USER2> c++ has been evolving so fast recently. Pretty sure it's going to be around for the next decades still.</comment>


Hub: Wraps Git with extra features that make working with GitHub easier - <AUTHOR> https://github.com/github/hub <comment><USER2> I've used hub for a few years, but I find the advice of replacing the 'git' command with 'hub' to be a bit over the top. Security/compatibility concerns aside, it can easily confuse non-experts as to what kind of CLI functionality git itself (vs hub/github) provides.

It's often helpful to know what's actually happening... then add something like hub later as an optimization.

<comment><USER3> I had git replaced with hub a few years back but hub was just way too slow starting up, killing what seemed like git performance.

<comment><USER4> that's a huge reason why they rewrote it in Go

</comment></comment></comment><comment><USER5> This doesn't seem to give me a single clue on what it does past the initial change of:

        hub clone rtomayko/tilt

Am I missing something?

<comment><USER6>
        hub pull-request
        hub fork # adds remote automatically
        hub create # create GH repo for this local repo

And ability to use GH paths anywhere git takes a URL - clone (as you mentioned), remote add, submodules, etc.

<comment><USER7> That should be on the front page. Above the fold.

<comment><USER8> A good thing about this (being an open source project) is that anyone can fix it and create a PR :D

</comment></comment></comment></comment><comment><USER9> Personally I'd rather see my github integration as a subcommand: 'git hub clone foo/bar', etc.

<comment><USER10> Should be easy enough to add an alias to $HOME/.gitconfig right?

      [alias]
      hub = !hub

<comment><USER11> Very nice!

</comment></comment></comment><comment><USER12> Very nice tool, I use it a lot. But I wish they would do releases more often. The last stable release was October 2016, and it's been actively developed since then.

For example, the "release" command (which is great for using from a Makefile to do an automated release) has lots of functionality on master, but the current release only supports making new releases.

<comment><USER13> [https://github.com/github/hub/releases](https://github.com/github/hub/releases) shows some pre releases. I suspect they'd be stable enough.

<comment><USER12> They're still old. Newest prerelease is from February.

<comment><USER13> Ah, right.

I may fork hub tonight and let Travis build a newer version.

</comment></comment></comment></comment><comment><USER14> Pretty essential if you're working on a project hosted on Github. I primarily use it to make PR's from the command line, but that alone is a huge win.

<comment><USER15> Maybe its just me, but I would rather have PR functionality in git itself.

Linus, please make it happen :)

<comment><USER16> How would that work? Besides starting completely new centralized git service to compete with github and co? Anyway, git already has a "pull request" system in the form of git send-email and related commands.

<comment><USER17> I know Linus probably would not agree but emails aren't a substitute for a pull request system: they're a bandaid to compensate for the lack of one.

I agree it would require additions to git & some kinda of standard around it but it's telling that every major git system in use "solves" this problem.

</comment></comment></comment></comment><comment><USER18> Is this similar or how is different/better than gitflow? [http://nvie.com/posts/a-successful-git-branching- model/](http://nvie.com/posts/a-successful-git-branching-model/)

<comment><USER19> gitflow is comparing OOP and FP. If git is C then hub is C++. I don't believe you can compare the two. hub just adds some convenient commands to git for working with GitHub.

</comment></comment><comment><USER20> I have used this extensively for interacting with Github.

But definitely, my biggest use is for quickly creating new private repos in Github to save small experiments (doesn't require hub to be aliased to git):

        new => !git init && git commit --allow-empty -m 'Initial commit (empty)' && hub create -p `basename $PWD`

For new projects (hope you can get the aliases):

        mkdir newproject && cd newproject
        g new
        # Do stuff, etc...
        gcia -m "Add project start" && gp

</comment><comment><USER21> I've been using hub to do update orchestration over a group of repos, i.e. bubbling up updates through a dependency tree, opening respective Pull Requests, linking them among each other, etc.

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

</comment><comment><USER23> It doesn't compare with hub, but I wrote gpr to make dealing with pull- requests easier as a maintainer. The main use case to check out a PR on a detached head:

 _gpr <PR#>_

You can also easily checkout a branch from another users fork.

[https://github.com/mbrookes/git-pull- request](https://github.com/mbrookes/git-pull-request)

</comment><comment><USER24> I use this as my default git command via aliasing, as mentioned in the ReadMe. Paste this in your bash profile to alias: eval "$(hub alias -s)"

<comment><USER13> Note that this does shell detection and works for most common shells, but your eval may be different.

[https://github.com/github/hub/blob/master/commands/alias.go#...](https://github.com/github/hub/blob/master/commands/alias.go#L55)

</comment></comment><comment><USER25> does this help you move around Zenhub issues on your kanban from commit -m "?"

</comment><comment><USER26> but isnt git pretty much the best thing in the world since it was made by the who who remote linux? Why do u need sugar ontop of it?

Oh wait, thats right, cause guys who make operating systems dont make human software.

<comment><USER13> I know I shouldn't reply to comments like this, but what are _you_ going to do to make the (software) world better? Git's got warts but it's getting better, and there are alternatives like Mercurial if they work better for you.

<comment><USER26> A comment that states the obvious? Im merely pointing out the power of the OSS hype-machine.

Like it would make sense to me if everyone who used git also used VIM, but they dont. Its a testiment to the power of the flock, that a product which gets its core functionaly so wrong, be used by so many ppl.

as for the topic at hand, if my company had invested so heavily into such a product, i would be doing everything in power to make it work. let alone if my companies core business was all in on it like github, it would be a no brainer and i cant beelive its taken so long to get the top of the backlog. looking forward to the nxt installment of hub which introduces propriority commands and see if they get treated like MS does :)

<comment><USER13> It's all about the ROI for GitHub - git works well enough for them.

If a problem in Git was causing a problem for GitHub I'm sure they'd work to fix it. Although I don't see any @github addresses in git's git.

<comment><USER27> There certainly are github employees who contribute a lot to git, but not with their github e-mail address, but with their personal address.</comment></comment></comment></comment></comment>


The Leap-Day Birthday Problem: A Bayesian Twist - <AUTHOR>

I'm curious to see what the data fiends on HN can come up with for this!
Here is an interesting twist on the canonical 'birthday problem'[1] in probability: http://twitter.theinfo.org/174910990750728193#id174912339269787648
A more precise form (since I now have >140 chars): ' What is the prior (for a group of size N) for having exactly two collision pairs of birthdays, with one on 2/29?'.
I spent just a few minutes on this when first thinking about it last summer, but depending on how much information you're willing to incorporate, you could create a fairly complex model for this simple twist.
[1] http://en.wikipedia.org/wiki/Birthday_problem <comment><USER2> We can ignore 100/400 year problem, for now, because our sample population (working age) were born before 2000.

Since you're looking for a specific birthday which occurs (assuming random distribution of birthdays), 1/1461 of the time. I think you've got n(1/(1461^y)) where n is number of employees and y is the number of people who could have Feb 29. That should give you the percentage likelihood.

1k employees => .4% chance

10k employees => 4% chance

Unless, they're twins :)

Wondering what you'd get from Bayesian. Maybe you wouldn't have to assume random distribution of birthdays? Like, maybe mothers really want to (or don't want to) have leap babies, so that slightly influences the likelihood of a Feb 29 birthday?

<comment><AUTHOR> > We can ignore 100/400 year problem, for now, because our sample population > (working age) were born before 2000.

Actually, it's that they're born after 1900, because 2000 was a leap year, but you get the idea.

> Wondering what you'd get from Bayesian. Maybe you wouldn't have to assume > random distribution of birthdays? Like, maybe mothers really want to (or > don't want to) have leap babies, so that slightly influences the likelihood > of a Feb 29 birthday?

Exactly - it's rather well-known that the distribution of birthdays isn't uniform (even for the other 365 days). It's only been ~10 minutes, so I'll wait a bit (in case any curious person wants to tackle this) before explaining some of the ways I was thinking that one could incorporate that information into the model .</comment></comment>


Einstein's Arrogance - <AUTHOR> http://www.overcomingbias.com/2007/09/einsteins-arrog.html inspired by the corroborating evidence discussion in the comments for Paul B's post <comment><USER2> I don't really like this view of hypothesis. Or maybe I just don't understand it.

Take this hypothesis: 2+2 = 4. There are an infinite number of things 2+2 could equal, but I, like Einstein, without any empirical testing of my mathematical hypothesis, believe it to be 4. If you believed the sum to be 5, again without any testing, I don't see how you or I have any different number of bits dedicated to our answers. Your bits, however, are wrong.

<comment><USER3> There's plenty of empirical evidence for 2 + 2 = 4, it's just so pervasive that we fail to recognize it as such. Take two apples, place them on a table. Now take two more apples, and place them on the table. How many apples are on the table? 3? 4? 5? I have an astronomically high probability assigned to "2+2=4", but if I kept doing this experiment and suddenly ended up with 3 apples every time, I'd have to decrease the probability I assign to 2+2=4, and increase the probability assigned to 2+2=3.

The apples example is from "How to Convince me that 2 + 2 = 3": <http://www.overcomingbias.com/2007/09/how-to-convince.html>

Interesting essay on Bayesian reasoning: <http://yudkowsky.net/bayes/technical.html>

<comment><USER4> From the article:

"But from a Bayesian perspective, you need an amount of evidence roughly equivalent to the complexity of the hypothesis"

But what is the "complexity of the hypothesis"? Without a proper definition, there is not much left to the article, or is there?

<comment><USER5> Fixed with linky.

</comment></comment></comment></comment><comment><USER6> "I myself often slip into this phrasing, whenever I say something like, 'To justify believing in this proposition, at more than 99% probability, requires 34 bits of evidence.'"

Error: Social robot could not compute. Please input valid parameters into auditory interface again.

</comment><comment><USER7> i just want to point out that einstein wasn't 'arrogant' here. he said what he did because he 'knew' GR had to be right -- it was just the generalization of special relativity, which was already known to be right.

of course, it turns out that GR is wrong, at least at small-scales. while special relativity is compatible with quantum field theory (indeed, SR was the motivation for moving from quantum mechanics to QFT, as quantum mechanics does not respect SR), general relativity is not.

</comment><comment><USER8> I'm going to go out and swim in the deep water with this comment, but I didn't care for the article that much.

All science is provisional, this much is true. Math, however, is a formal symbolic system for representing things in reality. 2 + 2 = 4 not because of some inner truth in math but because when we observe nature and combine 2 things and 2 things we have what we call 4 things. We could change the symbols around all day and they would still work. So math is just a generic way of talking about that which we can observe.

The interesting thing happens when our symbolic system escapes that which can be observed, or when it is incomplete, say in the case of negative numbers (then rational, the imaginary, then irrational, etc.) At this point the exercise becomes one of either bringing the system of symbols to some application that has observable impact (applied physics) or changing the symbolic tools. There's nothing Bayesain about 2+2=4 -- that's the way the symbols are supposed to work.

Now whenever we get "stuck" we have to go back and check out symbolic systems. Just like geeks build O/S as a hobby or college experiment, I imagine physics and mathematicians build calculi, or systems of symbols and rules for working with them. Wolfram came up with a great question in NKS -- what if the universe is really discrete and not continuous? In other words, when Newton created the integral he might have taken math down a path that ends up breaking when you try to put a GUT together. I think that's a helluva question, but it's above my pay grade.

There was a book George Gamov wrote: 1-2-3-Infinity about the way various counting systems and numbers play together. Go read it -- it's better than this blog article.

<comment><USER3> " _There's nothing Bayesain about 2+2=4 -- that's the way the symbols are supposed to work._ "

How did you come to this decision that "that's the way the symbols are supposed to work"? I bet it's some sort of process of taking in information and updating your beliefs. And the idealized optimal version of _that_ is Bayesian inference.

" _Wolfram came up with a great question in NKS -- what if the universe is really discrete and not continuous?_ "

Sorry for the anal-retentive nitpicking, but this question isn't due to Wolfram. I'm not qualified either, but it's definitely a fascinating thing to think about. Maybe our universe is just a small computer program. <http://en.wikipedia.org/wiki/Digital_physics>

<comment><USER8> I did not come to any decision about that's the way the symbols are supposed to work -- that's my whole point. The symbols represent the way it works. They are a self-referencing representation. There's no decision involved here at all. You can call it an axiom, but that misses the point. An "axiom" only has meaning inside certain formal symbolic systems. It. Just. Is. It exists. Different people with different numbers and operators? They'd be asking why %^ $% $#^ #$$%, for instance. But it's the same thing. The answer is in the question. It's like asking "Why is red a color?"

I didn't mean to imply Wolfram came up with computational reality, I simply mentioned that he brought it up in his book. It may turn out the integral was just a nifty little shortcut that took a lot of impossible-to-calculate math off the table for physicists. Thanks for letting me clarify that.

<comment><USER3> " _I did not come to any decision about that's the way the symbols are supposed to work -- that's my whole point. The symbols represent the way it works. They are a self-referencing representation. There's no decision involved here at all._ "

There's a difference here between _what you believe_ and _what is true in external reality_. (Yes, I know you can spend lots of time debating whether the latter is even a coherent idea, blah blah blah, but all that stuff isn't relevant.) You had to come to a belief about what "+", "=", "2", and "4" mean. You were not born with this information embedded inside your head! :) This is true regardless of whether the symbols by themselves unambiguously and uniquely pin down the meaning of the expression. Even if a certain symbol sequence has a "unique unambiguous" interpretation, you still had to read those symbols and interpret them, and you learned something in the process -- which means you updated your beliefs about the symbols. I agree that the "real" interpretation in external reality of these symbols didn't change (if such a thing even exists), but your understanding of the symbols changed.

In general, probabilities are subjective and a property of the observer. They describe degrees of belief that the observer has in various propositions, and don't directly have anything to do with external reality. The only way they're connected to external reality is that you make observations in reality and use the gathered information to update the probabilities you assign. This means the claim that the symbols "2", "4", "=", and "+" are unambiguous is irrelevant even if it's true.

BTW - Thanks for the link on your blog to the NYT graph of the price of gas in constant dollars.</comment></comment></comment></comment>


Eye to Sky - Pay attention to niche markets - <AUTHOR> https://blog.notbad.software/post/eye_to_sky/ <comment><USER2> Agree... In Pharma it is already happening: Niche drugs market looks set to balloon | Financial Times [https://www.ft.com/content/110846d4-06a4-11e8-9e12-af73e8db3...](https://www.ft.com/content/110846d4-06a4-11e8-9e12-af73e8db3c71)</comment>