Homicides in America by Race - <AUTHOR> https://www.scedast.com/1/ <comment><USER2> Cute, but absolute numbers are meaningless here. Rewrite with per capita statistics and see what happens to your conclusions.

<comment><AUTHOR> Per capita would hide lurking variables like differences in crime rate among different communities. Comparing to overall homicides surfaces this effect more.

<comment><USER2> That's just not how you correct for confounding effects.</comment></comment></comment>


How to Ship a CocoaPod - <AUTHOR> http://blog.gaslight.co/post/43414802091/how-to-ship-a-cocoapod

<comment><USER2> Helpful, I love seeing articles like this that expose under-documented processes. Thanks!</comment>


Fun with Dependent Types in Haskell - <AUTHOR> http://www.alfredodinapoli.com/posts/2014-10-13-fun-with-dependent-types-in-haskell.html <comment><USER2> For those that are interested in type-level computation in Haskell, check out typo[0], which is a scheme-like language that runs in Haskell's type system. It uses an encoding based on type classes and functional dependencies, rather than type families like in the blog post, but fundamentally the approaches are the same. Disclosure of shameless plug: I'm the author of typo. Previously on HN[1].

[0]: [https://github.com/seliopou/typo](https://github.com/seliopou/typo)

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

<comment><USER3> That looks more like a toy "look what I can make it do" language, though, while OP seems to suggest actually using his thing in real Haskell programs.

<comment><USER2> Typo's a language that lets you express type-level computation using familiar abstractions (e.g., decimal numerals, booleans, conditionals, functions, ect.) rather than dealing directly with the native concepts of the type system. Once the type program's been compiled to a Haskell module, it becomes in essence a type-level library. You can include it in your regular Haskell programs and use the type class instances it exports in your own types to enforce whatever invariants you care about.

So I'll have to disagree with your characterization of it as a toy. It takes a technique that's been known in Haskell for a while and makes it more accessible and useable to the casual Haskell programmer. And while this blog post was a nice introductory treatment of that technique, that's all it is. The examples in the blog post are far from practical applications.

<comment><USER4> >Once the type program's been compiled to a Haskell module, it becomes in essence a type-level library. You can include it in your regular Haskell programs and use the type class instances it exports in your own types to enforce whatever invariants you care about.

Cool! Is there an example of this? I poked around the repo and reddit/HN posts on it, but couldn't find anything...

</comment></comment></comment></comment><comment><USER5> My first foray into Dependent types in Haskell is going to involve this:

[http://stackoverflow.com/questions/26027765/using-types- to-p...](http://stackoverflow.com/questions/26027765/using-types-to-prevent- conflicting-port-numbers-in-a-list)

So, that propellor, my configuration management system written and configured in haskell, will reject at compile time configurations for systems where there would be a port conflict amoung the configured services. Which is ever so much nicer than noticing that at runtime.

Still wrapping my head fully around dependent types, but the community's great, to the extent of writing the code for me when I ask a simple question. ;)

</comment><comment><USER6> Impressive but lets zoom out a little bit. Lets say putting all the machinery together at the end he gets a function that only takes chunks that are multiples of 8, i.e. he has a nice dependently typed function that only ever passes the type checker when all the pieces fit together. This is all great except that it still blows up at runtime as soon as the chunks are coming from the outside world and are not available during compile time. He still needs an intermediary function that enforces the multiple of 8 constraint for data that has no constraints whatsoever. Exactly the same way that the Java example does.

<comment><USER7> So you check types at the boundaries (e.g. doing the same thing in Scala, I'd use Shapeless .cast, which does tricks to get around JVM erasure so ensures that it really will fail if the type doesn't match), and then they work throughout your code. Then you can concentrate your test coverage on the parts that actually need it.

Just because we can't make things perfect is no reason not to make things better.

<comment><USER6> At what point do I advocate not making things better? General rule of polite discourse is to not assume things on the part of the speaker unless it is explicitly stated and to ask for clarification if something is unclear.</comment></comment></comment>


Ask HN: Why No Search? - <AUTHOR>

I'm sure this topic has come up before, but I can't find the thread(s) because HN doesn't have a search for past threads.<p>There must be a reason, can someone enlighten me? <comment><USER2> Bookmark it: <http://searchyc.com/search>

Works brilliantly. For very rare exceptions,

[http://www.google.com/search?q=site%3Anews.ycombinator.com+s...](http://www.google.com/search?q=site%3Anews.ycombinator.com+search)

</comment><comment><USER3> Feel free to ignore the 'hnsearch' link at the bottom of the page, the links RoG gave are much better.

</comment><comment><USER4> It's costs server time to create a search index, as well as coding time, and even then you'll always do a worse job than google can when ranking. On a public site, adding a google custom search box is far easier and better

Which is the real question - why no custom search box on hn?

Just do site:news.ycombinator.com on google</comment>


Collecting Acceptance and Integration Test Coverage with Golang - <AUTHOR> https://mender.io/blog/collecting-acceptance-and-integration-test-coverage-with-golang <comment><USER2> Bummer it had to be so hard. Thanks for sharing.

</comment><comment> Lex-2008 Nice! Not that simple, but works!</comment>


Event sourcing in PHP - <AUTHOR> http://www.schibsted.pl/2016/03/time-travelling-with-event-sourcing/ <comment><USER2> I always love reading about event sourcing, the different approaches and trade offs, hoping one day I can use it, somewhere...

But I never thought somewhere would be PHP where it is essentially build the world and destroy the world per request. I would of presumed PHP would be poorly suited for event sourcing since you have no in-memory cache to help optimize performance. Thus for any accepted command where you have to revive the aggregate then you need to load and deserailize a snapshot (if one exists), and then deserialize any subsequent events and replay them, before you can apply the latest event to the aggregate. Does this concern you?

However removing a layer of caching probably simplifies a lot of things, and being completely stateless I guess could make scaling the app layer easier. One thing that's not clear is how you handle locking of the aggregate (unless you restrict php_fpm to one worker process)? Also the order in which you handle event persistence, shouldn't the event be persisted first before dispatching on some bus, what happens if the server crashes prior the persistence but after a dispatch where something interesting happens?</comment>


Why Amazon's HaaS (Hardware as a Service) Strategy is a Winner - <AUTHOR> http://www.readwriteweb.com/archives/amazon_haas_hardware_as_a_service.php <comment><USER2> Anyone here using S3 or EC2 to power their startup?

<comment><USER3> [http://decenturl.com/news.ycombinator/earlier-ycnews- discuss...](http://decenturl.com/news.ycombinator/earlier-ycnews-discussion)

<comment><USER2> nice, thanks

</comment></comment></comment><comment><USER4> Wasn't "utility computing" good enough? Why do we need to rename it to "HaaS"?</comment>


Apple Patent Describes Dumb Laptop Powered by iPhone - <AUTHOR> http://www.pcmag.com/news/352582/apple-patent-describes-dumb-laptop-powered-by-iphone <comment><USER2> How the hell was this patent approved? Asus has had their Padfone models in production for _years_ : [https://www.engadget.com/2012/06/12/ASUS-padfone- review/](https://www.engadget.com/2012/06/12/ASUS-padfone-review/)</comment>


HTTP Desync Attacks: Request Smuggling Reborn - <AUTHOR> https://portswigger.net/blog/http-desync-attacks-request-smuggling-reborn <comment><USER2> This is incredible and it looks like it could affect massive numbers of sites - unfortunately the article doesn't summarise the problem very well.

The vector is subtle differences in HTTP header parsing between your front end (reverse proxy, load balancer etc) and your back end (web server).

"New Relic deployed a hotfix and diagnosed the root cause as a weakness in an F5 gateway. As far as I'm aware there's no patch available, meaning this is still a zeroday at the time of writing.".

Edit: other major companies he revealed were affected were: PayPal, Trello, Redhat.

<comment><USER3> When a security engineer I know learned about this, they described it as "the next heartbleed" and it's hard not to concur. The scope and impact of this class of attack is _much_ bigger than anyone realized prior to this research.

<comment><USER2> Heartbleed again - yep. Maybe there's not much discussion yet because it doesn't have some cool marketing, or perhaps everyone is scrambling to mitigate the issue for their infrastructure?

There are a few reasons your company might be safe:

1\. All your sites serve https directly from web servers (no https termination and passthrough as internal http traffic)

2\. You use Cloudflare and you cannot reach your sites directly (article says that Cloudflare rewrites all headers so probably avoids problem)

3\. Your front end is properly hardened and it prevents malformed or duplicate headers

4\. Your front end does not reuse connections to your web server (maybe the quickest emergency bandage?)

5\. Your front/back end do not allow chunking (or pipelining).

This is going to affect so many major sites, and requires patches to critical infrastructure: pass me the popcorn so I can watch this horror show unfold.

<comment><USER4> Hi, I'm the author of the article.

Regarding point 5, the front-end doesn't need to support pipelining at all, and the back-end doesn't require it either in most cases. Regarding chunk support, yeah you could patch this by disabling chunked requests on both systems, but if only one system disables it that pretty much just makes the situation worse.

I think your first point could be misread. If you have a front-end and a back- end, and they talk to eachother using HTTPS, that's exploitable. What's not exploitable is when you don't have a frontend at all, or your frontend isn't doing any kind of request parsing (ie it's a network load balancer).

<comment><USER5> > What's not exploitable is when you don't have a frontend at all, or your > frontend isn't doing any kind of request parsing

I think that's exactly what he was trying to say in the first point. Anyway thanks for stressing that, it helped me understand better what is happening.

</comment></comment></comment></comment></comment><comment><USER6> I've been waiting to hear more about this since the abstract was published.

What was the timelines involved here? PayPal, Trello, and others were contacted over the course of this investigation. It would be nice to know what their response times were to such a serious vulnerability.

<comment><USER4> You can now see the PayPal timelines here: [https://hackerone.com/reports/488147](https://hackerone.com/reports/488147) [https://hackerone.com/reports/510152](https://hackerone.com/reports/510152)

Trello patched it in roughly 10 days. In general I found companies took longer to patch this issue than other similar-severity vulnerabilities, probably because it's conceptually unfamiliar so I frequently had to spend quite a while explaining it, and the patch itself appears to be challenging sometimes too.</comment></comment>


Ask HN: Has Stackoverflow Been Good or Bad for Programming Communities? - <AUTHOR> Stackoverflow lowered the bar for learning programing, so the communities have arguably increased because of Stackoverflow.
On the other hand, people are much more disconnected from the actual programming communities, as it's so easy to simply Google a question and copy the best Solution from Stackoverflow. Rather than actively participate in forums... Like the good old days <comment><USER2> I'd say it's been good for programming communities. It's improved productivity by a significant amount, meant far less hair pulling over tiny bugs and oddities and prevented a lot of wheels from being reinvented.

That's especially good in less technical companies or ones with less expertise in general, since it means they can get more done without having to rely on third party developers or hiring extra employees.

(it's also been pretty good for non programmers too, since the non programming Stack Exchange sites are filled with some rather fascinating questions and answers. Like the world building one).

</comment><comment><USER3> "Good"? "Bad"? How could one possibly make such a decision for something as huge and diverse as Stackoverflow? Lists of positives and negatives? Sure. Sweeping judgements? No.

<comment><USER4> Well, one could express an opinion, and reasons for it. Why not. Incidentally, questions like this that ask for opinion are not welcome on SO and the SE sites, although it's hard not to notice that most of the best, most useful questions ask for opinion (e.g. best books on a certain topic) and are rapidly closed for not being appropriate. e.g.

[https://mathoverflow.net/questions/43690/whats-a- mathematici...](https://mathoverflow.net/questions/43690/whats-a- mathematician-to-do/44213#44213)

Question 'with no right answer' _not_ closed because asked by a famous mathematician i.e. Thurston.

[https://mathoverflow.net/questions/38639/thinking-and- explai...](https://mathoverflow.net/questions/38639/thinking-and-explaining)

<comment><USER5> I like those examples.

Another downfall is when you want a more modern answer to a previously posted question. It will no doubt be marked as a duplicate, even though the original from 8 years ago doesn't have any answers useful in 2018.

</comment></comment></comment><comment><USER6> It improves discoverability of technology or related issues in a very natural way (Human Q&A), so it plays an important role in the community.

It allows us to get our work done without wading through piles of bullshit, and really that's what matters at the end of the day.</comment>


why * should buy * - <AUTHOR> http://www.google.com/search?hl=en&q=%22why+*+should+buy+*%22

<comment><USER2> Tweaked version, for more corporation names instead of "why you should buy life insurance":

<http://tinyurl.com/2fmpde>

</comment><comment><USER3> If you find this sort of thing interesting, Johnny Long's "Google Hacking for Penetration Testers" is a worthwhile read: [http://johnny.ihackstuff.com/news/book-releases/book- list.ht...](http://johnny.ihackstuff.com/news/book-releases/book-list.html) , scroll down.

Long also maintains the Google Hacking Database: <http://johnny.ihackstuff.com/ghdb.php>

Fun stuff therein.

</comment><comment><USER4> On a screenshot kick today. . .

<http://www.zentu.net/open-space/wildcards>

I sometimes think about how the top (10 default in this case) results are influenced by physical locale of the searcher. The whole conceptual lightspeed thing is really quite interesting.

<comment><USER5> So I'm curious--the screenshot you've taken has ~20k less results than mine, and the result-set is wildly different--

</comment></comment><comment><USER6> Nice trick! Might be useful sometime...

What other wildcards are there?

<comment><USER7> <http://www.google.com/help/cheatsheet.html>

the tilde operator (for synonyms) is pretty useful.

</comment></comment><comment><USER8> "why you should buy an emotional planner".

i'm almost scared to look.

</comment><comment><USER9> Its an instant rumour mill. Now what will TechCrunch do?

</comment><comment><USER10> apple care....</comment>


Instagram Is Trying to Curb Bullying. First, It Needs to Define Bullying - <AUTHOR> https://www.nytimes.com/2019/05/09/technology/instagram-bullying-teenagers.html <comment><USER2> Bullying has been redefined as anything critical you have toward any action of a specific person.</comment>


Ask HN: Why Andrei Alexandrescu was absent from CppCon 2016? - <AUTHOR> <comment><USER2> You'll probably get more answers is you post your question on [https://www.reddit.com/r/cpp](https://www.reddit.com/r/cpp)

<comment><USER3> Or sending email to Andrei rather than asking for speculation.

</comment></comment><comment><AUTHOR> I thought the answer was somewhere in the web already, so this wouldn't be a new question. CppCon is a lot less fun without Alexandrescu.</comment>


Apollo astronauts dying of heart disease at 4-5X the rate of counterparts - <AUTHOR> http://arstechnica.com/science/2016/07/apollo-astronauts-dying-of-heart-disease-at-4-5x-the-rate-of-counterparts/ <comment><USER2> At a quick read, the study this article is based on seems like it's either a parody, a pointed critique of abusive statistical methods, or a terrible misunderstanding.

On the bright side, the paper seems clearly written and is freely available[1]. On the not-so-bright side, they conclusion of the study is based on the a sample of 7 lunar astronauts, of whom 3 died of cardiovascular disease. 3/7 is 43%. Surely they can't be claiming to have a statistically significant result based on the having 3 rather than 2 lunar astronauts?

Yup, that's exactly what they are claiming. 3 of the 35 non-flight astronauts died of heart disease, which is 8.5%.[2] Since there were 5 times as many in this group as the lunar-flight group, that's the upper multiple of 5X. For the low-earth-orbit-only group, 4 out of 35 (coincidental same number) died of heart disease. 4/35 is 11%, which gives us the lower 4x.

Maybe as so often happens, the author of the Ars Technica article putting more weight on this minor detail than the authors, while simultaneously removing the carefully phrased caveats? Given that the title of the article is "Apollo Lunar Astronauts Show Higher Cardiovascular Disease Mortality: Possible Deep Space Radiation Effects on the Vascular Endothelium", I think we can eliminate this excuse.

I'm hope I'm being too harsh.[3] Perhaps someone with a better grounding in statistics than me can defend their methods and show me what I've missed?

[1] [http://www.nature.com/articles/srep29901](http://www.nature.com/articles/srep29901)

[2] [http://www.nature.com/articles/srep29901/tables/2](http://www.nature.com/articles/srep29901/tables/2)

[3] How did this get published in Nature? How can this possibly have passed statistical review? Wait, you mean "peer review" doesn't imply "statistical review"? Well then why should we trust their peers to vouch for the statistics any more than we trust the authors?

<comment><USER3> The main goal of the paper was to explore a possible mechanism for the finding in a mouse model. The differences between Apollo and non-Apollo incidences of heart disease are ~technically~ significant, but look to be there more as motivation for the experiment than a conclusion in their own right--their analysis of astronauts in general vs. the rest of the US population is also new, and more interesting.</comment></comment>


Ask HN: What ideas in programming languages do you find difficult to code? - open-source-ux Sometimes understanding a programming language paradigm/pattern/feature doesn't mean you can code easily using that paradigm/pattern/feature.
Maybe you struggle with object-oriented programming? Or maybe it's functional programming that's never clicked? Or maybe some other programming paradigm like stack-based programming (Forth) or goal-directed execution (Icon, Unicon).
Or is it a particular feature within a language (e.g Monads) that just doesn't make sense?
Do you avoid these ideas or features? Maybe you feel you have no need for them? Or do you still want to master or at least understand them better?
Or maybe you have the opposite problem: you know a pattern or feature so well that you reach for it every time regardless of whether it's suitable for the problem at hand? (Anyone brave enough to admit that :-) <comment> Const-me I've implemented finite state machines multiple times (network protocols, format parsing, CNC controls, videogame AI, etc.) in different languages.

Found it surprisingly difficult to code well, regardless on the language, esp. when there're many states.

<comment><AUTHOR> When some one complains about how async nodejs and callback are hells. I smile. FSM are notoriously hard to write, manage and debug. Because they are async by design.

In one of my prev workplaces we worked on state machines. Few good takeaways was to design state transition functions in a large array laid out with all possible hooks in order. And document the hell out ofit. Another approach was to generate boiler plate out of fsm given its grammar.

<comment> Const-me For asynchronous IO, we now have async-await in many modern languages. The feature pretty much solves IO related callback hell; the compiler builds these state machines automatically, and keeps them abstracted behind a nice API making code easy to read, write and debug.

I wish someone would invent an approach suitable for generic FSMs, not just for async IO. External code generators work when you have grammar or protocol state UML, but aren't without their problems.

<comment><USER2> How about esterel? It seems to be a nice language based on FSM. [https://en.wikipedia.org/wiki/Esterel](https://en.wikipedia.org/wiki/Esterel)

</comment></comment></comment></comment><comment><AUTHOR> Strange as it sounds, a new language's syntax has become increasingly important and difficult to learn.

I learnt a bit of Go during weekends. I love the power and simplicity of concepts it brings in. But syntax is weird - func args and return is so weird. And variable declaration is verbose.

A language's syntax familarity with existing langauges like c, java, pythn, ruby etc.. Helps the speed at which experienced programmers process code. This is not just writing but also reading lot of open source code. If i dont feel upto speed with reading and writing - it kind of discourages.

<comment><USER3> There's a common refrain you'll hear among Gophers. It goes something like: "I just wrote a 150+ line mind dump. And it successfully built on the first try. No errors. That's never happened before!" So stick with it. It's designed for that level of productivity ;)

I feel like I'm learning new concurrency patterns every week or so. Visualization tools like gotrace help, but it's still a mental twizzler. The first time you see chan type os.Signal, or func() or chan chan, you can't help think to yourself "why would anyone do this?" But as you begin to realize its not just about passing data but distributed control flow through your system, you gain more confidence in experimenting.

<comment><USER4> I picked up "Concurrency in Go" ([http://amzn.to/2xiGSmi](http://amzn.to/2xiGSmi)) a few weeks ago. Total game changer on the concurrency part. It totally explains the whole model with a ton of examples and concurrency patterns. I'm still wrapping my head around a lot of it, but my day job code has improved significantly since even my first pass through the book. Highly recommend.

I'm still trying to wrap my head around garbage collection and other optimizations that we can make at a lower level. Go is so fun, though.

</comment></comment></comment><comment><USER5> Erlang's syntax. Ouch.

<comment><USER6> There's Elixir for that..

<comment><USER5> Unless you're working on a project already written in Erlang.

Also, my understanding (please correct me if I'm wrong) is that Elixir doesn't yet support all the language/runtime features that Erlang does. Has that changed in the past year or so?</comment></comment></comment>


Steady.js – No more scroll jank - <AUTHOR> http://lafikl.github.io/steady.js/

<comment><USER2> How about no more scroll jank by just delivering plain useful content without the anti-usability bells and whistles? Even the cheapest hardware out there today is able to provide a nice user experience, and in answer to that we invent new ways to make everything bloated and choppy.

<comment><USER3> While I completely agree with your principle, I find myself interested in shimming the not-yet-standard "sticky" positioning, which is in draft specifications and available in bleeding-edge [0]. Depending on how many items use it, you would have to write your scroll handlers carefully.

In cases where this would really improve usability, I consider it an exception to my general antipathy towards "bells and whistles", since it will be native before too long.

[0] [https://developer.mozilla.org/en- US/docs/Web/CSS/position](https://developer.mozilla.org/en- US/docs/Web/CSS/position)

<comment><USER4> sticky isn't expected to change much, and ships prefixed (and with accelerated compositing) in iOS 7.

<comment><USER5> But it remains unavailable in Google Chrome and they don't plan on implementing it until it hits the standards board.

</comment></comment></comment></comment><comment><USER6> What is scroll jank? Neither the author of this post nor the links posts explain it. Searching for more information just brings up those same pages.

<comment><USER7> Not sure why the need to invent a new word for this. Scroll "twitch" would have been a perfectly acceptable choice I would think. ie. Twitchy scrolling.

<comment><USER8> It's not a new word, it's been around for decades

<comment><USER9> Jank is a slang word.

[http://www.telegraph.co.uk/culture/10303816/Derp-YOLO-and- Ja...](http://www.telegraph.co.uk/culture/10303816/Derp-YOLO-and-Jank-make-it- in-to-new-dictionary.html)

They seemed to not know about proper terminology such as jitter.

<comment><USER8> I've never heard jitter used in client side web development, so it may just be custom in this domain. That being said, claiming either one as proper seems a bit misguided

</comment></comment></comment></comment></comment><comment><USER10> The infinite-scroll demo was pretty janky for me: Chrome 35.0.1916.114 on a Macbook Air.

Scrolled down to the bottom, and then got thrown around the page a bit before settling. Not a fun experience (and I've seen infinite scroll done right).

<comment><USER11> You're referring to "jank" when additional content is added to the page, which to my understanding isn't what this library remedies.

<comment><USER10> True, though it's jank nonetheless. I just expected a little more from a demonstration of a "jank-free" experience. Had it been a font-rendering library, I'd gladly be more forgiving. Maybe their demo should have been some kind of parallax scrolling (from whence so much of this scroll-related jank seems to originate)?

</comment></comment></comment><comment><USER12> This is a great idea and I love that it is self contained.

However, I don't see a lot of benefit in the way you're using requestAnimationFrame. JavaScript is single threaded, so if your callback is a long-running function then the onscroll handler won't fire until the callback is done.

Instead of using requestAnimationFrame to delay __both __the checking and handler callbacks (which means callbacks don 't know about the scrolling until 33ms after it happens) you'd probably be better off using it to just throttle the global onscroll handler.

You might also want to take a looks at mobile scroll events. Chrome is relatively sane but iOS Safari and the native Android browser do weird things like only firing a scroll event after the page has stopped moving.

<comment><USER13> > However, I don't see a lot of benefit in the way you're using > requestAnimationFrame. JavaScript is single threaded, so if your callback is > a long-running function then the onscroll handler won't fire until the > callback is done.

When a normal onscroll handler runs, doesn't it block the browser from processing the scroll event until the handler is finished? I assume this is to keep that from happening.

<comment><USER12> Yeah, but let's say scroll events happen every 10ms and the callback takes 50ms to complete. The first scroll event will be relatively fast, because it's just doing scheduling.

But when the callback kicks in, the scroll events that happen in the 50ms it takes will be buffered. The browser can't pause the callback to run the event handler.

So we will still get janky performance.

</comment></comment></comment><comment><USER14> The infinite scroll example shows a blinking "Loading..." text and that's it. Recent FF on Windows.

[1] [http://lafikl.github.io/steady.js/examples/infinite.html](http://lafikl.github.io/steady.js/examples/infinite.html)

<comment><USER15> I can confirm problems in Firefox. It does work in Chrome, however.

</comment></comment><comment><USER16> another scroll junk. I have my monitor positioned vertical, so 1920 vertical pixels and no scroll bars, ...next pages content not accessible, stack forever at page one!

<comment><USER17> Rephrasing what rnnr said: The infinite scrolling example breaks if you are not able to scroll. For example, if you just delete enough nodes in that list where the scroll disappears, then you wont be able to load in more content.

<comment><USER18> A proper implementation of infinite scroll loads until the window is filled.

</comment></comment></comment><comment><USER19> just a wrapper for requestAnimationFrame.. useful.. but not game changing</comment>


Differentiable approximations to the min and max operators - <AUTHOR> https://github.com/AidanRocke/analytic_min-max_operators <comment><USER2> How does this stack up to the softmax[0] function, log(exp(n_1) + exp(n_2) + ... + exp(n_i))? Are they analytically equivalent?

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

</comment><comment><AUTHOR> tl;dr

1\. Within the context of optimisation, differentiable approximations of the min and max operators on R^n are very useful.

2\. However, in order for these approximations to be useful they must also be numerically stable.</comment>


Show HN: Generate 2,000 REST APIs within a second - <AUTHOR> https://medium.com/@o1lab/build-rest-apis-at-the-speed-of-your-thought-nodejs-mysql-xmysql-95a5eccbd450 <comment><USER2> Awesome!, API in one step. Will be great to have a front end that can be deployed and used as fast as xmysql

<comment><AUTHOR> .. This is WIP

<comment><USER2> great!</comment></comment></comment>


Ask HN: How do you take notes on your laptop? - <AUTHOR> I'm building my Linux system as debloated as I can and I would like to know if you guys found ways to take notes during lectures with light/not dependencies heavy software. <comment><USER2> Markdown, any existing text editor.

Low tech, shut the lid, place paper on it, use writing implement of your choice.

</comment><comment><USER3> VIM! (I'm almost joking)

VSCode in markdown with the preview panel open.

Or you can easily create your own with electron.

</comment><comment><USER4> Markdown editor. I'm using Typora. Sometimes Google Keep only.

</comment><comment><USER5> I am using Xpad.

</comment><comment><USER6> Typora</comment>


Announcing TypeScript 0.9.1.1 - <AUTHOR> http://blogs.msdn.com/b/typescript/archive/2013/08/21/announcing-typescript-0-9-1-1.aspx

<comment><USER2> Why pick a name that's already used by the "script" utility (which has been making "typescript" files, presumably, for the last couple decades)?

</comment><comment><AUTHOR> if you use visual studio, this update resolves all the bugs I've encountered on my (big) typescript codebase.

so it's a must-have update for VS devs

<comment><AUTHOR> there is still have a problem with intellisence breaking, [https://typescript.codeplex.com/workitem/1550](https://typescript.codeplex.com/workitem/1550)

so not quite perfect yet....</comment></comment>


Ask HN: Did anyone else get a Google Chrome Laptop yet? - <AUTHOR> I submitted the application to test drive a Chrome Notebook a couple days ago.
The laptop came this morning. The packaging was very simple: One laptop, one battery, one cord, one large single piece of paper with instructions, and one business card from Intel letting me know that if I cracked the computer open that is what I would find.
I will make a large post tonight after work (5pm EST) detailing my experiences with it and taking lots of photos.
Did any other HNers get one? <comment><USER2> Mine just showed up while reading this post! I didn't get any confirmation email. I applied using the prompt on the "new page" tab (running dev channel build) during the live OS launch. It came in a UPS truck 9:40am CST. Sweet!

EDIT: The box it came in was pretty cool, and they had fun writing the copy for their instructions card. I uploaded a scan of the instructions card to my site [http://tdupree.com/2010/12/09/got-my-chrome-os-powered- cr-48...](http://tdupree.com/2010/12/09/got-my-chrome-os-powered-cr-48..).

<comment><USER3> LOL:

"Do not expose the device to water, moisture, or rap music."

<comment><USER4> Too bad. For example we got Ice T unboxing our game :)

<http://www.youtube.com/watch?v=CXt2Q8EdzIw>

<comment><USER5> That's the best unboxing I've ever seen, bar none. Ice T should unbox everything from now on.

</comment></comment></comment></comment><comment><USER6> I did:

[http://techcrunch.com/2010/12/09/cr-48-chrome-notebook- deliv...](http://techcrunch.com/2010/12/09/cr-48-chrome-notebook-delivered/)

<comment><USER7> what does the "full screen" button do? Isn't chrome os full screen by default?

<comment><USER8> Hides other tabs and the address bar.

</comment></comment></comment><comment><USER9> This is becoming suspiciously like a post-Singularity intelligence crop- dusting free advanced tech on remaining Primitive communities.

</comment><comment><USER10> I have a feeling I'm going to be very disappointed when I get home from work today and there is no Cr-48 waiting for me.

<comment><USER11> I got a package notification email, and was psyched until I realized it was the 24-pack of Kraft Macaroni and Cheese that I ordered from Amazon :(

<comment><USER11> And screwed once again, this time by Target. Dammit. I don't really give a crap about that bookcase at this point.

</comment></comment></comment><comment><USER12> Did you get a confirmation from Google that they were going to send you the laptop?

Where are you based?

<comment><AUTHOR> Nashua, New Hampshire, USA

I got not confirmation. The outer box didn't even say it was from Google.

<comment><USER13> Same. No confirmation. The box had a guys name and Kentucky address. I'm in Boston. Really confused at first. Can't believe how fast they got these out.

Edit: Nope, not your name. I had no idea why he would have sent me a box.

<comment><USER14> Hopefully not my name!

</comment></comment></comment></comment><comment><USER15> You might very well be among the first!

I assume Google didn't ask for an NDA with this (did they ?) so I'm looking forward to the future un-boxing videos, screenshots and blogposts about this little device one can't buy (until it hits eBay ;) ).

I couldn't use it fulltime though until I'm able to code in and run Java code on that thing.

<comment><AUTHOR> The submission app asked me to play with it an talk about it, so kind of the opposite of an NDA.

So tonight I will sing its song from mountaintops and, well, take it apart.

<comment><USER16> > The submission app asked me to play with it an talk about it, so kind of the > opposite of an NDA

Fantastic move from google side. I hope more companies adopt this strategy in future.

</comment></comment></comment><comment><USER13> UPS arrived about an hour ago. I had the "apply" tab in Chrome.

It runs Wave without much issue, and that crawls on a lot of non-traditional PC devices. They dropped the function keys but the keyboard does have a row of accessorie keys at the top, just without the F numbering.

</comment><comment><USER17> Not yet (I applied as an individual developer) but I'm also trying to convince my wife's nonprofit (about 12-15 users) to apply...just need to convince them running their business as a beta test is a good idea...

They already live off gmail, google sites, google calendar, etc. so it would be a bit of a slam-dunk for them.

<comment><USER18> Why convince them? Just apply for them -- if the machines show up, I'm pretty sure they'd be 'convinced'..

(I applied for an individual machine, as well as a set for my office)

<comment><USER17> Subversive...I like it :)

</comment></comment></comment><comment><USER19> I got a knock on my door a few minutes after reading this post. Signed up via the QR code during the presentation.

Also, it seems to be working with my Apps account. Yesssss.

</comment><comment><USER20> I received one also, crazy, I filled out the anonymous (non-dev) form 2 days ago.

</comment><comment><USER21> Hmm, I applied twice, from <http://www.google.com/chromeos>, and from the link in the dev version of the browser. I wonder if that will actually hurt my chances of receiving one... :/

<comment><USER2> I'm not sure if it does or not. I did the same thing. Since the applications were so different, I figured I would fill out the general one on their website in addition to the one linked to from within the chrome dev build (I used the same Google account for both applications). I got my Cr-48 this morning, so it must not have counted against me too much.

</comment></comment><comment><USER22> Wow, when I filled out the application (developer) form only two days ago I was sure I wouldn't be receiving one considering they even mentioned there were limited numbers available.

Mine showed up at my doorstep just over an hour ago. Amazing.

</comment><comment><USER23> I just got mine too. Sadly, as expected, flash brings it to its knees and fonts look like Linux :(

Otherwise pretty sweet. Think I'll try and sneak some better fonts on somehow and then use it for everything save Hulu and development.

<comment><USER24> Explain to me this: you receive something for free, and your first response is to find out what's wrong with it ?

<comment><USER25> It's a test/dev machine, I'm pretty sure that's the _point_.

<comment><USER24> Interesting. I'd be so happy to receive a functioning computer for free with some new OS on it that I'd be too star-struck to see its warts for quite a while.

</comment></comment></comment></comment><comment><USER26> I applied, but from a UK address. So I'm not expecting to get anything.

<comment><USER27> _I understand that Google will only ship the device to a US-based address and cannot send this device to a P.O. Box or address outside of the US_

From the TOS at the bottom of the application

<comment><USER26> Indeed, that's why I don't expect to get anything.

</comment></comment></comment><comment><USER28> I submitted as an individual, but haven't heard anything yet. I did already say my goodbyes to the CAPS LOCK in anticipation.

</comment><comment><USER29> I applied yesterday (the day after the live launch event) from the Chrome OS page, and by that point they had a whole questionnaire to fill out about your internet habits and what software you typically use and stuff like that. Maybe the QR code mentioned earlier really was a shortcut of some sort.

Crossing my fingers for this one...

</comment><comment><USER30> Good luck. Hope they are onto a winner.

</comment><comment><USER31> I applied as a developer as soon as the link was posted on engadget during the live show. I hope mine comes tonight, UPS usually runs around 5.

Questions: Does it have an SD card slot? Do you have any idea size of SSD? Do you know what CPU it has?

<comment><USER22> To answer your questions, yes it has an SD slot on the right-hand side. I've been looking around but can't determine the exact size of the SSD. No idea on the specifics but I am aware that the CPU is an Intel Atom chip.

<comment><USER31> Just found out via Engadget teardown: [http://www.engadget.com/2010/12/10/google-cr-48-laptop- torn-...](http://www.engadget.com/2010/12/10/google-cr-48-laptop-torn-down- and-destroyed-in-one-unlucky-day/)

16 gig Sandisk SATA ssd 1 gb hynix memory module

So I just answered my own question. But now here comes the real question: Will I receive mine? I have already created 3 Chrome apps.... Would love to run it natively! :)

</comment></comment></comment><comment><USER32> That's a lot faster than I thought they were going to get them out (I was figuring they'd be arriving around the beginning of the year). Well, here's to hoping that I get one. Definitely anticipating posts with user experiences.

</comment><comment><USER33> do you get to keep it?

<comment><AUTHOR> Yes

</comment></comment><comment><USER34> I decided to ask for one today after seeing this. I said that I want to bring the dynamic environment of Emacs to "normal people", and Chrome OS is the first compelling technology that could make that a reality.

We'll see what happens.

</comment><comment><USER35> What are the tech specs?

<comment><USER36> In particular, x86 or ARM?

<comment><USER37> According to gdgt.com it's an Atom CPU, so x86

</comment></comment></comment><comment><USER38> Yup - I scanned the QR Code during the press conference and filled out the form on my phone. I didn't think I stood a chance of getting one, but Christmas came early today.

Nice machine.

</comment><comment><USER39> I wish I could have one. I applied for it from Turkey. But as we all know this program is US only (for now). Looking forward for an extension of the program.

</comment><comment><USER40> For anyone interested, here is the full specs page from the CR-48. <http://db.tt/OEOLnOY>

</comment><comment><USER41> I got one. I think that _everyone_ that applied using the prompt on the dev channel build of Chrome got one. Can anyone refute this?

<comment><USER42> As of yet don't have one. But I'm on pacific time, so may come later today.

<comment><USER43> Likewise, Los Angeles. Will report back.

</comment></comment></comment><comment><USER44> I'm probably a little late on this, but I had no idea it was going on. I put my application in today, we'll see what happens.

</comment><comment><USER45> What's the deal with 3G? Is it activated?

<comment><USER46> There's a free plan built in (100MB every month for two years) but you do need to manually activate it.

</comment></comment><comment><USER47> So what did you put in your application? I submitted before the announcement ended. But no word yet.

<comment><AUTHOR> I applied via noticing the message on the "new tab" page of Chrome dev version.

It didn't ask for anything but my name, address, and email.

edit: it specifically asks for gmail if you have an email, and I've submitted bug reports for at least two google products on google code. Maybe that factors in?

<comment><USER48> I think I got the same page after scanning the QC code they showed during their presentation. All it asked for was name address and email.

Crossing my fingers and hoping that it was some sort of shortcut that guaranteed entry into the program.

<comment><USER49> do you mind linking to the QR code?

<comment><USER48> <http://goo.gl/ocJBw>

Good luck!

</comment></comment></comment></comment></comment><comment><USER50> I applied yesterday. Here is hoping!

</comment><comment><USER51> I submitted too. But no email or delivery yet. _fingers crossed_

<comment><USER52> same

</comment></comment><comment><USER53> What's the hardware? The Techcrunch photo looks ugly :-P

<comment><USER54> According to the original announcement video stream, the CR-48 hardware is not the actual hardware. It's a test platform for beta testing the software.

<comment><USER53> I missed that. Did it mention what the CR-48 hardware is anyway?

<comment><USER55> I'll just leave this here. <http://gdgt.com/google/cr-48/specs/>

<comment><USER56> Pretty vague specs there. Anyone have anything a little more detailed?

</comment></comment></comment></comment></comment><comment><USER57> I'm in the UK, so no :(

</comment><comment><USER58> when did you apply?

<comment><AUTHOR> Just two days ago, I think.

<comment><USER58> wow, that is quite fast. thanks for keeping us posted.

</comment></comment></comment><comment><USER59> Will it blend?

<comment><USER60> I really hope BlendTec applied for one.

</comment></comment><comment><USER17> Can it print?

<comment><USER61> <http://www.google.com/chrome/intl/en/p/cloudprint.html>

</comment></comment><comment><USER37> anybody in the UK get one?

<comment><USER46> They won't be shipping to the UK. Sorry.

</comment></comment><comment><USER62> Wow, Google moves very fast for such a large company.

<comment><USER63> I have no inside information but I'd assume this has something to do with automation. They ask for your Google Account when you fill out the application and they said outright that they were looking for people who "live on the web". Since we know they keep all kinds of usage data about their users it's just a matter of matching an application to accounts with heavy usage and sending them out accordingly. All of which could be done by a computer.</comment></comment>


Publishing Effective Modern C++, Part 1 - <AUTHOR> http://scottmeyers.blogspot.com/2015/05/publishing-effective-modern-c-part-1.html <comment><USER2>
      > I briefly considered self publication via Kindle Direct
      > Publishing, because I thought it would be an interesting
      > experiment to publish EMC++ for $9.99 and see what
      > happened. [...] I fantasized that it would also have
      > shaken up the market for programming books and paved the
      > way to a world where $10 was the new normal for
      > high-quality technical books in digital form.

Guess we'll never know now.

<comment><USER3> While I enjoy reading on my Kindle, I find that Kindle is not the best format for technical books with code samples, charts and tables. If you go electronic, it's much better to just produce a PDF. FWIW I have the PDF-only version of this book (a digital purchase from O'Reilly) and it's great

<comment><USER4> It depends on the book. I just bought Peter Norvigs Paradigms of Artificial Intelligence and although it is available for Kindle I chose the print version. The book is a monster! Too big to fit in my bag so I can't take it on my commute. Wish I'd bought the Kindle version now..

<comment><USER3> It's an incredible book, though. Well worth the effort. I didn't try it on a Kindle, but I suspect any non-trivial code listing (and this book has many) will look back because it will have to be downscaled.

<comment><USER5> Not sure. I mean, probably it is a good book for beginners, but when you have many years of experience, worked in various domains (AI, compilers, logic programming, etc..) - then this book just touches the surfaces of various these topics.

</comment></comment></comment></comment></comment><comment><USER6> This book is fantastic, by the way. It's a great resource, but I really appreciate the clever dry humor, like:

      <C++11 code example>

      Very cool. In C++14, the temperature drops further, because...

Scott, if you're reading this, that made me laugh out loud.

<comment><USER7> I thoroughly enjoyed his previous books, but somehow forgot about this book. Just ordered it, looking forward to it!

It seems that C++ is gathering much momentum since C++11: a minor revision in the form of C++14, some new great books, CLion, etc.

</comment></comment><comment><USER8> Writing a good technical book is hard work with uncertain rewards, and the very real possibilities for loss for those involved, so how do some publishers seem to be able to have so many titles? Is the model reliant on a few bestsellers to keep the rest going? Would love to know how it really works...

In the meantime, I still love these books, still buy them (I have this one), and hope they don't go away.

<comment><USER9> Well, it stands to reason that the majority of the titles don't return their costs, like in the publishing and music worlds. It's the few blockbusters that effectively subsidize everybody else, though no one seems to be able to identify them in advance. I don't have specific knowledge of the technical publishing industry, to be sure.

</comment></comment><comment><USER10> What would be a good reference for getting back up to speed, but in an environment of C++ from about 2000 to 2005? Maybe a particular version of the ARM on Abe Books? One of the original Ways books? Something else?

<comment><USER11> _Accelerated C++: Practical Programming by Example_ is a great "getting up to speed" book.

<comment><USER10> Ordered from Abe Books, thanks.

</comment></comment></comment><comment><USER12> He talks about some of his book making journeys here (with some deviation throughout): [https://youtu.be/smqT9Io_bKo](https://youtu.be/smqT9Io_bKo)

</comment><comment><USER13> It's sad to hear him talk about such a small amount of money for his efforts. Sounds like the book wasn't worth his effort. Even artists understand the value of their work.

[https://signalvnoise.com/archives2/picasso_paula_scher_and_t...](https://signalvnoise.com/archives2/picasso_paula_scher_and_the_lifetime_behind_every_second.php)

<comment><USER14> I think it probably was more than worth the effort. This is of course not his main source of income, but it certainly strengthens his reputation as one of the foremost experts on C++.

At a company I worked for previously, some people thought it would be nice to invite him for giving a talk. Even though there was a reasonable budget available, it still didn't go through because the guy is apparently pretty expensive.

</comment></comment><comment><USER15> Can't wait.</comment>


Why Uber Engineering Switched from Postgres to MySQL - <AUTHOR> https://eng.uber.com/postgres-to-mysql-migration/ <comment><USER2> Detailed article that shows Uber's thought process for moving away from PostGres. I am surprised no one has encountered these problems with indexing and repl before.

<comment><USER3> If you are interested, there are rebuttal posts in the Postgres mailing list that have been posted here when this was new news. This was from years ago now, and part of the consensus was, they didn't do ~anything~ to work with the community to optimize their workload, their workload was very much not the normal way an RDBMS is used, and MySQL was a better choice for them due to how they wanted to design their schema.

They backed themselves into a corner by trying to use the wrong piece of software for the specific way they wanted the job done.</comment></comment>


Ask HN: From programming to AI, how? - <AUTHOR> Hi HN,
I am a fairly decent programmer by now, but I would like to explore AI more deeply.
I do have basics of statistic, I know about mean mean square error, linear regression, regression tree, k-mean etc...
I would like to get into deep learning but actually I don't know what direction I should take.
I would like to do like I did with programming, exploring simple problem first and then moving into more sophisticated stuff.
However I feel like that the problem of the field are pretty expensive to work on either from a monetary point of view (GPU) and from a duration point of view.
Anybody has took this same path before? What would you suggest? What problem did you learn the most from? <comment><USER2> Here's a tentative plan- 1\. Do fully AndrewNg's course from Coursera

2\. Do a course called AnalyticsEdge by MIT folks from edx.org. I can't recommend this course highly enough. It's a gem. You will learn practical stuff like RoC curves, and what not. Note that for a few things you will need to google and read on your own as the course might just give you an overview.

3\. Keep the book "Elements of Statistical Learning" by Trevor Hastie handy. You will need to refer this book a lot.

4\. There is also a course that Professor Hastie runs but I don't know the link for it. I highly recommend it as it gives a very good grounding on things like GBM, which are used a lot in practical scenarios.

5\. Pick up twitter/enron emails/product reviews datasets and do sentiment analysis on it.

6\. Pick up a lot of documents on some topic and make a program for automatically producing a summary of those documents - first read some papers on it.

7\. Don't do Kaggle. It's something you do when you have considerable expertise with ML/AI.

8\. Pick up flights data and do prediction for flight delays. Use different algorithms, compare them.

9\. Make a recommendation system to recommend books/music/movies (or all).

10\. Make a Neural Network to predict moves in a tic-tac-toe game.

These are a few things that can get you started. This is vast field but once you've done the above in earnest I think you have a good grounding.

Pick a topic that interests you and write a paper on it - it's not such a big deal.

<comment><USER3> Is this the course that you were referring to in 4)?

[https://lagunita.stanford.edu/courses/HumanitiesandScience/S...](https://lagunita.stanford.edu/courses/HumanitiesandScience/StatLearning/Winter2015/about)

<comment><USER2> Yes, that's the one.

<comment><USER3> Thanks!

</comment></comment></comment></comment><comment><USER4> I just started the Coursera Machine Learning course. I know that it's probably a bit under your skill level, but the second half of the class might give you some broad education about what's possible in the field of machine learning. [https://www.coursera.org/learn/machine- learning/](https://www.coursera.org/learn/machine-learning/)

<comment><USER5> I started this course to learn the maths, technical terms, approaches and 'philosophy' of machine learning. I'd highly recommend it even with the stats knowledge you have, you'll still get a lot out of it. I wanted to be able to understand articles about deep learning and this course allowed me to do that.

I recommend watching the videos at a higher speed at least, and you can skip ahead if you are not doing the course to get a validated grade, although I suggest working through the whole choose.

<comment><USER4> Oh yeah, Ng talks pretty slow. 1.25 is a minimum cruising speed and I often go faster.

</comment></comment></comment><comment><USER6> I'm in the same boat - so far it seems like the plan would be 1) Get more familiar with Linear Algebra; 2) Take Ng's coursera course "Intro to Machine Learning" and 3) start trying some kaggle.com challenges.

<comment><USER7> 4) [http://cleveralgorithms.com/nature- inspired/index.html](http://cleveralgorithms.com/nature-inspired/index.html)

</comment></comment><comment><USER8> Hello, my background is just like yours. _Assuming you are a total noob_

I learned that AI is not like programming, where anyone with basic knowledge of computation can dive in. You can NOT just learn AI by reading other people's code.

Its like Physics, there are solid principles you need to understand before you get in.

The point: AI does not come with the "batteries included". If you are in deed a noob you MUST learn the prerequisites.

Follow these steps in order and I guarantee you will be competent with AI in six months tops.(from my past experience)

      -  1. Know what AI actually is

[https://www.youtube.com/watch?v=bxe2T-V8XRs&list=PL77aoaxdgE...](https://www.youtube.com/watch?v=bxe2T-V8XRs&list=PL77aoaxdgEVDrHoFOMKTjDdsa0p9iVtsR)

      -  2. Write basic  Machine Learning code

[https://www.youtube.com/watch?v=cKxRvEZd3Mw&list=PLOU2XLYxms...](https://www.youtube.com/watch?v=cKxRvEZd3Mw&list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal&index=5)

      - 3. Understand the Mathmatics involved

[http://www.heatonresearch.com/book/introduction-neural- netwo...](http://www.heatonresearch.com/book/introduction-neural-network- math.html)

      - 4. Get some important concepts,

[http://neuralnetworksanddeeplearning.com/](http://neuralnetworksanddeeplearning.com/)

      - 5. Finnish off.

[https://www.deeplearningbook.org/](https://www.deeplearningbook.org/)

</comment><comment><USER9> This seems to be a good introduction if you like to learn by reading while building something: [http://neuralnetworksanddeeplearning.com](http://neuralnetworksanddeeplearning.com)

It basically walks you through building a neural net that can make sense of hand written digits.

</comment><comment><USER10> It sounds like you've got the beginnings of Machine Learning (classification & regression), but I'd still recommend checking out Coursera. The JHU Data Science series is good, but more geared towards DS than AI. There are others on there as well; if you're looking to get into deep learning, I echo the recommendation to check out Ng's course, though this might be good, too: [https://www.coursera.org/course/neuralnets](https://www.coursera.org/course/neuralnets)

</comment><comment><USER11> This may not be entirely in line with what you're looking to do, but Kaggle is one heck of a good way to learn data science and machine learning. Some of the competitions in particular lend themselves to a deep learning methodology.

The best part is that the competitions keep it fun, and the eventual winners share the methods they used to get such good results.

Good luck!

</comment><comment><USER12> Start your pet project in AI, you will gain real hands-on experience and skills, will have some portfolio and will understand is it for you or not.

</comment><comment><USER13> You can try "Expect Syetem" [https://en.wikipedia.org/wiki/Expert_system](https://en.wikipedia.org/wiki/Expert_system)

<comment><USER14> This answer would have been good 40 years ago..

</comment></comment><comment><USER15> I recently did exactly this, and currently think of the process as several layers working in parallel.

(1) implementation skill building: tensorflow udacity MOOC, and tutorials on the TF website

(2) implementing projects: find a research paper you're interested in, and try implementing it. e.g. "A Neural Algorithm of Artistic Style"

(3) foundational ML learning: Bengio's textbook, Michael Nielsen's textbook, cs231n, the Udacity ML MOOCs which end with the course on Reinforcement Learning, ... this list could go on for quite some time, which can be anxious for autodidactics because teaching yourself a thing means that your knowledge will be quite lean, but that's OK.

(4) cutting-edge ML learning: join a deep learning reading group / meet-up, and read influential papers weekly

(5: optional) write a technical blog, where the audience is yourself before understanding something.

Also, having high-level conceptual maps when entering an unfamiliar space is useful. For this, I recommend reading all of colah.github.io and Bengio's paper "Representation Learning: A Review and New Perspectives"</comment>


Brain Monitors Are Going Mainstream, Despite Skepticism - <AUTHOR> http://www.wired.com/2015/05/internet-anything-brain-monitors-going-mainstream-despite-skepticism/ <comment><USER2> EEG is a fundamentally noisy and low bandwidth measurement of neural activity. I work with neural recordings based on intracortical electrodes with resolution of single neurons. I think of EEG as analogous to listening to an orchestra from outside the building. You _may_ hear that there's a bit more brass than strings, and you might get some sense of the overall sound level, but you won't really be hearing the music. To strain this analogy, any time you move your facial muscles, it's like a truck driving by swamping everything out.

<comment><USER3> I work in a lab with EEG and FMRI primarily writing software for neural feedback which involves a lot dsp and physics, and considering that spike timing is a predominant theory in (comp)neuroscience today (and has been for nearly 40 years, yet no more fundamental understanding… go figure…), I think it would be an understatement to say that the level mathematical and physics rigor/theory applied by most people in the field is considerably lacking… if not a joke compared to what physicists/astrophysicists have had to deal with and have proven by experimentation in much nosier environments in the same time frame. I really see the field bifurcating with people doing more of the same, and those who want to import experience of modern physics…

<comment><USER4> I am aware of theoretical physicists applying statistical mechanical principles to understand neurons and biological neural networks (one example: [1]). This is a reasonably hot topic in bio-physics. I am also aware of researchers who are applying state of the art high-dimensional data analysis to MRI, etc. (one example: [2]).

I would modify your assertion to: "this kind of application of high-level physics and math should be more common."

[1] [https://web.stanford.edu/dept/app-physics/cgi- bin/person/sur...](https://web.stanford.edu/dept/app-physics/cgi- bin/person/surya-gangulijanuary-2012/)

[2] [http://jelena.ece.cmu.edu/bimagic.html](http://jelena.ece.cmu.edu/bimagic.html)

<comment><USER3> That is certainly a more diplomatic way of putting it, and I will try to use such language in the future because its probably a lot more conductive in exploring such with those who are interested but reluctant.

</comment></comment></comment></comment><comment><USER5> These really gross, noisy EEGs are useful for some things, but they're being peddled alongside all manner of snake oil. The structure of thought and emotion is so complex and obscure that leading scientists are barely able to even define it, much less detect it with powerful, invasive tech — much less again with this type of device.

If you find using an EEG device improves your life in some way, that's great - go for it. But exercise skepticism when it comes to the claims being made about just what is being detected here and with what level of accuracy and precision.

</comment><comment><USER6> What kind of data can monitors like this actually collect out-of-the-box? I know that you can train a system to recognize some pretty high-level abstractions based on individual neural activity, but how reliably would a similar pattern-recognition mechanism work across a larger population?

<comment><USER7> These consumer-targeted devices are predominantly used to detect and act on changes in the relative power of certain frequency bands from rhythmic neural activity. These changes in activity are common across people, and don't require any specialized user-specific techniques to identify. For instance, alpha wave (8-12 Hz) power is correlated with arousal/attentiveness.

<comment><USER6> Interesting. So am I right to assume that these devices can detect a range of emotions? It would be fascinating to incorporate some kind of iterative feedback loop into a work of art.

<comment><USER5> No, emotions are extremely complex phenomena and can't be detected with this type of hardware.

<comment><USER8> Exactly, you'd need a mood ring for that.

</comment></comment></comment></comment></comment><comment><USER9> This seems neat, but I'd like to see a study some sort on what sort of benefits (if any) it has over the long term.

It would be interesting to see if developers of these kinds of devices can eventually progress to one reliably driving a keyboard at anything approaching normal typing speed.</comment>


Alpha alert: OpenOffice.org for Mac - <AUTHOR> http://news.com.com/8301-10784_3-9728852-7.html?tag=head <comment><USER2> Wow, this is great news. Not the crashing and destroying your data part, but that they're porting OpenOffice in the first place. I'm using it in X11 now, can't wait for this to be stable.</comment>


Understanding Transducers (2014) - <AUTHOR> http://elbenshira.com/blog/understanding-transducers/ <comment><USER2> Argh, this is the second time this gets me. It was posted in 2014 and I clicked on it hoping for an explanation of ultrasonic component physics, which I'm mildly interested in. Instead, yet another programming pattern that has hijacked a common term. And now, being reposted, it gets me again.

<comment><USER3> The same thing happened to me.

Ambiguous jargon is a real problem in the field. I guess it's because the field is relatively young and we haven't nailed things down yet.

<comment><USER4> Me three, I was expecting an interesting read on microphones and loudpeakers...

<comment><USER5> Me four. Skipped through thinking "how does all this programming jargon explain how a transdu....ooooh!" Came to the comments seeking solidarity.

<comment><USER6> Me five. This isn't the first time I've had this happen.

<comment><USER7> Me six. Worked as an apprentice DG engineer, learned about transducers when being taught to calibrate the vacuum chambers on reel to reel tape drives. :)

<comment><USER8> Hey all you pro audio people: you gotta see what Clojure has to offer for your world. Having come up in CSound Clojure's Pink and other libraries are first class, and the language's semantics pair so well with the audio mindset. Rich Hickey wrote Clojure after dealing with broadcast systems for 20 years. I think of transducers like a side chain. Check out Rich's additive synthesis stuff and you'll see the ethic and thrust behind this language. When the word Composition is invoked it means applying aesthetic, thinking about time, and the rigor that comes along with audio production. If you're a hacker/musician at heart you'll find a home within the Clojure community right away on many levels.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> An interesting take on transducers is that they're just functions that return lists

        transducer : a -> List b

with one additional caveat: they can contain internal mutable state.

For example the map transducer just takes in a function and returns a modified form of that function that wraps the result in a single element list. The filter transducer takes in a predicate and returns a modified form of that predicate that returns an empty list or single element list of the argument when the predicate evaluates to false or true respectively.

The take transducer is what requires state (and indeed it is implemented with mutable state in Clojure in the form of an internal counter). That means no reusing stateful transduced reducers otherwise you'll find it's already "exhausted." In this case just do the same thing as the map transducer on the identity function until the internal counter hits the number of elements specified.

Composing the transducers becomes just flatmapping/mapcatting one over the result of the previous one (Kleisli composition for those familiar with Haskell).

Running the transducers on an actual structure requires an actual reducing function and consists of first passing an element to the transducer, then reducing over the generated list with the reducing function, and offering the reduced result as the beginning accumulator for the next element that gets passed into the transducer.

See [https://stackoverflow.com/questions/26653829/how-is-a- transd...](https://stackoverflow.com/questions/26653829/how-is-a-transducer- different-from-a-partially-applied-function) for where I first learned about the fundamentals behind this.</comment>


How much food can you really grow in a city? You'd be surprised. - <AUTHOR> http://www.boston.com/bostonglobe/ideas/articles/2009/07/12/qa_novella_carpenter/ <comment><USER2> Probably the world's number one example of urban farming is Shanghai: "The magazine Urban Agriculture describes how Shanghai has in effect created a nutrient recycling zone around the city. The municipal government manages 300,000 hectares of farmland to recycle the city's night soil. Half of Shanghai's pork and poultry, 60 percent of its vegetables, and 90 percent of its milk and eggs come from the city and the immediately surrounding region. " (source: <http://www.earth-policy.org/Books/Seg/PB2ch11_ss4.htm>)

Of course, you're not going to this kind of scale from scattered community gardens.

<comment><USER3> Havana, Cuba is another successful example: <http://www.foodfirst.org/en/node/273>

</comment></comment><comment><USER4> If you are interested in this sort of thing I highly recommend checking out Path to Freedom.

"The yard has over 350 varieties of edible and useful plants. The homestead's productive 1/10 acre organic garden now grows over 6,000 pounds (3 tons) of produce annually."

<http://www.pathtofreedom.com/about/urbanhomestead.shtml>

</comment><comment><USER5> This wasn't about how _much_ food she is growing. What was surprising?

</comment><comment><USER6> Also check out Zolt's square foot garden project that he is doing with his kids:

<http://www.toddalewis.com/square-foot-gardening.aspx>

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

</comment><comment><USER7> I like how she is "just doing it". As described, it's not primarily part of or subservient to some "agenda". Seems rather "hackerish"; hacking the local setting to combine urban and rural elements in a mix that suits her.

My one caveat would be to make sure your soil is safe; urban settings have trouble with contamination, from "brown fields" to lead paint, motor oil, etc. The problems can be remediated or worked around; the thing is to know about them so that you can do so.

I think the HN crowd is more likely to understand this safety issue. My challenge when talking with friends who start urban gardening is to point the concern out without sounding negative about their project. I'm really just concerned for their health; as long as that is assured, more power to them. Unfortunately, I think sometimes my attempt to be helpful in this regard just comes across as negative.

<comment><USER8> the very fact that she still is alive to tell the story negates the safety issue (i imagine the concerns are trumpeted for decades toward her, not new thing)

she's probably healthier than those safety-conscious people who buy groceries at wal-mart

by volume, plants are consist of carbon, oxygen, and nitrogen, phospate, potassium; thus major elements. they do take CO2 from air pollution to grow. motor oil, if it ever breaks down, probably will just supply C and O. lead is not even a trace element, average plants probably don't take Pb and if they do, probably extremely minute, like 0.0000001% (# pulled out of my ass)

maybe just washing it with baking soda and rinsing it with running water is sufficient, probably overkill -- don't worry much about plants, they are normally safe, that's why you rarely read news about people got killed by eating plants.

i'm starting urban gardening too (i played with aquascape before) ... it will be interesting

<comment><USER9> Lots of 'probablys.' You should probably do more reading and less writing.

There are elevated lead levels around "civilization" due to human activity. (Lead paint, tetra-ethyl lead in gasoline, pesticides, etc). Food crops vary in the degree to which they accumulate lead, but they do. In general, the skin of roots and tubers have the higest levels and fruits the lowest. Keep in mind though, stems and leaves can have higher levels, particularly since various members of the mustard family (which includes broccoli, cauliflower, brussel sprouts, etc) are deliberately used for phytoremediation of lead.

<comment><USER8> fine, can you point me the cases when someone die due to lead poisoning from eating plants alone?

my point is that the amount of Pb is minimal in plant, esp if you wash&clean it. you probably will get more Pb from eating pesticides, inhaling gasoline or licking the paints

the more reading you do, the more you will be asking questions. some of conclusions i had in past years are now broken. i keep learning stuff -- so really, i don't have absolute knowledge about anything ... but it's okay

</comment></comment></comment></comment><comment><USER10> Counterpoint; Will Wilkinson on urban farming: [http://www.willwilkinson.net/flybottle/2009/07/08/urban- farm...](http://www.willwilkinson.net/flybottle/2009/07/08/urban-farming/)

<comment><USER4> It isn't clear exactly what he is arguing against. Does he take exception to the term "urban farming" because it contains the word "farming"? What is the connection between the fact that farmers in Iowa overgrow a handful of crops because the government pays them to and people wanting to garden in the city?

<comment><USER4> Lest anyone doubt that corn is overproduced, here are some actual numbers:

[http://www.card.iastate.edu/iowa_ag_review/winter_07/article...](http://www.card.iastate.edu/iowa_ag_review/winter_07/article4.aspx)

See the paragraph titled "Corn Utilization and Surpluses for 2004".

This of course wouldn't be a problem if it weren't for the fact that we (US taxpayers) pay for it. The artificially low price of corn has also led to a glut of processed garbage being sold back to us.

<comment><USER9> And don't forget how its spurred other perversions, like the corn ethanol industy.

</comment></comment></comment></comment><comment><USER11> I've heard that city soil can be highly contaminated. I wonder what the best way to deal with this is?</comment>


Finding the natural in natural flavors - <AUTHOR> http://www.marketplace.org/topics/business/ive-always-wondered/finding-natural-natural-flavors

<comment><USER2> The Code of Federal Regulations definition of "natural flavor":

"The term natural flavor or natural flavoring means the essential oil, oleoresin, essence or extractive, protein hydrolysate, distillate, or any product of roasting, heating or enzymolysis, which contains the flavoring constituents derived from a spice, fruit or fruit juice, vegetable or vegetable juice, edible yeast, herb, bark, bud, root, leaf or similar plant material, meat, seafood, poultry, eggs, dairy products, or fermentation products thereof, whose significant function in food is flavoring rather than nutritional. Natural flavors include the natural essence or extractives obtained from plants listed in 182.10, 182.20, 182.40, and 182.50 and part 184 of this chapter, and the substances listed in 172.510 of this chapter." [1]

"Natural flavor" is a nightmare for me. The above definition allows huge numbers of substances that most would not regard "natural". Among those, autolyzed yeast (autolysis is a kind of enzymolysis), hydrolyzed soy protein, and numerous other sources of free glutamic acid (aka "MSG") appear to be permitted. These wreak havoc on my stomach. Thus any food containing "natural flavor" is instantly suspect and has the chance of causing me incredible digestive distress.

For those interested in MSG intolerance, I have found the list at [2] to be reliable.

[1] [http://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfcfr/cfrs...](http://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfcfr/cfrsearch.cfm?fr=101.22)

[2] [http://www.truthinlabeling.org/hiddensources.html](http://www.truthinlabeling.org/hiddensources.html)</comment>


Building Backbone.js/Python based tech stack - <AUTHOR> http://www.mikkolehtinen.com/blog/2012/05/25/rewindy-tech-stack/

<comment><USER2> Heh, I used to think web development was hard because you had to learn sql, python, html, css, and javascript.

Apparently you really have to learn those, plus, flask, backbone, coffescript, require.js, jquery, bootstrap, handlebars.js, stylus, mocha, zombie, etc., etc. Simple! :-)

<comment><USER3> And then people complain when they can't seem to hire anyone that knows their tech stack of the minute.

<comment><USER4> Our company hires people who are simply interesting, intelligent, and willing to learn.

We seriously consider non-coders for positions that will be primarily coding if they have a strong background in some interesting field (like statistics).

Not all companies are just vomiting lists of reqs into the void while sitting on their hands for the perfect candidate to roll in.

<comment><USER5> I've always been under the impression that those "50 years of Java + .Net + COBOL" adverts are purposely made unattainable because they already have someone lined up for the job, but they need to 'advertise' the job for legal reasons.

<comment><USER4> Incompetence is a pretty common reason for it. Your case you outline is pretty rare.

</comment></comment></comment></comment></comment><comment><USER6> If you are using backbone and don't need a complex templating engine, just use _.template. It comes free with underscore, which is a requirement for backbone.

<comment><USER7> I wrote a code generator that generates a Backbone.js app based on a MySQL schema. It uses PHP, but mainly all the PHP does is provide the REST API for backbone. I'd like to think I've done a decent job with the organization of the client code.

I went with a pretty bare-bones setup using Underscore templates (since they come for free with Backbone) and using the built-in features without additional extensions (like model binding). But I was able to get some fun stuff in there like collection pagination. If anybody would care to take a look and give me some feedback there's a live demo so you don't have to install anything. It's at <http://phreeze.com/>

<comment><USER8> Wow - I think this is great!

<comment><USER7> thanks! any feedback or help is absolutely welcome. this is my first major github project so i'm still figuring things out (long time svn user, new to git) but the framework development is very active and in use on production servers.

</comment></comment></comment></comment><comment><USER9> Weird. our tech stack for our app (proprietary software) is totally different. It's good to have so many great options. :)

We use pyramid on appengine for a json rpc layer. And ember.js/handlebars/jquery and foundation css on the front end.

the pyramid piece has hung around the longest, but previous versions of our application ran on web2py + yui then a gwt app talking to the pyramid piece. Briefly we tried django in hopes of replacing web2py but in the end, pyramid does a lovely job with request routing. And our app depends heavily on it's acl features.

I'm not so much involved in the front end piece but, I feel like we've finally landed in a nice place with ember.js, as the app is growing features rapidly more rapidly now. Looking forward to digging in as soon as the backend tasks calm down a bit.

<comment><USER10> Could you elaborate on why you wanted to replace web2py, and what django/pyramid do better than web2py for your use case?

<comment><USER9> Sure,

it ends up for our application there are a lot of rule based permissions(not every application needs this). and pyramids traversal/acl mechanism works great for this in keeping the rules for permissions separate from your view code. Without it, I would guess that 90% of every view would be asserting permissions under different conditions(repeated and prone to error), but instead with traversal we have a good separation of concerns in this area.

The reason I suggested that we move away from web2py at the time was because we were set on using appengine, and it was very aggravating for me(the only employed dev at the time) to try to do things the "appengine way" through an abstraction layer I didnt understand and it never seemed to be caught up with appengines monthly sdk releases.

We tried the django non-rel and again, you read the appengine docs(which are mostly awesome btw), they say "do it like this" and then you are diving into source code trying to figure out how to trick the abstraction layer into doing what appengines docs would suggest. I also found it annoying that so many supposedly reusable pieces I ended up having to fork and hack in order to get them to do what I wanted. So no value there either.

In the end, to me, the abstraction had no value. And we decided to accept appengine as our platform and use it as it was intended rather than use some layer that promises that if by remote chance we might want to switch to something else, we could(in theory).

Hopefully whoever reads this can understand, I am judging these frameworks based on the criteria of the application I was hired to build. I'm not saying they have no value, they just didn't have any value for us, and when you are trying to get a company off the ground and funded, you don't have the luxury of time or patience. Decisions had to be made quickly, and 24 months later, I'm pretty happy with those decisions. My decisions aren't necessarily the right ones for anyone else.

</comment></comment></comment><comment><USER11> Could you explain a bit about your decision to use Flask + extensions rather than just Django? It seems like you started with Flask and added a bunch of extensions to provide most of the things that Django provides out of the box...

<comment><AUTHOR> What is good in Django is mainly it's ORM, which we don't need. Its templating system sucks, and also its memory usage and performance otherwise.

<comment><USER12> Did you consider Pyramid? It's insanely flexible, has amazing documentation, doesn't make any assumptions about the kind of applications you want to build with it and has a "pay only for what you need" philosophy. I'm currently using Django for my projects because it's a good fit for them (CRUD apps that generate static pages; zero frontend wizardry), but if I were to write a frontend-heavy webapp that talked to a server using a JSON API, Pyramid would be my first choice.

</comment></comment></comment><comment><USER13> Brubeck can generate a full REST API capable of supporting Backbone.js apps by just writing the data model. Similar to Tastypie, but on Brubeck.

<https://github.com/j2labs/todos> is an example.

</comment><comment><USER14> This amount of separate software projects from different people to learn, to track and maintain just for a single website? Has the world gone mad? I remember the times when we didn't had to duct type 20 buzzword of the month libraries to build something useful, :(

<comment><USER12> You don't have to.

These are the only pieces you need (besides CSS, HTML and JS) to get a large frontend heavy web application off the ground:

1\. A web framework. OP used Flask, which is a microframework. Not a good choice for a large project. To gain feature parity with full-featured frameworks, you end up having to use tens of third-party extensions of questionable quality. As I mentioned in another comment, Pyramid would've been a better choice.

2\. A frontend framework. I haven't personally tried all of them, but Ember.js looks like a good choice to me.

3\. A database. Forget about fancypants NoSQL databases. Just use MySQL, PostgreSQL, MSSQL or whatever RDBMS you find convenient. Relational databases were built for a reason, and people recommending MongoDB or whatever are doing it because either (a) they want to be hip; or (b) they have a vested interested in the success of the NoSQL movement; or (c) they slept through their CS classes and have no idea that _NoSQL databases are rehashed versions of thirty year old technologies which were thrown out the window because they were so terrible at maintaining data integrity_.

That's pretty much all you need. SASS, RequireJS, CoffeeScript, Handlebars etc. are completely optional and just there to make your life easier.

To be honest, the only frontend-heavy apps I know of that are complex enough to warrant the use of seven billion hipster libraries are Google's apps. If you're not writing GMail or Google Docs, don't get sucked into library-itis. The time you waste learning ten libraries (five of which won't be around two years from now) is better spent improving your app. You'll end up with 200 extra lines of code, but at least your codebase won't be 98% third-party code.

</comment></comment><comment><USER15> You have no idea how much I appreciate this post. I've been researching Python web development for a few weeks now and have been forced to evaluate all the different options on my own without really knowing what I'm looking for. (Since I'm starting from scratch, I'd prefer to use Python rather than having to internalize Javascript syntax just to be able to start the project). Have to agree, Django is way too cumbersome for what I need. But I had to figure that out on my own. Having it laid out clearly like this is really helpful, and now I can pick and choose the parts that will work for me. Thanks for sharing this. I'll plan on sharing the love as soon as I get my stack figured out :)

<comment><USER16>
      > I'd prefer to use Python rather than having to
      > internalize Javascript syntax

You might want to check out <[http://pyjs.org/>](http://pyjs.org/>). It translates python code into javascript for execution client-side.

I haven't actually played with it much, so this is not an endorsement.

</comment></comment><comment><USER17> backbone.modelbinding is abandoned. Alternatives:

<https://github.com/theironcook/Backbone.ModelBinder>

and <https://github.com/amccloud/backbone-bindings> (my library)

<comment><AUTHOR> Yeah thanks, I forgot to add a note on this.

</comment></comment><comment><USER18> I'm using Tornado instead of Flask. When I was evaluating Flask vs. Tornado, I found Tornado to be much faster than Flask. More importantly, Tornado is much more straightforward. I actually prefer putting all URL in one place (tornado) instead of using those @route decorators(flask,bottle). On Flask, if you want to write anything more complex than HelloWorld or ToDo, you use something called blueprint, which is not easy (at least for me) to understand.

</comment><comment><USER19> "With CoffeeScript, writing JavaScript becomes fun again. Code is cleaner and more verbose, leading to faster development and less bugs. Sure there's opinions against it, but seems that many have changed their opinion? Just saying that you should try it. I'm not going back to vanilla JS. Debugging is not an issue when you use require.js. And plz don't make those uncomprehensible magic one-liners."

How does require.js make coffeescript debugging easier?

<comment><USER20> I'm with you on this one, that doesn't seem like the most well-considered paragraph. As well as the point you picked up on there's also: 'Code is cleaner and more verbose' - _less_ verbose surely. 'Faster development and less bugs' - huge sweeping generalisation that I'm not sure can be backed-up.

That said I'm a CoffeeScript fan, but I'd like to see people being realistic about its benefits, not just making really vague claims. Also it's okay just to say things like 'Coding in CoffeeScript is fun', I would have just left it there. :)

Edit: I also really like the article overall, thanks for posting and sorry for the initially negative tone of my comment. I especially like the perspective on the backend - agreed!

<comment><AUTHOR> Thanks for feedback! Yeah, that paragraph was a bit unclear, I edited it slightly.

I guess my main point was that from my personal experience, writing less code and writing clean code leads to less bugs.

<comment><USER20> Awesome, glad to be of help :)

</comment></comment></comment></comment><comment><USER21> How do you pre-render the pages for the client? Do you just send a static HTML and let the js populate the page or there is a better way from python to not duplicate the template processor?

</comment><comment><USER22> Django+tastypie works with backbone.js with very little configuration.

<comment><USER23> Exactly what I used on my first non-trivial web app.

I had Django + Tastypie serving a REST API and Backbone.js on the front-end. Bootstrap for styling. Apache/mySQL. It turned out to be a success but when I look at the codebase it is a nightmare. I ended up writing a mobile app version which was nice since I was able to just plug it in to the REST api.

But, at the end, I was annoyed with Django and Tastypie- something just didn't sit right. Implementing things like sessions, which in PHP are obvious but verbose, relied too much on Django's hidden magic that I felt I was hacking a solution rather than architecting one.

</comment></comment><comment><USER24> Seems like it might be tough to maintain an app with so many external dependencies

</comment><comment><USER25> Curious, have you given dotcloud a try?

Good roundup list.</comment>


Show HN: Find cheap weekend train tickets - <AUTHOR> https://weekendtravel.today <comment><USER2> Might be useful to add the country of origin for the trains, as anyone from the U.S (e.g. me) on a U.S. based forum might be a tad confused.

Nice looking, though.

</comment><comment><USER3> What country does this serve?

<comment><AUTHOR> United Kingdom</comment></comment>