Computers are for humans - <AUTHOR> http://adeel.ru/notes/computers-are-for-humans.html

<comment><USER3> Your post doesn't make sense to me and I think it's because you misunderstand what programming actually is. Programming, at it's core, is just the act of giving the computer commands to execute in a certain way. There is no way to automate a process using a computer without using programming. So what you suggest, is only possible in two ways. Build an artificial intelligence that programs for us and decides what we want or somehow code a piece of software that can solve any problem and automate any task. Neither of which are currently possible or really desirable (imagine the bloat of the software).

Everyone should learn to program, even at the highest level of abstraction (python, visual basic, SCRATCH), just so they understand what the tool (computer) they have in their hands is capable of.

People go through their everyday lives not even considering automating certain tasks because they haven't been exposed to what programming can do. People go through their days not understanding when they are being ripped off or blatantly stolen from. They don't know what is secure and what isn't. Learning to program solves these problems.

To quote Ben Franklin "Those who give up their liberty for more security neither deserve liberty nor security."

Disclaimer: I am slightly biased. I don't agree with what Steve Jobs stood for. I don't believe people should become mindless content consuming drones nor do I believe in walled gardens. If I buy 3 acres of property I don't want to be locked in .5 acres because of a damn hedge.

<comment><AUTHOR> > There is no way to automate a process using a computer without using > programming.

<http://en.wikipedia.org/wiki/Automator_(software)>

<comment><USER3> That is programming.

<comment><USER4> I think your definition of programming is tending toward being pointlessly broad.

<comment><USER3> My definition of programming is just a definition that is capable of describing every programming language I've seen. If programming is not giving commands to a computer then what is it?

<comment><USER4> Is typing 'dir' or 'ls' at a command prompt programming? Am I programming if I double-click on a folder or enter a web page URL?

<comment><USER5> I'd argue yes.

Microsoft Word is a domain specific language for formatting documents. Just because you can't create an OS with it doesn't mean you aren't telling a computer what to do using gestures and keystrokes that you had to learn first.

Every day user tasks are just very high level programming, with limited power compared to general purpose languages.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> Great post. The HN community is totally biased because most folks here are very comfortable programming. What this biases is the ability for this community to imagine that it's a lot harder for a lot of other people to program than it is for them. If it weren't, you wouldn't be in such high demand at such terrific salaries.

Programming is hard, especially for minds that are not well accustomed to breaking things into linear series of events. I have a visual mind, for example, but have a lot of trouble turning multi-dimensional concepts into linear programming treatment.

Just as we would not suggest everyone would be capable of calculus, we can't expect everyone to program. Now we _can_ expect everyone to have some exposure to calculus, and I think many folks just would like to see the masses have some exposure to programming. And that's great.

But please do recognize that programming is not intuitive for everyone!

<comment><USER7> Please tell this to the crowd that is so desperate getting more women interested in computers....

<comment><USER8> The problem isn't that women aren't interested, it's that our shitty remarks drive them away. The ones that stay wind up experiencing a death by a thousand pricks. I'm "desperate" to see our field grow up, not conduct some sort of gender-specific marketing campaign.

We don't need more women programmers for the sake of demographics. We need to stop driving away awesome programmers that happen to be women.

<comment><USER9> Do you know about any evidence that other professions with a larger female/male ratio e.g., lawyers, doctors treat women somehow better than IT?

<comment><USER8> That's kind of a distraction from the real problem, isn't it? We know we are doing this badly. It doesn't matter if other professions are worse; if they are, that just means they have their own problems to improve on.

To paraphrase the rifleman's creed, there are many industries with this problem, but this one is mine.

</comment></comment></comment></comment></comment><comment><USER10> "If the computer is a bicycle for the mind, what kind of bicycle requires you to speak Chinese to pedal faster?"

I'm sorry? What sort of bicycle magically allows you to ride it without putting in any learning effort? You're forgetting that everybody has to learn to ride a bicycle and nobody is any good at it at first.

<comment><AUTHOR> You're mixing up programming with computer literacy.

<comment><USER11> Not really. Most people put forth a minimal effort into learning how to ride. Most people can ride a bike, but far fewer are able to regularly put five miles on a bike. That requires a much higher level of training and conditioning that most people are just not willing to undertake.

Most people can use a computer. My 70 year old grandmother has no problem using her Mac to write documents, send email and browse the internet. Far fewer are willing to undertake the training and mental conditioning required to program.

Fundamentally, programming is about problem modelling. While I agree that the interface to programming can be improved, I disagree that computers and the tools surrounding programming are the main reason people are not willing to invest the time to learn to program. At any level beyond the most trivial programming is hard.

</comment></comment></comment><comment><USER12> In the 80's Apple had HyperCard, a tool designed to make programming easy for novices.

«... HyperCard is an echo of a different world. One where the distinction between the "use" and "programming" of a computer has been weakened and awaits near-total erasure. A world where the personal computer is a mind-amplifier, and not merely an expensive video telephone. A world in which Apple's walled garden aesthetic has no place.» <http://www.loper-os.org/?p=568>

</comment><comment><USER13> Maybe the author is confusing computers with consumer devices... I subscribe to the notion that the iPad is a consumer device (i.e. family of the Walkman), not a computer.

<comment><USER14> Exactly my first thought when reading the first paragraph.

I find it almost laughable to cite Apple as an example of "making a computer smarter". Apple has done the exact opposite: dumbing it down to fit the lowest common denominator, then putting it into shiny aluminum cases to sell to the unwashed masses.

A smart computer is one that empowers the user, that teaches them, and expands their knowledge. Not lock them into a walled garden with some highly limited tools which give them the dangerous illusion of empowerment. This is fundamentally incompatible with how Apple makes their products. In the perfect world of Apple, users are idiots who unquestioningly buy the newest iWhatever, and never do anything remotely clever with their devices.

<comment><USER15> Depends on how you define smarter. Apple has made the computer smarter because you no longer need to be smart to use one. By "dumbing down the computer" from our point of view, the computer itself is actually smarter. The operating system and the programs that apple has written don't necessarily anticipate the user, but they handle some things in the background so the user doesn't have to. Or at least that's the idea behind it anyways.

</comment></comment></comment><comment><USER16> This misses the point. The beauty of learning programming is that you stop _depending_ on others to make something simple to use, and can instead do it for yourself.

<comment><AUTHOR> There are a lot of things we depend on others for. Do you call the plumber when your home plumbing leaks?

<comment><USER17> It's funny you should ask that because it touches on an analogy posed by Jeff Atwood just the other day. And a lot of people rebelled against it.

Do I call the plumber when I have a serious leak? Yes. But I don't call one when I the toilet is running or when I have a leaky faucet. No one is suggesting everyone needs to be able to write a full-fledged production program, but who can deny that having some knowledge of the inner workings of a system you depend on is not going to make you a better user?

<comment><AUTHOR> I'm not saying there's anything wrong with learning to program.

Learning the basics of any skill can help you, but it's up to an individual whether he wants to spend his time picking up plumbing, car repair, programming, etc., or just focus on moving further in whatever his own field is.

<comment><USER17> Of course. And that's why no one is saying people must learn to program - <USER2> that they should. And it makes sense if you spend ~8 hours a day using something that you have some idea of how it works.

</comment></comment></comment></comment></comment><comment><USER18> I agree that computers should have intuitive interfaces and should bend to people rather than the other way around. I also think that most computers should and will be more like iPads and iPhones, essentially smart appliances.

However, just because we can see a future where computers bend to the whims of users, ignorance is not bliss.

Computers are becoming an ever increasingly important part of most peoples lives. Saying that you shouldn't have a fundamental understanding of how they work only leaves you open to being hurt by those machines that you interact with every day.

Take phishing scams, and drive by downloads. In large part these occur due to ignorance of the user on a fundamental level. Of course, computers need to be much smarter and prevent these types of attacks all-together. But in a world where some people understand computers on a fundamental level, and others do not, you'll always see those with knowledge taking advantage of those without.

Ultimately people shouldn't learn to programming because it makes bending computers to their will easier (though it does). Instead people should learn basic programming to better understand that which they fundamentally rely on.

</comment><comment><USER19> "Apple understand that the responsibility lies with their software to adapt to humans, not with humans to learn the ins and outs of unintuitive software."

This isn't how Apple does things.

Apple computers do not adapt to users. They do things in the "Apple Way". Users must learn that way or suffer.

The good thing about this complete refusal to adapt to users is that everyone has exactly the same Apple experience. You don't have to ask Apple users what shell or window manager they're using. This makes finding help easier and, in theory at least, should make it easier to eliminate bugs (Lion is actually very buggy). Arguably, small bugs and inconsistent behavior do more to confuse neophyte users than large interface flaws.

Apple's motto, "think different", should really be, "think like us". Is that good for the computer illiterate? Perhaps. Still, I'm a bit amazed that some power users put up with the rigidity of OSX and apparently seem to like it. I've used it off and on a few times over the last decade (I most recently used Lion for about a year) and it's always a relief to go back to an OS that is designed to adapt.

</comment><comment><USER20> I like the thought behind this, but not sure it makes sense to me. How do you expect computers will get to be as smart as you want them to be if people don't learn to speak their language? Are you assuming that only the select group of people who are already programmers are capable of making computers smarter? I disagree with that.

Even if the above were true, it would still take time to make computers "smarter". I don't think it's necessarily about technology, it's about changing the infrastructure and the paradigm. That takes time. What is the rest of the population to do in this latency?

As a side, your post also suggests that there will come a time when computers will computer themselves and people will never have to do anything. That doesn't make sense logically.

</comment><comment> tcrow-2000 I don't think he's arguing that more people in other fields should not learn to program, rather that the primary goal of _general_ computer use is to make easier/enhance the lives of its users. This goal is of course ultimately derived from the hard work of the programming community, of which should always be accepting of more participants. We just have to keep in mind that computers should always serve their primary goal, and those that choose to work with computers on a deeper level (programming) should always keep that goal in mind, you don't create a program for the general user that requires them to know programing in order to use it

</comment><comment><USER21> I completely agree and I think this is a much better attitude than the increasingly popular ideology of making the application just do the right thing INSTEAD of exposing options. Obviously the default should be to do the right thing but without options users feel like they are being controlled by machines which is simply not what we want. I know lots of luddites with this perspective and it ultimately stems from laziness on the part of programmers.

</comment><comment><USER22> "The reality is that the most basic automation is a task impossible for someone who hasn't spent months learning to program. Automation is what computers were supposed to help humans with in the first place."

When one wants to express a complex operation (say, automation) one almost resorts to language. Law, mathematics, chemistry, physics, they all use language to help them express complex ideas.

How would you even express simple automation without a language. Macros? Sure, up to a point. Visual tools? Sure, up to a point. Both lead to diminishing returns for their ease use. The benefit of learning the domain language is you have fewer limitations.

Computers are the future, and are the most important piece of technology that currently exists. You either learn how to use them, most effectively, or the future is not for you.

</comment><comment><USER23> Nicely put, but too utopian for right now. There is still a place for coding skills in many fields where it may have not mattered before, with the ubiquity of computers in workplaces of all types. That being said, I think the 'teach ALL the people how to code' theme lately is overkill.

<comment><USER24> Too utopian in general, not just right now. The best argument in my opinion for "normal people" learning to program is not so that they can and will instruct their machines, but so that they know how it is done, whether they're the ones to do it or not. It's to instill understanding, so people will have reasonable expectations about their technology, be able to make intelligent decisions regarding it, and not relate to it as magic.

Even if HCI becomes so good that anything can be automated just by asking for it with no human effort involved, it will still be a good idea for people to know why and how it works. And frankly, things will never get _that_ good (people can't even communicate among _themselves_ without misunderstanding, let alone with machines), which makes it important for people to understand what kinds of things their computers can realistically do for them, what they can't, and why that is.

</comment></comment><comment><USER25> Author confuses humans with other mammalians which lack abstract thought and language.

      ['current human', 'ape'].each do |new_subject|
        open('http://adeel.ru/notes/computers-are-for-humans.html').substitute('human',new_subject)
       end

</comment><comment><USER26> The last paragraph bugs me. It gives the lie to the assertion that _computers_ need to be smarter. What he is really suggesting is two classes of people: The knowledge Haves and knowledge Have Nots.

It is a reasonable and useful principle for a business to focus on being more user friendly. But it is a scary ideology to suggest that most people should not bother to act with agency or become more empowered to handle it themselves. The logical outcome of such an ideology is a world filled with sheep and run by the handful who have de facto power and who serve as both wolf in the fold and guardian sheepdog at the same time.</comment>


Algorithms Have Already Gone Rogue - <AUTHOR> https://www.wired.com/story/tim-oreilly-algorithms-have-already-gone-rogue/ <comment><AUTHOR> This is an interview with Tim O'Reilly. He's written a book.</comment>


Zune HD is official, heading your way this Fall - <AUTHOR> http://www.engadget.com/2009/05/26/zune-hd-is-official-heading-your-way-this-fall/

<comment><USER2> I get the feeling HD support was an afterthought just so "Zune HD" would make sense. In my opinion adding HD support is pointless for a 480x272 screen; the only useful HD feature is the ability to play on external screens.

<comment><USER3> From what I've read, the HD video support is focused on external screen viewing. Microsoft will also be selling an optional Zune docking station with an HDMI output.

I think HD also refers to the built-in HD radio receiver.</comment></comment>


These are the bad things about early retirement - <AUTHOR> https://www.marketwatch.com/story/these-are-the-bad-things-about-early-retirement-that-no-one-talks-about-2018-09-26 <comment><USER2> Regarding #1 loss of identity: For me it was wonderful. It was like I had just finished college and all the world was before me. I could pursue anything. I was no longer tied to set trajectory. It was freedom and opportunity.</comment>


Canada's second oldest magazine changes name to avoid spam filters - <AUTHOR> http://www.nationalpost.com/news/canada/story.html?id=2430440

<comment><USER2> This is a real problem for me also. My last name Graham-Cumming causes problems.

For example, none of my family members were able to have Hotmail accounts with our real names (although years ago signed up for one with the name Ivana Watch-Teens-Give-Head to point out how stupid this is).

Eudora's built in profanity filter flags any email where people reply to me (because of the John Graham-Cumming wrote: lines).

Google used to serve pornographic ads against my name until I complained.

</comment><comment><USER3> While this is a serious problem the article is indistinguishable from an Onion article!

What a shame and I think it shows how poor our Spam Filters are. Seeing the word beaver and assuming a sexual connotation seems like a very weak filter to me.

I wonder if taxidermists ever receive emails about stuffing beavers?

<comment><USER4> > I wonder if taxidermists ever receive emails about stuffing beavers?

Ah, the bless of ignorance. (My own ignorance of certain idioms of the English language.)

</comment></comment><comment><USER5> I actually had to look up the non-animal meaning; is this a north american term? I'd never heard of it before.

<comment><USER6> Have you not been consuming any American pop-culture for the last 15 years? :)

I recall an episode of the Late Show with Letterman, where Letterman would call up people living in a small town Eager Beaver Creek (or something like that) and ask them all sorts of questions.

<comment><USER7> _Have you not been consuming any American pop-culture for the last 15 years? :)_

It's worth noting that although American entertainment is consumed all over the world, the acting is often overdubbed in the local language.

Hence it's not possible for a Frenchman to learn colloquial English by watching "American Pie" -- presumably beaver references are translated to something more appropriate than "le castor" ;)

</comment></comment></comment><comment><USER8> It works. Search for "Santorum" on Bing.</comment>


IPhone 5 - Supported LTE bands & networks by model - <AUTHOR> http://www.apple.com/iphone/LTE/ <comment><AUTHOR> I'm surprised there are so many radio permutations, and some support many radio bands, while others just a few.</comment>


Life-Changing: Quantum Computing "Miracle" Boosts Machine Learning - <AUTHOR> https://cedarfallscollegepro.com/blog/life-changing-q-computing-miracle-boosts-machine-learning/ <comment><USER2> The title is totally exaggerated. In particular:

> ... _the collaboration used a two-qubit quantum computing system to show > that quantum computers can bolster a specific type of machine learning_ ...

</comment><comment><AUTHOR> This is scam!!! be carefull</comment>


Anti-Patterns for Technical Leaders - <AUTHOR> http://www.readwriteweb.com/enterprise/2012/02/anti-patterns-for-technical-le.php <comment><USER2> I like the terms "Somali warlord style of management", which seems to line up with all the stories I've heard from Sun.

Also, I need to start using "Non-technical middle management" more often from now on.

</comment><comment><USER3> Is "the critic" necessarily an anti-pattern? I felt a bit like this when I was a CTO, but I didn't have a choice - my CEO wasn't technical enough to understand how complex the things he wanted to do were.

<comment><USER4> I don't think any of these are anti-patterns. They are behaviors that may be completely reasonable to use in a given circumstance. The author is misapplying software engineering terminology to software engineering management.

<comment><USER5> Actually, I used the terminology that Hoffman and Cantrill used. The point is not that the behaviors are unreasonable "in a given circumstance" but when applied continually.

<comment><USER4> Then you have to define "continually." It's probably better to say it's unreasonable when it eventually fails, but you can only make that determination after the fact. The truth is that any managerial behavior, when applied continually, will become an anti-pattern. So choosing particular behaviors, organizing and labeling them is just an autistic exercise.

</comment></comment></comment></comment><comment><USER6> What is up management?

<comment><USER7> They're talking about a manager who spends so much time dealing with the people above them on the org chart (CEO, Board, etc) that they lose sight of the realities of what's really going on in in the engineering "trenches".

</comment></comment><comment><USER8> Is a video of this talk going to be available?</comment>


36C3: Build Your Own Quantum Computer at Home - <AUTHOR> https://hackaday.com/2019/12/30/36c3-build-your-own-quantum-computer-at-home/ <comment><USER2> Building a Paul trap for dust particles may be a fun weekend project, but calling this a quantum computer is complete nonsense. I'll be very surprised if he ever manages to trap atomic ions without a proper lab environment and professional equipment. And even then he would have barely reached the state of the art from the early 1980s.</comment>


Breaking Bad Inspired 500 / 404 Error Pages - <AUTHOR> https://tonx.org/500.html

<comment><AUTHOR> Enjoy tonight's premiere of Season 5! You can also check out the 404 page here: <https://tonx.org/404.html>

<comment><USER2> Says the American! Still waiting for Season 4 here in England

<comment><USER3> And this is exactly why there will be several hundred thousand downloads of the premier within the next few days from torrent sites and the like.

I wish I could give AMC money directly to watch this show tonight (or tomorrow) legally but it is not possible. It frustrates me so much that the technology is all there and has been for many years yet it is still not available.

</comment></comment></comment><comment><USER4> This is brilliant. Excellent website and 404/500 pages. I wish you no hits on them except for the showing, of course!

</comment><comment><USER5> Speaking of breaking bad web pages I just found out this sure is real. <http://www.savewalterwhite.com/>

<comment><USER6> Really cool that the donate link is real and sends you to a legit National Cancer Coalition donation page.</comment></comment>


A Comparison of Popular Ruby Application Servers - <AUTHOR> https://blog.engineyard.com/2014/ruby-app-server-arena-pt1 <comment><USER2> Solid, well-researched and comprehensive article. One small correction:

> Unicorn is built to cut off long running worker processes after a default of > 30 seconds via SIGKILL. This is why Unicorn says it's built for "fast > clients" \- because anything beyond that cut-off is subject to termination.

This is not what "fast clients" refers to. Unicorn being built for fast clients means that it is only meant to serve local network clients. Or, in other words, it's not meant to communicate with end-user connections/clients directly (slow clients), rather, it's meant to run behind a proxy server like nginx or apache.

The "fast client" thing is basically saying, "this is an application server, not a web server", meaning, it's good at running application code, not managing the complexities of serving web requests to public internet (slow) clients. They're called slow clients because, well, they're slow ;) They have variable quality connections, bandwidth / transfer rates, and client capabilities (http 1.0 vs 1.1, 2.0, spdy, etc). Being a fast client means you can expect that you'll receive http requests at a relatively constant rate, basically whatever the local network or file system will allow, which is extremely fast (comparatively).

So, unicorn being a "fast client" just means that it's good at talking over local network connections (or, preferably, unix sockets) with a web server, and _never_ on port 80 serving public http traffic.

<comment><USER3> Well put.

Also, rainbows! ([http://rainbows.bogomips.org/](http://rainbows.bogomips.org/)) is a unicorn- based server for slow clients.

</comment></comment><comment><USER4> The best and clearest explanation of the different options I've read yet. Thanks guys. I've read lots of threads on SO about the different choices ("Puma vs. Unicorn") any everyone has their suggestions, but this is the first to actually dive in and compare and contrast the differences (and when and where to use each.)

<comment><AUTHOR> Thank you for the kind words!

</comment></comment><comment><USER5> As a longtime fan of Thin, I've been very impressed lately by Reel[1], which is built on Celluloid::IO. In particular, Webmachine-ruby[2] is a nice framework that supports Reel.

While arguably not popular enough (yet) to be considered in the comparison here, I have a feeling it will become a major contender as it matures.

If you're looking for high concurrency, or doing things like WebSockets/SSE, I'd recommend taking a look.

[1] [https://github.com/celluloid/reel](https://github.com/celluloid/reel)

[2] [https://github.com/seancribbs/webmachine- ruby](https://github.com/seancribbs/webmachine-ruby)

<comment><USER6> Easy to go mainstream if it can support Rails. :)

<comment><USER7> Looks like that's already been done: [https://github.com/celluloid/reel/pull/3](https://github.com/celluloid/reel/pull/3)

</comment></comment></comment><comment><USER8> One thing they forgot to mention (might be obvious) is that MRI under puma requires your app to be thread safe.

<comment><USER9> In practice, what does this mean for your typical Rails app?

Is Rails (3.2/4.0) thread safe? Are most gems? For app code, presumably you'd have to avoid class variables and class instance variables. Anything else?

<comment><USER10> > Is Rails (3.2/4.0) thread safe?

Rails 4 is. It turns on thread safe mode by default

> Are most gems?

Usually. I haven't had any problems with that myself

> For app code, presumably you'd have to avoid class variables and class > instance variables

yeah thats quite a bit of it.

<comment><USER11> It's worth pointing out that the 'thread-safe mode' is really "allow concurrent request dispatch" mode. It doesn't make Rails any more or less thread-safe -- the `thread_safe!` declaration is about you telling Rails that YOUR code is thread-safe, and thus it's safe for Rails to allow overlapping concurrent requests to be processed, instead of forcing requests to be processed serially. (Still requires an app server that can dispatch requests concurrently, for it to actually happen. Basically puma or passenger enterprise).

But yes, in Rails 4 that's the default mode, for Rails to allow concurrent overlapping requests. Meaning Rails 4 assumes by default that any local or gem code is thread-safe (may or may not be a safe assumption of course).

Both Rails 3.2 and Rails 4 (and really older Rails for quite some time) are intended and architected to be thread-safe. Modulo bugs. There were concurrency bugs in older versions for sure, which we know because so many of them have been fixed.

</comment></comment></comment></comment><comment><USER12> This article seems to have missed some major differences between Passenger and the other app servers. In my comparisons, I've found Passenger difficult to compare to other app servers on the basis that it aspires to be more than its competition. Specifically, Passenger rolls in its own watchdog [1] and management toolchain (utilities like passenger-status and passenger-memory- stats). Passenger also tries (and succeeds) in minimizing your investment in configuration and tweaking of your app server. These are things you have to roll your own solutions to if you are using other Ruby app servers.

This is not to say you shouldn't use those other app servers, or that Passenger always wins on performance, but I've always forced myself to ask the question: how will I benefit from the performance advantages of other app servers?

Another thing to keep in mind is that you have to look very carefully at your performance issues to understand whether your app server is actually your performance bottleneck. App servers get a lot of attention. There are droves of articles written comparing the maximum request rate achievable under circumstances that very few applications operate. The bottom line is that if your application spends most of its time executing Ruby code, your app server isn't your bottleneck. There is the possibility that you'll see an improvement in memory usage, but you need to test your application rather than rely on generalized assumptions. The improvements might not be worth the trade-offs.

1: [https://www.phusionpassenger.com/documentation/Design%20and%...](https://www.phusionpassenger.com/documentation/Design%20and%20Architecture.html#_watchdog)

</comment><comment><USER13> Been using Puma in clustered mode for almost a year now & it blows away any of the other alteratives (for our use case) by a large margin.

<comment><USER14> Can you provide any more details on your stack and what you're seeing that blows away alternatives?

I'm running a staging version of our Rails 3.8 app with MRI 2.1 and Puma in clustered/threaded mode and everything looks pretty good .. but I haven't been able to throw a ton of concurrent traffic at it yet. Potential thread safety issues give me the niggles, not quite ready to replace Unicorn on production just yet.

<comment><USER10> > Can you provide any more details on your stack and what you're seeing that > blows away alternatives?

The really big thing is how just one puma worker with 8-16 threads can actually replace a set of about 6-8 unicorn/passenger worker instances and give you about the same level of performance.

That level of memory savings lets you use smaller boxes or put more puma workers on one box and eliminate others. Admittedly I'm not doing twitter request/minute numbers but I still was very pleased with my findings.

<comment><USER2> Theoretically, the number of puma threads you're running should be the same as the number of unicorn processes. That is, equal to the number of available CPU cores on the machine. So, if you're running on a machine with 8 cores, you should run 8 process or threads.

What continues to be the major issue with anything thread-based in ruby is that to reliably reach desired performance at load in a threaded setup, you need to be running an interpreter than can make concurrent use of native system threads. MRI has a global interpreter lock, so two pieces of ruby code will not run at the same time. IO is not subject to the GIL, so a lot of what happens in a web app can run concurrently (DB calls, etc), but other things that all happen in ruby (routing, view rendering) cannot.

So, basically, to reliably achieve similar performance using threads, you need to be using Rubinius or JRuby, which don't have a GIL.

</comment></comment></comment></comment><comment><USER15> If Unicorn gets you most of the way, e.g. you have mostly fast requests but a handful of long running requests, you might consider using Rainbows[1] in tandem with Unicorn (or even on its own).

[1][http://rainbows.bogomips.org/](http://rainbows.bogomips.org/)

</comment><comment><USER16> I actually was looking for information about this a few days ago, so this was quite timely. On a previous server I used Passenger to host multiple projects with the Apache plugin, but I've not really done any Rails for a while and wasn't certain if Passenger was still the go to. Seems like for my needs (multiple, small projects) Passenger is still the best choice, but it's nice to know in depth what the others offer over it.

</comment><comment><USER10> couple of small notes OTOMH

> The second option, a global queue, allows Passenger to put all requests on > the same queue "stack". Workers then are given whatever is next on this > stack, thus making the aforementioned long request situation a little less > problematic.

This is the default option out of the box and is actually the recommended mode of operation [https://www.phusionpassenger.com/documentation/Users%20guide...](https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx%203.0.html#PassengerUseGlobalQueue)

> workers will be killed off, and then when traffic picks up in the morning, > requests will hang inside Passenger while it tries to launch new worker > processes in memory. This also happens after nginx is restarted.

He mentions this later, in passing, but In the enterprise version of passenger, there is a mode where on restarting your app, passenger will not spin down worker processes until it has spuns up a new one. So this step wise system of spinning up a new worker before spinning down an old one ensures no- downtime deploys/restarts even after an nginx restart

<comment><USER17> (Phusion guy here)

Additionally, there is a configuration that will make Passenger not spin down instances at all (passenger_min_instances, just set it to be equal to passenger_max_instances). I'm a bit disappointed that this as seen as a downside for certain apps, as it's just a configuration that makes Passenger useful in some extra scenarios.

That said killing idle workers is the default configuration, and perhaps we should take this article as feedback that in current times that default is not what most people want anymore.

</comment></comment><comment><USER18> I'd love to see a stability comparison more than a performance comparison. In my experience Passenger (only used the free version) is far and away more stable than either thin or unicorn.

Passenger seems rock solid and always up whereas you have to have something monitoring the processes of the other two as they were liable to go down every now and again. Perhaps I just configured them incorrectly tho...

<comment><USER19> I've been using Unicorn for at least a couple of years on several different apps and never had one go down. Maybe it's host instability?

<comment><USER18> Like I said maybe I didn't have it configured properly but it sounds like you've had more success than I have. I don't think it's host as using the same server I've switched to Passenger and haven't had issues.

</comment></comment></comment><comment><USER20> No love for Torquebox? True, it's jRuby, but it's very powerful: [http://torquebox.org/](http://torquebox.org/)

</comment><comment><USER21> Very timely, many thanks. I was just wondering about this and you dropped the answer right into my lap. Saved me at least a couple of days work.

<comment><USER17> Hi Jacques, what's the conclusion you drew? In my opinion this article doesn't paint a good picture of the power and flexibility of Passenger. If you want us to call you and talk about it in Dutch let us know, we only employ developers so I promise it won't be a boring conversation!

<comment><USER21> I don't have a conclusion yet. That will take a while actually but in the end there will be a 'reference web app' programmed in a bunch of language on a whole pile of frameworks that can be benchmarked on various setups.

If you don't mind, please mail me.

And thanks for reaching out.

<comment><USER17> Alright, I'm composing a mail. Did you know Passenger also runs Node.JS and Python apps? Might make your comparison a bit easier!

<comment><USER21> Neither Node nor Python are on the list of platforms, I'll leave those ports to others.

</comment></comment></comment></comment></comment><comment><USER22> I love the depth of this article. Clearly the author put a significant amount of time into this, and I appreciate the clarity.

</comment><comment><USER23> So, for a resource/time-strapped startup, does it make sense to migrate away from Phusion Passenger to Unicorn? The stated advantage of Passenger, multi- tenant deployment, is not applicable to use. Will moving to Unicorn result in increased performance? Or are we better off solving other problems right now?

<comment><USER17> Disclaimer: I'm a Phusion team member

Your use case is exactly what we built Phusion Passenger for. It could be that applying some configuration could improve startup performance for you, but general runtime performance of Passenger should be on par with a Unicorn solution.

Note that to use Unicorn you would have to configure an nginx instance that proxies for Unicorn. This is where Passenger shines, we already integrate with nginx so there's no extra configuration or management overhead. Passenger is resilient so it will survive any crashes of your application and automatically respawn any failed processes.

edit: The configuration to make your Passenger perfect for dedicated single app servers is:

        passenger_min_instances your_num_of_cpus;
        passenger_max_instances your_num_of_cpus;

You can measure your performance and tweak the number, as long as they are equal passenger won't be spawning and killing anymore, making your performance more reliable.

</comment></comment><comment><USER24> Using MRI is a waste of resources period. It's going to cost you more $$$$ on RAM.</comment>


BOEING warned of computer takeover of 777 - <AUTHOR> https://www.federalregister.gov/articles/2013/11/18/2013-27343/special-conditions-boeing-model-777-200--300-and--300er-series-airplanes-aircraft-electronic-system

<comment><USER2> Given the context of this submission, this is effectively speculation and IMO not appropriate for HN.</comment>


75% of gamers have bought virtual goods - <AUTHOR> http://venturebeat.com/2010/07/21/about-75-percent-of-online-users-have-bought-virtual-goods-survey-finds/

<comment><USER2> Is that because those 75% are farmvile players?

Ok in all honesty, many f2p games are intended as exactly that. Free to play and buy some online goods. I find that sometimes these f2p models are actually quite nice and can be worth spending money into. Other times I find f2p models evil and crippling the none f2p people. A good example was a mmorpg where you pay for a month of faster (2x) exp gain. Which is great and many do it, but the mmo was free otherwise. And you are not really crippled without the double xp.</comment>


Dropbox sets IPO range $16-18, valuing it below $10B - <AUTHOR> https://techcrunch.com/2018/03/12/dropbox-ipo-range/ <comment><USER2> Are they pricing it for the pop ? Seems like the valuation will be between 7B and 8B, well below 10B of the last round.

</comment><comment><USER3> Billion, not million.

<comment><AUTHOR> Fixed, I copy/pasted mindlessly and botched the title when making it shorter.</comment></comment>


Texting friends or strangers during surgery reduces pain - <AUTHOR> http://www.news.cornell.edu/stories/2015/04/texting-friends-or-strangers-during-surgery-reduces-pain

<comment><USER2> "texting someone on a mobile phone during a minor surgical procedure done under local anesthetic can reduce significantly a patient's demand for narcotic pain relief."

The mention of local anesthetic confuses me. If it's correctly used, I'm assuming the "minor surgery" should be a theoretically painless procedure. So texting isn't reducing the severity of actual pain the brain is receiving (which should be "none"), but the patient's own anxiety which might produce feelings of pain?

Yes, I realize that the brain can interpret anxiety and emotional pain as just as "real" as other types of pain, but the article seems misleading, if that's the case, and these procedures shouldn't have been producing physical pain.

<comment><USER3> Having undergone my fair share of surgeries with local anesthetics (a few general ones too), I can definitely vouch for the physical pain. I have to admit however that it wasn't directly in the targeted area, but rather in the surrounding area.

One example, I had surgery done around my cheek-bone area and one of the tools they used was some sort of soldering iron. The heat propagating and the pretty drastic changes in skin tension were absolutely noticeable and painful. They asked me right before the surgery if I wanted drugs to help but decided against it. Instead, I ended up talking to the staff throughout the entire surgery, got them to explain what they were doing and, perhaps surprisingly, it was a very pleasant experience overall. The distraction definitely helps with the pain.

Another example, I went through a number of inner ear surgeries. One of the tools they use produces an insanely strident noise, designed in part to expand your eardrum to its limits (IIRC). Even with the local anesthetic, it felt like somebody was drilling through my head. I can't quite describe the pain, but it's the worst thing I've ever had to go through (many times at that). I doubt that sheer anxiety could produce this level of physical pain.

So from my admittedly anecdotal evidence, I would tend to agree with the article.

</comment></comment><comment><USER4> Interesting concept.

If I had to be awake for a surgery, I think this would also help me avoid freaking out regardless of pain. If I'm semi-aware of what's happening to me, my brain goes places and I am likely to have a mini panic attack...simple things like a local injection of anesthetic for a mole Biopsy is enough to make me want to pass out. Texting someone or doing something "normal" would be rather comforting I think, if only to keep my mind on something else.

</comment><comment><USER5> behold the power of dopamine (and active Internet communication - chat/email/texting/comments on the likes of HN/Reddit, etc.. - is almost the second best thing after methamphetamine-s to get the dopamine spiking in your system :)

</comment><comment><USER6> It detracts from pain. That's all.</comment>


Improving compression with a preset DEFLATE dictionary - <AUTHOR> https://blog.cloudflare.com/improving-compression-with-preset-deflate-dictionary/ <comment><USER3> We use this technique in Just Dance Now, and I wholeheartedly recommend doing it for usecases where you need to compress lots of small packets individually. We save at least 50% data.

For our game, this consists of the normal communication going back and forth between server and client, where individual messages are normally <100b.

By sampling some user sessions we built a dictionary, fed it into deflateSetDictionary/inflateSetDictionary, and use that in both Node modules for the server, as well as throughout the ecosystem of Android and iOS.

It's very simple to do; we base all communication on standard JSON (for ease of portability and debugging) but then have the preset-dictionary fed into zip (a simple large string!) to counter the weight of JSON.

Needless to say, binary packing the protocol would give additional gains; but the productivity gains with using dictionaries to get good compression of pure JSON was a great choice for us. And it's really _supersimple_ to do.

One nice benefit is that the protocol is extendable by any developer without worrying about the wire-transport; the compression won't break is someone decides to add a parameter to a message, it just most likely won't be compressed as well as the rest of the message.

</comment><comment><USER4> Hey, somebody has a patent on pre-loading the compression tables with frequently-encountered strings. So heads up.

It was patented in the context of headers for text messages, which are sent for every message, are generally larger than the message but appear exactly once in each text so never end up in the compression table. Each side of the conversation runs the zip algorithm on the header strings, discards the output up to that point, then compress the text message from that point. On receive they preload the algorithm with the checkpointed data structures from the preload-compression.

This Google technique is probably different enough to be off their radar. But who knows.

I think its the guys who do DirectPC

<comment><USER5> Wow, do you have a link to the patent? It'd be surprising to me if there wasn't prior art. Might be worth asking [http://patents.stackexchange.com/](http://patents.stackexchange.com/) !

<comment><USER4> Came across it 7 years ago when new at my current project. Did research into efficient compression schemes. Had to change our scheme to avoid the patent. It was Hughes I think.

<comment><USER4> Ok I searched patents using 'compression dictionary' and came up with a boatload. Folks have been using dictionaries since 2005 at least, to replace common words e.g. XML tags with tokens. E.g. patent 20050027731: Daniel Revel

</comment></comment></comment></comment><comment><USER6> I love the explanation of how LZ77 works; compression algorithms often seem like they must use some sort of arcane magic, so it's great to lift the veil a bit.

I wonder: how many folks have Little Bunny Foo Foo stuck in their heads after reading this?

<comment><USER7> The "arcane magic" impression likely comes from the heavy use of information theory concepts and maths that are encountered in the traditional literature. Probably necessary to analyse in detail, but quite daunting for the beginner. I find LZ to be particularly intuitive since it embodies the natural notion of "abbreviation" by referring to something we've seen before, and writing compressors/decompressors for the algorithm is relatively easy (especially decompressors.)

On the other hand Huffman is somewhat less easy to grasp intuitively, but some aspects of its principle of reducing bits/symbol based on their frequency shows up in natural languages: the more common a word is, the shorter it tends to be. It's also a bit more difficult to implement.

<comment><USER8> And as words become more common (over time or in specific parts of the population), they often become shorter, too.

Eg see the evolution from phone / mobile phone, to landline / phone.

</comment></comment></comment><comment><USER9> Annoying detail for DEFLATE + dictionary is that the dictionary has to be provided within every reader (setDictionary in java).

The output from the DEFLATE stream is not standalone, which makes it really hard to use - a more ideal approach would've been to provide training to the Huffman tree & guess best window sizing from a sample.

But SDCH solves that problem by storing an external named dictionary - <USER2> will read it off a common HTTP location if it's missing in the cache.

Within that, there's a pretty neat standard which SDCH uses - RFC 3284.

I ran into it trying to optimize holding a few billion serialized blogs within an in-memory store with transactional updates - the issue was mostly the in- memory sizes of serialized objects.

I ended up using a versioned external dictionary for compression, which was an extension to VCDIFF with 1 additional instruction in its streams - COPY_DICT.

That concept can be pushed further, to get to something more generic like femtozip - [https://github.com/gtoubassi/femtozip/wiki/How-femtozip- work...](https://github.com/gtoubassi/femtozip/wiki/How-femtozip-works)

</comment><comment><USER10> I wonder if compression with just a preset dictionary (i.e. no learning from the plaintext) would produce reasonable compression ratio. That would be interesting because it would be entirely BREACH resistant.

</comment><comment><USER11> Never thought I'd ever understand an article about compression :) Great article (loved the "hopping bunny" example) and it almost makes me think that this could replace the need for dynamically loading content in some cases (when network latency, and not DOM rendering and such, is the issue).

</comment><comment><USER12> Unfortunately, the efficiency of the proposed approach is only limited to the first 32 KB of the page being compressed. Once we move past the first 32 KB, LZ77's lookbehind window will no longer include the dictionary and the compression ratio of the rest of the page will stay the same.

Pre-seeding the dictionary could have a better effect in an LZ78 scheme where there is an actual dictionary built and stored in memory as opposed to a moving lookbehind window.

This also makes me wonder how the dictionary is delivered to the end client. If it's sent with each page request, then it hardly makes any sense as you are hauling an extra 16 KB or 32 KB of the dictionary just to have a better chance of compressing the page's first 32 KB.

I wonder if the size of the dictionary itself is factored in the compression benchmarks provided in the article.

</comment><comment><USER13> I've wondered why with storage being so cheap there isn't a compression method with a 1TB dictionary that everyone stores locally and just send the "map" or "tree" instead.

<comment><USER14> But with computing becoming cheaper, you only need 2 integers to compress any data.

[http://penduin.blogspot.hu/2006/10/pi- compression.html](http://penduin.blogspot.hu/2006/10/pi-compression.html)

<comment><USER15> Two integers and a load of computation? How wasteful.

Just treat your bits as the binary representation of a Natural number and you're done. No computation required for encoding/decoding, and you only need to store one number :)

</comment></comment></comment><comment><USER16> I'd just prefer something like LZHAM to be implemented as an alternative to gzip, Deflate for http compression. It would be amazing for serving content over the web to browser-based 3D applications like [https://Clara.io](https://Clara.io)

Details: [https://github.com/richgel999/lzham_codec](https://github.com/richgel999/lzham_codec)

<comment><USER17> Can't you just implement that in javascript, then load the entire webpage that way?

<comment><USER16> You can of course use things like:

[https://github.com/nmrugg/LZMA-JS](https://github.com/nmrugg/LZMA-JS)

But nothing beats native code for decompression speed and also if it is native it can happen asynchronously outside of the JavaScript's limited threading model (although it is always getting better) and most importantly, it can also happen outside of the JavaScript memory space.

</comment></comment></comment><comment><USER18> How is the new deflate preset dict passed to the browser? If the dict is normally empty and the protocol even supports sending of different preset, how is that shorter than before, if the new message has a new dictionary?

</comment><comment><USER19> Some databases are creating compression dictionary during compaction.

<comment><USER20> Interesting, can you mention them?

</comment></comment><comment><USER21> Wonder if this trick could be used agains large binary files (like a database backup)?</comment>


Erlang OTP 21.0 is Released - <AUTHOR> http://www.erlang.org/news/123 <comment><USER3> Also worth reading, the blog post with highlights for the release: [http://blog.erlang.org/My-OTP-21-Highlights/](http://blog.erlang.org/My- OTP-21-Highlights/)

and the release notes with all the technical details you'd like to know: [http://erlang.org/download/otp_src_21.0.readme](http://erlang.org/download/otp_src_21.0.readme)

A few of the things I noticed:

> Two new guards BIFs operating on maps have been added: map_get/2 and > is_map_key/2\. They do the same as maps:get/2 and maps:is_key/2, > respectively, except that they are allowed to be used in guards.

This is great and further enhances usefulness of both the maps, and the guards, which is always a good thing.

> There is a new syntax in 'try/catch' for retrieving the stacktrace without > calling 'erlang:get_stacktrace/0'. See the reference manual for a > description of the new syntax. The 'erlang:get_stacktrace/0' BIF is now > deprecated.

You can now get the stacktrace when matching exceptions in the `catch` section of `try`, like `error:Exception:Stacktrace -> handler_code()`.

> A new logging API is added to Erlang/OTP, see the logger(3) manual page, and > section Logging in the Kernel User's Guide.

I felt for a long time that configuring logging on the BEAM was a kind of dark art, and never really understood what goes where between SASL, error_logger, lager, and other tools. Now it got properly unified, from what I read, which should make it much easier to configure and use proper logging. That's great!

As a bonus, Elixir already supports the new logger[1], apparently.

Other than that there seem to be a lot of optimizations, in the compiler, in the emulator, in the IO system, and in signal handling. Also a lot of bugfixes, and some smaller conveniences like an iterator for maps.

All in all nothing as exciting as the introduction of maps (unless I'm missing something), but a pretty solid release anyway.

[1] [https://github.com/elixir- lang/elixir/pull/7649](https://github.com/elixir-lang/elixir/pull/7649)

<comment><USER4> > map_get/2

super excited about this.

<comment><USER5> And you can use it in a ETS match spec! This will allow to reduce copying of big maps in some use cases.

</comment></comment></comment><comment><USER6> > _Misc compiler optimizations including contributions from the Elixir team > resulting in 10% improvements in benchmarks_

That sounds great! where can I see these benchmarks?

<comment><USER7> The closest I could find is [http://blog.erlang.org/My- OTP-21-Highlights/](http://blog.erlang.org/My-OTP-21-Highlights/)

</comment></comment><comment><USER8> If you're getting a Symantec certificate error, try loading the non-https version. There is an open issue for this on the erlang.org repo: [https://github.com/erlang/erlang- org/issues/7](https://github.com/erlang/erlang-org/issues/7)

</comment><comment><USER9> If you are using tuple calls be careful updating because in this version they are removed. You can use erlc option tuple_calls to bring them back but in some cases it doesn't work.

Particularly ChicagoBoss is very broken now.

</comment><comment><USER10> I'm personally still waiting for the JIT. I guess it will be a while.

<comment><USER11> +1000

I couldn't agree more. I have a lot of hope for BEAMJIT (or anything that will make Erlang faster per clock cycle).

[http://blog.erlang.org/My-OTP-21-Highlights/](http://blog.erlang.org/My- OTP-21-Highlights/)

After reading the link above, I get the sad feeling that a faster Erlang isn't anytime soon :(

With that being sad, Elixir has brought a whole new wave of people to the OTP community. Which excites me tremendously. I just hope a faster Erlang will arrive soon enough so that people needing to leave Ruby due to slowness have a good alternative with Erlang.

<comment><USER3> According to this talk: [https://www.youtube.com/watch?v=PtgD5WRzcy4](https://www.youtube.com/watch?v=PtgD5WRzcy4) there is some (initial and under development as I understand) implementation already, with results generally 50% worse than HiPE. It looks better than any previous attempt, so maybe it's time to get a little optimistic :)

Also, while additional performance never hurts, the slowness in the Erlang case is really a different kind of a problem than it is in Python or Ruby. Erlang's performance requirements are closer to those of BASH and other shells: there is no need, and no expectation, to have all the code in Erlang. The variety of options for integrating other languages should make this obvious. Even if in general Erlang is rather unimpressive in terms of performance (I'm trying to be diplomatic here...), it does have a couple of highly optimized parts, like the IO, context switching or message passing - <USER2> other words, the optimizations are focused on the things that make Erlang special and that other languages generally don't focus on. It makes Erlang often "worth it" even despite the slowness, and it works well in practice, in my experience.

Elixir makes it a bit more awkward. On the one hand, it's a nice language, which is general-purpose enough to look reasonable as an implementation language for most anything. On the other, no matter the amount of pre- computations and clever macrology, it shares the same fundamental limitations that Erlang has - like a lot of copies of everything or non-inlineable calls due to how modules are made reloadable - and it's going to lead to a lot of frustration and emotional rants from people who actually tried to use it as a "reasonable, general-purpose" language without the required preparations. Even when the JIT arrives, it's not going to fit all the performance profiles equally, and the need to carefully consider the performance you need won't disappear.

<comment><USER10> Yes, there will always be certain limitations as you've accurately mentioned. However, as a platform for writing networked web services, I think the Erlang VM is stellar.

Compared to other languages, such as Go, Python, Rust, etc, the conceptual models in Erlang (processes, message passing, supervision trees) and how they all work, map better to the web problem domain.

As far as the slow parts, like you said, there are plenty of choices of integrating other languages.

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

<comment><USER12> Pointing out that someone posted a dupe gets you down votes?

<comment><USER13> For my part: no, but complaining about it does.</comment></comment></comment>


Be careful what you signal  - <AUTHOR> http://www.economist.com/blogs/freeexchange/2011/11/information?fsrc=rss

<comment><USER2> The classic example:

<http://www.pickpocket.com/Pickpocket-Prevention-Tips.asp>

"Be wary of signs that read "Pickpockets About" or someone yelling, "There's a pickpocket in the crowd." They aren't always what they seem.

> I use this ploy a lot in my show. When people find out that I can pick > pockets, the men check for their wallets and the women will check for their > jewelry in the order of value -- most expensive first. Their actions clue me > as to exactly where the wallets and valuable jewelry are located.

</comment><comment><USER3> I always think of this when I have my laptop with me in the car. I worry that if I leave it in the car, a would be thief will walk by and see it. But, if I take my backpack out and put it in the drunk it is a huge signal that "my backpack has something very valuable in it!" to anyone who might be watching. Since you can get into the trunk by breaking a window and pushing a button, I think on net, it is safer to leave my backpack in the car.

<comment><USER4> Consider that the number of people who might walk by and look in your car window is much larger than the number of people who happen to see you at the exact moment you put your backpack in the trunk. It's safer to not leave it in view of passersby.

It's even safer to get in the habit of putting it in an inconspicuous location when you get _into_ the car.

</comment></comment><comment><USER5> > simply draw attention to the fact that the driver is a nervous tool owner.

Or rather, nervous about break-ins, which are damaging whether or not there are tools or other valuables in the van. A broken window costs money to replace; a jimmied door costs money to fix.

</comment><comment><USER6> It reminds me of the sign "Handguns not allowed in store." This basically signals thieves that the law abiding citizens who have permits to carry a concealed weapon didn't bring them into the store with them.

</comment><comment><USER7> So I should heed a warning based on a conclusion arrived at entirely using conjecture? Thanks for that.

</comment><comment><USER8> Are they trying to avoid having the windows broken (to find nothing) or avoid having their tools stolen (deception -they tools are actually there)?

Maybe the solution is to just leave the windows down/doors unlocked? Not sure what to do about rainy days.</comment>


How to Slice a Bagel into Two Linked Halves (2009) - <AUTHOR> http://www.georgehart.com/bagel/bagel.html <comment><USER2> Here's George Hart's daughter Vi Hart making a Mexihexaflexagon, which is a kind of three-sided flat quesadilla: [https://www.youtube.com/watch?v=GTwrVAbV56o](https://www.youtube.com/watch?v=GTwrVAbV56o)

That family must have the best picnics!

<comment><USER3> Here's a short series on math-based Thanksgiving foods. [https://www.youtube.com/watch?v=F5RyVWI4Onk&list=PLaNzoFtkQ7...](https://www.youtube.com/watch?v=F5RyVWI4Onk&list=PLaNzoFtkQ7rZo- HKloTHnhpimhfEzDlFl) It's hard to know where to stop recommending Vi Hart projects, I find them consistently cool and fascinating, so I'll just mention her blog [http://vihart.com/](http://vihart.com/) and Patreon [https://www.patreon.com/vihart](https://www.patreon.com/vihart)

</comment></comment><comment><USER4> It turns out there's a sequel! [http://www.georgehart.com/bagel/knot.html](http://www.georgehart.com/bagel/knot.html)

<comment><USER5> "Waiter, my bagel has black magic marker all over it. I think I'll just have the omelette instead."

</comment></comment><comment><USER6> Exercise to the reader: How do you slice the bagel so that you can spread cream cheese continuously along both sides. In other words, can you make a Möbious bagel?

<comment><USER7> Leave it uncut. It already has a continuous surface.

<comment><USER6> But then you can't spread on the soft side.

<comment><USER8> Lazy answer: Cut it almost in half and leave it connected. Fold hinge around.

<comment><USER6> Clever.

</comment></comment></comment></comment></comment><comment><USER9> This is the best article ever posted to Hacker News.

<comment><USER10> Sharing stories like these with the world is what the world wide web was made for.

</comment></comment><comment><USER11> My team at work thinks of every excuse possible to get bagels. Recently for a birthday, a work anniversary, and being restacked into new cubes. But this is the best possible excuse for bringing in bagels again on Monday.

<comment><USER12> The resulting workers comp report when someone slices their hand is going to be really interesting.

<comment><USER11> Of course if we could make a bagel cutter in the spirit of the popular bagel guillotine slicer that cuts a linked bagel we could be millonaires.

</comment></comment></comment><comment><USER13> I didn't know what I was getting into with that click, but now I've added bagels to our grocery list so I can do this.

<comment><USER14> Bagel, lox, cucumber and cream cheese has become my new favorite thing lately (bonus points for a squeeze of lemon, capers or some red onion if those things are to be found).

However, I of course have no bagels or bagel accessories on the one day I read about mathematically correct bagels :(

So yeah, added to my grocery list too!

<comment><USER15> That was my dinner of choice throughout childhood. Love it still.

</comment></comment></comment><comment><USER16> Numberphile video on this topic, including 3d-printed examples of some higher- order slicings: [https://www.youtube.com/watch?v=3_VydFQmtZ8](https://www.youtube.com/watch?v=3_VydFQmtZ8)

</comment><comment><USER17> I wonder if it's possible to repeat the process in such a way that you make a chain. I'm trying to visualize how but I'm not certain whether it could only make more links all attached in the same place.

<comment><USER18> I believe every link would be linked to every other link.

<comment><USER19> Not necessarily. Just as you could take a chain and stack the links such that the holes lined up, with enough precision, and a strong enough baked good, you could cut the bagel such that there were a chain of linked rings.

<comment><USER20> Well, if you cut the bagel according to this particular linked torodial method, to produce two links, you'd then be able to perform the traditional bagel slice on one of the linked halves, and that would produce a chain with three links...

But deriving from a single original torus, a chain with an arbitrary or infinite number of links, whereby each individual link is bound to no more than two other links? I'll have to think about that one...

</comment></comment></comment></comment><comment><USER21> Just had a brief discussion at work about bagels that started with a complaint about how they're never sliced all the way through.

After a couple minutes of back and forth an epiphany was realized that if they were pre-cut all the way through they'd get jumbled up and then we'd spend way too much time rifling through halves to find a matching one.

</comment><comment><USER22> Clearly, a candidate for inclusion in one of the fine academic journals on mathematics. Or the Martha Bakes cookbook.

Either way, bravo!

</comment><comment><USER23> I never knew I needed this information. I'm gonna go buy some bagels now.

</comment><comment><USER24> Video of the process: [https://www.youtube.com/watch?v=2T5FrZl04JY](https://www.youtube.com/watch?v=2T5FrZl04JY)

</comment><comment><USER25> Villarceau circles!

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

</comment><comment><USER26> Is it a sin to put pineapple on it?

Someone please ask Professor Shewchuk (UC Berkeley) and Professor Demaine (MIT) to look at this! Perfect geometric problem for both of them.

</comment><comment><USER27> I've tried never been able to achieve this with my hands and knives.

</comment><comment><USER28> Now do it with a mug.

<comment><USER19> A mug is topologically equivalent to a bagel or donut or torus.

<comment><USER28> _T-topologically w-what??_

I mean yeah, that was the point of my remark.

To write something on topic as well:

There was a fun little challenge on puzzles.stackexchange I think, which relied on the same construction as this article. I couldn't find it, but it went like this:

"You're stuck on top of a tall building with nothing but a saw. There's a ladder fastened to the side of the building, but it's unfortunately not long enough to reach the ground; in fact it goes about half the height of the building from the top. Challenge is to get on the ground "safely". You can cut into the ladder with your saw in any way you like and you can assume that the resulting pieces will be rigid, but won't break under load."

<comment><USER29> As far as I can tell this challenge would not require a twisted cut.

<comment><USER28> Please elaborate!

<comment><USER30> I think it would be possible to slice the ladder exactly in half, down its length, right?

Each rung would go from a cylinder to a half-cylinder, but should still be rigidly connected to either side of the ladder all the same.

<comment><USER31> The problem is then you have two short ladders. You throw your two half ladders off the roof and they don't magically stand end-to-end for you. You have to cut with a twist to ensure the last rungs are entangled with each other so the half-ladders are hooked together. Then you can hang one off the other and reach the ground.

<comment><USER30> See I was envisioning one of these: [http://www.bates.co.za/BMS_Product_Images/ROUND%20TUBE%20LAD...](http://www.bates.co.za/BMS_Product_Images/ROUND%20TUBE%20LADDER%20C-W%20HOOKS%202.5M.jpg)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER32> I'd rather just have a mimosa. :/

</comment><comment><USER33> This article is the best thing since sliced bread.

<comment><USER34> OUT.

</comment></comment><comment><USER35> Video tutorial please.

<comment><USER36> There's an addendum at the bottom of the page linking to a how-to video: [http://www.youtube.com/watch?v=dN8AwGUaqDA](http://www.youtube.com/watch?v=dN8AwGUaqDA)</comment></comment>


Every Apple Product Ever Made (infographic) - <AUTHOR> http://popchartlab.com/products/the-insanely-great-history-of-apple-3-0?mc_cid=203ea1d12c&mc_eid=d07329f867

<comment><USER2> Pfft, missing the Geoport pod.</comment>


Debugging at the edge of huge, scalable systems - a story (video) - <AUTHOR> https://www.youtube.com/watch?v=ieCTIPG43no <comment><AUTHOR> This is a long video, but it starts at about 3 minutes in, and you can skip the last 2 minutes, so it's only about 20 minutes.

And it's packed _full_ of recognizable situations, funny observations, and, most of all, lessons for everyone who writes software for others.</comment>


Metrics from a first week on the iPad App Store. - <AUTHOR> http://blog.lovelycharts.com/2011/12/16/what-a-week/

<comment><AUTHOR> This is insightful data and sales metrics from a first week on the iPad App Store. Interesting to note that the app was first developed with Flash/Air and later fully ported to Objective-C/iPad with some new interesting gestures.</comment>


Ask HN: Awstats or Google Analytics - <AUTHOR>

Which tool do you use for stats/traffic analysis - awstats, Stat Counter, Google Analytics or some other? <comment><USER2> Both :)

Also look into Woopra which is _really_ good ;D

</comment><comment><USER3> I don't think you can use just one. A lot of people like myself block the analytics cookies. I have had problems with AWStats too -- recently some log entries have caused it to barf and quit parsing the file (they have no referrer or user agent string, and come from a site monitoring service that scans for vulnerbilities -- I may have to hack AWStats and submit a patch to fix that).

</comment><comment><USER4> I use "visitors", but Google Analytics is getting better.

( <http://www.hping.org/visitors/> )

</comment><comment><USER5> Google Analytics + Awstate/Webalizer + Quantcast

</comment><comment><USER6> I use Google Analytics + a Wordpress stats package to track RSS pulls etc.</comment>


How does this compare to Arc? - <AUTHOR> http://clojure.sourceforge.net/ Requires a JVM.  But another Lisp with some interesting features. <comment><USER2> The fact that it's built on top of Java makes it hard to believe it's designed to be a 100 year language.

<http://www.paulgraham.com/hundred.html>

<comment><USER3> Now now, no need for a slur like "built on top of Java" just because it compiles for the JVM rather than its own VM.

<comment><USER4> Right, it isn't necessarily built on a core of Java; it's core might be Java bytecode.

</comment></comment></comment><comment><USER4> "Extends the code-as-data paradigm to maps and vectors"

Really? How?</comment>


Ubuntu One Music Store – The new iTunes? - <AUTHOR> http://www.last100.com/2010/03/15/ubuntu-one-music-store-the-new-itunes/

<comment><USER2> You probably have to use Ubuntu if this is the case, which will automatically shut out 99% of the world's users.

Secondly, the average user of Ubuntu probably doesn't pay for music anyway, so what is actually the target market?</comment>


UK seizes rnbxclusive.com, owners arrested, website visitors threatened - <AUTHOR> http://dajaz1.com/2012/02/14/so-the-uk-government-gets-in-on-seizing-domains-music-websites-seized/

<comment><USER2> The source of this news is amusing - as they allude to in one sentence of the linked article, their own domain was siezed by US authorities for over a year, and eventually given back after legal wrangling.

[http://www.techdirt.com/articles/20111208/08225217010/breaki...](http://www.techdirt.com/articles/20111208/08225217010/breaking- news-feds-falsely-censor-popular-blog-over-year-deny-all-due-process-hide-all- details.shtml) gives a horribly biased overview of the events behind the dajaz1 seizure.

<comment><USER3> I guess I'm not too familiar with what happened, are there any "unbiased" overviews of the events? I doubt the feds would give any information period.

<comment><AUTHOR> Well, you can read what the RIAA thinks about it, along with an informationless non-statement from ICE: [http://www.techdirt.com/articles/20111209/03385017020/ice- ad...](http://www.techdirt.com/articles/20111209/03385017020/ice-admits-to- returning-domain-while-riaa-threatens-dajaz1-with-more-legal-actions.shtml)

Or you can read the almost-totally-redacted FOIA document dump: [http://www.techdirt.com/articles/20111214/03264917079/freedo...](http://www.techdirt.com/articles/20111214/03264917079/freedom- information-document-dump-ice-about-domain-seizures-almost-totally- redacted.shtml)

The court case is under seal, so I can't point you to any relevant court documents. Heck, even Senator Wyden raised a fuss about it: [http://www.wired.com/threatlevel/2011/12/wyden-domain- seizur...](http://www.wired.com/threatlevel/2011/12/wyden-domain-seizure/)

I don't have much reason to doubt the accounting of events described in the TechDirt article -- although it does contain a fair amount of editorializing.

If the government would remove the seal and speak up instead of remaining mum, we'd have another side to the story, and maybe we could eliminate this perceived "bias".

</comment></comment></comment><comment><USER4> How did this domain seizure work? I understood it when it happened in the US since they own .com and are the jurisdiction for registrars like godaddy.com, but how does this work from the UK?

<comment><USER5> With cooperation from Rackspace.

       Domain servers in listed order:
          NS.RACKSPACE.COM
          NS2.RACKSPACE.COM

The domain resolves to 126.96.36.199 which hosts a takedown page within Rackspace's UK datacenter.

</comment></comment><comment><USER6> The placeholder page looks fake to me. Any confirmation from SOCA?

<comment><AUTHOR> This ZDNet blog apparently got confirmation from SOCA: [http://www.zdnet.com/blog/london/uk-authorities-take- down-a-...](http://www.zdnet.com/blog/london/uk-authorities-take-down-a-us- domain-could-it-happen-to-you/3039)

</comment></comment><comment><USER7> ... back in 2010 (should be the end of the full title)

dajaz1.com is very much alive and prospering right now.

<comment><USER8> I think there's some confusion here. dajaz1.com was seized back in 2010 by the _US government_ , but the title is about a different site/domain that has recently be seized by the _UK government_. Not only seized, but the admins have been arrested, something that did _not_ happen in the case of dajaz1.com.</comment></comment>