Keeping CALM: when distributed consistency is easy - <AUTHOR> https://blog.acolyer.org/2019/03/06/keeping-calm-when-distributed-consistency-is-easy/ <comment><USER2> It seems like monotonicity (or a subset, stronger monotinicity, still covering many practical use cases) can be statically enforced in an algrebraic type system. With some generics magic you can encode monotonicity as a type assertion on (optionally asynchronous) function calls mapping an underlying transport/RPC mechanism (REST over HTTP, RPC over Websocket, custom protocol over TCP/domain socket...).

In TypeScript for example you can strongly type your communication protocol (web requests/reponses, websockets, parent/worker ipc, etc) and get some guarantees at compile time. For example, you can guarantee that your state updates over the wire are eventually consistent.

The same goes of course for other algebraic type systems by encoding monotonicity in the form of static type assertions (Flow, Caml, Haskell...).

<comment><USER3> Well, since you just need to restrict the operations one can do with data, even a Java or C++ style type system is enough.

What is best done with another language (or a complex library on a very malleable language) is permitting non-monotonic operations with a clear boundary between them and some code style that makes them undesirable.

</comment></comment><comment><USER4> > CALM falls short of being aconstructiveresult—it does not actu-ally tell us > how to write consistent, coordination-free distributedsystems. Even armed > with the CALM theorem, a system buildermust answer two key questions. First, > and most difficult, is whetherthe problem they are trying to solve has a > monotonic specification.

> The second question is equally important:given a monotonic specification for > a problem, how can I imple-ment it in practice?

Can anyone explain a good way to use these results?

The OP (acolyer.org) seems to suggest that this boils down to using CRDTs but that doesn't seem to be isn't really the answer but I can't figure out how to use/properly think about the results in this paper (as opposed to others that are a bit more practical). I've crawled through a bunch of paxos papers[0], and at this point it seems to that the distribution part of the problem is somewhat solved but the coordination required is what we're trying to attack now.

Whenever I see systems that use CRDTs it's usually either a K/V store or a concurrent editing application. Also, most articles will gloss over the fact that both types of CRDTs (cmRDTs and cvRDTS IIRC) are actually roughly equivalent (pure operation-based CRDTs[1]). IMO pure operation-based CRDTs are just distributed WAL by another name -- and if that's the case then we already _have_ the solution for this (paxos-like quorum on the WAL segements).

All this boils down to the thought I've been holding lately that distributed consistency isn't _hard_ in this day and age -- WAL (which you generally want for hard-disk-level consistency to start with, if you're not just waiting for big fsyncs) + synchronous commit (whether quorum or all nodes) is all you need to achieve a perfectly consistent distributed system, but what _is_ hard is doing that with low latency and high throughput.

[0]: [https://vadosware.io/post/paxosmon-gotta-concensus-them- all](https://vadosware.io/post/paxosmon-gotta-concensus-them-all)

[1]: [https://www.researchgate.net/publication/320371248_Pure_Oper...](https://www.researchgate.net/publication/320371248_Pure_Operation- Based_Replicated_Data_Types)

<comment><USER5> The benefits we want to obtain from building distributed systems are:

1) Increased availability

2) Ability to scale (better throughput)

3) Lower latency (get the data closer to the client)

As you said, WAL + Consensus solves the consistency problem in distributed systems. It does however go against _all_ those desirable properties:

1) You lose availability when consensus cannot be reached

2) Throughput is decreased in the face of contention

3) Latency is worse because you need quorum between the separate locations

One way to go about this trade-off is to push for "raw power". Better networks, better clocks, etc.. This a commendable task and advances here should be celebrated, but there's a wall in the horizon: eventually we will hit actual physical limits (e.g.: speed of light doesn't let you lower latencies anymore). Google's spanner is probably close to those limits already. What can we do when this is not enough then?

The other approach is to work on reducing the need for coordination as much as possible. The paper fits in this realm. What it does is to identify a class of (sub)problem specifications that are solvable without coordination: monotonic specifications. It shows that CRDTs are monotonic, and I'm not sure whether any monotonic specification can be redefined as a CRDT (be it operational or state-based).

What CALM provides though is a "different way to think about the issue". If you can devise a monotonic specification of your problem, then you know that an implementation that provides consistent output without any coordination is possible. Furthermore, if your design is _not_ monotonic, an implementation _will_ require coordination or the output won't be consistent.

Finally, the paper dabbles in the realm of breaking your problem in monotonic and non-monotonic "pieces". The monotonic pieces you can implement without coordination. Non-monotonic pieces either require coordination OR "repair" (e.g.: send an e-mail to the customer apologizing that their item is actually unavailable and their order has been cancelled). Once a non-monotonic "piece" has been handled in this manner, the new piece that includes repair/coordination can be considered monotonic. Once all your system's pieces have gone through this process, you are guaranteed to have a "consistent" output.

An interesting analogy would be the "unsafe" blocks in rust. Rust in general is not safe because unsafe exists, but the fact that unsafe pieces are clearly identified makes it easier to reason about program safety as a whole. Similarly, the non-monotonic pieces of your system are where you risk losing consistency, whereas monotonic pieces are just not a problem (i.e.: you can get easily get good performance for those parts). By extension, if you can model your system so that all non-monotonic pieces are out of the critical path, your system is guaranteed to perform well in those scenarios!

All in all, this is just about giving better tools/thinking frameworks for system designers to minimize the use of coordination in a distributed system, which will invariably result in better performance without sacrificing output "consistency" (i.e.: without violating business rules).

<comment><USER6> That's an excellent explanation, except for couple of points which I think can be misinterpreted. A distributed system with consensus will in practice provide higher availability than a single-node system, because it provides fault-tolerance. In fact, fault-tolerance is the primary point of using (non- Byzantine) consensus. But you are absolutely right that a distributed system using consensus has worse availability than a distributed system with no coordination.

Also, when using a system "with consensus" there is often no need to actually invoke consensus on the read side of the system, in which case you don't have to pay the throughput and latency penalties. I know you've sort of said this already, but it might be helpful to mention explicitly.

<comment><USER7> > A distributed system with consensus will in practice provide higher > availability than a single-node system, because it provides fault-tolerance.

I'm not sure this is true. It protects against one class of fault (node failure) but opens you up to another (network failure). As a distsys engineer I am increasingly convinced that fault tolerance is not a good selling point for distribution, the fallacies of distributed computing are real and difficult to accommodate.

<comment><USER6> That's not really true. With a single, non-replicated server, you're also very much exposed to network failures. If the server's connection goes down, you're screwed. Compare this to a Google replication setup of 2 East Cost, 2 West Coast, and 1 central USA server. The client must only be able to reach two out of three data centers (and they have to be able to communicate with each other). That sounds much more resilient to me - and I guess Google agrees, since they deploy the setup.

</comment></comment></comment></comment></comment><comment><USER8> This is outstanding -- although in lieu of Yet Another New Programming Language (YANPL), I would suggest simply having developers learn the concepts and apply them no matter what environment they're in. This should be part of any developer's education.

I have some good friends, smart people who know a lot more about good programming than I ever will, who keep saying things like "OO and FP are just different flavors. It's all the same"

That's both true and dangerously incomplete. Pure FP takes you places like this essay. Yeah you can make all of this happen in OO, but it sucks. And if you want to code at scale you gotta know exactly how much it sucks and what to do about it.

ADD: My biggest critique of this essay is that the people who need to understand it most will be put off by the terminology. I have no way to fix that, but it still sucks.

<comment><USER9> "This is outstanding -- although in lieu of Yet Another New Programming Language (YANPL), I would suggest simply having developers learn the concepts and apply them no matter what environment they're in."

One of the recurring themes I've been banging on on HN for the last couple of months is that there's actually a _lot_ of room for new languages to come out that aren't just respellings of the current languages we have, and this is one of the opportunities that exist. I say this because the vast bulk of our current languages will just fight you so much if you try to work this way. What most languages are designed to do and designed to make easy are precisely the things that will blow your foot off. Trying to make this work in current languages is tapdancing through a minefield. It can certainly be done, but it's not something I think we can ever reasonably expect to be done at scale.

As you suggest, Haskell is pretty much the only semi-popular language that could implement this with a library, and it would be correct. And even then it probably would be a not-entirely-optimal experience, just because it's not really optimized for this.

<comment><USER8> I don't think we disagree. I'm a big fan of DSLs/languages over further app complexity. To clarify my point, Another Language (tm) is not the problem. The problem is a lack of understanding of the fundamentals.

I keep seeing people sell tech/languages/frameworks as some sort of replacement for deep understanding. Hey, that's cool -- as long as you don't spend all your time honking around with the tool instead of the problem. It's when these promises fail that devs and teams end up on a dark, lonely path with unhappy customers.

Overall I am quite fascinated by the concept of new environments for programmers -- and I believe it's not just new languages, but the tools, the industry background, the workflow, and a lot of other things come together to make tools and frameworks rock. (Many times we all want to geek out on language details when the problem with the language is lack of a community or tooling that makes you want to jump out a window. But I digress.)

Something I'm working on is coming up with guidelines of when and how to create good DSLs in order to create that kind of environment.

<comment><USER9> "I don't think we disagree. "

We do not. I meant more as elaboration, not outright disagreement. It is a great idea to apply these ideas today, but it's _really hard_ , and I'd still love to see someone fix that. And maybe some other things as they go. But in the meantime, programmers of today really can't afford to wait to apply these principles.

I guess my point is that I agree that YAPL that just has this in it and is basically thrown out as a hack for writing a couple of papers is not very useful, but I'd love to see someone set out to create the Next Big Programming Language that _incorporates_ this idea, as well as other things, but isn't just a demonstration project.

</comment></comment></comment></comment><comment><USER9> I expect that the continuing popularity and necessity of distributed programming is going to finally put an end to the idea that "programming doesn't involve mathematics". It is just _so much easier_ if you approach it from the sort of mathematical mindset demonstrated in this paper, and exactly as discussed, this is going to be a whole-stack affair, not something that can be isolated to just the data layer, despite our valiant and useful efforts on that front so far.

Programming this way is already easier in a lot of places, but the boundary between non-distributed systems that are possible without mathematical thinking and the ones that can only be done with mathematical thinking is easy to ignore. It tends to be specific niches where programs are only possible with this sort of thinking, and everything else can mostly be hit hard enough with a stick until it works well enough that we can can just get on with it. But as things get distributed, it just becomes insanely difficult to build even a "correct enough" system if you're not building it with some sort of math at least held in your mind as you design it. And "distributed" isn't just about servers, it's about multi-core CPUs, it's about GPUs, it's about CPUs and GPUs, it's about networks, just everywhere you look there's more and more "distributed" arising.

<comment><USER10> I think this has been the case for many decades. Lamport, the Turing award winning mathematician and computer scientist who wrote seminal algorithms and papers on distributed consensus, invented TLA+ for this express purpose.

A programming language is insufficiently expressive enough to specify and guarantee the safety and liveness properties of a multi-agent system.

I think formal methods and program synthesis are going to become the tools of choice in the long term for designing reliable systems in this vein.

I've been following the development of the CALM theorem and various attempts at programming languages that implement it's ideas (BloomL, etc) since 2010 at least -- I'd wished I knew about TLA+ back then. This paper is great... I hope it catches on more.

<comment><USER11> What's a good small project + stack for someone to start with formal methods and/or program synthesis?

<comment><USER10> For an introduction and motivation to TLA+ I recommend Hillel Wayne's talk _Everything About Distributed Systems is Terrible_ [0] and basically anything he has written on his blog about the TLA+.

I think following along with the TLA+ video course is really thorough and digestible once you've decided that you want to learn more [1].

You'll find the TLA+ Hyperbook is a useful reference and guide as you start specifying your own systems [2]. It has a number of examples and projects to work on.

Eventually if you want to go deep after you've decided it's worth it for yourself, get into _Specifying Systems_ the text book and bible of TLA+ [3].

 _Program Synthesis_ has a lot of research in it and is starting to show promising results. I'd say that while the research has been going on for a long time it's still rather new to industrial use... for a motivating talk and explanation on what program synthesis is try this one: [https://www.youtube.com/watch?v=HnOix9TFy1A](https://www.youtube.com/watch?v=HnOix9TFy1A)

[0] [https://www.hillelwayne.com/talks/distributed-systems- tlaplu...](https://www.hillelwayne.com/talks/distributed-systems-tlaplus/)

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

[2] [https://lamport.azurewebsites.net/tla/hyperbook.html](https://lamport.azurewebsites.net/tla/hyperbook.html)

[3] [https://lamport.azurewebsites.net/tla/book.html](https://lamport.azurewebsites.net/tla/book.html)

<comment><USER11> Thanks!

</comment></comment></comment></comment></comment><comment><USER12> Interesting results.

The results seem very useful when reasoning about coordination in programs, but I'm questioning how practically useful these results are when applied as methods.

In the GC example, for instance, you do need to find the garbage nodes. Any trivial way of re-formulating that search in a monotonic way would likely destroy performance. My guess is that it's no silver bullet to solving problems in distributed systems.

</comment><comment><USER13> >"Rather than micro-optimize protocols to protect race conditions in procedural code, modern distributed systems creativity often involves minimizing the use of such protocols."

Commerical databases 20 years ago had "shared nothing" designs precisely to avoid locks. The term "embarrassingly parallel" was introduced in the 1980s! The technique of multi-version concurrency control is widely used in databases and was first introduced in the 1980s. Maybe the authors forgot.

</comment><comment><USER14> sure its easy, if you don't care about speed.

<comment><USER15> The post makes clear statements about how distributed consistency following CALM can regain lost performance by removing the need for coordination, without adding much complexity.

Keeping architectures monotonic (as defined by post and the linked paper) isn't difficult, especially if you allow yourself excess storage and (again, as discussed in the paper) deal with compaction of your data structures asynchronously, off the critical path.</comment></comment>


Show HN: My First SaaS Built with Laravel and Twilio - <AUTHOR> https://textreminders.xyz/ <comment><AUTHOR> I welcome any and all feedback. What do you like about it? What do you dislike? What is it missing? Even if the idea is terrible, I want to hear it. Many thanks!

<comment><USER2> Hi, very cool. What resources did you use to learn Laravel?

<comment><AUTHOR> Awesome question! It honestly was a combination of the official documentation, articles regarding various topics and StackOverflow. It also involved a ton of trial and error through the implementation of many, many projects.

[https://laravel.com/docs/5.7/](https://laravel.com/docs/5.7/) [https://laracasts.com/](https://laracasts.com/) [https://stackoverflow.com/questions/tagged/laravel](https://stackoverflow.com/questions/tagged/laravel)

<comment><USER2> Thanks!</comment></comment></comment></comment>


Why Britain has 'ghost trains' - <AUTHOR> http://www.bbc.com/future/story/20150723-why-britain-has-secret-ghost-trains <comment><USER2> The article briefly mentioned it, but the main reasons these are kept is maintenance and training. That's a far larger concern than the politics, but it isn't as interesting. Hence the nickname "parliamentary trains" \-- people love to believe that it's some crazy bureaucratic reason behind them when they're usually very logical.

Some of these routes will probably never be viable on their own, but the segments of track might be needed some day as a detour. For instance if a bridge somewhere needed to be out of service for a year or something.

For example, one of the more famous "ghost trains" (since it's in London) is the daily Paddington to West Ruislip service. Since they're both served by the underground there wouldn't be much need for a mainline train between them. If long-term work disrupted that connection they might want to temporarily run a regular service on that line though.

If you just abandoned the track, you wouldn't know its condition when you needed it. Just as important, the regulators wouldn't let you run passengers using crew that hadn't been trained on that line.

So just running an occasional train and rotating staff through it, the line and the skills are always kept sharp. Then if you suddenly need that bit of track in an emergency it's ready to go.

And since you're going to run a train anyway, you might as well sell a few tickets if people want to join you.

<comment><USER3> I am from Brazil, and I wish our politicians were "bureucratic" as UK politicians regarding trains.

In the monarchy (yes, that long ago), the government believed railroads were the future of the country, and invested in them heavily (in fact half of current railroads in Brazil were built during the reign of the last emperor).

Later during the military dictatorship, the government again saw the point of railroads, and started investing in them again.

Then during our redemocratization, the federal government ended owning lots of railroad companies (example: The São Paulo railroads were given to the federal government as payment because of the São Paulo bank debts with the fedearl government), the federal government then went and shut down every single line that looked unprofitable, even ones that were unprofitable for obvious reasons (example: still under construction, thus zero revenue).

Now we need trains BADLY, but even to use old trains is impossible, for example 0.5% of the country area has 40 million people (out of 200 million in the country total), yet there is nowhere near enough trains for it, most of the transportation is by road (including all the issues of ever increasing absurd traffic, and accidents, one of the highest amounts in the world) or air (São Paulo has the dubious distinction of highest number of helicopters in the world, because road transport is so unsafe, because of accidents and crime, that people that can afford going by helicopter go by helicopter).

My parents live in Valinhos, I live near a train station in São Paulo, the train track near my home passes behind my parents home, yet I cannot do this simple trip, because not only the track is overgrown and unmaintained, but the government decided to repurpose some stations for other uses, and paved over or cemented over the tracks, the sad thing is we have the tracks there, we have the demand, and we have the trains (in storage, the military government bought lots and lots and lots of then bleeding edge electric trains), but everyone sees it as an almost impossible task to fix it.

Also comparing São Paulo subways to other countries is not even funny, São Paulo city proper has 11 million people, this is São Paulo subway+trains: [http://2.bp.blogspot.com/-N0nE1VbO69E/USpnqXhm5fI/AAAAAAAAAB...](http://2.bp.blogspot.com/-N0nE1VbO69E/USpnqXhm5fI/AAAAAAAAABQ/ebmzrYvDXlc/s1600/mapa+atual.png)

note this map has some other whole cities in it (Jundiaí is a city, also is the city where the track is paved over... the Ruby track is the one that passes behind my parents house, if it was still in use).

Now london: [http://www.projectmapping.co.uk/Reviews/Resources/specialrep...](http://www.projectmapping.co.uk/Reviews/Resources/specialreports_2edb.London%20.gif)

Paris centre (not the whole city): [http://www.urbanrail.net/eu/fr/paris/paris-centre- map.png](http://www.urbanrail.net/eu/fr/paris/paris-centre-map.png)

Tokyo: [http://www.bento.com/pix/subway/tokyosubway2011.png](http://www.bento.com/pix/subway/tokyosubway2011.png)

At least São Paulo is not bad as Salvador (4 million people, only the solid red line currently exists, the rest is planned or under construction) [http://www.tribunadabahia.com.br/upload/20141104015725_mapa-...](http://www.tribunadabahia.com.br/upload/20141104015725_mapa- estacoes-metro-salvador.jpg)

Or Campinas (2 million people in the metro area, has several rail lines already built, stations in almost all cities of the metro area and in the biggest neighbourhoods, but has only a single train running, it is a coal train, and most people using it are tourists wanting to have a train trip, usually parents wanting to show their children how it is to travel by train).

<comment><USER4> The Bay Area's rail transit map (population 7 million) isn't much to brag about either: [https://rsnous.com/images/regional- maps/bay_rail.gif](https://rsnous.com/images/regional-maps/bay_rail.gif)

</comment></comment></comment><comment><USER5> As a Brit, personally, I reckon it's because the train system lost the ball significantly last century.

Train tickets now are often _more_ than the cost of petrol to drive across the country. So if you'd spend more on a train ticket, why not drive?

Sometimes it even cheaper to get a flight from Glasgow to London than it is to get the train.

To get a ticket, a week in advance, to go from Carlisle (where I live) to London costs roughly 120 pounds (that's 180 USD, ish).

It's crazy expensive, and the benefit really isn't there any more.

Goods wise, trains could / should have taken the same kind of approach that the shipping industry did, with containers.

If our company (live events A/V stuff, mainly) is doing an event down south, we should be able to call a train company, have them deliver a container (or pick up one that we own) at our warehouse on a flat bed truck, we load it, they take it to the train station, it get craned on, and then we minibus down there the next day and have it delivered to the location. But no, it's easier and cheaper for us to run our own bunch of trucks.

If there was a service like that, we'd use it.

<comment><USER6> Sounds like you Brits need to learn a few things from the Germans about trains ...

<comment><USER7> Really? I live in Munich. Whenever I want to travel to other large German cities, I've found flying to be much cheaper than going by train. The only reasonably priced tickets seem to be the local ones. I don't understand how people can afford train prices unless they have a discount or someone else paid.

<comment><USER8> A BahnCard 25 gives you 25% off journeys, can be combined with saving offers and costs ~60€ per year. A BahnCard 50 gives you 50% off journeys but cannot be combined with savings. I think it costs ~200€ per year. A BahnCard 100 gives you 100% off journeys, i.e. the only extra cost a journay may occur are either seat reservation costs or the "Sprinter" extra for the fast train Frankfurt<->Berlin, which is not included (and technically a seat reservation anyway). This option costs ~3600€ per year or some such.

The point is, if you want to take the train, either book ahead (and maybe get a BahnCard 25), or get one of the other two. I used to do a mere 2h journey a bunch of times a year (as returns), and the BahnCard 50 easily paid for itself in just 2 or 3 trips, while also offering fantastic flexibility, since it's always 50% off the regular price, which is static.

That's how people afford trains. Also, with the BahnCards, you usually get a free ticket for central public transport zones at your destination, for example for Zone A in Berlin.

Just for your example, a single from Munich->Berlin costs 65€ with a BahnCard 50, i.e. 130€ return, booked right now. The booked ticket lets you ride at any time within the next two days, so you are also not tied to a specific train and it's no big deal if you arrive later at the station etc. (which is not the case for special offers, which tie you to a specific train). 130€ return from München Hbf to Berlin Hbf is really not that bad.

<comment><USER6> Great advice .. I used my DB50 card for many years to do weekend trips all over that part of Europe from the Ruhr area (okay, mostly to Amsterdam, I admit), and it was definitely a good investment.

</comment></comment></comment></comment></comment><comment><USER9> I think BBC journalists run this story out whenever they're low on other work to do, here's basically the same feature, exactly 3 years ago...

[http://www.bbc.co.uk/news/magazine-18644343](http://www.bbc.co.uk/news/magazine-18644343)

<comment><USER10> It's not just BBC journalists. I think they learned the technique from HN.

</comment></comment><comment><USER11> Then he said, she came from the country, he saw? To which she answered in the affirmative.

'By Parliamentary, this morning. I came forty mile by Parliamentary this morning, and I'm going back the same forty mile this afternoon. I walked nine mile to the station this morning, and if I find nobody on the road to give me a lift, I shall walk the nine mile back to-night. That's pretty well, sir, at my age!' said the chatty old woman, her eye brightening with exultation.

Dickens - Hard Times

<comment><USER12>
      The idiot who, in railway carriages,
      Scribbles on window panes,
      We only suffer
      To ride on a buffer
      In Parliamentary trains.

— W. S. Gilbert, _" The Mikado"_

</comment></comment><comment> m-i-l Better to have ghost trains than the short-sighted Beeching Cuts[0]. For example, the town I grew up in once had two stations where it was possible to catch trains to both Glasgow and Edinburgh, but by the 1960s these were both closed, and now the roads are pretty clogged up with commuters every day, with little hope of ever reopening the lines given much of the land was sold off and redeveloped.

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

</comment><comment><USER13> Before airline deregulation in the US, when routes and schedules and fares were regulated, I often found myself on nearly empty flights. After deregulation, when airlines were free to set routes, schedules and fares, the flights are nearly always packed.

Looks like the same situation with British trains.

I also recall back in the 70s when the DOE regulated which gas stations got how much gas to sell. The result was a patchwork of gluts and shortages across the US. That ended immediately when Reagan abolished those regulations.

<comment><USER14> Yes, but the other side of the coin of airline deregulation is that there fewer routes to smaller airports and/or they are more costly. There is a large fixed cost associated with providing service to each airport and because of this, airlines have decided to either hike up prices to make the route semi- viable or stop service altogether.

While this may be good for the airline, it's not necessarily good for the people that are now forced to drive multiple hours to the nearest airport.

I would think that something similar would happen if the trains were deregulated.

<comment><USER15> The U.S. partly mitigates this by subsidizing service to smaller airports, via the $250m/yr Essential Air Service program [1]. This was part of the deregulation bill, thrown in to mollify representatives of smaller towns and rural areas, who otherwise would have opposed deregulation.

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

<comment><USER16> And not a totally unreasonable approach if the politicians want to maintain a specific capability, much better than making the entire market inefficient.

</comment></comment></comment></comment><comment><USER17> Buried within the article is an argument in support of wilderness:

 _"It has to be one of the maddest places we have both been to," he says. "No words can describe how isolated this place was." The closest road was three miles away; the only nearby structures were a shuttered pub and an old windmill._

In the American West, Canada, Russia, and myriad places throughout the world, it's not hard to get three miles away from a road.

Wild places are good for the soul.

<comment><USER18> If it had a pub and a windmill, I expect there was at least a jeep trail running through. Otherwise how would the pub have resupplied or farmers gotten grain to the mill? This would count as a "road" in the parts of North America and Asia you're talking about. Therefore the "three mile" claim is bogus.

<comment><USER19> My gut reaction to your question was to answer "by train". Another option might (considering it's in Norfolk), by canal.

Then I thought I'd better look it up.

The comment in the article was about Berney Arms[1]. Looking on the map, it looks like the station is indeed unserved by roads. However, the nearest road does appear to be 500 metres away (much closer than three miles). The pub and windmill are on that road, rather than at the roadless station.

The next junction along that road is about 2km away (still not 3 miles), and the nearest meaningful junction (i.e. that gives you a choice of destination) 3.5km (still not 3 miles).

The nearest junction with an A road is about 3 miles away, following the road. It is also the closest you can get with Google Streetview[2]

[1] [https://www.google.co.uk/maps/place/Berney+Arms,+Great+Yarmo...](https://www.google.co.uk/maps/place/Berney+Arms,+Great+Yarmouth,+firstname.lastname@example.com,1.6415008,2247m/data=!3m1!1e3!4m2!3m1!1s0x47da023462e42175:0x9f3730c75cdc3a57)

[2][https://email@example.com,1.651184,3a,75y,187...](https://email@example.com,1.651184,3a,75y,187.1h,77.67t/data=!3m6!1e1!3m4!1suGPuWNtSZRNlLnmCAvU31A!2e0!7i13312!8i6656)

</comment></comment></comment><comment><USER20> Half of this article focuses on the tautological notion that since the term ghost train is a made up one with no meaning that nobody in the railways recognises, then it must be about a hidden thing that nobody knows about, and you can tell this is so because nobody knows the term. Even the attempted definition of "so infrequent as to be useless" appears not to fit the headline run, which is once a day six times a week - I know packed commuter lines that are less frequent!

<comment> jon-wood It seems that no one knew the term because the one used in the industry is a Parliamentary Train.

</comment></comment><comment><USER21> Thinking tactically, rather than strategically, has anyone asked the dispatchers? Rail networks are usually not partitioned (in the graph theory sense); moving equipment around for reasons of wear levelling, capacity, maintenance, replacement, or traffic control might account for some ghost trains. After a major snowstorm, airlines need to reposition equipment to meet schedules; they hate to fly aircraft empty, but they do it.

The same reasoning applies to road freight, pipelines, and probably fresh fruit and cut flowers too.

<comment><USER22> The article is talking about revenue runs whereas the kind of movements you're talking about are non-revenue runs (or deadheading). On non-revenue runs, there's no need to provide service, unlike these ghost trains, where service still needs to be provided even if there is little or no uptake.

</comment></comment><comment><USER23> In the late 80s I flew from Santiago, Chile to Antofagasta on a quite nice LAN Chile 737. There were about 10 passengers. One of the best flights I've ever been on. I'm not sure what the need was to the government to keep that flight going or if it's still like that.

<comment><USER24> Nowadays a lot of those flights between Santiago and Antofagasta stop in La Serena. When I was on it a few months ago, the flight was full both ways. I assume that flight is important for mining operations, and nowadays for tourism.

</comment></comment><comment><USER25> Europe needs some huge infrastructure projects. I wish the EU would make some huge investments - yes, I know it is socialism. Why not connect all the major hubs? Why should it not be possible to go from Lisbon to Moscow by high speed train? Build 4 tracks, two for transportation of passengers, 2 for freight. The Transrapid was a stupid idea but rail is an established technology and can be improved easily.

Some of the Technology is there already, for example to reduce the huge traffic on the European roads: [http://www.cargobeamer.eu/Technology-849174.html](http://www.cargobeamer.eu/Technology-849174.html)

Should be no problem, to have automatic coupling/decoupling of parts of the train, separating at major hubs going to different destinations. [http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=671327...](http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=6713273&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D6713273)

Also, Trains are run by electricity which can be created through nuclear energy (Thorium reactors in the future etc.). I see a point in the future, where we DON'T have the resources to build such an infrastructure anymore: [http://physics.ucsd.edu/do-the-math/2011/10/the-energy- trap/](http://physics.ucsd.edu/do-the-math/2011/10/the-energy-trap/)

And yes, I know, the Nazis thought up similar things: [http://jalopnik.com/5819038/hitlers-giga-railway-from- paris-...](http://jalopnik.com/5819038/hitlers-giga-railway-from-paris-to-the- caspian-sea) [http://www.breitspurbahn.de/3000.html](http://www.breitspurbahn.de/3000.html)

</comment><comment><USER26> Slightly off-topic but the Royal Mail used to run a network of nine 'Mail Rail' stations underneath London with small trains that moved general mail around. They were discovered in 2011 by a group of photographers exploring abandoned tube stations.

If you want more detail:

[http://www.placehacking.co.uk/2011/04/24/security-breach- lon...](http://www.placehacking.co.uk/2011/04/24/security-breach-london-mail- rail/)

</comment><comment><USER27> I have always wondered what the Hogwarts express was being used for between the annual trips. It seems to be a perfect example of a "ghost train".

</comment><comment><USER28> I do wish Baltics had something similar to ghost trains but I understand it is the privilege of richer countries.

The train infrastructure has fallen badly since Soviet times and it will be another 20 years until Rail Baltica [https://en.wikipedia.org/wiki/Rail_Baltica](https://en.wikipedia.org/wiki/Rail_Baltica) will be completed(that is politics and economics willing).

In 1930s you could take a train from Riga to Berlin in 14 hours(I have the original poster), from what I understand the only way you can make the same route is by going Riga-Moscow-Berlin which is not very convenient or making taking a lot of local trains [http://www.seat61.com/Latvia.htm#Moving](http://www.seat61.com/Latvia.htm#Moving) on

</comment><comment><USER29> These are the fascinating things that keep me coming back. Are there any ghost routes in the US that anyone knows of?

<comment><USER30> Pretty much every Amtrak line outside of the Northeast or the West Coast is a "ghost route" in the sense the article describes. I took the Sunset Limited as a kid once from New Orleans to Mobile. Aside from my dad and my brother, there was one other passenger on the train. That leg of the route was cancelled after Katrina washed out the rail bridges in 2005; they've since been restored, but the train service hasn't.

<comment><USER31> You should get out more. My family and I ride Amtrak from California to Colorado. That 1 train is always busy. In a first-world country, there would be 2 trains/day instead of the single train.

<comment><USER32> There's not really any market justification for running it in the first place (aside from what value it has for scenic purposes), nor is there ever likely to be.

A flight from Denver to San Francisco is $150-200 roundtrip and takes about 2 hours. A train from Denver to Emeryville (the train doesn't even go into the city) takes about 33 hours and costs $220 and hemorrhages money so badly that each passenger is a loss of $150+ even with that price.

You could dump 100 billion into it, making it true HSR and not having any intermediate stops, and it still won't be time competitive, and obviously won't be cost competitive. The distances are too large.

I support the HSR corridors, and more commuter services in the urban/semi- urban areas. But with the long distances and zero population density of most of the American West, the cross-country routes often make little sense beyond basically being a long scenic railway.

<comment><USER31> "That 1 train is always busy"

As someone who rides the train I can tell you that you are very, very wrong.

In the winter lots of people ride it to Reno.

Families ride it from Winnemucca, NV to Green River, UT. Kids ride it (by themselves) between Reno and Winnemucca.

Lots of families ride it that can't afford the airfare for all of them. Or they have too much luggage, or they live in rural areas that are hours away from the nearest major airport.

Unlike an airplane that is point to point - the train connects people in the in-between places to other in-between places.

Between SFO and Chicago, Amtrak sells each seat in the zepher about 3-4x.

I know that the train will be crowded between bay area and reno ( filled with people that don't exist apparently ). It will empty out at Reno. Gradually refill across nevada, utah and western colorado. Empty out again in Denver. And then refill to chicago.

And yes I have met people who are taking the train all the way.

Traveling by train is way more than just getting there.

And that airfare from SFO-DEN - that is fantasy - esp around christmas.

<comment><USER20> He says it is not cost effective to run. You said he is wrong, but don't seem to have addressed the same topic at all.

<comment><USER31> Hmmm - I believe I did. From a single person's perspective: it is expensive to fly from winnemucca,nv to say green river, ut.

And as far as the whole "does not pay" / "subsidies" \- that is a nonsense argument because no one applies that standard to the interstate highway system or to airports.</comment></comment></comment></comment></comment></comment></comment>


Teaching Haskell to a 10 year old: Day 1 - <AUTHOR> https://superginbaby.wordpress.com/2015/04/08/teaching-haskell-to-a-10-year-old-day-1/ <comment><USER2> What Haskell is mission in order to be more learnable by _anyone_ imho is _sane_ error messages.

The simplest example I can think of is typing _foldl + 100 [1, 2, 5]_ in the repl by mystake instead of _foldl (+) 100 [1, 2, 5]_ and getting an error message that starts like _Could not deduce (Num ([t0] - > (b -> a -> b) -> b -> [a] ->..._.

...instead, it should fking yell at you that you gave some wrongly typed arguments to the function (+), and you'd instantly realize what's wrong: "...but I'm not trying to call + ...oops, forgot the parentheses around it. fixed!". Also, auto-currying in ML-family languages probably doesn't help with making meaningful error messages easy to implement because it gives more variants for what the user could have meant (besides making type signatures 10x harder to read and making implementing named arguments or optional arguments with default values close to impossible... if they could have just used a postfix $ after the function name as currying-trigger, but no, they've had to use this for some more error-prone and hard to read "syntax sugar" because making people just type a few more parentheses would've been too Lisp-y for the haskellers taste...).

<comment><USER3> I don't think this is as easy as you make it seem. A whole bunch of problems in typing and deduction are undecidable in the general case. (Don't know about this one, but just saying.)

Also, you seem a little aggressive toward "Haskellers". I'm sure you didn't mean to be! :)

<comment><USER2> The thing with "undecidable in the general case" is that 80% if the time you can just heuristically guess an be right. Most bugs are shallow. Typos, forgetting operators etc. And even if the guess is just plain wrong, I think that a wrong simple guess is most of the time better at nudging the learner in the direction of fixing the mistake than an incomprehensible type deduction explanation... And if it's not you can always have it under some kind of "details". And no, I don't think this is "a job for the IDE"... this would be Java-think :)

...and that't the thing, when _guessing_ what's actually wrong, syntax can help a lot. Things like having the equivalent of an auto-curry-on-off toggle at the syntactic level, would make guessing at least 50% easier. And other little things too. I think ML-lamnguages tend to shoot themselves in the foot here. C-like syntax has a clear advantage when it comes to enabling guessing and heuristics.

I didn't mean to be agressive, I love the concepts behind Haskell... this is why I hate the "little things" that ruin it and make it almost unusable for average "don't make me think too much right now" type developers (like me after some sleep deprivation or a couple of beers or during a "this bug needs to be fixed by yesterday morning" sprint :) ).

</comment></comment></comment><comment><USER4> I think he will have a harder time not having not studied algebra (yet?).

Maybe it would help to explain why in regular maths + and * have similar properties. For example they both return the same result regardless of order of parameters. They are both conform to ((a <op> b) <op> c) = (a <op> (b <op> c))

Where <op> can be + or *. Now we are getting a bit abstract but keeping it kind of concrete, without using scary terms like 'associativity'.

And once he is used to abstractions he may find Haskell easier.

I was lucky to study Maths at Uni, so to me Haskell makes a lot of sense. Although the foldr/foldl/applictive/monad stuff is a mind bender I have to admit, but well worth persisting.

</comment><comment><USER5> Son: "Well. Hm. If the function is the (+), then you first apply that to the 1. So…..you have something like (1 +)? And now you apply that to the 2? And then you get the final answer?"

Seriously? He grabbed the idea just like this? Am I that old and stupid, that partial application didn't seem to me that easy? Or is currying what kids learn in a kindergarten these days? Sorry for my ranting, I'm just really amazed. A humanity went a long way to understanding such quite abstract conceptions as number 0 (as absence of something). And at 10 years kids, i think, are still learning by seeing, touching, playing. So concluding a much more abstract idea seems really fantastic.

</comment><comment><USER6> I don't know Haskell at all, the ~"all functions only have one argument" concept interests me.

>"had an easy time explaining how (2 * 3) really is two functions, each with one argument and one result, and he drew it out on paper nicely" //

So, like you pass the multiply function an argument which is a list (2, 3). Or is it more like you pass the multiply function the first operand (2 in this case) and it returns a function multiply-by-2 which you pass the second operand? The latter seems like it would get sub-optimal pretty quickly. Mind you surely here the compiler produces the same sort of assembly [repeated addition here] making it just a way to abstract around an alternate mental model.

I've just looked at [https://wiki.haskell.org/Currying](https://wiki.haskell.org/Currying), could someone walk through how something like arcsin(0) works - that's probably a bad example - something that takes a single variable input but has multiple solutions (returns n.π in this case, but say sqrt or an anagram function or ...)?

I'm sure you can tell I'm not a computer scientist, not even a programmer ...

<comment><USER7> It returns the multiply-by-2 function. This turns out to be super useful

      map (* 2) [1, 2, 3]

will take that function and apply it to each element in the list [1,2,3].

<comment><USER6> That map function looks a lot like it has 2 arguments, a function and an operand array (ie a list)??

<comment><USER8> Again, it works the same way. The map function takes the argument (*2) and returns a function, which is then applied to the list.

<comment><USER6> Seems like a semantic gloss, but then at some level I suppose higher level computing languages are all a semantic gloss.

Thanks for the responses - I'm now almost as knowledgeable as a 10 yo prior to being instructed in the subject at hand.

</comment></comment></comment></comment></comment><comment><USER9> Sounds like the big issue she's going to keep running into is that a 10-year- old doesn't really do abstractions well (and doesn't have the background to do abstract algebra yet), whereas Haskell expects a certain familiarity with abstraction.

It could be, though, that showing things in concrete, and then introducing the abstractions, is the right approach to teaching Haskell for nearly everyone, not just 10-year-olds...

<comment><USER10> _whereas Haskell expects a certain familiarity with abstraction._

I'm curious why you think Haskell is unique in this regard.

I mean, sure, if you want to understand why things like Monads exist, I agree, that fundamentally means grokking some pretty deep abstractions.

But I don't know that you _need_ to understand those abstractions to use and appreciate Haskell... maybe to fully use and fully appreciate it, but I wouldn't expect that of a 10 year old to begin with, in part because I wouldn't necessarily expect that of an adult either.

<comment><USER9> Yes, I had things like monads in mind, but also currying, and higher-order functions, and I could probably think up a couple more if I tried.

True, all languages require abstractions. But it seems to me that Haskell is more abstract than most. That's it's strength, in fact. But it seems to me that it also creates something of a mismatch when trying to teach it to a 10-year-old.

<comment><USER10> Huh... weird, I don't really think of currying as much of an abstraction. I mean, if you're going to be rigorous about it, maybe, but you can cheat and explain it as partial function application, which gets you 99% of the way there, and I think is pretty easy to explain.

Higher order functions are certainly a bit trickier, but you could explain them in specific contexts (as with 'map') without needing to deal immediately in generalizations, which probably makes it a lot easier to explain.

<comment><USER11> I assume then you'd expect him to learn about polymorphism, inheritance, classes, the 'static' keyword, and virtual functions if this was an OO language, if these kinds of things are on the table, right?

I'm sure there aren't truckloads of evidence of beginners having problems with those concepts.

<comment><USER12> In all honesty, inheritance, classes, the 'static' keyword, and virtual functions are all harder than anything in Haskell. They're all _weird_ ad-hoc concepts without simple underlying mathematical concepts. That's rather unlike Haskell, where the underlying math is usually very simple, if more abstract than most people are used to.

<comment><USER13> That is very subjective. For example, Lisp has a very simple grammar, yet many people find the minimalism complicated in how it manifests in paren heavy code. Likewise, Haskell's reliance on abstract mathematics is definitely going to turn many people off to it. "It's just math" is often taken as a negative, not a positive (depending on the person).

Natural language is built around all sorts of non mathematical ad hoc concepts, yet we seem to use it just fine. Of course, it might not be the best way to talk to the computer, but it is definitely "accessible."

<comment><USER14> Most people don't know their natural language as well as they'd need to know it to accurately and unambiguously describe things. The only reason natural languages are even useable is because the human interpreting them has a huge amount of context to infer the meaning from and do error correction with.

The reason programming languages exist is to simplify the language used to describe things so they can be interpreted without too much additional context and unambiguously.

<comment><USER13> You aren't wrong. But there is a good reason objects remain popular even if they aren't ideal by any means. With objects, you get to rely on your built in metaphor capabilities of natural language, your ability to think ad hoc. Now, that gets you into trouble quickly because the computer isn't human, but it shouldn't be a big mystery why OO remains popular. Haskell makes imprecise ad hoc thinking hard to encode, because well..eat your vegetables, they are good for you!

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER3> Your son is lucky. That's all I'll say. :)

<comment><USER15> Having found out in person how superginbaby teaches her kids, I realized just how primitive my upbringing was many years ago :)

</comment></comment><comment><USER16> I struggled to learn Haskell in my early thirties. I think your son has a bright future.

<comment><USER17> Most of my problems with Haskell are related to getting rid of patterns and habits from other languages that are deeply ingrained.

Assuming you have the mental models and internal language (which from the OP seems like a ten year old just barely has) it seems like it would be easier to learn Haskell at a younger age or at least before you learn any other languages.

<comment><USER18> I tutored Haskell to first-year students and I think the hardest part of picking it up is understanding that previous expertise won't help until you grok the distinctly new perspective with which you must approach problems.

I'm (somewhat) sceptical of the popular "Children inherently have the most malleable minds" trope, to the grand annoyance of one neuroscientist friend; I feel it's more an environmental factor stemming from fewer areas of growth/stress to focus on and increased motivation as they lack the jack-of- all-trades experience in similar areas to fall back on whenever they get frustrated. I like to believe this since it motivates me to overcome those limiting factors by adapting my work ethic, with the hope to continue learning efficiently.

Back on topic, I feel that the best mindset with which to approach Haskell (and many other new areas) is: "I don't get much right now, but that's OK. If I keep working with what I know and expand that set by just a little every day, it's bound to click and I will be able to look back on the entire journey as worthwhile."

<comment><USER19> Well, you're not alone. I also think the "malleability" we see in children is just because of the attributes of their existence: nothing to worry about, nothing to do but play (and voluntary learning _is_ play) and so on.

And like you, I also use this to motivate me in Haskell. Little by little I learn things I didn't know before. It takes me years but I do it at the pace I choose. And why would Haskell be different from any other subject I learned as an adult? Everything makes no sense in the beginning, then it's hard, then you can kind of see what they're talking about, then you get some practice, and before you know it you are equipped enough to dig into intermediate stuff and then the advanced parts.

Was it not the Japanese that came up with Kaizen - continuous improvement? I believe in that principle.

<comment><USER20> I, too, live by Kaizen.

</comment></comment></comment></comment></comment><comment><USER6> >let double x = x * 2

vs.

>hasn't had any algebra yet

He has now. ;0)>

Simple variable assignment is algebraic mind you so the assertion doesn't match with the note of having studied some programming already. Functions are algebraic too.

I'm guessing the parent here is thinking "he's not studied a formal course specifically targeting a subject area referred to as algebra".

</comment><comment><USER21> CodeWorld[0] provides a nice graphical environment in which to learn Haskell.

[0]: [http://codeworld.info/](http://codeworld.info/)

</comment><comment><USER22> I'm curious, why Haskell? Children tend to like visual feedback (I know I did) so Logo, Scratch would probably be more rewarding for him.

<comment><USER23> Because the kid asked about Haskell. This is explained in the first sentence of the article.

</comment></comment><comment><USER24> I never really knew what people were talking about when they mentioned currying until I read this article.

</comment><comment><USER25> > No, son, your mom just phrased the question badly.

Aaaaaand... I am an asshole. Thank you for reminding me.

<comment><USER26> Gender hypersensitivity is the new grammar nazi movement. It adds nothing to any given conversation and only derails every thread it's mentioned in. Much worse than grammar correction actually...

[EDIT]

Sadly my point is being proven. I REALLY wanted to hear about teaching Haskell to 10 year olds but now we've got the same boring ass gender war going on that never goes anywhere and is totally off topic. I wonder if you could delete your comment before it gets too out of hand. At the very least try not to bring it up next time.

<comment><USER27> Wow.

[EDIT]

The responses that amounted to "You did nothing wrong!" "We don't need to talk about this!" were what made the thread heated -- outside of that it was just a couple of posters realizing they made an incorrect assumption, what need was there to _debate_ that?

<comment><USER26> sigh....

First of all he called himself an asshole for making that assumption. What about others that made the same assumption but didn't feel the need to derail the thread? Are they assholes too? Maybe people felt the need to chime in since there was an insult implied and they wanted to make it clear that by having the same assumptions about the author, they did nothing wrong.

Second, his post has NOTHING to do with the original article, it's just off topic noise.

</comment></comment></comment></comment><comment><USER28> >> ...and just turned 10, has been nagging me for ages to teach him Haskell...

I'm guessing you would have taught your human(?) kid some human languages first before he started nagging you (why you, he can read too, right?) to teach him Haskell. I think you had a dream or sumping...</comment>


Profit is Good - <AUTHOR> http://ryancarson.com/post/50920451769/profit-is-good

<comment><USER2> Amen. I've bumped into the "anyone trying to make a profit is a sinister shark" types in the event organization world. More intimate, non-profit community events provide a totally different experience to large, commercial events, yet there are people who would irrationally love to wipe out the latter rather than live and let live.

Doing things for profit is certainly not the only (or even best) way but it's a perfectly legitimate approach that _can_ be done honestly and with integrity, and not one worth dismissing out of hand even if it doesn't fit into your worldview.

<comment><AUTHOR> Yes, that backward mentality was especially prominent in the event space. We experienced that a lot when I was running Carsonified.

</comment></comment><comment><USER3> Kickstarter projects are not allowed to be turned into for-profit companies, even though KS themselves broke their own rules in this by turning a blind eye for Penny Arcade.

If they want to turn Ghost into a for-profit company and not a non-profit organization, they can follow in Wordpress's footsteps exactly: create an open source, non-profit blogging platform, then later create a separate entity (a for-profit company) to offer additional services for money.

But that's assuming that is their goal. Who's to say their goal isn't simply to create a much better blogging experience than Wordpress for the same reason Wordpress was created in the first place (to offer a much better blogging experience than existed at the time)?

I'm all for companies having a business model and focusing on both quality and profit, but that does not preclude the valuable existence of non-profit organizations and open source projects, like jQuery or my own project, Modernizr.

I think a better use of time would be to criticize the obviously for-profit startups that obviously have no business model than an exit strategy of hoping to eventually sell, or get enough users and investment capital to grow to the point where ads become viable.

<comment><USER4> > Kickstarter projects are not allowed to be turned into for-profit companies

Kickstarter is used very much for projects by for-profit companies. Maybe there is some accurate but confusingly presented point behind this, but if so it could definitely use clarified (and perhaps a specific reference to the rule at issue.)

<comment><USER3> > Can Kickstarter be used to solicit investment or loans?

> Nope. Kickstarter is a new form of commerce and patronage, not a place for > investment or lending. You'll never give up ownership or pay back any funds > raised on Kickstarter. Ever.

<http://www.kickstarter.com/start></comment></comment></comment>


Ask HN: Developer friend wants to help on for-profit side project - <AUTHOR> Hi HN,
What should I keep in mind when having friends help on a side project that could become commercially viable?
I have a project that I'm planning to turn into a SaaS product. One of my buddies (someone I've known for 5 years or more) is looking for "a fun project to work on", and we're going to meet up this evening to see if my project is interesting to him.
I'm concerned about how to both retain copyright/ownership of the product, and also compensate them if the project starts bringing in revenue. I have more experience than him, so I'd like to help mentor him, but I'm also excited to get a second pair of eyes and hands on the project.
This guy is solid, and we have a solid mutual friend. Should I have him sign a legal doc saying that I retain copyright over the codebase?  Is something straightforwardly laid out in an email good enough? Is it a good idea to promise him compensation (like 120% of his hourly) if the project pulls in revenue? <comment><USER2> If you don't trust a handshake and a "we'll discuss money when we start making it", I'd definitely get something in writing.

But don't just write something and call it good. If you're serious about it, contact a lawyer to make sure you're protecting your IP.</comment>


Multimodal routing with open source transit and map data - <AUTHOR> https://mapzen.com/projects/turn-by-turn/?d=0&lat=40.7259&lng=-73.9805&z=12&c=multimodal&st_lat=37.80693585437371&st_lng=-122.40692138671874&st=2%20Bay%20Street%2C%20San%20Francisco%2C%20CA%2C%20USA&end_lat=37.74927215926059&end_lng=-122.42700576782227&end=1351%20Church%20Street%2C%20San%20Francisco%2C%20CA%2C%20USA&use_bus=0.5&use_rail=0.6&use_transfers=0.4&dt=2016-05-10T08%3A00&dt_type=1 <comment><AUTHOR> The [http://www.opentripplanner.org](http://www.opentripplanner.org) project is working on open multimodal routing too, and they have an associated Android app. Starting with OTP and Mapzen, it is good to finally see the first steps toward commercial-grade routing implementations on open data.</comment>


Show HN: TypeZen = GitHub Zen ± Google Fonts - <AUTHOR> http://jbckmn.github.io/TypeZen

<comment><USER2> Nice. Is there an easy way to set the new tab url in Chrome? Without extensions?

<comment><AUTHOR> For sure. Open the preferences panel for your Chrome, go to _On Startup_, and select _Open a specific page or set of pages._ There, you should be able to select/paste the TypeZen URL.

<comment><USER2> So that works "On Startup" only, not when I open a new tab. Works great in Safari though.</comment></comment></comment>


Earth has temporarily gained another moon - <AUTHOR> https://www.seattletimes.com/seattle-news/science/earth-has-temporarily-gained-another-moon/ <comment><USER2> So... What they are saying is, we currently have a unique opportunity for some enterprising individual to steal a moon or spark an IAU brand debate on the meaning of the word "moon"?

6x11 ft isn't unmanageable bulk-wise, and we obviously have the mass figured out already.

</comment><comment><USER3> " If you look at the night sky and see a bright object near the (original) moon, that's not the mini moon. It's Venus — the third-brightest celestial object to light the sky, after the sun and moon — which is visible this week in the west after sunset."

I've been wondering what that is. I assumed a planet, though I wasn't sure which.

</comment><comment><USER4> Kacper Wierzchos: "It's a big deal as out of ~ 1 million known asteroids, this is just the second asteroid known to orbit Earth (after 2006 RH120, which was also discovered by the Catalina Sky Survey)."

Amazing. I am surprised that this kind of thing doesn't happen all the time.</comment>


A Tidal Wave of Corporate Migrants Seeking (Tax) Shelter - <AUTHOR> http://www.nytimes.com/2016/01/26/business/dealbook/a-tidal-wave-of-corporate-migrants-seeking-tax-shelter.html <comment><USER2> The big problem is really the changes made to the US tax code during the Clinton era and continued by Bush and Obama. In particular, the ability of US companies to defer taxation on profits made abroad until they are repatriated. Effectively, these profits sit in limbo since they aren't taxable by the country in which they are 'made' (e.g Ireland) because they belong to a US company. Companies then apply pressure on politicians to announce tax amnesties that enable them to repatriate the profits with negligible tax.

Blaming all of the above on other countries by casting them as tax havens is a complete charade. The US could fix this problem today on its own if it wanted to. It just needs to get its house in order and e.g. get rid of the deferral rules. The best article I've read on the subject was here: [http://www.rollingstone.com/politics/news/the-biggest-tax- sc...](http://www.rollingstone.com/politics/news/the-biggest-tax-scam- ever-20140827)

Edit: Another good article on this is here: [http://www.irisheconomy.ie/index.php/2016/01/22/upsetting- th...](http://www.irisheconomy.ie/index.php/2016/01/22/upsetting-the- applecart/#more-18193)

It's a little bit more technical as it's written by an Irish economist for an audience of economists, but it's interesting in that it gives a good overview of the situation from an Irish perspective.

<comment><USER3> My understanding was that they _do_ pay tax in the country that the profits are earned (unless of course the country has a 0% corporate tax rate), but that they don't pay tax in the parent company until they repatriate.

If that is the case then I'm fine with it. I'm obviously not fine with tax holidays / amnesties; but I consider that a different matter.

<comment><USER4> Because of different service and intellectual property agreements between different subsidiaries of the company, the subsidiaries almost never generate substancial (accounting) profit.

IMO, that's perfectly fair. E.g. Apple isn't generating profit in the UK; it's generating _sales_ in the UK (which are taxed as all sales are), but most of its _profit_ was generated in the US (design, research, strategy, innovation, ...). I think it's a huge problem that the US doesn't force companies to pay tax on profits.

<comment><USER3> That isn't exactly _profit_. As long as things are sold at realistic prices (ie, bulk iPhones are sold to the subsidiary at the same price they would be sold to a domestic buyer) then it should all be fine. It generally works out for multinationals headquartered in Canada, but granted there are far fewer tax loopholes here.

</comment></comment></comment></comment><comment><USER5> From the article, Johnson Controls is now a foreign-owned company, and consequently: 1\. Cannot lobby the US government any more 2\. Is not eligible for future bailouts 3\. Could rightly be slapped with $150M/year of import duties to make a statement.

I have no problem with countries rewarding corporations for having substantive physical presence within their borders, and for putting external competitors at a financial disadvantage.

The US is a big place with an expensive military and social welfare program, and millions upon millions of sweet, delicious consumers. The US already runs a deficit, meaning there is insufficient tax revenue.

Corporations can make their own choices about whether the cost of doing business is worth it or not, but nobody who is transacting money should be exempt from making tax contributions to society, and certainly not at the scale corporations are.

</comment><comment><USER6> The article identifies the problem, but the conclusion appears to be that we should win the race to the bottom by going straight down. If the USA adopts Ireland's tax code, what happens when another country goes even lower?

<comment><USER7> Another solution is to move from taxing profits to taxing consumption, i.e. through VAT, and then enforce it even for virtual services. That way, Apple's US tax would for example be proportional its US sales, which sounds fair.

<comment><USER8> That pushes people to buy goods and services overseas. AKA, why buy a US yacht and pay an extra 20%.

The real solution IMO is to tax US companies for world wide profits and have punitive taxes on foreign companies to keep US companies from pretending to move offshore.

<comment><USER9> If I as a US Citizen were to work overseas, I would owe US tax on the wages I make outside the country. Why doesn't the same logic apply for a company that makes profits overseas? This is a rhetorical question, obviously, we all know why the system is stacked in favor of corporations.

<comment><USER10> I am a US citizen who works overseas. You get to deduct your foreign tax obligations on your US tax returns (if you don't go for the standard foreign income earned deduction). Oh, well, some "taxes" aren't really taxes in the US sense, like taxes on health insurance, or what about social security contributions? And then there are weird situations where a US citizen goes on a business trip in the US and is on the hook for both Chinese and US taxes.

Believe me, US citizens working abroad and US companies doing business abroad suffer through similar pain when it comes time to file tax returns. Resolving differences in two completely different systems is very hard.

</comment></comment></comment></comment></comment><comment><USER11> Wouldn't it be better to reign in these oligarchies that are hell bent on controlling the world and pushing our (The U.S.) standard of living further down? This myth of free trade is clouding the picture. 38% of all world trade is inter-firm trade and should not be considered real "trade" anyway, according to Alfred E. Eckes, former chairman of the U.S. International Trade Commission.

</comment><comment><USER12> "Ultimately, the only way inversions will stop is when the corporate tax code changes so it becomes more attractive for American companies to be American companies."

Or it becomes too expensive for them to not be American companies. After all, the US is a huge market that everyone wants a piece of.

<comment><USER13> You already pay taxes for profits in the US market. What they're wrangling over is paying US taxes for income generated in other markets.

I'm not sure why any corporation would want to be headquartered in the US.

<comment><USER14> Then why are so many companies headquartered here? I'm legitimately asking.

<comment><USER13> It may just be that they started as fully US companies. You wouldn't incorporate in Ireland for your two person US garage company. Particularly in, say, 1950.

</comment></comment></comment></comment><comment><USER15> Why is it corporations only pay taxes in one country anyway? That seems paradoxical, if they're selling goods in multiple countries then they must be using the infrastructure of all those countries, and isn't that one of the big reasons we have taxes in the first place?

<comment><USER16> > Why is it corporations only pay taxes in one country anyway?

They don't. They pay taxes in pretty much every country where they operate. Pfizer may move to Ireland, but they'll still pay US taxes on their operations in the US.

<comment><USER15> Well yeah but clearly the tax savings are enough to justify the expense of the legal time behind it and the logistics/admin overhead of the move, they wouldn't be doing it if it left them in the red.

<comment><USER16> Sort of, these companies generally have not been bringing cash back to the US any way, so they haven't been paying US taxes on their non-US money anyway.

What moving to Ireland will allow Pfizer to do is pay dividends out of their non-US cash without paying US taxes.

</comment></comment></comment></comment><comment><USER16> Why do we care if a company is nominally American or not? It just seems odd. Nominally being Irish or Swiss does not mean a majority of your employees are in those countries.

</comment><comment><USER17> Who will these companies hire when they move to Ireland? There was a mass emigration last year where, at its peak, 10,000 people were leaving per week. It sucks living in a country that is rainy and overcast most of the year, how can you convince someone from a sunny and warm state to move there?

I just feel like something is missing when I hear things like "X company is moving 500 jobs to Ireland". Where the hell are they finding these people? They country has a population of 6.3mil!

<comment><USER18> Keep in mind, their headquarters is located in Ireland but they can still do operations in the United States. This is a strategic move to avoid U.S. taxes on profits made outside the country. The United States is one of the only countries in the world that taxes outside its boarders. They will save on foreign profits, but they will still pay taxes on their U.S. income... I find it ironic that our politicians promise jobs, but aren't willing to reduce taxes and regulation on businesses. Then, they get upset when businesses want to leave. What's their solution to fix this? "tax them more for trying to leave" -__-

<comment><USER19> But corporate US taxes are on profits, so if the US only taxed inside the country, you can lower your US taxes by engineering your organization such that you can claim US operations pay your business unit that resides in a different country amounts that are similar to your US profits.

So imagine a company that sell 500m of a product in the US and today has costs of $400, with $100m in profit. If they have to pay the business unit in Ireland $90m for their voodoo design expertise, then the company still has 100m in profit, but now only 10m will be taxed in the US.

It's not as if consumption taxes lack loopholes themselves: In my own case, I spend about 20% of my earnings, with the rest going to taxes and savings (I am aiming for early retirement). So why would I spend my retirement years at a place wth a high consumption tax? The one way around that would be to start taxing money transfers across borders, and we all know that isn't happening.</comment></comment></comment>


Show HN: Simple readability index scorer - <AUTHOR> https://github.com/mattselph/readability <comment><AUTHOR> First time submitting here. Really admire the community and find it very welcoming.

Trying to get better at python, wrote this simple readability index calculator. Right now it calculates four different readability scores.

Very interested in feedback of any kind so I can get better.

All my best,</comment>


Flightradar24 – how it works. Part 2, ADS-B protocol - <AUTHOR> https://habr.com/en/post/447078/ <comment><AUTHOR> Discussion about first article:

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


Why does software have to be maintained? - <AUTHOR> http://www.johndcook.com/blog/2011/10/21/software-maintenance/ <comment><USER2> I love this kind of thinking. We are often missing a real clear understanding of even major things in software. Questions like "Why does software development take so much time", "Why can only developers write software', and this "Why does software have to be maintained" are in dire need of deeper analysis and understanding. In the long run, real evolution in software development will come from understanding these questions.

<comment><USER3> Why can only developers write software? What kind of tautological question is that? If you write software you're a developer, even if not necessarily a good one.

<comment><USER2> Most people can tally up a sum. Most people can write a letter or note. Most people can sing a song, even if probably out of tune.Most people can draw a map or simple diagram. Nearly all people can communicate by talking.

On the other hand, most people can not write even a tiny piece of software.

I think that will change in the future.

But there's a lot to be done until we are there.

</comment></comment></comment><comment><USER4> Dan Bricklin wrote a very nice article on the subject: [http://changethis.com/manifesto/show/6.200YearSoftware](http://changethis.com/manifesto/show/6.200YearSoftware)

</comment><comment><USER5> Interestingly, some network software seems to have nearly frozen. There are people out there running really really old, but still functional pieces of software (like thttpd) that doesn't really need maintenance, especially if the OS doesn't change.

</comment><comment><USER6> Of course, sometimes the dock really _is_ moving too. Like when you try to recompile your tried-and-true system with a new compiler and discover you'd really been utilizing undefined behavior...

<comment><USER2> If you are trying to compile the software with a new compiler, then you are changing the environment. And then it's expected that you may need to change things. Software has the most complex interfaces between parts, and it's nearly impossible to even verify that you haven't changed an essential part of of the contract. Of course this also hints at how we may build more reliable and resilient software in the future...

</comment></comment><comment><USER7> Good question. Why revisit the software that runs things like the segway, the space station, the pace maker, the artificial kidney, and a DVR? Maybe if you want to build a new one, maybe for "security", or maybe you just want to write some code. I like old software much better than updated software, because the latter is pretend and really unknown.

</comment><comment><USER8> Hmph, interesting points are raised, I suppose we shouldn't call it software maintenance when fixing a bug but, software upgrades! ;)</comment>


LabStack: Multi-language programming playground - <AUTHOR> https://code.labstack.com/program <comment><USER2> From the title I was hoping against hope that it would allow me to easily call functions written in one language from functions written in another.

Disappointed again.

<comment><USER3> You might like this: [https://news.ycombinator.com/item?id=20542258](https://news.ycombinator.com/item?id=20542258)

MetaCall: Inter-language foreign function interface calls

<comment><USER2> Interesting, but it doesn't quite pass the 'easily' test.

:-)

</comment></comment></comment><comment><USER4> So how is it so fast?

</comment><comment><USER5> Cool. Running a Haskell program with a compiler error doesn't show the error.

</comment><comment><USER6> This is kind of cool. How do you prevent people from running malicious code?

<comment><USER7> Id imagine that they take the same kind of approach that I do with [https://perl.bot/](https://perl.bot/) using the Linux namespace apis, seccomp and more.

</comment></comment><comment><USER8> Nice! Consider adding Lisp, scheme, forth?

</comment><comment><USER9> Proposal to add support for perl6, d, zig?

<comment><USER10> Doesn't Perl6 have a pretty extensive ability to call other languages like Python, Lua, Ruby, C...etc?

<comment><USER9> C, C++, perl5, possibly python (not sure there), and any jvm language if you use the jvm version.

</comment></comment></comment><comment><USER11> Was considering using this as comparative language teaching tool, and the thing that struck me most was the verbosity of Java compared to other languages:

      fun main(args: Array<String>) {
        println("Hello from Kotlin!")
      }

vs.

      public class Main {
        public static void main(String[] args) {
          System.out.println("Hello from Java!");
        }
      }</comment>


Video: Hiten Shah and "Raising your Kids to be Entrepreneurs" - <AUTHOR> http://thestartupdigest.com/2010/04/21/hiten-shah-and-raising-kids-to-be-entrepreneurs/

<comment><USER2> Is it just me, or does this whole "Entrepreneur" thing sound like a weird cult sometimes?</comment>


Watch What I Do: Programming by Demonstration (1993) - <AUTHOR> http://acypher.com/wwid/ <comment><USER2> Demonstration is very important for learning. There's so many hidden wins by watching someone do the thing instead of talk about it. For example, just seeing how they use their tools has a number of benefits. You might walk away not only learning the material but have a bunch of tips on how to improve your workflow. It's a win / win.

Neat timing on this article too. While this isn't a live demo of coding, I just published a 90 minute live demo today where I go over the process of planning out a substantially sized web app I'm going to be developing. The video is just a non-stop thought process of me figuring out how the app will work (struggles included). It's available at: [https://nickjanetakis.com/blog/live-demo-of-planning-a- real-...](https://nickjanetakis.com/blog/live-demo-of-planning-a-real-world- web-application-from-scratch)

This is the first time I tried something like that. If anyone watches it, I'd really like to know what they thought. The only problem with live demos and really getting into the thick of it is the videos end up being a lot longer than a highlight reel that was made after the fact and only showed the interesting parts.

For me one of the biggest wins of a live demo is being able to see the true process, because that's what allows you to figure out how to apply it to your own project / work / etc..

</comment><comment><USER3> Programming by demonstration is a great forgotten technique for allowing end users to automate their common tasks and reduce repetition.

Auto-complete searches, intellisense, are known examples of PBD techniques illustrating their benefits.

Suggesting adequate parameters for commands, macro recording, command pipes... All these provide users some ways of building automated functions, without requiring them to learn the precise syntax of a programming languages.

<comment><USER4> I still see papers published every year on PbD (though I agree the idea still hasn't really taken off).

I've been impressed by the recent Helena/Rousillon project for automating web scraping and other browser-based tasks: [http://helena- lang.org/](http://helena-lang.org/)

<comment><USER5> Thanks for showing this, I didn't know web scraping came this far. And here I am, writing my own scraping scripts :P

</comment></comment></comment><comment><USER6> I learned C# from watching Scott Allen's MVC 3 course on PluralSight years ago.

The best part about his videos was that he would purposely avoid using the pre-scaffolded boilerplate project templates, and would instead start with empty ASP.NET projects and build up an MVC solution from there.

Before I had even written a single line of code, I was able to keep up in conversations with guys who had been writing C# for a decade, because he was so thorough.

I learned more about patterns and structures from other folks like John Papa, but the fundamentals were all thanks to Scott's videos.

</comment><comment><USER7> A couple of valuable takeaways from chapter 1 for me:

\- Explains what PBD is all about.

\- "many mathematicians and physicists think visually and reduce their thoughts to words only reluctantly to communicate with other people". I've found that this holds true for myself as well, both when thinking about maths problems and in thinking about algorithms for my software. This is why I believe in the _concept_ of visual programming.

Several tools made for music production, creation of computer generated imagery and animation base a lot of the workflow around working visually. For example:

* Max, a visual programming language for music and multimedia. [https://cycling74.com/products/max/](https://cycling74.com/products/max/)

* Pure Data, an open source visual programming language for creating interactive computer music and multimedia works. [https://en.wikipedia.org/wiki/Pure_Data](https://en.wikipedia.org/wiki/Pure_Data)

* VCV Rack, an open source virtual modular synthesizer. [https://vcvrack.com/](https://vcvrack.com/)

* Blender, an open source 3D modeling, animation and rendering program has a material editor where you create a material by routing basic materials through a set of nodes. [https://docs.blender.org/manual/en/latest/render/blender_ren...](https://docs.blender.org/manual/en/latest/render/blender_render/materials/nodes/introduction.html)

* Nuke, a compositing software that is widely used in the VFX industry, has a node-based workflow. [https://learn.foundry.com/nuke/content/getting_started/using...](https://learn.foundry.com/nuke/content/getting_started/using_interface/working_nodes.html)

* Natron, an open source composting software. Development stopped last year and they are currently in need of a maintainer. [http://libregraphicsworld.org/blog/entry/the-demise-of-natro...](http://libregraphicsworld.org/blog/entry/the-demise-of-natron). [https://natrongithub.github.io/](https://natrongithub.github.io/)

* Tool2, an open source piece of software for creating interactive 3d content and animations. [http://tooll.io/](http://tooll.io/)

* Cables, "interactive visuals, made from cable salad". [https://cables.gl/](https://cables.gl/)

* Demotivation, a tool by Ferris of demoscene group Logicoma, provides a visual programming language that compiles to a function that renders everything on screen in the demos created with the tool. Ferris talks a bit about it in [https://youtu.be/hFIyj5Yv440?t=1332](https://youtu.be/hFIyj5Yv440?t=1332), and he also worked on the code in a recent stream on Twitch which he hasn't uploaded to YouTube yet; [https://www.twitch.tv/videos/419371333](https://www.twitch.tv/videos/419371333) (Ferris Makes Demos Ep.052 - Botch. Skip to 00:07:41 in the video on Twitch). This tool is not available to the public.

I think a couple of other pieces of software deserve a mention for being ways to work very visually with music production in various ways:

* Steinberg Cubase, a digital audio workstation. [https://new.steinberg.net/cubase/](https://new.steinberg.net/cubase/)

* Ableton Live, a digital audio workstation. [https://www.ableton.com/en/live/](https://www.ableton.com/en/live/)

* Arturia Pigments, a wavetable and virtual analog software synthesizer. [https://www.arturia.com/products/analog-classics/pigments/ov...](https://www.arturia.com/products/analog-classics/pigments/overview#en)

And in the world of game development there is of course:

* Unreal Engine 4, a game engine and suite of integrated tools for designing and building games, simulations, and visualizations, features a visual programming language called Blueprints. [https://docs.unrealengine.com/en-US/Engine/Blueprints/Gettin...](https://docs.unrealengine.com/en-US/Engine/Blueprints/GettingStarted)

Those are the ones that I personally find inspiring. There are a couple of visual programming tools that I don't mention here but which I felt fell way short of being even remotely productive.

So back to what was being said in the book linked by OP. A couple of quotes:

\- "Aaron Sloman distinguishes two kinds of data representations: _analogical_ and _Fregean_ (after Gottlob Frege, the inventor of the predicate calculus). Analogical representations are similar in structure to the things they describe; Fregean representations have no such similarity." (Goes on to show a figure demonstrating the difference.)

\- "Words are Fregean. Yet words and rather primitive data structures are often the only tools available to programmers for solving problems on computers. This leads to a translation gap between the programmer's mental model of a subject and what the computer can accept. I believe that misunderstanding the value of analogical representations is the reason that almost all so-called visual programming languages, such as Prograph, fail to provide an improvement in expressivity over linear languages. Even in these visual languages, the representation of data is Fregean."

I find this very interesting. This is pointing out a very specific problem.

I went on to read chapter 3 as well, and found that chapter interesting as well. Not going to comment on that chapter because this is enough text anyway for now.

I intend to read more of the chapters as well.

All of this is to say, this book seems to hold some valuable knowledge, and I wish people read it. The book seems to focus a good deal on empowering end- users, and on teaching-contexts. That is a worthy goal as well but not what I am interested in (hence why I skipped reading chapter 2). But from what I have seen so far I think this book might help guide us toward creating better tools for expert programmers.

We need tools that help us manage complexity better than what we have today. We need tools that will help us iterate faster. And I believe that tools that give us ways to reason about our problem visually as we are authoring and editing our software will be key. Not as separate drawings and documents. As an ingrained part of development. As a way of communicating to the machine what we are trying to achieve with our software.

<comment><USER8> I just checked out that video about Demotivation. I instantly understood so much more about how demoscene videos work and how they are created. Amazing stuff. Thanks for that.

There's a universe of time to be spent enjoying all those tools for the creative soul.

Also: "We need tools that help us manage complexity better than what we have today. We need tools that will help us iterate faster. And I believe that tools that give us ways to reason about our problem visually as we are authoring and editing our software will be key. Not as separate drawings and documents. As an ingrained part of development. As a way of communicating to the machine what we are trying to achieve with our software."

This!! Yes! My thought for the past 15 years or so. We've got an army of programmers (and general computer/phone users) pushing the cart with the square wheels for decades. Myself included. And this is about making those wheels just a little bit more rounded.

This is true on so many levels. Not just software tools. I mean we really can't come up with a better input UI than a mouse/keyboard/touchscreen? Wait, what? We're moving a cursor on a screen?! And the screen is flat?! Neuralink please end our suffering.</comment></comment>


Optacon - <AUTHOR> https://en.wikipedia.org/wiki/Optacon <comment><USER2> Since this is a site that actually revolves around everything start-up, I feel the need to mention that there might indeed be a market for this. The Optacon filled a nieche that currently nothing else does. A portable, relatively affordable generic tactile graphic display. While we have OCR these days, things like layout and handwriting are still a major issue. There are problems that are pretty much unsolved in practice, like OCR'ing math formulas and have them present in a readable tactile way, which the Optacon solved for those people motivated enough to deal with it. A modern Optacon would still have the nice small camera, but likely also a "terminal mode" which could be used to explore the content of your computer screen, using the camera as a sort of mouse. If you manage to design something that is reliable, and matches or surpasses the Optacon in practicability, you can expect to charge around $5k for it and it should be a success (as far as successes in the assistive technology market go). I should probably mention that this has already been tried around 2000. The product was called VirTouch and was made by an israeli company which name I forgot. Unfortunately, they never really went into mass production, the company somehow went out of bussiness before the product went out of demo mode unfortunately. However, I still think this could be pulled off if done right.

</comment><comment><USER3> If I understood this correctly, a pixel that is "on" in the tactile array is not just raised up above the "off" level, it is actually vibrating up and down at somewhere between 250 and 300 Hz.

That certainly makes the mechanics complicated, an array of such pins is not exactly off the shelf today either, I think?

It feels like the rest of the system, including of course the optical part which was a major achievement back then with custom silicon to get 144 photodiodes on a single chip, are more or less trivial today. But the complexity of a mechanical "display" is still not something that is solved by mainstream components as far as I know.

I wonder how reliable they are, I hope it's "very" since people are still using mechanical devices from 15+ years ago for something as critical. :/

Edit: I found this link [1] which shows a cross-section of a sensing pin connected to a piezoelectric bimorph. I can't imagine packing 144 of that structure that closely together, though. But perhaps the device offsets the bimorphs from the array, connecting the pins and bimorphs mechanically.

[1] [https://books.google.se/books?id=6dWjBQAAQBAJ&pg=PA309](https://books.google.se/books?id=6dWjBQAAQBAJ&pg=PA309)

<comment><USER4> > That certainly makes the mechanics complicated, an array of such pins is not > exactly off the shelf today either, I think?

A solenoid is just a pin with an electro magnet wire wrapped around, put a spring on the pin to pull it back into the electro magnet and when you turn the magnet on it should vibrate.

A 100x100 grid of solenoids should cost under $100 they are fairly cheap, you might even be able to use a grid of wires and pins so they are addressable.

<comment><USER5> Where can you buy suitable solenoids?

</comment></comment></comment><comment><USER6> It's sad how some great tech is killed just like that. Here I was, wearing my Pebble 2, being sad about how Pebble died, and then I read this. It is way more important for this kind of tech to live and improve.

<comment><USER7> Doesn't taking a picture of the whole page at once and then having it read to you after OCR dominate this in every way, from ease of input (from the page) to flexibility of output (to the human)?

<comment><USER8> I'm not blind, but that method probably doesn't let you skip around the page - including backwards - as easily.

It also sounds like the Optacon had some fancy capability to represent non- textual data like graphs and metadata like fonts:

> _The Optacon offers capabilities that no other device offers including the > ability to see a printed page or computer screen as it truly appears > including drawings, typefaces, and specialized text layouts._

</comment></comment></comment><comment><USER9> I've been using Optacons since approx 1982 where my school had one available. I read language reference and utility manuals at work. I even tackled Knuth vol 1 using an Optacon. I was even able to use it to read food packaging of different shapes and sizes (something which wasn't possible with OCR). I could even use the Optacon to read some diagrams. I was able to use them until about 2010 when my last one died. I would snap up Optacons from my cohorts as they abandoned them in favour of OCR solutions or phone apps.

<comment><USER5> What advantages does the optacon have over OCR solutions or phone apps? Why did your cohorts abandon them?

</comment></comment><comment><USER10> Wow. Blast from the past. We used it in our Psychology Dept. to find out if users could perceive 3D images through simulated 3D rotation of the 2D lines on the device. This was in 1984 and I was the student intern software developer. They put the project on hold at some point.

</comment><comment><USER11> > The Optacon offers capabilities that no other device offers

It was discontinued in 1996, how is it still doing something that no other device offers?

<comment><USER12> Devices don't magically stop working when the company stops making them.

<comment><AUTHOR> Devices back then didn't, at least.

<comment><USER2> The moving parts of a pre-2000 product were definitely more robust then these days. That applies to piezzo based refreshable braille displays as well. However, when using hardware that actually needs to move parts around, nothing keeps working forever. After 20+ years of use (you have to remember that these devices are the primary means of reading for a blind person, so they get quite a workout) almost everything will start to fail.

</comment></comment></comment></comment><comment><USER13> Was this the device that Whistler used in the movie Sneakers? I guess that was more of a keyboard or monitor though...

<comment><USER14> He used a braille terminal.

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

</comment></comment><comment><USER15> Kind of sad. It would be much easier and cheaper to build this with today's equipment and computing power.

<comment><USER2> I am not sure if that is really true. It might be cheaper to build, but it will probably not last as long as the 1980-product. We see this in refreshable braille displays too. The newish models tend to have about half the lifetime compared to pre-2000 models. Making things smaller and cheaper doesnt help if you are dealing with a shitload of moving parts. It is really sad to watch. While technology has clearly improved around us in the last 20 years, quality of refreshable braille display has gone down notably. I miss the times when I bought a $12k refreshable braille display with 80 cells and could be sure that it would last for at least 10 years. These days, you can be happy if you can still use it after 6 years.

<comment><USER16> Could you share info about some of the models you used so far ? As someone who lives with a blind person, I can see how quality of product is important for life quality. Equipment always seems expensive at first, but then you realize that piece of tech is used almost 24h a day and gives so much back...

<comment><USER2> I refuse to talk to non-blind people _about_ blind people. That is such a patronizing move. They can write me an email if they are interested to talk about different products. firstname.lastname@example.com

</comment></comment></comment></comment><comment><USER17> This story exemplifies why we need open source software and open hardware.

</comment><comment><USER18> A video from 1967 showing it: [https://youtu.be/z47Gv2cdFtA?t=1600](https://youtu.be/z47Gv2cdFtA?t=1600)

</comment><comment><USER19> "Bob Stearns – A blind computer programmer working at SRI. Bob used the Optacon in his work writing and de-bugging computer programs."

I want to know more about this guy</comment>


Here's a Good Reason to Be Wary of Overly Polite People - <AUTHOR> http://nymag.com/scienceofus/2015/08/good-reason-to-be-wary-of-overly-polite-people.html <comment><USER2> There's excessively polite people with a hidden agenda, and those without. I don't think the ratio is strong enough in favor of evil to warrant too much effort. If you think the evil density is higher, I suggest testing to find out, rather than just wondering. Borrow some money off them, or ask them to help you move, and see how it goes.

If they pass your test, you need only watch for the long con, and its much less common. Unless they change.

</comment><comment><USER3> Unless they are autistic and genuine without guile.</comment>