Modeling Message Queues in TLA+ - <AUTHOR> https://www.hillelwayne.com/post/tla-messages/ <comment><USER2> I'm reading Hillel's book right now and have just finished Chapter 2 (Intro to PlusCal). I really like it. I've had some failed starts in the past with TLA+. A few observations on the book:

a. The language is clear. I feel like making progress at a fairly regular pace. The examples so far could be replicated without any issues. I have both my Kindle and cloud reader open when I read. The screenshots are better in the cloud reader.

b. I believe it was a great decision to use PlusCal instead of TLA+ itself. One of the issues coming up to speed in the past was grappling with TLA+. PlusCal just makes it easier.

c. I hope that I can actually improve the quality of my C++ programs. I'm currently working on some infrastructure software for embedded systems and have implemented a Hierarchical State Machine "framework" in C++ ([https://github.com/tinverse/tsm](https://github.com/tinverse/tsm)). My goal is to add a pub/sub mechanism and create a HSM that can be distributed over a network. Reviews welcome. Since I just came across this book, going forward, I'll be attempting to develop my specs in PlusCal before actually writing code!

d. I think other (to be written) promising books/blogs in this category would be something in the flavor of "Specs to Code" for common design issues. With its focus on concurrency and distributed systems, that implementation language could very well be Rust. Any pointers on porting C++ code to Rust? I'm trying to port above mentioned C++ code to Rust. Respond directly if you can. I don't want to turn this into a discussion on Rust.

<comment><USER3> > One of the issues coming up to speed in the past was grappling with TLA+. > PlusCal just makes it easier.

I think this has both pros and cons. PlusCal, being essentially a formal pseudo-code, is much more _familiar_ to programmers than TLA+, and familiarity can greatly assist learning. The downside is that TLA+ is much simpler -- though far less familiar -- than PlusCal (or any programming or programming- like formalism), as it shares the complexities of code (although programmers are used to ignoring them), and at some point if you work with PlusCal you will have to learn and understand it and go through the necessary process of "unlearning" code and thinking in simpler terms. Some may find it easier to start with that and see why any code is more complicated than you may think; after that, learning PlusCal comes for free once you see the translation to TLA+.

Personally, I find writing specifications in PlusCal less convenient and less clear than writing them in TLA+, unless you must reason at the code level (like in the case of low-level concurrent algorithms, where interleaving of particular _instructions_ is crucial). PlusCal, however, has the advantage of being more communicable to those unfamiliar with TLA+, as it reads like pseudo-code.

> something in the flavor of "Specs to Code"

If a programmer can turn an informal specification (or even a set of requirements to code) then transforming formal ones, which are more precise, shouldn't be an issue. But on a theoretical level, once you become more comfortable and experienced with TLA+ you'll see that the notion of specs to code is a special case of a very general and powerful concept called refinement, which forms the very core of TLA -- the Temporal Logic of Actions -- the logic at the heart of TLA+. In fact, in TLA, the ordinary logical expression A ⇒ B, i.e. A implies B, means A _refines_ or _implements_ B (and conversely, B _abstracts_ A).

<comment><USER4> I find that learning raw TLA+ to the point where you're comfortable reading it and internalizing what the spec is saying to be a _critical_ skill to be able to write specifications successfully. This is because PlusCal translates directly to TLA+, which means that:

1\. To debug errors given to me by TLC, I generally find that it's easier to look at the TLA+ spec directly.

2\. It is sometimes easier to see what your algorithm is doing directly in TLA+. I find that I will write the algo in PlusCal, it gets translated, and I can get a better understanding of how the system works by looking at the TLA+ spec. Example: the "process model" of PlusCal does hide some of the ideas. Multiple process are just P1 \/ P2 \/ P3 ....,

3\. There are some oddities within PlusCal (label placement, the with statements) that makes much more sense if you understand the TLA+ foundation.

What I really wish is that I can write partly PlusCal and partly TLA+ for maximum flexibility. However, it's kinda ackward to do within the current framework.

<comment><USER3> Right. In addition, you miss out on the notion of refinement (ordinary implication in TLA+) which is the most powerful (and most foundational) idea of the formalism. But I think many developers may be threatened by the unfamiliarity of TLA+, and PlusCal serves as a gateway drug, as it's often useful enough on its own (you're right that you need to know at least a bit of TLA+ to understand some of the tooling's output). If "PlusCal first" makes TLA+ less threatening and hopefully more approachable to many developers, then the approach is doing its job.

(BTW, I wouldn't call it "raw TLA+" as "raw TLA" is a particular logic that Lamport uses to introduce TLA, so the term may be confusing.)

</comment></comment></comment></comment><comment><USER5> Can anyone comment on where exactly lies the line between, too simple to need formal specs, vs crazy to build it without them?

What would be the simplest system for which you would recommend taking the time to make a formal spec?

<comment><USER6> I readily use TLA+ or PlusCal whenever I am reasoning about a system which may (if buggy) experience deadlock, starvation, race conditions, etc. This includes most systems involving two or more communicating processes. (The exceptions are those systems, such as a simple pipeline, where communication is trivial and acyclic.)

It's perfectly suited to this domain of problems, which also happen to be those which are difficult for humans to reason about (owing to the sheer number of possible interleavings of execution between two or more processes).

And TLA+, an especially PlusCal, are simple enough that no system is really "too small" to be modeled. E.g. a PlusCal model of a simple pipelined server (say, reading stuff from the network and writing asynchronously to disk) is maybe ¼ to ½ the size of the actual implementation, with half as much again worth of invariants.

<comment><USER7> Exactly what I was feeling in my gut... but then what is the overwhelming advantage over rust that as far as I know is designed _specifically_ for this kind of problems but is much easier to reason about, at least coming from standard programming?

<comment><USER6> The primary benefit of TLA+ over _any_ general-purpose language is that it – as a modeling language – allows you to elide those parts of your system that "don't matter". To continue my earlier server example, when modeling, I probably don't care specifically which functions I'm using to read data from the network, under what conditions they produce which errors, or how the OS might decide to schedule them. I just care that such a function _exists_ , that it _may_ error out, and that it gets scheduled _somehow_.

Then, as a consequence of clearly expressing all the behaviors my system _might_ express, TLC (the TLA+ model checker) is able to _exhaustively search_ these possibilities for bugs. This is at best intractable for any system where you are unable to abstract out the things that "don't matter", like in Rust. There are just too many variables (literally) in the search space.

That said, there's nothing _particularly_ special about TLA+, or especially PlusCal. They just provide language features such as first-class sets and clearly-defined atomic state transitions that make it very easy to describe a system without too much irrelevant "stuff". The only particularly notable feature of the modelling portion of the languages is nondeterminism, which is necessary to express the boundaries of your model (e.g. nondeterminism is how you model the "receive from network" function as "a function that either returns some data or throws some error").

One could even imagine using Rust (to use your example) as a modeling language. You'd need to add nondeterminism (or another means of specifying contracts), and a way to specify temporal invariants to check. And also annotate which functions act as mutexes and which may block waiting for I/O. And you'd probably want to stub out container types so the model checker doesn't have to model their implementations. But once you've done all that, your mutant Rust is starting to look a heck of a lot like PlusCal, only more complicated.

</comment></comment></comment></comment><comment><USER8> For those who have used modeling tools like TLA+ and Alloy in industry -- could you give an example of at what point(s) in the development process you used the tool and how long it took?

I'm intrigued, but having trouble visualizing how even lightweight formal methods can fit into an agile development process at a startup building a web application.

<comment><USER9> You might create a TLA model during the initial specification process to assist you in thinking through your problem. You would then update the model going forward as your understanding of the domain improved and as system requirements changed. However, you could write a specification for an existing system as well. Any processing where the complexity seems greater than ones reasoning ability or that needs assurance guarantees, could signal the need for a high level description to guide engineering efforts.

An initial model might take 4 hours to put in place. The time would be spent thinking through how best to abstract the modeled process and its logical properties, slowly building up a more and more complete set of events, and checking the model by running it as one goes. With an initial model, additional hours would probably be spent here and there adding enhancements and finding ways to do things better, just like one would do with regular code. The model would effectively exist over the lifetime of a corresponding code artifact and guide work on the artifact.

For a standard web application that mostly does reads and writes to a database, there usually wouldn't be any need for a tool like TLA to help you reason. A general use case for TLA is describing systems where there are multiple processes or threads coordinating on some sort of shared state.There would be indeterminacy in the order in which events happen. There could be the possibility of failure and the need to handle it gracefully.

<comment><USER10> Web applications can be surprisingly complicated distributed systems, when you take into account..

\- the JS frontend that communicates with AJAX and/or WebSockets IPC with the backend

\- the backend may actually be a bunch of microservices

\- the fact that there are many concurrent frontends (users)

\- messages from frontends may end up reordered/dropped/rerouted on their way to different backend ipc channels (microservices or replicated backend)

\- the frontends are untrusted (the user or browser may tamper with your code running there)

\- the backend server is also often replicated / sharded

\- there are caches (think Redis) that the backends share in addition to the main DB.

\- load balancers, high-availability reverse proxies with various failover propreties, etc

\- various caching behaviours that are only partly under your control (browser-side content caching, DNS, etc)

\- all of the above are interconnected over unreliable channels

\- there are secrets and security involved so functional assurance ("pressing button X always makes function Y happen") doesn't tell you enough

(I have no TLA+ experience so can't say how one would use it with a web app, though).

</comment></comment></comment><comment><USER11> i've encountered TLA before and am a complete newb. That being said, I've wanted to use it for modeling distributed systems but felt the learning curve was too steep. Now many years later, I think i'm finally going to take another go.

Would love to know where the TLA community hides. I dont see much real info on it in the wild.

<comment><USER12> Haven't used it, but this site looks like a great resource and is in my queue to go through.

[https://learntla.com/introduction/](https://learntla.com/introduction/)

<comment><USER13> I was working on gathering my links and that was one I was going to suggest. It's a very approachable intro, and also written by Hillel. I've added his (now published) book to my queue to purchase and read through. I may do that sooner rather than later so I can provide feedback here on other discussions regarding it, beyond saying that it exists.

The talk linked at the top of that page is pretty good as well as a tutorial, though hardly complete. As I recall he presents his examples well and has good motivating examples for using TLA+ in it.

</comment></comment></comment><comment><USER14> While I'm reading this, I feel more and more like asking: Am I the only one that finds TLA+ much easier to read and write than PlusCal? It's an odd thing to say, with PlusCal positioned as the easier option.

<comment><USER2> I didn't know about the PlusCal option until I saw Hillel's book and it clicked with me instantly. Might be the damage done by programming.

Objectively, PlusCal is a higher level language. So it _should_ be easier than TLA+ right? More specifically, look at [https://pastebin.com/cwZaApmH](https://pastebin.com/cwZaApmH). The top half is PlusCal and bottom half (after \\* BEGIN TRANSLATION) is the translated TLA+ code. PlusCal reads more like pseudocode. Maybe with some more training/effort the TLA+ would be obvious as well.

<comment><USER15> One thing I want to caution is that that's the translation of PlusCal to "raw TLA+". If you were not using PlusCal, you might write it a different way. For example, you wouldn't need a `pc` variable because you could express sending and receiving as short guarded actions.

</comment></comment></comment><comment><USER16> For people who have experience with TLA+ do you generate implementation code from the TLA+? Or is the idea to only use it for some formal design specifications?

<comment><USER17> TLA+ is only for specification. In one of the papers on it Lamport mentions just putting a copy of the specification in a comment above the implementation. If you get a bug you just need to find where your implementation differs from your specification which he finds is usually pretty easy.

If your code doesn't have a specification (of course usually less precise), fixing bugs is incoherent. How can you say come behavior is a bug?

<comment><USER16> Yeah but why not generate code from your specification? Or create a model of the specification that you can interrogate in code?

<comment><USER17> You would need to include irrelevant details. TLA+ is an actual declarative language, so it's not executable, but it can be model-checked.

</comment></comment></comment></comment><comment><USER18> This seems as good a time as any for my mild rant about the formal modelling toolchain...

A few things recently made me want to try out these techniques at work. Basically some issues we'd been facing, combined with reading Hillel Wayne's "Augmenting Agile With Formal Methods" blog post.

So I read a little bit (I have no prior experience with any of this stuff) and decided to try out TLA+

First downer is I seem to have to download a 500MB Eclipse-based dedicated IDE to be able to follow any of the tutorials. Seems like a bad omen.

Next I have the inevitable problem with wrong JVM runtime on my system... as ever, the "write once, run anywhere" promise pushes these issues down to the end-user rather than having the author compile working binaries for common platforms. [https://github.com/tlaplus/tlaplus/issues/194](https://github.com/tlaplus/tlaplus/issues/194) No matter, solved easily enough.

Ok so I'm stuck with a clunky unfamiliar IDE, but that's ok for now because to start out I will just be copy and pasting code from Hillel's beginner tutorial [https://learntla.com/introduction/example/](https://learntla.com/introduction/example/)

Within minutes I have put the IDE in an unusable state: [https://github.com/tlaplus/tlaplus/issues/195](https://github.com/tlaplus/tlaplus/issues/195)

At this point I'm thinking - these are just text files like any other language, why can't I edit them in my usual IDE and then run the model checker from the command line?

This is technically possible. But this scenario is not well documented. You can download the tools from here [https://lamport.azurewebsites.net/tla/tools.html](https://lamport.azurewebsites.net/tla/tools.html) The tools have no --help output explaining what args they need.

They are not stand-alone command line tools either. They're just the source code, which you run directly against java.

There is a .jar file available for download which might be some attempt at a packaged version of the tools, but who knows how to run it... Googling for instructions turns up this thread from 4 years ago, someone asking exactly this question, which goes unanswered [https://groups.google.com/forum/#!topic/tlaplus/R9amI13F_-M](https://groups.google.com/forum/#!topic/tlaplus/R9amI13F_-M) ...the thread ends with a dismissive post from Leslie Lamport ridiculing such stupid ideas as having some documentation published on a website, and recommends everyone use the Toolbox IDE instead of trying to run the cli tools themselves.

At this point it's quite clear to me why more people don't use TLA+, and it has nothing to do with the weird syntax or unfamiliarity with temporal logic.

Since I still wanted to experiment with modelling I switched to Alloy. This also requires you install a dedicated (and rudimentary) IDE. At least this one actually works and I was able to experiment with some basic models of my own design.

I could not see any stand-alone cli tools for Alloy but they do provide some basic instructions for using it programmatically in your own Java project [http://alloytools.org/documentation/alloy-api- examples.html](http://alloytools.org/documentation/alloy-api-examples.html) (I'd prefer something accessible from Python, like a C library, but that's ok)

I do understand that visualisation (Alloy) and presentation of complex results (TLA+) are an important part of the development process, and this is presumably what motivated both to provide via their own IDE.

But clearly where the expertise on these teams lies is in the computer science, logic, model checker areas. Tying all of this brilliant and clever stuff to a cumbersome GUI app which is not your core proficiency to deliver seems like a very bad idea. A dose of the 'unix philosphy' would be beneficial I think.

Think from the user perspective - I'd much rather use my usual IDE, which has great editing tools, a nice colour scheme, doesn't crash or become unusable, and is totally familiar and comfortable.

Ok, it still needs a front-end for model-checking results... but imagine if the checker tool was well documented and provided structured output in a common format (json, graphviz .dot, whatever)... if these tools really are useful then I'm sure pretty soon you will have multiple front-ends created by people who are good at that.

It seems sad to me that a small and brilliant community are wasting so much effort on making bad software, instead of making great tools which other people can build great software with.

<comment><USER18> I'm not the only one it seems [https://lobste.rs/s/8rfign/modeling_message_queues_tla](https://lobste.rs/s/8rfign/modeling_message_queues_tla)

That said, I bought Hillel's book and will come back and try again with TLA+

</comment></comment><comment><USER19> Hopefully you already know what TLA+ even is, because the article won't tell you.

<comment><USER13> Does _every_ article need to be an introductory article to a topic including a summary of what the thing is? Should every Python article start with:

      Python is a language developed by Guido van Rossum and
      named after the comedy troupe.

?

Hillel even gives you an out early in the article:

      This post assumes knowledge of TLA+

Followed by links to two earlier articles which offer better intros to TLA+ itself.</comment></comment>


My resume in an Operating system - <AUTHOR> http://www.mathieupassenaud.fr/resume/ <comment><USER2> Assuming that employers are going to stumble upon the HTML version of your resume, I would cut out this line from the top:

> _Hates design & frontend._

There's only so much above-the-fold space on a webpage (especially on mobile) and it's not worth devoting such valuable real-estate telling people how much you hate _anything_ , nevermind two important skillsets.

Also, your design sense seems to be fine, and you obviously care enough about front-end code on your webpage to have decent typography and legibility and not just use Bootstrap right of the box.

edit: "above-the-fold" meaning top-of-the-page. Sorry, read too many newspapers in my day

<comment><USER3> Probably an even bigger problem is that this resume is now going to come up every time a recruiter searches for "design & frontend".

(This might not be a problem in France. Here in the San Francisco area in the U.S. it seems common for recruiters to blindly contact the first 200 developers whose resumes contain relevant keywords.)

<comment><USER4> Incidentally, they blind keyword use is easily (ab)used to get past their initial filtering, by working in honest mentions of things you _don 't_ have experience with but which will fit relevant keywords. "I don't have much experience with X, but have worked extensively with Y and Z"

Need to be careful about overdoing it, of course.

<comment><USER5> "Here is a list of all computer skills, with a check mark next to the ones I have:"

<comment><USER6> call it a todo-list

write it an mvc todo page / server for each

</comment></comment></comment></comment></comment><comment><USER7> Nice, but [http://r.dakko.us/](http://r.dakko.us/) is still the winner in my book.

<comment><USER8> >If you mount the CD, /self.pdf is a recursive entry that contains the entire CD - it, too, should open in your favorite PDF reader.

I didn't even know this was possible in ISO 9660 format. Seems like my next weekend project will be implementing an ISO reader... I wonder if JSMESS has support.

<comment><USER9> The trick is that ISO 9660 sector IDs used in file offsets are relative to the start of the disk, so you can craft a file entry with offset 0 and size equal to the length of the CD.

</comment></comment></comment><comment><USER10> I'll share this here since I have something similar/relevant.

My resume is a Go package:

[https://github.com/shurcooL/resume](https://github.com/shurcooL/resume)

People can leave "reactions" (like on Slack) in my skills section, as my tongue-in-cheek play on LinkedIn's endorsements. It renders the HTML entirely on the frontend (try viewing source at view- source:dmitri.shuralyov.com/resume).

As the README says, it's not to be taken too seriously.

</comment><comment> brian-armstrong This is a neat idea. Now throw it through emscripten for a live demo ;)

Edit: rather, put a vm (qemu?) through emscripten and load your os on that

<comment><USER11> v86: [https://copy.sh/v86/](https://copy.sh/v86/)

</comment></comment><comment><USER12> Nice. I am a little confuse on the different types of education you haven taken. What is a professional degree?

<comment><USER13> If I remember correctly, it's a sort of co-op degree in France where you spend part of your time in an educational facility, and some time in a company. The ones I've seen last about a year if I'm not mistaken.

There's a bit of a naming confusion going on. First, the title Engineer. In France, many universities propose the title "Ingénieur" (Engineer), but _not all_ have the seal of the Commission des Titres d'Ingénieur (CTI). If one wants to be an Engineer's Engineer, they must look up the University and see if the CTI sort of recognizes that degree as "Ingénieur", or a "true Scotsman".

<comment><USER14> > it's a sort of co-op degree in France where you spend part of your time in > an educational facility, and some time in a company

In France this is called "alternance". I don't know about OP but you can have a "Licence professionnelle" with or without "alternance"; it depends on your school/university.

<comment><USER13> Without "alternance" as in full time in school or full time in company? I'd guess the latter since the name is "Licence _professionnelle_ " and not spending time in a company would defeat the purpose.

<comment><USER15> Full time university. Full time in company getting you degrees is... quite hard in France

The "Professionelle" part is more about the fact that after it you should not continue studying but go for a career.

<comment><USER13> Oh, okay.. I see now. This category has its own ministry here, neither with "Ministère de l'Enseignement Supérieur et de la Recherche Scientifique", nor with "Ministère de l'Éducation". They have a "Ministère de la Formation et de l'Enseignement Professionnels".

They get in with a _different_ baccalauréat UFC (Université de la Formation Continue) which anyone can take even without necessarily being enrolled in high-school.

Some of those who are enrolled in high-school hedge their bet and go for regular BAC and UFC BAC. They often fail the regular BAC but succeed at the other and enter UFC which has classes inside "real" universities after hours. Not dedicated classrooms, though.

They came out of class one day and I said I've never seen them around (they didn't look the part) and they informed me who they were and talked about what they were learning, etc.

</comment></comment></comment></comment></comment></comment><comment><USER16> What would be more impressive to me and practical would be spending time contributing to the Linux kernel. That is something that companies would more likely be interested in.

<comment><USER17> This is kind of dismissive, mean, and misses the point. It's like watching a person make 100 free throws in a row, then saying you'd be more impressed if he go into the NBA.

It's an order of magnitude more difficult to make a meaningful contribution to the Linux kernel, so of course it would be more impressive.

<comment><USER16> > It's an order of magnitude more difficult to make a meaningful contribution > to the Linux kernel

Any contribution that is kept is meaningful.

He could start by taking the Eudyptula Challenge: [https://www.linux.com/blog/learn-how-contribute-linux- kernel...](https://www.linux.com/blog/learn-how-contribute-linux-kernel-take- eudyptula-challenge)

Or he could read one of the many other resources out there about how to get started: [https://www.linux.com/news/three-ways-beginners- contribute-l...](https://www.linux.com/news/three-ways-beginners-contribute- linux-kernel) [https://kernelnewbies.org/](https://kernelnewbies.org/) [https://www.quora.com/What-is-the-best-way-to-start- contribu...](https://www.quora.com/What-is-the-best-way-to-start-contributing- to-the-Linux-kernel) [https://www.kernel.org/doc/Documentation/development- process...](https://www.kernel.org/doc/Documentation/development- process/1.Intro) [https://www.kernel.org/doc/Documentation/SubmittingPatches](https://www.kernel.org/doc/Documentation/SubmittingPatches) [http://helenfornazier.blogspot.com/2015/06/linux-kernel- how-...](http://helenfornazier.blogspot.com/2015/06/linux-kernel-how-to-start- contributing.html) [http://ozlabs.org/~rusty/Stupidity.html](http://ozlabs.org/~rusty/Stupidity.html) [http://stackoverflow.com/questions/4576332/i-want-to- contrib...](http://stackoverflow.com/questions/4576332/i-want-to-contribute- to-the-linux-kernel) ...

</comment></comment></comment><comment><USER18> This kind of thing is an excellent answer to "I need to have a github to get hired, but all my work is copyrighted and NDA'd". Rather like a "masterwork" in the context of the old craft guilds. An overly-elaborate demonstration of skills as proof of credentials.

Some electronics hobbyists have various sorts of circuit board "business cards" that serve this purpose. I've been considering doing one of those myself.

</comment><comment><USER19> Very nice, although I want to point out that this page contains many typos - you probably want to run a spell and grammar checker over your blog posts and your resume as many employers may screen due to these.

</comment><comment><USER3> Very cool. I've toyed in the past with the idea of making a bootable CD that launches a minimal Linux desktop with a PDF reader and a copy of my resume, but this is one better.

</comment><comment><USER20> Interesting idea.

</comment><comment><USER21> brilliant!</comment>


University of Sussex boffins find new use for nuclear waste - <AUTHOR> https://www.theargus.co.uk/news/18171376.university-sussex-boffins-find-new-use-nuclear-waste <comment><USER2> "The depleted uranium mixture created by the chemists was used to convert ethylene, a material used to make plastic, into ethane.

Ethane can then be transformed into ethanol, an alcohol which can be used to power cars."

The primary source of ethylene is petroleum.</comment>


Should you keep your pride as a development lead? - <AUTHOR> https://robertwozniak.blog/article/should-you-keep-your-pride-as-a-development-lead <comment><USER2> 1\. Link goes to a 404

2\. The role of a lead varies widely from one shop to another. In some it's just the first among equals, in others it's the most senior in terms of time with the company, in others a lead is formally a manager.

3\. Pride in your ability isn't a bad thing; being an asshole about it is. While the role of a team lead varies by the company what seems consistent is that the leads go to far, far more meetings than non-leads. As such, about that is there to be prideful: that you spend more time in meetings instead of programming?</comment>


Ask HN: So I just got my Google+ invite, now what? - <AUTHOR>

Any advice on who to follow, things to check out, etc.? <comment><USER2> <http://socialstatistics.com/>

[https://plus.google.com/111091089527727420853/posts/5VJd6Wuu...](https://plus.google.com/111091089527727420853/posts/5VJd6WuuC3A)

[https://plus.google.com/117702410245683101961/posts/Sf43DmUp...](https://plus.google.com/117702410245683101961/posts/Sf43DmUpaxa)

</comment><comment><USER3> Please consider the advice on the following link and add all those listed there so that you may then connect to many other HN users already on the system <http://news.ycombinator.com/item?id=2717503>

</comment><comment><USER4> Invite a bunch of friends by sharing posts with them. It seems to work...

</comment><comment><USER5> I got mine yesterday.

This is probably the coolest new product I've played with from Google or anyone else for that matter for a very, very long time.

</comment><comment><USER6> Invite me?</comment>


The Hardest Thing In Programming - <AUTHOR> http://blog.adambard.com/2008/09/17/the-hardest-thing-in-programming/

<comment><USER2> I think reinventing the wheel has its place. It has two benefits:

1) You get a better grasp of how the wheel works.

2) You may invent a better wheel.

Of course, that's not to say that I think everyone should start re-writing everything they've ever programmed from scratch, but if we never tried anything new we'd still be using big stone wheels (The Flintstones cartoon comes to mind).</comment>


Does anyone in Silicon Valley care about Windows anymore? - <AUTHOR> http://scobleizer.com/2011/04/12/does-anyone-in-silicon-valley-care-about-windows-anymore/

<comment><USER2> I have a feeling that the prevalence of Linux on the server side has a lot to do with Mac usage amongst users in Silicon Valley.

A lot of the reason I switched to a Mac was because of my increasing use of Linux servers. Once our team decided we wanted off the .NET train (some time around 2003), we started looking at alternatives. At the time, shared Linux hosting was much cheaper than Windows hosting, and there were an ever- increasing number of scripts that solved common problems. The "sharing" philosophy in the Linux development community gave us greater choice and access to a lot of good (and bad) projects to learn from.

Interacting with Linux servers from a Windows machine is completely doable. There are tools like Putty, WinSCP, and Cygwin, that give you a local Unix- like environment on your local machine, but they always felt like a guest, not a resident.

Because OS X is Unix at its core, interacting with Linux servers is natural. All (nearly all) the commands and scripts that you use locally will work on your server.

The only remaining question is, "Why not just use Linux on the desktop." Ubuntu is great. I regularly run an Ubuntu VM on my last Windows PC. Before I sold my last PC laptop, it ran Ubuntu 9.04. I don't dislike Linux. To the contrary, it brings me a lot of the same joy that my Mac does, but there is a lot of Mac software that I like better. There are equivalents on Linux, but I like the Mac software better. That's a good enough reason to go with the Mac for me.

</comment><comment><USER3> It's not just that "well, Silicon Valley is just weird and they all buy Apple stuff", tech enthusiasts are very likely to have Macs also due to the peer pressure. It's almost uncool to have anything else...

Personally I use Windows 7 and don't see myself switching unless MS does something stupid (e.g the activation that called home on each bootup).</comment>


Twitter would like you to read stories before you retweet them - <AUTHOR> https://www.theverge.com/21286855/twitter-articles-prompt-unread-feature-conversations <comment><USER2> Twitter already retrieves the content of pages that people link to in most cases, since they summarize the content in the form of a page preview (thumbnail, title, etc).

I'd imagine that the reduction in knee-jerk retweeting, and improved understanding of the news by users when they read articles -- and perhaps answer a machine-generated question or two about them -- could lead to significant improvements in discussion quality.

Hopefully Twitter would be able to develop metrics to measure that effect, and determine how it affects long-term user experience and value (bearing in mind that short-term engagement might drop a little).

Perhaps it'd be worthwhile always allowing users to skip dialogs like this, since it's arguable they somewhat inhibit free speech (assuming tweeting a URL is deemed free speech). Whether the user was informed or not about the content they posted could be used as a quality signal about the tweet.

</comment><comment><USER3> Wall St might dink them in the near term. But hopefully users get to benefit an overall better experience with the reduced amplification effects.</comment>


I Played God with the Odin's DIY CRISPR Kit - <AUTHOR> https://www.engadget.com/2016/06/30/i-played-god-with-the-odins-diy-crispr-kit/ <comment><USER2> so, the experiment is to make e coli resistant to antibiotic?</comment>


Show HN: Searchable library of React testing examples - <AUTHOR> https://github.com/skidding/react-testing-examples <comment><AUTHOR> Hey, auther here.

I posted the first version of this a few months ago, but I've now revamped the website and added examples with [https://github.com/kentcdodds/react-testing- library](https://github.com/kentcdodds/react-testing-library), which I discovered recently and like a lot!

Also new are examples of using [https://github.com/skidding/react- mock](https://github.com/skidding/react-mock), released just a week ago.

Finally, rewrote the about page to explain the project's goals better and made the repo more contributor friendly.

Let me know what you think!</comment>


Manna - <AUTHOR> http://marshallbrain.com/manna1.htm

<comment><USER2> I can only repeat what I said on one of the many previous occasions this has been mentioned:

Dreadful - absolutely dreadful. It starts so well, then just turns into a thinly veiled rant/diatribe/spiel about an overly optimistic forecast of what the future could, but won't, be like.

Bad writing, bad philosophy, bad predictions. Just awful.

<http://news.ycombinator.com/item?id=2828736></comment>


Large-scale conspiracies would quickly reveal themselves - <AUTHOR> http://www.ox.ac.uk/news/2016-01-26-too-many-minions-spoil-plot <comment><USER2> Not enough 1984 nor brave new world background. You don't need to be part of the conspiracy to work in leak control. Once you have an censoring organization to prevent leaks, and a media control to diminish/deny/joke about leaks that happened, that don't need to be part of the conspiracy, the dynamics can be different.

Think how many climate change denialists actually believe what they say vs the amount of that are aware of being paid but have a reasonable doubt about if is true or not, vs the actual conspiracy. You can have a big conspiracy with big numbers of participants but a relatively small amount people that actually knows the truth. And that small amount of people could have a control layer above them (that don't know the truth neither)

</comment><comment><USER3> The article says that only "Three genuine conspiracies" where used to estimate his model. That seems like a very small sample to me.

</comment><comment><USER4> Uhm. HELLO?! That's what they WANT us to think.

</comment><comment><USER5> Perhaps people that talk about climate change hoax and accuse the scientist of being part of a great conspiracy must read this study

</comment><comment><USER4> I wonder if the author could test the model against the Snowden leak -- how many people knew vs the time it took to leak.</comment>


Ask HN: How much would you pay for parse hosting? - <AUTHOR> <comment><USER2> What is parse hosting?

<comment><USER3> [https://news.ycombinator.com/item?id=10991729](https://news.ycombinator.com/item?id=10991729)

</comment></comment><comment><USER4> you could always use Parse pricing policy</comment>


Trump promises three new "big, big, big" Apple plants in U.S - <AUTHOR> https://www.axios.com/apple-mum-on-new-u-s-manufacturing-operations-while-trump-promises-big-2465398238.html <comment><USER2> Politics aside, Trump's lexical level keeps surprising me. And I am not a native speaker.

"I spoke to [Mr. Cook], he's promised me three big plants—big, big, big"

</comment><comment><USER3> are we sure they weren't talking about apple sauce?</comment>


A Tale of Two Qubits: How Quantum Computers Work - <AUTHOR> http://arstechnica.com/science/guides/2010/01/a-tale-of-two-qubits-how-quantum-computers-work.ars

<comment><USER2> _"If the phonebook has 10,000 entries, on average you'll need to look through about half of them—5,000 entries—before you get lucky."_

How could one possibly search a phone book so poorly? Even a dumb binary search would eliminate about half the remaining entries each time, getting the job done after only checking around 15 entries.</comment>


Mailiverse - Secure mail for everyone - <AUTHOR> https://mailiverse.com/

<comment><USER2> Sadly, this isn't a provider of "secure email", but a "secure" "email provider". Merely encrypting things at rest doesn't solve the reality of why email is insecure: email is insecure not because it's easy to hack into a server and read somebody's mailbox, but because it's easy to intercept huge amounts of email traffic very cheaply...

Having said that, cute interface and effort.

</comment><comment><USER3> /mobile.html is 404.</comment>


Proper Way to Start a Hardware Tech Company? - <AUTHOR>

Hi, I have an idea for a computer hardware company and I need some help on the hardware part. So I assume I need to get a prototype and then I use the prototype to get more money to launch full production? I am planning on charging about $300 for the item so I figure I need $10,000 to get a few prototypes made. Would that be correct? Where can I find more in-depth information on this aspect? Do I just incorporate and then contact Flextronics with my requirements sheet? Do I need to find an engineer here in the states first and then contact Flextronics? I kinda think I have a good idea of all this if I was doing software but I am unsure over hardware. <comment><USER2> Well, it depends on what exactly your design entails. Some hardware devices can be prototyped on pre-built development boards/platforms typically made available by the core chip manufacturer. If you need to build a demo to raise money, this is most realistic option if it at all works for you.

In case the "device" is such that it cannot be demoed without custom hardware, then you have no choice but to contract design and prototyping partners - there are a number of those. Again, depending on the quantity you may hope to sell one day, it might be best to contact a sales/business development representative of the company that produces your core chip (the central processor/SoC, etc - typically the component thats going to cost the most on your BOM). Such manufacturer can usually put you in touch with a "recommended" design partner who can spec your hardware, design it, produce prototypes of it, and even help you with software development. Such a partner is very useful as frequently (though not always) hardware prototypes take more than one "re spins" to get everything right.

(edit: also, the design partner usually can get you a lot better rates for the chips on your BOM via their contacts. )

I used to work for such a company (not in the US, though most of our clients were based in the US) and led dozens of such concept-to-prototype-to- production projects. I am well versed with the process. I might be able to give you better help if you ask more specific questions.</comment>


How the Nintendo Switch prevents firmware downgrades - <AUTHOR> https://hackernoon.com/how-the-nintendo-switch-prevents-downgrades-by-irreparably-blowing-its-own-fuses-884bd3b7a8ba <comment><USER2> The wording of the title makes for a kinda misleading implication. This is pretty standard - they're called e-fuses. It isn't "blowing" in the sense that an actual fuse does, but it is permanently/irreversibly writing bits to indicate the minimum version.

<comment><USER3> Apple and Google will coerce you into installing updates that irreversibly remove functionality, so think describing the fuses as being "blown" is the best word to use, since it implies damage being done to your device.

I can at least understand game console developers doing this. But it has become standard practice now.

I forgot my new pin on my iPad, and Apple forced me to take an update that I didn't want in order to restore it, which broke several features that I liked[1]. After iOS8, there is no way to decline updates, they will just keep getting downloaded.

My mother and grandmother both had their iPads hobbled by destructive updates as well. My Mom was going to give her old iPad 4 to one of her students so they could use this learning app, but Apple updated her iPad while she was sleeping one night, and iOS10 is so slow it is barely usable.

Can we please stop excusing this behavior by using neutral language? Companies clearly know that these updates are unwanted, or else they would let your roll them back. Retroactively removing features and damaging devices that people have paid for should be illegal.

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

<comment><USER4> Perhaps you don't work in software, but you definitely want constant updates for an internet connected device. Apple has a track record for providing software updates for a long time past initial device release. Do you think more manufactures should be following their lead? The "cyber" world would be a much more secure place with constant updates.

<comment><USER5> Perhaps you don't work with non-user-hostile software, but you definitely want constant _security_ updates for an internet connected device.

No reason for constant _feature_ updates to keep the cyber world secure. It's a shame some software vendors bundle them together inseparably.

<comment><USER6> On the other hand, you're implying that they should maintain patches for every single version of iOS released? Because every minor includes new features. That's asinine.

<comment><USER5> Ubuntu, a free, open source OS, maintains and backports security patches for n-2, n-1, and n LTS releases.

LineageOS, a free, volunteer-run open source mobile OS, maintains and backports security patches for n-2, n-1, and n Android versions for phones.

Red Hat, the maker of RHEL, a paid, open-source OS — and its free, open-source duplicate CentOS — maintains and backports security patches for 10 years.

Microsoft Windows 10, a paid, closed-source OS pushed aggressively by Microsoft to the point of being sued, bundles feature and security updates on users like every real-world installation is for beta-testing. The LTSB branch is not available/accessible to individual users, and it looks like that will also start bundling feature updates with security updates.

Apple's iOS, a paid, closed-source, locked-to-hardware OS that supports devices sold in the past three years bundles feature and security updates and aggressively pushes updates on people's devices. There is no LTS branch of iOS.

<comment><USER6> I'd argue that these operating systems are much, much simpler than the entire stack that is iOS and its built in applications and services.

<comment><USER5> I strongly disagree — not that that would be sufficient excuse.

It's not like the kernel and drivers are spread across disparate layers of the iOS stack. It's not like iOS doesn't have libraries and system services and thus has to duplicate code across disparate layers of the iOS stack. It's not like Apple can't or doesn't have special code accessible only to Apple's apps and iOS internals.

As of right now, there are only a handful of hardware configurations iOS has to support, and a single software configuration. Compared to the tens of different hardware and software configurations LineageOS has to support, or the hundreds of different hardware and software configurations Ubuntu and Red Hat have to support, or the thousands of different configurations Microsoft has to support, Apple's job here is a lot easier.

</comment></comment></comment></comment></comment></comment></comment></comment><comment> sjm-lbm FWIW, the concept here isn't exactly new - at least the Xbox 360 and a few other devices have had similar functionality[1].

[1] [http://www.tested.com/tech/585-how-efuses-work-and-why- theyr...](http://www.tested.com/tech/585-how-efuses-work-and-why-theyre-not- as-bad-as-you-think/)

<comment><USER7> The very first paragraph of the article made this clear already. It even mentioned the Xbox by name.

</comment></comment><comment><USER8> >Blowing a fuse is irreversible— once it's been set it can never be undone.

Sounds impossible, until you find out that if you don't blow them hard enough you can get fuse re-flow under hot conditions. Good fun to debug.

In theory (untested to my knowledge), if you super cool the chip you could lower the resistance of the fuse and prevent it from blowing and absorb heat around the fuse, but it's probably not all that practical for casual game players.

As for getting to the problem at hand (force downgrading your system), some potential solutions (nothing easy):

* Careful control over the chip's power and you could perform a power supply timing attack, tricking the processor logic. This seems like a bit of a stab in the dark though.

* Assuming the bootloader is loaded into some form of RAM, you could look towards modifying the RAM as the chip boots to contain some kind of "skip" code for set pins. Game consoles have hardly been beyond the realm of needing mod-chips to access different features...

* The other option would be to replace the chip containing the bootloader with a non-upgraded one.

</comment><comment><USER9> >It's theoretically possible to physically modify the SoC and replace the fuses, but it's so prohibitively invasive and expensive that it's not a real option.

Are there any examples of this being done? Not necessarily on the Switch, just with these sorts of fuses. It can be really interesting to see people repair SoCs, like in this iPhone repair: [https://www.youtube.com/watch?v=nap0gtds5tQ](https://www.youtube.com/watch?v=nap0gtds5tQ)

</comment><comment><USER10> Seems like you could still "downgrade" via an upgrade:

1\. Disable firmware digital signature verification (not sure if this is at the hardware level or not)

2\. Modify the older firmware such that its reported version is newer than your current version

3\. "upgrade" to the older firmware version

<comment><USER11> > 1\. Disable firmware digital signature verification (not sure if this is at > the hardware level or not)

That's supposed to be very difficult to do.

<comment><USER12> Exactly, every stage of the boot is supposed to validate the next stage before continuing.

The recently discovered bootrom exploits break that chain of trust, allowing unsigned code to execute.

</comment></comment></comment><comment><USER13> E fuses require a lot of power to burn in the fuse. So find the pin in the chip with high voltage, and suppress it to prevent e fuses from burning in.

<comment><USER14> I would assume that the firmware also verifies that the fuses have been burnt before continuing booting.

<comment><USER15> It does, but this prevents your system from being irreversibly updated by accident. I remember removing R6T3[1] on my Xbox 360 so that it wouldn't accidentally be updated to a non-homebrew/exploitable version. Without the resistor present, the voltage wasn't high enough to burn the eFuses. An update could run, fail to boot, and I could reflash it to the old version.

1: [http://www.free60.org/wiki/R6T3](http://www.free60.org/wiki/R6T3)

</comment></comment></comment><comment><USER16> How many fuses does it have?

<comment><AUTHOR> There are 256 bits in ODM_RESERVED, and 8 ODM_RESERVED, so I think there are 32 bits. That's 32 major FW revisions (as it seems they're only blowing a fuse for every X.0.0 version)

<comment><USER17> If there are 256 bits, wouldn't they just burn one bit per major revision leaving 256 possible revisions?

Is there something I'm missing here?

<comment><USER18> 256 bits in all ODM_RESERVED. There are 8 ODM_RESERVEDs. 256/8 = 32 eh?

<comment><USER17> Ahh, I didn't catch that and was thinking ODM_RESERVED_8 = 256 bits.

Thanks!

</comment></comment></comment></comment></comment><comment><USER19> Maybe for their next console they could wire the case so it will destroy some crypto chips when anyone attempts to open it. Another idea might be to wire in a radio clock with a set date in the future that causes a over voltage in the SoC, that could be more accurate than to rely on the obsolescence of the glued in battery. Also I think they should learn from Sim City (2013), I know EA eventually released a patch that put the server side single player code in the client again, but Nintendo should learn from that mistake.

But with all seriousness, Nintendo really should learn from the failures in their past, I mean come-on! I can _still_ play Zelda on my original Game Boy Pocket I can even replace the batteries without any tools, come on what were they thinking!

/edit although.. I do like that you damage the switch everytime you put it in the dock, must give them that</comment>


Create Your Own Social Curation Tools with If This Then That (IFTTT) - <AUTHOR> http://www.acquisitionengine.com/social-curation-tools-if-this-then-that-ifttt/

<comment><USER2> Smart stuff.</comment>


Github commit history link is hidden [UX] - <AUTHOR> http://tydeas.tumblr.com/post/63470815842/github-commits-link-hidden

<comment><USER2> The title is misleading. It isn't hidden. It's called "bad design". It would be nice to put a commit log icon in the sidebar.</comment>


Immer: immutable and persistent data structures for C++ - <AUTHOR> https://github.com/arximboldi/immer <comment><USER2> Author here, open for questions :)

<comment><USER3> How much does immutability/persistence cost in terms of performance and memory? Are there benchmarks against std::vector? E.g, are we talking about 10x or 100x slow down?

<comment><USER2> Performance is one of the goals, so I am benchmarking everything. I run benchmarks on Travis, locally on my machine, and sometimes on a Raspberry Pi 3. You can check some of the reports here: [https://public.sinusoid.es/misc/immer/reports/](https://public.sinusoid.es/misc/immer/reports/) (this is a bit hard to interpret without further comment).

So, the slowdown depends on the operation.

At the moment, comparing `immer::vector` to `std::vector`, example, for reading, using internal iteration (e.f. `for_each`) you get 1.5X, using iterators something like 2.5X, using [] something like 6X iteratively, something like 1.1 in random order.

Updating a single `int` element is like 100X. (This factor decreases with the size of the updated element, though!) But then, for example, `push_back` is only 1.1X std::list, and it does not rely on amortization, making it better for latency. Considering that you get access time similar to std::vector and persistence, it is a good deal. Also, with `flex_vector`, you get logarithmic slicing and concatenation, making these operations _faster_ than for std::vector (when using big-enough vectors). Also, I am working now on _batch updates_ via transients, so if you update 10 elements in a row, you don't pay 10 times 100X (basically, you only pay the 100X once, which is very much ok for most use-cases, think like a 1microsecond tax per mouse click ;)

There are lots of trade offs one can make (in general, one can make updating a bit faster by making access a bit slower). Also, it depends a lot on the memory management strategy, which can also be customized.

<comment> joatmon-snoo Are the benchmarks supposed to look like this, with tooltips all the way at the right?

[http://imgur.com/a/iY9hT](http://imgur.com/a/iY9hT)

I'm on Win7 x64 Chrome.

<comment><USER2> That's how they look for me too. I agree it makes it hard to see which bar is what, but it makes it easy to scan all the results numbers in order.

</comment></comment></comment></comment></comment><comment><USER4> > Postmodern immutable and persistent data structures for C++

What is a postmodern data structure?

<comment><USER5> They probably mean "trying to get on the hype train". I have nothing against immutable data structures, but that wording is just silly.

<comment><USER2> It was meant as a half-joke picking on how everything is now "modern" on C++.

The half-serious part is that there has been a trend in the last few years in the "modern" C++ community against Copy-On-Write, heap allocation, shared pointers, etc. Immutability kind of brings new life to these concepts...

</comment></comment></comment><comment><USER6> If anyone is looking for something like this for Java, there are a few of them, including my own FSet: [https://github.com/slburson/fset- java](https://github.com/slburson/fset-java)

<comment><USER7> What are some of the others you know of?

<comment><USER8> Another java library with persistent/immutable datastructures is javaslang.</comment></comment></comment>


22yr student adapts hybrid car technology to a bicycle - <AUTHOR> http://www.reuters.com/video/2011/09/30/new-york-student-brings-new-energy-to-bi?videoId=222127187&videoChannel=6 The basis of the technology is using a flywheel to store energy - <comment><USER2> a 15lb flywheel. Weight is death on a bicycle. As soon as you take that thing up any kind of incline it's like trying to dead-lift a barbell.

<comment><USER3> Then there is a big market for him in the Netherlands.</comment></comment>


CursedFS – Disk image that is simultaneously ext2 and FAT - <AUTHOR> https://github.com/NieDzejkob/cursedfs/blob/master/README.md <comment><USER2> IIRC Apple used to do something like this on their installer DVDs (back when they shipped the OS on DVDs). The Mac OS X installer was on an HFS+ volume pointed to by an Apple Partition Map (which would only be recognized by Mac OS X and the Mac's boot firmware), but the DVD also had an ISO 9660 header (that'd be recognized by Windows) pointing to Windows-compatible drivers for the Mac hardware. Completely separate volumes, with completely separate content.

<comment><USER3> Hybrid discs were common back in the CD-ROM era for games and multimedia discs. There'd be an ISO partition for PC executable installer and a Mac partition for the Mac version, and both partitions would have have pointers into a single copy of the large game data/video files that there wouldn't have been space to have 2 copies of on the disc.

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

<comment><USER4> The concept happened way before that too. Even though the Atari ST and Commodore Amiga had different floppy disk formats (and were bitter rivals), because they shared their main processor (MC68000) a great deal of games and software were available for both.

Occasionally, that happened on the same floppy disk, via a horrific sector format interleaving trick invented by Rob Northen (who did a lot of copy protection stuff at the time). Notably, the Future Publishing magazines ST Format and Amiga Format started out as the combined ST/Amiga Format and the "coverdisk" was exactly that - readable by both, with different files on each machine.

<comment><USER5> This reminds me that one of the filesystems that could probably be added into the polyglot is Amiga's Fast File System, as the superblock is in the middle. Rumor has it that this minimised seek times from anywhere else on the floppy, but I would think that one doesn't need to read the superblock that often.

</comment></comment></comment></comment><comment><USER6> When Apple created HFS+ they did a similar hack that would show the disk with a TeachText read me file named "where did all my files go?" if you tried to mount it as HFS.

That means, Macs with older versions of the OS would deal gracefully with a format they were never intended to run.

I remember thinking it was the coolest thing ever.

</comment><comment><USER7> For extra fun, fill them up with polyglot files!

[https://medium.com/swlh/polyglot-files-a-hackers-best- friend...](https://medium.com/swlh/polyglot-files-a-hackers-best- friend-850bf812dd8a)

</comment><comment><USER8> So the suspense is killing me :) ...if you insert a memory stick formatted this way into a Linux box, which one will show up?

(Forgive my ignorance if the answer is obvious -- I've only ever used Linux as servers, never as a desktop.)

And are there any other OS's that can read ext2? Neither Windows nor macOS seem to be able to, out of the box.

<comment><USER5> I actually didn't try to let it autodetect... until now.

        ~/cursedfs% sudo mount cursed.img mountpoint/
        mount: /home/kuba/cursedfs/mountpoint: more filesystems detected on /dev/loop0; use -t <type> or wipefs(8).

It's too smart :/

<comment><USER9> Props to whoever thought to check for the case of fricking polyglot filesystem images, though. Probably intended for something boring like corruption, but still, nice.

<comment><USER5> Apparently one could create something like this by accident in the early days of Linux: [https://twitter.com/makomk/status/1217542964995678209?s=20](https://twitter.com/makomk/status/1217542964995678209?s=20)

</comment></comment></comment></comment><comment><USER10> I'm pretty sure I managed to create one of these by accident when first using Linux, though with much messier results. Same root cause though: the ext2 and FAT superblocks didn't overlap, and back in the day some of the filesystem creation tools weren't so good at making sure to overwrite conflicting superblocks.

</comment><comment><USER5> Author here, happy to answer any questions.

<comment><USER11> Can you add ISO 9660 and/or UDF to the mix? Both do not use the first several kilobytes of the volume (hybrid CDs created by genisoimage use that trick to combine HFS with ISO 9660).

<comment><USER5> From a quick look at the specs, it would seem like it is possible to add either of those, but probably not both. I'll probably add this in "v2.0" \- I'm planning to redo this in a way that actually interleaves the filesystems, which would also allow the ext* part to be larger than 32 MB.

</comment></comment></comment><comment><USER12> This is cool as a computer forensics exercise: the FS could look empty on one side but hide a lot of structured informing the other.

<comment><USER13> I have yet to meet any filesystem forensic software that wouldn't immediately identify this. Pretty much everything I've ever used would just tell you that it found multiple filesystems and show you both. Recovering files is often possible even without any filesystem metadata at all.

<comment><USER14> To make that point with an example, my go to for any new disk image or real drive is disktype¹ which produces:

        --- cursed.img
        Regular file, size 4 MiB (4194304 bytes)
        FAT12 file system (hints score 4 of 5)
          Volume size 3.916 MiB (4106240 bytes, 2005 clusters of 2 KiB)
        Ext2 file system
          UUID 2D74B033-E8A6-4738-98B2-02BCC3F0D98E (DCE, v4)
          Last mounted at "/home/kuba/cursedfs/mountpoint"
          Volume size 64 KiB (65536 bytes, 64 blocks of 1 KiB)

1\. [http://disktype.sf.net](http://disktype.sf.net)

</comment></comment></comment><comment><USER15> The filesystems aren't synchronized, though. Quite misleading! I'm not sure there's a technical reason why they couldn't theoretically be synchronized (either in real-time via a custom fs layer or as cron task, etc).

<comment><USER16> I don't know if the title has changed, but "disk image that is simultaneously..." made it very clear to me that this would imply a static state carefully crafted file, not some synchronized dynamic file system driver.

</comment></comment><comment><USER17> Should be called pornfs, you can use it to hide porn.

</comment><comment><USER18> Seems pretty cool. Not sure where I personally would use it, but when interacting with legacy this could make things much easier.

<comment><USER5> I didn't envision a usecase, I just found the question of whether this is possible interesting. If I had to guess, this will break more things than it will help with - the filesystems are independent, not "synchronized".

<comment><USER19> Add encryption support for the ext2 part and it's a decent upper "security through obscurity" layer. If the wrong person finds your USB stick, they will likely only ever notice the FAT filesystem. Like for a spy dead drop use case.

<comment><USER20> This seems about as likely to work as hiding emails in the draft folder and not sending them. Computer forensics have looked at all the bytes on the disk, not just the active files reachable from the root directory, for decades.

<comment><USER19> I mentioned it as an additional layer. And it's not always a sophisticated adversary that might find it.

Snowden fooled everyone with an sd card inside a Rubick's cube.

<comment><USER21> Snowden did suggest that scene in the movie, but didn't say he'd actually smuggled anything like that.

[https://www.vulture.com/2016/09/edward-snowden-snowden- rubik...](https://www.vulture.com/2016/09/edward-snowden-snowden-rubiks- cube.html)

> "First of all, I just wanted to say that none of us know [how it happened]," > Stone said at the Q&A, when asked about how they came up with it. > "[Snowden]'s the only one who knows, and one day he may reveal it. And > number two, it was his idea — it was a suggestion that we responded to and > ran with."

I'd imagine they would have done forensics if he was caught with an sd card at a checkpoint, but I'm not sure one would set off a metal detector in the first place. It's more likely a security org would epoxy the sd and usb slots on computers with confidential data, or have audits for any usb devices the hosts encounter.

<comment><USER19> Some more context...

 _" He [Snowden] said that the Rubik's cube was put in for the film and he wouldn't be divulging how he smuggled out information. However, he added, everyone in the office did have a Rubik's cube. "So they were floating around and coming in and out all the time," he said."_

[https://heavy.com/entertainment/2016/09/snowden-rubiks- cube-...](https://heavy.com/entertainment/2016/09/snowden-rubiks-cube-what- really-happened-how-did-he-to-smuggle-out-information-security-guard-movie- accurate/)

To me he's at least suggesting a similar glaring shortfall in CIA processes that let him smuggle it out.</comment></comment></comment></comment></comment></comment></comment>


Terminal app for the Kindle - <AUTHOR> http://info.iet.unipi.it/~luigi/kindle/

<comment><USER2> Is there a good central website for Kindle hacks?

Moreover, I cannot imagine Amazon is happy about 3rd-party code accessing the 3G which is paid by Amazon...

<comment><USER3> There was supposed to be a Kindle app store. Not sure what happened to it.

<comment><USER4> There are some apps in the normal Kindle store (mostly games), but no separate app store.

</comment></comment></comment><comment><USER5> The Kindle can run code?! I am so sad I didn't get the 3G one...

<comment><AUTHOR> Yeah, it kind of makes it an awesome way to check in on your servers while you're on the go, with the free 3G on Kindles. Of course you'll get similar (100mb free 3g) with Chrome netbooks when they come out.

<comment><USER5> Only in the US, though...

<comment><USER6> isn't their free 3g worldwide? Though stripped down or something?

<comment><USER5> No, I meant the Chrome netbooks.

</comment></comment></comment></comment></comment><comment><USER7> I'm having trouble figuring out how to run the program. Looks like I need a root shell? Any tips would be helpful - spent about an hour researching.

</comment><comment><USER8> This guy teached me shell scripting during college.

I've enjoyed his class.</comment>


Reverse-engineering censorship in China - <AUTHOR> http://www.sciencemag.org/content/345/6199/1251722 <comment><USER2> Censorship in China is a fascinating topic for me, because it's an area where we can use technology to figure out things about social issues on the other side of the world.

A great example of this is cases where chat clients use client-side censorship lists; in this case you can extract the entire list and essentially have a rich source of words the Chinese government is concerned about. For example (following on some excellent work by CitizenLab [1]), I recently extracted the LINE IM client's list of banned words [2].

The entries there are fascinating to read through; you get the feeling that there's a whole story behind many of them that's waiting to be told. Take for example, "江蟾蜍", which Google Translate glosses as "river toad". It turns out that this refers to an incident where a large inflatable toad was placed in Beijing's Yuyuantan Park [3], which someone then realized looked like former president Jiang Zemin.

I'm hoping to do more research reverse engineering Chinese censorship lists, hopefully even finding ways to efficiently probe server-side lists as well.

[1] [https://citizenlab.org/2013/11/asia-chats-investigating- regi...](https://citizenlab.org/2013/11/asia-chats-investigating-regionally- based-keyword-censorship-line/)

[2] [http://www.cc.gatech.edu/~brendan/line.txt](http://www.cc.gatech.edu/~brendan/line.txt)

[3] [http://chinadigitaltimes.net/2014/07/river-crabbed-toad- stor...](http://chinadigitaltimes.net/2014/07/river-crabbed-toad-story/)

<comment><USER3> An excellent book to read on this topic is Age of Ambition - Chasing Fortune, Truth, and Faith in the New China[1]

It discusses the topic of banned phrases like "river toad". In many cases what's happening is Chinese citizens find ways around the censors by searching for homonyms and other permutations of censored topics. Some of them are quite hilarious.

[1] [http://www.amazon.com/Age-Ambition-Chasing-Fortune-Truth- ebo...](http://www.amazon.com/Age-Ambition-Chasing-Fortune-Truth- ebook/dp/B00GET185M/ref=sr_1_1?ie=UTF8&qid=1410465579&sr=8-1&keywords=age+of+ambition)

</comment></comment><comment><USER4> The first paragraph of the section Results basically sums it up. In my personal experience, it is true, not only in the Internet, but also in everyday conversations. People can criticize the party and its leaders freely in their conversations, without any concern to be arrested.

"Criticisms of the state, its leaders, and their policies are routinely published, whereas posts with collective action potential are much more likely to be censored—regardless of whether they are for or against the state (two concepts not previously distinguished in the literature). Chinese people can write the most vitriolic blog posts about even the top Chinese leaders without fear of censorship, but if they write in support of or opposition to an ongoing protest—or even about a rally in favor of a popular policy or leader—they will be censored."

<comment><USER5> It sounds like this attitude can be summed up as "It's alright to complain, but don't talk about doing anything about it."

<comment><USER6> This isn't exactly a new idea. Private clubs were banned in the Roman empire specifically because of the risk of collective action (they didn't want clubs to be the seed of a rebellion). We have correspondence from a governor to the emperor where the governor says (paraphrased, obviously), "a bunch of the men locally have put together a firefighting group, so if a building catches fire everyone shows up and helps put it out. This seems like a decent idea to me, is it OK?" The response is "absolutely not".

</comment></comment></comment><comment><USER7> How are these results reconciled with well-documented censorship of any posts containing specific words?

I've personally seen social media posts with any mention of events like Tiananmen or political leaders blocked (often automatically by software), and a Chinese friend discovered she couldn't text the number '64' around June 4th (she was actually trying to send an address).

You can try it for yourself on a site like Renren (www.renren.com), just try posting something with the words 天安门 (Tiananmen), 习近平 (Xi Jinping, China's current President), or 周永康 (Zhou Yongkang, former PSC member).

The Chinese version of Skype (actually Skype, not a clone) even blocks words like 'fuck' (see: [http://www.nartv.org/mirror/breachingtrust.pdf](http://www.nartv.org/mirror/breachingtrust.pdf))

</comment><comment><USER8> Nice that someone has done this. It would be interesting to test it on US and European social networks as well. I found it particularly fascinating that griping was not censored but calls to action were. The idea of using griping as a way of evaluating leaders (in lieu of voting) seemed pretty interesting. One could argue that might work more widely.

<comment><USER9> I can't remember where I heard this, it was on some BBC program, but effectively one anon Chinese official was essentially pointing to what you're saying.

</comment></comment><comment><USER10> one of the coolest political science articles i've read. they have written several other papers on the topic. there most famous article on the topic is:

[http://gking.harvard.edu/files/gking/files/censored.pdf](http://gking.harvard.edu/files/gking/files/censored.pdf)

</comment><comment><USER11> Is the full article not pay-walled for anyone else?

<comment><USER12> Works for me (in USA). Do you have "Full Text" and "Full Text (PDF)" links on the left? Try this:

[http://www.sciencemag.org/content/345/6199/1251722.full.pdf](http://www.sciencemag.org/content/345/6199/1251722.full.pdf)

<comment><USER13> That link pops up a login screen for me.

</comment></comment></comment><comment><USER14> The censors are lucky to have a country-specific language.

<comment><USER15> Chinese is an international language, and an official language of several East and Southeast Asian countries, most of which use Mandarin syntax in their written form.</comment></comment>


Jix – A better way to Git on the command line - <AUTHOR> https://tomas.github.io/jix/ <comment><USER2> 1) Basically the same as `tig`. 2) Seemingly not open source.</comment>


The Roman typefaces used in Chinese and Japanese text - <AUTHOR> http://bellisk.blogspot.com/2012/05/roman-typefaces-used-in-chinese-and.html

<comment><USER2> Spotting the particulars of what people native to a different script do when using another is one of my hobbies.

\- East-asian students will have a hard time spotting typos even in important words as their own name

\- Even on designs with the most extravagant typography choices for their native fonts, choices for roman fonts are not prioritized

\- "Letter people" do the same thing the other way around ("OK, we got a nice asian feel to this poster ... now to add some cool chinese characters... done") It's exactly the same feeling for people used to seeing asian scripts, to see the basic printed version everywhere and the same old standard fonts.

Next time you make something using a foreign script, please keep in mind that how you're looking at it != how natives look at it!

For more on different traditional script styles see [http://en.wikipedia.org/wiki/Chinese_script_styles](http://en.wikipedia.org/wiki/Chinese_script_styles) However, the best information on font choices for Ch, Jp and Kor is in the languages themselves, unfortunately.

<comment><USER3> Can you give some examples of the boring standard font vs. more sophisticated Chinese font faces?

<comment><USER4> Related -- Due to Han unification[1], many glyphs you see on the screen in different languages share the same Unicode codepoint. The problem with this is that you no longer have an easy one-to-one mapping to have certain languages render in a desired font. It just so happens that Chinese business users prefer a much more traditional font than Japanese users. This doesn't necessarily affect "documents" that can have a defined language, because the language selection will be taken into account when the font is chosen. When you are writing software, however, that can mix any/all available languages on one screen (e.g. displaying a list of news headlines or even tweets), the programmer has to make a hard choice whether to do all the extra work to send down an explicit language tag (if one exists) next to each group of text elements that share the language so the font system can choose the correct font for a codepoint such as U+5168. If that work is not done (or parts of the pipeline don't carry that information along), the best you can have is a global setting that users can pick "I favor Japanese fonts" and then a Chinese headline could wind up rendered in two fonts -- all of the unified Han codepoints rendering in a much more modern looking Japanese font.

edit: [1]: [https://en.wikipedia.org/wiki/Han_unification](https://en.wikipedia.org/wiki/Han_unification)

</comment></comment></comment><comment><USER5> I couldn't find the exact page the author used, so I took a screenshot of that "ancient virus" story instead. This[1] is how it looks on a standard _English_ Ubuntu 14.04 system (no tweaking and no extra Chinese fonts installed). The English in it doesn't look half bad; there's even kerning!

As an aside, if you look at the top of my screenshot, you'll see a little lyric display on my taskbar. I use it to learn Japanese while I listen to anime songs. I wrote it in Python3 and there was _not a single instance_ where I had to bother with Unicode or encoding issues.

       with open(file) as f:
           lines = f.readlines()

works as is on Japanese files; I don't even have to supply the encoding. PyGTK and Gnome handles the Japanese text perfectly when I pass it to them. I'm throughly impressed by how far we've come in terms of Unicode support in programming languages, libraries, and the OS.

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

</comment><comment><USER6> i work in china,feels like half my job is adding & subtracting spaces from the strange type face here.

<comment><USER7> Unicode-wise, "w" {U+FF57 FULLWIDTH LATIN SMALL LETTER W} is the composition of the compatibility tag "<wide>" and {U+0077 LATIN SMALL LETTER W}. You can get rid of the compatibility tags by using NFK* (normal form _compatibility_ ):

        >>> s = "i work in china,feels like half my job is adding & subtracting spaces from the strange type face here."
        >>> import unicodedata
        >>> print(unicodedata.normalize('NFKC', s))
        i work in china,feels like half my job is adding & subtracting spaces from the strange type face here.

It doesn't actually have to do with typefaces, the typeface is just the system trying to find a font able to display those specific glyphs, which are compatibility forms for dot-matrix printers and fixed-width terminals: [http://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms](http://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms)

I'm guessing their continued use is because there are also aesthetic considerations at play for native readers, for whom variable-width latin script could look plain weird.

</comment></comment><comment><USER8> Note to HN readers: the final display is also relevant to your system's installed fonts and rendering priority settings.

Op's screenshot is also different from what normal Chinese user could see.

I can't find op's screenshot of the exact linked page, but here is my on rMBP+Safari screenshot anyway

[http://edu.qq.com/BBC.htm](http://edu.qq.com/BBC.htm)

[http://i.imgur.com/s7OCT2S.jpg](http://i.imgur.com/s7OCT2S.jpg)

<comment><USER7> The screenshot looks like a mobile version for a feature-ish phone. Which could explain the use of fullwidth characters (expectations of encoding or hardware limitations)

</comment></comment><comment><USER9> The parallel that springs to mind is that they look very similar to the NLQ fonts ('Near Letter Quality') used by dot matrix printers in the 1980s/1990s - and made, for the most part, by Japanese manufacturers: Epson, Star Micronics, etc.

At the time, NLQ was a passable imitation of real typesetting. But somehow it looks like that style has become fossilised as "how you write Roman characters".

</comment><comment><USER10> The biggest problem might be compatibility, old computers (common in China) only contain fonts that have low quality Roman parts like SimSun ([http://zh.wikipedia.org/wiki/%E4%B8%AD%E6%98%93%E5%AE%8B%E4%...](http://zh.wikipedia.org/wiki/%E4%B8%AD%E6%98%93%E5%AE%8B%E4%BD%93)) but this font is default Chinese typeface in Windows.

The newly designed fonts in recent years for Chinese have much better Roman parts which are already distributed by operating system or could obtained for free:

\- Microsoft YaHei in Windows [http://www.fonts.com/font/microsoft- corporation#product_top](http://www.fonts.com/font/microsoft- corporation#product_top)

\- Hiragino Sans GB in Mac ([http://blog.jjgod.org/2009/06/04/updates-on-font- changes-in-...](http://blog.jjgod.org/2009/06/04/updates-on-font-changes-in- snow-leopard/))

\- Source Han Sans free from Adobe ([http://blog.typekit.com/2014/07/15/introducing-source-han- sa...](http://blog.typekit.com/2014/07/15/introducing-source-han-sans/))

Many Chinese websites have already using one of them as their default font. There are also a dozen of commercial Chinese fonts which contain higher quality Roman typeface (although could not catch up most classic ones).

And for professionals (like book publishers or designers) in China, they often combine one Chinese font and one Roman font in their product for better result. (e.g. FZNew ShuSong + Sabon for Serif).

</comment><comment><USER11> > I assume this is similar for Japanese and Korean

FYI Korean script (Hangul) is actually an alphabet, so relatively easy to type.

Still, the topic of font choices remains interesting. While we have been accustomed to very differently looking typefaces for Roman scripts for a few hundred years, we know relatively little about CJK fonts. Does anyone know a good article describing Asian font choices in English?

It's not just "symbols" \- there's different ways to draw these lines, too, taking into account the purpose of the design.

<comment><USER7> > FYI Korean script (Hangul) is actually an alphabet, so relatively easy to > type.

Japanese is typed using kana, though they're syllabaries and have about twice the number of characters as hangul, the end-result is mostly similar (so is the on-the-fly transformative effect, in japanese kana entry is transformed into kanji OTF, in hangul jamo get merged into natsori).

<comment><USER12> Japanese _can_ be typed as kana, but most people type rōmaji (Latin characters).

<comment><USER13> Most people on a computer. Most people type kana on their phone.

<comment><USER12> Yes, that's true. Japanese is, luckily, a language quite suited to cellphone number pad input.

</comment></comment></comment></comment></comment><comment><USER14> Part of the reason for the "weirdness" is the blatant fact they're fixed- width, which is hugely important as so are kanji. That way you can intermix the two and the spacing won't completely fall apart.

<comment><USER15> Monospace fonts are fixed-width too and they don't look bad. The thing is that they're full-width.

</comment></comment><comment><USER16> It reminds me of how old German books written in Schwabacher used roman typeface for Latin and other foreign words. In this case, it was intentional, but I have always found it a bit irritating from the aesthetic standpoint. For example: [http://en.wikipedia.org/wiki/Antiqua%E2%80%93Fraktur_dispute...](http://en.wikipedia.org/wiki/Antiqua%E2%80%93Fraktur_dispute#mediaviewer/File:Initialen.jpg)

<comment><USER17> Similar to how we Americans put foreign words in italics, no? Does that look aesthetically irritating to others?

</comment></comment><comment><USER18> Ugh. I've done a lot of graphic design in Chinese, English, and bi-lingual documents and I absolutely hate that Roman typeface.

There are just far better fixed-width serif fonts out there and I always have to replace the English characters within Chinese documents with those fonts (I usually try to find one that matches in weight and blends in). Also not to mention a lot of English text within Chinese documents does not need to be in a fixed-width font to look good. There's a reason why there exist separate Unicode points for the fixed-width English characters when you do need them.

</comment><comment><USER19> [http://hangeul.naver.com/](http://hangeul.naver.com/) is a Korean typography and font distribution site by Naver.

</comment><comment><USER20> So, do speakers of these languages (maybe specifically in countries where this language is natively spoken) prefer these typefaces? As in, should I purposely be using these typefaces for "small snippets of English embedded in a page that is otherwise written in Chinese or Japanese" when I am optimizing content for these audiences?

<comment> barry-cotter A/B test it, it's the only way to be sure. I doubt most people can CJ(K) can even tell the difference. When proof reading Germans' English texts, one of the things that was regularly necessary was fixing punctuation to use English commas and apostrophes. I did this for people doing English degrees. Normal people will not notice this on any (conscious) level without training/education in it. It's like how you never noticed bad kerning before you knew what kerning was (typography, the gift that keeps on giving).

<comment><USER20> I did not specify whether the preference would be conscious or unconscious, and I disagree that me running the A/B test myself instead of asking if anyone else already knows the answer to the question already (maybe by having run experiments themselves) is the only way to be sure (well, OK, it is always the case that people I am targeting might be different than other people already studied, but at that point there is no longer any value in trying to learn things as a species at all, which is a pointless precision).

</comment></comment></comment><comment><USER21> I like this breed of fonts, they remind me of the LaTeX "Computer modern" and Garamond of old.</comment>


Pebble went from being worth $740M to less than $40M - <AUTHOR> http://qz.com/857412/pebble-went-from-kickstarter-to-being-worth-740-million-to-being-bought-by-fitbit-fit-for-40-million/?em_pos=small&ref=headline&nl_art=7 <comment><USER3> This is a terrible article. It doesn't have any information about Pebble's decline.

<comment><USER4> The title was the most informative part

<comment><USER5> Actually the title goes beyond "uninformative" to misleading. A company isn't worth $740mm because it says so. The deal failed so it was never worth that. This article said the offer was "rejected" and sourced Techcrunch which did not say the offer was rejected but that the deal failed (likely in due diligence).

</comment></comment></comment><comment><USER6> I think Pebble's biggest issue is that they should have been a product of a larger company rather than a stand alone company.

A few years ago I bought a product called a Flip. It was a standalone video camera that was dirt simple to use, took decent quality video and was cheap.

It came along at the right time, just before the iPhone took off and people realized that their phone's camera was good enough from most of their video needs.

Flip understood that they were a product mascarading as a company and sold to Cisco.

Pebble is similar in that they were the right product at the right time. Their failure was in not realizing they had a window of a few years to build their product and sell. There's nothing wrong with that, lots of products, like the flip, are valuable for only a few years before their main features get consumed into other devices and they become obsolete.

I'm really not sure how the board let the CEO make the decision to not sell when they had an offer on the table.

I'll buy the book when it comes out as its probably a good case study of product not company.

<comment><USER7> How do you differentiate a product and a company? There are obvious examples like most of the stuff on Shark Tank (i.e. cookies, jam, clothing, food products). However, I find it hard to think Pebble was just a product and not a company. Doesn't every company start off as a product? Apple started off as Apple I, Google started off as search and Snap started off as a photo sharing app. By your definition, a product is something that can be superseded by a competitor? Isn't that every company ever? My guess was, Pebble believed it could become a company and not just a product... but Apple had other plans for them.

<comment><USER6> > How do you differentiate a product and a company?

Good question. And I think you got it mostly right. Being a product doesn't mean the company has no value, just that its only a matter of time before someone else builds their features into their product.

The answer is that its very fluid. Everyone is a product until they are big enough. My rule of thumb is, can I see this companies being a feature for another company, or put another way....

What moat does this company have that ensures another company can't just create a feature to their own product that duplicates them.

In the Flip case, it was obvious once the iPhone came out that the average person wasn't going to carry around a separate device just for video.

Dropbox was a company that was famously refereed to as a feature, and they've done a great job of becoming more than a generic file syncing company.

Cruise automation is a company that I think would have been in trouble if they hand't sold, not necessarily today, but can any one really see a future where most cars produced don't have self driving hardware built into them by the manufacturer?

</comment></comment></comment><comment><USER8> This article does little (if any at all) to explain "How Pebble went from being worth $740M to less than $40M". It just lists a timeline of product launched and valuations.

</comment><comment><USER9> "Today, Migicovsky is selling Pebble's software and intellectual property to competitor Fitbit for less than $40 million, in a deal that's mainly about hiring the company's engineers, according to Bloomberg. The sale price is less than Pebble's debt, which Fitbit isn't acquiring. Pebble will reportedly sell its inventory separately."

So it is actually worth a negative number.

<comment><USER10> Well lets say he sold for 40 million (for IP), and also not accounted for has 50 million in debt, but 100 million in boxes of watches.

One could argue that the debt + more can still be paid off by selling the existing inventory. It may be a bit hard to get full retail for an "old" product though from a "dead" company, so who knows.

<comment><USER9> So the $40 million would go to the debt in this case.

They would still owe some money to debt (say -$10m in your example).

I agree that the inventory can't be worth much. I mean if it was worth that much it would be the main story, not the sale. In your example the inventory is worth over 2x the IP!

Let's see, between Feb 2015 and July 2016 they sold about 800,000 units. ([http://www.wareable.com/wearable-tech/how-many-apple- watches...](http://www.wareable.com/wearable-tech/how-many-apple-watches- sold-2016))

So that means if they sold 800k units in 18 months, that is about 44,444 units/month. If they keep around one quarter of inventory, that would be about 130,000 units. (not accounting for deceleration).

On Amazon they go for about $60/pop (and discounts will deepen). So they have about $8 million in inventory on the high end. This doesn't take into account the cost of goods sold.

The question is: how much debt did they have?

</comment></comment></comment><comment><USER11> I loved Pebble - I was a fan from the first Kickstarter. I found the devices comfortable (loved the band!) and I think it was a brilliant move to use e-ink on the watches, which saved enormous amounts of battery life. I like to wear my watch all the time (even at night) so it was great to only charge once every few days while at my desk at work.

The Pebble Time added the calendar view which was super useful and I really liked where they were going with canned responses and voice-to-text on the mic. There is nothing wrong with a company that makes a niche product - <USER2> product businesses started out doing only one thing - I mean hell look at other major watch companies (Swatch, Rolex, etc). I don't know the team personally but I'm sad to see them fold. I felt like while they did not invent the smartwatch, they introduced the smartwatch category to the world.

</comment><comment><USER12> Didn't realize QZ turned into click-bait trash.

It's called 'projection' QZ. No amount of shaming others "loss of value" is going to fix the fall from grace and value you are presently in. But you probably already know that, enjoy the booze and prozac.

</comment><comment><USER13> It takes balls to turn down a high nine figure number. I don't understand the thought process behind turning down something that essentially gives you a 50% probability that you'll be a billionaire.

</comment><comment><USER14> tldr: It was never worth $740M to begin with.

</comment><comment><USER15> What's the idea behind paying 40M for the engineers? Why don't you go on LinkedIn and scoop them up? Are they building something valuable as a team?

<comment><USER16> The $40M is for Pebble's assets and intellectual property. They're hiring the engineers on the side. Sometimes acquisitions are done this way so the acquiring company can avoid the outstanding liabilities/debts of the company being acquired.

</comment></comment><comment><USER17> Because it was never worth $740M to begin with. The Pebble is garbage and the company never really cared about the device or the folks that Kickstarted it.

Even as a big Apple fan as I am the Apple Watch also had nothing to do with the failure of Kickstarter. Even low end Android watches made better devices.</comment>


Assume only 10% of the current software will be relevant after 10 years - <AUTHOR> Which Ones? <comment><USER2> The only ones I am willing to wager on are corporate infrastructure related software and domain specific software (like CAD tools, movie animation tools etc). For similar legacy reasons, I am willing to add Linux derivatives and GNU C compiler, but won't wager on them.

<comment><USER3> Thanks to Minecraft, I expect a whole new batch of Java developers over the next several years.

<comment><USER4> Didn't it get ported after MS bought it?

<comment><USER5> It got ported for Consoles/Mobile. Porting the PC version would cause every existing mod to stop working, which would be huge, I can't think of a single person I know who plays stock Minecraft.

<comment><USER6> It also got ported for Windows, that's why it is in "beta" for now at Windows Store. It's being rewritten in C++.

</comment></comment></comment></comment></comment><comment><USER7> vim, emacs, linux, chrome, jvm, windows, directx, visual studio, javascript, C++, google, facebook, aws, gcc, llvm, photoshop.

</comment><comment><USER8> TCP/IP/Ethernet

</comment><comment><USER9> In addition to what others have said: Lisp and Haskell will still be around and relevant. ( _Relevant_ being defined as "as relevant as they are today or better", not as "large fractions of new software being written in them".)

Hate to say it, but I'd bet that Windows in some form will still be around, with an API that is recognizably similar to today's.

</comment><comment><USER10> Excel. Going on 30 year strong.

</comment><comment><USER11> GNU tools. I expect them to be relevant longer than I am.

</comment><comment><USER12> Looking at what's already been around for >10 years:

vim, emacs, linux, windows, mac os x, nethack (plus a whole stack of programming languages like C).

<comment><USER7> That's an excellent observation. Probably a better question would be what software younger than 10 years will still be around in 10 years. I'm thinking Go, Rust, Servo, DeepMind, Uber, Slack, Android, iOS (not sure about the age of the last 2), all the cloud providers' software, and a lot of other stuff. Probably docker as well.

</comment></comment><comment><USER13> Linux

</comment><comment><USER14> TeX/LaTeX

</comment><comment><USER15> Quickbooks on a Windows 7 machine

</comment><comment><USER16> Containers (not Docker per se but descendants of it and competitors). Driverless vehicles

</comment><comment><USER17> [https://www.commitstrip.com/en/2016/06/28/best- cms-2016/](https://www.commitstrip.com/en/2016/06/28/best-cms-2016/)

</comment><comment><USER18> Matlab/Simulink. Brilliant tool, and lots of brainpower and money being invested in continuously developing it.

</comment><comment><USER19> Fucking Facebook probably.

</comment><comment><USER20> C compilers

</comment><comment><USER21> UEFI

NaCl crypto / libsodium

HTTP/2+ over QUIC over UDP

wasm

</comment><comment><USER22> photoshop, autocad</comment>