Chromium project finds that 70% of security defects are memory safety problems - <AUTHOR> https://www.chromium.org/Home/chromium-security/memory-safety <comment><USER3> Reminded me of an article I read last year ([https://www.zdnet.com/article/microsoft-70-percent-of-all- se...](https://www.zdnet.com/article/microsoft-70-percent-of-all-security- bugs-are-memory-safety-issues/))

Interestingly enough Microsoft arrived at the same number. I think it really stresses how hard it is to reason about memory manually. I'm still surprised how much stuff is being written in non-safe languages even if people could get away with a managed language.

One thing that I just recently noticed when scrolling through some github repos is how much new software in the linux ecosystem is still written in C despite it being probably avoidable, like flatpak.

<comment><USER4> You know, I totally buy that 70% of the vulnerabilities in complex C++ code relate to memory safety, especially in something like Chromium, which is incredibly complex and includes a lot of third-party code that wasn't always designed at first to be robust to untrusted input, and also fast-moving with a ton of code added or churning every week. But I'm not sure I buy that memory- safe languages will consequently be as beneficial for safety (especially in other kinds of software) as that fact would suggest.

For one, not all software is like Chromium. If you look at something like OpenSSH, the vast majority of their security holes have nothing to do with memory safety and are just logic bugs (often caused by features that somebody added that aren't core to the basic SSH experience, e.g. code that interfaces with X11 or something) or protocol weaknesses. ([http://cve.mitre.org/cgi- bin/cvekey.cgi?keyword=openssh](http://cve.mitre.org/cgi- bin/cvekey.cgi?keyword=openssh))

The other effect is that in practice, memory-safe languages can come with security baggage of their own. If you look at the zillions of security holes in something like Rails or Wordpress or Django, a fair portion of them relate to an attacker's ability to invoke sophisticated-but-unintended behaviors that are more likely to be hiding in these managed languages (and their support libraries) than in something like C++. E.g. CVE-2013-0156 or CVE-2013-0277 or apparently any current Python or Ruby program that, even today, calls yaml.load on untrusted input. That kind of "security hole from unwanted latent functionality" is less likely to exist in C++. (I realize this is a contrarian view not shared by the vast majority of PL/security experts, but the ones I hang out with seem to interpret "memory-safe language" to mean "expert-written Haskell or, if you want to slum it, Rust" and are not thinking "random Ruby/Python/JavaScript/enterprise Java".)

Not to mention the countless high-profile security holes that have nothing to do with memory safety, e.g. Shellshock, "goto fail", Lucky Thirteen, BEAST, CRIME, POODLE, FREAK, Logjam, etc. Or bugs that are very relevant to Chromium but aren't really Chromium's fault and probably don't appear on their own list, e.g. Meltdown/Spectre etc.

<comment><USER5> Yes, it is important to note that switching to a memory safe language does not magically solve all your bugs. My own personal anecdote: when I found multiple bypasses in the sandboxing mechanism on macOS, it was not because the relevant code was written in C++, but because the dynamic linker is a really complex system; the things I found clearly flew under the engineer's radar when they were designing it and they didn't think beforehand about how those components interacted together. Still, being able to reduce the attack surface area to solely be logic errors is much better than having to deal with memory safety thrown in as well. (Similarly, languages with stricter type systems magically get rid of issues like "you gave me a string and I wanted an int", but the problems of "you forgot to check the password in this one case" still remain.)

<comment><USER6> I think reduction in the number of errors is a worthwhile goal. Switching from C++ to a language without memory safety issues while being just as fast would reduce the number of things the developer and code reviewer have to worry about. They could spend more time searching for bugs in the logic, potentially eliminating further issues.

In practice what I've found is that people prefer to deal in absolutes. A large reduction in a category of bugs isn't enough, it needs to be eliminated altogether, they say. If it's still possible in a contrived example, what's the point of investing in switching?

<comment><USER7> Also memory-safe languages with GC allow for simpler API and design. That in turn gives more time to think on errors in logic.

<comment><USER8> They're simpler only if you could care less about performance. C and C++ are primarily used in situations where you _do_ care about performance.

<comment><USER9> Memory safety and performance are not a contradiction, they are widely independant. Yes, some strategies like GC induce an overhead. But in the age of multiprocessor machines, this overhead gets very much reduced by parallel collection. And practice has shown, in programs with a lot of dynamic memory allocation, garbage collected languages often perform even better. There are different approaches, like memory safety by the compiler as Rust does it. And with "performance" in mind, you shouldn't forget, that most large C/C++ programs tend to use libraries to provide some amount of safety, but those libraries are of course adding some overhead too. Finally, the less time you spend on questions of memory management, the more time you have to write an actually fast program.

<comment><USER10> Sorry, this is hand wavy nonsense. One counter example, we switched from Cassandra (JVM) to Scylla (C++). It was a win in terms of both query latency and infrastructure costs as we required fewer machines to handle the same load.

As for having more time to write a fast program... that's funny. If you want a fast program on something JVM based you're pretty much going to be spending the majority of your time writing things in a way where the GC plays as little role as possible.

<comment><USER11> There are notable examples where garbage collection has both better throughput and latency than manual memory collection: persistent data structures come to mind, because in the absence of garbage collection, you have giant awful cascades of reference count manipulation any time a structure would get freed.

You'll never actually see anyone tout the benefits of using GC for this, though, because the performance characteristics of persistent data structures are so horrendous compared to mutable ones, no one actually uses them in C++.

<comment><USER12> Well yes, if you are comparing GC to refcounting then yes, gc wins.

<comment><USER9> If your problem demands many heap allocations, GC wins also vs. manual memory management. Heap allocation in a generational GC is as fast as stack allocation, you don't get fragmented heaps.

<comment><USER13> It is nowhere near stack allocation, please stop this nonsense. There was a paper claiming that, but the requirement was to set heap size 7x bigger than needed.

Stack is also very hot in cache. Memory that GC is handing allocations from is not.

I recently ported some of Cassandra code from Java to stack-only Rust and I got ~25x performance improvement, most from avoiding heap allocations and GC.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> Matches closely the number of memory related security issues Firefox had in their CSS parser before the rewrite in Rust [1]

> Over the course of its lifetime, there have been 69 security bugs in > Firefox's style component. If we'd had a time machine and could have written > this component in Rust from the start, 51 (73.9%) of these bugs would not > have been possible

Also interesting on the topic of memory safety

[https://hacks.mozilla.org/2019/01/fearless-security- memory-s...](https://hacks.mozilla.org/2019/01/fearless-security-memory- safety/)

[1] [https://hacks.mozilla.org/2019/02/rewriting-a-browser- compon...](https://hacks.mozilla.org/2019/02/rewriting-a-browser-component-in- rust/)

<comment><USER15> In this context I believe that the rewrite benefitted Firefox more than Rust

At Firefox they already knew the problem they were trying to solve using Rust, they already wrote that software, already discovered many of the overlooked complications involved in writing a modern browser, so, in conclusion, even a rewrite in plain C would have solved many of the bugs.

The simple operation of rewriting the same software with previous knowledge of how it works usually leads to simpler code (at the cost of developers time)

Firefox is also the entity that invented Rust, so it's in their best interest to publicize it as "the final weapon" against bug, but "if we had used Rust from the beginning these bugs would not have been possible" is just wishful thinking.

Rust itself could not be there without the browser war and the pressure that contemporary web puts on software that runs it

And it'been C/C++ that has driven us there

<comment><USER16> > At Firefox they already knew the problem they were trying to solve using > Rust, they already wrote that software, already discovered many of the > overlooked complications involved in writing a modern browser, so, in > conclusion, even a rewrite in plain C would have solved many of the bugs.

The Rust re-write was the third attempt; the first two were in C++ and failed.

<comment><USER17> > The Rust re-write was the third attempt; the first two were in C++ and > failed.

AFAIK most of Firefox is still written in C++, JavaScript and C [1]

The JavaScript interpreter, which is particularly important to users perceived speed, is entirely written in C++

[1] [https://4e6.github.io/firefox-lang-stats/](https://4e6.github.io/firefox- lang-stats/)

<comment><USER16> I am talking specifically about the style engine, which is the topic of this sub-thread.

<comment><USER17> the posts linked in the beginning of the thread talk about 51 memory safety bugs over the course of many years, from 2002 to 2018.

Stylo has been the default CSS parser starting from the beginning of 2018.

It's good that Rust could have avoided them, but is it a fair comparison?

I think that when at Firefox they started to think about a new architecture to better enable parallelism they began improving considerably, Rust is only a part of that.

<comment><USER16> If you watch the talk I linked below, you'll see more details. They were, and tried with C++, and failed. Rust was key to the success.

<comment><USER17> > If you watch the talk I linked below

I've watched it several times over the past 2 years

And I've read the posts about writing and HTML engine in Rust when they first came out in 2014

[https://limpet.net/mbrubeck/2014/08/08/toy-layout- engine-1.h...](https://limpet.net/mbrubeck/2014/08/08/toy-layout- engine-1.html)

and ported them to Elixir and still use them in my programming lessons

> Rust was key to the success.

For them

It's important to specify that Rust, built by Firefox, lead to a Firefox success.

Just like Dart, created by Google, is the language of choice for Flutter, also created by Google.

I know you've been working at Mozilla to work on Rust and I believe Rust is very good, but I also think Mozilla could have used other languages, there were a few that could led them to success, but they understood this are times where the "means of production" aren't the machines but engineers tools, and creating a programming language is the best way to control part of that world.

<comment><USER18> > there were a few that could led them to success

which ones? If they tried 2 or 3 times with C++ and the Rust one succeeded, what other information would you need to have to convince you that Rust was the differentiating factor? It seems like you just don't want to admit that Rust was the key to their success in the project, even when you have someone who was there telling you that it was.

We aren't going to get research study levels of replication on large projects like this, so I don't know what standard you're looking for here.

<comment><USER17> > what other information would you need to have to convince you that Rust was > the differentiating factor?

The fact that Chrome is doing just fine without it?

> t seems like you just don't want to admit that Rust was the key to their > success in the projec

It seems like you are trying a classic ad personam, I agree that Rust was one of the changing factor, I also wrote it, but just for Firefox, not in general.

Which is the original point of this sub-thread.

> We aren't going to get research study levels of replication on large > projects like this

I don't think Firefox is the only large project out there. nor the largest.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> Not to be snarky, but my initial response to this was "Large project that uses language known for memory safety issues discovers that most of their security bugs stem from memory safety issues". In a more serious note, I hope this motivates the Chromium team to invest more in Rust. While the other options sound like good "in the meantime" solutions, switching to a language that, at its core, is designed to prevent these sorts of issues would be a huge benefit to society as a whole considering that Chromium is the most popular browser engine in the world.

<comment><USER20> Has there been any work on how to leverage Rust's strengths for a GC language implementation? For example, Rust assumes unique ownership for mutable values; how do you express that the value is _also_ reachable by the GC?

<comment><USER21> If by GC you're referring to its reference counting, either by Rc or Arc, there is no GC reachability beyond the reference counting. The responsibility for counting the contained object and dropping (cleanup before dealloc) is up to the type, either Rc or Arc (a stands for atomic, not automatic, as both are "automatic" in the sense that you never need to manually increment or decrement a reference). the owned, mutable object would contain the type information necessary to generate the right Rc calls ay the right time, but a distinct type is necessary to encapsulate the behavior.

There are also escape hatches, between unsafe leaking and the RefCell type, to provide "interior mutability", i.e. mutable aliasing via an without the memory safety issues which come with this. Note I have only had to use the unsafe bits when passing memory up to a c stack.

I don't believe there is a tracing GC implementation in the standard library, although I've heard plenty of discussion and you can find some simple implementations on crates.io. However, I would assume there would need to be some language changes to properly account for assumptions on how the Drop (free) functionality fires, not to mention significant backend work for tracing to work.

<comment><USER20> Let's put it this way: if you have a &mut to a heap allocated object (Box, whatever), you pretend it's unique, BUT its contents are also reachable by the global allocator, say, malloc. So it's not _really_ a unique reference.

If you allocate something new, Rust pretends it is independent, assuming that malloc won't muck with the other objects it knows about.

What if we relax that assumption? Allocations may perturb other allocations - that's how moving GC heaps work! Can that be modeled usefully in Rust?

<comment><USER22> The allocator API hands out `*mut u8` so... not really. If you changed the allocator API and everything that uses it and makes assumptions about how it works then sure, you could make it hand out a pointer to a pointer so you could come in later and update the inner pointer after you've done a GC pass. You couldn't do something like handing out a normal `Box` and keeping track of where it lives so you can patch it later though. Rust doesn't have move or copy constructors so as it gets passed around it'll just be `memcpy`'d and you'll lose track of it.

<comment><USER21> I can't imagine this utility will be replaced, either, as it's the essence of why rust works so well with the c abi. Augmented, hopefully?

</comment></comment></comment></comment></comment></comment><comment><USER7> Chromium initial design was a very simple main process and few untrusted relatively fat processes for web pages each holding set of tabs. That could have worked with C++. However the need for site isolation, performance considerations and hardware vulnerabilities later put an end to it.

For example, initially Chromium had no support from isolating iframes from the main document. Everything was in Blink. But isolating iframes required extremely complex code in the main process to properly forward all DOM events between process. Then that code had to be made asynchronous so web pages could not block main UI.

Then OS interfaces to GPU and it's architecture rules out having GPU accelerated graphics and decoders in a per-site process. So that must be put in single a GPU process. Surely it is heavy sandboxed. But, as with the recent Networking process, it is still a shared component with very complex C++ code and fat platform libraries in C/Objective-C for interfacing with GPU.

So at the end the original idea of writing everything in C++ and using sandboxed processes to make memory-safety bugs harmless just does not work. One needs a memory-safe language.

The article mentioned various library-based approaches. But those, as having such foreign C++ usage, are becoming essentially domain-specific-languages that one needs to learn. That leads to boilerplating as the host language is not well-suited for that.

<comment><USER23> The idea of writing a constantly changing application and feeding it only untrusted content over the network while exposing more and more of the OS to that application does not work.

It doesn't work in Firefox with its small block of Rust code, doesn't work in Chrome nor Safari. Because it's the dumbest fucking idea ever.

But sure, at this point we don't have anything to lose by rewriting it in Rust/Swift/whatever.

<comment><USER24> And that alternative is what? you run no software on your computer? Native apps have way more access to your system then a webpage so I'm glad there are 100s or 1000s of web apps I can run rather then being forced to install native apps to get the same functionality.

<comment><USER23> AppStore / platform package manager.

Web apps are anyway nonsense both from a privacy (zero privacy) and security PoV (single high-value target, foreign jurisdiction, crappy browsers, byzantine tools, hopelessly overcomplicated architectures etc).

</comment></comment></comment></comment><comment><USER25> Every time someone tells me something along the lines of "you don't need Rust, just be a better programmer", I lookup CVEs for the projects they've worked on and sure enough there's memory safety issues.

Just because you're a good driver doesn't mean you should forgo a seat belt!

</comment><comment><USER26> What if with "dangerous languages" like C you could turn off pointers, or make only functional subroutines?

For instance, perl has this construct, to make your programs better:

a program foo.pl:

      $c = 1;

runs fine. Now turn on strict:

      use strict;
      $c = 1;

and

      $ perl ./foo.pl
      Global symbol "$c" requires explicit package name at ./foo.pl line 2.
      Execution of ./foo.pl aborted due to compilation errors.

you must declare $c:

      my $c = 1;

the idea would be... write your program and you can opt-in to various constructs.

NOTE: my first example didnt' work.

      use strict;
      $a = 1;

won't throw an error. Turns out the variables "$a" and "$b" are exempt from "use strict;" ha. wow.

<comment><USER27> > What if with "dangerous languages" like C you could turn off pointers

You can't. C is a fundamentally defective language because it doesn't have the "memory slice"/"array" construct.

Of course you can work around it, but if you eliminate pointers then you can't do much with C. Heck you can't even print "Hello World" with it (well, ok, _technically_ you can but not in the usual way).

<comment><USER28> You could use MISRA guidelines for C.

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

<comment><USER27> They seems to be behind a paywall so I can't comment much on that

But still, I believe you can't do much with C if you "shut down" pointers completely. Because strings are pointers in the end.

<comment><USER26> maybe the parent changed the link? the link appears to be wikipedia :)

<comment><USER27> Yes, the wiki has some recommendations (and I remember the C++ JSF standard) but if you follow the link to the actual document it seems to be behind a paywall

</comment></comment></comment></comment></comment></comment><comment><USER29> It's funny how prescient "Eternal War in Memory" feels: [https://people.eecs.berkeley.edu/~dawnsong/papers/Oakland13-...](https://people.eecs.berkeley.edu/~dawnsong/papers/Oakland13-SoK- CR.pdf)

Of course, it's slightly dated, but a lot of the points feel truly 'eternal'. All of the SoK papers from Oakland are good, but this one is great.

</comment><comment><USER30> D has been steadily focusing on solving memory safety problems. It now has a prototype ownership/borrowing system incorporated into the language.

<comment><USER31> C++ also has ownership/borrowing system (i.e. smart pointers) now though too, right? I'm a fan of D but isn't the problem about 1) defaults (or even required behavior) and 2) existence of libraries following good paradigms more so than just support for static memory management?

</comment></comment><comment><USER32> To me it seems likely the percentage is even higher in other programs - a web browser has a pretty complicated privacy/isolation model compared with most other programs so that increases the 23.9% "Other" here. Normal "logic" bugs would be more likely to have security implications.

</comment><comment><USER32> What is the "//base" mentioned here? It's kinda hard to google...

"//base is already getting into shape for spatial memory safety"

<comment><USER33> Chromium uses a build tool called bazel. //base is a bazel path, where // is the root of a workspace (which is usually a version controlled repository). Thus it is referring to [https://chromium.googlesource.com/chromium/src/+/refs/heads/...](https://chromium.googlesource.com/chromium/src/+/refs/heads/master/base/)

<comment><USER34> Chromium actually uses GN, not bazel.

[https://docs.google.com/presentation/d/15Zwb53JcncHfEwHpnG_P...](https://docs.google.com/presentation/d/15Zwb53JcncHfEwHpnG_PoIbbzQ3GQi_cpujYwbpcbZo/edit?usp=drivesdk)

<comment><USER33> Oh interesting, TIL. The syntax looked similar and it's a Google project, so I assumed gn was just some BUILD file generator on top.

</comment></comment></comment></comment><comment><USER35> Question to C++ pros: are there not idioms that can be used and ruthlessly enforced to avoid such problems entirely?

Is this the result of 'open use of pointers' that inevitably causes problems here and there?

Or is this problem due to the fact is just impossible to use even hard idioms to avoid such problems? (Or hard to enforce them?)

On some small-to-midsized projects I've seen narrow and rigorously enforced rules around pointers that seemed to work well. So what's up?

<comment><USER36> > Question to C++ pros: are there not idioms that can be used and ruthlessly > enforced to avoid such problems entirely?

"In theory, yes - in practice, no."

You can use static analysis, vendor-specific annotations, runtime tools like clang's various sanitizers or valgrind, thorough code audits, use smart pointers instead of raw, have clear ownership semantics, follow MIRSA C guidelines, NASA guidelines, etc etc etc... but eventually your project will grow to the point where you'll botch an edge case, and the number of botched edge cases all your coworkers manage to add up will turn into a statistic.

Even if me and all my coworkers were all godlings incapable of making mistakes, we'd _still_ end up debugging plenty of memory safety issues - <USER2> second/third party code, sometimes without source code, and writing bug reports / workarounds as a result.

<comment><USER37> Also, you can assume Google to be using all of the tools at their disposal. The stakes are high for them and they've been dealing with security issues for a long time. It helps, but it's obviously not enough. This seems to be true for most widely used C/C++ code bases; including those with decades of scrutiny. At best some projects have a good track record when it comes to dealing with these issues in a diligent way. Chromium seems to be one of those projects.

</comment></comment></comment><comment><USER38> The biggest problem is we are using systems programming languages to develop applications. We need to use application programming languages to develop applications. C and C++ are systems programming languages, to be used for developing operating systems, device drivers and other low level stuff.

The problem is, we haven't had a real application programming language since the demise of Pascal / Delphi. And Java / C# have been able to pick-up some of the slack, but not nearly enough as there are still tons of software being written in unsafe languages.

<comment><USER39> The browsers have become systems themselves. Browsers need GPU, IO, media, etc. subsystems.

</comment></comment><comment><USER40> Does Chromium test with valgrind, various sanitizers and static checkers? Since when? This is 5 years of bugs. How many would be caught by modern tools? Could those tools be improved to catch those bugs? I'm surprised this isn't mentioned in what they're trying, but maybe they're at the practical limit.

</comment><comment><USER41> There is an proposal for a GC-library: [https://docs.google.com/document/d/1Cv2IcsiokkGc2K_5FBTDKekN...](https://docs.google.com/document/d/1Cv2IcsiokkGc2K_5FBTDKekNzTn3iTEUyi9fDOud9wU/edit#heading=h.i5ibcxqde9h2)

That is just like programming in D with extra steps.

</comment><comment><USER42> Can't we just enable bounds checking and gc and live with slowness. Shouldn't that be a choice, a compiler flag ?

Every time there is a security issue, someone can see your naked pictures.

<comment><USER43> Do you know of any fully-featured Web browsers that have been implemented with "safe" language, such as C# or Java? Would be a really interesting project to see!

<comment><USER9> Very early on, Sun had a web browser implemented in Java. Unfortunately, this was dropped before Java got Hotspot and with that the decisive speed up. (They also had a web server implemented in Java, which sounds like an excellent idea too)

</comment></comment></comment><comment><USER44> Switching to a safe language is, obviously, not an option.

However, it is possible, especially with resources of Google and other C++ shops to develop an advanced lint, which could be just a ripoff of compile time borrow checking from Rust (taking into account complexity of c++ memory model).

Flagging simple things like use after free would already be a big deal.

Nowadays it probably should be a plugin for clang or something similar instead of lint.

<comment><USER45> We should have more courage and attempt big things.

Like writing the program we already wrote....again.

We take this option off the table. Cannot rewrite. Definitely not in a safe language! Surely we have ceased to dream?

<comment><USER46> > We should have more courage and attempt big things.

> Like writing the program we already wrote....again.

That's not named courage, that's named stupidity. Specially when the program you talk about is several millions lines of code and the results of years en engineering of entire teams.

> We take this option off the table. Cannot rewrite. Definitely not in a safe > language! Surely we have ceased to dream?

There is people that dreams and there is the one that code.

Evolution are (almost) always preferrable to Revolution.

In this case, Evolution can mean:

\- Rewrite progressively the security sensible part in Rust mixed with the legacy (aka the Mozilla way)

\- Develop the tooling to make C++ _safer_ / or even better _safe_. That has already been done for a subset in the aeronautic industry

\- Work with the comitte to make C++ itself _safer_ , which Google is already doing.

</comment></comment></comment><comment><USER47> This is why C++ should be put to pasture and replaced by properly managed languages. It's time.

<comment><USER48> Sure, all we need to do is rewrite billions of lines of code in some of the most popular software on the planet.

And then replace it with... a language that is exactly as performant, is available on every known platform and has replacements for all the existing libraries (including all the ones written in C!).

<comment><USER45> I'll pay 15% performance for safety[1]. It's just that we have the wrong priorities, and you betrayed that default attitude again with the requirement that everything be "exactly as fast" as before. I still do not understand this focus on performance above everything else. It is absolutely unquestioned. We can't even talk about it. And it's constantly an argument that is undone by time. Machines are _still_ getting faster. In the heydays of Moore's law, when performance was doubling literally every 12 months, if we were arguing about 15% of CPU performance, that's 2-- _TWO_ \--months of performance. Now, it might be 1-2 years to get 15% single-core performance. But almost no one is limited by single-core performance anymore.

We got stuck with the worst of all possible worlds--long compile times, long debugging times, long bugtails, horrible security, rickety and hard to refactor, ugly code. Oh, but it's fast. Fast and broken. Wonderful. Wonderful. Grandma is so much happier with her 15% faster something or other that spends 95% of its time idle waiting for user input. Oh, but that 15% of 5%...man that 0.8% is keeping me up at night! We forgot to zoom out to see that people need and depend on reliable software and utterly failed at that. It's as if we removed seatbelts, airbags, windshields, and mounted knives in random places in cars because we thought everyone wanted to go fast. No other disciple in all of engineering is so wrong with their priorities. God, society should be hopping mad at us for being so hostile to them.

[1] Obviously, performance differences between "fast" languages and "safe" languages are so variable that we might as well be talking about comparing Fords to Ferraris--without specifying whether we are talking racecars (Ford makes some fast ones)! But 15% is a number we see often in the JVM world. After years in this field, I think the fastest safe language is not more than 15% off the fastest unsafe language, across the wide spectrum. Sometimes, you can get absolutely the same performance for the innermost hot loop out of a safe language vs unsafe language in some situations, you can get 2x slower. But people get terrified they'll never figure out why, that there is some kind of hidden, unknowable "language cost" they'll never get offer. Which is of course hogwash. Every program can be tuned and improved. Offer tools to find and remove bottlenecks and stop being sloppy with allocating memory.

<comment><USER48> I think you missed the main point, which was the "billions of lines of code" part.

It's not a question of simply retiring C++.. it has to be replaced with something. Even safe languages frequently rely on libraries implemented in C or C++ as part of their runtime.

Even if you were willing to pay a 100% performance penalty (and there are plenty of places where I'd be fine with that), it's still a massive undertaking.

<comment><USER45> And usage of C++ is still growing exponentially, so the number of lines of code is growing faster than our ability to rewrite/replace them. I know, it's a losing battle. We'll never do it. We are stuck with C++ until the end of time because of the sunk cost fallacy. If everyone who currently works on C++ instead switching to rewriting instead of adding, we'd be able to replace everything in 5 years.

If C++ is only kept around because of a few libraries needed to implement the runtime of safe languages, then I would consider that some kind of victory.

</comment></comment></comment></comment></comment><comment><USER49> Hopefully Microsoft starts porting some of the code over to Rust soon. That should help.

</comment><comment><USER50> And that's new code, not legacy. Embarrassing. I would have expected better from something written in this century. C++ does sort of have a safe subset. If you're passing raw pointers all over the place today, you're doing it wrong.

<comment><USER5> Anecdote: I had to track down a bug in one of my programs once because a vexing parse caused the compiler to emit a call to the wrong specialization of a constructor, leading to certain fields remaining uninitialized. This was in a small, greenfield project that I wrote using the full force of modern C++17, using the safest, most idiomatic constructs I could find. The fact that no compiler or sanitizers made so much as a peep makes me feel that memory unsafety is embedded so deep into the core of the language that extracting out "the good parts" is probably of similar complexity to just detecting all the problems ahead of time. (That is: impossible.)

<comment><USER51> Not refuting that c++ can be made safe easily, but this particular error should be blocked by clang-tidy. Assuming you use it and configured it properly, picking the right analyzers is an equally witchcraft as writing memory safe code in the first place. [https://clang.llvm.org/extra/clang- tidy/checks/cppcoreguidel...](https://clang.llvm.org/extra/clang- tidy/checks/cppcoreguidelines-pro-type-member-init.html)

<comment><USER5> I'm will have to admit that I haven't tried clang-tidy on it (I will once I get back to a computer), but I am unsure that it would be able to diagnose the issue. I linked to the code in another comment ([https://news.ycombinator.com/item?id=23289614](https://news.ycombinator.com/item?id=23289614)) but the issue was that I have multiple template specializations of a class, each of which has a constructor that fully initializes that specific specialization's members. The specific problem was that I used parentheses in a context where I was letting the language deduce which constructor it needed to call based on template arguments but (as far as I understand) this made it deduce the type incorrectly and always call the unspecialized version that had none of the members, but the type system let me coerce that into one of the specialized ones (also not sure how, but presumably some magic along the lines of "they were the same class") and the non-shared members at that point were not initialized. Oh, and this was in a constexpr context which essentially generated a switch statement on an instruction opcode at compile time. So I'm not confident that an automated tool could pick this up, although if when I try it it finds the issue I will be _extremely_ impressed.

</comment></comment></comment></comment><comment><USER52> Would immutable variables (or as they call them in functional langs, just "values") ameliorate this problem?

<comment><USER53> That's just begging for completion of the circle with "or as they call them in maths, variables" :)

</comment></comment><comment><USER54> Why haven't they just started to rewrite it in rust yet?

<comment><USER55> Indeed, however Google's usage of C and C++ sometimes is quite interesting.

For example, Android source code is also not a very good example of modern usage of C++ security features.

After 10 years, the NDK keeps having a C only API space, with all the memory corruption issues that it entails, even though the actual implementations are in C++ or Java (via JNI).

So their workaround, starting with Android 11, is requiring hardware memory tagging in all ARM devices, while having kernel fuzzing support for other platforms lacking such hardware capabilities.

<comment><USER56> The C only interface is an absolute necessity. Only C++ can properly interface with C++ while C can interface with the rest of the world. And system libraries are there for whole world to use. if the system interfaces were converted to C++, all applications need to be written in C++ as well. You can wrap some features in other languages, but definitely not all of them.

<comment><USER55> Right, but in 10 years they surely would have the time to offer a type safe C++ API in addition, just like in other platforms.

Instead, they have been postponing it since NDK was introduced in Android 2.0 until after the introduction of native packages, which will only arrive with Android 11.

There are open tickets related to it.

</comment></comment></comment></comment><comment><USER57> They should contribute and use [https://herbsutter.com/2018/09/20/lifetime- profile-v1-0-post...](https://herbsutter.com/2018/09/20/lifetime- profile-v1-0-posted/)

</comment><comment><USER58> That's why in the early 90ies people stepped back and created Java. Lisp was in its AI winter, but memory safety was still top priority for the industry.

</comment><comment><USER59> I gave up C++ 10 years ago and switched to more modern languages. I figured the language would die off, so am a bit shocked its still so prevalent. I really dont think there is any reason to use C or C++ any more, except perhaps some low level layer that interacts with the hardware.

<comment><USER60> Even if C++ is used less than before it won't die off and C++ experts can demand more money especially because there are fewer of them as most programmers move to more modern languages.

<comment><USER61> COBOL

<comment><USER60> Yep, the same case. Only I read that those old COBOL programs are a huge mess of spaghetti code, so you are well paid, but you have to put up with ugly, hard to maintain code.

I'd rather work on something nicer for less money.

</comment></comment></comment></comment><comment><USER62> Not at all surprising, but it's not like Rust (and others like it) are going to be a silver bullet against this. Any complex enough program running on a stored-program computer (where code is data and data is code) will be vulnerable.

You can reduce the attack surface, but never eliminate it.

<comment><USER63> Yes. But at least 70% bugs will be gone

</comment></comment><comment><USER64> C++ can be used safely without memory safety issues. But it requires expertise with the language, which is a very steep barrier for most programmers, even ones on the Chrome team to pass successfully. In a project as large as Chrome the vast majority of programmers will not have the necessary expertise. And sadly, in this case, what you don't know will hurt you. Is that a reason for not using C++: maybe. But you would be hard pressed to find a more performant language that is mature and stable.

<comment><USER6> We need to let go of this idea that there are godlike engineers out there who can write perfect code. Everyone makes mistakes. As long as the compiler allows it, such mistakes will continue to happen.

> in a project as large as Chrome the vast majority of programmers will not > have the necessary expertise.

Then how do we staff such projects? Hire only people with a track record of never writing such bugs? It's not possible.</comment></comment>


XRapid: Diagnosing Malaria Using an iPhone - <AUTHOR> https://medium.com/@davmendels/xrapid-is-live-79ba66d49bd9#.78irszkyr <comment><AUTHOR> And the connected product site[1]. [1]:[http://xrapid.com/](http://xrapid.com/)

</comment><comment><USER2> As someone who knows very little about medicine, this is awesome. Seems like the entire concept could be extrapolated to other types of diseases that can be diagnosed using image processing.

<comment><AUTHOR> Its funny how the iPhone often gets used for its sensors/functionalities for far flung use cases. I wonder if an android phone would be capable of this.

<comment><USER3> The test would need to be validated against a single SKU of phone, guaranteed to have the same camera module across all units. That's a big advantage of using the iPhone for hardware applications - the number of configs is very small.</comment></comment></comment>


Viewstamped Replication: The Less-Famous Consensus Protocol - <AUTHOR> http://brooker.co.za/blog/2014/05/19/vr.html?check=1

<comment><USER2> Viewstamp replication is vulnerable to hostile actors. It is intended primarily for _trusted_ distributed systems, (like file servers) where unlikely out-of-sync errors need to be resolved.

In something like bitcoin, there is nothing stopping an actor from lighting up 10000 Amazon spot instances, so you are limited to proof of work or proof of stake.

<comment><USER3> Everything you said is true of Paxos and Raft which are the "better known" replication services.</comment></comment>


Employees need masks even for at-home Zoom calls, Wisconsin agency says - sahin-boydas https://www.kansascity.com/news/nation-world/national/article244861827.html <comment><AUTHOR> I know it's fun to just bask in the outrage and not read the article, but they were only talking about employee Zoom calls with non-employees, not employees with each other like the headline seems constructed to have you believe.

"By wearing a mask while video conferencing with the general public, we visually remind folks that masking is an important part of navigating the business of natural resources during this tumultuous time," Sheridan said.

</comment><comment><USER2> Imagine! Leaders setting a positive example in order to encourage healthy behavior.

<comment><USER3> Imagine people actually understanding the pros and cons of a particular issue and then using reason and common sense to do the right thing instead of blindly imitating "leaders".

<comment><USER4> Imagine thinking your fellow citizens are that smart.

<comment><USER3> Then why do we bother with Democracy? (Imagine thinking philosopher-princes are a viable alternative.)

<comment><USER4> Because it's the least worst option.

</comment></comment></comment></comment></comment><comment><USER5> a complete joke...worse than security theater...at least you only have to deal with that at the airport.</comment>


Uber lauches UberFIRST-AID - <AUTHOR> https://vimeo.com/125247473

<comment><AUTHOR> Question is: what happens when an Uber driver gets beaten in Paris, and another Uber driver comes to rescue him being called by UberFIRST-AID ?

-> The guy driving the ambulance hits him.</comment>


CES - Samsung Smart Window (Video) - <AUTHOR> http://www.planettechnews.com/hardware/item467

<comment><USER2> Anyone knows if it's done with WPF a la Surface as the other product from Samsung - the SUR40 ?

</comment><comment><USER3> I'm interested to see what it looks like from outside if it's supposed to be one-way.

</comment><comment><USER4> Absolutely awesome. If they can make it relatively accessible in term of price, I think it could change the world, yup really (especially in the streets and in the shops).

</comment><comment><AUTHOR> yeah cool, I always thought it would be awesome to have 3d "windows" installed that makes it look like youre underwater, or in space or in the jungle or wherever!

<comment><USER5> The perfect "screen saver" idea! Or use webcams. (Though, that may run up your data use...)</comment></comment>


Show HN: Gift your Valentine onsite car refuels (Bay Area Only) - <AUTHOR> https://www.fuelpanda.com/gifts/new <comment><USER2> who says romance is dead?!

<comment><AUTHOR> Not us :)</comment></comment>


Ask HN: How to train and increase reading speed? - <AUTHOR> <comment><USER2> Is your goal to read more books?

If it is, then here are my two advices:

1\. Don't try to remember every details of the books. Just cruising through will update your mental model of the world and your brain will assimilate concepts that are relevant to you at that point in time. Also, great books are meant to be read multiple times so don't fall the fear of missing out.

2\. If you aren't naturally devouring the book out of curiosity, chances are that the book simply isn't good. Put it down and pick another one. There are hundreds of incredible books that might change your life, the hard part is finding them ;)

<comment><AUTHOR> yes, the main goal to read more books and learn faster, work with text information faster. Thanks for recommendations</comment></comment>


Strict Haskell Extension Landed - <AUTHOR> https://github.com/ghc/ghc/commit/46a03fbec6a02761db079d1746532565f34c340f <comment><AUTHOR> See also, the documentation added here: [https://github.com/ghc/ghc/blob/master/docs/users_guide/glas...](https://github.com/ghc/ghc/blob/master/docs/users_guide/glasgow_exts.rst#strict- haskell)</comment>


Old phones get new life in high-powered computer servers - <AUTHOR> https://www.princeton.edu/news/2017/10/24/old-phones-get-new-life-high-powered-computer-servers <comment><USER2> This sounds to me like most retarded idea I've ever heard.

If smartphone SoCs were viable server platforms then you would buy them directly from the manufacturer instead of scavenging them from a landfill.

The entire idea is based around the cognitive dissonance of buying fully functioning hardware at low or no cost when the reason for the low cost is the fact that it's not fully functioning.

<comment><USER3> I don't get what you're saying. Buy old and used phones directly from the manufacturer?

The point of this is that it's recycling hardware that has already been used. Manufacturing new hardware defeats the entire point.

<comment><USER4> Exactly. I think you could make an interesting business off of this. Offer cheap hosting by letting the customer buy an old phone and then just charge them for running costs plus profit margin.

</comment></comment></comment><comment><USER5> oh, cellphones. When i read the title I imagined a gigantic pile of ancient dial phones made of Bakelite being burned to power the servers.

<comment><USER4> That sounds like it wouldn't be very environmentally friendly.</comment></comment>


Bill Gates, Hero - <AUTHOR> http://blog.redfin.com/blog/2010/09/bill_gates_hero.html It's hard to believe we once saw Bill Gates as the pie-splattered villain and others as the idealists. <comment><USER2> _Why do you think Silicon Valley has never quite come around on this guy?_

Because of the trail of dead bodies and lost opportunities left in his wake.

Let's not forget, Bill Gates was handed a 0th birthday gift of $1 million from his grandfather, the keys to his private middle school computer (the same one Stanford had), and a free ticket to do business with IBM because his mother already knew its chairman.

Sure he was smart and he worked hard, but he was no smarter and worked no harder than many of the rest of us.

And what did he do with these fabulous once-in-a-lifetime gifts? He fucked anyone who got in his way, always to the benefit of Microsoft, and usually to the detriment of the industry.

When others wrote better code, he called his lawyers. When other developers wanted to collaborate, he stole their intellectual property. When customers or vendors balked, he crushed them. And when the citizens saw how unfair it all was and took action, he called his lobbyists.

So now maybe he wants to be like Andrew Carnegie in his next act, conveniently forgetting all the lives destroyed in the hope of "giving it all back". If so, good.

I really try to keep upbeat and optimistic in my posts here at hn, but I also understand how much we have forgotten, and sometimes I just can't resist. Every time I read about Bill Gates worship, I can vomit. Sometimes I really wonder how much better things would be for all of us hackers is he had just gone to law school and left our industry to develop as it could have.

</rant>

Oooh, that feels better. Now back to work.

<comment><USER3> > Let's not forget, Bill Gates was handed a 0th birthday gift of $1 million > from his grandfather, the keys to his private middle school computer (the > same one Stanford had), and a free ticket to do business with IBM because > his mother already knew its chairman.

The rest of your post is very insightful, but this part above strikes me as petty - I was low born myself, was given almost nothing except birth in the USA in the modern era, but I think good for people who are given things and achieve with them. The bad things stand on their own - you include the fact that he was given gifts as if it makes him worse - _it doesn't_ \- at least, not by my ethics. Other people can disagree. Let his bad deeds stand on their own, the rest of it comes across as sour grapes.

<comment><USER2> _...but this part above strikes me as petty..._

Sorry if it came across that way; that was not my intent.

Everyone's starting point is relative. No one ever gave me the gifts that Bill Gates got. But then again, I've had gifts that 99% of everyone who ever lived couldn't imagine.

With those gifts comes responsibility. Whenever I have an opportunity to use my gifts to do good things, I think of how proud those who made sacrifices for me would be. I imagine many people here on hn feel the same way.

Bill Gates never used his tremendous gifts for the greater good, only for the good of Microsoft. He never cared how big the pie got, only how close Microsoft's share of that pie approached 100%.

The point of the paragraph wasn't to be petty or jealous; it was just to point out how the one with perhaps the biggest gifts of all didn't choose to share them like the rest of us would. Sorry if I implied anything else.

<comment><USER4> From your comments its clear that you're zealously anti-capitalist and, as a result, anti-Microsoft, so you're simply not applying logic.

Bill Gates did his legal duty. When you run a corporation you have a fiduciary responsibility to it. He would be doing something immoral if he didn't do what was best for Microsoft. The theory behind free market capitalism is that enough companies doing the same will average out to the best results.

So the question is what do most people with the gifts Bill Gates was born into do? The answer is that they get a job in finance doing nothing of benefit to society and getting paid quite handsomely for it.

Bill on the other hand founded a company that has, at current time, almost 90,000 employees. He helped bring computers to the masses.

It's not petty jealousy that drives your comments, it's anti-capitalist sentiment. You also have a highly debatable view of what the universe would look like if not for Microsoft (I for one suspect you wouldn't be on this site) but that too is a side effect of zealousness rather than the result of careful reasoning.

<comment><USER5> > _The theory behind free market capitalism is that enough companies doing the > same will average out to the best results._

You left out the part about how this only works if (a) the market is actually "free" and "competitive" (what this means is a complicated topic beyond the scope of this text box), and (b) the interests of the company and the interests of the broader society are aligned. (Which is why we have all sorts of specialized regulation of companies, various kinds of guaranteed rights attached to consumers and contract-signers and so on, a court system, and ultimately elections). In the specific case of Microsoft in the 1980s and 1990s, they clearly were not. The idea that Microsoft's corporate strategy embodied some kind of Adam Smith small-firms-in-a-competitive-market ideal is hogwash. Notice that Microsoft's actions _were found to be illegal_ in several court battles.

It is definitely not a company's fiduciary duty to break the law.

<comment><USER6> Free market capitalism is supposed to be about innovation and competition. You have to weigh the good with the bad. Has Microsoft probably had an advantage that pushed others out of business - yes, but I'm sure they also inspired programmers to create new products that they could then sell to Microsoft/Google type companies. It's hard to say if large companies create or destroy innovation and competition. There will always be positives and negatives.

</comment></comment></comment></comment></comment></comment><comment><USER7> My understanding is that it should be: Melinda Gates, Hero.

When she connected the plight of many of the world's children to that of their own he got it.

<comment><USER8> I'd agree. Then I remember Clippy.

</comment></comment><comment><USER9> The interesting fact that is often left out of these Gates-as-philanthropist v. Jobs-as-salesman arguments is that Jobs has 1/10 the wealth that Bill Gates has, if that, _even though_ Apple is now worth more than Microsoft. So if this is a simple comparison of allocation of wealth we find that Jobs simply hasn't taken the money (look at his paycheck v. Apple's cash holdings for crying out loud). And socially how effective is charity relative to giving it to the market? I'm not sure, but it's open to debate.

So does two decades of merciless greed followed by a decade of giving some of that money away constitute heroism? To an extent, yes. But I think we ought to give simply taking a lower cash holding a better look also.

<comment><USER10> Jobs' wealth is lower than Gates because Apple raised more money than Microsoft did early on, and because he sold all his stock when he left Apple and is now compensated in stock options rather than in founders' stock.

<comment><USER9> He sold his stock in protest over being fired--again, for principle, not money.

With $46B cash and short term holdings in the bank, I'm sure shareholders wouldn't bat much of an eye if Jobs compensated himself with a little bit more than $1/year, as Ellison and many other tech execs do. Jobs doesn't take that cash.

The last point I'm going to make is that it's probably immaterial to the argument the exact cause of the disparity. The fact that people point at Jobs and accuse him of not being more philanthropic indicates that they are ignorant of his cash position.

<comment><USER11> Selling your stock over being fired is not a principled stand. At least not in the conventional way of thinking about it.

Plus he has on occassion been labelled the highest paying CEO in the world, due to his stock options. [http://www.forbes.com/lists/2007/12/lead_07ceos_Steven-P- Job...](http://www.forbes.com/lists/2007/12/lead_07ceos_Steven-P- Jobs_HEDB.html)

And in any case, most CEOs don't make a HUGE salary. Jobs would probably get paid $750k. The fact that he doesn't make this money is (a) hardly a dent in his wallet and (b) doesn't really make any effect on wealth allocation.

<comment><USER10> He sold his stock because he thought that Apple stock without him was worthless. He was right.

Now, Apple is trying to convince the market that the new Apple can function without Steve Jobs. People want to believe, but it's far from certain.

<comment><USER9> I agree with you in principle, that his leaving ultimately doomed the company, but the stock price did go up when he left, and stayed up for many years.

</comment></comment></comment></comment></comment></comment><comment><USER12> There's an idiom where I come from. Roughly translated:

When the Devil gets old, he joins the abbey.

</comment><comment><USER13> To me Bill Gates will always be a modern-day Rockefeller: he clawed and trampled his way to the top, then once he was there he gave away his money -- a lot of it, to be sure -- and will always be remembered for that, rather than the ugly methods he used to get it.

It's laudable when somebody gives so freely and I don't want to take away from that, but I find it hard to view him charitably because I know that even now, this is all about him, making him feel better about himself. Many others sacrificed much more for the good of others without having to tread so heavily.

</comment><comment><USER14> I am rather grateful for Gates' contribution to the software industry. Standardizing the development environment was monumental toward facilitating innovation in software development. Imagine if Steve Jobs controlled the industry with as much power that Gates did, how much different would the world be? While I dont like to deal in "IF's," if we judge people/organizations by their actions, Microsoft has always been a relatively open environment whereas today Apple continues to tyranically control their platform. Seeing Apple rule would have sucked for everyone.

<comment><USER15> On the other hand OS X on the Mac is a relatively robust and usable platform and Windows on the PC still sucks for many users (I'm two days into a Windows rebuild at the moment).

It's swings and roundabouts. Gates and MS made good calls and they made bad calls, Jobs is the same.

For me I think Bill did OK, while I can imagine some using that sort of power in a more altruistic way, I can also see many doing far far worse things with it.

</comment></comment><comment><USER16> >> Why do you think Silicon Valley has never quite come around on this guy?

There are two separate aspects here, professional and personal.

Silicon Valley judges people based on their professional acumen and practices. And Gates did not please everybody in this department.

And the other aspect, yes, people in tech do admire his humanitarian efforts.

It's just that mixing two aspects of a personality and trying to come up with an overall score does not work.

</comment><comment><USER17> I think he's villanized because of his main product, Windows. It suffers from the same plight Bill himself suffers as mentioned in the article. Awkwardness.

<comment><USER18> As much as this seems like snark, it's a fair observation.

Bill Gates is often seen as a villain because of the late 1990s behavior of Microsoft and the quality of some of their flagship products (Windows and IE). It can be hard to separate perceptions of Bill Gates the man/philanthropist from Bill Gates the businessman. Perceptions of Bill Gates are colored by BSoD's, IE's non-compliance to standards, Frontpage creating pages that only rendered in IE, and awkward conventions and interfaces in several popular pieces of software.

(I personally think very highly of Bill and Melinda Gates for their charitable work.)

<comment><USER19> Get over yourselves , have you used *nix systems in 90s as desktops? If you not you can't compare Windows's quality with something else.

OSX wasn't even properly exist.

<comment><USER20> "NEXTSTEP is probably the most respected piece of software on the planet." -- Byte Magazine, October 1992

I used it during that decade on an x86 desktop, on a SPARC laptop made by Tadpole, and on an HP PA-RISC "gecko" workstation. It was awesome.

<comment><USER21> I have a Next Color Turbo at home, it's an awesome machine.

And so it should be for what it cost back in the day. Windows PCs made computing affordable for Jo(e) Consumer, there's no getting away from that.

</comment></comment></comment></comment></comment><comment><USER22> The first thing you do in real life, not in fantasy blogger-land, once you are able to is go back and apologize to the guys you stomped on along the way.

I am talking about STAC, Gary Kildall's family, etc.

Also perhaps an effort at MSFT to reverse the culture of lying and deceit that even now permeates their marketing.

I see no evidence of Gates doing that. Self-reflection would be required for that to happen.

In some respects I see Zuckerberg following the same path.

</comment><comment><USER23> First comment on HN after lurking for a year or so. It does irk me that people who obtain their wealth by means of sitting at the top of a monopoly can be praised by giving away the money that they did not have to work so hard for without others giving second thought to how the person arrived in that position in the first place. Sure it was hard to get to the monopoly position in the first place, but what happened after?

</comment><comment><USER24> Tax the wealthy to pay for education, but don't worry about Microsoft dodging licensing taxes by operating out of Nevada, noooo...

<http://boingboing.net/2010/04/23/microsoft-wins-its-1.html> [http://microsofttaxdodge.com/2010/09/microsofts-nevada- tax-d...](http://microsofttaxdodge.com/2010/09/microsofts-nevada-tax-dodge- much-larger-than-previously-estimated.html)

tax the wealthy, so long as it's not him.

Now, to be fair, he is a huge philanthropist and the Bill and Melinda Gates Foundation does some amazing work, but praise what you preach, Microsoft needs to start paying its dues.

<comment><USER25> I'm curious. Do you personally arrange your affairs to maximize your taxes?

If not, then why do you think businesses should do so?

</comment></comment><comment><USER26> The man is the greatest philanthropist of our time. He's doing more for the world than everyone commenting here combined, to some outrageous exponent. Decry the man's business practices, but at the end of the day it was a means to an end. He's taking his wealth and spending it wisely on charity. Further, he's convincing other billionaires to do the same. I say we leave his tenure at Microsoft in the past and focus on the stuff that will truly be his legacy: helping mankind. And for that, I say, good for you Mr. Gates.

</comment><comment><USER27> <http://www.youtube.com/watch?v=NrJBY2l1MQQ>

For what it's worth, Gates has been getting a lot of crap in the political sphere for this statement he made a couple of months ago. Glenn Beck's site, The Blaze, has been ripping him for his stance seemingly favoring "death panels."

I lean on the side of the blog post, even if his company's quality (as has been noted in the comments) has been downright abhorrent.

</comment><comment><USER8> Perhaps Silicon Valley has never quite embraced Bill Gates because Microsoft is not part of Silicon Valley.

Microsoft's success in Redmond doesn't fit with the Silicon Valley narrative that ties creativity to geography.

In other words Microsoft's success challenges the value of Silicon Valley's terroir. It goes against the brand.

That's not to say that geography doesn't play a role - it's hard to imagine a Microsoft based out of Bentonville.

</comment><comment><USER6> Bill Gates is the ultimate example of what's explained in the book 'Outliers' by Malcolm Gladwell. Success is usually a combination of hard work & luck.

</comment><comment><USER28> I suppose Bill Gates was responsible for the death of Princess Di as well? Britney Spears 3rd album too. Not to mention Hanson and Take That. And all those Hugh Grant films. Sooo bad.

My point? No point really, just adding to the existing rubbish on this thread.

</comment><comment><USER29> Glenn has it wrong. Without a doubt Bill's creations at Microsoft are far more important than what he's doing now. I prefer the capitalist Gates to the egalitarian one.

</comment><comment><USER30> Twitter? For Nobel Peace Prize? That's the first I've heard about that, and I'm not sure I like the idea.

</comment><comment><USER31> steve robs and bill takes

</comment><comment><USER32> why is redfin (a real estate company) blogging about bill gates? weird...

</comment><comment><USER33> Metonymy.

</comment><comment><USER34> I'd say Bill Gates is a true and successful capitalist.

</comment><comment><USER35> Bill Gates is the new hero because Steve Jobs is the new villain.

<comment><USER36> How? I mean, could you elaborate that idea please? I don't see how Mr. Jobs being unpopular in some circles would imply that Mr. Gates became popular.

<comment><USER37> I agree with you Doc, this isn't a zero sum game.

However, as Jobs is so closely tied to the recent success of Apple, and Gates is still seen as Microsoft even though he hasn't been an employee for many years.

<comment><USER38> He's still an employee, but he's no longer the CEO.

</comment></comment></comment></comment><comment><USER39> Excuse me, but why is raising taxes on the rich a good thing? If the rich feel that they have too much then there's always charity. Most of the people on this site should know that there isn't a limited pie of wealth, and you shouldn't punish those who enlarge the pie.

</comment><comment><USER40> How come no one talks about the loss of innovation Microsoft have incurred on the world? What if Windows were NeXT or Unix? What if Bill Gates had tried really hard to create the _best tools_ possible, rather than the most profitable software? What if the world had run on Unix in the two decades since Tim Berners-Lee used a NeXT machine to create the web? Might we have had a 1% increase in annual productivity (mainly from better innovation, not only direct efficiency improvements)? We'll never know of course; but you don't have to be crazy to think so.

<comment><USER41> Ted Nelson said the world of computing would be different if AT&T hadn't charged $50,000 for a Unix license (yes, that's per machine!).

<comment><USER42> One must remember that a single machine could serve many, many users via terminals.

</comment></comment></comment><comment><USER43> So, Dick Cheney decides to give away all the billions he made (wars, corruption, oil cartels) and discovers the cure for cancer and super vaccines for all children of the world. Good.

It is ok to rape half of the world for the good of the rest.

That makes you an instant hero.

<comment><USER44> This kind of logic doesn't make sense. I'd love to find a word for it.

No one has simultaneously done good and bad like that. If a person does bad, then change their views or themselves, and proceeds to do good wholeheartedly, then good, I'm happy about their actions. Why do people have to criticize stuff like this? Learn to forgive. Focus on what's being done now instead of just being upset about the past.

I'm sure all the Bill Gates hate affected him some back in the day (and apparently now too), but it's very doubtful that he cares all too much what other people think or he wouldn't have accomplished much, and still wouldn't be accomplishing much today.

</comment></comment><comment><USER45> Off Topic: Glenn welcome to HN! Glad to see you here. We bought our first house using Redfin in 2007 and were very happy customers!</comment>


Tiangong 1 Reentry Updates – Where it's going to crash - <AUTHOR> http://blogs.esa.int/rocketscience/2018/01/12/tiangong-1-reentry-updates/ <comment><AUTHOR> The FAQ gives a good overview of what's going on here:

[http://blogs.esa.int/rocketscience/2018/01/16/tiangong-1-fre...](http://blogs.esa.int/rocketscience/2018/01/16/tiangong-1-frequently- asked-questions-2/)

TL;DR is a Chinese space lab (Their 1st) is going to crash into Earth sometime end of March, Mid April... probably Northern Europe.</comment>


Clojure Agents - <AUTHOR> http://justin.harmonize.fm/index.php/2009/03/clojure-agents/

<comment><USER2> I was thinking that it would be a really cool hack to twiddle an open source Java vm to give it a scheduler like Erlang's, in order to not rely on threads. It would not be a simple hack, but you could potentially do some very cool things with it. Erlang style "processes" are much cheaper than threads.

<comment><USER3> In the early days of Java, threads were actually lightweight threads that were scheduled in user space. They changed them to true OS threads somewhere along the way, which helps in multiprocessor situations, but I'd love to still have the green threads around as a tool.

I don't know enough about the JVM to have any idea how tricky it would be to hack it in; I suspect calling out into a C library that calls setcontext() is going to make the JVM rather unhappy.

<comment><USER2> Calling out into C or other potentially blocking calls is one of the things Erlang treats very carefully - the scheduler by itself isn't enough. To really make Erlang turn over nicely, you have to isolate contact with external libraries, usually in other Erlang nodes (real, OS level processes). Kind of strange, but very robust.

<comment><USER3> It makes sense, really; C code can really mess with managed systems like that, and by the sounds of it, Erlang deals with it gracefully. Unfortunately, the JVM feels a little too monolithic for my liking with regard to processes; it's more unixy than .NET, certainly, and I guess that's the price you pay for a VM that sophisticated.

<comment><AUTHOR> I wonder if it would be more practical in .NET. They have this idea of Application Domains that I've never needed to fully understand, so never have. Perhaps you could hack that into a Erlang style process model?

<comment><USER2> The key point is really this: if you call out to some C function, FoobarFunc(), you simply have no guarantees that it won't sit there in a while(1) { fiddlefaddle() } loop. Since Erlang "processes" are all part of the same OS process, that would kill the whole system dead. So you really need to offload things into their own contained little world, which in this case means a real, Unix process, or at the very least a thread.

</comment></comment></comment></comment></comment></comment><comment><USER4> '''Flockr is slow. I would profile it, but profiling in Java is a pain''' - weird ... that is not my experience. I've had nothing but excellent results with profilers on Java code. On the microsecond level.

<comment><USER4> Oh ... nevermind ... I was just reading his 'First stab at Clojure' post on the same blog where he writes:

"First of all, I've never programmed in any lisp dialect. Second of all, I've never programmed in Java."

Yeah. I guess profiling is a pain if you have never actually worked with Java before. Duh.

<comment><AUTHOR> The problem is there doesn't seem to be an accepted, open source profiler I can just drop in and start seeing some results. There probably is, but I haven't come up with a good way of finding these tools for Java.

Being a Python guy, it's often quite frustrating to have to fight so much to find tools, and then fight so much to get them to work in the environment.

<comment><USER4> Eclipse and Netbeans come with pretty good profilers. You can also get one of the commercial ones.

I really like your Clojure blog entries btw. I am very excited to start doing similar stuff.

</comment></comment></comment></comment><comment><USER5> What is Flockr?

<comment><AUTHOR> It's a silly little twitter portal I'm building for the express purpose of learning clojure. Basically, it aggregates different twitter searches into "channels".

There's an intro here: [http://justin.harmonize.fm/index.php/2009/03/first- stab-at-l...](http://justin.harmonize.fm/index.php/2009/03/first-stab-at- learning-clojure/)

This article is the sixth in the series, which you can see here: <http://justin.harmonize.fm/index.php/tag/learning-clojure/></comment></comment>


Show HN: Pooductivity – An extension to replace productivity with the poo emoji - <AUTHOR> https://github.com/obviyus/pooductivity <comment><AUTHOR> Hey HN,

I got pretty annoyed with the massive influx of productivity YouTubers and Medium morning routing gurus so I built this (admittedlly immature) extension to have some fun!

Inspired by this comment: [https://news.ycombinator.com/item?id=24419565](https://news.ycombinator.com/item?id=24419565)

Some of these examples are a lot funnier than expected: [https://imgur.com/a/6A26MLe](https://imgur.com/a/6A26MLe)

<comment><USER2> _Turning down yet another productivity product_ :D

So funny

</comment></comment><comment><USER3> This is what I wanted. Make it available for Firefox mobile please.</comment>


ChromePHP - PHP Console Logging in Google Chrome - <AUTHOR> http://chromephp.com

<comment><AUTHOR> I made this a while ago, but thought I'd share it here in case anyone is interested. Technically it can support any language but it would require a header set server side with the encoded data to be logged.</comment>


Scaling Facebook to 500 Million Users and Beyond - <AUTHOR> http://www.facebook.com/notes/facebook-engineering/scaling-facebook-to-500-million-users-and-beyond/409881258919

<comment><USER2> I hate the fact that I am a regular user as the whole concept of the site drives me insane. I recently executed a cull on my friends list and managed to remove over 50% of my 'friends' but I'm still left with a list of over 100 people, the majority of whom believe the main purpose of the site is to regurgitate other peoples status updates, take pointless quizzes and posting the results on my wall (I don't care if you would last 17.8 seconds in a fight with a raptor).

I've been battling with the idea of simply deleting my profile and thus freeing myself from this social millstone but that leaves me with two problems:

1) I live in the UK and almost all my family & friends are based in Ireland and Facebook is unequivocally the best medium for me to share photo's of my 12 week old baby boy and keep them up to date with our progress in the UK.

2) If (when) I delete my profile it subsequently deletes all of the photo's I have uploaded which means my family will lose a huge amount of pics that they have saved in their albums.

Now I am well aware that there are a multitude of platforms that will allow me to share my family photo's without being bombarded with pointless quizzes, polls and religious/political flame wars but trying to convince my computer illiterate family to adopt a new social platform would be akin to playing pool with a rope.

I admit to feeling trapped by this social giant and I live in hope that within the next few years a new platform will take the world by storm that will enable me to keep in touch with my family without having to trawl through pages of pointless content to find anything of remote interest.

/rant</comment>


Machine Learning Course Materials - <AUTHOR> http://cs229.stanford.edu/materials.html

<comment><USER2> Stanford's CS229 was also on Coursera.

[https://class.coursera.org/ml/lecture/preview](https://class.coursera.org/ml/lecture/preview)

<comment><USER3> I've posted about this many times, but it's worth noting that the Machine Learning course on Coursera is CS229A(plied), which is different from CS229 the one most Stanford students take. The Coursera one is more useful if you want to apply machine learning; the Stanford one linked by the poster is more useful if you want to enter the field. The Coursera one glosses over a lot of the mathematics behind the algorithms; the Stanford one delves into the mathematics supporting the algorithms.

Here are the complete corse materials (including video lectures!) for CS229, courtesy of Stanford Engineering Everywhere: [http://see.stanford.edu/see/courseinfo.aspx?coll=348ca38a-3a...](http://see.stanford.edu/see/courseinfo.aspx?coll=348ca38a-3a6d-4052-937d-cb017338d7b1)

<comment><USER4> i did take the cs-229A when it was first offered on coursera, and your comment is _exactly_ right. most of the mathematics was glossed over, and the focus was on not "worrying" about it, but on implementation (of various algorithms) using octave, and observe the results. which for neural-nets mostly boiled down to some _slightly_ complicated matrix-multiplication.

having said that, it was an excellent _overview_ of a broad spectrum of ml techniques, and i for one, would heartily recommend it to anyone with high- school background in maths, and a deep interest in the field. supplementing the material with simon-haykin's text or christopher-bishop's (most excellent) book, would make it slightly tougher.

unfortunately, due to some time constraints i could not partake on geoff- hinton's wisdom on deep-learning. would you happen to have material for that stashed somewhere ?

<comment><USER5> Ooh, Matrix multiplication? Would I get to use Strassen's sub-cubic algorithm? I've been looking for an excuse to use it.

<comment><USER4> afaik, octave uses blas, which in turn _should_ be using strassen's for it's sgemm, dgemm etc. computations. at least it would be _very_ surprising if it didn't...

<comment><USER5> Having done a very small amount of research into it I actually think it would be surprising if it _did_ use Strassen's. EDIT: At least frequently, I assume it would use Strassen's for larger matrices much in the same way as introsort works.

Apparently it's becoming irrelevant/unwieldy as computing power increases.

"Practical implementations of Strassen's algorithm switch to standard methods of matrix multiplication for small enough submatrices, for which those algorithms are more efficient. The particular crossover point for which Strassen's algorithm is more efficient depends on the specific implementation and hardware. Earlier authors had estimated that Strassen's algorithm is faster for matrices with widths from 32 to 128 for optimized implementations.[1] However, it has been observed that this crossover point has been increasing in recent years, and a 2010 study found that even a single step of Strassen's algorithm is often not beneficial on current architectures, compared to a highly optimized traditional multiplication, until matrix sizes exceed 1000 or more, and even for matrix sizes of several thousand the benefit is typically marginal at best (around 10% or less)." \- [http://en.wikipedia.org/wiki/Strassen_algorithm](http://en.wikipedia.org/wiki/Strassen_algorithm)

Coppersmith-Winograd, assuming it is not another Galactic algorithm, looks better - [http://en.wikipedia.org/wiki/Coppersmith%E2%80%93Winograd_al...](http://en.wikipedia.org/wiki/Coppersmith%E2%80%93Winograd_algorithm)

However I do strongly suspect that this _is_ a Galactic algorithm.

In fact, judging from this ([http://www- cs.stanford.edu/~virgi/matrixmult-f.pdf](http://www- cs.stanford.edu/~virgi/matrixmult-f.pdf)), the Big O of time taken for matrix multiplication has been decreasing steadily and without much fuss ever since Strassen.

Again, I suspect these are _even more_ galactic algorithms than strassen's is.

<comment><USER6> Right. Basically, Strassen's is not friendly to the cache - any improvement you get in the asymptotic behavior is usually swamped by the cost of cache misses.

In that vein, the naive implementation (O(n^3)) implementation is also not cache friendly - if you flip the inner loops you will get far better performance (in row major languages).

But I mainly replied because I love the concept of "galactic algorithms" and Regan&Lipton (orignators of the idea and name).

EDIT: the BLAS routine in question is dgemm.f (double general matrix multiply) and is easily googled so I won't paste it here. No Strassen's in sight.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> I wrote a blog post with some material suggestions to learn Machine Learning. If you want, visit my blog post:

[http://pauloortins.com/resources-to-become-a-ninja- machine-l...](http://pauloortins.com/resources-to-become-a-ninja-machine- learning/)

</comment><comment><USER8> As a reference, you'll want one or two of the Big 6 texts, by Murphy, Koller/Friedman, Bishop, MacKay, and Hastie et al ESL. The first review is good [http://www.amazon.com/product- reviews/0262018020/ref=dp_top_...](http://www.amazon.com/product- reviews/0262018020/ref=dp_top_cm_cr_acr_txt?showViewpoints=1)

Also, there are many freely available texts on ML, data mining, stats/prob distributions, linear algebra, optimization etc, incl Barber, Mackay and ESL. See [http://www.reddit.com/r/MachineLearning/comments/1jeawf/mach...](http://www.reddit.com/r/MachineLearning/comments/1jeawf/machine_learning_books/)

</comment><comment><USER9> For a second, I misread this as "Machine Learns Course Materials". Must make this happen - wonder if I can use these machine learning course materials to help.</comment>


Watch out iPhone, here come the netbooks - <AUTHOR> http://www.scripting.com/stories/2008/11/03/99Netbooks.html

<comment><USER2> You can't carry a netbook in your pocket and you can't easily make/receive a phone call on it.

<comment><USER3> Exactly. Where my 13" laptop can't go, I have my iPhone. Nothing in-between really cuts it...

</comment></comment><comment><USER4> "Cell phone sales are crashing. Notebook sales are rising. The netbook market is overcrowded."

Reference: <http://www.pcworld.com/article/153150/>

So why should Apple be worried about an overcrowded market with cut throat pricing? If Apple ever does make a netbook they will wait until it is an established market that they can make money at.

</comment><comment><USER5> "the netbooks are going to shrink to phone size. [...] And each will cost $99 with a service plan"

A netbook the size of a phone is actually quite expensive at the moment.

<http://www.oqo.com/>

</comment><comment><USER6> i'm waiting for something with a nintendo DS like form factor. no larger than a trade paperback.</comment>


Where to get startup cash now  - AirBnB (YC W09) - <AUTHOR> http://money.cnn.com/galleries/2010/smallbusiness/1003/gallery.startup_cash_now/index.html <comment><USER2> I loved that story (selling political-theme cereal) since I heard it in the PG Mixergy interview. Apparently they still have it on their site, too:

<http://www.airbnb.com/capnmccains> <http://www.airbnb.com/obamaos>

</comment><comment><USER3> I'd heard airbnb mentioned a few times but never really caught what they did before. Awesome site, can't wait to try it out :)</comment>


Ask HN: What is my Job Title? - <AUTHOR> This might seem like an strange question but how do I know what my job title is?
My job role is so diverse I struggle categorizing it under a name.
Basically, I started doing I.T Desktop Support but I soon outgrown this and started volunteering to be involved in some of the more interesting tasks.
My un-official job title is a Systems Developer but I never applied for this, it was sort just given to me over time.
My typical day to day tasks are:
System Administration
 - Replace servers, Manage Active Directory, keep uptime, back up etc - Just typical sysadmin type work
Networking
 - Set up networks, configure switches/routers, cisco type stuff
Programming
 - I have developed several be-spoke applications that the company now depends on
Cable Management
 - Lay Cat5 cables across the building
Support
 - Provide desktop support (but this has recently beed pushed to a new starter)
Software Deployment
 - Introduce new software to the company and integrate it into the company systems
Process Improvement
 - Identify a process that can be automated/improved and build necessary tools to do this
SQL Server/SSRS
 - Write TSQL to use for SSRS
A typical Jack of all Trades Master of none situation.
I really enjoy my job and I am in a fortunate position where I can go into work, look around the business - find something to improve and offer a proposal to work on it. It's rare I have management inteference and if things start to slow down, I ask around the business for anything that can be automated.
I have been with the company for 20 years, and it's been the only place I have worked for but due to my circumstances I must re-consider my future there. Because I have been trapped inside a pidgeon hole - I don't know what it's like elsewhere - but from looking around what jobs are available it looks they are speficially target one of my fields.
I have come across the term DevOps and I am not sure if this is what I do. <comment><USER2> Sounds like a pretty textbook definition of "Network Administrator" [0] (which, despite the name, includes things like server administration) to me.

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

</comment><comment> maze-le >> I have been trapped inside a pidgeon hole - I don't know what it's like elsewhere

Good thing for you that you recognized it. I've also been trapped for a long time in a role that I don't like anymore. Took me a while to find that out. Feelings like this can become a main problem in your personal psychological health, and an obstacle to your own productivity and drive.

>> I have come across the term DevOps

I think the term is quite suited to your description.

</comment><comment><USER3> Yup, that's devops.</comment>


Seiko 80s Computer Watches (2005) - <AUTHOR> http://pocketcalculatorshow.com/nerdwatch/seiko-computer-watch-fun/ <comment><USER2> Having one Casio databank on my wrist while being a child was one of the things that always amazed me and pushed me to electronics and computers.

How could those watches do calculations and store phone numbers on a so small thing? And being 7-years old, I didn't even have phone numbers to store on it...

<comment><USER3> I received several of these as gifts throughout my youth. I had almost completely forgotten about these and this website brought back good memories. They seemed like a little slice of science fiction, especially the ones that would light up with a press of a button giving off that cool blue light.

I wonder if kids nowadays have a sense of wonder from the devices they have or see. Growing up, we had a variety of single use devices which allowed us to be amazed when the next device came along. Nowadays, the devices all roll into one little palm sized device so what is left to be suprised about?

<comment><USER4> Yes, they have a sense of wonder. It's innate. My kids constantly want to learn how things work.

</comment></comment></comment><comment><USER5> The alternative keyset on the UK01-0010 is katakana, not kanji. In modern times it's usually used for foreign words or for emphasis, but in the 80s it was often the only Japanese writing system available on computers, because its characters have the simplest shapes and are legible on the lowest resolution screens.

Katakana (カタカナ): simple angular shapes, phonetic syllabary.

Hiragana (ひらがな): simple but more curved shapes, phonetic syllabary.

Kanji (漢字): complex shapes, looks like traditional Chinese, logographic.

<comment><USER6> > or for emphasis

Could you elaborate? I took a Japanese 101 course in college, and we only learned about it being used for foreign/loanwords.

<comment><USER7> It can be used similarly to italics in English writing.

<comment><USER8> Makes me tempted to equate them to block letter and cursive respectively.

</comment></comment></comment></comment><comment><USER9> I love these watches. I never knew there was a wristwatch with a built-in BASIC! The mind of kid-me would have been blown.

Something about their styling screams "high tech" \-- in the same sort of way the aesthetics of old _Transformers_ episodes scream "high tech" \-- even though both the technology and the styling are dated by today's standards.

The setting of the Disney short attached to _Moana_ \-- called "Inner Workings", I was able to date to the early-mid 1980s, based on the industrial design of the main character's alarm clock, wristwatch (a Seiko-like), and office computer. It's always great to see interest in that era's design and devices.

<comment><USER10> The page doesn't make it clear, but the watch doesn't run BASIC, the keyboard does. The watch just works as a screen. On it's own, the watch just has some basic databank (with 2K of RAM) and timekeeping features. It supposedly supports small programs running from RAM when disconnected from the keyboard, like the Timex Data Link's WristApps, but I can't find any real details on it.

A somewhat more detailed explanation of the watch is here: [http://cdecas.free.fr/computers/pocket/uc2000.php](http://cdecas.free.fr/computers/pocket/uc2000.php)

</comment></comment><comment><USER11> I have some of these (my collection has only few watches to indicate where they are in the computing timeline) and they are nice. I find the feeling and looks better than most smartwatches today and of course the battery life is very good compared. I have other small 'pocket' computers from the 80s[0] which have amazing battery life. I sure miss that.

[0] [https://en.wikipedia.org/wiki/Sharp_PC-1211](https://en.wikipedia.org/wiki/Sharp_PC-1211)

<comment><USER8> And now i am reminded of the TRS-80 100.

[https://en.wikipedia.org/wiki/TRS-80_Model_100](https://en.wikipedia.org/wiki/TRS-80_Model_100)

While not pocket sized, it was a portable computer that would run on 4xAA. And even had a built in modem (300 baud).

BTW i wish i could find a "receipt printer" that didn't cost an arm and a leg, and that didn't require thermal paper.

</comment></comment><comment><USER12> Here's a video on an early HP calculator watch. While not on computer watches, it has a nice introduction on the early history of calculator watches:

[https://www.youtube.com/watch?v=gGQrsSEaZkI](https://www.youtube.com/watch?v=gGQrsSEaZkI)

</comment><comment><USER13> Neat my wristwatch has two Easter eggs: [http://forum.pocketcalculatorshow.com/topic/casio-easter- egg...](http://forum.pocketcalculatorshow.com/topic/casio-easter-eggs)

</comment><comment><USER14> No mention of the TV [https://www.youtube.com/watch?v=KisxYBm8QzU](https://www.youtube.com/watch?v=KisxYBm8QzU)

Enjoy the amazement

<comment><USER15> amazing, but what kind of display is that? how does an LCD render the white noise so smoothly? very strange.

<comment><USER14> IMO I think the LCD is so "lame" it filters noise naturally.

</comment></comment></comment><comment><USER16> The picture of the game reminded me how much fun it was to live in this world where this was the "high technology" of the time. It looks very similar to the TI-81 I used to cut my teeth on when I started programming. There were so many restrictions it was a nice challenge to try to do things to push the limits of the available instructions. I can't imagine growing up today where computing environments are much more complex off the bat.

<comment><USER8> Given what people do with a C64 even today, it seems that the human mind thrives under restrictions.

</comment></comment><comment><USER17> Just proves smartwatches are nothing new. Seiko made some beautiful hardware, and the ones with the keyboards will continue to be usable - shame about the others that require obsolete software!

A timely article considering the state with Pebble. Shows Seiko was ahead of the game, with information on your wrist as an extension of your computer. Pity I never had anything this cool in my youth.

</comment><comment><USER15> 80's Japanese electronics were way ahead, my dad had one casio FX-602p calculator, I think still we have that one at home. It had an interface on the top and you could attach the calculator to a box like device and that device had 3 audio outputs. Then you can plug those audio jacks into a cassette player to save and load programs.

btw, the word "seiko" means "starchild"

</comment><comment><USER18> Brings back memories of being into those LCD/LED watches as a kid back in the 70s/80s.

<comment><USER19> Nintendo Game N Watch!

</comment></comment><comment><USER20> I remember my doctor had one of these and I would always inspect it while in his office.

</comment><comment><USER21> Tangentially reminds me of the HP RPN calculators that my grandfather gave me. So much fun programming them in BASIC :)

</comment><comment><USER14> lapdock circa 82 [http://pocketcalculatorshow.com/wp- content/uploads/2012/06/s...](http://pocketcalculatorshow.com/wp- content/uploads/2012/06/seiko-uc2000-uc2200.jpg)

<comment><USER8> Ugh, rubber dome keys.

I think my first encounter with a computer was a ZX81 clone with such a keyboard...

<comment><USER18> Those keys aren't as bad as the Atari 400 [http://www.vintage- computer.com/atari400.shtml](http://www.vintage-computer.com/atari400.shtml)

<comment><USER8> heh, "kid proof". More like usage proof.

Only place i recall seeing such keys were on some industrial machine or other...

<comment><USER14> You don't like that slick touchscreen with subtle tactile feedback ?

<comment><USER8> touche.

</comment></comment></comment></comment></comment></comment><comment><USER22> External iWatch keyboard - starting kickstarter now!

</comment><comment><USER23> reminds me of this song :) [https://www.youtube.com/watch?v=lGKhV6WsNrA](https://www.youtube.com/watch?v=lGKhV6WsNrA)</comment>


Wanna Do Business in Pyongyang? Call Alejandro Cao de Benós - <AUTHOR> https://www.bloomberg.com/news/features/2020-05-01/wanna-do-business-in-pyongyang-call-north-korea-s-guy-in-spain <comment><USER3> This man apeared some times in the spanish TV. He avoids questions about censorship and critic questions. It's just regime propaganda

<comment><USER4> By the context I am understanding he spouts NK regime propaganda to the Spanish people?

<comment><USER5> Yup (I'm a Spaniard as well).

Take this with a grain of salt as I'm talking from memory, but I think he's acted as a middleman with North Korea to set up trips to the country for tourism, including for some Spanish journalists that were taken through very controlled routes. I remember the guy kept talking about how the North Koreans don't mess around and so the people should be careful, about how great the Kim family is and about how proud he is to be so well considered by the regime.

I remember wondering if it's all just a charade for him that allows him to have contact with North Korea (as in, him being some sort of agent), if he just found his business niche, of if he's an idiot who drank the kool aid because he likes to feel he's important.

As an aside, I was impressed watching those documentaries by how many North Korean officials spoke perfect Spanish without any trace of an accent. Apparently some of them had lived and studied in Cuba for some time.

Edit: I found it, the documentary is called 'En tierra hostil', from 2015. It's currently only legally available under subscription from A3player, a streaming service from a private Spanish TV channel, but it might be viewable in other sites.

<comment><USER6> The Soviet Union used to have diplomats and "attaches" who spoke pitch perfect Swedish.

</comment></comment></comment></comment><comment><USER7> If you haven't seen it, The Propaganda Game[0] featuring this guy is a wonderful documentary

[0] [https://www.imdb.com/title/tt4206218/](https://www.imdb.com/title/tt4206218/)

<comment><USER8> +1. I was on my way to recommend this documentary.

</comment></comment><comment><USER9> "He rejects all questions about extrajudicial killings or humanitarian atrocities as propaganda: "The media is often reporting that we execute people, which is not true," he claims."

Interesting article. I often wonder about the mindset of people who deny the obvious facts. Does he really believe it or is he just cynical?

<comment><USER10> >I often wonder about the mindset of people who deny the obvious facts. Does he really believe it or is he just cynical?

This just made me think of Baghdad Bob so I looked him up and apparently he is still alive and allegedly living in the UAE. It would be interesting to hear what he thinks now of all the obvious lies he told almost two decades ago.

<comment><USER11> > It would be interesting to hear what he thinks now of all the obvious lies > he told almost two decades ago.

"If only I was in America, then with my talents I would have had an awesome career in law, politics, or business."

</comment></comment></comment><comment><USER10> I'm a bit surprised that companies are even doing business with North Korea considering how unreliable they have been in the past. In the 70s, when they at least seemed to be on par with South Korea in terms of development [1], they imported mining equipment and 1,000 cars from Sweden but never fully paid for them [2].

I guess the risk is worth it for some companies/individuals if they're only spending a few thousand dollars to potentially save many more.

> _"Let's say you're making a cartoon, and you are outsourcing the work. So > you go to Romania, because you know it's very cheap." But the Romanian > company knows of an even cheaper option. Its representative flies to > Pyongyang and makes a deal for the same work at half the cost—and then gets > 50% of the fee without employing anyone. "This has happened," he says. He > will not name movies. Nor popular video games. North Korean labor is also > behind websites and crypto, he says. The shadow hands of globally sanctioned > socialist labor are all around us._

The Onion was right all along [3].

And I know this is a pretty stereotypical nitpick, but I wish they (both the author and Cao de Benós) would be more specific and refer to DPRK's ideology as Juche [4], instead of just calling it socialism. Ignoring nuances in political ideologies just makes them more difficult to discuss.

[1] [https://en.wikipedia.org/wiki/Economy_of_North_Korea#/media/...](https://en.wikipedia.org/wiki/Economy_of_North_Korea#/media/File:Two_koreas_gdp_1950_1977.jpg)

[2] [https://www.npr.org/sections/parallels/2017/12/04/547390622/...](https://www.npr.org/sections/parallels/2017/12/04/547390622/how-1-000-volvos- ended-up-in-north-korea-and-made-a-diplomatic-difference)

[3] [https://www.youtube.com/watch?v=rYaZ57Bn4pQ](https://www.youtube.com/watch?v=rYaZ57Bn4pQ)

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

</comment><comment><USER12> Which proves ancient statement "Greed and cowardliness rule the world". I'm sure, there are people even in Western democracies, who perfectly aware where their outsource projects comes from. Not to say about China and Russia - <USER2> use slave labor of North Koreans for decades. Slaves from North Korea built stadiums for World Cup 2018 [0] in Russia. Everyone there knew about it (I'm Russian as well), there was plenty of evidence. Did anyone boycott the games?

[0] [https://www.thesun.co.uk/sport/3205842/russia-2018-world- cup...](https://www.thesun.co.uk/sport/3205842/russia-2018-world-cup-stadium- being-built-using-north-korean-slaves-on-45p-an-hour/)

</comment><comment><USER13> [https://archive.md/Khk4a](https://archive.md/Khk4a)

</comment><comment><USER14> Some discussion on the events at the embassy: [https://news.ycombinator.com/item?id=22779746](https://news.ycombinator.com/item?id=22779746)

<comment><USER15> Thanks for linking to this discussion; I missed it when it happened.

</comment></comment><comment><USER16> For more about this guy I highly recommend watching the documentary Friends of Kim in which he plays a starring role. You can even find it on YouTube. TL;DR he and a bunch of "friends of the DPRK" went to NK to participate in a parade and shout "Yankee Go Home" but then he started acting suspicious and turned on other members of the group.

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

</comment><comment><USER17> paywall :(

<comment><USER18> If you have Firefox, open Reader View (CTRL+ALT+R) and reload. (Assuming it's the same issue I had, viewing in a private window.)

<comment><USER19> Or disable JS, e.g. the </> button in uBlock. That disables images as well, which is mostly a downside.

</comment></comment></comment><comment><USER20> Just read the opening two paragraphs. Whoever wrote that is totally clueless about how the Mormon church does its missionary assignments.</comment>