What the Hell Was Modernism? - <AUTHOR> https://www.vulture.com/2019/10/jerry-saltz-new-moma-modernism.html <comment><USER2> What a great read. I think that we see the same thing in poetry as well -- the inaccessible modernist expiriments with form, while interesting to insiders, is at its conclusion an esoteric pursuit.

I think that the turn back toward classical forms, towards a broader audience, and largely the turn inward (the self as the primary concern of the work, rather than it's form) really is a wonderful new wave across many genres, and makes for an wonderful time to be a consumer of art.

<comment><USER3> I don't know if it's the same for everyone, but I know with age and I hope "maturity" I appreciate many more forms of art. Things I didn't have the life experience or emotional depth to grasp when I was younger can deeply impact me now. An example would be Mark Rothko's paintings. I would have said "pfft anyone can do that...just some stripes or blocks" when I was a kid, and probably did, but have recently rediscovered his work and absolutely love it. Same with a lot of poetry as you mentioned. I really regret not having more openness and ability to grasp these things before. I really wish I had more health and life stability, and the resultant time and means to explore and experience creative things.

<comment><USER4> I never really understood modern art until I a) saw it in person, and b) saw it in the context of its time.

I was at the Hermitage museum in St Petersburg. I'd done museum tour after museum tour in both Moscow and Petersburg. Nearly all of this art was classical/neo-classical or romantic, rococo, etc.

By the end of your 1000th neo-classical painting, you get exhausted of the sameness of the realistic style. The themes, colors, sensibilities all appear similar.

Then I walked into the modern and post-modern hall and there was a massive Matisse painting on the wall. The bright blue was such a revelation. You see a painting like that after 400 years worth of realistic painting style and it takes your breath away. It was particularly impactful when contrasted against the neoclassical architecture of the museum itself.

The worst way to appreciate modern and post modern art is on a computer screen. These things have to be experienced in person. For one, their sheer size can't be captured on screen. A 12' x 10' canvas has a visual impact that's not possible to replicate anywhere. Second, their experimental quality has to be contrasted against the dominant art forms of their time. Anyone can technically paint like Matisse. But they didn't.

<comment><USER5> I don't think the size of any painting can make it better. Especially if it's something a 2 year old can and will paint. As an artist myself, I've always disliked and never understood why people like modernist artworks. Picasso's best work was his early work, before he gave up on painting life. That some people think they get this crap artwork is just hilarious and just goes to show you can hock anything if you pretend it's high minded.

And your statement "Anyone can technically paint like Matisse. But they didn't." That's probably because noone wants to paint like a child and wants to be considered a good artist not a joke.

Believe me, in 1000 years no one will care about Modernist artwork.

<comment><USER6> What a sad and myopic take on art, especially coming from a self-proclaimed artist. Obviously you're entitled to your opinion, but why make such bitter sounding absolutist statements about what other people create or enjoy? There's enough negativity in this world already.

Additionally, the fact that you're judging the relative worth of a piece of art based on it lasting for 1000 years is pretty sad, in my opinion. What is wrong with art being created for a specific time and place? Life is ephemeral, and there is beauty in that.

<comment><USER5> You make very good points and I'd have to agree with you if this was anything other than "modern art".

Modern art is not art in the sense it's not a highly crafted work. It's minimum effort.

The time frame was given to acknowledge the fact that we think this is "art". In the future we will know this is junk and not art.

I really dislike most pop art, but at least it's art. A big yellow square canvas in no way should constitute artwork.

<comment><USER4> You're conflating craftsmanship with art.

There are literally factories in China where painters paint replicas of classic art works at scale. They paint hundreds, even thousands of such pieces every year.

They're undoubtedly very skilled painters. But would you call their work "art"?

How much time and effort something takes has no bearing on whether or not it is art. Something that takes 5 years to make isn't automatically better than something done in 5 minutes.

Painters like Picasso and Matisse were also classically trained and had all the skills to paint like the painters of old. They just chose not to.

<comment><USER5> I would call their work art. You don't call it art? Now you are being just like me.

Exactly my point about Picasso, his early work was awesome. What everyone likes from his is terrible.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> >And before you object that we've been living for 50 years in postmodernism, not modernism, the art that followed the titans of the early-20th century was defined and even named after what preceded it (daddy issues?).

Postmodernism isn't just "not modernism" or the art that happens after modernism. Postmodernism is art that only makes sense in the context of modernism. It involves pastiche, genre criticism and meta-analysis.

</comment><comment><USER8> > Third, modernism was built on the principle that formal experimentation is > the only thing that matters.

This is the most appealing thing about modernism to me — instead of continuing an _exploitation_ of techniques that had been perfected, modernism was an _exploration_ of what was possible — an attempted unbundling of the things that strike us about art like color, shape, texture, forms, frames, etc. The fatalism is a necessary consequence of this idea of taking some simple axioms and carrying them to their extremes.

<comment><USER9> For architecture, this exploration is fine but they mostly shouldn't have been allowed to use existing city centres as the playground for their explorations and in doing so ruin the social and architectural fabric that had been breathing life into these cities for generations and centuries.

Take your modernist glass-steel-concrete geometry art piece, build it in the perimeter of the city in a park, woods, or plains where nobody can see it unless they choose to travel and explicitly enjoy the sight, and leave the old streets and traditional houses in the city because they are there for a reason. The modernist architecture would have had a much better reputation had they just succumbed to their rightful position, and acknowledged that in their exploration they were still prototyping and far from having deliverables.

<comment><USER10> I'm not sure I agree that modern architecture ruined social and architectural fabric of cities. Holding up vernacular architecture as some sort of beacon because it's been in cities "for generations and centuries" is equivalent to not performing a change in say software, "because that's the we've always done it."

Besides a few notable examples of poor execution (20 Fenchurch Street in London, Richards Medical Research Laboratories off the top of my head) can you point to an instance where a piece of modern architecture was detrimental to the cityscape it inhabited?

<comment><USER11> You have drifted off-point here, which is the destruction of what is good for something mediocre or worse, as in the functionally and aesthetically disastrous destruction of Penn station in NYC (there are software analogies to be made here, if you think they are useful - e.g. Windows Vista.)

I think there is a lot of value in bold new design, and it is worth taking risks, but it encourages two sorts of copycats: the developer who wants to make a statement on the cheap, which allegedly gave us the back side of the New York By Gehry, and the second-rate architect who wants to express himself rather than serve the community, which results in a rash of undistinguished architectural misdemeanors, rather than high-profile cases.

Now that the high tide of dogmatic modernism seems to have passed, its excesses offers sites that can be redeveloped without losing anything of value.

</comment></comment></comment></comment><comment><USER12> Larry Wall (creator of Perl) has a really long (but fantastic) speech on modernism and post-modernism that I found helpful. It is transcribed somewhere and worth the read.

Edit:

[http://www.wall.org/~larry/pm.html](http://www.wall.org/~larry/pm.html)

</comment><comment><USER13> Alternatively, modernism represents where Romanticism led us. Forget austere and orderly Classicism and just feel. Modernism made it this far by engaging people viscerally whether they understood a specific message or not.

</comment><comment><USER14> I feel like one reason we're "stuck with modernism" is that it's an umbrella term that points to many distinct forms which are reacting against some tradition. In this sense, it's a pretty useless term, as distinct periods will always be reacting against what has come before, otherwise we wouldn't note them as such.

<comment><USER15> The thing is, art historians have stopped demarcating ages. (A bit like anthropologists stopped making lists of the best African tribes, even though that would be great fodder for buzzfeed.)

</comment></comment><comment><USER16> Almost all eras have extreme, overdone, or ridiculous works done in it. We tend to forget such over time and remember the good ones, or at least the most controversial or novel ones.

Some of the depictions of hell around the early renaissance can make one cringe just as much as some "modern" art. The flying wanker from the Roman Pompey ruins is also a hoot.

The lack of perspective in medieval art is still a curious puzzle, because the pre-Christian Romans had be using fairly decent forms of perspective. The knowledge existed. It's as if the early Christians _intended_ the result to look abstract and symbolic to remove it from mortal-hood.

<comment><USER17> The move toward a flatter perspective was deliberate and religiously motivated, in order to remove art from the potential for idolatry. It's why illuminated manuscript is such a big deal artistically and why there are so few sculptural works from the period as well.

There are parallels in Islamic art as well, where the artistic focus is on calligraphy and architecture as opposed to the more regular forms seen in the West before and after the medieval period.

<comment><USER18> How did a flatter perspective remove the potential for idolatry? You are still depicting religious figures.

<comment><USER17> The idea was basically more perspective == more realistic and therefore closer to a temptation to worship (not all figures depicted in the period were necessarily religious). It's not a particularly compelling argument but there's a lot from the thinking in that period that wasn't very logical.

<comment><USER16> Maybe Heaven is 2D. Practice on a flat harp (not flat notes).

</comment></comment></comment></comment></comment><comment><USER19> Modernism for me is systems, process and indirection between artist/designer and the work, where the effort is more put into designing those systems and tools and being able to control the consistency of the output by tweaking the parameters of the system, tool and process. A good and extreme example are fonts or vector/parametric design software.

Before that, in the classical era it was more about raw skills through practice and reaching some kind of wonderkid level of excellence measured by popular standards that were tied to complexity, e.g. the most realistic painting or most beautiful form of an object. One example, to stay in the realm of type would be script calligraphy, where letterers learn script styles and try to reproduce them as best as possible.

Postmodernism gets rid of the systems and indirection and is more about direct human expression and originality, without trying that hard to reach an ideal or make the most realistic like in the classical era. The example in type would be freestyle hand lettering or graffiti writing, or even normal handwriting, and accepting and embracing the imperfections that are generated by your own body which results in your own recognizable style.

</comment><comment><USER20> Not a big fan of modern art, but I've a soft spot for Gilbert and George, one of the first to create art that literally was shit, or at least incorporated it. :)

Plus they lived in an area of London that was pretty rough back in the day, long before it was trendy.

These days their work has been swamped by a tidal wave (including sharks, and other creatures in formaldehyde...) but they were among the pioneers.

</comment><comment><USER21> Reading this piece reaffirmed a lot of what I had been feeling in the SFMoma my last couple of visits. The place just felt lifeless. All the art was really disconnected from the world, and the abstract stuff seemed especially pointless.</comment>


GoshawkDB: A distributed, transactional, fault-tolerant object store - <AUTHOR> https://goshawkdb.io/features.html <comment><USER3> > The only requirement is that if F is the number of unreachable nodes you > wish to be able to tolerate, then your minimum cluster size is 2*F + 1. > > Currently no other data store that I'm aware of offers this flexibility.

It isn't true. There're plenty of storages with same strong consistency model (tolerates F failures of 2F+1 nodes), among them are Cassandra with lightweight transactions, Riak with consistent buckets, CockroachDB and ZooKeeper.

> However, GoshawkDB has a radically different architecture to most databases > and its object-store design means that contention on objects can be > dramatically reduced, allowing the performance impact of strong- > serializability to be minimised.

Can you please describe the algorithm that you use for implementing distributed transactions?

> just three network delays occur (and one fsync) before the outcome of the > transaction is known to that node

3 round trips for per transaction is the result which is very similar to the Yabandeh-style transaction, see the Cockroach's blog for details - [http://www.cockroachlabs.com/blog/how-cockroachdb- distribute...](http://www.cockroachlabs.com/blog/how-cockroachdb-distributes- atomic-transactions/)

Do you use the same approach?

<comment><USER4> Hi. I'm the author of GoshawkDB. Thanks for your questions.

> It isn't true. There're plenty of storages with same strong consistency > model (tolerates F failures of 2F+1 nodes), among them are Cassandra with > lightweight transactions, Riak with consistent buckets, CockroachDB and > ZooKeeper.

The point I was trying to make is the decoupling between cluster size and F. ZK, for example, requires that the cluster size is exactly 2F+1, not is minimum 2F+1. That means that as the cluster size increases, performance will decrease as more nodes have to be contacted.

> Can you please describe the algorithm that you use for implementing > distributed transactions?

Yes. In detail, there will be a blog post forthcoming. However the two main points is that 2PC is replaced by Gray and Lamport's paper "Consensus on transaction Commit", and dependencies between transactions are modelled through vector clocks. As I'm visiting lots of family over xmas, I'm afraid I don't have the 12+ hours necessary to document the entire algorithm just at the moment. However, I will certainly get to this asap.

> Do you use the same approach?

I don't know. I don't use the term round-trip because that doesn't make it clear if we're talking individual messages or message-hops, and these sorts of conversation and discussion can often go wrong if we use different terminology. The 3 network-delays that I mention comes directly from the Gray and Lamport paper I mention above.

<comment><USER5> > The point I was trying to make is the decoupling between cluster size and F. > ZK, for example, requires that the cluster size is exactly 2F+1, not is > minimum 2F+1. That means that as the cluster size increases, performance > will decrease as more nodes have to be contacted.

How does this work? Suppose we set F=2 and have 7 nodes, A-G. Client 1 tries to write, contacting 5 nodes, A-E. A and B are down at this point, but C, D and E accept the write so it calls it good. Then A and B come up and C and D go down. Client 2 tries to read, contacting nodes A, B, C, F, G. 4 out of the 5 respond successfully, so it calls it good. But it can't possibly read the value that client 1 wrote.

Whatever way you do it, the number of nodes contacted for a write + number of nodes contacted for a read has to add up to more than the cluster size. If your cluster is somehow sharded then you can work around this with e.g. consistent hashing (so that client 2 knows which 5 of the 7 nodes a particular key must be stored on, and contacts the correct subset), but that only works if client 2 can know what the key was - and I think Cassandra already supports that.

<comment><USER4> Ok, so F=2, so 2F+1 is 5. So client 1 creates a txn that writes to object x. x has replicas on A-E, but not F and G. So client 1's txn gets sent to F+1 drawn from A-E. In your scenario A and B are down so that only leaves C, D and E. So they vote on the txn and vote to Commit. This vote forms a Paxos round as per Gray and Lamport's paper "Consensus on transaction commit". Assuming that all these votes get received and written to disk by at least F+1 acceptors (which will almost certainly also be C, D, and E), and that C, D and E all form the exact same overall outcome then consensus has been achieved: the outcome is fixed and stable.

A and B come up at the same time that C and D go down. C, D and E all knew (in their role as acceptors, not voters) that the result of that txn has to go to _all_ of A-E. So when A and B come up, E will see this and send them the txn outcome. Now A and B can't progress at this point yet because they've only seen the outcome from one acceptor (E), not the minimum F+1. So as they spot C and D are down, they will start additional paxos rounds to try and get the txn aborted. Those rounds will _have_ to contact E, and they will find that actually the txn votes led to a commit. Now A and B will also play the role of acceptor, taking over from the failed C and D. Thus we'll finally have A B and E as acceptors all with the original commit votes, they will form the same outcome, and all the voters and learners will get the same result. I realise this is probably not the cleanest explanation, but this is the chief purpose of consensus algorithms in general: once a majority (F+1) of nodes form consensus about something, that consensus can never change, and can only be propagated further.

> Client 2 tries to read, contacting nodes A, B, C, F, G. 4 out of the 5 > respond successfully, so it calls it good. But it can't possibly read the > value that client 1 wrote.

Client 2 is trying to read object x and object x only exists on A-E, not F and G. So client 2 cannot ask F and G to take part. I assume you mistyped and meant A, B, and E, not C as I thought C and D were down at this point.

Client 2 will get A B and E to vote on this next transaction and that will occur as normal as we have only have 2 failures currently (C and D).

> Whatever way you do it, the number of nodes contacted for a write + number > of nodes contacted for a read has to add up to more than the cluster size.

No, that's not true. It has to add up to more than the number of replicas of an object. That can be much less than the cluster size in GoshawkDB. This property is not true of several other data stores.

> If your cluster is somehow sharded then you can work around this with e.g. > consistent hashing (so that client 2 knows which 5 of the 7 nodes a > particular key must be stored on, and contacts the correct subset), but that > only works if client 2 can know what the key was

Yes, this is exactly what GoshawkDB does (though my consistent hashing algorithms are quite unlike the norm).

> and I think Cassandra already supports that

Maybe - I'm certainly not a cassandra expert. I'm pretty sure cassandra does not support full transactions. For example: [https://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml...](https://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_about_transactions_c.html)

"Cassandra supports atomicity and isolation at the row-level, but trades transactional isolation and atomicity for high availability and fast write performance".

Which is fair enough - there's definitely a use case for the properties that Cassandra offers - as I've written on the GoshawkDB website, GoshawkDB is certainly not a competitor of Cassandra. GoshawkDB does support full transactions.

<comment><USER5> But isn't it the restriction to single-row transactions that makes it possible to isolate a given transaction to a particular subset of the cluster? If you allow a transaction across any set of rows, how can you possibly do consistent hashing of that, when the next transacting might involve a different (but maybe overlapping) set of rows?

<comment><USER4> Well I have no idea of how Cassandra works, so I can't comment on that.

GoshawkDB gets every object touched in the transaction to vote on the outcome of the transaction, in parallel, and guarantees that if two transactions touch the same object, there must be at least one copy of that object that gets to vote on both transactions, thus can enforce any dependencies as necessary.

Edit: further clarity: the use of consistent hashing in GoshawkDB is to ensure that each node has an equal number of object copies. It is the Paxos Synod algorithm that ensures a majority of those copies of any object get to vote on every transaction that touches that object, thus ensures that for any two transactions touching the same object, there is at least one copy of the object that gets to vote on both.

<comment><USER5> Ok. So in practice a multi-row transaction will have to contact >2F+1 nodes (2F+1 for each object involved, likely overlapping but not completely)?

<comment><USER4> Not quite. Only F+1 are required per object to vote. As I explain in the blog post ([https://goshawkdb.io/blog.html#20151224](https://goshawkdb.io/blog.html#20151224)), the remaining F can be sent after the outcome is known.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> This is really cool! I guess the main competition in terms of similar purpose and guarantees is [http://hyperdex.org/](http://hyperdex.org/), although the add-on that enables transactions (quite critical...) is commercial.

<comment><USER7> The most production ready versions of this kind of thing are [http://geode.incubator.apache.org](http://geode.incubator.apache.org) and [https://ignite.apache.org](https://ignite.apache.org) .

<comment><USER4> Having just had a quick look at both, the only point I'm willing to make is that ignite's distributed transactions use 2PC. [https://apacheignite.readme.io/docs/transactions](https://apacheignite.readme.io/docs/transactions)

2PC, at least in its usual forms, is not fool-proof: if failures happen in the "right" order then the whole txn gets blocked: it's actually proven to be equivalent to Paxos with F=0 (i.e. no ability to tolerate failure). On this point alone, GoshawkDB stands apart from anything that uses 2PC.

</comment></comment></comment><comment><USER8> _GoshawkDB is unique as it allows you to configure the tolerance to failure independently of the size of the GoshawkDB cluster. For example, you could have a cluster of 5 nodes and require that it continues to operate unless more than 2 nodes become unreachable. Or you could have a cluster of 20 nodes and require that it continues to operate unless more than 3 nodes become unreachable. The only requirement is that if F is the number of unreachable nodes you wish to be able to tolerate, then your minimum cluster size is 2_ F + 1. You may of course choose to have a cluster size larger than this. Currently no other data store that I'm aware of offers this flexibility.

I fail to see the point of making your cluster unavailable before you've lost so many nodes that you no longer have a quorum. It seems odd to have a cluster that can handle e.g. 4 node failures, and take it offline after only 2. Why would anyone want a feature like that?

<comment><USER9> It's in the next paragraph. The data has to have more replicas to be resilient to more failures. If you have a lot of data, storing 20 replicas is going to be really expensive and probably unnecessary.

<comment><USER4> Yup, on the whole, in order to increase performance, you don't want more and more nodes to be contacted. Remember that every txn has to have a minimum of F+1 replicas vote on each txn, so if F is really large, although they vote in parallel, you have greater chance of network delay and greater load on all machines. So GoshawkDB allows you to increase cluster size without increasing F, so getting you greater performance.

</comment></comment></comment><comment><USER10> Why should I choose this over Ceph RADOS? [0][1]

0: Reliable Autonomic Distributed Object Store

1: [http://docs.ceph.com/docs/master/rados/api/librados- intro/](http://docs.ceph.com/docs/master/rados/api/librados-intro/)

<comment><USER11> It's written in Go and nicer to hack on, I suspect.

<comment><USER12> Being written in Go is hardly some kind of magic advantage. I'd go with Ceph myself because I know exactly where I stand with it. It's also got commercial support which comes in handy.

<comment><USER6> Ceph doesn't seem to support (serializable) transactions (correct if wrong), which is kind of the whole point. In fact, how does it differentiate itself from Apache Cassandra etc? By storing arbitrary objects?

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

I'm no Cassandra expert, but I'm certainly under the impression that Cassandra does not offer full transactions - lightweight txns only that are atomic only for a single row.

</comment></comment></comment></comment></comment><comment><USER13> > The trade-off is that in the case of failure (node failure or network > partitions), operations may block until the failures have been resolved.

Curious how this works at scale. For example if a node is down and N requests start blocking, is there an upper bound to N? What happens when this is reached? Does N map to a goroutine? A file descriptor? Is there timeouts?

Seems like possibly a node going down essentially means the entire show going down if requests are filling up and not being resolved, you would think there may be a tipping point in which other requests may not be able to be served as all resources are blocked.

Possibly there is just a sane timeout and these requests also just fail, leaving the client to know something is amiss?

<comment><USER4> Hi, I'm the author of GoshawkDB. Thanks for your questions - they're certainly not answered on the website so I'll do my best to answer them here and incorporate them into the website later.

> Curious how this works at scale. For example if a node is down and N > requests start blocking, is there an upper bound to N? What happens when > this is reached? Does N map to a goroutine? A file descriptor? Is there > timeouts?

The blocking actually occurs on a per-client basis: when a client submits a txn to the server to which it's connected, that server will calculate which other server nodes need to be contacted in order for the txn to be voted on. If it cannot find enough servers due to failures then it will outright reject the txn and tell the client that there are currently too many failures going on.

However, the server could find the right set of server nodes and send off the txn to be voted on and send of the txn for verification and validation. Right at that point there could be further failures and so it's not known how far those messages got. It is in this case that the txn could block as until some node recover it's impossible to safely abort the txn. But it's important to note that:

1\. If a txn starts blocking, that'll block just that txn and that client (as the client is blocked waiting on the outcome of the txn). No other part of the server or any other server is affected.

2\. Other clients can be submitting other txns at the same time that need different un-failed nodes to proceed, and they progress just fine.

3\. There is no global determination (yet) of whether a node is failed or not. Thus this approach can cope with really weird network issues - eg random connections between different nodes failing. There is no need for the whole remaining cluster to agree that nodes X, Y and Z are "out" \- none of the algorithms depend on that sort of thing.

I hope this answers your questions.

<comment><USER13> It helps but doesn't quite answer my question yet.

With your situation #1, what if this is very common transaction and therefore you have 100 of these all waiting. What about 1000, 5000 etc. what system resources are used to let these transactions wait indefinitely ( if I understand your semantics with specific regard to blocking )?

Some systems handle this as a failure that is communicated to the client rapidly. Other systems let N clients actually wait indefinitely but at the cost of taking up a thread / file descriptor, etc. in systems that have finite amounts of threads for example this would then be communicated in his paradigm as a such of upper bounds as to how many requests one could have waiting.

So just trying to get a feeling for how this could have infinite amount of waiting transactions due to partial failure and still keep taking requests.

Thanks for the reply, this stuff is always interesting

<comment><USER4> > With your situation #1, what if this is very common transaction and > therefore you have 100 of these all waiting. What about 1000, 5000 etc. what > system resources are used to let these transactions wait indefinitely ( if I > understand your semantics with specific regard to blocking )?

So, as each client can only have 1 outstanding txn at a time, this requires there are 100, 1000, 5000 etc clients all submitting the same txn at the same time, and presumably they're all connected to the same server node, and for each of those txns, the set of server nodes that need to be contacted has been calculated, and the necessary messages sent. At that point failures occur so it's not known who has received which messages, so all these txns block.

The only system resources that are held at this point is RAM. Yes, it could get so bad that you eat up a lot of RAM - this is release 0.1 after all. There are a few areas where I have tickets open to make sure that goshawkdb can spill this sort of state to disk as necessary, though it may not be too horrible just relying on swap to start with.

> Some systems handle this as a failure that is communicated to the client > rapidly. Other systems let N clients actually wait indefinitely but at the > cost of taking up a thread / file descriptor, etc. in systems that have > finite amounts of threads for example this would then be communicated in his > paradigm as a such of upper bounds as to how many requests one could have > waiting.

The problem is that in this particular case, the txn could have committed, it's just the server who initially received the txn from the client and then forwarded it to the necessary server nodes can't learn that it's committed due to failures. Now certainly I could make the client informed that the outcome is delayed, but the client may not be able to do anything with that information: it can't know for sure if the txn has been committed or aborted.

The entire codebase is written using actors and finite state machines. Because Go supports green threads and go-routines can be pre-emptively suspended, there is no problem with eating OS threads. In general, the design is such that the only thing that should block is the client and on the server the actor/state-machine that is talking to that client.

<comment><USER13> Thanks, that answers my question.

Considering more than one exact txn I imagine will hit a single specific node often, at large scale with a single mode down even if that means 5% of transactions block, you are basically growing a queue of waiting work indefinitely with the only upper bound being how much ram you have. Meanwhile 5% of clients will be waiting and this node may take awhile to come back if it needs something.

Once your out of ram / etc constraints the 5% of the system that is not functioning turns into 100% real fast because your capacity to handle the other 95% takes ram or other resources you now have dedicated to waiting.

If what your saying is also each client can only have one blocked transaction that is relevant but doesn't prevent a consumer to spin up as many clients in succession trying to get through.

I would suggest that you have at minimum strict timeouts for the the transactions, in conjunction with an immediate fail if the node is answer is not available right now. So a client would never wait more than X seconds or the transaction is aborted and if necessary rolled back.

What this would create is a system with predictable failure cases when things go pear shaped. You could calculate in advance how much overhead it would add when something goes wrong as you can have a determinant time factor when having clients wait instead of indefinitely.

Furthermore , what if a node never comes back. Somehow there seems to need a transaction failure that is handed back to the client whether it's node is down, node is gone forever , or node simply timed out.

At the end of the day even if your system is able to handle N thousands of transactions pleasantly waiting and can still answer other requests indefinitely that is a great accomplishment, but in practice may not be ideal for many workloads. People and computers tend to both retry interactions with data that are slow or failed and the combination of just taking on more and more work and hoping everything flushes out when things become healthy is a recipe for a thundering herd, and better served by something like an async work queue type of pattern.

Btw I say this w/o looking at your code , just home page, so possible these things exist and it's not clear what the bounds and failure cases are yet.

Keep on hacking on it!

<comment><USER4> > Considering more than one exact txn I imagine will hit a single specific > node often, at large scale with a single mode down even if that means 5% of > transactions block, you are basically growing a queue of waiting work > indefinitely with the only upper bound being how much ram you have. > Meanwhile 5% of clients will be waiting and this node may take awhile to > come back if it needs something.

Ahh, no! For each obj, there are 2F+1 replicas, each replica on a different node. For each txn that hits an obj, you only need F+1 of those replicas to vote on the txn. So, provided F > 0, a single failure will never cause anything to block.

> I would suggest that you have at minimum strict timeouts for the the > transactions, in conjunction with an immediate fail if the node is answer is > not available right now. So a client would never wait more than X seconds or > the transaction is aborted and if necessary rolled back.

I agree. I think it would be very difficult for a client to do anything sensible with such information, but even if all I'm doing is getting the client to resubmit the txn verbatim, at least it clears up the resource usage on the server, which is the most important thing.

> Furthermore , what if a node never comes back. Somehow there seems to need a > transaction failure that is handed back to the client whether it's node is > down, node is gone forever , or node simply timed out.

Well, this only becomes a problem if > F nodes fail and never come back - <USER2> whole design of consensus systems is to cope with failures up to a certain threshold. Provided <= F nodes fail, the failures are detected and any txns that are in-flight are safely aborted (or, if it actually committed, that information is propogated) - this is all just usual Paxos stuff. But yes, again, I completely agree: if you have a massive failure and you lose data, then you are going to have to recover from that. For goshawkDB, that's going to require changing topology which is not supported in 0.1, but is the main goal for 0.2.

> At the end of the day even if your system is able to handle N thousands of > transactions pleasantly waiting and can still answer other requests > indefinitely that is a great accomplishment, but in practice may not be > ideal for many workloads. People and computers tend to both retry > interactions with data that are slow or failed and the combination of just > taking on more and more work and hoping everything flushes out when things > become healthy is a recipe for a thundering herd, and better served by > something like an async work queue type of pattern.

Oh absolutely. In a previous life I did much of the core engineering on RabbitMQ. It was there that I slowly learnt the chief problem tends to be that under heavy load, you end up spending more CPU per event than under light load, so as soon as you go past a certain tipping point, it's very difficult to come back. I certainly appreciate that human interaction with a data store is going to require consistent and predictable behaviour.

Thanks for your input.

<comment><USER13> Cool, makes more sense now.

At a high level it would be interesting to make it as durable as possible in situations where say F=2 but you have 30 nodes.

As I understand it, in this hypothetical case, the majority of the system would work fine if 3 nodes fail, but there could also be some percentage of transactions which are unfulfillable due to this scenario while there should be many that can still be answered with confidence. ( if I'm understanding correctly that data does not go into every node with a configuration like this and is consistently hashed across )

So was just curious how a prolonged period of this may turn into an unbounded problem when trying to digest your page on it.

Ultimately it sounds like it's headed in a good path and embracing this partial-fail-but-that-doesn't-mean-show-is-over with specifics is a good thing to get ironed out and would certainly be a key thing to get right early, even if it's largely semantics and client behavior.

Good luck, will try to play with it soon

<comment><USER4> > As I understand it, in this hypothetical case, the majority of the system > would work fine if 3 nodes fail, but there could also be some percentage of > transactions which are unfulfillable due to this scenario while there should > be many that can still be answered with confidence. ( if I'm understanding > correctly that data does not go into every node with a configuration like > this and is consistently hashed across )

Yes, you understand it perfectly. :)

> Ultimately it sounds like it's headed in a good path and embracing this > partial-fail-but-that-doesn't-mean-show-is-over with specifics is a good > thing to get ironed out and would certainly be a key thing to get right > early, even if it's largely semantics and client behavior.

Indeed. Semantics are very important and I want to make sure GoshawkDB is easy to understand and reason about at all times.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> Paxos from the ground-up to offer strong transactional guarantees, similar to CockroachDB: [http://www.cockroachlabs.com/blog/](http://www.cockroachlabs.com/blog/) CockroachDB is a KV store (that will be released with a SQL layer on top of it) whereas GoshawkDB is a Graph store. GoshawkDB puts data into client caches (much like Datomic) and even attempts transactions there.

<comment><USER4> Not quite: Paxos Synod is merely used as the replacement for 2PC as 2PC does not work. So that's just achieving consensus on the txn votes for each node. It's actually vector clocks (and improvements thereof) that manage the dependencies between txns. The novel bits of vector clocks in GoshawkDB is getting them to expand an contract as necessary, rather than just becoming enormous, which happens with some systems.

</comment></comment><comment><USER4> For those interested in a bit more detail how GoshawkDB actually works, I've added a (slightly rushed) blog post on the topic, which covers transaction lifecycle. [https://goshawkdb.io/blog.html#20151224](https://goshawkdb.io/blog.html#20151224)

</comment><comment><USER3> On the site it is written that GoshawkDB doesn't support membership change. Since you system is based on single decree paxos then you can take Raft's joint consensus and apply to plain paxos. Probably it's the simplest and easiest to change membership in paxos cluster.

<comment><USER4> I don't think that's the problem though. The problem that I'm thinking of is that when a cluster grows in size, due to the use of consistent hashing, there'll be a set of objects that need to move between nodes. Calculating and achieving that movement is what concerns me. The exact properties are explained early on in [http://arxiv.org/abs/1503.04988](http://arxiv.org/abs/1503.04988)

I'm not expecting to ever need to model a global property of "these are the set of nodes that are up and running". I always worry about the effect of weird and wacky network issues on such systems.

<comment><USER3> By the way, I always was wondering why the schemas with consistent hashing maintained via the ring are more popular approach than treating key space as a line (-∞,+∞), maintaining the explicit map from segments and rays of keys to the replica groups and split the group/segment when replica group becomes too hot or heavy.

IMHO the perfect hashing solves the problem of distributing the data but the load may follow completely different patterns. See theInstagram's Justin Bieber problem.

<comment><USER4> Yes, you're right. Now where that paper finishes is pretty much where GoshawkDB starts. Because with GoshawkDB, the server controls the object UUId, you can push as much entropy in there as necessary so the problem identified in the paper is gone. However, ultimately what GoshawkDB ends up generating is basically a set of numbers that you interpret as a way to construct an order of the different nodes (it's the path down the tree, as described in the paper). This set of numbers you could intentionally change in order to change the load balancing to exploit locality.

So yes, currently it'll rigorously enforce a uniform balancing. However, it should be possible to move objects around if/when necessary. I doubt that'll be in for 0.2 though!

</comment></comment></comment></comment><comment><USER15> I don't see how it's possible to manage transactions fully client-side while adhering to the consistency model that's being claimed.

The best you'd be able to do seems like read-committed isolation.

</comment><comment><USER16> Anyone bothered with author using term "object store", when in fact it's no match for ZODB or Db4o and only stores serialized documents, more similar to CouchDB or MongoDB?

<comment><USER4> So ZODB has really great integration with Python: the fact that you can just subclass Persistent and get persistent objects is a really nice model.

That type of model is certainly the goal for GoshawkDB but I certainly accept your point that currently the Go client API offers something that is more similar to a document store. With GoshawkDB it really is up to the client as to what API you offer. For languages which allow you full proxies of all object field gettors and settors then you should be able to match ZODB, and that would certainly be the goal. But without that sort of support in the programming language, the only other way to get there is to define your object types externally, and then compile special classes that do the magic for you. That too is something I'll look at for GoshawkDB: it's likely to ultimately be faster than relying on reflection and other techniques.

An awful lot of problems with these sorts of products are caused by the same terminology being used for different meanings. I'm sorry if you feel I've made this worse. Hopefully it is the case that in future releases there will be both more clients and they will offer a model which is closer to what you're expecting with the term "object store".

<comment><USER16> > With GoshawkDB it really is up to the client as to what API you offer.

So GoshawkDB _is not_ an object database and apparently _never will_. That's OK, but don't call it object store. It's misleading, as it uses already- established term for something different, which also already has a name.

<comment><USER4> So that I understand, what is the definition of object store?

<comment><USER16> [https://en.wikipedia.org/wiki/Object_database](https://en.wikipedia.org/wiki/Object_database)

Mind you, in several programming languages objects can have instance-specific methods (Ruby and Python being notable examples). This alone makes object more than merely a sum of a predefined structure having data fields and (also predefined) schema having functions to operate on those fields.

<comment><USER4> Thanks for the link. Whilst I'm not arguing with your point, I believe I've never used the term "object database" to describe GoshawkDB, only "object store". I guess I'm struggling to find a more accurate term than "object store" to describe GoshawkDB. I don't like "document store", as to me "document" tends to be something human readable.

<comment><USER16> I understand your reluctance for using term "document". I don't like it much either when it comes to JSON entities, but I can't find any better term, much less a widely used one.

Look at the matter this way: CouchDB, MongoDB, and ElasticSearch, all use the term "document" to describe hash containing data of JSON-compatible model. They already do so, and they are quite well known in the field. It only makes sense to follow their lead, so your potential users can recognize capabilities of your application easier.

<comment><USER4> Excellent points well made :) I think I may well change the description then as you suggest, and once I have clients that support the same API model as things like ZODB then I'd describe it as something like "document store that can also be accessed like an object store" (well, hopefully not that long winded...).

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> Hey msackman,

Pretty cool looking stuff. Where'd you get the design for object/graph structure? It is what we are using for our database, [http://gunDB.io/](http://gunDB.io/) . Although we take the opposite approach to CAP than you, and have no support for serializability (I don't think this belongs in the protocol but instead in the data, like git).

What's you're take on concurrency? How do you handle conflicts (I assume this is easy for you with a master)?

Would love to jump on a chat too, being DB guys. Shoot me an email firstname.lastname@example.com welcome arounds!

</comment><comment><USER18> Performance?</comment>


Why bitcoin will rise in price again, but it will take years - <AUTHOR> http://forum.theuklibertarian.com/viewtopic.php?f=3&t=597&start=20#p8590

<comment><USER2> I don't think Bitcoin dropping in price to the $3 level or whatever level it's at now, means it's the end of Bitcoin. I was very surprised when it had the value of just $1 back April I believe. A currency needs to be supported by _real_ economy, not just speculation. It seems all the speculators are gone now, and Bitcoin will continue its normal course of growing at the pace of its own economy. I believe one of the catalysts for Bitcoin will be NFC payments, because that would remove a huge obstacle for Bitcoin, and it would allow many merchants of real products to sell them for Bitcoin very easily.

Of course, it would help if merchants wouldn't have to be afraid that FBI will come knocking at their door questioning them about it, or if the Government wouldn't immediately freak out about it if its usage explodes in the marketplace. You'd need a president that supports currency competition, too, and might even allow something like this in the market (Ron Paul could be such a president).

<comment><USER3> But would the customer who wants to pay wth BitC using NFC technology accept that he must wait for some confirmations before he can take his merchandize home? And would merchants, especially large stores that go to substantive effort to streamline checkout processes, accept a payment protocol that by design adds a one hour delay (IIRC, people seem to regard six confirmations as definitive proof of payment, and the work factor is adjusted to give one confirmation per ten minutes on average) to every checkout? Even requiring just one confirmation would mean that a supermarket cashier could only process about four or five customers per hour if you want to keep the process sequential.

<comment><USER4> unnecessary. transactions don't have to be bitcoin transactions. two people with accounts with mtgox can have instant transfers for instance.

<comment><USER5> why would you use bitcoin below that though? requiring a both vendor and customer have an account at some paypal like site just makes it paypal. it will have the same problems. so what does bitcoin add? nothing

<comment><USER2> Lower transaction fees maybe? Like in the 0.x%.

</comment></comment></comment></comment></comment><comment><USER6> I looked at mining BTC when it was $7/coin, and I couldn't make it work economically. Now that it's $3/coin, I certainly couldn't. And the fact that it hit $17/coin makes it even worse.

You see, the more miners there are, the harder it is to mine each BTC. So in order for it to be worth my electricity and hardware, a LOT of people would have to stop mining. I don't see how it could possibly make sense for me to start mining while so many people are quitting, either.

</comment><comment><USER7> I'm seeing a lot of posts on HN supportive of Bitcoin, and honestly, I just don't get it. Someone explain.

1) I don't see that Bitcoin can escape any boom-bust cycle. I don't. Arguably the dollar can't either, but I think that's part of my point: that's with people _trying_ to regulate it. Bitcoin ultimately has a finite economy, which means that it's only stable if it is constantly deflationary (unless the population size stays the same I guess? I'm not going to make _that_ assumption) and _that_ motivates hoarding, which locks down currency.

You can _maybe_ construct some differential equation where the amount of hoarding is balanced out by the amount of 'cashing out' as people give up hoarding to spend freely, but that's a _heck_ of a wild guess to base a currency on. And anything _less than that perfection_ will inevitably result in boom-bust: freeze until you sell your dough, therefore simultaneous motivation to sell, therefore flooding of market, therefore crash. Which tangentially brings up:

2) In the above example, Bitcoin is (like any other currency) a surrogate of value for the things you can _do_ with it, which tells us that value lies outside of currency altogether and that currency is just a measuring stick. And therefore...

3) Bitcoin is essentially _still_ a fiat currency, but without the benefits of, you know, a significant support base. Sorry, you can go into almost any bank in the world and exchange an American dollar for local coin. I'd rather just _abolish money_ than supplant it with even _more_ imaginary money.

Sure, some counterculture activity subsists on Bitcoin. Sure, it's a neat thought experiment. But I can't see it becoming practical (read: successful).

<comment><USER8> > But I can't see it becoming practical (read: successful).

And to add one more point: if it were to become successful, governments would likely make it illegal. Yes, it's decentralized, but they could still sue random people for using it, just like with people downloading music.

So, yes, neat thought experiment, revolutionary idea, but very unlikely to be used by more than a handful of people.

<comment><USER9> I feel like this is the real achilies' heel of bitcoin. Once governments start losing tax revenue they're going to pull out all the stops. Beyond that, US law enforcement is already concerned with bitcoin because of its use in drug trafficking, online poker, and other dubious crimes then you add in the omnipotent banking lobby who have an obvious agenda to assert. I can't imagine a world where a successful bitcoin would be allowed to thrive.</comment></comment></comment>


One reason I dread Google doc shares - <AUTHOR> https://plus.google.com/113174802278825610073/posts/ff3uLcMrQxF <comment><USER2> The worst part of multiple google accounts is a bug (feature?) in the account switcher widget. The flow is a two page thing where you first pick the account you want to switch to and then enter your password on the next page. For some reason they decided to add a feature where if you type the wrong password into the second page, they check it against the rest of your accounts, and switch you to any one that matches.

Even more annoying, the form has no username field (since you already picked it on the first page), which causes my password manager to pick the most recently used one and log me back in as the account I was trying to switch away from!

</comment><comment><USER3> Chrome has a concept of multiple users in it's preferences. When you turn it on then you can pick an icon per account and it shows up on the top right of the browser window. To switch to a different user click on that and switch to a different user. Each user can sign into a different google account.

Each user has it's own cookies, chrome extensions etc. Keeps work and personal accounts very separate.

<comment><USER4> Firefox has an even more powerful version of this.

If you start firefox with the "-P" flag you can choose to create a new profile. You can also pass it an argument (e.g. firefox -P default) to choose one.

In this case, the profiles are completely disparate; there is zero overlap. In this case, you simply have to login to one google account per window and paste into the correct window (still not ideal).

To run multiple profiles at once, launch all profiles after the first one with "firefox --no-remote -P <profile-name>". Clicking links will open them with the firefox that was launched without "\--no-remote".

<comment><USER5> How is it more powerful? This is exactly the same thing, but apparently with a worse UI (the multiple profile thing in Chrome is exposed through the UI).

<comment><USER4> The firefox instances have completely different processes, settings, etc. Everything. Chrome, unless I'm mistaken, does not go that far.

For example, one of my main uses of multiple-profiles is that I have a different profile for every proxy I use. I can launch a firefox profile that's proxied side-by-side with my usual firefox (aside, the firefox proxy settings are exposed via the UI, unlike chrome).

Chrome, I'd have to run "google-chrome-stable --proxy-server=$proxy" and then, again unless I'm mistaken, all accounts will use that proxy server. That, by itself, is a deal breaker.

I'm not familiar enough with chrome's settings and so on to say what does and doesn't leak; I could be completely wrong on all of this, but I suspect I'm correct.

Edit: On looking more, Chrome's does look more complete than I thought. The proxy bit still is a dealbreaker for me (well, and I'm adverse to logging into a google account), but I retract much of what I said.

<comment><USER6> Have you tried FoxyProxy Firefox extension?

<comment><USER4> I haven't used it in a long time, but I did use it at one point.

It's just not as good security and privacy-wise. Using proxies on/off on one profile, as it encourages, results in any tracking cookies seeing both IPs having the same tracking data, and thus your proxy has lost some of its privacy.

I also run entirely different extensions when I'm going for privacy vs fun browsing vs banking etc etc.

If you just want proxies to get around some region restriction and don't really care about the privacy or security aspects, then FoxyProxy might be fine.

</comment></comment></comment></comment></comment></comment><comment><USER7> I've had this issue constantly, as I have three separate accounts (work, personal gmail, and non-gmail google account). Lately, I had one of the worst situations though.

Coworker sent me an invitation to join a calendar. I click the link, it takes me to my personal gmail calendar page and pops up a dialog saying 'You don't have access to this!'.

I close the dialog, then click on the account change thing to switch over to my main account, and close the old tab. Click the link again. Opens my personal calendar again. I had to log out of everything then log into this account (all of this manually) before I could view the calendar.

Thankfully I didn't care enough and ignored the calendar invite.

<comment><AUTHOR> Emailed Google calendar invite is an even bigger bag of pain. They include two ".ics" attachments (one called "Mail Attachment.ics" and one called "invite.ics", leaving you wonder which one to use). If you try clicking the "Yes" in the email invite and you are not logged into the correct Google+ identity you get an HTML splash that says "Google Calendar invitations cannot be forwarded via email" (and no links to break out of that. If you load the ICS into iCal you can accept the meeting (and the sender seems to see that, so there must actually be no useful account based security in play). I thought about filming that one- but I don't want to go through those steps again.

I think it is fair to evaluate Google tools in a mixed environment. To assume a pure-Google environment is to assume away all other options and choices.

</comment></comment><comment><USER8> Do Google employees actually use any of this stuff? The workflows are terrible, I can't imagine they aren't bothered by these same problems.

<comment><USER9> you're talking about a google team that tested chrome on over 5,000 of its employees and not one of them bothered to open hotmail (the most popular email at the time). This was when chrome first premiered, and many popular websites didnt work in chrome.

I'm sure they use it plenty, just all in the same exact way. i have this problem because i have my personal and 2 work accounts that are customer specific.

<comment><USER10> They seem to eat only their own dog food.

<comment><USER11> true. they also brain wash most of their workforce to a dedication to the company you haven't seen since japan in the 70s... so my guess is that all google employees only ever have their work @google.com gmail account. ever.

</comment></comment></comment></comment><comment><USER12> I had the same issues with Google Docs, but now I always share documents as "public if you have the link," and send out a link. I have yet to regret trusting people to keep documents as private as I request.

I also just email people URLs to hangouts, instead of going through any Google UI. That also works without fail.

<comment><USER13> > I have yet to regret trusting people to keep documents as private as I > request.

Keeping shared content private is always to a large extend a matter of social trust. No technological solution can fully enforce permissions that you have chosen. Even if you require Google login and explicitly specify a group of people that can access a document, an allowed person can still copy-paste the content and share it with a larger group, or simply tell others about the content.

<comment><USER14> IME it's less about the content leaking and more about an anonymous party making weird edits to the document and you not noticing

</comment></comment></comment><comment><USER15> As a Linux user I breathe a sigh of relief when I get a Docs link rather than a complicated pptx file that won't render properly and I can't edit.

<comment><AUTHOR> Can't Libre office deal with pptx by now?

<comment><USER16> It always could 'deal with it', the issue is getting it to render identically to PowerPoint, which is virtually impossible to accomplish for non-trivial presentations, it seems. Likewise for other Office files. iWork has the same problem.

<comment><AUTHOR> But surely Google docs presentations are fairly non-repeatable across browsers, operating systems, and years.

<comment><USER15> All "modern" browsers render Docs well. Not sure what difference the OS makes, after all, it's just a vessel for the browser's rendering engine.

<comment><USER17> Font rendering can differ between different OSes but it's usually not too bad.

</comment></comment></comment></comment></comment></comment><comment><USER18> Google account switching is an insane nightmare. Sometimes I log out from account A, log in to account B, go to some Google service only to magically find myself to be in account A again.

Not only that, there is simply no way to go where I need to go as B, so I just have to use a different browser to make that happen.

And don't even get me started with Google's cross-account and cross-service messing with language and locale settings. I can to a certain extend understand Google's "the user is an idiot, so we'll make his choices for him" approach, but to constantly override explicit choices and settings is ridiculous.

</comment><comment><USER19> That's one of the reasons I use Firefox for my personal account(s) and chrome for work. Almost never have to deal with this issue. Periodically, I do need to switch on the personal side (I have 4-5 different google accounts), but i have lastpass remember it all in the browser which makes it pretty painless.

<comment><USER20> Yep, or have another profile setup in Chrome that makes this super handy.

</comment></comment><comment><USER21> Many people seem to think you choose a browser, and once you have chosen a browser, you can no longer use other browsers.

The author of the article seems to be one of these people.

He could just have a different browser he uses for whatever his current top client is. Yes he would have to log in and out for different clients, but at least this would reduce the annoyance a lot compared to doing it all in one browser.

<comment><AUTHOR> You can choose your browser. Except in some cases where your employer chooses your browser instead of you. And about half of the problems in the video had nothing to do with the browser (like not being able to switch accounts on Google's own "switch accounts" page without logging out first).

</comment></comment><comment><USER22> Maybe I'm missing something, but why do so many of you have 2+ Google accounts that you use regularly. Maybe business vs personal? If so, why mix them on the same computer user account?

<comment><USER23> You read your personal email at work, or you collaborate with other people, or you are freelance. I have 3 google accounts, mostly use 2 and its annoying.

Also if you use chrome and use the same login it is hard to separate them.

</comment></comment><comment><USER24> I have the same problem. Every time I go to Google Docs it keeps making me choose a user, then I choose a user, then it doesn't let me in and makes me choose again. It does this even for the root subdomain. I end up having to open any Google Docs URL with a different browser where I only ever login with one account. One of the several accounts it always tries to use isn't even active any more, it's an expired Google Apps account from back when they started charging and it still always offers it even if I'm signed out.

</comment><comment><USER25> Now that Google is so entrenched both in personal and corporate life, they really need to step up to handle ALL of the corner cases.

<comment><USER7> The Google assumption seems to be that you have one Google account, which is your singular identity. The reality for many people is that they have multiple Google accounts, none of which is their singular identity. The multi-account support they've added only serves to inadvertently spread your data across multiple accounts, rather than make it easier to work with them.

As an example, I ended up on YouTube the other day and, for some reason, was logged into my work Google account; curious, I clicked on 'Favorites' and found that some videos that I'd favourited once (and later been unable to find) were favourited there. Frustrating. There was also a moderate browsing history of videos, some of which I had likewise been looking for in the past.

Honestly, if it weren't for YouTube favourites I probably wouldn't log into any Google websites at all.

</comment></comment><comment><USER26> I asked Sundar Pichai about this at D10 in May, 2012 (see [http://allthingsd.com/20120702/googles-wojcicki-and- pichai-o...](http://allthingsd.com/20120702/googles-wojcicki-and-pichai-on- the-full-d10-interview-video/) @ ~35:40) and he said within 3 months they'd improve it... Still waiting. :(

</comment><comment><USER27> I use different browsers for each google account. It's a real pain in my ass.

<comment><USER4> You can easily use a firefox profile per account rather than a browser per account and end up in roughly the same boat.

Just start firefox with "firefox -P" to create a new profile, and run "firefox --no-remote -P" on a new instance of firefox and choose that profile to run it side-by-side with your first, but with no data overlapping.

</comment></comment><comment><USER28> I always open the link in an incognito window and login with the email it was shared with. Have to re-login, but works without fail. And I don't have to logout of other accounts.

<comment><USER29> Also great for reading nytimes.com.

</comment></comment><comment><USER30> Chrome Profiles are a superior solution to having different tabs logged into different accounts, because it is very easy to make a mistake compared to profiles with different themes.

</comment><comment><USER31> Same with Google+. I always get Hangout invites to the wrong Google account, and then we spend 10 minutes trying to get the call started and eventually switch to Skype.

</comment><comment><USER32> Gmail login screen makes Google's position on your situation pretty clear.

At the top it says "One account. All of Google."

At the bottom it says "One Google Account for everything Google".

</comment><comment><USER33> I've just had great fun trying to test in app purchases on an android app with multiple Google accounts. They don't make these things terribly simple.

</comment><comment><USER11> great. now matt will see this post, demand changes, and they will screw up even more. anyone who ever had a personal and a google for domain accounts two or more years ago know what im talking about. they forced everyone to unify and killed one... it was hell with all my domains.

</comment><comment><USER34> You could also just request access for the Google account you're using.

</comment><comment><USER35> i don't mean to dismiss this guy's gripe, cause obviously it does not work well for him, but for me, this "just works."

with a little experimentation, it seems that everything becomes horrible if you're not already logged in to the google account you need to use. if I am, I get exactly the desired result even if my only open tabs are using a different google account.

</comment><comment><USER36> Google Docs is a neat tool and I love their mobile apps, but if you're interested in checking out alternatives, I can recommend Office Online . It's pretty neat. And free.

[https://office.com/start/default.aspx](https://office.com/start/default.aspx)

<comment><USER37> "Hey guys, Felix from Microsoft here."

Maybe you should have disclosed that you work for MS in your comment?

<comment><USER36> Didn't mean to annoy anyone, I'm nowhere near the office team. The downvotes speak for themselves though, so I guess apologies are in order.

<comment><USER37> Microsoft has been caught astro-turfing on HN before, you really don't want to be lumped in with that lot so if you can resist the temptation to plug microsoft products in threads about competitors it would be a benefit to everybody (even to Microsoft).</comment></comment></comment></comment>


Ask HN: New Grad Friendly full time opportunities? - <AUTHOR>

I was wondering if there were any startups (<100 engineers)  that were hiring new grads. I've interviewed with a few startups now, and almost all of them want someone who is very proficient in either ruby or python and also know javascript. I'm pretty good with javascript and have used backbone.js in a previous job but when interviewing my speed in programming a solution is becoming a hindrance. I need more experience is what they're all saying, and am wondering if there are startups out there that are willing to forego speed for a few weeks till I get used to everything. I learn really fast.<p>About Me I'm a 2013 CS grad from a "top tier" bay area school and am looking to work in San Francisco. I like doing front-end work, but I can go up and down the stack as necessary. <comment><USER2> We have a few startups that are desperately looking for new grads - apply at collegefeed.com. Also ping me at hello at collegefeed.com.

<comment><USER3> The url, [http://collegefeed.com/featured- jobs/](http://collegefeed.com/featured-jobs/), loads a blank page.

<comment><USER2> fixing that, just upload your resume and will get in touch. Looking for grads with some PHP or Ruby + Front end dev experience. San Francisco.

</comment></comment></comment><comment><USER4> You probably will want to look for funded startups that have their senior team in place.</comment>


Nokia Shuts Down Developer Forum After Hacker Accesses Member Records - <AUTHOR> http://techcrunch.com/2011/08/29/nokia-shuts-down-developer-forum-after-hacker-accesses-member-records/

<comment><USER2> Imagine if this would have happened 'after' MS had taken over Nokia.</comment>


Donald Rumsfeld has released a solitaire app for iOS - <AUTHOR> http://foreignpolicy.com/2016/01/22/don-rumsfeld-has-built-an-app-to-play-cards-like-churchill/ <comment><USER2> But the kicker is that he said it would only cost ~50 to ~60 cents.

But in fact will cost you $3,000!

[http://thinkprogress.org/politics/2005/12/09/2796/rumsfeld-p...](http://thinkprogress.org/politics/2005/12/09/2796/rumsfeld- predictions/)</comment>