Apple Approves Nintendo Emulator for iPhone - <AUTHOR> http://www.zdziarski.com/projects/nescaline/

<comment><USER2> Okay, I ponied up out of curiosity. _Do not download this app_. It does not work as advertised. It is slow, buggy (even the table display on the home screen has impressively bad rendering glitches) and, worst of all, it is not capable of loading any ROM files I tried it with -- things that all other NES emulators load fine.

<comment><USER3> I was able to load several roms with no trouble (though the UI could use some work). The performance was fine (3GS here) and the accuracy of graphics and gameplay seemed good, but the sound was very glitchy. Hopefully it can be fixed in an update before Apple boots it from the store.

Ultimately the biggest problem with this is that the touchscreen just isn't as good as physical buttons for the kinds of games that the NES had.

<comment><USER2> I'm quite curious how you got the ROMs working. They download fine for me, but then report themselves corrupt. They are not.

<comment><USER3> I loaded the ROMs from my mac mini via the web sharing feature of OS X (Apache). All the ROMs I tried worked the first time. Some ROM formats may not be supported; the ones I used had a .nes file extension.

</comment></comment></comment></comment><comment><USER4> The folks who previously submitted NES emulators, and were rejected, must be more than a little annoyed right now. At $6.99 this developer is going to be making some pretty good money especially with the wave of free PR. It would be interesting to see if this app has some extra layer(s) of sand-boxing or other security that made Apple willing to accept it. From a PR standpoint it would be quite clever for Apple to just start accepting a lot of these taboo apps and they'll look like the great hero of the people acknowledging their mistakes and moving forward. Crazier things have happened.

</comment><comment><USER5> This is completely speculative, of course, but the following explanation makes sense: a little while ago it came out that the iPod Touch is being positioned as an Apple gaming platform (lots of developers were writing games on the platform anyway, and Apple decided to roll with it). Thus, Apple essentially entered the hand-held gaming market, which means that it is now in direct competition with Nintendo. Allowing Nintendo games gives them a competitive advantage.

<comment><USER6> Is there a Nintendo approved way to get ROMs on the iPhone? Does Nintendo have no legal recourse to this?

<comment><USER7> I don't think it matters if Nintendo approves.

There is a ton of 'homebrew' for the NES that contains no proprietary Nintendo code, and I doubt that any part of the 'hardware' being emulated is protected intellectual property.

A case can easily be made that it is designed with home brew ROMs in mind. Despite the obvious fact that it will inevitably be used for copyright infringement.

</comment></comment></comment><comment><USER8> It's already gone from the appstore.

That was quick :-)

<comment><USER9> that was quick :) Anyway, I'm guessing that zdziarski had always intended to target the jailbroken-phone market and didn't really expect the app to be sold in the app store.

What is equally interesting is that the app had already made it to the top 100 grossing list, before it got pulled out.

I looked at the itunes top 100 grossing list 2-3 hours ago (and still have that window open). On that list, Nescaline is ranked at 82 :)

<comment><USER10> Perhaps the author saying on his web site

 _NESv3 continues to be available in Cydia. Apple's draconian and anti- competitive AppStore practices is sadly why jailbreaking will always remain a necessity._

is why Apple might be not too happy with the developer.

I know Jonathan from his anti-spam days and he's a good developer, but it's always surprised me that he's tried to make money out of Apple while at the same time dissing them so much. If he's selling his app for $6.99 he's putting $2 in the pocket of someone he believes is evil for every copy sold.

</comment></comment></comment><comment><USER11> Did the rules change to allow running code not bundled with the application or did this slip through Apple's review process?

<comment><USER12> Sounds like Apple made an exception since NES games probably aren't much of a threat to the App Store or iPhone security.

<comment><USER13> One of the first iPhone jail-break systems depended on a vulnerability in Safari's TIFF loader, and TIFF files aren't supposed to contain any executable code at all. Why would NES games be any different?

<comment><USER14> Ugh. Why would _any_ software be different? Please Google "buffer overflow."

</comment></comment></comment></comment><comment><USER15> Why hasn't Nintendo licensed or coded one of these and put up all of their games for 99 cents each?

<comment><USER13> Because they make much more money selling them on the Wii Virtual Console, I guess.

Nintendo's attitude toward their classic games is much like Disney's attiitude towards their classic films - have a small release, generate nostalgic hype for a platform, then lock it away again until the next platform comes out and the cycle repeats. Of course, nobody much wants to play the non-classic games anyway.

<comment><USER16> I have to disagree. Nintendo's 'modern' games are wildly successful by every standard.

<comment><USER17> Out of curiosity, when was the last time that Nintendo launched a new game franchise?

<comment><USER18> Whenever Doctor Kawashima Brain Training, or Professor Layton came out (wife owns a DSi).

</comment></comment></comment></comment></comment><comment><USER19> expect Nintendo's lawyers shitstorm over this, if it goes through.

</comment><comment><USER20> Hey Jonathan, your borderless image class is empty/pointing nowhere.

 _< img src="buyapp.png" class="borderless"/>_</comment>


How to land my dream web dev role? - <AUTHOR>

Hi all,
Here's a quick summary of my skills and abilities as well as my current work situation.
I'm currently working for a pharmaceutical company as a QA analyst and have been for almost two years now.
My job is 80% interacting with data (identifying trends etc), 10% backup PM work and dealing with clients and the rest is made up of functional testing of websites and creating Excel based processes.
Previous to my current employment, I spent my time looking for work by volunteering my time to a local charity helping them to overhaul their website and move it onto a Wordpress platform.
Since then, i've continued to pursue my passion for the web and have attended many conferences, online courses and have learned a bit of Javascript/jQuery, Python, Ruby (and Ruby On Rails).
I guess im mainly looking for advice. I have a lot of passion for the web. I love how there's always something new to learn and it's always so exciting to see a new way to overcome a problem.
I don't really have a lot to show, my portfolio website is kind of old and needs a overhaul http://kevintuck.co.uk
Is there anything else that I can do in the mean time to make myself attractive to employers and help me get my dream opportunity? <comment><USER2> By the sounds of it, you would make a brilliant "big data" _backend_ developer (e.g. Scala, Python, etc). Lots of web-based companies need them to crunch big numbers.

But if you don't, then I would suggest building ideas that you can build and push live on the web. Lots of novelty (or useful) web apps make lots of media attention, and that would be ideal for employers to be tempted to hire you for that dream role.

Just my 2c.</comment>


Ask HN: Easiest way to add membership to a site? - <AUTHOR>

I'm looking to add membership functionality to a project and am curious what people out there use.
In particular, I'm looking for a simple way to allow members to choose from a selection of plans that I define. In addition, it would provide membership management tools, user flows for upgrading/downgrading/cancellation, dealing with expired cards and other common functions.
Doesn't need to do it all but if prefer not to have to write everything myself if possible.
Thanks for any suggestions or ideas. <comment><USER2> [http://www.s2member.com/](http://www.s2member.com/) for WordPress.

<comment><AUTHOR> Anything not specific to wordpress?

</comment></comment><comment><USER3> aMember is very good. [http://www.amember.com/](http://www.amember.com/) . I've used it both as a user and admin on a couple of sites now.</comment>


Loving Google but Not Its Public Offering (from 2004) - <AUTHOR> http://www.nytimes.com/2004/08/06/business/technology-loving-google-but-not-its-public-offering.html <comment><USER2> "Mr. Kaplan, the entrepreneur, argues that by styling itself as an idiosyncratic company that has broken the mold in initial offerings, Google is potentially courting disaster."

Maybe in hindsight he meant the opposite of disaster.</comment>


Twitter API 1.1 and Twitter Search Have Different Results - <AUTHOR> https://twittercommunity.com/t/different-search-result-for-api-1-1-and-normal-tweet-search/25672

<comment><AUTHOR> I worked with Instagram and Facebook APIs and they are doing mostly fine but when it comes to Twitter API, it always becomes headache

Last thing I figured out was that the API 1.1 search has "since" and "until" keywords in the url but they are mostly useless because Twitter Search API looks only for the recent tweets, mostly a couple weeks. After that you can't find your tweet through the API as I experienced in the last 2 months with several testing</comment>


Ask HN: Do you read a newspaper? - <AUTHOR>

<comment><USER2> In Australia newspapers are dominated by low grade churnalism, articles mainly consisting of hyper mega adjective overload!, poor research and investigation (choosing to leave it to fact checking websites and media watch to do the real research), a lot of 'newspaper columnists' are really just overpaid bloggers who are bad at their jobs or partisan hacks repeating ad lib what their favourite politician has told them.

So really a newspaper to me is like if you removed all the intelligence from the internet, and left me with a paper based version of the youtube comment section. A vapid, 500 words max, poorly researched, poorly written, waste of time that's not worth the paper it's written on.

<comment><USER3> AFR and the Australian are not bad.

</comment></comment><comment><USER4> This is like the 3rd time a similar question get posted on HN this week. BTW for mainstream news I use my own app: [http://newspo.st](http://newspo.st)

It's a iPhone news aggregator that works in the opposite way of traditional news reading apps. It uses Twitter as a sort of enhanced RSS feed and ranks news stories based on how much they are shared in real-time, laying them down in a newspaper-like format specifically designed for mobile devices.

It's really interesting because it lets you find what's important for people rather then what matters to newsroom's editors, and it puts you in a whole different point of view.

The bare bone MVP is currently available in US, UK and Italy. I'll soon release a new version with categorization and custom topics.

</comment><comment><USER5> I browse my local paper and our quasi regional paper (Savannah Morning News) each morning at my coffee shop. I would not use the Atlanta Journal Constitution our "state paper" to house train a puppy.

</comment><comment><USER6> Nope. The so-called "news" is generally highly biased towards _bad_ news. It has a negative slant. I think it actively creates problems in the world.

</comment><comment><USER7> Not directly, but I read online articles from newspapers when they are linked to from other things that I read regularly (HN, Reddit, FB, RSS Reader, etc.)

</comment><comment><USER8> Financial times daily. Local business newspapers are also good: [http://www.bcbr.com/](http://www.bcbr.com/)

</comment><comment><USER9> Yes, I often read the free local daily - it's short, usually has local+provincial news, and kills time on transit or waiting in restaurants.

</comment><comment><USER10> US West coast: Usually only free papers for short transit rides. Otherwise I'll occasionally buy a full paper for a long train ride.

</comment><comment><USER11> Daily: New York Times on paper & online, regional newspaper on paper; a few times per week: Washington Post online.

</comment><comment><USER12> I read the NY Times, via the Android app. I pay for that, and read other sources from Reddit, HN, Digg, etc.

</comment><comment><USER13> The Guardian, roughly every other day. Recently it's been daily though.

</comment><comment><USER14> A quick skim through both local news papers, and then I do their crosswords!

</comment><comment><USER15> Washington Post, NY Times, local free weekly. None front to back.

</comment><comment><USER16> Online versions if that count. Not the physical paper.

</comment><comment><USER17> Does online version count?</comment>


AWS Cloud9 – Cloud Developer Environments - <AUTHOR> https://aws.amazon.com/blogs/aws/aws-cloud9-cloud-developer-environments/ <comment><USER3> I used Cloud9 (pre-Amazon acquisition) for teaching high schoolers the basics of programming. It was super easy to set up and use. It really let me, as the teacher, focus on teaching syntax and principals and less on 'toolchain config', which is helpful for newbies right out of the box.

I haven't used this new Amazon Cloud9 offering, but from the initial impression from the blog post, they've traded in the easy of use that Cloud9 once had for a deeper integration into the AWS ecosystem. The screenshots I saw were not something I'd want a greenhorn to have to walkthrough.

I'm not sure what future I expected when Amazon purchased Cloud9, but I mourn the potential loss of an awesome cloud based IDE that beginners could easily pickup (my mind can be swayed once I give it a try though).

<comment><USER4> Don't mourn - the editor has been open source for years:

[https://github.com/ajaxorg/ace/](https://github.com/ajaxorg/ace/)

</comment></comment><comment><USER5> So disappointed with this!

I teach coding courses online...I've published dozens of courses teaching many different programming languages to thousands of students. In every single course, I recommend and use c9.io as the dev environment.

In one stupid swoop, Amazon has made all my courses obsolete.

Now people watching my videos can't create an account on C9, they have to sign up for aws and use the completely different interface. People can no longer follow along with the thousands of videos I've created.

I get that you bought C9 and want to integrate it. But why close down c9.io to new accounts? Why can't they both exist?

So very disappointed...

<comment><USER6> I think it's a bit mean to go around calling them stupid, because you chose to make your course dependent on them. They (presumably) didn't promise you anything and don't owe you anything.

<comment><USER5> We wouldn't want to hurt Amazon's feelings.

<comment><USER7> Well, in this case "Amazon" is actually a team of people.

</comment></comment></comment></comment><comment><USER8> I've dabbled with c9 before Amazon ingested them. It's part of my experiment to see if I can use ChromeOS for my home machine, and so far it's going great. At work I have a 64GB machine with 3 monitors and Ergodox, but for home I don't need a lot.

I've been able to get ChromeOS to do OpenVPN and SSH, which cover 90% of work responsibilities from home. Otherwise, I'm mostly in a browser, or SSHing to my personal EC2 box. I don't get much programming time lately, but that is the remainder of it, largely on github. So c9 is something I need to investigate more.

So far ChromeOS is working great, and is far easier to maintain than Linux or Windows. It is less capable in some ways, but I don't really need those ways at home.

</comment><comment><USER9> It is really easy as[0]:

      git clone git://github.com/c9/core.git c9sdk
      cd c9sdk
      scripts/install-sdk.sh

to get c9 installed. But the license[1] :(

There is a cloud9 v2[2] alterantive but ide.c9.io just more polished.

[0]: [https://github.com/c9/core#installation](https://github.com/c9/core#installation)

[1]: [https://github.com/c9/core/blob/master/LICENSE-COMMERCIAL- US...](https://github.com/c9/core/blob/master/LICENSE-COMMERCIAL-USE)

[2]: [https://github.com/exsilium/cloud9](https://github.com/exsilium/cloud9)

<comment><USER10> There are also a few docker based installation options for self-hosting too. I created one as well to run the container as my local user to not muck with file permissions [https://github.com/msumpter/docker- cloud9-ide](https://github.com/msumpter/docker-cloud9-ide)

</comment></comment><comment><USER11> For those looking for a similar, but open source equivalent cloud based IDE, Eclipse Che[0] looks really promising.

[0] [https://www.eclipse.org/che/](https://www.eclipse.org/che/)

<comment><USER12> It's come a long way. I was aware of Codenvy years ago and recently became aware that they seem to have joined the Eclipse Che effort.

The main thing missing from Che, for me, was a lot of nice, easy plugins to deploy to cloud services. You can run your app in the container very easily, but it would be nice to be able to push to, say, Heroku right from the IDE.

Apparently Red Hat have acquired Codenvy now, so it will be interesting to see if they add some integration for OpenShift (their own repackaged Kubernetes).

<comment><USER13> I'm the project lead for Che and can confirm that Red Hat will be contributing changes that will allow Che to run on OpenShift, but it will also roll in most of the enterprise features that were previously only available in the proprietary licensed Codenvy product. [https://www.eclipse.org/che/](https://www.eclipse.org/che/)

<comment><USER14> We're just starting to analyze Che for our coding school. Wouldn't all this just be possible with the Terminal? I'm not saying plugins aren't good, just trying to see if the terminal is a full featured one that would support something like, for example, installing the heroku toolbelt.

I haven't even started with a real test, just reading about it, so sorry for my lack of research, I'm just reading through the features ([https://www.eclipse.org/che/features/](https://www.eclipse.org/che/features/)) and saw the terminal, which is fundamental for us.

</comment></comment></comment></comment><comment><USER15> I really wish Amazon would choose more intuitive names for their AWS products instead of trying to be clever especially given they must have around 100 products now.

AWS Cloud IDE or AWS IDE (cloud seems redundant) would give you a good idea what this is without having to click the link for example.

Recently we've had AWS Lightsail, Fargate, Greengrass and Sagemaker which all give you zero hint at what they are unless you read more plus they're hard to remember. Even EC2, RDS and S3 should have been given better names.

<comment><USER16> You completely undermined your whole point with your last sentence.

I get that Lightsail isn't intuitive, but what could be more simpler or easier to comprehend than Relational Database Service or Simple Storage Service?

<comment><USER15> > I get that Lightsail isn't intuitive, but what could be more simpler or > easier to comprehend than Relational Database Service or Simple Storage > Service?

Nobody calls those products by their expanded names though. Why not just AWS Storage or AWS Database?

Google for example has Google Cloud Storage and Google Cloud SQL. I get that it becomes trickier when you've got overlapping products but you can't even guess the domain of AWS products from the name they're so obtuse.

<comment><USER17> AWS has multiple storage and database offerings so having different product names is helpful

</comment></comment></comment></comment><comment><USER18> I've used c9.io for years. You're trading some nice IDE features you'll get with VSCode or others for convenience, but not as many as you'd think.

Although the interface is rather out-dated, it's a solid IDE and I thoroughly enjoy being able to just walk away from my code and pick it up anywhere on anything.

With EC2 integration, it may cut out what I had been doing, which was turn up a digital ocean droplet and use the SSH workspace in c9.io and boom, I had a full VM to dev on that anyone can reach anywhere.

<comment><USER19> AWS Cloud9 also supports SSH workspaces :) (I work for AWS Cloud9)

<comment><USER20> What are you doing on hacker news? Go add a mobile breakpoint so I can ditch my laptop altogether. ;)

(Fully converted to C9 6 months ago)

</comment></comment></comment><comment><USER21> I've been using c9 everytime I wanted to quickly prototype stuff (and not setup the toolchain) and destroy workspaces when I'm done. I love this integration with AWS.

Now I can just get a nice Chromebook and not necessarily spend 1000s on a Macbook (not saying AWS Cloud9 is there yet as an editor to compare against VS Code/Sublime etc.) but it's definitely awesome and I hope one day it'll get there.

<comment><USER22> Learn Vim and use it in tmux on a VM or even in a Docker container you blow away when you're done. You can use a Raspberry Pi then :P

<comment><USER21> I've tried to learn vim multiple times (mainly so i could have a cheap vm + mosh to use when i'm around). But I've yet to get used to vim coming from a sublime/vscode/intellij background. (I can use vim to do the mundane stuff, but developing stuff solely on vim appears slightly more difficult)

</comment></comment></comment><comment><USER23> I didn't even notice that Amazon bought Cloud 9.

Coming from Sublime -> Atom -> VSCode it looks a bit like the older versions of the editors I used in the past.

<comment><USER24> I come from Vim -> Atom -> VSCode -> Cloud9, and have become a deep C9 loyalist. I love the window management, terminal integration, speed, and ease of configurability... No other editor I've used even comes close. And that's to say nothing of its being cloud-based

<comment><USER23> Hehe.

Does this cloud based part not lead to problems? Like what platforms is this thing running on "in the cloud"?

<comment><USER24> It's never lead to problems for me. However, some of my coworkers decided not to use c9 due to latency (which has never bothered me for some reason.)

I use the ssh-workspace feature and do my work in an EC2 instance. I've also been playing around with running a local c9 build ([https://github.com/c9/core](https://github.com/c9/core)). Not sure that their license would make this viable for commercial work, but ofc there's no latency / connection requirement if you're running it locally.

Off-topic, you could even run c9 locally in a Chromebook if you were using Crouton -- and without having to install another desktop environment. I do most of my work on a desktop, but if I ever get together a mobile development environment this may be what I do.

</comment></comment></comment></comment><comment><USER25> Not sure why people claim they lost everything, on the bottom of the page it says: Things to Know

There are no additional charges for this service beyond the underlying compute and storage.

c9.io continues to run for existing users. You can continue to use all the features of c9.io and add new team members if you have a team account. In the future, we will provide tools for easy migration of your c9.io workspaces to AWS Cloud9. AWS Cloud9 is available in the US West (Oregon), US East (Ohio), US East (N.Virginia), EU (Ireland), and Asia Pacific (Singapore) regions. I can't wait to see what you build with AWS Cloud9!

<comment><USER5> I can add team members if they already have an account...if not, there seems to be no way for them to sign up.

</comment></comment><comment><USER26> If anyone is wondering there is a mostly-free-as-in-free-speech, self-hosted alternative: Eclipse Che.

[https://www.eclipse.org/che/](https://www.eclipse.org/che/)

<comment><USER27> Thank you! I've been looking for something like this for years!

<comment><USER26> Happy to help! I think it is a very good fit with the latest high-ram-low- price instances from digitalocean.

</comment></comment></comment><comment><USER28> Combine Cloud9 with a $300 touchscreen Chromebook and that's a hell of an environment vs buying a $2000 Macbook.

<comment><USER29> Is it though? Eventually the ec2 costs will outstrip your savings on the macbook. $1500 a year ish for a reserved m4.large w/ 2 vCPU and 8G ram which seems about comparable. That math doesn't work unless you're buying a new macbook every 2 years.

edit: This bit is interesting though: If you're running in AWS the auto- hibernate feature will stop your instance shortly after you stop using your IDE. This can be a huge cost savings over running a more permanent developer desktop.

So perhaps the cost is quite a bit lower.

<comment><USER30> You can also manually hibernate your instance once you are done with the work for the day. I also suspect you won't need anything like a m4.large for most dev environments but i see that you wanted some equivalent to a macbook pro, so that makes sense.

</comment></comment></comment><comment><USER31> This decade sure loves editors written in JavaScript

</comment><comment><USER32> Isn't Cloud9 an e-sports organization too? There are two cloud9s, wondering where the Cloud[1-8]s went.

<comment><USER33> [https://en.wiktionary.org/wiki/cloud_nine](https://en.wiktionary.org/wiki/cloud_nine)

</comment></comment><comment><USER34> Not surprising to see the common complaints from learn-to-code authors about disrupting their courseware. We heard this a lot at Nitrous.io and struggled with the importance of the beginner market to our business.

When considering Nitrous as a viable business, I'd talk a lot about the "developer sophistication spectrum" and the challenges of one single product or service attempting to meet the needs of a lot of different types of developers.

On the newbie side of the spectrum, serving the hot "learn to code" market means scaling your potential market size by orders of magnitude. There is some product-market fit here as newbies don't really have substitutes ("what's a development environment?" they'd often remark), but the SaaS economics of selling tooling to newbies was atrocious.

Selling to learn-to-code means you're dealing with an incredibly fickle audience where 95% abandon their plans to become a professional programmer within a few months. The other ~5% who become full-time programmers are dedicated enough to their craft to learn about their OS and their options to customize the local development workflow. So they naturally also churn.

(I don't have any knowledge of the market, but I'd imagine courseware providers attempt to charge 100% up-front to account for the extremely high churn. At least, that's how I'd charge.)

So basically all the cloud IDEs are getting hundreds of thousands of signups from a lot of newbies saying "We love [Nitrous, Cloud9, Koding, etc...]!" but not wanting to pay for the infrastructure and churning at unsustainable rates.

On the less sophisticated side of the spectrum, I think there is potential for a viable cloud IDE business, but I think it needs to be closely coupled with a content platform like Treehouse, Coursera or CodeAcademy. I haven't looked at any of them recently, but I wouldn't be surprised if they have in-house teams working to improve the editor experience and provide stateful experiences with dedicated cloud compute & storage. We had a tightly coupled integration with the Flatiron School and it was a pretty solid experience but just wasn't a big enough business for us to scale. So in reality these businesses really just look like a content / courseware business that has a really great cloud development experience. But it's clearly built for people learning to code and they're paying for the courseware, not for the editor.

As you move up the sophistication spectrum, developers begin to experience "cognitive dissonance" when considering how much their time is really worth. That is, when they know how to setup, configure or troubleshoot something themselves, they underestimate the time they spend every month performing those tasks. We spent a ton of time doing deep customer research with excellent engineering teams at Airbnb, LinkedIn, Shopify, etc... You'd be extremely surprised at just how much time it takes for the average developer at a top-tier engineering org -- in some cases, new developers took _3-4 weeks_ to setup their dev environment. But after setting up a new environment the other dev ops problems start to spider into a web of complex and proprietary issues that are difficult to create compelling marketing / sales presentations. It's like - everyone knows it sucks and it's broken, but nobody quite knows the solution. Which is why a lot of the solutions emerge from open source projects that solve specific issues organically and then expand into powerful platforms that cohesively solve a set of interesting ops problems (e.g. Hashicorp).

This is an oversimplification of the complexities of the developer market - <USER2> there is also a spectrum of sophistication within the professional developer market itself. The "intermediate" professional developer tends to be the best market fit right now for cloud development / IDEs, as they often are self- taught and know how to code, but are often not as versed in debugging low- level issues, but usually are more price sensitive to their more sophisticated counterparts (who don't want to use the service in the first place).

In any case, I remember reading a HN comment about the nitrous.io shutdown [1] and feeling bad about not opening up more so I suppose this will provide some color. People loved our service and we honestly loved building it, but business is hard and we weren't able to uncover the right strategic focus. Hopefully Coursera, Treehouse, CodeAcademy, etc... will continue to fill in the gaps for the beginner market - but since those will be tightly coupled with their courseware, it's going to be a difficult spot to be in for the independent educator who is attempting to monetize their own material.

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

<comment><USER35> There's a lot of really interesting things in this post, but I'm only going to pick up one point:

"As you move up the sophistication spectrum, developers begin to experience "cognitive dissonance" when considering how much their time is really worth."

I am pretty sure that one of the reasons why cloud IDEs have struggled is that plenty of professional developers consider that learning an IDE or editor is a time investment that pays returns over a long period of time. On the extreme end of the scale, I still get near-daily use from the Vim knowledge that I picked up well over a decade ago. Investing personal time learning a cloud IDE may not be such a good investment, because those skills can be invalidated at any time.

There's definitely a lot of potential innovation that can be done in developer collaboration and environment setup, but I don't think that a proprietary system will get the widespread adoption needed to move the industry forward.

</comment></comment><comment><USER36> I guess this will compete with [https://cloud.google.com/debugger/](https://cloud.google.com/debugger/) eventually (if not already)

</comment><comment><USER37> It would be amazing if this integrated with EKS to easily create remote k8s clusters for development. I couldn't tell from this press release if that's a possibility though.

</comment><comment><USER38> Did anyone succeed creating a new environment? I tried from CodeStar but didn't find anything like Cloud9.

</comment><comment><USER39> What is the pricing for this? I read the faq ([https://aws.amazon.com/cloud9/faqs/](https://aws.amazon.com/cloud9/faqs/)), It seems like cost is included in EC2 instances.

<comment><USER40> It's free. You only pay for the computing of the EC2 instance.

</comment></comment><comment><USER41> Q: I have tried starting up two IDE sessions - neither was successful. The IDE window shows a spinning Connecting graphic and never finishes initializing - waited 20 minutes both times. Cloud9 growing pains?

</comment><comment><USER42> I'd be interested to see if google responds to this with something for Firebase and GCE. The browser based editor for Google Apps Script isn't too bad, so they might be able to expand on that.

</comment><comment><USER43> After a quick check it looks like it's incompatible with iPad Pro (paired with a keyboard that would be great if it worked)

<comment><USER20> The only issue, from my understanding, is the arrow keys not working. Ace editor just pushed an update that fixes the issue, though it's not yet integrated into C9.

I use a note 8 with a Dex dock, and I'm kinda dying for full mobile support on C9.

</comment></comment><comment><USER20> I've been using c9.io for about 6 months now as my sole IDE for my own projects (I'm 100% node/react/etc). It's been fantastic. I really wish they added some breakpoints and mobile support, because coding on the go isn't amazing, but I can see the potential.</comment>


Currying vs. Partial Application (2015) - <AUTHOR> http://www.datchley.name/currying-vs-partial-application/ <comment><USER2> This is interesting, but just because you can do something doesn't mean you should, particularly in JavaScript. As soon as I started working on a large project with a team of devs my coding style began to change dramatically. Simplicity and readability become paramount. Minimize how much a dev needs to understand about the code before they can work on it, and how long it takes them to read it. With the right coding conventions, anyone can start working within seconds just by seeing the names of the functions and variables.

The mental gymnastics required to read these functions and understand how they work is not negligible, it adds up. Especially when the function definition might be in another file from the one you are working on.

If any of my co-workers started actually using these techniques in our code, I would flag it. Usually, if you find yourself in a situation where it is beneficial to use techniques like this, it's a sign that you might be able to refactor your entire approach to make the design simpler.

<comment><USER3> > The mental gymnastics required to read these functions and understand how > they work is not negligible, it adds up.

While I agree with avoiding unnecessary complication, partial application is no more complicated than object construction, something you've presumably been doing all your life. Every time you create an object whose only initialization logic is to set some internal variables, you are effectively partially applying a function whose arguments are (0) the constructor's arguments, and (1) a method selector. No mental gymnastics are required to understand this. (And this doesn't take into account open recursion, which makes object construction _more_ complicated in ways that mere partial application isn't.)

<comment><USER2> That's a fair point, currying is the main offender here, partial application is just making a new function. With the right name it's not harder to understand. It does add complexity because you have layers of dependencies instead of everything being in the same place. The example is always some simple math, but usually functions are doing more, and when they get changed it isn't always obvious that the things that rely on partial applications of those functions are also affected.

But that is true of anything that uses any dependencies, and a fundamental part of how we usually code. I prefer to reasonably minimize the number of dependencies, and then of course good tests protect you against this problem.

<comment><USER4> > The example is always some simple math, but usually functions are doing more

On a language like Haskell, 90% of the time you see partial application it is something like `(+1)`, or `inClass isSpace`.

That insistence on functions doing more is a very OOP thing. Functions that do too much do not compose well.

<comment><USER5> Well in Haskell it all makes sense, since you have other powerful tools (function composition and application, very large standard library of small functions, etc) that all compose into readable and nice code.

If you just use currying randomly, it's going to create more headaches than solve. Ultimately you'd need to adopt something like Ramda in your project if you want to do this in your JS codebase, but even then I think Ramda-dependent code is way less readable than Haskell.

</comment></comment></comment></comment></comment><comment><USER6> Currying in JavaScript is really nice if you can remember the arities of each curried function you're using. If you forget to call up to the last argument, you'll be passing a curried function instead of the expected value, and it can throw an error really far away from the bug. And instead of normal data to inspect at the error site to point you to the bad call, you'll only have a generic function name to look at. I've spent more hours than I'd like to admit debugging these situations.

A type system would detect these cases, but TypeScript and Flow don't have great support for curried functions. Typing them is very verbose.

<comment><USER7> The type of a curried function in Typescript is just something like:

      (a: number) => (b: number) => (c: number) => number

Sure, the parameter names and parentheses are a bit annoying, but I wouldn't call that "very verbose". Comparable concepts in C++ or Java would be a nightmare to type out.

<comment><USER6> I agree, that doesn't look bad. However, this type definition forces you to supply one argument per function call, which looks awful in JavaScript:

        fn(1)(2)(3)

That's a big drawback for me. Libraries like Ramda allow one or more arguments per function call:

        fn(1, 2, 3) === fn(1, 2)(3) === fn(1)(2, 3)

That's what makes the verbosity unbearable, as each type of call needs its own type.

<comment><USER8> At least in Flow it's actually possible to properly type curried functions!

Here's a gist of the type definitions I'm using: [https://gist.github.com/noppa/c600cc43fd44e33768efe6c6eec4a9...](https://gist.github.com/noppa/c600cc43fd44e33768efe6c6eec4a99a)

I think something similar might work in TS too.

Demo: [https://goo.gl/w3aPsw](https://goo.gl/w3aPsw)

</comment></comment></comment></comment><comment><USER9> I love how the new arrow syntax makes curried functions incredibly simple.

      const fn = a => b => c => {
        return a + b + c;
      };

<comment><USER10> appear incredibly simple*

<comment><USER11> In what way is it not simple? It's hard to tell what you mean. The syntax is actually a bit of a nightmare if you are writing a parser, but from the perspective of a human reader, it shows you exactly what's going on under the hood.

<comment><USER12> I think, as others above, parent meant to say "simple to write but not to use".

<comment><USER11> Hmm... One way that I find easier to understand partial application is to imagine that it's an object. All of the bound variables are like instance variables in the object.

Imagine that you have a collection of items that you want to map over. Unfortunately the function you want to run takes 2 parameters instead of one. What if that function was really an object with one instance variable and a method that took 1 variable. So something like this (if it formats correctly):

      class Person {
        constructor(name) { this.name = name; }
        is(adj) { console.log(this.name + ' is ' + adj); }
      };
      const mike = new Person('Mike');
      ['smart', 'handsome'].forEach((adj) => mike.is(adj));

I think most people from an object oriented background will find this easy to understand. Instead of making an object, though, we can just make a function that binds the value in conceptually the same way:

      const is = name => adj => {
        console.log(name + " is " + adj);
      }
      const mikeIs = is('Mike');
      ['smart', 'handsome'].forEach(mikeIs);

Note: I don't have to make a lambda in the second case because I don't have to trip over `this` pointers, but I could if I wanted:

      ['smart', 'handsome'].forEach((adj) => mikeIs(adj));

Now, imagine that you have a bunch of curried functions, whose first argument is "name". Let's say "is", "jumps", "eats". You could write a function like this:

      const Person = (name) => {
        return { is: is(name), jumps: jumps(name), eats: eats(name) };
      };

This is literally a class (minus the crazy `this` pointers).

This is one of the reasons, I really like Javascript. :-)

<comment><USER12> One major difference though, objects with multiple fields will require some sophisticated logic to ensure correct order of initialization (depending on the way constructors and setters are done). A partial function enforces some order. You can accumulate safely information and get closer to a usable and valid final piece of logic.

It's less easy when you need choice although one can use subfunctions .

In OOP you may have fluent interfaces, builder things but it's.. once again a lot for not much more.

</comment></comment></comment></comment></comment></comment><comment><USER13> Ok, it might be too early in the morning, but I still don't understand this. I read that post, and the post by 'raganwald that the former linked to, and I still don't see _any_ difference between currying and partial application. And yet both posts seem to imply (without showing in any way) that the two concepts are different. How come?

<comment><USER14> Partial application is applied on call site, currying at definition.

Currying:

        const f = x => y => x + y;

        const g = f(1);

        const sum = g(2);

Partial application:

        const f = (x, y) => x + y;

        const g = _ => f(1, _);

        const sum = g(2);

Most FP languages have nicer syntax for this.

<comment><USER15> That's not what currying is. You've just used partial application in two different contexts.

Currying takes a multi-argument function:

        const f = (x, y, z) => x + y * z;

...and converts it to a function that takes a single argument, and returns a function taking the next argument, recursively:

        const f_curried = x => y => z => x + y * z;

        const result = f_curried(1)(2)(3)

edit: maybe you were trying to convey that, in your first example, f is already a curried function? As a whole, the first example just looks like a partial-application demonstration.

</comment></comment></comment><comment><USER16> {lambda talk} doesn't know closures but accepts de facto partial application:

1) just define function as usual:

      {def add
       {lambda {:a :b :c}
        {+ :a :b :c}
      }} - > add

2) and use it:

      {add 1 2 3}   -> 6
      {{add 1} 2 3} -> 6
      {{add 1 2} 3} -> 6
      {{{add 1} 2} 3} -> 6

More to see in [http://lambdaway.free.fr/workshop/?view=curry](http://lambdaway.free.fr/workshop/?view=curry)

</comment><comment><USER17> It surprises me to no end that programming languages that promote a functional style with higher order functions do not support partial application as a part of the standard library. It covers 95% of the uses of curried procedures and gives you compiler warnings if you pass too few or too many arguments.

In scheme we have the cut macro that all self-respecting implementations provide which guarantees you zero runtime overhead.

<comment><USER18> Here's an interesting post about the challenges of currying syntax in new languages:

[https://github.com/apple/swift- evolution/blob/master/proposa...](https://github.com/apple/swift- evolution/blob/master/proposals/0002-remove-currying.md)

</comment></comment><comment><USER19> I wrote my own curry using the pareto principle - this works for 80% of my use cases (or more):

       const curry = (fn,b) => (a) => fn(a,b);

<comment><USER20> Are you typically _not_ binding the first parameter? Why?

<comment><USER19> It's a _right_ curry (which I can reapply for N args). It's just personal preference, but I like to write "function templates" and then "particularize" them with a curry, from right to left. The direction is unusual but it's a personal choice and arbitrary.

<comment><USER15> That's a right _section_ [1] (i.e., a partial application in the second argument). There's no such thing as a right curry.

[1] [https://wiki.haskell.org/Section_of_an_infix_operator](https://wiki.haskell.org/Section_of_an_infix_operator)

<comment><USER19> Haskell "sections" seem to be very specific to infix operators, so they don't apply.

>There's no such thing as a right curry.

Haha, well there is now!

<comment><USER15> It's not Haskell-specific terminology, I've seen it used in other functional language contexts (some Scheme libraries, etc.). But I admit I couldn't find another reference to link to the term, at least not with a quick Web search. :)

(It's still not currying, though! If you're providing partial arguments to an existing function, that's partial application; if you're transforming a multi- arg function into a single-arg, function-returning function, then it's currying!)

</comment></comment></comment></comment></comment></comment><comment><USER12> I see the complaint over abusing currying, currying comes from a world where things are reduced (npi) into binary and unary operations as much as possible. I don't think FP/ML guys would like having wild arguments counts too.

</comment><comment><USER21> Title should contain "in JavaScript".</comment>


Ask HN: Is Google Maps Featuring Uber Legal? - <AUTHOR>

If you do a Google Maps search from a mobile device and find walking instructions, there is a tile below the options that says "Get an Uber", comparing the time it will take for a user to walk vs. take an Uber.
Google has a dominant position in the maps app market and Uber is a company they've invested in. Is it legal for them to leverage their monopoly in this area to exclusively promote one of their portfolio companies?
At a minimum it seems like they should be offering all rideshare apps the ability to be featured in this space and let them buy it like any other ad space Google sells.
I'm thinking about this because of the recent expose of Uber's aggressive and potentially illegal tactics to undermine Lyft. I haven't heard anyone talk about this particular issue--Google potentially using its monopoly power to tilt the market in favor of one of its portfolio companies. <comment><USER2> _Google has a dominant position in the maps app market and Uber is a company they 've invested in. Is it legal for them to leverage their monopoly in this area to exclusively promote one of their portfolio companies?_

It appears legal:

 _The Federal Trade Commission said Thursday it wouldn 't bring charges against Google after a 19-month investigation into whether the company favored its own products and services in its search results and unfairly harmed rivals._

[1] [http://online.wsj.com/news/articles/SB1000142412788732387420...](http://online.wsj.com/news/articles/SB10001424127887323874204578219592520327884)

</comment><comment><USER3> One thing to keep in mind is that Google only suggests getting an Uber if the user already has the Uber app installed on their device. So while this integration does give Uber an advantage in getting more rides, it doesn't help Uber get new riders. Not sure if this affects the post's argument or not.

</comment><comment><USER4> Issues like this against Google are crazy and just wrong. What is wrong with a company pushing its own (or invested in) products (similarly: the EU requiring Google to not favor its own services when conducting a search)? If you do not like it, than use a different service; the benefit of the free market.

Sorry if that was a bit of a rant: illegal no.

<comment><USER5> There's something better than a free market: a _competitive_ market. Multiple roughly equal providers competing on price, features, quality and so on benefit consumers more than the philosophical free market. But it's not in a company's benefit to compete and drive its profit margins towards zero, so sometimes regulations (restrictions on freedom) help to ensure competition.

The best example is phone number portability. By legally forcing all mobile carriers to offer phone number portability, users can switch between carriers without losing their existing phone number. This reduces lock-in to providers, and encourages them to compete on price and service instead. No sane carrier would offer phone number portability without being required to, since it only helps customers who move away.

FTC has decided that Google isn't unfairly using its popular products to prop up unpopular ones so far, and I think Bing Maps and Apple Maps are close enough substitutes to not consider Google Maps a monopoly. Also, ridesharing seems to be booked mostly via custom apps, not from general map apps. But if Google Maps really was the only serious option for looking up rides, then I would see the benefit to consumers to requiring Google to integrate all major ridesharing services.

</comment></comment><comment><USER6> Couldn't you similarly ask if they have to include Facebook, Twitter and others where they currently have Google+ integration?

Seems like it's their choice to integrate whatever they want, outside of some antitrust violation.</comment>


E-Voting Refuses to Die Even Though It's Neither Secure nor Secret - <AUTHOR> https://www.scientificamerican.com/article/e-voting-refuses-to-die-even-though-it-s-neither-secure-nor-secret/ <comment><USER2> There are documented issues with many existing electronic voting systems. E-voting encompasses a lot of different types of system that can involve computers in the chain, and not surprisingly all of them are equal.

There have been a few discussions around voting on HN recently, and that's good. It's an important topic, as trust in the integrity of elections is vital for democracy. There's a lot of existing material out there about verifiable and auditable voting systems, especially in the wake of the 2000 US Presidential elections. I encourage you to take a look at what's out there. It can provide a great foundation for discussion.

Here are some links I've found useful:

Wikipedia page on End-to-End Auditable Voting Systems [https://en.wikipedia.org/wiki/End-to- end_auditable_voting_sy...](https://en.wikipedia.org/wiki/End-to- end_auditable_voting_systems)

Ron Rivest slide deck from March 2016. Auditability and Verifiability of Elections [https://people.csail.mit.edu/rivest/pubs/Riv16x.pdf](https://people.csail.mit.edu/rivest/pubs/Riv16x.pdf)

Ben Adida Google Tech Talks December 19, 2007 Theory and Practice of Cryptography: Verifying Electiosns with Cryptography [https://www.youtube.com/watch?v=ZDnShu5V99s](https://www.youtube.com/watch?v=ZDnShu5V99s)</comment>


Principles of bot design - <AUTHOR> https://blog.intercom.io/principles-bot-design/ <comment><USER2> Oh my God, I rarely if ever see an article which says _exactly_ the opposite things than what I follow. For an IRC bot I've built and still developing it over the years, my guidelines are pretty much the _exact reverse_ of this article. Except maybe the "3\. Respect the chat medium". But seriously, I _want_ it to pretend to be a human as much as possible, use free-form input and personalize responses for people involved.

Then again, that bot is designed to be fun addition to the channel and at the same time an useful tool, and not - like in this coming startup bot frenzy - an interactive ad.

<comment><USER3> It's interesting, that kinda proves that you both have chosen good opinionated principles!

</comment></comment><comment><USER4> This is 10% of the way there, but closer than anything else I've read. We need to stop pretending bots are going to be able to understand intent even if they can parse language. We should not pretend these tools are anything more than mapping to a menu of options and learn how to empower users instead of hiding away control.

</comment><comment><USER5> I'm surprised he didn't mention the top 3: [https://xkcd.com/1613/](https://xkcd.com/1613/)

</comment><comment><USER6> I think bots will be huuuuge in the VR space because people will need something to interact with and people won't always be available / possible.

</comment><comment><USER7> Some of these rules assume that you have control over the whole experience, which is fine if you're writing an app from the ground up with chat. But if you're writing a bot for slack or Facebook messenger, you don't have control of those things.

</comment><comment><USER8> A lot of these principles can be applied to IVR design as well.

</comment><comment><USER9> That is an amazing font. [http://i.imgur.com/DcpZIaZ.png](http://i.imgur.com/DcpZIaZ.png) [http://i.imgur.com/BUPG2r9.png](http://i.imgur.com/BUPG2r9.png)

<comment><USER10> I think its just you, looks great to me. Maybe an ad blocker?

<comment><USER11> Looks fine to me even with an ad blocker (uBlock Origin) on Chrome for OS X.

<comment><USER12> works fine on windows 10 as well (also chrome with ublock)</comment></comment></comment></comment>


Popularizing Haskell through easy web deployment  - <AUTHOR> http://blog.begriffs.com/2013/12/popularizing-haskell-through-easy-web.html <comment><USER2> Since no one have pointed out yet, I take the opportunity to recommend FPComplete.

It's a new company focusing on this exact problem. They offer tools like an IDE and deployment model. You can just sign-up on their website and start coding directly, you don't need to mess with setting things up. They also got School of Haskell which is a central place of really great tutorials ranging from tutorials on developing web apps to category theory stuff.

Check them out: [https://www.fpcomplete.com/](https://www.fpcomplete.com/)

<comment><USER3> I don't get the appeal of an IDE in Haskell development. You can download the Haskell platform on haskell.org. In the case of Windows or OS X, it takes a few mouse clicks, and on Linux you launch a package manager to install it.

There may be some benefits of using whatever FP Complete offers, but if anyone is struggling with getting Haskell set up on his computer with the official releases, then that person might need to acquire some other skills first before delving into the world of pure functional programming.

<comment><USER4> Your post implies that the main reason people would use an IDE is because they are having trouble getting non-IDE tools for the language setup.

Of all the benefits I've heard ever used to sell IDEs, that's got to be the least common. Usually, things like syntax highlighting and error detection as you type, project management tools, version control integration, autocomplete, documentation/API tooltips, debugger integration, etc. are the advantages.

Some of those might be less relevant to Haskell than to, say, Java/C# style languages, but some of them would still be useful.

<comment><USER3> My impression is certainly that IDEs are aimed at beginners and users of more 'complex' languages like Java. (Case in point: Java has DrJava and other beginner IDEs, as well as IDEs for professionals like IntelliJ.)Indeed, I was referring to the the claim of the OP that "you don't need to mess with setting things up", which, to me, seemed to imply that it was a significant hurdle to get started with Haskell using an editor and ghci.

Syntax highlighting is part of any editor that is aimed at programmers, the interpreter does a great job highlighting errors, version control is done with git, and there is plethora of documentation on Haskell available too. Normally, ghci satisfies that need as well.

<comment><USER5> I write scala in an IDE and I am not a beginner

<comment><USER3> Scala is arguably part of the group of 'complex' languages I mentioned. Besides, the Scala worksheet functionality in Eclipse is really neat, which is another reason to consider using an IDE for it.

</comment></comment></comment></comment></comment></comment><comment><USER6> > nicely structured codebases whose language helped prevent a jumbled > undocumented mess

What makes one think that _any_ language can prevent "a jumbled undocumented mess"?

<comment><USER7> It sounds like a thinly-veiled quip against duck typing.

Type systems are self-documenting? (Or, Hindley-Milner type systems are self- documenting?)

<comment><USER8> Oh yes! My _favorite_ part of Haskell's type system is it's documentation purpose. It doesn't cover intent very well, but it's quite frequent that I can reason about the entire purpose and functionality of a function just by looking at its type. This documentation is guaranteed to never go out of date.

<comment><USER9> I feel that while type information is useful, some of the more advanced libraries have signatures that are very difficult to reason about.

Disclaimer: Didn't write read a lot of Haskell so it may be just that.

<comment><USER8> Definitely. It can go VERY overboard at times, and that's part of Haskell style, writing code that makes intelligible types appear. It means that both the compiler and your users will have an easy time with your code. Most of the best libraries are pretty good about that.

It's also a familiarity thing. The most complex signatures require some practice before they're easy to digest.

</comment></comment></comment></comment></comment><comment><USER10> What gave PHP its boost was a pervasive mod_php, and an instant change- file/see-change cycle.

mod_buildpack?

<comment><USER2> Not sure if it's related (not a web developer), but here it is anyway: [http://nixos.org/~eelco/mod_haskell/](http://nixos.org/~eelco/mod_haskell/)

</comment></comment><comment><USER11> For me, the biggest issue to learning Haskell is once programs progressed to a certain level of complexity, the sheer amount of types that got thrown at me made my head hurt. I could deal with pure functions, IO, monads (I even like monads), even mutable variables and arrays weren't too bad. But the types, so many types and types of types... It seemed every value that was meant to represent anything had its own type and reasoning about what function to use on what type was too much.

Maybe I'll revisit it one day, but that was my pain point...

<comment><USER12> The more software you write in it the more that stuff becomes second nature (unless you're a library writer in which you have to reason about your types very carefully).

</comment></comment><comment><USER13> Two, well, issues from my experience with gitit (great software by the way): compilation may take huge amounts of RAM compared to what the webapp itself will later use -- it is likely that one will need to use some other, metal machine for building. Also, Haskell is doing idle garbage collection which eats CPU even when nothing is happening, and this may become a less or more painful surprise. It can be turned off, though.

<comment><USER14> I don't have any specific info about what the parent post was talking about, but for those that were curious about Haskell's garbage collector in general (like me), here is a Stack Overflow link with some explanation:

[http://stackoverflow.com/questions/15236238/current-state- of...](http://stackoverflow.com/questions/15236238/current-state-of-haskell- soft-real-time)

And here is the GHC (Haskell compiler) docs on controlling the garbage collector:

[http://www.haskell.org/ghc/docs/7.0.1/html/users_guide/runti...](http://www.haskell.org/ghc/docs/7.0.1/html/users_guide/runtime- control.html)

</comment></comment><comment><USER15> Cool. Does Haskell have a great web development tutorial out there that could use this?

<comment><USER16> The "book" for Yesod framework is quite like a walkthrough - [http://www.yesodweb.com/book](http://www.yesodweb.com/book)

</comment></comment><comment><USER17> I get the desire, but you'll never be able to popularize Haskell because the only people who want to use it are math majors, and most web devs are not math majors.

If you want to popularize Haskell you'll need to rework the syntax at the very least.

<comment><USER18> > the only people who want to use it are math majors

 __Edit: This is FUD and I kind of feel offended by it, though I 'm not sure that is rational __

I 'm not a math major. I am a web dev. I want to use Haskell (and am using in a smaller capacity) because it means I have to be up late fixing things less. It means that I can worry about my sites getting hacked less because of the strong static typing guarantees which protect me against csrf.

On top of all that type annotations are great for documenting things. On top of that, composing functions and monads can allow you to do things much safer and much more quickly.

There are many teaching resources which show how some of Haskell's perceived cons can be pros such as these:

[http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard- Way...](http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/)

[http://book.realworldhaskell.org/](http://book.realworldhaskell.org/)

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

[http://adit.io/posts/2013-04-17-functors,_applicatives,_and_...](http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html) (with web dev applicable example) [http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_H...](http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours)

Honestly from my experiences in #haskell on freenode, /r/haskell, and Haskell related content on the web it seems like many more people are using it with the intent to make "real world software".

I haven't gotten the ivory tower vibe from anyone in the Haskell community yet. Quite the opposite actually, everyone seems very pragmatic.

<comment><USER16> The syntax for "record types" \- elements of named tuples - is really awkward and pollute namespace.

I.e., if I want a module in my app to have two different types containing an element 'customerID' that I'd like to refer by name in that context, then it's a bit painful - and it is a really common need if I need to quickly make a mostly-CRUD webapp, for which otherwise Haskell/Yesod would be as practical as Ruby/Rails.

<comment><USER19> It's being fixed.

[http://www.reddit.com/r/haskell/comments/1rpte3/explanation_...](http://www.reddit.com/r/haskell/comments/1rpte3/explanation_of_the_new_haskell_records_extension/)</comment></comment></comment></comment>


Technology Sabotaged Public Safety - <AUTHOR> https://www.theatlantic.com/technology/archive/2019/10/how-technology-sabotaged-public-safety/599611/ <comment><USER2> Classic post Powell Atlantic blaming Uber because the writer's kids don't wear seatbelts. To say that Uber is a public safety hazard because there's data on people wearing their seatbelt less in taxicabs is, simply untrue. Essentially reducing the agency of people as a group down to some kind of technological serf class. Truly strange writing.</comment>


Analysis of SwissCovid app - <AUTHOR> https://lasec.epfl.ch/people/vaudenay/swisscovid.html <comment><USER3> >A big part of the contact tracing protocol (which was originally the DP3T protocol) is implemented by Apple-Google in a part of the system called GAEN. This part has no available source code although the law requires disclosure of the source code of all components of the system.

By the same logic, this would seem to require all of iOS and Android to be open source. Where does the "App" end and the underlying OS and libraries begin in this requirement?

<comment><USER4> They argue that GAEN is part of the Play Services on Android. And that the app was designed to work at first with DP3T protocol which (I'm not sure) requires only access to bluetooth on the device. But DP3T was replaced with GAEN.

(This just my understanding from the web page and wikipedia, I'm not familiar with all of this :) )

 _To justify such exclusion, SwissCovid promoters argue that GAEN is part of the operating system of the phone, or sometimes part of the Bluetooth communication interface of the phone, and that it is not common to require to disclose the source code of such parts. We deny that GAEN is any such part of the phone, at least on Android phones. GAEN is part of the Google Play Services which are independent of the operating system and of the communication interfaces. We could actually run a pre-standard version of SwissCovid on an Android phone which had no Google Play Services. However, this phone had the Android operating system and could use Bluetooth. Furthermore, most of the former DP3T protocol which was implemented in this pre-standard version disappeared in the current version of the app since an equivalent protocol is now in GAEN. We conclude that there is no founded technical justification for excluding GAEN from the components of the system._

<comment><USER5> Purely speculating, but the reason for GAEN being part of Play Services is probably that otherwise it would require an OS update to be installed, which means ~80% of the Android phones being used "out in the wild" would be incompatible (Ok, maybe a bit less in Switzerland). And (even more speculative), the reason for using GAEN instead of DP3T may be battery usage? So you could build a theoretically pure open source implementation, but then nobody would use it because it drains their battery twice as fast as normal...

<comment><USER4> You are correct about battery usage. The analysis they published[1] mentions this (in the 2nd paragraph of the introduction) :

 _" One difficulty of using Bluetooth in phones is that the operating system does not allow apps running in the background to use the Bluetooth advertising system. Hence, to do so,either the app must stay in the foreground, which drains the battery a lot, or the operating system must be changed. Apple and Google allied to provide a standard Bluetooth API which would not drain the battery. Hence, automated contact tracing apps must either be complian twith this API or make the user upset about heavy battery usage."_

Singapore's TraceTogether app doesn't use GAEN api and does have this issue [2].

France's StopCovid app uses a different protocol called ROBERT[3], and they asked Apple to allow their app to run in the background[4]. So they also have battery issues.

[1]: [https://lasec.epfl.ch/people/vaudenay/swisscovid- ana.pdf](https://lasec.epfl.ch/people/vaudenay/swisscovid-ana.pdf)

[2]: [https://en.wikipedia.org/wiki/TraceTogether#Description](https://en.wikipedia.org/wiki/TraceTogether#Description)

[3]: [https://github.com/ROBERT-proximity- tracing/documents](https://github.com/ROBERT-proximity-tracing/documents)

[4]: [https://en.wikipedia.org/wiki/Exposure_Notification#Non- adop...](https://en.wikipedia.org/wiki/Exposure_Notification#Non-adopters)

</comment></comment></comment></comment><comment><USER6> "Although the source code of the app is available, we cannot compile it, run it, and make it work without signing an agreement with Apple or Google. We do not find it compatible with the notion of open source." <\-- Isnt this the case with every app?

<comment><USER5> I wonder what alternative they would propose? If you want people to be able to use your app, you have to support the most popular app platforms, and if that means signing and agreement with Apple and/or Google, you have to do that. Anything else is "ivory tower" thinking.

<comment><USER7> Its no about platform but using proprietary stuff, you should be able to compile and run it on a complete opensource android without the proprietary parts.

<comment><USER5> I think that's the second point in the list:

> _A big part of the contact tracing protocol (which was originally the DP3T > protocol) is implemented by Apple-Google in a part of the system called > GAEN. This part has no available source code although the law requires > disclosure of the source code of all components of the system._

Since the first point is separate from that, it must be referring to something else?!

</comment></comment></comment></comment><comment><USER8> Same thing happened in Germany, UK and France. They waited until Apple/Google could provide Low Energy Bluetooth support. Earlier apps had energy problems, bit did implement the tracking ID securely, decentralized. Now the OS update the new apps don't use their own decentralized tracking anymore, they switched over to. the OS provided new "Random ID", which is a centralized Tracking ID. All those countries are lying about the security implications. In CH at least there was some public criticism which is conveniently ignored, I guess. The implication is that each government has now to ask Apple and Google via their friendly NSA contacts for the ID's in question. Which is not different from the previous protocol to get the search history or location protocol for its citizens.

</comment><comment><USER9> > Users may be traced or identified by surveillance systems of third parties > while using SwissCovid.

How does that work? Do they mean the Bluetooth MAC or can the users also be traced/identified by third parties through the Apple/Google API?

</comment><comment><USER10> Setting apart the technical parts, this is IMHO _preoccupying_ :

> NCSC states that "Users can always turn off tracing if they are in what they > consider to be a sensitive environment".

Data (location and/or contacts) is either sensitive data or is it not (according to local Laws), the concept of "less sensitive data that I can risk being not protected" as opposed to "more sensitive data that - to be safe - <USER2> must exclude from collection by turning off the app" is "crazy".

Example:

1) going to work and back: app on

2) at work: app on

3) at home: app on

4) going out to - say - procure something illegal or meet lover (cheating on wife), sensitive environment: app off

In this case absence of data may be data as well.

<comment><USER7> True but it's plausible deniability (empty batteries), or activate the developer-mode on android and fake the coordinates (not cheating the wife, but still a work)

</comment></comment><comment><USER11> > In summary, our observations are as follows. > Some servers are hosted by > Amazon, as part of a CDN service.

FUD - This report is all about Fear, Uncertainty and Doubt and is every bit as dangerous as lying.

I find it difficult to believe that, even among the HackerNews crowd, this point registers near as important as having an easy to use, efficient way to do contact tracing for Covid-19.

Why does every attempt to make the world a better place have to be ripped apart and thrown in the dumpster fire?

<comment><USER12> Unfortunately, I agree with this view of the report. The report does do a mid- depth technical dive and raises the sort of things a security analyst would certainly look to verify, and I will use it as a base for other app analysis - but it conflates hypothetical risks with vulnerabilities. I am dealing with these precise technical issues around de-identification and encryption in a professional context right now. The paper uses nested and linked parenthetical observations and comments without resolving them to evidence, and it reads like a rant. The issue of not being able to rebuild a working app from the provided source code is indeed cause for suspicion, but it needs deeper analysis. The criticism that somehow key derivation is not encryption reads like the author was reaching out of their depth.

A security analysis needs to be more than just an uncharitable read of an architecture that shows it has exposure to scandal or discredit. These apps are going to have issues around data access, custody and control and a lot of others, but the analysis of them needs to be stronger.

<comment><USER13> I agree generally with you, but Prof Vaudenay is not "out of his depth". His publication record would show that he knows the difference between key derivation and encryption. The people who don't are those trying to write the overly simplified summaries to calm people's nerves, in particular in the case of Vaudenay is taking about, the Confederation government, who should know better.

</comment></comment></comment><comment><USER14> > there is no founded technical justification for excluding GAEN from the > components of the system

That can unfortunately be said of quite a few apps, but it's good that they pointed it out here. In any case, if you're running a phone with Google Apps installed, privacy can only be an illusion.

</comment><comment><USER15> Nobody commenting on the (lack of) formatting? I mean, I know we techies love plain and simple markup but this looks like taking a piss at the readers.

The content is not that great and the plain text does nothing to make it feel technical coherent or valuable.

</comment><comment><USER16> misleading title. Please use source titles in submissions.

<comment><USER7> You mean 'Own Analysis of SwissCovid'?

<comment><USER16> Or what it is now (title was edited, before it just mentioned one of the points)

<comment><USER7> Ahhh, have a nice day.</comment></comment></comment></comment>


Ask HN: How to build your own streaming "Nest Cam"? - <AUTHOR> I am attempting to build my own home monitoring system, to learn more about computer vision/image processing. Need some help on the hardware side - i.e. which camera to use for streaming to a custom IP?<p>Would love to learn if you built such a system before or can point to some useful resources? <comment><USER2> There's this:

[http://www.instructables.com/id/How-to-Make-Raspberry-Pi- Web...](http://www.instructables.com/id/How-to-Make-Raspberry-Pi-Webcam- Server-and-Stream-/)

</comment><comment><USER2> This site looked interesting:

[http://www.camera-sdk.com/](http://www.camera-sdk.com/)

</comment><comment><USER2> make sure you change the factory default username/password.

[https://reolink.com/how-to-tell-if-your-security-camera- has-...](https://reolink.com/how-to-tell-if-your-security-camera-has-been- hacked/)</comment>