Yo platform as a Launch Pad: Moto 360 launch or bad joke? - <AUTHOR> https://medium.com/@YoAppStatus/yo-platform-as-a-launch-pad-73d740b6873c

<comment><USER2> Worth noting that Yo did a similar marketing stunt last week...which had absolutely no impact: [http://valleywag.gawker.com/gimmick-app-yo-offered- gimmick-c...](http://valleywag.gawker.com/gimmick-app-yo-offered-gimmick-car- service-and-no-one-1625237703)

My theory is that Yo is milking its $1.5M seed money for counterintuitive marketing deals. The problem is that negotiating and completing marketing campaigns takes time, and Yo's 15 minutes of fame expired before then.</comment>


Ask HN: What are the best guides/resources for implementing Undo/Redo in an app? - <AUTHOR> <comment><USER2> Game Programming Patterns happens to have a good summary of the command pattern which also deals with undo/redo:

[http://gameprogrammingpatterns.com/command.html](http://gameprogrammingpatterns.com/command.html)

</comment><comment><USER3> That's a very broad question that I imagine depends very much on the particulars of the application. A basic undo/redo approach is described in the Command pattern chapter of Design Patterns.</comment>


A catalog of SQL queries to analyze user acquisition, engagement and retention - <AUTHOR> https://examples.treasuredata.com/

<comment><USER2> Cool! We did something similar for Postgres/Redshift at Snowplow: [http://snowplowanalytics.com/analytics/basic- recipes.html](http://snowplowanalytics.com/analytics/basic-recipes.html)

<comment><USER3> At least you made your SQL public.

</comment></comment><comment><USER4> I don't know if I need reading glasses, but that SQL looks a little blurry to me.

<comment><USER5> "Register or Login to view this query."

Yes, it sucks.</comment></comment>


Using Yammer to Communicate Effectively in a Startup - <AUTHOR> http://blog.sharendipity.com/using-yammer-to-communicate-effectively-in-a-startup

<comment><USER2> I have to add a somewhat shameless plug here, because my startup is tackling _exactly_ the set of problems he's discussing here. We really believe that Yammer's model is somewhat flawed, and in our experience an enhanced "internal IRC" model has worked much better.

I like that he mentions integrating with other systems. Some of the biggest productivity gains we've seen have come from chat bots, which interject useful information into the conversation. They can also respond to commands from users to do useful actions. Our API still needs some polish, but we'll be releasing it to the public soon. Internally, we have chat bots that notify us about svn commits, Google alerts, changes to any Trac ticket or wiki page, etc. I can't wait to see what all the hackers here do with it. :)

Communication tools like this really change the game, especially for distributed teams.

We're in open public beta right now. Check out <http://shoptalkapp.com> and let us know what you think. We always value the opinion of HN readers.

<comment><AUTHOR> Interesting product. I think it could work well for large companies where the chat rooms make more sense but I'm not sure it would work as well for a startup. Adding features like hashtags and search would help too.

I also really like that Yammer provides a desktop client. I mention that a lot of the barriers to communication have to do with integrating into my everyday routine. When I have to go to a web page, it breaks up my workflow and I end up just not using the product like I should.

<comment><USER2> Thanks for checking it out. We have a search feature under development. I agree that search is key for this type of tool.

I'd be interested to hear what you use the desktop client for. We have been thinking of creating one simply for DM alerts, but do you find it useful beyond that? It's a shame that browsers can't do notifications.

Also, could you elaborate on why chat rooms make more sense for larger companies than for a startup? The real-time conversation aspect has just be so useful for us, especially since we're a distributed team.

<comment><AUTHOR> The desktop client just integrates really well with my workflow. When I have to move from one app to the browser and open up a new tab it takes me out of my current mode of operation. It's a subtle nuance in liking the desktop client better than the browser but I think it's important. You also contend with other distractions in the browser. All hell breaks loose when I see my bookmarks to HN, Reddit, Facebook, etc. and there goes my productivity...

For our company, with just a couple of founders, chat rooms wouldn't make sense because we want everyone to know everything. We'd just have one master chat room. In Yammer, hashtags provide a similar feature to chat rooms, although all conversations are aggregated into one stream. I guess we could have separate chat rooms for checkins, bugs, etc. but now I'm flipping between tabs when I could have just tagged by comment with the right hashtag.

<comment><USER2> I see what you mean now. Multiple rooms are definitely overkill for just a few people. The three of us also just use one room right now. However, my last startup grew to about 30 people, and at that point, multiple rooms were a necessity. We've tried to make it easy to switch tabs using keyboard shortcuts and indicate activity in other rooms by highlighting the tabs.

Sounds like we should consider increasing the priority of the desktop client. Thanks for all the great feedback.

</comment></comment></comment></comment></comment><comment><USER3> I've been using Yammer for my startup. The members of our team are in LA and NY. When two of the three talk, the third member can catch up when he can.

We put notes, links and documents on there. It's also a group Getting Things Done system. We try to finish every meeting with next action steps.

</comment><comment><USER4> We tried Yammer in a team of 12 - 15 devs. About half of them liked it. The other half thought it was "yet another annoying, distracting thing to take me out of my 'flow'"</comment>


Finally: a real solution to first and last mile trips - <AUTHOR> https://medium.com/transit-app/finally-a-real-solution-to-first-and-last-mile-trips-adedbdcd8bb9 <comment><USER2>
      in special partnership with agencies in Kansas City, Silicon Valley, ...

The map shows no Silicon Valley participation.

Also, I get an Apache 500 error when trying to use [http://www.ridehail.com/](http://www.ridehail.com/)</comment>


Family traumatized after Nest system hacked by stranger - <AUTHOR> https://fox4kc.com/2018/10/31/family-traumatized-after-home-monitoring-system-hacked-by-stranger/ <comment><USER2> Why is this low quality fear mongering Fox news post on the top page of HN? There is no evidence of "hacking" here, and Nest's official response was that the person had a poor or breached password. I get that this would be a nightmare situation, but it has nothing to do with Nest (at least with the current info)?

<comment><USER3> How is two-factor authentication not a prerequisite for using Nest in the first place?

I know we've moved as a society fairly quickly from expecting users to generate entropy to something that is actually secure. So it's understandable that some companies lag behind.

But Google is attempting to connect everything they can to the internet. If the bar for them isn't to at least prevent the easiest, most obvious hack from causing catastrophes then we're living in an idiocracy.

A user reusing passwords is bad. But in a civilized technological society the consequences for doing that cannot be a disembodied voice appearing communicating with one's child to give them nightmares.

Google's security teams surely know you can't "educate the user" to stop reusing passwords. If their official response is, "We did the right thing by suggesting two-factor authentication," then it doesn't matter how many engineers they throw at the problem.

Evil is afoot.

<comment><USER4> Nobody else forces 2FA, so it's not really fair to blame Google here. Even Apple, while strongly encouraging it, doesn't actually force you to enable it.

</comment></comment></comment><comment><USER5> The big takeaway here is that grown humans are mindlessly putting technology they don't understand in front of their children, and then they're blaming the technology for their own ignorance.

Alright, maybe I'm being a little extreme or cynical, and my goal here isn't victim blaming, clearly this sort of thing should not have to be a concern for people, but still... Don't they have a duty to understand what they're exposing their children to? Then again I've been tech savvy since I was like 11 years old (23 now) so maybe it's just easy for me to say. I just can't comprehend simultaneously having children and not understanding technology.

<comment><USER6> I must have missed the part in the Nest manual where they told you to expect complete strangers to be able to watch you and speak to you through it.

<comment><USER2> Actually, that is in the manual. That's a feature of the product. You can watch and speak through it. Just because a stranger got your password from an unrelated security breach to Nest, doesn't make it Nest's fault. They have the tools available, and even encourage you in the setup process to setup 2-factor (I just recently set one up). Outside of that, this is user error, in my opinion. Nothing was "hacked" on Nest's end.

</comment></comment></comment><comment><USER7> > Sorry, this content is not available in your region.

I guess Fox 4 KC didn't want to implement the GDPR… But what happens with the GDPR if I, a European citizen in Europe, access this website (blocking EU IP addresses) using a VPN?

The heuristic they use (IP address = country on which the user lives) is not a perfect method to assess whether they need to apply the GDPR regulation.

<comment><USER8> > But what happens with the GDPR if I, a European citizen in Europe, access > this website (blocking EU IP addresses) using a VPN?

WDAF Kansas City, is a Fox affiliate located out of Missouri state.

GDPR is an EU regulation, not a global regulation, nor a US regulation. The EU and GDPR has no legal standing over most media companies in the US and very few US Web sites, because they do no business in the EU and are not bound by EU laws. It does not matter if you're an European citizen in Europe or not, if GDPR does not apply to the owner of the server you're accessing.

If I - an American citizen - access a server in China, US laws are not what govern what they can do with my information. That is governed by Chinese law.

<comment><USER9> _If I - an American citizen - access a server in China, US laws are not what govern what they can do with my information. That is governed by Chinese law._

The US government apparently has a different interpretation. For example, they asked Microsoft for the information of a user from the servers in Ireland.

</comment></comment></comment><comment><USER10> This story is pretty creepy, but at this point, people need to own up to the idea that weak passwords and passwords that are re-used across sites are going to be compromised at some point [1]. There's nothing Nest can really do about this, other than to mandate two-factor auth, which most people don't seem to like [2].

[1] I'm happy to see in my personal experience that even my non-technical friends are starting to use password managers. [2] According to [https://hackernoon.com/why-do-most-people-ignore-two- factor-...](https://hackernoon.com/why-do-most-people-ignore-two-factor- authentication-1bbc49671b8e), "less than 10 percent of active Google accounts use two-factor authentication. Furthermore, as per findings of the Pew Research Center, password managers are only used by approximately 12 percent of Americans." If people aren't using 2FA for their gmail account, which is arguably the most important account to protect, then they probably aren't using it anywhere else.

<comment><USER11> They could check the user's password against the HIBP database - many users aren't aware of these data breaches and this would prevent them using one of those passwords as well as making them aware of the problem.

</comment></comment><comment><USER12> If they think this is scary, wait till they find out what these "hackers" can do with their weak email passwords.

</comment><comment><USER13> How is poor password security "hacking"? If you choose to use the same password on all of your devices then that is solely on you.

<comment><USER14> Legally, it is hacking.

I remember a story about someone getting an absurdly long prison sentence for guessing a simple password to a secure system.

Hacking only specifies the knowing and intentional circumvention of an authorization system. It doesn't place a value on how easy it was to do it.

<comment><USER15> Years ago a teenager was arrested for "hacking" because he just Google'd the answers to Sarah Palin's security questions to gain access to her Yahoo account.

</comment></comment></comment><comment> mellow-lake-day > A Nest spokesperson responded to our request for comment and issued this > statement:

> "We have seen instances where a small number of Nest customers have re-used > passwords that were previously exposed through breaches on other websites, > and made public. None of these breaches involved Nest.

It's surprising how many people reuse their password or use unsafe passwords. Including my own family.

<comment><USER16> It's frustrating, isn't it? "We" spend a lot of time warning people about the dangers of phishing and to not give away their credentials. Then they give those same credentials away to random site operators who through malice or incompetence may end up giving those credentials to bad actors. I think most people don't grok the problem. They think 'this will never happen to me' and when it happens to them, they blame someone else. Reading the article, I don't get the sense that the family in the article learned anything. They seem to still be blaming the devices.

</comment></comment><comment><USER17> Doesn't appear to have been hacked like all the hacks we hear about rather, the user probably reused their password on another service that was hacked and they didn't change their passwords as hopefully instructed when that occurred. Enabling 2 factor would resolve this in most alll cases easily for the user. Versus the user having to use a password management app and constantly monitor their security and update accordingly. 1Password helps a lot but the average person won't use that so it's on companies like Apple to continue to improve their keychain software to help automate this for users and on companies like nest to push 2 factor more. But until Apple and other natively support 2 factor seamlessly it won't gain massive traction for non tech users. So while this was the users fault technically it's ultimately tech companies fault for not making security for users more fool proof. Though if everyone uses 2 factor hackers will probably find another way.

<comment><USER18> > Enabling 2 factor

Unfortunately, they do not provide "true" 2fa, only through text message.

</comment></comment><comment><USER19> Is there a sensible way to log IoT traffic? I'm paranoid not just of who may be trying to access IP cameras, but what they may be sending back to their manufacturer.

</comment><comment><USER20> Unfortunately the only additional authentication Nest offers is SMS base 2-step auth. You would think being owned by Google they would allow for 2FA.

</comment><comment><USER21> So it seems that the nest itself was secured with a repeated password, and there was no 2FA on their account (which they could, and were encouraged, to add).

On one hand, it's easy to dismiss this as the nest owners being naive with internet security. This is incident was easily avoidable if the owners had put in the tiniest more effort. I think it's _fair_ to expect people who own these devices to know the basics about how to not get exploited from it.

On the flip side, although I think that knowing the basics is a _fair_ expectation, I don't think it's _pragmatic_. These devices are only going to get more powerful in their abilities, only going to get more ubiquitous in their distribution, and only going to get more opaque as to their inner workings. I don't think it's unreasonable that manufactures _force_ a higher level of security on such devices.</comment>


Microsoft Working On A Smart Bra To Measure Mood - <AUTHOR> http://www.bbc.co.uk/news/technology-25197917

<comment><USER2> I look forward to the progress of this innovation.</comment>


D's Garbage Collector Problem - <AUTHOR> http://pointersgonewild.wordpress.com/2014/09/09/ds-garbage-collector-problem/

<comment><USER2> I'm not an expert on GC, but I do work on a compiler written in a GC'd language that cares quite a bit about performance. I can share a few guidelines that may prove useful to the author or anyone else having similar trouble.

1) Profile. This does not mean gather a few charts from a primitive profiling tool that simply tells you which functions have the most time spent in them. You need a real profiling tool that gives you detailed analysis of where your time is going. You need CPU stacks, time blocked, GC stacks -- everything you can get your hands on. Your profile needs to tell you where, what, and how much you're allocating. It needs to tell you what kind of allocations you are doing and how long they are living.

2) Once you have your information, you need to figure out what you can do to improve your performance. To do this, you need to know the characteristics of your program and all the platforms it runs on. Is your code being JITed? How long does your program spend in the JIT? Can you mitigate this by doing AOT compilation, optimization profiles, or producing more JIT-friendly code? For GC, what kind of GC are you running on? Is in conservative -- do you have to worry about memory leaks? Is it stop-the-world -- do you have to worry about pauses? Is it generational -- does the behavior change at inflection points? Do you have to adapt your allocations to the sections of your program's run time? Does allocation in one portion affect allocations in another portion, e.g. will your allocations produce extra memory fragmentation when running on a non-moving GC?

3) You need to own your code and its performance. If you're allocating in a hot loop and the GC can't keep up, you need to rewrite that section to not allocate. If you're fragmenting the heap in non-critical paths, you need to stop allocating there, as well. If you're constantly recreating re-usable ephemeral objects, you need to look at object pooling. If you need to refactor sections of your code to avoid allocations and stop-the-world collections, _you need to do that._ Blaming the GC will not make your application faster. If you need to break out a debugger and jump into the GC to see what's taking so much time, that's what you need to do.

4) After you've optimized, re-evaluate. Are there actionable items you can hand to the GC devs? Can you point out general points where GC strategy has a known bad result and a known better implementation? File these on the GC. Maybe you'll be able to delete some optimizations in future versions. :)

The first version of Roslyn was 30x slower than the old C# compiler written in C++. We're now within 2x on 10-year-old hardware and beating it on newer. Perf optimization works -- but not all programming is a stroll through a park. :)

<comment><AUTHOR> > Your profile needs to tell you where, what, and how much you're allocating.

Which languages offer such advanced profilers, though? I am using Lua (a GCed language) right now, and I am not aware of any Lua profiler which profiles allocation/the GC. I think D's profiler does not feature that either.

In fact I have only ever heard of Java having such advanced profiling tools, and I guess Microsoft build the same thing for their version of Java (.NET). But again, which other languages have tools which allow you to profile allocation/GC behavior?

<comment><USER3> I am on mobile right now, but I would say Oberon (a bit basic), Haskell, Go, OCaml (not sure), JavaScript and all commercial implementations of Smalltalk and Common Lisp.

Ah, regarding .NET there are a few commercial profilers out there besides what Microsoft offers. Like the JVM, the CLR exposes an API for such kind of tooling.

</comment></comment></comment><comment><USER4> It's OK to point at the potential problem. It can be that the GC in D can be improved.

But for the given specific case, whenever I'd want to make a fast compilers (and I've made two in my career) I wouldn't set my goal to produce gazillion objects and expect some fairy to make it fast. I'd take care to use the stuff where one allocation produces a lot of stuff: like arrays. You probably know: addressing elements of the array in the machine code is very fast: there are instructions that do that very effectively. So don't be afraid to use arrays and use indexes instead of pointers. Your code won't be much less readable, but you can achieve significant speedup, provided you don't have more algorithms that slow up exponentially (and there's some chance you have these too).

One of the benefits of arrays is that you're also deallocating a lot of stuff at once, which also makes the whole process much faster. And whenever you feel that you're not programming easily enough, think about the first Fortran compiler, produced in fifties: it generated quite good machine code, almost as fast as the hand coded one and it had only a few _kilobytes_ of RAM to produce such a result.

<comment><USER5> "it generated quite good machine code, almost as fast as the hand coded one"

I'm sorry but this is complete bullshit. What is expected of a compiler these days (SSA, advanced instruction scheduling, smart inlining descisions) is not comparable with what the first optimizing compilers did.

<comment><USER4> If you want more modern comparison between what the article complains about and what's possible with the language which has GC, then look at this: Fabrice Bellard implemented the whole X86 emulator in JavaScript and with it it boots the Linux (measured on my machine and in my browser) in three seconds. The Linux kernel it boots is approximately 2 MB.

[http://bellard.org/jslinux/](http://bellard.org/jslinux/)

Whereas Maxime Chevalier-Boisvert (the author of the article we all comment) compiles

      a = 0;
      a;
      a;
      … // (60000 times is a used)
      a;

in four seconds with her D code. The program with no loops and one single variable, and just less than 200 KB of input.

<comment><USER6> That is not a fair comparison at all.

1\. An x86 emulator doesn't need to allocate much. It's probably an interpreter. It can parse x86 instructions straight from a byte vector, and use another byte vector for the RAM.

2\. V8 and Firefox have much better garbage collectors than D, because they need their GC to be fast, and so they've made sure it is.

3\. Higgs is a much more complex piece of software than this.

4\. The 4 seconds time, as I pointed out, is at least 75% GC (but possiby more). That's the whole point of the blog post. It shouldn't be possible for the GC to take most of the execution time.

<comment><USER4> How many allocations do you actually make to compile a single variable used 60000 times? I still claim you don't have to allocate much too for that particular input, as long as you use vectors/arrays, the ones you also recognize Bellard probably uses and which I've mentioned in my top comment as the right way to make your code faster. It's really as simple as that.

<comment><USER6> This isn't C, it's JavaScript.

The semantics of a global variable read are a more complicated than you think. Global variables reside on the global object, which can grow dynamically. Global properties can also be deleted at any time. Accessing a property which doesn't exist should throw an exception. Properties could also be getter functions, which would then result in a function call for every property read.

Have you written a JS compiler? Have you written a JIT compiler? Any kind of compiler for a real-world language? A garbage collector?

If someone knows of a way to get allocation statistics, then I can answer the question of how many allocations occur.

<comment><USER4> > Global variables reside on the global object, which can grow dynamically.

But it the example you give there's only one single variable.

> Global properties can also be deleted at any time.

Also doesn't happen in your example.

> Accessing a property which doesn't exist should throw an exception.

I agree.

> Properties could also be getter functions, which would then result in a > function call for every property read.

But they aren't in your example.

And all these aspects result in proportional increase in the resulting code, not in some unexpected complexity.

> If someone knows of a way to get allocation statistics

Run a Perl script (or Python script or do it by hand) that adds an increment of global nAllocations variable in front of any statement where you do a "new" of something. (If the most of the allocations are implicit, this counting maybe has to be added to the runtime of D, if it already doesn't exist. At least the runtime is open source, AFAIK). Run the program. Print that number. My guess is that it must be an order of 6 digits (millions) for the performance you measure. Which doesn't seem to be necessary to process 60000 evaluations of a single variable if more arrays of fixed sized things could be used in the process. I know for you it's "doctor, it hurts me when I press me here" "well don't do that" moment, but really, that's how it is. A lot of small objects allocated separately makes a lot of work for a GC and it's so in every language. The question is if the language provides you the possibility to do it more effectively. It does: structs and arrays.

Yes, my bias is a bias of a C programmer, but there's a reason why good written C code is fast: the number of allocations is small, the most of stuff is preallocated before it's used. D lets you do the same.

Note: changing the memory representation of the "objects" you use doesn't suggest you have to change your existing algorithms. It's just how the stuff is stored in memory. The changes to your code then aren't fundamentally significant, but you'll certainly get the initial speedup you need.

<comment><USER7> I don't think anyone would argue that the compiler in question is far from optimal for compiling this particular program.

However, if you are writing a general purpose compiler, you need to accommodate any program. Each of the properties (e.g. no use of getters, only one variable) that you point out about this program would take a compiler pass to establish.

I haven't thought too much about it, but some of the properties are very likely to be undecidable by static analysis for many programs.

It seems likely that using time to determine whether the program being compiled has these properties would not be efficient for most real world programs, even if it did provide enough information to choose a more optimal compilation strategy in some cases.

<comment><USER6> Indeed, static analysis is generally rather costly. It's usually a fixed-point computation that iterates over the code multiple times. You generally need to allocate many objects to keep track of facts the analysis produces about different instructions, which need to be propagated around. Running a general- purpose static analysis on this test program would probably be more expensive than what I'm already doing.

In the case of my minimalist test program, it's easy to say "well, ha! that's obviously not an accessor!", but in the general case, it's much harder. Consider, for example, that there could be load() or eval() statements in the code. That means invisible code you haven't seen yet, and can't analyze. Then consider a much more trivial case where you find this somewhere in the code:

function foo(o) { delete o.a; }

Now, you know that "o" is very unlikely to be the global object... But can you prove that with absolute certainty? It's possible you can't, so then you must assume that maybe the global variable "a" doesn't exist, and accesses to it might throw an exception.

TL;DR: compiler design is no easy task.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> I had a 3 minute look at the code in the github repo.

The parser uses ~= (D's array concatenation operator) a lot. This always copies and will lead to quadratic performance for parsing e.g. blocks of statements. Similarly, the switch parser uses code like this:

        curStmts.length += 1;
        (*curStmts)[curStmts.length-1] = parseStmt(input);

This is similarly quadratic - it incrementally grows the statement array.

Look at algorithm performance first.

<comment><USER9> >This always copies and will lead to quadratic performance

In D, "a ~ b" always copies but "a ~= b" might not. Also, appending using ~= will grow the array exponentially, so the amoritized performance will be better than quadratic.

Doing "x.length += 1", however, does incremental growth and will have poor performance.

(See [http://dlang.org/arrays.html](http://dlang.org/arrays.html) and [http://forum.dlang.org/post/op.wuic5nateav7ka@stevens- macboo...](http://forum.dlang.org/post/op.wuic5nateav7ka@stevens-macbook- pro.local) )

</comment></comment><comment><USER10> If it's a GC thing, you should also try using various D compilers to compare performance.

There is:

dmd (official D compiler),

ldc (llvm D compiler),

gdc (GNU D compiler).

When I was messing around with D about a year ago, dmd compiled code the fastest, gdc by far the slowest, but gdc produced the most performant code. ldc was middle ground for both compile speed and program performance. Perhaps the GC issue you are having is just a quirk of the current compiler you are using.

<comment><USER11> The garbage collector is shared by the three projects. You will not get a better GC this way.

Maybe ldc/gdc can optimize a few allocations away compared to dmd. I do not believe this is the case with compiler code like the Higgs discussed.

</comment></comment><comment><USER12> [SpiderMonkey dev here. I remember the talk you gave at Mozilla, quite a good talk. I work on the GC much more than the compiler, which I don't know that much about, but I'm only going to talk about the compiler. Ironic, given that you were talking about the GC.]

What's your actual goal here? You gave an example of a pathological function that takes a long time to compile. Does that matter?

We care a lot about compilation time. It matters a lot for Web workloads, and distinguishes JS compilers from AOT compilers. But why do you care, especially in this particular case? Do you have "real" code that is hitting the same bottlenecks? Because if not, you have two easy solutions to this case: first, leave everything as is. In a production system, you can be doing this sort of compile in the background, and only switch over to it from the fast-start interpreter when it's done. The second straightforward option is to just give up. Fail to compile if things get too big or slow, and let it run in the interpreter (or some other lower tier.)

If this _does_ resemble a realistic scenario, then we can get a little more nuanced. We face the same problem in SpiderMonkey -- big functions can take too long to compile and/or will blow out memory (which, honestly, is the bigger concern. More on that later.) In JaegerMonkey days, we had "chunked" compilation, where it artificially broke big functions down into pieces and compiled them separately, essentially spilling all state between them. I know we've talked about doing the same for IonMonkey; I'm not sure if it has been implemented. In particular, asm.js hits this a lot because autogenerated functions can easily get enormous. Luke has definitely talked a lot about chunking asm.js compilation; I don't know if he ever got around to implementing it yet. [You remember Luke; you sat behind him for a while in the Mountain View office.]

Or how about doing it at a finer granularity? We have a number of places where we start out trying to do the smart and clever thing, but when things gett out of hand we abort and fall back on something stupid but fast and small. Here, that might mean being very pessimistic about your live ranges and pessimistically chopping them up into small pieces. Could you keep your 2d matrix, but cap its dimensions? You only track up to K variables at a time, and if you exceed K you spill one and reuse its slot for the new one. Obviously, your phi nodes (join points) would need to agree on a set of variables, so maybe this gets too complicated or just doesn't work.

But anyway, I'm still wondering what you're after. You have a research compiler. There is no need for it to be better than a production compiler in all ways. Pick something it _is_ better at, such as producing really fast code. The learnings from that will be more likely to be useful in a production system anyway, because all current leading JS compilers are multi-tier -- you have a fast-start interpreter, usually a still pretty quick-start baseline compiler, and then an optimizing compiler. The distribution of static code across those is something like 90%/9%/1% anyway -- the majority of downloaded code is executed at most once anyway, so there's no point in spending time optimizing it. But that means the optimizing compiler is free to spend some time thinking about things. If your compiler is _really_ slow, just claim it's meant for a 4th tier that only kicks in for really hot code. :) And it can compile in the background.

Unless it burns too much memory. That won't stay isolated from the execution thread. It'll pollute caches, hog the memory bus, and make fun of your mother. So I'd worry more about capping memory usage to a reasonable level than worrying about compile time, even if it means giving up or dropping down to a dumber algorithm when things start to get big.

One other effect of being a later tier is that you can stick to compiling simpler programs. By the time it makes it to your tier, you'll have observed the actual types and behavior of the function for a while, and so you can assume that it'll continue to behave the same way. This allows you to ignore many of the numerous quirks of the JS language. You don't need to handle getters if your hot code never sees them (or rather, you only have to handle them in the parts that do see them.) The global object probably won't get mutated, and almost certainly won't have properties deleted. You will need mechanisms to discard your compiled program if any of these things change, and you'll have to be clever about noticing these sorts of mutations, but it's great to be able to assume that nothing too crazy will happen. Even if you have to guard all those assumptions.

The GC does matter for both time and space, though. An advantage of a generational collector isn't just shorter pauses, it's also that you can use simple bump allocation in the nursery since you never need to do partial deletes. Also, if you're creating a lot of short-lived junk then it can reduce your peak memory usage by quite a bit, which is important for a 3rd or 4th tier background compiler.

</comment><comment><USER13> It'd be interesting to compare this to code running on the JVM. It's not enormously surprising that D's garbage collector can be a performance bottleneck, given the incredible amount of effort and manpower that has gone into making the Java GC's fast and scalable. It's just a really hard problem.

Does D expose any kind of GC stats? I'd imagine that with D a lot of heap pressure could be removed by stack allocating as much as possible, as you'd do in a C++ program. Part of the reason Java needs such beastly GCs is because it generates lots of tiny short lived objects. Although HotSpot can stack allocate these days if a function is hot enough, with D the programmer should be able to do it manually.

<comment><USER11> D cannot copy Java's GC strategies. Being used for low-level work, D by design cannot move objects.

<comment><USER14> This is incorrect. D can move objects, although the current GC does not do so.

</comment></comment></comment><comment><USER15> Here's separate "GC issue" that Walter Bright has mentioned: [http://www.reddit.com/r/programming/comments/22jwcu/how_i_ca...](http://www.reddit.com/r/programming/comments/22jwcu/how_i_came_to_write_d/cgnk4dm)

</comment><comment><USER16> When I see things like that, I can't help but think that if you want performance, you've gotta go C.

Otherwise, you get stuff like this, that's just impossible to reason about.

<comment><USER6> It is unfortunately difficult to reason about. For instance, I use D's associative arrays in my program. I know that dynamic allocations must occur inside this, but I don't know what algorithm is being used and how it allocates memory.

</comment></comment><comment><USER17> I wonder if selectively disabling D's collector would help? Turn it off during the allocation phase to prevent thrashing. The runtime would be forced to allocate from the OS rather than try to collect. It could then be enabled and run when there was known to be garbage to collect.

Another option would be fall back to pre-allocated object pools rather than naively calling new. I know it is a fairly common optimization in Java\C# when the GC is causing performance issues.

<comment><USER14> Unfortunately, there are no "fire and forget" performant memory management schemes. For an application that does a lot of allocation, it pays huge dividends to analyze the code to figure out where memory is being allocated, and why.

Often, data structures can be redone to minimize allocation, allocations can be moved to the stack, object pools can be used, etc. There are a long list of techniques that can be applied to improve performance. I know that much of the effort I put into optimizing code goes into dealing with memory management issues, regardless of what the implementation language is.

</comment></comment><comment><USER18> If you write programs that allocate memory dynamically it is no surprise that memory allocation and garbage collection are a big deal.

</comment><comment><USER19> I program in Scala and I wish we'd be able to delete objects manually, and then have the GC clean up the stuff we forget. That'd be awesome; enabling the perfect fusion of managed and unmanaged memory. In the meantime starting out with huge heaps and setting references to null after use seems like the best we JVM folks can do.

Edited to specify I'm using Scala.

<comment><USER14> core.memory.GC.free(void* p) should do that for you.

<comment><USER20> What happens if another object holds a reference to p? Bad things?

<comment><USER14> Yes, bad things, i.e. memory corruption.

Manual memory management means it's up to the programmer to get it right.</comment></comment></comment></comment>


PHP 7.2.0 Released - <AUTHOR> http://php.net/releases/7_2_0.php <comment><USER2> One of the biggest improvements is that Libsodium is now built-in. [https://dev.to/paragonie/php-72-the-first-programming- langua...](https://dev.to/paragonie/php-72-the-first-programming-language-to- add-modern-cryptography-to-its-standard-library)

No more Mcrypt, less cases of having to use OpenSSL and using it wrong. This is a huge security step towards the future.

<comment><USER3> The other thing is that they have partially fixed the most "wat" bug in PHP: for some arrays that aren't even all that hard to come by when interacting with JS, the following code could change `count($arr)`:

        foreach ($arr as $key => $val) {
            $arr[$key] = f($key, $val);
        }

The issue is that `$key` could be a string describing an integer, but `$arr[$key]` will automatically see that you're using a string-int and convert it to an int-int, setting a different key than the internal one.

It's only a partial fix but it hits the most common case: you have a JSON payload that happens to have an index of objects which happens to have been given numeric keys:

        {
          "abcdef": {"prop1": "hello", "prop2": 123},
          "987132": {"prop1": "world", "prop2": 456}
        }

If your framework hands JSON to you as a StdClass object then you would typically convert this to an associative array since that's semantically what it is: as opposed to the internal entities, which in this case appear to be full-fledged objects. (The difference is that the keys of a full-fledged object should be known in advance at a data-schema level and have a control structure of getting/setting `->prop_name`; the keys of a dictionary should be user-settable and have a control structure of `foreach ($dict as $key => $val) {}`.)

So the bug still maybe exists in some fringe cases as the underlying cause is not treated, but it is now autofixed by the common idiom of casting `$dict = (array) $params->dict`.

<comment><USER4> I would typically write:

       foreach ($arr as $key => &$val)
            $val = f($key, $val);

This would avoid this issue, while bing simpler.

</comment></comment></comment><comment><USER5> One of the most significant changes in PHP 7.2 is actually the list of features that it deprecates. Among other things, this includes:

\- Unquoted strings

\- The __autoload() method

\- The track_errors ini setting and $php_errormsg variable

\- create_function()

\- each()

\- The $errcontext argument

Numerous internal optimizations and language improvements will become possible in PHP 8 when these features are removed.

[http://php.net/manual/en/migration72.deprecated.php](http://php.net/manual/en/migration72.deprecated.php)

</comment><comment><USER6> Seems like a solid gradually improving release and according to some benchmarks [1] and notes from the development team, improved performance as well. Nothing like the jump the ecosystem enjoyed from 5.6 to 7.0, but still around 10% on average.

[1] [https://symfony.fi/entry/php-7-1-vs-7-2-benchmarks-with- dock...](https://symfony.fi/entry/php-7-1-vs-7-2-benchmarks-with-docker-and- symfony-flex)

</comment><comment><USER7> What is PHP like nowadays? I know it has a bad reputation and a history of kitchen sink design but have they managed to tame it into something more sensible? Do the docs help steer developers away from legacy issues and common bad patterns?

Would anyone recommend it for new projects?

<comment><USER8> Four words : composer, symfony, laravel and php-fig.

The php ecosystem is not what it was 4 years ago. Although due to backward compatibility the languages still has a lot of cruft. But this means old code often works directly with the last version and benefits from its performance improvement.

If your new project is about receiving an http request and send a response like a REST API I think it is a good tool for the job. If you want long lived process (kafka/rabbitmq consumers for example) or sockets it is possible to do it in php but you'll have a better experience with other stacks.

<comment><USER9> I don't get the love for Laravel. Things like validation, specifying validators in strings like it's 2003 grate with me. Symfony's a pain in the butt for over-engineering things (DataTransformers are a good place to start) but at least it's well thought through.

What are the reasons to love Laravel?

<comment><USER10> Apparently the creater modeled it after Ruby on Rails, so I guess it's easier to use if you are used to that platform.

</comment></comment></comment></comment><comment><USER11> It's weird for a _bug fix_ I wrote to be top of the list of features. PHP 7.2 is not the most eventful release.

<comment><USER12> Yes, strange for a bug fix to be top of a list of features, however...

I don't agree that it's "not the most eventful" release:- libsodium being included into the core is a big tick in the box in terms of maturing as a language; modern - secure - cryptography out of the box.

<comment><USER13> I'm surprised PHP hasn't had this for a while. Isn't PHP nearly 20 years old? Is it common for web languages to grow so old before they get crypto in the standard library?

<comment><USER14> > PHP 7.2: The First Programming Language to Add Modern Cryptography to its > Standard Library

[https://dev.to/paragonie/php-72-the-first-programming- langua...](https://dev.to/paragonie/php-72-the-first-programming-language-to- add-modern-cryptography-to-its-standard-library)

<comment><USER13> Ok, but that's different from including crypto at all. I'm surprised Go uses those algorithms in its standard library TLS stack, but they're not made available as part of the standard crypto packages...

<comment><USER14> OpenSSL and Mcrypt have been available for the longest time, I don't know if that counts if we word-lawyer "Standard Library" but it definitely felt like that way.

</comment></comment></comment></comment></comment></comment><comment><USER15> I use Hack now (I work for Facebook) and i kinda like it, at least in comparison to any untyped languages.

So, serious question... Is there really any reason to use PHP over Have?

<comment><USER16> Yes. HHVM has now explicitly diverged from PHP, so compatibility with PHP 7 code is not guaranteed, and so too any given PHP 7 library.

If you work for Facebook (or Slack), this is not a problem. You still have talented engineers working to improve the language. But there also isn't the guarantee that those improvements will benefit the average use case.

Also PHP is available _everywhere_. HHVM, not so much.

<comment><USER17> This has been a huge disappointment for me. Hack seemed really promising, but some of the decisions they've made really seem to have strangled any hope of there being much of an ecosystem outside a few companies that are heavily invested in it.

</comment></comment></comment><comment><USER18> > Counting of non-countable objects

Sounds like fun :D

But actually, the RFC suggests to add warning, so nothing too special :-/

</comment><comment><USER19> I will use PHP 7.2 on projects I maintain.

However, starting a web project with Kotlin in 2017 has a minimally larger set-up cost (have to understand gradle or kobalt) than PHP, but is definitely a better option. Check out http4k or ktor and squash (orm)

</comment><comment><USER20> Awesome

</comment><comment><USER21> Literally only object as new typehint, not the classname of the object? This doesn't really help much. [https://wiki.php.net/rfc/object- typehint](https://wiki.php.net/rfc/object-typehint)

Looks like they went back into perl-mode

<comment><USER22> Class based type hinting has already been available since _2004_ with 5.0 [1] This release adds support for the general standard object type.

[1] [http://php.net/manual/en/functions.arguments.php#functions.a...](http://php.net/manual/en/functions.arguments.php#functions.arguments.type- declaration)

<comment><USER21> Ok, that makes sense. Thanks</comment></comment></comment>


The Basic Sourdough - <AUTHOR> https://github.com/hendricius/the-bread-code/blob/master/basics/basic-sour-dough.md <comment><USER2> I wouldn't call this "An engineer's guide". It's a lay guide written by a German using metric. If one wants an engineering level of scientific expertise, look at "Advanced Bread and Pastry" by Michel Suas.

For example, we grind our own flour, sieving out the bran but including fresh germ, for a spectacular difference in flavor. However, bread flour needs to be aged, or else the loaves will fail to rise properly. However, aging home- ground flour will turn it rancid and grey. The search keyword for this issue is "green flour". Suas has a solution: Add 30 parts per million of ascorbic acid, as a dough conditioner.

How does one reliably add such a small quantity of ascorbic acid, in a commercial bakery or at home? A true engineering problem. Thoroughly mix ascorbic acid 1:20 with white flour. Now take some of that mixture, and thoroughly mix it 1:20 with white flour. One now has a 1:440 mixture one can actually weigh.

This made all the difference in the world in my sourdough bread baking.

We grind using a Wolfgang Mock KoMo Classic Grain Mill, and sieve using a #25 Gilson 12in Round Test Sieve in an 8 quart Vollrath steel bowl. We hydrolyse overnight; an hour is just genuflecting. We add 350g of water for steam, as popularized by Thomas Keller; a few spritzes of a spray bottle is an ineffective 10g of water.

To convert that much water to steam takes a lot of mass. Indoors, we use a Vollrath Company 68369 Bake/Roast Pan filled with several spools of stainless steel chain. I plan to add pieces of aluminum plate to increase the mass further. Outdoors, in a Komodo Kamado ceramic charcoal cooker, we use a giant cast iron skillet with the handle sawed off, also filled with chain. I use a slab of ice outdoors, to buy time.

It takes 80 calories to thaw a gram of ice, 100 calories to bring that gram to the boiling point, and a whopping 540 calories to then turn that gram of water to steam. By weight, steel holds about 13% as much heat energy as water. These numbers explain why one needs so much metal to boil the water, and why it hardly matters whether the water starts out as ice or hot water.

For example, to turn 350g of cold water into steam, using metal heated to 450 F (132 C above boiling) takes about 28 pounds of metal. To turn ice into steam (giving one a slower fuse) takes about 32 pounds of metal.

What does the steam do? It isn't simply keeping the crust damp, or one would far more easily spritz the dough. (In grade school a teacher tried to tell us that candle wax slowed down the burning wick; similar skepticism is called for here.) The dough is the only thing in the oven cold enough to condense steam back to water. The energy used to turn water to steam is delivered to the bread as the steam turns back to water. Physics abounds in conservation principles, and this is one: The energy has to go somewhere. As a thought experiment, imagine bashing the bread with a baseball bat, with all your force. Then imagine spritzing with a plant mister. Trust your intuition; which is more force? As a second thought experiment, imagine spritzing your bare hand and sticking it into the hot oven for a few seconds. Now imagine sticking in your bare hand as you turn 350g of water into steam. In which scenario do you then imagine a visit to the emergency room?

Scale matters.

<comment><AUTHOR> Great feedback. Why not open up a pull request and add some of your findings? That would be great additions.

</comment></comment><comment><USER3> All of this information (including part #1) is missing a key element: temperature. Temperature should be considered to be an "ingredient" when making sourdough bread. It's not as simple as "do X on day Y, and you'll have sourdough". You may end up with tart/acidic dough...but not proper sourdough.

For a great introduction to making sourdough, I recommend reading the book, Tartine, by Chad Robertson, and browsing Maurizio Leo's amazing sourdough blog: [https://www.theperfectloaf.com/](https://www.theperfectloaf.com/)

<comment><USER4> I found Tartine to be frustratingly vague at times, but Maurizio's blog is phenomenal.

</comment></comment><comment><USER5> I've been baking my own dark rye sourdough bread for several years now and I think this guide really overcomplicates things.

You can get very good results with minimal effort: I spend about 15 minutes on my bread, and I bake it every 3-4 days. 10 minutes to mix the dough in the morning, and then another 5 minutes to put it in the oven in the evening, for an hour. Put aside some dough before baking, feed it with some flour, and you're done.

350g type-2000 rye flour (full grain)

~170g any other flour (I use a mixture of bread-baking flours and some white flour)

1/2 spoon salt

starter (I use about 150ml to 250ml, but it doesn't matter that much)

Water: about 300ml, but this depends: experiment.

6-8h to ferment and grow.

This dough flows, so you need to bake it in a form.

This simple procedure reliably produces great tasting dark rye bread (darker than the one shown in the pictures). If you have lots of time, by all means, experiment and go wild, but if like me you deal with negative time, don't overcomplicate things.

<comment><USER4> Rye starter or white flour starter?

My favorite rye sourdough is this one from Breadtopia: it goes kind of crazy on flavorings (caraway, anise, fennel, molasses, orange zest) but the results are spectacular. Plus there is a video to take you through it step by step - great for people new to sourdoughs or ryes. Plus plus there is an instant yeast version if you don't have a starter.

[https://breadtopia.com/sourdough-rye- bread/](https://breadtopia.com/sourdough-rye-bread/)

<comment><USER5> Rye starter, but after the first bread the starter is whatever you mixed for the bread, plus feeding every 2-3 days with rye flour.

Here again, keep things simple: don't worry about salt in your starter, as long as you feed it every 2-3 days, the effective salt content will go down and things will be fine.

The current starter I have in my fridge also has sunflower seeds, because that's what I mix into my bread. Who cares?

Again: you can go as complex as you wish with your bread, but the advantage of rye sourdough is that it can be dead simple to make and take very little time, with excellent results. This is what makes it great in my book!

</comment></comment></comment><comment><AUTHOR> This post is a followup to this one: [https://news.ycombinator.com/item?id=16946178](https://news.ycombinator.com/item?id=16946178). The other post is part 1. The post is about making your sour dough.

This post however is about how to use the made sourdough to actually bake a sourdough bread. I hope it's not too confusing.

</comment><comment><USER6> The title of this caught my eye - I feel like more and more engineers are baking bread as a hobby (the way photography used to be). So much so that there's a fiction novel about an engineer who gets started in sourdough: [https://www.amazon.com/dp/B06XC41K6G/ref=dp-kindle- redirect?...](https://www.amazon.com/dp/B06XC41K6G/ref=dp-kindle- redirect?_encoding=UTF8&btkr=1)

I love the format of breaking apart the starter recipe and then the baking steps. Thanks for sharing!

</comment><comment><USER7> Anyone looking to make good sourdough (or any other kind of) bread should read Ken Forkish's "Flour. Water. Salt. Yeast." Including the OP - there a few things that could use improvement in both their method and recipe:

1\. Ideally, for home baked bread, you always want to use a heavy dutch oven. A heavy dutch oven retains a lot of energy, which provides a consistent environment for the bread to bake in (opening an oven door, no matter how hot, rapidly lowers the temperature), but more importantly retains the steam that the bread emits. This both causes proper crust to form (look for the micro bubbles on the skin of the bread) and makes the entire loaf rise significantly more.

2\. The hydration at 70% seems low. While low hydration makes handling dough easier, it also changes the taste - in my opinion, for the worse when it comes to bread. With a bit of practice, proper fermentation, shaping, proofing, and enough gluten formation, even a 78% hydration dough is not that hard to handle. I've baked a 1.8 kilo boulé without any shaping support on a simple pizza stone without having the dough "leak" (in general, if it is "leaking" post proofing, the dough has probably been overproofed and the gluten has weakened).

3\. Fermentation time seems really low. Most sourdough types I am familiar with take overnight to ferment, and then 4 or so hours in the proofing basket to be fully ready. I've never baked after such a short fermentation period as described in the article, but I would imagine the resulting bread does not have the full airation, flavor, and texture that it otherwise would.

4\. Technique - in my experience and as far as I have read, you do not have to knead at all. Most dough need only 3-4 rounds of "folding" during fermentation, where each edge of the dough is stretched and pulled over itself. That forms plenty of gluten. Shaping post-fermentation is similar, where after the edges are pulled over, the loaf is inverted on the seam and gently dragged around to create surface tension. _Definitely do not knead during shaping_.

For what it's worth, making your own bread is great. My first results were barely edible shame-disks with the texture of hardened gypsum, but after I got a handle on the correct techniques (and more importantly - patience) I have not purchased bread in a store for the better part of a year.

<comment><AUTHOR> Great feedback. I agree 70% hydration might be low. But it is a good way to start baking. I highly suggest that everyone should A/B test this variable and see which loafs he likes more.

</comment></comment><comment><USER8> One of the better techniques I've picked up (pretty sure I got it from [https://www.amazon.com/Flour-Water-Salt-Yeast- Fundamentals/d...](https://www.amazon.com/Flour-Water-Salt-Yeast- Fundamentals/dp/160774273X)) replaces the kneeding steps with folds during the first 2-3 hours of bulk fermentation. Basically after mixing in starter transfer to large fermentation vessel, reach under the dough from 4 corners one at a time, grab and pull over the top of the dough to opposite corner. Wait an hour and repeat, wait 2 hours and repeat, then let fermentation do it's thing.

This saves a lot of effort, mess, and prevents dough from becoming overworked. Effort that can later be expended in dough shaping steps ;-).

<comment><AUTHOR> Yes this works with strong all purpose flour. What happens if you use rye dough? You can't stretch and fold it. The rye has too weak gluten structure. It will mostly fall a part.

</comment></comment><comment><USER9> If you like this kind of stuff, you'd enjoy this: [http://girlmeetsrye.blogspot.com/](http://girlmeetsrye.blogspot.com/)

</comment><comment><USER10> For those interesting in fermentation in general, I can recommend the book "Wild Fermentation" by Sandor Katz.</comment>


DigitalOcean Raises $37.2M From Andreessen Horowitz to Take on AWS - <AUTHOR> http://techcrunch.com/2014/03/06/digitalocean-raises-37-million-from-andreessen-horowitz/?ncid=rss&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+techcrunch%2Ffundings-exits+%28TechCrunch+%C2%BB+Fundings+%26+Exits%29 <comment><USER2> Adding to the commentary on here with something not so gushing:

* kernels lag terribly behind the distributions meaning you're wide open sometimes.

* can't resize or add storage

* no freebsd support or custom kernels

* VM availability problems. If you want to have another box, you aren't guaranteed to get one.

* no IPv6

* somewhat shonky security reputation.

* cant deliver to yahoo mail from their AMS2 IPs I've been given even after filling in numerous forms at yahoo.

Apart from that, they're the best hosts out there. I pick them over Linode, Hetzner and EC2 but not colo. Even at the price point they're at.

<comment><USER3> Don't write about the owner's golf buddies either.

[https://vpsexperience.wordpress.com/](https://vpsexperience.wordpress.com/)

An odd experience, I would say.

<comment><USER4> Regardless of the truthiness of this blogpost, their ToS actually includes this gem (repeated twice actually, due to poor editing):

 _3.13 Subscribers may not use the Services in a manner that would violate the lawful privacy rights of any person, ... or embarrass, which shall be determined in DigitalOcean's sole and absolute discretion._

So... if someone gets embarrassed by what you put up, DO just decides to take it down.

[https://www.digitalocean.com/legal/terms/](https://www.digitalocean.com/legal/terms/)

<comment><USER5> We try to provide the best cloud experience possible and part of that is following up on abuse complaints, otherwise we end up with blacklisted IPs and other issues that impact customer service.

There are occasional weird situations like this that come up and I would love to handle every support request directly but unfortunately that's not possible.

We've had to scale the support team to support over 100,000 customers and we didn't get the right customer support director on board till about 2 months ago.

We are constantly looking to improve our service in all areas and Zach is on top of it to ensure that all of our customer support staff get more training in how to better respond to customers.

However, the promise that I make is that if any situation ever arises in any way shape or form with DigitalOcean please contact me directly - moisey --- a-t --- digital0cean - and I will be on top of it as soon as possible.

I hope that helps in response to this issue.

Thanks, Moisey

<comment><USER4> Can you elaborate on "blacklisted IPs" for hosting content? For spam or compromised boxes, sure. For hosting a webpage that "embarrasses" someone?

At any rate, I have no way of knowing about this issue. It's just curious that DO would put embarrassment as a ToS violation. All sorts of stuff embarrasses all sorts of people. Might as well just put up "DO reserves the right to terminate your services, at any time, without reason."

<comment><USER6> celebrity photos are huge, huge business. sites pop up all the time trying to monetize papparazzi shots and hosting providers have to deal with all sorts of fallout from anyone with a vested interested in the intellectual property or famous name.

these people do not give a shit about the streisand effect. they are going after their money.

<comment><USER4> So in that case DO receives a DMCA takedown, they comply, and let the customer deal with it? Or you're saying they file malicious lawsuits against the hosting provider and courts happily allow these suits to proceed and don't award fees to a neutral hosting provider?

<comment><USER5> We forward any abuse complaints that we receive to the owner of the account and ask that they handle them.

We try not to interpret the law as that is not our specialty of course, we are simply saying that we would like that customers use the service for a non- malicious purpose. But we're more than happy to open up a dialogue about this and make amendments if necessary.

Thanks!

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> I really like these guys. It's really no-nonsense hosting, which as a developer, is exactly what I need.

I've been (stupidly) running my website, VPN, and e-mail servers all on a single EC2 instance, mostly because I had a bunch of AWS credits. I got some Google Cloud credits, so decided to move it there. I then realized that I'm spending $60 a month on a single instance, which despite having "free" money, is stupid.

I split everything up into Docker containers, and run them on Droplets now. Sure, I pay $5/month now for each server, but that's fine. One of the e-mail servers is for my wedding; I'll turn it off when I don't need it anymore. The interface for bringing up new Droplets is simple and clean, and lets me do exactly what I need to, no more and no less.

If you look at AWS or Google Cloud, there are so many available services that it can be daunting to get simple things going. I mean, it's not _that_ bad, but once you've seen DO's interface, you realize how unnecessary a lot of it is.

I would still likely use AWS/GC for cases where I need to respond to changing load needs, which incidentally, is exactly what you're supposed to use it for. A DO + AWS hybrid infrastructure would be most ideal IMHO.

<comment><USER8> Agreed, as a beginner I found the amount of configuration that is needed to set up an EC2 instance to be overwhelming. After seeing DO's interface and how easy it is to spin up an new droplet I was hooked.

Its been a really great and easy testbed where I can test out new things I am learning. Now I can get a VPS running linux serving up webpages with apache in about 20 min. Add in the great price and I have been hooked for over a year.

</comment></comment><comment><USER9> Broken DigitalOcean promises:

IPv6 in Q4 2012: [https://www.digitalocean.com/community/questions/is- ipv6-ava...](https://www.digitalocean.com/community/questions/is- ipv6-available)

Ability to boot own kernel ("2-3 weeks from Feb 2013"): [https://digitalocean.uservoice.com/forums/136585-digital- oce...](https://digitalocean.uservoice.com/forums/136585-digital- ocean/suggestions/2814988-give-option-to-use-the-droplet-s-own- bootloader-?page=4&per_page=20)

<comment><USER5> Completely agree with you, we definitely broke a few promises.

We ran into this problem because we were used to our development cycle that we had in 2012, but in 2013 our growth really took off and we spent most of our time working on scaling challenges.

That unfortunately pushed us back on a lot of different timelines. Now that we've grown the company from 5 people to over 50 and with this latest round we're finally catching up and able to move things forward at a better pace.

We are reviewing and reprioritizing our product roadmap this weekend and next and will be providing more updated timelines and also issuing more updates if we fall behind on the new estimates.

Thanks, Moisey

<comment><USER6> the interesting thing about the hosting market is the less people pay, the more entitled they feel.

not sure if digital ocean has customers in the $20k+/month range, but they are by far the least demanding.

pretty incredible isn't it?

<comment><USER10> > the interesting thing about the hosting market is the less people pay, the > more entitled they feel.

This is not restricted to web hosting, but common human behavior.

I've freelanced as a web dev and wedding photographer in the past. Low paying clients typically demand much more than higher paying ones.

<comment><USER11> I've found that more often than not, this is because those who are constrained to smaller budgets tend to be personally invested in the success of their business where return on investment is of critical importance (i.e. small business owners).

</comment></comment></comment></comment></comment><comment><USER12> DigitalOcean banned me because I was using their server to fetch chromium's source code so that I could git-bundle/rsync it's 12 GB mammoth of a repo and download it to the third-world country that I live in (my network connection is really bad even though it's the best money can buy). Apparently I violated their TOS. As long as they limit their TOS to such narrow purposes as hosting a wordpress site or doing straight-forward things, I don't think they'll get too far. With AWS, amazon doesn't care if I spawn out a 1000 node render farm, as long as I'm paying, it's all fair game.

Good luck anyways.

<comment><USER13> > With AWS, amazon doesn't care if I spawn out a 1000 node render farm, as > long as I'm paying, it's all fair game.

For smaller numbers of instances it's true that you can spawn whatever you want and use them for whatever you want, as long as you pay the stated rates. But for larger numbers of instances you do actually have to tell Amazon what you want them for, and your requested use-case "will be considered". You can't just spin up 1000 instances and pay the stated rate without getting prior authorization; the API will block new instances after a certain point. Here are the default instance limits: [http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run...](http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2)

<comment><USER12> Well, 1000 was just a number I blurted out.

</comment></comment></comment><comment><USER14> _First, it's cheap._

Second, it's integrated. Which, to me at least, feels much more natural than AWS where you rent a virtual server, and then a database separately, persistent storage separately... Because it's integrated, it's also simple.

And they have a datacentre* in Amsterdam. Even two of them, right in the heart of the European Internet. That means latency to their servers is not noticeable in much of the EU.

* Yes, yes, probably more like a cage or whatever they rent.

<comment><USER15> What is integrated about it? They're just a VPS provider, which is a strict subset of what you can do on AWS.

<comment><USER16> Correct me if I'm wrong, but aren't they a cloud provider? Ie. a bunch of machines connected into a distributed network, acting like a single virtual machine but with unlimited speed, memory and bandwidth, with the possibility of downtime completely eliminated, and where one only has to pay for the speed, memory and bandwidth one uses.

<comment><USER17> Everything you wrote is wrong. Not sure what to correct.

They are a VPS. They do bill hourly, which makes them somewhat unique. They were early to offer SSDs. Their pricing is great.

I don't want the "cloud". I want a really good VPS. Digital Ocean fits that bill.

</comment></comment></comment></comment><comment><USER18> I'm a (moderately [1]) happy customer. But I have to ask, isn't this industry slowly turning into just virtualized hardware leasing? After the management tools commoditize, and I think there's a solid risk of that, isn't it just price and DC-location that differentiate?

And in that vein, wouldn't the winner in each area just be the one who bought their hardware the most recently? Instructions/dollar are still increasing on each CPU generation, but it'll take more than one generation for each machine to pay itself off. So, whoever is closest to the current generation pays the least per instruction, and can charge the least.

Or, maybe it's memory/bandwidth, which are mostly commodity, but slightly bottlenecked by the hardware (e.g, max on a motherboard, NIC throughput). Maybe the combination of prices in cpu, memory, and bandwidth leave enough variation between competitors to keep the field a little open? I donno.

[1] Modulo concerns about their ssh key management. I haven't looked after the last news ping on it.

<comment><USER19> > _isn 't this industry slowly turning into just virtualized hardware leasing? > After the management tools commoditize, and I think there's a solid risk of > that, isn't it just price and DC-location that differentiate?_

Well, I don't think it's like aircraft or auto leasing. More like apartment or office leasing -- there's also a property management, maintenance, and operation dimension.

You're not just paying for hardware in a rack. You're paying for electricity, cooling, fire prevention, connectivity, and some level of uptime. i.e. You're paying for not having to worry about a bunch of stuff, so you can focus on your core business problems.

Even with standardized management software, at some point a human needs to go into a cage, or deal with the backhoe emergency. (OK, unless someday Amazon drones are deployed in data centers, instead of doing residential delivery. :))

<comment><USER18> I like this analogy. It's like you're leasing an office for your program to work in. It works well for both pricing and differentiation.

</comment></comment></comment><comment><USER20> Classic TC title "to Take on AWS"... Don't make me laugh buddy. AWS is probably more than 1,000+ people operation with 30 different products and a marketplace, support and ops teams. DigitalOcean is purely a VM seller with no cloud or storage features.

</comment><comment><USER21> I've been using DO for about 5 months now, and love it. I still host my main websites other places (dreamhost, who, despite some issues, has been consistent in improvement, and is fair in prices), and I use DO for stuff like mumble servers, a few games, as a ssh proxy from less secure locations, and as some as a shared shell with friends for various skullduggery and fun. Very impressed with DO's service and price, but even more so ease of use.

My main issue is that I would like a hardening script, instead of having to go through each new one I spin up and lock it down.

<comment><USER22> I just make a "Skeleton" instance that has all the hardening stuff already on it, then clone all my new machines off of this instance.

<comment><USER21> I don't know why I hadn't thought of that, thanks for the tip.

</comment></comment></comment><comment><USER23> I've said many, many times that the best thing you can do as a budding dev is to spin up a VPS somewhere and start hacking.

A while ago, I started giving out VPSs to friends of mine to get them to stop making excuses about why they can't code.

Digital ocean, at $5/mo, has made this really easy :)

<comment><USER24> Hey man what are some cool things that you recommend I try with a VPS :) ?

<comment><USER25> * Try a programming language that you haven't tried before.

* Set up a static blog engine like Pelican [0]

* Learn Ansible [1]

* Try a distro you haven't used before

[0]: getpelican.com

[1]: [http://sendgrid.com/blog/ansible-and-digital- ocean/](http://sendgrid.com/blog/ansible-and-digital-ocean/) (although this really doesn't show off the power of something like Ansible)

</comment></comment></comment><comment><USER16> Love DigitalOcean. Sorta sad they still don't offer OpenBSD though.

OpenBSD -- the world's simplest and most secure Unix-like OS. Creator of the world's most used SSH implementation OpenSSH, the world's most elegant firewall PF, and the world's most elegant mail server OpenSMTPD. OpenBSD -- the cleanest kernel, the cleanest userland and the cleanest configuration syntax.

[https://digitalocean.uservoice.com/forums/136585-digital- oce...](https://digitalocean.uservoice.com/forums/136585-digital- ocean/suggestions/3232571-support-bsd-os-)

<comment><USER26> Saw your OpenBSD spam yesterday too. Do you develop for the project?

<comment><USER27> The thought of OpenBSD developers doing any kind of marketing, honest or otherwise is amusing. These are the last people that would do anything other than simply letting the work speak for itself.

</comment></comment></comment><comment><USER28> DigitalOcean are dishonest with their customers. It's sad to see such a reputable firm throw in with people known to be liars.

<comment><USER29> It would be good if you can elaborate your point and back it up otherwise just saying this doesn't inspire much confidence.

<comment><USER28> [https://www.digitalocean.com/company/blog/transparency- regar...](https://www.digitalocean.com/company/blog/transparency-regarding- data-security/)

The lies are still up on their blog:

"At no time was customer data "leaked" between accounts. This would require that a user not scrub their volume after destroying their server; in this instance data would be recoverable and should be considered not sensitive."

For a long time, if you deleted a DO virtual machine, it would not delete your data by default, so that the next customer would receive it on the block device to be recovered.

When I pointed this out to them, after it caused me a few thousand USD in credits I had to issue to my customer (as I remediated DO leaking my customer's data (through my use of the service)), they maintained "there's no leak because we give you a checkbox".

There is absolutely no circumstance, checkbox or no, in which delivering my data on disk to another customer is okay.

After I made a huge stink about it, it ended up at the top of HN, and they switched to a sane default (scrubbing disks after a user deletes a VM). It shouldn't even be an option, but there it is.

Despite all of this, though, they continued to lie about the root cause: they were careless with their customers' data and trust.

It looks like they've hired some people who aren't dicks and have since updated the blog post with sanity. Nice to see, but still: be mindful of how these people conduct themselves.

<comment><USER30> Don't forget how they censor on demand for their friends.

[http://vpsexperience.wordpress.com/2014/01/05/digital- ocean-...](http://vpsexperience.wordpress.com/2014/01/05/digital-ocean- threatened-to-shut-down-my-blog-if-i-didnt-remove-or-edit-a-blog-post/)

</comment></comment></comment></comment><comment><USER31> I am running these services in a $5/month DO droplet: dns [named], ntpd, httpd [apache], smtp [postfix], imap [dovecot], webmail [roundcube], vpn [pptpd]. It's taking 350MB off 500MB RAM.

Now after adding getmail to back up gmail I am now wondering what more I can do with it.

<comment><USER32> I tried installing postfix/dovecot but couldn't do it. Any recent tutorials I could try?

<comment><USER33> Had you tried this tutorial?

[https://www.digitalocean.com/community/articles/how-to- set-u...](https://www.digitalocean.com/community/articles/how-to-set-up-a- postfix-e-mail-server-with-dovecot)

I had used it to setup a test server and had no issues -- FYI, the date on the article is today, but the original article has been available for a few months so perhaps the article has been updated.

</comment></comment></comment><comment><USER34> AWS is a cloud service provider with a huge ecosystem of services. Digital Ocean is a VPS provider.

It's like comparing a harddisk manufacturer to Apple.

Even EC2 is barely an overlap, since EC2 is a computation unit in the convenient form of a (very ephemeral) virtual server, not the virtual equivalent of an actual, permanent server. (And you're going to be in a world of hurt if you use them like that.)

</comment><comment><USER35> If you can scale your system using only 0.5 GB per node, you get more cpu per dollar since the 5$ and 10$ levels both have 1 cpu. Higher levels seem to be multiples of the 10$ level. Does anyone have experience with this in a production system with a lot of users? Are there horizontally scalable database systems that work well on many nodes with only 512MB each?

<comment><USER36> Most DB systems will be tremendously helped by having far more RAM than that to cache, and also usually by having fewer nodes than you get when only having 20GB total disk space per node.

The main place where I could see this being appealing would be complex analytic jobs (since they're more CPU-intensive), but even so, if on 512MB nodes it has to spill to disk because there isn't enough RAM (or transmit a bunch of data across the network because it split the job over two nodes) and on a bigger machine it didn't need to, you probably would have been better off with the bigger machine.

</comment></comment><comment><USER37> Despite generally rock-solid performance and uptime, I had a bad experience with DO recently. After experiencing repeated hardware failures on a node (with lots of downtime), I followed the advise of their support and did a snapshot and destroy of the failing droplet and immediately attempted to create a new one from the snapshot. It failed to build. I then tried to build again from the automated backup they create when a droplet is destroyed, this also failed. Support just did not seem to understand the issue I was having, I kept getting canned responses about doing a snapshot then building a new droplet from the image, so I gave up.

The entire site had to be created again from backups on a different VPS provider. Surely their system should be able to migrate any droplets off failing nodes automatically, I mean hardware failures happen right?

</comment><comment><USER38> I use linode and was drawing comparisons between two: 1\. 8 cores on linode is what binds me to it. Linode rules here 2\. Digital ocean is cheaper than linode 3\. More Network transfer in linode (minimum 2TB) 4\. Digital ocean offers more RAM 5\. Private network - Does not exist on Linode. Shame. DO Rules..

What else...

<comment><USER39> Rocksteady reliability, I've had zero unplanned downtime on Linode over 2-12 nodes in 5 years.

DO had lots of hiccups with it's networking when I tried them (though was over a year ago so ymmv).

Everything I have on Linode earns me money in one way or another so they pay for themselves, I currently have 3 nodes for a total of $60 bucks a month, DO I could do the same for $15 but really $45 a month is nothing compared to the cost of a machine going down even briefly (even if it takes me an hour to fix, I bill more than that).

For me Linode hits the sweetspot of price/reliability.

<comment><USER40> My experience (running ~7 machines in Linode's NJ datacenter) was that around once every two months I wake up with an email saying "we restarted server X due to emergency maintenance". It's not annoying enough to switch - yet. And EC2 has the wrong CPU/Memory ratio for me (too little CPU - Linode rocks here!).

</comment></comment></comment><comment><USER41> "The company is also working on IPv6, load balancing and eventually storage."

Looking at the feedback from their user base, and even rom my own experience, different storage options would be way more useful than IPv6 or even load balancing.

<comment><USER15> It's been incredibly difficult to get an answer out of them on whether they pool bandwidth[1], which would allow you to just build your own load balancers on their smallish instances while leveraging the transfer included in the rest of your clusters.

I finally got an answer last night[2]

1\. [http://digitalocean.uservoice.com/forums/136585-digital- ocea...](http://digitalocean.uservoice.com/forums/136585-digital- ocean/suggestions/4141790-pooled-bandwidth) 2\. [https://twitter.com/jedgar/status/441314391301296128](https://twitter.com/jedgar/status/441314391301296128)

<comment><USER42> Communication is my biggest issue with DO - I generally like their service but it's majorly frustrating when they just refuse to answer any questions about things like IPv6 (The best I could get out of them on that was 'Look at the UserVoice page about it' \- which I already had hundreds of times over the years. Not really a great answer since the latest post by then from a staff member was something like eight months ago saying there's be a public beta in October which never needs up happening)

<comment><USER43> It's really just been a lack of people coupled with intense growth, till recently we've been well well under 50. We're working on it, and now we have money to add lots more hires.

</comment></comment></comment></comment><comment><USER44> I moved my personal Web hosting from another provider to DO a couple of months ago. I'm spending the same amount I was paying the other provider, and I'm getting a _hell_ of a lot more for my money. (I have two droplets running right now, one with my Web server and mail, one running some network services...and I have plenty of capacity on both to do more.) Plus, since it's an actual VPS as opposed to shared hosting, I have more control over it. I'm kicking myself for not having made the jump earlier.

</comment><comment><USER45> Let's hope DO finally get their act together.

No Pooled Bandwidth Networking and Route, as well as capacity need some work. Linode is much better in this regards. No Custom Kernels IPs Problem. Still no deploy to different physical hardware by default. No Private Networking on most of its DC.

And possibly many other small things i didn't mention. To me most of those are deal breaker. And my problems with them is that are not fixing or improving these problem quickly enough.

While Linode's SSD are quickly approaching, and has none of those drawbacks.

</comment><comment><USER30> Do they have IPv6 yet?

What about actual security too?

Maybe they'll stop the censorship if they want to be a real VPS player? ([https://vpsexperience.wordpress.com/](https://vpsexperience.wordpress.com/))

Oh, and I wish they'd use real industry terms, not stuff like 'Droplet'. That's just stupid.

Right now, anyone at all who aren't GoDaddy or Network Solutions are better than Digital Ocean. You get what you pay for (AWS excepted, who are price gouging).

Full disclosure: Happy Linode customer.

<comment><USER46> News story about a cloud hosting provider?

Here's some dissenting opinions about them. Half of them have some sort of merit.

Disclosure: I have a vested interest in their direct competitor.

Seriously, man? You point out some valid things but this post doesn't really serve a purpose.

<comment><USER30> No IPv6 is fairly serious. As is censorship to the point I wouldn't feel comfortable using them in case I angered Big Google at some point. Their general lack of HA and resource shortages make them look like amateurs.

So what if I use Linode? I don't work for them. I use two other providers as well. My 'vested interest' in them is limited to my VPS there running. I don't get a discount for pointing out DO sucks and Linode don't ban me if I speak ill of someone they like.

PS. Is a VPS host really a 'cloud hosting provider'? That term makes me think of overpriced individual services that aren't a self contained system, like AWS/EBS/their hosted databases.

</comment></comment></comment><comment><USER47> $37.2m on a $153m post? That's a pretty big chunk of the company to give up. Looks like A16Z is going big on these guys. They're awesome, so that's great news!

<comment><USER48> Most VC's want 20%-25% ownership. And DigitalOcean is a very capital intensive tech company, needing to buy/build machines, pay for electricity, rent rack space, and pay for bandwidth. Virtually all tech startups on the other hand just need to pay for writing software and renting said machines/hosting.

</comment></comment><comment><USER49> Its simple. It costs half as much as equivalent providers for their VPS. Or less than half in the case of AWS. And it actually works even though its so cheap. No matter how rich you are it just doesnt make sense to pay double or triple.

The question is, do you really make money on $5 a month servers? I don't know if they actually are. The costs are for support people and now large numbers of engineers.

The thing is with that much funding it doesn't really matter if their income is greater than expenses. They can continue for at least another few years regardless. During that time sane people who just need a VPS will take advantage of it.

My recommendation for DO's business model is simply to set a precedent and make it a policy that if you pay only $5 then you don't get any kind of free support. That is the only real cost that sticks. So I suggest having a few different monthly support options available starting at zero support for $0 and up. That is the main business issue a provider like this has is the conflict between the desire to provide good support and the need to keep unit costs low. And the solution is to separate support out. The main challenge to doing that is sort of a cultural/expectations/marketing issue.

<comment><USER5> Thanks for the great question. We are actually profitable on every virtual server that we sell.

The reason we raised our seed round is that our growth began to outstrip our ability to acquire hardware and grow the business at the rate at which our customers were spinning up more droplets.

The second round that we raised was again for the same reason. Growth has been completely unbelievable and we are humbled by the support that the community has given us. We thought that our initial Seed round would certainly be enough to cover our growth but quickly saw that growth was actually increasing so we made the decision to raise a second round in a rather short period of time.

We were immediately impressed by Peter Levine's knowledge of the space and we are super excited about having a16z on board as our partners. This round has certainly provided ample funding for us to continue to expand not worry that our growth is going to outstrip our ability to finance it.

Thanks, Moisey

<comment><USER50> I see from your site you're hiring for various positions, but currently all of those are listed as NY only.

I spent seven happy years working remotely as a system administrator, for a company listed in some of these comments, and wonder if this is something you've ever considered?

I know that payment issues and similar might complicate things, but I'm surprised there seem to be essentially zero remote-working positions advertised for a company that will have round-the-world clients/users/customers. (i.e. You're liable to get issues, tickets, and monitoring alerts round the clock.)

<comment><USER51> I traded emails with Moisey previously, they're not open to remote work (and I wasn't willing to move to NY).

</comment></comment></comment></comment><comment><USER52> Mark my words these guys are gonna be huge. Sure they are lacking in a lot of areas (like bananas mentions) but thats why you get VC funding and hire a badass like Jeff Lindsay ([http://progrium.com](http://progrium.com))

I'm really excited to see these dudes take on AWS with a higher-level and more performant platform.

<comment><USER53> Seems like they are also highly lacking in customer service [https://vpsexperience.wordpress.com/](https://vpsexperience.wordpress.com/)

</comment></comment><comment><USER54> Only tangentially related, but when did DigitalOcean redesign their website?

I think my initial dislike is due to it being changed, but there are tons of minor usability issues that I never noticed on their old website.

I'm happy to see a view for new articles in the tutorials database [0], but at the moment it doesn't make any sense. When I hit it just now, an article from 11 minutes ago is above an article from 1 minute ago. Not only that, an article on the 52nd page says "less than a minute ago". From clicking around, it seems like some process has touched every article recently and all those times, and how they are sorted, are meaningless. Also, at the moment the new and tending view gives the exact same outcome, at least for the first page.

[0] [https://www.digitalocean.com/community/articles](https://www.digitalocean.com/community/articles)

<comment><USER55> > when did DigitalOcean redesign their website?

Must have been very recent; I was on it just the other day with the old design.

</comment></comment><comment><USER56> We run our infrastructure on both AWS and DigitalOcean. 1) DO consistently beats the price performance. 2) DO has simple pricing model --> No ondemand / reserved instances 3) AWS is more feature rich but DO continues to add new functionalities like private networking and new data centers

<comment><USER57> Must be nice to have your providers competing with each other. Everyone knows Bezos loves a good ole race to the bottom better than anyone. I suspect we'll see even steeper AWS price cuts this year in response.

<comment><USER51> S3 price cut was nice. The EBS storage price cut was even more extreme (and fantastic) going from 10 cents/GB to 5 cents/GB.

At Amazon's scale, you can make it up on volume.

</comment></comment></comment><comment><USER58> Maybe they could spend some of it on hiring a better marketing team. Holy shit those youtube ads are terrible.

</comment><comment><USER59> I would love to see DO or Linode do a S3 type service as well. I prefer the persistent virtualization of DO and Linode to EC2 but also want to use a nice quick persistent file store that isn't on my own slice.

I could just use S3 from Linode but that would result more paid bandwidth and increased latency.

<comment><USER60> Rackspace Cloud has both persistent disks for VMs (on SSDs in RAID 10, so fast and reliable) and an S3 like storage system called Cloud Files. Sounds like that's the combination you want?

<comment><USER61> They do hourly billing as well which Linode is missing.

</comment></comment></comment><comment><USER62> While not suitable for production operations, my go to has been a random one man vps shop. I have used him for years, because it is the cheapest plan I have seen. I pay $20/year per server, which makes it an easy decision to add another one whenever an idea comes up.

</comment><comment><USER63> No matter where I go, the prices don't get any better than they do in OVH. A 240 GB SSD (2 X 120), quad core, 32 GB RAM, unlimited bandwidth for just $60/month?

<comment><USER61> I'm with OVH.

I like them and they are cheap but if your server fails then it can take hours to days getting back online.

</comment></comment><comment><USER64> "The company is also working on IPv6, load balancing and eventually storage." A simple solution for load balancing and auto-scale will be amazing :)

</comment><comment><USER65> I've been using DO for about a year, and I've been mostly happy with it but that's because the project I run [http://www.mybema.com](http://www.mybema.com) doesn't receive as much traffic or active users as I'd like it to. DO has gone down far too many times in the last year for me to be able to be completely confident in them with a 100x userbase.

</comment><comment><USER66> took me 3 hours today to do a power cycle (reboot)

vs 2 minutes on linode

</comment><comment><USER67> I use them for remote DC's (assia, EU, etc.) at $5 each.

Only their billing is a hot mess, mostly because they think it works and their customers are wrongly entering the CC #. For 4 months now, same problem and they have off-shore support that reads scripted answers. They just read the closest answer related to billing.

<comment><USER23> Remote _domain controllers_? (Sorry, I'm missing something here, I think)

<comment><USER33> Probably "remote _data centers_ " in this context

</comment></comment></comment><comment><USER68> I am reading Ben Horowitz's book, and it is interesting to me that they made an investment into the same field as LoudCloud 15 years ago. Maybe they were just before their time.

</comment><comment><USER69> DO is great - I just wish features like adding extra disk space and monitoring bandwidth usage were here sooner.

</comment><comment><USER70> Digital Ocean does pretty well on price/performance at www.cloudlook.com (disclaimer: my site)

</comment><comment><USER71> I like AWS, and this is good for me - because competition is good for the customer.

</comment><comment><USER72> In one line how is DO?</comment>


LGTM: a Chrome extension inspired by a tweet - <AUTHOR> https://sul.im/blog/lgtm/ <comment><USER2> How about uploading it to addons.mozilla.org as well?

<comment><AUTHOR> Good point! That's on the list already :)

Seems like it's relatively easy to convert a Chrome extension into a Firefox addon. So I'm going to do that as the next step. The source code will be in the same repo on GitHub ([https://github.com/soulim/lgtm](https://github.com/soulim/lgtm)).

</comment></comment><comment><USER3> Thanks for sharing. This is a great little project.

<comment><AUTHOR> Thanks! :)</comment></comment>