App Engine JavaScript SDK - <AUTHOR> http://www.appenginejs.org/ <comment><USER3> If you're thinking of using the App Engine read this first:

[http://highscalability.com/blog/2010/5/26/end-to-end- perform...](http://highscalability.com/blog/2010/5/26/end-to-end-performance- study-of-cloud-services.html)

<comment><USER4> But read it well. It seems AppEngine comes out very bad, but it was tested for db transaction speed in a way that every insert locks the entire db (one big entity group). Any AppEngine developer could tell you not to use it like this. More info: [http://code.google.com/appengine/docs/python/datastore/keysa...](http://code.google.com/appengine/docs/python/datastore/keysandentitygroups.html)

It would be very interesting to see what the results would be with some more realistic testing.

<comment><USER5> > _Any AppEngine developer could tell you not to use it like this_

I'd really wish for some AppEngine developer to tell me how's the proper way of designing entity groups. The only advice given is to not exceed a single user's data, otherwise it's too big.

Really, I want to see an example of a request handler that creates data in multiple entities and takes care to not create duplicates.

> _It would be very interesting to see what the results would be with some > more realistic testing._

IMHO, my experience with AppEngine's datastore has been pretty bad ... the performance varies greatly based on factors you can't control ... i.e. processing something that does well on slow Fridays, may throw the 30 secs timeout error on Mondays.

Also, I don't know how people deploy real-world apps on it ... a non- relational datastore requires custom indexes (i.e. precalculated queries done by building specialized entities out of your quasi-normalized data).

You can't do that easily because of the 30 secs limit that also applies to cron or queue jobs. I tried a workaround by having a queue task that processes 5 rows at a time and then reschedules itself. The stuff was so god-damn awful to debug, and the results so unpredictable (30 secs timeout for 5 rows / concurrency issues) that I felt like crying.

But yeah, it's fine for hosting a blog engine on top of it.

<comment><USER3> Another issue we're running into now (as a result of having a growing number of users) is that we're noticing that downtime on the App Engine is shockingly bad, and getting worse.

Over the last few weeks, we've seen periods of downtime pretty much daily, and serious downtime (i.e. more than a few minutes) monthly. It's grossly under- reported in the App Engine status console, which shows a euphemistic warning (which in practice might mean that all server requests will return errors.)

Our software is used in the classroom during lectures, and we've had several customers experience system failure due to App Engine downtime. On top of that we've had more than one customer demo go wrong for the same reason.

It's pretty infuriating actually, because 1. you can't do anything other than just sit there and wait it out, and 2. there is no one to talk to at Google. Finally, the problems are only getting worse.

We were going to do a slow migration out of the App Engine over the course of a few months (because we've got a ton of code to rewrite.) At this point we're doing an emergency 2 week migration with all devs pulled from their projects for the task.

I honestly have no idea why these issues aren't getting more mainstream attention, given how many people are using the App Engine. The only thing I can come up with is that there must be tons and tons of tiny non-critical projects, and very few serious startups betting their business on the App Engine.

<comment><USER6> I was about to start a big project on App Engine, so your comment is worrying.

Anybody else having reliability problems with GAE or is this just an isolated case?

<comment><USER3> If you're interested in more gory details feel free to email me at mike at tophatmonocle dot com.

For what it's worth, we're an angel funded startup with some extremely bright hackers and we were signing praises about the App Engine until about 3 months in, when we started hitting it's various brick walls.

Oh, and take a look at: <http://code.google.com/status/appengine>

Click through the various items with green checkmarks to see the actual data that GAE considers "no significant issues." Including fun stuff like 80% datastore error rates.

<comment><USER7> There might be some problems but it's great to know that Google system administrators (instead of me) are taking care of it. When I hosted my application on EC2 twice I almost lost all my files due to hardware problems. I had to spend all night preparing a new server, _not_ funny. There are no servers to fail in App Engine, I _love_ that!

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> I'm always amazed at how popular Rhino is vs. how little active development effort it receives. I'm as guilty as anyone of course.

<comment><USER9> the thing about rhino is, that it already _is_ a mature js implementation. it has the most modern js support of all the engines out there (the version shipping with java is sadly quiet old) and it's battle tested. we have it in production since 8+ years.

i can see how it might seem rhino has "little active development" because we are comparing it to js implementations that just started and of course have more "going on" then the old horse.

<comment><USER8> The general consensus seems to be that Rhino doesn't really exploit the performance potential of the JVM. Basically, it could probably be a lot faster.

</comment></comment></comment><comment><USER7> some more thoughts on appengineJS here: [http://www.gmosx.com/blog/agVnbW9zeHIPCxIHQXJ0aWNsZRipwwEM/o...](http://www.gmosx.com/blog/agVnbW9zeHIPCxIHQXJ0aWNsZRipwwEM/on- appenginejs)

</comment><comment><USER10> Great stuff!

</comment><comment><USER11> Cool project. I'll never understand why anyone wants to program in JS though.

<comment><USER12> I used to feel this way. The two people that changed my mind were John Resig and Douglas Crockford. Resig's jQuery project has been, for me, a guide to how JS should be written. Crockford's JS the Good Parts and JSLint have helped as well by providing some solid reference on what to do and, more importantly, what not to do.

Lots of folks only see the DOM and the bad parts when working with JS - <USER2> two projects have shown me there's so much more.

<comment><USER13> _Lots of folks only see the DOM and the bad parts when working with JS_

Agreed that you can't blame Javascript for the DOM, but there are _lots_ of bad parts aside from that. Default global scope and semioptional semicolons are gigantic WTFs, the with statement should be nuked from orbit, and there are generally lots of ways to write code that appears to be correct but is just waiting to fail in bizarre ways. It's just annoying that we're stuck with Javascript because it's so entrenched, while Python and Ruby offer all of its strengths in much saner packages.

<comment><USER12> I believe I did say "and the bad parts". I agree - there are lots of bad parts to JS - I often wish it could be remade without the bad parts. However, a lot of these bad parts can be mitigated with sane conventions - that's what Crockford's "Good Parts" is all about. If you haven't read it, I highly suggest it.

I can't speak for Ruby, but in many ways JS is more powerful than Python, especially on the functional side of the house.</comment></comment></comment></comment>


Facebook's Privacy Settings Present Intrinsic Limitations To The Platform - <AUTHOR> http://www.allfacebook.com/2009/04/facebook-privacy-limitations/

<comment><USER2> As a user I'm sick of Facebook applications requiring access to more information than they need. If anything there should be greater control for users to limit what information is accessible by applications on a global level. Secondly, applications should be forced to stop this viral spam crap (including spamming notifications to friends/getting spammed from friends). The report a spam feature doesn't work because people are happy with the apps and the spam feature is pretty hidden. For a quiz app to need access to your friends is ridiculous.</comment>


Phil Schiller on App Store Upgrade Pricing, Echo-Like Devices, Swift - <AUTHOR> http://gadgets.ndtv.com/apps/features/phil-schiller-upgrade-pricing-google-home-amazon-echo-swift-1690180 <comment><AUTHOR> Upgrade pricing and/or subscriptions would make a huge difference to the app store. Particularly to the Mac app store where there is not an infinite number of customers.</comment>


New Simulations Predict the United States' Coming Climate Change Mass Migration - <AUTHOR> https://motherboard.vice.com/en_us/article/new-simulations-predict-the-united-states-coming-climate-change-mass-migration <comment><USER2> I hear so often of people trying to make a buck on Green products and sustainable practices. It has become a common knowledge phenomenon that Earth's climate is changing. But it is very rare to hear that people are actually planning for the Change.</comment>


Ask HN: Is ActiveDirectory an Embrace, Extend, Extinguish of LDAP? - <AUTHOR> I was studying the Embrace, Extend and Extinguish strategy(https://en.wikipedia.org/wiki/Embrace,_extend_and_extinguish) implemented by various Tech companies. It just occurred to me that ActiveDirectory that is one of the most successful enterprise  products of microsoft, could be interpreted as an EEE over LDAP.<p>Could you elaborate on that? <comment><USER2> LDAP and AD aren't equivalent technologies. LDAP provides "directory services" meaning (practically speaking) usernames, passwords and security policies. AD provides that and much more. For example, AD lets you share folders and manage users, something LDAP doesn't support. So you have to combine LDAP with other protocols.

Many many years ago I had the displeasure of being in charge of an AD to OpenLDAP+NFS migration for a mid-sized company. I was put in charge after an intern had spent months trying but failing to come up with a migration plan. I can tell you it wasn't fun. Especially the weird configuration files and stupid Perl scripts I had to use to communicate with OpenLDAP. I don't remember the details, but there was a lot of character encoding problems (åäö) and places where whitespace was significant in command line arguments.

It made me appreciate AD because in comparison configuring that is a breeze. I'm not much a MS fan but AD is imho a solid product.

<comment><USER3> AD let's you provision file system/share permissions. It isn't a file share in and of itself.

Just like in the AD world, other tools allow you to configure them either partly or fully via ldap.

I'm not sure what you mean that ldap doesn't let you "manage users". That's literally the most common use case for it.

I don't know why you felt forced to use Perl. The primary interface of any ldap compliant directory is just ldap, which has bindings in practically every language, and if you want to do bulk operations, you'd probably use LDIF.

Blaming ldap for you using Perl is like saying "I hate the web it requires you to write java".

<comment><USER2> The LDAP protocol doesn't contain features required for properly managing users. For example, to set password expiration dates, control password strengths or to allow autonomous password recovery. Such features are instead provided in extension modules, if at all.

10-15 years ago when I dabbled with LDAP, the only bindings for OpenLDAP was written in Perl. Glad to hear that the situation is better now.

</comment></comment></comment><comment><USER4> I thought Active Directory was Microsoft's response to the competitive threat from other X.500-inspired, proprietary directory products, most notably Novell's NDS, which met the needs of large organizations in ways that Windows NT domains couldn't.

LDAP and Kerberos were in use before Active Directory, of course, but they weren't ubiquitous the way HTML, HTTP, or IP had become by 1999, so I'm not sure the "embrace" stage of the strategy fits. Certainly, there were marketing advantages for Microsoft from using well-regarded open standards with at least nominal cross-platform compatibility, and some customers who would have expected any serious directory server to work with LDAP clients.</comment>


Sparrow Founder Tells How He Made $350K, And Praises Apple's Walled Garden - <AUTHOR> http://www.businessinsider.com/dom-leca-interview-sparrow-2011-8

<comment><USER2> Having just launched a Mac app, I can definitely say that the Mac App Store market is really wide open for developers right now.

The main caveat is that Mac development is a lot more challenging than iOS development, especially if you want to create a custom shiny user interface like Sparrow's.

Simply put, the AppKit APIs are not nearly as nice to work with as their iOS counterparts.</comment>


Ask HN: What's your worst undefined C story? - <AUTHOR> We've all heard the ghost stories about undefined C programs that delete hard disks or set the computer on fire. However, usually, C programs with undefined behavior either crash or seem to be working.<p>So, has anyone ever experienced behavior that went beyond that? <comment><USER3> I was unable to find the quote, but someone once said that "We always focus on the negative effects of undefined behavior, but literally anything could happen. It doesn't have to be bad! Let's replace fear with hope."

<comment><USER4> I hope those nasal daemons are friendly.

<comment><USER5> Maybe they can solve the halting problem.

<comment><USER6> Yes, usually by introducing an infinite loop. Never halts. ;)

</comment></comment></comment></comment><comment><USER7> \- Removing Linux NULL pointer check: [https://blog.regehr.org/archives/970](https://blog.regehr.org/archives/970)

\- Time traveling undefined behavior: h[https://devblogs.microsoft.com/oldnewthing/20140627-00/?p=63...](https://devblogs.microsoft.com/oldnewthing/20140627-00/?p=633)

\- bool that is both true and false: [https://markshroyer.com/2012/06/c-both- true-and-false/](https://markshroyer.com/2012/06/c-both-true-and-false/)

\- Turning finite loops into infinite one: [https://stackoverflow.com/questions/24296571/why-does- this-l...](https://stackoverflow.com/questions/24296571/why-does-this-loop- produce-warning-iteration-3u-invokes-undefined-behavior-an)

From: [https://twitter.com/shafikyaghmour/status/114602835166622925...](https://twitter.com/shafikyaghmour/status/1146028351666229250?s=20)

<comment><USER8> Just out of curiosity, why did you make a throwaway account for this comment?

<comment><USER9> Some people prefer to do it due to privacy concerns. In the ideal world, I don't want others to deduce my identity solely from my opinions posted on a random Internet forum, too. If you can identify everyone's identity or background from people's post history on every random forum, I think it shows something is very wrong about the web. And I don't even mean controversial opinions, just normal talks.

In additional to concerns of mass surveillance and privacy, there is a also cultural factor, for example, members from the WELLs (a forum) or early Usenet are expected to post publicly using their real names, on the other hand, for example, privacy is highly valued socially in Japan, it's considered eccentric or offensive to reveal one's identity online when people are not speaking publicly. I remember reading a story of how an owner of a cat whose pictures went viral worldwide refused to reveal his/her identity to any journalist, not even interviewing the cat, including a U.S. journalist who perused the case sincerely.

It's discouraged by the HN Guidelines to make throwaway accounts constantly.

> _Throwaway accounts are ok for sensitive information, but please don 't > create accounts routinely. HN is a community—users should have an identity > that others can relate to._

Since it defeats the karma system and leads to abuses, such as publishing defamatory comments in a hit-and-run manner. But personally, I don't have a problem with them, per se, as long as the comment is constructive.

<comment><USER10> Upvoted this, for some strange reason

</comment></comment></comment></comment><comment><USER11> In the late 80's, two of my fellow C programmers and I thought that we might want to embed a copyright string into all of our executable programs that comprised a system that we were building. These were 16-bit MS-DOS programs. It seemed like an innocuous idea.

Each C program in our system included a header file with a few globals that looked something like this:

        char *dave="Copyright ... blah, blah";
        char *bob="More magic and mirth from the mavericks in MicroDev";
        char *jim="CAPS Sucks!";

The system we were replacing was written in a proprietary programming language called CAPS that was a royal pain to work with.

A decade or so later, after we had moved on to other projects and other companies, one of the old users called me. They were using the system to board a customer and in the printed paperwork that the system generated the words "CAPS Sucks!" showed up! They caught the error before sending the paperwork to the new customer, manually correcting it.

I talked with a new programmer overseeing the system. They eventually found the bug in some code they'd added that caused a pointer to go astray which ended up pointing to constants in early portions of memory ( early because those three strings were in the first #include file in the set.) Why it skipped over the first two strings, I'll never know for sure.

</comment><comment><USER12> Another undefined behaviour error:

We had a macro BAG which looked like:

        #define BAG(x) **x

and people would write things like:

        BAG(x) = f(y);

Now, we had a moving garbage collector, which could cause the value of _x to change, so it was important that this was executed "as if".

        temp = f(y); **x = temp;

For many years, this was exactly what gcc always did, but this wasn't required by C. An update to gcc caused, when optimisation was high enough and gcc felt like it, to instead first dereferencing x, and then calculating f(y), then assigning f(y) to the old value of __x.

But, this would only cause a problem when calling f(y) caused a GC which would change _x, and then a random memory location was written to.

<comment><USER13> Hi, I understand C to the extent I can write simple, intermediate-scale useful programs, but my foundational grasp of the basics is still sufficiently shaky/incomplete that I can still get easily thrown by simple memory management constructs in practice.

In this case, I academically understand pointer-to-pointer references... but I'm honestly not able to mentally model the above.

First of all, congratulations - you have posted comment #4,294,967,296 to be bitten by the asterisks-are-only-for-formatting-and-all-other-uses-should-be- passive-aggressively-ignored bug in the Arc software powering this site! Your prize is that the explanatory denotations of "* x" in your post have disappeared and everything between the two points you've added asterisks has become italicized instead. (It would be great if someone can figure out a way to successfully convince the admins to just fix this bug already - it has existed for the entirety of this site's existence. </rant>)

With that over...

I don't understand the relevance of the 3rd code block. I get the impression it somehow replaced the first one (...?), but I can't figure out how the #define would have been rewritten without changing the signature to something like

        #define BAG(x, y) temp = y; **x = temp;

which was used like

        BAG(x, f(y))

but the above is not valid code as the type of `temp` is not defined or inferrable.

Next, as I noted above the pointer-to-pointer thing is throwing me for a pretty big loop :) and I don't understand how a double dereference would (in practice) translate to a moving garbage collector.

Like pointers I also have a basic academic understanding of GC, but sorely little practical real-world experience with either to be able to make the connection between the two ideas.

Insight appreciated in advance :)

<comment><USER14> To do star star x = f(y), star x and f(y) each need to be evaluated. You'd think the right-hand side would always be evaluated before the left-hand, but that's not always possible (what should "arr[i] = i++" do? I stole this from wikipedia btw). In the above case, f(y) has this kind of side effect that change x, which is undefined.

Rather than changing the macro, this could be fixed easily by putting the assignment into its own function. Then the argument (f(y)) must be fully evaluated before star x.

Edit: I have no idea how to escape asterisk on HN :(

<comment><USER12> The problem with putting the left hand side in a function is you can't assign to the result of a function in C, so it has to be a macro. (although our actual general fix was "stop trying to put anything fancy on the left hand side of an assignment")

</comment></comment></comment></comment><comment><USER12> The problem was subtle -- some part of a program was writing to a memory location it shouldn't be, making random memory locations 0.

We had a custom moving GC. Fixing the bug involved changing the GC so, we used mmap to map an anonymous buffer storing the GCed objects into many memory locations, and each time a memory block was allocated:

1) Choose a random copy of the memory.

2) Mark all the other blocks as neither readable or writable.

3) Make all references to GC memory we were currently tracking point to that block.

This meant anyone who was keeping a pointer to GCed memory we had lost track of would point to a now protected block of memory, and as soon as they tried to read or write through it would cause a segfault.

This made the program run slower.. so much slower the startup, which used to be about 3 seconds was now about 6 hours. However, it found the bug (and a whole bunch of other GC bugs as well).

<comment><USER13> Wow, awesome.

How long did it take to track down all the bugs? Presumably (/hopefully) there was copious logging going on allowing you to track down many issues per run...

(Also, how'd you mark the pages as !RW?)

<comment><USER12> Linux has a function mprotect which let's you mark if a page (usually 4k) of memory can be read, or written to. In these kinds of circumstances it can be used to check if programs are accessing memory they shouldn't be. You do have to do it at a 4k level however, not individual mallocs unfortunately.

</comment></comment></comment><comment><USER15> Early in my programming "career", when I was about 15/16, I started writing network programs in C. I was fascinated by the idea that one program could send and receive data with another far far away. One particular story was a great lesson for me (I eventually ended up naming my company after it), and also pretty amusing. It's not about undefined behaviour, but about not properly understanding C strings. If you're curious, the story is here: [https://martinrue.com/zzuy-a-lesson-in- perseverance](https://martinrue.com/zzuy-a-lesson-in-perseverance)

<comment><USER16> Funny story. Those were great times to be learning programming. Kids these days are swimming in tech, and the thrill of getting a prompt isn't the same as it was then.

</comment></comment><comment><USER17> I guess you weren't exaggerating: [https://www.quora.com/Can-a-code-be- written-to-blow-up-a-com...](https://www.quora.com/Can-a-code-be-written-to- blow-up-a-computer)

<comment><USER18> Side note: Why do some people insist on calling it "a code" or "codes" (plural)? It's bizarre

<comment><USER19> I think it's British or European usage.

<comment><USER20> It's also somewhat common in the scientific community even in the US.

<comment><USER21> Whoever wrote the web interface to "p4 blame" at Danger called it "See who made these codes," which always sounded super weird to me

</comment></comment></comment></comment></comment><comment><USER6> Mine is a simple off by one byte write causing a failure in a separate thread in proprietary barely related code on deinitialization of the library. It took years to find. Not even ASAN, valgrind and debug allocators helped. What did was a full audit including assembly.

They had their own memory allocator and internal threads, the off by one corrupted an atomic flag... Since this is data dependent on a relatively cold path the issue did not appear that often. And less predictably because it was ARM.

Note the multiple stacked undefined behaviors.

</comment><comment><USER22> > We've all heard the ghost stories about undefined C programs that delete > hard disks

Exactly that one. Someone at some job had written a Linux kernel driver - <USER2> a subsystem which was definitely not related to any disk IO. This driver had a bug and was subject to a race condition which it lead it in some cases to write to memory which it didn't own. That caused hard drive corruptions on some devices.

I also had another one in an embedded software project: A "filesystem" on the flash memory got corrupted for multiple reasons: The responsible code was missing synchronization - if two threads would be writing at the same time the result was basically undefined. And it also missed checks for dynamic memory allocation failures, and would then to undefined things.

Debugging all those issues had not been particularly fun, and made me a firmer believer in safer programming languages.

</comment><comment><USER23> Only crashes, as far as I know.

I met a bug from 2010 in Openresty where if you set ngx.header["Cache- Control"] = nil then sometime later maybe nginx will segfault.

nginx uses a pointer to char and length for strings, like any sane C program. For headers that are always present on the response, setting the header value to nil from Lua is implemented as setting it to {NULL, 0} (which is different from the empty string, as far as the lua side is concerned). Sometime later, nginx will call strlcasestrn passing this header value to check whether it contains "private". This involves adding the length of the string to the start pointer to calculate the upper bound. So that's NULL + 0, which is whatever the compiler feels like it is at the time.

</comment><comment><USER4> A colleague wrote this code...

func( a=1, a++);

Sadness ensued until I disassembled it.

</comment><comment><USER24> I recall once reading a bug-report thread of how null-check elisions caused a vulnerability in a big piece of software. I've tried to find it often, because it would be nice to reference in response to your kind of question.

I'm afraid that more than an hour of searching hasn't turned anything up. I think it was a Firefox bug, but given my fruitless search, that seems suspect.

Here's to hoping someone else happens to know what I am talking about and shares a link.

<comment><USER25> Not sure if this is "null-check elisions" but there was the famous case of the Debian SSH daemon package generating easily guessed keys because the packager "fixed" the upstream code... the upstream code was using uninitialized variables to seed randomness, and the packager's software flagged that as a bug, so it was patched by the packager.

Of course, that's not a good way to seed randomness, so I think there's a real argument that the upstream code was, in fact, buggy.

<comment><USER26> Kind of in the same vein, some code I was porting to a newer C++ compiler had "int error = get_status(x);" and I got a warning that the variable "error" is never used. So I commented the line out. After I finished fixing about 1,000 such warnings, re-running the program showed it no longer performed its serial I/O communication function. Turned out "get_status(x)" should have been called "send_data(x)". What was arguably the most important line out of 10,000 lines in the the project had nothing to differentiate it as special, and performs it's work as a "side effect" of setting a flag variable which is never checked.

</comment></comment></comment><comment><USER27> I was reading some data off of the network and storing it in a byte array. Then it was being loaded into some SIMD registers (ARM NEON) to do mathy stuff. Ended up in type punning hell when the code ran fine on some machines but not others. IIRC it worked on machines running Linux but not on bare metal.

</comment><comment><USER28> I had one for shift by negative number. It was in some error correction code. A different team had wrote this code and tested on a PC but the actual hardware used an ARM processor and both implement it differently. We did catch it eventually using a linter tool.</comment>


Carnival Executives Knew They Had a Virus Problem, but Kept the Party Going - <AUTHOR> https://www.bloomberg.com/features/2020-carnival-cruise-coronavirus/ <comment><USER2> Cruising is kind of fun. I've traveled every way, from backpacks and youth hostels to four star hotels - they each have their merits. No, if you take a cruise and stop in Maine, it won't be the same as staying there for a week with friends (I've done both), but if you haven't done it don't mock it. If you just want a day to look a city over (or maybe take a hike in a national park) but don't want to shlep in and out, cruising is a fun way to go.

One great thing about cruising is this (same is true of resorts in general), if you have a large, diverse family, you can all get together for meals or activities on some days, but go off and get away from each other on different days - so you don't all drive each other crazy. Also, when you get older, it makes traveling a lot easier.

</comment><comment><USER3> So did every other business in the world, until Governors started shutting them down?

</comment><comment><USER4> I'll be thrilled if the cruise industry never recovers from this.

</comment><comment><USER5> off-topic nothing extraordinary but but I like that bloomberg site is "trying to" catch up with new york times when it comes to interactive articles.

</comment><comment><USER6> The only thing in the world worse than going on a cruise that I can think of, is going on a cruise with the coronavirus.

<comment><USER7> What, you don't enjoy being stuck in a metal tub with thousands of other people, eating diner hall food and drinking overpriced cocktails only to enjoy watered down visits to foreign ports for extremely short time periods? But I heard they have an infinite soda package for just $12 a day!</comment></comment>


What It Feels Like to Launch a Startup With Two Weeks of Runway - <AUTHOR> http://3gt6bsdf8tv.s3-website-us-east-1.amazonaws.com

<comment><USER2> Why does nobody have any personal savings?

I have 12 months worth of all of my personal expenses sitting in a bank account. I never touch it. I can't imagine being above the age of about 25 and not having this. I wouldn't start a new pre-revenue company unless that buffer was at 14 or 18 months or above.

The only reason that starting something seems so scary to you is that you haven't planned properly.

<comment><USER3> I see this a lot here and in other places. I can't speak for the article's author, but not everyone is in the USA where software developers are payed 100k+.

I get paid 33k (EUR) a year. After taxes that is about 1500 a month. After bills and food, I have about 400. If I save every penny, in 2-3 years I have 1 year of living expenses.

Yay for me, except I'm in the top 10% earners in my country and earn about 3 times the national average (and 5 times pre tax minimum wage). Even in software development salaries are usually in the 20-25k range pre tax.

(Portugal if anyone is interested, but even when I was in the UK or Netherlands, there wasn't that much of a difference)

<comment><USER4> I don't know what you are doing. I lived in Edinburgh for 4 years, at the top end, in my last 6 months I was earning £33k. Somehow in that time I managed to save £50k, while having a girl friend, going out on the weekends, and living in the city center. As well as trip overseas ever year.

I have no idea how people manage to spend so much money. I have never owned a car in my life. I never go to coffee shops, and I make my lunch from home. We do mainly cheap stuff, and go on cheap holidays.

<comment><USER5> I think your last paragraph shows that you do, in fact, have an idea of how people manage to spend so much money!

</comment></comment></comment></comment><comment><USER6> And no link to the project referenced? Perhaps that's contributing to the lack of funding. You'll quickly arrive at the point where you're going to have to talk about yourself perpetually at this stage otherwise nobody else will either.

<comment><USER7> This is a skill which is learned...often too late.

</comment></comment><comment><USER8> I'm always happy to hear about programmers starting a company but, come on people! "firing from every single weapon at our disposal without pause," "the most difficult part of this stage in a founder's life", "everyone who knows what I'm doing thinks I'm insane"... these are things that we say when we give ourselves TWO WEEKS to start a company?

The OP already said they are all programmers and can easily get consulting gigs. If the runway is two weeks, what expenses could they possibly have? Obviously they didn't sign a 5-year lease. Two weeks isn't probably enough time to get a payroll system and bank accounts all set up, so I don't see that happening. A runway implies that the business has to shut down when they run out of funds. What could there be in two weeks - an AWS bill for fifty bucks..?

<comment><USER9> He's talking about a personal runway, not the company's runway. He personally has enough money for 2 weeks before he's unable to buy food for himself and his family (etc.).

<comment><USER8> Not a great position to put yourself in as you are trying to launch a new startup.

</comment></comment></comment><comment><USER10> Try <https://www.blueshieldca.com> instead of COBRA. Plans start just under $100 a month and will cover your ass in the case that you break your leg. (Well... bring a $100k bill down to $10k)

Good luck!

<comment> alok-g It's giving me $650 per month (for family of three) for a $12,000 deductible.

<comment><USER11> Correct. I think he quoted the price for a young single male non-smoker with no dependents. Thats me and the price I pay monthly.

<comment><USER10> Sorry, yeah, that was my bad. I was more pointing out that many people think COBRA is a great deal when in reality it is offen not the case. Another option to consider: <http://www.healthysanfrancisco.org/> (Must live in SF)

</comment></comment></comment></comment><comment><USER12> I've done a lot of contracting. At least for us mobile developers, it is generally pretty easy to drop by a meetup and just ask if anyone has any gigs. Often people will announce they are hiring too.

You can get anything from days to weeks to months of easy work this way. Many people will even pay you by the hour day by day to just sit with them and pair program and train them how to write apps themselves. Sounds like you are a web developer, I don't really know how that goes. Asking friends if they or any of their contacts need some work done is good too.

Then of course there's eLance, oDesk, and the rest. If you don't have good reviews there and clients asking for you then you pretty much have to underprice the already cut rate prices to get work. I've hired there and gotten work for others there, but the wages are too low for me to be willing to do it myself.

You shouldn't really count on any one contract coming through, though. Always keep at least two in progress at once and be OK if one client balks at paying no matter how good a job you did, etc.. It shouldn't have been a big deal if one client clearly wasn't going to get back to you.

</comment><comment><USER13> Everyone on HN sympathizes with the entrepreneur but the way I see it, if you're financially irresponsible in your own personal life, why the hell should anyone give you money professionally?

It's like a guy with no training, no climbing experience, NO prep-work, standing at the base of Everest, telling everyone "Come and watch me climb to the top."

You ain't climbing shit buddy.

<comment><USER14> I like you.

</comment></comment><comment><USER15> > Yet, this is our chance. This is our chance to actually build a company. We > have to take it. Another chance may never present itself.

Bah! Two weeks or bust? This is a very short-sited viewpoint: think long term! Slow down and think about what another 3 or 6 months of runway would do for your company and product.

You have skills people want. Do some consulting and give yourself a longer runway. If you truly believe you've got a good product and business on your hands, then find a way to keep it going even if it's on the side while you do a consulting gig. (I know split-focus for a few months is not ideal, but "two weeks or bust" seems like a poor alternative.)

</comment><comment><USER16> This is your chance ... So why is the name of your company a secret? Get out of stealth mode and attach your business name to everything possible.

</comment><comment><USER17> I'm young and live at home (I do pay rent to the parents) and have saved a bunch by living frugally.

If the OP provided more details about the company I might be looking to invest 5k-10k, and/or offer development help.

Always looking to support local startups being that I work at one also, and I know how hard it is to build a great product that consumers want, and raise funding.

</comment><comment><USER18> I sincerely wish you the best with your endeavor. I respect that even though you're backed in a corner financially you are still going hard. Just remember your wife and kids along the way :)

</comment><comment><USER19> Someone, please explain.

<comment><USER20> OP wrote an app with no business plan and apparently no savings, quit job shortly afterwards, and is now on the verge of going broke, so s/he's rationalizing the decision - anonymously, in order to avoid undermining the app brand.

</comment></comment><comment><USER21> OP, do you think you're unique? There are thousands of stories like yours. You're not risking life and limb. You can always get another job if you fail (your post implies that you are a software developer in the US). Sure, your ego may be bruised. Deal with it.

<comment><USER7> Diego, I realize you've done this before. But it doesn't matter if a million others have the same story. The stress, uncertainty, doubt and a bunch of other emotions are very real.

For some it's ego, for others there's a lot more on the line.

Obviously it's not as if we're risking our lives, but you don't have to put your life on the line for something to be incredibly difficult.

<comment><USER21> See my reply to another user. It would be like me complaining about how scary it is to climb big walls in Yosemite.

If it's too difficult, don't do it. If you choose to do it, don't complain. Being an entrepreneur is a privilege, not a prison sentence.

<comment><USER7> I saw that. This has me begging the question. Is this a trait of successful entrepreneurs?

Now I'm genuinely curious.

<comment><USER21> All I can offer is anecdotal evidence. What I can tell you is that as an investor, I would run away from OP. It's not an entirely rational response, just instinct.</comment></comment></comment></comment></comment>


Get that old SUN Keyboard out into the light - <AUTHOR> https://github.com/xelalexv/suniversal <comment><AUTHOR> Here's a project for the holidays, provided you have a SUN Type 5 keyboard and an Arduino Pro Micro lying around. When you're done, you'll have a fully functioning keyboard :-)

Happy holiday hacking!</comment>


Turn Gmail (or any E-mail Account) Into a Social Network Hub - <AUTHOR> http://www.micropersuasion.com/2007/09/looking-for-the.html <comment><USER2> so i guess someone should be submitting the ideas for liamg.</comment>


The Future of Food Looks Small, Dense, and Bushy - <AUTHOR> http://cshl.nautil.us/article/516/the-future-of-food-looks-small-dense-and-very-bushy <comment><USER2> I'm really excited for the day that I can grow a decent portion of my food in my sunroom. I'd pay a lot for one of Kwon's tomato plants. Perhaps I'll have to figure out how to engineer them myself because of long FDA processes though.

<comment><AUTHOR> It's easy. We trialed 75 varieties in my farm.. with just old fashioned plant breeding by hand. Trial and error. We bred tomatoes with thin skin ..thick skin..cherry toms that are determinate as well as indeterminate. Those that can be harvested earlier and instead of picking all season long..we could plant, harvest whole plant and then simply replant. Disease would be greatly controlled. I was also interested in breeding varieties suitable for robots and automated farms..instead of delicate hand picking, we'd just change traits so it can have thicker skins, shaped like cherry tomatoes(highest margin in tomatoes..current mechanization is only for canning varieties)

Multiple harvests is the way to go for automated farms and compact plants. When you have robots picking, labour costs dont matter. Disease incidence and spread is easy to control and varieties can be greatly enhanced as each planting can be a different tomato.

Takes at least 7 generations..breeding old fashioned way by hand. If alternated between Mexico and Ca, we can get it ready in 3 years and in about 2 years, of breeding is outsourced to China(they do it in glasshouses)

Crispr would be a game changer. I would like to see salt water tolerant plant varieties. Saline Ag is going to be the future.

<comment><USER2> Really interesting stuff. I didn't realize that breeding could show meaningful results as quickly as 2 or 3 years through modern techniques. I think I'll have to read up on some of the older techniques along with looking more into the limits of at-home CRISPR (and probably waiting years until it is feasible).</comment></comment></comment>


Ask HN: How can anyone afford to start a business in SF? - <AUTHOR> We all know the myth. The myth is a young engineer, who moves to San Francisco and starts a company. That company quickly gains traction and then applies to YC and becomes fantastically successful. How can anyone afford to do this, especially the young engineer? I'm not even young and I played out the scene from Office Space where I calculated how long it would take me to completely run out of money and ultimately go homeless - and in San Francisco that number is not long!  How can anyone afford to start a business in San Francisco? <comment><USER2> Silicon Valley and SF are where the talent lives, where the VC's live, where the big ideas are implemented. You need some founders, remember Steve (Jobs) and Steve (Woz). Watch [https://www.startupschool.org/](https://www.startupschool.org/), it is free. There are other startup accelerators other than Y-C.

<comment><AUTHOR> Thanks this is awesome.

</comment></comment><comment><USER3> Seems like maybe you're doing it in the wrong order. Why don't you just apply to YC, get accepted, and _then_ move to SF?

</comment><comment><USER4> that myth is not usually reality

read about some actual startups' birth stories, gain inspiration from those. usually it includes sacrifices and rarely does it take place entirely in SF

</comment><comment><USER5> other peoples' money.</comment>


A jobs act that created no jobs: a lesson in profitable lobbying - <AUTHOR> http://www.scholarsandrogues.com/2009/05/03/a-jobs-act-that-created-no-jobs-a-lesson-in-profitable-lobbying/

<comment><USER2> politics.reddit.com

<comment><AUTHOR> I agree, except that I think there's also a lesson to be learned from this piece about marketing -- dishonest marketing, sure, but there it is.

I found it interesting, so submitted. _shrug_

<comment><USER2> Except the article itself is dishonest spin. As far as I am aware, corporations are not charged any taxes on profit in overseas subsidiaries until they are repatriated. So the 5% tax is greater than the 0% tax that they would have received on many sums if they did not have the tax holiday.

Pretty clear (breathless) partisan spin here. Low information, low quality, and I can't believe stuff like this isn't killed anymore.</comment></comment></comment>


India's electronic voting machines are vulnerable to attack - <AUTHOR> http://www.ns.umich.edu/htdocs/releases/story.php?id=7667 <comment><USER2> The point is whether they are less secure than paper ballots. Is it more trivial to tamper with these machines change/destroy valid paper ballots in a similar situation. I think the machines are put in a secure location when they are being use and the time between election and counting

<comment><USER3> "the time between election and counting" - This is of course quite critical , from what i know of India, in certain parts of the country - ballot stuffing of paper ballots was very prevalent. EVM's at least preclude that possibility.

<comment><USER4> No, they don't. The clip-on attack can electronically stuff the EVM by rewriting the internal EEPROM, bypassing the EVMs' rate-limiting feature.

</comment></comment></comment><comment><USER5> Some ideas on how technology can be used to enhance the security and accuracy of elections:

[http://blog.reinventdemocracy.org/2004/10/about- electronic-v...](http://blog.reinventdemocracy.org/2004/10/about-electronic- voting.html)

</comment><comment><USER6> Rop Gonggrijp: "We also made it lie about election results"

[http://www.nettime.org/Lists- Archives/nettime-l-0802/msg0002...](http://www.nettime.org/Lists- Archives/nettime-l-0802/msg00027.html)

</comment><comment><USER3> "Such machines have already been abandoned in Ireland, The Netherlands, Germany, Florida and many other places. India should follow suit,".

Interesting. Was this known pre-election in 2009 ?

<comment><USER4> There are citations for each of those abandonments in the paper:

Ireland: announced April 2009

California: around 2007

Florida: also 2007ish

the Netherlands: 2008

Germany: March 2009

So, it looks like the answer to your question is "in some cases".</comment></comment>


Mark 1 FORTH Computer - <AUTHOR> http://www.holmea.demon.co.uk/Mk1/Architecture.htm

<comment><USER2> One of my graduation projects was a processor. Halfway through the design, I decided to ditch most of the registers and make it into a mostly stack-based machine. Since it was never built (the project was to _design_ a processor), I imagine it was very far from buildable. It would probably be expensive for the late 80's too - the printed OrCAD files occupied an area larger than my room and chip count was a couple hundred ICs.

</comment><comment><USER3> Killer! Does anyone know good (free) software to build a computer (simulation), to test a design? Did you utilize any software in your specs?

<comment><USER4> There's a lot of CPUs around in VHDL or Verilog, e.g.

* <http://opensource.zylin.com/zpu.htm>

* <http://www.altera.com/devices/processor/nios2/ni2-index.html>

You could use ghdl , <http://ghdl.free.fr/>, and supporting tools for simulation. Most FPGA vendors have a free version of their tools as well.

</comment></comment><comment><USER5> Apart from being a neat project, this is a good demonstration of how far we have come since TTL. Today you can buy a ten pack of 144 forth computers on a single chip (= 1440 CPUs) for USD200 [1]. Each asynchronous CPU has a claimed instruction cycle of ~1.8ns, giving each array of 144 CPUs a peak of 96 billion operations per second with 650mW dissipated.

I don't write this to belittle the Mark 1. I just love the juxtaposition of old and new.

[1] <http://www.greenarraychips.com/home/products/index.html>

<comment><USER6> It's a bit of an unfair comparison. The Mark 1 has something like 200 times more RAM per CPU.

<comment><USER6> That wasn't a joke.</comment></comment></comment>


Ask HN: Is it safe to perform credit card payments over TOR? - <AUTHOR>

Curious to know if it is safe to use credit card payments on e-commerce websites while connecting through TOr.Is it possible for the transactions to get flagged if the payment gateway detects them to be coming through Tor? Is there anything else that I need to worry about? <comment><USER2> It sort of defeats the purpose does it not? You're using an anonymity service but a card that is tied to you, I assume?

Edit: But to answer your question it is entirely up to the service provider whether or not they will flag the Tor connection and block you. Personally, I wouldn't even log into any internet accounts I've created outside of Tor while using it.

<comment><AUTHOR> The reason I am using Tor in this case is not for anonymity. I am using it to circumvent IP filtering by the said website.

<comment><USER2> You _should_ be fine then unless the provider has also blocked the exit node(s) you happen to hit.</comment></comment></comment>


400 vs. 422 response to POST of data - <AUTHOR> https://stackoverflow.com/questions/16133923/400-vs-422-response-to-post-of-data <comment><AUTHOR> I was overwhelm by the answer and had to share it. Sometimes the depth of discussions/answers on stackoverflow baffles me.</comment>


Announcing ctr.run: on-demand Docker builds - <AUTHOR> https://medium.com/scopedev/announcing-ctr-run-710d4c881ccf <comment><USER2> This is pretty neat!

However, I suppose things like watchtower[1] or ourosboros[2] will not work with this since images are built on request..

I'd love to use something like this for some sort of simple continuous deployment from Github. Any ideas?

[1] [https://github.com/containrrr/watchtower](https://github.com/containrrr/watchtower)

[2] [https://github.com/pyouroboros/ouroboros](https://github.com/pyouroboros/ouroboros)

</comment><comment><USER3> pretty cool! Is there support for private github repositories in the roadmap? thanks!

<comment><USER4> Glad you like it! There is already support for that. If you log into [https://ctr.run](https://ctr.run) with your GitHub account, you'll get a docker username and password that you can use to `docker login ctr.run`, and will allow you to `docker pull` your private repos.</comment></comment>


Supercompilation for Haskell can make it as fast as C - <AUTHOR> http://community.haskell.org/~ndm/downloads/slides-supercompilation_for_haskell-03_mar_2009.pdf

<comment><USER2> That's quite old, but interesting. I should have asked at the International Conference on Functional Programming last week, what became out of the Supercompilation idea for Haskell. It was not mentioned, though.

<comment><USER3> IIRC from the "Binary Translation Using Peephole Superoptimizers" presentation from OSDI 2008 (Google found a summary at <http://eurosys.org/blog/?p=109>), supercompilation is a brute force approach. Making it perform is, no doubt, challenging.

</comment></comment><comment><USER4> Can anyone explain the notation he uses for the termination check?</comment>


Parallelism /= Concurrency - <AUTHOR> http://ghcmutterings.wordpress.com/2009/10/06/parallelism-concurrency/

<comment><USER3> This article has a few flaws.

First, I disagree with the definition of parallelism. So the whole argument becomes moot to begin with.

Second, the author conveniently ignores that languages with side-effects can also be automatically parallelized by their compiler, which achieves the same effect as the parallelism described for functional languages. Which makes the point of the article moot again.

In conclusion (to me at least), this article adds to the confusion rather than offer the clarity it was aiming for.

<comment><USER4> You may "disagree" with this definition, but it's one that is commonly used by computer scientists. So it's a definition that is useful to know if you plan on doing or studying any research in this field. For example, see section 4.3 of this paper by Peter van Roy (author of the well-known _Concepts, Techniques, and Models of Computer Programming_ ):

<http://lambda-the-ultimate.org/node/3465>

Here's van Roy's definition:

 _"Concurrency should not be confused with parallelism. Concurrency is a language concept and parallelism is a hardware concept. Two parts are parallel if they execute simultaneously on multiple processors. Concurrency and parallelism are orthogonal: it is possible to run concurrent programs on a single processor (using preemptive scheduling and time slices) and to run sequential programs on multiple processors (by parallelizing the calculations)."_

And no, languages with side-effects cannot be automatically parallelized without changing the semantics and introducing observable nondeterminism - <USER2> nearly to the same extent as pure languages. The examples I've seen essentially work for side-effect-free subsets, which kind of misses the point. Your C compiler may be able to vectorize a loop of arithmetic operations, but as soon as your code includes an external function call the compiler has know way of knowing whether that function performs I/O or modifies global variables, so it cannot safely make parallel calls to that function.

<comment><USER3> _languages with side-effects cannot be automatically parallelized without changing the semantics and introducing observable nondeterminism_

Considering I spent years working on automatic parallelizing compilers for Fortran and C++, I'd say it is possible. I don't know why you consider the heavily computational kernels of C programs less interesting just because they don't have side effects or make IO calls.

For instance I worked on some algorithms to parallelize linked-list traversals, something that you would normally think is by definition serial.

<comment><USER5> Could you share the algorithm (or a link)? I'm very interested.

<comment><USER6> [http://software.intel.com/en-us/blogs/2007/12/20/linked- list...](http://software.intel.com/en-us/blogs/2007/12/20/linked-lists- incompatible-with-parallel-programming/)

"Traversing a linked list is inherently serial. [Theorists will point out that traversal can be done in parallel if you have a processor per node in the list. Feel free to buy that many Intel processors -- I own Intel stock.]"

One possible implementation would be to use a skip list where you have each core search each level.</comment></comment></comment></comment></comment>


Great jquery tutorial - <AUTHOR> http://jqfundamentals.com/book/index.html

<comment><USER2> Rebecca also teaches the jQuery Fundamentals course on CodeLesson: [http://codelesson.com/courses/view/web-development-with- jque...](http://codelesson.com/courses/view/web-development-with-jquery).

I don't have that much experience with CodeLesson, though, so it would probably be best to hear what others have taken away from using the service.

</comment><comment><USER3> Its a great resource, I am looking forward to see if Rebecca creates some Dojo (or even better a framework agnostic) learning materials.

It's great to see someone pushing us beyond the jQuery omnipresence.

Her blog [1] is full of good screencast and the last entry about Modern JS is very valuable for the community

[1] <http://blog.rebeccamurphey.com/>

<comment><USER4> There are of course lots and lots of JavaScript learning materials both in print and on the web. I assume that's what you mean by "framework agnostic". And of course the better you know JavaScript the better you'll be able to use jQuery, or any of the other frameworks.

That said, framework specific tutorials are likely to be far more useful to the casual or beginner developer. In the "real world", while you can do everything without a client-side framework, it's a lot of effort (and ultimately means you're creating a new framework.) All of the browser incompatibilities hidden away by frameworks like jQuery or Dojo would have to be re-invented.

You can write windows programs in assembler, but frankly why would you?

In that light tutorials based on specific frameworks, while appealing to fewer people, is ultimately more useful to the people who do work through it. jQuery (and DoJo et al) are popular precisely because it lets you build better, more reliable, and more cross-browser-compatible web sites.

Rebecca is obviously a talented developer, with a strong bent towards sharing what she has learnt so kudo's to her - may she do much more, regardless of the framework she's currently using.

</comment></comment><comment><USER5> It's worth noting for anyone new finding this that she is discontinuing maintainership of this and handing it over to the jQuery project.

Full details here: [http://blog.rebeccamurphey.com/the-future-of-jquery- fundamen...](http://blog.rebeccamurphey.com/the-future-of-jquery-fundamentals- and-a-confe)

</comment><comment> wh-uws I like that it starts with a general javascript overview first.

This a great js beginner's guide.

</comment><comment><USER6> Just what I've been looking for, a no fuss explanation of the basics and beyond. cheers.

</comment><comment><USER7> After using Mootools for a while, I was once more comparing it to Jquery, and was pretty lost trying to find out how to do date parsing and number formatting with the latter.

A search returns loads of plugins with no documentation, you don't know which one satisfies your requirements _and_ is mantained.

In Mootools, its intuitive to find those at <http://mootools.net/docs/more/Types/Date> and <http://mootools.net/docs/more/Types/Number.Format>, and you know they are good to use because they are official.

What is the usual approach Jquery developers take when they need something like this?

<comment> brown9-2 I don't think the core of jQuery is really intended to provide anything in this area at all. I think the usual approach would be to use whatever you'd be using without jQuery.

</comment></comment><comment><USER8> Awesome. With JQuery becoming the default in Rails 3.1, I'm definitely going to have to be reading this.

</comment><comment><USER9> Really nice resource. A neat guide that I'm going to handle to my java partners.

</comment><comment><USER10> It would be nice to read this on my Kindle.</comment>


Shared Hosting is Doomed (and I have the graphs to prove it) - <AUTHOR> http://clubtroppo.com.au/2008/07/10/shared-hosting-is-doomed-and-i-have-the-graphs-to-prove-it/ I've been thinking about the economics of hosting for a little while. Here are my reckonings. <comment><USER2> As someone running a VPS host company, I disagree with the article.

It cost me far more administrative overhead than to run a shared hosting arrangement.

Firstly, although the onus is the customer to be administrator, they need plenty of help and hand-holding. Many times they are happy to pay for this help - but now we are looking at a different market completely. (The smart VPS hosters are using forums and wikis to let the customers help each other out.)

Secondly, VPS customers need far more disk space, RAM, and CPU power than shared hosting. The more infrastructure you have to maintain, the higher the complexity and administrative burden. VPS customers usually demand higher availability too.

<comment><AUTHOR> My point is not about the current market. It's about how trends in hardware and wages mean VPSes could eventually come on top.

I've had comments from other hosts almost the opposite of yours :)

</comment></comment><comment><USER3> "About the charts: All charts in this post are illustrative, not data-driven."

<comment><AUTHOR> I'd be happy to see data if anyone has any. But the whole piece is built on ratios and trends more than any particular datum.

<comment><USER4> What'd you make them with, out of curiosity?

<comment><AUTHOR> OmniGraffle for the line charts and Numbers for the pie charts.

I've learnt through experience that people take you more seriously if you have pretty charts. Even nerds who should know better :)

<comment><USER4> Ah...Mac. Damn, I've been looking for something on Linux to make graphs like that... simple "economics style" (no actual data;-) ones with basic curves and labels.

<comment><AUTHOR> Yeah, wish I could help. But Mac == pretty graphics _is_ a cliche for a reason.

</comment></comment></comment></comment></comment></comment><comment><USER5> One thing you are forgetting is that software is also getting more complicated. Meaning you need a faster machine to run it.

If software needs are increasing at about the same rate as the hardware (and I think they are), then you are wrong.

<comment><AUTHOR> What Intel giveth, Microsoft taketh away?

I'm not so sure. It's not as though Apache has gotten that much bigger. What's changed is the patterns of architecture; people getting lazy and then being stomped by traffic.

But you always have a kernel. You always have a web server. That part is progressively reduced by hardware advances.

<comment><USER5> Apache can get bigger though. Right now it runs in threads, and in-process php parser (for example). Why? Because it's too slow otherwise.

But get a faster machine, and people will get lazy. It's hard to code apache like that - much easier to have one process per request, and use one-run cgi scripts. Once that's fast enough, that's what people will code for.

This is just an example, but I still think applications will manage to consume any extra CPU that comes their way.

Example 2: Disk capacity, three years ago you would never have thought of a reason you'd need much storage, and now we have videos.

The faster the desktops get, the bigger (and higher quality) the videos will get. That won't stop till a single 2 minute video will take 250MB. (At that point we'll need bigger monitors.)

Example 3: Memory. One reason to use SQL cursors is so that you don't need to store the entire result set in memory at once. And used to be everyone programmed that way. But not anymore - memory is plentiful enough that queries are typically stored in their entirety in memory, and then walked through. They still use cursors to do that, but give the languages time to mature and you'll find it'll turn into random access arrays.

It's the nature of people - they won't spend time to optimize something unless they need to.

All your arguments assume usage (CPU, disk, bandwidth, memory), holds steady. Now assume they won't, assume they'll go up, and re-run your arguments.

<comment><AUTHOR> Good point and well put. I'll give it some more thought, but my initial hunch is that the ratios of overhead will still converge, if for no other reason that software which doesn't expand as quickly (the kernel) gets factored out by the hardware-driven convergence on zero.

</comment></comment></comment></comment><comment><USER6> ... Graphs you pulled out of your ass.

<comment><USER7> There is no requirement in the Graphing Bylaws that states graphs must come from real data. They are just another way of graphically displaying what he believes to be true. Feel free to argue with his beliefs.

Blogs are about conveying opinions. I don't see the problem with using a graph to convey an opinion graphically.

<comment><USER6> When someone claims they have the graphs to prove something, it is implied that they are backed up by something other than conjecture.

<comment><USER7> I'm sorry but that's nonsense. People draw graphs all the times to prove things w/o using data. Especially when trends are what is important to convey in a graphical sense.

It's not any different then supply/demand curves for different types of goods in economics. The graphs represent a concise way of stating assumptions upon which the argument is based.</comment></comment></comment></comment>


'Squirrel Facebook' shows three degrees of separation - <AUTHOR> http://www.newscientist.com/article/dn13495-squirrel-facebook-shows-three-degrees-of-separation.html

<comment><USER2> So, it's a real-life simulation of the digital approximation of a real-life phenomenon?</comment>


A Brief History of 'Civilization' (the Game) - <AUTHOR> http://www.theatlantic.com/technology/archive/2011/07/a-brief-history-of-civilization-the-game/241762/ <comment><USER2> Excited that this has finally moved to Facebook. Next: Sims.</comment>


The ultimate reading list for technology professionals - <AUTHOR> http://talll.com <comment><USER2> I think this is neat, are you the creator?</comment>


Clojure Macro Design - by example - <AUTHOR> http://groups.google.com/group/clojure/msg/636103f373fb0ee3

<comment><AUTHOR> The full thread, if you prefer: [http://groups.google.com/group/clojure/browse_thread/thread/...](http://groups.google.com/group/clojure/browse_thread/thread/5ff31c9d7fc58b0b/636103f373fb0ee3?#636103f373fb0ee3)</comment>


A Look Inside Our 210TB 2012 Web Corpus - <AUTHOR> http://commoncrawl.org/a-look-inside-common-crawls-210tb-2012-web-corpus/

<comment><USER2> Check out the Common Crawl contest winning projects from the linked page - some very good work, and a good source of ideas and techniques: [http://commoncrawl.org/the-winners-of-the-norvig-web-data- sc...](http://commoncrawl.org/the-winners-of-the-norvig-web-data-science- award/)

Some good stuff!

<comment><USER3> I loved the inter-lingual web page linkage visualization project. Any idea why Traitor won the contest? It seems very similar to regular "create inverted index with map reduce" problem, or am I missing something?

<comment><USER2> Perhaps Traitor won because it is such a good example of using Map Reduce over the Common Crawl data? I agree that inter-lingual was a cool project.

</comment></comment></comment><comment><USER4> Link to the PDF mentioned: [https://docs.google.com/file/d/1_9698uglerxB9nAglvaHkEgU- iZN...](https://docs.google.com/file/d/1_9698uglerxB9nAglvaHkEgU- iZNm1TvVGuCW7245-WGvZq47teNpb_uL5N9/edit)

</comment><comment><USER5> Common Crawl is awesome. I wonder how complex it would be to run a Google-like frontend on top of it, and how good the results would be after a couple days of hacking...

<comment><USER6> Very and probably not very good (Compare Gigablast to Google as an example of why its hard). Not to take anything away from Common Crawl but crawling is often one of the easier things to build when creating a search engine. A crawler can be as simple as

for(listofurls) { geturl; add urls to listofurls; }

Doing it on a large scale over and over is a harder problem (which common crawl does for you) but its not too difficult until you hit scale or want realtime crawling.

Building an index on 210 TB of data however... Assuming you use Sphinx/Solr/Gigablast you are going to need about 50 machines to deal with this amount of data with any sort of redundancy. That's just to hold a basic index which is not including "pagerank" or anything (Gigablast is a web engine so it might have that in there not sure). You aren't factoring in adding rankers to make it a webs search engine, spam/porn detection and all of the other stuff that goes with it. Then you get into serving results. Unless your indexes are in RAM you are going to have a pretty slow search engine. So add a lot more machines to hold the index for common terms in memory.

If someone is keen to do this however here are a list of articles/blogs which should get you started (wrote this originally as a HN comment which got a lot of attention so made it into a blog post) [http://www.boyter.org/2013/01/want- to-write-a-search-engine-...](http://www.boyter.org/2013/01/want-to-write-a- search-engine-have-some-links/)

<comment><USER7> Actually, not so simple. Sure, you can do simple crawling easily; but the hard part is to extract meaningful data from it. It's very easy to loop on many sites for instance. Protocol violations abound - some sites serve binaries as text/html, for instance.

What I heard about a smaller search engine was that web crawling is usually augmented with some manually added rules for various sites to prevent spoiling the database. Not a trivial task at all.

Doing queries is IMHO algorithmically much better understood, because it's a constrained problem. But getting information extracted out from the real world, with all the PHP and HTML "hackers", not so easy.

<comment><USER8> Which is one of the main reasons Google has no serious competition in search except possibly in China.

It is also why the rate of innovation in search isn't moving as fast as it can be moving.

If Google opened up (unlimited) web API access to their search interface, to say a large city for a year or two people would really get a taste of what innovation in search looked like.

And of course it would be in Google's interest cause search as a platform or marketplace is where the future of Google really lies. All the other advertising empire defending distractions like Android, Chrome and YouTube are really sideshows.

</comment></comment></comment></comment><comment><USER9> Is there something, other than funding, preventing a more regular, open- sourced crawl of the web?

<comment><AUTHOR> Limited resources are the only reason. We are working on a subset crawl of ~3 million pages that will be published weekly starting two weeks from now. But doing the full crawl takes a lot of time, effort and money.

<comment><USER6> Is that really worth it though? I can crawl 3 million pages in less than 24 hours without any real effort on my part. Or are you going to provide 3 million of the most useful pages? Depth or breadth first crawl?

<comment><AUTHOR> We do think it is worth it to avoid duplicative efforts.

Suppose you crawl 3 million pages and you pay for the compute and storage costs. Then the next person who wants crawl data goes through the same effort and pays the same costs. Doesn't it make much more sense to have a common pool of open data that everyone can use? Even if the effort and costs are low, they are not zero.

For the smaller frequent crawl, we are working with Mozilla and we are will do the top pages (top according to Alexa).

<comment><USER6> Fair point and makes sense. If you publish the rank along with the data itself that would be very useful. Perhaps having a few sets of data? 3 million top pages, 3 million deep pages etc...

Personally I would like to see around 20-100 million pages or whatever is about 500-1000GB. That's enough data to work with on a local machine and serve up some meaningful results assuming you want to build a search engine or just do some deep analysis of the web.

</comment></comment></comment></comment></comment><comment><USER10> What do you mean by "open"? Can the data be used for startups and other commercial purposes?

<comment><USER4> Yes! Startups/commercial companies/etc can all use the data for free. The terms of use basically say, don't do anything illegal with it and a few other things, but it shouldn't affect the vast majority of uses.

Actually, tomorrow a video on a startup that uses Common Crawl data is getting posted.

</comment></comment><comment><USER11> How does one get set up to access the s3:// links their blog posts reference? I do realize these point to Amazon S3 buckets, but how to get at them?

<comment><USER12> Just replace 's3://' with '[https://s3.amazonaws.com/'](https://s3.amazonaws.com/'). You can use this link [1], but it looks like most of them are returning "Access Denied", so you would likely need to login with your AWS username/password to access them.

[1] [https://s3.amazonaws.com/aws- publicdatasets/](https://s3.amazonaws.com/aws-publicdatasets/)

</comment></comment><comment><USER13> The tables of TLD frequency on page 4 of the stats report are interesting, though it causes some confusion to me about how the crawler actually crawls and when it stops: [https://docs.google.com/file/d/1_9698uglerxB9nAglvaHkEgU- iZN...](https://docs.google.com/file/d/1_9698uglerxB9nAglvaHkEgU- iZNm1TvVGuCW7245-WGvZq47teNpb_uL5N9/view?sle=true)

Table 2a purports to show the frequency of SLDs:

1 youtube.com 95,866,041 0.0250

2 blogspot.com 45,738,134 0.0119

3 tumblr.com 30,135,714 0.0079

4 flickr.com 9,942,237 0.0026

5 amazon.com 6,470,283 0.0017

6 google.com 2,782,762 0.0007

7 thefreedictionary.com 2,183,753 0.0006

8 tripod.com 1,874,452 0.0005

9 hotels.com 1,733,778 0.0005

10 flightaware.com 1,280,875 0.0003

If I'm reading this correctly, it seems that the crawler managed to hit up a huge number of youtube video pages...but only a fraction of them. I couldn't find a total number of Youtube video count, but Youtube's own stats page says 200 million videos alone have been tagged with Content-ID (identified as belonging to movie/tv studios).

In any case, it's surprising to not see Wikipedia on there. English wikipedia has 4+ million articles, so it should be ahead of thefreedictionary.com

<comment><USER3> Good crawlers should typically avoid wikipedia links, to avoid the number of HTTP requests on wiki servers (and keep their costs down), esp. because they make available whole data dumps for download through a separate cheaper channel: [http://en.wikipedia.org/wiki/Wikipedia:Database_download](http://en.wikipedia.org/wiki/Wikipedia:Database_download)

<comment><USER14> Yes and no.

Some crawlers are most interested in freshest versions of the most inlinked articles, or in the exact HTML presentation at Wikipedia.

The monthly full raw wikitext dumps don't provide that.

And, Wikipedia's serving plant is pretty efficient, with bandwidth only being a small portion of their costs. They can afford some crawling... and correspondingly, their /robots.txt is pretty open.

Good crawlers seeking just the bulk text shouldn't try to grab the whole thing as fast as possible via the standard web URLs... but other good crawlers may want or need to visit discovered Wikipedia links, and doing so at a measured pace should be OK.

<comment><USER15> blekko attempted to implement crawling a local copy, and it was a PITA. We'd rather crawl the real thing with a crawl-delay of 1. Best would be if the Wikimedia Foundation made a .html dump available.</comment></comment></comment></comment>


The Log-Structured Merge-Tree (LSM-Tree) (1996) [pdf] - <AUTHOR> http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.44.2782&rep=rep1&type=pdf <comment><USER2> Howard Chu of LMDB fame really bags on LSM:

[https://twitter.com/hyc_symas/status/650799297143836672](https://twitter.com/hyc_symas/status/650799297143836672)

[https://twitter.com/hyc_symas/status/657399873562656768](https://twitter.com/hyc_symas/status/657399873562656768)

<comment><USER3> I implemented a variant of LSM in C# (BerkeleyDB feature/bug compatible, more or less) for our internal DB server (OO/relational DB).

Yes, it is true that LSM can incur a O(logN) read amplification, it was clearly shown in our bare storage tests. But! The full table scan read in full server has 3% (three percent) difference between different storages (LSM is 3% slower). And, as I haven't used BTrees for LSM levels, but some other superficially similar structures with different construction (and no modification - MVCC), the read of complex structures from our DB (a PCB project - you can guess complexity) netted in clear benefit - that read operation was from 16 (sixteen) to 19 (nineteen) percents faster compared to BerkeleyDB. Given that BerkeleyDB storage backend has not occupied more than 20% of server runtime in our profiles, it amounts to 5 to 20 times speedup in read operations.

This can be explained like using the following argument: because Btree gets fragmented when you randomly insert things - pages get scattered all over the place. The rebuild phase I employed made pages much less scattered (actually, there cannot be more than some fixed number (8 in our case) different contiguous runs of pages to hold all data). This amounted to radical difference in read performance.

Take a look: [https://cs.brown.edu/research/pubs/theses/masters/2010/newto...](https://cs.brown.edu/research/pubs/theses/masters/2010/newton.pdf)

The paper above discusses Btree fragmentation and proposes something like small LSM structure for indices.

<comment><USER4> Reads in LMDB are orders of magnitude faster than BerkeleyDB. Not just a tiny 16-19%. Both are B+trees. Using the right algorithm is important, but using it _well_ matters too.

[http://symas.com/mdb/#bench](http://symas.com/mdb/#bench)

Wy original comment was about write amplification, not read amplification. It's already a given that LSMs are slow for reads. LSMs are claimed to be write optimized and yet it's easy to demonstrate that their write amplification is prohibitively bad. They also are inherently unreliable, making them a choice suitable only for idiots.

[https://www.usenix.org/conference/osdi14/technical- sessions/...](https://www.usenix.org/conference/osdi14/technical- sessions/presentation/pillai)

<comment><USER3> You answer not my analysis, but your idea of my analysis. The decrease of reading time for complex structure was 16%-19% for A WHOLE SERVER OPERATION, where BDB never amounted more than 20% in profile.

So I achieved speedup of 5-20 times over BDB (albeit not quite recent one, I admit).

Scale-free 1M nodes graph write does not even ends with BDB in reasonable time (and produces HUGE log). The difference between BDB and my LSM implementation for smaller graph size writes was in order of 200-300 times, LSM is faster.

Finally, I admit your code is here to test and use, mine's closed source and there are only my words. So I have to shut myself up and try to recreate that wonderful thing for everyone to use.</comment></comment></comment></comment>


Bill Gates Says Apple Should Unlock San Bernardino Shooter's iPhone for FBI - <AUTHOR> http://www.macrumors.com/2016/02/23/bill-gates-apple-sides-fbi/ <comment><USER2> Gates does some great things but he's not thinking far enough into the future here.

If our law enforcement cannot understand that terrorists will simply switch to use another encryption tool, then we have a much bigger problem than unlocking a single iPhone. Our security force does not know how to keep us safe. I'd rather they figure out another way sooner than later.

<comment><USER3> Or Apple should not be able to compromise their own devices. As it should have been from the beginning.

<comment><USER2> This dialog should move us in that direction. More people are learning how their phone's security works and Apple will be pressured, hopefully, to live up to the public's expectation of privacy.

</comment></comment></comment><comment><USER4> "While Apple CEO Tim Cook has consistently argued that unlocking one device would set a dangerous precedent, Gates doesn't believe that it would. He argues that Apple has access to the information, but that they are declining to provide access to the information."

This sounds correct to me. Instead of the government being the gatekeeper (access by way of court orders), Apple is arguing Apple should be. Why? Should we trust Apple won't abuse their power when their own interests are at stake?

Remember Terry Childs? Do you mean to tell me if Apple had an an ex-employee with the keys to their kingdom on his/her iPhone, Apple would just write-off 700 billion dollars? They'd crack that phone without thinking twice about it.

</comment><comment><USER5> This is so ignorant, the worst part is "there would have to be rules in place to limit how they can access that information."

How did those rules work out for telecom/internet traffic data... The government can now access anyones data, often even without a judge ruling whether it is necessary.

</comment><comment><USER6> _Gates went on to say that there were benefits to governments having some access to information, but that there would have to be rules in place to limit how they can access that information. He says that he hopes people will "have that debate so that safeguards are built and so people do not opt out -- and this will be in country by country -- [to say] it is better that the government does not have access to any information."_

Is this not the same thing that Apple is arguing for? Except they are looking for the conversation to happen before the requested action?

<comment><USER2> I don't know, the way he talks is a little confusing. On another site it quotes him saying,

 _" It is no different than [the question of] should anybody ever have been able to tell the phone company to get information, should anybody be able to get at bank records. Let's say the bank had tied a ribbon round the disk drive and said 'don't make me cut this ribbon because you'll make me cut it many times'," Gates stressed._ [1]

I think that means Gates feels this is only a single case situation, and he does not believe Cook's assertion that Comey is trying to set a precedent.

Unfortunately the full interview is behind the Financial Times paywall.

[1] [http://sputniknews.com/us/20160223/1035197491/bill-gates- sup...](http://sputniknews.com/us/20160223/1035197491/bill-gates-supports-san- bernardino-gunman-phone-fbi-unlock.html)

<comment><USER7> Unfortunately it is completely different, by cutting this ribbon you allow potentially anyone access to the banks disk drive - this aspect of back doors has been discussed ad nauseam. Its sad to see someone of such public stature deceive the uninformed masses with examples like this.</comment></comment></comment>


Be warned of transparent affiliate links. Summary: They highjack on_clicks - <AUTHOR>

In an earlier story on how to "fly for free" a commenter was downvoted for explaining the entry contained affiliate links.
http://news.ycombinator.com/item?id=1428051
Most people who checked looked at the hover and the source -- but likely did not click the link.
The blog/whatever has direct links to the product page, but skimlinks.com highjacks the onClick event and redirected to the affiliate site.
Just FYI <comment><USER2> The real story: Wordpress makes its users look dishonest.

The author upgraded to paid WP account, to remove the affiliate code.</comment>


Show HN: GUN Starter App Boilerplate – An Easy Open Source Firebase Replacement - <AUTHOR> https://github.com/gundb/gun-starter-app <comment><USER2> I'd never heard of gun before, but the project looks interesting. I see there's a few videos in the main repo's readme, so I'll be checking em out.

Any comments on how it compares to something like PouchDB [0]?

What are examples of good use-cases where you'd want to reach for something like gun?

Although I've looked into stuff like CouchDB and NoSQL databases, I can never intuitively wrap my head around it. For most problems that cross my mind, my first response is usually "Postgres sounds perfect for this". Does anyone have suggestions for resources that discuss this in a way that's approachable?

While looking through their docs and wiki, one of my questions was: how do you protect yourself from invalid data and all the related "baddies"? They have a wiki entry on the subject of authn and authz [1], but unfortunately it doesn't look like they included a complete example. In another wiki entry [2] they mention an authorization filter, but don't go into more detail.

[0] [https://pouchdb.com/](https://pouchdb.com/)

[1] [https://github.com/amark/gun/wiki/Security%2C-Authentication...](https://github.com/amark/gun/wiki/Security%2C-Authentication%2C-Authorization)

[2] [https://github.com/amark/gun/wiki/Mesh-Network-Messaging- Alg...](https://github.com/amark/gun/wiki/Mesh-Network-Messaging-Algorithm)

<comment><AUTHOR> Thanks for the comment! I'll start with what you should not use gun for:

It is a strong eventually consistent system (AP if you are familiar with the CAP Theorem) which means it is a bad choice for banking/accounting. You should use a strongly consistent system like RethinkDB or Postgres instead.

Some things that people are using gun for are:

\- Distributed Machine Learning ( [http://myrighttocode.org/blog/artificial%20intelligence/part...](http://myrighttocode.org/blog/artificial%20intelligence/particle%20swarm/genetic%20algorithm/collective%20knowledge/machine%20learning/gun- db-artificial-knowledge-sharing) )

\- Multiplayer VR games in the browser with WebGL.

\- Realtime IoT data viz with webcomponents. ( [https://github.com/Stefdv/gun- ui-lcd](https://github.com/Stefdv/gun-ui-lcd) )

\- Peer-to-Peer electron/react-native fully encrypted social networks.

How it compares to PouchDB? PouchDB is great! They pioneered offline-first before people had even termed the phrase, very much were forward thinkers. The biggest difference is that Pouch/Couch is a document database while gun is a graph database which can support key/value, relational, document, circular references, or graph data structures. I haven't used Couch since 2011 though, so I can't speak to any of their more recent features, but their latest release looked really solid.

NoSQL was definitely a fad, so I don't blame you for not being able to wrap your head around it. We plan on introducing a SQL query extension for gun within the next 8 months. SQL is great, relations are great, and the NoSQL/document-only hype hurt the industry although it was based on some legitimate needs.

From my perspective there is no question that Postgres should be considered the best solution for Master-Slave query based databases. I do predict, obviously biased though, that the industry will slowly migrate towards Master- Master push based graph databases though. And my experience with gun, the VC funding I've raised, the pain points I've had and heard from others, and the traction we're getting is confirmation of that (or confirmation bias?).

Preventing invalid data from being saved is as simple as adding a schema ( [https://github.com/RangerMauve/gun- schema](https://github.com/RangerMauve/gun-schema) ). Preventing hackers is as not-simple as using real end-to-end cryptography, but we're making an explainer video series to try and help consolidate these ideas for people ( [http://gun.js.org/explainers/data/security.html](http://gun.js.org/explainers/data/security.html) ). Or you can opt to use gun in a traditional centralized server setup where all reads/writes are proxied by your app's routes, like you would normally do with any other database.

Anything else I can answer? Thanks for asking these questions!

<comment><USER3> I'm currently building a P2P web app/social network that ideally should run completely in the browser and haven't looked at Gun before.

Can Gun be used on top of IndexedDB?

You mentioned "Peer-to-Peer electron/react-native fully encrypted social networks". Can you point me to any repos?

Thanks!

<comment><AUTHOR> Awesome idea! What are you building it with, then?

Yes, IndexedDB has a Level down adapter which should work with GUN's Level up adapter: [https://github.com/PsychoLlama/gun- level](https://github.com/PsychoLlama/gun-level) (or however the naming works). I don't actually know how to do this though, so ping Jesse (psychollama) if you have any problems.

The best repo is a barebones P2P encrypted auth example using polymer (not electron or react native): [https://github.com/swifty/gun-p2p-auth](https://github.com/swifty/gun-p2p-auth) , git clone it, then open ./demo/standalone.html and try the login/register forms after you run a gun server (npm install gun, cd ./node_modules/gun , node examples/http.js 8081).

Let me know if this worked. If you got stuck on anything absolutely let me know so I can help. :)

<comment><USER3> Great, thanks!

Currently building the app on top of [http://ssbc.github.io/scuttlebot/](http://ssbc.github.io/scuttlebot/).

</comment></comment></comment></comment></comment><comment><USER4> First time hearing of Gun. Sounds very interesting! I'm a little confused about a few things though. Is Gun meant to run in the browser? If so how does it compare to PouchDB? And does syncing with peers just mean peer server nodes, or is there some WebRTC data channel stuff going on?

<comment><AUTHOR> Sorry that the docs aren't clear enough! We'll definitely try and get that fixed with this next version that is coming out.

It can run in both the browser and/or the server. Because WebRTC unfortunately requires a STUN/ICE or signaling server, you still have to run or use a community server. A gun server is nothing fancy though, it is just another peer that helps replicate/synchronize data between browser peers and other server peers. Full WebRTC support is planned as an extension but isn't finished yet: [https://github.com/PsychoLlama/gun- rtc](https://github.com/PsychoLlama/gun-rtc) .

See my other comment elsewhere in this thread about Pouch. Happy to answer any other questions you have! And please let us know what we can do to further clarify things in docs.

</comment></comment><comment><USER5> This seems very interesting, powerful and yet simple, congratulations! I've noticed in one of the samples how the data is stored in a single json file on the server, so I'm curious about how would this scale for very large databases: if I don't want to send the entire dataset to all clients, and send just parts of it for each user, while keeping everything else stored in a traditional SQL db, would that be possible? A real world application of this would be something like Trello, for example.

<comment><AUTHOR> Thanks for the compliments, that is very encouraging! And for the constructive questions.

You point out something very important - the json dump definitely is not scalable! That is why we warn people it should only be used for local development and testing, and never to run it in production (these warnings are littered through out the documentation). Your instinct is correct!

By default only a subset of the data is sent to clients - specifically, only the pieces of data that they are subscribed to. This is already built in so you don't have to worry about managing it yourself.

Using the Level storage adapter, you could plug into a SQL database. I don't recommend doing this (because you'll get consistency issues if you query SQL separately from gun) but it is possible - the one exception is using SQLite as a storage layer.

There is actually somebody building a P2P Trello app, I referenced his security/authorization gun framework in one of the other comments, if you are interested.

Hit me up with anything whenever. Thanks for being so constructive!

</comment></comment><comment><USER6> Is it an actual graph? Can I get all objects pointing to some other and vice- versa? Is that efficient? Does that mean making thousands of queries?

<comment><AUTHOR> If you don't index that query it won't be efficient, but you absolutely can do that! In fact there are awesome tagging extensions that people in the community have built ( [https://github.com/Stefdv/guntagger](https://github.com/Stefdv/guntagger) ) that easily lets you do stuff like that. These are efficient because they are (if you are familiar with Big O Notation) O(1) queries not dynamic (because they are indexed). So no, it would not take thousands of queries.

I feel like that doesn't really answer your question though? Want to give a more concrete example that I can expand on? Thanks for the question!

<comment><USER6> Actually, it has answered it. Thank you!

I want to build something with some simple graph things. I couldn't manage to do with Cayley and Gremlin I'll try now with Gun. I'll ask on Gitter when I have something more concrete to work with.

<comment><AUTHOR> That is sad! Graphs are actually super easy. Here is a sweet&short guide that introduces graphs to relational/NoSQL people: [https://github.com/amark/gun/wiki/graphs](https://github.com/amark/gun/wiki/graphs) . It even has a runnable JSbin example at the bottom so you can try it out in the browser without installing anything!

</comment></comment></comment></comment><comment><USER7> Wow, this looks really promising. I went with Firebase when it became too obnoxious to manage websocket concurrency. I didn't even know about gun.

I appreciate that the starter app doesn't try to make decisions for me about what I'm using clientside. Can you think of any reasons it wouldn't play nice with react-native?

<comment><AUTHOR> Thanks! It works with react-native but there is currently a bug in a react- native module loader (according to: [https://github.com/amark/gun/issues/236#issuecomment-2555553...](https://github.com/amark/gun/issues/236#issuecomment-255555300) ) that is causing some problems. But I'm sure this will get sorted out pretty soon.

</comment></comment><comment><USER8> Been keeping an eye on gun since the early demos more than a year ago. Nice work, Mark. :)

<comment><USER9> As have I. Keep it coming. :)</comment></comment>


Facebook Reports First Quarter 2014 Results - <AUTHOR> http://investor.fb.com/releasedetail.cfm?ReleaseID=842071 <comment><USER2>
        Mobile MAUs were 1.01 billion as of March 31, 2014,
        an increase of 34% year-over-year.

That's crazy. 1/7th of the world's population logs in to Facebook from a mobile device at least once a month.

(edit: as it turns out, these numbers are from the 1st quarter. Q2's show 1.07 billion mobile MAU: [http://investor.fb.com/releasedetail.cfm?ReleaseID=861599](http://investor.fb.com/releasedetail.cfm?ReleaseID=861599))

<comment><USER3> And this is the challenge for Google. If mobile users reliably go to Facebook daily, that is where people will want to advertise to them, if they are spending all of their time on their mobile rather than their laptop or desktop, then mobile advertising will be more important than advertising in the laptop/desktop space.

Interesting times.

<comment><USER4> In fairness Google announced the same figure for Android recently, so they're not completely losing control over mobile at the moment.

<comment><USER3> I agree with you, the insight is that the most common thing people do on laptops or desktops is 'search for something' if the most common thing people do on mobile is 'check my facebook' then that puts Facebook on mobile in the seat where Google sits on computers. I'm bummed I sold my FB stock when it hit 40.

</comment></comment></comment></comment><comment><USER5> First of all, Facebook reported Q2 2014 results today, not first quarter. The OP is months old.

Secondly, what's with this new HN trend of people submitting quarterly financial results of publicly traded tech companies. It is usually not newsworthy outside of financial media.

<comment><USER6> Here is the link to Q2: [http://investor.fb.com/releasedetail.cfm?ReleaseID=861599](http://investor.fb.com/releasedetail.cfm?ReleaseID=861599)

</comment></comment><comment><USER7> Either I'm interpreting this too simplistically or they're doing a great deal better than I expected.

<comment><USER8> That's because HN lives in an echo chamber of FB hate while 90%(close to a billion people) of FB users actually find it as an indispensably useful tool.

<comment><USER9> "indispensably useful tool" is way too strong. They find it a service that is hard, or at least usually undesirable, to do without.

<comment><USER8> How do you generalize more than a billion people with "they"?

I think we're reaching the limits of the English language with that one. I'd say it's hard for an outsider to determine how the majority of a billion people view a particular product.

<comment><USER9> I'm sorry, but you generalized about the same billion people and even offered a completely imaginary 90% statistic to boot. And I'm not an outsider, not to the industry, not to web services, not to social networks, not to FB itself. I've been a user and an employee and a consultant for all of those things.

</comment></comment></comment></comment></comment><comment><USER2> dang - This news is 3 months old. Today's announcement was submitted here: [https://news.ycombinator.com/item?id=8076706](https://news.ycombinator.com/item?id=8076706)

<comment><USER10> Right. We'll just leave the other thread as is, since this one has been flagged by users.

</comment></comment><comment><USER11> That's alot of zeroes.</comment>