Rare Photos of the Russian "Buran" space program - <AUTHOR> http://www.darkroastedblend.com/2007/11/rare-photos-of-russian-buran-space.html

<comment><USER2> > Climb inside to experience rickety-looking Soviet computer panels and > monitors. It takes guts to fly into space with these...

Eh. It takes guts to fly into space _tout court_ , of course, but I don't think those look rickety. Solid, proven, dependable, as used by dozens of spacecraft and kosmonauts!

<comment><USER3> Exactly. Every picture of space shuttle control panels "look" old, but are (most likely) state of the art technology. It must be the beige toned cases that immediately make us think "rickety looking". They are created to work, by NASA... not make by Apple, in order to look sharp.

<comment> Tuna-Fish Actually, the computers used for mission-critical systems are very old. Generally to keep the electronics big enough that an alpha particle hitting the box does not give off enough energy to flip a bit and corrupt the program.

</comment></comment></comment><comment><USER4> And why fly unmanned missions? Its often said "You couln't find anyone willing to fly that thing" but of course for the priviledge of flying into history, any number of volunteers could always be found. Imagine the inspiring example, the publicity! Even with an occasional spectacular failure, folks will line up for that. Modern institutions quash this impulse for adventure and glory. A nation that used to revel in riding-a-barrel-over-Niagara now makes it illegal. Is it a strange twist of modern psychology/PC?

<comment><USER5> Well of course they make it illegal, it's certain death over the American Falls, and there's immigration issues as the actual good falls to go over a wholly Canadian territory.

</comment></comment><comment><USER6> Very interesting. Strangely, no mention of the hangar collapse that destroyed the Buran. At least that's what happened if Wikipedia and this picture from buran.ru can be trusted:

<http://www.buran.ru/images/jpg/bbur89.jpg>

<comment><USER7> There were 5 production and 8 mock-up vehicles:

<http://en.wikipedia.org/wiki/Buran_program#Current_status>

</comment></comment><comment><USER8> many more here:

[http://worldmysteries9.blogspot.com/2009/02/abandoned- space-...](http://worldmysteries9.blogspot.com/2009/02/abandoned-space- technology.html)

Actually looking at them side-by-side I think that's the original page, the posted link a very nice re-working with a bunch of new material.

<comment><USER9> The posted link's dated 2007 and yours is dated 2009, though, unless I'm mistaken.

</comment></comment><comment><USER10> Was the development of the a225 overkill? How come a 747 is sufficient for the shuttle?

<comment><USER11> It was probably necessary, the only other options would have been to continue with the VM-T which the soviets were using for the same task on smaller space parts, or the An-124. The VM-T would have been underpowered for the Buran, it was really used to carrying smaller parts and only had a payload of 50,000Kg (1/5 of the An-225, and only slightly higher than the 42,000Kg of the Buran orbiter).

The An-124 on the other hand was too short, even though it had adequate payload capacity. So the An-124 would have been needed to be extensively modified to carry the Buran anyway. They may have over-engineered it somewhat, but then better to over-engineer than under-engineer and end up with an embarassing accident.

The 747-100 that Nasa chose to use for the SCA didn't need quite as much modification to make it usable, and had a fairly high payload rating anyway (around 170,000Kg), and was long enough to carry the shuttle.

</comment></comment><comment><USER12> Soviet infrastructure never fails to amaze. Simply colossal.

<comment><USER13> Awesome.

But the sad fact of its abandonment remains.

<comment><USER14> That picture of an abandonment remains could be used as an epilogue to entire soviet era.

Almost everything was spoiled and ruined in past 20 years.</comment></comment></comment>


Google Chrome Gets Insertable Emojis.  How to Enable It - yaseen-rob https://www.bleepingcomputer.com/news/google/google-chrome-gets-insertable-emojis-heres-how-to-enable-it/ <comment><AUTHOR> It's quite a good feature. The backslash baguette is available!</comment>


Fred Hates It - <AUTHOR> http://www.randsinrepose.com/archives/2011/09/12/fred_hates_it.html <comment><USER3> I'm Fred. I've always been Fred. I wonder at times whether this has been more helpful or harmful to my career. As Fred, I've rarely hesitated to speak my mind, and so I've gotten ideas pushed forward that would have definitely been DOA if I hadn't been so outspoken about them. That being said, I've been so abrasively outspoken at times I've seen former peers with just as outspoken but not so confrontational communication styles advance far beyond where I am now. I suppose my gut evaluation is I'm further along than if I had kept my mouth shut, but not as far as if I had been able to effectively communicated my positions (or known when to withhold communication entirely) -- then again, doesn't that apply to pretty much everyone?

Rands juxtaposes each of his points with "Why Fred Hates It," deftly countering them with reasonable and logical arguments that make Fred seem like an anti-team player cancer. And then he ties it all together by saying Fred is essentially a _product_ of frustration because no matter how committed his company seems to be to solving the big picture issues that have been painfully obvious to him for months/years, if the company doesn't actually enable solutions, then all the off-sites are pointless.

In recent years I've mellowed out, moving more to a "Jim from The Office" attitude (Loser Jim, Not Sociopath Jim[1]) where I just smirk and go through the motions for things like off-sites, and figure any actual production that results in any long-term company improvement is a nice bonus, not an expectation. But in the end, we all want to be startup founders because it's a lot easier to turn dreams into action at our own small company than to figure out how to do it at someone else's larger company.

[1] [http://www.ribbonfarm.com/2009/10/07/the-gervais- principle-o...](http://www.ribbonfarm.com/2009/10/07/the-gervais-principle-or- the-office-according-to-the-office/)

<comment><USER4> The question is, do you want to move up?

If someone wants to move up within the organization, this is a quick reading list.

Getting to Yes -- If you only have a chance to read one, read this. It is about how to effectively collaborate toward a solution, and it works in functional work environments. It will be around in a big enough used bookstore.

How to Win Friends and Influence People -- Another oldie but goodie. It's a quick skim, and it's in every used bookstore. It has influenced interpersonal communication in the corporate world for nearly a century, and most people are taking their cues from this book.

The Personal MBA: Master the Art of Business -- It's a condensation of many of the terms in business, and a reflection of the current corporate zeitgeist.

Then, read two top selling business books a year. They're usually quick reads, and you want to speak the same language as the people reading these books.

How does this help? By speaking the same language as the people making decisions, you are perceived as "one of them." This gives a common bond, and they perceive you as more likely to "understand business." By participating in collaborative conflict management, you are perceived to be a "team player." You can make the same good decisions without a confrontational work environment if all parties are speaking the same language.

And _all_ of these will help you run your own company, because you will be talking to other businessmen who are reading these books. They will trust you more if they perceive you as "one of them," and you will be able to describe how your product produces a return on investment in their language.

<comment><USER5> What's funny about these books is that none of them tell you how to act like you didn't just read these books. Personally, I find the tells so obvious that I can't even interact with people that are following this advice. It's like talking to Eliza.

Anyway, if you want to win friends and influence windbags with no technical knowledge, read these books. If you want to win friends and influence people that know how to program, try programming more.

<comment><USER6> _If you want to win friends and influence people that know how to program, try programming more._

But you have to deal with & influence people that _aren't_ programmers.

<comment><USER5> Why?

<comment><USER6> Well. This seems kind of self-obvious to me. But I don't live in a programmer- heavy culture.

Statistically speaking, most people are not programmers. So to have a broader influence and communication ability beyond our particular subculture of geeks and techies, we have to be able to ably communicate our ideas and concepts in ways that relate to them and make sense to them. The engineering world is _full_ of brilliant people who do not have the people skills to communicate ideas (aka influence) to others.

People like purchasers, salespeople, teachers of your children (if you have any), your family, your managers and executives, the plumber who fixes your toilet, your stockbroker: the list runs on and on. People who really matter to your existence, but don't live in the same technical space you do.

I consider it a grave strategical error in one's career to shut out non- programmers.

But, I am (relatively) young. Time will tell if I am incorrect or not.

</comment></comment></comment></comment></comment></comment><comment><USER7> Sometimes management believes that it's important to get away not just from the usual business context, but _any_ productive context. I guess they are afraid it might interfere with the intangible benefits of bonding.

So what do you do when management is only interested in the trust falls, personality tests, and outsider facilitators? How do you make the case for a different kind of offsite?

<comment><USER8> This sort of activity needs a return on investment - a key part of the note- taking is being able to return three months later (or whenever is appropriate) to those notes and the actions that feel out of the meeting and document what return you got from them.

I worked at one company where off-sites (I don't like that term either, and I now run them fairly often!) were quarterly and basically involved drinking for two days (with some 'activities' and the occasional strategy discussion, which was usually two hours of the two days). Most staff were on below average salaries because the business wasn't consistently profitable.

They really needed to examine the ROI on these retreats - I think they could have done away with them entirely with no change to future growth, and a lot more available cash to bump up a few salaries. Or (more importantly), invested that cash in having someone external (ie, with experience doing them properly) to come in and show them how to run the two days - delivering a healthy ROI that would have made everyone happier.

</comment></comment><comment><USER9> Off-site meetings are useful to small teams too - it gets them away from the daily firefighting and able to focus on big infrastructure problems, kick-offs of new projects and so on, just like in the examples given.

They don't have to cost money - find one member of the team that has wifi and doesn't live in a pigsty and go hang out in their living room/kitchen table/back yard. I agree with the OP that the overnight is critical - <USER2> can just couchsurf or go home at night and come back the next day. And who needs stupid made-up icebreakers when you all have to pitch it to make dinner?

</comment><comment><USER10> Fred is sort of right. Off-sites are often feel good democratic brainstorming exercises, but trying to design a product by democratic brainstorm seldom works well. Some people have a talent for selling passionate ideas that just plain suck. If Fred is a good UI designer with a clear vision than its probably better to trust his instincts, and tell him to work on his people skills.

</comment><comment><USER11> Very annoying typo in the HN title, it should be "Fred", not "Freds".</comment>


C: A Technological Landmine - <AUTHOR> http://blog.expandrive.com/2009/07/31/technological-land-mines/

<comment><USER2> Ugh, this is close to being a troll post. Yes C has its weaknesses and domains appropriate to it's use. But sentences like

"Lacking a strong and expressive type system, C not only permits but encourages its programmers to sacrifice correctness, safety, robustness, testability, and maintainability in favor of some highly underdeveloped and ill-measured ideas about "performance". Much of the infrastructure of the Internet is built out of this garbage."

and especially words like "garbage" only exposes the author as someone who doesn't know what he is writing about. (ok i could have used the shorter word "fool" here, but ..).

The "infrastructure of the internet" (including the underlying operating systems) _is_ one of the domains in which C shines.

There is good reason that even today, large chunks of "infrastructure" code is written in C/C++.

"anybody who considers C for high-level application development at this point in history, is in a grievous state of sin"

With "high level" being conveniently undefined and without any examples, that statement means next to nothing.

What a terrible, ill thought out article.

<comment><USER3> C is advanced assembler. It is an absolutely _great_ language for system level stuff, especially because everything is explicit, no relying on side effects or stuff hidden from view.

The thread of execution is extremely easy to follow.

The only thing I would change if we could revisit the past is that I would add a string primitive to the language with a half decent set of string operators. That would have made my life a lot easier at some point in the past.

The funny thing is that most languages that people use that criticize 'C' are usually at the core levels written in C.

There is probably a good case to be made for the claim that Unix would not exist if it weren't for the C language.

<comment><USER4> > The funny thing is that most languages that people use that criticize 'C' > are usually at the core levels written in C.

The difference is that the people using these higher level languages only depend on a single set of maintainers who need to get the primitives right once instead of every random coder needing to manage buffers, garbage collecting unused memory, threading, and a host of other landmines on each and every project.

<comment><USER3> I think those 'random coders' would grow up quite rapidly if they had to learn how to program for real.

It's the high level language cruft that is a prime source of all the endless layering of glue on top of other glue that we're stuck with.

Less scripting, more binaries.

I cringe every time I install some minor system level package and I have to include perl, awk, php and python or some other combination of stuff.

<comment><USER4> Good thing those coders wading around what you seem to consider the shallow end of the coding pool are not writing things like our nameservers, web servers, operating systems, or anything else important. Oh, that's right, they are. And they keep fucking up. Repeatedly.

When this keeps happening over and over again it is time to consider the possibility that the problem isn't the craftsman but the tool.

The advantage of using lots and lots of glue languages is that it forces the important bits to be loosely coupled, adds flexibility to the development and deployment process, and leads to systems that are easier to comprehend and reason about. The only things that should be opaque binaries are system libraries and VMs/runtimes. Everything else should be "glue".

<comment><USER3> Given the number of lines of C code out there the number of fuckups is a lot less than you'd expect. Because C is usually used in gatekeeper situations (operating systems, compilers, servers, network stacks) when there is a breach it is serious.

I find it hard to conceive of a posix compliant OS written in a higher level language, especially because of the lack of deterministic behaviour when handling interrupts and allocating memory. C is mind numbingly simple at that level which is exactly why it is used in these situations.

But every language makes it possible to write insecure code, C has its own unique challenges:

It isn't that long ago that somebody managed to get an exploitable scenario out of UTF-8, it took me a long time looking at the code to see how it was even possible. In a higher level language that sort of thing is more difficult to achieve, that's for sure.

</comment></comment></comment></comment></comment></comment><comment><USER5> For a long time people built huge buildings with very very thin measures in place for worker safety. Buildings cost a lot less and went up a lot faster - but it came at the cost of workers lives.

OSHA's rules make it much more expensive and tedious for American cities to grow - but the growth isn't coming on the backs of construction workers. It's a trade off we've decided to make because we value safety and we value not getting our pants sued off for negligence.

You can write some well designed quick-and-dirty C code that does what you want, and does it fast. But once in a while you'll make a mistake that you probably won't notice and might cost you your company.

</comment><comment><USER6> Ironically, the article referenced by the author does not blame the C language for this problem. Instead, it blames the CA for issuing the certificates in the first place:

"Marlinspike said since there is no legitimate reason for a null character to be in a domain name, it's a mystery why Certificate Authorities accept them in a name."

<comment><USER7> Yes, and there's no reason for browsers to accept more than one domain name in a CN field. However a quick look through rfc3280 and an ASN.1 reference make me think it is a less than trivial task to figure out what would and would not be a legal termination for a string encoded in the Subject field of a certificate. But it is perfectly reasonable to expect the CA to check for that.

</comment></comment><comment><USER8> The reason I like C is that every action is so specific. Yes, that means it's not suited for "high level" applications, like web apps, and situation in which development time needs to be cut. But that specificity and control over every action is exactly why it's good for network and hardware programming. I haven't seen C used outside of those realms in a long time.

edit: Furthermore, it's low-levelness makes it very versatile. It centers around the universal abstractions used in Unix - the ability to open, read, write, and close files. That, combined with structs, unions, and it's basic data types allow you to use it for virtually ANY protocol.

<comment><USER9> > That, combined with structs, unions, and it's basic data types allow you to > use it for virtually ANY protocol.

Sadly, when you use C to implement low-level binary wire protocols, you quickly discover that structs, bit-fields, and unions are nearly useless because they are incompletely defined. Byte order is undefined. Structure layout is mostly undefined -- you pick field order, but you can't choose packing, alignment, or padding rules. The sizes of the integer types vary by platform and compiler. Bit field layout, packing, and alignment are almost completely undefined.

What you're left to work with are unsigned characters, pointers, and bitwise operations. You have to pack and unpack everything manually, or your code won't port. It's enough to get the job done, but it's like using a wrench to pound in screws.

I could do with a little less specificity of action, myself.

</comment></comment><comment><USER10> One thing this guy doesn't mention, that I would think relevant to the discussion: Every language currently used by more than 4 people has a notion of FFI via C. This is nice as it allows for the old "profile it and write the slow bits in C" type programming. I particularly like that style of programming, because in the end, you only need to do C style intensity for a small bit of code. Over time, the number of these small, but useful bits accumulates, and the result is a decent, bottom up style library, without the pain of having started in C. (It also helps avoid the cruft...).

</comment><comment><USER11> This article in particular crystallized a thought I've had about this site, and sites like this in general. I would love to see a wiki-editable block attached to each submission that tries to describe, in as few words as possible, what information the article contributes.

Think of it as compression, where a basic knowledge of computing is assumed. More interesting articles would have a lower compression ratio, which might be a fun thing to filter on. This article might go down to, "C is generally unsafe, and you probably aren't skilled enough to make it safe, so don't use it". Or maybe, "I needed to write something for my company blog, so I found a recent security hole and added some vaguely related platitudes".

</comment><comment><USER12> C is used for low level libraries for it's lean and mean performance. It sacrifices checks and safety features for this, and allows the programmer full control. Do you see professional race cars with ABS and Automatic Stabilization? No, you give the Driver FULL and TOTAL control, same with C and other low level languages. C has only a few data types that are as basic as you can get, I mean what do you expect use something like STL strings?

If you start having type checking and various other easy-to-code and child- safety features, you are bloating and giving up performance in the low level libraries, if this happens imagine what the performance on the higher up application level would be.

<comment><USER13> I'd prefer my libraries be rock solid secure even if I lose some (or even a lot of) performance for it.

Hardware is always getting cheaper.

Losing data integrity and the trust/confidence of your users is extremely expensive, and can be fatal for a startup.

Performance is not the most important metric for a lot of applications.

I'd prefer the safe but slow 5 star crash test rated sedan with a good alarm over the race car that is going to blow up after a few races, in library terms.

<comment><USER14> > Hardware is always getting cheaper.

This is a poor justification. A few years ago a house was a good investment because 'housing prices will always be going up.'

<comment><USER4> Please provide even a single deluded fantasy in which the price/performance ratio for a particular piece of hardware or component in the hardware stack will not continue to trend in the direction of more bang for the buck.

<comment><USER15> I don't know if this counts as "deluded", but how about: resource exhaustion of raw materials required in hardware manufacture.

See, for example: [http://blogs.wsj.com/informedreader/2007/05/25/a-metal- scare...](http://blogs.wsj.com/informedreader/2007/05/25/a-metal-scare-to- rival-the-oil-scare/) which talks primarily about LCD displays (we're fast running out of Gallium/Hafnium/Indium), but points out that copper is likely to get _significantly_ more expensive throughout this century.

That's going to increase the price/performance ratio of practically _everything_.

<comment><USER13> Silicon makes up much more of the cost of a computer than copper, its not even close. Silicon is >50 cents a gram, copper is less than a cent per gram.

<comment><USER15> That's what the _significantly_ was all about. We're not really going to run out of silicon any time soon, but we actually might with copper.

At the moment, both those prices are strongly dominated by the cost of processing, I would imagine. At some point, it could well be the scarcity you're paying for with copper, though.

Scarcity increases price, and two orders of magnitude is hardly inconceivable.

</comment></comment></comment></comment></comment></comment></comment><comment><USER16> Use the right tool for the job. C is the right tool for some jobs; if you jam it into a place where it doesn't belong, you probably don't have a deep enough understanding of it to use it safely.

There are two groups you find misusing something. Those that really know what they are doing, have weighed the risks/rewards, and have decided that misusing the tool to get the job done is worth the associated risk. Then you have people who don't know what they are doing. They are going to have problems, but don't blame the tool.

</comment><comment><USER17> I wrote my own sprintf handler which checks string length and truncates if necessary.

unsigned long lsprintf(unsigned long max_length,char [asterisk]dest,char [asterisk]fmt, ...)

char buffer[1024];

lsprintf(1024,buffer,format);

Slightly overkill.

<comment><USER18> C99 has snprintf() for this.

</comment></comment><comment><USER19> Anyone care to guess at what he means by a strong and expressive type system?

<comment><AUTHOR> I'm pretty sure he'd point to Haskell as the best example.

<comment><AUTHOR> Common Lisp, {,S,O?CA}ML, and even C# also make the list.</comment></comment></comment>


Follow-You Printing - <AUTHOR> http://blog.cr.yp.to/20150218-printing.html

<comment><USER2> This worked back in the day, when printers had no network-level access control, maybe not anymore... Go through the printer's settings, and select the one that prints out all the current settings; on it may be the printer's IP address; also note the make and model; get the Linux driver (PPD) from the manufacturer, either on their website or by requesting the CD in the mail; install the driver on your local machine with CUPS and print directly.

If you're djb you might even get away with it.</comment>


Canarytokens – honeypot tokens that tell you when someone used them - <AUTHOR> https://canarytokens.org/generate <comment><USER2> I was expecting some kind of ICO or some weird Ethereum token. Something like a token that has the standard ERC20 interface, but the contract has a weird hidden part that also sends a message somehow when someone transfers the token. So you can put in a single wallet all your normal ICO tokens and additional tokens and this "canary" tokens and if someone steal them perhaps you can realize before they spend the valuable tokens. [I'm not sure if this is possible or if this is a good idea, but everyday we get more and more weird tokens ...]

Anyway, ..., you must consider renaming the page or the submission, because some people could confuse this with yet another unuseful valueless ERC20 token.</comment>


Ask HN: How do you deploy to external Windows servers? - <AUTHOR> I'm trying to find a clean and fast way to deploy files to a remote windows server. Here's what I've tried so far:
* cygwin + rsync (myriad file permission issues, absolute nightmare to set up)
* WinSSHD + SFTP (works, IIS file permissions are OK, but transfers are extremely slow)
My final option is to enable Windows file sharing and use robocopy (Window's closest equivalent to rsync) but I am concerned about security issues.
Are there any other options I should be looking at? I'm not keen on Octopus deploy because I think it's overkill to have a web UI for something that should amount to one or two lines of code in a build script.
To be honest this has been an ongoing problem I always face, and I always end up just remoting to the production server and copy+pasting files over RDP. It's an awful experience, and it needs to end. What are my options? <comment><USER2> What about FTPS (not to be confused with SFTP)? You can use Filezilla Server which is a no-hassle setup and in my experience works great on Windows. It has a full UI but can also use an XML file for configuration, just use /reload- config to pull in your XML changes.

FTPS is also supported by a lot of clients including WinSCP which is extremely fast and great (WinSCP also supports SFTP) and Visual Studio's publish[0].

[0] [http://weblogs.asp.net/scottgu/vs-2010-web- deployment](http://weblogs.asp.net/scottgu/vs-2010-web-deployment)

PS - One problem we had with WinSCP is sometimes after it had done a transfer the WinSCP process wouldn't terminate. It would sit in memory forever. We had to build a script which goes through and kills every WinSCP process older than several hours.

</comment><comment><USER3> > I'm trying to find a clean and fast way to deploy files to a remote windows > server.

Recently AWS CodeDeploy started to support on-premises servers ([http://docs.aws.amazon.com/codedeploy/latest/userguide/how-t...](http://docs.aws.amazon.com/codedeploy/latest/userguide/how- to-configure-on-premises-host.html)). Basically you register your Windows servers by installing a CodeDeploy agent, then you can manage your deployment in the AWS Console or by API/CLI. The files to be deployed are from github or S3.

It might be overkill. I haven't tried this on-premises support, but just to tell an option here.

</comment><comment><USER4> TeamCity -> Octopus Deploy. If you're tracking dvcs revisions with builds for an 'edge' env, or building for the test/master branch (using gitflow style) you're rarely in the interface, as your CI should kick off builds and tests.

Having an interface somewhere devoted to deployments, status, failures and such is actually useful. Additionally, if you're needing multiparty sign-off for release to certain environments, there's that capability.

</comment><comment><USER5> It really depends what you're deploying. Presumably, you're using .NET or SQL Server, or you'd not be using Windows.

In my experience making everything run in IIS (with activation, if needed) and using msdeploy to deploy to IIS and SQL Server was the best setup.

</comment><comment><USER6> You could use a configuration management framework like Chef. Granted, it takes a bit longer to put in place as opposed to a just-get-it-done method, but the end result is something that is repeatable and, hopefully, less painful to triage.

</comment><comment><USER7> \- If you are deploying from Visual Studio, there is a built in deployment manager but it has to be enabled on IIS first.

\- Other option is to connect trough RDP and copy/paste.

</comment><comment><AUTHOR> Ultimately I got cygwin+rsync working by editing /etc/fstab and adding "noacl" to the mount arguments then restarting the server.</comment>


Your Brain on Poverty: Why Poor People Seem to Make Bad Decisions (2013) - <AUTHOR> http://www.theatlantic.com/business/archive/2013/11/your-brain-on-poverty-why-poor-people-seem-to-make-bad-decisions/281780/?single_page=true <comment><USER2> There was a great study published in the journal Cognition a few years ago revisiting the famous kids & marshmallows self-control study, but where the researchers additionally manipulated the children's beliefs in the environmental variability. They offered the kids some desirable thing and then either gave it to them or not, then checked how much self-control they exercised on the marshmallow task. The idea here is that if the payoff is highly unreliable, the rational thing to do is to go ahead and eat the first marshmallow because 1) there's a pretty good chance there aren't more coming and 2) even the first marshmallow might disappear. I think there's a pretty clear socioeconomic analog of this— if you have few resources and an unreliable environment, it's rational to act on a much shorter timeline.

</comment><comment><USER3> Wow first few top responses here reflect the upper-middle-class nerd myopia.

You don't understand what middle class is. Middle class is not a specific dollar figure. It's not owning a large TV. Middle class is when you don't have the set of anxieties that cloud your judgement and depress your day.

Middle class means you don't care if your paycheck gets delayed from Friday to Monday. Middle class is when you don't have to count how many times a week you go to the laundromat.

Sadly, middle class, as evidenced by these responses, also means that you don't see why other people would care if their paycheck gets delayed by a business day or two. It's no big deal, you are convinced. Yet, there's a woman that just started working, waiting for her first paycheck, which already had to be delayed due to starting date not aligning with payment schedules. And she has been planning to pay rent with this money, on the promised date. And yet, because some upper-middle-class manager with middle-class myopia forgot to submit _everyone_ 's timecards on time (as required by the similarly-myopic corporate policy), everyone's paychecks get delayed by a few days, including this woman's. Now she has to deal with missing paying rent. True story, in modern liberal bastion of Massachusetts.

All you have to do is understand why it's considerably more difficult for someone to improve their life, when starting from a much lower point, constantly being banged around by the ankles of the society.

<comment><USER4> Yes, but it's also good to understand how some people in really poor places like Bangladesh or Malawi are able to overcome while others in the same class and circumstance aren't, for example. What, is it in those people which makes them overcome obstacles others can't or dont want to. What makes some people succumb to circumstance while others persevere in the face of it?

<comment><USER5> Your Bangladesh example really proves that social circumstances matter more than individual qualities. A moderately intelligent and somewhat hard working middle class American who goes to a decent state college enjoys a standard of living that far outstrips that of all but the absolute richest Bangladeshis. Why? Is he just smarter and more hard working than the top Bangladeshi students who go to the top Bangladeshi colleges? Or is it because he faces totally different circumstances?

<comment><USER4> Circumstance is an important factor. As you illustrate, Americans (or middle class Nigerians, or Japanese, or Chilean) have a higher potential circumstantially, but despite that many "underachieve" with respect to what someone else could do with similar resources (education, infrastructure, healthcare, economic stability, etc.) in other places.

So, yes in many ways it's relative. But additionally persevering is better than succumbing to circumstance.

</comment></comment></comment></comment><comment><USER6> Being poor means you have no cushion. Particularly if you are poor in an urban/suburban area. You are one unfortunate event away from being wiped out.

Company downsizes or has a round of layoffs, and you lose your job? The rent, the car payment, the grocery bill, the utilities, etc, don't go away. Some of that you can scrape by on by shifting the bills onto credit, but most landlords don't take VISA.

Get in an accident, and get seriously injured? Now you can't work, and you've got either huge medical bills, or a deductible that you have to pay before the insurance covers the rest. Maybe you heal up and your job isn't there any more.

If you are poor in a rural area, you actually have more options than if you are living in a city. My grandparents were poor as church mice, but if things really hit the fan, at least they still had a roof over their heads (even if it's a dirt-floor shack), they had a plot of land they could grow a garden in, wood that could be chopped down to feed the wood stove, and deer that could be poached to put meat on the table. They had resources and skills that could help them subsist and ride out rough patches where money was tight or non- existent.

<comment><USER7> > Being poor means you have no cushion. Particularly if you are poor in an > urban/suburban area. You are one unfortunate event away from being wiped > out.

I think there is a more important distinction; really, one that is more valuable than any reasonable amount of saved money is. Family with the resources to support a person. I mean, most of the time, if you come from a middle-class family, you can't remain dependent forever, but you _do_ have a place to stay while you get back on your feet, and you have a network of people who know people who can get you interviews for decent jobs.

I think this is a bigger advantage than it would seem at first glance; bankruptcy is dramatically less frightening if you know that worst-case, you can sleep at your parent's place, eat their food, and that they'll be calling all their contacts trying to get you an interview.

</comment></comment><comment><USER8> Here is the article itself: [http://www2.warwick.ac.uk/fac/soc/economics/staff/amani/mani...](http://www2.warwick.ac.uk/fac/soc/economics/staff/amani/mani_science_976.full.pdf)

Note that the effects of financial concerns measured in this paper are large and instantaneous. There is nothing here about persistent, long-term effects.

A couple of observations:

\- The proposed mechanism is that thinking about financial concerns ties up mental resources that would otherwise be available to solve tests. But it seems to follow that the poor do have their full mental resources available when dealing with those financial concerns themselves, so it does not seem to work as an explanation for poor decisions concerning finances.

\- The sugar-cane farmers end up poor towards the end of the harvest cycle because they spend too much of their money soon after they have been paid (as the paper says, they "find it hard to smooth their consumption"). In other words, their eventual poverty is caused by poor decisions made when they are _rich_ , not when they are poor.

</comment><comment><USER9> The Logic of Stupid Poor People

[http://tressiemc.com/2013/10/29/the-logic-of-stupid-poor- peo...](http://tressiemc.com/2013/10/29/the-logic-of-stupid-poor-people/)

> _I sat in on an interview for a new administrative assistant once. My > regional vice president was doing the hiring. A long line of mostly black > and brown women applied because we were a cosmetology school. Trade schools > at the margins of skilled labor in a gendered field are necessarily classed > and raced. I found one candidate particularly charming. She was trying to > get out of a salon because 10 hours on her feet cutting hair would average > out to an hourly rate below minimum wage. A desk job with 40 set hours and > medical benefits represented mobility for her. When she left my VP turned to > me and said, "did you see that tank top she had on under her blouse?! OMG, > you wear a silk shell, not a tank top!" Both of the women were black._

> _The VP had constructed her job as senior management. She drove a brand new > BMW because she, "should treat herself" and liked to tell us that ours was > an image business. A girl wearing a cotton tank top as a shell was > incompatible with BMW-driving VPs in the image business. Gatekeeping is a > complex job of managing boundaries that do not just define others but that > also define ourselves. Status symbols — silk shells, designer shoes, luxury > handbags — become keys to unlock these gates. If I need a job that will save > my lower back and move my baby from medicaid to an HMO, how much should I > spend signaling to people like my former VP that I will not compromise her > status by opening the door to me? That candidate maybe could not afford a > proper shell. I will never know. But I do know that had she gone hungry for > two days to pay for it or missed wages for a trip to the store to buy it, > she may have been rewarded a job that could have lifted her above minimum > wage. Shells aren't designer handbags, perhaps. But a cosmetology school in > a strip mall isn't a job at Bank of America, either._

> _At the heart of these incredulous statements about the poor decisions poor > people make is a belief that we would never be like them._

</comment><comment><USER10> I grew up very poor, this did not make me stupid and implying such is offensive. There are poor people who can work it out and there are those who simply are incapable.

Knowing people that are still poor, including much of my own family, it is very obvious that they're unwilling to apply themselves. They give in to the easy quick fix, even when actively told not to and shown a better path. They are largely beyond help.

The people I know will make just as bad of decisions if given money. They are poor because they don't think about the future, they don't not think about the future because they're poor.

<comment><USER11> That is a common view, but I don't think it's correct, and I don't think it's supported by the science.

I also grew up poor, but having been in tech for decades, being well off is a shit-ton easier. When thing go wrong, I have a cushion that I didn't before. That gives me time to think, time to recover from trauma, time and patience to consider and plan. I would love to attribute my new circumstances to my enormous virtue. But honestly, I think it's more about having lucked into a career that happens to be a great match and also be highly rewarded.

For those interested in the science how scarcity shapes cognition, this is a good book: [http://scholar.harvard.edu/sendhil/scarcity](http://scholar.harvard.edu/sendhil/scarcity)

For those unfamiliar with the experience of poverty, John Scalzi's piece "Being Poor" is evocative:

[http://whatever.scalzi.com/2005/09/03/being- poor/](http://whatever.scalzi.com/2005/09/03/being-poor/)

And unlike most sites, that one definitely benefits from reading the comments.

<comment><USER12> "Being poor is knowing exactly how much everything costs."

There was a time when I could say exactly how much breakfast ingredients were per serving: oatmeal serving $0.xx; 2 eggs $0.20 (obviously not this year), 2 sausages $0.20 (frozen, buy when on sale for $1/box). I wasn't really constrained by those prices, but I was certainly sensitive enough with irregular customer payments to be well aware of them.

</comment></comment></comment><comment><USER13> This is spot on. And if you think about it neurologically, changing patterns of thinking that have grown into your brain make it even harder, like breaking a facebook habit.

It's a process of learned helplessness: [http://braythwayt.com/2015/01/20/learned- helplessness.html](http://braythwayt.com/2015/01/20/learned-helplessness.html)

The cognitive portion is only half the picture though, and I think wealthy people(especially moderately wealthy people) suffer from something similar(e.g. doctor just trying to get through the day rather than save lives and cure diseases.)

The other half is the social mechanisms that make poverty endemic. Going right to the root: it's the monetary system itself.

<comment><USER14> > Going right to the root: it's the monetary system itself.

Please pardon me for being pedantic, but there is distinction worthwhile, here.

The monetary system is a mechanism of liquid exchange for goods and services. It is largely good for everyone because it facilitates trade of otherwise incomparable goods, as well as possession of assets that can in the future be exchanged (i.e. savings). One cannot trade apples for oil tankers directly.

There are a few places that are considered the root of inequality, though. In my opinion, these include the tax system. A "progressive" tax leads to greater equality; optimally this will not diminish individual incentives, but one does not want to apply regressive (and often hidden) taxes that create systemic perpetual and inescapable poverty.

Second, the social commons. School, health care, policing, roads, etc., that give everyone opportunity to apply themselves to success. These are the things that lead to "social mobility". With poor social mobility, the poor stay poor and the rich stay rich, regardless of their competences.

It is an oversimplification and arguably inaccurate to say that the monetary system makes poverty endemic. I believe the root of the problem is founded in the two points above: the fairness of how we collect taxes; and, how opportunities for advancement come about – be they smarts and hard work and social institutions that recognize and reward those, or just being born with rich parents.

<comment><USER13> The monetary system is more than that. It's a monopolistic mechanism of social control founded on debt(an asymetric social relationship) and which can only be sustained by debt(more asymetry).

Starting out, the list of who has what wealth, defined in terms of our arbitrary monetary system, places some on the bottom and some on top then applies a massive downward force on those on the bottom.

I recommend Paul Grignon's Money as Debt: [https://www.youtube.com/playlist?list=PLdMxiaZGboJSgU2raUksC...](https://www.youtube.com/playlist?list=PLdMxiaZGboJSgU2raUksCFGSUfWS8eHR8)

<comment><USER15> There is also the fact that the monetary system is not a zero sum game for its users. Hence the perpetual indebtedness to central banks as we see with all major nations.

Professor Franz Hörmann of the Vienna University of Economics explains this design in his Banned Ted Talk:

[https://m.youtube.com/watch?v=FYWVbdSX7B4](https://m.youtube.com/watch?v=FYWVbdSX7B4)

TLDW: When central banks create money and loan it out to nation states they charge an interest rate on top of the principal. However, the principal was the only money created, so the money which is contracted to be paid as interest physically does not exist. This systemic flaw is, Hörmann suggests, what creates poverty

To put it in even simpler ELI5 terms: it would be like going up to a 5 year old and saying, I've got these 10 widgets that only I can make and that you rely upon to survive. I'll let you borrow them if you agree to give me 11 of these widgets back when you're done, or else!

</comment></comment></comment></comment><comment><USER16> The idea of handing out cash has become popular lately but I'm skeptical.

Does anyone have an argument why handing them cash would be better than paying for needs?

It seems to me (less restrictive) housing subsidies, food stamps for everyone and child healthcare would help the poor a lot more than cash.

My argument is that paying basic needs will reduce stress level and help them deal with the problems. Not only does it make more intuitive sense, but when I've helped troubled family members, this has worked much better in practice than giving cash.

The article, which seems to support giving out cash, admits they don't make good decisions. A more generous assumption is that they spend it on their needs but spend all their will power doing so, leaving less willpower to address other problems.

Note: I'm in favor of helping the poor and I'm not bashing them. I think the stress of poverty partly causes them to make bad decisions and I think people have value even if they make bad decisions.

Also note: Please don't just downvote me if my argument isn't consistent with your ideology. That's lame (100% chance I get downvotes anyway). Rather, provide an argument if you disagree.

<comment><USER17> From what I understand the primary reason people seem to think giving money instead of services is better is due to overhead. If you need to monitor how the money is distributed and how the money is spent, then that requires entire branches of government to make this possible. Instead if you're just giving money you are giving those in need more, which more than likely will help them considerably more than if you're paying a ton of overhead in salaries and buildings and bureaucracy just so you can distribute money to those in need.

<comment><USER18> I think the appeal of basic income to HN crowd is that is a solution that an engineer would like. Very neat.

Some people can't manage their money though, however complicated that is.

<comment><USER16> Yeah, I would guess that the huge overhead is still more efficient given how poorly some would use the money, but that's just a hunch. I have nothing to back that up (and would love any argument on either side of that)

<comment><USER17> Here's a link to an article that summarizes one of the more interesting stories.

[http://www.nationofchange.org/utah-ending-homelessness- givin...](http://www.nationofchange.org/utah-ending-homelessness-giving- people-homes-1390056183)

About 1/2 way through it says:

"In 2005, Utah figured out that the annual cost of E.R. visits and jail stays for homeless people was about $16,670 per person, compared to $11,000 to provide each homeless person with an apartment and a social worker."

</comment></comment></comment></comment></comment><comment><USER19> It's simple maths. Wherever you live, there's a baseline amount of money that it costs to survive. Food costs the same whether you're rich or poor. Housing varies, but there is generally a baseline. If the baseline cost of living is $2000/month, and you make $2000 a month, you have $0 disposable income. If you make $4000 a month, you have $2000 in disposable income. If you make $8000 a month, you have $6000 per month disposable income, or 3 times that of the second scenario. Since the cost of certain things is constant, as you make more money, your disposable income rises dramatically (until a certain point where gains are seemingly only incremental, at which point you're no longer middle class).

The rich have more opportunity to save, thus they learn about saving. They have capital, thus learn how to use it. If you never save and never accrue capital, you'll never understand it. So any time you do end up with a windfall, you will inevitably squander it, since you've never had the experience of what to do with it.

Plus, money problems lead to stress. My wife grew up poor, and even though we're not doing badly today, it causes an immense amount of stress and is 'mental overhead' for her. She never wants to invest, is apprehensive about going to school herself, or basically doing anything that would deplete any amount of savings. This inevitably prevents her from attaining a 'higher' equilibrium, but I do understand the feeling (and for the record, based on where she came from, she's actually doing fantastic and has experience doing things that none of her relatives even contemplate doing). I grew up working class for this country (so probably the bottom end of 'middle class'), but I'm stubborn with a bit of a gambling streak. So I'm going to university, investing money, occasionally hustling for extra here and there (gambling, side jobs, etc...), and it's mostly going OK.

Plenty of relationships end over money. And when your world is falling all around you, it's all too easy to turn to 'escapes' such as drugs and alcohol.

This is a tech forum, so a little analogy. A poor person is like a phone whose specs are just barely enough to run Android. The experience is poor, laggy, and you can't play too many games, or do any 'productive' tasks. Middle class is like an iPad pro or a decent laptop, you can do what you want for the most part, it's a pleasant experience, but there are certain limitations. Being rich is like having a super-computer - the potential is seemingly limitless, you can solve problems that are out of reach of the first two.

Right now I'm in University, and being working-class, it's hard to compete with rich kids who live on their parents dollar. Every day I work is less time to study. Every time I have to cook dinner is less time to study. And if I need to study a 'minimum' amount to pass my courses, then I need to either sacrifice sleep or time with my wife. And neither leads to a particularly great outcome. So mostly I just suck it up and lose sleep, live off coffee, and am a solid 'B' student rather than actually competing with the more privileged kids. In the job market I'll probably have to use my life experience and hustling streak, since I won't compete on GPA or extra- curriculars.

Anyhow, just a few thoughts on the matter. And these sorts of problems with income inequality are why more and more economists support the idea of a basic income. It'll allow the 'poor' to have the ability to have disposable income with which they can get an education, or invest in themselves rather than work like dogs to barely survive. While this may not seem fair for those who have already attained middle class or higher (who always claim they 'earned' it, never mind the societal advantages they used), it's better for society. Unless you think having a serf class is a societal advantage (and there are people who think this)...

<comment><USER20> As someone with input into hiring decisions, I don't remember the last time I actually registered someone's GPA off a resume. Your background on the other hand would give you a huge leg up in our org (and I imagine others like it too).

</comment></comment><comment><USER21> We like to think hard work and correct attitudes towards education, savings and investment results in being well off. And to a certain extent it does.

But, many people who are well off, in fact likely some of the most well off, have an entirely different attitude that doesn't have anything to do with the above traits of the middle class. And that is the burning desire to fuck other people over and to take unfair advantage of others at every opportunity regardless of the effects it may have on the victims.

Poverty sometimes isn't all about short term thinking and bad choices. Sometimes it's just being fucked over at different scales again and again and not being able to defend oneself against it. Education and going to work everyday doesn't necessarily help in this regard.

</comment><comment><USER22> [http://playspent.org/](http://playspent.org/)

</comment><comment><USER23> It's a Leftist recruitment article to get people feeling sorry for the poor who, SUPPOSEDLY, according to this article -- unlike most other humans, the poor are incapable of making good decisions, only bad ones.

I was living on the street as a teenager after making bad decisions and having my parents abandon me.

How did I start making good decisions (finally) ?

I quickly grew to HATE being poor.

That hatred of poverty helped me ask "okay, how do I get out of this, living on the street and having no prospects?"

I had independent means within 20 years (in my 30s) after that hatred of my poverty forced me to put more effort into what I did every day.

I was still making _some_ bad decisions for a few years but over time I became very practiced at knowing what to choose (go to college? go in the military? get away from all my current acquaintances?)

Within a year of my peak of hating poverty I stumbled on the idea of having goals. I read "Your Erroneous Zones" by Wayne Dyer.

20 years later I had independent means (no boss, good income).

HATRED OF POVERTY. People who stay poor lack _that_.

THEIR RESPONSIBILITY. No one else's.

That article is a recruitment tool for Leftists, as in "we should feel sorry for the poor, it's not their fault."

Life _will_ hold you individually responsible for YOUR DECISIONS.

So will the criminal justice system.

Articles like this one try to convince us that some people should NOT be held responsible for their behavior.

WRONG. WRONG. WRONG.

<comment> vezzy-fnord I realize that having initiative is important, but you're implying a level of determinacy in life that doesn't exist.

<comment><USER24> I see the consequences of my decisions, large and small, good and bad, every day. I made those decisions, and so the consequences are to my credit and my fault.

I don't subscribe to the fatalistic point of view that my path in life is predetermined. Not for a minute.

<comment> vezzy-fnord I'm not advocating determinism in the slightest. I'm saying that the GP is pretending as if exogenous factors and entities are ineffective.

</comment></comment></comment></comment><comment><USER25> [https://hn.algolia.com/?query=Why%20Poor.%20People%20make%20...](https://hn.algolia.com/?query=Why%20Poor.%20People%20make%20bad%20decisions&sort=byDate&dateRange=all&type=story&storyText=false&prefix=false&page=0)

</comment><comment><USER26> People with weak character, poor morals and low IQ will probably be in poverty. I can't tell if the study takes this into consideration.

<comment><USER27> Can you define weak character and poor morals? Can you explain to us how these things will lead to poverty?

<comment><USER28> Spending your money on drugs and/or alcohol that you are addicted to.

Buying nice things you can't afford on expensive credit.</comment></comment></comment>


What's in a web browser - <AUTHOR> https://medium.com/@camaelon/what-s-in-a-web-browser-83793b51df6c <comment><USER2> Fun fact: In perspective of file size, in Chrome's final bundle, a large chunk of bytes were the libicu, and 80% of libicu are chinese characters. So everyone must download extra megabytes of software for modern CJK word segmentation

</comment><comment><USER3> Nice writeup. But it doesn't explain how a paragraph of N words is redrawn in O(1) time if one adds one word to the beginning.

</comment><comment><USER4> For the record, I much rather that old JB browser than Chrome. It's still around if you want to install it but "inverted rendering" doesn't work on newer android versions.</comment>


Legacy extensions disabled by default on Firefox Nightly 57 starting August 11 - <AUTHOR> https://mail.mozilla.org/pipermail/dev-addons/2017-August/003059.html <comment><USER2> I just finished porting an extension from the Jetpack API to the WebExtension API. It's not that bad. I only had to file two bug reports, and I only had to write one line of workaround code. This is far better than the first years of Jetpack. Jetpack didn't work right until about three years after release. AMO finally seems to be getting their act together.

The big problems are with really old extensions that used the antiquated XUL format. That's been on the way out for six or seven years, and it never worked on Firefox Mobile ("Fennec"). It's not like this was a surprise.

<comment><USER3> Thank you. We hear a lot of complaining about people not having problems, but wanting to predict there will be.

It's refreshing to have the perspective of somebody who actually had the problem.

Also, the stance of the ublock origin maintainer on this:

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

He clearly states why FF is NOT becoming a chrome clone as everyone says.

<comment><USER2> Here are the issues I ran into:

\- In Webextensions, retrieving something from local storage is an async operation. In Jetpack, it was a sync operation. This has the potential to create race conditions if you're updating a cache. It's OK in my application, because a double update is harmless.

\- Webextensions, by default, will run in incognito mode. That's because the "incognito" key in manifest.json doesn't support "not allowed" yet. ([1], table "Browser compatibility") That should have been both supported and the default, as it was in Jetpack, because it's a form of permission. Requires a one line workaround.

\- The use of "id" requires a better explanation. When upgrading, you have to use the same ID your previous non-Webextension used, even though that ID ends with "jetpack". The documentation doesn't indicate anything like that. But the AMO uploader detects this and gives a good error message.

The new development and debugging environment on desktop is nice. The add-on worked the first time on Android, so I didn't have to use the more difficult environment for mobile debugging.

[1] [https://developer.mozilla.org/en-US/Add- ons/WebExtensions/ma...](https://developer.mozilla.org/en-US/Add- ons/WebExtensions/manifest.json/incognito)

<comment><USER3> Insteresting.

</comment></comment></comment></comment><comment><USER4> Can someone please post any information on what this means for TreeStyleTabs? Will it stop working? Have they managed to work with Mozilla to build enough hooks to keep it working with the new restrictions? Thanks.

<comment><USER5> It will stop working in Firefox Nightly tomorrow. It will continue working in normal Firefox until November, and in Firefox ESR until June next year.

Tree Style Tabs itself will need to be redeveloped, but the necessary APIs are more or less available, and there are already similar add-ons that work in Firefox 57:

\- Tree Tabs: [https://addons.mozilla.org/en-US/firefox/addon/tree- tabs/](https://addons.mozilla.org/en-US/firefox/addon/tree-tabs/)

\- Tab Center Redux: [https://addons.mozilla.org/en-us/firefox/addon/tab- center-re...](https://addons.mozilla.org/en-us/firefox/addon/tab-center- redux/)

The most significant missing feature is the ability to hide the native, horizontal tab strip. That's being tracked in [https://bugzil.la/1332447](https://bugzil.la/1332447).

<comment><USER6> You can block it by changing userChrome.css

</comment></comment></comment><comment><USER7> I understand the reasoning behind the decision and Mozilla did the decent thing by announcing it early enough to give plenty of time for developers, I just hope this doesn't have too negative an impact on their user numbers.

The browser situation at the moment is pretty dire.

<comment><USER8> I'm excited about Firefox 57. I've been trying out Vivaldi this year. It's been faster, but there are many features I miss from Firefox.

It looks like uBlock works with the new API, and there are Tree Style Tab replacements until TST gets the API changes it needs as well.

</comment></comment><comment><USER9> This is going to hurt firefox badly. Many extensions authors don't maintain their extensions or find the migration to webextensions too hard(with lack of some equivalent apis). Firefox remaining userbase depends on these extensions. The questionable allocation of time and resources in recent years towards irrelevant (to wider userbase) side projects make it seem firefox will lose the "second place" in market share. With a marketshare below 3% sites will start ignoring it in favor of Chrome monoculture and subservience to Google.

<comment><USER3> > This is going to hurt firefox badly.

Speculation. I have only one extension I miss from the transition (lazarus), and I use tons of them. Most extensions of crap. Most important ones will be ported. I only see people going crazy over it in the tech saavy-complaining- experts crowd like HN comments.

> Firefox remaining userbase depends on these extensions.

I install Firefox on 20 to 30 machines every years. Most people just want ad block. Sometime last pass. The rest a rounding errors.

> With a marketshare below 3% sites will start ignoring it in favor of Chrome > monoculture and subservience to Google.

3 %. LOL. You are one those dooms day persons right ?

<comment><USER9> [http://gs.statcounter.com/](http://gs.statcounter.com/) Browser Market Share Worldwide Browsers Percentage Market Share July 2017 Chrome 54.27% Safari 14.17% UC Browser 8.59% Firefox 5.72% Opera 3.99% IE 3.73%

<comment><USER3> Still 30% on my porn websites. Hum, who do i trust, some people making money with stats or my trafic composed of the less tech saavy user ever ?

<comment><USER10> Those could just be video-scraping bots with a Firefox UA

</comment></comment></comment></comment></comment><comment><USER11> FWIW I've switched back to Firefox from Opera/Chrome _because_ of FF 57. The speed improvements made in 55 and 56 are simply mind-blowing, and I'm sure this will continue improving in the following versions as well. I'm running Nightly without any issue. And there's that feel-good vibe of supporting a positive actor of the internet, which is always a nice feeling :)

</comment><comment><USER12> Firefox permanently breaking Pentadactyl is one of its biggest disappointments. I really hope some other extension steps in to take its place, but from what I've read that's deliberately not possible anymore, as what Pentadactyl does is too powerful, and Firefox has deliberately chosen to reduce the power extensions have to overhaul how it works.

<comment><USER3> I've been using Firefox for so long it was called phoenix at the time. I used a LOT of extensions, take part of the testing of unstable versions and test pilots and everything.

I've never heard of Pentadactyl to this day.

So my guess you are a small user base, and Mozilla can safely accept to loose you.

You can't satisfy everybody.

What everybody want's right now is a faster browser. That's the main requested feature. That what's everyone agree on.

The new extension model is an important step to do that. There is no way around it. XUL extensions drag the browser down.

So if in order to satisfy most user FF has to let you down, it makes sense. It's sad. I understand your frustration. But it's the logical choice.

<comment><USER13> > What everybody want's right now is a faster browser. That's the main > requested feature. That what's everyone agree on.

Talk for yourself, not on everyone's behalf

> I've been using Firefox for so long it was called phoenix at the time. I > used a LOT of extensions, take part of the testing of unstable versions and > test pilots and everything. I've never heard of Pentadactyl to this day.

Not a surprise. It's not like you have to memorize list of all extensions before using "unstable versions and test pilots and everything."

> So my guess you are a small user base, and Mozilla can safely accept to > loose you.

Thanks for reminding us your use case is the only one that matters end everybody else is expendable.

</comment></comment></comment><comment><USER14> I wonder if we'll see an increase in the number of out of date/vulnerable Firefox instances after a while

</comment><comment><USER15> A bit OT: If i want to propose a webextension, what is the correct procedure, it seem i do have to open a bug in bugzilla, but in the documentation i did not find the instruction on how to open a feature request, only bugreport.

I read this document: [https://developer.mozilla.org/en- US/docs/Mozilla/QA/Bug_writ...](https://developer.mozilla.org/en- US/docs/Mozilla/QA/Bug_writing_guidelines)

Does anybody have some suggestion on how to open a feature request for a webextension, it is better to first hop on an irc channel and ask there?

<comment><USER16> If you simply want to request a WebExtensions API [1], please file a bug. These will be triaged and processed in a bi-weekly public meeting [2].

[1] [https://bugzilla.mozilla.org/enter_bug.cgi?product=Toolkit&c...](https://bugzilla.mozilla.org/enter_bug.cgi?product=Toolkit&component=WebExtensions:%20Untriaged) [2] [https://wiki.mozilla.org/Add- ons/Contribute/Triage](https://wiki.mozilla.org/Add-ons/Contribute/Triage)

</comment></comment><comment><USER17> Is NoScript expected to be ported over to the WebExtension API? I know there were numerous bugzilla tickets tracking its feasibility, but not sure what's the final verdict and expectation?

<comment><USER18> Yes. There was a recent blog post about it: [https://blog.mozilla.org/addons/2017/08/01/noscripts- migrati...](https://blog.mozilla.org/addons/2017/08/01/noscripts-migration-to- webextensions-apis/comment-page-1/)

<comment><USER17> Thanks!

</comment></comment></comment><comment><USER19> Really hoping that Mozilla reconsiders: [https://www.change.org/p/mozilla- save-mozilla-firefox-s-best...](https://www.change.org/p/mozilla-save-mozilla- firefox-s-best-feature).

The full-stop disabling of legacy extensions will absolutely wreck my current workflow (Tab Groups, Vertical Tabs, Tile Tabs, etc.), to the point where I may need to explore alternatives. I don't like that thought, but I also don't see Mozilla giving power users like me much choice.

<comment><USER20> Tab groups is possible with the WebEx system, Vertical Tabs might work, but yeah Tile Tabs is probably out.

I'm kind of in the same boat as you. Vimperator is how is how I use my browser. Vimperator is pretty amazing in terms of functionality, but is also a good illustration why the WebEx migration is needed.

Vimperator can reload every tab every 10 seconds, create a temp buffer and open it in vim for textareas, control other extensions, modify headers or content of the HTML, control the chrome, and so on. From a developer or security standpoint having a plugin that can do this is insane.

That being said, I don't know what I'm going to do when the legacy stuff is fully deprecated. The plugins I use have become so involved in my workflow that I can't really picture Foxfire without them.

<comment><USER21> Then disable it by default. Don't show non-WebEx addons in the mozilla website. If a user tries to enable it, put up a big red warning sign saying how dangerous it is and a checkbox saying "I understand". But in the end, let the users do what they want.

This way 99% of the users will never use unsafe addons, the 99% who won't even miss them. But power user who _understand_ and _want_ to, let them ultimately have the freedom to do "stupid" things (what you consider as stupid).

<comment><USER2> The underlying XUL machinery that XUL-type add-ons access is going away. It's never been there in mobile Firefox. That's why they have to go.

Whether Firefox add-ons should be restricted to what Google Chrome supports is another issue.

<comment><USER16> > Whether Firefox add-ons should be restricted to what Google Chrome supports > is another issue.

It's not, though. See: [https://discourse.mozilla.org/t/support-ublock- origin/6746/4...](https://discourse.mozilla.org/t/support-ublock- origin/6746/451)

</comment></comment></comment></comment></comment><comment><USER22> I understand why FF is moving this direction, and I actually think they should. But they should have a plan of action for people who want extensions's that flat-out won't work with the new system. By just telling people "lol no", they are really going to get some backlash, and Mozilla absolutely deserves it.

It's frustrating to see the only browser that cares throwing their user's concerns to the wind like that.

<comment><USER23> That's what we've all been using for the last year. Legacy extensions were marked as "legacy," and no one cared. They're tagged as "deprecated", and "incompatible with Firefox <57", and still no one cares. Developers are only now switching because the deadline is fast approaching. That's just human nature, unfortunately.

Though I kind of wish Mozilla had gone all the way to labeling them "for fucks sake stahp"

<comment><USER22> But from what I've read, that's not the case. There are some extensions that _can 't_ be upgraded, like vimperator.

I'd love to be wrong on that though

</comment></comment></comment><comment><USER24> Anyone know how Firefox upgrades can be disabled on an Ubuntu system?

<comment><USER5> Please do not do that. Browsers have a massive attack surface, and you absolutely want to ensure that you're up to date with security patches.

If you want to slow down the rate of UI / UX / product changes, consider trying Firefox ESR: [https://www.mozilla.org/en- US/firefox/organizations/](https://www.mozilla.org/en- US/firefox/organizations/)

<comment><USER25> You can mitigate the security concerns through other sandboxing techniques (e.g. Qubes, VMs). It's not like up-to-date Firefox is really that secure either.

Web developers stand the most to lose from people opting to run old browsers. Back in the IE6 days, it was justified, but by now, web APIs are already about as powerful as they're going to get, and we're reaching (or are long past) the point of decadence, churn, and bloat.

If you want to run old Firefox, take reasonable precautions, and you'll be fine.

Edit: down to -4. FWIW you can also securely run IE6 or literal malware.

</comment></comment></comment><comment><USER26> The internet could really use a non-profit lobbying for the _open_ web.

We already have actors locking browsers down for (according to party line) the user's own good. Yet it seems Firefox is on the path to becoming Chrome, and not even extensions functionality will be a differentiation point. So what even is the "why" of Firefox?

<comment><USER27> I don't understand your comment.

Firefox is transitioning to an extensions model that is cross-browser and defined as a W3C draft. Their old extensions were Firefox-specific and could not be used by anyone else. This change seems very much in spirit with the open web.

<comment><USER26> It's not about Firefox-only vs standard, but about control.

When your extension does not or cannot work anymore due to lockout by browser consortium agreement, the control isn't with the user or the developer -- it's with the browser vendor. It kind of defeats the essence of extensions in the first place, which started out as a technique to give users and developers power over their user agents, and that's being reversed.

If what your user agent can do is dictated entirely by a consensus of a small number of browser vendors, the web becomes less open. Neither users nor developers wanted this.

<comment><USER27> > _Neither users nor developers wanted this._

That's a very broad statement to make, and I don't think you're in a position to say something like that.

For any extension that can be written with WebEx, this move is unambiguously a good thing. The developer can now just write their extension once and deploy it to multiple browsers. And for their users this is also a good thing, not just because reducing maintenance burden on the developer is more likely to lead to faster development, but also because AIUI WebEx has a much better permissions model than the old extensions.

The only real problem is the subset of extensions that cannot be rewritten with WebEx. Losing these extensions sucks, to be sure, but it's a tradeoff. You just can't claim that this move is strictly negative.

</comment></comment></comment></comment><comment><USER28> These are unsafe. Very sensible default.

</comment><comment><USER29> Fuck this.

Sorry, but that about sums it up, for me.

Firefox's extensions are a good part of what has kept the browser "the client", for me -- as in, software that works _on the client 's behalf_ as well as being the requesting functionality in the interaction.

I have no interest in moving to a client who is, more or less, working for the other end. Already had that in the past with Microsoft, and seem to be experiencing it again, more and more, with Google. No thanks.</comment>


Ask HN: Any Famous Webapp Made with Java and Google App Engine? - <AUTHOR> <comment><USER2> Snapchat [1][2].

Streak [3][4][5].

Various apps from Floreysoft [6].

Google Cloud Platform has a customer showcase at [https://cloud.google.com/customers/](https://cloud.google.com/customers/) [7] and issuing a site-limited search with the terms 'java' and 'app engine' finds good results.

[1] [https://gigaom.com/2013/05/07/snapchats-act-of-faith-in- buil...](https://gigaom.com/2013/05/07/snapchats-act-of-faith-in-building-on- google-compute-engine/) [2] [https://www.theregister.co.uk/2014/02/19/magnusson_snapchat/](https://www.theregister.co.uk/2014/02/19/magnusson_snapchat/) [3] [http://googleappengine.blogspot.com/2012/10/streak-brings- cr...](http://googleappengine.blogspot.com/2012/10/streak-brings-crm-to-inbox- with-google.html) [4] [https://cloud.google.com/customers/streak/](https://cloud.google.com/customers/streak/) [5] [https://www.streak.com/](https://www.streak.com/) [6] [https://cloud.google.com/customers/floreysoft/](https://cloud.google.com/customers/floreysoft/) [7] [https://cloud.google.com/customers/](https://cloud.google.com/customers/)

<comment><USER3> Not sure if we, Streak, are famous but yes we are on Java app engine. Happy to answer any questions....

<comment><USER2> Were you able to use popular off-the-shelf libraries in your codebase without any trouble, or did App Engine's different JVM give you issues?

How much App Engine-specific code is in your product? Would it be a very large undertaking to migrate off of App Engine?

Besides autoscaling, what is the feature of App Engine that you've found most useful?

<comment><USER3> We've used almost all libraries with no issues. The only problematic ones are those that try to implement networking code on their own. Appengine has some limitations on the type of networking calls you can do but most libraries support delegating that work. The new Java 8 runtime has A LOT of these restrictions removed.

There is very little appengine specific code in our app with the exception of our data layer. Because we use AppEngine datastore (the only option at the time), we are pretty tied to it. I feel like migrating cloud platforms is always a large undertaking and appengine would be no different. If we were starting today, we'd probably consider using Cloud SQL or Spanner, but the good thing now is that you have a choice.

Aside from the autoscaling, the idea of never thinking about machines is really nice. We never think about OS's, patches, networking, etc.

The other nice benefit is the deployment story. You can organize your application into services, deploy them individually, traffic split between version, rollback quickly, setup staging, etc. Its very well implemented and the fact that we never think about it is really nice.

</comment></comment></comment></comment><comment><USER4> I believe Google's search engine was originally written in Java if you're looking for an inspiring Java webapp. App engine obviously didn't exist yet though.</comment>


Skia: an open source 2D graphics library - <AUTHOR> https://skia.org/ <comment><USER2> Aseprite switched to Skia a year or so ago ([https://github.com/aseprite/aseprite](https://github.com/aseprite/aseprite)).

Regret it. Google doesn't care to maintain CMake support for it, so there goes pulling it in via source and building as a library dependency. [https://github.com/aseprite/aseprite/issues/1598#issuecommen...](https://github.com/aseprite/aseprite/issues/1598#issuecomment-341869884)

You may ask, "why don't you just write your own CMake module like everyone else?" I've tried. I think the build system changed a bit since, but back when I last tried, it required grabbing depot tools, checking out a source tree and a ton of other dependencies.

I am the original person that got Aseprite building on FreeBSD - but now I can't build it on any platform at all. Skia has too many points of failure in the build process. (Here's another issue where I spend hours trying to figure out what's going on [https://github.com/aseprite/aseprite/issues/1081](https://github.com/aseprite/aseprite/issues/1081))

Every other graphics library (SDL2, Allegro, SFML) can work with CMake.

Another pain point: Skia isn't on any package managers to my knowledge. Here's the debian RFP [https://bugs.debian.org/818180](https://bugs.debian.org/818180).

<comment><USER3> It's true. Google has essentially made it as painful as possible to use Skia outside of the google ecosystem. The build system is what's mostly kept me from using it in personal projects.

<comment><USER4> Xamarins wrapper for C# made it a breeze to use from C# at least - just add the package. The same is likely true for all ecosystems with reasonable package management. It's only ironic that C++ libs are hardest to use from...C++

<comment><USER5> Sadly a consequence of the C culture that was adopted in C++ regarding how libraries should be distributed, before the time of package managers.

Just checked, and Skia is not to be found anywhere across vcpkg, Conan, Hunter, Ubuntu, Debian.

So using C# sounds much better than having to understand Google specific build processes to compile it.

</comment></comment></comment></comment><comment><USER6> With all the fuss with "modern" text editors built on top of web engines, I feel the need to remind you all that one of the fastest graphical code editors that I have ever used — SublimeText — was built using Skia for the rendering. I believe many people have noticed how smooth the interface and most of the operations feel, a very good selling point if you want to build a GUI in the future.

<comment><USER4> If I understod correctly (which isn't certain) Skia is also the rendering backend for chromium. Chromium is used as the rendering bits for electron. Electron is how you make these apps on "web engines". So all those editors based on web engines likely render through Skia...

<comment><USER7> I believe Skia was originally used in Android as well.

<comment><USER8> Isn't it still the case ?

</comment></comment></comment></comment><comment><USER9> For anyone thinking of skipping looking at this one. I was not interested either until I read this part:

> It serves as the graphics engine for Google Chrome and Chrome OS, Android, > Mozilla Firefox and Firefox OS, and many other products.

<comment><USER10> Similar situation to the freetype/harfbuzz all-but-Microsoft/Apple (open source) monoculture.

I'm interested to understand more about how some categories of software libraries don't foster multiple strong open source alternatives, while others do.

<comment><USER11> I was thinking about this recently. I think this type of consolidation starts to make sense if you think of software as mathematics. A formula gets devised, iterated upon and refined, adopted, and then finally built upon.

It makes more sense to adapt a standard formula to a given use case than it is to derive a custom formula from the ground up. I suspect the reason why its not the case for software is because of copyright and IP laws.

Likewise, I expect mathematics wouldn't have advanced as much as it has had there been IP laws enacted for mathematics. People would too limited by the licensing terms for their Leibniz™ and Euler™ formulas to be able to be able to build the next step.

<comment><USER12> There are many degrees of freedom to work on when it comes to mathematics, many perspectives to look at the same problem. Some are elegant, some are ugly, others are painful to work with, and make future progress hard. Just as it is with software. We constantly need to reassess our foundations, and not get too coupled to a single perspective, lest it drive us into a corner and stifle further innovation.

</comment></comment></comment></comment><comment><USER13> Ugh... This build system is _horrible_.

bash-dependent meta-builder for ninja-build working in git checkouts. Are both actual releases and traditional build systems _that_ out of fashion?

<comment><USER13> You guys are killing me. After downloading twenty-some git repos(?) as dependencies (most of which my system already has), this (I'll try to quit complaining about this better mousetrap now):

kamloops$ gn Traceback (most recent call last): File "/home/bch/work/skia/src/vendor/depot_tools/gn.py", line 38, in <module> sys.exit(main(sys.argv)) File "/home/bch/work/skia/src/vendor/depot_tools/gn.py", line 22, in main bin_path = gclient_utils.GetBuildtoolsPlatformBinaryPath() File "/home/bch/work/skia/src/vendor/depot_tools/gclient_utils.py", line 749, in GetBuildtoolsPlatformBinaryPath raise Error('Unknown platform: ' \+ sys.platform) gclient_utils.Error: Unknown platform: netbsd8

<comment><USER14> > After downloading twenty-some git repos(?) as dependencies (most of which my > system already has)

Skia statically links in copies of these dependencies for _testing purposes only_. There is a mode ("is_official_build") that will search for your system libraies.

<comment><USER13> Ah. I used that flag on first build attempt (which failed), then did a "tools/git-sync-deps" to pacify the build system (w/o any flags), wherein the repo cloning did commence.

</comment></comment></comment></comment><comment><USER5> Fun fact, it is used in Android, but not exposed to the NDK.

So C++ applications on Android that wish to use Skia, do have to use the Java API via JNI (android.graphics.Canvas) with the respective performance impact due to marshaling, or package their own Skia version, thus increasing their APK size and having to deal with a build system that only makes sense for Google employees.

<comment><USER15> This can't be intentional, right?

<comment><USER5> Google does not seem interested in making the NDK anything more than implementing Java _native_ methods, 3D graphics, audio or porting code from other platforms.

Everything else should be done at Java level.

I understand from the point of view of security, but what is safer, provide bindings to libraries already validated and installed on the device or forcing devs to package something else?

Also even though they implement native APIs in nice C++ with RAII and stuff, it gets exposed as unsafe C APIs, so the security story isn't 100% correct.

<comment><USER16> Java APIs ARE C APIs, for obvious reasons. There doesn't have to be any difference in security.

It is quite normal and traditional though, for C/C++ developers to work with what they call statically built binaries. They're a bit bigger (may God provide mercy, and huge amounts of free diskspace to those fools that enable debug), but the odds of them working flawless on a given device are much higher.

<comment><USER5> > Java APIs ARE C APIs,

You lost me there. I wouldn't call JNI boilerplate a C API.

> It is quite normal and traditional though, for C/C++ developers to work with > what they call statically built binaries.

Polyglot dev here, including C and C++.

The way a library is linked is orthogonal to be made available on the SDK.

</comment></comment></comment></comment></comment><comment><USER17> Also there is a Rust adapted version [https://github.com/servo/skia](https://github.com/servo/skia), used on Servo

<comment><USER18> For a few things. These days most of Servo rendering is done on the GPU by WebRender. I think we only use Skia for canvas right now.

Hopefully we'll drop it altogether once Pathfinder is completed.

<comment><USER19> Will it be possible for others to use webrender/Pathfinder similar to Skia or Cairo? Or is it pretty connected to servo?

<comment><USER20> Not sure about Pathfinder but WebRender for sure, it's already usable outside of servo. People are attempting GUI toolkits and other things.

</comment></comment></comment></comment><comment><USER21> Among all the other things mentioned in the comments, AFAIK this is the rendering engine for [https://flutter.io/](https://flutter.io/) too

<comment><USER22> Which means it's also used in most Fuchsia projects.

</comment></comment><comment><USER23> I've used it to create a desktop port of [http://diep.io/](http://diep.io/). It's great (easy to use, reasonably documented), but it's a pretty big dependency (I don't remember exactly, but I think like 20 MB or so?). Since diep.io uses the canvas 2d API, porting was pretty straight forward. The performance on desktop is unsurprisingly many times faster than the browser.

<comment><USER24> What motivated your choice of Skia over WebGL?

<comment><USER23> You mean canvas 2d? If you're making a 2d game, it's good enough and looks really nice. Performance is good enough in most cases. Because of some OpenGL gotchas in some drivers (macOS mostly), some operations are a lot slower in those OSes (I have a demo that runs at 3 fps on my macbook, and >144 fps on my windows). It's easier to use canvas 2d as you don't have to deal with any of that.

</comment></comment></comment><comment><USER25> There are alternatives to Skia that are even faster like FastUIDraw.

[https://www.x.org/wiki/Events/XDC2016/Program/rogovin_fast_u...](https://www.x.org/wiki/Events/XDC2016/Program/rogovin_fast_ui_draw/) [https://github.com/intel/fastuidraw](https://github.com/intel/fastuidraw)

</comment><comment><USER24> This looks really useful! Does anyone know how this compares to something like Cairo?

<comment><USER26> Skia (via SkiaSharp) is the rendering backend for my vector graphics diagramming application ([https://vexlio.com](https://vexlio.com)). I chose it in part because it had much better performance than Cairo when I was testing both. Also the MIT license was more appealing to me than Cairo's LGPL or Mozilla Public License.

<comment><USER27> Looks like a nice project. For my own (web development) kind of projects I love to diagram infrastructure, Classes, etc.

But, I do nearly all my work on Linux -- which is a pity because I'd love to try out a tool like Vexlio.

For now I guess I'll continue to stick with yEd, because it actually works everywhere (java works).

</comment></comment></comment><comment><USER28> There is also a .NET binding for Windows and Xamarin: [https://www.nuget.org/packages/SkiaSharp/](https://www.nuget.org/packages/SkiaSharp/)

<comment><USER29> Has anyone used this? Are there any examples?

<comment><USER4> I'm converting a large desktop (CAD) app from GDI+ to SkiaSharp at the moment. Really liking the Api and the quality of the C# wrapper. Also maps very well to GDI concepts so a conversion is fairly painless.

<comment><USER29> Cool. Are you able to share any more details? I'm guessing this isn't a standard WinForms app. What advantages does moving away from GDI+ give you?

<comment><USER4> It's a winforms app, and there isn't much nonstandard about it other than that large performance sensitive drawing apps are perhaps quite nonstandard to begin with. We want to handle some large cad scenarios in it (e.g smooth pan/zoom in drawings with 500k lines), it's not the default use case, but it happens. The main advandtage over gdi+ ) is better support for retained mode drawing (record/playback style drawing), more efficient automatic culling, etc.

</comment></comment></comment></comment></comment><comment><USER30> How about font rendering? Would I use freetype/harfbuzz with this? They're such a bitch to build on Windows. Currently I'm using DirectWrite but having portability would be a nice bonus, as it seems that the API of this isn't worse than Direct2D.

<comment><USER12> The Firefox and Servo team are currently hard at work on Pathfinder, which should solve this for both fonts and SVG. It'll run on the GPU like WebRender which is super exciting: [https://github.com/pcwalton/pathfinder](https://github.com/pcwalton/pathfinder) \- alas it's still a WIP at the moment.

<comment><USER30> That's very interesting, didn't know about this. It seems like it'll take substantial time for this to stabilize though. But still, something to revisit next time I'm evaluating options.

</comment></comment></comment><comment><USER31> C++ 11, nice. Does anyone use this? And if you do how does it compare to alternatives

<comment><USER32> Skia is _probably_ the most popular 2D graphics library at the moment. I don't really know why this got on HN now. It's already extremely popular.

I use it in a little WIP game engine. It's very pleasant, excellent little library. There's an online jsfiddle-esque demo here [https://fiddle.skia.org/](https://fiddle.skia.org/) if you want to try it out.

<comment><USER33> I have a little 2d game that I'd like to port over to Skia. What did you end up using to handle input and audio and other gamey things?

<comment><USER34> I would think SDL would be an easy cross-platform choice there.

</comment></comment></comment></comment><comment><USER35> Somehow the text it renders looks worse than all the other common graphics libraries on Linux - which all use FreeType and Harfbuzz. I am not sure what QtWebEngine does differently, because it uses Blink and the text looks fine.

<comment><USER14> "looks worse" is a pretty nebulous statement. Can you go into detail? Do you think text in Chrome looks bad?

<comment><USER35> It seems like lack if subpixel rendering plus the spacing between letters is somehow screwed. Really hard to put a finger on it, it just looks wrong to me. I do think that text in Chrome looks bad on Linux. I could compare magnified screenshots now but I'm too lazy, sorry. Don't care much about Chrome anyway.

</comment></comment></comment><comment><USER36> How good/hard to build an UI library (like bootstrap) on it? I'm already on F#/C# so I don't will have issues with building it (I imagine!)

</comment><comment><USER37> So back in the early 90s Apple had a graphics library called "skia" \- are these related?

<comment><USER38> See this post from earlier: [https://news.ycombinator.com/item?id=16148185](https://news.ycombinator.com/item?id=16148185)

</comment></comment><comment><USER39> The roadmap needs to be updated. It's for 2016-2017.

<comment><USER40> It has been updated with the doc of high level themes we are chasing for 2018.

</comment></comment><comment><USER41> just a heads up, skia doesn't work on big endian.</comment>


VerifyValid - <AUTHOR> http://www.verifyvalid.com

<comment><AUTHOR> I recently signed up for this after hearing some friends try it out and love it. I guess the nicest part is that as an employer I can pay my employees for .50 a check and I don't have to ask for any of their bank account info. They can either print out the check and bring it into their local bank or they can have the funds electronically transferred into their account.</comment>


16 Free Data Science Books - <AUTHOR> http://www.wzchen.com/data-science-books

<comment><USER2> Thanks for posting. Some good books here including some very new ones.

Note that some of these are pay-what-you-want.</comment>


Ask HN: Do you think new Chrome colors sucks on Mac Dark-Mode? - <AUTHOR> After todays update Version 73.0.3683.86 Chrome browser colors changed like it's in incognito mode. Any options to use a theme that feels like previous versions? <comment><USER2> I agree. The differentiation between open and hidden tab is appalling. I can't tell which tab I'm on!</comment>


PGP-email-based messaging on kickstarter using your own infrastracture - <AUTHOR> https://www.kickstarter.com/projects/databay/ezing-secure-messaging-on-your-own-infrastracture <comment><AUTHOR> eZing is a messaging app that closes follows concepts of well-known messengers to achieve the same comfortable reading and writing of messages. The transport to be used is E-Mails, using standard IMAP-servers. Messages are locally encrypted and forwarded. Decryption takes place at the recipients device. Necessary keys are generated within the app so the private key never leaves the device while the public key is transmitted to the chat partners.</comment>


Pogoapp - A Heroku alternative - <AUTHOR> http://www.pogoapp.com/blog/posts/why-pogoapp <comment><USER2> There's a lot of good content but it didn't really answer the question to me. What is it that you provide that is better/different than Heroku ?</comment>