America's Retailers Are Closing Stores Faster Than Ever - <AUTHOR> https://www.bloomberg.com/news/articles/2017-04-07/stores-are-closing-at-a-record-pace-as-amazon-chews-up-retailers <comment><USER2> Everyone blames online retailing, buy the matter of the fact is that wages still are not keeping pace with even cost of living, and more and more people are having to cut out unnecessary things in order to make ends meet.

People love to go to malls, but they aren't going to go spend $75 on a polo shirt when they have a $400 electric bill.

As wages continue to lag, this will affect online retailers as well eventually.

</comment><comment><USER3> There's a retailer near me that sells office supplies. One day I needed a USB memory stick, and I needed it now, so I stopped by.

Everything in the store worth more than about $50 had to be ordered. "Should be here in a couple days". I get that on paper it does nice things for their cash flow, but what it's really doing is making sure people buy the $50+ items from Amazon, and then the office supply place gets the crumbs.

If you're going to be a retailer, be a retailer and make sure I'm walking out with my purchase. Otherwise that spot in the strip mall could be better utilized by a restaurant or something.

<comment><USER4> Probably. It's really hard to be a retailer I'd imagine when more ready customers are buying from delivery oriented e-retailer and traditional customers aren't going to pay the premium for ready-to-buy. Doesn't help that latter group is becoming more of an exception rather than the norm they used to be.

</comment></comment><comment><USER5> As a non american driving in the US what strikes you a lot of the sheer swathes of parking lots, retail parks, advertising boards and drive through McDonalds, KFCs and Taco Bells that go on and on for miles. How there is enough business left in the internet age to keep these from becoming concrete wastelands I don't know.

<comment><USER6> What gets me is that they're still building new ones anyway.

It seems like such a disconnect to hear various news reports over and over claim that "US retailers are closing stores", and yet still see lots of new retail construction all over -- not just one or two stores, but entire outlet malls and such.

</comment></comment><comment><USER7> And Planet Fitness is moving into the now-empty stores...pretty fast too.

</comment><comment><USER8> I'd buy more from the local stores of some retailers if they would make their websites work better. I'm willing to pay more now and then to support keeping the stores open, but not if they make me jump through too many hoops.

A good example of doing it wrong is Barnes & Noble.

Suppose I'm thinking of buying a book, and would like to go take a look at it in person before making my decision. So my first question is simple: is it in stock at my local Barnes & Noble?

That's fairly easy to determine. Just go to barnesandnoble.com and search for the book. On the page for the book there is a "Want it Today? Check Store Availability" link. Hit that link and you get a pop up to enter your zip/postal code. Do so and it will then show you a list of their stores near that area, and whether or not each has the book in stock.

OK, that's fine if you are only interested in one book. But I'm usually interested in taking a look at several books. So navigate to another book's page and click "Want it Today? Check Store Availability".

And guess what happens? You get the pop up that asks you to enter your zip/postal code! They didn't set it in a cookie when you entered it for the first book. You have to enter your stupid zip/postal code for EVERY book you want to check!

OK...maybe it works better if you login. If you login you can set a store as your local store, and the site remembers that. For instance when you ask about upcoming events it shows the events from that store.

Nope. Logging in makes no difference. There is no way I've found to make it use the "my local store" setting to save from having to actually enter zip/postale code for every book you want to check.

If I'm looking up a half dozen books or so I usually get annoyed around #4 and say "screw it" and make do with Amazon's "look inside" feature, and then buy from Amazon.

I could simply not believe that they could do this, and so guessed that it might be because I use Safari on Mac. Maybe they don't test with Safari? Nope, I then tried Chrome and Firefox, and had the same problem. I then tried them on Windows, and also Edge, and same problem.

At the very least, B&N needs to use a cookie to remember the zip/postal code for that browsing session.

I say "very least" because that just solves the problem when I have a specific list of books in mind that I'd like to come look at.

Another common case is when I just know the category I'm interested in. For instance, I would like to get a book on improving my memory. There are a lot of books in that category. To find out online which are at my local B&N I've got to find them all on the site, and then check each one by one to see which ones are at my store.

What I really want is an option to select a store, and then have the site show me only items that are in stock at the store. If I search for "improve your memory" I don't want to see the 244 matching items that are available at the union of B&N stores and B&N online. I want to see only the 5 items that are actually at my local store.

What B&N needs to realize is that I don't care what B&N sells online. If I'm going to buy a book online I'm going to buy from Amazon because I have Amazon Prime. If I'm at their website it is because I'm interested in what is in their retail locations.

<comment><USER9> The past two weeks I was trying to buy a Nintendo Switch. I ended up getting it from Target for a similar reason; I was able to go on their online shop and see which Target was carrying it. Wal-Mart only had scalpers trying to get people to buy it for x1.5 the price. When I went into a Wal-Mart (As their website said they had two in store), they were out even though their website AND their own stocking inventory said it was in store. When I went to a GameStop, they tried to upsell me to pay for a bundle (which had almost nothing I wanted) for x1.5 the price. Many of the online stores also made it a huge hassle to try to look in a local store without making a sign-in (Best Buy was the worst offender). The only reason I did not buy from Amazon is because of scalpers as well.

I also like to buy Music CDs. There's a few record stores around, but I have frequently seen a $6-7 CD being sold for $12-15 at the record stores (This is even assuming I can find the CD I want). I would not mind if I paid an extra dollar or two to support the local store, but asking to pay close to twice the price is not worth it to me.

<comment><USER8> > The past two weeks I was trying to buy a Nintendo Switch. I ended up getting > it from Target for a similar reason; I was able to go on their online shop > and see which Target was carrying it.

That isn't working for me. It looks like they may have taken it out of their online shop. When I go to the Nintendo Switch section of the online shop there is a notice on the top of the page that it is only sold in stores and that I should check my local Target store, and there is no entry for it down in the product section of the page.

I don't see any obvious way to check online if an item is in stock locally except by going to the product page for that item in the online shop, where they also tell you if the item is available for pickup at your local store.

Speaking of buying hard to get consoles, I got a Wii on launch day without much effort at all. I knew people were camping out overnight for it, and was not willing to do that. I was, however, curious to see how many people actually did that and so got up that morning about an hour before stores opened and just drove around to see what the lines were like. As expected Best Buy and Target and the game stores had long lines.

I went home and then it occurred to me...K-Mart sells video games, but I've never heard anyone talk about camping out at K-Mart for a launch of anything. I'm on the west coast (GMT+8) and it was about a half hour until stores opened. On the east coast (GMT+5) stores would have been open already for 2.5 hours, so I called an east coast K-Mart and asked if they carried Wii. They said they did, but were sold out.

So I figured it was worth a shot, and drove to K-Mart. There was a line: two people. They told me they got there about 15 minutes before me. I got in the line, and a little after that another person joined behind me. A few minutes later someone came out from the store and told us that they had two Wii in stock. I got ready to leave because there were two people ahead of me, but they turned around and said they were together and only buying one. The person behind me started making some obvious preparations to rush in as soon as the door opened to try to get ahead of me, but the person from the store said that they would be given out by the order we were in line.

<comment><USER9> They had it when I was getting it, that's interesting. I also used a site called iStockNow, they seemed to be able to scrap from a few websites and tell me who has it in stock. I hope that helps!</comment></comment></comment></comment>


SSD: How to Optimize Your Solid State Drive for Linux - <AUTHOR> https://sites.google.com/site/easylinuxtipsproject/ssd#TOC-Avoid-exaggerated-measures <comment><USER2> This pretty much all seems to be a lot of fiddly work that tries to reduce writes to your SSD.

People Who Know in the industry know that any non-bottom-of-the-barrel SSD bought in the last -like- five years or so will endure many tens of TBs of writes.

If we look at Tech Report's SSD Torture Test [0], we know with some confidence that consumer-level SSDs will endure _hundreds_ of TBs of writes before failing.

To provide some perspective for those numbers: My Linux laptop has encrypted swap, btrfs root partiton, and encrypted btrfs /home all on the SSD, and sees frequent compiles-from-source (I run Gentoo Linux.). Other than mounting my filesystems with the "discard" option, I've performed no SSD-specific configuration step or fiddled with any VM tunables.

Under this workload and configuration, I have written 20.4TB and read 66.8TB over 3.9 years. SMART indicates that zero blocks have been reallocated and that the drive is in perfect health.

In short, if you've a consumer or developer's workload, _don 't worry_ about SSD media longevity. Regardless of who you are, strongly consider benchmarking any configuration tweaks that folks claim will improve performance.

[0] [http://techreport.com/review/27909/the-ssd-endurance- experim...](http://techreport.com/review/27909/the-ssd-endurance-experiment- theyre-all-dead) (But make sure to also check out the intro article: [http://techreport.com/review/24841/introducing-the-ssd- endur...](http://techreport.com/review/24841/introducing-the-ssd-endurance- experiment) )

<comment><USER3> Supporting anecdata: I had a windows 7 gaming machine that saw a fair amount of use each day, with the pagefile on an SSD, and no tuning. Took about four years before the drive started failing (well, failing noticeably as a user).

<comment><USER4> > Took about four years before the drive started failing (well, failing > noticeably as a user).

Was the SSD made by OCZ or had a Sandforce controller by any chance?

Also anecdotal, but my 160GB Intel X25-M 'G2' has been working perfectly for the past 5 years and 10 months. So far I have written 16.92 TBs to it [1] and until I moved the drive into another PC I had been running games and VMs from it.

[1] [http://i.imgur.com/u3AfP9R.png](http://i.imgur.com/u3AfP9R.png)

<comment><USER2> FWIW, the drive from which I quote usage stats in my comment is a 100GB OCZ Vertex LE. So, this is the fabled "double whammy" of OCZ-manufactured drive and early SandForce chip.

</comment></comment></comment></comment><comment><USER5> This is bad advice imo. A SSD offers small capacity for a big price. It is a bad match for preserving data. Its advantage is its speed, especially in seek times, but also on read/write operations.

If one wants to "get his money back" the best way is to utilize the SSD to its fullest instead of trying to preserve it for ten years. Write on it as much as you can. Use it to make your system faster. Use it to hide your setup's shortcomings.

Couple years back, I had only 8GB of RAM on my system. The first thing I did when I got a SSD was to put the swap on it. The zero-seek times (compared to HDDs) made the dreaded swap operations almost imperceptible. What worths more? The SSD or the ability to do my work without hinders?

Other bad advice in the article:

      - Use noatime: this is old, use relatime.
      - Do not use btrfs: compression, deduplication, COW, snapshots etc are very useful for the small sized SSDs
      - Do not enable hibernation: Maybe we should return to windows '98
      - Disable browser cache: facepalm, just try browsing like this...

Ommited advice from the article:

      - Use part of the SSD as a cache for your HDDs (native support by LVM)

In short: do not try to protect your SSD. Try to kill it as fast as possible. :)

<comment><USER6> It's fine as long as people know what they are doing is ridiculous. I have a friend who both tries to hyper mile and as well as prevent any wear on his brakes on his Diesel VW Golf TDI. As in, his objective is to never, ever touch his brakes, or accelerate (significantly). He plans out his highway on-ramps to avoid sudden acceleration, rarely passes, and gauges stop-lights blocks in advance to reduce braking.

Is this _needed_ in a modern car, or does it make driving said care more pleasurable, (or, for that matter, safe?) No, in call cases. But, he takes a particular pleasure about taking his vehicle into the dealer (free, once a year), and at 75,000 miles being told that his brakes look like they've got 10,000 miles on them.

So, if you read the advice on SSDs in this (ridiculous to some) vein, then It's a fun read.

<comment><USER5> Your friend's practice seems a bit excessive to me, though I can understand one adopting some good driving habits to reduce wear and increase mileage. It usually leads to more safe roads too, due to less aggressive driving behaviour.

A thing I can't understand are screen protectors used by people with an office job. The amount of R&D put into modern phones' screens and oleophobic coating is huge. Your phone's screen is designed to withstand both hits and dirt, to let your fingers slide with minimal friction and to allow you perceive every last pixel of your QHD panel (which has its own huge amount of R&D). Why would you miss all these by gluing a $5 piece of plastic on top of it?

<comment><USER7> > Why would you miss all these by gluing a $5 piece of plastic on top of it?

Some of us prefer matte, non-mirror screens.

<comment><USER8> Especially as those are also more fat-resistant. And read better in sunlight. <3 matte screens.

</comment></comment></comment></comment></comment><comment><USER9> Ah, typical Linux article with an obligatory insult for Windows. Hope OP realizes Windows disables defrag for SSDs, and basically does everything described in the article without needing user intervention.

Next, you don't have to over-provision unpartitioned space AND preserve 20% of partitioned free space. It's one or another, the point is to have enough free space for proper wear leveling.

Hibernation can stay enabled, it just dumps RAM contents into a file, once. SSDs are much more vulnerable to small frequent writes (log files, browser cache, etc) due to write amplification and minimum write size ([http://www.ni.com/product- documentation/10126/en/](http://www.ni.com/product-documentation/10126/en/)).

<comment><USER10> I don't know about earlier Windows, but Windows 8 does not attempt to defragment drives that identify themselves as being solid-state. It does invoke TRIM on drives that advertise that feature, and confusingly, this is done through the same defragmentation UI.

<comment><USER9> Why 'confusingly'? It's only natural to keep drive maintenance in one place. You don't ever need to invoke defrag/trim manually as they are scheduled to run whenever PC is not in use.

<comment><USER10> It's confusing to people who are told to disable defragmentation on SSDs. It's the same button for both HDDs and SSDs, and both TRIM and defragmentation are referred to using the same word, 'optimization'[0]. An unaware user would not know the difference.

[0] [http://www.oszone.net/user_img/vadblog/ssd-defrag-bug- en01_m...](http://www.oszone.net/user_img/vadblog/ssd-defrag-bug- en01_mini_oszone.png)

</comment></comment></comment></comment><comment><USER11> _Enjoy your SSD carefree for years and years_

 _18\. Now you 'll be able to enjoy your SSD carefree!_

This should have been step 1. SSDs have a massive lifetime these days, you don't need to do any of the other steps, some of them will even slow down your computer.

<comment><USER12> This.

The 850 Pro I've got in my machine has a stated write lifetime of 150TB.

And chances are, it'll do a lot more than that, it's just the number they'll look at for the 10 year warranty.

</comment></comment><comment><USER13> I feel that the arch linux wiki is the best resource for these problems. [https://wiki.archlinux.org/index.php/Solid_State_Drives](https://wiki.archlinux.org/index.php/Solid_State_Drives)

Personally I just fully wipe a new ssd and put discard in fstab.

</comment><comment><USER14> I'm not sure the advice to disable the browser cache is such good advice.

<comment><AUTHOR> Why is that? Provided you have sufficient RAM ?

<comment><USER15> The browser cache is about caching network resources and not about ram, pages you visited yesterday are cached there and will have no place in ram.

</comment></comment></comment><comment><USER16> There's also profile-sync-daemon [0] that moves browser profiles into a ramdisk to save writing to/from the SSD all the time.

I think a copy-on-write filesystem like btrfs would be better on SSDs because they do not change written data but rather write to a new area on the drive, requiring less erases on the SSD's side.

There's also F2FS (Flash-Friendly File System) which has been in the Linux kernel for a while now that specifically targets flash based drives.

Though I agree that most of these optimizations do not seem necessary on modern SSDs.

[0] [https://github.com/graysky2/profile-sync- daemon](https://github.com/graysky2/profile-sync-daemon)

<comment><USER15> F2FS is for direct NAND access, if you do it over an SSD that already has an FTL (flash translation layer) you'll gain nothing and only cost extra writes.

<comment><USER16> I can't say I'm too familiar with it, but this article says F2FS specifically targets the flash translation layer.

[https://lwn.net/Articles/518988/](https://lwn.net/Articles/518988/)

</comment></comment></comment><comment><USER17> I have been using an Intel 520 SSD on my Debian unstable for > 3 years and I have not done any such setting let alone knowing they exist. Should I pay heed or should I continue using my SSD like this? Thoughts?

<comment><AUTHOR> I'd recommend to follow up at least on the post-installation tips, to reduce swappiness and writes on the SSD drive. That way you can keep your SSD working longer.

<comment><USER15> I wouldn't bother with any of this. The effects on the SSD are too low to be worth it and there is no discussion on the tradeoffs that are being taken. Disabling hibernation is really a shame for one. Trim is done excessively and the benefit is not that big. The weekly trim should suffice and no need to do it on boot.

I also doubt the disk scheduler is of any importance, as long as there are enough IOs in the queue in the disk it will be fast, otherwise it will not. All schedulers will allow multiple IOs in the queue for all I know.

I do the noatime for any system without regard if it is an SSD or HDD. I just don't use atime at all to bother about the extra work needed to maintain it.

</comment></comment></comment><comment><USER18> Some SSD have problems executing fsync moderately fast - like the Crucial V4. Here's the remedy:

[http://forum.crucial.com/t5/Crucial-SSDs/Solution- Crucial-V4...](http://forum.crucial.com/t5/Crucial-SSDs/Solution- Crucial-V4-runs-fast-in-linux-Benchmarks-Manual/m-p/162462#M45745)

</comment><comment><USER19> I'd actually like some sources that BTRFS is bad for SSDs.

</comment><comment><USER20>
        Copy/paste the following command line into the terminal:
        sudo mv -v /etc/cron.weekly/fstrim /fstrim

Uhm. What? That's how this article 'disables' a cron task? Why?

<comment><USER21> Well, the author also insists to install gksu and leafpad.

</comment></comment><comment><USER22> This, like most, advice from random websites, is a mixture of out-dated notions half-truth and and outright wrong-headedness. Better to ignore it.

</comment><comment><USER23> Use full drive encryption. Make backups and buy new drive when old one fails. Done.

</comment><comment><USER24> What about SSHD drives - does Ubuntu have special drivers for them? Can I get my code files to be on the SSD part of the SSHD drive or will they just be allocated to the slow HDD part?

<comment><USER15> These devices do not expose their inner SSD and only utilize it as a cache.

You are probably better off with an SSD standalone or with a full blown SSD as a block cache to the HDD in part and as a direct drive in the other part.

</comment></comment><comment><USER25> I like the idea of using my SSD as a HDD cache. What do others think?

<comment><USER15> It can work out nicely if most of what you do is the size of the SSD and the total capacity is higher than the SSD capacity (i.e. lots of rarely used stuff).

In fact, I worked on an enterprise storage that did just that and it significantly improved performance for many workloads. There are open-source solutions for that in Linux that integrate into LVM and do that pretty much without any other interaction by the user. bcache comes to mind but there were a few others as well.

</comment></comment><comment><USER26> How recent is it? I see his BIOS screenshots are from a curved CRT.

<comment><AUTHOR> It refers to Linux Mint 17.1 so this is updated fairly recently.</comment></comment>


SQL to create histograms - <AUTHOR> http://wishli.st/blog/creating-histogram-data-using-sql/ There's nothing really complicated about it, but I didn't find a good example online anywhere, so when I figured it out, it was time to share it <comment><USER2> A little flaky perhaps, but if you're gonna love sql :-)

select distinct cnt, count(cnt) over (partition by cnt) from (

select 'a' usr,1 cnt from dual union select 'b' usr,1 cnt from dual union select 'c' usr,2 cnt from dual union select 'd' usr,3 cnt from dual union select 'e' usr,3 cnt from dual )

</comment><comment><USER3> Something tells me that query would probably run faster if written as a join, especially in MySQL.

Also, what's the point of a section of the same content in the article being repeated in a larger font to the left?

<comment><AUTHOR> Hmm, you're right it would probably run a bit faster as a JOIN, I just default to using subqueries by nature.

Re:Theme with massive paragraph - it was based on a magazine wordpress theme and we're yet to edit it down.</comment></comment>


Ask HN: Is functional programming really worth it? - <AUTHOR> Do you think a better language makes you more productive than a language with great libraries?
There's Arc. There's OCaml, Haskell and a plethora of so-called next generation languages. These languages are supposed to be far superior to today's measly languages like Java or C++, and in pg's own words: they're supposed to make you more productive, get work done quicker. (Quote from Revenge of the Nerds: "1 line of LISP replaces 20 lines of C")
But is that really true? From experience I can tell you the lack of libraries in these languages kills off almost any code size advantage you get from using them. So I ask you all, be honest to yourself; is using such a language worth it?
And one last thing. Is functional programming really better than imperative programming? All that brain-racking to implement a multi-level loop using recursion in ML? IMO, imperative programming cleanly maps out to the real world. The world is imperative! Things have state! We do not live in an imaginary fluffy world of mathematical elegance & correctness. Truth is it's so much more easier to think imperative.
So, Is functional programming really worth it? <comment><USER3> I think Clojure may be your answer; functional programming with access to Java's enormous libraries.

Regarding "betterness", it's a philosophical shift -- some problems are better suited to one domain or another. My favorite metaphor for functional programming is Unix pipes:

cat file | grep XYZ | sort -r -n | ...

There's no explicit state but you can track the flow... output a file, search for something, sort that result, pipe it somewhere else, etc.

Imperative/state-based programming forces you to give names to all those intermediate results, just so you can pass them along. Sometimes variables are just a place to hold data until you can pass them to the next function; functional programming makes that so easy you don't need the variable. And think about how much easier it is to debug; once you get a part of the pipeline working, you can move to the next part (without worrying about global variables and other hidden interactions that can happen with imperative programming).

<comment><USER4> How is that not just:

cat(file).grep('XYZ').sort... ?

<comment><USER5> Your example is way different. You're operating on objects instead of return values. Rewriting what you gave:

      using namespace UnixUtilities;
      sort(grep(cat(filename), 'XYZ'));

No object necessary. No storage necessary. For your example to work the object needs to store the result of each method call in some member variable. Why is that a bad thing? Because it's harder to reason about member variables (that could change) than return values (which will always be the same if there is no state).

<comment><USER6> The OO example works off of return values, and the next .method() is on the return value of the previous call. It's almost totally isomorphic to your example (calling a function with the output of another), and isn't even really very OO in and of itself.

<comment><USER5> Ah, of course. That's what I get for commenting when I'm tired. The only comment that I would make is that the dot notation is very OO, indicating the method on the right is a member of the class of the object on the left. The 'using namespace' in my code was used to indicate the methods I called were static, thereby decoupling them from a particular object.

<comment><USER6> You're right, the location the function/method lives is slightly different. When I said it wasn't really OO, it is because there's no data encapsulation going on. Just running methods on the output of another method. The line of code could belong in an OO system, but is not in itself OO.

</comment></comment></comment></comment></comment></comment><comment><USER5> I can't speak with authority on OCaml or Haskell, but Common Lisp isn't lacking in terms of libraries. You just have to know where to look (<http://www.cliki.net>) and how to manage them.

 _And one last thing. Is functional programming really better than imperative programming? All that brain-racking to implement a multi-level loop using recursion in ML? IMO, imperative programming cleanly maps out to the real world. The world is imperative!_

"LISP embodied a much greater leap of imagination. Conceptually FORTRAN remained on familiar grounds in the sense that its purpose was to aid the mechanization of computational processes we used to do with pen and paper (and mechanical desk calculators if you could afford them). This was in strong contrast to LISP whose purpose was to enable the execution of processes that no one would dream of performing with pen and paper." - EWD 1284

<comment><USER7> > You just have to know where to look (<http://www.cliki.net>) and how to > manage them.

I would argue that if one needs to know where to look and how to manage them, then CL _is_ lacking in terms of libraries. One first has to know where to look and find a CL implementation then to know where to look and find batteries for it.

<comment><USER8> I disagree. The months or years you will spend learning a new language dwarfs the hour or two you may spend learning where the packages are and how to install them. These arguments are more relevant at the entry level (PHP, etc) but someone learning their third or fourth language should have less trivial considerations in mind than how nice its implementation of CPAN is.

</comment></comment></comment><comment><USER9> i use python for anything that's not speed-critical. see <http://norvig.com/python-lisp.html> (norvig being a very famous lisp programmer).

my own experience is that learning functional programming gave me more options - that can be useful when solving problems. when writing code for myself i try to combine the best of function, oo and procedural styles, while staying within "good taste" for the language i am using (sometimes i cannot choose the language).

so yes it's worth it, but your question leans too much to extremes: it's not a silver bullet any more than oo was; it's a mental tool that does help in every-day programming.

<comment><USER10> Python lets you use multi-paradigm programming - Functional where that makes sense and OOP for where that is better.

Functional programming is not always the optimal choice. But when it is, it is awesome.

</comment></comment><comment><USER11> Libraries have been the focus of the Haskell community for the past 2 years, there's now:

* 1918 libraries for Haskell (according to <http://hackage.haskell.org>)

for comparison, there are 1420 Erlang libraries (according to <http://projects.trapexit.org/web/>)

Was there something you were looking for that's not on Hackage?

<comment><USER12> There may be more haskell libs, but I doubt that they are as tested as the erlang libs.

</comment></comment><comment><USER13> Yes. But not as worth it as hard-core advocates of FP like to think.

There is really only one difference between FP and traditional imperative programming (which I'll call IP). In IP you have direct control over where the results of computations are stored and in FP you don't. This is, of course, a two-edged sword. Control gives you both power and the ability to screw things up. Lack of control makes it easier for your compiler to perform certain kinds of optimizations.

The reason learning FP is worthwhile is not so much because FP is some kind of magic bullet, but because understanding the tradeoffs between having this kind of control and not having it is worthwhile in and of itself. If you understand those tradeoffs you will write better code in whatever language you use, even if it's assembler.

</comment><comment><USER14> _From experience I can tell you the lack of libraries in these languages kills off almost any code size advantage you get from using them. So I ask you all, be honest to yourself; is using such a language worth it?_

Save lines of code != get work done quicker. What might appear as a paradox should be obvious: we spend more time debugging, modifying, expanding and organizing than writing.

 _IMO, imperative programming cleanly maps out to the real world._

More so does CUDA with a random number generator. You can't get more precise than quantum (yet).

 _Truth is it's so much more easier to think imperative._

That's like saying it's easier for a Chinese to speak Mandarin than for a French.

 _So, Is functional programming really worth it?_

To use, it depends. To learn, yes. One can't learn too much in life.

</comment><comment><USER15> It's hard to generalize, but I would say there are at least 8 non-obscure FP's that either hook into java and .NET libs, or have some level of stdlib and community libs (I've only used 3, and I hear C# is getting some functional aspects, but I'm not following).

\- lisps: scheme, CL esp. SBCL, clojure

\- F#, scala

\- erlang, ocaml, haskell

here's some books, freely available content, including for ocaml and haskell

<http://www.freetechbooks.com/functional-programming-f34.html>

but missing scala: <http://programmingscala.com/>

<comment><USER15> I think more-accessible concurrent programming is FP's killer app, things like riak, rabbitMQ,

here's a STM and/or actor/ message-passing vs. lock/monitor/mutex /semaphore reading list:

<http://www.tbray.org/ongoing/What/Technology/Concurrency/>

[http://www.sauria.com/blog/2009/10/05/the-cambrian-period- of...](http://www.sauria.com/blog/2009/10/05/the-cambrian-period-of- concurrency/)

[http://www.scribd.com/doc/28336206/Multicore-programming- in-...](http://www.scribd.com/doc/28336206/Multicore-programming-in-Haskell)

[http://groups.google.com/group/clojure/browse_thread/thread/...](http://groups.google.com/group/clojure/browse_thread/thread/5c7a962cc72c1fe7?hl=en)

[http://blogs.azulsystems.com/cliff/2008/09/jvm-language- su.h...](http://blogs.azulsystems.com/cliff/2008/09/jvm-language-su.html)

<http://wiki.jvmlangsummit.com/pdf/36_Click_fastbcs.pdf>

<comment><USER15> random afterthought:

\- haskell, F#, scala are state of the art as far as type inference:

[http://blogs.tedneward.com/2010/02/14/Dont+Fear+The+DynamicV...](http://blogs.tedneward.com/2010/02/14/Dont+Fear+The+DynamicVARIANTReaper.aspx)

\- scala has become a actor/message passing and STM lab:

<http://osl.cs.uiuc.edu/docs/pppj09/paper.pdf>

<http://www.stanford.edu/class/cs94si/Concurrency.pdf>

<http://github.com/djspiewak/scala-stm>

<http://akkasource.org/>

</comment></comment></comment><comment><USER16> "The world is imperative! Things have state! We do not live in an imaginary fluffy world of mathematical elegance & correctness."

I don't think that this means an imperative language is therefore better than a functional programming language. Many problems would be better solved with more 'mathy' models.

I'm not accusing you of this, but it does drive me a bit bonkers when code becomes anthropomorphized, e.g. "this guy talks to that observer, who sends a message to the account manager." This type of code is frequently not very modular and hard to maintain. A functional programming language makes it hard to think like this, and IMHO that's a good thing.

<comment><USER10> YES ! Well explained !!!

Processes map well to functional programming, but then when we look at what is being processed, it often has to have state and have specific behaviors. So choosing the best fit abstraction is critical to clean implementations.

</comment></comment><comment><USER17> Immutability, reusable and composable functions, side effect free methods are worth to use in every programming language, even in Java (I've been using functional ideas for a long time in my Java works)

</comment><comment><USER18> The company I work at uses Java as its 'main' language. In the past year my team has been increasingly using Scala for new development. One of the most useful features of Scala is the functional treatment of collections. Most of the programming we do (that everyone does?) is really just manipulation of collections, so being able to map/filter/reduce/group collections in a couple of lines of code, rather than the verbose Java equivalent, is a big win.

I don't want to weigh in on the general 'are functional languages' better debate (as I don't have enough experience of them), just wanted to share that as a data point.

</comment><comment><USER19> Do the lisp lovers ever miss compile-time type-checking? All the programming language theorists at university love OCaml and Haskell because they are really into type systems for preventing errors in code. But lisp/Clojure seems to be more popular outside the university.

Could someone that has used both statically and dynamically typed functional languages comment on what they liked and disliked from both experiences? I am interested in exploring a functional language because they seem to have cool ideas in them, but I'm not sure what road to start down.

</comment><comment><USER20> You can write functional code in perl 5 from 15 years ago... and you can do an even better job of it in perl today. CPAN has no shortage of libraries. See Higher Order Perl book (it's free too).

<comment><USER21> The "Higher-Order Perl" book by Mark Jason Dominus can be found here: <http://hop.perl.plover.com/book/>

Highly recommend to Perl & non-Perl programmers.

</comment></comment><comment><USER22> I'm a functional convert but my colleagues will tell you just how convoluted some of my code has been due my trying to shoehorn everything into a functional mold.

Many in the functional world realize that some things are akward (see Peyton- Jones's talk "Wearing the hair shirt" about Haskell).

To answer the question about loops with recursion: you seldom write recursive functions when programming functionally but instead cast things into maps, filters and reduces. Thus it's not such a big problem (and the cool thing about using map & family is that you can replace them with parallel versions quite easily). With that said, some practical functional languages provide sugar to write seemingly imperative loops.

In terms of libraries, at least Scala, Clojure, F#, CAL, Nemerle (amongst others) ingrate well with either the JVM and/or the .Net platform. You can implement Erlang nodes in any JVM language (which I grant is not as good as calling directly into the JVM from an Erlang function).

There are definitely advantages to writing as much of your code as possible to avoid side effects (obviously ignoring the odd print statement to help with debugging), since your code becomes easy to test and easy to reason about. But in real world apps you will need state management - Clojure and Scala both allow this (in different ways) and I'm sure that F# does too (though I've never worked with F#).

I think that these three languages address many (all?) of your concerns. They all have cool user communities, so give one of them a shot.

<comment><USER23> > maps, filters and reduces

Don't forget unfold! [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.1...](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.1735)

</comment></comment><comment><USER24> "1 line of LISP replaces 20 lines of C"

Might be true. But in my experience that single line takes as much time to think up as the 20 lines in C. So it doesn't really work as an argument for either.

<comment><USER25> 80% of that line's lifetime is in maintanence mode. Which option -- maintaining 20 lines of C or 1 line of lisp -- would you prefer to maintain?

<comment><USER26> That depends on whether or not you're able to comprehend the line of lisp as quickly as the 20 lines of C. Conciseness doesn't equal clarity.

</comment></comment></comment><comment><USER27> Before you arrive at a judgement of the paradigm itself be sure that you know some of the standard ways to solve problems in the field.

Some basic things which i didn't knew in the begining :

Fast persistent data structures - Coming from imperative langs, one might be hesitant to write functions which take a million elt vector, modify it and return a new vector. It is important to know that any good implementation of functional data structures will allow you to do this in constant time & speed. (independent of the size of the data structure).

Editor combinators : If you arent aware of this & are modifying a data structure with several levels of nesting, imperative assignment will seem much more convenient, ie dont translate foo.bar[8]=3, into something of this pattern barNew = editVector(foo.bar, 8, 3), fooNew=editMap(foo, "bar", barNew). It gets worse with more levels. Instead, use an editor-combinator library which will allow to you specify the path within the data-structure and a new value just as in the imperative case.

Things to know which are not strictly FP related, but nevertheless very useful - pattern matching simplifies definitions a lot, typeclasses are usually more convenient than class hierarchies.

Someone has already pointed out advice on libraries, (Clojure or any using any popular language in a functional way).

The main thing which motivates all of this - composability. It is hard to combine procedures with side effects into compound procedures because one needs to keep track of whether the component procedures are interfering with each other. FP eliminates this friction in composition.

</comment><comment><USER28> Expand your mind. It'll pay dividends later.

<comment><USER29> Exactly. Functional programming may or may not be "worth it" to use for one particular problem or another.

However, if we ask ourselves whether functional programming is worth _learning_ (as I suspect the poster is really asking), then the answer is clearly yes, if for no other reason than that's the only way you can make an informed decision as to whether it's worth applying FP to that particular problem of yours.

</comment></comment><comment><USER30> One word: Blub.

From PG's famous essay (even quoted on WikiPedia):

      > ... when our hypothetical Blub programmer looks in the other
      > direction, up the power continuum, he doesn't realize he's
      > looking up.  What he sees are merely weird languages.  He
      > probably considers them about equivalent in power to Blub,
      > but with all this other hairy stuff thrown in as well.
      >
      > Blub is good enough for him, because he thinks in Blub.

The other point is that there are pure OO languages, pure functional languages, pure logic languages, pure imperative languages, and rarely is a problem easily and comfortably expressed entirely in one pure paradigm.

But learning, properly learning a functional language gives you more experience, more ways of thinking, more techniques, more options.

But remember:

      "The dedicated real programmer can write
       ForTran programs in ANY language."

I've seen ForTran programs written in Haskell, believe it or not. You need to learn not just the language syntax, but the underlying ideas and techniques.

Then you can make the choice.

<comment><AUTHOR> Yea I've heard the blub story told over many times.

I understand functional programming perfectly well. It's just that for most of the time, it's easier to think imperatively. Yes, there are some special problems (Towers of Hanoi, Ackermann's) where functional programming is truly the way to go. But in most cases it isn't.

FYI I use gotos in my C programs when I see it's the easiest & clearest to get something done. I think you should go with what best suits the situation.

What troubles me though is when you go out of your way to do everything functional-style, even when you know there are easier ways of doing it. And the problem is this happens way too often to be ignored. Some functional programmers just push the functional idiom into everything they do, to such a point that understanding their code is like solving a sudoku puzzle.

<comment><USER31> It's not about how easy something is to do. The greatest value of functional programming is robustness. In 10 years of professional programming, I'd estimate that something around 90% of the nastiest bugs I've discovered would have been preemptively prevented by using a strictly functional style. Sometimes these bugs are just the result of poor thinking, but often they are the subtle result of changes over time that would be almost impossible to anticipate.

Functional programming imposes some constraints that range from mild discipline to mind-bendingly difficult. However in general I can't think of many constraints that provide a better power-to-weight ratio (garbage collection is probably one).

If Haskell was the dominant language and functional programming was how everything was done all the time, then I could buy into the argument that there are easier ways to do things. However as it stands, not enough people really grok functional programming (myself included) to optimally apply those principles towards the creation of robust systems in non-pure languages.

</comment></comment></comment><comment><USER32> I do believe a better language helps as much as great libraries, if not more.

Better libraries can't give you the compile-time error checking that a good compiler can. In Haskell, I half-seriously joke that "it compiles, it must be correct".

Also, modern functional languages have great library support. For instance, Haskell has a variety of libraries available, and a great FFI to C that lets you talk to any available C library. (I consider an FFI a necessary part of any generally useful language.)

And finally, "implement a multi-level loop using recursion in ML" sounds like a learning exercise, not a useful programming technique. If your code tries to recreate constructs like multi-level loops, you've done something wrong; most of your code shouldn't even need explicit recursion. Don't try to write one language's code in another language, and especially don't try to emulate an imperative language in a functional language. Learn how to do things the right way in the new language. If you try to write Java in Haskell, you'll find that it feels a lot harder than writing Java in Java, shockingly. :)

You've learned to think imperatively. Functional programming requires a different approach. It took me a long time to learn to think in Haskell, but now I feel quite comfortable with it. Having watched and helped non- programmers learn to work with imperative programming, I know that doing so requires some hard leaps as well. ("Wait, x = 5? But x = 4 earlier, so how can x = 5 now?")

</comment><comment><USER33> F# --- functional language with thousands of the most easily available languages anywhere.

It's worth it, but it's not a magic bullet. Language wars are for people who like tools better than they like workshops.

<comment><USER34> Language wars are for people who dislike watching other people seriously injure themselves in the workshop. When I advocate a language or technique, it's because I honestly believe that trying it out will make your life measurably better.

This becomes a "war" because the other side can't believe that there is something that they don't already know, and they will defend that illusion to the death. It's quite hilarious... in a sad, sad way...

<comment><USER35> > the other side

As long as there are sides there are wars. The thing to recognize is that there are no sides, that we're all in the same boat and that we all have something to contribute. Convincing someone of the validity of an argument - especially against the 'unbelievers' - takes time, patience and diplomacy, not a war.

I agree that trying out a new language or technique can make life measurably better, but if you were a FP 'die hard' that has never written a line of imperative code in their whole lives you'd probably stand just as much to gain. This whole FP is 'better' argument is getting a little tired, better means 'always better' and that is not something that I consider proven - <USER2> now.

<comment><USER34> _This whole FP is 'better' argument is getting a little tired, better means 'always better' and that is not something that I consider proven - for now._

But keep in mind, you are hearing this from people that don't know anything about FP. The person who posted the Ask HN admits as much -- "I hear FP is awesome, but I don't want to learn it. Will someone please rehash at least eighty-nine reasons why I'm missing out? Because if there are only eighty- eight reasons, I am going to smugly declare that FP is worthless."

Let's face it, there is a such thing as a dumb question, and this is one.

<comment><USER35> There are some very adept FP programmers right here on HN that do not think that FP is a silver bullet, and there are a few that think it is, including PG.

I'm reserving my own judgment until I've gotten good enough at it that I can rightly say I can make up my mind by myself without external input.

That point is probably a long way off, but any attempt at ramming something down my throat (be it IP or FP is besides the point) is met with resistance.

Arguments, not rhetoric persuade people.

If FP were obviously better and as easy to learn as some claim then these arguments would be superfluous, the fact that it isn't means that the case is not as clear cut as some make it out to be.

Let's take HN as an example.

It's a site built by a man that is considered to be God himself when it comes to functional programming, working in a language that he himself states is going to be a 100 year language.

The site suffers regular outages, has serious limitations with respect to functionality that is present but simply does not work and small changes are apparently so hard to add that it takes months for even the simplest items. The way to deal with load issues is by cutting functionality (see the length of the per user comments list, new pages and so on).

Mr. Blub himself would have fixed these things long ago and would not tolerate such a state of affairs, programming in visual basic .net if that's what it came to.

If that's the 'poster website' for FP then I think that I'm either missing something or FP isn't as good as it is cracked up to be for the environment that most of the people here are working in (web programming).

Possibly a port of HN to a more stable platform (say clojure) would remedy some of these issues, but if PG can't 'hack' it then who am I to even try.

<comment><USER34> Arc is not really FP; it just happens to be a descriptive DSL for web apps.

news.arc has its limitations, but it's not because of functional programming; it's because pg tried to do as many things "differently" as possible (in- memory data-store, no "objects", etc.). The goal of news.arc, I assume, was to play with ideas, not to build a website. The website is just a side effect.

I won't debate the merits of news.arc's design, but I will note that not everything is about "building a scalable website". There is more to life than the output of ab.

</comment></comment></comment></comment></comment></comment><comment><USER25> Short answer: yes. If your code is so imperative, then it can probably be abstracted up a bit. That's been my experience so far.

</comment><comment><USER36> Personally I love Haskell, but I did a bunch of mathematical logic at university so that might explain it :)

For practical work though I think hybrid FP/OO languages like Ruby and Scala (maybe Python and LISP too) are usually a better choice. Pure functional programming requires too much of an appreciation of higher structural aspects of mathematics, logic and theoretical computer science, to be viable for use with mixed-background teams on bigger projects.

I'm also not convinced Monads are the final word as a scalable structure for software engineering with FP. I think (hope?) research will yield something better.

But in environments where a lot of smart math/comp-sci oriented people work on a codebase, I think something pure functional can be a good choice. eg stuff like darcs (which is very algebraic), compilers, comp sci research, people at algorithmic trading firms, projects that want powerful code verification capabilities.

</comment><comment><USER37> The right tool for the job. Just like object oriented code isn't the be-all- end-all, function programming isn't either. Computers are functional! Everything is data! All actions are operations upon that data! Computers are a real world of mathematical elegance & correctness, it's all zeros and ones. It's so much easier to think functionally...

Seriously though, if you want to try both perspectives, you have to submerge yourself in a functional viewpoint until you start thinking like that. Because if you grew up thinking functionally, you'd find it easier than imperatively.

<comment><USER10> Right ON !

When you get down to the silicon there's only data and instructions to manipulate that data. Everything else is abstractions poured over the top to suit specific application domains.

</comment></comment><comment><USER38> It's more about the concepts, IMHO. Google has implemented MapReduce in C++. Which is probably why they're dominating the world while I'm playing with another language I'll never get to write anything in...

<comment><USER39> First it was in Python, now in C++. The change was for speed reasons, not because they didn't like functional languages. It is simply that functional languages don't quite meet the speed requirement that Google needs. And yes, I know that Haskell can compile some extremely fast code, but it still has not insignificant issues with memory bloat.

</comment></comment><comment><USER40> I think its like asking if French is better than English. Both will get the job done but some people claim French _sounds_ better and is the "language of love". So the point is there may be tasks for which one language is more suitable. I have used both and learning FP after learning IP was a bitch. But I am an engineer not a programmer, so take that for what its worth. I did find that I got a deeper understanding of mathematics by learning FP so that was definitely a benefit and possibly a clue as to what types of tasks FP is more suitable.

</comment><comment><USER41> "From experience I can tell you the lack of libraries in these languages kills off almost any code size advantage you get from using them. So I ask you all, be honest to yourself; is using such a language worth it?"

As someone who has programmed extensively in Arc... you're right. The language is very pretty and very concise, but to get things done, I find myself going back to Python (and to get things done quickly in the execution sense, C++). If only Arc weren't so slow and had more libraries...

</comment><comment><USER42> I cannot say if this is generally true for functional languages but a good comparison of the efficiency of erlang as compared to java can be found by comparing the code footprint of ejabberd, an erlang xmpp server, and openfire, a java xmpp server. The servers are functionally similar yet the source code footprint of ejabberd is approximately 300 files at 5MB and openfire is approximatley 4000 files at 100MB. The erlang server has more then an order of magnitude less code.

</comment><comment><USER43> It's certainly worth learning, but I make no secret of my fondness for having local state when programming. It's critically important to consider the breadth and quality of libraries available for your particular task as well as the tools available. With eclipse+maven+continuum+junit+jprofiler I can generate a hell of a lot of java very quickly, even if I didn't have access to my library of code segments.

</comment><comment><USER44> Lots of comments, so I'm going to remark on one thing in particular: functional programming really makes static typing shine: the types make putting functions together like legos; really obvious when you're very clearly doing it wrong, whereas imperative style is all about saying "do this" and then "do that", which is not something that the type system can help you with.

</comment><comment><USER45> _The world is imperative! Things have state! We do not live in an imaginary fluffy world of mathematical elegance & correctness._

Yes, all true. Also, the world is extremely concurrent, made up of billions of independent actors sending each other messages.

That's why we need to use Erlang, an imperative, stateful, mathematically inelegant language.

</comment><comment><USER46> It's not brain brain racking once your brain has adjusted to the slightly different mode of thinking.

</comment><comment><USER47> Yes, it's worth it.

Haskell: where the great ideas are coming from, although early implementation decisions have made those a bit painful to use (language extensions). It's probably the most "mind-bending" language out there so I recommend it for growth.

Ocaml: excellent and very simple language, with a kick-ass garbage collector. The worst thing about it is the associated build system, OMake, which is almost as ugly as Make. Most people who are turned off by Ocaml are actually turned off by the build environment or by the Ocaml team's resistance to improvement. (The standard libraries are really terrible; if I recall correctly, List.map isn't even tail-recursive).

Clojure: Great compromise between power of language and library support, because it runs on the Java Virtual Machine. It's a Lisp, so it's dynamically typed. It also has some warts related to its Java roots; for example, 43 and (biginteger 43) count as separate keys in a map. However, these are easy to work around.

<comment><USER48> With regards to List.map: List.rev_map is also in the standard library and is tail-recursive, so you can just do List.rev(List.rev_map l) to tail recursively map. Just had to defend Ocaml a little :)

</comment></comment><comment><USER49> No functional programming is just something people pretend to like to make themselves feel smarter than others. Notice there are no libraries for functional languages - there is a reason.

Also, pg and his "blub language" argument is lame. All languages that are Turing complete are equivalent. Everything else is syntactic sugar. Pick what you like.

<comment><USER50> Right, so, any two things that get you from A to B are identical? Unix isn't more powerful than Windows; You can outrun a cop-car in your Prius; Apple pie is apple pie?

There's a lot more that goes into doing a job than just the physical possibility. In the context of programming there's maintainability, developer time spent and a million other factors. The blub argument, specifically the part about 'looking up', is quite literally talking about you.

<comment><USER49> Look man, all Im saying is what language you should use is matter of personal preference. If you prefer Windows to Unix or vice versa more power to you. Dont make people feel inferior just because you like one tool better than what they use.

<comment><USER50> The only thing I would make someone feel inferior for is using a tool that's wrong for the job just because of 'personal preference'.

I write Ruby and JavaScript as easily 99% of my work, does that mean I never pick up Erlang or Scala or even C? Of course not, to do that out of stubbornness or some perceived loyalty to my platform would make me a very poor programmer indeed.

Besides, that's _not_ what you're saying. Your comment was pretty well flat out saying functional programming is useless and people only do it to look smart. That, clearly, is a load of crap.</comment></comment></comment></comment>


How to turn cheap MD380 digital walkie talkie into analog police scanner. - <AUTHOR> http://phasenoise.livejournal.com/4640.html <comment><USER2> I live in a big city and I set up a police scanner recently. It invokes a mood. It distills a spirit of night and cities that never sleep. Urgent events from a police scanner play upon a feeling of social connectedness.</comment>


Ask HN: Ruby/Rails or Groovy/Grails? - <AUTHOR>

Hey Guys, We are building a web app from ground up. We are using Neo4j for data management. Should we go with Ruby on Rails or Grails? ROR resources are far and few. But Java people are in abundance here. Im hoping they will be able to quickly pick up Groovy/Grails too.
Also, we will be building many web apps in future too. So from that perspective, which tech stack do you think makes more sense? Thanks. <comment><USER2> > ROR resources are far and few

Not really, ROR community is very active, there's millions of gems that do what you need, and there's plenty of websites that teach ROR (railcasts.com, ruby-toolbox.com,...), you can find help on IRC almost instantly. There's as much resources as you need, almost anything that you need to do has probably already been done and a tutorial/gem written.

<comment><AUTHOR> Sorry, by "resources", I meant "experienced ROR developers" and thats a statement specific to my city- Kolkata, India. Wish I was in Chicago or San Francisco. :) Indeed, online help is available, but its time consuming if the developer doesnt have sufficient experience. All large tech companies in India have Java practice, so Java developers are in abundance, and usually have better coding habits too. This may not be true in some other places.

</comment></comment><comment><USER3> I have built many java/grails based web applications in the past 2 years and I would agree that the support for grails/java is much better. The community is pretty active and the fact that grails allows you to fallback to java and runs in a time tested environment(ie the jvm) is an asset in itself. The spring framework which is the backbone for grails is also widely supported and frankly blows RoR out of the water when it comes to documentation, support, experienced developer base. I would definitely support a grails/Java stack compared to a RoR stack hands down.</comment>


Studies show Alzheimer's occurs more often in people exposed to polluted air - <AUTHOR> https://www.scientificamerican.com/article/the-new-alzheimers-air-pollution-link/ <comment><USER2> A lot of people - who've become inured to the air pollution they live in - have suddenly seen what clear skies and clean air looks like. Air pollution is a huge public health issue, with all sorts of deleterious effects.

Hopefully, when business restarts and the air goes back to being mucky poison in many places people will think a little more about what has been traded off for the economic benefits of cities and industrialisation.

<comment><USER3> This is a polarizing opinion, but as someone who exclusively drives electric I firmly support phasing out, and eventually banning consumer gas vehicles. A more realistic approach to do so would be to increase incentives - in the form of rebates for both new and used vehicles, as well as rebates for charging infrastructure.

<comment><USER4> This is a more polarizing opinion, but as someone who doesn't own a car I firmly support removing private cars from many cities altogether. Make anyone who wants to come in or out park outside the city and take public transport/bikes within the city. There are so many benefits including:

\- Greatly reduced air and noise polution

\- Much more pedestrian friendly, walkable streets

\- Put the enormous amount of land reserved for parking in these expensive areas to better use

\- Fewer pedestrian deaths

If you look at experiments like Barcelona, these types of changes usually result in resounding success.

<comment><USER5> Both your comment and the one you're replying to are perfect examples of people advocating for the banning of things that _they don 't want to do_, which I always find unconvincing.

It's easy to advocate to ban a thing if you don't do the thing! You see all the negatives of other people doing it without receiving any of the positives of doing it yourself.

You find it easy to ban because you would not be personally affected.

Personally, as someone who doesn't own a pet, it would be easy for me to firmly support the banning of all pets from many cities on the basis that they poo in public and attack people. That would be easy to support not because it's the right thing to do (which it might be!), but because I don't own a pet.

<comment><USER6> It takes effort to not own a car. Not owning a dog requires no effort.

<comment><USER7> >It takes effort to not own a car

Much less true in some European cities though. I don't have a car and I can't say it's taken effort to not have.

</comment></comment></comment></comment></comment></comment><comment><USER8> Given the current COVID-19 crisis, this statement really staid out

"But chronic exposure to polluted air can result in the overproduction of proinflammatory cytokines and chronic inflammation that leads to nerve cell death."

As many readers are probably aware, overstimulation of cytokines seems to cause the dreaded second phase of deterioration in covid-19 patients.

</comment><comment><USER9> A bit tangental, but one of the effects of the COVID situation has been to show me how dirty the air was previously. I live in a pretty clean place to begin with, but the sky has never been so blue. It's usually crossed with jet contrails, but it also usually has a bit of a haze that I hadn't really noticed until it was gone.

On a similar note, I find my stress levels are significantly different when walking in city blocks where cars are banned vs walking on sidewalks alongside any kind of traffic. Double the stress, if you have kids with you.

<comment><USER10> Genuinely curious - is it really more clean though? Or is it just more visibly clear to humans (obviously, that is due to a reduction in pollution, but just how much?)

I'm just basing this thought off of waterways in Italy and such. When all the pictures of "unpolluted waterways" were going around... it's not that there was a drastic reduction in pollution. It's just that the silt hadn't been disturbed by boats/other man made things.

 _Very_ huge issue in diving - some famous cave divers have claimed that's typically the cause of their most near-death situations.

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

<comment><USER11> It is, you can probably check the plots from your local air pollution measurements.

(Of course, in isolation that means nothing since the values are influenced heavily by weather, eg wind direction, but in aggregate and in comparison to the past you can interpret it.)

It is also especially obvious in satellite images (for those pollutants that can easily measured by satellite). Eg. the NO2 concentrations have gone down significantly in many areas of the world.

eg.

[https://www.space.com/nasa-satellite-air-pollution-us- northe...](https://www.space.com/nasa-satellite-air-pollution-us-northeast- coronavirus.html)

but you can easily look for more.

</comment></comment></comment><comment><USER12> We are under siege from all sides. The air we breathe, the food we eat, the house in which we live, noise polution, stress, lack of real comunities.

<comment><USER13> What's your plan?

<comment><USER14> One long term solution is to have more self sustaining communities. Local food, local business and electric vehicles run from local renewable energy (wind/solar, still connected to the grid for efficiency).

That's great and all but only weird eco people like me and the commenter above you would actually want to live there. There are massive tradeoffs. First there are all the usual tradeoffs of not living in a city but there is also less variety of food due to reduced imports. It would take longer to get specialist goods and services and travel time to say a medical specialist would be longer. The other issue is that it's hard to have a cohesive community if you have the wrong ratio of different existing cultures. If you have half one culture and half another you get a fractured community. You need either a massively mixed diverse community or a monoculture. I'd opt for the former with an emphasis on maintaining diversity instead of sliding into a grey goo world culture. But even then I don't know because I don't study those kind of social issues.

The cultural problems, education and attitude problems are much harder to fix than the technical challenges. The draw of shiny stuff and tribalism is too much. That's where I don't think anyone has a solution. I just hope the next generation can figure that one out.

<comment><USER15> Shipping need not have a significant environmental impact. Electric trains to electric trucks works. Boats need minimal fuel and can supplement with wind and solar power.

</comment></comment></comment></comment><comment><USER16> These links are great to understand and discover. Smart policy makers would start integrating these hidden costs and adding them as taxes to products/processes that contribute to PM2.5. To make it politically viable, do it the Canadian way and give the tax payments right back to the tax payers. It's essentially a free way to help society make better decisions.

</comment><comment><USER17> One thing is to add a HEPA filter to your dwelling's HVAC system.

<comment><USER18> Ahh, people with HVACs, how I envy them. None available for an apartment, unfortunately. There are several things you want covered, and nothing short of a full HVAC covers them:

\- heating/cooling

\- ventilation (bring air from outside to lower CO2 and VOCs

\- ideally, heat recovering system for ventilation

\- air purifier for P10, P2.5, pollen and so on

\- if I could pay extra for a professional humidifier that doesn't need refiling, I definitely would. Not a must, but a VERY nice to have.

You can find aircons with "hepa" filters (I wouldn't trust them to cross the street though). You do NOT find aircons with ventilation. Yeah, they all say they do ventilation, but that just means they work as a fan, they do not bring air from the outside. You can find air purifiers, even very good ones, but they purify the air already inside - open a window and it's full reset. Plenty of good air humidifiers, if you have the patience to refill them every two days.

I sometimes fantasize what it would be like to cobble a system together. Most of what's missing is a heat recovery ventilation, but that's awkward as fuck to add in an apartment.

<comment><USER17> One thing you can do is:

1\. get a box fan

2\. get a furnace HEPA filter

3\. tape the filter over the fan

4\. turn it on!

<comment> kube-system You can skip step 3. The negative pressure on the inlet side of the fan is plenty enough to hold the filter to the side of the fan. The common square box fans sold in North America work perfectly with a 20x20 furnace filter.

</comment></comment></comment></comment><comment><USER19> I really don't know how to trust such research anymore. Delhi and nearby areas have serious air pollution Issue (Actually large part of the north India belt going upto Pakistan has a problem with dusty air, especially in winters), but Alzheimer's is not a serious issue here.

<comment><USER20> What's the life expectancy in Delhi, and for what fraction of their lives have old people in Delhi been exposed to the high levels of air pollution?

<comment><USER19> See this is the slight, unnecessary, condescending attitude in west. Life expectancy in India is fine in people who can afford ok food and place to live. There's a lot of poverty and poor people seemingly have lower life expectancy, which lowers the avg. And yeah pollution would have an effect, but it's definitely not like people die early so we don't have data on Alzheimer's. My grandparents lived past 80, and only one of them took some diabetes medicine. Otherwise they weren't dependant on drugs till their last years.

</comment></comment></comment><comment><USER21> I wonder if this is conflating industrialization's pollution with the actual diagnosis of Alzheimer's. The rural psychologist shortage is well known. We saw similar crank claims for autism but it wasn't rising, just being better diagnosised.

</comment><comment><USER22> I wonder whether people who have lived most of their life in, say, Glasgow would show lower incidence of Alzheimer's, if it's linked to PM2.5.

I use AirVisual and randomly added a few cities in addition to my current location. Among those I have Glasgow, which is reliably showing very green readings of US AQI (often 10 or less).

</comment><comment><USER23> Nicholas Nassim Taleb has a nice YouTube clip that shows how this kind of studies comes about.

The Randomness of Correlation and its Hacking by Bigdataists [https://youtu.be/D6CxfBMUf1o?t=208](https://youtu.be/D6CxfBMUf1o?t=208)

</comment><comment><USER24> Certainly many in their 50's would of been exposed more to lead from car emissions until the shift to reduce that took place. Which is an aspect when looking at peoples health as it is not just the environment they live in now, but also the past.

</comment><comment> kalium-xyz Better train networks when?

</comment><comment><USER25> Remember five days ago when herpes was linked to Alzheimers?

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

<comment><USER20> It's almost as if neurodegenerative diseases are poorly understood and can have many causes, because we're not even sure that what we're calling "Alzheimers" is a single disease.

</comment></comment><comment><USER26> Its kind of funny but also terrifying how the human race is ending itself.

</comment><comment><USER27> I don't think we really need anymore evidence PM2.5 is bad?

I don't think you should need this article to change your mind on anything?

I think we are by far at the stage were we need influencers to be paid to start pushing it.

Clean air in the house, which will then move to clean air outside, since the rich also have to walk outdoors. (And by rich I mean Westerners visiting developing countries, for example)

</comment><comment><USER28> Yet moderate smokers of 40+ years have no higher risk than non smokers... Strange (just ask my 96yo grandmother who smoked for 42yrs and is still sharp as a pin mentally)

There are a lot of other bad things that the people in Mexico city are exposed to. Why blame Alzheimer's on air pollution???

Oh, wait... thought Herpes got in the brain and caused it...

Scientists don't have a clue what really causes it (yet they have many clues). Probably 1,000 different things which affect 1,000 different people , well differently.</comment>


Where to host .NET applications? - <AUTHOR> http://seroter.wordpress.com/2013/08/16/where-the-heck-do-i-host-my-net-app/

<comment><USER2> Missed the real answer: In your cage at the local colo.

The sweet spot for the Microsoft stack is one beefy server. While you can rent that from a cloud provider, you're just plain always going to get a better deal by building your own box and dropping it in a datacenter.

It's not anywhere near as daunting as it seems to do so, and it will run you about $400/month all in, amortized out over a 3 year box lifetime even including licenses.

That'll get you the firepower of a medium sized cluster of Linux gear running your open source stack of choice, without having to deal with a dozen virtual machines spinning up and down to deal with load. It'll just handle as much traffic as you can throw at it, up to the point where you're big enough to simply pull a half dozen of your hundred devs off what they're doing to help scale you up.

That's probably the reason you don't see many .net paas companies around. For the most part, they're not the right tool for the job.

<comment><USER3> That's a good solution, until you need to do a major upgrade, or when you need to hire additional capacity for a temporary spike (say a campaign). It's only a solution if you are OK with occasional downtime - because you'll need to stop everything to apply service packs.

With something like EC2, you just spin up a similar box with newer patches applied, redeploy your application, load-balance between your versions and just delete the old one when you are happy.

I cannot imagine going back to colo. Or even physical boxes. If I were forced to have a physical box, the first thing I'd do would be to deploy everything on virtual machines or containers inside it.

<comment><USER4> If you're willing to spend the cash, 3 servers can offer you a hot failover with a spare staging server. Of course with just 3 servers, you would have to accept failing over to a different version while you update the 2nd server.

</comment></comment></comment><comment><USER5> Interesting list. Though I didn't see much consideration to Mono on Linux, which is my personal deployment strategy.

It would have been nice if it was compiled in to a larger comparison table so I could see it all on my widescreen display, but an interesting read nonetheless.

<comment><USER6> I've been trying for weeks to get a Mono environment that will host an MVC4 application (minus async/await). Any suggestions?

<comment><USER5> I haven't tried MVC4 yet, I was waiting for async support in Mono.

Personally I run everything on a VPS, because I'm not worried about scale. If I was running something larger I'd probably go with Azure.

<comment><USER7> can't do Select Into in Azure.

<comment><USER8> Even with the new dedicated Azure SQL Always-On instances?

<comment><USER7> i'll check.

<comment><USER7> After some googling and stackoverflowing and msdning, I think any version of SQL on azure does _not_ support "select into". I also found a request to have that added, and in January of 2013, it was closed as "won't do". ( see [https://connect.microsoft.com/SQLServer/feedback/details/776...](https://connect.microsoft.com/SQLServer/feedback/details/776409/add- select-into-to-sql-azure) )

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> Happy to see some .NET posts on here! Also, comments that doesn't include bashing over the evil M$ and how they will rip your startup apart.

Very nice list, i was not aware of many of these solutions. I have used Azure for my private sites before, and it is a really nice solution.

Scott Hanselman wrote an interesting article, comparing Azure Web Sites to your $5/Month Host. Read it here: [http://www.hanselman.com/blog/PennyPinchingInTheCloudWhenDoA...](http://www.hanselman.com/blog/PennyPinchingInTheCloudWhenDoAzureWebsitesMakeSense.aspx)

</comment><comment><USER10> I've been using appharbor for a long time and I've been very happy. The recent additions of spdy and web sockets is really great....they've been very active in integrating with other providers. It is pretty shocking how easy it is to spin up a $10/month 10GB sql server instance. And in general, it 'just works'.

</comment><comment><USER11> Interesting, thanks for sharing. I would have just thought "Azure and done" but it's nice to see that there are other options in this ecosystem.

</comment><comment><USER12> We host Cloud Cellar on Windows Azure and have had positive experience doing so. PS: The BizSpark program is really good for .NET developers - use it!

<comment><USER13> BizSpark has to be one of the most under promoted feature by Microsoft. I think its absolutely fantastic and it boggles me why they don't make more noise around it...

</comment></comment><comment><USER14> The main problem with .NET is the higher price due to the Microsoft tax. That said, it has advantages over the free stacks.

<comment><USER15> At my previous company, despite being a .NET shop, our main problem was not the cost--even though SQL Server is outrageous. It was the difficulty in implementing continuous integration and deployment. RDP is not a scalable solution. Implementing Chef on Windows was a major pain. The insanity of having to install VS on the build servers just to get automated builds of web apps. _MS, what were you thinking with making VS a dependency for building websites?!_

I know TFS offers a lot of the benefits we were looking for, but we were committed to git. (This was before they added git support in TFS) We were also burned by a lot of bad MS versions of things in the past, so were weren't eager to dip our toes into TFS.

<comment><USER16> RDP isn't a scalable solution. I'd recommend PowerShell for all that. For the build server, you just needs msbuild which i think is available on the .net SDK. For CI, i've used TeamCity in the past which worked well. Staying away from TFS is a good a decision. On windows boxes i recommend mercurial because tortoiseHG is so nice, really miss it ever since i moved to developing full time on a mac.

<comment><USER17> Yes. PowerShell, PowerShell, PowerShell a thousand times. I think that _every_ .NET developer should be functional in it. PowerShell can do everything they already know from the .NET BCL, AND run every command line tool they've ever used, AND every server administration task you can imagine. And it's extensible with .NET. I've personally witnessed some pretty awesome one-click deployments with PowerShell, including to Azure with zero-downtime using the MS-supported cmdlets.

<comment><USER18> Can you share anything about that one click (nothing to do with one-click™ I'm sure) deployment?

<comment><USER19> We have a number of one-click deployments running in TeamCity. It's honestly very straightforward. If you're deploying to Azure you can use either the Powershell or node.js libraries to talk to their API. We use powershell. Basically, we compile using msbuild, package the artifacts into an Azure package, and deploy it via the API. Doing zero-downtime deploys to Azure is a matter of how you use the API. You can substitute EC2, another cloud, or traditional hosting and while the tools and APIs get progressively less powerful, it's all doable. At the simplest level you may just use msdeploy as your "API."

I'm a huge believer in this kind of automation. We make extensive use of TeamCity to drive it. In addition to builds, automated tests, and deployments, we also use it for release promotion and doing other housekeeping tasks like cleaning up data from QA environments, restoring testing databases, etc.

</comment></comment></comment></comment></comment></comment><comment><USER20> Here are some more suitable (reliable and inexpensive) options (based on first-hand experience and research/testimonials):

VPS: AppliedI ([http://www.appliedi.net](http://www.appliedi.net)) or UltimaSystems ([http://www.ultimasystems.net](http://www.ultimasystems.net))

Cloud: Azure or AWS (or even DigitalOcean or Linode if possible to run under Mono)

Dedicated: ReliableSite ([http://www.reliablesite.net](http://www.reliablesite.net)) or OVH Canada ([http://www.ovh.com/us/](http://www.ovh.com/us/)) or Hivelocity ([https://hivelocity.net](https://hivelocity.net))

<comment><USER20> Few more, with SSD RAID (found from recent survey for an ASP.NET app): Dediserve ([http://dediserve.com](http://dediserve.com)), RamNode ([http://www.ramnode.com](http://www.ramnode.com)), DotBlock ([http://www.dotblock.com](http://www.dotblock.com))

</comment></comment><comment><USER21> Curious if anyone has experience running .NET applications under mono on Heroku?

<comment><USER22> You probably want to see this comment:

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

</comment></comment><comment><USER23> +1 for Azure or AWS</comment>


Ask HN: People to follow on Twitter? - <AUTHOR>

Hi all! I just made a Twitter account and want to fill my feed with the thoughts of experienced startup and marketing professionals. Who should I be following? Thank you! <comment><USER2> Personally, I find Google+ to be a much more interactive and enjoyable experience, especially for tech oriented people. On Twitter I follow Tech Crunch and PandoDaily.

<comment><AUTHOR> fair enough. who would you recommend on g+?

</comment></comment><comment><USER3> Most of the time when you come across a post on YC, that blogger will have an @name at the bottom. Follow them if you liked what they had written.

</comment><comment><USER4> I saw Paul Graham on there once, but I don't use Twitter so I don't follow anyone.

</comment><comment><USER5> @lefnire @notch @scottksmith95 @zedshaw @twbootstrap</comment>


Can you be happy and truly ambitious? - <AUTHOR> One definition of happiness is being at peace with oneself no matter the situation. But a lot of people who make a large difference in the world/lives of others were deeply unsatisfied/egotistical hence why they even pursued the change they did.<p>How do you reconcile the two, or are there examples in business one can point to that have? <comment><USER2> I'm only 28 so I don't know all the answers... but I think you can be a sort of "relaxed ambitious" where you are very content with your life as it is, and any drive to achieve is driven by curiosity moreso than pure ambition of power or ambition of other peoples' approval.

</comment><comment><USER3> IMHO Happiness is a trap as an end in an of its self. Instead, look to serve others.

Why do you want to be happy?

</comment><comment><USER4> Needs an "Ask HN:" in the title.</comment>


Industrial-Strength Natural Language Processing in Python - <AUTHOR> https://spacy.io/ <comment><USER2> Hi all,

Ironic timing here! We're just preparing the 1.7 release, which has a lot of nice changes, including the option of a much smaller model for English (50mb), to help people test faster.

This means that if you install the library right now, you'll have to redownload the data once the new version is released.

So, maybe wait until tomorrow to get started? Definitely our most ambivalent front-paging yet!

</comment><comment><USER3> Not sure exactly why this was posted today, since spaCy has been around at least a couple years, but - spaCy is a great tool, and I have a ton of respect for Matthew Honnibal, the main developer.

Coincidentally, I wrote a blog post [1] that went up just this morning that, in part, compares spaCy with the other giant in the Python NLP ecosystem, NLTK. TLDR - I think that, right now, the majority of users are better served by spaCy than NLTK.

[1] [https://automatedinsights.com/blog/the-python-nlp- ccosystem-...](https://automatedinsights.com/blog/the-python-nlp-ccosystem-a- short-and-very-opinionated-guide)

<comment><USER4> Nice write up!

</comment></comment><comment><USER5> It only supports English and German. However you can try add other languages here [https://spacy.io/docs/usage/adding- languages](https://spacy.io/docs/usage/adding-languages)

<comment><USER2> We've got tokenizers and language data (e.g. stop lists) for a number of languages now. The statistical models for these will be coming soon.

<comment><USER6> but not tomorrow? If there are nltk packages for a language how difficult is it to move to Spacy?

I'm mainly interested in the Danish language right now, although I might also have a use for Italian so it would be nice to know so as to budget my time.

</comment></comment></comment><comment><USER7> Ask HN: Could you suggest a fast library for converting documents into a sparse matrix representation (e.g., COO or CSR) in any programming language? I'm guessing C beats most of the implementation? But there is also the issue of efficient n-gram hashing/indexing.

<comment><USER2> Scikit-Learn's text vectorizer stuff is good. In spaCy you can do:

        import spacy
        import numpy
        from spacy.attrs import LOWER, IS_STOP

        nlp = spacy.load('en')
        doc = nlp(u'The quick brown fox...')
        array = doc.to_array([LOWER, IS_STOP])
        content = array[1, numpy.nonzero(array[0])]

Personally I normally work in Cython when it needs to be fast. I find this more productive and more readable than trying to guess what numpy operations will be fast. So I would be doing:

        cdef void get_tokens(uint64_t* content, Doc doc) nogil:
            for i in range(doc.length):
                token = &doc.c[i]
                if Lexeme.c_check_flag(token.lex.flags, IS_STOP):
                    content[i] = token.lex.lower

</comment></comment><comment><USER8> Does spaCy have a C# .NET wrapper, or can it be used from other languages/frameworks through a REST API?

I'm using the CoreNLP C# wrapper, so I'm wondering if something similar (.NET Core compatible) is available/doable for spaCy?

</comment><comment><USER9> NLTK is pretty good as well.

<comment><USER10> I find That SpaCy is much more "plug and play" or "fire and forget".

NLTK is better as a learning tool and for messing around. SpaCy is better if you just want something that "just works".

</comment></comment><comment><USER11> Really great tool, I currently work on a project that makes use of Spacy. Can't wait to push it into production.</comment>


We know the city where HIV first emerged - <AUTHOR> http://www.bbc.com/earth/story/20151119-we-know-the-city-where-hiv-first-infected-a-human <comment><USER2> Simian AIDS was discovered after human AIDS. How do they know the jump didn't occur in reverse?

Here is the first report of simian AIDS: "Examination of the species-specific annual mortality rates of macaques at the center during the previous 4 yr showed a significant increase in deaths in 1980 and 1981" [http://www.ncbi.nlm.nih.gov/pmc/articles/PMC393899/](http://www.ncbi.nlm.nih.gov/pmc/articles/PMC393899/)

Also, it is convenient they do not share the mcmc traces. Based on these settings I bet they were ugly:

>"For each data set, at least 3 MCMC chains of 250 million steps were computed. Parameters and trees were sampled every 50,000th step. Samples were combined with LogCombiner (77) and between 10 to 30% of each MCMC chain was discarded as burn-in. MCMC mixing was diagnosed using visual trace inspection and calculation of effective sample sizes in Tracer (77). We report the posterior mean and 95% Bayesian credible intervals for evolutionary parameters."

[http://dx.doi.org/10.1126/science.1256739](http://dx.doi.org/10.1126/science.1256739)

Another thing, they write:

"Our estimated location of pandemic origin explains the observation that Kinshasa exhibits more contemporary HIV-1 genetic diversity than anywhere else"

This is totally circular. As shown in their figure S2, they used genetic diversity in a region as an indication of earlier presence.

<comment><USER3> My limited understanding is that once discovered scientists found the families of simian viruses that demonstrated evolutionary and divergence that cannot be explained in going the other way or the timeframe of human hiv.

See [http://news.nationalgeographic.com/news/2006/05/060525-aids-...](http://news.nationalgeographic.com/news/2006/05/060525-aids- chimps.html) [http://www.ncbi.nlm.nih.gov/m/pubmed/8026477/#](http://www.ncbi.nlm.nih.gov/m/pubmed/8026477/#)

There is a video documentary that I watched in the last couple years that I was really hoping to find again and link to.

<comment><USER2> Thanks. I wonder if this analysis will be reproducible though (they don't mention any parameters...):

>"Phylogenetic analysis Phylogenetic relationships were estimated from comparisons of predicted protein sequences. Sequences were aligned using CLUSTAL (Higgins and Sharp, 1988, 1989). Evolutionary distances between all pairs of sequences were computed using Kimura's empirical method (Kimura, 1983; eqn. 4.8) to estimate the number of superimposed amino acid replacements; sites at which there was a gap in any sequence in the alignment were excluded from all comparisons. Phylogenetic relationships were estimated from these distances by the neighbor-joining method (Saitou and Nei, 1987). The reliability of branching orders was estimated by the bootstrap approach (Felsenstein, 1985). These methods were implemented using CLUSTAL V (Higgins et al., 1992).

Nucleotide accession numbers All sequences were submitted to GenBank and are available under accession numbers U03994-U04018."

It looks like those sequences are a mixture of the various proteins (env, pol, etc) so it would take some time to figure out which is which. I don't feel it like right now. It seems like getting the sequences from genbank and then aligning using default params with clustalw would be closest to their method. If someone wants to do it: [http://www.ncbi.nlm.nih.gov/genbank/](http://www.ncbi.nlm.nih.gov/genbank/) [http://www.genome.jp/tools/clustalw/](http://www.genome.jp/tools/clustalw/)

</comment></comment></comment><comment><USER4> There's an excellent Radiolab Podcast that covers the same study, I'd highly recommend listening to it:

* [http://www.radiolab.org/story/169879-patient-zero/](http://www.radiolab.org/story/169879-patient-zero/)

<comment><USER5> There's also an updated version which briefly covers recent Ebola outbreak: [http://www.radiolab.org/story/patient-zero- updated/](http://www.radiolab.org/story/patient-zero-updated/)

<comment><USER6> Thanks! I didn't know about the updated one. The original is one of my favorite episodes.

<comment><USER7> Same here, although the description of chimps hunting was a bit disturbing.

</comment></comment></comment></comment><comment><USER8> It's a morbid irony that HIV emerged from "Leopoldville" considering the other atrocities unleashed on Africa by Leopold II.

<comment><USER9> [https://en.wikipedia.org/wiki/Leopold_II_of_Belgium](https://en.wikipedia.org/wiki/Leopold_II_of_Belgium)

If anyone else is curious like I was.

<comment><USER10> Wow, on the order of 10 million dead - half the population. That's Hitler- level genocide right there.

<comment><USER8> Workers who were short of the quotas might have their hands severed. Leopold II is a forgotten monster. Arguably it birthed the international human rights movement.

</comment></comment></comment></comment><comment><USER11> tl;dr, Kinshasa, Democratic Republic of the Congo (then known as Leopoldville)

<comment><USER12> There's actually more content in the article. It's far from click-bait.

After reading it I think that the exact city is the least interesting fact they have to offer.

<comment><USER13> Click-bait titles dont' mean the article is crap. It's a good article with a clickbait title, plain as that. Clickbait is when some information is left out of the title in an obvious way such that readers will click in pursuit of that piece of information, rather than clicking it in pursuit of expanding on the headline.

</comment></comment></comment><comment><USER14> The book "The history of AIDS" was a fascinating and accessible read on the subject of the spread of HIV, from it's origins to today.

<comment><USER15> Definitely, highly recommended book. Learned of it from Quammen's "Spillover"[0] (a great — if somewhat terrifying — book in its own right) mentioning it as a source in the AIDS chapter and it was a fantastic read. Note that Quammen released his own AIDS-history book this hear, "The Chimp and the River"[1] (haven't read it yet though I intend to).

Direct link to Jacques Pépin's "The Origin of AIDS" on amazon: [http://www.amazon.com/dp/0521186374](http://www.amazon.com/dp/0521186374)

[0] [http://www.amazon.com/dp/0393346617/](http://www.amazon.com/dp/0393346617/)

[1] [http://www.amazon.com/dp/0393350843/](http://www.amazon.com/dp/0393350843/)

</comment></comment><comment><USER16> Is HN becoming "spammy"? In this case, would it hurt to include the name of the city in the title?

</comment><comment><USER17> It's not really clear to me:

Are they saying that the jump happened in a large metropolis ?

Or that Kinshasa was the first large city in which HIV became an epidemic ?

<comment><USER18> The first large city.

</comment></comment><comment><USER19> Belgian control of the Congo was rife with pretty extreme abuse -- the obvious, often horrifying consequences of conquest. But the influx of ambitious businesspeople and capital which they claim started the wider outbreak of HIV, is a curious case. Often people will hand-wring about vague cultural factors, but this seems like one of the most concrete major international disasters caused by rapid gentrification and international investment.

In many ways, whether you support e.g. more direct foreign investment areas in India and China or not, I'd prefer the conversations about costs to be as well formulated as this (I also suspect free trade and foreign investment in China and India has done a lot more good than HIV has done bad, even if you just count lives saved).

<comment><USER20> _rapid gentrification_ of __Congo __

whuhh???

Just 'caus it had a CIA sponsored coup, doesn't mean things got any better.

<comment><USER21> This would be the first time I've seen someone suggest gentrification makes things better.

</comment></comment></comment><comment><USER22> Kinshasa, the capital of the Democratic Republic of Congo.

</comment><comment><USER23> tl;dr - Kinshasa.</comment>


Show HN: CLI-pto – A CLI note-taking app with basic encryption - <AUTHOR> https://github.com/Ozencb/cli-pto <comment><AUTHOR> This is not supposed to be a super strong program that can only be hacked with super-duper computers in million years; just something to keep your notes from curious eyes. I am yet to learn tons of stuff and go a long way, so feedbacks(especially about the encryption) and contributions are welcome :)</comment>


Paulina Sygulska on: How to network effectively - <AUTHOR> http://swombat.com/2011/2/24/paulina-sygulska-how-to-network-effectively

<comment><USER2> The Paulina article links to a blog post by Jacques. here's the HN discussion of that post:

<http://news.ycombinator.com/item?id=2245063>

<comment><USER3> I'm actually reading _your_ book right now (took a break to check HN). It's very good, quite impressive really. I've been around a while and I'm learning quite a bit from it. Nice work!

[EDIT: oops, as RiderOfGiraffes points out, I have mistaken his identity]

<comment><USER2> That's cool.

No, wait, my book? I haven't written a book.

Have I?

<comment><USER3> So sorry- I confused your handle. This site is such a PITA with my iphone that I didn't trouble to double-check (and the app I bought for it is crashing every time I try to post). After reading your comment I went to a computer and verified that I had, indeed, fucked up.

But, anyway, since I brought it up, the book I'm checking out is here: <http://exilelifestyle.com/learn-network-better/> It contains a similar point- of-view as the article here, but, of course, has a lot more depth. Networking is something I'm very bad at, and so I'm interested in learning more about it. I don't want to make a career out of it. I just want to be able to do it well in the appropriate situations. I'm pretty much a social clod left to my natural state.

</comment></comment></comment></comment><comment><USER4> Great post, worst thing about networking is learning howto approach first. I read somewhere best way to train is to talk to people in a lift. If it all goes pear-shaped at least you have have a few seconds

<comment><USER5> Once I set myself a challenge of asking "How are you feeling today?" to at least one strange person on the tube a day. Good for getting out of your comfort zone as a networker :)

</comment></comment><comment><USER6> One more tip: You are networking with the people in the room, not with the ones on your mobile phone.

</comment><comment><USER7> This makes sense on one level, but it's confusing on another. As a recent transplant to the bay area and an engineer at a big company, I don't feel like I have many "leads" to offer people. But in order to meet people, I need to network. How does one begin the process?</comment>