Top 10 Reasons to Avoid the SimpleDB Hype - <AUTHOR> http://www.ryanpark.org/2008/04/top-10-avoid-the-simpledb-hype.html

<comment><USER2> All valid points _if_ compared against a single-instance RDBMS. Except that modern RDBMS used in any large scale web service will also be guilty of these points. When you shard/cluster your data across various master/slave DB instances you essentially lose the ability to store your data in a non-atomic normal form, just like SimpleDB. In both a sharded RDBMS and SimpleDB your data is denormalized.

With a DB setup like this (and all major web sites are) you cannot feasibly join, group by (or do associated aggregations), or order by anymore anyway. Constraints are not really a good idea either. It would be nice if SQL was still useful in a situation like this but it just is not.

The days of hugely massive single machine databases is coming to and end if not already dead. Even if you are reporting on massive amounts of data and need to do aggregations across large datasets, then OLAP is increasingly becoming the way to go (again, with fact tables and cube partitions sharded across multiple instances to increase query performance).

<comment><USER3> Your argument is good, but it also serves to advance the argument that using SimpleDB for a new web app is premature optimization.

Yeah, when your app has millions of users and massive amounts of data you might need to adopt sharding or clustering, perhaps giving up the advantages of a huge single-machine database relative to SimpleDB. And, _once you have this problem_ , it might be a good time to contemplate rearchitecting your entire system around something like SimpleDB. But few web apps _start off_ with millions of users and massive amounts of data, and to deliberately avoid using SQL tools just because they won't scale to Facebook-esque levels of traffic is the very definition of "premature optimization".

</comment></comment><comment><USER4> Finally, someone took time and said it. Moreover, I'd recommend for someone who didn't have exposure to "big iron databases" to look up performance benchmarks for Oracle, Microsoft and DB2, they're very popular not only among these companies but also among big-iron manufacturers like Sun, IBM and HP. It's crazy what they can do if you use them right, good luck building a business that will need such transactional capabilities of your DB.

<comment><USER5> I assume the real appeal behind SimpleDB is that you don't have to buy servers, disk arrays, backup systems, a data center, 24-hour techs to swap RAID drives, etc. You just put your data in there and forget about that stuff.

<comment><USER2> Exactly. And its not just hardware you can forget about. No longer having to worry about indexing, scheduled backups and database shrinks, temp table sizes, connection pooling, and all the other nasty stuff that goes along with maintaining a DBMS is equally as nice.

I've switched my project from a local MySQL instance to SimpleDB and I'm never looking back. It took some work to simplify my existing schema to be purely atomic (no joins), but after that you can forget just about everything else.

<comment><USER5> I would be interested in hearing more about your migration from MySQL to SimpleDB.

Basically, I am a big fan of normalization (since none of the other ways seem elegant to me). For example, if I were going to write the schema for a Blog, I would have an articles table, a tags table, and an article<->tag mapping table. This means that "show me articles with tag foo" is indexed (and "faster" than an O(n) search over the articles table).

The only approach I can see with SimpleDB is to tolerate scanning all articles to search tags (and authors, etc.) or to maintain a separate "document" for each tag (that links to the articles with the tag). Then I worry about concurrent updates to a tag ( {foo:[1,2]} gets updated to {foo:[1,2,3]} while someone else immediately changes it to {foo:[1,2,4]}; the correct result would be {foo:[1,2,3,4]} but adding 4 overwrites adding 3.)

Anyway, like I said, I would be interested in hearing people's experiences. Perhaps I am missing something obvious.

<comment><USER2> With SimpleDB, you can still accomplish many-to-one and even one-to-many. So in your example schema you described, you could have an attribute (aka column) in your tags domain (aka table) which holds the ids of the article items (aka rows) in your article domain that the tag is associated with. Since your data is denormalized though, you will have many duplicate items if a tag applies to many different articles. Thats ok though, SimpleDB was designed for this dont worry about large domains.

So this is how you could get your many-to-one mapping. To determine what articles have tag foo, you would just do the equivalent of select from tags where your attribute value matches the item id for the desired article.

It seems unintuitive, but you can actually do one-to-many mappings too with SimpleDB. So you could say "show me all the tags for article A" without a join table or duplicate items. The reason this is possible is because SimpleDB can attach up to 256 values to a single attribute. This obviously isnt possible in SQL. You just assign references to each tag id for that article to one attribute. Kinda like putting a list of Strings in a single cell in SQL. Be very careful with this though, as you cannot exceed 256 values bound to 1 attribute. So no more than 256 tags per article in your example.

But the problem with all this is keeping track of changes. updates and deletes do not cascade so you have to handle that yourself. And of course you have to consider eventual consistency if making frequent changes on top of each other.

My suggestion to help reduce the complexity of managing your domain references is to use this library (if you are using Java that is). It makes SimpleDB so much more usable: <http://code.google.com/p/simplejpa/>

<comment><USER5> Thanks.

I hacked together a SimpleDB-alike tonight and played with various index-on- write schemes. I feel a bit better about the situation now. Of course, now I just need to make it as scalable as SimpleDB :)

( Example usage: [http://git.jrock.us/?p=MooseX-Storage- Directory.git;a=blob;f...](http://git.jrock.us/?p=MooseX-Storage- Directory.git;a=blob;f=t/example-blog.t;hb=HEAD) )

You can tell from the test data that I am in a weird mood, though, so time for bed :)

</comment></comment></comment></comment></comment></comment><comment><USER6> if you think in SQL every project seems to require the "advantages" of an RDBMS. But the critics are forgetting that:

a) when you use sharding your RDBMS looses most of the advantages you seem to like so much

b) SimpleDB and friends not only distribute your data but they allow you to parallelize your queries. think map/reduce

c) as a programmer I would much rather solve summing and grouping in my code then learn the subtleties of properly configuring and managing a particular RDBMS (and re-learn everything when I switch vendors)

I'll agree that SimpleDB is not appropriate for everything, but most of the perceived problems are really just a lack of creativity.

<comment><USER7> I'm not quite sure I understand what advantages are lost by sharding -- would you mind elaborating?

As far as being able to write parallel queries, this is perhaps true, but _you_ have to manage the parallelization, synchronization, and all other manner of nastiness. For data that doesn't require frequent updates (like Google), this may be a better route, but for systems where consistent data is important, I would much rather rely on years' worth of RDBMS research. It's not a matter of a lack of creativity; rather, I would prefer to spend my time solving problems as they are related to my application, not duplicating the bits of an RDBMS that aren't present in SimpleDB.

I find point (c) to be a bit surprising -- SQL is based around the concepts of set theory, and works in a fairly straightforward fashion. While there are differences between implementations, you certainly don't have to 're-learn everything' when you switch vendors, and the basic tasks of database management are not terribly complicated.

And yes, I regularly bounce between about three different SQL implementations (Postgres, MySQL, and SQLlite). Spent some time with Sybase as well, and I am not a DBA. There are differences, definitely, but it never took me more than a day or two to get up to speed, and I am not a genius by any stretch of the imagination.

</comment></comment><comment><USER8> If you needed to, you could solve most of the problems with SimpleDB by writing a server that wraps it and provides consistency checks, sorting and such. I was considering writing that for a little while.

Then they announced that they were going to support mountable drives on EC2 images, and it stopped being necessary. When they release that, you'll be able to load up a more straightforward MySQL or PostgreSQL setup, and use traditional clustering mechanisms.

Honestly, I find SimpleDB interesting, but I have no idea what I could use it for without writing quite a bit of middleware to wrap it.

</comment><comment><USER9> Good article. Like anything, there are pros and cons to each approach. I tested SimpleDB pretty thoroughly for the next version of Gridjit and decided against using it.

One of the drawbacks to working with these sorts of storage services is the temptation to create overly-abstract models too early. Abstraction and metadata-based schemas are great but can also add needless complexity (ironically) early on.

</comment><comment><USER10> Excellent article. I've been considering using either SimpleDB or Google's App Engine, so hearing both sides of the debate is incredibly useful.

</comment><comment><USER11> I love this article, kudos Ryan!

I was about to do similar research before committing our next project of 5TB data space with SimpleDB, ouch! It would have been a disaster. I will probably use the S3 just for mass storage nothing else.

We want more of these unbiased articles on HN.

</comment><comment><USER12> i am trying to sum things up

a lot of his problems seem to suggest that SimpleDB require more coding to contol the data.

the counter argument is, that okay, this is true, but you also don't do any maintenance ... which seems like a fair trade-off, plus you can always add an abstraction layer in code that simplify the cooding

so my question becomes, can't one add an abstraction layer on top of simpledb that makes it act more like a traditional rdbms ?

</comment><comment><USER13> Thank you.

<comment><USER13> Not sarcastic. :) I was considering the merits of using SimpleDB the other day.</comment></comment>


Ask HN: A server admin panel that "just works?" - <AUTHOR> I'm interested in setting up my own server just to make it easy to run and play around with web projects. Does anyone know if there is a heroku like service that I can host on my own server to manage web apps/sites.
Think connecting to a git repo from the UI. connecting to a domain to create development urls: projectname.domain.com, that sort of things.
I'm not sure what to look/search for online to find what I'm looking for. <comment><USER2> If you want to set up your own server, why do you need a control panel? Just learn to configure all the services. Command line is all you need.

If you want ease-of-use, running your own server is not the way to go. You can get pretty far with AWS/GCP/Azure free tier.

<comment><USER3> Stupid question here, but I have tried to google it a couple times and not found the exact answers I want.

When setting up a server on VPS what exact 'dashboards'/'control panels' are available?

Like op, I want to keep an eye on things manually in one place, similar to what I get pre-set up in cpanel shared hosting. Disk space usage, total traffic used that month, tracking server load, pages visited, and by what IPs, etc.(ideally without using google analytics script tag on page)

I wan't to analyse the performance of my webapp really, relative to the amount of people signed up.

I am going to be using LEMP stack.

<comment><USER4> CPanel and Plesk are probably your best options but you'll be paying a pretty penny for them

</comment></comment></comment><comment><USER5> I can whole-heartedly recommend Dokku[0], it's been fantastic for me, and does exactly what you describe.

Edit: Doh! Except for the admin panel, which was a pretty major part of your question :) Dokku is CLI-based, though I seem to remember there being a third- party web ui for it, can't remember. Either way, it might still be worth checking out.

[0] [https://github.com/dokku/dokku](https://github.com/dokku/dokku)

<comment><USER6> Dokku is excellent and does all the heavy lifting for what OP was asking for. For the UI, [https://github.com/intercity/intercity- server](https://github.com/intercity/intercity-server) is a good way to go ([https://intercity.io/](https://intercity.io/) has some screenshots and such).

</comment></comment><comment><USER7> If you really want something like Heroku, you could try Dokku, though that's not really a control panel. Digital Ocean provides a droplet image for it.

</comment><comment><USER8> Cockpit does a lot of the basic functionality you need.

<comment><USER9> It's a great option and is installed by default on Fedora.

<comment><USER10> Might want to mention fedora server edition (I think it is implied but people might not realize)

</comment></comment></comment><comment><USER11> Another option I don't see mentioned so far:

We use VirtualMin on our servers for all of our commodity hosting (it is based upon WebMin). There is an open source version and a pro version. We use the pro version — I don't personally know what the exact differences are, as it was my colleague's choice historically, so I can't comment specifically on the open source version's features. But we've found it pretty good, and cheap enough ($6/month/server).

It takes literally seconds to set up a new domain, provides config info to copy across to our DNS provider (we don't do DNS on the same machine, other folk can provide a far more reliable service at no extra cost: FWIW, we use Joker), it has support for autocerts from Let's Encrypt, and has fairly up-to- date app bundles for a lot of well known web apps.

I'm a developer, and have no issues with command line, but using a control panel for day-to-day basics is just so easy, pretty much a total no-brainer, and also allows us to have more technically minded folk manage their own domains/subdomains and services (if you wish to share/resell).

I've used Plesk before, and didn't like it much, for a variety of reasons (including when it borked an update, and was all kinds of hell to fix)

[https://www.virtualmin.com](https://www.virtualmin.com)

</comment><comment><USER12> I've been using captainduckduck in production for a while now.

It might be a little finniky for you to wrap your head around at first, but it does work well once you do that.

[https://captainduckduck.com](https://captainduckduck.com)

</comment><comment><USER13> I've started using Ansible to document how I want my server set up in a machine readable way. Very useful because when I want to start over I can just run my Ansible playbooks to set up everything to how I want it. I'd prefer that to an GUI approach such as an admin panel. A GUI makes it difficult to record your desired configuration and then later initialise a new server (or a reinstalled OS) to use said configuration. Even simply writing a shell script to do the configuration would be great as it means you're both (1) documenting your configuration preferences and (2) making a tool that sets everything up as per your preferences. YMMV of course.

</comment><comment><USER14> I think this is the usecase Redhat is trying to target with its Cockpit application. Easy GUI admin for a server. I think it works with all Linux distros but more tuned for Refora, RHEL, CentOS.

</comment><comment><USER15> I built ScaleDynamix[1] with similar goals in mind. It connects to your AWS/GCP/Azure account via terraform and gives you a cpanel like interface to launch sites. You can also horizontally scale the stack either manually or automatically based on utilization. It's optimized for php, but you can run any other languages easily on it.

There is a free version available for non-commercial projects.

[1] [https://scaledynamix.com](https://scaledynamix.com)

</comment><comment><USER16> I'm using Dokku + Kirby or Serverpilot + Kirby. Kirby has a plugin called autogit, where you can update/save changes to/from a git repository

<comment><USER17> Autogit is about to change my life.

I run probably 12 Kirby sites, and it's amazing, but content backups is a major issue.

</comment></comment><comment><USER18> If you want LAMP/LEMP, check out [https://vestacp.com/](https://vestacp.com/).

You can provision a subdomain and clone whatever repo into the root directory and be functional pretty quickly.

<comment><USER19> Vesta has had quite a few security issues, they seem to have lost quite a bit of momentum lately. Vesta is OK but not for CLI noobs.

</comment></comment><comment><USER20> Take a look at this discussion: [https://twitter.com/wesbos/status/1067833058731147265](https://twitter.com/wesbos/status/1067833058731147265)

</comment><comment><USER21> For PHP projects, Laravel Forge is a good option [https://forge.laravel.com/](https://forge.laravel.com/)

</comment><comment><USER22> Webmin

Cloudron

<comment><USER23> +1 for cloudron

</comment></comment><comment><USER24> We have a Plesk server that we use to host random stuff easily. Takes care of DNS, Git, updates, etc etc. Great solution for something that just works.

<comment><USER25> I doubt OP will want to pay for a service when he is looking for a product to "host random stuff"

</comment></comment><comment><USER26> ServerPilot.io is nice for php/wordpress lately they turned themsleves into a paid only solution.

</comment><comment><USER27> Cpanel still works fine assuming you are looking to run LAMP. Takes care of everything for you.

</comment><comment><USER28> Get a dedicated root server with hetzner. It's relatively cheap for what you get.

<comment><USER29> That doesn't help with the question

</comment></comment><comment><USER30> Can IaaS be considered as the new admin panel?

</comment><comment><USER31> After I started using Nixos I can't imagine using anything else. [https://nixos.org](https://nixos.org)

<comment><USER32> Where can I read about the nixos admin panel?

<comment><USER31> I don't know if there is one, probably wouldn't be that hard to make if anyone actually bothered. At the end of the day what is simpler that modifying a text file? You can search for options and default values here [https://nixos.org/nixos/options.html](https://nixos.org/nixos/options.html)

<comment><USER32> Ok, it's just that was the entire point of the post.

<comment><USER31> I read the question more broadly, same as syntheticcdo at the top there. In my opinion learning Nix/NixOS is easier and more productive than learning general Linux administration. These kinds of panels are half-measure.

</comment></comment></comment></comment></comment><comment><USER33> Flynn.io does this to some extent.

<comment><USER34> Is Flynn still about? I've not heard from them in ages (subscribed to their blog) - checking on it, looks like they've not posted anything in over a year

Really liked it when I was testing it a while back but reluctant to use it if it's going to sunset on me

</comment></comment><comment><USER35> Webmin, yunohost, freedombox

</comment><comment><USER36> Cockpit meets these needs.

</comment><comment><USER37> Plesk

</comment><comment><USER38> Proxmox</comment>


We're seeing the greatest asset inflation bubble in 20 years, fund manager warns - <AUTHOR> https://www.cnbc.com/2018/06/18/were-seeing-the-greatest-asset-inflation-bubble-in-20-years.html <comment><USER2> > nobody wants to use the "B" word

... except everyone, all the time

</comment><comment><USER3> Or the market has priced in inflation from QE3, we have a dollar bubble masquerading as an asset bubble.

</comment><comment><USER4> I've seen a lot of "Expect a downturn in 12-18 months" stories lately.

<comment><USER5> Especially in the last 10 years.</comment></comment>


The Plain Person's Guide to Plain Text Social Science - <AUTHOR> http://plain-text.co/ <comment><USER2> >"as opposed to binary file formats like .docx"

.docx is not a binary file format unlike the .doc files from the past.

.docx is a plain text xml based format that has an Open published standard.

Most people don't know this, but you can simply unzip the contents of a docx or xlsx file and inspect its plain text contents.

Archival and long term accessibility of the document contents should not be the deciding factor in opting out of .docx

<comment><USER3> _>.docx is a plain text xml based format_

I realize you're trying to elucidate but the context of that author's sentence was " _text editors_ " therefore things like vi/emacs/TextPad/Notepad do not understand a _binary format_ such as a zip file. (And docx _is_ a zip file as you already noted.)

Yes, _inside_ the binary zip file is a text file called "document.xml" but none of those plain text editors will parse a zip file to get to that xml file. From the viewpoint of plain text editors, a docx file is an _opaque binary format_.

<comment><USER2> Yeah, i see but my line of thinking was more along: "if I have this docx in 100 years time will I be able to decode its contents?"

I think the answer is probably yes (pending possible " "premature" apocalyptic scenarios =)

Regarding the zip compression, docx is a "Document Container File" standardized under ISO/IEC, so provided we still have computers and the standard documentation is still know, it should in theory be possible to DEFLATE the file.

Inside you would find all the text content as xml, and as some have pointed out here, binary blobs as well. Those would be mostly font files and image files (or am I missing some others that would be important?). In my opinion the fonts would not be critical to the content meaning.

The images would of course depend on what format they were encoded in. But that's a whole other discussion!

</comment></comment></comment><comment><USER4> I've been following most of Kieran Healy's workflow recommendations for a while now.

I hope these practices get more and more popular.

</comment><comment><USER5> I find it ironic that the first line is "Get the guide as a single PDF file.". :)

<comment><USER6> Why? Part of the joy of plain text is that it's simple to convert your content to other formats.

<comment><USER5> I just found it humorous. I totally understand, and practice, the plain text approach (LaTeX, RMarkdown; now: Jekyll, see: [http://p.migdal.pl/2015/12/02/first- post.html](http://p.migdal.pl/2015/12/02/first-post.html)).

<comment><USER6> Browsed around to your D3 workshop writeup, it's a pretty amazing resource. Thanks :)

</comment></comment></comment></comment><comment><USER7> I wonder whether in an ideal world there would be an alternative to git that doesnt have git's long learning curve for use by scholars in quantitative disciplines.

<comment><USER8> Mercurial is a lot more intuitive, fossil is underrated. Both are probably a better choice for work like this.

</comment></comment><comment><USER9> Why go through all this trouble if you are a social science student? If I were not into computing, I would probably just use Google Docs for all the drafts, and for the final version, I would copy+paste into Word and give it a finishing touch (proper formatting).

(That last step should not be necessary really, because that is the publisher's task, but publishers seem to be getting away with being lazy).

<comment><USER10> I summarize this to my students using two laws and two postulates.

Two laws:

(1) For long documents, especially if they require citations, bibliographies, mathematical notation, etc. – Word is a poor choice.

(2) For documents that take a long time to write and that you want to survive a long time – Word is a poor choice.

The problem is that the alternative is to learn a new way of doing things, which may have a long learning curve. So don't kill your research by wasting time learning new tools. But if you can spare some time to learn better tools, you should.

To understand the alternative, you need to internalize the two postulates:

(1) You should use tools that focus on the semantic aspects of the text, not it's visual appearance. For example: tools that encourage you to say "this is a chapter heading" are good, tools that encourage you to sat "this is Arial-14" are bad.

(2) You should save your work in standard file formats. For text, which is most of what we produce, this means TEXT FILES, not Word documents (.doc,.docx) that tend to break when they switch versions.

<comment><USER9> > You should use tools that focus on the semantic aspects of the text, not > it's visual appearance. For example: tools that encourage you to say "this > is a chapter heading" are good, tools that encourage you to sat "this is > Arial-14" are bad.

All modern text processing systems can do that, including Word and Google Docs.

> that tend to break when they switch versions.

I don't see the problem. I have two other postulates. (1) While you are writing research papers or even a thesis, you should not change the version of your word processor (2) While writing, you should focus on the content, not on the formatting.

Follow these laws, and you will do just fine with any decent word processor.

<comment><USER10> As the saying goes, good luck with that.

Indeed with strict discipline you can use semantic styles in Word and other tools. People typically don't and the default behavior in many cases is annoying or leads to problems (copying style, when you intend to copy just the text and so on). And, fiddling with these things takes a lot of time.

As for software versions, moving operating systems, computer crashes and the like -- things happen when you are working on a dissertation and any other long term project, and you end up trying to rescue your files. Moreover, when you are a scholar, you often find yourself needing stuff you prepared decades earlier. In many cases the versions are not even easily available, if at all (Word 2.0, anyone?)

There are tons of sites by academics detailing these scenarios with more details. I submitted a few links to HN a few minutes ago.

</comment></comment></comment></comment><comment><USER10> If you write in org and want to export through pandoc there's org-pandoc [https://github.com/robtillotson/org- pandoc](https://github.com/robtillotson/org-pandoc) .

</comment><comment><USER10> Nice way to integrate this kind of workflow with Zotero is zottxt [https://gitlab.com/egh/zotxt](https://gitlab.com/egh/zotxt) .</comment>


The Truth About Inkjet Printers - <AUTHOR> You may think inkjet printers are resonably priced for the convenience they give you - at an average of around $50 they aren't the most expencive technology you buy but the issue of inkjet printers comes through the dear prices of ink. Throughout the life of the inkjet printer ink prices have been seen to, usually, be around the same price as the printers themselves which can be confusing and infuriating for anyone buying ink nowadays. According to Consumer Reports "Even the cheapest ink, at about $13 an ounce, costs more than, say, fine Champagne, while the priciest, at about $75 an ounce, is more costly than, say, Chanel No. 5 perfume".
Through multiple tests by companies such as the one listed above they have found that the average ink refill costs the company making them around $0.32 (235x the cost of the most expencive ink available for consumers. Companies such as HP and Epson argue that ink costs have not fallen due to the advanced technology in their printers but this is not the case, most of the 'advanced technology' in the inkjet printing world is found inside the printer itself. Companies who sell printers often make a loss on them and sell ink for an upmarked price to make a profit but, is this right? Should it be cheaper for me to buy a whole new printer instead of replacing a couple ink colors? <comment><USER2> I have given up on inkjet printers. Mine tended to be clogged up every time I needed to use them. As you point out, the ink prices are prohibitive. Buying one cheap inkjet printer after another is a lot of wasted money.

So I replaced my printer with a B&W laser which always works and I simply go to a self-serve print shop to print anything that I need in color.</comment>


Ask HN: Feedback on an iOS Messages App - <AUTHOR> I am trying to create what I consider a useful iOS Sticker App for a use case that I constantly, which is the ability to annotate or point out pertinent information in a Messages thread. I've created and released my first go at an annotation sticker app and was wondering if HN can provide any suggestions or advice for different types of stickers they would find useful.
Here is a link to the app: https://itunes.apple.com/us/app/annotate!/id1161173401?mt=8&ign-mpt=uo%3D4
It does cost $1.99, since I am asking for feedback, I've provided some promo codes here: http://codehookup.com/42a011ed (if the run out, let me know and I'll put some more out there). <comment><AUTHOR> Clickable Links

App Link: [https://itunes.apple.com/us/app/annotate!/id1161173401?mt=8&...](https://itunes.apple.com/us/app/annotate!/id1161173401?mt=8&ign- mpt=uo%3D4)

Promo Codes: [http://codehookup.com/42a011ed](http://codehookup.com/42a011ed)</comment>


Design Tip: Never Use Black (2012) - <AUTHOR> https://ianstormtaylor.com/design-tip-never-use-black/ <comment><USER3> Pure black is the correct color for text. Ink and paper manufacturers go to great lengths to make inks and papers with the darkest blacks and brightest whites, and there's no reason text on screen should be any different. Firefox's Reader View foolishly throws away contrast with gray text, but this can be fixed in chrome/userContent.css in the Firefox profile directory:

      @-moz-document url-prefix("about:reader") {
        body {
          background-color: #FFFFFF !important;
          color: #000000 !important;
        }
      }

toolkit.legacyUserProfileCustomizations.stylesheets needs to be set to true in about:config for recent versions of Firefox to load userContent.css

Some people complain about excessive brightness being hard on their eyes. They likely have their monitor brightness set too high. Most monitors can have their brightness set using DDC/CI (this sometimes needs to be enabled from the monitor's OSD). Most Linux distributions include "ddcutil". Install it and give the user who'll run it permissions to access I2C. In Debian, this can be accomplished by adding them to the i2c group.

Find out which I2C buses your monitors are attached too:

      ddcutil detect

Now you can change brightness from the command line:

      ddcutil --bus=6 setvcp 10 50

The first number after setvcp is the feature value to set. "10" is the standard feature value for brightness. The second number is the percentage brightness. I suggest picking values for low/medium/high brightness for each monitor, and binding a script that sets all them at once to the otherwise rarely used PrtScn/ScrLk/Pause keys. Presumably there is some way to do the same thing on other operating systems.

<comment><USER4> > Pure black is the correct color for text. Ink and paper manufacturers go to > great lengths to make inks and papers with the darkest blacks and brightest > whites, and there's no reason text on screen should be any different.

Is this your opinion or is this widely accepted as fact? I've read countless design suggestions to reduce contrast and avoid using pure black or white on an LED display. I'm curious whether there's research that supports either side.

<comment><USER5> > I've read countless design suggestions to reduce contrast and avoid using > pure black or white on an LED display.

I have seen those suggestions too, but they seem to be just parroted off of each other. I have never seen a single one link to any reasoning or studies that support the claims of better readability. They all seem to say it because someone else said it in a game of design telephone.

In my personal experience, I find gray text on an off-white background to be very difficult and straining to read, and additionally, I don't think it looks good.

I can see some merit in reducing the whiteness and thus brightness of the background, but I don't see why reducing black to some lighter black or gray helps at all. Having text in a nice solid black or near-black with an off- white background seems reasonable to me. That matches more closely with reading things on actual paper, where dark black inks are possible but the background is not pure white. That leaves legibility in place and reduces background brightness.

It's possible this whole "reduce the contrast" thing has gotten off track, when to me at least, the goal seems to be to reduce the blinding background blasting you with light and not to simply reduce contrast.

<comment><USER6> > I have seen those suggestions too, but they seem to be just parroted off of > each other. I have never seen a single one link to any reasoning or studies > that support the claims of better readability. They all seem to say it > because someone else said it in a game of design telephone.

I so wish I could find that research that once and for all debunked the "UX expert" urban myth that #fff + #000 = evil. It made me consider past mistakes and I go for all black on all white whenever I can. Doesn't hurt from a WCAG perspective.

<comment><USER7> I debunk your debunk with the following paper.

Rello, Kanvinde, & Baeza-Yates, 2011. Layout Guidelines for Web Text and a Web Service to Improve Accessibility for Dyslexics.

If you suffer from astigmatism you might experience halations or if you have contrast sensitivity, visual distortions.

[https://dm-ed.com/info/contrast-sensitivity/](https://dm- ed.com/info/contrast-sensitivity/)

</comment></comment></comment></comment></comment><comment><USER8> This is bizarre and just completely and utterly wrong.

The first part is true... yes, obviously shadows aren't black.

But in the real world (including screens and pigments) _nothing_ is black if there's a lighting source somewhere. The #000 on your monitor is just dark gray, because your black pixel is still being lit by nearby pixels, ambient light, etc. And the LCD component (or unlit OLED) isn't perfect black anyways.

Actual good graphic design advice is to _aim for a comfortable level of contrast_. Not too little, and not too much. Which is why most good websites don't use pure-black-on-pure-white, it's a little too strong.

But another big reason for not using pure black or white for backgrounds is that they allow you to use #000 or #FFF for emphasis highlights that really "pop".

But absolutely none of this has anything to do with #000 being "too black" that's "not natural". That's just utter nonsense.

<comment> Al-Khwarizmi A honest question: why books do traditionally use pure black on white? Is it a matter of ink costs and they would also look better with a slightly lighter ink, or do different principles apply than on screens?

<comment><USER8> Two things. First, most books aren't -- the paper is gray-ish and the black is matte so under lighting it's more like dark gray.

Second, the contrast is limited to ambient lighting. Whereas the white on computer screens is often far brighter than a sheet of white paper nearby, which is why avoiding extreme contrast is even more important.

</comment></comment></comment><comment><USER9> This might all be true for paintings, but on a screen, #000 isn't black. It is usually a dark gray, depending on the backlight and contrast of your screen. And even with OLEDs, it might be darker, but it isn't really black. So imho, no need to be afraid of black for screen design.

As for print, it depends on the process. Anything that composes colors from CMYK pixels will look ugly and blurry if you do not use pure colors e.g. for fonts at low resolutions or close up. Just compare black fonts and dark brown or grey fonts out of a color laser printer for an example.

So no, only avoid black if it is really black you are avoiding and if it doesn't cause other problems.

<comment><USER10> Black isn't the total absence of light in the first place. It's just a relative absence of light.

It works the same way for paintings, screens, oleds, etc. So when the author is talking about "black" they're using it in the same way that a normal person would talk about "black"\--it's a very dark color.

<comment><USER9> In that interpretation, the authors point is even less valid. In that case he just advocates substituting a dark color by a less dark one, wrecking contrast and thereby acccessability.

<comment><USER10> > In that interpretation, the authors point is even less valid.

The author's point is quite valid. #000 is a bit harsh and should be used sparingly.

> In that case he just advocates substituting a dark color by a less dark one, > wrecking contrast and thereby acccessability.

That's pretty dramatic... just by swapping out black for a dark color you _wreck_ contrast? No, that's wrong.

Check out the WCAG guidelines. Recommended contrast ratios for body text are 3:1 (minimum), 4.5:1 (level AA), or 7:1 (level AAA). The linked article uses #113654 on #FFFFFF, which has a contrast ratio of 12.5:1, which meets the highest level of the accessibility guidelines for body text contrast.

Meanwhile HN has text #828282 on #F6F6EF with a 3.54:1 contrast ratio. Barely meets minimum contrast guidelines for people with _good_ eyesight. HN even features some #AFAFAF text, with a barely-readable 2.02:1 contrast ratio.

<comment><USER11> _> Meanwhile HN has text #828282 _

To clarify a bit... the #828282 is for some header info like story url domain in (parentheses) next the title, HN user names, relative timestamps, etc.

The main body text of _comments_ which is the majority of content is _#000000 total black_ and because of that, the high contrast makes it very readable. I hope HN never succumbs to fads and copies other websites that think it's stylish to use hard-to-read gray text on white or off-white backgrounds.

</comment></comment></comment></comment></comment><comment><USER12> This is just bad advice. From an artist's perspective, folks just have to realize why they are making the choice. If you want a painting to look natural, by all means - avoid black most of the time. Black, like grey, is generally something that has color to it where a standard black paint really won't have the depth.

But not everything needs to look natural. Black text? Just fine. I do a lot of abstract art: Black works well. I'm not going to give up black ink linework any time soon.

<comment><USER13> His bottom line "when you find #000000 in your color picker, ask yourself if you really want pure black. You're probably better off with something more natural. And if you're feeling adventurous, try staying away from the left edge of the color picker altogether" is much less radical than his title "never use black".

I think this more subtle statement is fair advice to beginners in design, who might sometimes make an unreflected choice of black or not be aware that shadows aren't just black.

So in my opinion it's probably bad advice for more experienced artists like you, but it might be very helpful advice for somebody else.

<comment><USER12> It isn't helpful, though. It creates false rules for folks, and his conclusion is false.

It doesn't take long to explain where such rules came from and the effect they have. He's just parroting an "art rule" that isn't and then explaining some of his own process while acting like it is a hard-and-fast rule. I should mention that this "art rule" is the most commonly repeated "art rule" that folks repeat. I've had this conversation before.

(Seriously, I'm sitting here from the side of helping others people do art when they are a beginner, and have for some years. I've taught a weekend art class for children and have been making art since I was young - I started oil painting before I was 10. I'm over 40 now).

</comment></comment></comment><comment><USER14> >> _Here's a bit of a contrived example… Dribbble has a pretty awesome feature that lets you search for shots by color. If you search for shots with pure black and shots with "real black" which ones feel better? Not the ones with pure black in them._

They both look fantastic on my new matte screen laptop in 2020. That's why updating your assumptions on the regular is a good idea. It's only 8 years later and this is already getting out of date.

<comment><USER15> A bit of a tangent, bit where have you found a matte screen laptop recently? I much prefer them for handling glare, but glossy screens seem to have taken over completely.

<comment><USER16> Lenovo ThinkPad X1 Carbon and Extreme laptops have anti-glare options for the display: [https://www.lenovo.com/us/en/laptops/thinkpad/thinkpad-x1/c/...](https://www.lenovo.com/us/en/laptops/thinkpad/thinkpad-x1/c/thinkpadx1#compareSection)

</comment></comment></comment><comment><USER17> If curious see also

2018 [https://news.ycombinator.com/item?id=17334627](https://news.ycombinator.com/item?id=17334627)

2013 [https://news.ycombinator.com/item?id=6581253](https://news.ycombinator.com/item?id=6581253)

Discussed at the time: [https://news.ycombinator.com/item?id=4357002](https://news.ycombinator.com/item?id=4357002)

</comment><comment><USER18> The argumentation basically boils down to the fact that black induces too much contrast with other design elements. That's because those were not made with such context in mind.

If you look at the metro design language as used by Windows Phones[0] a few years back, this worked perfectly fine, was pleasant to use, and very gentle on phone batteries.

[0]: Random example: [https://i.pinimg.com/originals/63/b6/bd/63b6bd3d59cc3f65782b...](https://i.pinimg.com/originals/63/b6/bd/63b6bd3d59cc3f65782b85fac04aca96.png)

</comment><comment><USER19> Black is beautiful. You get this bad advice in art school to not use black from some instructors who are almost religious about it. When you study great painters from the past, like Sargent, black was an essential color on their palette. Frazetta made stunning use of pure black.

<comment><USER20> Like all things in art, chiaroscuro has fallen in and out of fashion over the centuries. That said, things have undoubtedly accelerated - we cycle through trends more quickly today.

At some point in the early 90s, songs were either soft, or they were loud, and it gave Nirvana a beautiful opening to dial that contrast up to the max.

The moment all our websites become shades of gray, some rebellious designers will buck the trend, create stunning interfaces with pure blacks and bright whites, and the cycle will begin anew.

These sorts of absolute "rules" like "don't use pure black" are silly, of course. We have to have some understanding of the context: Is this a website for marketing purposes, or something which must be read for hours on end? On what kind of screen is this being viewed? (LCD? OLED? E-paper?)

But even if the rules of thumb are silly, they're still important to learn - <USER2> good artist has a deep enough understanding of the rules to know when to break them.

<comment><USER21> Yup, it's more like.... "are you REALLY SURE you want to use pure black?"

</comment></comment></comment><comment><USER22> Do use black. Use whatever gives you high contrast, to start with. Pretty != usable.

Not to mention that staring at a screen that is basically a light bulb pointed at your face is bad for the eyes. Anything that reduces the amount of light you're bombarded with is good.

</comment><comment><USER23> What if you're designing for OLED panels, where black is a stand in for "pixel off", which saves power and can help to hide bezels or (as with the default iPhone X Wallpapers) a notch.

Sure, it's not trivial to get right, and it should definitely not be used outside backgrounds, but never is a harsh word.

</comment><comment><USER24> For accessibility, please use black text. Just look at Hacker News and grey text on bone background. It is not good for those of us with vision impairments.

</comment><comment><USER25> > Black overpowers everything else.

Exactly that's why there is one single wide spread place where black is the default, one place where companies probably could have saved money by using gray but didn't.

And that's text.

Not titles, not headlines or other similar text based constructs but boring continuous text.

Another thing well known to be important about text is readability.

But one companies designer had a wonderful idea to use gray text on gray background and do so at a place which works as a model for other.

And now it's everywhere.

It's annoying, it's exhausting and it's drives me mad.

Luckily the designer of this page knew what he did.

He used dark blue, which has a strong contrast and can be mistaken with black when sleepy.

But you who made low contrast gray on gray a thing, know that I don't like you as you have cause me many troubles ;=)

</comment><comment><USER26> The problem is, people misinterpreted it in all possible ways, the result being low contrast between the background and foreground text you can find everywhere. The second culprit after the font being too small.

</comment><comment><USER27> Reducing blackness of text to color is a mistake. Effective perceived contrast really depends on weight, size, tracking and leading. Same color looks darker with heavier font and less contrasty with thinner type set more speciously. Compare body text in Swift docs in Safari (uses macOS system font stack so may look differently on other systems) and Django docs for an example.

</comment><comment><USER28> The popularity of "pure black" themes for apps on OLED screens is the biggest counterpoint. When designing dark mode for mobile, please use #000.

<comment> frosted-flakes This works well for static screens like ebooks, but scrolling text on a pure black OLED background causes smearing because it takes longer for the pixel to turn on than to change colours. This effect is especially noticeable on my phone at low screen brightnesses.

On Android, many apps actually have three colour themes: light, dark, and black, where dark uses a dark grey background.

I also like how Samsung One UI handles this, where any text is on a frame with a grey background, but everything else has a pure black background. Example here: [https://www.notebookcheck.net/fileadmin/Notebooks/News/_nc3/...](https://www.notebookcheck.net/fileadmin/Notebooks/News/_nc3/Samsung_One_UI_1.jpg)

</comment></comment><comment><USER29> My idea for making pay websites work is that you always serve all articles, but those who pay get a much better rendering of the text.

If the Economist lets me read all their articles, but it pink on gray comic sans text, I get a chance to become hooked on their great articles, _and_ a reason to upgrade.

</comment><comment><USER30> I love opinionated esthetics like this. They're like schools of thought. Back when I did user interface design and technical writing, I would sometimes consider black design elements, like doing the squint test to see how headings balanced body text.

FWIW, physically printing black can be very interesting. "Rich black" includes the other colorants (cyan, magenta, yellow). IIRC double black is having more than one (lithographic) plate with black. Really subtle stuff that you don't notice until something seems wrong.

[https://www.prepressure.com/design/basics/rich- black](https://www.prepressure.com/design/basics/rich-black)

Then of course there were many partisans of the misc suppliers of black ink, each claiming superiorities.

</comment><comment><USER31> This article is so true. I really have trouble reading white on black, or differentiating different shades of black and gray, it all blends together, further exacerbated by using a low blue light setting on my monitor.

This is something that worries me about the trend towards dark modes and often complete lack of light mode alternatives (Steam). And as others have mentioned, the complaint about light modes being too bright is often a brightness setting issue and not a design issue.

There was a trend a few years back of using really light text colours on white, that's awful too. We need to respect the rules of contrast before what may "look" appeasing to the designer.

</comment><comment><USER32> 2012 tag is very fitting. I remember being bored by all the off-black designs produced back then (2008-2013?). It all looked mushy and spineless.

When The Verge came on the scene in 2011, they showed just how pretty the proper use of black can be.

</comment><comment><USER33> If you are in a room with no light sources, shuttered windows, what colour do you see? I would call that black.

Sure, it's rare to be in such a setting nowadays (at least your cellphone indicating it's charging will be there, or there'd be stars or moon outside), but I think caves are perfectly natural, and you get pure absence of light there. Or 10km below the sea level.

As others have pointed out, you rarely even get pure black, especially with text: on top of reasons others have mentioned, displays use subpixel rendering to make an illusion of higher dpi (similar techniques are employed in the print industry).

</comment><comment><USER34> There is nothing wrong with 100% black. It's good to understand the author's reasoning, but better to regulary break one's self imposed rules. Design doesn't have to be smooth all the time.

</comment><comment><USER35> Design tip: There is no such thing in the real world of materials and displays as pure black or pure white.

Even if we had pure black and white, the real environment of the user would tweak the white balance.

The same design or page, taken from a dark bedroom to an office to bright sunlight will range from unusable through fine (and maybe back again).

So a designer can say #000 against #fff is too high-contrast for some environment, but some users will be in environments where it is not.

</comment><comment><USER36> In ye olde days, print designers avoided pure black because it didn't print well. Sometimes you'd put a light screen of blue or red over it so it didn't look dead.

</comment><comment><USER37> Is this a good place to complain about the choice of colour in KDE's konsole and threaten the developers with physical violence? [https://stackoverflow.com/questions/38277542/minicom- black-b...](https://stackoverflow.com/questions/38277542/minicom-black- background-color-is-not-respected)

</comment><comment><USER38> My computer is black. My keyboard is black. My mouse is black-ish.

Many beautiful things are black. Like a grand piano, or its black keys.

<comment><USER39> Take regular photos of these things, and you'll find that they're not _black_ black.

This article is specifically about the blackest black possible on screens.

<comment><USER40> My monitor when turned off, is also not _black_ black. So the blackest black possible on my screen is around the same color as these other black things.

<comment><USER39> Yeah, but the point here is that everything's relative: #000 is the blackest black possible on screens, so within the scope of the screen if you use it you can't get anything blacker. Within the scope of the screen, the items you describe won't be #000.

</comment></comment></comment></comment><comment><USER41> Design Tip: Never say never. Decide what's appropriate. Rules change in different contexts.

</comment><comment><USER42> #000 is the correct color for backgrounds on articles, and #fff is the correct color for text on that background. I wish I could make everything have an OLED pure black theme, but sadly many apps use gray, very annoying.

</comment><comment><USER43> I really don't dig the dark blue text. Historically that's the color of HTML links.... just make it black, everyone's used to it already.

</comment><comment><USER44> Is the Facebook friend request screenshot intended to show what happens when you have a tendency write long, detailed articles about the color black?

</comment><comment><USER45> User: selects dark mode

Website: shows bright gray

User: _screams_

</comment><comment><USER46> The text on this page is a little hard to read. It could use more contrast.

Black?

</comment><comment><USER47> Design tip: don't listen to designers who talk in absolutes.

</comment><comment><USER48> Is that why I prefer the iPhone design with a white front cover until iPhone 8? This is by the way also much easier on the eyes when reading because it reduces contrast, thus avoids ghost images.</comment>


Regulators Have Doubts About Facebook Cryptocurrency. So Do Its Partners - <AUTHOR> https://www.nytimes.com/2019/06/25/technology/facebook-libra-cryptocurrency.html <comment><AUTHOR> > "By activating partnerships to explore, cocreate, and test new ideas, we can > cultivate ideas to make inclusion a reality sooner than some may think," > said Jorn Lambert, Mastercard's executive vice president for digital > solutions, in the statement.

Facebook finally reveals its ultimate vision, turning social currency into legal tender. Meanwhile, Mastercard VP uses the word "cocreate" in a prepared statement, not delivered at Burning Man. What is the world coming to?</comment>


The New York Times's success lays bare the media's disastrous state - <AUTHOR> https://www.theguardian.com/media/commentisfree/2020/feb/09/the-new-york-timess-success-lays-bare-the-medias-disastrous-state <comment><USER2> Yuck, the author is sad about the demise of fake news sites like Buzzfeed and Gawker.

</comment><comment><USER3> If this is success, I'd hate to see failure.</comment>


Show HN: Browse the Steam Christmas sale visually - <AUTHOR> http://www.hydralist.com

<comment><USER2> I find it pretty neat. I usually get a dozen games on my steam store page, based on the games in my library (=my supposed taste decided by an algorithm). With this I get a whole (and unexpectedly large) picture of the sale. I'm overwhelmed by the amount of data that you scrape to build this. 80 GB? is it because of the videos?

No problem using Opera on W7 here.

<comment><AUTHOR> It's because it has 80,000 images, multiplied by 14 thumbnail sizes and two file formats. The videos are actually only a small proportion of the file size, because I am currently only doing mp4 and two sizes of ten second parts.

Serendipity is what I'm going for - I've spent about $60 over ten or more purchases while developing the site. Stuff I just decided I have to have.

Actually, I have a list in my account: Geometry Wars x2, Toy Soldiers Complete, LA Noire, War War 2 Time of Wrath, Rise of Nations, Panzer Corps, Fieldrunners, Rigonauts, Bulletstorm, ShaderTool, Tradewinds x2, Knights & Merchants, Dead Space, Crimsonland, Wings!, Imperium Romanium, Hero Siege, Robocraft. Wowee. Most projects go into the red based on server costs, but not this one :)

</comment></comment><comment><AUTHOR> I built this over the last couple of months, and recently crunched to get it done in time for the Christmas sale. I made it (mostly).

Technical details are:

* Scrapes all content off of Steam, spits out 14 size variations in both jpg and webp for images. Auto detects webp support (gives a nice ~20% boost, most of which I use for increased quality).

* Size of the static files is approaching 80gb, which is getting tight, because I'm running this on a Hetzner server with a 240gb SSD.

* Written in Clojure + ClojureScript.

* Everything is stored in Redis currently, there's no relational database yet, though I'm planning to use yesql and postgres when account information etc is required.

* The entire database is generated every ten minutes, and is then streamed as a collection of static files to clients. There are sever side queries - it streams the information about every single game to you, though it takes several minutes sometimes. If the dynamic webserver goes offline but nginx stays up during a session, the site will lose no functionality.

* It follows that the filtering is done on the client side. Every time the main database is updated, or the filter is changed, it applies the current filter to it, to get a collection of games that are then randomly displayed.

* I started out using Om, but recently switched to Reagent after too many head scratching errors (performance seems better too). I'd expect Om to scale better to a highly complex site, but with something like this with a ton of simple elements, simplicity won out.

* In order to get the most out of the diffing algorithm during render, the main page is stored in a shallow tree, pages of screenshots, rather than just a collection of screenshots (which would be more natural). In this way, pages of 100 screenshots that have not been updated can be skipped over, whereas the naive approach would result in each screenshot having its key compared (and skipped).

* ClojureScript has been quite solid (Clojure is a rock), with the exception of a few bizarre errors that have sometimes cropped up, where I have to kill the server cljsbuild auto, do a clean, and then restart. It happens about 1 out of 100 commits.

* While not an issue now since it still fits on one server, scaling out such a large, randomly accessed database of images is going to be an interesting problem. Serving from standard disks, even with large caches (32gb on even cheap Hetzner servers) will not be sufficient. Caches help a lot with power distributions and long tails, but here the accesses will be more or less a constant distribution. So the entire collection will have to sit in SSDs fast enough to serve 1gbps (probably 100 megabytes per second with overhead) of 10-100kb files.

* I hash all image addresses already to point to the correct server, and in the future will most likely use a consistent hashing scheme (so that one dead server doesn't completely invalidate the cache on all of them). With further support for video, 4k screenshots etc, I'll be moving the static store onto S3. So a future setup may look like: 4 servers with 1TB SSDs each, 3TB in S3, so if one server goes down the 3TB will remain entirely on cache.

If anyone has any games in the current Steam sale, I'm working on a small sponsorship system, and I'm more than happy to swap some promotion space for some Steam keys. I don't yet know if the site will get traction, but if it does, it's going to require Youtube level bandwidth per user, so I'm looking at ways to make sure it at least breaks even (my day job is still game development).

I'd really love some feedback! I posted this last night, but then deleted it when I realized it really was time for me to sleep.

<comment><USER3> I'm having trouble figuring out which games each tile is. I'm using IE11 on Surface 2 pro. When I tap a tile, it slightly expands, but I don't see a title anywhere.

<comment><AUTHOR> Hmm, sounds like a bug. The game should expand out to an 8x8 square. I'll try to reproduce on a few devices here.

I think it's going to require a mobile version, since it's quite slow on lesser powered platforms.

</comment></comment></comment><comment><USER4> Getting blank black page on iPhone. Just FYI.

<comment><AUTHOR> I definitely need a mobile version of the site. It strains a PC, and it is hit and miss whether anything displays on mobile devices.

Probably something based on swipable pages, rather than infinite scroll.</comment></comment>


Ask HN: Managing Twitter lists - <AUTHOR> I follow a couple hundred users on Twitter and I would really like to use lists. Unfortunately I haven't found a way to manage them with some comfort or ease. Twitter website is cumbersome in the sense that you need to click on a user, then click through again, and then you can select the lists. This is fine if you are disciplined to do this each time you follow someone new, but useless for categorizing a couple of hundred existing accounts.
I use Tweetdeck as desktop app and Plume on Android (although it needs regular clearing of the cache) but I found both equally incapable of editing lists.
Ideally I would like something akin to http://twitlistmanager.com/ where you have a grid with the people you follow and a column for each list. The problem with this interface is that when you scroll down a bit, the column headers (lists) scroll off screen. Another issue is that it only lists twitter account names, not display names, no account description. Not sure about others, but I need to click on about half of them to see who's behind the sometimes rather cryptic usernames.
I would not mind paying a few bucks for a tool that does this properly at all, but the problem is I simply cannot find any. Does anybody have a suggestion? Or should I give up on Twitter lists all together? <comment><USER2> I agree that list management has been an afterthought for Twitter for quite some time.

Have you attempted contacting @bbstripes, the maintainer of twitlistmanager? This seems like two great additions to an existing tool you already use and the developer even accepts paypal for donations to the tool.

\- Pin table header to top of viewport when scrolling \- Use display names instead of username or make optional.</comment>


The .NET Core 2 Wave - <AUTHOR> http://developer.telerik.com/topics/net/the-net-core-2-wave/ <comment><USER2> .NET Core 2 is great, most of the API is back, project references are seamless, and VS2017 is fast, lightweight and nice to use (even without resharper). A lot of 3rd party libraries are waiting on this too so there should be a lot more momentum this year.

It pretty much resembles the way .NET Framework also changed drastically from 1.0 to 2.0 which finally became the productive and trusted framework of today.

It's also really nice to be able to see all of this happening out in the open with the actual developers and leaders at Microsoft. They don't always make the right/best decision but at least they explain what they did and they're definitely taking feedback. It's very refreshing from the old .NET days where everything was opaque until the new release notes came out.

<comment><USER3> Its really great, but some of the APIs could have been re-designed slightly when they "rebooted" the framework... e.g. getting rid of factory patterns when strictly not needed and such for added consistency.

<comment><USER4> Can I see an example? I get shifty when I see people saying things like 'factory pattern not strictly needed'. For example, there are moments where an API may need you to construct an object with a certain set of 'default properties'. I believe that rather than making developers generate 'boilerplate' there should just be some kind of 'boilerplate' factory.

So, these boilerplate factories are not strictly necessary but they make the API user's code simpler, more comprehensible, isolate responsibilities, etc.

<comment><USER5> Read the .net framework standard library annotated reference for some commentary by the original framework devs to understand what they would have changed.

</comment></comment></comment></comment><comment><USER6> I wonder if there is some confusion between .NET Standard and .NET Core. As .NET Standard 2.0 is a thing but I can't find any official reference to .NET Core 2 yet. Obvious, this will eventually come but it's not on the roadmap yet as far as I can see.

[https://github.com/aspnet/home/wiki/roadmap](https://github.com/aspnet/home/wiki/roadmap)

[https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net- core-...](https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core- roadmap/)

Disclaimer: I've not been paying as close attention as I did last year when writing my book on .NET Core ([https://unop.uk/book/](https://unop.uk/book/)). So I may just have missed something.

Edit:

I've found some more info: [https://github.com/dotnet/core/blob/master/roadmap.md#ship-d...](https://github.com/dotnet/core/blob/master/roadmap.md#ship- dates)

      Milestone 	 	Release Date
      .NET Core 2.0 	Spring 2017
      .NET Standard 2.0 	Spring 2017

This is weird as I had previously heard this would be v1.2. Perhaps it is but it's now a major bump rather than a minor one. Either a breaking change or to tie in with .NET Standard?

I guess this means it won't stay aligned with the ASP.NET Core versions now?

I spend time writing a helpful comment and the thread gets flagged. :(

<comment><USER7> From the roadmap: "Because of this, if you follow our repositories you will start to see .NET Core 2.0 versioning."[0]

As an aside, I find it helpful to think of .net standard as an interface (API definition, no code), and .net core as a class (implements interface, provides implementation, possibly additional methods).

      public class NetCore2_0 : INetStandard2_0 {}

      public class NetCore1_0 : INetStandard1_6 {}

[0] - [https://github.com/dotnet/core/blob/master/roadmap.md](https://github.com/dotnet/core/blob/master/roadmap.md)

</comment></comment><comment><USER8> I just looked up what exactly .NET Core is and landed on the installation guide page[1], which includes installation videos for Windows and Mac OS. It's quite funny how they, uhm, adapted those to target audiences... :)

[1]: www.microsoft.com/net/core

<comment><USER9> You also don't want to miss the Ubuntu video.

<comment><USER8> Huh, didn't see this. Where can I find it?

<comment><USER9> In the Linux tab of the instructions there are tabs for various Linux distributions (each with slightly different instructions). The instructions for Ubuntu are the only ones with a video.

<comment><USER8> Ah thanks, that's hilarious!

</comment></comment></comment></comment></comment><comment><USER10> .NET Core is great technology and really fun to follow but ...

I don't think it's ready for prime time yet. Gonna give it at least another year.

<comment><USER11> I really want to use it as I much prefer Linux as a hosting platform over Windows, but I really enjoy C# and F#. When I last looked, however, the tooling just wasn't there. I found documentation still referencing the outdated dnx command as opposed to dotnet, and building something as simple as a console application required quite a bit of boilerplate project.json. I haven't looked at it since, but I hope the move back to csproj will simplify things a bit. I'd really like to see the dev experience ironed out a bit more as it's quite an exciting project.

</comment></comment><comment><USER12> I just saw the name telerik and didn't bother to even open the link.

I've had nightmares with their stuff. Their standard response to any problems you might have with their controls is "wait for the next version"

<comment><USER13> > It's hard to imagine ASP.NET development without Telerik controls.

That was pretty funny.

</comment></comment><comment><USER14> I'd love to hear the shock announcement that they're in the process of porting DirectX to CORE ... maybe at some event like BUILD.2017 or something.

It's just the kind of thing that we all* walk around armchair quarterbacking the fact that Microsoft would never do that in a million years...

Seriously.. how cool would that be?

*of course I mean "all" colloquially - obvioulsy there are some people who don't say that.

<comment><USER15> DirectX isn't exactly as much fun as a barrel of monkeys, but it's less painful and crufted up with less legacy junk than OpenGL. I can see why approximately no one writes games for Linux and Mac if they aren't already using a cross-platform engine that's done that heavy lifting already.

</comment></comment><comment><USER16> Why is this flagged?</comment>


Show HN: Stoodle - free, collaborative whiteboard built by 3 teens - <AUTHOR>

Hi all,
I'm a senior in high school and I recently co-founded Stoodle, a free, realtime whiteboard with voice chat made to help students effectively collaborate and tutor online.
I built it Firebase and Twilio (we are getting discounted pricing from both). We are also incubated by the CK12 Foundation. Our press release recently was posted on CNBC and Yahoo! Finance.
http://stoodle.ck12.org
I would love some feedback from HN. <comment><USER2> Looks promising. Lots of small UI/UX things: 1\. Wasn't clear how to move objects around (the iconography for the buttons can use some improvement). 2\. Delete/erase button is pretty confusing too - again, it wasn't clear how to actually erase something. 3\. The bg music on voice chat is unnecessary in my view. I hate that in most conferencing solutions.. :P 4\. If conferencing/collaboration is high volume use case, i'd be curious to know why you chose to hide those options under a menu...

Hope this helps.

<comment><USER3> Another small UX thing: Never use window.prompt(). On Chrome at least it prevents me from switching tabs, I know on some systems it also plays an annoying sound.

</comment></comment><comment><USER4> This looks like an awesome idea. Honestly one of the better executions I've seen in quite a few senses.

There are quite a few things I'd say make this difficult to a first time user.

1\. The tools being on two separate sides of the site seems strange to me; the left side seems to be drawing (or otherwise "putting") tools, the right side seems to be "editing" tools. Except that the pen is on the right. And so is the text box.

2\. There is no "active" state for the selected tool, so I may very easily get confused about what is going to be done when i click.

3\. The modality of any of the tools could be changed in some ways; for instance, having a delete "tool" rather than a delete "button" is more like erase, as pranavpiyush mentioned.

4\. Using prompt for entering your name isn't great; using prompt to enter text onto the canvas is really very frustrating.

5\. The trash icon is confusing. I'd rather have a "clear this board" icon, or go full-fledged whiteboard with it and show me a whiteboard eraser. I don't throw my whiteboard markings in a trash can - I erase them. If you're going to take advantage of skeuomorphs, make sure they are the right ones.

6\. If sharing the URL is a core functionality, make that url easily copyable inside your interface. Most of the time, I am not going to share this on Twitter or Facebook. Most of the time, I'm going to send that url to a coworker or friend.

7\. I have no clue where to "save". With something like this, I don't think we've yet reached the implicit "auto-save" feeling. I need to feel secure about my board and accessing it at another time.

8\. Uploading an image is a great idea, but don't make me drag unless you're going to keep my dragged area visible; when I drag, the marker goes away and the modal replaces it - that makes me feel like I made a mistake.

9\. When I drag a shape over another shape, a new bound shows that implies that the two shapes may be merged, but that doesn't happen when I drop the shape.

10\. Many move tools also "select" an element for further manipulations (like moving with a mouse) - a simple version of this might be a good addition, along with basic scaling operations.

11\. I like colors - I like picking my own, too. Any regular old color picker will do, or at least a hex input, so I can use my brand colors (or whatever).

12\. Not sure if it exists, but I don't see a way to add a new board. This is a space where this could be hugely beneficial - multiple boards, with titles. Then this easily becomes a teaching tool that maintains its own history; export to PDF? Sure. Export to PPT? Sure. Autoupload to slideshare? (Up to you. :) )

I'd be super interested to follow this project and contribute to some of these design tweaks if it were somehow open (or if contributions are a possibility).</comment>


Tell HN: YC companies posting jobs, make your location clear - <AUTHOR>

As an engineer interested in openings with YC companies, remember to include your location. Make it very, very visible. This is the first thing most of us look at.
The pattern I have seen is that some postings don't include a location at all, or its buried in the text of the job description somewhere.
The good ones include the location in the title, or near the very top or very bottom of the description. Please don't bury it somewhere in a paragraph.
Best one I see now, at the time of this posting, is "Full stack engineer wanted in Sydney Australia". Direct and clear. Maybe I'm in Sydney or nearby (I'm not) but might be interested in going there (Kind of).
Keep up the awesome work, just make this a little easier for us! <comment><USER2> I need a tech cofounder in Sydney, Australia to help build a geolocation app that already has the business, wireframes, design etc in place.

I think the reason sometimes for not making the location clear, apart from assuming maybe that most of the jobs are in the US, is that sometimes there's the intention of relocation. Especially if you intend to apply to YC you may be open to relocating yourself?

I'm not sure- just a thought.

<comment><USER3> good point!</comment></comment>


First digital 3d graphics film, from 1972 - <AUTHOR> http://nerdplusart.com/first-3d-rendered-film-from-1972-and-my-visit-to-pixar

<comment><USER2> This is why HN is great. I've never seen this before! All that, and back when computers has less power than our mobile phones.

</comment><comment><USER3> Why does the face remind me of Tron? I swear either I played a video game with that face or saw a movie...

<comment><USER4> There's a face remarkably like that one in the SNES game Starfox. It spits blocks at you.

<comment><USER3> Yep, that's the one!

</comment></comment></comment><comment><USER5> Catmull's work is one of my favorite arguments against software patents. Can you imagine where we would(n't) be today if he'd patented all of those core 3D graphics algorithms and allowed them to end up in the hands of a Nathan Myhrvold or a Lodsys?</comment>


Ask HN: How to prevent abuse of free service costing money to website? - <AUTHOR> I run a website (https://freephonenum.com/send-text) that allows people to send FREE SMS worldwide. I started this service a little over 1 year ago to allow our remote dev team to test sending and receiving SMS to and from US number.
After a few months, I realized that a lot of people needed that service; I started getting organic traffic to my site.
But recently I've been seeing few people who are trying to abuse the system. They are sending 1000s of text using my website that costs me a lot of money. I still want to keep the service because it is useful for so many people, I don't want to shut down the service because of just a few evil people.
Here are a few things I tried that didn't work: 1. Google captcha 2. Restricted number of text that can be sent from one IP every day. 3. Don't allow people to send the same text more than 3 times a day. 4. Disabled error message on the site so the abuser would not know if the texts are actually going out or not (Always gives success message).
Things I know abuser is doing: 1. Changes IP address for each request.
2. Manually solves Captcha
3. Adds a random string at the start and end of the message (So that it's not treated as a duplicate message by my system)
4. Somehow the abuser is able to send a 1.5K text every hour (I'm not sure how). I know it's manual because there is like 15 seconds lag.
5. sample texts:
"KREDIT VSEM, LYuBIE SUMMI. Rabotaem s dolzhnikami! t. 89879141731 k1FpLt"
"KREDIT VSEM, LYuBIE SUMMI. Rabotaem s dolzhnikami! t. 89879141731 op0vF0" <comment><USER2> It may seem obvious, but add an registration through oauth providers like google and facebook. It should trim down the amount without a lot of impact I guess.

If all that abuse is in Russian you might just try to deny service if Russian language is used or add an extra hurdle like browser fingerprinting and rejecting the combo language + fingerprint within a timeframe.

Depending on your user demographic you could also use a reputation system for ip's. Trusted no delays, untrusted delayed for 10 minutes and if something similar is found within that timeframe (use regex) drop the message.

<comment><USER3> This. Require auth, it also allows you to add stuff like rate limiting per account to further prevent abuse.

</comment></comment><comment><USER4> As a catch-all you could start regexing messages' content and deny the abuser if one of their common patterns matched -- you'll still be in a never-ending game of cat and mouse.

There's also the possibility of false positives, which might mean some of your users' beign messages get rejected. Over time you could event start to integrate ML and NLP, which would hopefully limit the amount of manual oversight needed to detect spam in the future

</comment><comment><USER5> Not sure if this is something you've tried or not. But Doing a fuzzy match on the text string might be a way to go. If there is more than 90% match on last 10 messages you can block the message that is being tried to be sent. You might need to think though other criteria to make sure you don't block legitimate texts being sent.

</comment><comment><USER6> Require registration. Block VPNs (as the people doing it are more likely trying to hide their true IP). If someone wants to use a VPN, require documenation. Be open about your limits.

But to be honest, the people that are abusing your system, more then likely they are doing it for financial gain, so it's likely their full time job, and they won't stop.

</comment><comment><USER7> You could try a time-wasting count-down after the captcha. The "send" button can only be clicked after 60 seconds passed and you check if the IP matches to make sure somebody is not using multiple tabs in their browser. Still, it seems those spammers are motivated and have time (or found somebody to outsource cheaply to).

<comment><AUTHOR> IP is not something I can rely on, because looks like they have enough unique IP addresses to use. And like you said, motivated and a lot of time on their hand. I feel like adding that 60 seconds delay only make the UX bad for genuine users.

</comment></comment><comment><USER8> Oauth was mentioned in some of these comments. I'd add to that to use generated API keys and rate limit requests per key. Or per user.

</comment><comment> n-gauge Have the text checked by a dictionary and if < 50% (or whatever is needed) fails then don't send the text.

<comment><AUTHOR> I don't think I'll be able to do dictionary checks because people from different country use this, in their own languages. I get around 5-6K people every day from all around the globe.

It would be ideal, but very hard to implement for all different languages I think, unless I'm missing something.

</comment></comment><comment><USER9> Make it a paid service so that if volume increases you run at a profit

</comment><comment><USER10> Require account signup/login with real cell number to register?

</comment><comment><USER11> Do you mind sharing logs of abuse ?</comment>


Show HN: Lazyday.tv a lazier way to browse movies and tv shows - <AUTHOR> http://lazyday.tv <comment><AUTHOR> This is still private beta. Version 1 made the front page of reddit a couple of years ago: [https://www.reddit.com/r/movies/comments/3s1g8z/we_created_a...](https://www.reddit.com/r/movies/comments/3s1g8z/we_created_a_site_for_instantly_finding_movies/)

You can check out: [http://lazyday.tv/channel/curated/new- releases/](http://lazyday.tv/channel/curated/new-releases/) for new releases.

I built this because I wanted a better way to browse through movie and tv content. Click on Settings and check auto-play for a more interactive experience.

Any feedback greatly appreciated.</comment>


Wordpress Developer for 180k/yr - <AUTHOR> http://denver.craigslist.org/web/5504855904.html <comment><AUTHOR> I'm sorry, this was just to funny to pass up. This job was posted back in the summer of 2015.

<comment><USER2> It is amusing because it is so genuine. Have you contacted this company to see how the job search went - 180k in Denver is rather high for what is expected.

<comment><AUTHOR> I applied 9 months ago when the salary was 80k.

</comment></comment></comment><comment><USER3> Even for 180k/yr it would be boring after about 2 minutes. ;)

</comment><comment><USER4> I just faxed my resume</comment>


Twitter's Storm (complex event processing system) is now open source - <AUTHOR> https://github.com/nathanmarz/storm

<comment><USER2> Hey all, I'm the author of Storm. Just wanted to point you to a few resources:

I've written a lot of documentation on the wiki, which you can find here: <https://github.com/nathanmarz/storm/wiki>

There's a few companion projects to Storm. These are:

One-click deploy for Storm on EC2: <https://github.com/nathanmarz/storm- deploy>

Adapter to use Kestrel as a Spout within Storm: <https://github.com/nathanmarz/storm-kestrel>

Starter project with example topologies that you can run in local mode: <https://github.com/nathanmarz/storm-starter>

Feel free to ask me questions here or on Storm's mailing list ( <http://groups.google.com/group/storm-user> ), and I'll answer as best I can!

<comment><USER3> Thank you for releasing such thorough documentation with your project; it is a great indicator of professionalism and passion. ^.^

<comment><USER2> Thanks! Good documentation is a critical part of having a usable project, and that will always be a focus of Storm. If you have any feedback for how the documentation can be better, please let me know.

</comment></comment></comment><comment><USER4> Woah. Launch a Storm cluster on AWS with one line:

<https://github.com/nathanmarz/storm-deploy/wiki>

All of these storm projects with their project.clj files betray the Clojure roots (using Leiningen as the build tool, which is _amazingly great_ ). Here's to hoping for more Clojure examples/docs.

<comment><USER2> The Storm deploy is awesome. It's built using an awesome tool called Pallet: <https://github.com/pallet/pallet>

I'm going to try to get more documentation on using Storm from Clojure in the next few weeks. I write all my topologies in Clojure using a small Clojure DSL that ships with Storm:

[https://github.com/nathanmarz/storm/blob/master/src/clj/back...](https://github.com/nathanmarz/storm/blob/master/src/clj/backtype/storm/clojure.clj)

</comment></comment><comment><USER5> It is a little buried in the github wiki, but this 'Rationale' page is a good overview of the project - <https://github.com/nathanmarz/storm/wiki/Rationale>

<comment><USER6> thanks. given that, can anyone answer the following?

\- if there's no intermediate queuing, how are "overloads" handled? what if the system can't handle a transient load? is there some kind of flow control signalling back up the path to control the rate (i assume not!)?

\- what happens if a bolt accepts data then crashes before processing. is that data resent? if so, how does the system handle bolts that are not idempotent? (the problem is that if you assume that data is not handled until the handling process terminates then you may send duplicates; if you assume that data are handled if they are received then you lose data on crashes).

\- how can "fields grouping" scale? surely if you add more bolts they won't receive any messages unless a new field appears.

\- is there some kind of automatic restarting? how are failures handled? [ok, this is handled by supervisor nodes and is described in the link above. although it's difficult to understand how they can be stateless. what happens to the managed processes if a supervisor dies?]

thanks again! [edit: thanks for the great answers; should have guessed the consistent hashing one ;o]

<comment><USER2> You generally feed a Storm topology with a queueing system at the source. For example, we use Kestrel to feed Storm topologies. There's a setting called "TOPOLOGY_MAX_SPOUT_PENDING" which controls how many tuples can be pending on any given spout task at a time. This is more than sufficient for controlling bursts of data. If things back up, they will queue on the queueing server (s). In the future (not for a few months, at least), Storm will have auto-scaling where it will automatically scale the topology to the data.

If a tuple fails to be processed, the tuple(s) that triggered that tuple are replayed from the spout. See [https://github.com/nathanmarz/storm/wiki/Guaranteeing- messag...](https://github.com/nathanmarz/storm/wiki/Guaranteeing-message- processing) for more info on that. In that sense, Storm is an at-least-once delivery system (but messages are sent more than once only in failure scenarios). It is up to you to architect your systems to handle this. The approach I take is to build systems using a hybrid of batch processing (Hadoop) and realtime processing (Storm). With batch processing, you can run idempotent functions even with duplication, which lets you correct what's happening at the realtime layer. In that sense, Hadoop and Storm are extremely complementary. Here are some slides from a presentation I gave about this technique: [http://www.slideshare.net/nathanmarz/the-secrets-of- building...](http://www.slideshare.net/nathanmarz/the-secrets-of-building- realtime-big-data-systems)

Fields grouping uses consistent hashing underneath. So if you redeploy with more parallelism, it scales naturally and easily.

If a supervisor dies, it starts back up like nothing happened. Most notably, nothing happens to the worker processes. All state is kept either in disk or in Zookeeper. All daemons in Storm are fail-fast, and the Supervisor uses kill -9's to kill workers, so that makes things extremely robust.

I hope that answered your questions!

<comment><USER7> The supervisor/worker thing sounds quite a bit like OTP.

</comment></comment></comment></comment><comment><USER8> If you don't want to read through the wiki, here's what I've gathered (though I may have misunderstood what they're doing).

This looks like a workflow management system, where you define a dependency graph and their system automatically puts messages in queues, pops them, and executes a step. It seems like it solves the boilerplate part of distributed computing - managing message queues and fault tolerance. Please correct me if I got this wrong or missed something.

<comment><USER9> Sounds a bit like <http://en.wikipedia.org/wiki/Flow-based_programming>

I'll have to read through their stuff to see if they have some interesting ideas for my FBP implementation :-)

<comment><USER10> It does, doesn't it? I still haven't made it through the FBP book, and I'm having a hard time with the author's savior-of-the-world attitude.

</comment></comment></comment><comment><USER11> Hi Nathan! this is awesome. I'm really excited to dive deeper.

some questions:

\- I'm trying to understand the relationship between ZeroMQ and Kestrel in your architecture. is ZeroMQ used for message passing? and Kestrel used as a stream source/sink - aka a sprout? in other words, my assumptions are: zookeeper helps manage node discovery and coordination while message passing between nimble managed bolt processes' are through zeromq. kestrel queues are used for external integration (data stream sources). Is this correct or am I missing something?

\- do you have any tutorials on using cascalog with Storm? are they compatible or have you developed a different clojure programming model/DSL for working with Storm?

thanks and again - nice work!

<comment><USER2> You have it correct. ZeroMQ is used for message passing between components, and Zookeeper is used for node discovery and coordination.

Realtime processing is fundamentally different than batch processing, so you can't maintain the same semantics of Cascalog on top of Storm. Storm has a small DSL for writing topologies in pure Clojure, but it's not a higher level abstraction like Cascalog is. I've started thinking about what a great higher level abstraction would look like, but what that should look like is still an open question.

</comment></comment><comment><AUTHOR> Some background: [http://engineering.twitter.com/2011/08/storm-is-coming- more-...](http://engineering.twitter.com/2011/08/storm-is-coming-more-details- and-plans.html)

<comment><USER12> I just _knew_ that someone would use the "a storm is coming" quote. Let's see if this piece of software will shake the universe…

</comment></comment><comment><USER13> nathanmarz does the work at BackType, Twitter gets the credit

<comment><USER14> BackType has been acquired by Twitter.

<comment><USER13> we know that, but all the work was done pre-twitter aquisition.

<comment><USER15> He gets the credit he deserves as it's under his Github. Who cares about the company name?

<comment><USER16> Saying it is used by twitter makes it a lot easier to sell to management.

</comment></comment></comment></comment></comment><comment><USER17> I'll be taking a look at this today. I'm most excited about it's fault tolerance features. If this sufficiently abstracts out the details of providing robust fault tolerance, it could be a great tool to use with cloud computing.

</comment><comment><USER18> What are some potential applications of this?

<comment><USER19> Any big data application where the majority of the working set changes continuously and requires more processing than just "bucketing".

The example Twitter gives here is for trending topics, but Storm is basically to message queues what Rails is to CRUD web apps, and so you can draw use cases from eg everything Tibco and JMS are used for today.

Storm is nothing you couldn't have done a year ago, or ten years ago, with a message-oriented architecture. But it has a very attractive feature, which is that it bakes in all the fiddley details and problem solving Twitter did while scaling it to their architecture. Systems like this tend to be easy to prototype and a nightmare to mature and manage, so that's not a small feature.

<comment><USER20> By their very nature, decentralized processing systems have exponential complexity, so this is very welcome to see released. But oh how I hate having to go back into Java :)

<comment><USER2> Storm can be used with any programming language. I still need to finish the documentation on this, but I have notes here: [https://github.com/nathanmarz/storm/wiki/Using-non-JVM- langu...](https://github.com/nathanmarz/storm/wiki/Using-non-JVM-languages- with-Storm)

The gist is: Storm topologies are just Thrift structures, and Storm can execute processing components in any language by communicating with subprocesses over a simple protocol based on JSON messages over stdin/stdout. Storm has adapters implementing this protocol for Ruby and Python, and it's easy to make a new adapter for any other language. The adapter libraries are ~100 lines of code and have no dependencies other than JSON.

<comment><USER21> Would it be difficult to use protostuff or protobuf instead? Or maybe Thrift is better for this purpose in some way I don't anticipate?

</comment></comment></comment></comment></comment><comment><USER22> Is it common practice for a corporation to release code via one user's Github account? I would expect that if Twitter were open-sourcing something, it would show up as something like <https://github.com/twitter/storm> (that link is 404, to save you the trouble).

<comment><USER23> This is really more nathanmarz's Storm more than Twitter's Storm. He wrote it at BackType with the intention of open sourcing it, and when Twitter bought BackType they apparently didn't ask him not to. So, it makes sense that it's being released through his Github account. If Twitter uses it significantly internally, they'll clone it to their organization account, like they did for most of the projects that are on Twitter's Github profile.

</comment></comment><comment><USER24> This is fantastic! My mind is spinning with the industries that you could benefit from this, but didn't have the time/resources/focus to roll this sort of (very difficult to scale) system on their own.

</comment><comment><USER25> Really glad that you guys now release and than announce ! the best way to avoid the let down of ending not opening something announced earlier (whatever the reason). Keep the trend going !

</comment><comment><USER26> Just out of curiosity, to what degree was Clojure chosen because of the ability to use Java libraries vs the language design + community?

<comment><USER2> Clojure is an amazing language, and part of that is the access to a huge breadth of Java libraries. Storm makes use of Java libraries/projects like JZMQ, Zookeeper, and Thrift.

</comment></comment><comment><USER27> This is awesome, really excited to see this get released!

</comment><comment><USER28> Yeeeeessssss! Thank you Twitter!!!

</comment><comment><USER29> Someone want to implement something like that without 100 jars of dependencies and 8Gb of memory required to just run, in old-fashioned C/Lisp way (or more modern nginx-way)? Update: _on top of Plan9?!_ ^_^

Or, at least, in more suitable Erlang? ^_^

Isn't it an obvious startup-idea?

<comment><USER2> Storm does not have 100's of jars of dependencies, nor does it require much memory to run. In fact, it's quite straightforward to spin up a Storm cluster (see [https://github.com/nathanmarz/storm/wiki/Setting-up-a- Storm-...](https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm- cluster) ) and Storm has a local mode where you can develop/test topologies on your local mode completely in-process.

<comment><USER29> As far as I know, even clojure-contrib requires lots of jars, and I guess Scala is also very costly, but let it go.

I appreciate your innovative idea and amount of work you have done, so this small efficiency issue does not really matter.

btw, who cares about resources when hardware is so cheap and purchased in ocean containers? ^_^

<comment><USER30> No.

<comment><USER31> Don't bother replying to this guy. Read his comment history. He's either a professional troll or mentally ill.</comment></comment></comment></comment></comment>


Ask HN: How can Windows be so easily brought to its knees by apps, drivers, etc? - <AUTHOR> From a technical perspective, what is it about Windows 10 that allows applications to bring the entire system to its knees???
It seems to me that if a process is misbehaving, it is a problem for that process alone, not for other processes and especially not for the host operating system.
Yet time and time again Windows 10 is vulnerable to episodes of unresponsiveness, even to the point of having to resort to a power cycle.
Today I opened Edge and Firefox, along with Visual Studio (not doing anything). I also had a VirtualBox VM was running Ubuntu. Its only activity was a terminal session running top.
The browsers had 5 or 6 open tabs. Most tabs were static pages just sitting there. From Edge I had a video stream playing and was attempting a screen recording using a browser extension.
Left for 5 minutes after which I could barely get a response from any app or Windows. Video stream was hung. Mouse would move but if I clicked on a tab or app nothing happened. Ctrl-Alt-Del did nothing. Click on upper right 'X' on any application did nothing. Right click an application group in the task bar and select 'Close all windows' did nothing. Right-clicking an empty spot of the task bar did not launch a pop-up menu.
Alt-Tab worked, sort of. It would show its list of windows. But releasing Alt-Tab for any window did not switch to that window.
Technically, what is it about Windows that allows applications to bring the entire system to its knees???
It is a question I've asked for as long as I've used Windows (Dabbled with Windows 1.x and 2.x, became regular user with Win 3.1)
Tho' Windows' reliability improved over the decades, it continues to be vulnerable to apps, services and drivers that veer off into the weeds. <comment><USER2> I think it's the monolithic nature of it.

I've been running Fedora LXDE lately, which worked fine for a while, but then I broke my own rule of never upgrading something that's already working.

Now, I have the same issue you describe occasionally. My whole desktop freezes up, and I can't do anything. It seems to happen if I'm running my screencapture script and switch desktops at exactly the wrong time.

However, the desktop is not the OS, and is isolated from it quite well. I can still press Ctrl+Alt+F2, switch to a completely different "environment", and start killing processes until I get the one which causes the issue. (Seems to be the `import` command.)

On Windows, similar to Mac as well, there is no such separation. Everything is integrated into one big blob, and once that's broken, that's it.

Maybe it's because it is all developed together as one thing, whereas in the gnuli world, the kernel is developed without assumptions of any particular thing running on top of it?

</comment><comment><USER3> While there are a myriad of possibilities, three things come to mind;

A) hardware error. Esp memory. Rare, but that just makes it harder to spot.

B) ram. If your open programs exceed physical ram then virtual mem kicks in, and it is slow. If the working-set ram is below physical ram the machine thrashes making it more or less unusable

C) cpu. Programs can gobble cpu generally slowing the machine down. This is less noticeable these days with multiple cores. I don't think this is the cause of your problem but inspecting task manager can be helpful.

D) drivers running in ring 0.these can crash a machine, but bad drivers these days for out the box hardware is very uncommon.

</comment><comment><USER4> What you are describing here really really sounds like you were just swapping. I believe windows calls it "pagefile" or something.

You got browsers, VS, a video and even a VM: all stuff that are famous for eating your RAM.

> Left for 5 minutes after which I could barely get a response from any app or > Windows.

Most probably because inactive apps were swapped out, then when you came back everything had to be swapped in.

I don't know the specifics of tuning this on Windows, but on Linux you have the "swappiness" levels, and you probably have something similar in the NSA OS.

</comment><comment><USER5> I does make you think. After 30 or so years, they still can't make an operating system that won't allow the applications that run on it to bring it to a grinding halt. How hard can it really be?

</comment><comment><USER6> Probably blocking calls. But it happens just as often as when I use macOS -- perhaps more, and Linux.</comment>