Ask HN: Do you keep track of what you learn? how? - <AUTHOR> <comment><USER2> Seems like this is an unpopular opinion, but... no. Not at all. If I have to keep a record to remember having learned something, it seems to me that I didn't learn it in the first place.

In general my bucket for "learned" means that I have a mental model of the landscape of a problem/fact area and a decent memory of the core sources (books, wikipedia pages, whatever) I used to figure it out. So far I haven't had trouble working backwards to refresh my understanding using those as a guide. And again, if I have managed to forget not only a fact but where I learned it... there's not much in my brain to refresh, is there?

<comment><USER3> I personally have found taking notes to be more reinforcing than destructive, but to each his own.

</comment></comment><comment><USER4> I keep it in a personal wiki that lives in dropbox. I use this one (tiddlywiki.com), but anything with tagging and search would work. I appreciate the organization by time, tag, or list, and also the latex and markup support, but these are not essential. Semantic search would be even better. Ive used this to capture ideas, notes, code, writings and lists. It has been essential for my work/dissertation.

I see the personal wiki as an evolution of the commonplace book, that was kept in the past by the likes of Darwin ([https://en.wikipedia.org/wiki/Commonplace_book](https://en.wikipedia.org/wiki/Commonplace_book)). Here are some of my notes from the book Where Good Ideas Come From:

"We know much of Darwin's thinking on the development of his ideas from his extensive notebooks, which he read, and re-read and recombined. This era was the time of the 'commonplace' notebook, in which long passages of quotes from other sources and thoughts were recorded. Reading and writing were apparently quite related. These books may have struck a balance between silo'd organization, and utter chaos, allowing the development of theories beginning with hunches which could then be further developed. The key to developing a hunch into a theory appears to be writing it down "

This is a repost from a previous thread regarding ideas[1] , but 'learned information' and 'ideas' are both just types of information to be managed.

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

<comment><USER5> How do you cope with (if using Chrome) Chrome downloading a new copy everytime you save tiddlywiki?

</comment></comment><comment><USER6> I keep track of short snippets for languages, applications, etc, using a simple CLI tool. I call it quickref, and the command is `qr`. Usage:

      $ qr
        show available quickref files (in directory $QR)

      $ qr topic
        show all lines from $QR/topic.txt
        a "topic" can be anything, but generally something like a language (py),
        application (blender), package (django), command (git). also things like audio,
        pdf manipulation, CLI image editing.

      $ qr topic pattern
        show all lines from topic.txt that match regex pattern

      $ qr topic term1 term2 ...
        show all lines from topic.txt that match all terms

      $ qr add topic "line with spaces"
        append "line with spaces" to topic.txt

      $ qr edit [topic1 [topic2 ...]]
        open specified topics with $EDITOR

<comment><USER7> Could you share the tool? I'm very interested in using it myself.

<comment><USER8> Looks similar to terminal velocity: [https://www.seanh.cc/terminal_velocity/](https://www.seanh.cc/terminal_velocity/)

<comment><USER6> Yea, had I known about this a couple years ago I might have just gone with it instead.

</comment></comment></comment></comment><comment><USER9> No. I forget things that I've learned, of course, but I don't forget that I've learned them so if I need to use something I haven't thought about in a while it's not hard to bring that knowledge back to the surface.

I work my memory out a lot, though. Some days I'll collect license plates, or of I am reminded of something but can't remember where it comes from I'll spend hours or days working to pull that memory back to the surface. I use search engines to gain new information or for confirmation of things I'm not sure of, never ever to help me remember things I feel I should remember but have forgotten.

Reading books and writing some things by hand are both helpful. I have some favorite books that I've read repeatedly and knowing whole passages is valuable. Writing is the best aid to memory. Often I'll make notes on something and then never look at them again because the act of writing (which is slow and tedious compared to typing) has helped to fix them in my memory.

</comment><comment><USER10> I keep offline notebooks where I basically take notes of hopefully most things, that I read or think about. Ideas for programs, proofs of theorems, lecture notes and so on.

I also start small git repos with projects, e.g. for a set of algorithms I explore.

Haven't found a good system though, a hierarchy or learn graph or mind map (mind map programs kind of bore me).

My hope is that most of what I write down will compile (so to speak) into my brain, at least a little bit. And that the mind map will emerge actually in my mind as I move along.

This system is not perfect, but I haven't started to optimize it (maybe I should).

One next step that I think about is to product short texts in a top-down fashion. That is, start with some high-level idea to express or illustrate. Then descend into special concepts and so on. Writing is to thinking, what walking is to a map.

</comment><comment><USER11> I put it in this system (AGPL):

[http://onemodel.org](http://onemodel.org)

...which is the best thing I've found for notetaking (I'm the author). It needs simpler installation and added features but is stable and works really well, really efficient once you get familiar, and everything is on the screen. I hope to add anki-like features in the future. Contributions welcome.

Edit: this program is like a textual mind map that is highly efficient to use from the keyboard, uses postgresql, and can handle large amounts of data, having the same thing linked in more than one place, etc etc. I use it to keep lists of gift ideas, todos, calendar, all notes, personal journal, and it just gets the job done with the lowest impedance of anything i have tried or heard of. It has an auto "journal-generation" feature, some finicky import/export features, search, somewhat limited file storage, and more.

EDIT: ps: Anki is a really useful review tool, like flashcards that space things out to months or years depending on how well one knows the material (as perhaps others like it).

</comment><comment><USER3> I keep a personal collection of dev notes in Markdown stored in Standard Notes, which I highly recommend as I have had a great experience with it so far. They're committed to security and privacy and I find it to be very portable (Android, Linux AppImage and web app all supported). I've settled on it after years of bouncing around: Text -> OneNote -> Laverna -> SN.

</comment><comment><USER12> I write down what I learn sorta like Marcus Aurelius did in his Meditations. I find it useful to revisit them every so often, not just to remind myself what I learned, but to see what I thought was important.

[https://www.seancassidy.me/meditations- redux.html](https://www.seancassidy.me/meditations-redux.html)

</comment><comment><USER13> Markdown files that I edit/search with NVAlt, this is kept in a clound-sync folder (dropbox currently, but whatever). They autosave, and take advantage of the cloud-sync-versions. Easy to grep, totally transparent, fast, portable.

I use name metadata for the notes with [broad topic] - [sub topic] - [optional very specific topic] - [optional date]. I'll probably revise this soon, since it doesn't work perfectly.

I wrote an automator service to insert an ISO8601 date, which is bound to cmd-|, and I use it a lot.

Example notes:

\+ Work - HPC - Module Installation - PLINK GCTA KING - 2017-07-21 \+ The date is for when i started, but there may be sub-note dates for logged work if it happens later (lets say that the install needs to be fixed, or was broken, and I want to annotate both the discovery and the fix). I will probably change to not put dates in the filenames unless they are time-specific notes. \+ Work - Meeting - PERIOD GROUPNAME - 2017-07 \+ These ones i keep one note per month, with dated subsections for each meeting, but am considering keeping one per year (or one period). Performance for really long notes is good. Luckily, merging notes is just a cat redirection away (so easy). \+ CLI Notes and Snippets

For regular use I just use the built-in editor (which is ok, but not great, and has some indent issues). For serious notetaking, I use the built-in hotkey to open the file in sublime (which has much better markdown handling). Full text search makes things easy to find. Sometimes I put a keyword block at the top of the note if I think it will be hard to find/remember. I can use grep if I need to do serious searches.

I've been using this method for about a year, and have accumulated 669 note files so far.

There are a bunch of other features in NVAlt that I don't use. The ability to paste readable content from a web URL is pretty cool (though I don't use it often).

</comment><comment><USER14> For algorithms (or things that aren't snippets of code, for that matter), I keep a notebook. Writing in a notebook with a pen forces me to make the learned item as simple as possible (e.g. by making a drawing), and the "aesthetics" of writing mean that I also feel compelled to keep my notebook tidy and interesting to look at, I feel it gives me a sense of personal accomplishment (I was never good at "arts" and making drawings e.g. of how a graph algorithm works is my way of creating "art" ;))

For things that involve code, e.g. an actual implementation or particular snippet, I use org-mode. It allows you to embed code as part of a regular document. I keep both thematic documents as well as a file per day for loose notes (the idea being that stuff that I collect will eventually be polished up and make it into thematic notes, but that never happens).

</comment><comment><USER15> I write everything down in a simple wiki I made: [https://cowyo.com](https://cowyo.com). [1] I have a personal instance that is password protected. I make pages for categories (art, music, math, etc.) and use it to write quick notes.

I also have a git-based go-to journal program that I use to write down other things I learn. [2]

Other than a web browser and a terminal, these are two of my most used programs...

[1]: [https://github.com/schollz/cowyo](https://github.com/schollz/cowyo)

[2]: [https://github.com/schollz/gojot](https://github.com/schollz/gojot)

</comment><comment><USER16> I use google docs and title the doc with a broad question or the search terms. I then answer the question or put in the research in the body of the doc. The search engine for the docs is then my own personal google.

</comment><comment><USER17> What does it mean to "keep track of what you learn"? How do you determine what it is that you are learning and when, and what is the purpose of trying to log such an experience?

<comment><AUTHOR> sorry, the question might have been poorly worded. I just didn't want to use the word "notes" to not bias the answers. I was referring to the process of learning, when you start with a new topic, you learn a lot of things, of which we retain the most important and abstract concepts. But sometimes it helps to write it down, make some notes to come back to, etc... In a way that you can easily get back to follow your footsteps

</comment></comment><comment><USER18> I saw a reference to a "zettelkasten", a system for hierarchically organizing index cards containing knowledge, about 6 months ago. Interested by the idea, I put together some code to automate the process to some extent and started using it. It stores notes in a directory tree and provides commands to make it rather quick to move through the tree and print/edit things. Personally, I've gotten good use out of it: it provides some basic structure to my notes, and by aliasing the command name to something really short like 'zk' it's pretty quick to use, so I'm getting a lot better about taking notes.

Unfortunately, I wrote this in odd free moments at work and can't just release it without going through a rather convoluted process. It's only about 400 lines of Go, though, so anyone who thinks this sounds kinda neat should be able to replicate it pretty easily.

Oh, it also has commands that let you store a copy of a given file with the current note, so you could e.g. take screenshots as you're making notes and they'll live with the note.

Edit: I've played with org-mode but it's kind of a big beast and I like separating out all my notes into individual files, plus I'm only occasionally an emacs user (I get the bug, use it for a week, then get sick of it and bail out)

<comment><USER19> I read about that as well, your system sounds neat.

Re org-mode: It's easy to split out into multiple files using links. I have an index.org in my ~/org directory that links to many topics, each linking to more (or each other). It's effective for creating a personal wiki-like document graph.

</comment></comment><comment><USER20> If I learn something, it's usually because I want to implement it. After it's implemented, it's in a source control repo somewhere. While I often don't remember exactly how something works, I will remember where/when I implemented it, so I can just pull up the code from that repo and I have a working example, which I myself wrote.

</comment><comment><USER21> I usually learn by doing which means that my github while a mess does encompass the things that are relevant that I have learned.

The other way would be taking notes. I'm really bad at managing notes at this time but when I take notes I can recall them for a few months.

But, going back to my previous paragraph due to the fact I learn by doing I remember things that I do repetitively.

</comment><comment><USER22> If I actually learn it as opposed to just reading something I keep track of it by remembering it. That's what learning is.

</comment><comment><USER23> It used to be keynote (the original)[1]. The format was really useful to me[2] in that you had the left-hand side panel, common in many PIMs, but it also had tabs to further organize by category/field.

Since I moved over to Linux, I settled on ZIM / Desktop Wiki[3]. I love that it's directory/file-based. The organization is done via directories. The content are text files. I no longer have to worry about whether alternateOSx or mobileOSy will support my content. Any filemanager will do... in a pinch.

[1] [http://www.tranglos.com/free/keynote.html](http://www.tranglos.com/free/keynote.html)

[2] screenshots: [http://www.tranglos.com/free/keynote_screenshot.html](http://www.tranglos.com/free/keynote_screenshot.html)

[3] [http://zim-wiki.org/](http://zim-wiki.org/)

</comment><comment><USER24> I started making mind maps to keep track of what I wanted to learn and what I knew already.

It was all one big mind map and was quite hard to manage so I decided to split it up and focus on semantically linking things together with mind maps and providing resources for these topics. I also decided to make it into a search engine so all have a chance to edit and fork the content.

Here is the search engine : [https://learn-anything.xyz/](https://learn- anything.xyz/)

I still keep my notes as mind maps, just don't publish them in the search engine :

[https://my.mindnode.com/4gWrZs1WYDYbuxaBm9NsxKchqDt1qV7nCy4L...](https://my.mindnode.com/4gWrZs1WYDYbuxaBm9NsxKchqDt1qV7nCy4LxH2Z#-385.7,-226.5,2)

<comment><AUTHOR> keep up with the good job!

</comment></comment><comment><USER25> A motley combination of a wiki (I use Mediawiki), paper notebooks, and various OpenOffice / Google Docs documents. Also, I annotate paper books with those colored sticky page flags, and - rarely - light pencil marks (I mostly don't like marking on books).

All of that said, I don't have a good, comprehensive, over-arching approach. It's a bit of a jumble right now. That said, in the name of "eating your own dog food", I will eventually be applying some of the stuff we're working on at Fogbeam Labs, especially in terms of using semantic web tech and machine learning to automatically mine rich semantics from documents and automatically link them, etc.

</comment><comment><USER26> I use a personal wiki (I use Mediawiki) and private git repos (BitBucket).

It may make sense to open up a YouTube channel though, so I can go back and review things later on. Thanks for bringing this up, because I think that's a very actionable goal.

</comment><comment><USER27> I use [https://www.are.na/](https://www.are.na/) and [https://pinboard.in/](https://pinboard.in/)

<comment><AUTHOR> isn't pinboard mostly for bookmarks? does it work well for notes?

</comment></comment><comment><USER28> Github is a good place to store notes, etc. I use either .org or .md files for documentation.

Over the past year, I've been trying to go deeper with my Swift/iOS knowledge and creating small example programs so I have can build a reference as I learn something new:

[https://github.com/melling/ios_topics/blob/master/README.md](https://github.com/melling/ios_topics/blob/master/README.md)

For a better search, I load the local repo into Sublime.

</comment><comment><USER29> In Markdown files and Google Spreadsheets.

The markdown files are published to my site...which I accidentally overwrote [https://www.aizatto.com/notes/](https://www.aizatto.com/notes/)

Google Spreadsheets example: [https://docs.google.com/spreadsheets/d/15J9dbIjHmKP9ShYuy3wm...](https://docs.google.com/spreadsheets/d/15J9dbIjHmKP9ShYuy3wmnpTUn6BOMXHJC629METroG4/edit#gid=0)

</comment><comment><USER30> I keep track about my learnings by blogging about them. Especially in web development (React) I try to keep up with them. In addition, I write down summaries of books that I have read. [0] Unfortunately I am reading more books than I am able to summarize ...

\- [0] [https://www.robinwieruch.de/categories/growth/](https://www.robinwieruch.de/categories/growth/)

</comment><comment><USER31> for stuff at work i use the internal company wiki's blog option. on a day where i learned something i didn't know before and want to keep a record of it, i blog about what i learned with a"TIL" tag and subject header.

it's company-public and i've had others comment on how some of my TILs helped them. i've also had others offer their own insights to what i learned and subsequently learned more.

<comment><AUTHOR> so in a way you guys are "microblogging" the knowledge right?

</comment></comment><comment><USER32> I write pretty copious notes in Markdown and put them in gists. I usually share them with my team whenever I get questions. I just search them with the firefox bar by title/subject, since github formats the markdown when you view it.

I also make Anki clozure cards for key facts to try to keep the skeleton of it in memory. Helps quite a bit to keep some points in active memory. I do the reviews daily.

<comment><AUTHOR> are the gists public? care to share? the firefox search bar only works for those in the first page right?

<comment><USER32> I make them public gists, but they're all company internal stuff on the internal github server, so they're only public on the intranet. ;-D

The firefox search bar only works for the titles. Since I wrote them, I usually know what's in them.

I always write them locally anyway, and then push the gist up to the server. Since I wrote them locally, if I _really_ need to search them, I just use "ack" on my directory full of gists.

</comment></comment></comment><comment><USER33> Since 2010, I keep all my "projects" in folders named "projects/<year>/<mmdd>-subject/" e.g. "projects/2017/0721-hncomment".

Often they are a local git repo containing markdown, org-mode and code. The advantage is that it's easily searchable and ages well.

Over time I only keep most the most essential pieces of information.

Works for me, but your mileage might vary

</comment><comment><USER34> I find having a GitHub repo where I write down what I'm learning in Markdown pages and also link to my coding excercises helps a lot.

Also check out AnkiApp

</comment><comment><USER35> I keep a 3-ring binder with plenty of college ruled paper on my desk, and am continuously writing down bits and pieces of information. My keyboard is on a keyboard tray to give me room on the desk for the binder.

It's not an ideal system, but practical. In college, I remember coming across THOUGHTSTICKER, which I would recommend anyone working on e-learning to research and steal ideas from.

</comment><comment><USER36> I try to write everything down. If it's for general purpose stuff, it goes in my Evernote. If it's technical, Bear Notes.

Why two separate apps? I find Bear Notes handles Markdown much better which is my preferred method of note taking. On the other hand, Evernote is better at OCR, media, etc.

I hope to one day transition everything to Bear Notes but until there is feature parity, this is my setup.

</comment><comment><USER37> For books I've read I use Zotero. Easy to tag (read, want to read, which library has them) as well as organize and you can add notes including annotated pdf's easily. I use org-mode to track things I want to learn (i.e. online course, project, etc), and I archive the notes when I completed them. If I need to lookup something it's pretty easy.

</comment><comment><USER38> To add to the other tools listed here. I like the free Cherry Tree tool. It lets me set up nicely nested categories and under that set up code folders and notes folders. All saved in a single file.

[http://www.giuspen.com/cherrytree/](http://www.giuspen.com/cherrytree/)

</comment><comment><USER39> I do. I store everything I learn in an extremely complex biological machine inside my skull. It's very efficient.

</comment><comment><USER40> I have created a very simple web application specificly for this. I find keeping things that I have learned extremly important, that's why I didn't want to use any other hosted service, so I have complete control about how I store (end-to-end encrypted) and organize (tag-based) my notes

<comment><AUTHOR> url? :D

</comment></comment><comment><USER41> Interesting coinscidence. I'm just switching from Evernote (they lost my data again two days ago and this time it was pretty bad) to Google Drive and trying to figure out some efficient system. For now, it's mostly folders with text documents, directly copy/pasted from Evernote.

</comment><comment><USER42> I live by my paper notebook. Personal favorite is the A5 grid notebook from Muji. Their .38 pens are also sublime to write with.

Something about writing stuff down with a pen on paper commits them more to memory than typing them.

</comment><comment><USER43> Onenote... Helps me organize my thoughts and the search works well enough to find things. Not great for collecting things of the web though, as I don't think the clipper is powerful enough.

</comment><comment><USER44> I use a tiddlywiki. Very easy to backup, easy to search. [http://tiddlywiki.com/](http://tiddlywiki.com/)

<comment><USER5> If using on Chrome, how do you cope witg Chrome downloading a new copy everytime you save a tiddler?

<comment><USER44> I don't actually use Chrome/Chromium.

</comment></comment></comment><comment><USER45> I keep track of bugs I've seen that I know I'm going to forget.

I use a markdown file, called ThingsToRemember.md, with absolutely no organization.

</comment><comment><USER46> Anki

<comment><USER34> Agreed - also check out AnkiApp

<comment><USER47> Ew, no. The fact that they are intentionally confusing users to piggyback off Anki's success is so scummy and distasteful.

</comment></comment></comment><comment><USER48> Carefully organized text files in a 'Learning' folder in my dropbox, full of notes on what I've learned.

</comment><comment><USER49> Massive OneNote on my computer with hundreds of pages of snippets and notes related to my job, but not random things.

</comment><comment><USER50> Mindmappers used to be popular for this... not sure what happened to them.

</comment><comment><USER51> org-mode

<comment><USER19> Same. A complex set of org-mode files at home and work on various topics. Paired with git for syncing across devices (down to just one computer at home though, so this is mostly just for version control) and org-babel, I can practice and study nearly any programming topic within it.

I've started with org-drill recently (been using Anki) to try it out. Not sure if I'll switch, but may use it for topics that are inside of my org files already to help keep my memory fresh on topics.

I've also started experimenting with Incremental Reading [0] inside org-mode. I've only done this with a couple things. Take an article or ebook or other document and get it into an org-mode structure. Mark each item with READ, UNREAD, and NEXT (to track your place in the document). As I read through it I have a capture template for creating drill notes from a marked region (very basic, just makes an item with a tag of :drill: and the contents of the region). Then when you do your drills during the day, these items will be brought up for practice. When you return to the article or text (in theory, haven't been trying this long) you can pick up where you left off because you've got the important parts of the old, read sections in your memory (and practiced).

I will be trying it with some work documents soon (many spec and requirement docs for a set of systems I don't know well, pull out important details and document names so I at least know where to look for things). An experiment in building up a better understanding of complex systems that I didn't have a hand in developing. In the past, I've relied heavily on SMEs and test engineers, more than I should have, and on this project in particular we have no SMEs for the bulk of the system.

[0] [https://www.supermemo.com/help/read.htm](https://www.supermemo.com/help/read.htm)</comment></comment>


Ai - <AUTHOR> https://thenextweb.com/artificial-intelligence/2019/05/10/ai-avatars-could-be-the-next-generations-favorite-entertainers/ <comment><USER2> Please post the article's actual headline as your HN title.</comment>


The Secret Service wants software that detects social media sarcasm. - <AUTHOR> http://www.washingtonpost.com/blogs/the-fix/wp/2014/06/03/the-secret-service-wants-software-that-detects-social-media-sarcasm-yeah-sure-it-will-work/?Post+generic=%3Ftid%3Dsm_twitter_washingtonpost

<comment><USER2> My sense of humor has no bounds in certain company and I imagine that I have ended up on a list or two because of that.</comment>


Ask HN: How to best manage multilingual content - throw-away-acco I was wondering if anyone had any tips about how to manage content written in different languages.
We currently have two sites for English and Japanese users and the back-end is set up such that there are unique pages for the English and Japanese sites.
More recently, we have been moving towards more dynamic pages using Angular and part of that has allowed us to essentially create content once that can exist on both sites but be rendered in the target language of the site. Similarly, users can toggle languages for the content on both sites.
Right now, we are transitioning to include support for more languages (German, French, and Spanish) and what I want to see is if there are other people that have experience with managing content in multiple languages. <comment><AUTHOR> I don't speak Japanese, nor do I know particularly much about their culture or how it might be changing - but there's a quite common topic of differences between "western and asian" web design. So maybe you should keep it separate and have a more targeted design for each language.

[https://randomwire.com/why-japanese-web-design-is-so- differe...](https://randomwire.com/why-japanese-web-design-is-so-different/)

The product I work on has both English as well as multiple Asian languages but we keep them the same just using different languages for each.

</comment><comment><USER2> It's probably more cutting edge research than you'd like but I'm really intrigued by Grammatical Framework and the idea of generating UI language from an "application grammar."

There is a company named Digital Grammars that is working on that kind of thing, and probably some others.</comment>


Prime Numbers Get Hitched - <AUTHOR> http://seedmagazine.com/content/article/prime_numbers_get_hitched/ <comment><USER2> Related material:

<http://www.newton.ac.uk/programmes/RMA/>

and some links for background supplied by andrewcooke (<http://news.ycombinator.com/user?id=andrewcooke>) when I submitted this a year ago:

<http://www.maa.org/mathland/mathtrek_6_28_99.html> (short summary)

<http://www.maths.bris.ac.uk/~majm/bib/GAFoS.pdf> (two page magazine article)

<http://www.maths.bris.ac.uk/~majpk/papers/67.pdf> (heavier)</comment>


DRAM Errors in the Wild: A Large-Scale Field Study [pdf] - <AUTHOR> http://www.cs.toronto.edu/~bianca/papers/sigmetrics09.pdf <comment><USER2> The paper is from 2009.</comment>


The US Economy and Federal Reserve Need to Have More Pain Tolerance - <AUTHOR> https://pomp.substack.com/p/the-us-economy-and-federal-reserve <comment><USER2> Obviously inflation will be allowed to run higher then 2%. Look where asset prices are. Look where debt is, you can't have deflation in this environment it would devastate the world economy. Powell is solid, he's got limited tools and elected policy makers refuse to act.</comment>


Godaddy expiring domains in abnormal way - <AUTHOR> http://sammy.hk/godaddy-expiring-domains-abnormal-way/

<comment><AUTHOR> The question is that, should DNS nameserver at registrar still work for over a month after the domain passed its expiry date ? According to my experiences in past 15+ years, registrar changed DNS nameserver for expired domains, which causes the web/email service of expired domain unavailable.

</comment><comment><USER2> While I have as much distaste for godaddy as the next nerd, this sounds like a non-story?

He got emails and a grace period, which is as much as I expect from any budget registrar.

</comment><comment><USER3> Maybe that's how they define "cheap" :)</comment>


Google Pilot – pay for McDonald's food "hands free" - <AUTHOR> https://get.google.com/handsfree/#?modal_active=none <comment><USER2> This title should be changed to just "Google Hands Free Payments". This is not a McDonalds-only system.</comment>


Egypt says village found in Nile Delta predated pharaohs - <AUTHOR> https://phys.org/news/2018-09-egypt-village-nile-delta-predated.html <comment><USER2> From where I stand, there is nothing ground-breaking in this announcement. Many sites older than the Pharaoh dynasties (circa 3100 BC) are known in Lower and Upper Egypt (and in many places from Middle East and Iran to Turkey).

According to Wikipedia[^1], the archaeological finds show that Neolithic settlements of the Maadi culture appeared around 5000 BC in the Nile delta.

[^1]: [https://en.wikipedia.org/wiki/Prehistoric_Egypt#Neolithic](https://en.wikipedia.org/wiki/Prehistoric_Egypt#Neolithic)

</comment><comment><USER3> a spot on this from a blog that covers Egypt archeological finds: [http://luxortimesmagazine.blogspot.com/2018/09/5000-year- old...](http://luxortimesmagazine.blogspot.com/2018/09/5000-year-old- neolithic-village.html)

Egypt Ministry of Antiquities facebook post on the announcement: [https://www.facebook.com/moantiquities/photos/a.172235502822...](https://www.facebook.com/moantiquities/photos/a.172235502822108/1935382743174033/)</comment>


Foursquare Launches Location Layers - <AUTHOR> http://www.readwriteweb.com/archives/foursquare_launches_location_layers_-_this_is_big.php <comment><USER2> I think "tips" is one of the neatest features of Foursquare, and I see this as the same concept only the information comes to you. When I am in a new city I'll sometimes pull up Foursquare to look for a place to eat/drink/be merry and I read through these tips. If that information was delivered to me based on groups that I consider myself to be a part of, I would be one happy camper.

Very cool.

</comment><comment><USER3> As long as this is handled well (i.e. truly opt-in, well-curated lists), it's a damn good idea. It's a good mesh of using the Internet to increase engagement in real life — the potential is huge for discovery of lots of unique places that many would probably never have thought to seek out before.</comment>


Booting the Analytics Application: Ruby, Avro, Pig, Voldemort, Sinatra - <AUTHOR> http://datasyndrome.com/post/13707537045/booting-the-analytics-application-events-ruby

<comment><AUTHOR> I, the writer, am trying to get more ruby people using Pig and hadoop. Feedback appreciated.

<comment><USER2> Ruby person here. I keep wanting an excuse to try Pig. Is there any reason to do so if my entire data set fits comfortably in memory?

<comment><AUTHOR> There is if you want to try dataflow programming, and hope your dataset grows to exceed RAM :)

</comment></comment></comment><comment><USER3> Does anyone have experience doing this in Python stack?

<comment><AUTHOR> I do, and it is basically the same. Substitute the python avro library for the ruby one, the python voldemort library, and bottle.py for sinatra and you're there.</comment></comment>


Ask HN: Whats the most you've paid for a Domain Name? - <AUTHOR> Was it worth it and would you do it again?  What are your thoughts on spending a small fortunate to get your .com? <comment><USER2> We paid $12 for the .co and lost tons of business from potential customers trying to email us at the .com. We finally caved and paid $9,000 for the .com. It's been 100% worth it for our business to have the .com.

<comment><USER3> Do you think the loss of business was partially because your company chose .co instead of something else like .io? I could see myself mistaking .co with .com but not .io.

</comment></comment><comment><USER4> $5000. Use a domain broker like sedo.com to negotiate so the seller doesn't know who you are and how significant the domain name is to you. Bought several sub-$2000 domains this way. Don't assume that the broker can find the domain owner if it's a years-old registration.

</comment><comment><USER5> I had to pay $1000 to a squatter to get my own personal name.

</comment><comment><USER6> The problem is that it is an emotional topic for sellers. Most sellers think that _their_ domain is worth 4 figures or more at the least while it may not be the case often.

I have found many squatted domains that I will happily pay say $200 give or take but I am shelling out $5000 for a domain name (unless I have free VC money to burn :))

Ultimately, I end up buying a domain that is not taken and live with that.

</comment><comment><USER7> Most expensive, $8,500. Not sure if it was worth it yet, time will tell. I would certainly pay lots for a domain though again. I bought and sold them as a business, I'm comfortable with paying a premium for a good domain.

</comment><comment><USER8> getting the domain of my dreams would involve like bribing an entire country and that's money i can spend in better ways.

i think it depends on the projected ROI.

the most expensive for me was an io domain for 80€/year, though. wrong purchase.

</comment><comment><USER9> $50K for a company I was working for. It's a 7 letter english word, animal, and was the brand for an ecommerce company that was shutting down but had a lot of history behind it.

</comment><comment><USER10> Not that much, it was about 15 Euro IIRC. I'd need a damn good reason to spend more than $50 on one. And though there are many good reasons, none of them have applied to me so far. :-)

</comment><comment><USER11> One of the reason it's worth it is because Google still prefers .com a lot.

</comment><comment><USER12> $2,500 and would not do it again.

<comment><AUTHOR> Why not?

<comment><USER3> I'm guessing the domain doesn't bring customers. Your product brings the customers.

</comment></comment></comment><comment><USER13> I paid $45 for give.pizza. ;)

<comment><AUTHOR> Why? As an investment?

</comment></comment><comment><USER14> I spend $99/year for mohni.sh (my first name - Mohnish)

</comment><comment><USER15> $700 for supermathworld.com from a squatter

</comment><comment><USER16> Being a geek, I would have pre-registered the .net, .org and .com for many variations of any business I might start up, so there would be no need to pay a lot. I've seen people shaken down due to lack of hind-sight.

I would pay a lot to buy .org and .com (the TLD's themselves) but they won't sell them to me.</comment>


My company builds satellites and this code is going up to space. - <AUTHOR> http://ebobby.org/img/random/space-bsod.png

<comment><USER2> What's the language?

<comment><AUTHOR> C

<comment><USER2> Cheers. Is C a popular language in the heavens?</comment></comment></comment>


32 Sci-Fi novels that you should add to your reading list - <AUTHOR> http://howtosplitanatom.com/news/32-sci-fi-novels-you-should-read/

<comment><USER3> The Orion SF Masterworks collection is much better, exhaustive, and actually published as a series (not in the US unfortunately). Take a look lots of awesome books you may or may not have read... <http://www.sfsite.com/lists/orion01.htm>

<comment><USER4> it's been awhile since I've seen a sci-fi list with books i haven't read. thanks for the link.

</comment></comment><comment><USER5> With all due respect, and it's a great novel, Animal Farm is not a _science_ fiction.

<comment><USER6> Neither is Atlas Shrugged.

anyway, who wants to add 32 books to their reading list all at once? it's more useful to know which are the best 3.

<comment><USER7> I think Atlas Shrugged might qualify -- it takes place in an alternative universe and deals with the implications of a couple of fictional technologies (Rearden metal and John Galt's engine). Animal Farm is really pushing the definition, though.

Since I'm sure everybody's idea of the best three will differ, a list of 32 with summaries so you can pick out the three (out of those which you haven't read) which are likely to appeal to you is probably more useful.

</comment></comment></comment><comment><USER8> In other words: 32 science fiction books by someone who has read most of the bestsellers in the last few years, and a few classics. Or is there some other reason that Accelerando and Spook Country are on the same list as PKD?

<comment><USER9> Yeah, I haven't read _Spook Country_ but I did read _Pattern Recognition_...I don't like the direction Gibson's going in. Idoru and the Bridge series or whatever it was called was cool.

</comment></comment><comment><AUTHOR> So why did Timeline make the list?

I was thinking about leaving it off because it is really, really bad for anyone who actually reads Sci-Fi. I put it on the list because despite the fact that it's almost completely unreadable because the Wal*Mart set needs their Sci-Fi too. I wanted the list to cover as broad a spectrum of sci-fi as I could without making it 100 items long.

I left off a lot of greats including:

Vernor Vinge Dan Simmons Arthur C Clarke Iain M. Banks

and other works by Stross and a few others

Why is Rand on this list? Well, besides the Bible (go figure) Atlas Shrugged is apparently the most influential book ever written. Do I agree with the whole Objectivist shtick? Not hardly but it is still worth mentioning.

The Giver? Like Anthem it's Sci-Fi for grade schoolers, worth mentioning because a lot of people were introduced to Sci-Fi with books like this.

Leave suggestions, as many as you want. If you don't see it on the list it probably would have been there if I had remembered it while I was compiling.

<comment><USER10> Suggestions, eh?

I personally love Stanislaw Lem's books. Two of my favorites: \- The Cyberiad: a set of short stories that read almost like silly little fairy tales, complete with probabalistic dragons, poetry machines, and kings, and electroknights. \- His Master's Voice: A rather cynical look at deciphering a message from the stars.

<comment><USER11> I'll second Cyberiad.

Also, I've heard some people describe Lem's "Solaris" as one of the few science fiction novels that also qualify as great literature, although I must admit I didn't enjoy it as much as Cyberiad.

</comment></comment></comment><comment><USER12> There are a couple odd choices on that list. I thought Timeline was pretty entertaining, but it's a typical Michael Crichton made-for-tv story and probably not worthy of such a list. I guess it sort of makes quantum physics palatable to the average joe but you could hardly say it's pushed the boundaries of the genre.

It's also worth mentioning that Minority Report isn't even a novel. It's a short story than spans maybe thirty pages. Still, virtually anything by Philip K. Dick could make it onto a list of the best sci-fi.

Anyway, there's still quite a bit of good stuff there- even the ones that aren't exactly sci-fi.

There was also a list of the top 100 sci-fi books that was going around on Reddit or Digg a while back that looked really good. Here's the link for anyone interested: [http://home.austarnet.com.au/petersykes/topscifi/lists_books...](http://home.austarnet.com.au/petersykes/topscifi/lists_books_rank1.html)

</comment><comment><USER13> Snow Crash is awesome. I finished it and "The Diamond Age" last week and I can vouch for them as a worthy read.

<comment><USER7> I really don't like Snow Crash much.

Firstly, it's dated quite badly, since it was written in the recent past about roughly-now. He gets the technology pretty much right, but the speculation about how that technology will change society pretty much all wrong.

Secondly, Mr Protagonist, as a protagonist, annoys me in that he seems more like the kind of character that a fourteen-year-old boy would think was awesome (greatest swordfighter in the world, for no good reason!) than somebody I want to read a book about.

Cryptonomicon, on the other hand, is a must-read. I don't really even like science fiction that much, but Cryptonomicon is a must-read.

<comment><USER14> About that "greatest swordfighter in the world" part - there is a real good explanation for that one. He was the guy who wrote the software for the swordfighting simulation.

To my knowledge I might still be the best racer in the world in some racing game I wrote last year, so I can absolutely relate to that ;-)

<comment><USER7> As I recall, in the end he also turns out to be a great swordfighter in real life though.

Something about single-handedly assaulting an aircraft carrier using only his katana? That was pretty much where the book lost me.

<comment><USER14> He also had the help of a railgun called Reason.

<comment><USER15> "They won't listen to us, but they'll listen to R.E.A.S.O.N.!"

</comment></comment></comment></comment></comment></comment><comment><USER4> Here is a real list, shorter and MUCH higher quality: 1\. The Cyberiad 2\. Babel-17 3\. The Stars My Destination 4\. The Sheep Look Up 5\. More Than Human 6\. Lord of Light 7\. To Your Scattered Bodies Go 8\. Earth Abides 9\. Dying Inside 10\. City 11\. Last and First Men 12\. Slan 13\. The World of Null-A

<comment><USER16> The only one I've read from your list is The Cyberiad - but that's enough to make me take the rest of your list seriously :)

</comment></comment><comment><USER17> no greg-egan or ian-m-banks or arthur-c-clarke...what gives ?

<comment><USER18> After _The Algebraist_ and _Matter_ I never want to read another word of Iaiaain M Banks. _Consider Phlebas_ was genius, but he's lost it.

<comment><USER17> try "use of weapons" and "excession". imho they are much much nicer than "consider phlebas".

<comment><USER18> I've read everything he's written to date. Which is why the last two were such crushing disappointments.

</comment></comment></comment></comment><comment><USER19> Awesome, that had 3 books I hadn't read.

My list of remarkable sci-fi: <http://www.reddit.com/info/72lt/comments#c735f>

</comment><comment><USER20> Interesting list.

 _Timeline_ by Michael Crichton is only worth reading because of how it portrays history. As sci-fi or entertainment it's horrible and it basicly assumes everyone is an stupid but it does show history far more accurately than most books.

<comment><USER21> The entire Timeline plot is a bit pathetic, your company builds a time machine and what does it do with it? Go back to the 1960s and buy Berkshire Hathaway stock? Of course not where is the money in that...

They go and study the 14th century using the time machine so they can build an accurate historical theme park.

Fail

<comment><USER22> There's a 2004 movie called Primer where the main characters made a time machine and the first thing they think of is making money off the stock market(though at lower levels, since their machine can only go back to the point it's turned on)

After that, though, it gets weird.

</comment></comment></comment><comment><USER23> Neuromancer is even better than I remember. I saw it at a book sale for $1 and picked it up and started re-reading it. Its awesome. Very believable - <USER2> and messy like real life. Great characters and just flat out virtuoso writing by Gibson.

</comment><comment><USER24> The Andromeda Strain is really, really dated. Shouldn't be on the list.

<comment><USER25> It seems to be a list of "classics" more than necessarily a list of _good_ books or good scifi books.

I'd put Andromeda Strain on there before Timeline or Down and Out.

It's funny that Down and Out is one of the few modern books on there - it's more notable for the buzz around its distribution than being any good.

</comment></comment><comment><USER26> Really, really glad to see that Down and out in the Magic Kingdom made the list!

<comment><USER27> If you liked _Down and Out_ , you should try John Varley's short stories, especially _The Phantom of Kansas_.

<comment><USER26> thanks!

</comment></comment></comment><comment><USER28> most of those got turned into movies. Speaking of which, I'd love to see Ender's game movie but it'll probably suck since it'll be a bunch of new young actors

<comment><USER29> An Ender's Game movie is in pre-production now actually. Apparently it finally happened because Orson Scott Card got a deal which included the level of creative control he required.

A lot of films never make it past pre-production so whether this film is actually finished is yet to be seen.

<comment><USER11> Good to hear he's still working on it, although as I recall they've been trying to get the movie made for decades now. (Meanwhile, Dune is being adapted for the third time...)

</comment></comment></comment><comment><USER30> Where's "Dhalgren"?</comment>


Reddit Metrics - <AUTHOR> http://redditmetrics.com/

<comment><USER2> Incredible idea, and great use of bootstrap. Surprised that Reddit doesn't have anything like this on their site.</comment>


Ask HN: Pitch deck question about team members? - <AUTHOR>

Most pitch decks seem to have a section about the team, and they usually detail previous start-ups, funding, etc.<p>But what happens if it's your first start-up?  Should I even have a team section? <comment><USER2> I've never smelled a pitch deck but I'd say absolutely yes. The team section isn't just a rundown of precious startups - it's you. What have you done, built or hacked that shows these people you're someone who gets things done/they can trust with their money. It's all part of the story - what can you tell them that they'll remember & be impressed with that ties into why this idea, why you, why now.

If you're thinking about not including it due to lack of confidence, that's a mistake.

</comment><comment><USER3> Yes, you always want to talk about your team.

Unless everyone is fresh out of school (and even then) you should have some history of past achievements. Ideally startup-type projects that you can show. Work you've previous done as a team is especially relevant.

Investors are looking for evidence you know what you're doing. Evidence that your (marketer|designer|programmer) is a great \1.

</comment><comment><USER4> Yes, the team slide is the first slide (before product). They're investing in you.

</comment><comment><USER5> Yes - and upfront. Skills, achievements, passion. They are investing in the team</comment>


Microsoft's GitHub account allegedly hacked, 500GB stolen - <AUTHOR> https://www.bleepingcomputer.com/news/security/microsofts-github-account-allegedly-hacked-500gb-stolen/ <comment><USER2> Sounds sketchy given what the employee from Microsoft commented. The article is also not completely up to date with their "interesting" findings. For example, while a language projection for the Windows Runtime to Rust is interesting, it is also a public repository: [https://github.com/microsoft/winrt-rs](https://github.com/microsoft/winrt-rs) I'd take this article with a grain of salt until we hear more.

<comment><USER3> I am pretty sure anything from Microsoft on GitHub is intended to be open source eventually. Theres no reason they dont have proprietary projects in their own internal version control systems.

<comment><USER4> Microsoft had multiple Github Enterprise accounts before the acquisition, owned by multiple teams independently inside of Microsoft. They chose to use these instead of Microsoft's own internal repository (some VSS-based thing I think), which management ordered them to use.

More internal Microsoft code was being hosted by Github instead by Microsoft.

However, the Microsoft account on Github seems to only be public repositories, or repositories being prepped to be public. Actual internal stuff is hosted by one or more Github Enterprise accounts, the alleged hack does not claim they were hacked as well.

<comment><USER5> Ah source code at MS. Always amusing to me. VSS [1] (Visual Source Safe) was terrible and I always wondered how "real" companies could use it. From what I heard, MS never did use it, they bought it and sold licenses. That's it.

That being said, Microsoft actually moved Windows to Git [2] years and years ago. Presumably they did the same with everything else. Team Foundation Server (TFS) supports Git, so they probably have the critical stuff on that TFS still, rather than GitHub. Especially since those repo's are huge.

[1] [https://en.wikipedia.org/wiki/Microsoft_Visual_SourceSafe](https://en.wikipedia.org/wiki/Microsoft_Visual_SourceSafe) [2] [https://arstechnica.com/information- technology/2017/02/micro...](https://arstechnica.com/information- technology/2017/02/microsoft-hosts-the-windows-source-in-a-monstrous-300gb- git-repository/)

<comment><USER4> They moved to Git, from what I can tell as an outsider, as part of the "Balmer fucked Microsoft" clean up duty that produced a toxic and soon-to-be-fatal culture over there.

Github ended up being the final piece they needed after years of effort. Most of what I said in the earlier comment was what I pieced together from multiple (ex-)Microsoft people who chose to talk about it, over years.

TFS afiact started as just a repo manager (in the sense, does what Github does) for VSS and Perforce, with more modern support for other things, including Microsoft's gargantuan Git monorepo... but a lot of people at Microsoft still like Github Enterprise better.

I imagine given this, whatever TFS does better, Github Enterprise will learn to do over the next few years. Microsoft is big on eating their own dogfood now, but they don't seem to want to do Google sillyness where they have 20 products that do the same thing and let them fight it out in FFA arena combat (even Lync is still Lync underneath, it just keeps getting new frontends).

<comment><USER6> > Lync is still Lync

mmm.. I know what you're saying but the change to Teams from a VOIP perspective substantially changed some of the under-the-hood stuff. They stood up a facade to offer luke-warm integration from SfB/Lync IP phones (authentication and basic calling, but that's about it). AFAIK this wasn't just a breaking change but a re-arch of some of the backend. Point being, they may be evolutions but the move to Teams is not just a new front-end. Substantial evolution has happened since we first installed server stacks to support Lync, even though we still see Lync fingerprints and junk dna everywhere.

</comment></comment></comment></comment></comment></comment><comment><USER7> > In a directory listing and samples of other private repositories sent to > BleepingComputer, the stolen data appears to be mostly code samples, test > projects, an eBook, and other generic items.

Other than private keys or sensitive info being left behind, doesn't appear to be severe. Looks nothing burger given the data until more is released.

> Microsoft employee Sam Smith replied to Under the Breach's tweet stating > that he thought the leak was fake as "Msft has a "rule" that GitHub repos > must be public within 30 days."

Curious, what does microsoft use internally? Instance of github enterprise? Azure devops?

<comment><USER8> > Curious, what does microsoft use internally? Instance of github enterprise? > Azure devops?

I guess they have internal Git servers, since they develop VFS for Git[1] to handle large amount of files in git, but IIRC github isn't support it yet

[1][https://vfsforgit.org/](https://vfsforgit.org/)

<comment><USER9> Yes. Most teams are using git repos in Azure DevOps. Anything in GitHub is supposed to be made public pretty quickly.

</comment></comment></comment><comment><USER10> I looked at this yesterday. 90% of it is garbage files from a Chinese developer, or projects that have been open-sourced for 3-4 years.

That's not how "leaks" and "hacked" works the last time I checked.

</comment><comment><USER11> > This evening, a hacker going by the name Shiny Hunters contacted > BleepingComputer to tell us they had hacked into the Microsoft GitHub > account, gaining full access to the software giant's 'Private' repositories.

Well, someone asked the other day whether or not private repositories on GitHub were safe: [0] I think you now have a concrete answer regardless if this is true or not. I have already made the case to privately self-host, especially if you're a large enterprise, but preferably on-site [1][2] to avoid these types of attacks and in the process to reduce costs like this as many were discussing in other HN discussion [3], but here we are.

If they can do it to Microsoft, they can do it to anyone else who has a GitHub account.

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

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

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

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

<comment><USER12> Isn't the upside of hosted platforms like this that they have teams of people securing and monitoring the platform, which can be a bit much for one person who's self-hosting? I do self-host other things but the article doesn't say anything about how the breach might've occurred (e.g. 2FA not enabled?).

<comment><USER13> The counterargument is that a SAAS platform like Github's interests are in the ongoing viability of the service, while my interests are only about in my data in the service.

Those are only somewhat aligned, as anyone with a dispute about terms of service can tell you.

> which can be a bit much for one person who's self-hosting

If your repo serves one person, why do you need your repo to be hosted in public at all? `git init` and a backup are all you need.

<comment><USER14> Many consider hosting the repo (privately) on Github etc to be the backup.

</comment></comment></comment></comment><comment><USER15> So many people were paranoid about Microsoft reading their private source code post-acquisition; turns out it was the other way :)

</comment><comment><USER16> I think that "leaked" would be a better choice compared to "stolen". You can't "steal" source code, unless if somehow you remove the original (such as if the source code is stored on paper in a safe somewhere and there are no copies and someone goes and steals it).

<comment><USER17> or if during the hack, the code was deleted after copying

regardless, I agree.

</comment></comment><comment><USER18> So a closed source software company buys an open source tool company, and inadvertently make closed source open source!

Or, in other words, if you want to keep something private, don't put it in the "cloud"!

<comment><USER19> Me and a friend were having coffee and were discussing secrets something like 10 years ago. The conclusion of our conversation was "Everything always comes out" (translated from Swedish [context was some gossip that eventually leaked about our common friend]) which boils down to that the only way you can really ensure something stays secret forever, is by only having it in your mind and not sharing it. As soon as you share it _anywhere_, there is a risk of it leaking somewhere.

The lesson I carry is that the more secret it something is, the closer to my brain it is. Top-secret = only in my head, little bit secret = encrypted on my harddrive, little less secret = encrypted in the cloud, not secret at all = just dumped in a Google Drive account

<comment><USER18> Mentally, tell your self there are some very personal photos in the data.

Then most people think more carefully about where they store it :)

</comment></comment></comment><comment><USER20> > Overall, from what was shared, there does not appear to be anything > significant for Microsoft to worry about, such as Windows or Office source > code.

> In a directory listing and samples of other private repositories sent to > BleepingComputer, the stolen data appears to be mostly code samples, test > projects, an eBook, and other generic items.

</comment><comment><USER21> From the article:

> Microsoft employee Sam Smith replied to Under the Breach's tweet stating > that he thought the leak was fake as "Msft has a "rule" that GitHub repos > must be public within 30 days."

Does that mean MS bans the use of GitHub for permanently storing private repos?

<comment><USER22> We (the TypeScript team) have a bunch of private repos (blog post drafts, planning docs, reproduction repos, rando internal tooling ) on GitHub that are many years old. I'm pretty sure that Sam was mistaken here.

<comment><USER23> To be fair, we had to file for exceptions to the 30 day policy for a lot those. Not that any of them are terribly important to be private; a private GitHub repo is just a convenient discussion form for collaboratively composing blog posts and such (change tracking and reviews are so nice). The blog post one, in particular, probably gets a pass because everything composed on it is eventually published in the open anyway (albeit without the discussion and editorial history).

</comment></comment></comment><comment><USER24> Gentle reminder that any private repository is sensitive, because the people pushing to them might not be as careful with what they push, because it's private.

There are hundreds of different kinds of credentials that can be hidden all throughout the history of a Git repo (in code, in logs, in comments, binary blobs, etc). If you don't have a very robust credential scanner operating continuously, and you have a large organization, you probably have active credentials hidden in your private repos.

<comment><USER25> Considering these repos are meant to be made public within 30 days, I'd hope Microsoft employees would be more careful when pushing. Leaving it to a last minute cleanup sounds like a recipe for disaster.

</comment></comment><comment><USER26> The most impressive thing is that Microsoft has more than 3k projects (with forks) on GitHub as public repo

</comment><comment><USER27> Not sure if anyone knows but if you use AWS, you can actually create your own repository there for your organization. it doesn't have the GitHub UI or features like issues, but should going in the right direction where your organization owns your private repos.

<comment><USER28> Having your repo in Amazon's cloud instead of Microsoft's cloud doesn't mean that you "own" it to a greater degree, does it? It's just a different company holding the keys for you.

<comment><USER27> True. It's just a lot safer because of how AWS has their permissions/access/ACL setup. Not to mention the attack surface is less since you don't expose your repo organization name, repo users, etc like they have it out in open in GitHub.

<comment><USER29> How's this different from doing the same thing in Azure?

</comment></comment></comment></comment><comment><USER30> So is there a list somewhere to see if we were affected?

<comment><USER31> You're not affected. Even if real this is not a breach of user data.

</comment></comment><comment><USER32> GitHub reliability is not high enough to support the way people are using it. The administration of the site is not predictable enough, the site has frequent downtime, and there are security issues.

</comment><comment><USER33> 500gb is too big, any information about the content?

</comment><comment><USER34> Plot twist, all the data was open source

</comment><comment><USER35> Awfully boring things to breach. Not very exciting except for the fact that some employee probably installed nudez.exe.

</comment><comment><USER36> I feel vindicated for my own insistence that private repos also get scanned and purged of secrets

</comment><comment><USER37> TL;DR: Microsoft failed to protect its own secrets

</comment><comment><USER38> if it is in the cloud, it will be eventually hacked

<comment><USER39> Why?

<comment><USER38> because cloud security (and cloud configuration in general) is hard. people check in sensitive stuff to github repos all the time, misconfigure IAM policies just so that it works (capitalone).

It is a new and ever changing field, there are many cloud vendors and their product line and configurations change all the time - meaning it will take a lot of time until majority of IT specialists become familiar with configuring secure cloud and majority of users of those cloud services will not make security mistakes.

<comment><USER40> That only covers some cases, not the absolute of everything in the cloud eventually being hacked. Plenty of people are competent at secure cloud based systems. Your claim and your support don't match. I expected this to go more in the direction of: cloud providers are such big juicy targets they'll just be infiltrated by advanced persistent threats who in turn gain illicit access to everything hosted.

</comment></comment></comment></comment><comment><USER41> WE JUST WANT SUNRISE BACK

</comment><comment><USER42> Microsoft stands to benefit from getting their private code exposed, because they can use it to claim that open source competitors are ripping it off. [https://en.wikipedia.org/wiki/ReactOS#Internal_audit](https://en.wikipedia.org/wiki/ReactOS#Internal_audit) [https://www.theregister.co.uk/2019/07/03/reactos_windows_res...](https://www.theregister.co.uk/2019/07/03/reactos_windows_research_kernel_claim/)

<comment><USER43> That sounds like a fairly weak argument, because IP protections still apply to open source, except for trade secrets. The degree of protection is dictated by a project's license, or if in the absence of a license then a nation's default copyright status.

In your first ReactOS example from 2006 it wasn't even Microsoft that discovered or claimed the problematic code violation. It doesn't look like Microsoft was involved at all.</comment></comment>


Copysets and Chainsets: A Better Way to Replicate (2014) - <AUTHOR> http://hackingdistributed.com/2014/02/14/chainsets/ <comment><USER2> Precisely where they went wrong:

        In practice, the speed of recovery is typically bottlenecked by the incoming bandwidth of the recovering server, which is easily exceeded by the outgoing read bandwidth of the other servers, so this limitation is typically not a big deal in practice.

If you're recovering to _one_ server, you're going to have a bad time. With random distribution, you recover to _every_ server, equally, over a very short period of time. The tradeoff is that you'll have a lot of churn, as temporary failures cause a lot of data to be rereplicated, and then extra copies deleted as the come back online. On the other hand, this helps balance your utilization and load.

The actual insight is that you want failure domain anti-affinity; That is, if you have 1000 servers on 50 network switches, you want your replica selection algorithm to use not three different machines at random, but three different _switches_ at random. If you have three different AZ's, for each copy, put one replica in each of the three. Copysets can provide this, but as stated in the article, they're much more likely to give you Achilles heels - A typical failure won't hurt, won't have any unavailability - But the wrong one, and you go down hard, with N% dataloss rather than thousandths of a percent dataloss.

In short - Failures happen. Recovering from them is what matters, not convincing yourself that they can't happen.

<comment><USER3> I think you're pointing out a good tradeoff here. The original copysets work allows you to explicitly tune the likelihood of data loss with the amount of work done for recovery. A cluster replicated to minimize the likelihood of losing a replica set under correlated failure will have a higher cost of recovery from failure. A cluster replicated to minimize recovery time (e.g., RAMcloud's random allocation) will likely lose entire replica sets upon a set of (even random) failures.

Chainsets were an attempt to add the properties of copysets to a system based upon chain replication.

Working with the original Copysets authors we refined the chainsets algorithm into a tiered replication algorithm that can enforce independence assumptions on the replica set (what you've termed anti-affinity). Here's the paper on the subject: [https://www.usenix.org/conference/atc15/technical- session/pr...](https://www.usenix.org/conference/atc15/technical- session/presentation/cidon)</comment></comment>


Show HN: Material Design for WordPress – One theme to cover all your projects - <AUTHOR> https://mdwp.io/material-design-for-wordpress/?utm_campaign=HN-03-17&utm_source=hackersnews&utm_medium=post&utm_content=link <comment><USER2> Hi, Just wanted to say really like the design.

As a note: there seems to be a screen fitting issue on mobile (in my case S6) where by its slightly beyond the width of my display so has a little play in the side scroll and results in things like your youtube video example being off center.

<comment><AUTHOR> Hi atTheBank, thanks for the nice words. About the mobile issue - we'll look at this.</comment></comment>


Ask HN: Will Apple continue to be a major disruptor? - <AUTHOR> Apple disrupted several industries and also several areas within the technology industry. All of modern life seems to have started at the moment the iPhone was introduced.<p>Is Apple going to change mankind in this way again? Will a car, or a home robot, or some magical VR application we can't currently imagine change us all again? Or is it too much to expect a single company to make such sweeping changes to the world more than once? <comment><USER2> The only thing I can say for certain is the obsession toward quality has faltered. All their software has been to show atrophy in the past year or two. There are still hardware innovations, but no "wow"s for some time.

<comment><USER3> This quality drop is a key weakness IMO. Jobs was the master of doing a few things really well. You could see he was so personally vested in products. And people loved apple products as they always worked well. It was a safe choice in the tech world. That approach seems gone. I sometimes wonder if this stems from the cult of Jony Ive after the vacuum Jobs left, where design seems to trump all else for Apple these days.

On top of which I hear Apples got an increasing ratio of career men whose passion is advancement not technology.

On the flip side the innovation cycle under Jobs was roughly 4 years per 'wow'. Many people expect something every year which isn't realistic. The watch did not fire this cycle but maybe the next product will. If it does they only really missed one product release cycle since 1998. Not bad, though the first not under Jobs watchful gaze may say something.

</comment></comment><comment><USER4> Apple has never been disruptive in the "we invented a new product category" sort of way. They've been disrupted in the "we take a raw idea, simplify it, refine it, make it KISS simple to use and polish the presentation" sort of way. That requires fanatical dedication to detail and getting it right and reading the market tea leaves to understand what's truly revolutionary and how to deliver.

With Jobs' passing, Apple's fanatical devotion to quality and polish looks like it's starting to wear off in some areas. Jobs did a great job staffing with people who could implement his visions superbly but didn't bring in an heir apparent who looks at the world differently and drives the same slavish attention to detail and polish.

<comment><AUTHOR> I agree, though I would argue that the iphone was genuinely a new product category (and perhaps also the iPad). Some re-imaginings of existing tools are so dramatic, they create new categories.

<comment><USER4> Nokia had a clunky version of a smartphone on the market for years before Apple launched the iPhone. Apple iterated on the idea, but they didn't create it. Similarly, Blackberry was already there. Didn't have touch screens but they had most of the major functions of a "smartphone" like email, messaging, etc. The category already existed in many ways, Apple fantastically riffed on it.

</comment></comment></comment><comment><USER5> > All of modern life seems to have started at the moment the iPhone was > introduced.

In 30 years the iPhone will look as clunky as the first black and white television set. I honestly don't know when "modern life" started, but I would rather put it around the first light bulb than the first iPhone.

</comment><comment><USER6> I think so. I love my iPad Pro - I can't believe how many hours a week I use it, with a lot of that time spent on creative/work projects like working on my new book, better learning Haskell (I keep one of the Haskell books I bought open and the Haskell App based on hugs - as I am reading I can flip back to the Haskell App to experiment with code snippets), and general research activities.

The iPad Pro has disrupted my work and entertainment flows.

Apple's weak point is web/cloud services but with their deep pockets, I expect that to get better.

</comment><comment><USER7> Attributing modern life to Apple, nice one OP. No Apple won't change "mankind", are you kidding me mate? Mankind, why not the whole universe?

Maybe they'll discover God or create a new one. In 2000 years people will eat an apple every Sunday in memory of Apple our Lord and Savior. You could be in the book too, you are already talking like an archangel.

</comment><comment><USER8> Without Jobs around to oversee the car or the TV it seems hard to imagine them revolutionizing any fields again.

<comment><USER9> I really can't see how anyone can revolutionize TV though. 99% of the time you are watching the TV there is zero interaction between the user and the TV.

I'm sure apple would make money if they started selling Apple branded TVs (basically a TV with a built in Apple TV box) but it would hardly be a game changer.

</comment></comment><comment><USER10> >All of modern life seems to have started at the moment the iPhone was introduced.

Why do you say that? Why don't any of the many (admittedly clunky) PDAs that came before Apple count?

</comment><comment><USER11> iPad Pro and iPhone 6S advertise 4K video editing capability that's only possible with custom chips, re-architected motherboards, etc. They could again be first in the industry to do something noticeably different. Here they're giving cheaper, low power, mobile devices capabilities that are otherwise only possible on desktops. Preferably $3000+ machines. That's what their vertical integration allows.

Although currently this 4K video editing on iPads is not working well.

<comment><USER12> > video editing capability that's only possible with custom chips, re- > architected motherboards, etc.

> first in the industry to do something noticeably different.

Apple had better hope that not just competitors in the mobile space, but also in the cloud technologies, playback, and other such spaces, follow suit.

As somebody who worked extensively with AVFoundation-based video editing apps for iOS, I can say with certainty that such ambitions have a long way to go until they're enterprise or even startup-ready. The engineering challenges associated with taking the malformed bullshit Apple calls a "QuickTime media file" into something actually usable at scale is insurmountable for even a very media-knowledgeable dev team.

</comment></comment><comment><USER13> no</comment>


One man's ObamaCare nightmare - <AUTHOR> http://www.foxnews.com/politics/2013/09/24/one-man-obamacare-nightmare/

<comment><USER2> Way too much missing information in that article, unless you have a very clear agenda and don't want anything to get in the way. Undoubtedly most insurance premiums are going up this year, just like they've been going up since long before Obama was even in the Senate. I remember in 2005 or 2006 my insurance premium went through the roof; I didn't have Obama the punching bag to blame for it, so I attributed the increase to systemic problems in health care and insurance in America. Now that ACA provisions are going to effect, suddenly they're the entire cause of rising premiums.

Now, it's entirely possible that some people's insurance premiums are going up more than they would otherwise have gone up if the ACA hadn't passed. It's also likely the case that a different but acceptable plan is available for less than the new, much higher premium mentioned in this article. My company switched plans this year because our previous plan's premium took off; the new plan is nearly identical save for a slightly higher deductible and quite a bit lower premium.

Further, this family likely qualifies to have some of the cost of their insurance subsidized under ACA; notice that this propaganda piece notes the alleged new cost but doesn't mention any offsetting subsidy available. For a family of 4 with a household income of $55,000, a "silver" plan is available for around $350/month: about what they were paying before. Interesting that the fair and balanced Fox journalist didn't do any legwork to see what the actual cost would be under ACA.</comment>


What Makes Code Hard to Understand? - <AUTHOR> http://arxiv.org/abs/1304.5257 <comment><USER2> We need to have more research like this. Programmers spend a lot of time arguing about features, syntax, paradigm, methodology, etc., but no one really has any scientific proof. I laud the researchers who are coming up with new paradigms and extending current paradigms, but we _really_ need researchers going behind and finding what's beneficial and what's not in terms of human factors.

<comment><USER3> >We need to have more research like this.

There is a lot of research done in this and other areas of Software Engineering. Problem is that it's usually locked away behind a huge paywall. If you're not affiliated with some university, you essentially have no access to it.

<comment><USER2> Another problem is that the research hasn't been collected into a manager- friendly tome like the Gang of Four book. The software industry is overflowing with snake oil, and we need to replace it with science if we want to see this turn into a _real_ engineering discipline. I'm tired of bikeshedding and holy wars -- show me the science!

<comment><USER4> If it involves studying human behaviors, it's probably not going to be science. I would prefer the holy wars over some manager telling me it's been "proven" that one side is correct.

<comment><USER2> Good point. The thought of a manager saying that sent a chill down my spine.

</comment></comment></comment></comment></comment><comment><USER5> Interesting paper.

The following code is probably my favorite, "What will this program output?" example. This is taken from the Quake III Arena code in "q_math.c" [1].

Note line 561 [2]. Non-obfuscated code, and one is left wondering... just what, exactly, is going on at that line?

I understand that the point of the paper is to analyze code without having comments to help, but it serves as a reminder to me that commenting is important in helping not only other developers understand the code, but to help myself when revisiting code particulars that may have faded from memory.

I find this to be a great example when I hear, "I don't comment; the code itself is self-documenting."

      552 float Q_rsqrt( float number )
      553 {
      554     long i;
      555     float x2, y;
      556     const float threehalfs = 1.5F;
      557
      558     x2 = number * 0.5F;
      559     y = number;
      560     i = * ( long * ) &y; // evil floating point bit level hacking
      561     i = 0x5f3759df - ( i >> 1 ); // what the fuck?
      562     y = * ( float * ) &i;
      563     y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
      564 //  y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
      565
      566 #ifndef Q3_VM
      567 #ifdef __linux__
      568     assert( !isnan(y) ); // bk010122 - FPE?
      569 #endif
      570 #endif
      571     return y;
      572 }

[1] [https://github.com/id-Software/Quake-III- Arena/blob/master/c...](https://github.com/id-Software/Quake-III- Arena/blob/master/code/game/q_math.c#L552)

[2] <https://en.wikipedia.org/wiki/Fast_inverse_square_root>

<comment><USER6> I would probably write it this way today (well, actually I wouldn't write it today, I would instead use the reciprocal square-root instructions provided by all the common architectures, but let's pretend):

      static uint32_t toRepresentation(float x) {
        uint32_t rep;
        memcpy(&rep, &x, sizeof x);
        return rep;
      }

      static float fromRepresentation(uint32_t rep) {
        float x;
        memcpy(&x, &rep, sizeof x);
        return x;
      }

      static float rsqrt_linearApproximation(float x) {
        uint32_t xrep = toRepresentation(x);
        uint32_t yrep = 0x5f3759df - xrep/2;
        return fromRepresentation(yrep);
      }

      static float rsqrt_newtonRaphsonStep(float x, float y) {
        return y*(1.5f - (0.5f*x)*y*y);
      }

      float Q_rsqrt(float x) {
        float y = rsqrt_linearApproximation(x);
        y = rsqrt_newtonRaphsonStep(x, y);
        y = rsqrt_newtonRaphsonStep(x, y);
        return y;
      }

The only semi-cryptic thing about it, to someone versed in numerics, is line with the magic number 0x5f3759df. While I would expect a professional to be able to quickly re-derive it and understand the intention, I would still write a comment, along the lines of "We approximate the floating-point representation of 1/sqrt(x) with a first-order minimax polynomial in the representation of x."

All that said, I tend to write a _lot_ of comments. Much of the code I write professionally is math library code, and it's not uncommon for me to have a ratio of several paragraphs of error analysis or correctness proofs to a few lines of code.

<comment><USER7> It's not just semi-cryptic, it's magic. Your example above includes "xrep/2" instead of i>>1, but this does nothing to increase the understanding of what the fuck is going on here.

This is a floating point number and some deep juju bit twiddling is happening with it, it's not just being divided by 2. The exponent is being effectively divided by 2 and the fractional part of the mantissa is also being effectively divided by 2. Except in the case where the representation of the exponent ended in a 1, in which case that 1 is shifted down into the fractional part of the mantissa. Exactly why this is ok and doesn't hurt the approximation is a subject that could fill a report.

<comment><USER6> Floating point representations are approximately logarithms. It should be clear to anyone with working knowledge of floating point numerics that dividing by two and negating the representation of a floating point number corresponds to taking the reciprocal square root of the number. That's not magic, that's math.

The constant simply accounts for the bias in the floating point representation and balances the error over the domain of interest. Again, not magic.

There is no "bit-twiddling" at all.

<comment><USER8> Explaining the details of the bit-twiddles does not make it any less bit- twiddling. And explaining the details behind the opaque steps does not make them any less opaque to the uninitiated.

You're using bit operations on a data type with a non-trivial bit structure. That's pretty much the definition of bit-twiddling. The fact that blunt bit operations on such a finely-defined structure can correspond to useful mathematical operations is non-obvious.

<comment><USER9> The fast inverse square root trick is clever, but this is right on. It's bypassing the provided interface for FP operations and mucking around with implementation details. That's not to say that that's a bad thing, or that floating point numbers aren't a leaky abstraction, or that the real world doesn't demand this sort of optimization from time to time. But it's still true.

</comment></comment></comment></comment></comment></comment><comment><USER10> "We were surprised to find a significant effect of Python experience on the probability of making a very specific error (base = 0.13, OR = 1.44, p < 0.5). Instead of [8, 9, 0] for their last line of output, 22% of participants wrote [8] (for both versions). After the experiment, one participant reported they mistakenly performed the "common" operation on lists x btwn and y btwn instead of x and y because it seemed like the next logical step"

I made this mistake too. In fact, even after reading that most people wrote [8] instead of [8,9,0], it took me a solid minute or so to figure out how anyone could possibly think the correct answer was [8,9,0].

This is something I've noticed happens very often while debugging. I make certain assumptions about the code and even when staring it right in the face it's hard to see where my assumptions differ from the code as written.

My assumption in this case was "why would you calculate the between lists if you weren't going to use them right away".

<comment> qu4z-2 I like the ff => ff ligature that you've managed to paste from the .pdf. :)

EDIT:

I also made the mistake, but in their defence the between lists are used straight away: They're printed. But the code seems to do three unrelated things in a row, so I'd expect an implementation like their one to have three separate function calls if there's no dependency between them.

</comment></comment><comment><USER11> My "between" implementation would be like this:

        def between( a, low, high ):
            r = []
            for x in a:
                if low < x < high:
                    r.append( x )
            return r

or even

       def between( a, low, high ):
           return [ x for x in a if  low < x < high ]

instead of their:

        def between(numbers, low, high):
            winners = []
            for num in numbers:
                if (low < num) and (num < high):
                    winners.append(num)
            return winners

The more variable is local the shorter it should be. Also by using mathematical notation you display "functionality" instead of distracting readers with the terms you coined. "Winners"?

<comment><USER12> Honest question, why? What do you think you gained? Why use short variable names in this day and age given text editor auto-completion, refactoring tools, etc.

The very plurality of `numbers` conveys so much more meaning than `a` in the method signature. Is that a Python idiom, to use `a` to mean array as a parameter? What happens if you don't use `a` until line 23 of the function, far from its original declaration?

Being someone who likes reading random code in random languages, I find single or 2 letter variable names a horrible curse to the uninitiated of a problem domain. It means you have an extra step figuring out a program, what the abbreviations even mean in that particular domain.

The only exception being when it's the standard way of using the syntax of a language (i in a for loop for example).

Obviously these code examples are trivial, but when you start getting a slightly longer function, it starts becoming hard to remember what's what half-way down a function or where they even came from if they're just virtually meaningless single or dual letters.

<comment><USER13> _What happens if you don't use `a` until line 23 of the function, far from its original declaration?_

Then you have horribly violated the previous poster's note that the more local a variable is, the shorter its name should be.

 _I find single or 2 letter variable names a horrible curse to the uninitiated of a problem domain. It means you have an extra step figuring out a program, what the abbreviations even mean in that particular domain._

It is a trade-off. If you master that domain, you'll be using that all the time, and you'll get the savings all the time.

You need to amortize the cost of memorizing the notation over the expected usage of that notation. Programmers, by profession, have to use a lot of notations from a lot of fields, and therefore benefit from using notations that require a minimum of memorization. But that is not always the right trade-off.

As I pointed out in <https://news.ycombinator.com/item?id=5157539>, _The rule is not that you need long or short variables. You need meaningful ones. A short variable name is inherently ambiguous, which can lead to confusion and mistakes. Thinking through anything with a long-variable name abuses your working memory, limiting how complex your thoughts can be._

</comment></comment></comment><comment><USER14> When reading the paper's verbose versions, I have to act as a human compiler and keep track of state which leads to mental errors. Contrast this with a shorter version reducing the LOC count from 21 to 6:

        x = [..]
        y = [..]
        between = lambda ls, low, high: (n for n in ls if low < n < high)

        x_between = between(x, 2, 10)
        y_between = between(y, -2, 9)
        xy_common = set(x).intersection(y)

Experienced users made mental stakes because _they skim code and make assumptions from previous sections._ This can be solved by taking advantage of a language's expressiveness to clarify intent.

</comment><comment><USER15> I've come to believe that it is the cognitive dissonance between the programmer and the machine. The language used often obscures what is actually executed. Often we find this useful but without proper cues we can write programs that make the divide between program and process really wide.

Personally I find declarations about properties, relationships, and categories of things easier to understand than descriptions of the tedious processes that calculate them. The former give me the ability to reason about the program elements in a logical way. The latter requires me to become a stack machine and execute the program in my head... a process that is error-prone and full of false assumptions.

eg: how many people believe that "all arrays are just pointers," in C? When is an array not like a pointer?

Research like this is good. Are there any studies that go beyond trying to trick programmers with trivial programs in the Algol family and look at the difference in performance between categorically different styles? I mean languages that are declarative vs imperative vs functional vs concatenative in nature. I think that would be very interesting to read.

 _updated for clarity_

<comment><USER16> > eg: how many people believe that "all arrays are just pointers," in C? When > is an array not like a pointer?

Ok I know this wasn't your point but I got stuck on this and am just curious to know: what you were thinking of here? One thing that occurs to me is that in a recursive function you will run out of stack space a lot faster if you are using arrays rather than allocating from the heap. I don't think that is what you were referring to though, hence the question.

<comment><USER15> Well my example was meant to support how programming languages can create a cognitive dissonance between what the programmer _thinks_ will be executed vs. what is actually executed.

One area where I think there is a high dissonance is in how C uses the same syntax for defining arrays, indexing into arrays, and referencing pointer offsets. Other examples are the array decomposition rules, array function parameters, etc. Even experienced programmers get tripped up by them:

<http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr>

</comment></comment></comment><comment><USER17> Interesting study. Here's a summary of their results:

1: "between". Experienced programmers were more likely to incorrectly assume that the results of earlier calculations would be used in a later calculation.

2: "counting". All participants, regardless of experience, were more likely to assume that a statement separated by vertical whitespace was outside of a loop, when it was actually still inside the loop. (Note that the programming language is Python, which doesn't have a loop termination token.)

3: "funcall". Whitespace between operators (e.g., 3+4+5 vs. 3 + 4 + 5) had no effect.

4: "initvar". No interesting result. (This one seems to have been mis- designed.)

5: "order". Respondents were slower when functions were defined in a different order than they were used. Experienced programmers didn't slow down as much.

6: "overload". Experienced programmers were more likely to be slower when faced with a "+" operator used for both string concatenation ("5" + "6") and addition (5 + 6), rather than used for just concatenation.

7: "partition". There was a result, but I don't think we can draw meaningful conclusions from it.

8: "rectangle". Calculating the area of a rectangle using a function that took tuples (e.g., "area(xy_1, xy_2)") took longer for programmers to understand than a function that took scalars (e.g., "area(x1, y1, x2, y2)"). Calculating the area using a class (e.g., "rect = Rectangle(0, 0, 10, 10); print rect.area()" took the same amount of time as using scalars, despite being a longer program.

9: "scope". No conclusive result.

10: "whitespace". Using horizontal whitespace to line up similar statements had no effect on response time. (There was another result relating to order of operations that deserves further study, but it wasn't thoroughly tested here, so I don't think it's conclusive.)

Note that all programs were exceedingly simple (the longest was 24 lines), so be cautious applying these conclusions to real-world work.

</comment><comment><USER18> Forgive my ignorance - IANAP.

Why can't/don't we have more tools along the lines of App Inventor [1] that provide a visual structure for programming?

The vast majority of time I've spent writing anything has been spent struggling with specific syntax, not any particular function of the code.

Coding feels like trying to manipulate a clear model that exists in the machine by spelling my intentions out one letter at a time while peering through a straw.

1: <http://appinventor.mit.edu/>

<comment><USER19> Possibly because while we have a rich ecosystem of tools for dealing with text in myriad form and ways, and have conditioned ourselves over the years on how to read text in a general form, I don't think the same can be said for more graphical representations of programs.

While a representation that uses graphical cues in lieu of textual ones may be easier to learn and understand initially, the disadvantage of not being able to use the _thousands_ of utilities for searching, refactoring examining code are then less useful, if not entirely useless.

P.S. In a way, idiomatic structure to code puts a graphical representation on the textual form. Programmers learn to recognize this. Python goes as far as to enforce it.

<comment><USER18> _> Possibly because while we have a rich ecosystem of tools for dealing with text in myriad form and ways, and have conditioned ourselves over the years on how to read text in a general form, I don't think the same can be said for more graphical representations of programs._

Yes, I completely agree.

To go off on a bit of a tangent, I wonder if it's just a matter of the right technology and implementation? Is there an analog to the rise of touch interfaces waiting to happen in the way we record, manipulate and relay information?

 _> While a representation that uses graphical cues in lieu of textual ones may be easier to learn and understand initially, the disadvantage of not being able to use the thousands of utilities for searching, refactoring examining code are then less useful, if not entirely useless._

That's a good point. I was thinking of this purely from the standpoint of creating as an individual, not maintaining or sharing.

 _> P.S. In a way, idiomatic structure to code puts a graphical representation on the textual form. Programmers learn to recognize this. Python goes as far as to enforce it._

Certainly, learning that word (idiomatic) was a boon to my understanding of code.

</comment></comment></comment><comment><USER20> _Programmers often feel like the physical properties of notation have only a minor influence on their interpretation process. When in a hurry, they frequently dispense with recommended variable naming, indentation, and formatting as superficial and inconsequential._

It's ironic that the authors of this statement can't be bothered to typeset their opening quote marks in the right direction-- a typical noobie mistake in TeX.

<comment><AUTHOR> I am not sure if I understand you correctly. Is it ok if I ask you for an example?

<comment><USER21> At the beginning of the second paragraph on page 2:

        The second question is: ''How are programmers

In LaTeX, `` is used for open quotes, and '' for close quotes. [0]

[0] <http://www.maths.tcd.ie/~dwilkins/LaTeXPrimer/QuotDash.html>

<comment><AUTHOR> Thanks, I do know how open quotes are used in LaTex though. I couldn't understand the initial comment. Thanks for the clarification. Up-voted.

</comment></comment></comment></comment><comment><USER22> From the paper: "This program prints the product f (1) ∗ f (0) ∗ f (−1) where f (x) = x + 5. ... Most people were able to get the correct answer of 60 in 30 seconds or less."

Unless I'm losing my mind, the correct answer for the code as stated is 6 * 5 * 4=120, not 60. It would be 60 if f (x) = x + 4.

<comment><USER23> You're correct. This was a (very) unfortunate typo. We had changed from x + 5 to x + 4 during the design phase to try and lessen the mental burden without making it too easy.

Thanks to you and a few others, I'm making corrections and will be uploading a fixed version of the paper soon.

</comment></comment><comment><USER23> Lots of great discussion here! If anyone is interested, I added a blog post about the paper ([http://synesthesiam.com/posts/what-makes-code-hard-to- unders...](http://synesthesiam.com/posts/what-makes-code-hard-to- understand.html)) and put the data up on github (<https://github.com/synesthesiam/eyecode-tools>).

</comment><comment><USER24> "expectation-congruent programs should take less time to understand"

this statement feels tautological, I don't think there's a single correct set of expectations

<comment><USER25> It's not a tautology. If the brain's benefit from "branch prediction" is low, then some other factor (e.g. length of code) could overwhelm the effects of predictability. So they're making a genuine claim, which is that expectation- congruence is the most important factor.

My experience bears this out. In most of my professional life, I've abided by coding standards, even if I consider the standards imperfect. That's because of the very real improvements to the team's productivity when code does what it looks like it does.

<comment><USER24> not quite a tautology, I was being a bit facetious... imho the concept of understanding is tied up with the meaning of expectation, so much so that by definition the code I don't understand doesn't do what I expect - if it did, then I'd understand it!

</comment></comment></comment><comment><USER26> I was thinking along those lines the other day.

I guess the biggest hurdle is that people essentially think "functionally" not procedurally

Because we fundamentally think x = x _2 in terms of "the value is being doubled" without thinking of all the steps needed and everything that can go wrong there.

The article is certainly interesting, from what I can quickly glance, naming is _very important _

<comment><USER27> I think functional programming and immutability goes hand in hand, so I wouldn't call x = x*2 an example of the functional thinking.

With the same logic, C is functional because you don't care about the bit fiddling in x++...

<comment><USER26>
      Yes, x = x*2 is not (y = x*2 would be better)

But expecting a while loop to exit as soon as the condition is met (as opposed as while the loop block finished) is a common case

</comment></comment></comment><comment><USER28> Code is hard to understand because most programmers only learn how to write it and never take the time to learn how to read it. If you can't read something with ease, it will always be hard to understand.

<comment><USER29> Also, if you never learn to read it, you can't begin to learn to write for the reader.</comment></comment>