Does everyone need to learn to program?  - <AUTHOR> http://blogs.msdn.com/b/alfredth/archive/2010/10/05/should-johnny-learn-to-program.aspx <comment><USER3> This article is attacking a straw man in which programming is equivalent to writing compilers.

The reality is that almost all of the sciences (and even some of the social sciences) have come to the point where you need to be able to program. Any data-driven field will require you to do data analysis. A decade ago you would need to know math, today you need to know math, and R. This is not the same as writing a compiler, but it is programming. And that's the best case scenario. In many fields, like genomics and ecology, the programming tasks become much more complex.

And that's just the sciences. The business world is also increasingly data- driven, and with increasing amounts of data there's increasing amounts of coding involved. Sure, not every field requires an understanding of programming, but not every field requires an understanding of history, and it's still taught year after year.

<comment><USER4> Interesting that the article compares software and carpentry, as there is a programming course for scientists called Software Carpentry.

<http://software-carpentry.org/>

The idea being to teach "just enough programming" in the same way you might teach a non-carpenter to do basic home repairs.

<comment><USER5> Trouble is that there is a knee in the learning curve.

Everybody works with electrical equipement - it would be helpful if some of the 'non-technical' employees here understood about checking that it was plugged in, and not spilling drinks into it.

It's not clear that a little bit of PCB layout design would help that - <USER2> like knowing a bit of logo wouldn't help them with not remembering where they had saved the word file they expect me to find.

</comment></comment></comment><comment><USER6> I think the author overestimates how much encapsulation we will see of actual programming. See the recent HN entry on programmerless programming (<http://news.ycombinator.com/item?id=1753634>) as well as Brooks' "No Silver Bullet."

Beyond that, he misunderstands the reason for teaching programming. Not everything taught in high school is expected to be the basis of a student's profession. We don't teach English classes with the intent or expectation of turning all of the students into professional literary critics, and we don't make everyone take algebra because we think they will or should all become mathematicians. Similarly, the basics of programming can be useful to a lot of people who aren't professional programmers. Everyone I know in technical fields (and many people who aren't) had to write code to solve a problem at some point.

With regard to applying existing encapsulations, it seems there are too many with interfaces too different to gain much from teaching how to use individual components. If we can find something that applies generally to all of them, we'll have something worth spending the time to teach.

Perhaps I'm less inclined to see programming as something exclusively for specialists because I first learned programming from someone whose profession and primary expertise are not programming.

<comment><USER7> "We don't teach English classes with the intent or expectation of turning all of the students into professional literary critics, and we don't make everyone take algebra because we think they will or should all become mathematicians."

That's right, we teach English because we expect students to be able to read and write and speak cogently. We teach algebra because we expect them to be able to use it in most jobs that will be available to them. We should teach programming because... We you know? It really isn't quite as urgent.

I believe that kids should be taught just enough about computers, including programming, so that they are demystified. A student in high school doesn't need programming as a skill, but he doesn't need to know that a computer is a tool to be manipulated, not an 'experience' to be bought. One course in Python in high school would enough for this, but more valuable possibly would just be teaching them that can open up the command line once in a while.

<comment><USER8> >We should teach programming because... We you know? It really isn't quite as urgent.

90% of office workers would benefit from the ability to write an Excel Macro. I don't even think that's a hard sell. Any businessman who understands what Excel does would understand that.

Of course, long term Excel is a toy, and there are all sorts of benefits to be had from more general tools like Python.

<comment><USER9> > Of course, long term Excel is a toy [...]

I too, would like this to be true. However, the unfortunate truth is that the main market for windows-based HPC is... monstrous, clusterized excel computations.

<comment><USER8> I'm just sort of pining for a far flung day after programming becomes established as an ordinary middle-school and high-school class, and those students grow up and become MBAs and CEOs. For now we have Excel. :)

</comment></comment></comment></comment></comment><comment><USER10> _The giant hole in our workforce isn't entry level developers who can hash out c code and write a compiler from scratch. It is for people with combined skills who can APPLY encapsulated technology (lots thanks to companies has been encapsulated) to specific domains._

Right on.

I know people who can write a compiler from scratch but have no idea how to help a customer solve a business problem.

I also know people who can diagnose business, project, and people problems but have no idea what the underlying technology is or how to apply it.

The critical path for the masses is in the intersection of these 2 sets.

The preparation for that probably requires cursory study of a lot of things and deep study of one or two things.

Does everyone need to learn to program? No. But a little more understanding by everyone can go a long way.

<comment><USER11> I second. I think everyone will agree that programming's learning curve is logarithmic. Just a few hours of programming study can deliver huge benefits.

</comment></comment><comment><USER12> I suspect for any kind of skill there is a way to get through life without it. Apparently a lot of people can't read. Does that invalidate the claim that "everyone should learn to read"?

</comment><comment><USER13> This is obviously a subject that I care about a lot.

I'm not sure that I'm ready to hand down some sort of moral imperative, but I do think that learning programming brings _advantages_ to one in almost any other profession. But this can be said about almost any cross-disciplinary study.

Really, it's hard to have an outside perspective on this; we all see programming as important (if not necessary) because our lives revolve around tech. Yet many of my friends do not know how to program, and they get along just fine. Almost all of them that have gone on to learn the basics have enjoyed the additional perspective, however.

<comment><USER14> Having studied economics and programming, I think that programming is advantaged. Econ taught me some principles that serve me well in understanding incentives and behaviors, but programming teaches a way of organizing thought which is more broadly useful.

Thinking about what I'd studied in public school, I wish I could trade hours spent learning rules of grammar for hours spent learning how to create and organize symbolic logic.

</comment></comment><comment><USER15> From the article: > There are FAR FAR FAR more jobs out there today for someone with the technical skills to build a SharePoint portal, or light up a CRM instance or build a bioinformatics database than there are for someone who can build the next Python compiler. Let's stop trying to train the mass of high school students to become preservation carpenters, and instead make them very good contractors.

IMO, this is the Java Schools approach to computer learning. How many people here have railed that high school computer training is actually Word and Excel training. It can be valuable, but only if you're learning the _underlying concepts_ and not just learning the keystrokes to do something.

We need to teach folks that (a) computers aren't magic, (b) there's a logical approach to solving problems and it happens to be called programming, and (c) programming can be fun.

[EDIT: Fixed formatting.]

</comment><comment><USER16> I think all students on a technical AP-track should learn how to program.

Programming isn't a specific academic discipline as it is a TOOL to be used. Students that go on to study biology should have enough coding skill to know what they don't know, and go from there to do some genetic data analysis.

Mechanical engineer track students should be able to do some modeling and implement the algorithms behind them.

Business track students should be able to do more powerful analyses than excel sorting.

I only took a BASIC course in 8th grade and a 2-week C course in college, the rest was self-taught. But I've found myself using programming significantly more than any of the higher level calculus I've learned (not that this should be replaced!!)

<comment><USER17> Yes. And teach the biologists Matlab (or something similar, and perhaps more open), instead of making them rote-learn C.

</comment></comment><comment><USER18> I agree with the premise of the article. The software development world would be perfectly happy if there were more technicians around. Technology is becoming an inherent skill, there's no reason to believe that we're a niche anymore.

At least where I am from there seems to be a glut of specialized and educated people. Industry jobs that would be easily serviced by a technician for the pay-grade they offer and skill set they require are instead demanding CS degrees and years of experience. It's like asking a master carpenter to install your Ikea furniture.

Many of the tools that we've spent the last two decades building have allowed anyone with some spare time and a copy of a few technical manuals to build a decent web application in no time. What's even more amazing is that a lot of these skills are simply taught _socially_. My nieces never learned how to build websites, integrate it with their social networks, customize it, and all that in school. They learned it from friends and online.

I don't think "everyone" needs to _learn_ how to program, but that most of them will to some degree as computer technology becomes more ingrained in our daily lives.

</comment><comment><USER19> This article raises some excellent points. While I don't think everyone needs the ability to actually write a functioning program, the ability to break down a problem into a logical set of instructions is a critical skill. Whether the instructions are implemented as a functioning program, pseudocode or just a general algorithm that can be followed by another person is not as important as the thought process.

</comment><comment><USER20> I believe programming will be some day a mandatory subject in schools. Not like everybody needs to be an expert but at least some basic knowledge of it.

<comment><USER5> It was when I was at school 20years ago.

And the ability to write

10 print "I am great" 20 goto 10

has led directly to the wide understanding of technology and the rational approach to science and computers we see today among both the general population and our political leaders.

<comment><USER21> Oddly, I seem to recall print statements which were less focused on the positive qualities of the code's author, and more focused on the negative qualities of other individuals.

But maybe that's just me. Not everybody had an older brother.

</comment></comment></comment><comment><USER22> I can see where the author of both the article and the /editorialized/ article are coming from, however I don't agree with either one of them.

As someone who's learned from the trenches, you need to know how to program on some level. Even if you're just a lowly IT Dude, knowing some batch, a little shell and at least a little SQL can make your life * magnitudes* easier. Take for example Cisco's networking packages: IOS and CBOS

CBOS and IOS are similar, but different. they have the same syntax but different connotations for them... but because I know one, I know the other. I can solve problems on one machine with basic knowledge of the overall design.

Same with Linux. Or Unix. Or BSD. Or (insert *nix here). I can solve problems by thinking and using some shell to solve my problem in an elegant and useful way that I can then write down and keep in my Little Bag 'o tricks.

I know how to solve problems in the IT world because I know how to program and how to think. Does this mean I have no concept of business and such? No, in fact the university I'm currently attending requires FOUR different business classes to get an IT degree. I'm not kidding you.

High school doesn't teach you how to think. It's designed to push out factory workers to go into industries and do slave labor. That's been the case now for nearly 200 years, if not more.

If you want to know how to get kids into a better position and get them /mentally/ into the top point, require in high school a Cognitive Problem- Solving class which requires group work to solve interesting problems like "A meteorite is going to hit us in 3 days you have these at your disposal what do you do? 2.4 million lives are at stake." and you are graded on your thought process. Maybe not the outcome, but the thought process.

FWIW, I'm a C#/Shell programmer. /bin/zsh is my shell.

</comment><comment><USER23> In the industrial revolution, we had public education for basic reading and writing. to learn technical skills (machining, accounting, etc.).

Now in this new post-industrial world, perhaps we need to add something that is a universal like R&Wing. It might be basic programming - enough to deal with basic data/text manipulation. It might be basic web development / online tech. It might even just be a big sampler of different things to show them how to solve problems creatively.

</comment><comment><USER24> The one argument I could make against this post has to do with the fact that we don't build an increasing amount of our society out of wood, no one uses wood in tricky ways to rob people, there aren't unlimited forms of self expression and communication within wood waiting to be unlocked, and knowing how to manipulate wood won't benefit nearly every other aspect of your life.

</comment><comment><USER25> Does everyone need to learn a foreign language?

Does everyone need to be able to write a persuasive essay?

Does everyone need to be able to conduct a simple but rigorous scientific experiment?

Does everyone need to be able to prove a theorem?

The answer to all these questions is "no" along with the answer to the original "question". But these questions and their answers miss the original point. Sure, a given person can have a fine and even high-paid life without any of a number skills.

But should our education system make systematic effort to give most students a small portion of the skills needed to understand the modern world? Yes, yes! The point is that the education system desperately needs to be exposing people to the skills needed for a high-level understanding of the modern world (exactly what isn't well tested by multiple choice tests BTW).

The point is that a class on "computers" should give _everyone_ an idea of what is and isn't possible with them - a far cry from learning Excel macros.

</comment><comment><USER26> I think it would be great for everyone to learn a little bit of scripting in a straightforward language. Do they need to remember it? Absolutely not.

I think it's important for everyone to at least get exposed to what programming can and can't do. The crux of the problem is all of the people who don't even realize that they are spending hours or days at a time, time-and- again, performing a repetitive task that could be done automatically with a program. We sometimes encounter the same problem from the other side: someone expects a program to magically do way more than is reasonable.

Is it important for everyone to know how to program? Absolutely not. I think exposing everyone to programming, however, would be very valuable. While many are likely to forget the details or not care, I contend that the majority would at least retain some of the notions of what is and isn't programmable.

</comment><comment><USER27> Although programming is a wonderful profession with unique benefits ranging from philosophy to economic value of being able to code (not mentioning the fun aspects of it): If everyone on this planet would be a programmer, we might loose all the views and opinions of people that see the world from a different angle that their professions encourages them to view things from.

<comment><USER28> There's a difference between being able to think logically and do some simple algebra and being a professional mathematician; similarly, there's a difference between being able to craft a half-decent spreadsheet and being a top-notch programmer. Still, these skills are quite useful even if you only know the "basics".

</comment></comment><comment><USER29> So this kind of annoys me. The idea that being able to write a compiler is sort of frivolous but what's really important is that someone can "light up a CMS instance." Really? There are far more jobs for those people? I suspect most compiler writers can probably figure out Sharepoint. I mean, come on.

</comment><comment><USER30> I think everyone should learn to read, write, arithmetic, programming and preferable some mathematics.

</comment><comment><USER31> I thought I agreed with the article until the last paragraph:

 _There are FAR FAR FAR more jobs out there today for someone with the technical skills to build a SharePoint portal, or light up a CRM instance or build a bioinformatics database than there are for someone who can build the next Python compiler. Let's stop trying to train the mass of high school students to become preservation carpenters, and instead make them very good contractors._

I don't think it's a far comparison to say that compiler-writers are like preservation carpenters, practicing an unnecessary art form, because while there _are_ already tools to make CS easier, part of the nature of technological advancement in CS is in creating better tools. But he's knocking those that...make...the tools.</comment>


TURN Your BEAGLEBONEBLACK IN TO a 14-CHANNEL, 100MSPS LOGIC ANALYZER - <AUTHOR> http://hackaday.com/2015/02/19/turn-your-beagleboneblack-in-to-a-14-channel-100msps-logic-analyzer/

<comment><USER2> Nice! I love hackaday, have been enjoying their site and others like it for many years.</comment>


My Git Habits - <AUTHOR> http://blog.plover.com/prog/git-habits.html <comment><USER2> I'm fairly new to git. I've only been using it for about two months. It seems like this is a lot of work with the end result only being that the commit log is cleaner and perhaps makes cherry-picking a feature/fix a bit easier.

I can understand the need for this kind of cleanup when pushing a fix to an open-source repository that needs pull requests to be self-contained, but for an internal company repo, how important is it to keep the commit history this clean?

If I have changes I'm not ready to commit and need to switch branches to work on another issue, I find that doing a STASH is an easier way to go. I can just stash my working copy changes, switch branches, then come back and apply the stash and keep going and then make one final commit with just the final changes I want to commit.

Other DVCS actually believe that being able to modify commit history is a bad thing and lean toward immutable commit history (e.g., Veracity). Git makes it pretty easy to modify commit history which is ok for local branches but can be easily misunderstood to break your branch if you're trying to modify commits that have already been pushed to a remote repo.

I like the idea of keeping the commit history clean but I'm not sure that it's worth the effort that it takes to manage the process. In the end, only your final good code is going to be merged into an integration or master branch anyway.

<comment><USER3> Here are some of the situations I run into on a regular basis at my current company, which is Perforce based, where I wish we were git based instead. This would be as true in Subversion. They might be maybe less true in Mercurial or Bzr, I'm not as familiar with those ones.

* I am hacking on some bit of code, so I set up a Perforce branch. While I'm at it I notice some ugliness and want to refactor it. I could make a new Perforce branch and put it there and then do some horrible merging apparatus but it's complicated and they live forever and it takes me out of the flow state, so I just make a commit. It is now very difficult to extract that commit from its context so that I could apply it independently.

* I make a mistake on a commit that is on a private Perforce branch, or maybe I did something out of order. The Perforce way is "you shouldn't have done that, then." and so my commit logs are full of "fix stupid typo" type commits that are basically just noise.

* I forget to add a file to Perforce and nothing tells me about it, ever, until we get to testing (or sometimes to production!) and Puppet won't run because it can't find some file <foo>. This is fixed with the 2012 betas and p4 status, but those require a server upgrade (because the p4 client is a thin wrapper around what the p4d server understands) and that isn't in the cards yet. This alone is enough to make me want to use git-p4 for everything.

* You can really tell that Perforce is built around a file system of RCS files sometimes. While it has atomic commits, many, many operations are based on individual file revisions (labelling, cherry picking, merging). This leads to the following:

* Cherry picking in Perforce is hard, because it's hard to get handle on the content of a changeset, as opposed to individual upticks in each of the files referenced. It can be done but it is a lot of effort, way more so than in git.

This is not the entirety of my complaints about Perforce, by any means, but they're the most visible UI limitations compared to what I'm used to from git.

<comment><USER4> Mercurial is more like Git than not. It differs in the way it stores revision history (Git stores files, Mercurial stores deltas, basically).

And branching is Mercurial isn't nearly as neatly implemented as it is in Git.

But it would seem to address the issues you listed here. For example, you can rollback a commit if you did the "stupid typo" mistake. And you have a lot of power to "change history" and modify the DAG anyway you wish.

<comment><USER5> In my opinion branching _used_ to not be as neatly implemented as it is in Git, but that is no longer the case.

A couple of versions ago a new feature was added into core mercurial, called "bookmarks". Mercurial bookmarks are the same as Git branches.

So now you can use the "git style branches" (i.e. bookmarks) in mercurial, or you can use the regular mercurial-style branches (which I personally prefer to git's anyway). In addition you can use "anonymous" branches, which AFAIK do not exist in git at all.

<comment><USER6> Anonymous branches are AFAICT the same thing as detached heads. They're discouraged in git, but they work fine.

</comment></comment></comment></comment></comment><comment><USER7> Maybe it's just me, but using short lived topic/feature branches and squash merges seems much easier than remembering all of these steps to "fix up" all these things.

I think it becomes some what of a game to use all the more obscure corners of git when a good 20-30% of it goes a long way.

Using less commands is more.

<comment><USER8> I agree, but that also requires a discipline/foresight not all of us have. :) I try to keep my feature branches as atomic as possible, but sometimes I get ahead of myself and work on multiple things that really shouldn't be in the same commit. I wouldn't use this model as my main workflow, but it's definitely useful in certain scenarios.

<comment><USER9> if your code is 'live' and you plan ahead a few features: feature branches.

if you are running as fast as you can for the first releases, what i do is use feature prefixes on the commits. And of course, a commit can have several prefixes.

of course, if i have to cherry pick something, i still have to look at each commit, but with prefixes it's easy. And i have the time i didn't spend thinking ahead for something i don't even know i will need.

</comment></comment></comment><comment><USER10> This seems like a pretty terrible workflow to me, do others here actually work like this?

I only use git-add -p when I've screwed up and didn't commit when I should have, so I have to split the current commit into two. It seems to me that rebase -i and merge --squash are better suited to re-writing history in the way that's being done here. I'm especially distrustful of any workflow that includes the line "I eyeball the diff".

But I'm no git guru. Is this a common way to work? Are there advantages over the alternatives?

<comment><USER11> It means you keep your original history around & build a new one which breaks the code changes into functional chunks.

Rewriting your existing history with git rebase -i is fine until it goes horribly wrong & you have to go groveling through the reflog to work out which commits you need to rescue in order to retrieve your lost work.

<comment><USER10> I don't see that. Keeping your original history around is a function of doing cleanup on a separate branch. It has nothing to do with how that cleanup is achieved.

Rewriting your existing history with git reset can also go horribly wrong, which is why it's done on a separate branch here.

</comment></comment></comment><comment><USER12> I think in part he's documenting modules. Because modules often crosscut the primary hierarchy of files/classes/methods, it's awkward to document in the source itself, and so usually isn't documented at all.

Git allows documentation across files; and because commits are naturally associated with specific revisions, it can't get out of date.

{ Still, it does seem a lot of work, and it would be nice to document within the source itself; and in a way that helps and is needed by the code (so it can't get out of date). A bad example: specifically requiring/importing another class before being able to use it. This documents dependencies, and remains current or your code stops working (it would need to be an error to require a class without using it). It is a "bad example" because it doesn't _help_ you, just raises a barrier then "helps" you cross it, like a stand-over man in an extortion racket.

What's needed is some immediate benefit (e.g. reduce code) to associating files/classes/methods in a crosscutting "module". }

</comment><comment><USER13> I said this in a reply, but lest it get lost in the shuffle, here goes. I have a __tremendous __amount of respect for mjd. His seminal articles on Perl, particularly "Suffering with Buffering" and "Coping with Scoping" saved my bacon more than once. However, I'm a release engineer, and this is an awful, awful Git work flow. As others have noted, Git was designed so that you can make wacky wild experimental changes off to the side in branches, and only when you're happy, merge them back to your working branch and eventually into master. This approach needlessly complicates things and seems incredibly error prone, especially the bit about having to do house cleaning on the morass of broken commits.

</comment><comment><USER14> Wow. I've written about how powerful revision control tools become not just a place to stash diffs, but a full-on code editing tool ([http://bryan- murdock.blogspot.com/2010/09/mercurial-is-teh-a...](http://bryan- murdock.blogspot.com/2010/09/mercurial-is-teh-awesome.html)), but this is very impressive.

I think he mentions that he does test these new commits that he creates as he goes about re-arranging history, but I think that should be emphasized more. I'd rather have a messy looking commit that passes tests than some nice looking commit that doesn't. bisect is powerful command that shouldn't be broken.

</comment><comment><USER15> By the way, that article page is too hard to read comfortably. Shortened the width of each paragraph and upsize the font will be really good for me to read it.

tl;dr , I didn't read that page. :(

<comment><USER16> You might like this tool (I read the article using this):

[http://readable.tastefulwords.com/?setup&change&text...](http://readable.tastefulwords.com/?setup&change&text_font=Goergia%2C%20Palatino&text_font_monospace=Inconsolata&text_font_header=quote%28Times%20New%20Roman%29%2C%20Times%2C%20serif&text_size=20px&text_line_height=1.5&box_width=30em&color_text=%23657B83&color_background=%23FDF6E3&color_links=%23B58900&text_align=justified&base=web_readability&custom_css=pre%2C%20tt%2C%20code%20{%20%20%20%20background- color%3A%20%23EEE8D5%3B%20%20%20%20color%3A%20%23586E75%3B%20}%20pre%20{%20padding%3A%201em%3B%20overflow%3A%20auto%3B})

</comment></comment><comment><USER17> I just use gitx when I'm on OS X or tig when I'm on a terminal for per chunk or per line (gitx only) staging. git -p is too user unfriendly.

<comment><USER18> Once you get used to reading diffs in your terminal, git -p (and -i) turn out to be very useful friendly. It's really easy to just slam y or n a bunch of times, rather than click around a lot.

<comment><USER17> big just uses text diffs as well, only color coded which really adds to the readability of it. I don't need guis for most of the things. The benefit of GitX over tig or git -p is that it easily allows to stage a single line instead of the whole chunk

</comment></comment></comment><comment> brown9-2 _Often I'll be in the middle of something, with a dirty work tree, when it's time to leave for the day. Then I'll just commit everything with the subject WIP ("work-in-progress"). First thing the next morning I'll git-reset HEAD^ and continue where I left off._

Curious, what is the advantage of doing this? Why commit something locally just to reset it out the next morning?

<comment><USER19> He explains here:

> _Such commits rarely survive beyond the following morning, but if I didn't > make them, I wouldn't be able to continue work from home if the mood took me > to do that._

<comment><USER20> I think the underlying assumption here is that he commits and pushes these changes somewhere accessible from home and not taking it with him on his laptop or something. Otherwise there really isn't a good reason for committing it.

</comment></comment></comment><comment><USER21> git-add -p is new to me, but looks like something I'd wish I'd known about for a long while. The number of times I end up copying changes (like a new function) into some temp file while I commit is more than I'd care to admit.

<comment><USER11> You can also git-add -i to go through the staging area & stage/unstage individual patches.

<comment><USER22> Or use git citool or an emacs mode like egg or magit (other editors have similar) that let you conveniently stage by hunk or line.

</comment></comment></comment><comment><USER23> My first thought: crazy.

Especially the part with the printouts and highlighters.

Could this actually be effective?

</comment><comment><AUTHOR> When you guys delete a feature/complex function that you wrote just to discover you don't need it, do you guys mark it somehow to know something that worked was removed in that commit?

</comment><comment><USER24> Like 'git add -p' but much much better:

[http://porkrind.org/missives/commit-patch-managing-your- mess...](http://porkrind.org/missives/commit-patch-managing-your-mess/)

</comment><comment><USER25> Habits pronounced hubbits.

</comment><comment><USER26> git commit -v is nice too

</comment><comment><USER27> The proliferation of "git tips", and "my git habits", "git best practices" articles, make me think that Git is too complicated for its own good to need all those.

(Maybe "need" is a bad choice of words: maybe it doesn't need those articles, but it's too complicated if it gets to _have_ them. You don't get such avalanche of advice for a simple, no BS, tool).

Now, the complicated part means it's flexible --in the rare cases you need it to be. But it could probably use a facade that makes the common use cases more intuitive (there are some half-baked attempts that I'm aware of).

Personally, I use mercurial.

<comment><USER28> The proliferation of "photoshop tips", "photoshop tutorials", etc, make me think that Photoshop is too complicated for its own good to need all those.

</snark>

<comment><USER27> Probably you meant to use the </misguided snark> tag.

The Photoshop Tips and Tutorials are about doing something new in a realm with inherently _infinite possibilities_ , that is bitmap editing/drawing.

Managing source code shouldn't have "infinite possibilities" -- there are a few common use cases, and several more uncommon.

If you have "infinite flexibility" in your source code management system, you are doing it wrong, or at least inefficiently structured or streamlined, that is, in the wrong end of the scale of 1 => you do everything by hand, 100 => the computer does all for you as you want it to.

Not all workflows can fit an one-size-fits-all team, sure.

But that doesn't mean that you should have to micromanage the workflow even in the most common use cases.

I.e Git is more of a "source code management DIY kit" than a "source code management tool".

<comment><USER28> Some people like micromanaging their workflow. Apparently Mark Dominus is one of them. Other people don't like managing their workflow, and thus they end up with just `git commit -a; git push` as the entirety of what they use. Just because _some_ people micromanage their workflow doesn't mean everyone has to.

</comment></comment></comment></comment><comment><USER29> all i use:

      git add . && git status

      git diff --cached | mate

      git commit -am "this is what i did"

      git push

and when it hits the fan...

      git reset --hard</comment>


NSA/GCHQ: The HACIENDA Program for Internet Colonization - <AUTHOR> http://www.heise.de/ct/artikel/NSA-GCHQ-The-HACIENDA-Program-for-Internet-Colonization-2292681.html <comment><USER2> An anonymous hacker announces that they owned thousands of home routers to scan the entire Internet, security expert Rob Graham runs his masscan tool to scan the entire Internet, but when it's disclosed that .govs run nmap it's time to patch your TCP stacks?

Whether or not you think that governments should spy, the amount of hype here seems staggering.

<comment><USER3> > when it's disclosed that .govs run nmap it's time to patch your TCP stacks?

They don't just nmap the internet, they systematically compromise vulnerable targets as per the article and the slides. And unlike common criminals, there's no hope of them being stopped by any law enforcement agency.

If they're really going after every non 5-Eyes machine they can compromise, people living outside of the 5-Eyes need to protect themselves.

<comment><USER4> And unlike common criminals, if they decide that you deserve to be extraordinarily rendered, there's no hope of stopping them.

 _This_ is why you should resist government spying, because once you come to their attention, they could mistakenly or rightly decide that you need to be fucked with in some way, which could range from a brief arrest to murder. Merely coming to a government's attention puts you at risk, so we should minimize the chance that anyone can come to the government's attention.

</comment></comment></comment><comment><USER5> I still find it hard to believe that there are people who justify these heinous tools as 'necessary' or 'vital' to the survival of the Western "democracies" who deploy them. Its a terrible state of affairs that we justify such intrusions - and yet fail to see, when 'the other side' lashes out in anger, the reasons why it is so. We are stuck in a feedback loop here, and it seems the only thing to do is turn off the microphone. But oh, the stage lights - how they draw us in!

Quickly people. Build a better Internet.

<comment><USER6> "Heinous tools"? They're literally running nmap.

<comment><USER7> "They are using a tool I know, therefore it's ok"

<comment><USER6> The only way a reasonable person could write this comment is if they didn't know what nmap did.

<comment><USER8> The only way a reasonable person would correct his comment is if he though mislabelling nmap as heinous is of any importance with regards to the heinous nature of the whole operation.

<comment><USER6> Yes, that's about right.

</comment></comment></comment></comment></comment></comment><comment><USER9> None of this looks particularly new or shocking to me. Seems like automation of standard techniques, which I would be more surprised to find out they weren't using. And hacking foreign networks... isn't that exactly their job as signals intelligence?

<comment><USER10> The problem is they do things like take out the internet in all of Syria.

[http://www.theverge.com/2014/8/13/5998237/nsa-responsible- fo...](http://www.theverge.com/2014/8/13/5998237/nsa-responsible- for-2012-syrian-internet-outage-snowden-says)

They are targeting civilian networks, not military ones. That is a huge problem. Its one thing if they were trying to break into foreign, legitimate targets of interest [military, defense industry, foreign intelligence, foreign governments].

That isn't what they are doing. They are just trying to get access to everything they can get their hands on. Civilian and military alike.

<comment><USER6> The problem with your comment is that it has nothing to do with this story. It involves a different intelligence agency, doesn't involve routers, doesn't involve attacks of any sort, and could not have brought down the Internet in Asmara Eritrea, let alone Syria.

<comment><USER10> What do you think "take control of as many machines as possible" means? Asking them nicely to hand over their SSH keys?

"The covert infrastructure includes so-called Operational Relay Boxes (ORBs), which are used to hide the location of the attacker when the Five Eyes launch exploits against targets or steal data (Figure 18). Several times a year, the spy club tries to take control of as many machines as possible, as long as they are abroad. For example, in February 2010 twentyfour spies located over 3000 potential ORBs in a single work day (Figure 19). However, going over the port scan results provided by HACIENDA was considered too laborous (Figure 20), so they programmed their OLYMPIA system to automate the process (Figure 21). As a result, the spies brag that they can now locate vulnerable devices in a subnet in less than five minutes (Figure 22)."

<comment><USER6> If you literally believe that GCHQ has owned up every machine it is technically and feasibly capable of owning up, there's not a lot of reasonable conversation that can happen between the two of us.

<comment><USER10> Pretty much. You blatantly ignore the repeated statements that the vulnerability scan is a prelude to actively attacking machines for some reason. I'm not sure why.

I'm not saying they are attacking any machine they can. They are, however, attacking _some_ machines.

You don't develop the capability to build target lists, to attack targets, and state you do attack targets...unless y'know, you actually do.

You might use it on a limited scale at specific targets but you do use it. The problem is, I don't have faith they actually engage in selective targeting.

</comment></comment></comment></comment></comment></comment><comment><USER6> There is absolutely no way the USG's best program for mass-scale network reconnaissance relies on nmap. All possible respect to Fyodor, but nmap just isn't very good at that task, and if ever there was a bikeshedding problem in software security, port scanning and active host identification is it.

<comment><USER11> Though I respect both your opinion and Fyodor greatly, I have to disagree here.

Mass-scale isn't really the issue. They have plenty of hosts to work with, so masscan wouldn't help. They're doing more than just open port detection, so nmap's _many_ other features are helpful, as is the fact that nmap's scanning signatures aren't as suspicious as a custom scanning service that just so happened to be deployed worldwide.

</comment></comment><comment><USER12> So they break into my router, then fuck with somebody else's network, and then I'm getting blamed for it ?

1\. using my bandwidth, electricity etc is theft. 2\. framing me for for their crimes is criminal conspiracy. 3\. fucking with somebody else's network is terrorism.

Either all these people (not just the scape goats) go to jail, or they just declared the internet as law less zone. Effectively legalizing piracy spam blackhat-hacking etc.

Because proving guilt is now impossible, every plaintive can just point to dark government circles having control over their computer. In case proving guilt is no longer the guiding principle for justice they just lost the bases for governmental monopoly of violence, the right to collect taxes etc.

Also it's only going to be a matter of time, until some other criminal(s) gets access to their ORBs & start ddosing or blackmailing everybody with impunity.

Governments should stay out of the internet, because now we have cyberwar. They just create MORE chaos & disorder. Give the internet back to the geeks & maybe we'll get some semblance of decency back.

</comment><comment><USER13> The entire internet apparently has a common enemy. The more we learn the more I realize how broken todays internet is.

It's insane the such operations are going forward without the victim-states raising extremely serious concerns.

I wonder how the future's internet will become if this insanity doesn't stop.

<comment><USER14> Well luckily everyone will soon start boycotting the US and the UK, and Canada and Australia etc. Any day now.

<comment><USER15> Yeah the Cisco layoffs have nothing to do with loss of trust.

</comment></comment></comment><comment><USER15> And Anne Neuberger blathers about reaching some new "social contract:" [http://blog.longnow.org/02014/08/11/the-nsa-reaches- out/](http://blog.longnow.org/02014/08/11/the-nsa-reaches-out/)

It would be like a social contract with a venomous snake.

<comment><USER15> If you honestly want to defend Anne Neuberger's "Intelligent America" scenario, go right ahead.

It is in fact a grossly dishonest chunk of wishful thinking wrapped in Soccer Mom-friendly platitudes.

</comment></comment><comment><USER16> BREAKING: Government has discovered nmap.</comment>


To fork or not to fork - <AUTHOR> https://blog.ethereum.org/2016/07/15/to-fork-or-not-to-fork/ <comment><USER2> Honestly, forking would destroy a major feature of cryptocurrencies for Ethereum- Fungibility.

People invested in the smart contract knowingly and the smart contract is run on the Ethereum network but it's not a part of Ethereum. Forking Ethereum for that sounds stupid and selfish because the devs themselves lost some money on it.

<comment><USER3> Vitalik has been saying for a long time that it was alpha level. I think they made a mistake allowing so much on one contract before it was proven. That allowed people to steal.

Its not destroying anything. Its a one time event to prevent the loss of millions of dollars.

If they let it go it would be worse, because then criminals would try even harder to subvert new technologies, knowing they would get away with it.

No one is going to fork away ordinary (non-theft) transactions.</comment></comment>


How We Used Machine Learning to win at HQ Trivia - <AUTHOR> https://mux.com/blog/how-we-used-machine-learning-to-predict-hq-trivia-answers/ <comment><USER2> To any future hackers: You don't need OCR. HQ has a simple websocket server that will stream the questions and possible answers in real time. Set up an http proxy on your phone to inspect the requests the app is making. You'll find lots of helpful stuff.

<comment><USER3> Ooh. Sounds interesting. I've taken an OCR approach before (see my profile for post) since I thought the iOS app had cert pinning, but this method takes the cake and (presumably) will be faster in a game situation.

</comment></comment><comment><AUTHOR> Author here: At mux, we experimented using machine learning to predict HQ Trivia answers. We managed to get 80-90% accuracy across a dataset of around 500 questions.

The trickiest questions were relational questions (e.g. What's heavier, a pineapple or a Siamese cat?). Would appreciate any feedback on our approach (and happy to answer questions!).

<comment><USER4> Time to bring in the big questions. The tortoise is on its back. And you are not helping it. Why?

<comment><AUTHOR> I think anyone playing HQ should be encouraged by our results. I know a lot of people turned off by playing because of all the "bots" playing. Based on our analysis and results from over a hundred games...I think it's clear that bots are not sophisticated enough to solve HQ.

We're also using a more sophisticated approach than most bots I've read about, and we continuously train out model on new data. Even so, we would only expect to win 7 out of 100 games.

Our goal was not to hurt the HQ community, but rather to challenge ourselves into solving a difficult data science problem.

<comment><USER5> Pretty sure they were making a Blade Runner reference

<comment><AUTHOR> whoosh.

</comment></comment></comment></comment></comment><comment><USER6> I thought this was going to be a retrospective from the HQ Trivia team about how they were mediocre given the scaling challenges and hiccups they are facing and then they solved it through ML!

</comment><comment><USER7> This seems pretty misleading, since honestly 99% of the machine learning that goes on here happens when running the questions/answers through Google Search. There are probably millions of man-years of machine learning / information retrieval that have gone into Google Search.

<comment> xkcd-sucks The concept of machine learning is pretty misleading, because it's founded upon billions of man-years of human learning

</comment></comment><comment><USER8> Then we find HQ eventually pivots to being a machine learning research platform once someone invents a perfectly scoring bot ;-)

Joking aside, I'd say HQ Trivia are getting savvier with the questions. A final question the other day was along the lines of "Which two female artists collectively have the same number of Grammys as Beyoncé?" with the answer being "Adele + Madonna", I believe.

<comment><AUTHOR> Yep. I actually mention that specific question in the article as an unsolvable question for machine learning, at least given our current constraints.

Those are generally rare questions though because difficult questions for bots are also difficult questions for humans. HQ can't have too many of those questions without degrading the player experience.

Because of that, I don't think we will ever get beyond 10/11 questions right per game. That still leads to a decent chance at winning at least one game per week though.

<comment><USER8> Ha, so you did! I got down to the Nick Hornby question which reminded me of it and then commented here ;-)

You are right about the experience issue, though. It feels almost like they're _trying_ to make it so you can't win with questions worded in that way, since even someone who actually _knew_ the numbers of Grammys all the artists listed had would struggle to add them together in time.

<comment><AUTHOR> Yep! We felt the same way when we saw that question. I think HQ will prioritize questions that are hard but still feel possible. Otherwise their engagement will start dropping off.

</comment></comment></comment></comment><comment><USER9> Is there a dataset of past HQ questions and answers?

<comment><AUTHOR> Yes, we have been archiving each game going back to October. We augment the questions and answers though so that we get more relevant results when run our web scrapes.

<comment><USER9> I don't suppose you'd be willing to publish what you've gathered at some point in the near future?

<comment><AUTHOR> We might in the future, but we're unsure what the copyright is on those questions.</comment></comment></comment></comment>


My Drawing and Calculating Instruments (2011) - <AUTHOR> http://www.petergh.f2s.com/instruments2.html <comment><USER2> Nice to see the Rotring ArtPen in there. This has been my choice of pen for the last 20 years or so. They're relatively cheap, last a very long time and you don't cry when you break or lose them like an expensive fountain pen.</comment>


Nobody Cares About 10x Developers - <AUTHOR> http://clojurescriptmadeeasy.com/blog/nobody-cares-about-10x-developers.html <comment><USER2> " it's frequently within the context of code instead of the context of understanding. 10x developers speedily create elegant code that solves the wrong problem due to not understanding what the business needs"

Are they really 10X developers? They should understand what the business needs and write elegant code quickly.

<comment><USER3> This is key. I'm sure there exists developers that do both, no?</comment></comment>


Middle Class, Emerging Markets, & Microloans - <AUTHOR> http://startupharbor.me/2012/10/01/empowering-the-middle-class-in-emerging-markets/

<comment><AUTHOR> Do you think the criticisms levied at microfinance are fair? Likewise, do you feel it's appropriate to build a for-profit business around a social mission? Is that a conflict of interests?</comment>


Inside the Startup Luring Thousands of Women into the Gig Economy - <AUTHOR> https://backchannel.com/inside-the-jewelry-startup-that-wants-to-reinvent-womens-work-2f987ed2e971 <comment><USER2> Slightly off topic but I'm surprised she chose the word luring in the title. Sounds creepy.</comment>


SimCity That I Used to Know - <AUTHOR> https://medium.com/re-form/simcity-that-i-used-to-know-d5d8c49e3e1d <comment><USER3> Can I suggest paying attention to the upcoming _Cities: Skylines_?

[https://www.youtube.com/watch?v=lxfeBpagvQw](https://www.youtube.com/watch?v=lxfeBpagvQw)

[https://www.paradoxplaza.com/cities- skylines](https://www.paradoxplaza.com/cities-skylines)

Having spoken to the lead designer, this gave me the impression of the _SimCity_ I used to know, albeit with some more features like policies and districts.

<comment><USER4> Oh boy, I hadn't seen this before. This is wonderful.

Paradox is known for making very complicated, somewhat buggy, but lofty and (in my opinion) very fun titles.

I swear their approach to games is "So they say 'a game is a series of interesting decisions,' lets see how many decisions we can pack into this one!"

The Hearts of Iron series is basically _SimCity for World War 2._ You pick any country and a starting year and just _go._ Decide on major events, pick your cabinet, how you allocate resources (industrial and brainpower), who you spy on, what you research, elections, and of course the whole war thing. Just everything. The game is huge fun if you like to sit down and plan things and I totally recommend it to anyone who loved the sim cities of old.

Hearts of Iron 3 is on Steam here: [http://store.steampowered.com/app/25890/](http://store.steampowered.com/app/25890/)

<comment><USER5> This is a Paradox Interactive published game, not a game made by related Paradox Development Studio which makes HOI, Europa Universalis, etc.

There's no direct relation.

<comment><USER3> While Colossal Order is not a Paradox studio (besides Paradox Development Studio, they also have Paradox North, Paradox Arctic and Paradox South), it has very close ties to Paradox Interactive. Colossal Order was present at Paradox's Fan Gathering at Gamescon in Cologne this August for instance.

</comment></comment></comment></comment><comment><USER6> Note that HN user SimHacker did the original port of Sim City to unix, and maintains the micropolis open source version.

His blog: [http://www.donhopkins.com/drupal/](http://www.donhopkins.com/drupal/)

</comment><comment><USER7> Real world SimCity: [https://earthengine.google.org/#intro/LasVegas](https://earthengine.google.org/#intro/LasVegas)

</comment><comment><USER8> If you've got about an hour and a half to spend, and you enjoyed this article, I'd like to recommend a lecture given by Will Wright in 2003.

He covers his background, early computer games, the origins of Sim City, the Sims, as well as more abstract/high-level discussion of game design and simulation.

Some high level themes of the talk: using the computer as a modeling tool, simulation design, Will Wright's game design principles and philosophy, programming for two dynamic processes "the software" and "the player's model of the system", and traversal of possibility spaces in game design and simulation.

[https://www.youtube.com/watch?v=CdgQyq3hEPo](https://www.youtube.com/watch?v=CdgQyq3hEPo)

<comment><USER9> Will's talks and interviews are all fascinating and well worth watching, taking notes, and studying. It's interesting to see how the projects he was talking about at the time turned out years later. I'll also link to an excellent interview with Chris Trottier, one of the designers on The Sims, who is an absolutely brilliant designer who worked Will on The Sims and Spore, who according to Will can manipulate the very fabric to Time and Space, and is a pretty good designer, for a girl: [https://web.archive.org/web/20131117041434/http://pickleodeo...](https://web.archive.org/web/20131117041434/http://pickleodeon.com/testimonials.html)

\----

[http://www.donhopkins.com/drupal/node/9](http://www.donhopkins.com/drupal/node/9)

Designing User Interfaces to Simulation Games

A summary of Will Wright's talk to Terry Winnograd's User Interface Class at Stanford, in 1996. Written by Don Hopkins.

Will Wright, the designer of SimCity, SimEarth, SimAnt, and other popular games from Maxis, gave a talk at Terry Winnograd's user interface class at Stanford, in 1996 (before the release of The Sims in 2000). At the end of the talk, he demonstrated an early version of The Sims, called Dollhouse at the time. I attended the talk and took notes, on which this article elaborates. I was fascinated by Dollhouse, and subsequently went to work with Will Wright at Maxis for three years. We finally released it as The Sims in 2000, after several name changes: TDS (Tactical Domestic Simulator), Project-X (everybody has one of those), Jefferson (after the president, not the sitcom), happy fun house (or some other forgetable Japanese placism).

At the talk, he reflected on the design of simulators and user interfaces in SimCity, SimEarth, and SimAnt. He demonstrated several of his games, including his current project, Dollhouse.

Here are some important points Will Wright made, at this and other talks. I've elaborated on some of his ideas with my own comments, based on my experiences playing lots of SimCity, talking with Will, studying the source code and porting it to Unix, reworking the user interface, and adding multi player support.

\----

[http://www.donhopkins.com/drupal/node/35](http://www.donhopkins.com/drupal/node/35)

The Future of Content - Will Wright's Spore Demo at GDC 3/11/2005

What I learned about content from the Sims. ...and why it's driven me to procedural methods. ...And what I now plan to do with them. Will Wright Game Developers Conference 3/11/2005

Notes taken by Don Hopkins at the talk, and from other discussions with Will Wright.

\----

[http://www.donhopkins.com/drupal/node/31](http://www.donhopkins.com/drupal/node/31)

Sims Designer Chris Trottier on Tuned Emergence and Design by Accretion

The Armchair Empire interviewed Chris Trottier, one of the designers of The Sims and The Sims Online. She touches on some important ideas, including "Tuned Emergence" and "Design by Accretion".

Chris' honest analysis of how and why "the gameplay didn't come together until the months before the ship" is right on the mark, and that's the secret to the success of games like The Sims and SimCity.

The essential element that was missing until the last minute was tuning: The approach to game design that Maxis brought to the table is called "Tuned Emergence" and "Design by Accretion". Before it was tuned, The Sims wasn't missing any structure or content, but it just wasn't balanced yet. But it's OK, because that's how it's supposed to work!

In justifying their approach to The Sims, Maxis had to explain to EA that SimCity 2000 was not fun until 6 weeks before it shipped. But EA was not comfortable with that approach, which went against every rule in their play book. It required Will Wright's tremendous stamina to convince EA not to cancel The Sims, because according to EA's formula, it would never work.

If a game isn't tuned, it's a drag, and you can't stand to play it for an hour. The Sims and SimCity were "designed by accretion": incrementally assembled together out of "a mass of separate components", like a planet forming out of a cloud of dust orbiting around star. They had to reach critical mass first, before they could even start down the road towards "Tuned Emergence", like life finally taking hold on the planet surface. Even then, they weren't fun until they were carefully tuned just before they shipped, like the renaissance of civilization suddenly developing science and technology. Before it was properly tuned, The Sims was called "the toilet game", for the obvious reason that there wasn't much else to do!

[http://www.armchairempire.com/Interviews/chris-trottier- the-...](http://www.armchairempire.com/Interviews/chris-trottier-the-sims.htm)

\----

</comment></comment><comment><USER10> _SimCity 2000 for Win95_ is my personal favorite SimCity game (sadly a 16 bit EXE). It's a sandbox style game, with no real end goal. SimCity 1 started as a map editor for a helicopter game, that was more fun than the actual game. It would be great to see a new triple A reboots of SimCity (and real time strategy) games, but without any casual or free2play or DLC flavours - <USER2> straight old school games game mechanics with modern 2D/3D graphics.

<comment><USER11> If you want to get it running again without too much of a headache, Good Old Games has it for $6.

[http://www.gog.com/game/simcity_2000_special_edition](http://www.gog.com/game/simcity_2000_special_edition)

<comment><USER10> Thanks, but there a comment mentions it's the inferior DOS version.

I occasionally play the Win95 version of SimCity and Doom 2 in a WinXP VM. Another Win95 launch title, Pitfall works fine on 64-bit Windows.

<comment><USER11> What's the difference between the DOS and Win95 versions? I only played it on Mac, but the DOS version seems basically like what I remember.

</comment></comment></comment></comment><comment><USER12> That's some weird native advertising(?): [http://i.imgur.com/qapXCSe.png](http://i.imgur.com/qapXCSe.png)

Did BMW pay the "devotee" to do this interview?

<comment><USER13> The entire re-form is sponsored by BMW, I honestly don't get your point. It's a really interesting section of Medium, try looking for the other articles.

<comment><USER12> Thanks, I had no idea about that. I would never actively browse Medium as it has burned a "many big words with shallow baity content" warning in my brain in the past.

</comment></comment></comment><comment><USER14> I always wished that someone made a fusion between Sim City and Red Alert where you also had to defend your city.

<comment><AUTHOR> Well there was Streets of Sim City[0] where you could take any of your Sim City 2000 cities, and turn it into a vehicular racing and combat playground. Way fun at the time!

0.[http://en.wikipedia.org/wiki/Streets_of_SimCity](http://en.wikipedia.org/wiki/Streets_of_SimCity)

<comment><USER15> SimCopter was pretty fun too, but game was more about Commercial missions and civil protection

[http://en.wikipedia.org/wiki/SimCopter](http://en.wikipedia.org/wiki/SimCopter)

<comment><USER16> I loved the in-game radio and the enormous number of goofy/awful commercials. It was a huge amount of fun to build a city in SC2K or SCURK, fly through it running missions, and then burn it to the ground with an Apache "fighting crime" (aka clearing traffic jams the easy way).

</comment></comment></comment></comment><comment><USER17> Great game, this brought up lots of fond memories. I don't really understand why a modified Gotye song reference was used for the article title as it doesn't really make sense in this context. Has the SimCity concept changed such that we don't recognize it anymore? The article itself doesn't seem to be saying anything to that effect.

<comment><USER18> Well, there was a lot of criticism about the recent SimCity, around how the underlying simulation was broken. That's probably enough to get a breakup-song reference going.

e.g. the 100% residential city: [http://www.pcgamesn.com/simcity/simcity-100-residential- city...](http://www.pcgamesn.com/simcity/simcity-100-residential-city- reaches-132-million-population-without-exploding)

</comment></comment><comment><USER19> For anyone feeling nostalgic, I ported the open-source version of the original game to the web: [http://micropolisjs.graememcc.co.uk](http://micropolisjs.graememcc.co.uk)

</comment><comment><USER20> The community around SimCity 4 has really transformed the game with Mods and Addons. If you want to have a go at SimCity, I cannot recommand SimCity 4 with some Addons highly enough. I'd suggest you start with the _Network Addon Mod_ [0] (not sure if this is the official site), which _is a mod improving and expanding upon the functionality of the game 's transit networks_ (I'm not affiliated with that project in any way, just had a lot of fun with it).

[0] [http://www.wiki.sc4devotion.com/index.php?title=Network_Addo...](http://www.wiki.sc4devotion.com/index.php?title=Network_Addon_Mod)

Example of what is possible with this and probably some other addons: [http://www.moddb.com/mods/network-addon- mod/images/possibili...](http://www.moddb.com/mods/network-addon- mod/images/possibilities-of-nam2)

</comment><comment><USER21> i recently played [https://en.wikipedia.org/wiki/Banished_%28video_game%29](https://en.wikipedia.org/wiki/Banished_%28video_game%29) and its quite nice..

<comment><USER10> It's nice, but too hard ...or too unforgiving. A little mistake early on means all your citizens but handful will die 60min later.

City building games like the Settler 2, Anno 1602 or Caesar III are more fun.

</comment></comment><comment><USER22> "I think everybody just puts too much trust in Wikipedia," he said.

He says this because the original release date is off, well. . . . . Edit the damn page then instead of worrying about it being off?

<comment><USER23> It's one thing to edit Wikipedia; it's another thing altogether to make that edit stick. Now that Will Wright has been cited in an article published by a third party, an editor has already started the process of changing it via the article's talk page. Creatives have had a very big problem self-correcting the site, since the official editors have a distrust of uncited sources.

<comment><USER24> Is there a startup opportunity in providing a way for creatives to quickly create a cite of themselves or otherwise fix this problem? After all, if you are the actual authority on the release date, some journalist getting it wrong in an article shouldn't trump what you say.

I think this would be a good example of something that a team of smart devs could whip up in a short period of time.

<comment><USER25> Sometimes HN is priceless. I can't tell if this brilliant satire or not.

</comment></comment></comment></comment><comment><USER26> I've been playing SimCity in some variation for 25 years, according to this. That... humbles me for some reason. And makes me want to play it.

Edit: Since we're all vying for the games we wish we had: I want a game that is half Simcity, half OpenTTD. Some players manage cities, some players manage companies, and you all have the goal to grow cities. And not all companies would have to be transport companies, it'd be neat to play as the OpenTTD industries too.

</comment><comment><USER27> For the Debian and Ubuntu crowd: apt-get install micropolis

<comment><USER28> For Arch users, micropolis is in the AUR.

</comment></comment><comment><USER29> I used to spend hours and hours playing Utopia, which is incredibly similar to Sim City, but came out in 1981 for the intellivision. I don't know if it's just nostalgia, but I still enjoy playing it sometimes. I suggest checking it out if you can.

<comment><USER30> I played countless hours of that with my little brother, who was about 9 at the time. Decades later he still claims that he figured out the system for fairly accurately predicting where rebels would be placed. He did seem to hit my hospitals with alarming accuracy, so I'm inclined to believe him, although I could never figure it out myself and he never would tell.

</comment></comment><comment><USER31> This was an exciting, nostalgic read. Simcity was such a huge part of my childhood.

<comment><USER32> Here's a chance to relive it!

[https://code.google.com/p/micropolis/](https://code.google.com/p/micropolis/)

EA open-sourced the SimCity code (under the original name _Micropolis_ ), it's since been ported to Java and some other environments.

</comment></comment><comment><USER33> IMO Sim City 3000 and 2000 was the best Sim Cities .

</comment><comment><USER34> Will Wright gives such great interviews. One of my favorites is [http://www.gamestudies.org/0102/pearce/](http://www.gamestudies.org/0102/pearce/)

</comment><comment><USER35> I bought a copy of the original from Will when he was still in his apartment. What an amazing thing to see in those days.</comment>


If WhatsApp gave you a phone number, are you willing to use only mobile data? - <AUTHOR> WhatsApp is better than calling and texting because:
1. Audio quality is great
2. Messaging is more rich and can send files
3. No roaming - it works everywhere.
And if WhatsApp gave you a real USA phone number (instead of registering with your current, carrier-provided number) it would have benefits like:
1. A phone that works anywhere - with Wifi or mobile data. No roaming
2. You could call/text anyone with or without WhatsApp (because you have a real number)
3. It's just a better messaging experience: multi-device, send files, richer functions
... Would you cancel your expensive wireless plan and use (or port your number to) WhatsApp as your primary number?
If not - what would be your concerns? <comment><USER2> WhatsApp is owned by Facebook. Hard no.

<comment><AUTHOR> Well, it doesn't have to be WhatsApp.

What if this same concept applied to Viber or Telegram - would you do it?

Simply, would you feel comfortable using cloud-telephony with only mobile data?

<comment><USER2> In principle, maybe. In reality, I'd have to see a real concrete offer that I could evaluate.

<comment><AUTHOR> Ok nice. The idea is to make something like Telegram (totally encrypted) but we give you a phone number.

So if another user has the app, all communication is secure and nothing is viewed or stored. Of course, no ads.

And if the user is communicating with someone without the app, the UI is the same except a few functions go away (like file transfer). Because now it can be only standard SMS.

But then your whole phone experience is synced in the cloud. It's cool!

</comment></comment></comment></comment><comment><USER3> been doing that just fine for some 10years. have a few minutes early on just for emergencies out of 3g data coverage. but now its only data.

you can do that today and without whatsapp/facebook if you learn to do very basic online research and read a couple pages.

<comment><AUTHOR> Which service have you been using for 10 years?

<comment><USER3> custom asterix (you do Not want to that route), then gizmo(?), then gvoive because of inertia (Google bought gizmo), now a custom sip provider (just because gvoice numbers are bogus and not accepted everywhere) which I forgot the name but will update here when on my phone

</comment></comment></comment><comment><USER4> 1.1 Audio very fast only 2.3 just because of the features

<comment><AUTHOR> Can you elaborate, please? The audio is too fast on Whatsapp?

</comment></comment><comment><USER4> 1.1 Audio very fast only 2.3 ...</comment>


The Case for Learned Index Structures - <AUTHOR> https://arxiv.org/abs/1712.01208 <comment><USER2> This is a very interesting paper, lots of ideas I haven't seen before and it gets a few ideas very right that most computer scientists overlook (more on that below). But comparing performance against B-trees tilts the results. State-of-the-art access methods use succinct data structures which encode the data distribution, which was called out in the paper as something that doesn't really exist currently. I've built and seen these structures at a few different companies. In fairness, I don't recall any literature on these (as is the norm for high-end database computer science). The key points on succinct structures:

\- They can be constructed adaptively for high-throughput mixed workloads, also called out in the paper as _not_ being a feature of these structures -- which is true if you limit the scope to succinct structures that _don 't_ encode data distribution. One of the driving use cases, beside reducing B-tree index bloat, is real-time write performance.

\- These structures are extremely compact. The equivalent search structure for the test data set in the paper easily fits (per my cocktail napkin calculation) entirely in L2 cache and each level is traversed with a handful of (admittedly clever) bit-twiddling operations. While the algorithms in the paper are much more compact than B-trees, which is an interesting and valuable result, they are still much larger than alternatives. It should be noted that the succinct data structures used here are not tiny B-trees -- they operate on different principles.

\- Multidimensional versions of the succinct data structures already exist. The majority of the performance of my spatial databases can be attributed to the development of succinct index structures that generalize to spatial data models. The spatial algorithms allow it to scale out but the performance is due to succinctness.

Which is to say, the ideas in the paper are really neat, but they are unlikely to supplant other algorithms for databases.

Where the paper really gets it right is framing "indexing" as a learning/prediction problem. Most computer scientists think of indexes as a data structures to search for things but give little thought to the theoretical limits of indexing _in the abstract_. As in, what is the best possible indexing structure for data models generally, and how close can we get to that for practical purposes? The abstract description of optimal indexing is essentially as an algorithmic induction/prediction problem, which makes an ideal implementation intractable but when you start to think of indexes in terms of algorithmic information instead of organizing values, it leads to interesting constructs like the data structures mentioned above that are dramatically more efficient and effective than traditional top-down indexing algorithm designs.

Optimal index construction is, oddly enough, closely related to the problem of AI. Consequently, it doesn't surprise me that algorithms from AI can be applied to produce efficient index representations. At the limit, you would expect the data structures for indexing and AI to converge.

<comment><USER3> > In fairness, I don't recall any literature on these (as is the norm for > high-end database computer science).

Check out Navarro's book _Compact Data Structures: A Practical Approach_. It's a really great survey of the literature from a data structures perspective. It also spends a lot of time on compressing these structures, an alternate perspective to learning/prediction, as you mention.

</comment></comment><comment><USER4> Here is a brief summary of the approach. [http://muratbuffalo.blogspot.com/2017/12/paper-summary- case-...](http://muratbuffalo.blogspot.com/2017/12/paper-summary-case-for- learned-index.html)

I like it. This is a natural trend: we will see databases and distributed systems become more data-aware to achieve efficiency and performance. [http://muratbuffalo.blogspot.com/2015/08/new-directions- for-...](http://muratbuffalo.blogspot.com/2015/08/new-directions-for- distributed-systems.html)

<comment><USER5> Thanks for posting this summary. I haven't seen it yet.

</comment></comment><comment><USER6> The really cool application of this, which they allude to at the end of the paper, is multi dimensional indexes. For example right now kNN for similarity search (think recommender systems) is usually done with some form of K-D tree or projection method. This has a bunch of downsides, including memory usage. If we can "learn" that index directly, that would be really fancy.

</comment><comment><USER7> Sounds like an interesting approach, but just that I understand the scope or impact of the paper right: Surely data-aware indexing can't be the novel part, right? Or was it always so complicated to model the data distribution that no one managed to do it until now? It seems natural to try to adapt your index to the type of data you see more often than not.

Very cool idea though.

<comment><USER8> The novel part is using machine learning to implement that data awareness, in principle this means that the data owner doesn't need to use any human knowledge or heuristics to build an efficient index -- the machine running a general algorithm can find the optimized representation of the index.

<comment><USER5> Thanks for summarizing one of our major points.

</comment></comment></comment><comment><USER9> Some thoughts on the paper as a researcher in space-efficient data structures:

When we design compressed data structures, we generally assume that the data has been generated by some statistical or combinatorial model. Then we design the encoding for the data and the data structure itself, assuming that model. There are often principled ways to achieve that.

We also need an index to find the correct block of data to decompress. This is where we often have to resort to ugly hacks. The constant-time select structure for bitvectors is a good example. To find the i-th 1-bit, we split the bitvector into blocks and superblocks of certain number of 1-bits. Then we have different ways to encode the blocks and superblocks, depending on whether they are dense or sparse. There are lots of special cases, but the index still often ends up wasting space for redundant information. We could adapt to the data better by adding even more special cases, but that quickly becomes impractical.

The key idea in this paper is that data structures often contain components that are learnable. For example, B-trees and rank/select indexes are essentially increasing functions, which should be easy to learn. We can afford having more special cases, if we don't hard-code them but handle them as data. This in turn can make the indexes smaller and faster.

The drawback is index construction, which requires a lot of resources. (This is a common problem with sophisticated data structures.) Spending minutes to index 200 million elements can be justified in some applications, but it's way too much in other applications.

</comment><comment><USER10> This seems interesting but to me there is a flaw near the beginning. They state a btree assumes worst case distribution. That's a feature . Much better than a "this will be fast, if you're lucky" distribution.

But who knows, maybe for read heavy analytical workloads this will be an interesting way of improving performance or reducing space usage.

<comment><USER11> This is the exact point of view they are rejecting. You want spectacular average-case performance at the cost of a slow but not catastrophic worst- case.

<comment><USER10> So basically suitable for batch mode only? There's really no other situation in software where average is a useful measure.

<comment><USER12> How about searching the web? I'd rather most queries take 1 second, and 10% taking 10 seconds, than every query taking 5 seconds.

I don't understand how you can be so confident about attaching a utility function to latency.

</comment></comment></comment></comment><comment><USER13> This seems like a rehash of hashing. sorry for the pun. Neural Networks are, in essence, just really good at compression.

<comment><USER14> If you want to view it that way, it is data dependent hashing. That is the innovation: the mapping from data to hash is learned from the distribution of the data.

<comment><USER15> Perfect Hashing was crica 1984.

<comment><USER14> Perfect hashing provably has size that is O(n) in the data being indexed. You can think of this as approximate perfect hashing. You trade off a bit of accuracy for a lot of compression.

<comment><USER15> Thanks. That [is] what I gathered as well. My OP was merely to note relevant existing results.

</comment></comment></comment></comment></comment><comment><USER16> Sorry to be a Debbie Downer, but what's the point?

It's not that the performance of the existing indices is bad. It's the fact that they are often ignored by the more complex operations even when the column is indexed.

I'd be more curious to see that addressed instead.

<comment><USER8> the performance of the existing indices _is_ bad in many cases.

<comment><USER16> With the reason being, they are ignored.

Not when they are used.

</comment></comment></comment><comment><USER17> As it says in the paper, this might be useful for data warehouses. But, it's not coming to postgres anytime soon. Index updates on the order of seconds to minutes would be too much for a transactional db.

There is also the cold start problem. How do you start to lay out the data on disk as you begin inserting it? Do you have a pre-trained net and use it at first (inserting where the net thinks the data should be)? The strategy probably differs by index type.

<comment><USER18> Most of current storage backends have Log-structured Merge Tree implementation or something like that.

The larger layers of LSMT have enormous size and should be accessed/built as rare as possible.

Being able to predict that given element exists in the larger layers at all is quite a bonus. You can skip reading megabytes of data.

The rareness of building of the larger layers justifies training deep neural model for them.

I cannot verify existence of LSMT backend for major SQL DB engines, but NoSQL engines use it a plenty: [https://en.wikipedia.org/wiki/Log-structured_merge- tree](https://en.wikipedia.org/wiki/Log-structured_merge-tree)

<comment><USER17> So you want a LSM for inserts and the DNN for reads? Seems OK. You still have to update/retrain the DNN after an insert into a larger layer, which will be expensive. So you'd probably get high latency at the 99% (or some high number).

<comment><USER18> There are no inserts into larger layers, only merges. Which are long (usually processed in background by separate thread) and that longness justifies training a new net in parallel to merge process.

</comment></comment></comment></comment><comment><USER19> Can someone please explain this to me

> For efficiency reasons it is common not to index every single key of the > sorted records, rather only the key of every n-th record, i.e., the first > key of a page. [1] This helps to significantly reduce the number of keys the > index has to store without any significant performance penalty

Is this true of B-Tree indexes in Postgres, for example?

<comment><USER20> This only applies to indexes over a pre-sorted structure. For unordered, PG has something vaguely similar in the form of BRIN indexes, but really they're totally different tricks

</comment></comment><comment><USER21> Not complaining, but curious about why this link took off and mine didn't. ([https://news.ycombinator.com/item?id=15892476](https://news.ycombinator.com/item?id=15892476))

Did adding the "Data Storage and Retrieval as an ML Task" synopsis make it less appealing?

<comment><USER22> Show HN: (2018) Using Learned Index Structures to optimize HN titles.

<comment><USER22> (Sorry if that doesn't make any sense, I haven't actually read the link yet.)

</comment></comment></comment><comment> oh-kumudo Can anyone with a research/professional background in DB shed some light about the significance/implications behind this paper?

<comment><USER23> Normal DB indexes are designed to be general-purpose so that they give predictable performance no matter the data you insert. The paper basically describes a more efficient way to look up data by using an index that's tailored to the specific dataset it's built over. It's expected that you'd be able to get a performance increase by doing this. In more detail, they use neural nets to learn an approximation of the distribution of the data and use that to look up the rough position of each key faster than usual. They still use traditional structures for the "last-mile" which is not so easily learned. You could accomplish the same thing without NNs by using anything that can approximate the distribution of the data. E.g. a histogram would work for some cases, and you could do some PCA and normalization first to deal with more cases. NNs have the advantage that they can learn more complex distributions.

<comment><USER24> The other advantage is more opportunity to parallize the work. So with new silicon architectre like the Google TPUs. This part is an important element to the equation.

</comment></comment></comment><comment><USER25> This is actually pretty cool - it makes sense to figure out ways to apply ML to core infrastructure in storage and databases. One wonders what other parts of such systems can be ML optimized... ?

<comment><USER26> Any place where heuristics and arbitrary constants are used.

</comment></comment><comment><USER27> Interesting idea. It seems like this technique could be applicable to bioinformatics, especially sequence assembly.

</comment><comment><USER28> Also known as Skynet-index

</comment><comment><USER29> OK. In a way, this is sort of terrifying.

<comment><USER30> Meh. That's only because of the association between AI and disaster movies. If you just think about it as math, it's no more (or less) scary than what came before it.

<comment><USER31> The invention of atomic weapons was "just math".

<comment><USER32> The invention of atomic weapons was physics, a precise description of the elementals of our universe. Results from Riemann geometry are not dangerous, but the statement "our universe's spacetime obeys Riemann geometry" is.

<comment><USER33> We can play a similar game with nuclear weapons, no?

The maths used to discover nuclear weapons weren't dangerous. What was dangerous was that the maths happened to align with our physical world.

<comment><USER34> Actually, neither was that dangerous. For it to be dangerous took years of engineering work.

<comment><USER31> What does it matter if it's "just physics" or "just engineering" or "just math"? Anything you can say about AI, you can say about the atomic bomb. AI involves a quite a bit of engineering as well. This argument is silly.

At the end of the day we are still building a powerful new technology. To assume it will be completely harmless is naive. No technology is completely harmless. But at least our previous inventions didn't sprout minds of their own. And have desires and plans independent of their creators.</comment></comment></comment></comment></comment></comment></comment>


Best Programming Language for Startups - <AUTHOR> http://kevindewalt.com/blog/2009/10/14/the-best-programming-language-for-a-lean-startup/ <comment><USER2> I wasn't so sure, until I reached the end:

 _Finally, if you still don't know what language to pick, choose Ruby on Rails because it is the best. If you don't agree, get ready for a public stoning._

Clearly, some very sound thinking! I like this guy already!

More seriously, the article is spot on. I have one caveat though: don't settle for what you know if you really want to know something else.

For example, if you've been doing PHP programming for years, and know it really well, but are really keen to learn Python and Django, give it a try! My advice would be to try the new language/framework for 2 weeks. It sounds long, but actually 2 weeks is almost nothing.

After those two weeks you might go back to your previous language, satisfied that you _know_ it's the right choice since you've tried the grass on the other side and it didn't taste any better. Or perhaps you'll switch to the new language, safe in the knowledge that yes, it is a lot better and you can probably do a better job in this new language.

<comment><USER3> "Clearly, some very sound thinking! I like this guy already!"

Because Rails is a programming language?

<comment><USER4> Because of sarcasm.

<comment><USER3> It is impossible to determine if any favorable comment about Rails is sarcasm.

</comment></comment></comment></comment><comment><USER5> You're a startup. You have neither the time nor money to do it all yourself, and if you're not first to market it's curtains. The best language for your startup is the one that has the most people kicking out free, modular code that you can pull off the shelf and use. This would seem to be Ruby for the time being, but the main point is you need to pick up the fad du jour and run with it.

</comment><comment><USER6> Although if you're looking to get something done, learning a new language isn't going to help in the short term, there is such thing as a better language. PHP sucks. As a language, it's hackish, and not really designed at all. So unless you need to integrate with existing tools, it would probably be best to stay away from a language that will attract meto developers.

For more evidence: [http://www.google.com/search?q=php+sucks&ie=utf-8&oe...](http://www.google.com/search?q=php+sucks&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en- US:official&client=firefox-a)

<comment><USER7> The reason there are a ton of "php sucks" posts is that tons of people use PHP. The reason tons of people use PHP is that sometimes it's the best tool for the job. Engaging in 'language X sucks' debate is a waste of time better spent designing an innovative product.

<comment><USER8> As Bjarne has said: "There are two types of languages, those people complain about, and those that nobody uses."

<comment><USER9> Yeah, because VB6 is so much better than Python or C#. Strangely I have yet to see many complaints about C# or Java in relation to C++ or VB6, yet I'm sure as many if not more poeple have used VB6 and C++.

Some languages allow you to shoot yourself in the foot more easily. Some have just better conventions and toolsets. VB6's object model just plain sucks in comparison to C#. C++ bugs are much harder to catch than Java's, and Java gives you a better toolset to find them (not that I'm a Java fan, I acutally dislike the language quite a bit).

Bjarne's phrase is pretty cute. But let's be honest, technical merit has never been in a factor in a large majority of business decisions. If that were so people would drop the horrible abortion that's ABAP or COBOL for SAP applications, Sun would drop Telnet as a default dameon and use a better shell than sh as a default. But hey, it's the most popular commercial Unix, right?

</comment></comment></comment></comment><comment><USER10> "Finally, if you still don't know what language to pick, choose Ruby on Rails because it is the best"

um. ruby on rails != language.

<comment><USER11> I'd argue that Rails' use of DSLs and metaprogramming makes it materially different from straight ruby. It gets even more confusing with lisp where your libraries are, by definition, language extensions. Often with completely custom syntax.

It's kind of an irrelevant distinction anyways. People don't really pick "languages", per se. They usually pick "language + libraries", and the line between third-party libraries and standard libraries is getting increasingly blurred.

<comment><USER8> They do pick the initial "technology stack", a term which concisely encapsulates both the distinction and interconnection of the parts.

</comment></comment></comment><comment><USER12> Of course he forgot to mention what is currently the trendiest language to use, which is the one I'm writing. I haven't had this much fun with a computer since dos days.

</comment><comment><USER13> _By definition you are trying to solve something where both the problem and the solution unknown so you don't know what you need._

And what definition would that be? Could someone please enlighten me because I have no idea where this comes from.

If the problem is unknown, then what are you working on?

If the solution is unknown, then figure it out (at least conceptually) before you start coding.

Am I missing something? This makes no sense to me.

<comment><USER14> Then that's your problem, if you can't understand it. A man is unhappy: he knows not why he is unhappy, what problem he has, nor how to solve it. Is it nonsense to say he is unhappy? A species is wandering around configuration- space; it knows not what the current fitness function is, nor what mutations would solve it best. Is it nonsense to say that the species will do better or worse?

</comment></comment><comment><USER6> In the end, a programming language is a tool to get things done. And while many tools are designed to solve different problems. Some tools <http://www.flickr.com/photos/kjmeow/3078861757/> ARE just better than others <http://www.flickr.com/photos/salyangoz/3466877208/> for getting the job done.

<comment><USER15> I'm thoroughly amused that the first tool link is a picture of someone using a hammer to pound on a screw. The photographer even says in the flickr comments that he's thinking about titling the picture "What happen when you use a wrong tool...".

This in no way diminishes your point, which I think is quite valid. I just found myself laughing out loud so it seemed worth sharing.

</comment></comment><comment><USER16> I'm not big on Rails.. but this list is somewhat impressive:

<http://rails100.pbworks.com/Alexa+Rankings>

</comment><comment><USER17> I like Ruby and Rails for that matter, or rather where Rails 3 is headed. But this has flame bait written all over it. It's a matter of choosing the right tool for the job, plain and simple.

<comment><USER18> _It's a matter of choosing choosing the right tool for the job, plain and simple_

I have a lot of trouble with this statement. It is a tautology, it is _necessarily_ true. Now that we both agree, what is the best tool for the job and how do we choose it? The OP gives the author's perspective. If you don't agree, perhaps you could share yours.

<comment><USER19> There seem to be a lot of people who think that arguments about what language to use are 100% fluff and that they can all be neatly settled by the cute "right tool for the job" platitude. The truth is that sometimes we're just not sure what the right tool for the job is and we might do ourselves a favor by being open to different arguments for different tools.

<comment><USER20> If you're truly committed to "the right tool for the job" be prepared to become a polyglot programmer.

We use 5 (or 6, depending on how you count) different programming languages regularly at my startup and for strong business and technical reasons _each_ of them is "the right tool for the job". We also have some other languages squirreled away in odd corners. In those cases, the languages tend to be "good enough" tools for their jobs (so there's no sensible reason to change something that is already working).</comment></comment></comment></comment>


Show HN: AlgoExpert: 60 Video Explanations of Popular Coding Interview Questions - <AUTHOR> https://www.algoexpert.io/product?src=shn <comment><USER2> The videos are sadly only in one language. But the solutions are in several. The site is terrible for people with color contrast issues.

</comment><comment><USER2> Website is a lawsuit waiting to happen. No closed captions for example.

</comment><comment><USER3> FYI: This requires you to pay for access.

<comment><USER4> There are some that are labeled as FREE on this page: [https://www.algoexpert.io/questions](https://www.algoexpert.io/questions)</comment></comment>


German firm offers Europe's first 'personalised paper' - <AUTHOR> http://www.google.com/hostednews/afp/article/ALeqM5i_tpe33jOjeKXQhEEl63oBtS_u-w <comment><USER2> A version of this idea where the paper is printed at home: [http://www.niemanlab.org/2009/03/back-to-the-future- medianew...](http://www.niemanlab.org/2009/03/back-to-the-future-medianews- revives-print-your-own-newspaper/)

</comment><comment><USER2> Good idea but I wish the article also mentioned the printing technology and production. How did they solve these problems?</comment>


Ask HN: Best Price for any product - <AUTHOR>

At Price Bureau, for past 5 months, we have been helping individual and businesses to get best price for any product. We have served 1300+ requests along with handling procurement for 5+ businesses.
Currently, we physically go and negotiate with local sellers and research online to get the best price. We are now considering a pivot to scale it. At the core of this pivot, we realized that people are already negotiating before they buy today. If we can incentivize them to share this knowledge (at what price and from where they are buying), probabilistically we will get the best price in our system in long run.
Here is how we are planning to execute it: we are now introducing an app which will be top up with virtual currency (say 3 coins). User can still ask for best price for any product (it will cost them - say 1 coin). Once they run out of coins, we will ask them to upload a receipt of any recent purchase they made - say iPhone 6. We will extract the price and seller information from the receipts. Later on, if other user is looking for best price for iPhone 6, we can surface all the information from the crowd who has submitted receipts for iPhone 6, ofcourse anonymously. In long run, system should grow by itself and we should get out of business (or maybe doing it for free) of getting the best price.
(1) What are your thoughts on this model? (2) What are some of the leanest way you can think to test this experiment?
Looking forward to some constructive thoughts. <comment><USER2> What are your biggest type of clients? I see you used a phone as an example, is that one of the most common products that people ask the price for? Asking because I'm trying to get the mindset of the proper client.

Also, for whatever product your most common client is, what are the reasons that they use your service as opposed to comparing the prices on amazon/ebay/Google?

<comment><AUTHOR> Yes, phone makes about 20% of the requests for us. However, we have received requests all over the board from cement, steel, home appliances, industrial machinery, computer/laptop etc.

From our experience, the prices published online are not necessarily negotiated price. They come to us because we do online research as well as in person negotiation with bunch of retailers/distributor to get them the price. For example, we sold a TV worth USD 2300 for 1911, a price not available anywhere online.

In a way, this crowd sourcing platform will help discover negotiated prices that people are buying the products for.

NOTE: Negotiation is a common habit in India.

<comment><USER2> Hmmm, I see. That is very difficult. I would definitely make sure that point is made somewhere on your website or app so people unfamiliar with it are aware of your value proposition since I'm sure there will be others like me wondering why Google wouldn't suffice. That will probably make it worth the hassle of downloading another app/taking a picture of a receipt worth it for about 10% of your customers I would guess. As for the rest, I'm not sure how you could incentivize them better or what alternative methods of gathering this data could be.

Another problem you'll encounter are outlying data sets and different terms. For instance, if somebody buys a phone without a contract it could be about $600, but if you get the same phone with a contract it could be free. While that's just one example, it points out a clear problem with the taking pictures of receipts because you don't know the terms at which the product was acquired. Also, demand and intelligence may contaminate your numbers. Let's say somebody is selling a used TV which they bought for $2400 and selling it for $2300. Let's also say it's super bowl weekend and somebody just broke their tv and they're huge football fans and want to go buy a new TV really quick. They buy this used TV for such a high price because they're crunched for time and are desperate. I know it's not the best example but it gets the point across. Somebody else will rarely be able to recuperate the same value for their tv as that person just did. So then you think you'll just remove the outliers. However, if you do that, unless there's a ton of people getting great deals, you're going to be left with what the majority of people are paying for products, which will most likely be market rate, or the going rate without any negotiations.

Idk if you've encountered those problems, have solved them,or are currently working them out. If that is a real problem for you then it seems tricky to automatically knit pick on a case to case basis.

Keep fighting the good fight, jjalan.

</comment></comment></comment><comment><USER3> > What are some of the leanest way you can think to test this experiment?

What is your most dangerous assumption that you need to be true?

<comment><AUTHOR> People are willing to share their purchasing info or receipt in exchange of

(1) Ability to request a negotiated price (which we will do on their behalf) AND/OR

(2) Ability to see at what price other people are buying the product nearby.</comment></comment>


Ask YC: How to find a business minded cofounder? - <AUTHOR>

First time post... Sorry if it's been asked before.
Say I have a killer idea, but it would require a cofounder that had a bit of domain knowledge, and a lot of business experience or school and the ability to sell.
Is there an easy route to find this person? <comment><USER2> If anything there would be an abundance of biz-oriented people. At every social event I go to, there are 10 people handing me cards saying they're looking for developers.</comment>