Startup Engineers and Our Mistakes with MongoDB - <AUTHOR> https://www.nemil.com/mongo/2.html <comment><USER3> It terrifies me to see this quote from their CTO:

"MongoDB's CTO disagrees with this statement arguing that nearly 90% of database installations today would benefit from being replaced with MongoDB."

I used to attend "office hours" at MongoDB's office where guests ask MongoDB employees for help. Most of my questions involved very complex aggregation queries (that would have been trivial in SQL) that even MongoDB employees could not solve.

While I waited to be helped I would listen to other people ask the same questions over and over and over: "How do I join these two collections? How can I <perform a transaction> and ensure both writes succeed/fail?"

Rather than say "MongoDB doesn't offer this functionality" and maybe advise them that this database isn't what they needed for the specific project, the engineers spent a majority of these office hours explaining they don't need schemas, transactions, relations and advised them how to hack together something that worked.

I don't think MongoDB is appropriate for 90% of the database installations out there. I don't know the number, but it isn't 90%, it isn't a majority, and doubt it's a significant number.

MongoDB really needs to explain what it does exceedingly well versus the other distinct offerings in databases (RDBMS, Key Value stores, MPP/warehouses, HDFS, etc) and market that.

What they do right now is somewhere between disingenuous and down right negligent.

Of course its the responsibility of a company and its staff to choose the right tool for the job, but these postmortems are becoming tiring.

<comment><USER4> I really don't understand your comments.

You're critical that MongoDB employees whose job it is to help people use the product showed users approaches to implement their use cases. How is that bad or somehow unique ? I've been to Datastax, MySQL, Oracle, Teradata, Cloudera, Hortonworks workshops before and all of them did the same thing. It's their job.

Also MongoDB has been crystal clear what it offers in comparison to other databases. It is a document database with easy to use scalability options in a market that doesn't have many of these. And it's mentioned throughout their documentation and by third parties about the pros/cons of document databases and how to appropriately model your data.

And yes these postmortems are becoming very tiring. Engineers should not be pushing any technology without a spike to determine whether it's appropriate or not. If you don't have a document orientated data model then don't use a document store.

<comment><USER5> > approaches to implement their use cases.

This is where you and your parent disagree. Your parent believes they showed "hacks" and not "approaches to implement their use cases".

</comment></comment></comment><comment><USER6> > By far the most consistent mistake was choosing a non-relational database, > when your data was strongly relational. Mongoose's ODM made this mistake > surprisingly easy to make, which led to issues down the line.

This mirrors my experiences with Mongo as well. The vast majority of data is relational. Mongoose allows people to make the mistake of structuring their data relationally. But all you are doing is pushing all the joins to the web server (which in Node land is single threaded and compounds the mistake of choosing NoSQL).

There may be some microservices that Mongo is great fit for, but it should not be your core data store.

<comment><USER7> If data needs to be processed, an option would be to use MongoDB for collecting the data in bulk and later decide how you need to structure it for your needs.

When it comes to "read" the data, you read it only from processed database that can be anything.

Since you can do your processing completely independently of your web server, your are not necessarily pushing your computational load from the DB to the web server.

<comment><USER8> > If data needs to be processed, an option would be to use MongoDB for > collecting the data in bulk and later decide how you need to structure it > for your needs.

OR, i can open a file stream, serialize my data to JSON, entity by entity, and dump all to a file.

The good old file.

<comment><USER4> Because we want to do partial updates, searches, indexing etc.

Your position can be applied to all databases. Why not abandon them all and just use CSV ?

<comment><USER9> You could always do that, dump the data to s3, and use Athena :-)

[https://aws.amazon.com/athena/](https://aws.amazon.com/athena/)

<comment><USER5> And then be locked-in to Amazon. From ubiquitous files to ... a single service provider.

</comment></comment></comment></comment></comment></comment><comment><USER10> I feel the best thing to come out of MongoDB is that Postgres now handles JSON.

<comment><USER11> Yes, this was an incredible development, and lead to hilarious projects like ToroDB (MongoDB API on top of Postgres), which ended up being faster and safer, with relations when you need them.

JSON columns can be incredibly useful and easy to understand for things like user preferences, without the hassle of a metatable.

<comment><USER12> Call this hilarious if you want, I think it's rather cool, thanks for the pointer. Once this is out of beta it will definitely be useful, if not already.

</comment></comment></comment><comment><USER8> Today in 2017, there is no real reason to use MongoDB other than in prototyping. I am happily waiting until the final nail is put on the coffin of this overhyped, flawed document store.

<comment><USER13> "Today in 2017, there is no real reason to use Oracle other than in prototyping. I am happily waiting until the final nail is put on the coffin of this overhyped, flawed relational store."

Point being you can say just about the same thing about any other database. They are all flawed for one reason or another. I happen to like Mongo quite a lot, but I rarely use it. You need to understand what situations it works best in and it's unfair to both it and yourself to generalize and wish it dead.

<comment><USER8> Oracle RDBMS isn't flawed. It is expensive, complex to configure/mantain/extend, expensive in licensing, expensive in storage, and also expensive. Did i mention expensive?

PostgreSQL is eating Oracle's customers little by little.

RDBMS aren't flawed at all, this is technology that has been perfected for the last 40 years. What is flawed is to think that relational data can be easily stored on a document store (typical mistake).

I think document stores are a great thing; the only problem is that MongoDB isn't a good document store.

<comment><USER11> > I think document stores are a great thing; the only problem is that MongoDB > isn't a good document store.

To add to that - you know when you need one. If you don't know you need a document store, you don't need it.

When you try a good document store, like Solr, you realize how appallingly limited Mongo really is. It's not suited for any practical use outside of demo apps.

<comment><USER4> Solr is not a document store. It's a search engine.

If you actually tried using it as one you would realise how ignorant your comment is. Both the Solr and ElasticSearch have gone on record before stating that it should never be used as the source of truth.

<comment><USER12> THIS, so much this!!!!

I'm working on overhauling (rewriting, from scratch) a project right now where the previous developer decided in his infinite wisdom that using ES as a database was a good idea.

I have tried repeatedly to explain to him, and the product owner, why using a search engine as a storage database is a horrific idea. Owner gets it, dev doesn't. I asked that dev if he could overhaul the project, what would he do, and he said "not use SQL at all, and use ES 100%". <_<

I think this is the problem with Mongo too... you have people misusing it, and then want to throw the baby out with the bath water and act like Mongo is the problem, when really, the problem is how they are using it.

</comment></comment></comment></comment></comment></comment><comment><USER14> The reality of MongoDB is that it's a very specific use case of nonrelational data, which is very rare these days. I'm sad that so many people get looped into Mongo with a MEAN/MERN stack when those apps are almost always the CRUD apps that would benefit from SQL. Why force yourself to maintain a schema implicitly for relational data when you can get error messaging and explicit schemas?

I think MongoDB is a great fit for the right problem. I've been coding for 4 years and have yet to find a problem that fit Mongo best.

As far as quick prototyping goes, this article articulates well why that really isn't the case. Going back to the authors post here on HN, that's a point I would really disagree with the CTO on as well.

<comment><USER15> "I've been coding for _4 years_ and have yet to find a problem that fit Mongo best."

I'm going to leave that right there.....

<comment><USER14> I can't read the implication of this, but to clarify, I haven't personally encountered a problem that fit Mongo best. I can imagine one.

</comment></comment></comment><comment><USER16> A really great writeup. A revealing exploration of the perils of mongoDB, and of the greater issue of selecting technology for a project.

There is never any mention of usecase, in companies. Everyone is still trying to be google or facebook, and uses "their tools" without a use case for why. It's just because that's what everyone else does.

All technology has a place somewhere for some use - but we need to know why we are choosing them.

For example, I choose Ruby on Rails because of it's gains in productivity, reliability, security and pleasure of use. I can quickly sling maintainable code that can scale up to millions of users. And most importantly, I don't have to make a lot of decisions. Best practices are defaulted into the framework. Some people shy away from frameworks, favoring "simpler" tools - but that only means they have to re-solve all the problems the framework has already solved.

Likewise, with MongoDB, all those useful things SQL databases do for us need to be resolved. But, that's a database decision, and many people making the decision are just developers in search of a data store. Transactions and ACID are often not even on their radar.

Overall, i think this is a symptom of a lower barrier for entry. Where before you needed a CS degree to be a programmer, now you just need to go to a bootcamp. People are not properly trained, aware (or interested) in the underpinnings like databases, networking or security - and to their own peril and the peril of the companies they work for.

</comment><comment><AUTHOR> (I'm the author of this series)

Eliot Horowitz (HN: @ehwizard), MongoDB's current and founding CTO, reached out after my last post - and spent two hours providing feedback last week in Palo Alto. It was an expansive discussion, and Eliot was reflective and eager to understand the perspectives I had heard. He noted how much it mattered to him what HN thought.

I left with tremendous empathy for the challenges of building a venture-backed database company - while we also disagreed in a few key areas. As engineers, I hope we continue to have thoughtful, if spirited discussions, like Eliot and I had - where we both are open to being wrong and have a desire to understand differing viewpoints.

In the interest of length, I didn't write the whole interview into my series, but wanted to share key parts of our discussion on HN:

\- NoSQL: I felt that NoSQL was overhyped in the early 2010s - and that 10gen's marketing claims were overblown. Eliot argued that many of NoSQL's benefits have been realized and that 10gen's early marketing accurately reflected the changes to come. For example, while he doesn't love the term NoSQL for its impreciseness, he feels that both the JSON-like data structure and horizontal scaling are here to stay and were in fact the key changes NoSQL led to (not the SQL DSL). In that sense, he argues that Amazon RDS is a form of NoSQL today - and that NoSQL had a powerful impact on the roadmap of existing SQL databases.

\- Data Loss: I generally have stayed away from talking about the controversial examples of MongoDB data loss in the earliest days (there are several of HN posts that note this). I know personally of only one team that lost data, but it's always hard to understand if this was a database issue - or their own mistakes. I did ask Eliot explicitly about this, and he said that these were exceedingly rare.

\- Defaults: I feel like it's playing with fire to set bad defaults in a database - with numerous data breaches due to 10gen's early decisions on authentication, remote login, and encryption (see for example, [https://snyk.io/blog/mongodb-hack-and-secure- defaults/](https://snyk.io/blog/mongodb-hack-and-secure-defaults/) ). For auth, Eliot argues that developers need to take responsibility for exposing MongoDB on public servers - and that the SLA for a self-hosted instance is different than a managed instance (at minimum, I have issues with users having their data exposed to the world through no fault of their own). He disagreed with 10gen's decision to turn on auth by default in later self-hosted versions once MongoDB ignored remote connections by default (but thought this was the right choice for the managed Atlas service). (But before 2014, the default behavior was no auth - and accepting all remote connections, see [https://snyk.io/blog/mongodb-hack-and-secure- defaults/](https://snyk.io/blog/mongodb-hack-and-secure-defaults/) ; Eliot notes that this took a while because changing the default would have caused issues for existing customers)

I do have concerns when 10gen explicitly targets junior developers (to be fair, he could never have predicted the growth of Node and the interest in the backend for frontend engineers). What he says makes sense say 20 years ago, but with 25% of new software engineers coming from coding bootcamps with non- engineering backgrounds, I worry that defaults matter ever more in dev tools (and even seasoned engineers may mess this up, if they're coming from a database with different defaults). We discussed analogies like seat belt lights versus the responsibility of passengers to know better. He also argued that waiting to get all this right - not just auth - would impact database innovation, while I think there's a balance that gets us a lot of the low hanging fruit (like security).

\- Mistakes with MongoDB: Eliot felt that certain posts (such as Sarah Mei's popular HN post about Diaspora: [https://news.ycombinator.com/item?id=6712703](https://news.ycombinator.com/item?id=6712703) ) misunderstood how to architect MongoDB. Regardless of the particulars, I think that new technology is especially susceptible to issues like this until the community develops broader knowledge. The failure states are well known in many relational databases and there is a broad base of knowledge about how best to architect relational data models. As startup engineers, we have to weigh tradeoffs of new vs old tools, with some new tech being game changing for startups (see PG's much cited post about the benefits of new languages like Python: [http://www.paulgraham.com/gh.html](http://www.paulgraham.com/gh.html) ) while many others are hyped new tech that damages startup productivity.

\- SLAs are hard in databases: Early products make choices that customers get used to (unacknowledged saves), and you can't quickly just change the default behavior, esp in a database. 10gen's early customers loved not waiting for the writes, and only later did 10gen realize that this was an issue for others (the default is very different in nearly every other database). To migrate their first customers without dislocation, they had to hold off on changing the default behavior for longer than they wanted to. In Eliot's view, their competitors would unfairly argue that this default was a way to juice benchmarks, hoping to stoke anger at MongoDB and cut into their growth. (I tend to have sympathy for 10gen's perspectives, with the controversial, mistaken benchmark that I referred to in part 1 looking to me like an honest mistake)

Generally, he felt that the issues with MongoDB were few and far between - <USER2> that the benefits of MongoDB was game changing for so many startups. Many of them would not have survived without MongoDB.

I'll add some more notes from the interview in part 3, where I go into 10gen's early marketing. I also let Eliot know that I would be happy to share/publicize any broader responses/critiques he writes, so that we can have a thoughtful debate that benefits others (and he can point out issues in my arguments).

(Apologies in advance if I've made mistakes in representing Eliot's views)

<comment><USER17> > In that sense, he argues that Amazon RDS is a form of NoSQL today

Lol. What?

RDS is literally hosted RDBMS SQL databases.

<comment><AUTHOR> I had a similar reaction.

</comment></comment></comment><comment><USER18> This brings back some memories from 2012. I was updating an internal tool at the company where I worked, and after a lot of thought I decided to replace a tried and true MySQL database with Mongo. It really seemed like a good idea at the time - we were storing loosely related documents where not having a fixed schema was an advantage.

Any advantage I got was lost by the time I built all the logic to handle the joins I did need to make (those join keys weren't so schemaless after all). And then I needed logic to make sure every record had the right keys, that they made sense, etc. This was all stuff that MySQL had been doing for me.

But the real kicker was that Mongo made my performance worse. When I migrated my database (roughly 10 million records), I compared before and after sizes of the actual files. Mongo's were 2-3x the size. I didn't realize it before starting, but Mongo's preallocation model gave me huge files with sparsely written records that had room for future updates. But I didn't need that extra room because my data rarely changed. So I ended up with larger files that took longer to scan for unindexed queries (mostly for reporting), which meant I had to index more stuff, which increased my memory usage, and forced me to upgrade to larger servers.

Had I stuck with MySQL, I would have been fine. Many expensive lessons were learned from this, which I guess was valuable.

</comment><comment><USER19> I'm a long-time MongoDB user and largely a fan of it because I believe the interface is superior to some text-based SQL statements.

But whatever DB you like, if you move the state of your application to another application (i.e, a database) you better make sure you really understand how it works.

For SQL databases, many people think they know how they work, but misconceptions seem widespread. Essentially, many beginners believe that SQL databases guarantee serializability everywhere and all the time, relying on the database (and OR-mappers) a lot / too much in my opinion.

Choosing a system that only offers very few guarantees forces you to think about them more explicitly. On the other hand, if you never bothered to understand SQL, you probably won't bother understanding anyDB's restrictions and guarantees either, and then everything goes to sh*t.

Some databases might be easier to understand than others, but I feel MongoDB is on the 'easier' end here. YMMV.

<comment><USER20> Couple of points:

1\. _ORMs_ I'm not sure why you dismiss ORMs. Have you ever used a good ORM? There are a lot of high-quality ORMs out there, that do the heavy lifting, provide type safety, and take care of the boilerplate. There is no reason to write text-based SQL anymore.

2\. _Relations:_ Foreign keys are incredibly useful. They're the biggest feature I miss out in relational databases. They help keep your data in a sane state. If a user deletes his account, you can configure your database use a _DELETE CASCADE_ to automatically remove all data associated with the user.

3\. _Normalization:_ NoSQL databases encourage you to denormalize your data. I've seen NoSQL databses frequently run into problems with stale data, with date that is duplicated and not kept updated, where you have multiple out-of- sync version of the same piece of information. With NoSQL database, you have to handle all the complications of denormalization. ( _You_ , the developer, have to remember to update/delete/etc from the multiple places the same piece of data lives in.) The database doesn't do it for you. (The database is a dumb key-value store, nothing more.) Relational databases encourage keeping the logical design of your databse normalized. To quote Wikipedia: "The preferred method is to keep the logical design normalised, but allow the database management system (DBMS) to store additional redundant information on disk to optimise query response. In this case it is the DBMS software's responsibility to ensure that any redundant copies are kept consistent. This method is often implemented in SQL as indexed views (Microsoft SQL Server) or materialised views (Oracle).".

4\. _Schemas:_ The worst thing about NoSQL is the absence of an enforced schema. Schemaless databases are a scourge. There's always a schema -- it's just that it's scattered all over the code. If you are joining a new company, you have to sift through piles of code to figure what the structure of the data is. Schemas are like types, and my dislike for dynamically typed languages carries over to schema-less database. Relational databases make you think carefully about the schema, and specify the schema explicitly.

In the end, you end up needing to do a lot of extra work, likely end up with more unstable and buggy system, just to avoid the small amount of _totally- worth-it_ upfront work that setting up a relational database requires.

<comment><USER21> As someone who thinks both systems have their place, there are a few issues in your arguments:

1\. ...There is no reason to write text-based SQL anymore.

There sure is! Unless your schema is dead simple your going to run into places where hand tuning is a requirement. Lots of ORM's are third rate at best, people swear by them but don't have complex data that would make one throw fits.

3\. Normalization: NoSQL databases encourage you to denormalize your data. I've seen NoSQL databses frequently run into problems with stale data, with date that is duplicated and not kept updated, where you have multiple out-of- sync version of the same piece of information.

Nosql doesn't encourage you to de-normalize, and there are reasons to de- normalize in an RDBMS. Denormalization when done right should NOT result in duplication, if it does your doing it wrong. Both systems are afflicted by these poor choices. It is easier to screw it up in a document store like mongo.

4\. Schemas: The worst thing about NoSQL is the absence of an enforced schema... If you are joining a new company, you have to sift through piles of code to figure what the structure of the data is...

Again were not talking about a problem that is exclusive to document stores. You can just as easily have queries all over the codebase that make changing your RDBMS hard. People also do very stupid things like throwing giant json blobs (and before that xml) into their RDBMS and expect it to work. However a schema makes dealing with data apart from your application a much simpler task, unless you throw all those rules out the window, and a shocking number of people do.

<comment><USER22> > Denormalization when done right should NOT result in duplication

Isn't that what it is by definition? Can you give an example of how would you denormalize without causing some sort of data duplication?

<comment><USER21> There are two main reasons to denormalize: security, and performance.

The former (security) is something I have only ever had to deal with twice. If your going to cordon off data based on some arbitrary ruleset (3rd party) it is a path you can take. For transactional integrity, and from an operations perspective both cases were perfectly valid.

The latter is one I have also only seen rarely.

I have seen it done to keep a history of actions without cluttering up the primary table. As an example I worked on a DB with millions of entries for users, and a separate table for emails, when the user updated their email, it would add a new row, verify it and then fetch the newest complete row when the user was queried. Getting rid of all the history in that table provided a fairly significant performance bump.

The second was to split little used columns in a single table out from the frequently accessed ones. The resulting trimmed table then fit in memory and was orders of magnitude faster than going to disk.

Is there ever a case to denormalize and duplicate? There are a few:

OLAP systems are unique beasts, and duplicate and denormalize in many a strange way, and all in the name of performance and ease of use for end users. The reality is that these systems usually have a SINGLE point of entry for adding and updating records (that aren't materialize views of end users). OLAP systems are weird, because nothing makes sense in them, but most of them (with all their duplicate data) aren't primary stores. Oddly I have replaced a handful of OLAP RDMBS with document stores...

The other major reason to duplicate is for "snapshotting". If you need to know the state of one record when another record was created then your probably going to end up with duplicate information. IN every case where I have seen this the words "compliance" and "audit trail" are part of the conversation. However rather than being problematic the decoupled nature of the duplicate record is desirable.

</comment></comment></comment></comment></comment><comment><USER23> nothing much new here.

mongodb marketing/PR was a problem, advertising a general purpose RDMS alternative without the technology to support it.

users were also a problem, using a technology without understanding the architecture and trade-offs.

to be over critical of "mongodb" though is unproductive. there were a lot good people working on new software to solve hard problems and I'd like that to continue.

lets just not repeat the same mistakes. don't get caught in marketing hype, and carefully evaluate technology decisions.

</comment><comment><USER24> 'One 10gen engineer made this point in analogizing SQL to Cobol, arguing that "SQL is Annoying":'

Why wasn't this the tagline for Mongo to begin with? At least it shows the arrogance, ignorance, and outright stupidity behind the database. This is not an engineer's comment. It cannot possibly be now, decades after SQL has become a de facto standard for some very good reasons (outlined in the article and elsewhere, won't rehash here). It is a marketer's comment, probably spoken by an engineer who isn't qualified to build simple demo apps, let alone anything as complex as a database. Mongo's CTO seems to fit this bill of marketer more than anything else or how would he be able to make the claims he makes with a straight face?

Our industry has a problem with fads and decisions based on feelings. Even if SQL is annoying, it's incredibly stupid to base your tech choices on feelings. It's even dumber to choose a product whose engineers build the product based on feelings. Last I checked, I thought we were an industry of engineers, trying to apply scientific principles and some human ingenuity to build software. Where does 'annoying' fit into that? Or other adjectives I often see thrown around on these boards like 'clean' and 'slick'. I know it's hard to quantify the quality of software and speak about it with any coherence, but this is beyond incoherent. 'Annoying' as applied to SQL tells me nothing. 'Annoying' as applied to the engineer making this incredibly stupid comment tells me that this engineer is either lazy, gullible, or just downright stupid. Have we seriously lost our ability to discern hype from reality that we let people and companies like this dictate our technology choices, throwing out decades of solid research in computer science for what some idiot at a company more specialized in marketing and PR than engineering tells us?

I'm willing and ready to hear well-thought out criticism of SQL and RDBMS. What I'm not willing and ready to hear is some idiot's feelings about SQL or RDBMS. You want to make a claim? Measure it. Present a report with data. But goddamn, if one of my reports came to me with this kind of stupidity, I'd give them a chance, but if they persisted, I'd fire them. This isn't revolutionary thought. It's not evolutionary thought. It's lazy idiots who don't want to learn SQL, a language so easy even business people with essentially no computer skills can pick up.

</comment><comment><USER25> What about for IoT devices? I could see NoSQL still having a place there, although I could also see it working just as well with a SQL database.

<comment><USER26> What is special about IoT devices that make them more suited towards a NoSQL solution? Scale? Is that really an issue for the majority of IoT deployments?

<comment><USER25> Scale and also the data structure is often times very flat; usually just a bunch of records from sensor readings.

</comment></comment></comment><comment><USER27> > Schemas: Schemaless does not mean no schema; instead, it means an implicit > schema in the app (a particularly challenging misnomer for anyone outside > our industry)

Still a challenge for many in the industry.

</comment><comment><USER28> These "Why technology X is worthless" types of posts and statements always give me a bit of a laugh. As with most technologies, there is a) a learning curve, and b) best practices to follow.

Many of the comments here seem to discuss a few things which, in my opinion, lead me to believe that the implementation is incorrect or decisions are being made on old data or based on older versions of MongoDB. Making arguments against any product based on previous versions seems to be counter productive. Most of the posts here don't make reference to a specific MongoDB version, but many reference their experience with the product in 2012.

Assuming that these experiences were at the end of 2012 with the most current at the time version, we are still talking about version 2.2.2. The current stable version is 3.4.6. As you can imagine, there have been many advances to the product in five years. Basing one's knowledge and opinion of MongoDB on old versions doesn't seem logical. Even back in 2012 though, there was a lot of misinformation about MongoDB. A blog post from that time period ([https://blog.serverdensity.com/does-everyone-hate- mongodb/](https://blog.serverdensity.com/does-everyone-hate-mongodb/)) argues some of that information at that time.

Many other comments were made based on what seems to be a lack of spending time with learning MongoDB. It is a non-relational document store. It is NOT a relational database. It requires a different way of storage design and thinking and attempting to force MongoDB to be a SQL-like database is silly. SQL is indeed a popular option and can work well.

However, non-relational databases work well too. There are lots of implementations of it across a lot of companies. A few relatively recent posts are good examples [https://engineering.snagajob.com/mongodb-in-aws-does-it- real...](https://engineering.snagajob.com/mongodb-in-aws-does-it-really- work-a705b3da07a2) and [https://mongomikeblog.wordpress.com/2016/04/29/why-we- went-w...](https://mongomikeblog.wordpress.com/2016/04/29/why-we-went-with- mongodb/) That doesn't account for many of the large companies out there using it, like Expedia, Facebook, Forbes, to name a few.

If we want to have a discussion about specific, current, features of MongoDB, that's great. There are a lot of them. Many have been mentioned. Some have been mentioned as a negative due to what appears to be poor implementation. If we want to debate pros and cons of any product, we should be sure that we are talking about how things are intended to be implemented and not some hacked together approach.

Perhaps the marketing spin was too aggressive. I'm not a marketing person. I'll leave it to Mr. Horowitz to backup his claims. But if we are going to have a discussion about the pros and cons of MongoDB, can we at least agree to not talk about old versions? I mean, I had a bad experience with Windows 3.1, so should I not use Windows anymore? ;-)</comment>


Your Gut Bacteria Don't Like Junk Food – Even If You Do – IFLScience - <AUTHOR> http://www.iflscience.com/health-and-medicine/your-gut-bacteria-don-t-junk-food-even-if-you-do <comment><USER2> Does anyone know how you can reencourage the growth of "friendly bifidobacteria that suppress inflammation"? As an IBD (specifically UC) I'd love to find a way to build this back up.

<comment><USER3> I too find this question annoyingly untouch in these types of articles.

Growing up, I was always told that yoghurt was good for your stomach because it contains bacterial cultures that are healthy, yet with the recent surge in "gut bacteria control your health" kind of articles, I have yet to see anyone talk about if I should be hunting down different kinds of yoghurts and yakult types of products.

<comment><USER2> What's even worse is that when you speak to a specialist doctor they state that their is no causal link between s et and UC. They are happy to keep prescribing meds. They also refuse to accept that a course of antibiotics was the trigger that started me off.</comment></comment></comment>


8 Steps Two CS majors Took to Becoming Powerful Speakers - <AUTHOR> http://bases.stanford.edu/2010/04/07/8-steps-two-cs-majors-took-to-becoming-powerful-speakers/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+stanfordbases+%28StanfordBASES%29&utm_content=Google+Reader <comment><AUTHOR> Copy and paste job since it's down:

from Business Association of Stanford Entrepreneurial Students (BASES) by wesleyleung

As two guys who love to code, we have noticed a not-too-exciting stereotype floating around our fields of study: CS majors are poor speakers who have traded their interpersonal relationship and communication skills for technical expertise. This label is unfortunate because on the whole, CS majors truly do indeed publicly speak worse than those in other fuzzier fields. To break out of this stereotype and reach our full potentials, we decided yesterday to participate in some Speaker Training 101 to improve our public speaking skills, because, to be blunt, CS Majors who speak well do better than CS majors who don't speak well.

Here are some useful tips we took away from the training:

1\. Silence is powerful.

It might sound ironic, but the most powerful speakers are those who can employ pauses in their words. During short bouts of mental hiccups, everyone will want to fill gaps in their speech with the two most spoken words in the English language. Yeah, that's right: "Umm…" or "err…" Avoid these. Be conscious of your umms and errs. See if you can catch yourself in the act and replace them with some thoughtful, contemplative silence. You'll be surprised.

2\. Use your hands.

Using your hands to emphasize key points or to articulate what you need to say is extremely effective. Don't let them hang limp at your sides, hiding uselessly in your pockets, or tucked away behind the podium. You have them for a reason. Be lively and energetic!

3\. Don't touch the podium!

People may not think about this at all, but their natural instinct is to grab whatever is in front of them while they are speaking. On-stage, people will psychologically want to seek some sort of security. Remember that stand-up comedian who kept fiddling with his microphone? Or maybe that nervous speaker who appeared to be humping the podium. Neither took tip #3 into account. Be confident, poised, and keep your hands off the podium!

4\. Listen to your introducer.

As the main event, everyone will naturally have their attention on you. Show some courtesy and give your introducer your undivided attention. The audience will naturally follow you. When the introducer gives you the stage, don't just start speaking and talk over him. Ease your way into your speech and set the pace for your audience. It can be as simple as "Thank you [name] for introducing me tonight…"

5\. Interact with the audience.

Reality check: who are you speaking to? Your audience. They are here to learn from you, so it's best to know your audience and involve them in your speech. For example, this can be accomplished by doing simple tasks such as asking questions — "raise your hand if…" Follow tip #5, and you'll keep the audience refreshed and engaged.

6\. Pull yourself out of a tailspin.

During the speaker training, I choked up during my improv and forgot the name of an organization I was supposed to describe. After five seconds of misery, the name came back to me and I made my recovery by graciously and humorously accepting the fact I made my mistake. Surprisingly, the audience felt that this contributed to the power of the speech. Apparently some speakers even plan out things to fail during their speech so they could similarly pull themselves out of a tailspin. This tactic is supposed to connect the audience to the speaker and create this bond because the speaker becomes more human, down-to-earth, and on the same plane as the audience.

7\. Don't hold back your energy.

For unknown reasons, many equate speaking with less energy to increased technical expertise. That actually doesn't make you look more sophisticated, that just makes you look like a poor speaker. Release that energy and don't hold back! Capture your audience's attention with all the power you have to make your speech more effective.

8\. Critique yourself and have others critique you.

This may seem self-explanatory, but when you are practicing your speech, take turns with others to point out positives and negatives in your speech. When addressing your own negatives, see if your audience agrees with you. Surprisingly, audiences may not notice a lot of your mistakes. What feels like hours of mess-ups on your part are actually unnoticeable seconds for your audience. Keep running drills immediately afterward to incorporate the constructive criticism.

Our public speaking is nowhere near perfect, but we recognize it as a valuable skill to have and hope to improve in it quickly. Try out these small tips, and you'll be surprised at the difference it'll make. Most of the world fears public speaking more than death. Master these tips and you will absolutely amaze. It's the first step to being able to throw an event that will make a 2nd year Stanford GSB student jealous. Ambitious? No problem.

<comment><USER2> That's all good advice, but I don't think it gets to the heart of most speakers' problem, which is simply fear. Clutching the podium, speaking too quickly, blanking - these are all side effects of nervousness. I don't think the solution is as simple as 'stop doing that', controlling unconscious behaviour under pressure is difficult.

Unfortunately I don't know the secret to great public speaking, but I suspect no. 8, practice and critique, should actually be top of the list. It is the only thing I've found which helps.

</comment></comment><comment><USER3> If you're interested in becoming a better speaker you should check out a local chapter of Toast Masters. Despite the name, it's more about speeches than about toasts.

<http://www.toastmasters.org/>

<comment><USER4> I just joined the local chapter at my office in hopes of hedging my technical skills with a better set of social / presentation skills.

The cost to join was about $60 up front and another $30-40 for each six months thereafter.

I have enjoyed all three meetings I've attended thus far. Speaking makes me nervous, so I figure working through it will be good for me.

</comment></comment><comment><USER5> HN'd?

       "Error establishing a database connection"

How do you say slashdotted for HN? :)

<comment><USER6> yeah - it's down for me as well. anyone have a mirror??

</comment></comment><comment><USER7> Powerful speakers? Like, 200W each?

Recognised speakers, perhaps? Famous? Effective? I know it's just a quibble, but it really seems to me that "Powerful" is not the adjective you want here.

That said, I can't read the article, since the site is down, so who knows, maybe Powerful is a really clever pun that I'm not getting.</comment>


Computer error affected WV mine scrutiny - <AUTHOR> http://www.google.com/hostednews/ap/article/ALeqM5jcWTXGVTKM_1CpDr0g42ejESRZPAD9F2I4CG0 <comment><USER2> _The computer programming error did not have an impact on this tragedy,_ … _But it's something we needed to fix, there's no question about it._</comment>


Ajit Pai grilled by lawmakers on why FCC spread "myth" of DDoS attack - <AUTHOR> https://arstechnica.com/tech-policy/2018/08/ajit-pai-must-answer-for-fccs-lies-to-congress-about-ddos-senators-say/ <comment><USER2> These grilling sessions do nothing. The person being interviewed simply gives memorized responses, feigns ignorance, or attempts to pass the blame.

<comment><USER3> Seriously. How many times now has the leadership of Wells Fargo been brought in to get a tongue lashing by Congress? And how many times now have they continued to appear repentant and then go right back to being evil?

<comment><USER4> Sorry, but Wells Fargo isn't evil anymore. I saw their ad that says they're sorry and they're gonna behave now. All good!

<comment><USER5> It's easy to be pessimistic and jaded about this stuff, so thanks for keeping an open mind and for pointing this out. Wells Fargo started in 1852 with good intentions. They were fortunate and experienced exponential growth quickly, and simply lost sight of core values during the chaos of windfall profits stage, finally secumbing to evil sometime during the Spring of 1853. After some overdue self-reflection big changes were put in place, effective Q2 2018.

<comment><USER4> I was actually being sarcastic. To me this is all lip service.

How many executive heads rolled? Went to jail?

<comment><USER5> Yes, I was too. Facebook made has similar advertising which is basically saying: "Listen, things got fucked up, we made lot's of $$$, and we don't really admit fault. If you do happen to blame us however, we think some forgiveness is in order because things are different now and we're all in this together!"

<comment><USER4> Well done, thank you.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> Oh no, they've been _grilled_ \- that'll stop them from ever doing something like that again...

<comment><USER7> From TFA:

> "[T]he IG found that you made a series of misrepresentations to Congress > about the event, which were corrected for the first time in the IG's > Report," the Democrats wrote in their letter to Pai.

> The United States Attorney's Office for the District of Columbia declined to > prosecute anyone at the FCC even though making false statements to Congress > can be punished with fines or imprisonment.

I wonder if further inquiry into this will lead to charges being pressed.

<comment><USER8> I wonder if citizens can prosecute the United States Attorney's Office for the District of Columbia for failing to do their job?

<comment><USER5> If you live in DC it may be worth filing a small-claim to recover damages.

</comment></comment></comment></comment><comment><USER9> There might be a small combination of pills here .. something like a muscle- relaxer plus an anti-psychotic prescription drug .. together they powerfully mute the normal human response to stress, but not so much that the subject does not appear normal, and can speak clearly enough. Then the subject sits there, on camera, sworn in under oath perhaps, and glides through the session with good notes from a hired lawyer.

For an industry measured in the many-billions of dollars, per year for many years.. how many wanna-be Fortune Magazine cover cuties would do that ? lots. This is all conjecture, for the record.. think for yourself

<comment><USER10> Sounds like beta blockers. They're used in cardiac medicine but abused by people wanting to keep calm.

</comment></comment><comment><USER11> So why is it that you can be hit and handcuffed for yelling at a police officer, but you can swindle the entire population of the USA, force sweeping policy on them against their wishes, and send a wave of lies at them to cover your retreat, and all you get is a tongue lashing? I vote execution. I'd say that he has caused damage he can never repair, and it is tantamount to treason. And imagine how many people will choose not to follow in his footsteps of fucking the public, when those steps include a last dance?

Washington needs more corporal punishment.

</comment><comment><USER12> What's the difference between a myth and a lie?

<comment><USER13> a lie is identified as intentional deception. [0]. by definition a lie is incredibly difficult to prove...

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

</comment></comment><comment><USER14> Getting "grilled" doesn't affect anyone one bit whatsoever. It's just another day at the office, you're just sitting in a different room.

</comment><comment><USER15> I thought Pai already gave a response weeks ago.

> I am deeply disappointed that the FCC's former Chief Information Officer > (CIO) [David Bray], who was hired by the prior Administration and is no > longer with the Commission, provided inaccurate information about this > incident to me, my office, Congress, and the American people.

This information is conspicuously absent from the article. Was the statement revoked?

<comment><USER16> ==This information is conspicuously absent from the article.==

Did you read the article? This part seems to answer your question:

"The FCC's lies to Congress were contained in letters Pai sent to lawmakers but were based on the assertions of former FCC CIO David Bray, the IG's report said. Pai has claimed that the IG report proves that he did nothing wrong, but House Democrats want to know exactly when Pai found out that Bray's statements about DDoS attacks were false."

<comment><USER17> Please don't insinuate that someone hasn't read an article. "Did you even read the article? It mentions that" can be shortened to "The article mentions that."

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

<comment><USER16> Removing "even" from that sentence certainly changes the tone if not the intent, but your point is taken.

Did you respond to the original commenter about posting blatant dis- information, as the information requested was in the article?

<comment><USER17> No need, as you provided it.</comment></comment></comment></comment></comment>


SDF makes policy for UFO encounters - <AUTHOR> https://www.japantimes.co.jp/news/2020/09/14/national/japan-defense-ministry-ufo/ <comment><AUTHOR> It's the 1950s all over again</comment>


How tons of ammonium nitrate were stranded in Beirut port for years - <AUTHOR> https://www.cnn.com/2020/08/05/europe/lebanon-russian-ship-blast-intl/index.html <comment><AUTHOR> The office of the Director of Customs wrote six letters requesting removal over several years, but didn't get a response. It looks like the Port Authority was responsible but there may be court orders involved.

We now know how the ammonium nitrate got there — a Russian ship bound for Mozambique which ran out of money and got stranded — but we don't yet know exactly why it was never removed.

<comment><USER2> I guess I don't understand why Lebanon couldn't seize it and resell?

<comment><USER3> From the article, the port officials thought they needed a court order to sell it. And the court system ignored their request for one.

But maybe they were applying to the wrong official, or in the wrong way? For example, maybe they were supposed to have an attorney file a court case, instead of having an agency head send a letter to a judge? I have no idea how Lebanon's law system works.

</comment></comment></comment><comment><USER4> > Maintenance was conducted on the warehouse door just hours before the blast > on Tuesday, he added.

This looks like a key piece of evidence. Warehouse door maintenance could have caused the fire seen at the start of the videos of the incident.

Until more evidence is revealed I think "warehouse with 2750 tons of ammonium nitrate caught fire" is a good hypothesis.

Coulda, shoulda, and speculating about motivations can come later.

</comment><comment><USER5> This material is commonly used in IEDs. Was this depot being used to funnel these materials to supply certain groups?

<comment><USER6> There's no evidence or even speculation (outside of random people guessing) that there was anything terrorism related (I assume that's what you were implying) going on with why it was there.

Just corrupt and/or useless people in the jobs that should have removed this problem from the port a long time ago. No doubt inquiries will go on for some time looking at where the fault lies.

<comment><USER5> This country is known for terrorism, car bombs, assassinations, and broad violence. So this amount of bomb making material sat unused for 6 years with no illicit organizations or groups hearing about it or taking advantage of it? Were regular inventory checks performed on it? What safe guards were in place to prevent the material from leaking into terrorist hands?</comment></comment></comment>


Ask HN: Is there an emulator that could run the code available for Apollo 11 - <AUTHOR> <comment><USER2> Yes: [https://github.com/virtualagc/virtualagc](https://github.com/virtualagc/virtualagc)</comment>


The Stew: Health Department destroys thousands of dollars of local fruit - <AUTHOR> http://leisureblogs.chicagotribune.com/thestew/2010/02/health-department-destroys-thousands-of-dollars-of-local-fruit.html <comment><USER2> "February 05, 2010"</comment>


Smartyparse: dynamic object-oriented binary packing and unpacking in python - <AUTHOR> https://github.com/Muterra/py_smartyparse <comment><AUTHOR> I'm the dev behind this, happy to answer questions. Also, oops, forgot to mark it as Show HN.</comment>


Show HN: HookRSSTube – It's YouTube RSS Except Video Playback Is on HookTube - <AUTHOR> https://hookrsstube.com/index.html <comment><USER2> Sadly, but it not provide correct timestamps for video uploading date.

Lets test it using VATA TV[0] channel

Here is screenshot[1] from SMTube that use Tonvid.com[2] website parsing, so all video publishing dates shown correctly.

And here is screenshot[3] from RSS Guard that use feed from HookRSSTube[4], as you can see there no correct dates for each video publishing date. So, its impossible sort videos list correctly to publishing date.

When I read feed of any project commits history on Github[5], each entry has own date according commit date created - look on "Created on" column on this screenshot[6] from RSS Guard.

Am I missing something?

[0] [https://www.youtube.com/channel/UCa2DyezQaSMK81FbYkHZM_g/vid...](https://www.youtube.com/channel/UCa2DyezQaSMK81FbYkHZM_g/videos)

[1] [http://i.imgur.com/QhTW4H6.png](http://i.imgur.com/QhTW4H6.png)

[2] [http://www.tonvid.com/search.php?channelId=UCa2DyezQaSMK81Fb...](http://www.tonvid.com/search.php?channelId=UCa2DyezQaSMK81FbYkHZM_g&channelTitle=ВАТА+TV&videoDefinition=any&date_filter=any&videoDuration=any&safeSearch=none&videotype=any&order=date)

[3] [http://i.imgur.com/cp0kzOV.png](http://i.imgur.com/cp0kzOV.png)

[4] [https://hookrsstube.com/feeds/videos.xml?channel_id=UCa2Dyez...](https://hookrsstube.com/feeds/videos.xml?channel_id=UCa2DyezQaSMK81FbYkHZM_g)

[5] [https://github.com/martinrotter/rssguard/commits/master.atom](https://github.com/martinrotter/rssguard/commits/master.atom)

[6] [http://i.imgur.com/ab1eetQ.png](http://i.imgur.com/ab1eetQ.png)

<comment><AUTHOR> Thank you for reporting this! Turns out I was using the wrong tag to indicate publication date.

I think the issue is now fixed in production, caching complexities notwithstanding.

</comment></comment><comment><USER2> Nice, would be useful for me in combination with "RSS Guard[0] + youtube-dl[1] + mpv[2]", as alternative to "SMTube[3] + youtube-dl + mpv".

[0] [https://github.com/martinrotter/rssguard](https://github.com/martinrotter/rssguard)

[1] [https://rg3.github.io/youtube-dl/](https://rg3.github.io/youtube-dl/)

[2] [https://github.com/mpv-player/mpv](https://github.com/mpv-player/mpv)

[3] [http://www.smtube.org/](http://www.smtube.org/)

</comment><comment><USER3> I'd just like to thank you for building something like this! As someone who uses Youtube rss feeds and also likes Hooktube, this is something I've been needing for a while.</comment>


Everybody thinks about garbage collection the wrong way (2010) - <AUTHOR> http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx <comment><USER2> BTW, it's not unheard of for short-lived command line utilities or multiprocess apps to literally run with the null garbage collector. They just never free memory and deliberately leak it until they exit, at which point the OS cleans it up. If you expect total RAM requirements to be a few hundred K on a multi-G system, this is completely reasonable, and faster than either manual or automatic memory management to boot.

The analog in a long-running program is an arena: it keeps allocating memory indefinitely, and then frees it all in one clump when the program is done with that phase of operation.

Multi-process languages like Erlang sometimes use this approach as a degenerate case of a stop & copy garbage collector. They start a process with a young generation heap sized large enough to contain all the memory the process will ever allocate (you can get reasonable estimates on this from previous runs), and so the GC never triggers and all the memory is freed in one block when the process terminates.

<comment><USER3> > They just never free memory and deliberately leak it until they exit

Which is a _great_ way to kill that process, or arbitrary processes, when a previously well-behaved program is run on a system that's a bit strapped for RAM at the moment, or run on a somewhat larger-than-usual input, or both.

That, or bring the system to a standstill as the swapping subsystem flogs the disk nonstop.

Possibly first one, and then the other.

<comment><USER2> For a lot of these simple command-line utilities, it wouldn't matter anyway. They often work by building up some data structure that's then used to process the rest of the input line-by-line, and then the program exits. If the data structure is never freed, so what? It's needed until the end of execution anyway.

Think of compiled regular expressions for grep, or total counts for wc, or a rotating line buffer for tail, or the previous line for uniq.

It's quite possible to get pathological behavior even with GC or careful RAII, as anyone who's ever leaked memory in a Java program could tell you. Simulating a computer with infinite memory breaks down when the working set you're touching exceeds the physical RAM of the machine. Actually, leaking memory is the least of your concerns in that case, as leaked memory just gets paged out and doesn't cause any problems unless it exceeds the computer's _address space_.

<comment><USER4> Actually, with tail -f that could become a problem.

<comment><USER5> I don't see how it could. Tail doesn't use more memory as it reads more lines. It sets up a fixed-size buffer and then continually re-uses it. Yes, "tail -f" could be a long-running process, but its memory usage should remain constant over its entire lifetime.

</comment></comment></comment></comment></comment><comment><USER6> In case someone missed it, this is more about releasing external resources than GC per se. (There is an interesting analogy of how GC simulates a machine with infinite memory).

> but there are things you can do even if you have infinite memory that have > visible effects on other programs

Moreover there are things you can do even without having these external resources that will mess up your program and that is just running the GC in a highly concurrent application. Except for systems with separate per/thread/actor heaps, when memory is allocated vigorously GC runs will start to affect your latency and parts of the program will get blocked and frozen.

As for releasing resources. In vital systems it is important to run watchdogs that release resources on behalf of a the main applications. Sometimes processes crash hard, segfault, and may not run their own finalizes. So these resource lists might have to be sent to a watchdog process whose only job is to monitor for the original program crashing and then releasing these resources.

</comment><comment><USER7> >Garbage collection is simulating a computer with an infinite amount of memory

I think he means "infinite amount of virtual memory". Virtual memory already tries to "simulate a computer with an infinite amount of (random access) memory". This makes me wonder if virtual memory can be used as a poor man's garbage collector?

<comment><USER8> Virtual memory can be used as "poor man's GC" only with languages with a variable number of bits in pointers (references). If you have a fixed number of bits in your pointers, like in C & C++, then you will run out of _addresses_ eventually, even with virtual memory.

<comment><USER7> Yup! Virtual memory as a poor man's GC seems to be viable for short lived programs with modest virtual memory requirements. I seem to recall Walter Bright using something along the same lines to replace malloc/free in the D compiler code. It lead to a significant improvement in performance.

</comment></comment></comment><comment><USER9> I didn't quite grok the concept of GC as simulating infinite memory. After some research I ended up at, what else, SICP ([http://mitpress.mit.edu/sicp/full- text/sicp/book/node119.htm...](http://mitpress.mit.edu/sicp/full- text/sicp/book/node119.html)) with an explanation. Hope this helps someone else.

>The representation method outlined in section [[http://mitpress.mit.edu/sicp/full- text/sicp/book/node118.htm...](http://mitpress.mit.edu/sicp/full- text/sicp/book/node118.html#sec:memory-as-vectors)] solves the problem of implementing list structure, provided that we have an infinite amount of memory. With a real computer we will eventually run out of free space in which to construct new pairs.[[http://mitpress.mit.edu/sicp/full- text/sicp/book/footnode.ht...](http://mitpress.mit.edu/sicp/full- text/sicp/book/footnode.html#foot27912)] However, most of the pairs generated in a typical computation are used only to hold intermediate results. After these results are accessed, the pairs are no longer needed--they are garbage. For instance, the computation

(accumulate + 0 (filter odd? (enumerate-interval 0 n)))

constructs two lists: the enumeration and the result of filtering the enumeration. When the accumulation is complete, these lists are no longer needed, and the allocated memory can be reclaimed. If we can arrange to collect all the garbage periodically, and if this turns out to recycle memory at about the same rate at which we construct new pairs, we will have preserved the illusion that there is an infinite amount of memory.

</comment><comment><USER10> >If the amount of RAM available to the runtime is greater than the amount of memory required by a program, then a memory manager which employs the null garbage collector (which never collects anything) is a valid memory manager.

A bit of a tangent, but I wonder GC is one reason Android devices moved to larger RAM sizes faster than iOS did. (iPhone 5 == 1GB, GS3/N4/One == 2GB.)

Under manual memory management or refcounting, running with RAM 90% full isn't slower than 50% full. (Your app code isn't slower, at least; who knows it if has effects via OS having less for cache or whatever.) But under GC, if 90% of RAM is full of live objects, you'll be forced to GC several times as often as you would if only 50% of RAM were full. So that 1GB->2GB bump might actually _more_ than halve how often you have to collect.

There could be other reasons for the diff--maybe part of it is Android's more permissive multitasking model, maybe non-GC-related memory-use differences between Android/Java and iOS/ObjC, maybe greater focus on power consumption from Apple or greater focus on specs from Android handset makers.

</comment><comment><USER11> This article got me thinking - I use quite a lot of C/C++ python extensions, and I'm wondering if I could wrap some of my malloc calls (particularly the ones that store an "inner C++ object" on a python class) as python byte strings that are then pointer-cast to RAM for C++ to use, and then tidied up by the garbage collector rather than a manual delete call later.

The only difficulty I can see is persuading the C++ constructor to run on an arbitrary address?

<comment><USER12> You can persuade the C++ constructor to run on an arbitrary address trivially with "placement-new". See here [https://en.wikipedia.org/wiki/Placement_syntax](https://en.wikipedia.org/wiki/Placement_syntax) . In short, you can do:

        void* mem;
        ... snip ...
        MyClass* thing = new (mem) MyClass;

And that doesn't allocate memory, but calls the constructor on the mem pointer. You are responsible for having allocated enough memory. You cannot call delete normally on this object though. You'll need to call the destructor manually as such:

        thing->~MyClass();

before the memory is deallocated. If the destructor doesn't actually do anything, you can safely skip this.

<comment><USER11> Thanks, that's very helpful!

I am blissfully unaware of almost all C++ specific syntax beyond basic class definitions, as I use it to add the odd syntactic construct to C (like operator overloads for + etc for my math 2- and 3-vectors) so I had no idea of this.

<comment><USER12> If you want to learn more, I'd suggest at first reading (or at least skimming) Bjarne Stroustrup's "The C++ programming language".

Also, the C++ FAQ [http://www.parashift.com/c++-faq/](http://www.parashift.com/c++-faq/) is useful for getting an overview on the corner cases of C++.

After which you should visit its inverse, the C++ FQA (frequently questioned answers, i.e. an anti-C++ answer to the FAQ) [http://www.yosefk.com/c++fqa/](http://www.yosefk.com/c++fqa/) to learn why no-one in their right mind would ever use C++.

That won't teach you C++ per se, but would give you a useful look at the breadth of the language and how and why things happen the way they do.

<comment><USER11> Thanks. I have got a copy of a Stroustrup on my shelf (I think it's a standard library reference, not the language definition) and I've been developing in "C with classes" for a while, so I've discovered quite a few of the pitfalls. I prefer to let clang++ point out when I stumble across something insane, like:

        vector<vector<T>>  // wrong, uses a >> operator?!
        vector<vector<T> > // compiles correctly.

In some ways I prefer what Objective C did, as a proper superset, and in others I'm drawn to projects like Cello[1]. I'm happy with using (and knowing only) a very small set of C++ features, especially where they're useful for defining simple algebras for objects! I'm sure I'll find another feature I like one day - this one (GGP) may be one of them.

There is one OSS project I know that I never want to emulate: the code literally fails to compile via the python installer until you have run the makefile at least once, by which time it's finished generating all the header files. Whiskey Tango Foxtrot!

[1] [https://github.com/orangeduck/libCello](https://github.com/orangeduck/libCello)

</comment></comment></comment></comment></comment><comment><USER13> Question to people who have used finalizers in GC languages: can you describe what you used them for?

<comment><USER14> If you call out to a C-style library through the FFI that's expecting a cleanup call, you should call it in both a user-accessible close() function and the finalizer.

I think the easiest way to think about it is, "finalizers don't prevent handle leaks, they sometimes clean up a handle leak that already happened".

I'm not sure if any debugger environments give a warning when a finalizer gets run due to GC but they ought to--it always indicates a programmer error.

</comment></comment><comment><USER15> The argument seems logical as far as it goes. But having a piece of code which may or not run seems to introduce inherently greater mental complications into the programming process.

<comment><USER16> The key point is that finalize() is not reliable, so you shouldn't depend on it. The correct idiom is more or less

      myResource = foo();
      try {
         ...
      } finally {
         myResource.release();
      }

Some programmers (although I've never met one) try to avoid this boilerplate by writing a finalize() method on myResource that releases it. It's an anti- pattern. C# and Java have syntactic sugar now that makes the boilerplate shorter, which should help.</comment></comment>


Gunther, Christine and Otto (2014) - <AUTHOR> http://www.bbc.co.uk/news/special/2014/newsspec_8703/index.html

<comment><USER2> His car did 800,000+ km with the same engine and transmission? That's possible?!

<comment><USER3> My understanding that it is the old G-class which is slightly civilized, if any, of the German military jeep. Like these old Land Rovers we watch in old documentaries, only even more sturdy.

By the way the car has "300 GD" visible on the photo - inline non-turbo diesel. 1M km isn't unheard of for it.

<comment><USER2> This has a claim of 1.9 million km in a 2006 Silverado with original engine and transmission. [1] Honestly I'm less surprised about an engine going that distance than the transmission, it has so many moving parts.

[http://www.theautonet.com/en/2014/02/28/10-cars-that-have- tr...](http://www.theautonet.com/en/2014/02/28/10-cars-that-have-traveled- over-15-million-miles)

</comment></comment></comment><comment><USER4> Instapaper Text Link, if the site doesn't scroll for you: [https://www.instapaper.com/text?u=http%3A%2F%2Fwww.bbc.co.uk...](https://www.instapaper.com/text?u=http%3A%2F%2Fwww.bbc.co.uk%2Fnews%2Fspecial%2F2014%2Fnewsspec_8703%2Findex.html)

</comment><comment><USER5> Anyone else having random scroll issues on Android phones with this article? It's just jumping around randomly once I got a little further down.

</comment><comment><USER6> Interesting that the article fails to call this form of travel for what it is: overlanding.

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

> Overlanding is self-reliant overland travel to remote destinations where the > journey is the principal goal.

<comment><USER7> "A good traveler has no fixed plans and is not intent upon arriving." Laozi ([https://en.wikiquote.org/wiki/Laozi](https://en.wikiquote.org/wiki/Laozi))</comment></comment>


Open Source IDE for FPGAs as QtCreator Learns Verilog - <AUTHOR> https://hackaday.com/2018/12/29/open-source-ide-for-fpgas-as-qtcreator-learns-verilog/ <comment><USER2> I don't do FPGA, but I thought the issue was the vendor lock in and lack of open source tooling (Synthesis?) rather than IDEs alone?

<comment><USER3> That's still the case, but open-source tools are useful for simulation, and there are synthesis tools for the Lattice iCE40 family: [http://www.clifford.at/icestorm/](http://www.clifford.at/icestorm/)

<comment><USER4> FOSS simulators are almost totally useless; they can't handle mixed languages, they can't work with encrypted RTL (found in various Xilinx IP), and ones like Verilator are cycle simulators that don't even handle testbench code.

There's a very, very narrow niche where FOSS simulations are useful, and I'd wholly recommend against wasting your time with them.

<comment><USER5> Lots of people use Verilator in production, as far as I can tell.

But sure, if your upstream tooling produces DRM blobs instead of actual RTL, then your software has to implement those DRM mechanisms to use it; but that's more to do with your specific industry than with anything else.

Your hyperbole is already confusing newcomers, I'd dial it back a bit.

<comment><USER4> I don't know that it's hyperbole - Verilator is a huge leap for a newcomer. We're going to take someone who is just getting into Verilog, and add C/C++, makefiles, then we're going to add the problems you've got with a cycle simulator (testbench code won't work) - we have to explain what a delta cycle is, and the most popular tutorials online (ZipCPU's Verilator blogs) mention using a delta-cycle simulator (like Icarus) just to check that you're getting what you expect.

It's frustrating that people keep suggesting FOSS tools when they're either orders of magnitude more complex, not very good in a huge number of cases, require an experienced engineer to actually use, and can't simulate simple Xilinx IP.

People think they're familiar with it because they looked up "FOSS Verilog Simulator" once because they were curious, but they can't actually tell you about these things. We should direct newcomers to Xilinx Vivado, getting started with ISim, and if they're far more sophisticated _and_ have a handle on the language already, then move them to Verilator _in certain cases_.

But starting with Verilator would be like saying, "Just write a C compiler in assembly, then start using that C compiler." \- Nobody starts there!

<comment><USER5> The first time I tried to set up Xilinx Vivado, Xilinx swallowed my license and didn't provide a board definition for my Zynq (for which the license applied); when I tried contacting them, they couldn't help me work it out.

Maybe it's possible to direct newcomers to Xilinx Vivado, and I agree that they're more likely to be productive that way, but there's also a good chance their investment will go up in smoke and they will have no way to debug that. It's not as though the thing is "easier" in every way than using any of the public simulation tools, and it sure as hell costs more when it goes wrong.

<comment><USER4> Board definition files don't do a license check, only bitstream generation does - so it wasn't a license issue. But let's examine this more closely:

[https://www.xilinx.com/products/design- tools/vivado/vivado-w...](https://www.xilinx.com/products/design- tools/vivado/vivado-webpack.html#architecture)

The largest supported Zynq-7000 with the (free) Webpack is the XC7Z030.

The $900 ZC702 has a XC7Z020 on it, which is a Webpack part (no part license needed), so you probably bought the $2500 ZC706 (which contains a XC7Z045 part)?

So you bought a ~$2500 board, and the license was successfully applied, but you couldn't get the board definition file to work (a part that has no license checks...) now you're claiming that the investment would be "up in smoke" for a newcomer?

Honestly this sounds like user error; Create New Project -> Enter name and location of Project -> Type of Project (Select RTL, fine) -> Click on BOARDS and select your board -> Finish.

Now when you use something like IP Integrator, the board presets should be available. If you're still having trouble with it, I can walk you through it with screenshots if you'd like, but there are also tutorials and videos from Xilinx that go over "Creating your first project", they're a great way to get started; try this: ZC706 Getting Started Guide (includes screenshots of not only the hardware, but every step):

[https://www.xilinx.com/support/documentation/boards_and_kits...](https://www.xilinx.com/support/documentation/boards_and_kits/zc706/2014_4/ug961-zc706-GSG.pdf)

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> Sorry, the example image is using non-blocking statements. I'm out.

On a more serious note, I'm not sure what this offers me beyond the SystemVerilog plugin for sublime-text. This may be a great tool for exclusively open source developers, but in reality I think most people are using free versions of proprietary tools (Quartus, ISE) and you can't really do much integration with those.

<comment><USER7> = are blocking assignments, and they're what you're supposed to use in a combinatorial always block. Are you thinking of non-blocking <= used to assign to a dff?</comment></comment>


The Common Lisp Cookbook - <AUTHOR> https://lispcookbook.github.io/cl-cookbook/ <comment><USER2> For a more modern and up to date guide, Edi Weitz's "Common Lisp Recipes" is a great reference: [https://www.amazon.com/Common-Lisp-Recipes-Problem- Solution-...](https://www.amazon.com/Common-Lisp-Recipes-Problem-Solution- Approach-ebook/dp/B01JFTONBS/ref=mt_kindle?_encoding=UTF8&me=)

The more I use Common Lisp, the more disappointed I am that it hasn't become more popular. It really is higher level than Python, Ruby, or Perl but with nearly the performance of C and C++.

<comment><USER3> As someone currently learning CL, I think part of the reason it doesn't have widr adoption is that there is a huge number of features.

Consider a language like Python. Aggressive duck typing means consistent syntax for different data structures and types. Stuff "just works" without a deep understanding of _how_ it works.

CL is the opposite. What is the difference between setp, setf, defvar, and defparameter? Why is the documentation so technical and dense? What is a "form"? What are multiple return values and how do I get to them? Should I spend time learning the loop macro DSL?

I find it similar to Haskell in this regard. The base level of knowledge to use the language is so high that you pretty much need a book, or a degree, to be able to get started. That's a huge barrier to entry.

<comment><USER4> > _Stuff "just works" without a deep understanding of how it works._

> _The base level of knowledge to use the language is so high that you pretty > much need a book (...) to be able to get started._

I wonder what that says about developers these days.

Ever since I started 'till this very day, it was obvious for me that if you want to learn something, you go pick a _book_ about it. Books aren't scary. They have one of the highest knowledge-transfer-to-time ratios out of any sources you could find; they easily beat videotutorials and text tutorials. Most programming books I've read are also quite pleasant and easy to follow (better than some novels I've read...).

Are people _scared_ of books these days?

I mean, I accept that the power of a tool can be a limiting factor to adoption, but I'm deeply saddened by it. Learning and understanding things isn't hard.

\--

> _CL is the opposite. What is the difference between setp, setf, defvar, and > defparameter? Why is the documentation so technical and dense? What is a > "form"? What are multiple return values and how do I get to them? Should I > spend time learning the loop macro DSL?_

The answer to that is simple: go and read _a book_ :). _Practical Common Lisp_ is available on-line for free, and it's a current best introductionary book for CL.

[http://www.gigamonkeys.com/book/](http://www.gigamonkeys.com/book/)

<comment><USER5> I think most people learned programming by doing stuff, not by reading books. Basic, Bash, Perl, PHP, Javascript all agree with me...

<comment><USER4> You can't learn programming _without_ doing stuff, but to understand _what_ you're doing, you need to learn some facts - and books have one of the best, if not the best, ratios of learning to time spent.

(In fact I'd be worried to work with programmers who didn't back their experience in their primary language(s) with at least one solid book.)

<comment><USER5> Yeah, but you're talking about good programmers.

Do you really think that all the others really read books? :)

</comment></comment></comment></comment></comment></comment><comment><USER6> Oh hai Hacker News!

vindarel on Github has been doing an _enormous_ amount of contributions in the past two weeks, and the modern look and feel (and some of the more modern content bits) are _entirely_ due to their hard work.

eudoxia0 spent some time prior to that converting it and getting it modernized.

I'd like to congratulate them on their work, since we're on the front page of HN.

(I sort of steward the GH fork of the cookbook these days).

</comment><comment><USER7> A Standard. One thing that has not been mentioned here. The lisp community came together and created a standard.

I maintain code from the 1980, part of which is in Common Lisp and part of which is in C. The C code breaks. The latest failure seems to be caused by the GCC compiler changing the semantics of 'inline'. The include files differ between platforms.

The Lisp code just runs.

There are no arguments like Python 2.7 vs Python 3.x. No arguments about C++11 vs C++14. No arguments about Clojure from 4 years ago and Clojure today. No arguments about any of that.

There is a standard. ONE standard. It only matters when you have to maintain someone else's legacy code. But it really matters.

<comment><USER8> Well, amongst Lispers we do argument a lot about the missing or overarchitectured bits. The ffi, threads, the conditions system, the MOP, ... But only the various FFI's pose a minor problem. It's complaining on a very high level.

<comment><USER7> Probably the most difficult area in the CL standard is handling pathnames. There are so many possible pitfalls. FFI is an area that, despite best efforts, is likely not a good candidate for inclusion in a standard. It would be better to have all of the implementations converge on a convention since the underlying foreign systems will change over time. Not everything that "just works" has to be in a standard.

C++ issues a "new standard" every 3 years or so which is just nonsense. Even Stroustrop said that the "new C++" is not the "old C++". They are adding ideas (e.g. Concepts) that virtually no one is asking for or knows how to use. Ten years from now that C++ maintenance job you have will be a nightmare. PL/I tried to be everything to everyone for every task and eventually disappeared. C++ is on the same long-term death march. You heard it here first.

</comment></comment></comment><comment><USER9> Started looking at getting into Racket and CL after reading up on lisp and there is something about it that really bugs me, in a good way. Sadly the train seems to have left the station regarding positions where you use lisp where I live. All is java and C-flavors.

<comment><USER4> > _All is java_

Possible tip: sneak in ABCL when they're not looking. ABCL is a Common Lisp implementation for JVM, with (what seems like) relatively OK interop between Lisp and Java code.

<comment><USER10> why would one do that instead of using clojure?

<comment><USER4> Because as 'klibertp wrote, they're two vastly different languages, with different design decisions.

The whole thread is about primarily Common Lisp; people who enjoy the design choices made by the CL standardization committee and subsequent evolution of the language's ecosystem would most likely want to know that there exists a proper CL implementation for JVM.

<comment><USER10> but the person i replied to replied to a commenter lamenting the fact that there was nothing but java and c style development jobs instead of lisp inspired jobs. they weren't lamenting the lack of jobs specific to just common lisp. and to me, it doesn't make sense to "sneak in" an esoteric implementation of lisp on the jvm when clojure already exists. what makes people think that would be easier to sell at a place using java heavily?

<comment><USER4> I wouldn't call ABCL esoteric; it's as rightful JVM citizen as Clojure or Scala. That said, I agree it's _much, much_ less popular in the JVM world, so it could be a harder sell.

</comment></comment></comment></comment></comment></comment><comment><USER11> Hi, don't mean to interrupt anyone, just wanted to ask: why hasn't anyone made the common lisp hyperspec a prettier, more navigable and tooling friendly yet?

<comment><USER12> The license doesn't allow that.

Yes, that's dumb.

<comment><USER13> See the CL UltraSpec for work in progress:

[http://phoe.tymoon.eu/clus/doku.php](http://phoe.tymoon.eu/clus/doku.php)

It's based on the last pre-ANSI CL standard sources.

</comment></comment></comment><comment><USER14> I've never ventured into a lisp like language. Would you recommend starting with common lisp or is jumping into clojure ok?

I have been in the JS, Java, Python world for a while and this looks like a language that could stretch my brain a little bit.

<comment><USER15> If you want your brain stretched, I recommend Common Lisp.

The #1 issue for folks in my experience had been getting an environment set up. Emacs, SLIME, encodings, paredit, ... . It's a big barrier to entry.

<comment><USER4> I agree (I know I had my issues with Emacs and SLIME when I started; being on Windows didn't particularly help).

That said, for people who want to start with CL now, I'd recommend grabbing [https://shinmera.github.io/portacle/](https://shinmera.github.io/portacle/). It's a portable Lisp IDE based off a pre-configured Emacs + SLIME + SBCL + Quicklisp + Git combo. I can confirm that it Just Works, out of the box.

<comment><USER16> Portacle is a great project. My concern with it as a recommendation is that Lispbox was a great project too, until it wasn't...or rather that the enthusiasm of the maintainers of easy to use Common Lisp projects seems likely to be shorter lived than Common Lisp (though perhaps Github may make this less a potential problem). The fact that people get paid to improve and maintain the Racket ecosystem as part of their day jobs in academia is one of the reasons I recommend it for 'how should I start exploring Lisp' (versus learning Common Lisp).

[https://common-lisp.net/project/lispbox/](https://common- lisp.net/project/lispbox/)

<comment><USER4> > _the enthusiasm of the maintainers of easy to use Common Lisp projects seems > likely to be shorter lived than Common Lisp_

Not surprising, given that Common Lisp itself is pretty much immortal compared to the typical lifetime of things in our industry :).

That said, I know what you mean. I started with Lispbox years ago, and it was already feeling its age back then. I agree with your observation. Sadly, the commercial CL scene seems pretty weak - the two big players (Franz and LispWorks) seem to mostly keep to themselves and focus on the commercial tools they offer.

<comment><USER16> One of the 'legacy' features of the Common Lisp community is that it is socially acceptable to charge $2000 per year per seat for software. Though it is not something that I personally have a problem with, my view that paying for software is ok is not all that mainstream these days (imagine paying for a web browser).

What I like about Common Lisp is that it is not in flux and so when I Google up a question, the information I get may be ten years old but it is highly likely to be correct. The price is that the format of the information may be more like a technical textbook than a blog or a StackOverflow answer.</comment></comment></comment></comment></comment></comment>


Samba versus SMB: Adversarial interoperability is judo for network effects - <AUTHOR> https://boingboing.net/2019/07/18/kill-zones-r-us.html <comment><USER2> So we've now got legal weapons against any changes: Terms of Service, software patents, the anti-circumvention part of the DMCA, stronger "Intellectual Property" laws world-wide, etc etc.

I see this as part of an effort by society to lock down change, to make the current socio-economic order static, to keep the winners from becoming losers, and vice versa. I'm not entirely sure what's causing this reaction, other than a general fear of change.

<comment><USER3> People are free to enter contracts stipulating just about anything. Society may decide that certain terms are unconscionable, or that certain circumstances can't lead to a valid contract, but it's generally a "default allow" policy. Contracts being enforceable in the technology realm doesn't mean there's an "effort by society" to do anything; it would take effort to make them unenforceable.

The intellectual property system is explicitly provided for in the Constitution; it's not a "reaction" to anything recent. Though I do think the shape of its application to software and digital media comes from impartial parties not having a good understanding, and competent parties being motivated to protect their interests.

<comment><USER2> The intellectual property system in the USA has grown well beyond the constitutional motivation of increasing the public domain. Giving a copyright for life + 70 years hardly gives anyone the motivation to increase the size of the public domain, but it does give them the motivation to game the system to PREVENT CHANGE.

</comment></comment></comment><comment><USER4> On the software patents front: the only winner here are the pockets of lawyers. Large tech companies are all in a state of constant litigation, and nowadays filing patents defensively is pretty standard in tech.

I absolutely loathe where we're at with software patents, but I have absolutely zero faith it will ever be fixed, so I guess anyone without billions to acquire a patent portfolio will just have to forget it.

</comment><comment><USER5> A brief history of Samba, but pretty accurate for all that ! Of course, the devil was in the details (and in the EU anti-trust case), but that's a story for another era :-).

</comment><comment><USER6> This doesn't even make sense... both S3 and Azure Blob have been reverse engineered by countless companies - no lawsuits in sight.

<comment><USER7> You mean this S3? [https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html](https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html)

<comment><USER6> Yes, I do mean that S3. The one with a link on how to utilize their API as a CLIENT. Notice it lacks any source code for setting up an S3 SERVER of any sort, which is why companies have had to reverse engineer it.

It's also why anytime a third party says they support S3 - you have to ask EXACTLY what they support. I've yet to run into anybody claiming to be 100% compatible as the "standard" is constantly changing.

</comment></comment></comment><comment><USER8> I remember setting up Samba on a Debian file server in about 2007. (It was my first experience with Linux!) Ironically, all of the computers networked with the server were Macs.

</comment><comment><USER9> TIL: Samba and SMB are not the same thing.

This is why setting up your network shares by copy-pasting commands you found on a StackOverflow page and tweaking them until they work is a bad idea.

<comment><USER10> Go on..

<comment><USER11>
       # SMB1 Mac OS X 10.5.8
          ntlm auth = yes

I should probably just switch to NFS.

<comment><USER12> Yeah so your whole system can freeze when something goes wrong. If the server is down, so is the umount command.

<comment><USER13> Even with the soft option?

</comment></comment></comment></comment></comment><comment><USER14> Aaah.. SAMBA :D

I read the samba hacker guide and how they had reverse-engineered the protocols over the years. MS Windows is not even compatible with ITSELF ffs lol ;D

<comment><USER5> That was then but this is now :-). Microsoft now employ Samba Team members, fully document all the protocols used by Windows and help other vendors implement them.

This is not your father's Microsoft :-).

<comment><USER15> I'll bite.

How is it then possible that Windows10/Samba interop is more problematic as in my father's times? Unless there was a domain, it worked pretty much out of the box before.

Now: [https://serverfault.com/search?q=samba+windows+10](https://serverfault.com/search?q=samba+windows+10)

<comment><USER5> It certainly isn't more problematic. You should see the volume of complaints we _used_ to get :-).

A lot of the issues are usually around authentication and user mapping. Kerberos is complex, and Unix people don't understand Active Directory. That's usually the core of it. Once you get a connection things mostly just work (except for Windows ACLs, for which I blame the Linux kernel developers who refuse to add Andreas Grunbachers RichACL patch set for ideological reasons).

Sadly enough, if you want ACLs to "just work" on Linux you have to use a license-incompatible ZFS backend for which Samba has native ACL support. Or just use ZFS-on-FreeBSD where the license isn't a problem.

It's one Linux filesystem developer in particular who is blocking the RichACL patch, who is known to be,... shall we say... "difficult" ?

<comment><USER16> Samba stores the ACLS in xattrs right? So they only problem is that they're not applied locally on the host?

</comment></comment></comment></comment></comment><comment><USER17> Samba is a terrible piece of software, and under GPLv3 to boot. Combined, this is why no real vendors use it, only the poor.

Further, it is laughable that the DMCA would apply to SMB.

<comment><USER5> Sorry to burst your bubble, but Google and IBM are both Samba users. As is Nutanix, Panzura and a whole host of on-prem -> Cloud gateway companies.

You have a strange definition of poor :-).

<comment><USER18> Do you mean for file sharing or as a directory server? File sharing I can definitely understand but I'm more skeptical about the directory server functionality.

Big companies have the resources to do many weird things but it would still strike me as odd to be running Samba DS in production.

How far along is the directory server these days in terms of stability and features?

<comment><USER19> Hmm what is the modern file sharing thing that we are supposed to use that is not Samba? if I wanted to share some directories on my LAN that can be browsed/read/written to by non-technical users without extra software what is the right thing to use these days?

<comment><USER5> Why are you not supposed to use Samba ? Samba works great as an SMB 2/3+ file server. Both Mac's and Windows use SMB3 as their native file sharing protocol, and Microsoft employ the cifsfs (SMB3+) linux kernel client maintainer.

It's just easier to keep using SMB3 :-).</comment></comment></comment></comment></comment>


Echodio (YC W09) Lets You Sync Your iTunes To The Cloud (300 Invites) - <AUTHOR> http://www.techcrunch.com/2009/03/17/echodio-lets-you-sync-your-itunes-to-the-cloud-300-invites/

<comment><USER2> Stellar - Every two or three months I look around for something that will manage the four macs that I have of various ages with very much out of sync iTunes music lists on my systems. From the sounds of it - Echodio is that utility. I was _certainly_ willing to pay a substantial amount of money for something that would do this - the fact that it is free is mindblowing. Charge me money! This solves my foremost problem with iTunes on multiple computers. Thanks Tons!

This solves the "HAIR on Fire" problem in an incredibly simple manner. Looking forward to seeing how you monetize it. (Premium accounts? Direct MP3 purchases into our Echodio accounts - whatever, I'm sure you will be madly, madly successful)

Ironically - I don't know if I'll ever use the "Stream from Web" feature, but it's nice to know it's there if I need it.

</comment><comment><USER3> Congrats! However, Seems somewhat similar to ZumoDrive.

<comment><USER4> Yes, good job! It makes sense if this is a basic package and the company plans to scale in the future, but if not then it is hard to distinguish between all of the "offline your files" products. What's worse is if there is convergence (e.g. DropBox expands into the domain of web plugins in order to view/play files anywhere you are).

</comment></comment><comment><USER5> I'm curious (and this is not a rant), what is the logic behind releasing a mac-only client right at the start?

<comment><USER6> No real inside knowledge, but...

If I was building an app, I'd do Mac-only first if I had to choose one. Every major blogger is a Mac user, so you get your initial coverage. Then, when you release a Windows version, it's a legitimate process story (since most people are on Windows), and you can get another round of free media.

There may or may not be technical reasons for it, but purely from a free media standpoint, it strikes me as the right strategy.

<comment><USER7> Yes but will techcrunch and the other blogger really cover your startup again just for the new windows version?

I wonder if they shouldn't have had a soft launch on HN first and then a bit later once the webplayer is available launch on techcrunch...

On this subject I found [http://startuplessonslearned.blogspot.com/2009/03/dont- launc...](http://startuplessonslearned.blogspot.com/2009/03/dont-launch.html) very interesting... It's from this article that I decided that maybe a soft launch on HN before a real launch on techcrunch and the like is better</comment></comment></comment>


Show HN: An opinionated template for building browser extensions with scala-JS - <AUTHOR> https://github.com/AlexITC/chrome-scalajs-template <comment><AUTHOR> After working a bit with extensions, I noticed some tricky details, this opinionated template can help you to get started easily to build browser extensions without thinking much about the architecture.

It is far from perfect but it's a good starting point for people getting into browser extensions, I hope it helps, feedback welcome.</comment>


The Nano Hummingbird: Even James Bond Would Be Jealous - <AUTHOR> http://www.asb.tv/blog/2011/03/nano-hummingbird-drone/ <comment><USER2> This post is painfully scarce on any real details and doesn't provide a link to a video of it in action, substituting quality for a joke image. If I could downvote, I would. Instead I'll just provide some alternate resources:

 __Video of Nano Hummingbird __:<http://www.youtube.com/watch?v=96WePgcg37I>

 __Nano Hummingbird on AeroVironment, Inc's (the creator's) website __:<http://www.avinc.com/nano>

 __An Engadget post on the thing (also lacking many expository details) __:[http://www.engadget.com/2011/02/18/darpa-funded-nano- humming...](http://www.engadget.com/2011/02/18/darpa-funded-nano-hummingbird- spybot-takes-flight-video/)

 __A Kurzweilai.net post on it (not many details here either) __:<http://www.kurzweilai.net/nano-hummingbird-uav>

<comment><USER3> _"If I could downvote, I would."_

Flagging stories is the effective downvote. It reduces how long they stay on the front page, even if the story doesn't get killed.

<comment><USER2> Thank you for the information, sir.

</comment></comment></comment><comment><USER4> Should point to <http://www.gizmag.com/aerovironment-nano-hummingbird/17918/> which was even credited in the OP but has more pictures.

</comment><comment><USER5> The original video: <http://www.youtube.com/watch?v=96WePgcg37I>

</comment><comment><USER6> Psh, looks so fake. How hard is it to put little feathers on that thing?

</comment><comment><USER7> yeah but how do we buy one? nerdy questions: what frequency is the video transmitting? protocols? can I bittorrent off of it? ;-)</comment>


Departure - <AUTHOR> http://asymmetrical-view.com/2009/07/19/departure.html

<comment><USER2> yeah kyle that email rocked -- all the best at algorithmics

<comment><AUTHOR> Thank you Nik, you were one of the people who inspired it (and thanks for the applause, unprecedented).</comment></comment>