Fazlur Khan: The engineer who made it possible to live in the sky - <AUTHOR> http://en.wikipedia.org/wiki/Fazlur_Khan <comment><USER2> He's got a special place in my heart, as an engineer, a Bengali, and as someone who loves Chicago and its architecture. Its worth visiting the Sears Tower if you haven't. Its one of the great wonders of engineering and architecture. They have an exhibit to Khan on the tour.

There is a story about him. He was visiting his native Bangladesh, and someone asked him: "why don't you come back here?" He said: "I build skyscrapers, what am I going to do here?"

What's really great about the Sears Tower is how you can see the bundled tube structure in the exterior architecture: [http://www.steelguru.com/uploads/reports/fea1-03-10-2010.jpg](http://www.steelguru.com/uploads/reports/fea1-03-10-2010.jpg)

The Burj Kalifa also: [http://3.bp.blogspot.com/-TIxCUNbAei8/T8p_3a2AHoI/AAAAAAAAAB...](http://3.bp.blogspot.com/-TIxCUNbAei8/T8p_3a2AHoI/AAAAAAAAABI/cc4iY2O7GVE/s1600/Burj_Khalifa_4.jpg)

<comment><USER3> Turns out he did build one in Bangldesh.

I wasn't aware that he also did the Hancock building. While I was a student at NU, I would take the L down and walk along Chicago Avenue to my part-time job at the NU Medical School as the Hancock was being built. I still have some Kodachrome slides of it as it was going up.

<comment><USER2> There's a great article on the design of the Hancock tower, which goes into the reasons for the (now iconic) diagonal bracing: [http://khan.princeton.edu/khanHancock.html](http://khan.princeton.edu/khanHancock.html). During my time at NU, I lived right next to Onterie, which has architectural diagonal bracing as a nod to Kahn's work on the Hancock tower.

<comment><USER3> Nice.

At the time that the Hancock was going up, there were lots of Trib articles about the engineering aspects of the braces.

Chicago does have such a great architectural examples. Matasano has offices in the Monadnock building, at one time on the 18th floor of a 17 story building. Marvelous building.

</comment></comment></comment></comment><comment><USER4> Very interesting, although is there a reason that it's been posted now?

<comment><USER5> Because sometimes it's nice to see other people's success. It sure keeps me going.

<comment><USER4> I appreciate the sentiment, and no disrespect for the guy either, but it makes this site a little less like 'Hacker News' and more like the front page of Wikipedia.

<comment><USER6> Yeah I know what you mean. I sometimes start flagging the wikipedia articles when there are too many on the front page. It really does feel odd when there's too many, as if people are just desperate for karma (a la reddit).

I'm not saying that they shouldn't be on hackernews exactly... but I wish people would at least write up a blogpost or find a news article about a subject, rather than just posting wikipedia pages directly.</comment></comment></comment></comment>


South Florida Hack and Tell #3 (Show and Tell for Grownups) - <AUTHOR> http://sflhackandtell.eventbrite.com/

<comment><AUTHOR> This is a non-profit event that spun-off from Andrew Gwozdziewycz's Hack and Tell in NY. It's been going strong for three months and has already seen some really great presentations.

If you're in the area, I hope you'll stop by!

<comment><USER2> How many people have been at the last few?

<comment><AUTHOR> First one had ~40 (disclaimer: I advertised free food). Second one had 23 (with no food).</comment></comment></comment>


Clojure memory leak in production - <AUTHOR> https://techblog.roomkey.com/posts/memory-leak.html <comment><USER2> Thank you, an excellent explanation of how to use the JVM tooling! Also demonstrates why you shouldn't use certain functions, like clojure.core/memoize, in production.

<comment><USER3> The core.memoize[1] core library (not the clojure.core/memoize function) allows you to specify a core.cache eviction policy (e.g. LRU and others, which is fine for production use.

[1] [https://github.com/clojure/core.memoize](https://github.com/clojure/core.memoize)

<comment><USER2> Exactly - core.memoize (or core.cache) is for production vs clojure.core/memoize for prototyping.</comment></comment></comment>


Amazon Aurora Update – PostgreSQL Compatibility - <AUTHOR> https://aws.amazon.com/blogs/aws/amazon-aurora-update-postgresql-compatibility/ <comment><USER2> What are some downsides one should keep in mind when considering moving from RDS Postgres to RDS Aurora? What's the catch?

Is it a lot harder to get predictable performance out of this at scale?

Do you optimize the db the same way you would optimize a single Postgres instances, or do you need to learn a whole new set of rules for the Aurora query planner? Getting a well known single node DB to perform great at scale is already a fairly specialized skill, what does it mean to do the same for a proprietary black box multi-node cluster that only exists in the cloud?

Are there any success stories of people making the switch at scale that one can read more about?

<comment><USER3> (Ozgun from Citus Data. I compiled the following from Aurora talks and tutorials I've attended. Happy to edit it with more info.)

I don't think you need to worry about tuning things for the planner. Aurora Postgres and Postgres use the same planner, executor, and storage engine. The two differ in how write-ahead logs and consequently replication works.

[http://www.slideshare.net/AmazonWebServices/amazon-aurora- am...](http://www.slideshare.net/AmazonWebServices/amazon-aurora-amazons-new- relational-database-engine)

Slide 20 has a good technical comparison. TL;DR: RDS replicates data/logs to a standby instance and EBS. Aurora replicates logs to a highly replicated storage engine.

This slide also hints why Aurora MySQL highlights performance improvements, and Aurora Postgres doesn't. RDS MySQL replicates a lot more data and logs to the standby. Postgres has a better replication engine and therefore doesn't consume nearly as much resources. (red and yellow arrows in Slide 20)

On a personal note, I was curious about Aurora's architecture to understand how it compared to other solutions, such Citus. Aurora focuses on better replicating your logs/data and scaling storage. Citus scales out through sharding/distributing the underlying data and spreading the work across instances. I also love that Citus is open source. Then again, I'm biased. :)

<comment><USER2> Nice, thank you for the links and the writeups! What would you say are the downsides then of going from RDS PG to this? Sounds like there are basically none, but I'm still skeptical. Should I not be?

We've definitely heard of Citus many times as well, it will be interesting to see what competition in this space will look like soon.

<comment><USER4> At this point it's a lot of guess on what the downsides will be. On the pages for Aurora they mention they're working on support for extensions and various PLs, but it's unclear if they're supported in the beta at this time. It's also unclear if they had to fork off in some way, if they did it will most likely lag behind what core Postgres at each new release. Of course right now it's a lot of guesswork. It should be much more clear when it gets into GA on what the trade-offs are.

<comment><USER2> Got it, thanks for clarifying. Hopefully if anybody from AWS sees this they can perhaps do extra nudging on their end about making SLAs more transparent to end users.

</comment></comment></comment></comment></comment><comment><USER5> (Hopefully jeffbarr will read this)

How does one get access to try this out? The article mentions it's available in us-east-1 (N. Virginia) however I checked the RDS tab in us-east-1 and I don't see it listed. Only the MySQL version is available.

The "... you can sign up now for access!" link points to [https://pages.awscloud.com/amazon-aurora-with-postgresql- com...](https://pages.awscloud.com/amazon-aurora-with-postgresql- compatibility-preview.html) but it just redirects to [https://aws.amazon.com](https://aws.amazon.com).

<comment><USER6> Below is the correct link to sign up for the preview of the PostgreSQL compatible edition of Amazon Aurora; we are fixing the link in Jeff Barr's blog post now, and thanks for letting us know!

[https://pages.awscloud.com/amazon-aurora-with-postgresql- com...](https://pages.awscloud.com/amazon-aurora-with-postgresql- compatibility-preview-form.html)

<comment><USER5> Wonderful. Thanks!

</comment></comment></comment><comment><USER7> Well that sure is a killer feature. AWS is far ahead of Google Cloud for postgres users.

<comment><USER8> I wish Azure offered managed Postgres hosting.

<comment><USER9> I wish every cloud company had a managed Postgres offering. The potential pain of managing my own database is what keeps me locked in, and I'd be able to switch at a moments notice if that weren't the case.

</comment></comment></comment><comment><USER10> So this looks pretty amazing. As a heavy postgres user, is there any reason why I _shouldn 't_ be using this? Or actually it's strictly superior in all regards?

<comment><USER11> From the article: On the stored procedure side, we are planning to support Perl, pgSQL, Tcl, and JavaScript (via the V8 JavaScript engine). We are also planning to support all of the PostgreSQL features and extensions that are supported in Amazon RDS for PostgreSQL.

Since they listed "planning to" I assume these aren't available yet, so if you use any extensions or stored functions you'll probably need to hold back until these are available.

<comment><USER12> So weird that you're not supporting python for stored procedures.

<comment><USER13> RDS doesn't support untrusted languages which includes Python [1].

1\. [https://www.postgresql.org/docs/9.5/static/plpython.html](https://www.postgresql.org/docs/9.5/static/plpython.html)

<comment><USER11> This is actually a TIL for me, I've always just use pl/pgsql for sprocs as I've never had a need for anything beyond what it provides - I didn't realize the 'u' in python was for 'untrusted'.

</comment></comment></comment></comment></comment><comment><USER14> I'm curious how much of the underlying pgsql storage engine was rewritten since Aurora/MySQL uses a completely different engine than the default InnoDB.

<comment><USER15> I doubt much. Aurora looks more like those engines running on an EFS disk than a major rewrite of the storage engines themselves.

They need to disable some features to make concurrent readers on the same network disk work. I'm sure it's harder than I'm making it sound, but I don't think it's a new storage engine beyond the disk level.

<comment><USER14> I suspect you're right. I wonder if that's part of the reason why they claim a lower performance improvement of 2x over "standard" pgsql installations rather than the 5x improvement of Aurora/MySQL over standard MySQL installations.

If so, though, hopefully there's a silver lining of faster incorporation of new pgsql features into the Aurora/PG service.

</comment></comment></comment><comment><USER16> And _this_ is how software becomes closed-source in the cloud era.

<comment><USER17> And why SaaS companies hate the AGPL.

</comment></comment><comment><USER18> Netflix must be biting their fingers :)

[https://news.ycombinator.com/item?id=11950811](https://news.ycombinator.com/item?id=11950811)

</comment><comment><USER19> Sorry to see for Enterprise DB and Citus. Tough biz to be in.

<comment><USER20> Don't worry ;)

Citus users typically have a working set of a few hundred GB or more and run into memory and CPU limitations on a single machine on both the write and the read side.

Provided your data has a natural sharding dimension (e.g. tenant ID in a multi-tenant application), Citus can distribute tables across many servers to scale out memory, CPU and storage. It can also parallelise queries, index creation, aggregations, and deletion across the cluster, and it can horizontally scale out write throughput. This gives you the necessary tools to deal with very large data volumes.

e.g. 500k writes/sec [https://www.citusdata.com/blog/2016/09/22/announcing- citus-m...](https://www.citusdata.com/blog/2016/09/22/announcing-citus-mx/)

<comment><USER21> Any chance that multi-master will be open sourced ?

<comment><USER4> Many of the underlying bits that make Citus MX possible will in time be rolled into the open source version. At the same time some of the ways we make it possible, such as by managing the streaming replication and high availability may take longer to productize and it's unclear in what form they'll evolve. For now Citus MX is available on Citus Cloud–due to the way we're able to take care of all of those things for you.

</comment></comment></comment></comment><comment><USER22> Does this include the full set of json/jsonb features and benefits of GIN indexes?

<comment><USER23> yes.

</comment></comment><comment><USER5> Infinitely scalable[1] Postgres? Yes please!

[1]: _For all practical purposes for mortals._

<comment><USER24> DynamoDB and S3 are infinitely scalable.

Aurora is scalable to 64TB. For 10 million users, that's 6MB per user.

</comment></comment><comment><USER25> if anyone form google cloud reading this, are there any plans for adding postgres support on GC SQL?

<comment><USER26> they already have an alpha in the works... try emailing support or posting in the discussion forums

</comment></comment><comment> 2-m3m3n70 What's the advantage to using this over RDS?

<comment><USER3> (From AWS Aurora's website)

We're now previewing the addition of PostgreSQL compatibility to Amazon Aurora. This edition has the benefits customers have come to expect from Aurora, including high durability, high availability, and the ability to quickly deploy low latency read replicas while supporting the full SQL dialect and functionality of PostgreSQL 9.6.

<comment><USER27> Storage cost, performance and auto-scaling are also big advantages.

<comment><USER28> Auto scaling in RDS? That'd require a multi-master cluster. As far as I know, that's impossible on RDS, Aurora or not.

<comment><USER27> I should have been more clear. I was referring to storage auto-scaling. Aurora gives you access to up to 64TB of disk billed in 10GB increments. You don't need to preallocate and manage the scaling of your disk as you do with RDS.

</comment></comment></comment></comment></comment><comment><USER29> Very cool, can anyone tell if it supports PostGIS?

<comment><AUTHOR> From the blog post, they say that's a planned feature.

"We are also planning to support all of the PostgreSQL features and extensions that are supported in Amazon RDS for PostgreSQL[1]."

[1] [https://aws.amazon.com/rds/postgresql/](https://aws.amazon.com/rds/postgresql/)

</comment></comment><comment><USER30> Well...that's game changing.

</comment><comment><USER31> I'd like to do some cost projections. When will this (along with the db.t2.medium instances) be added to the simple monthly calculator?

</comment><comment><USER32> What sort of transactional support is there? Are Serializable transactions supported?

<comment><USER33> Aurora will support the same isolation levels as community PostgreSQL: up to Serializable on the writer, up to Repeatable Read on the replicas.

</comment></comment><comment><USER34> From the article I am not 100% sure whether support for AWS Lambda calls from stored procedures is planned, does anyone else also interpret that it is?

</comment><comment><USER35> Had really hoped they would announce full mysql 5.7 support.

<comment><USER14> For Aurora, you mean? They support 5.7 for RDS, but a consequence of forking MySQL for Aurora is that it's unlikely that new MySQL features will quickly be incorporated into Aurora/MySQL.

<comment><USER35> For Aurora, yes. I understand the tradeoff and happy to stay on Aurora. Found this forum post stating that 5.7 compat will come next year

</comment></comment></comment><comment><USER36> How does this compare to an offering similar to Postgres on Compose.com?

</comment><comment><USER25> is Aurora different from [https://aws.amazon.com/rds/postgresql/](https://aws.amazon.com/rds/postgresql/) ?

<comment><USER30> No need for multi AZ. Faster, more cost effective. Downtime of less than a minute in the event of a crash. Geographically distributed storage that autoscales up to 64TB.

<comment><USER37> This isn't true, you still need a read replica if you want it to failover under a minute. Otherwise it'll try to create another DB.

<comment><USER30> From the FAQ

"Q: How does Aurora improve recovery time after a database crash?

Unlike other databases, after a database crash Amazon Aurora does not need to replay the redo log from the last database checkpoint (typically 5 minutes) and confirm that all changes have been applied, before making the database available for operations. _This reduces database restart times to less than 60 seconds in most cases_. Amazon Aurora moves the buffer cache out of the database process and makes it available immediately at restart time. This prevents you from having to throttle access until the cache is repopulated to avoid brownouts."

[https://aws.amazon.com/rds/aurora/faqs/](https://aws.amazon.com/rds/aurora/faqs/)

<comment><USER13> Also from the FAQ (you are both right)

</comment></comment></comment></comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>===

Q: What happens during failover and how long does it take?

Failover is automatically handled by Amazon Aurora so that your applications can resume database operations as quickly as possible without manual administrative intervention.

If you have an Amazon Aurora Replica, in the same or a different Availability Zone, when failing over, Amazon Aurora flips the canonical name record (CNAME) for your DB Instance to point at the healthy replica, which is in turn is promoted to become the new primary. Start-to-finish, failover typically completes within a minute.

If you do not have an Amazon Aurora Replica (i.e. single instance), Aurora will first attempt to create a new DB Instance in the same Availability Zone as the original instance. If unable to do so, Aurora will attempt to create a new DB Instance in a different Availability Zone. From start to finish, failover typically completes in under 15 minutes.

Your application should retry database connections in the event of connection loss.

</comment><comment><USER38> No more VACUUM then?

<comment><USER33> Vacuum is still there. Though in some cases it is significantly faster.

</comment></comment><comment><USER39> URL of the announcement: [https://aws.amazon.com/blogs/aws/amazon-aurora- update-postgr...](https://aws.amazon.com/blogs/aws/amazon-aurora-update- postgresql-compatibility/)

<comment><USER40> Thank you, we've updated the link from [https://aws.amazon.com/rds/aurora](https://aws.amazon.com/rds/aurora).</comment></comment>


My New Android APP 21000 Offline Quote - <AUTHOR> https://market.android.com/details?id=com.mosh.quotes

<comment><AUTHOR> Did you like it?</comment>


Is Australia's slow Internet speed because of island status? - <AUTHOR> http://economics.com.au/?p=6073

<comment><USER2> Hmm from my Cogent colo in New Jersey to my Primus Colo in Adelaide, I consistently get 4-5 mbits both ways and those are by no means high dollar, special privilege connections.

Its not 100, but its faster than the 2 the author claims.</comment>


Live Sport – Virtual Crowd Sounds - <AUTHOR> https://www.wired.co.uk/article/football-crowd-noise <comment><AUTHOR> I watched the first EPL game that returned to play (Man City vs Arsenal) with the virtual crowd sounds and I've got mixed feelings.

On one hand I love that games and live stream broadcasts are working together to try simple innovations like this.

But on the other hand, the way it worked in that particular game I watched was terrible.

Crowds are such an important aspect to live sport and can sway decisions or increase momentum or provide "fear" to the opposition. I wonder if there is a way to project "live streamers audio" into the stadiums in real time too

"Last week, Sky Sports announced that when the Premier League returns on June 17, viewers will be able to watch the remaining games with the addition of team-specific crowd noises and chants made in collaboration with EA Sports' FIFA video game. "</comment>


What is the theoretical maximum number of open TCP connections? (2010) - <AUTHOR> http://stackoverflow.com/q/2332741/1257977

<comment><USER2> "The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution":

[http://highscalability.com/blog/2013/5/13/the-secret- to-10-m...](http://highscalability.com/blog/2013/5/13/the-secret- to-10-million-concurrent-connections-the-kernel-i.html)

[https://news.ycombinator.com/item?id=5711232](https://news.ycombinator.com/item?id=5711232)

<comment><USER3> > [http://highscalability.com/blog/2013/5/13/the-secret- > to-10-m...](http://highscalability.com/blog/2013/5/13/the-secret- > to-10-million-concurrent-connections-the-kernel-i.html)

Really interesting read. Some of the notions espoused in this link really seem to make a case for microkernels.

</comment></comment><comment><USER4> This guy has some nice posts of scaling a single node.js server up to 1m connections:

[http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent- co...](http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/)

[http://blog.caustik.com/2012/04/10/node- js-w250k-concurrent-...](http://blog.caustik.com/2012/04/10/node- js-w250k-concurrent-connections/)

[http://blog.caustik.com/2012/04/08/scaling-node-js- to-100k-c...](http://blog.caustik.com/2012/04/08/scaling-node-js- to-100k-concurrent-connections/)

[http://blog.caustik.com/2012/04/06/node-js-scalability- testi...](http://blog.caustik.com/2012/04/06/node-js-scalability-testing-with- ec2/)

</comment><comment><USER5> That's odd - a question I asked in 2010 has now made it to the front page.

<comment><USER6> But you already got the "Famous Question" badge for it a year ago: [http://stackoverflow.com/help/badges/28/famous- question?user...](http://stackoverflow.com/help/badges/28/famous- question?userid=129805)

</comment></comment><comment><USER7> On the ipv4 Internet? 2^96. (32 bit src and dest addrs, 16 bit src and dest ports)

<comment><USER8> Can't you have multiple connections to the same host?

<comment> a-priori Yes, but only to separate ports. A connection in TCP is uniquely identified by a tuple of {source IP, source port, destination IP, destination port}. Usually the source port is automatically assigned by the source system, and it picks an unused one.

</comment></comment></comment><comment><USER9> [http://www.kegel.com/c10k.html](http://www.kegel.com/c10k.html)

</comment><comment><USER10> Also relevant: "1 million is so 2011" from WhatsApp's blog

[http://blog.whatsapp.com/index.php/2012/01/1-million-is- so-2...](http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/)

</comment><comment><USER11> Just be sure to turn off iptables because that doesn't support more than ~64K connections.

<comment><USER5> Could you post a link to that info? I hadn't come across that limitation before.

<comment><USER11> I'm looking for a link, but in the meantime, I was working on a product where we had to map every connection between 2 routers to a new connection between 2 boxes (imagine having 2 boxes MITMing 2 routers and remapping every TCP session internally so you could change the traffic transparently to the recipient).

We needed to prove we could handle 100k TCP sessions and it would fail at ~64k sessions when iptables was running on either box (even with an "allow all" rule). Otherwise our hardware would fall over around the default File Descriptor limit.

<comment><USER12> You should have a look to see how much memory the connection tracking table is actually taking up. IPTables stores a lot of its information in kernel space, but modifications are copied to user space, updated, then written back. As an example, for large project X with >100,000 users connecting through a linux- based gateway device, using a single firewall rule to allow access for each device grew larger than RAM available to the kernel. You can also tune the size of the connection tracking table (and pretty much everything else related), but 64k sessions was never a breaking point for us.</comment></comment></comment></comment>


Tips for Learning C++ - <AUTHOR>

I currently use a lot of very high-level languages (javascript, html/css, php, etc), but want to learn something a little lower-level like C++ for fun.  A Google search has an overwhelming amount of advice, maybe someone with a bit of experience could chime in and offer some tips ie compilers, great tutorials and articles, libraries, etc? <comment><USER2> C++ is almost universally reviled. But I am grateful to know it. Here's why:

C++ was my first programming language, I picked it up quickly and had fun and still do. I still have fun in C++ despite the fact that it is most certainly a horrifically complicated language, juggling chainsaws and all that.

The only good reason I can think of to learn C++ instead of C or D, is because it will make every other language you are ever exposed to look easy.

That's why I am grateful it was my first language. Who knows, I might not have ever learned it, if I was fluent in one or more other programming languages already.

Also C++ jobs tend to pay well, but that's the wrong reason to go into chainsaw juggling.

</comment><comment><USER3> cplusplus.com to be honest that has most of the info you need to start

</comment><comment><USER4> Instead of C++, I would advise learning C. If you are still interested in learning C++, I would still advise learning C first as C++ is (or at least was originally based on) C. K&R is probably the best way to start on C.

<comment><USER5> While I heartily agree that K&R is the best way to learn C, I'd strongly recommend _against_ learning C en route to C++. Most "best practices" in C are usually frowned upon (or worse) in C++. For example, using c-style arrays (instead of Vectors), using pointers excessively (instead of references), malloc/free (instead of new/delete), lots of global functions/variables (instead of classes, etc).

As far as picking between the two, it depends on your goals. If you really just want to learn about low-level programming, then C is probably the best option. On the other hand, if you want to be able to write low-level code for speed (i.e., to then call it from a high-level language), you might be better off with C++ (which is much more flexible while maintaining most of C's speed). Keep in mind, however, that using C++ effectively can get significantly more complicated than C (templates, classes, etc.), and so it is not usually a good idea to learn it "for learning's sake."

<comment><USER6> I know probably 99% of the C++ standard and used C++ in anger for years, and I do not recommend learning it unless you _need_ to do so. Getting into the (console & PC) game industry is one of the only reasons I can think of. Even so, most veteran game programmers use only a small subset of C++, and most of the code is effectively C.

C++ is a terrible hack, and if you're very familiar with other languages you'll be shocked by what is considered beautiful or elegant in the C++ world. (e.g. Boost)

If you want to just low-level optimise parts of a program written in a high- level language, C++ is actually a pretty poor choice. C is actually going to give you fewer headaches with language interop, as it has a standardised ABI. There are tools to do, say, C++ to Java interop, but I can't recommend even _trying_ to do that kind of thing. In comparison, JNI (implementing Java class functions in C) is a walk in the park.

Yes, you can do anything you can do with C in C++. Yes, C practices (char* strings, etc.) are considered bad style by the C++ world. I'm going to just come out and say it: in my opinion, the C++ world has no idea what good style is.

As for learning C, it's a very good idea. You'll learn a whole load of things that will help you even when you're not using C itself. Hopefully, you won't need to use C itself all that much in practice, but it's a damn handy language to know, even if all you use it for is to write glue code between some libraries and your favourite language.</comment></comment></comment>


Why it takes so long to get data back from New Horizons - <AUTHOR> http://www.planetary.org/blogs/emily-lakdawalla/2015/01300800-talking-to-pluto-is-hard.html

<comment><USER2> I dislike that the article doesn't even clearly answer its own question. The probe only records 8GB of data to one of two 8GB memory bank (one primary, one backup). Then the data is compressed and sent at either 2 kbit/s or 4 kbit/s (if they manage to get the higher speed working). By this math it should take either 12 or 6 months. Actually even less since the data is compressed. So why will it take 16 months?? Gizmodo needs better writers.

<comment><USER3> The downlink is actually 1kbps, with 2kbps optional, by using both amplifiers with opposite circular polarizations. But they can't use that trick all the time. A nice article with more technical details is at [http://www.planetary.org/blogs/emily- lakdawalla/2015/0130080...](http://www.planetary.org/blogs/emily- lakdawalla/2015/01300800-talking-to-pluto-is-hard.html)

<comment><USER4> Ok, since the consensus in the thread is that the submitted article ([http://gizmodo.com/why-itll-take-new-horizons-16-months- to-s...](http://gizmodo.com/why-itll-take-new-horizons-16-months-to-send-us- this-we-1717769317)) wasn't very good, let's try switching to that one.

</comment></comment></comment><comment><USER5> A measly 25-30 years ago the first modems were sending data at 1Kbps, today we can send data through 7.5 billion kilometres of space at the same speed, i think that is pretty impressive.

<comment><USER3> The data rate to Mars isn't shabby, at about 230kbps, roughly four times the speed of a fast dial-up connection. I used to point that out when the only Internet at my folks' house was dial up. Eventually, my iPhone cell connection beat their dial-up connection and I stopped complaining.

<comment><USER5> Cool, do you have a source for the 230Kbps ? i love to read about stuff like that.

<comment><USER6> Data rate to the Mars Reconnaissance Orbiter can be up to 6Mbit/sec:

[https://en.wikipedia.org/wiki/Mars_Reconnaissance_Orbiter#Te...](https://en.wikipedia.org/wiki/Mars_Reconnaissance_Orbiter#Telecommunications_system)

<comment><USER3> Whoa, I didn't know that. I quoted the 230kbit number from memory, when I researched it several years ago, when my parents still had dial up. I'm not surprise that MRO is faster.

</comment></comment></comment></comment></comment><comment><USER7> "A 3-Billion-Mile Snapchat"? Is this what journalism has been reduced to now?

</comment><comment><USER8> The real reason, which hopefully gives some engineering insight, is why not? It's a flyby mission whose primary data collection occupied only a couple of days. Like any spacecraft design they had to choose between high bandwidth (more power == larger RTG == more weight) or large storage (more memory modules == more weight). There is some tradeoff between the two that yields the optimal science return, and one would expect it would involve months of transmission: storing things locally to transmit low power requires way more resources than a high gain antenna used for 1 week only.

<comment><USER9> "and one would expect it would involve months of transmission: storing things locally to transmit low power requires way more resources than a high gain antenna used for 1 week only."

You're contradicting yourself there.

Memory today is cheap (even if we're talking about the radiation-hardened stuff, for "space mission" levels of cheap)

Getting data for a long time takes a lot of resources (basically usage of Deep Space Network infrastructure)

So, yeah, if they could they would download all the data more quickly, but you're right that the power budget wouldn't allow it (not sure how powerful it would have to be to get the data at, let's say 32kbps)

<comment><USER10> > Memory today is cheap (even if we're talking about the radiation-hardened > stuff, for "space mission" levels of cheap)

New Horizons was launched in January 2006, but I suspect you know this and you're just being dramatic to make a point. :)

The problem with "cheap" as a metric whose context is _solely_ monetary is that it's ignoring maaku's fundamental argument: More storage is more weight; more transmitter capability is more weight. So it's not just the cost of the storage you're looking at but also the cost to get that into space. Launches are _not_ cheap, and you have to account for every bit of spacecraft weight which leads to design tradeoffs.

Sometimes you can have one or the other--not both.

Interestingly, the New Horizons program has its roots dating back to the 1990s, at least according to Wikipedia, with cancellations due to projected costs exceeding levels NASA was willing to fund. But this is par for the course when dealing with long-term, long-distance missions. Everyone has an argument about what to put on board, but there's neither budget nor space to accommodate them all (sadly).

<comment><USER9> Solid State Storage, even in 2006, wasn't that heavy (or costly - of course, for 'space mission' levels of cheap)

So, yeah, I'm not saying it is as small and light as the SD card on my phone that cost a dollar value having 2 digits and has double that space, but it's probably 'as good as it gets'

If we're talking about a mechanical data recorder I would agree

</comment></comment></comment></comment><comment><USER11> It is actually VERY impressive if you account for distance, background noise etc.. It is transferring several gigabytes of data across solar system.

<comment><USER12> And the fact that the transmitter uses less power than a light bulb.

</comment></comment><comment><USER13> Would someone care to comment on this hypothetical- If New Horizons was launch today instead of nine years ago, what equipment improvements would we likely to have the since that time?

<comment><USER14> I don't think we'd see any qualitative differences at a high level. Just everything would be slightly better - higher resolution cameras and so on. Compare to Juno which was launched four years later.

</comment></comment><comment><USER15> [http://www.uhf-satcom.com/amateurdsn/Paper-969.pdf](http://www.uhf- satcom.com/amateurdsn/Paper-969.pdf) < If you'd actually like to know more about the communications sub-systems of this spacecraft.

</comment><comment><USER16> Lasers are the future. [http://www.space.com/23350-laser-space-communications- incred...](http://www.space.com/23350-laser-space-communications-incredible- technology.html)

Easier for shorter distances (I think Facebook is researching this for satellite networks?) however it becomes more challenging the deeper we go into space because the beam is narrow - but the bandwidth is fantastic.

<comment><USER17> At the distance from Pluto to Earth, Earth's diameter amounts to about 1.5 * 10^-4 degrees in angle. Precisely pointing a laser beam at a given target, even a large one, at that distance seems almost impossible. Especially since the space probe probably won't stay perfectly still but will always slightly tumble.

<comment><USER18> As long as it can get feedback ("a little to the left") somehow, it seems doable to this software expert.

<comment><USER19> Its a 5 hour time lag from Earth to Pluto - it's going to be one hell of a bad time doing feedback control on that link.

</comment></comment></comment></comment><comment><USER20> Does anyone know if the 2kbps/4kbps numbers are the transfer rate of actual data, or the link speed?

I would presume that there are checksums or other error detection/correction schemes involved - does anyone know if that's a good assumption? If so what schemes are used and how much overhead they have?

<comment><USER21> New Horizons is using a 1/6 rate Turbo code for forward error correction, meaning 5/6 of the data returned is redundant. Previous discussion: [https://news.ycombinator.com/item?id=9890476](https://news.ycombinator.com/item?id=9890476)

<comment><USER20> Thanks!

</comment></comment></comment><comment><USER22> Is there any error correction in the data stream? I mean, if we loose e.g. 1 minute of data, will it just be sent after the full data had been sent, or how do we ensure that we grt valid data over such a huge distance?

<comment><USER23> All long range transmissions use forward error correcting codes which allow error detection and data recovery without retransmission (to a certain degree). See [1] (paragraph 2.5 on page 10) for a bit more on the kinds of FECs used.

[1] [http://deepspace.jpl.nasa.gov/dsndocs/810-005/208/208B.pdf](http://deepspace.jpl.nasa.gov/dsndocs/810-005/208/208B.pdf)

<comment><USER22> Thanks! That's exciting reading.

</comment></comment></comment><comment><AUTHOR> So looks like the reason is 4 kbps download link due to various reasons.

</comment><comment><USER24> what speed is the spacecraft going? is the doppler effect an issue?

<comment><USER3> The Doppler shift is tracked, as it tells them how fast (in radial terms) the spacecraft is going. Some years back, I watched the live coverage on NASA TV of the Cassini spacecraft going into orbit around Saturn. When they went into orbit, they didn't announce it with some Hollywood dialog like "Saturn orbit confirmed!" No, what they said was, "The Doppler curve has flattened!" and the room went wild! It was wonderful.

<comment> david-given ...they actually forgot to account for Doppler shift when deploying the Huygens probe to Titan: as planned, the 5.5km/s velocity change as Huygens reentered Titan would have caused Cassini's receiver to lose lock on the signal (due to a timing change, rather than a frequency shift, IIRC). As Huygens had no storage and ran on batteries this would cause a total loss of mission.

The problem was discovered after launch, and corrected for --- not by reprogramming the receiver, but by changing Cassini's flight profile to reduce the Doppler shift: [http://www.thespacereview.com/article/306/1](http://www.thespacereview.com/article/306/1)</comment></comment></comment>


Ask HN: Examples of meta programming or AST-hacking in Python? - <AUTHOR> I've found a few promising examples of AST-hacking within Python, but I'd like to know if anyone has some more.
Here's what I've found:
http://blaag.haard.se/Using-the-AST-to-hack-constants-into-Python/
http://hackflow.com/blog/2015/03/29/metaprogramming-beyond-decency/
I'd also be interested in just seeing people implementing domain specific languages in Python, using Pyparsing or other techniques. <comment><USER2> I wrote a Python module called PyPatt that implements Pythonic Pattern Matching as you'd find in functional languages. There's both a function-based and macro-based version. The macro version is deprecated but was used for a while.

Docs: [http://www.grantjenks.com/docs/pypatt-python-pattern- matchin...](http://www.grantjenks.com/docs/pypatt-python-pattern- matching/macro.html) Source: [https://github.com/grantjenks/pypatt_python_pattern_matching...](https://github.com/grantjenks/pypatt_python_pattern_matching/blob/master/pypatt/macro.py)

</comment><comment><USER3> Before the new AST module was added, I wrote [http://dalkescientific.com/Python/python4ply- tutorial.html](http://dalkescientific.com/Python/python4ply-tutorial.html) , [http://www.dalkescientific.com/writings/diary/archive/2006/0...](http://www.dalkescientific.com/writings/diary/archive/2006/08/30/gardensnake_language.html), and [http://www.dalkescientific.com/writings/diary/archive/2010/0...](http://www.dalkescientific.com/writings/diary/archive/2010/02/22/instrumenting_the_ast.html) . Those seem like something you're looking for.

</comment><comment><USER4> Hy is a Lisp that compiles to Python AST and then to Python bytecode:

[https://github.com/hylang/hy/blob/master/docs/language/inter...](https://github.com/hylang/hy/blob/master/docs/language/internals.rst)</comment>


I've Consed Every Pair - <AUTHOR> https://medium.com/@peternorvig/ive-consed-every-pair-54ef5d9d93b6 <comment><USER3> Peter tech-reviewed the second edition of my Java AI book and made the comment that Java was half as good as Common Lisp for AI and that was probably good enough (we had both written Common Lisp books). He then went to Google and I had lunch with him; I was surprised that he was using Python.

I like his poem in the article!

A little off topic, but I retired (that is a bit of a joke) and at the age of 69, this year I decided that for maximum programming enjoyment I would only use Lisp languages (linking in Python and TensorFlow on occasion). I am approaching 40 years using Common Lisp and using the language is so much fun. I bought a license for LispWorks and using it for developing a semantic web app.

<comment><USER4> If I may ask, what references would you recommend to someone interested in something like Lisp, but who has never touched a functional language before?

<comment><USER5> Not OP, but Lisp isn't really a functional language — it's a usual language that also has some functional ideas inside. Mutation is common, don't think Lisp will be a language like Haskell.

For resources, I would recommend Practical Common Lisp[0] and PAIP[1].

For some modern development practices, the Common Lisp Cookbook[2] is great.

[0]: [http://www.gigamonkeys.com/book/](http://www.gigamonkeys.com/book/)

[1]: [https://github.com/norvig/paip-lisp](https://github.com/norvig/paip- lisp)

[2]: [http://lispcookbook.github.io/cl- cookbook/](http://lispcookbook.github.io/cl-cookbook/)

<comment><USER6> _> Lisp isn't really a functional language — it's a usual language that also has some functional ideas inside._

The idea that "functional language" means "purity" is something that was retconned onto functional programming in the 90s decades after Lisp had defined functional programming to mean programming in terms of expressions that produce values.

I like the ML/Miranda/Haskell lineage of languages a lot, but it _really_ bugs me when people in that camp lay claim to some notion of being a "better" functional language than the older Lisp family. (Lispers, while smug about many other things, are generally less smug about how "pure" their languages' approach to functional programming is.)

This is like arguing that Lagavulin isn't "really" whiskey because real whiskeys are made in the US from corn mash.

<comment><AUTHOR> Lisp is "Functiony"! ;)

But it took JavaScript to invent the concept of "Truthy".

[https://www.sitepoint.com/javascript-truthy- falsy/](https://www.sitepoint.com/javascript-truthy-falsy/)

<comment><USER7> Perl 5 has truthy values, and it came out a year (1994) before JS (1995). The idea probably appeared in Perl 1 (1987), and probably was borrowed from shell scripting, etc. It wouldn't surprise me if "Truthy" predated unix.

</comment></comment></comment></comment></comment></comment><comment><USER8> In the genre of Lisp songs, I love "God wrote in Lisp", by Julia Ecklar. Touted as a parody, but it actually has beautiful lyrics.

[https://www.gnu.org/fun/jokes/eternal- flame.html](https://www.gnu.org/fun/jokes/eternal-flame.html)

<comment><USER9> >I love "God wrote in Lisp", by Julia Ecklar.

Would bet to be HolyC or "I might be wrong"

<comment><USER10> [https://xkcd.com/224/](https://xkcd.com/224/)

</comment></comment></comment><comment><USER11> Now, obviously, someone has to run this through Jukebox?

[https://openai.com/blog/jukebox/](https://openai.com/blog/jukebox/)

[https://news.ycombinator.com/item?id=23032243](https://news.ycombinator.com/item?id=23032243)

</comment><comment><USER12> Can someone explain what this means? What is this "consed" he is talking about? I'm a c++ programmer, "consed every pair" means nothing to me.

<comment><USER13> Cons cells are the traditional Lisp data structure making up the nodes of a linked list. It comes from the cons function which is short for "construct".

Ironically, Clojure doesn't use cons cells, although it does have a cons function.

<comment><USER14> Additionally, "to cons" more broadly means "to allocate memory".

<comment><AUTHOR> And remember, that's "CONS" not "CON"!

Don't confuse CONS ARTISTS:

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

With CON ARTISTS:

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

<comment><USER15> "He is the cons man of the operation."

</comment></comment></comment></comment></comment><comment><USER16> Peter Norvig is the most inspiring genius in my coding world. I met(virtually) him via AI course in Udacity and since that time I enjoy all reading/watching from him.

His book AI programming(Lisp version) is a gem that I enjoy reading. I've finish a book a few times already - but every time I read I find something new that I missed previous time.

</comment><comment><USER17> Probably familiar to some of you, but a song you can actually listen to along the same vein, showed to me by Sussman: [https://www.bing.com/videos/search?q=god+wrote+lisp&view=det...](https://www.bing.com/videos/search?q=god+wrote+lisp&view=detail&mid=88D1554531D6486AF6AA88D1554531D6486AF6AA&FORM=VIRE&PC=APPL)

<comment><AUTHOR> Maybe he's not as as mellifluous as that, but here's a recording Mitch Bradley singing the Open Firmware theme song! But at least he's more mellifluous than Richard Stallman singing the Free Software song.

[https://news.ycombinator.com/item?id=9844026](https://news.ycombinator.com/item?id=9844026)

That same Open Firmware Forth system [1], which was developed by Mitch Bradley [2], was not only in the PowerPC Mac bios, but it was originally used for the SparcStation boot roms, and eventually in the OLPC, and it was even an IEEE Standard 1275-1994!

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

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

In fact: the Open Firmware boot loader and plug-in card firmware interface technology, commonly used by both Sun and Apple, is the only firmware standard in existence to have its own theme song [3] !!!

[3] [https://web.archive.org/web/20070204145613/http://playground...](https://web.archive.org/web/20070204145613/http://playground.sun.com/pub/1275/misc/ofwsong.au)

        : OpenFirmwareSong ( -  )
            \ By Mitch Bradley.
            \ Sung to the tune of "The Flintstones".
            𝄞
            ." Firmware" cr
            ." Open Firmware" cr
            ." It's the appropriate technology," cr
            ." Features" cr
            ." FCode booting" cr
            ." Hierarchical DevInfo tree." cr
            ." Hack Forth" cr
            ." Using Emacs on the keys," cr
            ." Save in" cr
            ." NVRAM if you please." cr
            𝄒 cr
            ." With your" cr
            ." Open Firmware" cr
            ." You can fix the bugs in no time" cr
            ." Bring the kernel up in no time" cr
            ." We'll have an FCode time!" cr
            𝄒 cr
            \ Thank you and good night!
            reboot
        ;

</comment></comment><comment><AUTHOR> I tried writing some of my own verses for this song, but I couldn't think of anything that rhymed with RPLACA and CDADAADR.

Speaking of consing every pair, here's a previous discussion about "The Origin of CAR and CDR in Lisp (2005) (iwriteiam.nl)":

[https://news.ycombinator.com/item?id=16008239](https://news.ycombinator.com/item?id=16008239)

[http://www.iwriteiam.nl/HaCAR_CDR.html](http://www.iwriteiam.nl/HaCAR_CDR.html)

<comment><USER18> Funny you bring up rhymes; my brain keeps matching "I've Consed Every Pair, Man" with "Bicycle Repairman".

[https://www.dailymotion.com/video/x2howud](https://www.dailymotion.com/video/x2howud)

<comment><AUTHOR> Straight up admission of HN's rabid pro-Python bias at the end there.

</comment></comment></comment><comment><USER19> Arc is underrated as an information management tool. There's something to be said for having a web framework that works out of the box. Rails is probably the only other framework that makes it as easy to "just make some forms that pass data around and run some code on that data." But not quite -- I haven't seen arc's closure-storing technique used in any other web framework.

The main issue that arc solves is that it gives you a full pipeline for managing "objects with properties" via the web. It's so flexible. I wrote a thread on how we're using it in production to manage our TPUs: [https://twitter.com/theshawwn/status/1247570883306119170](https://twitter.com/theshawwn/status/1247570883306119170)

<comment><USER20> You haven't been around long enough, at least under the same name, to remember when there was an implicit time limit on the comment reply page, inflicted by those stored closures silently timing out. Having long comments so often eaten that way was actually the specific thing that annoyed me into first installing It's All Text.

It's an interesting approach, as attempts to force statefulness on a stateless-by-design protocol go, but I don't know that I like how it scales.

<comment><USER19> My account was reset. I've been around since day two. :)

You're right, it has some downfalls. But a lot of the time it simply doesn't matter. All the links at [https://www.tensorfork.com/tpus](https://www.tensorfork.com/tpus) are dynamic, and the speed you gain by being able to whip up a feature in 10 minutes is worth the pain of an occasional dead link.

On the other hand, I did some work for "deduplicating fnids": [http://arclanguage.com/item?id=20996](http://arclanguage.com/item?id=20996) which the site is using, so the links possibly last much longer than the early-HN links.

(Basically, we calculate the fnid key based on the lexical environment, rather than using a random ID each time the page is loaded. So each link gets a unique ID based on the code structure rather than a random ID. Meaning, instead of millions of random links to store, you end up with a few tens of thousands.)

<comment><AUTHOR> Are fnids anything like Fnords?

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

Or are they more like Vermicious Knids?

[https://roalddahl.fandom.com/wiki/Vermicious_Knids](https://roalddahl.fandom.com/wiki/Vermicious_Knids)

<comment><USER19> It's short for function ID. If you want to route requests to specific closures, you have to have some sort of ID that you can send down to the user. Arc stores closures in a hash table keyed by random ID, but we use lexical structure plus lexical values (like username) to make the key deterministic. It greatly cut down on the number of closures that needed to be stored.

Basically, if you have a closure that does a certain action – e.g. editing a comment – Arc generates new a closure every page refresh. That was the root reason for the "dead link problem" during the early days of HN. I reworked it to make the closure IDs deterministic.

If you walk the source code from the point of the closure up to the root, and then you stick all the local variables in a list and use that as a key, then hash that, along with the _actual source code_ , you end up with something that (a) has a very low probability of collision, and (b) is deterministic each time the page refreshes, unless the variables' values change. (E.g. if you store the current time in a local variable, the value changes, so the fnid will change as well, since that value is captured by the closure and therefore the closure has to do something different by definition.)

<comment><USER20> That sounds like a complicated fix! How many tens of minutes did it take? And how many tens of minutes did the bug cost, in effort spent on comments that got eaten instead of posted?

(I know there's no way to answer that last question, but that doesn't mean its answer is equal to zero.)

<comment><USER20> (Ah, never mind, I see this line of thought has already been explored nearby. I've nothing to add beyond what's already been said there.)

<comment><USER19> It was complicated, but at one point I was so in love with Arc that I wanted to give it a real shot at taking over the world. It seemed like a necessary change to make, since the moment someone brought up dead links as a slight against arc, I could point to the change and say, "Already fixed!"

(I made a few other improvements, like having accurate line numbers in error messages, and a clojure-style REPL for emacs: [https://www.youtube.com/watch?v=3v1KpEmuPeM](https://www.youtube.com/watch?v=3v1KpEmuPeM))

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER21> With apologies to Geoff Mack, here's a performance by Lucky Starr: [https://www.youtube.com/watch?v=dpRvAnhHfmc](https://www.youtube.com/watch?v=dpRvAnhHfmc)

<comment><USER22> As long as we're doing recordings of the song, Hank Snow: [https://www.youtube.com/watch?v=jet7Ue743Do](https://www.youtube.com/watch?v=jet7Ue743Do)

</comment></comment><comment><USER23> Is this set to music somewhere? I've been writing in lisp since using Lisp 1.5 in college; nearly 50 years.

<comment><USER24> There's a great hack showing the Johnny Cash original version of the song,

[http://www.johnnycashhasbeeneverywhere.com/](http://www.johnnycashhasbeeneverywhere.com/)

</comment></comment><comment><USER25> Professor steps one level up in awesomeness :) .

Skip here comments regarding AI online courses, questions related to AIMA and PAIP books. It's not quite a good opportunity to inquire about finer points of JScheme or even ask clarifications along last September interview with Lex Fridman. The art of maintaining approachability for beginners and reference level of usefulness for advanced is not easy, but it's demonstrated - and here is flipped on another human side. Peter, thank you for your works for all of us.

</comment><comment><USER26> Haha! I love Medeski Martin & Wood's version of "Let's Go Everywhere" with Col. Bruce Hampton on vocals: [https://www.youtube.com/watch?v=7WMzDRtU0wU](https://www.youtube.com/watch?v=7WMzDRtU0wU)

</comment><comment><USER27> Reminds me of CS 314, the musical [http://captainchang.com/cs314-musical.html](http://captainchang.com/cs314-musical.html)

> Think in hex, think in hex

> Look around you, who needs dec?

> You can do anything in base sixteen or I'll go to my rest!

<comment><USER28> Or how about _Kill Dash Nine_ the rap song:

[https://www.youtube.com/watch?v=IuGjtlsKo4s](https://www.youtube.com/watch?v=IuGjtlsKo4s)

</comment></comment><comment><USER29> This is stupid and I love it, but come on - who sits down with Norvig and does not know his Lispen background?

<comment><AUTHOR> People who also think John McCarthy has no sense of decency?

[https://www.senate.gov/artandhistory/history/minute/Have_you...](https://www.senate.gov/artandhistory/history/minute/Have_you_no_sense_of_decency.htm)

</comment></comment><comment><USER18> I feel like there were other things like this that people like Guy Steele wrote in the heyday of things like this. More serious people with better memories will be able to say.

<comment><USER30> Guy Steele's "Tree" poem: [http://prl.ccs.neu.edu/img/gls-trees- poem-1979.pdf](http://prl.ccs.neu.edu/img/gls-trees-poem-1979.pdf)

<comment><USER18> Thanks! And you reminded me of [https://news.ycombinator.com/item?id=10785349](https://news.ycombinator.com/item?id=10785349)

</comment></comment></comment><comment><USER31> This may be the opposite song to "I've Consed Every Pair":

"Write in C": [http://www.poppyfields.net/filks/00259.html](http://www.poppyfields.net/filks/00259.html)

Someone apparently made a YouTube video too: [https://www.youtube.com/watch?v=wJ81MZUlrDo](https://www.youtube.com/watch?v=wJ81MZUlrDo)

</comment><comment><USER32> The most important thing I ever learned from Professor Norvig was how to not get fat at Google. He said, "Never take a tray. If it won't fit on one plate, it's too much".

A wise man.

I mean I suppose some of the stuff I learned from his textbook was pretty useful too.

<comment><USER33> What advice would you give to those of us who struggle with our weight, regardless of the size of our plate, who came here to discuss lisp and not what the author of the blog post said to you one time about food portions?

<comment><USER34> Write down what you eat. Even if you change nothing, you'll re-consider grazing/snacking. Write it down _before_ you eat it for extra effectiveness.

Shameless plugs in my post history. But to be clear, even a sheet of paper can be tremendously helpful.

<comment><USER33> As a person who recalls every bite and gains weight at one meal a day with no snacking at all, this is not helpful. I'm still looking for advice on why I'm being told to count my food intake in a lisp discussion.

<comment><USER35> This is no more a lisp discussion than a Johnny Cash discussion. You can ignore the top post if it doesn't interest you.

As an aside, obesity is a disease that hormonally and mentally encourages self deception. The point of writing everything down and (most importantly) translating this list into objective calorie counts (usually looked up from a third party reference) is to remove this self deception. It is one of the most effective ways to leverage logic and willpower over habits and hormones. There are other ways of course.

<comment><USER33> The post is a topic that discusses tech. The commenter discussed eating advice to "avoid getting fat" that is plainly unbelievable to people who experience weight gain following said advice and who don't benefit from being told to starve themselves more or be more hyper aware of the fact that it doesn't matter how little they eat they gain weight. The post had nothing to do with getting fat.

Of course I'm welcome to ignore everything that makes me feel bad for gaining weight but it's shitty to be gaining weight and told it's my fault for eating too much when I barely eat.

<comment><USER36> Have you tried lifting heavy weights? Follow a program like Starting Strength and make that calorie surplus work for you. Being skinnyfat isn't really a compelling goal. Lift and gaining weight becomes a good thing, because it means you're putting on muscle.

<comment><USER37> Starting strength is great for smaller men and women but can be hard on bigger people. Especially with Rippletoe's eating philosophy. I gained 15kg when I started SS so be careful. It was worth it and my numbers went up a ton, but it's always good to measure your options. If you're very large it is worthwhile to hire a trainer. They will teach you how to get started easily without jumping off the deep end.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER38> Man. I miss Johnny Cash.

His cover of NIИ's _Hurt_ is so powerful. June Carter (his wife) died a few months after filming the video, and that just broke his heart. Johnny followed her less than six months later.

[https://www.youtube.com/watch?v=8AHCfZTRGiI](https://www.youtube.com/watch?v=8AHCfZTRGiI)

Trent Reznor admitted that the song was no longer his after watching it.

<comment><USER39> I like mostly metal, industrial, heh even ska, ... bust mostly death metal, but then there is Johnny Cash, and I hate country - though not Johnny - <USER2> is something about it - also Willie Nelson (and few other, probably there is more, it's just that I don't like mainstream one...)

<comment><USER40> Nah, most country on the radio just doesn't have the same kinda honesty that Johnny Cash or Willie Nelson had. Nor do they have the kind of intensity that a man like Cash had. It just isn't the same. Fellow metalhead who likes ska, btw.

<comment><USER41> If you like them, you should also consider Ray Wylie Hubbard. Slightly different style, but in the same vein of truth.

<comment><USER39> Hey thanks, just googled and found this concert - and yes, it's my thing - [https://www.youtube.com/watch?v=y9_xBIuV9nE](https://www.youtube.com/watch?v=y9_xBIuV9nE) \- wonder why country is not like this... then again even modern metal is not to my liking - so I maybe just old :)

That to be said, recently discovered Ho99o9 and love them.

</comment></comment></comment></comment></comment><comment><USER42>
      this Johnny Cash song

Cash made it popular in the USA, but it was composed by Australian Geoff Mack.

<comment><USER18> My inner Canadian asks me to point out that Hank Snow made it popular in the USA.

</comment></comment><comment><USER43> It's not ironic once you realise that most Clojure developers are converts from other languages and new to Lisp.

</comment><comment><USER44> Ah, filk. Never die.

</comment><comment><USER45> Paragraph one sounds like Hanahaus.

</comment><comment><USER46> Is Peter waving or drowning?

If a pair is consed in a forest, and no one observes it, did it really happen?

<comment><USER23> That depends> Did you look before or after GC?

</comment></comment><comment><USER47> But peter, don't be fooled, those are not pairs, that's a seq!

</comment><comment><USER48> I'll admit I don't think I've really noticed the presence of lisp online other than when people want to talk about lisp. Can someone share some practical examples of where lisp is being used? Maybe a popular open source project I never realised was written in a lisp family language?

<comment><USER49> It's a little sad that it's declined so far. In a way, it's a victim of its own success--it's so easy to write a lisp system that literally dozens, if not hundreds, of variants sprang up. The community was divided, and it never quite came through.

IIRC, our fearless leader PG made his zillions using Lisp.

<comment><USER50> The division was never a problem during the heyday. The decline in Lisp in fact started at the height of standardization.

> _it 's so easy to write a lisp system_

Have you tried it, and how far did you get?

Making a Lisp system useful for production is pretty brutal.

13 years into it you will be debugging some eleven-year-old GC or compiler bug.

People think it's easy because they visualize the job as being done when some executable file converts (+ 1 1) into 2.

<comment><USER49> Maybe it declined for other reasons, but my impression was that the Lisp world was very splintered. I certainly can't think of any other example of a set of quite similar languages that's anywhere near as large.

The Xerox Dandelion and friends was a thing to behold. If you ever got to touch one, you never forgot it.

In my school, implementing a basic Lisp interpreter was part of a required class in the CS curriculum. (If it's not still, everywhere, well, then _for shame_.)

Yeah, production is something else entirely. By "easy", I mean that dozens if not hundreds of people were tempted to write their own slightly better Lisp. Many of those did reach a production-ish level. But then what? There was no flag to rally around--just lots and lots of niche systems.

I'm not sure. I think if the community had rallied around Common Lisp or Scheme, or maybe just those two, it might have ruled the world. It just didn't happen.

And I'm miserably sad about that. What do we have now? Elisp is great, but I can't build production on emacs. I'll look at Clojure, but I'm dubious. Python is kind of lispy, but has had its own destructive schism. And C++ marches on-- somewhere buried in there is a mildly functional lisp, using the worst of all possible syntaxes.

<comment><USER51> I'd think a refreshed Common Lisp would still have a chance. It's a great language with some really solid open-source implementations, but it got standardized at the transition point in our industry, so the spec doesn't even consider (now-commonplace) things like threading or networking, while exposing you to some abstractions over systems died out.

The problems of CL wouldn't be unsurmountable if the community was larger, though. All the important stuff that wasn't standardized gets added by each implementation anyway, and then portability libraries get created that ensure consistent interface. But the state of most libraries is... rough at the edges. I contrast that with Clojure, with which I spent some months over the last two years. The library ecosystem (not Java-side, but Clojure-specific) is great, and a lot of care goes into it. I particularly remember being in awe of just how _thorough_ Liberator is[0].

\--

[0] - [http://clojure- liberator.github.io/liberator/tutorial/decisi...](http://clojure- liberator.github.io/liberator/tutorial/decision-graph.html)

</comment></comment></comment></comment></comment><comment><USER52> My first thought looking at the title was to wonder if he had Climbed Every Mountain.

</comment><comment><USER53> I bet he hasn't used LISP 2.

</comment><comment><USER54> Have you read your SICP today‽

</comment><comment><USER55> cons lists are kind of slow because they don't play well with CPU caches. Are there any ideas how to adapt Lisp (or LISP) so that it plays well with current CPU architectures?

<comment><USER50> > _cons lists are kind of slow because they don 't play well with CPU caches._

Cons lists were slow on the IBM 704 too. Good thing that didn't stop anyone, right?

> _Are there any ideas how to adapt Lisp (or LISP) so that it plays well with > current CPU architectures?_

An ARRAY feature was described in the 1960 Lisp manual. That's probably because it was recognized that linked lists weren't the be-all data structure even on the IBM 704; sometimes it's nice to have compact storage and fast random access.

Can we move past this in 2020?

Let's leave this to the people who have a single aggregate structure in their programming language that is ambiguous between list and array.

<comment><USER56> If I can elaborate just a bit on kazinator's comment: While it's still possible to use cons cells as one's sole data structure in Lisp, no Lisp programmer with any experience does that. Making cons cells faster would be like forcing horses to drink Red Bull so they could pull chariots as fast as cars. It's a solved problem -- just use a car (npi) -- and there's no need to abuse any horses.

</comment></comment></comment><comment><USER57> I remember reading something someplace that was something like ... the problem with being old and full of wisdom is it's hard to share that wisdom with the people that need it most without sounding like an old condescending jerk. Plus, they won't listen anyways. The best you can hope for is that when they are old and full of wisdom they'll remember you and think "hey that old guy was right" . I know when I was 25 I was damn sure I knew better than anyone twice my age.

<comment><USER58> > I know when I was 25 I was damn sure I knew better than anyone twice my age.

This is why I've long believed voting systems should restrict the voting age to 16-28. After all, whom would you rather have voting: people wracked with doubt and who fear their own ignorance, or people who know everything?

<comment><USER59> I'd rather have "people wracked with doubt and who fear their own ignorance" :)

<comment><USER58> Ah, so you don't believe in experts, eh? Not even ones apparently expert on _every_ subject?

<comment><USER59> As a non-testimonial litigation consultant, I used to joke that I could pose as an expert in anything, given a couple months.

But in truth, one of my favorite deposition answers goes something like this:

> I'm not prepared to offer an opinion on that question.

<comment><USER58> My joking aside, the tragedy is only the truely expert are willing to make this answer.

<comment><USER59> Right.

But actually, "prepared" is often literally the case.

Before critical depositions, experts spend a day or two, with attorneys and consultants, practicing replies. And experts are very cautious about answering unexpected questions.

</comment></comment></comment></comment></comment></comment></comment><comment><USER60> > I found it ironic that this programmer seemed not to realize that I had used > Lisp as my primary language for 15 years of my career.

Why is that ironic?

<comment><USER61> If somebody is trying to school you, and if there is a reason to believe you work in a genius-factory, then its ironic that the school-er doesn't do their homework into the school-ee to understand what they might be doing.

Go back to school?

<comment><USER62> School you?

Sounds like someone mentioned how awesome a Lisp is. Ironically he said to someone who has done a bit of Lisp before. There ain't much to the OP story, or at least he hasn't divulged that much, but the song he wrote is pretty cool.

<comment><USER63> Op is Peter Norvig, someone who any self respecting lisper should have heard of.

<comment><USER64> Please don't gatekeep respect

<comment><USER65> I'm not sure whether you're serious.

</comment></comment></comment></comment></comment></comment><comment><USER66> finally. a useful post on medium.

</comment><comment><USER67> Maybe the most cringy thing I have read on here.

<comment><USER18> That's part of the tradition it belongs to.

</comment></comment><comment><USER50> > _While that is a sentiment with which I can wholeheartedly agree, ..._

... (since, ya know, I rewrote a Lisp book to make it about Python, so if I said what I really think, there would be no end to the crow I'd have to eat), but anyway ...

<comment><AUTHOR> Peter Norvig explained why he came to Python from Lisp in an HN posting a decade ago:

[https://news.ycombinator.com/item?id=1803815](https://news.ycombinator.com/item?id=1803815)

>norvig on Oct 18, 2010 | parent | favorite | on: Ask PG: Lisp vs Python (2010)

>Peter Norvig here. I came to Python not because I thought it was a better/acceptable/pragmatic Lisp, but because it was better pseudocode. Several students claimed that they had a hard time mapping from the pseudocode in my AI textbook to the Lisp code that Russell and I had online. So I looked for the language that was most like our pseudocode, and found that Python was the best match. Then I had to teach myself enough Python to implement the examples from the textbook. I found that Python was very nice for certain types of small problems, and had the libraries I needed to integrate with lots of other stuff, at Google and elsewhere on the net.

>I think Lisp still has an edge for larger projects and for applications where the speed of the compiled code is important. But Python has the edge (with a large number of students) when the main goal is communication, not programming per se.

>In terms of programming-in-the-large, at Google and elsewhere, I think that language choice is not as important as all the other choices: if you have the right overall architecture, the right team of programmers, the right development process that allows for rapid development with continuous improvement, then many languages will work for you; if you don't have those things you're in trouble regardless of your language choice.

Kenny Tilton (smuglispweeny) tells this story, that ced posted a link to in the same discussion:

[https://news.ycombinator.com/item?id=1803627](https://news.ycombinator.com/item?id=1803627)

>ced on Oct 18, 2010 | parent | favorite | on: Ask PG: Lisp vs Python (2010)

>That reminds me of a cool story, in Norvig's talk about Python...

>When he finished Peter [Norvig] took questions and to my surprise called first on the rumpled old guy who had wandered in just before the talk began and eased himself into a chair just across the aisle from me and a few rows up.

>This guy had wild white hair and a scraggly white beard and looked hopelessly lost as if he had gotten separated from the tour group and wandered in mostly to rest his feet and just a little to see what we were all up to. My first thought was that he would be terribly disappointed by our bizarre topic and my second thought was that he would be about the right age, Stanford is just down the road, I think he is still at Stanford -- could it be?

>"Yes, John?" Peter said.

>I won't pretend to remember Lisp inventor John McCarthy's exact words which is odd because there were only about ten but he simply asked if Python could gracefully manipulate Python code as data.

>"No, John, it can't," said Peter and nothing more, graciously assenting to the professor's critique, and McCarthy said no more though Peter waited a moment to see if he would and in the silence a thousand words were said.

[http://smuglispweeny.blogspot.com/2008/02/ooh-ooh-my-turn- wh...](http://smuglispweeny.blogspot.com/2008/02/ooh-ooh-my-turn-why- lisp.html)

<comment><USER43> So basically a race to the bottom in order to communicate with the ALGOL intolerant fanatics.

<comment><USER18> Aw, come on. It's a truly beautiful story.

<comment><USER68> Wonderful. What a lovely unspoken communication, particularly from Peter.</comment></comment></comment></comment></comment>


Show HN: Personalization and Machine Learning to improve sales - <AUTHOR> http://www.maaxmarket.com/maaxmarket-what-is-personalization-and-how-it-can-help-your-business/ <comment><AUTHOR> We are using PreditionIO machine learning algorithms for our product to enhance our Personalization Technology</comment>


Apple iPhone fingerprint reader confirmed as easy to hack - <AUTHOR> http://www.zdnet.com/apple-iphone-fingerprint-reader-confirmed-as-easy-to-hack-7000021065/

<comment><USER2> Apple Gives Security The Finger

[https://www.nsfwcorp.com/dispatch/security-the- finger/652da9...](https://www.nsfwcorp.com/dispatch/security-the- finger/652da91b5e2de53ed94dd919d73cee363afbe643/)

</comment><comment><USER3> I always get downvoted for saying stuff like this, but here it is: TouchID is not easy to hack at all. It isn't a hack at all. That's how the damn scanner works. You give an input and the scanner will verify. Just think about encryption which does not solve confidentiality, authenticity and integrity at once. The scanner itself was never meant to do all three things. Such article is misleading the average consumers.</comment>


Search through radio telescope data and discover a new pulsar - <AUTHOR> https://www.zooniverse.org/projects/zooniverse/pulsar-hunters/ <comment><USER2> signup attempt gets "currently out of data"... I wish they took signups for when they need help in the future.</comment>


The Guardian view on Huawei: the bigger story - <AUTHOR> https://www.theguardian.com/commentisfree/2018/dec/06/the-guardian-view-on-huawei-the-bigger-story <comment><USER2> Very early in the morning here in Shenzhen.

Can say this, a bro from Huawei said that the talk is about Liu Changming, or, talking precisely, his Children detained in China.</comment>


Reality doesn't exist - "...But on the quantum level we do have to give up realism" - <AUTHOR> http://seedmagazine.com/news/2008/06/the_reality_tests_1.php

<comment><AUTHOR> This is in response to the submission "The good news is reality exists...". Read the whole article, the conclusion is towards the end. I don't understand how these teams can make such generic conclusions and then immediately contradict each other on such level. One team says "we are certain, reality doesn't exists", the other says "nope, it does exists". Either the articles interpreting the teams' results are exaggerating the claims, or quantum mechanics is mocking both teams making contradictory results possible.</comment>