Key differences between Python 2.7.x and Python 3.x (2014) - <AUTHOR> http://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html <comment><USER2> "I would say there is currently no "right" or "wrong" as long as both Python 2.7.x and Python 3.x support the libraries that you are planning to use."

I would like to consider python for my next project, but this is extremely short sighted advice which begs the very real question: why should I consider python at all for a new, multi year project when there is no clear path forward for the language and there hasn't been in a decade?

Also, how can you ask someone who is new to the language to just choose? To me that seems insane. They have nothing to base their choice on, yet this choice will decide the future and success of the app. No pressure. But to be honest, and I know this is not the community's intention, the python 2/3 split is about as unwelcome a reception to a programming language as I can imagine. Is there a more logical way to choose?

Finally, I've now seen clients demand rewrites of python 2 code because of (probably bullshit) concerns around its obsolescence and lack of security. Now these clients generally don't know python from their ass and I doubt they have valid technical concerns but as invalid as their concerns probably are, it's still a major issue of your big clients threaten to leave unless you rewrite all your python 2 to 3. Anyone faced this?

<comment><USER3> The way forward is to use Python 3. That's been the way forward since it was announced that 2.7 would be the last version, and that everything after it would just be bugfixes. The way forward became even more clearly defined when the date was set for even those to stop.

I learned Python from Python 3, and it hasn't hindered me at all, even from going back and working on Python 2 code bases, or cross compatible code bases. It's a perspective that's made me just how aware of how awful Python 2 is in comparison.

Python 2 is going to exist for a long time in a lot of places. But it's a dead end for improvements. It's a dead end for innovation. It's a dead end for bug fixes and security fixes. Would you even consider telling someone to go learn any other language that is 3 years away from even end of life support having the plug pulled? You wouldn't. Why would you do the same for Python 2?

<comment><USER4> > Python 2 is going to exist for a long time in a lot of places. But it's a > dead end for improvements. It's a dead end for innovation. It's a dead end > for bug fixes and security fixes.

One the one hand I have this from you, an anon as far as I'm concerned. On the other I have Google, filled with some of the world's best python developers (and until recently the BDFL Guido van Rossum himself). Google App Engine still doesn't support Python 3.

<comment><USER5> > Google App Engine still doesn't support Python 3.

Um, yes it does: [https://cloud.google.com/python/quickstarts](https://cloud.google.com/python/quickstarts)

<comment><USER6> You're both half-right: the "standard" App Engine environment is "Python 2.7 only", via the link you just gave. The newer, flexible env (with less bullt- ins) does 3.x too.

</comment></comment></comment></comment></comment><comment><USER7> Python3 is a totally different beast nowadays from Python2.

The reason is async/await. It can handle Node.js style event loop / asynchronous code very well -- with uvloop, python 3.5+ is actually faster than Node.js (close to Go).

[https://magic.io/blog/uvloop-blazing-fast-python- networking/](https://magic.io/blog/uvloop-blazing-fast-python-networking/)

IMHO: after 3.5, we are clearly in the next iteration of the language.

<comment><USER8> >is actually faster than Node.js

Uhhh I call BS until proven otherwise. Maybe the event loop is faster, but I'm willing to bet the callback code is slower.

<comment><USER7> The "proof" (benchmarks, yeah, I know) is in the provided link. Feel free to shoot them down.

Anyway, slower or not, writing a small async service is still easier in Node.js. You can trust that no libraries block your event loop and I'm not sure there's quite anything like Express (simplicity+popularity) for async Python just yet.

<comment><USER8> >The "proof" (benchmarks, yeah, I know) is in the provided link. Feel free to shoot them down.

I just did: those benchmarks show uvloop's performance, not python's, i.e.: they're designed to minimize time spent in callback code.

</comment></comment></comment></comment><comment><USER9> To people whining "why hasn't Python's community moved to 3 yet": It has.

I teach online advanced-Python programming workshops every month. The audience of each is 50-100 working developers from around the world, every one of whom use Python in their day-to-day work.

I start each class by polling who's using Python 2 vs. Python 3. A year ago, about 20% said they use Python 3, 80% Python 2. In the last 2 months, it's consistently 60%-70% Python 3.

Python's community has already plowed through the sigmoidal inflection point to 3; most just don't realize it. The linked article is years old.

<comment><USER10>
      "I teach online advanced-Python programming workshops every month... In the last 2 months, it's consistently 60%-70% Python 3."

So you're basing your conclusion on a sample of two? :)

I teach advanced Python (and machine learning) courses too, albeit in corporate settings (groups of ~15, rather than 100), and it's still very much <20% for Python 3 there.

<comment><USER9> Poorly worded. I taught 4 classes in March and 4 in April, over 500 unique engineers total (some were in more than 1 class).

There's definitely going to be pockets of resistance. My attendees are a very wide-spectrum sample from many different companies and industries and even countries, so I have some faith in the trend that's showing up. Could be that there's some bias in my students for sure. Regardless, the ratio I've been seeing has been steadily increasing month after month since late last year.

</comment></comment></comment><comment><USER11> > Python 2 has ASCII str() types, separate unicode(), but no byte type.

Actually Py2's str class is a double-duty str/byte class such that some methods behave like str and others like byte.

        py2>> len('¡no')        #string len=3
                                #encoded UTF-8 byte array len=4
        4                       #always gives bytes.len not str.len

(see [http://stackoverflow.com/questions/5471158/typeerror-str- doe...](http://stackoverflow.com/questions/5471158/typeerror-str-does-not- support-the-buffer-interface/34688434#34688434))

<comment><USER12> No need to get too much into the meaning of the length of a str. It's neat to know the definition but neither choice gives you a good "string length" for real text.

Case in point: len("é") == 2, so even with unicode strings we don't have length as a character count.

As an english speaking person, I can clearly point at é and call it one character, but Python 2 or Python 3 doesn't agree. Rather, their str `len` doesn't agree with that, and that's fine. It's not a character count!

<comment><USER13> That one is maybe not the best example, since len(unicodedata.normalize('NFC', "é")) == 1

Though I don't know any "normal" character that requires composition ad-hoc that could serve as a better example.

<comment><USER12> I think it's a fine example since the decomposed version clearly exists and can arrive as data into your program in a number of ways.

That said, the grapheme cluster note will have examples of extended notions of characters that can't be represented by an equivalent single codepoint. There are some korean and indic examples and also emoji [http://unicode.org/reports/tr29/](http://unicode.org/reports/tr29/)

Oh and something that stirs the heart of us hackers: \r\n is a single grapheme!

<comment><USER14> This (different forms and no automatic normalization) is a "feature" of Unicode. It would be wrong of Python to try to cover it up.

<comment><USER12> Yes, so it's wrong for anyone to pretend len() or even indexing of a str is about characters, it's about codepoints of the string.

<comment><USER15> They're all valid measurements. The length of a string could be measured in bytes (which doesn't require you to know the encoding), code points (which doesn't require huge Unicode grapheme clustering tables), grapheme clusters (which doesn't require a font) or even pixels (which does require a font).

<comment><USER16> The best thing a language (or library) can do is to not bless any single one of these as the default. Strings shouldn't have a length at all. They should provide properties/methods/accessors like byte_count, codepoint_count, grapheme_count etc. Make the user of the API _think_ every time they're asking for a length of the string - which one do they actually need? Which one is the best for whatever they're trying to do?

<comment><USER14> Can you name a single language that does that? I can't think of one.

<comment><USER16> None of the mainstream ones that I can think of. Which is really unfortunate, not the least because the defaults are all over the place - usually it's either bytes (when strings are UTF-8) or code units (when strings are UTF-16 - note, code units, not code points, so surrogate pairs count as 2!). Occasionally it's genuine code points, as in Python. Which, I think, goes to show why it's such a mess.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> The likelihood of the current 2.x codebase being ported to 3.x is lower than new code being written in a new language. It will be ported to a new language, such as Golang.

The vast majority of Python developers will only be writing and maintaining Python 2 code, because the vast majority of Python code is 2.x and will never migrate.

<comment><USER18> How on Earth does it make more sense to re-write an entire working program in an entirely new language than it does to simply update from Python 2.7 to Python 3?

I mean, if the complaint is that it's too hard to make set of specific changes to a Python 2 program to make it a Python 3 program, how is it going to be easier to re-write in a new language when that's going to be a significantly more difficult project?

<comment><USER17> Because no sane person wants to do the investment unless is provided material benefits. 2->3 provides no such material benefits, which is why they're being so aggressive about EOL timetables.

<comment><USER18> 1\. 10 years is not aggressive for an EOL timetable.

2\. What is the material benefit to rewriting the whole thing from scratch in any language, just to get around an EOL timetable?

</comment></comment></comment></comment><comment><USER19> > Python 2 has ASCII str() types, separate unicode(), but no byte type.

This is incorrect in at least two ways:

\- Python 2.7.x str is _not_ ASCII! "\xff" is totally valid, but not a valid ASCII string.

\- Python 2.7.x has bytearray.

</comment><comment><USER20> > I would say there is currently no "right" or "wrong" as long as both Python > 2.7.x and Python 3.x support the libraries that you are planning to use.

No. 3.x is right, unless you have a darn good reason. Darn good reasons:

1\. A library or legacy codebase is in 2.x, or a system will only support it, and it is impractical to refactor to 3.x

2\. You are being paid to specifically write in 2.x. Often, this is because of reason 1.

It's pretty simple, really.

</comment><comment><USER21> Hit an interesting issue when trying to make my urllib2 Python code behave the same way under both Python 2.7 and 3.6, which is fortunately documented: [https://docs.python.org/2/library/urllib2.html](https://docs.python.org/2/library/urllib2.html)

> _Note: The urllib2 module has been split across several modules in Python 3 > named urllib.request and urllib.error. The 2to3 tool will automatically > adapt imports when converting your sources to Python 3._

The best-but-silly solution I found without introducing a dependency was:

       try:
           from urllib.request import urlopen, Request
       except ImportError:
           from urllib2 import urlopen, Request

<comment><USER22> Use six for this. They provide stable import paths for stdlib modules that have moved.

> from six.moves import urllib

</comment></comment><comment><USER23>
      >>> round(15.5)
      16.0
      >>> round(16.5)
      16.0

I wonder what's the logic behind this.

<comment><USER24> Minimizing accumulated error. The term you are looking for is "banker's rounding"

</comment></comment><comment><USER25> Why is this still a thing?

<comment><USER26> Libraries and pypy.

</comment></comment><comment><USER27> Why hasn't the Python community moved on to Python 3 yet?

<comment><USER8> Who says it hasn't?

Just because there are stragglers doesn't mean the community, as a whole, hasn't moved (or isn't moving).

<comment><USER28> The fact that even nowadays people are still wondering about python 2 vs. 3 shows that the community hasn't move to python 3. Otherwise this wouldn't be even a question.

<comment><USER16> There are still people who haven't moved from VB6 to VB.NET. It's the nature of such major, breaking transitions.

([https://adtmag.com/articles/2016/05/24/microsoft-visual- basi...](https://adtmag.com/articles/2016/05/24/microsoft-visual-basic.aspx))

</comment></comment></comment></comment><comment><USER29> The print command needs brackets. :^)

</comment><comment><USER30> This has ruined Python for me. Gone on far too long and Python3 ended up being technical churn anyway rather than technical innovation. Not worth the break. I ended up replacing Python.

<comment><USER31> But where did you go?

I've been dragged kicking and screaming into Python 3, (which I still hate), but I don't see any higher ground to swim too.

<comment><USER32> Curious, what do you hate about Python 3, or is it just hating the migration process?

(As someone who has to deal with a lot of Unicode content, I consider Python 3 a blessing, but curious.)

<comment><USER31> I have a whole blog post/rant brewing about that topic, but on the whole, I just think it feels like it was designed by committee rather than a visionary. They've abandoned the common usage case in favor of the corner case. It also makes it much harder to teach.

A few quick examples:

Base64 encoding returns bytes. Why would anybody _ever_ want that? The whole purpose of B64 encoding is to make something string-safe.

It's also now invalid to have this as a project structure: Name/name.py (with a Name class) in it.

Which I would say is literally the most sensible common project structure to have. Now you have to call the file with the name class 'core' or 'main' or anything besides the actual description of what it is. Of course, you'll get no help from the errors if you hit this problem.

"Dictionary view objects" are horribly unsemantic and annoying to teach. How is the language improved by having this no longer work `k = d.keys(); k.sort()`? Just give me a list.

I'm maintaining a fairly large and popular Python 2/3 project and all of the errors are coming from the Python 3 side, and the maintainability of the project has been decimated by needing to support both versions.

They should have just made a 2.8 with asyncio and unicode strings.

My hope is that somebody will make a new language that does to Python what Python did to C/Java. For day-to-day scripting, let's get really serious about programmer ergonomics, semantics and maintainability above all.

<comment><USER33> There are other scripting languages that have good support and strong communities. There doesn't need to be yet another programming language. Use Ruby, JS or PHP 7 instead. If it's scientific computing, Julia fills the niche very nicely. Or R.

<comment><USER31> My point is that we should go a level "higher" than any current offering.

Ex, why not let me do something like this out of the box:

        get https://api.github.com/users/Miserlou as miserlou
        print "My name is " miserlou.name

Transparent/automatic web requests, content-type checking, serialization parsing, string formatting, network reference parsing, etc. Let the user be more specific if they need to, but design heavily around the most common use case.

<comment><USER34> This is the kind of stuff Rebol wanted to do, although i don't know if it covered this particular case.

<comment><USER35> Yep, the moment I saw that I though "REBOL"! (Actually, I thought of Red, but same idea.)

Still, it seems that this is not thought through properly. What should the language do if the server does not return JSON? And can't we basically do this in Python already?

<comment><USER31> It's a trivial example, but the point would be that the stdlib would have the ability to

a) Speak flutent HTTP b) Understand Content-Type c) Deserialize to a common format

all completely transparently. If the server returned XML or MsgPack, it wouldn't matter, the code would work the same.

Ideally, we could imagine this going a step further, and having the language speak REST entirely.

Python's requests is a nice prototype, ergonomically speaking, but we can go much further.

<comment><USER36> There is nothing currently built into Rebol stdlib that replicates exactly this. But here's an example of how it could be done...

        import <json>
        import <xml>

        load-*: function [site] [
            p: open site
            content: read p
            http: query p
            close p

            parse http/headers/Content-Type [
                  "application/json" return (load-json content)
                | "application/xml"  return (load-xml content)
            ] else [
                fail "Content-Type not recognised"
            ]
        ]

        miserlou: load-* https://api.github.com/users/Miserlou
        print ["My name is" miserlou/name]

<comment><USER35> Is this hypothetical, or does the stdlib actually have load-json and load-xml?

<comment><USER36> Above works, the <json> & <xml> imports are pulled off this remotely hosted common library - [https://github.com/r3n/renclib](https://github.com/r3n/renclib)

You'll need the Ren/C branch of Rebol 3 for this:

* repo - [https://github.com/metaeducation/ren-c](https://github.com/metaeducation/ren-c)

* pre-built binaries - [http://metaeducation.s3.amazonaws.com/index.html](http://metaeducation.s3.amazonaws.com/index.html)

<comment><USER35> Okay, as someone who doesn't know REBOL, what is the effect of miserlou/name if the server returns XML? The string value of a top-level <name> tag?

<comment><USER36> Ah this was a different XML module than I was thinking of because this is complete DOM parser!! But even so it does produce (by default) a flat representation of the XML.

So, if for example, Github did return XML and it looked something like this (shown in Rebol console):

        >> x: load-xml {<root><name>Mr Miserlou</name><login>xxx</login></root>}
        == [
            <root> [
                <name> "Mr Miserlou"
                <login> "xxx"
            ]
        ]

So to get top-level tags it's just:

        >> second x
        == [
            <name> "Mr Miserlou"
            <login> "xxx"
        ]

Now load-json also has a flat option so that a good way to unify things. Here's an updated example showing this:

        import <json>
        import <xml>

        load-*: function [site] [
            p: open site
            content: read p
            http: query p
            close p

            data: parse http/headers/Content-Type [
                  "application/json" return (load-json/flat content)
                | "application/xml"  return (second load-xml content)
            ] else [
                fail "Content-Type not recognised"
            ]

            ;; next 2 lines just turns it into a hashmap so can do:  miserlou/name
            ;; without it could have done:  miserlou/<name>
            ;;
            for-skip data 2 [data/1: to-word to-string data/1]
            make map! lock data
        ]

        miserlou: load-* https://api.github.com/users/Miserlou
        print miserlou/name

<comment><USER35> Okay, that's quite good! I'm going to see how good this can get with the Python std lib later. Probably not quite this nice.

<comment><USER35> Actually, I think I was wrong. You can get something this nice in Python. It just requires a bit more glue code in the case of JSON, and a lot more glue code in the case of XML. All told, I figure Python might 10x more code than REBOL here. I'm not sure if it's fair to hold this against Python though. It's "just" a question of libraries. And it's only fair to hold libraries against a language if the library itself would be hard to write. Which in this case I think it wouldn't.

Still neat though. Sometimes I wonder if I should learn REBOL (or Red?) or something.</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment>


The New TextSecure: Privacy Beyond SMS - <AUTHOR> https://whispersystems.org/blog/the-new-textsecure/ <comment><USER2> Please note that the article is from February 2014, so it's almost 3 years old.</comment>


Ask HN: Judging startup on hosting company it uses? - <AUTHOR>

I wonder few things. In an age where we have OVH offering dirt cheap reliable servers, Google offering great cloud hosting, Rackspace offering free CDN with its services, but its common to see most startups using Amazon.<p>I know it is reliable but it seems to be a startup fashion as well. So the question to people that track startups - would you ever judge startup based on hosting it uses? Would you discredit great startup if it would use it for example OVH as hosting provider? <comment><USER2> No, I don't think anybody would judge you on it out-of-the-gate. But, if something went wrong (your site was slow loading, you had troubles scaling etc) then your choice of hosting provider might be the first thing people look at.

Nobody really has a valid reason to critique your hosting choice unless it isn't performing in some way.

</comment><comment><USER3> Any billing structure can be a bad fit for a particular business model. In the early days most startups might save money using AWS just because their requirements are so small, eg dropbox when their data still fit on a conventional server would have cost a lot less on S3 especially with even a tiny bit of redundancy.

</comment><comment><USER4> The thing about AWS is that it's basically a one stop shop for everything you need infrastructure wise. Many startups can avoid having specialists for infrastructure in the early stages if the default choice is "use AWS" for all infrastructure decisions.

Choosing not to go the AWS route might mean having someone on staff in the early stages who is dedicated to systems management and engineering. Not every early stage team has access to someone like that so that is the main draw with AWS.

Other cloud providers still haven't caught up to the richness of AWS's offerings, although Google and Microsoft are starting to come close.

</comment><comment><USER5> No. And AWS isn't that reliable. The thing goes down a lot previously. I wasn't doing anything crazy scalable or needed all the features so I moved off of it due to all the downtime issues it had last year.

</comment><comment><USER6> No, it won't matter at all.</comment>


Disputed Maternity Leading to Identification of Tetragametic Chimerism - <AUTHOR> https://www.nejm.org/doi/full/10.1056/NEJMoa013452 <comment><USER2> Fascinating paper, and approachable for a layman like me. And in an rarity for academia, reading NEJM's site is absolutely wonderful on mobile devices.</comment>


No opting out from Facebook turning your check-ins, likes into ads - <AUTHOR> http://arstechnica.com/web/news/2011/01/no-opting-out-from-facebook-turning-your-check-ins-likes-into-ads.ars

<comment><USER2> Another privacy 'win' by Facebook.

I'm somewhat surprised by this feature, it would be fairly easy to abuse. If you were suddenly upset with say Starbucks you could change your photo and use your 'check-in' comments to push negative advertising as well. Not only negative advertising, but targeted negative advertising.

<comment><USER3> Businesses will soon be paying for their own negative feedback... uhm fail?

<comment><USER4> I'd wager that there'll be at least some sort of Bayesian "hate" filtering. That means something like "Fuck McDonalds" won't trigger the ad.

No idea how they'd deal with positive-word, negative-connotation satire, though.

<comment><USER5> That suggests that there _is_ an easy way to opt out: Just include some profanity each time you check in.

<comment><USER6> There's no way that they can implement thorough manual curation at the scale Facebook is at. Even better, as the parent suggested, use positive words to avoid any automated sentiment analysis: Starbucks makes my colon sing!

</comment></comment></comment></comment></comment><comment><USER7> "Currently, marketers don't have the ability to know or plan word-of-mouth endorsements as part of their campaigns,"

I thought that was the point of word-of-mouth endorsements.

<comment><USER8>
      Please select your FaceSenseWords campaign options:
        [ ] Grass Roots Astroturfing
        [ ] Viral
        [ ] Passionate plea by a bored 14 year old on youtube
        [ ] Flashmob protest
        [ ] DDoS of competitor

Facebook or 4chan?

</comment></comment><comment><USER9> I doubt this will really provoke much outrage. Remember, half of Facebook is a vanity service. If you're "liking" Starbucks or checking-in at TGI Fridays, you want to show off to your friends that you like that brand.

<comment><USER10> Yeah, one of the major differences relative to Beacon is that Beacon brought your activity on other sites into Facebook ("gammarator bought 'Bourne Ultimatum' tickets on Fandango.com!") Here it's taking check-ins and likes that the user has personally posted within the Facebook ecosystem.

That said, I expect all-caps viral status messages about this in about two weeks.

</comment></comment><comment><USER11> So I have a question: why is this a problem? Or, more specifically, how is this non-trivially different from the way that Facebook has worked to date? It seems almost identical to the way that your activity would otherwise have been broadcast, save the fact that it is in a more prominent, advertising-y context. It's not like the check-in didn't happen, or that it wouldn't have shown up anyway in the exact same activity feeds that are instead receiving the ad form of the check-in.

For some reason it seems like users have this pathology where they are upset whenever and however web companies try to monetize site usage, regardless of justification or intrusiveness. But, then again, I don't understand how people justify using AdBlock either, and lots of people (at least on Reddit) got really pissed about that when Ars Technica tried to block AdBlock users.

Also, how is this like Beacon at all? People are already checking in at these places on Facebook. The check-ins are just getting sponsored by the subjects of those check-ins. It's not like there's any surreptitious data sharing, apart from letting Starbucks know that I checked in there (which they would also know from the fact that I bought a Latte).

<comment><USER12> Exactly. People, especially here, try hard to justify their hatred for facebook. If this were foursquare finding a way to monetize their check-ins it would be praised.

</comment></comment><comment><USER13> its starting to feel like Facebook is pushing the limits of click-wrap EULAs so far that the general public will demand EULA reform.

<comment><USER14> I already want EULA reform. Ever print out the one for MS Office? Sheesh. The last one I had (2003) was, as I recall, 27 pages of 9 point font.

<comment><USER15> Ah, but subscription-based services are where you can find the true EULA joy-- for instance, not only is the iPhone app store EULA 20 pages of text which you have to read on a phone screen, it also pops up once every few months with mysterious changes, the content of which I've never found, that you must accept.

<comment><USER14> That is so funny- I remember the last iTunes update they did this, too. I think they tried to spell out the change but I didn't understand it.

</comment></comment></comment></comment><comment><USER16> This is the kind of shit that will do Facebook in eventually. People don't like being exploited for someone else's profit so overtly.

</comment><comment><USER17> There are echoes here of the "Beacon" fiasco --- in which Facebook was briefly broadcasting users' activity on third-party sites (particularly on-line purchases) to their Facebook friends, whether the users wanted that broadcast or not. This isn't quite the same thing, but you can certainly imagine it going wrong in some of the same ways...

</comment><comment><USER18> Prohibiting users from opting out will likely result in less 'likes' for corporate products. I find it puzzling that Facebook seems completely disinterested in incentivizing users to partcipate in their sponsor coaxing schemes. Moves like this would likely be better received if users were treated as affiliates (i.e. compensated for their product endorsements) rather than walking data aggregates.

</comment><comment><USER19> This needs one more feature. If Starbucks uses your likeness, you should get a free drink.

<comment><USER20> Revenue sharing is definitely one possible reaction to the privacy backlash.

<comment><USER6> But an unlikely one. Like all privacy "outrage" when it comes to Facebook, this might follow a predictable cycle -- firestorm in the news, some minor concession by Facebook, and eventually no one even remembers the issue down the line.

</comment></comment></comment><comment><USER21> It's nice how Facebook keeps validating the decision to opt out of Facebook.

</comment><comment><USER22> Beacon lives on. Facebook is too smart for the average bear.

<comment><USER23> ...or it's users are not savvy/don't care enough to stop them.</comment></comment>


The Loudest Sound in the World Would Kill You on the Spot - <AUTHOR> http://fivethirtyeight.com/features/the-loudest-sound-in-the-world-would-kill-you-on-the-spot/ <comment><USER2> Serious question: by "sound", don't they mean "explosion"?</comment>


GPS Time Rollover Failures Keep Happening, But They're Almost Done - <AUTHOR> https://blog.fosketts.net/2019/04/06/gps-time-rollover-failures-keep-happening-but-theyre-almost-done/ <comment><USER2> > GPS is being modernized to use a 13-bit Week Number

If you want to dig into the details, this is one of the specification documents of the GPS signal [1].

"Figure 40-1. Data Format (sheet 1 of 11)" displays the layout of the legacy messages LNAV, while "Figure 30-6.Message Type 33 -Clock & UTC" displays the layout of the new CNAV messages. You can see that WN in the old message has 10 bits only, while WN_{ot} has 13 bits in the new message.

13 bits are a bit short IMO. It's 157 years instead of 20. Just puts the rollover into that uncanny valley where you forget about it too easily. Instead, IMO one could have extended it to 32 bits directly, which would be enough for 82 million years. In the CNAV messages, there are 53 bits of reserved space around, so it's not like that bits are super scarce, and if they are you could take from the reserved space.

[1]: [https://www.gps.gov/technical/icwg/IS- GPS-200J.pdf](https://www.gps.gov/technical/icwg/IS-GPS-200J.pdf)

<comment><USER3> If we're still using this protocol 158 years on we've got bigger fish to fry.

<comment><USER4> It's accurate to within a meter and works perfectly fine _today_ , without us having to spend billions more on a replacement that could surely be spent on those pesky problems like healthcare or education.

Why wouldn't we keep using it for hundreds of years to come?

<comment><USER5> IDK because European ones already work down to the centimeter...

I've just sailed into 2-3 meter wide canal after dark here in NZ. Used my previous track from earlier today. 1 meter accuracy is not precise enough to do it safely - had to look for fairly poorly lit nav marks and rocks.

<comment><USER6> Or you could use lights and your eyes.. Blindly trusting anything like GPS to guide you through risky situations like that sounds like a good way to ruin your boat.

<comment><USER5> I would still do, but you use GPS as a confirmation rather than source of truth.

</comment></comment></comment></comment></comment></comment><comment><USER7> Mention of both Y2K and 2038 in that article made me realize that we are now closer to the latter than the former.

<comment><USER8> Yep, and Y2K was mostly in your data center. 2038 is mostly in your walls.

</comment></comment><comment><USER9> "Multiple Boeing 787s in China experienced GPS 20 years rollover issue. Some aircrafts have to be grounded waiting for an update." [https://twitter.com/ChinaAvReview/status/1114802018919411712](https://twitter.com/ChinaAvReview/status/1114802018919411712)

<comment><USER10> You guys remember a couple of days ago people were discussing this eventuality and consensus was "surely they aren't pulling timing information from GPS, unfiltered! It's an aircraft manufacturer we are talking about, they know what they are doing!" \-- Well, no, they don't. It's almost like you could begin to see a pattern here.

</comment></comment><comment><USER11> Article is not correct: not every device on the planet will roll over.

Many GPS chipsets, such as many uBlox devices, program an offset such as the date of device firmware compilation. This means that the rollover will in fact occur decades out from when users are expecting. The way to discover the real rollover date for ublox devices is to interrogate them with the ublox software to find the relevant message and add 20 years on top. For old ublox devices this field can actually be modified by the user to effectively reset the countdown. For other brands it could be a lot more difficult, though manufacturers docs should cover it.

[https://portal.u-blox.com/s/question/0D52p00008HKDTlCAP/gps-...](https://portal.u-blox.com/s/question/0D52p00008HKDTlCAP/gps- week-number-rollover-after-20-years)

<comment><USER12> A properly programmed device should have no issue. A device only needs to know the date to within 10 years so that it can interpret the week number correctly. So if the device runs its own clock that it synchronizes to GPS, it should keep working indefinitely as long as that clock is running. Even if it doesn't run a clock while powered off, it could store the clock to non- volatile memory occasionally, and it would keep working correctly as long as it isn't powered off for more than 10 years.

<comment><AUTHOR> Find me these "properly programmed devices"! This is the core of the issue: bad assumptions and poor QA let bugs like this have an outsized impact. It's our fault, folks.

</comment></comment></comment><comment><USER13> I've been raising awareness in outdoor recreation groups about this. Many people rely on GPS for rescue and navigation in the backcountry, and it's likely some will see a software failure this weekend.

<comment><USER14> Navigation is not affected. (Unless there is some other bug that bleeds over from the rollover issue)

<comment><USER15> Not sure why you were downvoted; this is my understanding also. Could someone with deeper GPS knowledge chime in?

<comment><USER16> Satelite constellation (position in the sky) is date stamped right? If the internal clock date doesn't match the received the updates may be ignored.

<comment><USER17> The satellite position updates use essentially the same time format as the rest of GPS, as I understand it. So the problem comes when some GPS receivers try and use the latest information but base their calculations on an erroneous belief it's now 1024 weeks into the past, causing them to fail to find satellites.

</comment></comment></comment></comment></comment><comment><USER18> If you're curious about the history of GPS, there's a fantastic write up here:

\- [https://www.gpsworld.com/origins-gps- part-1/](https://www.gpsworld.com/origins-gps-part-1/)

\- [https://www.gpsworld.com/origins-gps-part-2-fighting- survive...](https://www.gpsworld.com/origins-gps-part-2-fighting-survive/)

There's also a documentary on Amazon Prime:

\- [https://www.amazon.com/Lonely-Halls-Meeting-GPS- Documentary/...](https://www.amazon.com/Lonely-Halls-Meeting-GPS- Documentary/dp/B07J2QW13V)

</comment><comment><USER19> A bit off topic, but fyi Stephen, the mailhide widget at the bottom of your "About" page seems to be broken. I browsed your site beyond the article you submitted and wanted to mention that you may be able to use Ctrl-[ as a substitute for the missing Escape key on your iPad pro. I do that a lot on normal keyboards just to avoid the pivot movement and stay on the home row, as it's just a simple pinky stretch (assuming Caps Lock as an additional Control), and also map Ctrl-] to be the tmux escape for the same reason.

<comment><AUTHOR> Thank you! I appreciate both tips!

</comment></comment><comment><USER20> What time does the rollover occur? Is it based on UTC, or what?

<comment><USER21> I assume UT1: [https://www.oc.nps.edu/oc2902w/gps/timsys.html](https://www.oc.nps.edu/oc2902w/gps/timsys.html) [https://en.wikipedia.org/wiki/Universal_Time#Versions](https://en.wikipedia.org/wiki/Universal_Time#Versions)

Which is roughly UTC, give or take multiple seconds.

<comment><USER22> GPS atomic time rolled over approximately midnight UTC this Sunday morning, but ignoring leap seconds. GPS is 18 seconds ahead of UTC and 19 seconds behind atomic TAI. [http://leapsecond.com/java/gpsclock.htm](http://leapsecond.com/java/gpsclock.htm)

</comment></comment></comment><comment><USER23> Awesome article, thank you for writing it.

This is very off-topic, but how do you like the 2008 S Class? Are there reviews of it from a 2019 perspective anywhere?</comment>


Fake Meetings for People with Too Many Real Meetings - <AUTHOR> http://meetanotherday.com/ <comment><USER2> I picked up the habit of doing this manually a couple years ago, when my meeting load mushroomed following a reorg.

I also started getting assertive about declining meetings if I thought they were asking for too much time. Too many folks were in the habit of reflexively blocking out a full hour for a decision that could be made in 15 minutes plus a briefing email that everyone could be expected to read ahead of time. I was surprised to find that that one didn't really burn any social capital. Far from being offended, many of my colleagues thought it was a good idea and started following suit.

<comment> cat-dev-null People that want to pontificate, seem promotable and do less real work love by inviting everyone, every hour/day/week/month with standing meetings, while said folks trying to do more real work should take time out to hear themselves blather on abstractly about work someone else may be (maybe you) get voluntold into doing.

No agenda... not attending. Not reasonably necessary... not attending.

Sounds d!ckish/selfish, but survival skills in large orgs require some gambits.

<comment><USER3> Do you know, you're allowed to swear on the Internet? It's okay, I promise.

</comment></comment></comment><comment><USER4> A technique I learned years ago once Outlook starting broadcasting availability is the notion of "defensive scheduling". Basically schedule work time the same as you treat any other meeting. If a meeting request comes in and it conflicts with your previously scheduled work time? Decline.

I've used it pretty successfully, but it requires a little bit of discipline to make sure you have scheduled yourself out a few weeks in advance and that you don't start accepting meetings during that time.

(note: some people will figure out what you're doing when you have 6 hour blocks of time every Thursday. Schedule lots of smaller 30minute and 1hour meetings and people trying to invade your calendar won't know the difference)

</comment><comment><USER5> I do this all the time manually, but it's not hard or time-consuming. Why would I want this service trying to do it? It takes me maybe 5 minutes to block out the portions of my week that I don't want people to schedule over.

(Of course, they still schedule over it. But they also schedule over real meetings, so I don't think there's some magical way to name a meeting that makes it seem important enough that the meeting locusts won't try and eat more hours than you have in a day.)

<comment><USER6> I thought exactly the same, I've always blocked out my lunch (recurring) for the gym which is trivial to set-up. The rest can be ad-hoc depending on how much of my time I need to put off limits.

</comment></comment><comment><USER7> I have a recurring "Developer meeting", with some of the other devs every day at 12-1 because I was so tired of having the management types, having filled the rest of their calendars with useless meetings, deciding to schedule me for useless meetings that prevented me from getting lunch (as in, Monday, Tuesday is wide open, then Tuesday morning, bam, meeting invites from 10:30 until 2:30, no breaks).

That, and responding to every meeting with "tentative", so that I'm free to re-evaluate the meeting's priority against real work up until the last possible second, has allowed me to keep my sanity in a culture of time wasting.

<comment><USER8> People where I work try to book meetings across lunch on a regular basis. I'll get the invite and ask "are you bringing food?" No food and I'm not showing up.

I did have one smart person slide a pack of crackers across the table at me. As I ate them I was declining every meeting with them for the next month. That solved that problem.

</comment></comment><comment><USER9> I do this and also take advantage of the chance to take a conference room for an hour or two, vs. open plan desk with my back to a room full of people.

I get probably 5x more done per minute in the conference room.

<comment><USER10> During a previous job when I had a more manageable workload, I actually enjoyed the open plan desk. The interaction with my peers, co-workers etc. was actually helpful - if not always for productivity - at least for ideas, general sanity checks, etc. And then i got my current job, and the workload is just crazy...so any tiny interruption kills my productivity...So i do similar to what you do: block some time in a conference room, an hour or two at most. I happen to book a conference room on the other side of the building, where most folks don't recognize me. But i always have mixed feelings about it. While maybe i am not getting 5x more done, i'm definitely loads more productive. But to me it seems sad, and says alot about how crappy some jobs can be, when to get anything done, you actually have to work away from your desk and peers. Ah well...

<comment><USER9> I think the trick is either to work from multiple locations (based on task), or to have a reconfigurable space.

In my next office, I am going to do a team-based pod system. Teams of 4-8. Single large room to start (2k SF or so), broken up however they decide (could be one huge room, or individual offices, or some combination, or smaller offices plus one big room, etc)

The thing I really want to try is offices with openable walls on 2-3 sides. One side opening into a shared team room; the other opening into a hallway or open plan space.

(The other trick is doing this somewhere with <$24/mo per SF real estate.)

</comment></comment></comment><comment><USER11> Bwahaha cynical me really likes that.

It's sad that adding a calendar item of "Working - do not disturb" is not considered an option but cramming bullshit into your calendar is.

<comment><USER12> Have you actually tried "Working - do not disturb"?

</comment></comment><comment><USER13> How toxic is the work place that you can't block out time for Actually Working on your calendar?

<comment><USER4> It gets pretty crazy when you move into middle/upper management and your day gets consumed by meetings with teams waiting for you to make a decisive decision about some minor point of conflict.

It gets worse the more people end up under your hierarchy and delegation becomes a major priority. But then your life is consumed by synchronization meetings so you know what your delegates have been doing on your behalf and can answer for them/find connections and opportunities across delegates.

<comment><USER14> So you become a human kernel: scheduling, handling resources, resolving conflicts, starting processes, synchronizing.

</comment></comment></comment><comment><USER15> This is one of those things I just assumed everybody did. I've been doing it for years, and can't imagine keeping my sanity if I didn't.

</comment><comment><USER16> Once I connected my calendar I actually had trouble distinguishing my real meetings from the decoy meetings. Impressive and frightening.

<comment><USER17> :)

</comment></comment><comment><USER18> Genius. Debating whether to go with it or not. Awesome idea!

<comment><USER17> thanks! if you do try it out, we make it easy to get rid of the cal events if you like – so, we hope, you won't be stuck with more decoys than you wanted.

</comment></comment><comment><USER19> I used to block off every 9AM-10AM, 4PM-5PM and 1PM-2PM slot as busy slots. If someone really needed to have a meeting at one of those times they could ask me. Because often, those were the only slots the 10 people in the meeting all had open in the immediate future so people would then schedule meetings at those times. I grew tired of 4PM-5PM meetings which extended to 5:30PM, 6PM etc.

<comment><USER20> I'm one of those people that leave work at 5, even if there is a meeting going. My wife and children are far more important than helping someone make more money.

My boss knows I don't work nights or weekends. I routinely ignore night and weekend emails because when I leave work I'm "unemployed" as it were until the next work day. Once you set the precedent, word gets around. No one asks me for anything other than to do my job. I've been doing this for years.

Besides, I have toddlers at home as well as teenager. My wife is knackered by the time I roll in, so I get home as soon as possible to help out.

</comment></comment><comment><USER21> I have a strangely recurring meeting from 11.30AM through 1PM every day - don't you dare try and arrange a meeting in my lunch hour!

</comment><comment><USER22> I'm fortunate in that I work from home a couple days a week regularly. Generally, people will wait until I'm in the office to schedule meetings, giving me those full glorious days to get things done.

</comment><comment><USER20> I loathe meetings and do my best to avoid attending them unless there is a specific technical issue being discussed that falls within my wheelhouse. I especially dislike meetings with non-technical people present. To have to stop the meeting constantly to explain things is annoying, so I ask to be excused unless my area of expertise is involved. A later walk-to-the-local-cafe-for- espresso with my supervisor gives me anything I need to know without the lame questions and hand-holding.

There is a reason I ask to be in the server room with the lights out...

<comment><USER23> I get where you're coming from, but as you probably know, one must be careful not to take it too far. Metaphorically, one of these days, the server room you're shut up in might be outsourced to the cloud, and you weren't at the meeting.

More concretely, by saying "no" to these meetings, a person is advertising that there are some standard capabilities that they don't have (e.g., "not skilled at working with non-technical people" appearing on an evaluation at some point). This will limit the kind of roles that person will be able to fill. What seems like a strength from one angle ("deeply technical") can look like a liability from above.

(Not a down voter, BTW, just have some personal experience with the problem.)

<comment><USER12> Decline most meetings, not all.

</comment></comment></comment><comment><USER24> Just tried it - unfortunately it doesn't disable the meeting notifications so once you fill up your calendar with decoy meetings you get alerted all day :(

</comment><comment><USER25> I do this manually already. Doesn't everyone else? My Monday morning meetings are always booked, as are my Friday afternoon meetings.

</comment><comment><USER26> Baha — amazing! Love the idea of calendar decoys.

</comment><comment><USER27> for those of us who don't want to connect our calendar right off the bat, what are some example meetings this creates?

<comment><AUTHOR> It adds important things like: "Review OKRs", "Planning sync", etc.

[https://www.dropbox.com/s/7xizuaap0lbjt0k/Screenshot%202016-...](https://www.dropbox.com/s/7xizuaap0lbjt0k/Screenshot%202016-03-29%2018.05.48.png?dl=0)

<comment><USER27> nice! :D

</comment></comment></comment><comment><USER28> Adding fake meetings is an easy and effective thing to do. Honestly can't see what value a service adds here

</comment><comment><USER29> I've been thinking about how to build exactly this over the past few weeks. Awesome!</comment>


Ask HN: Overcoming coder's block? - <AUTHOR>

I was wondering if anyone has any good tips for overcoming coder's block. <comment><USER2> 1) If you find yourself trying to design features and write the code simultaneously, then try breaking up those steps. Get away from the computer, grab a pencil & paper, put your designer hat on and go to town. Then drop the notes by your desk, grab lunch, come back, and act like you are implementing someone else's design.

2) If you have a design but are just trying to figure out how to implement it, then TDD can help a lot. Write a test that checks if your thing does what it is supposed to. Then run the test, it should say you have X failures. There, now you have a concrete problem to solve: you need to fix those failures.

3) If you are intimidated by a large coding problem, try instead to just make the simplest possible prototype version that just barely works. Even if this exercise causes you to write throwaway code, it's worthwhile. Once you have something working at all, it's easier to think about the features that you need to add to make it finished.

In general I think people get blocked when they try to solve too many open- ended questions at once. So try to break apart your problems into bite-sized pieces, and find ways to turn your open-ended questions into specific, measurable problems.

</comment><comment><USER3> Thats a hard one. Zen and the art of motorcycle maintenance talks about the concept of a gumption trap <http://en.wikipedia.org/wiki/Gumption_trap> and how we might get out of one.

With me, its usually normal to feel "down" for some amount of time from time to time. I usually use this down time to sleep and relax, im probably not gonna get any real work don, so i might as well rest.

I have a lot of non coding "projects" for times like this. Usually its a book im reading a few pages at a time, or a list of tasks i might as well do NOW, since i have noting better to do. Maybe a list of bands i should check out. Basically anything that goes in the "check out later when you have more time" category, this is the time. So you do that stuff and relax and wait for it. It usually lasts a between a few hours to a whole week in my case. I don't mind it, im in school, so i can actually afford not to write code, i just show up for lectures and try to think of cool stuff to work on, eventually it comes to me.

Actually im in such a moment WRIGHT NOW, which is unfortunate, because the little free time for coding i have is on weekends.

</comment><comment><USER4> Go for a bicycle ride (or some other exercise).

<comment><USER5> You get the added benefit of endorphin-fueled contemplation of the project you're working on.

</comment></comment><comment><USER6> Some things I have learned:

Make a big, approximate plan of everything you have to do. Take the first step and detail it, dividing it in little, non-scaring tasks. Then start working on the first. While you are working on one, concentrate on that and forget about the big map.

Seriously divide work and non-work life. During the non-work part, completely forget the work. This is actually beneficial for work too.

Never sacrifice on sleep.

If you notice that you find difficuly in starting a new task on your list at the beginning of a work day, try closing your work day by leaving something to be completed (but that you know how to do it). This helps bootstrapping the next day. But don't think about it all the night!

If you feel that coding is becoming boring and repetitive, escalate your skills a little (enough to make things interesting, not enough to cause panic). Learn metaprogramming.

</comment><comment><USER7> A good night's sleep.

</comment><comment><USER8> First, go for a walk. Everyday. No excuses. 1 hour minimum.

Then, stop trying to work at the end of your day. Start working within the first 6 hours of your day.

Tea is awesome.

And if you're into it, cannabis is a great concentration/inspiration aid, but just a couple of hits, you know. Otherwise you get too wasted and won't code a thing.

<comment><USER9> _takes notes_

</comment></comment><comment><USER10> I normally change the technology I am working in and move to something else or just pick a random topic and read about it as much as I can and then as matthew said do a blog post on it. For example: State machines and Ragel state machine compiler.

</comment><comment><USER11> I had a similar issue sometime back. Here's what people on HN said: <http://news.ycombinator.com/item?id=876674>

</comment><comment><AUTHOR> For me it's writing blog posts: <http://matthewcford.com/coders-block>

</comment><comment><USER12> <http://en.wikipedia.org/wiki/Test-driven_development>

</comment><comment><USER13> Sometimes the "block" just means you aren't actually all that into your project.

</comment><comment><USER14> Draw it out.

</comment><comment><USER15> Music.

</comment><comment><USER16> Two things:

1) Understand whether you are blocked on a design question or a coding question. Is the problem you can't find the answer or the problem that you can't make the answer happen in code?

2) Purposeful distraction. Sleep. Go for a walk. Play a FPS. Learn to distract yourself for short periods throughout the day. When done correctly, this gives your subconscious time to work on the problem. When done very well over a period of days, it "ramps up" your problem-solving skills.

I'm starting off a small project this weekend. After a few hours of coding last night (my first coding session in a while) I got blocked.

So I went to sleep.

As I slept, in my dream (or when I was barely conscious, hard to tell) I realized what I needed to do next. When I woke up I was ready to get at it.

The trick is to make these times purposeful (not random procrastinating) and to never try to code your way out of a design block. Sometimes problem-solving is best approached like night vision: you see the most at night by not looking directly at the thing you're tying to see.

Hope that makes some sense.</comment>


$200 Linux Laptop Pinebook Pro Is Available for Purchase - <AUTHOR> https://itsfoss.com/pinebook-pro/ <comment><USER2> Sadly 4 GB RAM is barely usable these days. I'm much more interested in the upcoming Pinephone[0].

[https://www.pine64.org/2019/09/05/september-update-the- pinep...](https://www.pine64.org/2019/09/05/september-update-the-pinephone-is- real-shipping-soon/)

<comment><USER3> I strongly disagree. Sure you need more to run the latest games, or some video/photo/sound editing, but you wouldn't be doing those types of things on this device. For browsing, checking your social media/email, etc. it's more than enough. Even for coding. I worked a year or so off of a chromebook(with linux installed) with 4GB RAM and never had any issues. This wasn't that long ago.

<comment><USER4> Chrome, Firefox, et all can easily use 4Gb of ram in normal situations.

<comment><USER3> I always see comments like this, but never understand where they come from.

To be clear, I'm not telling you that you are wrong, or lying. I do believe some people see this. I just don't understand how it's normal. I've -never- had anything like this. Am I the odd one out?

My system now has 32GB of memory. I have two chrome windows open, one with 14 tabs, the other with 2. Below is the memory situation of the entire machine.

      $ free -m
                    total        used        free      shared
      buff/cache   available
      Mem:          32094        3164       26741         864
      2188       27612
      Swap:             0           0           0

<comment><USER5> >>>I have two chrome windows open, one with 14 tabs, the other with 2

I'm sitting at 5.8/16GB used with 87 tabs open in Brave.

I usually leave tabs open as a sort of "soft bookmarking", and a reminder to go back and read something later. For example, I have 7 tabs next to each other from the EvolutionM.net forum, and all those little Mitsubishi icons on the top of my browser are a constant "At some point you need to study how to properly maintain your dual-clutch transmission instead of paying Mitsubishi $1000+ for a fluid flush."

<comment><USER6> But surely you realize this is a luxury afforded to you by having purchased a machine with more ram.

For those that want or need to save money, less ram can be used and the same soft bookmarking can be accomplished by using OneTab or similar browser extensions.

<comment><USER5> Oh absolutely. I totally understand reducing your hardware costs if your use case is focused. I wish there were more options for purchasing "no frills" hardware in life....particularly cars.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> Pine's hardware is really nice. I would love to be able to install something very close to stock Debian on it, or a Debian distribution sourced directly from somewhere like Raspberry Pi, rather than the current OS offerings. Perhaps the OS situation has been improved with this latest hardware?

I've never felt comfortable with the OS side they provide: strange versions of Debian from unknown github accounts or links from their wiki to other third party sites I've never heard of. I can build from source but don't have anything like the resources I'd need to audit the source code, again from third party hacker sites, and it doesn't feel like there are enough collective eyeballs on the OS forks and patches to feel completely confident nothing careless or nefarious made its way into the codebase.

I've no real reason not to trust them, but if they could roll what they need for their system into an upstream vendor with a brand name I've heard of it would give me more faith in using their devices in high trust roles (ie: anything other than local coding or web browsing.)

<comment><USER8> Ever heard of armbian?

<comment><USER7> Nice. I didn't know they had direct support for all this hardware.

</comment></comment></comment><comment><USER9> I considered getting one of their 1080p 11" models, but feared receiving something with such a shitty build quality/keyboard it would just be $100 worth of e-waste.

Any of you HNers actually use one of these as a daily driver?

<comment><USER10> I'm also interested in real hands-on reviews by HN readers!

</comment></comment><comment><USER11> I just checked and it is out of stock.

</comment><comment><USER12> I don't think it is possible to order one for purchase at the moment; every time I've looked at the website in the last 3 weeks its been either "try again in 1 hour" or "out of stock".</comment>


An Early Look at Some PHP 7.4 Performance Benchmarks - <AUTHOR> https://phoronix.com/scan.php?page=news_item&px=PHP-7.4-Early-Benchmarks <comment><USER2> PHP is no more the slow dog it used to be a decade ago.

I am also noticing a trend of many "rational" developers regaining interest in it and considering it for their new applications.

<comment><USER3> Has php ever been the "slow dog" compared to the realistic competition of ruby/python?

To me the big gains of late in php are language improvements in terms of making it able to operate more strictly: typed parameters, properties and returns is a big part of this, and it's always a big wtf to me that none of the other "common" scripting languages (python, ruby, javascript) have progressed on this.</comment></comment>


Show HN: Flow Based JavaScript Creative Coding Toy for the WebGL - <AUTHOR>
Dear web lovers,
 I made a Flow Based Creative Coding Software for Web called EffectNode.com
We can simply use Modules and Cables to Remix and Code Interactive WebGL Visual Effect.
Hope you like it <3
A lot of things are not so legit but kinda works. lol <3
There are a few different inventional consideration and thoughtfulness related.
Source: https://github.com/EffectNode/EffectNode-GUI
The GUI has all the main logic. <3
Docs & Tutorial site: https://docs.effectnode.com
Best wishes,
Lok <comment><AUTHOR> Here's the biology + logic mindset behind the toy & invention.

Hope that I can find someone who loves to learn from nature and apply to coding design with me.

[https://effectnode.com/blog/flow-based-mindset-from- biology](https://effectnode.com/blog/flow-based-mindset-from-biology)</comment>


Ask HN: What makes a website look professional? - <AUTHOR>

Are there any general design cues that distinguish a professional website from a non-professional website?<p>In particular, what makes a website look authoritative, and distinguishes it from a domain squatter's template? <comment> martin-adams In my opinion, a professional web site is one that may use the following (no particular order):

\- Good balance of page elements, such as copy over graphics, etc.

\- Legibility of text (this is the visual spacing of which text can be read, font-size, colour, line height, line length, kerning, etc, etc).

\- Readability of text (does it make sense when you read it?)

\- Professionally written copy. Forgets saying "We are the leading company in ..." - yeah you and everyone else. Tell me why you're better, not that you are better, and why it's important to me, not your "thousands of other customers".

\- A strong value proposition (why am I here and what do I get out of it)

\- Strong images, such as good photography with people in it (pictures of people do wonders to user engagement). Also have them looking at the product or where to go next as it guides the user.

\- Page load speed - I don't want to see the non-essential elements be rendered first all waiting while those adverts and analytics are loaded before I get to do anything useful.

\- A business identity - professional web sites are run by professional companies who don't mind talking to you over the phone, so show the phone number.

\- Clear navigation with no confusing terminology that makes me wonder if I'm in the wrong place.

\- No tacky animations, just non-obtrusive complimentary motions that support my visual comprehension of the action I took, rather than it just trying to look flashy.

\- If it's a service (such as MailChimp), then don't be shy of what other big brands use your product. It gives more credibility.

\- Consistency. Keep navigation, fonts consistent with their purpose.

\- Be honest. When it comes to pricing, don't hide it and make me call. Otherwise I think you're up to some shady practice to hound me in to spending more.

Okay, that's all I've got time for.

</comment><comment><USER2> Polish.

You can make a turd look like a professional web-site with enough polish. But even if you do that it is still a turd.

People will come to your site if it has great content even if it doesn't look "professional." Polish just makes them more likely to stay but not really more likely to return (content does that).

Polish is all about getting both the "big" things right but also about getting the little tiny details right too. If you spend hours considering if your site should have rounded corners on the CSS boxes then you're doing it right...

<comment><USER3> > If you spend hours considering if your site should have rounded corners on > the CSS boxes then you're doing it right...

Only if you've previously spent hours making sure the content is the best it can be.

</comment></comment><comment><USER4> Multiple pages of actual content. Not just a handful of pages. Functional design elements like social media buttons, logins, chat functions. Partner links. No wordpress/etc imported theme.

</comment><comment><USER5> A good starting point would be to have your design elements aligned in such a manner that they conform to the Fibonacci Golden Ratio. Here is a link to a few articles that describe Golden Ratio usage in web designing:

1\. <http://webdesign.about.com/od/webdesignbasics/a/aa071607.htm> 2\. [http://www.smashingmagazine.com/2008/05/29/applying- divine-p...](http://www.smashingmagazine.com/2008/05/29/applying-divine- proportion-to-web-design/)</comment>


Scott Adams: I Wake You Up for the Presidential Debate - <AUTHOR> http://blog.dilbert.com/post/152024526021/i-wake-you-up-for-the-presidential-debate <comment><USER2> There are a lot of pink elephants, and more realistically, ridiculous rhetoric floating around. The trouble is, the candidates themselves are foaming at the mouth with this rhetoric. It's not just the campaign, just the party, but also the people you are voting for.

This makes it hard to see what the people really honestly believe, and what they are saying to rally their base, get out the vote, etc. It's a lot easier to motivate people to vote if you tell them they are going to die, or be slaves, whatever. The same logic goes for getting people to watch "action" news.

As for change, everyone wants change. No one thinks the system works for them if you ask them what they would change. Change is a powerful motivator, and works out for the challenger after two terms of the other party's president. You can blame anything on the current president, without having to do better, or even promise better. Just blame them, and sometimes make up an untenable plan to "fix" it (which experts will agree won't work for any number of real world reasons, which likely contributed to the outcome you're complaining about).

While everyone can get behind change, and it's a great rallying cry, the type of change is what really counts. You can't just say "change is good." This is the classic childhood fallacy of wanting what you don't/can't have. Sometimes change is not good, or not good in the short term.

I'm all for change. I'm just not sure what kind of change Trump would provide. Based on what he's saying, if I believe it, it's frightening. But it's probably mostly just made up nonsense.

Hillary will also change things. But again, who knows what? The rhetoric is equally as vague, but at least less frightening. But of course, what people do in office is completely different than the campaign.

As a side point, where does privilege come into this? It seems like some elephants actually exist, but certain people can't see them. Isn't that equally hallucinatory? Or is it just blindness? If you're any group that Trump is directly ranting about, I don't think you'd view it as a pink elephant. More like a person yelling and saying crazy things about you personally, without knowing you. But if it is something you can't understand, does it really not exist?

</comment><comment><AUTHOR> TLDR Summary:

"If you are wondering why a socially liberal and well-educated cartoonist such as myself is not afraid of Trump, it's because I don't see the pink elephant. To me, all anti-Trumpers are experiencing a shared illusion.

Before you scoff at mass, shared illusions as being unlikely, keep in mind that everyone with a different religion than yours is experiencing exactly that. Mass shared illusions are our most common experience.

If you see something unlikely – such as a new Hitler rising in the midst of America – and I see nothing remotely like that – I'm almost certainly right and you're almost certainly having the illusion. I say that because the person who sees the unlikely addition to reality is the one experiencing the illusion nearly every time. Trump as Hitler-in-America is an addition to reality that only some can see. It is a pink elephant. It is a classic hallucination."

<comment><USER3> This is a theme I've often noticed with "socially liberal" etc. people having different political beliefs--their perception of the "other side" is based in the far-left society they inhabit, and their positions are based more on criticizing that society than supporting their own vision. It's precisely because Scott Adams is from liberal, high-education circles that he sees opposition to Trump as being based around irrational fear of Trump as Hitler, when people with those beliefs are tremendously dwarfed by people who simply don't like him. (I don't think Trump as a lunatic and a fascist; I think he's unqualified and a jerk.)

It's a weird rollover effect, in which a society can get pushed so far into an echo chamber, it becomes easy to criticize every aspect of that society, and people ride the zeal of the convert all the way around to the other end of the political spectrum. A lot of the younger generation of the so-called "alt- right" grew up in very liberal, progressive societies, and once they realized most of that society was based on social pressure and oversimplification, see no reason to tilt full-on into racism and autocracy. All societies are built on social pressure; every creed we teach our kids is inherently oversimplified and flawed. But you don't get points just for pointing out those flaws. Adams has been on this kick for a while now that sounds like the beginning of every Moldbug piece: point out some incorrect belief among members of a culture you were raised in, and so think represents everyone (high-educated social liberals) and say "See? This is bullshit! It's all bullshit! The whole thing is a mass hallucination!"

</comment></comment><comment><USER4> Scott Adams says he thinks Trump is the last chance for change from a self serving political system. If you are an American and you are reading Hacker News I think you should ask yourself how much you really want change. If you are here, the system is probably working for you. And change can be good or bad.

</comment><comment><USER5> I don't think Scott Adams has grasped Object Permanence [1].

My version of his metaphor is:

If everyone in the room can see a man yelling racist, sexist, opportunistic, populist nonsense and you can't see it, maybe you're just wilfully ignorant.

If you can't judge a person for what they say and do, then what else is there?

[1] [https://en.wikipedia.org/wiki/Object_permanence](https://en.wikipedia.org/wiki/Object_permanence)</comment>


US buys nearly all global stock of coronavirus drug remdesivir - <AUTHOR> https://nypost.com/2020/07/01/us-buys-nearly-all-global-stock-of-coronavirus-drug-remdesivir/ <comment><USER2> After the stunt with the German drug manufacturer not really a surprising move that seems to be in line with recent behaviour. Then again given the development of covid in the US the 150k doses per months that Gilead can make might be a drop in the bucket pretty soon, if it even does anything useful.

<comment><USER3> If short history is any indication nobody will get those drugs anyway.</comment></comment>


Energy-harvesting design aims to turn Wi-Fi signals into usable power - <AUTHOR> https://news.mit.edu/2020/energy-harvesting-wi-fi-power-0327 <comment><AUTHOR> TL;DR...

"Any device that sends out a Wi-Fi signal also emits terahertz waves — electromagnetic waves with a frequency somewhere between microwaves and infrared light. These high-frequency radiation waves, known as 'T-rays,' are also produced by almost anything that registers a temperature, including our own bodies and the inanimate objects around us."

"They found that in this [honeycomb] arrangement, the forces between graphene's electrons were knocked out of balance: Electrons closer to boron felt a certain force while electrons closer to nitrogen experienced a different pull. The overall effect was what physicists call 'skew scattering,' in which clouds of electrons skew their motion in one direction."

"...a terahertz rectifier that consists of a small square of graphene that sits atop a layer of boron nitride and is sandwiched within an antenna that would collect and concentrate ambient terahertz radiation, boosting its signal enough to convert it into a DC current."

"This would work very much like a solar cell, except for a different frequency range, to passively collect and convert ambient energy," Fu says.

<comment><USER2> in other news: let's put a turbine on an open faucet!</comment></comment>


Ask HN: Please explain Pinterest - <AUTHOR>

I created a Pinterest page for my startup, and I've pinned 18 articles so far.
But I can't figure out how to get followers or re-pins or traffic.
Has anyone used Pinterest successfully to drive traffic? Read any useful materials on the topic?
I do not use Pinterest personally, which contributes to my confusion on this matter. <comment><USER2> Here is the book [http://www.amazon.com/Pinterest-Savvy-Followers- Strategies-B...](http://www.amazon.com/Pinterest-Savvy-Followers-Strategies- Business- ebook/dp/B00B86DKL6/ref=sr_1_4?s=books&ie=UTF8&qid=1388615977&sr=1-4&keywords=pinterest)

</comment><comment><USER3> 4chan for 40+ housewives

</comment><comment><USER4> Infographic [HN search is your friend]

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

</comment><comment><USER5> you should start following people that have similar interests(around your company). then repin their stuff if it's interesting.</comment>


another side of the FilmLoop story - <AUTHOR> http://venturebeat.com/2007/02/13/filmloops-demise-the-reputation-of-vcs-and-how-you-can-help/ <comment><AUTHOR> In case anyone didn't bother to make it to the end of the TC article and click through....</comment>


(Dis)/agree? can a site based on a premium theme be part of a dev's portfolio? - <AUTHOR>

I wanted to know opinions - if it's fair to put a bunch of WordPress based sites on a developer's portfolio page? <comment><USER2> As long as you're clear as to what role you played in the project, it's fine to put anything you worked on in your portfolio.

</comment><comment><USER3> If you're a "production person" or "front end developer" it's not an issue, however if on the other hand you're selling yourself as a "creative professional" it's a bad idea. The only exception might be if you used a super minimal theme and re-designed it from the ground up so it doesn't look anything like the original.

</comment><comment><USER4> I have listed a site which uses a purchased/premium template before. However, I made it quite clear that I did not do the design work that I simply did the front end/backend coding and that someone else did the design work.

I wasn't trying to sell myself as a designer, though...

</comment><comment><USER5> As long as you/he states the kind of work done (slicing, theming, adding plugins etc) I think it's pretty fair.</comment>


Ask HN: Is it rude to ask an employer for a walkthrough of their code base? - <AUTHOR> All too many times have I joined a company only to find a horrendous code base that makes me question the business and its employees.
Is it rude to get a walkthrough ahead of time to figure out if it's a code base I want to bother working in?
I figure employers look at my code, ask for samples of my work. Why not see theirs? <comment><USER2> All too many times, you say? So you've repeated the same mistake over and over with the same results each time and many times at that?

My question to you: what is a good code base? What would be the features of such a thing? How would you characterize it and quantify it? What are some of the things you consider "horrendous"? What tolerance do you have for such features?

I think if you can answer the questions above, you can find the right questions to ask. Then you can start to ask the right questions. Can you see my code before I hire you? No.

<comment><USER3> "Can you see my code before I hire you? No."

I'm curious, but why?

Pros to letting him see the code base

\- You just made an offer to this candidate, you obviously like him and think he is a good. Good candidates are expensive and time consuming to find. Recruiters will charge 40k to give you a candidate you have a 50%(this is being super generous) of hiring. Letting him see the code base probably saves you 5k-30k depending on how selective you are with candidates.

Cons

?He figures out your secret sauce based on looking at your code base for 10 minutes and builds your company from scratch and runs you out of business???

<comment><USER2> Honestly, if I get the sense a candidate is chasing the perfect code base, he or she probably would not get an offer. People like that leave unexpectedly once their itch is scratched (or not scratched).

Assuming that the candidate was extended an offer and asked to look at the codebase, I would require an NDA. I work in a niche market so you can't get the secret sauce in a sit down, but there are methods that can give you an advantage. For example, I worked at a place that did something they weren't supposed to be doing to gain a competitive advantage. To this day, 8 years later, despite working at several of their competitors, I still haven't seen anyone else do this thing. I haven't revealed this to anyone and I won't. We aren't doing anything like that, but we do have methods that I haven't seen till now.

<comment><USER4> Trying to think of a better way to get this info without code.

I like talking about how testing works. How code review works. How deployment works. I think those all tell me more than I would learn looking at the code.

Could they lie about test questions? Sure. But I am sure they could show you cherry picked code that lies also.

</comment></comment></comment></comment><comment><USER5> > I figure employers look at my code, ask for samples of my work. Why not see > theirs?

Absolutely! I always ask to see the code, and have turned down jobs before because I can see the system is a total train wreck.

I dont expect perfection, and indeed perfection doesn't exist. I also believe that done is better than perfect.

But I have seen some royal clusterf __ks in my time, and I think it 's perfectly reasonable to ask to see the code.

</comment><comment><USER6> Great question. Employers sure don't have any reservations about seeing your GitHub, watching you whiteboard random and obscure puzzles for 8 hours, requesting 50% of your yearly time-off on worthless interviews, etc.

Seems like what's good for the goose and all...

Having thought about it, I'd probably run as fast as I could if an employer with whom I was interviewing had a over-grown, out-of-contgrol spaghetti-code, all-javascript-SPA type code base - all business logic on the front-end, endless chains of promises and events being fired asynchronously from God- knows-which controllers, etc.

Add Mongo or another NoSQL solution as their main backend, and the interview would come to a hasty end. :)

And let's be honest, unless the potential employer is working on Top Secret defense software or is some Silicon Valley, PHD-heavy AI startup, their typical CRUD app does not warrant a NDA or anything else, at least for a cursory glance at the main code base, build system, etc., especially if you're not currently employed with their direct competitor(s).

</comment><comment><USER7> I'm not sure that it's rude, per-se. But, it would be considered a disclosure of sensitive IP. (Obviously, most corporate codebases deserve to be gutted and rewritten from scratch, but there's some kind of internal valuation.)

For some perspective -- the company I work for was sold for a tidy sum, and part of the negotiation was that the buyers got statistics about the codebase (number of lines of code, which languages certain sections were in). They didn't get to see any of the code before the sale closed. And, a prospective buyer has a lot more to lose & a lot more influence than a prospective employee.

</comment><comment><USER8> I might be completely wrong but I think if you request from a position of strength, in that you have pleased all the interviewers and they are visibly eager to hire you ASAP, then it seems possible that they let you have a look, if not the core logic at least the less critical parts. Whether or not it is rude depends on how you make the request. :)

About horrendous code, I haven't changed many companies so I wonder how many real world products that are some years old have code bases that are not some sort of a hard to figure patchy clutter if not down right trainwreck.

As for employees looking at my code, it isn't as straight forward. The code I upload to public repos like github are meant to be seen, used, extended and/or appreciated by peers, so letting potential employers look at them isn't a problem. However, when I mention that I have some personal projects brewing, which to me are potential business ideas, I would not let them in on too much detail much less look at the source code. Even if then agree to sign an NDA I wouldn't let them as I don't trust big corporations.

</comment><comment><USER9> I always do. Sometimes this involves tedious NDAs & sometimes it ends the conversation with the company.

</comment><comment><USER10> Don't just ask for the codebase, ask for repository access!

You might care about how it looks, but you should care more about how its changing. Tell them your more than willing to do it in office on a company laptop for an hour or two, tell them you don't mind having someone sit with you to answer/field questions.

This is right up there with "can I see a cap table" for questions to ask before taking an offer.

</comment><comment><USER11> Some employers have a special knack for making you forget to even ask such probing and important questions. I have had the same thoughts and will remember to this the next time I have an offer.

</comment><comment><USER12> I imagine a good chunk of them will decline due to IP reasons and stuff.

</comment><comment><USER13> You can probably ask about processes and what languages etc. High level architecture of the system. That will give you some kind of idea. how they handle refactoring?

</comment><comment><USER14> definitely ask for it or at least try to get familiar with their workflow as much as possible</comment>


Crowdsourced design site 99designs raises $35M - <AUTHOR> http://venturebeat.com/2011/04/28/99designs-accel-funding/?utm_source=twitterfeed&utm_medium=twitter&utm_campaign=Feed%3A+Venturebeat+%28VentureBeat%29

<comment><USER2> I though this was pretty funny:

"I think @99designs should have raised money from many VCs, but only given equity to the investor they liked the best."

<https://twitter.com/#!/jeffrey/status/63714047794741248></comment>


Overview of VMs related to Perl [pdf] - <AUTHOR> https://dresden-pm.github.io/gpw2015/html/talks/VmStatus.html#1

<comment><USER2> This is not an overview of VMs, this is Reini airing his anger with p5p by way of trying to declare them literally satan. Anger that is primarily caused by him making demands, refusing to provide information asked for, and generally being incapable of discussing things calmly without devolving into name- calling. He is quite skilled and very motivated, but managed to get into a situation where nobody wishes to work with him for personal reasons.

So, feel free to take these talk slides as a bird's eye overview of some things that are happened, but also take the details on p5p with an entire salt shaker.

<comment><USER3> No, it is indeed an overview of the various VM's at its current stage, with a focus on a short parrot post-mortem compared to p5p's similar management problems, and what to do. I just left out the concrete plans what to do and what is in the works as it was status talk, not a future talk.

It also gave you an perspective to other dynamic languages similar problems when the lead left or is too incompetent to still lead (e.g. php, python, C++, javascript), and what they did instead. The talk had more explanations than there on the slides.

p5p is certainly not the devil, they are just stagnant and mostly incompetent (as most of the other cited comparable langs). some other langs have _very_ similar problems, and got by by doing what they eventually did. what p5p is doing is mostly spinning than fixing, and they don't accept criticism. I gave concrete examples on the spinning parts and left out the other.

When I make "demands" on technicalities I provide information why and how with very concrete examples. Usually the maintainers don't even read that, there is a general lack of technical ability to understand the issues involved and mostly there is a huge lack of wanting to discuss the problems. So I usually have to implement the "demands" by my own, and then the general community does not benefit from it. This talk barely mentioned those p5p issues, it focused on all the vm's where they are now.</comment></comment>


The Graphing Calculator Story - a developer who refused to leave - <AUTHOR> http://www.nucalc.com/Story/ the project was canceled. A year of my work evaporated, my contract ended, and I was unemployed.<p>I was frustrated by all the wasted effort, so I decided to uncancel my small part of the project. I had been paid to do a job, and I wanted to finish it. My electronic badge still opened Apple's doors, so I just kept showing up. <comment><USER3> (2004), but I gave it an upvote because (a) it is a great story and (b) it has a great quote in it:

 _It is a cliche in our business that the first 90 percent of the work is easy, the second 90 percent wears you down, and the last 90 percent - <USER2> attention to detail - makes a good product._

<comment><USER4> I feel like there should be a "meme museum" or "hacker history" website that catalogs and celebrates all these stories in perpetuity. It seems like a few classic stories pop up on HN, Reddit, et al. every 6-9 months, seemingly discovered anew. I don't think its a bad thing, but it does suggest there isn't an organ that gives a permanent home or chronological history of these important ideas.

<comment><USER5> I've started a project for exactly that. It's not in stealth, as such, but it's in early pre-alpha.

It's ugly, bug-ridden and deeply flawed, but if anyone wants to have a play, email me.

</comment></comment></comment><comment><USER6> There is something /very interesting/ there. I think organizations work in spite of themselves because people like this are sometimes willing to stand up and fight to do something good/cool outside of their own self-interest.

how do you inspire that? Was it just that apple had a large enough platform that it was worth it to continue developing it for the apple vs. releasing freeware/shareware/open source? was it that apple just hired the right people, people who valued releasing something cool to the world over months of their own time?

It's hard for me to understand just 'cause I'm too mercenary. In their case, I'd release the product freeware/open source/something and figure I'd benefit from the reputation boost. it wouldn't occur to me to push it through as a skunkworks project where it was likely I wouldn't get any credit /or/ money.

<comment><USER7> "It is a cliche in our business that the first 90 percent of the work is easy, the second 90 percent wears you down, and the last 90 percent - the attention to detail - makes a good product."

I've had the good fortune to work for a group of people who are exactly like that. There was an extreme dedication, not because they were forced to, but because they were really addicts in a very real sense. I've personally seen what the last 90 percent could do to a product. It really makes a world of difference. Once you've seen an example, you will immediately adopt the addict mindset and start chasing for that euphoria that comes after you've finally finished the last 90 percent. Once you've done it once, you are likely to do it again, and in the process, lead by example and inspire more addicts.

</comment></comment><comment><USER8> There's also a great Google Tech Talk video of the author telling his story: [http://video.google.com/videoplay?docid=-7497796873809571567...](http://video.google.com/videoplay?docid=-7497796873809571567#)

</comment><comment><USER9> I remember seeing this in a computer store right after the Power PCs were released. My friend and I spent the next hour or so visualizing equations. It was immediately intuitive and powerful, like a TI calculator on steroids. It was everything a school kid could want and played a huge part in buying one of the machines.

While there are certainly more powerful mathematical software applications available today, It's a shame this type of easy to use application (my friend and I figured it out within 30 seconds) seems very rare.

<comment><USER10> A version of Graphing Calculator (as Grapher) still ships with every Mac today, so it seems about as available as ever.

<comment><USER11> I was wondering about that...is Grapher based on the same code base as Graphing Calculator?

<comment><USER7> No. Grapher is completely different according to the author in the Google Tech Talk video.

</comment></comment></comment></comment><comment><USER12> God, I love this story, along jwz's story about shipping Mosaic (<http://www.jwz.org/gruntle/nscpdorm.html>).

<comment><USER13> Slight nitpick - that story is about shipping what became the Netscape browser. NCSA Mosaic had been out for over a year at that point.

</comment></comment><comment><USER14> Great story -- inspiring. I've read it several times over the years. But can you imagine what would happen to these guys today (and everyone who had helped them) if the Worldwide Loyalty Team were called in?

<comment><USER15> Probably nothing. The 'Worldwide Loyalty Team' was at best a hyper exaggerated version of reality, at worst a complete fiction used for page views by Gizmodo. Ask anyone who works at Apple...although perhaps they'll just deny it because they're worried about the Worldwide Loyalty Team ;)

<comment><USER16> Link to the Gizmodo article about the Worldwide Loyalty Team [http://gizmodo.com/5427058/apple-gestapo-how-apple-hunts- dow...](http://gizmodo.com/5427058/apple-gestapo-how-apple-hunts-down-leaks)

</comment></comment></comment><comment><USER17> > we made everything retroactively legitimate by licensing the software to > Apple for distribution

Does it mean that they were eventually getting paid for that successful project?

<comment><USER18> This is what I left most curious about. There is no mention of compensation that I see - were they eventually appropriately compensated?

It seems strange for them to leave out this detail - but perhaps not since money was clearly not part of their motivations.

<comment><USER19> This is one of the questions asked at the end of the Google Tech talk video. The author responds that they licensed it to apple for a nominal fee. He also says that he got paid pretty well as a contractor for apple so didn't feel bad not getting paid for a few months. He also apparently still works full time on this program and spoke passionately about upgrading it to take advantage of GPUs.

</comment></comment></comment><comment><USER20> Like many others have said, an oldie but a goodie. When I was TAing the Intro to CS class in college, I sent this out to the class as "extra reading" though it was only marginally related to what the professor was talking about (pair programming, I think). It was such a great story that I couldn't pass up the opportunity for people to read about how cool and passionate programmers can be.

</comment><comment><USER21> This reminds me of what Clay Shirky talks about in "Cognitive Surplus: Creativity and Generosity in a Connected Age". It's the difference between intrinsic motivations and extrinsic (generally financially related) motivations. These guys wanted it to work, and operated with the earnestness of a startup. That passion is powerful stuff.

</comment><comment><USER22> An oldie but a goodie. It keeps showing up periodically on Progit and other developer sites, and I keep rereading and upvoting it every time.

</comment><comment><USER23> Great story. Also, it includes a link to commentary on Appleturns.com. IMHO, 'As the Apple Turns' was the greatest Apple website out there. I still miss it dearly.

[http://web.archive.org/web/20050219104130/http://www.appletu...](http://web.archive.org/web/20050219104130/http://www.appleturns.com/scene/?id=5115)

</comment><comment><USER24> "..Dozens of people collaborated spontaneously, motivated by loyalty, friendship, or the love of craftsmanship. We were hackers, creating something for the sheer joy of making it work."

This.

</comment><comment><USER25> Sort of like the forgotten employee story reversed.

</comment><comment><USER26> love this story :)</comment>