The Regular Expression Visualizer, Simulator and Cross-Compiler Tool - <AUTHOR> https://blog.robertelder.org/regular-expression-visualizer/ <comment><AUTHOR> Hi, I'm the author of this page. This tool has a lot of complexity in it and a huge number of corner-cases. If you discover any bugs or XSS vulnerabilities, feel free to let me know.

<comment><USER2> I'm having trouble with backtracking and groups. It's possible I'm doing something wrong, but

        [bc]*(cd)+

doesn't seem to match

        cbcdcd

Nor does the simpler

        a*(ab)

match

        aab

But

        a*ab

matches aab.

<comment><AUTHOR> You found a bug. The bug was: When I was computing the animation frames for the visual, after a backtracking event, I forgot to restore the 'progress' values for the PROGRESS nodes to what they were before the stack push took place. I think I fixed this issue, and I just pushed an update which should appear any second when the cache invalidates.

<comment><USER2> Cool! Thanks for looking at it/fixing it.

P.S. The whole split() thing you do is an interesting hack to not have to preserve/rewind so much state. :D I've never quite seen fork() used so...

</comment></comment></comment></comment><comment><USER3> along these lines, [https://regex101.com](https://regex101.com) is consistently a godsend for writing regex.

<comment><USER4> Yeah regex101 is probably the best one I've found so far. It allows you to provide sample text and shows the analysis and output you'll get including captured groups.

</comment></comment><comment><USER5> I would have loved this when I worked on a regex engine a few years back. It was before I took my CS theory course and had no idea what an automaton was. Let me tell you, having a formal theory and visualization in front of you while working on something is extremely helpful.

This looks like it would be a great tool for both people looking to learn, and those who are looking to optimize their regular expressions as well.

</comment><comment><USER6> When I read the title, I half hoped 'cross-compiler' referred to translating between different regex varieties. Anyone know of a tool that does this?

</comment><comment><USER7> Any one write an AST aware regex engine?

Examples: replace s/(?ast:comment)foo/bar to replace foo with bar but only in comments. Or s/(\w+): (?ast:openparent)(. _?)(?ast:closeparen)\s+(?ast:openbracked)(._?)(?ast:closebracket)/function $1($2)\n{\n$3\n}\n/ to convert from

        foo: (args) {
          codeblock
        }

to

        function foo(args) {
          codeblock
        }

etc..?

<comment><USER8> semgrep will at least do the search portion, not sure about replace. Posted a few days ago:

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

Slightly related:

 _How to Build Static Checking Systems Using Orders of Magnitude Less Code_

[https://web.stanford.edu/~mlfbrown/paper.pdf](https://web.stanford.edu/~mlfbrown/paper.pdf)

They use "microgrammars" and found that the technique is surprisingly effective despite not being "correct".

</comment></comment><comment><USER9> Nice graphical explanations! It would be nice to see positive/negative look ahead/behind support as they're pretty powerful.

The `\K` flag to clear the capture buffer (e.g. Perl flavor) is also a very useful regexp feature absent here (e.g. when testing `grep` commands).

</comment><comment><USER10> Any suggestions to keep regexes simple? They often grow to huge lengths which are hard to read and/or debug. It would be nice to keep modular. Maybe using websites like this is the only way.

<comment><USER8> In Python or Perl, you can use re.VERBOSE or /x to spread your regex across multiple lines. That helps a little, but the syntax is still pretty obscure.

I created a new regular language syntax for Oil which looks more like a grammar:

 _Eggex Example: Recognizing Python Integer Literals_ [http://www.oilshell.org/blog/2019/12/22.html](http://www.oilshell.org/blog/2019/12/22.html)

And the nice thing is that you can modularize and compose patterns (without string concatenation). It is more like AST splicing of regexes. There are details in the article but here's how it looks:

        DecDigit = / [0-9] /
        BinDigit = / [0-1] /
        OctDigit = / [0-7] /
        HexDigit = / [0-9 a-f A-F] /

        DecInt   = / [1-9] ('_'? DecDigit)* | '0'+ ('_'? '0')* /
        BinInt   = / '0' [b B] ('_'? BinDigit)+ /
        OctInt   = / '0' [o O] ('_'? OctDigit)+ /
        HexInt   = / '0' [x X] ('_'? HexDigit)+ /

        Integer  = / DecInt | BinInt | OctInt | HexInt /

To accept 123, 0b10101, 0o755, 0xff but reject non-integers.

</comment></comment><comment><USER8> Note that when you use grep, awk, sed, libc regexec(), RE2 [1], or rust/regex, this isn't how your regexes are executed.

They use automata-based engines whereas this is a backtracking engine, which can blow up on small inputs. (Although I will say the C code here is cool, because it gives you a fork() bomb, so it might exhaust your operating system and not just your CPU!)

Canonical reference: _Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby, ...)_

[https://swtch.com/~rsc/regexp/regexp1.html](https://swtch.com/~rsc/regexp/regexp1.html)

Archive since it's down at the moment due to some App Engine stuff (!): [https://web.archive.org/web/20200624195819/https://swtch.com...](https://web.archive.org/web/20200624195819/https://swtch.com/~rsc/regexp/regexp1.html)

My blog post and sample code that verifies that GNU grep, awk, sed, and libc don't backtrack:

 _Comments on Eggex and Regular Languages_ [http://www.oilshell.org/blog/2020/07/eggex- theory.html](http://www.oilshell.org/blog/2020/07/eggex-theory.html)

[https://github.com/oilshell/blog-code/tree/master/regular- la...](https://github.com/oilshell/blog-code/tree/master/regular-languages)

[1] [https://github.com/google/re2](https://github.com/google/re2)

\----

Also, the production quality way of compiling regular expressions to C code looks like this [2], which is completely different than what's shown in the article:

[https://www.oilshell.org/release/0.8.pre8/source- code.wwz/_d...](https://www.oilshell.org/release/0.8.pre8/source- code.wwz/_devbuild/gen/osh-lex.h)

The regex is converted to an NFA, then a DFA, then a bunch of switch/goto statements in C that implement the DFA.

This example is huge, but the switch/goto and lack of any notion of "threading" is the important point.

Essentially, the instruction pointer is used as the DFA state. It's a very natural use of "goto" (where you don't write or debug them yourself)

[2] via [http://re2c.org/](http://re2c.org/) (not related to RE2)

<comment><AUTHOR> It's worth pointing out that the resource

[https://swtch.com/~rsc/regexp/regexp1.html](https://swtch.com/~rsc/regexp/regexp1.html)

linked above is also by the same author, Russ Cox,

as the reference I included at the end of the blog post:

[https://swtch.com/~rsc/regexp/regexp2.html](https://swtch.com/~rsc/regexp/regexp2.html)

All of the insights that I presented through this visualization tool are based upon the knowledge found in Russ Cox's articles. Also, the link above on RE2:

[https://github.com/google/re2](https://github.com/google/re2)

is a project that was was also (started by|heavily contributed to by) Russ Cox. His writings on the topic of regular expressions are absolutely world- class and I have never found any better resource for understanding the deep low-level theory on how they work in practice.

<comment><USER8> But Cox would dislike this formulation of regular expressions. His whole point is that Perl-stye regexes are not regular languages, and RE2 goes to great lengths to work around this fact.

I'm taking up his arguments with some more traditional terminology that I think may help:

[http://www.oilshell.org/blog/2020/07/eggex- theory.html](http://www.oilshell.org/blog/2020/07/eggex-theory.html)

The entire O'Reilly book "Mastering Regular Expressions" by Friedl is based on the "debugging regexes by backtracking" approach you present here. It talks about "optimizing" regexes by reordering clauses and optimizing the backtracking.

Russ Cox HATES THAT APPROACH and he wrote the entire RE2 project to advocate that it NOT be used! You do not need to optimize, reorder clauses, debug, or trace backtracking when you're using automata-based engines, because they run in guaranteed linear time and constant space (with respect to the length of the input). There is no backtracking.

(I was at Google when he wrote RE2 and used it shortly afterward on big data, and regular languages are indeed better than regexes for such engineering. Also made clear by the HyperScan work.)

Since his site is down I can't find the original comments, but here's a twitter exchange from 2018 that backs this up:

[https://twitter.com/geofflangdale/status/1060313603268501504](https://twitter.com/geofflangdale/status/1060313603268501504)

[https://twitter.com/_rsc/status/1060702201159565313](https://twitter.com/_rsc/status/1060702201159565313)

Also, I believe your article would be improved if you simply take out this sentence:

 _In computer science theory, this node type should remind you of the difference between DFAs and NFAs._

It is treading close to the confusion that Cox is talking about. So I would just remove, add a proper explanation, or add a link to the authoritative source.

\----

I would love to see a followup that goes through the rest of the article with the Thompson VM and Pike VM approaches! :) I think the whole point is that you don't have to backtrack to implement this VM, and this page confuses that issue.

<comment><AUTHOR> The goal with this article was never to show the best or most efficient way to match regular expressions, but rather to convey the correct interpretation of what a given regular expression will do when you try to use it. Even discussions of slow and simple backtracking regular expression matchers are a pretty niche topic and likely too much for casual users of regular expressions.

Yes, I was thinking about also allowing it to optionally cross-compile to the more asymptotically efficient matching algorithm, also documented by Russ Cox. Everything takes time though, and I figured it would make to put this out there before investing too much time in something that possibly no one would use.

<comment><USER8> Sure, but automata based engines are also "correct" and used in common tools like grep, awk, and sed.

It would be nice to make that clear in the article.

\-----

It's a matter of preference, but to me debugging by backtracking is a pointless exercise. It's easier to reason about regexes as sets of strings, composed by sequence and alternation.

Write unit tests that enumerate what you accept and reject, and build them up by composition. There's no need for debugging or tracing.

I understand that the imperative style is more natural to many programmers, but I don't think it requires too much of a leap of thinking. And once you get used to the other style, it saves effort overall (as well as bounding your worst case running time).

<comment><USER11> How does the "sets of strings" model express the difference between:

       /x*/

and

       /x*?/

<comment><USER8> Good question, and here's something I wrote a couple weeks ago to the author of the Regex Lingua Franca paper [1]:

 _I admit I occasionally use non-greedy repetition in Python, but I think that is the only construct I use that 's not in the shell-ish engines. I believe it's usually pretty easy to rewrite without non-greedy, but I haven't tested that theory._

\----

OK so I started testing that theory. I collected all the times I used

        .*?

[https://github.com/oilshell/blog-code/blob/master/regular- la...](https://github.com/oilshell/blog-code/blob/master/regular- languages/survey.txt)

With a cursory inspection, most of them are unnecessary in an automata-based "regular language" engine.

They are "nice to have" in a Perl-style regex engine for PERFORMANCE. But automata-based engines don't have that performance problem. They don't backtrack.

The distinction between .* and .*? doesn't affect whether it matches or not, by definition. It does affects how much it backtracks. (And it affects where the submatches are, which I need to test out)

So I think most of my own usages ARE "nice to have" in Python, but unnecessary in awk because it uses an automata-based engine.

But I'd like to look at it more carefully, and I'm interested in answering this question more thoroughly (feel free to contact me about it, e-mail in profile).

I started a demo here. Still needs work.

[https://github.com/oilshell/blog-code/blob/master/regular- la...](https://github.com/oilshell/blog-code/blob/master/regular- languages/greedy.sh)

\----

So here's another conjecture: regexes are bad because they force you to make UNNECESSARY DISTINCTIONS in the name of performance.

You have to care about greedy vs. nongreedy, because there is backtracking.

In contrast, with regular languages, you just write what you mean, and they do it quickly for you. You can't write a slow expression for a regular language.

There are some caveats around that, like submatch extraction with nongreedy repetition, which I will test out. If anyone has specific examples or use cases, send them my way.

I can't see where I really rely on nongreedy submatches, but I'll have to look more closely. I think the nongreedy use case is usually just "skip quickly until this other string appears", e.g. the one in pgen2/tokenize.py that I didn't write.

\----

As far as I remember submatch extraction works fine in automata-based engines, and Cox's articles are in a large part about the (then) little known algorithms for doing it in automata-based engines. re2c also has a 2017 paper for their algorithm to do it in DFAs:

[http://re2c.org/2017_trofimovich_tagged_deterministic_finite...](http://re2c.org/2017_trofimovich_tagged_deterministic_finite_automata_with_lookahead.pdf)

\----

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

<comment><USER11> I don't agree it's primarily about performance. /".+"/ will find a quoted string, but you will certainly prefer the non-greedy match instead.

Now you may torture the greedy regex to make it work (/"[^"]+"/), but the point stands. "Did it match" is rarely enough; the regex author usually wishes to know _where_ it matched, and to exercise control over which match is preferred if there are multiple possibilities. It's indeed possible to do this with DFAs but the theory is comparatively hard, as a cursory reading of your linked paper will show!

<comment><USER8> Yeah that is a good example, and I recorded it here:

[https://github.com/oilshell/blog-code/blob/master/regular- la...](https://github.com/oilshell/blog-code/blob/master/regular- languages/greedy.sh#L44)

I don't mind the rewrite, but I'm not surprised that some would be inconvienced by it. (Though that is part of the reason for the Eggex syntax)

\----

On the other side I'll offer that I wrote a lexer for bash and all its sublanguages without any nongreedy repetitions. It's dozens if not hundreds of regexes.

[https://github.com/oilshell/oil/blob/master/frontend/lexer_d...](https://github.com/oilshell/oil/blob/master/frontend/lexer_def.py)

Though, regular languages are more like a building block for the lexer than the lexer itself. As mentioned elsewhere, they're too limited to express the entire lexer. They're too limited to express syntax highlighters (but so are regexes! They also need some logic outside the model, e.g. for lexing shell here docs)

\-----

So I pose the question of whether there's a more powerful abstraction that's still linear time and constant space:

[http://www.oilshell.org/blog/2020/07/ideas- questions.html#mo...](http://www.oilshell.org/blog/2020/07/ideas- questions.html#more-powerful-linear-time-constant-space-languages)

Of course there is, but it's a matter of picking one that will address a lot of use cases effectively.

I think re2c has grown something like

        .*?

for example. grep needs something like that too. Often you want to be able to skip input in a linear fashion, without invoking the pattern matching logic at all.

Regexes are OK if you know how to use them, but evidently most people have lots of problems with them (the necessity of OP's demo being an example of that.) I think there's something better out there built on top of regular languages.

<comment><USER11> You hit upon an important cleavage: features vs worst-case perf. A generous lexer supports partial input, syntax highlighting, helpful error messages, etc., while a strict one is not so nice, but guarantees protection against malicious input. But the way you write these are very different! I also would like to write one lexer that can operate in both modes, but with one syntax.

BTW, high five from one shell author to another :)

<comment><USER8> Yeah I've been looking at fish. Definitely has the cleanest code out of any shell I've looked at :) (e.g. bash, dash, zsh, mksh)

And I came to realize what a huge effort it is on top of the language:

[http://www.oilshell.org/blog/2020/02/recap.html#fish-oil- is-...](http://www.oilshell.org/blog/2020/02/recap.html#fish-oil-is-a-good- idea-link)

Also I wonder if you knew of the existence of ble.sh, a fish-like UI written in pure bash! I think it's the biggest shell program in the world:

[http://www.oilshell.org/cross- ref.html?tag=ble.sh#ble.sh](http://www.oilshell.org/cross- ref.html?tag=ble.sh#ble.sh)

[https://github.com/oilshell/oil/wiki/The-Biggest-Shell- Progr...](https://github.com/oilshell/oil/wiki/The-Biggest-Shell-Programs-in- the-World)

\----

I did add little hack in the lexer for autocompletion of partial input. But my hope though is to keep most of that logic in the parser and not the lexer? Though it is true I was thinking of breaking up the exact regex we talked about for similar reasons, e.g. a single token:

        ' [^']* '

vs. 3 tokens

        '
        [^']*
        '

I think the latter could be better for completion of paths in quotes, which bash does, but I haven't revisited it yet.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> neato bandito</comment>


It Isn't Your Father's Realtime Anymore: The Misuse of a Noble Term (2006) - <AUTHOR> https://queue.acm.org/detail.cfm?id=1117409 <comment><USER2> I blame all the misguided folks who try and add "soft real time" to time sharing systems like Unix/Linux/etc. Anyone who does that has a profound misunderstanding of what real time is, it most definitely is not a time sharing system.

If you want a time sharing system and real time, that problem has been solved, in a really elegant way. Victor Yodaiken did it years ago, he made a small real time kernel and he ran all of Linux as the idle process in the real time kernel. When Linux thought it was disabling interrupts it wasn't, only the real time kernel could do that.

He had a demo where he was running xperf (or some fairly compute intensive X thing) while running

tar cf - / | rsh someotherhost 'cat > /dev/null'

while the real time kernel was gathering events. He _never_ missed a deadline or dropped an event.

Sweetest design I've ever seen, have your cake and eat it too.

<comment><USER3> > I blame all the misguided folks who try and add "soft real time" to time > sharing systems like Unix/Linux/etc. Anyone who does that has a profound > misunderstanding of what real time is, it most definitely is not a time > sharing system.

Part of the problem is that there are realtime systems where, if you don't meet the deadline, _the plane will fall out of the sky_. Then there are realtime systems like VoIP where, if you don't meet the deadline, the call will cut out.

And there is a desire to get "almost realtime" for things like VoIP on general purpose time sharing systems, where you want to deprioritize less latency sensitive tasks in order to hit the deadline if you can, but nobody dies if you don't.

The trouble with using "real" realtime in those systems is that the system may not have enough capacity _in theory_ even when it does _in practice_. In other words, if you have three concurrent realtime processes that could each in theory use up to 50% of the available resources at a time, but in practice almost never use more than 10% each, then for less critical systems you may be willing to bank on "almost never" not happening often enough to matter.

<comment><USER4> Imho "soft" and "hard" real time distinguish pretty well between "must meet deadline" and "should meet deadline". The only problem I see is that they sound so similar, although the development process is radically different between the two.

</comment></comment></comment><comment><USER5> Devolution/devaluation seems very common now. I'm not sure if it's my perspective or if it's really worse that it used to be.

Some examples:

* ROM: something you download and install on your Android phone (as opposed to socketing a new chip)

* Machine Learning: any change in program behavior based on feedback input (we used to call this programming)

* Disruptive: doing business at least slightly different than someone else (as opposed to a new paradigm that sends shockwaves through a whole industry)

* Fork: make a copy of a project (as opposed to starting a rival project based on the codebase of another project)

<comment><USER6> Considering any of that "worse" is definitely your perspective. It's simple back-in-my-day-ism to apply a value judgment to language use.

<comment><USER7> The point is that the words don't really have a useful meaning anymore. It is especially important in technical topics to have terms with some specific meaning.

<comment><USER8> It's important to be able to construct specific meanings. You don't need terms to do that, and you run a major communication risk by relying on terms that you aren't willing to define. And if you define them first, then you can use them however you like.

<comment><USER9> And that is why, a century ago, German was used frequently in science: A language where every word is a literal description of its meaning.

</comment></comment></comment></comment></comment><comment><USER10> Having used QNX for a robot vehicle, I'm very aware of what "real time" means. If the computers didn't send an update to steering and throttle every 100ms, at 125ms a hardware stall timer cut the throttle and slammed on the brakes.

A typical test of a real time OS such as QNX is to hook up a square wave generator to an interrupt input, and run a program which is activated by the interrupt. The program then turns on an output. The input and output signals are sent to an oscilloscope, so you can see the delay. In a true real time OS, there are _no_ outliers where the delay is much longer than usual, even if there are other processes running.[1]

[1] [http://www.qnx.com/developers/docs/6.5.0/index.jsp?topic=%2F...](http://www.qnx.com/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.ide.userguide%2Ftopic%2Fsysprof_Interrupt_latency_.html)

<comment><USER2> Who owns QNX these days? I was friends with Dan Hildebrandt who was one of the core OS guys, one of the few who could actually touch the microkernel. We had a lot of good OS conversations/discussions/arguments back in the day. It was a sad day in 1998 when we lost him.

<comment><USER10> Blackberry owns QNX now. QNX has gone from closed source to open source to closed source to open source to closed source. Along the way, most of its developer community bailed. Sad.

</comment></comment></comment><comment><USER11> This title is literally true for me.

During the 70s my dad & his team built a programming language & runtime environment for realtime control systems in power stations. It was called _Cutlass_ , and it's still in (dwindling) use today.

In my dad's context, the term 'realtime' drew the most useful distinction between types of system in that context.

In the web days, the term is used slightly differently, but still draws broadly the most useful distinction within the context.

And lastly in media, the tech industry and computer subcultures have a pretty bad track record of protecting words from mis-use... troll, hacker, repo, pull-request, etc. all have comically uninformed usage. You don't quarrel with folk who buy ink by the barrel, nor do you get far telling them that they're doing language wrong.

Personally this isn't an issue I choose to care about, language is contextual after all, but even if you do my advice would be to save your blood pressure for a fight you have a hope of winning.

</comment><comment><USER12> I always enjoyed the rejoinder: "Real-fast is not real-time."

50 years ago, real-time in it's true sense was not a product or service attribute that humanity was much concerned with. Information was disseminated largely via 'latent' methods and the delay between and event and it's report was typically measured in hours at best, and months for people subscribing to magazines.

Today, it does matter to an increasing number of people when an event occurred, and their desire to know 'soon' is increasing, because the reach of events has expanded to global extents and and the time we have to react is shrinking. Case in point: I've set a reminder to keep an eye on the Hang Seng in Hong Kong this evening to get an early read on where the NASDAQ will head tomorrow morning.

These trends are pushing the term real-time/realtime/real time out of computer jargon and into mainstream where they must be oversimplified and therefore conflated, like so many others. It's the natural evolution of language.

</comment><comment><USER13> I think I have a pretty straight-forward answer to his question about its popularity: real-time became synonymous with instant results and zero delays to mainstream audiences. Not sure exactly from what sources but that's the common denominator across all of these usages.

<comment><USER14> I think it's devolved beyond that into a marketing term, I've seen realtime mean anything from milliseconds to hours. I'd mostly interpret it as "faster than what you already have/are used to".

<comment><USER15> I'd argue that GP is right, but only partially. It may be true that "real-time became synonymous with instant results and zero delays to mainstream audiences". But the story continues: _then_ the sales&marketing folks and various other bullshitters noticed that "realtime = fast" and "fast = good", and they did what they always do - stared to stretch the term so that they can steal some of the good feelings associated with it, even though their products don't deserve them. It's what happened with the word "hacker", or is happening with the word "geek" right now. If something is associated with good qualities among relevant enough audience, it will be co-opted by marketing and then used and abused until it loses any meaning.

That's what I hate about sales&marketing - it will fuck up everything that's cool.

And journalism, I guess is to blame too (they are marketers too, competing for our attention). My pet peeve: ever heard about a company "going nuclear" or taking "a nuclear option"? That phrase should _not_ be used to mean anything less serious than threatening to deploy _an actual ICBM_.

<comment><USER13> Your addition to my theory is probably right. I left it off just because I can't trace the specifics. Marketing and media are where I'd point the finger, though.

</comment></comment></comment></comment><comment><USER16> Never take "realtime" seriously, unless it's prefaced with either "soft" or "hard".

<comment><USER17> That's the whole point here. Soft realtime is not realtime, only hard realtime is realtime.

So no need for prefixes.

<comment><USER16> Both terms have varying definitions, depending on who you ask. Realtime, to me, means that there are deadlines and that those deadlines can realistically be broken. Soft realtime means that given some conditions, the deadlines will be met, at least x% of the time. Hard realtime means that the deadlines will be met, unless there's a grave hardware malfunction.

Then there's the hardness of deadlines, which is proportional to the consequence of missing them. A hard deadline means that a computational result is worthless if it's late.

</comment></comment></comment><comment><USER17> It's all about the guarantees. No guarantees: don't bother calling it real- time.

</comment><comment><USER18> "Realtime" in business means "on short enough timescales to significantly shorten your OODA loop" and could imply delays ranging from seconds to hours. Of course this is to be expected now that business has cozied up to technology to run at-sign the speed of thought: look at the sound flogging that suits have given to engineering terms like "interface", "bandwidth" and "offline".

</comment><comment><USER19> I am confused by this. So is the problem that realtime 'should' just be used when there is a critical 'life threatening' problem if the deadline is not met, but to use realtime for a system that is not critical is seen as wrong?

Lets say you have an algo controlling a fighter jet. That is realtime. If you had exactly the same algo in a 3d fighter pilot game. That should not be called realtime?

Is this just an ego thing?

<comment><USER17> No, it's a guarantees thing. If you can't guarantee your latency and scheduling then you're not real-time. So if you're doing something that you run on a jet that needs to be updated 5000 times per second +- 10us otherwise something breaks or the plane becomes uncontrollable then that's real-time.

If it's a game version of the same you don't care about those guarantees because nothing would actually cause the plane to crash.

Of course controlling the plane itself may not have such tight loops but plenty of processes active in the flying plane may very well have extremely tight constraints (for instance: engine management, especially near maximum power output).

In real life there would be a penalty for missing an interrupt or a scheduled deadline, in a simulation everything would just happily hum along with a tiny delay.

If you were simulating the real plane then you'd want your simulation to halt at that point so that you could figure out exactly what went wrong.

One piece of hardware in our offices in Amsterdam long ago had a 'lost data' led latched so it would stay on if a fault condition ever happened no matter how briefly, if that led ever came on it meant going back to the drawing board because it indicated we were not in control of the machine to the extent that we thought we were.

<comment> eric-hu > If it's a game version of the same you don't care about those guarantees > because nothing would actually cause the plane to crash.

> If you were simulating the real plane then you'd want your simulation to > halt at that point so that you could figure out exactly what went wrong.

Doesn't this all depend on the point of the simulation? For instance, the simulation could be an integration test of flight control systems. In which case, yes, you'd want the simulation to halt for debugging, as you stated. On the other hand, if the simulation is a networked flight sim trainer for pilots, then you would benefit from having the simulation do exactly what a plane would do in the real world.

I think there's some insight in the OP's article, but I think he goes a bit too far. To me, "real time" has a domain specific meaning: there's a greater importance placed on time for this thing over that. That's a legitimate use of the word _in that domain_. If the world we we're living in were actually the Matrix, our use of "real time" wouldn't be less legitimate just because a plane crash is now bits changing instead of an actual plane crash.

</comment></comment></comment><comment><USER20> Seems to be the fate of any cool-sounding term. Eg. 'Quantum'

[http://smbc-comics.com/index.php?db=comics&id=1841#comic](http://smbc- comics.com/index.php?db=comics&id=1841#comic)

Though I must say the software industry is particularly guilty of stealing and corrupting terms from other fields. One particularly irksome example for me (as a former architect) is the word 'design'. When a software engineer says design he means css essentially, making it visually pretty. Whereas in architecture / engineering / industrial design etc. 'Design' means.. everything, the overall _design_ or plan of your entire system. Thats just one small example that gets my goat up, there are tonnes more!

ps. The votey (red button which you click for another little panel) is particularly good for that smbc!

pps. Also as a game developer I reckon I'm safe using the term realtime if somethings being calculated at 60fps :) ie. realtime shadows vs. baked ones. If for example the shadows were lagging one frame behind everything else that would be unacceptable for a game.

<comment><USER21> _Though I must say the software industry is particularly guilty of stealing and corrupting terms from other fields. One particularly irksome example for me (as a former architect) is the word 'design'. When a software engineer says design he means css essentially, making it visually pretty. Whereas in architecture / engineering / industrial design etc. 'Design' means.. everything, the overall design or plan of your entire system. Thats just one small example that gets my goat up, there are tonnes more!_

I might agree with some of your other examples, but not this one so much. _Software engineers_ , i.e. computer programmers who actually write design documents before they write code, have never used the word _design_ for _visually pretty_.

The word _design_ has a separate and equally legitimate history coming from _graphic design_ and world of commercial art and drafting. There's a not- insignificant intersection between that world and the world of front-end web programming where the word _design_ is used to describe the a site's visual appeal and not the overall plan of the system.

<comment><USER20> "Software engineers, i.e. computer programmers who actually write design documents before they write code, have never used the word design for visually pretty."

Agreed thats the way it _should_ be but I have rarely seen that to be the case in my experience, though that is anecdotal.

"The word design has a separate and equally legitimate history coming from graphic design and world of commercial art and drafting."

I think your stumbling there logically a bit. Graphic designers also use the word design, so do fashion designers and so on, but similarly to architects and engineers they also use the word design to denote the overarching scheme of their entire project, not just the aesthetic aspect of it (as these programmers I am referring to do). Typographers had a lot of other technical factors to worry about in their design apart from just the visual appeal and clarity, similarly fashion designers must design their clothes to accomodate a certain 3d shape and withstand all sorts of structural stresses and deformations.

<comment><USER21> _I think your stumbling there logically a bit._

0_o

 _Graphic designers also use the word design, so do fashion designers and so on, but similarly to architects and engineers they also use the word design to denote the overarching scheme of their entire project, not just the aesthetic aspect of it (as these programmers I am referring to do). Typographers had a lot of other technical factors to worry about in their design apart from just the visual appeal and clarity, similarly fashion designers must design their clothes to accomodate a certain 3d shape and withstand all sorts of structural stresses and deformations._

You're reaching. And the only thing sillier than us arguing about this is you being upset that someone is using the word _design_ as it appears in the dictionary:

1\. _a plan or drawing produced to show the look and function or workings of a building, garment, or other object before it is built or made_

2\. _an arrangement of lines or shapes created to form a pattern or decoration_

The article is about the very real problem with the confusion between hard real-time vs soft real-time systems, which is about the suitability of a tool to a set of requirements. Your complaint about the word _design_ doesn't seem to apply.

<comment><USER20> I totally agree that this issue is far far less clearly delineated than 'real- time' and its a relatively muddy issue of semantics, though it is worthy of debate imo.

I stand by my assertions. When an artist talks about their design they mean the entire creation. The dictionary definitions you presented are two homonyms. #1 is sort of what we are discussing though a better definition would be the verb form.

"verb (used with object) To plan and fashion artistically or skillfully."

#2 is another meaning which could be used in the sentence "The birthday card had a pretty little design in the corner" You will not find many artists referring to their work as #2.

Of course there are people whose job it is to design the pretty designs for the corners of birthday cards. What they produce is designs #2 but what they _do_ is design #1

</comment></comment></comment></comment></comment><comment><USER22> Outside of engineering, it's just the reality that terms get co-opted a lot to mean things like _fast_ or _asynchronous_. It's really engineering where the strict definitions are important, which is the only scenario I generally do try to correct.</comment>


Ask HN: list of companies, and business models? - <AUTHOR>

Below is a proposal for a very minimal (in terms of development) site, which might still prove to be educational for all of the HC community:
For entreprenours, and investors in the startup community, Businessmodels.com (temp name) is an open wiki with a list of the most successfull online / web based companies, and their respective business models. The wiki aims to answer questions such as what basic proposition does the business operates in, what was the critical differentiator to competitors, and what can we learn from them.
Putting together such wiki would allow us to take a fresh perspective on what seems statistically advantegous, as well as note trending, and market shifts.
I'm not quite sure, if such resource exist per se, so this thread is dedicated for eyeballing the concept.
Do you think it has editor magnet potential, and would you contribute to it (anything other, than your own)?
(Please keep it constructive) <comment><USER2> Interesting? Yes. Able to make the proprietor money? Doubtful. I can't figure out who would pay for the site - subscribers or advertisers/sponsors? Who is the target market - MBA students? Enterpreneurs? I'm not sure and, since I don't know who the users are, I don't know how it makes money. If I can't figure out how to make money from it before I launch, I wouldn't launch.

Would I contribute? No, because I would get no value from the site. I have to wonder whether it would be faster for me to google+read your wiki than to just visit the company's homepage when I want to figure out their business model. Like many entrepreneurs here, I can eyeball a site and figure out the basics of their business model fairly quickly. Adding a layer of, "What was that site again that lets me look at a company's business model?" just doesn't help. Besides, if it's a wiki then you've got all sorts of editorial stuff to deal with that a non-wiki site wouldn't have (i.e. lawsuits of confidentiality breaches, trade secrets, etc).

<comment><AUTHOR> Thank you for your feedback. My main motivation behind this project is learning, thus I'm not expecting this site to be a direct cashflow of any kind. I suspect, that information gathered systematically to answer the aforementioned questions could be of great public service.

Regarding the content, there is so much more to learn about each individual business, than superficial eyeballing. If you start a systematical approach, writing down, for example the top 1K alexa sites, and their respective business model, for any given concept you've got hundreds of sites; not even differentiators defines businesses that sharply. I suspect, that behind each successful business, there's a mix of differentiators, perspective, and way of thinking/measuring; grabbing, and noting these less tangible insights would be the main focus of the site.

I don't really consider lawsuits to be a threat -most of the stuff can be figured out by a combination of public announcements + general available info on the net + business logic.

> Would I contribute? No, because I would get no value from the site.

Your answer presumes, that user contribution is a function of value received from the site; in my experience, this is not so. Yes, there are good- intentioned hippies, but most people are just pushing their own agenda, wrapped in a marketing blanket, which sometimes happen to be aligned with things like "building a global encyclopedia".

So, to re-iterate the original question: do you think there are people who's business agenda would align with the creation of aforementioned wiki?

<comment><USER2> "If you start a systematical approach, writing down, for example the top 1K alexa sites, and their respective business model"

Okay - now wait a minute. You want to review 1,000 websites. Fine. You're going to do so by figuring "out by a combination of public announcements + general available info on the net + business logic" their business models? No chance. You might do 10 or 20 but you aren't doing 1,000.

But let's play a game - let's pretend that you do this project and you make it through all 1,000. How long does it take? 40 hours per week, perhaps it takes only three years - I think that's probably a fair estimate. One person working full-time on such a project could likely accomplish that in 3-5 years. One person trying to herd cats into helping them might be able to accomplish such a task in only 18-24 months if they work full-time.

But what of the opportunity cost? What else could you have done - for the world, for yourself - during that time? This project is of mild interest to a slim percentage of people in the world. Notice that you posted it on HN and it got three votes - 1 for free and 1 from me b/c I wanted to see opinions. I don't think it has merit but it is interesting to talk about and, if I had to guess, that's sort of everyone else here's opinion. We'd rather work on our own business models than pore over others'.

I'm not trying to come down on you - not at all. But I don't see how it can make you any money long-term. And if it can't make you money long-term, then it's a time-suck; it's taking time away from something that could be making you money. Now if you just enjoy doing it, great - I understand completely. But don't fool yourself into thinking you're going to have the time to create this great database of up-to-date business models. The internet has plenty of abandoned projects; it doesn't need another.

The best way to learn is to do. Go create your own company with your own business model. It will be wrong. You'll learn or you won't. Reviewing the top 1k alexa sites will not help you learn how to create a business model for your own company.

</comment></comment></comment><comment><USER3> I just created the wiki for you in less than an hour: <http://news.ycombinator.com/item?id=648223>

</comment><comment><USER3> Interesting, but nslookup businessmodels.com returns NXDOMAIN. Also, please submit with the working link and put the comment in the home page of the wiki instead.

<comment><USER2> ?? The way I read it, he/she is submitting a proposal - a request for feedback on an idea. I think the format of the question was fine and I didn't think at all to try to go to the domain.</comment></comment>


Malware Found in Arch Linux AUR Package Repository - <AUTHOR> https://www.bleepingcomputer.com/news/security/malware-found-in-arch-linux-aur-package-repository/ <comment><USER2> dupe, plase check before submitting: [https://news.ycombinator.com/item?id=17501379](https://news.ycombinator.com/item?id=17501379)</comment>


Censorship by Weaponizing Free Speech: Rethinking the Marketplace of Ideas - <AUTHOR> https://www.techdirt.com/articles/20180124/11124039076/censorship-weaponizing-free-speech-rethinking-how-marketplace-ideas-works.shtml <comment><USER2> The key insight in this piece, I think, is that the moderation (manual, algorithmic, or otherwise) is the fundamental mechanism that shapes a platform. Reddit rewards upvotes but punishes "controversiality." Hn rewards upvotes. Twitter, Facebook are mostly secretive, and definitely account for advertisement dollars in their selection.

If we accept this piece's premise, that moderation can negate wide swaths of free speech (by deleting it, or even simply hiding it) I think the question becomes "Why am I putting my ideas into communities that have the final say, with no transparency, over who if anyone, sees what I say?"

Imagine how different twitter would be if you could see tweets not based on how big a tweetstorm they caused in the last 24 hours, but rather you could make a dashboard based on your custom criteria (e.g. net positive sentiment, non-political, in my city, accounts that are non-bots)

I don't mean this as a proposal for twitter specifically, but rather a proposal we start asking whether a platform should have exactly 1, private, attention-distribution mechanism or whether the two should become disconnected.

<comment><USER3> bang on! fully agree..</comment></comment>


Google Picture Machine goes beyond magic - <AUTHOR> https://plus.google.com/113117251731252114390/posts/AD6Crimuqc8

<comment><AUTHOR> Haven't felt like this since Time Warp from Scaladoo (that got bought by Nokia, announced by Blackberry and hasn't ever seen the sunlight :( Youtube video on here though: [http://www.youtube.com/watch?v=62WpA5HwPOo](http://www.youtube.com/watch?v=62WpA5HwPOo)

</comment><comment><USER2> AMAZING!</comment>


Staying Alive: The Resurgence of Pinball - <AUTHOR> https://www.southwestmag.com/pinball-revival/ <comment><USER2> Sunshine Laundromat, mentioned in the article, is excellent. It's just generally a lot of fun: it's an actual laundromat up front. There's a door in the back that looks like a washer/dryer combo; walk through it, and you find a nice cozy bar and ~20 machines. The article mentions that a bartender is highly ranked; I've also had friends run into the people who actually made and designed the machines, as well. One of my friends is very into pinball, and getting to play a game on one of his favorite machines against the designer himself (who was apparently a great guy) was a real special moment for him.

<comment><USER3> SF's cafe/laundromat with pinball, Brainwash, closed a few months ago, after almost 30 years in SOMA.

<comment><USER2> Oh no! Brainwash was awesome. I missed the news.

</comment></comment></comment><comment><USER4> I'm thrilled to see pinball making a resurgence in popularity, especially among a younger millennial crowd. The side effect is that my project games are way, way more expensive and hard to find now, but I'm still pleased to see people interested in something I thought was dead and gone after Williams closed in 1999.</comment>


HN/Lobsters: Good News, Bad News, How to Win Big (Part 1) - <AUTHOR> http://www.angersock.com/blog/2016/04/18/techniques-for-gaming-hn-slash-lobsters-sites-pt1/ <comment><AUTHOR> Hey folks. Feel free to point out any misconfigurations/dumb things I've done with my server (like leaving off SSL, I know I know).</comment>


Larder.io – Bookmarking for Developers - <AUTHOR> https://larder.io/ <comment><USER2> I've been using Raindrop.io for a few months as a bookmarking service, and it's wonderful to use. It's similar to Pocket, but provides much more flexibility. Plus, the mini-app extension is great.

<comment><USER3> Fantastic recommendation, thanks :-) Have been using a combination of Pocket for "read later" and pinboard.in for bookmarks - but looks like Raindrop will do both in one place...

<comment><USER4> Why not Pocket for everything? I have used pocket of over eight years and I no longer organize. I just search when I need it or just browse through on a random Sunday. Seriously Pocket have been great and flawless in every possible integration.

</comment></comment></comment><comment><USER5> Since the other comments here.

I would vouch for WorldBrain's Memex

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

Search, annotation, history, tagging, notes, collection. Productivity increased! :)

<comment><USER6> Tried this yesterday. There are a ton of bugs with the product. Removed it after playing with it for an hour.

* Took me 4 tries to load the existing bookmarks from Brave. It kept crashing everytime * Doesn't support sub folders

Didn't wait to look at what other features weren't available. These two were good enough deal breakers for me.

</comment></comment><comment><USER7> If you're looking for a self-hosted bookmarking tool, here's my shameless plug: [https://darekkay.com/static-marks/](https://darekkay.com/static-marks/)

<comment><USER8> I like the built-in search. It would work great as a personalized start page akin to iGoogle from way back. [1]

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

</comment></comment><comment><USER9> Good work. I've been following Hello Code (the company that makes this) and Exist (another app of theirs) as well as your podcast for a few years now, nice to see you're making 5 figures MRR!

<comment><USER10> it is pretty cool how open they are about the business: [https://hellocode.co/stats/](https://hellocode.co/stats/)

<comment><USER11> More open startups [https://baremetrics.com/open- startups](https://baremetrics.com/open-startups)

Super interesting to see these grow.

<comment><USER12> How does the "Live Stream" of transactions work: [https://convertcalculator.baremetrics.com/](https://convertcalculator.baremetrics.com/) (lower right panel)

<comment><USER11> I believe it's just the "Live Stream" of all the transactions for your product.

</comment></comment></comment></comment></comment><comment><USER13> How is this different from Pocket which has better integration and is free? If the tool can automatically organize all my bookmarks (with some hint here and there), that would be much easier.

Workflow can be -

1\. Initially, user creates some top-level categories manually. Ex. programming languages, philosophy, art, computer networks, etc.

2\. Tool starts filing bookmarks under these top level categories and further creates sub-categories by itself where it's obvious (e.g. under prog lang - python, js, java, etc)

3\. Only if the tool is unable to find categories clearly, it should require user's attention.

For #2, tool should use factors like content, tags used by author in article, what type of content website usually posts, etc and generate score. If multiple categories above 90% score, bookmark under all those categories.

<comment><USER14> _How is this different from Pocket which has better integration and is free?_

It integrates with Github and Stackoverflow in ways that Pocket doesn't. Not sure how useful that really is, but it's certainly trying to be "for developers".

</comment></comment><comment><USER15> If I use it and decided to not pay after 6 months, then what? I lose all the curated bookmarks?

<comment><USER16> It just goes read-only. You can still access and export bookmarks.

</comment></comment><comment><USER17> Great looking app. I tend to setup a table in Notion, and then use the chrome web clipper to add pages to it. Cmd+K and enter is all it takes. Hitting enter again takes me to the page where i can add tags or notes which make them searchable later.

</comment><comment><USER18> This looks interesting. I've been using using Google Custom Search to add programming related bookmarks for git repos, blog posts, and solutions to problems to a private index. The downside is that adding new links to the index is a pain since google doesn't have an add API. This looks like it could be a good alternative.

</comment><comment><USER19> There doesn't seem to be any pricing information on the site. It should be clearly displayed on at least these pages:

home page

/pricing (404)

account sign up page

<comment><USER20> It's at least on the bottom of the front page: 6 month trial, 24/year after that.

</comment></comment><comment><USER21> Been using Larder for a few years now, does the job pretty well. I'm not sure why their iOS app is perennially in test status, but when I reported bugs they were fixed quickly.

Before that I was a Pinboard user, but it had become unreliable, effectively rotting during the long stretches Maciej dedicated to his other interests.

</comment><comment><USER22> Not a bookmarking site per se, but has many notifacation options for developers on projects that they track [https://newreleases.io](https://newreleases.io).

</comment><comment><USER23> Bookmark OS is a winner of a bookmarking service if anyone is still looking. Very visual and easy to use [https://bookmarkos.com](https://bookmarkos.com)

</comment><comment><USER24> For learning purposes, Rumin has been my tool of choice for bookmarks, web clipping, screenshots: [https://getrumin.com/](https://getrumin.com/)

</comment><comment><USER25> If you are looking for a minimal, fast bookmark manager, check out [https://getsavory.co/](https://getsavory.co/).

</comment><comment><USER26> How come it has a very similar aesthetic to Splitwise? Is that from the same developer or just using the same UI theme?

</comment><comment><USER18> Will this search inside the bookmarked content or only the titles and tags?

</comment><comment><USER27> fwiwi, I use Firefox's bookmarking only. When bookmarking, I add some keyword tags to it though. Later, it would be only a matter of typing _* keywords_ in the address bar.

</comment><comment><USER28> another shameless plug (opninionated microblog): [https://demo.0x4c.de/shaarligo](https://demo.0x4c.de/shaarligo)

</comment><comment><USER29> I'd like to see a similar product but with end-to-end encryption and ability to make written notes, like a single place for both bookmarks and notes. I don't understand why do people separate them.

</comment><comment><USER30> This will definitely help.

</comment><comment><USER31> A similar bookmarking service that's been around for a long time is Pinboard

[https://pinboard.in/](https://pinboard.in/)

<comment><USER32> I was recently going to get a Pinboard subscription, but noticed the price doubled to $22/year. That's still a low price but at the same time I don't see obvious benefits over services I can use for free. This appears to be specialized for developers, so at least after an initial glance, it might be worth $24/year. Plus it comes with a six month trial.

<comment><USER33> The biggest benefit is that Pinboard has a solid track-record of NOT going out of business.

<comment><USER32> Not as solid as Microsoft

</comment></comment></comment></comment><comment><USER34> I self-host and use this: [https://github.com/go- shiori/shiori](https://github.com/go-shiori/shiori)

<comment><USER35> Thanks for sharing.

</comment></comment><comment><USER36> > Larder is for bookmarking things on the web you'll need again.

For this I simply search my search-history on Google [1]

[1]: myactivity.google.com

> It's perfect for curating lists of libraries, tools, and reference material.

[1] serves that purpose as well.

<comment><USER37> How do you filter the activities like usual google searches which are not relevant or not useful in future ?</comment></comment>


Do you like helping a startup and winning a chipotle giftcard simultaneously? - <AUTHOR> http://adtarget.yeahsystems.com/make_ad.php <comment><AUTHOR> I'm trying to train an advertising algorithm.

The link takes you to a page to create a sample advertisement - these go into the system and are used in testing. And by entering an ad, you're signed up to win a giftcard to Chipotle, which is the unofficial currency of Yeah Systems.

Pretty fair deal, no?</comment>


¹⁄₃ of employees plan to leave: how to increase retention by helping people grow - <AUTHOR> https://blog.karmabot.chat/a-third-of-employees-plan-to-leave/ <comment><AUTHOR> A bit more info on how Australia sorted the guns out [https://news.ycombinator.com/item?id=20612204](https://news.ycombinator.com/item?id=20612204)

<comment><USER2> respectfully, what does this have to do with employee retention?</comment></comment>


Carbyne has been discovered, 40x stronger than diamond - <AUTHOR> http://gajitz.com/the-tough-polyyne-family-has-a-new-heavyweight-champ/

<comment><USER2> The arXiv link

[http://arxiv.org/abs/1308.2258](http://arxiv.org/abs/1308.2258)

is not "publication" (with peer review) in the scientific journal sense, and it remains to be seen if this preliminary finding will be confirmed. The lack of news about this yet in journalistic publications with experienced science reporters suggest that we should be cautious rather than assume that this initial report by the investigators themselves will be verified.

</comment><comment><USER3> All I want to know is, when can I take a ride on the space elevator?

<comment><AUTHOR> I G+'ed this link with the same remark. If this pans out and has the right ductability we need, this could revolutionize megastructure construction.</comment></comment>


Packaging Python software with pbr - <AUTHOR> https://julien.danjou.info/blog/2017/packaging-python-with-pbr <comment><USER2> I have never understood why people feel that pbr is better than just regular setup.py. All it seems to do is move the exact same metata into setup.cfg instead. Maybe it's a bit easier syntactically but to pull in a whole package just for that seems a bit much. Especially since you don't find yourself editing setup.py that often. You still need to learn about all the fields, what they do and what you should set them to.

I'd much more recommend reading through [https://python- packaging.readthedocs.io/en/latest/index.html](https://python- packaging.readthedocs.io/en/latest/index.html) to actually understand how packaging works.

That said... packaging stuff in Python could really do with being a lot simpler. Pbr just doesn't seem to make it simpler, it just moves the problem to a different file.

<comment><USER3> At first glance, pbr appears to solve the problem of having to duplicate my dependencies in both setup.py and requirements.txt.

<comment><USER4> Why are you using a requirements.txt if you have a setup.py that lists them? `pip install -e` or `setup.py install` should just work in that case.

<comment><USER5> What if you have your own package index? You can use `--index-url` in requirements.txt to specify that.

<comment><USER4> You can use `--index-url` when calling pip: [https://pip.pypa.io/en/stable/reference/pip_wheel/#index- url](https://pip.pypa.io/en/stable/reference/pip_wheel/#index-url)

You can also use `dependency_links` in your setup.py to specify this, which allows deps on github etc.

</comment></comment></comment></comment></comment><comment><USER6> Please don't do this. It's just yet another tool which makes the same thing as setup.py yet another way with no real benefit and it's not "standard". Everyone who did some Python packaging already know at least the basics of setup.py, now they all should learn yet another file type syntax for the same problem.

<comment><USER7> > now they all should learn yet another file type syntax for the same problem

Are you really implying that learning INI would be a burden?

<comment><USER6> Yes. Obviously it doesn't seem like so at the first glance, but when you have a product like ours, where there are hundreds of small things like this, it can really add up. I believe that everyone should use and improve the same, standard tools so we can have few, but high quality things. When you come up with something new which is just slightly different from the existing one (see Python3 first versions...) I think you are doing the wrong thing.

</comment></comment></comment><comment><USER8> I'm not a fan of this.

First of all, requirements.txt is for development requirements. Runtime ones belong in setup.py.

Also, the "extras" feature is already in setup.py via extras_require.

I see no need to use this nonstandard tool when the standard tooling works.

<comment><USER9> I do this:

requirements/

        /base.txt
        /test.txt
        /docs.txt

Then in setup.py just read these requirements.txt. I just find this easier to manage all the dependencies from a single point. During development and testing code, you'd assume base.txt is what is going to production. It takes some care to commit this file, nonetheless.

I could keep a freeze version if I really want to have a full view (for debugging purpose).

<comment><USER10> Not really. A package can be installed in both base and used in test, and vice versa, so you have no real confidence removing the package doesn't break anything. The best you get is explicit duplication.

<comment><USER9> Perhaps I didn't explain well. test.txt would only consist of packages such as "pytest". The name means a specific function. If you have a platform package that provides APIs for test classes, and APIs for other things like wrapper around AWS apis, then my recommendation is make them distinct package, even if they reside in the same repository. Just have a seperate setup.py. A package in simple terms is just a folder, module is a single file.

</comment></comment></comment></comment><comment><USER11> > automatic generation of AUTHORS and ChangeLog files based on git history

I used to think this was a good idea. Then I found a huge loophole in it: if I copy-paste code from another FLOSS project, then that code's author should still be listed, but won't have any commits.

Also, peer-programming.

> version management based on git tags

setuptools-scm already does this for us.

Finally, a big upside of setup.py, is that I can programatically generate information, whereas pbr's cfg file doesn't seem to allow that.

flavors are listed as a big deal, but much like the article says, setuptools already has this, nothing new here.

<comment> shaded-enmity > Finally, a big upside of setup.py, is that I can programatically generate > information, whereas pbr's cfg file doesn't seem to allow that.

The problem with package manifests that are arbitrary scripts (Python, Ruby and probably others) is that you lose even basic introspectability into rudimentary parameters like name, version, dependencies unless your threat model allows for executing random code that people put into the setup.py. This can be mitigated by using complex static analysis carefully crafted for the specific task, but this isn't easy to implement and there is a non- insignificant amount of cases where the data cannot be legitimately decided. I'm just wondering how this is conceptually different from Pipfiles:

[https://github.com/pypa/pipfile](https://github.com/pypa/pipfile) (Previous discussion [https://news.ycombinator.com/item?id=13011932](https://news.ycombinator.com/item?id=13011932))

<comment><USER12> Also, executable package scripts with arbitrary code are the reason why 'pip install rickroll' does exactly what it sounds like it'll do.

</comment></comment></comment><comment><USER10> To me this doesn't really solve the most painful part of packaging and deploying Python: portability.

You still need to install system files for those c line. You still can't have multiple packages requiring different versions of libraries. What a mess.

<comment><USER13> For the first part, OpenStack fairly widely uses bindep (pbr is a pretty OpenStack ecosystem thing too). It's not really perfect, but it is a fairly standard way for a CI environment deploying from git to ensure the binary dependencies. If a project doesn't have a bindep.txt file, in CI it falls back to [2] for example.

I guess your second point means something like symbol versioning for Python libraries, which I'm not aware of any solution to, apart from just running things in a virtualenv.

[1] [https://docs.openstack.org/infra/bindep/readme.html](https://docs.openstack.org/infra/bindep/readme.html) [2] [https://github.com/openstack-infra/project- config/blob/maste...](https://github.com/openstack-infra/project- config/blob/master/jenkins/data/bindep-fallback.txt)

</comment></comment><comment><USER14> PBR? People still drink that stuff?</comment>


Heroku for PHP - <AUTHOR> http://cloudcontrol.com

<comment><AUTHOR> We build this since January 2009 and already had some great feedback from our developer community. We are a small Startup based in Europe and would love to hear your feedback.

I'm around to answer any questions you might have. Feel free to vote up. ;)</comment>


Brazilian Shrunken Head Babies: Zika or Tdap? - <AUTHOR> https://brazilianshrunkenheadbabies.wordpress.com/2016/01/17/the-story/ <comment><USER2> From the article:

> _The GSK product contains aluminum hydroxide, sodium chloride, residual > formaldehyde, polysorbate 80 (Tween 80), along with the following growth > mediums and process ingredients:_ [...]

"Sodium chloride" is table salt. Or they are trying to make the vaccines look dangerous because they have too much chemicals, or they are just listing all the ingredients without filtering the "dangerous" ones from the "safe" ones. In either case, they missed dihydrogen monoxide.

</comment><comment><USER3> Why are they focusing on giving Tdap to the _mothers_ in the first place? I've never heard of evidence that doing so would confer those immunities in the womb.</comment>


Why Tiered Broadband is a Wonderful Thing and ASIVS - <AUTHOR> http://www.blogmaverick.com/2008/06/04/why-tiered-broadband-is-a-wonderful-thing-and-asivs/

<comment><USER2> So, rather than improve the infrastructure, his solution is just to cap everyone that downloads more than he does? Doesn't sound like the best long- term solution to me.</comment>


Map of Computing Architectures for AWS - <AUTHOR> https://moca.computingarchitectures.com/en/~hello-world/ <comment><USER2> This is some of the most insightful high-level thinking about AWS services that I've seen. No taxonomy is perfect, but this is invaluable for gaining a panoramic perspective on the vast sprawl of AWS.

<comment><USER3> author here, thank you! feedback very welcome! As you say taxonomies are hard, and applying them is somewhat difficult as well!

</comment></comment><comment><USER4> I don't know if the categories are the same that I would choose, but then again— I don't know if I could get it down to that few categories. it's a great attempt at mapping them all, congrats!

<comment><USER3> author here, thank you! I tried to distill everything down to some kind of fundamental of computing architeture - hopefully the three (data, exec, move) make sense, I originally called them "data, compute, messaging" but the last two terms are have too much baggage..

</comment></comment><comment><USER5> Fantastic work. I love how the url is "hello-world".

<comment><USER3> author here, thank you! homage to the K&R experience of showing something new, even if the subject matter is very different.

</comment></comment><comment><USER3> author here, happy to answer any questions..

<comment><USER6> Hi!

Is this hand made or have you written this in a code and generated the visualization? In any case, great work!</comment></comment>


Recent git features - <AUTHOR> http://jasonrudolph.com/blog/2009/05/27/git-up-10-reasons-to-upgrade-your-old-git-installation/

<comment><AUTHOR> My personal favorite is:

        git checkout --track origin/master

to create a local branch 'master' that tracks the branch 'master' on 'origin', and checks it out.

<comment><USER2> That is a nice feature. Up 'til now I've been using git_remote_branch (<http://github.com/webmat/git_remote_branch/tree/master>).</comment></comment>


Tech press rushes to cover new Linus Torvalds mailing list outburst - <AUTHOR> https://news.slashdot.org/story/19/06/28/2339245/tech-press-rushes-to-cover-new-linus-torvalds-mailing-list-outburst <comment><USER2> My favorite line from slashdot "...and vultures like us to write up about"</comment>


Cluck for iPhone – Never Miss a Text Again - <AUTHOR> http://cluckwith.me

<comment><USER2> So it's snapchat with slightly longer-lived messages and it rings your phone like a call...

Seems to me like it contains the worst aspects of calling and auto-destroying messages. My favorite parts of SMS are Async-non-intrusive messaging that I can refer back to as a "paper trail" of sorts (What was that address again? When did they want to meet? What was their friends name again?).

I've got to side with akfanta here, if not for the "Made at MIT" tag would this have received any attention?

Congrats on shipping but I'm confused as to why this is such a superior form of communication (as your launch page does little to explain). Lastly "Never miss a text again" is misleading it's more of "Never text someone who will not respond again" this app does nothing to improve SMS nor does it help you not miss a text. The same could be accomplished by calling your friend to say "I would like to start an SMS conversation with you" which, I think we can all agree, is ridiculous.

<comment><AUTHOR> Thanks for your thoughts and feedback. We created Cluck as a way to get some of the advantages of phone calling (attention-grabbing and high-bandwidth) while still preserving the casualness of messaging.

There are a lot of times where I either can't talk on the phone (in lecture, in the library), or simply don't want to (out of social convention), and I use Cluck to have meaningful conversations.

</comment></comment><comment><USER3> This seems like an awfully circuitous way to talk to people. If you're going to bother calling someone, why not just call them? The advantage of texting in that it's less of a "crying baby"-style interruption compared to a phone call's ringing is eliminated with this app.

</comment><comment><USER4> ugh... that ugly indentation of the table view borders. I wonder how much attention an app like this will get if it's not "Made at MIT".

</comment><comment><USER5> Phew that intro text is rough. I had to read it 10 times before I knew what you were trying to say. "Ring your friend like a phone call to start texting."

</comment><comment><AUTHOR> Developer here: we made this at MIT to make text messaging as efficient as possible.

It's a bit confusing, but the best way to explain is through steps:

1) Cluck a friend to vibrate their phone like a phone call.

2) When they answer, you start a real-time text conversation.

3) The messages are deleted when you end the Cluck.

We found that this is an ideal hybrid between texting and phone calling. Hope you guys enjoy it as well!

<comment><USER6> you might want to explain that better on the site. at first glance, I had no idea what this did or the benefits. only after I scrolled through all the frames did I have some what of an idea.

personally I don't see that reason for having to scroll to find more information. you only have 3 frames. i would have them all on the landing page so that the usage of the product becomes more clear.

</comment></comment><comment><USER7> I miss text all the time BUT to wait for someone to pick up before I text takes away the info dump that 90% of my text contain.

</comment><comment><USER8> Nah that's ok, I use Wuphf when I really need to get ahold of someone.

<comment><USER2> Hahaha, I was just watching this episode the other day. Youtube video for those that don't get the reference [0], it's from The Office (US).

[0] [https://www.youtube.com/watch?v=ytc9-wGCHW0](https://www.youtube.com/watch?v=ytc9-wGCHW0)

</comment></comment><comment><USER9> [http://fortune.com/2014/09/25/why-startups-fail-according- to...](http://fortune.com/2014/09/25/why-startups-fail-according-to-their- founders/)

</comment><comment><USER10> Interesting, though I'm not sure if it's solving an actual problem. I feel like one of the major aspects of SMS that contributed to its rise in popularity is that it is non-intrusive.</comment>


Show HN: Experimental no-magic Python test framework inspired by mocha - <AUTHOR> https://github.com/xi/assamtest <comment><AUTHOR> I have been wondering why everybody seems to be so pleased with the current state of testing in python. Everybody seems to think that pytest is really cool, but to me it never felt ideal.

To get a better understanding of the topic I tried to experiment with other ways to write tests in python. Feel free to show me how foolish my attempt is, I am ready to learn and change my mind.</comment>


AMD unveils 14nm Ryzen Embedded V1000 to compete with Intel Xeon D - <AUTHOR> http://linuxgizmos.com/amd-unveils-ryzen-embedded-v1000-and-epyc-embedded-3000-socs/ <comment><USER2> It sounds like this is Raven Ridge — I'm guessing Ryzen Embedded is to Ryzen Mobile something like what Ryzen PRO is to vanilla Ryzen? But with longer-term support.

</comment><comment><USER3> Nice to see some competition in this space.

For those curious, the Xeon Ds are designed for low-power servers; one can get a 8 core/16 hyperthread D-1541 that has a TDP of 45W. Makes for a nice home server but Intel has been charging a lot for them. AMDs offering will hopefully be a good alternative that's more reasonably priced.

</comment><comment><USER4> I'm eager to see these in the field. I hope the SoC's that roll out incorporate ECC memory.</comment>


Real-time log monitoring in your browser - <AUTHOR> http://logio.org/ <comment><USER2> Ancient discussion: [https://news.ycombinator.com/item?id=2622909](https://news.ycombinator.com/item?id=2622909)</comment>


Hire Brian Rhea - <AUTHOR> http://hirebrianrhea.com/

<comment><USER2> This is one of the least-usable sites I've ever seen.

<comment><USER3> Hm. I found it pretty entertaining. On a side note, I visited your site, fractalcat, and got "Unhandled Exception" when I tried to check your blog.

So, cool comment, bro.

<comment><USER2> Yeah, but I'm not submitting my homepage to Hacker News seeking work as a UX dev. :P

Thanks for the heads-up; blog's back up now. That'll learn me to not set up nagios.

</comment></comment></comment><comment><USER4> Gorgeous site. Excellent Front-end and UX/UI skills. Someone hire this Sir.

</comment><comment><USER5> "Textmate" should read "TextMate".

<comment><USER6> Thanks dcope, corrected!

</comment></comment><comment><USER7> Best. resume site. Ever.

<comment><AUTHOR> I know, right. It's awesome to see when people put a lot of work into making these things.</comment></comment>


The Amazon Controversy: What Is Missing in Its Performance Management? - <AUTHOR> http://blog.impraise.com/360-feedback/the-amazon-controversy-what-is-missing-in-its-performance-management-360-feedback <comment><USER2> A job is a contract between two parties for a period of time. If you remove all kinds of unspoken expectations from employment, it would be a productive arrangement for the two parties. In a scarcity world me being an employee expects the employer to be more generous but when I have better opportunity, I am more likely to be not loyal to the company the same way a company replaces me with cheaper options. Employer needs good PR to be perceived in positive light and the employee has to meet the loyalty threshold to be hirable. The game gets more complex.

Turns out, humans prefer long term relationships when it comes to employers. Amazon is like a short term fling may be a 1 year stand. I doubt their retention is better than that. We will have to see the long term effects of this trend. I predict that if people perceive amazon as a short time gig, Amzn will have problem hiring anyone other than immigrants with visa regulation handcuffs.</comment>


Venture Capitalists Return to Backing Science Startups - <AUTHOR> http://www.nytimes.com/2014/10/13/business/venture-capitalists-return-to-backing-science-start-ups.html

<comment><USER2> Andresen has mentioned that government's funding of science is more crucial because it takes a while for a breakthrough into a new area to happen, like 20 years long - companies can grow on results achieved in science. However well intentioned VCs are they are more goal oriented.

Bell being huge and not unlike government organizations had bell labs - i am sure you all know that transistor came from there. Idea for bell labs was to put many great scientists together and wait for things to happen. Internet is the other thing - one cannot imagine private money investing that much in such nebulous goal - where everything from microcircuits to software stack had to be developed to birth the Internet.

VC doing science is not a bad thing but in the long run government can provide a steadier hand to people that do science than market driven entities. Financial market cycles are detrimental to projects that run on 20-30 year span or clusters of research projects.

If VCs can do a hybrid model where government can step in during lean times and help science projects survive with minimal bearacratic interference I think that could the best IMO.

<comment><USER3> I have mixed feelings about an impending Flight to Substance.

It's a good thing overall, but it can be bad for talented generalists. If there's enough demand for smart people that science and "real technology" companies will train talented generalists up into the specialties they need, then it's good. On the other hand, genuine research and technology have been so under-funded that the culture has become parochial and unreasonably elitist (against talented generalists). I deal with a ton of PhD bigotry in machine learning. (I don't have a PhD, but I read papers and I'm more current and, almost certainly, more effective than someone who stopped reading papers 5 years ago.)

For example, there used to be BA-level science jobs. There still are-- but they're filled by PhDs. Real science has been under-invested for years and we're paying a price because a lot of our brightest people don't have any experience with real work, because they can't get jobs on projects that actually matter.

In the 1970s to '90s, Silicon Valley wasn't pedigree-obsessed and talented generalists could "just fucking build it" without having to acquire permissions and credentials. What happened later, unfortunately, is that smooth-talkers moved in, outcompeted us on social polish, and are now raising huge sums of venture capital on lame "social media" ideas and build-to-flip bullshit. Right now, the genuinely talented generalist engineer loses in both theatres. He can't get a proper role in the Substance world (real science and technology) because he's not a PhD with at least one paper per year since graduation, but he can't get a proper role in the generalist's promised land of Silicon Valley because the smooth-talking douchebags with lame ideas have taken it over. Between "ultra-hard" science that requires either 5+ year job tenures (to make it worth it for employers to train people up) or advanced degrees, and that typically involves a decade between innovation and profit; and the "easy" social media stuff that any idiot can do (scaling such services is genuinely hard, but tech talent can be back-filled later) there is a "moderately hard" space that is under-explored.

<comment><USER4> The value of a Ph.D isn't in the knowledge you learn or papers you read, it's in demonstrating the ability to take on a vaguely-specified original research task where you can't see the eventual outcome at the beginning, and drive it forward until you come up with something useful. All without having the support of other people who actually know what they're doing to guide you. If you're measuring knowledge by what you've learned from papers, you're missing the point.

There are other ways to develop this skill. I've never once felt hampered by the lack of a Ph.D, but that's because fairly early on in my career, I took on tasks that were scary, that nobody knew how to do, and drove them forwards until they were useful to other people. But it does require _following through_ on original work, and pushing your projects forwards even when other people think they're a bad idea, and accepting responsibility for results rather than effort or ability.

<comment><USER3> _The value of a Ph.D isn 't in the knowledge you learn or papers you read, it's in demonstrating the ability to take on a vaguely-specified original research task where you can't see the eventual outcome at the beginning, and drive it forward until you come up with something useful. All without having the support of other people who actually know what they're doing to guide you._

Fair, and I think it's pretty obvious that the education of a PhD (including the meta-education of having to teach yourself how to solve a new problem) is quite valuable, and that it's relatively rare that a person gains that outside of a degree program.

I don't like the hypocrisy and inconsistency. There are a lot of jobs that (even if the work doesn't require it) expect an advanced degree in the better jobs, but refuse to ante up and pay for employees to get them. If they really thought that the education was important, they'd hire people without the degree on condition that they pursue one, and pay for it.

<comment><USER5> _they 'd hire people without the degree on condition that they pursue one, and pay for it_

It's my understanding that some companies will still fund your education, although it's not as common as it used to be. Here's a sampling: [http://www.businessinsider.com/companies-that-will-pay- for-y...](http://www.businessinsider.com/companies-that-will-pay-for-your- tuition-2014-6)

Maybe that's not really what you mean, though...

I think the kind of deal that you're thinking about between an employer and an employee may have made sense at one point, when companies thought of employees as long-term assets, and employees had a reason to be loyal. The only way this might work now would be for an employee to agree to reimburse the education expenses if they leave before x years of employment are complete. That sounds like a loathsome form of indentured servitude, to me. I guess if you're desperate then you'll take it, and that's why some people sign up to the armed services in the US. But someone who is capable of PhD quality work probably has more flexible options.

</comment></comment></comment></comment></comment><comment><USER6> We must be at the top of the market if VC's are backing science. I know that investing in real science is the most important thing that we as a society can invest in, yet as an asset class it has never done anything other than lose money for investors. What is the date - February 2000?

<comment><USER7> Do you suggest it's desperation - VC's finally are bored with or are exhausting the software space? Rationally, they would only invest if the incentive for sufficient return existed.

So what has changed with regard to starting a "science company"? I assume it's easier to begin prototyping and have a POC to convince investors. The issues of scaling such "science" to real-world levels is definitely more resource intensive and can be hit with more regulatory steps (biotech for example).

But what other factors have changed for "science companies" that make them more attractive investments?

<comment><USER8> Major tech companies - Google, Tesla, Facebook - seem to be investing more and more heavily in their long-term future and diversifying what areas they're involved with. Perhaps the goal is to be bought out by a Musk or Musk-lite?

<comment><USER7> I think that is reasonable - these science companies prove a concept then get moved in house or are deeply assisted by a company with much more resources and capital to allow the idea to evolve and to thrive.</comment></comment></comment></comment>


City of Helsinki Wants To Keep Software Costs Secret  - <AUTHOR> http://fsfe.org/news/2012/news-20120711-01.html

<comment><USER2> A bit off-topic, but I really don't think that LibreOffice is a good alternative for MS Office. Every single time I try to do something in LibreOffice I find out that it's missing some incredibly basic feature that I need. Last time it was rotating images in Writer: I had to edit the image in another app.

MS products get a lot of hate but I think that Office (at least the newest verions) really has nailed it. Shame it's not on Linux.

<comment><USER3> Agreed. I tried using the Libre suite for a while to save on costs, but the time I spent grappling with Libre was worth much more to me than the $120 cost of Office.

You can rightfully accuse Office of feature creep, but I'd still rather use it over any of its competitors.

</comment></comment><comment><USER4> Everybody in the Finnish software business knows that much of the public procurement happens over various "old boys club" arrangements, and "surprisingly" usually ends in the hands of the same two or three big IT providers.

Finland used to be regarded as one of the least corrupted countries, but that has crumbled as more and more of these situations surface.

No wonder they want to keep their costs secret.

<comment><USER5> Please don't spread those kind of rumors as they are not true. Public procurement happens through an open process in which I have been also participating. Everybody involved can get their competitors RFQ replies and get the verdict with comments for each RFQ section.

True, most big acquirements go for two or three big IT providers, but let's face it - how many big IT companies Finland can hold which have the men power available to provide big systems and long term support? And for the record, I do not work for any of those three.

The official reply for requesting the details of the Open Office report was denied due to the fact that city of Helsinki has made a deal with Gartner Ireland Ltd which denies them giving out the figures for two years. Perhaps a bad contract, but hopefully they'll learn from it.

<comment><USER4> I admit, I probably used a bit stronger words than warranted, but this is entirely due to the frustration on the constant state of public IT procurement failure in the country.

Anyway, I'm quite well aware how the RFQ process works. The problem is that even though the idea works well, it is still very easy to write your requirements so that your preferred vendor gets the deal.

This is sort of in line with the classic Stalin quote: _I consider it completely unimportant who in the party will vote, or how; but what is extraordinarily important is this—who will count the votes, and how._

Also, I find it curious that the city is even allowed to get into deals that deny them public accountability.

This might be a great strategy for a politician: if you screw up, lock the details behind a similar deal, only to be opened after the next elections.

</comment></comment></comment><comment><USER6> The migration from MS Office to LibreOffice is not straightforward, especially if you have millions of documents. In my experience, any complex document will almost always fail to render correctly ...

</comment><comment><USER7> I don't think public sector and enterprises should try to find alternative software for Microsoft Office. Instead, they should move everything to browser and kill software by implementing great document/content management systems support that.

</comment><comment><USER8> They say that their 21000 pc pilot project with LibreOffice shows that using LibreOffice over their proprietary office tools increases the cost by 70%. This seems very difficult to believe without proper arguments.

<comment><USER9> The fact is that LibreOffice is just not that great. Sorry.

<comment> excuse-me Does your city council's housing dept really need any WP functionality that wasn't in Wordpad or Windows 3.1 Write?

<comment><USER9> You know, it probably does. When they produce reports, they need to be able to do things like footnotes, tables of contents, indices; incorporate maps and graphics, and scale or otherwise make them print-ready; use a variety of different layouts and templates to make information accessible to the public; expand or modify historical reports and datasheets (ie, load files that were produced at least within the last 10 years, if not 20); and possibly produce these documents in a variety of different languages and/or formats.

In terms of single documents used for correspondence, they likely need things like mail merge, change tracking, multiple authorship (housing departments deal with a lot of legal issues, from evictions to liability to real estate transfer) and so on.

You're falling into a classic developer trap of not being interested in other people's jobs, and thus assuming that the jobs don't need uch int he way of technology. It's the same mindset that leads people to suggest using emacs for everything -because that's what the developer uses all day; or doing everything at a shell prompt - despite the obvious market preference for GUIs; or that everybody should learn to code - though most people clearly prefer not to. One might as well suggest that developers should just stop piddling about with software and learn to build their own hardware instead of pursuing the massively wasteful path of general-purpose computing.

<comment> excuse-me Not a developer - I'm a project manager in a high tech industry.

A lot of my time is dealing with reports and projects where somebody decided that they didn't quite like how a title of a table was formatted and so made their own "fixes" which looked ok on their machine. Or they couldn't understand some remote object linking functionality so they converted the spreadsheet into an image and embedded that.

I suspect a lot of companies, and certainly most goverment offices, would be more efficient if the people who write pretty much standard letters to customers/claimants didn't have the same MS-office install as somebody editing 10,000 page technical reports for an Airbus A380.

You can (or at least we used to) customize the menus/toolbars for Word to make a simplified version for secretaries that were really happier with typewriters.

<comment><USER10> Yup, I daily have to deal with Office documents that have 'pointless' formatting. A good set of templates _with formatting protected_ could save so much time. That goes for Open/Libre Office as much as MS Office.

LibreOffice has mathematical formula editing that I find much more congenial than that currently provided in MS Office 2010. (Yes I know LaTex but I'm talking casual use of simple formulas here).

</comment></comment></comment></comment></comment></comment><comment><USER11> It's not difficult to see how LibreOffice costs more than Microsoft office.

Lets imagine that the average city worker gets paid $60,000 per year and works 1500 hours per year, (35 hour work week, 4 weeks paid vacation) or $40 per hour.

A copy of Office on newegg costs $349 which is pretty much the highest price anyone will ever pay for MS Office. A city probably pays closer to $50 to $100.

Lets imagine a day of training for LibreOffice, and a day of downtime over a year due to incompatibilities (lets assume that there are no bugs in Libre Office and the incompatibilities are purely due to MS's monopolistic practices), 14 hours times $40 is $560 and we haven't even paid for the instructor for the training or the IT guy to fix the problems.

<comment><USER12> Perhaps if you assume that the person is already proficient in Microsoft Office, that might be true. But if you've ever watched someone go through the MS Office 2003 ==> 2007/2010 transition ("You do not like _the ribbon?_ You must bear the ribbon!") it is not a productive sight either. They're still using Office 2003 on Windows XP at my wife's job.</comment></comment>