UTF-8 Everywhere (2012) - <AUTHOR> http://utf8everywhere.org/ <comment><USER2> The Python problem is amusing. Python 3 has three representations of strings internally (1-byte, 2-byte, and 4-byte) and promotes them to a wider form when necessary. This is mostly to support string indexing. It probably would have been better to use UTF-8, and create an index array for the string when necessary.

You rarely need to index a string with an integer in Python. FOR loops don't need to. Regular expressions don't need to. Operations that return a position into the string could return an opaque type which acts as a string index. That type should support adding and subtracting integers (at least +1 and -1) by progressing through the string. That would take care of most of the use cases. Attempts to index a string with an int would generate index arrays internally. (Or, for short strings, just start at the beginning every time and count.)

Windows and Java have big problems. They really are 16-bit char based. It's not Java's fault; they standardized when Unicode was 16 bits.

<comment><USER3> I think it's even better to take this one step further and have your default "character" actually be a grapheme[1]. In almost any case where you're dealing with individual character boundaries you want to split things on the grapheme level, not the code-point level.

This doesn't matter much for (normalized) western European text, but if the language in question needs to use separate diacritical code points you'll likely end up with hanging accents in the like. Swift is the only language I know of that has grapheme clusters as the default unit of character, I'd love to see it in more places.

[1]: [http://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries](http://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries)

<comment><USER4> Never understood that either. Why is this so rare? Even in technical discussions like this one, some people will look at you funny upon hearing this suggestion.

<comment><USER5> Navigating a UTF-8 string on codepoint level is a fairly simple algorithm, since UTF-8 is self-synchronizing. This means it can easily be done without relying on external libraries or data files. It's also stable with respect to Unicode version--it always produces the same result independent of what version of the Unicode tables you use.

Moving to grapheme cluster boundaries means that the algorithm may work incorrectly if you input a string of Unicode N+1 to an implementation that only supports Unicode N. It also makes the "increment character" function very complicated. In the UTF-8 version, this looks roughly like:

        char *advance(char *str) {
          uint8_t c = (uint8_t)*str;
          /* Count the number of leading 1's */
          int num1s = __builtin_clz(~c) - 24;
          if (num1s == 0) return str + 1;
          return str + num1s;
        }

Grapheme-based indexing looks like this:

        char *advance_grapheme(char *str) {
          while (true) {
            uint32_t codepoint = read_codepoint(str);
            str = advance(str);
            uint32_t nextCodepoint = read_codepoint(str);
            /* This is typically something like table[table2[codepoint >> 4] * 16 + codepoint & 15]; */
            GraphemeClusterBreak left = lookupProp(codepoint);
            GraphemeClusterBreak right = lookupProp(nextCodepoint);
            /* Several rules based on left versus right... */
          }
          return str;
        }

See the vast difference in the two implementations? It's a lot of complexity, and it's worth asking if that complexity needs to be built into the main library (strings are a fundamental datatype in any language). It's also important to note that it's questionable whether such a feature implemented by default is going to actually fix naive programmers' code--if you read UTR #29 carefully, you'll notice that something like क्ष will consist of two grapheme clusters (क् and ष), which is arguably incorrect. Internationalization is often tied heavily to GUI and, especially for problems like grapheme clusters, it arguably makes more sense for toolkits to implement and deal with the problems themselves and provide things like "text input widget" primitives to programmers rather than encouraging users to try to implement it themselves.

<comment><USER6> History has shown that, when it comes to strings, developers have a hard time getting even something as simple as null-termination correct. If grapheme handling is complex, that's an argument for having it implemented by a small team of experts exactly once. The resulting abstraction might not be leak- proof, but then no abstraction is.

</comment></comment></comment></comment></comment><comment><USER7> It's interesting how history seems to have repeated itself with UTF-16. With ASCII and its extensions, we had 128 "normal" characters and everything else was exotic text that caused problems.

Now with UTF-16, the "normal" characters are the ones in the basic multilingual plane that fit in a single UTF-16 code point.

<comment> mark-r It's worse. With UTF-8, if you're not processing it properly it becomes obvious very quickly with the first accented character you encounter. With UTF-16 you probably won't notice any bugs until someone throws an emoticon at you.

<comment><USER8> Unfortunately not. It's easy to process UTF-8 such that you mishandle certain ill-formed sequences that you are unlikely to encounter accidentally. IIS was hit [1], Apache Tomcat was hit [2], PHP was hit twice [3] [4].

UTF-16 has its own warts, but invalid code units and non-shortest forms are exclusive to UTF-8.

[1] [http://www.sans.org/security-resources/malwarefaq/wnt- unicod...](http://www.sans.org/security-resources/malwarefaq/wnt-unicode.php)

[2] [http://cve.mitre.org/cgi- bin/cvename.cgi?name=CVE-2008-2938](http://cve.mitre.org/cgi- bin/cvename.cgi?name=CVE-2008-2938)

[3] [https://www.cvedetails.com/cve/CVE-2009-5016/](https://www.cvedetails.com/cve/CVE-2009-5016/)

[4] [https://www.cvedetails.com/cve/CVE-2010-3870/](https://www.cvedetails.com/cve/CVE-2010-3870/)

</comment></comment></comment><comment><USER9> This article was from 4 years ago. Since then, utf 8 adoption has increased from 68% to 87% of the top 10 million websites on Alexa:

[https://w3techs.com/technologies/history_overview/character_...](https://w3techs.com/technologies/history_overview/character_encoding/ms/y)

<comment> Const-me _Unicode_ adoption increased to 87%. At the cost of non-Unicode encodings.

UTF16 isn't good enough for web: even for a content in Ukrainian or Hebrew languages, UTF8 saves a sizeable bandwidth because spaces, punctuation marks, newlines, digits, English-inspired HTML tags — in UTF8 they all encode in 1 byte per character, and for the web, bandwidth matters.

<comment><USER9> > _Unicode_ adoption increased to 87%. At the cost of non-Unicode encodings.

Am I reading that site incorrectly? It says: UTF-8: 87.2%, not unicode.

Then down below:

" The following character encodings are used by less than 0.1% of the websites"

UTF-16

[https://w3techs.com/technologies/overview/character_encoding...](https://w3techs.com/technologies/overview/character_encoding/all)

</comment></comment></comment><comment><USER10> When you create a table in MySQL, a text attribute (VARCHAR etc.) is not encoded in UTF8 by default.

I think UTF8 should be the default and only format for storing text attributes in all databases and all other text encodings should be removed from database systems.

<comment><USER11> We can't even convince Microsoft, Apple, and everything else Unix based to agree on line endings. How on earth are we going to convince everyone that one character encoding format is the only way they should store their data?

Annoying as it is to deal with, our history as computer scientists demands that we maintain compatibility with older systems and encoding formats that were once used but are now almost forgotten. If we removed all the other encoding formats (code paths that, while underused, still function perfectly fine) we would lose the ability to parse and manipulate a lot of old data.

<comment><USER12> The universal line ending character is \n. (Except in Microsoft's universe, but that's never been compatible with the rest.)

<comment><USER13> Not true, most of the plain text protocols like SMTP, FTP, HTTP/1.1 etc. also mandate \r\n.

</comment></comment></comment></comment><comment><USER14> I have the feeling that back in 1990, ISO 10646 wanted 32-bit characters but had no software folks on that committee, while the Unicode people was basically software folks but thought that 16-bit was enough (this dates back to the original Unicode proposal from 1988). UTF-8 was only created in 1992, after the software folks rejected the original DIS 10646 in mid-1991.

</comment><comment><USER15> this seems specific to Windows. UTF8 is already standard in Linux and the web for example. It's just Microsoft.

<comment><USER16> An interesting suggestion they make is to keep utf-8 also for strings internal to your program. That is, instead of decoding utf-8 on input and encode utf-8 on output, you just keep it encoded the whole time.

<comment><USER17> What would be a good alternative for strings internal to your program?

I work with multilingual text processing applications, and I strongly support that concept. A guideline of "use UTF8 or die" works well and avoids lots of headaches - it is the most efficient encoding for in-memory use (unless you work mostly with Asian charsets where UTF16 has a size advantage) and it is compatible with all legal data, so it's quite effective to have a policy that 100% of your functions/API/datastructures/databases pass _only_ UTF8 data, and when other encodings are needed (e.g. file import/export) then at the very edge of your application the data is converted to that something else.

Having a mix of encodings is a time bomb that sooner or later blows up as nasty bugs.

<comment><USER8> Abstraction is the alternative. Design an API that treats encodings uniformly, and the encoding becomes an internal implementation detail. You can then have a polymorphic representation that avoids unnecessary conversions. NSString and Swift String both work this way.

</comment></comment></comment></comment><comment><USER18> May be off-topic, I wonder if anyone is planning a redesign of Unicode for the far future? or is there a better way to handle characters, so we don't require a giant library like ICU?

<comment><USER17> If you want to handle characters by anything much simpler than current Unicode, you need to simplify the reality that Unicode describes, changing or eliminating a bunch of major human languages. Not all of them, and not even most of them, but still hundreds of millions of people would need to change how they use their language.

It could happen in a century or two, actually, we are seeing some language trends that do favor internationalization and simplification over localization and keeping with linguistic tradition.

<comment><USER19> Simplication (caused by internationalization) and diversification (caused by localization) are two ends of a spectrum, but languages, both their spoken and written forms, have bounced between those ends throughout history. In a century or two, by the time simplification has succeeded on Earth, the settlers on Titan will rebel with their own graphical symbols for displaying language.

</comment></comment></comment><comment> Const-me > In both UTF-8 and UTF-16 encodings, code points may take up to 4 bytes.

Wrong: up to 4 bytes UTF16, and up to 6 bytes UTF8.

> Cyrillic, Hebrew and several other popular Unicode blocks are 2 bytes both > in UTF-16 and UTF-8.

Cyrillic, Hebrew and several other languages still have spaces and punctuation, that take a single byte in UTF8. Now it's 2016, RAM and storage are cheap and declining, but CPU branch misprediction cost is same 20 cycles and not going to decline.

> plain Windows edit control (until Vista)

Windows XP is 14 years old, and now in 2016 it's market share is less then 3%. Who cares what was before Vista?

> In C++, there is no way to return Unicode from std::exception::what() other > than using UTF-8.

The exception that are part of STL don't return Unicode at all, they are in English.

If you throw your custom exceptions, return non-English messages in exception::what() in utf-8, catch std::exception and call what() — you'll get English error messages for STL-thrown exceptions, and non-English error messages for your custom exceptions.

I'm not sure mixing GUI languages in a single app is always a right thing.

> First, the application must be compiled as Unicode-aware

The oldest visual studio I have installed is 2008 (because I sometimes develop for WinCE). I've just created a new C++ console application project, and by default it already Unicode-aware.

So, for anyone using Microsoft IDE, this requirement is not a problem.

<comment><USER20> Modern UTF-8 is limited by 4 bytes (not 6). [http://stackoverflow.com/questions/9533258/what-is-the- maxim...](http://stackoverflow.com/questions/9533258/what-is-the-maximum- number-of-bytes-for-a-utf-8-encoded-character)

I haven't checked your other claims but this stands out:

> The exception that are part of STL don't return Unicode at all, they are in > English.

Do you mean they return the text as bytes using some (likely ASCII) character encoding and all the text characters are in ASCII range?

 _There Ain 't No Such Thing As Plain Text._ (2003) [http://www.joelonsoftware.com/articles/Unicode.html](http://www.joelonsoftware.com/articles/Unicode.html)

<comment> Const-me > Do you mean they return the text as bytes using some (likely ASCII) > character encoding and all the text characters are in ASCII range?

If you rely on std::exception::what() while building a localizable software, you'll end with inconsistent GUI language. Because some exceptions (that are part of STL) will return English messages, other exceptions (that aren't part of STL) will return non-English messages.

This means if you're developing anything localizable, you can't rely on std::exception::what().

Then why care about it's prototype?

<comment><USER21> The standard does not specify what the standard exceptions return from what(). It does not have to be in English.

Why care about it's prototype? You may want to embed into what() unicode strings that describe the error and came from elsewhere. E.g. a path, a URL, an XML element id, etc. from the context the exception originated. It may be shown to the user or written to the log. Localization is irrelevant here.

</comment></comment></comment></comment><comment><USER22> Is there any application where UTF-8 isn't the best choice for long-term (i.e., 20-200 year) forward compatibility?

<comment><USER23> Places and situations where you can't accommodate variable-length encodings. As far as future-proofing, UTF-8 is essentially the new ASCII, in that UTF-8 will remain a backward-compatibility goal for any other format that will succeed it.

<comment><USER22> > As far as future-proofing, UTF-8 is essentially the new ASCII, in that UTF-8 > will remain a backward-compatibility goal for any other format that will > succeed it.

Yes, I love that every byte transmitted on the Internet still reserves code points for controlling teletype (or similar) machines.

</comment></comment></comment><comment><USER24> After considering this problem in long detail in the past, I too favoured utf8 at the time.

I remember a project (circa 1999) I worked on which was a feature phone HTML 3.4 browser and email client (one of the first). The browser/ip stack handled only ascii/code page characters to begin with. To my surprise it was decided to encode text on the platform using utf-16. Thus the entire code base was converted to use 16 bit code points (UCS-2). On a resource constrained platform (~300k ram IFIRC), better, I think, would have been update the renderer and email client to understand utf8.

Nice as it might be to have the idea that utf16, or utf32 were a "character" it is as has been pointed out not the case, and when you look into language you can see how it never can be that simple.

</comment><comment><USER25> I quite like Swift's approach -Characters, where a character can be "An extended grapheme cluster ... a sequence of one or more Unicode scalars that (when combined) produce a single human-readable character.". This seems, in practice to mean things like multibyte entries, modified entries, end up as a single entry.

As the trade-off, directly indexing into strings is... Either not possible or discouraged, and often relies on an opaque(?) indexing class.

The main weirdness I have encountered so far is that the Regex functions operate only on the old, objective-c method of indexing, so a little swizzling is required to handle things properly.

</comment><comment><USER26> Offtopic, but does anyone know of a way to ensure I don't introduce non-ASCII filenames, to ensure broad portability across systems? I've had to resort to disabling UTF-8 on Linux to achieve that.

<comment><USER27> What's the use case? Make sure you don't introduce them as a desktop user? As a app developer? (what does the app do?) As a sysadmin with third party unknown apps?

You can't really "disable utf-8" on Linux. You can change how things are encoded when displaying or saving. (via locale/lang variables) But if the app wants to create a file named "0xE2 0x98 0x83" (binary version of course), it's still free to do that.

<comment><USER26> I just don't want garbage file names when sharing a file system between systems that don't agree on the encoding. I was thinking maybe some mount option. I can use ISO-88591 and skip UTF-8. I haven't found a mount option for ext4 or xfs yet.

<comment><USER27> There isn't one. The names in ext4 and xfs are opaque binary with some simple limitations (like null bytes). Encodings simply don't exist at the fs layer.

You could probably write some filter using fusefs, but in practice... I think you should configure the servers / clients to agree on encoding instead. Better supported and shouldn't be that much work.

</comment></comment></comment></comment><comment><USER28> This militancy to _force_ everyone to use UTF-8 is bad engineering. I'm thinking of GNOME 3, where you aren't even allowed the option of choosing ASCII as a default setting, only UTF-8 or ISO-8859-x. A default setting is just as important for what it filters out as for what it passes through. I use a lot of older tools on *nix that are ASCII-only, in tool chains that slurp and munge text. If the chain includes any of these UTF-8-only apps, I'm constantly dealing with the problem of invalid ASCII passing through.

</comment><comment><USER29> With or without a BOM?

<comment><USER30> Putting a BOM in UTF-8 is just silly. Unlike -16, there's no option for which order you put the bytes in. The only time you'll see a BOM in UTF-8 is in poorly converted UTF-16.

<comment><USER31> Apparently, Powershell requires a BOM to recognize UTF-8 scripts. [https://github.com/chocolatey/choco/wiki/CreatePackages#char...](https://github.com/chocolatey/choco/wiki/CreatePackages#character- encoding)

</comment></comment></comment><comment><USER32> Some days, I imagine a parallel universe, where the ancient Chinese had called ideograms a bad idea, and went on to develop a proper alphabet. Unicode would be pretty much unnecessary.</comment>


Project Trident Moves to Void Linux from FreeBSD - <AUTHOR> https://project-trident.org/post/os_migration/ <comment><USER2> Why not OpenBSD?

<comment><USER3> Well, considering they're moving due to things like poor Wifi, GPU and Bluetooth support...</comment></comment>


Show HN: A Mobile app web demo product - <AUTHOR> https://app.io/?

<comment><USER2> Previous discussion on app.io

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

<comment><AUTHOR> Well shit, my bad. Anyway, logic goes that if I hadn't seen it then a good portion of HN didn't .. dont hold it against them, my fault.

<comment><USER3> Uhm, "Show HN" is for your own projects.

<comment><AUTHOR> really, well double shit again.. They already cleared this off but thanks for pointing it out

</comment></comment></comment></comment><comment><USER4> I was super impressed with app.io when I used it. TestFlight works awesome for on device demos, but is still a bit of work to get it going. Appio let me quickly show my designer how his design was looking without having to actually set up his device, I was happy. I wish (and I told them this via email) there was a price point between free and $1200/yr.

</comment><comment><USER5> This is what's missing from the app store (not sure if there are similar products out there). Screen shots can only show you so much about an apps interface prior to purchase. Demo's like this are how you get me to buy a $5 app when I'd probably balk at the $1 version with no demo.

<comment><AUTHOR> Def, apple could literally make a few extra hundred million using something like this.

</comment></comment><comment><USER6> The pricing honestly makes this unfeasible for me. This is exactly what I was looking for, but if I have an app I expect to be at least slightly popular, even the 20,000 plays a month at $95 is going to be too much, especially for launch month.</comment>


Draw a horizontal tree using CSS pseudo elements - <AUTHOR> https://igauravsehrawat.github.io/draw-a-horizontal-tree-using-css-pseduo-elements <comment><USER2> This is really cool. Yet, somehow, as cool as it is, I find it terribly depressing. In comparison to other "look what I can do" projects -- such code golf, or demo programming, or quines -- which achieve impressive results in a constrained environment because it's challenging, thousands of programmers have HAD to do silly things in CSS because there's no other choice. These amazing-yet-hacky solutions get copy-pasted down through the generations and what should be simple becomes enshrined in the arcane. I look at this and become exhausted in empathy.

So in contrast to the opening line of the article, CSS is not amazing: people's talent for threading camels through the eyes of needles is amazing. Props to this guy for this. May I never have to recreate it.

<comment><USER3> Not sure what point you are making here, but one of the nice things about modern browsers is you can write CSS and see the page update in real time. This is likely where a lot of OPs code came from, that might look confusing if you take it at face value only.

Whenever I'm faced with a CSS problem, it's usually just a case of toggling on/off CSS in the DevTools to find the offender.

<comment><USER4> lucky you, whenever I face a css problem, it's usually the Safari/iOS engine doing something stupid with the browser chroma and requiring dozen hops to work around.

</comment></comment></comment><comment><USER5> Very cool writeup. I love posts like this that cover random things like this. I'm definitely going to take this away and mess around with it!

</comment><comment><USER6> It's amusing that both this and "SVG can do that?"[1] are on the front page right now. Is it better to draw using HTML/CSS or SVG? I guess the answer is complicated.

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

<comment><USER3> SVG can work very well, an example project is Google Blockly [1].

[1] [https://developers.google.com/blockly/](https://developers.google.com/blockly/)

<comment><USER7> is this the same thing MIT scratch uses?

<comment><USER3> From the docs [1]:

 _" Scratch Blocks [2]: Designed by the people behind MIT's Scratch and built on the Blockly code base, Scratch Blocks offers a simplified programming model ideal for young learners."_

[1] [https://developers.google.com/blockly/guides/overview](https://developers.google.com/blockly/guides/overview)

[2] [https://scratch.mit.edu/developers](https://scratch.mit.edu/developers)

</comment></comment></comment></comment><comment><USER8> By the title I thought it was a tree 'tree', with leaves and branches :) those you can find in a forest.

Though nice howto nonetheless :)

<comment><USER9> There is also this kind of forest: [http://mathworld.wolfram.com/Forest.html](http://mathworld.wolfram.com/Forest.html)</comment></comment>


PyThalesians: Python Open Source Financial Library - <AUTHOR> https://github.com/thalesians/pythalesians <comment><USER2> Does anyone know more information or have experience with the bloomberg data source? How expensive is this sort of thing?

<comment><USER3> Very. The standard terminal product they offer is around 2K per month. You can buy just the data (as many third parties do) but that'll also cost a pretty penny. It's a great data source, but definitely not cheap.

<comment><USER4> You can also use Quandl data too (most series are free). I subscribe to Bloomberg and it's great data source, but obviously it's not that cheap. (I'm the developer of PyThalesians - if you'd like me to add other data sources let me know!)

<comment><USER5> Xbrl integration for SEC filings</comment></comment></comment></comment>


Radiohead to Testify Against the RIAA - <AUTHOR> http://torrentfreak.com/raiohead-to-testify-against-the-riaa-090404/ <comment><USER2> Even if they were completely selfish, Radiohead makes any money lost by their DRM free stance back on press and popularity. Based on what I've read about them, this isn't how they operate at all, but it's nice when you can change the world and make a profit at the same time.

<comment><USER3> What do you mean, "this isn't how they operate at all?" Operate regarding what? Citation?

<comment><USER4> He means they're not completely selfish, and the anti-DRM stance isn't just a cynical front.</comment></comment></comment>


Streamlabs OBS – open-source streaming software built on OBS and Electron - <AUTHOR> https://github.com/stream-labs/streamlabs-obs/ <comment><USER2> I don't quite understand why. OBS studio runs quite well unlike most electron apps I have used. Why make an electron version?

<comment><USER3> Pretty sure their market is those who aren't as tech savvy. There's not as much overlap between tech savvy people and video gamers these days.

</comment></comment><comment><USER4> Cake recipe. Ingredients: one nice container, one serving utensil, one cake.</comment>


The Evolution of a Haskell Programmer (2001) - <AUTHOR> http://www.willamette.edu/~fruehr/haskell/evolution.html <comment><USER2> Phase 1: There are no bugs because strong typing, no side effects, functional nature.

Phase 2: OK, but those bugs are my own programmer errors.

Phase 3: I admit it, I have no idea what I'm doing.

Phase 4: OK, I can't even figure out what the Haskell I did two years ago was even trying to do. I was smarter then.

<comment><USER3> As Rich Hickey says often, there are two truths that are true about all bugs:

1) They passed unit tests. 2) They passed a type checker.

<comment><USER4> Well no, a lot of bugs didn't pass a type checker because a lot of languages don't have them. And some projects don't have unit tests.

<comment><USER5> > And some projects don't have unit tests.

If a bug did not cause a unit test to fail, then it passed the unit test suite. (Less cryptically, an empty set is still a set)

<comment><USER6> If we're getting that pedantic, the quote was "they passed unit tests". If the bug passed a 0-size set of unit tests, then it didn't actually pass any unit tests.

<comment><USER7> They didn't pass any, but they passed all.

In any case, Rich Hickey probably had more context for his words.

<comment><USER8> Still though, 0% test coverage.

<comment><USER7> Division by zero..

<comment><USER4> How so?

10 (say) lines of code, 0 lines covered by tests, test coverage is 0/10\. No division by zero, nothing undefined happening.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> Apparently this

      s f g x = f x (g x)
      k x y   = x
      b f g x = f (g x)
      c f g x = f x g
      y f     = f (y f)
      cond p f g x = if p x then f x else g x
      fac  = y (b (cond ((==) 0) (k 1)) (b (s (*)) (c b pred)))

is faster than this

      facAcc a 0 = a
      facAcc a n = facAcc (n*a) (n-1)
      fac = facAcc 1

and these are the first and second fastest.

> Interestingly, this is the fastest of all of the implementations, perhaps > reflecting the underlying graph reduction mechanisms used in the > implementation.

Could anyone elaborate on this a bit more?

<comment><USER10> Can someone explain to the non-Haskell folks how that first example works?

<comment><USER11> The author had (too much) fun using a combination of the SKI combinator calculus [1] and the "B, C, K, W" system [2].

[1] [https://en.wikipedia.org/wiki/SKI_combinator_calculus](https://en.wikipedia.org/wiki/SKI_combinator_calculus) [2] [https://en.wikipedia.org/wiki/B,_C,_K,_W_system](https://en.wikipedia.org/wiki/B,_C,_K,_W_system)

<comment><USER12> Isn't Haskell internally using a variant of the SKI combinator calculus to represent that all functions are data? This would mean less reduction for an already reduced program.

<comment><USER13> That would be true for a toy Haskell compiler. "The standard" Haskell compiler, GHC, can do a whole lot of optimisations and produces really good machine code nowadays.

</comment></comment></comment></comment></comment><comment><USER14> Every time I see this a get further down the list of examples that I understand. Unfortunately, I still don't make it very far before I'm lost.

</comment><comment><USER15> Church of the No Fixed Point programmer:

        succChurch n f = n f . f

        facChurch n f = n g (const f) id where
                g f n = n (f (succChurch n))

        toChurch 0 = const id
        toChurch k = succChurch (toChurch (k-1))

        fromChurch n = n succ 0

        fac = fromChurch . facChurch . toChurch

</comment><comment><USER16> Are there actually any use-cases where haskell would be recommended over other languages? There shear level of thinking and multiple different ways to do what seems like trivial tasks is mind bending...perhaps I never did it enough to a level this would not be the case.

<comment><USER17> Every year since I've started to read about programming (maybe 10 years), Haskell (and pure functional programming in general) has been the Next Big Thing. I don't have anything in particular against Haskell, but its failure to "arrive" makes me think the answer to your question is no.

<comment><USER18> Evolution is slow. Java imho brought garbage collection to the mainstream. lisp had been doing that for 20 years or so.

I don't think Haskell itself will ever be the language of choice, it'll probably fall into (remain in?) a smalltalk like life.

That said, functional idioms seem to be creeping into lots of mainstream languages, so it's not like _never_. Rust seems pretty heavily influenced by ml, and somewhat by haskell.

<comment><USER17> Only on Hacker News is Rust considered a mainstream language, but I see your point :).

<comment><USER18> Ha! Totally agree. I do think rust has a lot of potential to take a big bite out of c/c++'s current share. But that's 10 years away, because evolution is slow.

</comment></comment></comment></comment></comment><comment><USER19> Haskell is a nice language and you can build regular stuff with it. I wish people shared more prosaic Haskell rather than shock-value postdoc thesis material. I know this article is a joke, but it plays into that stereotype.

There's this helpful site that suggests libraries for various things: [http://haskelliseasy.com](http://haskelliseasy.com) Someone should make a companion site listing snippets of code for common tasks showing plain ways of doing things.

</comment><comment><USER20> Another post convincing me that writing versions of the factorial function is the primary focus of Haskell. I keep hearing about Haskell in production, I would like to see examples of the language actually doing something useful.

<comment><USER21> Here's a screencast of me making a blog application with the Yesod web framework: [https://www.youtube.com/watch?v=SadfV- qbVg8](https://www.youtube.com/watch?v=SadfV-qbVg8)

While I would also like more production Haskell examples, I wouldn't read much into this webpage—it's basically just a 15 year old joke.

</comment></comment><comment><USER22> Won't product [1..n] lead to a space leak?

<comment><USER23> [1..n] is not an array but a lazy-generated linked list. So you'd get a space leak only if it loaded the entire list in memory, or it kept all of the intermediate calculations (called thunks) in memory. The question is does it do that, or can it use tail-call optimisation, which would effectively compile to a loop with an accumulating variable, discarding the thunks

I admit now I am stuck looking at [http://hackage.haskell.org/package/base-220.127.116.11/docs/src/Dat...](http://hackage.haskell.org/package/base-184.108.40.206/docs/src/Data.Foldable.html#product) as it uses foldMap which I am not used to. According to [https://wiki.haskell.org/Fold](https://wiki.haskell.org/Fold) foldl can make use of TCO. When I get some time I will see if I can produce the thunks as I am very interested i this!

<comment><USER24> there are various ways to view exactly what ghc produces (i have one in my comment below)

</comment></comment></comment><comment><USER25> Any updates since ? with FTP.

</comment><comment><USER26> The last 5 or 6 examples clearly captures what is wrong with programming in J^Hgeneral.

Tendency to pile up useless crap^Wabstractions is the cause of suffering.

Imagine that your doctor and financial adviser are doing this. Hey, wait a minute...</comment>


The Vatican is both the 4th roundest and 2nd most rectangular country - <AUTHOR> https://bigthink.com/strange-maps/sierra-leone-is-the-worlds-roundest-country-and-egypt-the-squarest-one <comment><USER2> Somehow this article doesn't link to its sources.

For rectangularness: [https://pappubahry.com/misc/rectangles/](https://pappubahry.com/misc/rectangles/)

For roundness: [https://gciruelos.com/what-is-the-roundest- country.html](https://gciruelos.com/what-is-the-roundest-country.html)</comment>


Emacs v. Vi Is Rooted in the Love of Lisp - <AUTHOR> http://stevengharms.com/blog/2005/07/24/emacs-v-vi-is-rooted-in-the-love-of-lisp/ <comment><USER2> I basically agree with the final conclusion, but I don't think the example given--deleting five lines of text--actually supports it at all. The author is claiming that vim's way of doing it is cryptic (normal 5dd), and then says this about emacs' way:

        Define a function for a 'universal' n-many operator
        ( Control-U ), pass that an iteration count integer,
        have that perform the pre-defined global
        kill-line-of-text operation ( Control-K ).

Vim's solution is conceptually the same: you're in normal mode because that's where you do text manipulation, prefixing commands with numbers is the standard way of repeating an action a fixed number of times, and _dd_ is the pre-defined global delete-line-into-a-buffer operation.

They're both cryptic until you understand what's happening--the only real difference is that vim is less explicit, because this kind of action is exactly what vim is best at.

I suspect that there's a better example for demonstrating emacs' power, but I don't know emacs well enough to provide it. Vim is probably my favorite piece of software, but there are certainly things emacs does better.

<comment><USER3> Yeah, that example is not particularly good, especially since you can do C-# (where # is the number) in Emacs, which is qualitatively the same as vim. (It's just as magical.) I always use that instead of C-u because it's easier to type.

Ultimately, the magic of Emacs is not in the key bindings; this is why Evil mode is not fundamentally against the Emacs philosophy. The magic is with how the editor feels just like an extension of the underlying elisp.

<comment><USER4> You've just made my day with C-#

</comment></comment></comment><comment><USER5> My favorite programming language is Common Lisp. My favorite text editor is vim. I have no cognitive dissonance about this.

More to the point, the extensibility of an editor and the core editing functionality are orthogonal. As they say, "Emacs is a great operating system --all it needs is a decent text editor."

<comment><USER6> And I would be absolutely thrilled if the main scripting language in vim was a Lisp.

<comment><USER3> Consider trying evil mode for Emacs.

</comment></comment></comment><comment><USER7> I actually don't give two hoots about elisp, in fact I'd prefer the language was python. I use emacs for three reasons:

\- I like the default keybindings for pretty much everything

\- I like that the concept of a buffer is not connected to the concept of a window or frame or anything. That I can have the same buffer open twice in separate windows is useful.

\- It's cross platform & I can be productive on remote servers if necessary.

My least favorite days are when I need to customize something and rather than it taking 15 minutes it takes 3 hours as I refresh my memory on elisp. I would prefer to spend this time being actually productive.

<comment><USER8> This means you're not writing enough elisp and if you amortize it over a year, then you are spending as much time as you should.

FWIW, I have about 1KLOC in elisp custom code.

<comment><USER9> Not that I disagree much with your point, but I remember Richard Stallman himself told to have almost no customization in his Emacs (can't find a reference now but feel free to prove me wrong). This tend to be very useful while using the editor on lots of different machines (and yes, I know of remote editing).

<comment><USER10> Now, when I am annoyed at what I believe to be an absurd default setting, I'm going to clench my fists and grumble,"Stallman!"

<comment><USER8> I do that all the time!

</comment></comment></comment></comment></comment><comment><USER11> I've thought long and hard about this for a few years, and I've reached the conclusion that the best of all world is to use Emacs with Evil (vim emulation). So I get Vim modes and keyboard efficiency with the ultimate configurability of Emacs. (Ironically, though, I've been doing a lot of C# lately, and of course there I'm using Visual Studio, lol).

<comment><AUTHOR> I have to agree.

After over 20 years of very happily using vim and other vi-clones, I'm in the process of making emacs+evil my main editor.

Making the switch is slow and painful for this veteran vim user who has perfected his vim environment, but I can already see that the emacs environment that I build will be superior... eventually.

Plus, I get the joy of scripting my editor in elisp and eventually guile (I hope). No more vimscript for me!

That said, vim is a wonderful editor. Even if vim ultimately isn't as flexible as emacs, it's still incredibly powerful; and there's a lot of cross- fertilization going on between the two editors, with vim users getting inspired by emacs features and packages and writing vim equivalents and vice- versa.

</comment></comment><comment><USER12> I use vi and emacs all the time, and it appeared almost random which one I pick. For code editing I also use Eclipse.

After I read an article like this a few months ago I started to keep track of which editor I use for what. Here's what I tend to do (not always, but most of the time):

\- code editing of big code base: Eclipse

\- casual code editing (of a few files): Emacs or vi

\- Single file code editing, config file editing: vi

<comment><USER13> Have you tried eclim? I'm trying to hook it up to Emacs, but since I use Netbeans rather than Eclipse it's been less perfect going so far.

</comment></comment><comment><USER14> One good thing about Emacs is all the key-bindings work by default in the bash shell. If one remaps control to Caps Lock it makes it a lot easier on the hands.

Org-Mode is nice. So is the minibuffer. I can start a regex by yanking text from the main buffer and then un-yanking text into the mini-buffer where the regex is being edited.

Another nice feature is that Emacs is very fast when handling very large files and files with very long-lines. Most text editors choke on these kinds of files.

<comment><USER15>
        set -o vi

sets vim bindings for bash (and there's a similar thing for the libreadline)

<comment><USER6> you have changed my life

</comment></comment></comment><comment><USER16> I'm not sure it's very constructive to explain the editor wars in a short, non-technical blog post. This article provides little useful technical information and a lot of extraneous verbal fluff. The comparisons to various philosophical works were particularly pretentious and painful to read. It doesn't seem like this article contributes anything substantial to the debate.

<comment><USER17> You're totally correct ("little useful technical information").

However, at this point, the editor wars have become a stage on which to explore viewpoints about how things should be, and how we got to where we are.

In particular, it's not about resolving the question of which to choose.

</comment></comment><comment><USER18> I'm so happy to see that this article is old. There is no reason to continue the ridiculous editor wars. emacs and vi have really held back innovation imho with their slavish devotion to the tty paradigm. this problem is that they are good enough so that innovation has slowed. Feels like we're stuck in the 70s but with web browsers.

<comment><USER19> I completely agree with you. I believe there are tons of things that could be done better, many I'm sure I'm not creative enough to imagine, if the editor wasn't tied to tty.

Here's one idea which I'm sure sucks but....I wish a code editor could show images inline where appropriate.

I'd personally like to see HTML style comments inline, where by default the comments are shown styled and you can press some hot key to edit them as html, and maybe by default they edit in wysiwyg mode.

I know some programmers will complain they won't then be able to read the comments in their editor of choice but that's exactly the point. tty only = stuck in the 70s. How is that any different than if HTML never supported colors, fonts, images, svg, etc? Sure, it's code but some code is better explained through diagrams. I shouldn't have to go find a manual to see the diagram, it should be in the code. And no, text based digrams with +----+ etc are not a full substitue for real images. Heck, I'm sure some of you would like to see MathML displayed in it's rendered form inline in a description of some math function instead of only it's source form.

<comment><USER19> And now we see IntellJ using graphics to show you inline references to icons and colors as just one example of what graduating to a graphics can provide.

Yep, Text only forever!! :-(

</comment></comment></comment><comment><USER20> I do prefer IDEs to Emacs/vi(m), specially for large codebases.

However for Lisp users, Emacs can be configured to achieve parity with what Lisp Machines used to offer, which is quite nice.

<http://www.loper-os.org/?p=932>

</comment><comment><USER21> This is definitely a nitpick, and I catch myself saying the same thing as well, but Mac OS X (since Leopard) is a Unix. Certified Unix 03. There is no need to say "Unix / Linux / Mac OSX", just "Unix/Linux" or even better, "Unix/Linux/BSD".

<comment><USER4> > "Unix/Linux/BSD"

How is that better? BSD is at least as much Unix as OSX.

<comment><USER21> FreeBSD (and Darwin) are not UNIXes, despite being compatible, since they aren't certified. Unless you fork over some change for the certification, the best you can be is "Unix-like".

</comment></comment></comment><comment><USER22> This is actually folly: both vimscript and lisp are both turing complete language (read can both make a computer do everything a computer is capable of doing), so even know LISP might have nicer syntax/cooler paradigm, what have you: it doesn't matter, you can achieve the same thing in VIM Script. I am a VIM user, although not a fanatical one, I see the merits of having a language like eLISP for emacs, but honestly I think they are both outdated. If I wasn't so partial to using a command line editor (I use the terminal a lot), i'd switch to Sublime text 2 because it uses python, and I'd rather use a modern scripting language than either vimscript or eLISP.

<comment><USER23> Python scripting inside Vim has been supported for a while. I've never seen a Vim plugin written in it, though, which seems odd given the gripes about VimScript.

<comment><USER24> The default vim shipping with Ubuntu (12.04, not sure about newer versions) doesn't have Python support.

<comment><USER23> Are you sure? My VPS runs Ubuntu 12.04.2, only has the vim-common, vim-runtime and vim-tiny packages installed, and `:python echo "Hello world"` works fine.</comment></comment></comment></comment>


A practical Git introduction - <AUTHOR> http://mrchlblng.me/2014/09/practical-git-introduction/ <comment><USER2> The main gripe I have with many git tutorials is how quickly I am exposed to git internals, before even describing how to do basic things like "get the last commit id" or " find where a file changed". I am only slightly interested in the tree structure used to store my data, and as a beginner much more interested in cooperative work flow with a group of developers.

<comment><USER3> To me, it is one of Git's strengths, that it's internal data structure is simple enough to describe and understand, and doing so brings great clarity to the rest of its operations. For example, knowing that "creating a branch" is literally just writing 40 bytes to a file makes them much more approachable.

<comment><USER4> > To me, it is one of Git's strengths, that it's internal data structure is > simple enough to describe and understand

I find it's _not_ simple enough to describe and understand, and that it almost seems _necessary_ to know it, which takes up cognitive attention/space. I feel like it's a failure of design (poor abstraction, or simply bad engineering) that these sorts of introductions are rehashed over and over and over again. I suspect Git is only popular because

1) Cult of Linus

2) Github

Otherwise, there are other capable more pleasant tools to use...

edit: formatting, s/Linux/Linus/

<comment><USER5> Like with most things, popularity is not derived from what you expect, yet popularity exists for good reason. Git may or may not be perfect, depending on your point of view. However, it's more than sufficient to do the job, and it does the job pretty darn well. The other factor is that it's popular because.... it's popular.

Yes, it's a good idea to take on git because other people use it. It's not a personal tool like your text editor where you can lord over your little realm and customize the crap out of it. git is a collaboration tool.

<comment><USER4> > Like with most things, popularity is not derived from what you expect

I listed what I suspect...

> yet popularity exists for good reason.

Are you talking about cause or effect ? Does it matter ?

> Git may or may not be perfect, depending on your point of view.

It's not, _nearly_ certainly regardless of ones PoV

> However, it's more than sufficient to do the job, and it does the job pretty > darn well.

It's used a lot, and mostly works, sure.

> The other factor is that it's popular because.... it's popular.

What "other factor" is this? I was talking about what I consider weak points and poor engineering -- I'm not denying it's popular... it's practically a verb (people say "git" where "source control management", or "distributed source control management" is what they mean...)

> Yes, it's a good idea to take on git because other people use it.

Network effect, I get it...

> It's not a personal tool like your text editor where you can lord over your > little realm and customize the crap out of it.

Well... not everybody is managing the Linux kernel. Not everybody is even collaborating. I use fossil[0] because I'd rather enjoy my development process. It _works_ for me. I don't _care_ if Linus uses git, or if some high- profile codebase is managed by git.

> git is a collaboration tool.

And so are fossil and mercurial. And I've run _many_ projects under fossil, including ~20-person distributed (cross-country) projects that include development, configuration, and release management. No git necessary.

I not saying git isn't popular, or can't do its job. I'm saying: Its a bit hard to understand why git (which I suggest is unnecessarily difficult) is so popular -- I listed my two suspicions.

[0] [http://fossil-scm.org](http://fossil-scm.org)

<comment><USER6> Just to add another anecdotal point on top of your own. I use git because it gets the jobs done. I don't remotely care that Linus uses it. I've honestly never ran into issues even on 20 person+ teams using simple branch & rebase strategies. To each their own.

<comment><USER7> I am not sure what your point is. Subversion, git, hg, darcs all get the job done. Was your choice of git based on its superiority over the other ones or just a side effect of its popularity? The problem with git is not that you will run into issues, it is that other vcs provide a saner ui and require less of their users without missing on features.

<comment><USER6> But surely we all understand that the "best" tool doesn't always win the day, right?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> Still like this as an introduction to git:

[http://rogerdudler.github.io/git-guide/](http://rogerdudler.github.io/git- guide/)

"no deep shit"

The guide that OP posted is great, but once I see a wall of text in table of contents, I'm instantly turned off. Again, maybe most people will have a better attention span than I do, but some of them will not

<comment><AUTHOR> Agree that it seems like a lot of text. Added this very good reference (however think it's not enough for students discovering the subject)

<comment><USER8> agree, it's definitely not enough for anyone who wants to really _understand_ git, but definitely enough to at least get people in the right ballpark of how things work, and maybe draw analogues to whatever system they came from (hg/SVN/whatever)

</comment></comment></comment><comment><USER9> This is a really nice, extensive guide. However, I think when introducing Git and its internals for the first time, it is essential to use graphs/diagrams. This tutorial doesn't have any which is its biggest shortcoming. Regardless, I would still recommend this tutorial to friends.

<comment><AUTHOR> Agree that diagrams would help clarify some points. I was a bit short on time for this so I thought that only using git outputs could be enough; I will try to spend some time to incorporate some illustrations!

<comment><USER10> If you do, I highly recommend avoiding the types of graphs that git draws for you and that some tools show. (The ones that show the branching history.) As a beginner, I found the graphs way more confusing than what was actually happening, as it didn't communicate anything I could understand. In fact, it made it look like something else was happening than what actually was.

<comment><AUTHOR> Interesting. Do you think that confusion comes from the fact that commit history (to not say 'time') is represented vertically (and sometime going upward and sometime downward)?

</comment></comment></comment></comment><comment><USER11> Maybe I'm still very rudimentary, but as a beginner trying to understand git off and on for the last few months, this is still too advanced to understand up front.

<comment><AUTHOR> Could you be a little more explicit about what you find too advanced or what specific points would need more explanations? I intend to use this as a course material for git total beginners so your feedback is very important to me!

</comment></comment><comment><USER12> This intro is easy to follow, and explains things well. I only work on smaller projects at the moment, but it is a little embarrassing to admit that the closest thing I have to version control is some combination of dropbox and time machine recording my old files.

I will probably start by having Xcode create and manage a local repository, but it is also useful to know what is behind that.

</comment><comment><USER13> This is better than I thought it would be (I read the comments here first). I do agree that some of the content can be glossed over (move some of the internals discussion later in the document), and some figures _might_ be useful -- but you must be careful. I've been fooled by figures more often than I'd like.

Overall I feel like this is a good addition to the Git introduction space.

One big piece of feedback is that would be useful to have a section on obtaining and setting Git up the first time. Especially for Windows users, it may not be obvious.

<comment><AUTHOR> Thanks for the feedback! Regarding the setup, that could be an addition. It probably need a clearer write up but I added the "Protocols" section to help people understand that SSH is not a must have; from what I've seen the Windows setup difficulties is mostly about SSH -- would you confirm that?

<comment><USER13> I'm not sure about SSH. You might be correct. I've gotten my setup to work w/o SSH. Although I've mostly just been using the GitHub Windows client lately. :-\

</comment></comment></comment><comment><USER14> Finally, a git introduction for real users ! Those that need to understand how it works rather than repeating commands copy/pasted from "command list" have to read it. Because soon enough, you'll end up in a specific situation needing a specific command...</comment>


Yii 2.0.2 released - <AUTHOR> http://www.yiiframework.com/news/84/yii-2-0-2-is-released/

<comment><AUTHOR> PHP framework Yii 2.0.2 released. This version is a patch release which contains about 40 minor new features and bug fixes.</comment>


Hadoop Landscape Review 2013 - <AUTHOR> http://www.dataintoresults.com/2013/04/hadoop-landscape-review-2013/

<comment><USER2> Terrible review - claims "map reduce is dead" etc without any good reason as to why. Claims hive is a terrible idea because "it takes a long time to do a simple query on a 20MB dataset". Of course it does! Hive is meant to make it possible to work with gigantic datasets, not make it fast to work with a tiny 20MB dataset!

Shouldn't have made the HN frontpage - must be a light day.

</comment><comment><USER3> Feels like a filler post to hop on a trend. Also, I just can't agree that MapReduce was a bad idea in the first place. Especially when the author goes on to laud the ecosystem built on top of MR/HDFS.

</comment><comment><USER4> This isn't analysis. This is shallow punditry/executive summary bullet point repetition.</comment>


15 Google+ Users You Should Add to Your Circles - <AUTHOR> http://www.pcmag.com/slideshow/story/268064/15-google-users-you-should-add-to-your-circles

<comment><USER4> 15 - Ashton Kutcher; 14 - Mark Cuban; 13 - Arianna Huffington; 12 - <USER2> rose; 11 - Tom Anderson; 10 - Vic Gundotra; 9 - Alyssa Milano; 8 - <USER3> Scoble; 7 - Newt Gingrich; 6 - Michael Dell; 5 - Dane Cook; 4 - Felicia Day; 3 - Paul Allen; 2 - Marissa Mayer; 1 -Guy Kawasaki;

<comment><USER5> Thank you! I hate these things

</comment></comment><comment><USER6> What a vapid article. There are a couple interesting people on the list, but there is still no true justification for why I'd want to waste my mental real- estate on them on a regular basis. For example, I really like Guy Kawasaki, but not enough that I want to follow everything he has to say about everything every single day. And having Scoble in your list is a good way to be the recipient of an unending flood of content. And why you would give Dane Cook or Ashton Kutcher three second of time, combined, I have no idea.

In fact, this "article" seems counter-intuitive to the entire point behind Google+.</comment>


New upright airline 'seat' could see 20% more passengers fit into planes - <AUTHOR> https://www.independent.co.uk/travel/news-and-advice/airline-seats-upright-more-passengers-planes-stand-up-avio-interiors-skyrider-2-a8310541.html <comment><USER2> The 0th Law of Air Travel - the misery of economy-class can only increase with respect to time.

</comment><comment><USER3> Think of the health benefits on long flights. Sitting is the new smoking, right?</comment>


Startup scene in Eastern Europe is steaming hot Weekly update. - <AUTHOR> http://goaleurope.com/2012/05/04/eastern-europe-startup-weekly-news-startups-in-eastern-europe/

<comment><USER2> There are a lot of nuggets of gold to be had around Eastern Europe, cheap (by Western standards) good talent being one. Some 20 years ago, mass brain drain was the norm. Today that is a lot less true.

A potential problem would be that this talent is less versed in modern agile technologies and methodologies. They know enterprisey stuff like Java and Microsoft stacks, because that's what the local employement market consumes.

I remember Loic Le Meur talking about his Bucharest outsourcing team, unfortunately in the context of their separation: [http://loiclemeur.com/english/2012/03/who-wants-a-great- engi...](http://loiclemeur.com/english/2012/03/who-wants-a-great-engineering- team-in-bucharest-please-help-me-spread-the-word.html)

I for one am looking for Romanian Rails/Python hackers to work with :)</comment>


Root keys for Sony's PlayStation 3 go public - <AUTHOR> http://geohot.com/ <comment><USER2> "if you want your next console to be secure, get in touch with me. any of you 3."

I would take the mans word and hire him. I'd even through Apple into his list, he did after all release jailbreaks for the iPhone too.

<comment><USER3> I'm not so sure I'd want to take a job having just made my new chain of command look like incompetent idiots, they'd probably find a way to repay the favor. They'd just make him to sign a bunch of long-term NDAs and fire him 6 months later. If this guy had much experience in the workplace he'd know that development like this usually happens when an organization has systematically driven out the detail-oriented security-minded people. They tend to be on the low end of the "net reduction in buglist items per salary dollar" scale.

On the other hand, there are any number of independent security assessment/pen testing firms that would love to have this guy's skills. He might even end up working on consoles. That's probably the way he should approach it.

<comment><USER4> _I'm not so sure I'd want to take a job having just made my new chain of command look like incompetent idiots_

A chain of command that's savvy enough to really want him despite that is one you'd actually want to be in, though. An organization that focused on results would be _all edge_ like the fictional Maas Neotek from Gibson's Neuromancer.

<comment><USER3> _A chain of command that's savvy enough to really want him despite that is one you'd actually want to be in, though._

Absolutely. But if they were the savvy type, would they have been pwned at nearly every security layer like that? If you haven't seen it, the video says it better than I can.

So probably if he were hired, it would be with mixed feelings of some of his uppers. At best, he probably "wouldn't fit in with the team" as they say. Someone like him would need to be either in charge of the whole freaking platform direction, or not there at all. (now there's an idea) Seriously, IMHO Sony's best move would be to fire the guy responsible for reneging on Linux and hire someone with a clue instead. Microsoft would have the guts do something like that.

It's ridiculous. I bought a PS3 (by coincidence) the other day. Guess what?! It doesn't play PS2 games! PS2 plays PS1 games (so I thought). Our Wii plays GameCube games. Xbox360 plays Xbox games. What is a PS3 if not a PlayStation? I didn't have my heart set on it anyway, but the kids tracked down some PS2 games they wanted. They specifically wanted the older PS2 versions because they didn't like the PS3 versions!

In fairness, Gran Turismo 5 and Little Big Planet are beautiful and fun games and they have only crashed a few times.

<comment><USER5> Older versions of the PS3 support PS2 games. They dropped support around the time the Slim came out.

<comment><USER3> Thanks for the info. Clearly we have to read the fine print rather than relying on product names.

Congrats Sony, you thought you'd force your customers to repurchase their favorite games didn't you? Instead you made enemies of an upcoming generation of gamers.

If only they could have heard the tears of the small children on Christmas morning upon finding out that they would not, in fact, be able to use the dance pad and the older Dance Dance Revolution which had the actual anime songs that they had saved their allowance to buy and they would only be able to dance to Lady Gaga instead...

(that's only slightly an exaggeration)

<comment><USER6> The backwards-compatibility with PS2 games was facilitated by the presence of the PS2 CPU and GPU in the PS3 hardware. Newer revisions of the system eliminated first the CPU and then the GPU. I think it's fair to assume this was done for cost reasons -- it's not like they removed the functionality through software update.

If you really want to play PS2 games, buy a used PS2 on Craigslist for a fraction of the cost of a PS3. Heck, you can still get them new.

<comment><USER3> _The backwards-compatibility with PS2 games was facilitated by the presence of the PS2 CPU and GPU in the PS3 hardware. Newer revisions of the system eliminated first the CPU and then the GPU._

Then they ought to stop selling it as a "PlayStation 3" once it no longer performs the functions of a "PlayStation 3". Call it a "Playstation 3--" or something.

Product model names invoke the very definition of what the product is and does, particularly when the name includes a number. They aren't just attractive words to be chosen by Marketing, even when it was the same company that made the initial definition of the feature set in the first place.

Like I said, it wasn't particularly frustrating or surprising to me to find this out after I bought it, but only because my expectations of a Sony product were so low to begin with. I would have been shocked if this had been Google though.

<comment><USER5> How about the "PlayStation 3 Slim"?

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> From the mathematician on stage: "and for some reason, Sony uses the same random number all the time!" - classic!

<comment><USER8> I'm not sure if that was hyperbole or not.

As I understand it, all that was required was for them to use the same random number /twice/. Let's say you're Sony and you sign a patch, release it, realise there is a minor fix, and release within 2hours... maybe in your rush you failed to regenerate the random seed?

Or, my initial thoughts, someone inside Sony did this maliciously?

<comment><USER9> If your build process requires you to manually generate a random number and copy and paste it in, you need to _try harder._ If you work for a bank handling payments, you should be fired and never allowed to work in software again.

EDIT: that last bit about banks is OT, sorry about that, I've been watching the chip and pin hacking talk from CCC and got confused.

<comment><USER8> I agree. It is unlikely that the release manager would have been expected to generate a random number. I'd have expected, possibly, a pre-generated list of random numbers, maybe 1000 or so, so a duplicate is not unlikely, and cannot happen maliciously.

I find it most likely that the build process code was flawed. This sort of code is, in my experience, not written by your most talented developer (unless one of your top developers has a build fetish). All too often you only find deficiencies in the build/release process the month of release, when you have the least time to fix them.

<comment><USER9> If the whole project is about signing code packages to prevent the platform being hacked, you would've thought the key generation would be considered a critical part of the application code, rather than a detail of the build process. Even if the code necessarily exists in the build script. The build script _is_ the project in this case.

If a developer has ever even _thought_ about generating a list of 1000 random numbers to pick from at a later date, then they shouldn't be developing production code.

<comment><USER8> I was suggesting a one time list. You need to keep a list of past random numbers anyway so you can verify no repeats.

But sadly, I have to agree, this is epic fail.

<comment><USER9> You are probably more likely to spontaneously rearrange your constituent atoms into cheese or something than to generate the same random 16 bytes twice, assuming a new number needs to be generated only once for each package of code signed. If there was one needed for each packet on a network or something it might be different.

In any case, this risk is orders of magnitude lower than the risk of someone leaking your list of past numbers, especially when they're this valuable.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> Looking at GeoHotz accolades on his Wikipedia page makes me feel like a terrible underachiever.

</comment><comment><USER11> Wow. How did this happen? Was the root key stored in the PS3? Or was it brute forced?

<comment><USER12> Part 1 - <http://www.youtube.com/watch?v=c77Qnk_CMF8>

Part 2 - <http://www.youtube.com/watch?v=ovy2kPFOu0E>

Part 3 - <http://www.youtube.com/watch?v=Y23LUiBRcOg>

That talk was at the 2010 Chaos Communication Congress which just concluded a few days ago.

<comment><USER13> I always assumed the PS3 has top notch security given how long they had managed to avoid exploits. Seems from watching the videos that they could go a long way on a future console to prevent hacks just by plugging these issues. The hypervisor happily allocating/ running anything and everything seems like a good place to start.

Obviously other ways would probably eventually be found but as these guys say, just providing a way for people to run their own code to begin with takes a lot of effort behind people hacking the system. There will always be an army of people out there wanting to pirate games and an army of people wanting to profit off of it but only a tiny amount of them can really do anything about it.

<comment><USER3> _I always assumed the PS3 has top notch security given how long they had managed to avoid exploits._

Sometimes absence of evidence really is evidence of absence. Sometimes it's just that nobody was really looking that hard.

Their presentation makes a good case that real hackers really do just want to run their own code and that the 'piracy' bugaboo is something else entirely.

When I was little, I thought Sony was the coolest company ever. They made high-quality reasonably priced HiFi gear. Now my small children have made Sony the laughing stock of the household. Between this Linux debacle and the Windows rootkit, Sony has shown itself to have a habit of shooting its customers in the foot my opinion. No other company has fallen so low in my view.

 _Seems from watching the videos that they could go a long way on a future console to prevent hacks just by plugging these issues._

Naah. Every major security layer they had in place was broken or ineffective. That's usually a sign of deeper problems in the development process.

IBM probably wrote the hypervisor layer for them. IBM discontinued development on the Cell processor a few years back. It's likely nobody really understands that system at this point better than the hackers.

<comment><USER14> I do not think they make that case well at all. If you look at what happened with the last generation of consoles, everything but the PS3 had piracy before anyone had unsigned code running. They ignored basically all of the security measures the consoles had implemented and attacked the optical drives firmware (with or without a modchip) and enabled 'backups'/piracy. That basically leaves the PS3 as the one that had linux so the 'real hackers' were not working on it.

The PS3 itself is still not a good example of holding up against piracy until the hackers that wanted to run linux worked on it. It was first broken for the reasons of piracy (PSJailbreak) and was not done by the homebrew scene. Actually, all of their work required and is based on already having code running on the PS3 using the pirate method.

So, what exactly is left to support the opinion that the homebrew people are smart, the piracy people are dumb, and if you do not support linux the homebrew people will make it work with the side effect of allowing piracy? In every instance it is piracy that was first. You can also look to the DVD/HDDVD/BluRay scene and see that the piracy people were ahead of the 'make it play on linux' crowd and quite capable.

<comment><USER15> This is simply not true. Unsigned code came before piracy. OtherOS kept people wanting to run code on their console happy, removing it was a severe mistake.

And don't put words into the mouth of the PSJailbreak authors. The PSJailbreak allows unsigned code to run, that is why they made it first and foremost (they need unsigned code for piracy), they saw that they can get piracy and went for it. Anything to drive the sales, right? And we still don't know who's behind PSJailbreak, and if they are or aren't in the 'homebrew scene'.

What 'pirate method'?

'DVD/HDDVD/BluRay scene' we're comparing consoles to media now? Get your act together.

<comment><USER14> PSJailbreak did not come from the homebrew scene and you cannot honestly think people were going to pay $150 just to run homebrew that didn't even exist. You said I should not ascribe PSJailbreak to be for piracy and yet in the same breath you devote them to the homebrew side. At best, you could say that they tie. OtherOS does not count as it is still restricted by the hypervisor.

The pirate method I was referring to is the USB descriptor buffer overrun.

The technological measures protecting HDDVDs and BluRay are as tough as any used by the gaming consoles. Even still, SlySoft in particular manages to deal with new hurdles faster than the rest of doom9.

</comment></comment></comment></comment></comment></comment></comment><comment><USER16> So what are the implications of this ? Homebrew software ? Pirated games ?

<comment><USER17> Homebrew first and foremost, and reclaiming back the ability to run Linux on the consoles (and run it on the PS3 Slim as well). It's possible to pirate games with this knowledge, but from my understanding a lot of the Blu-ray security has not been broken at this point in time so these keys are by no means all you need to get up and start ripping those discs.

<comment><USER18> I have a PS3 that hasn't been received the update to remove the "Other OS" option(and I'm damn glad I waited...). Does this also provide access to the PS3 Hypervisor? I remember reading, a long time ago, that that was one portion of the PS3 that was restricted from running Linux. On the same token, I wonder if that could mean better performance... I found that running Yellow Dog Linux on it was awfully slow.

<comment><USER19> > On the same token, I wonder if that could mean better performance... I found > that running Yellow Dog Linux on it was awfully slow.

The hypervisor is minimal in terms of overhead. The biggest impact comes from the fact that the PPC core in the PS3 doesn't do out-of-order execution. You'd be downright amazed how huge a difference this makes.

<comment><USER18> No kidding? I remember someone from GDC in 2005(the one, I believe from Maxis, who created a storm on Gamasutra after bashing the Wii two years later) that putting out-of-order execution on gaming consoles was going to cripple their capabilities... but the PS3 certainly doesn't seem to suffer from it as far as games are concerned. I don't know enough about the topic at this point so I'd have to read some more.

<comment><USER19> The strength of the PS3 doesn't lie with the PS3 core, but rather with the ring of SPEs that the Cell processor has. These allow insanely efficient data processing, where the PPC chip really doesn't do a _whole_ lot except for managing logic and state.

However, nothing under OtherOS used the SPEs really, and it had no access to the GPU, so the speed came down to the in-order PPC core.

<comment><USER19> Correction: s/PS3 core/PPC core/

</comment></comment></comment></comment></comment></comment></comment><comment><USER20> almost makes me want to get one.</comment>


Upgrading from Linux mint 19.3 to 20 - <AUTHOR> https://community.linuxmint.com/tutorial/view/2485 <comment><USER2> While not strictly an upgrade problem in going from Mint 19.3 to Mint 20, I found that the default mysql version in Mint 20 (mysql 8.0) does not allow some settings currently used with the default mysql version used in Mint 19.3 (mysql 5.7).

Normally I can feed a final mysqldump of my old databases on my old Mint version into the fresh install of mysql on the new Mint version. Not this time!

 _Before you upgrade from Mint 19.3 to Mint 20_ , save yourself some angst. Check your mysql database settings. Change the mysql engine from 'MyISAM' to 'InnoDB'. Change the default character set from 'latin1' to 'utf8mb4'.</comment>


Ask HN: Any Resources for Starting as Manager? - <AUTHOR> I'm a data scientist and I've been promoted to team leader of our data science team. We're only 3 people and so far I only have knowledge by my experience with my own managers.
Could you recommend me some books or blog posts which talk about managing a team? I'm open to any angle, from technical to more human point of view. I want to expand my knowledge.
Thanks <comment><USER2> We wrote this post which sums up what we've learned coaching managers.

[https://blog.leadingup.co/almost-everything-weve-learned- in-...](https://blog.leadingup.co/almost-everything-weve-learned-in-30-years- of-leadership-coaching/)

Books or blog posts can be helpful, but if you really want to become an amazing leader, getting a coach is the way to go. (All the well known leaders have coaches, why not you?) [https://leadingup.co/](https://leadingup.co/)

</comment><comment><USER3> Understand the difference between managing and supervising.

[https://hr.berkeley.edu/node/3818](https://hr.berkeley.edu/node/3818)

</comment><comment><USER4> The Manager's Path, by Camille Fournier.

</comment><comment><USER5> Harvard Business Review has a lot of resources

</comment><comment><USER6> coursera and udemy have plenty</comment>


Who are you and what do you do? - <AUTHOR>

<comment><AUTHOR> I'm Paul Stamatiou and I'm a 20 year old undergrad at Georgia Tech majoring in Computational Media, I'm an avid tech blogger (link in profile) and am building a party-related web app on the side... and I'm procrastinating from studying for my CS final.</comment>


My Y Combinator Interview (W2011) - <AUTHOR> http://judstephenson.com/blog/archives/2010/11/My-Y-Combinator-Interview.html <comment><USER2> Very interesting read, although that's probably because my cofounder and I had nearly the same exact experience you did. We got an interview for this round of Y Combinator with an idea that could be summed up as, "it's pretty much an improvement of X."

But ultimately what any pitch comes to like that, whether it's the innovative minds at YC or the cruftiest, oldest-school VC, is always the same:

a) If X has competition and it that competition already has existing traction, they will point out it will be hard for your idea to catch on because of established players.

b) If X has competition and it's bad, they will point out that nobody will adopt X to begin with even if your version is better (generally "chicken and egg" problems)

c) And if any of them have any direct experience with X, they will point out they already did this and it didn't work.

My cofounder and I ran into scenario (b) and despite spending the spending the majority of our preparation time on (what we thought were) convincing answers, we didn't get accepted either.

If I had one regret, it's that we had a potential pivot for our idea that I think could have been spun off as a completely original idea W, and we spent barely a minute talking about it. We brought it up, PG went into brainstorming mode with us, and I walked out wishing we had just pitched W to begin with. But perhaps that story is for a blog post of my own.

<comment><USER3> You forgot one:

d) If X doesn't have competition, they will point out that there's clearly no market desire for the product or someone would have built it already.

<comment><USER4> There was an interesting blog post about this problem few weeks ago on HN. In general you can defend your b) or c) or d) situation with on word "Timing".The only problem is that you must convince people in the audience that Timing is right and why it was hard/impossible before and right now is easier/possible.

</comment></comment></comment><comment><USER5> I was part of Auctomatic, and I still think inventory management is a space to be disrupted. I think that we were free from day one was a reason that people were reluctant to start paying.

The one trouble with eBay inventory management, or any space where there are existing competitors, is every user has their own pet feature they absolutely can't live without. It becomes a battle to implement them all and keep a clean interface.

Also make sure you can import everything from every competitor. It lets people try your software very easily and gives you all of their data. So even if they don't become a hardcore user you can see what one looks like.

</comment><comment><USER6> For a story with a (bad) ending, that was really engaging to read. It sounds like you're still optimistic, and I'm definitely wishing you a ton of luck.

Rejection notwithstanding, I think the advice to get the system installed into a few other businesses is actually golden -- not just from a revenue standpoint, but from the product perspective. You'll get non-family feedback on how the system can be improved.

To be fair, building/selling a cool system is a higher goal perhaps than doing YC. (I say this knowing that for a ton of us, the hierarchy is confused in our own minds, haha!).

Either way, Jud, plug on, keep tooling and keep writing. I loved reading this...

</comment><comment><USER7> To be clear, we don't subject ALL our airbnb guests to 4loko. Jud was a special case.

-Benjie

<comment><USER8> True story. Jack and I politely declined the 4loko and opted for beers instead. The Holson Farm was great!

</comment></comment><comment><USER9> Jud, first of all congratulations!

You ought to be proud of the fact you have built a working inventory management system. You also ought to be proud of just interviewing with YC.

Keep Going!

If there was no market for inventory management systems, then you would have never been invited to interview.

</comment><comment><USER10> That was strangely interesting. Thanks for the write up.

</comment><comment><USER11> I have added this to my list of links to people that have actually done the YCombinator interview:

<http://ycuniverse.com/interviewees.php>

So now that page has 3. Feel free to contact me if you have more links to such information.

</comment><comment><USER12> Are you continuing?

<comment><AUTHOR> Yes. I haven't pushed anything public yet, which is why Inventory.io doesn't show anything.

I really took Paul's email to heart, because it was great advice. I'm looking for other places to get Inventory.io installed.

<comment><USER13> If it doesn't take off like they suggested, what's your plan? I'm curious how someone in your position would (and should?) handle this. Did they give any specific advice to you re: your future? Dump the project and work on something else?

<comment><AUTHOR> I guess I forgot to write about the email that Paul sent me regarding my rejection.

He suggested that I try and get the software installed in 5-10 more businesses. That would be "the best for both the product and investors".

</comment></comment></comment></comment><comment><USER14> Sounds a bit categorical with respect to inventory management. I know of one company, moysklad ('my warehouse' - in Russian), which has done quite well for itself in Russian-speaking countries. They are a couple years old and they've already taken venture capital from Ambient Sound Investments. I found a little snippet of info about them in English here: [http://www.chubbybrain.com/companies/moysklad/investors- fund...](http://www.chubbybrain.com/companies/moysklad/investors-funding- history#axzz17iGcYaTo)

So I wouldn't get discouraged just yet.

</comment><comment><USER15> Thanks for sharing this. I read the line "the rest is history" and wasn't sure if I knew what that history was. Maybe a link to more info in the footer would help.

Anyway, it just goes to show how difficult it really is to get your ducks in a row and truly get to the root of the problem you're solving.

</comment><comment><USER16> Personally I think the Four Loko made the pill a bit easier to swallow.

-Ray

</comment><comment><USER17> it's great to read these stores. Especially from those who are able to describe the lessons they've learned despite being rejected.

</comment><comment><USER18> thanks. that was interesting.</comment>


Jim Comey's Statement on the Clinton Emails: A Quick and Dirty Analysis - <AUTHOR> https://www.lawfareblog.com/jim-comeys-statement-clinton-emails-quick-and-dirty-analysis <comment><USER2> I'm politically ambivalent here, but I don't understand why the management of this by Clinton and her team does not meet the standard of "gross negligence".

<comment><USER3> The fundamental argument Comey puts forth is that no one else has ever been indicted for comparable behaviour. So it would be unreasonable to do so now.

Given that, it'd be far stranger if they _did_ recommend prosecution, and in doing so broke from precedent.</comment></comment>


Mozilla Firefox Finally Fixes an Awkward, 11 Year Old Linux Bug - <AUTHOR> http://www.phoronix.com/scan.php?page=news_item&px=Firefox-Middle-Click-Bug <comment><USER2> This is not a 'bugfix', it's a feature removal! I've used it all the time, now there's one extra step to navigate to a URL that I copy

<comment><USER3> Yeah, I find the behavior unexpected which is bad UX.

You can still enable it if you want it.

</comment></comment><comment><USER4> And here I was thinking it's my gdm's quirk and leaving it as is.</comment>


The NFL Strike and the Modern Economy - <AUTHOR> http://www.nytimes.com/2012/09/29/opinion/the-nfl-strike-and-modern-economy.html

<comment><USER2> Somehow, the writer of the editorial differentiates between "Capital" and "Talent", where one member of "Talen" is the CEO.

I think this is ridiculous. Certainly some CEOs are driven by forces beyond their comprehension or control, but for the most part, the CEOs _are_ "Capital".

Further the write of the article imbues "Capital" with the emotion of anger.

I believe we have to consider this article and its analysis as rubbish.

<comment><USER3> Capital, talent... blah.

This was a pure union busting move on the part of the NFL.

Again proving that unions are a necessary evil.</comment></comment>


7 Ways to Arrive at a Breakthrough Idea That Will Positively Impact the World - <AUTHOR> http://www.forbes.com/sites/kathycaprino/2015/12/02/7-surefire-ways-to-arrive-at-a-breakthrough-idea-that-will-positively-impact-the-world/ <comment><AUTHOR> There's some good advice here beyond the clickbaity title.</comment>


The Burglar with His Very Own Mac Attack - <AUTHOR> http://www.thedailybeast.com/articles/2016/05/01/the-burglar-with-his-very-own-mac-attack.html <comment><USER2> This reminds me a lot of BLDGBLG's post about Die Hard's architecture[1], especially this line:

      his dream house included a maze of trap-doors and what
      Sergeant Scheimreif called "escape holes." It was everything
      he seemed to want a building to be—with near-infinite ways
      of getting from one room to another and no upper limit on
      the places he could hide.

This stuff is a weird obsession of mine, probably stemming from being a skateboarder for my whole life. Eventually, you realize that all space is something you can rearrange.

[1] [http://www.bldgblog.com/2010/01/nakatomi- space/](http://www.bldgblog.com/2010/01/nakatomi-space/)

<comment><USER3> It is by the same author, Geoff Manaugh.

I find his writings work best in collection, e.g. if you read a lot of BLDGBLOG. In the individual pieces the meta-level ideas are kind of strange, if you read more and find the same aspects over and over again it makes more sense.

</comment></comment><comment><USER4> I know it was just a taster, trying to interest us in a forthcoming book. But, nevertheless, I thought that story was very long on hyperbole and very short on detail.

<comment><USER5> Exactly. In what way did roofman engineer the toys-r-us store? What kind of regularities did he exploit in his burglaries?

</comment></comment><comment><USER6> It's always interesting to see the systems that get engineered (engineer themselves? abiogenerate?) as externalities. It's like a scaled up pathological version of [https://xkcd.com/1172/](https://xkcd.com/1172/)

I don't think this is common enough to justify having pentesters think about your corporate procedures' exposure to such behavior but it's definitely an interesting thing to think about when designing sensitive human or mixed human/computer systems.

Edit: word building fix

</comment><comment><USER7> > But there was more to it than that. Hidden inside the repetitive floor plans > and the daily schedules of these franchised businesses, Roofman had found > the parameters of a kind of criminal Groundhog Day: a burglary that could be > performed over and over in different towns, cities, and states—probably even > different countries, if he'd tried—and his skills would only get better with > each outing. In a very real sense, he was breaking into the same building > again and again, endlessly duplicating the original crime.

> For Roofman, it was as if each McDonald's with its streamlined timetable and > centrally controlled managerial regime was an identical crystal world: a > corporate mandala of polished countertops, cash registers, supply closets, > money boxes, and safes into which he could drop from above as if teleported > there. Everything would be in similar locations, down to the actions taking > place within each restaurant. At more or less the same time of day—whether > it was a branch in California or in rural North Carolina—employees would be > following a mandated sequence of events, a prescribed routine, and it must > have felt as if he had found some sort of crack in space-time, a quantum > filmloop stuttering without cease, an endless present moment always waiting > to be robbed. It was the perfect crime—and he could do it over and over > again.

> For Roofman, it must have looked as if the rest of the world were locked in > a trance, doing the exact same things at the exact same times of day—in the > same kinds of buildings, no less—and not just in one state, but everywhere. > It's no real surprise, then, that he would become greedy, ambitious, > overconfident, stepping up to larger and larger businesses—but still > targeting franchises and big-box stores. They would all have their own > spatial formulas and repeating events, he knew; they would all be run > according to predictable loops inside identical layouts all over the > country.

Personally, I got a bit bored with the author's style of continuously seeking bold metaphors for the same thing, but I'm curious: do people consider this interesting writing, or does this style detract from the content?

<comment><USER8> (Context: I used to teach American Literature at a Carnegie Mellon R2 university, and I can recognize what other humanities scholars would identify as good writing.)

From the point of view of a belles lettres/liberal arts reader (as opposed to an audience interested in journalistic reportage) Manaugh's writing is engaging, thought-provoking, and compelling. Manaugh makes his points through his style and, in my view, his style is superb.

From a purely informational perspective, I can see how such a dense and somewhat repetitive style could be annoying and uninteresting. However, from the perspective of someone, say, interested in cultural studies as a humanistic discipline, Manaugh's cultivation of his ideas using a richly detailed metaphorical scaffolding is aesthetically pleasing and informationally satisfying.

In terms of the level of engagement and in a domain more familiar to people develop software, I would compare Manaugh's style to Paul Ford's style in "What is Code?"[0]. Ford is himself someone quite experienced in the world of humanities, and his "What is Code?" is a highly-detailed ethnographic window into the world of bespoke software creation.

tl;dr: "The Burglar With His Very Own Mac Attack" would be considered by many humanities scholars as well-written, even if they did not agree with Manaugh's conclusions.

[0] [https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&c...](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjkmenulrnMAhUI9GMKHSbyAyQQFggdMAA&url=http%3A%2F%2Fwww.bloomberg.com%2Fgraphics%2F2015-paul- ford-what-is- code%2F&usg=AFQjCNFqVVi86DOCCEX2LFdETJ03DN3oXA&sig2=kgUunvpwfhf2cCBHraLgpA)

</comment></comment><comment><USER9> This page has download 20MB of content in about 20 seconds. Despite having a top of the range iMac, I can barely scroll the page without lag.

<comment><USER10> Get adBlock. 3 year old laptop plus firefox and I didn't see any slowdowns.

</comment></comment><comment><USER11> This is reminiscent of the dichotomy of well structured software versus copy protection/cracking -- software development thrives in clear organization and separation of concerns, but so does cracking (i.e. having a single function take care of all license management will make it crackable in minutes). So software devs who want good DRM are forced to employ arcane obfuscation and back-handed tactics, sometimes at the detriment of the functionality and repairability of the software. I guess that's part of why we can't have good things...

</comment><comment><USER12> So by organizing people by routine franchise open the door to a new type of crime.

Imagine if an organized mob decided to mutualize the analysis and then stroke at the same time 100 shops?

Imagine if banks do the same as mc do?

</comment><comment><USER13> Who else thought this was about a Mac OS exploit?

<comment><USER14> I thought it had to do with MAC addresses...

</comment></comment><comment><USER15> >> "without fail described as polite—in one oft-repeated example, even insisting that his victims put on their winter coats so that they could stay warm after he locked them all in a walk-in freezer."

Sorry, but if someone tried to lock me in a freezer last thought would be how polite they were.

</comment><comment><USER16> When I was in college, I had a security job. I literally watched a huge building on the weekends. It was in a bad part of town, so walking around that big, dark building was nerve wracking. I had a time clock, and had to punch 15 keys per hour. For two years, I made my rounds on the hour. Ten minutes of running around that place. Then back to the janitorial closet, and my homework.

After two years, my boss asked me to mix up my rounds. When I mixed up my rounds, I saw a lot of people doing things in that building they shouldn't have. Did I care? No! It was nothing life, or death, and I wasen't going to die over $7.49/hr. Nor, would I ruin some guys life. No--I wasen't a good security guard, but the patrons always got their lost purse/wallet back, if I found their items.

People don't like to hear this, but so much theft is internal. Entities like to blame professional criminals, drug addicts, etc., but so much theft is internal.

The people higher up in the organization stole the most. It was then middle management. And then Cops stole--wow, it was staggering, but they were pretty slick. And the thefts were always blamed on gangs, the homeless, or that new janitor.

I stayed quiet, and watched their behavior. I can usually walk through any store, and spot which employee is stealing. I have found they are usually overly enthusiastic, care too much about following exact procedure, and they are usually the last person in the organization you would expect would have a dark side, and never complain. In other words, the person who gets the managent promotion.

(I don't want to argue. I won't be back. If you do have a problem with stealing, really try to stop. If you can't stop, be smart. Don't steal enough to rack up a felony. I believe it's over $500? Don't ever walk into a establishment with no money. I forget what it's called, but it racks up big charges. If you are stealing because of the thrill it brings, take up intence exercise, or see a therapist. And try to take on Robin Hood morality; Never take from the poor. Don't let the innocent guy take the fall. Be a stand up guy?)

<comment><USER17> Relating this back to the story, I'd say that instead of punching holes through the walls, after two years you punched holes through your routine, and saw new things that had--surprisingly--been there all along, and had no doubt been aware of you!

Kind of like opening a door into another dimension of existence. (Just rewatched _Buckaroo Banzai_ recently.)</comment></comment>