Legit: Git Workflow for Humans - <AUTHOR> http://www.git-legit.org/ <comment><USER2> I kinda conceptually disagree with approaches like this, for the same reason I dislike the official Github client: it renames some basic git concepts. e.g. git sync. How is this helpful when the dev is put in front of a situation (not configured server, new colleague who is not aware of legit)? Essentially I admire the work put into this project, I just question the goal.

<comment><USER3> It's just a shortcut. The underlying operations haven't gone away. Abstractions are good.

<comment><USER4> In the general case, I agree. But working with Git you will very probably have to learn what's going on beneath the abstraction sooner-or-later (ie. when I'm working on a team larger than 1 person and the repo becomes a mess). So writing abstraction layers just increases the number of things that need to be learned.

<comment><USER2> My point exactly.

</comment></comment></comment></comment><comment><USER5> Not really a new idea ... but to be honest, the naming of some of the commands are equally vague to new users as the default git commands. Harvest, sprout, graft?

I really think git could use a simpler and more understandable api for the entry level commands pull/checkout/rebase/... but this isn't really helping alot except for perhaps the switch and (un)publish commands.

<comment><USER6> The nice thing about those is that they create new terms rather than using terms that exist in other VCSes but mean something very different.

</comment></comment><comment><USER7> Looks nice. The two biggest problems I have based off the README, in order:

1\. Only 1 git remote? I need at least `master` and `heroku` for all of my projects, and often I'll need one or two extra `github` remotes for other forks/collaborators.

2\. I wish it had pictures of what exactly it was doing (git graph-style stacks of commits before/after each commit).

<comment><USER8> I completely agree with your first point, but I do think that the majority of people using git probably don't have more than a single remote. I am sure there are those few people that are tasked with pulling (and hopefully, pushing) to the upstream, and likely a deployment remote like Heroku probably exists behind some process or script.

<comment><USER9> _I do think that the majority of people using git probably don't have more than a single remote_

Strong disagree. Nowadays the majority of git-users probably interacts with github. Just count the number of "Fork me on github"-ribbons that you come across on any given day.

The github workflow for forking a repository[1] involves two remotes (origin and upstream).

[1] <https://help.github.com/articles/fork-a-repo>

</comment></comment></comment><comment><USER10> When I first encountered git, I had a hell of a time learning how to actually control my source. Legit would've been a great gateway drug.

</comment><comment><USER11> My thinking about this may be seriously flawed in some way, but couldn't the official Git implement these command names or something similar as an alternative to the currently supported commands without any problems?

Heck, why not even label the current Git commands as "legacy commands" and leave them supported "forever", but officially change to more user friendly and logical command names such as this?

<comment><USER12> [http://article.gmane.org/gmane.comp.version- control.git/3145...](http://article.gmane.org/gmane.comp.version- control.git/31455)

[http://article.gmane.org/gmane.comp.version- control.git/3147...](http://article.gmane.org/gmane.comp.version- control.git/31475)

</comment></comment><comment><USER13> Looking over the commands, I thought, "Wow, this is really useful." Then the creeping dread hit. It's the kind of dread that comes along with having worked with computers for a long enough period of time: What happens when the project is eventually neglected and I am left high and dry scrambling to unlearn all of the neat shortcuts that I've come to rely on?

Then, I'll have to relearn all of the traditional methods that aren't going anywhere. Normally, I'm not a uptight about this stuff, but it's the same reason that I can't bring myself to switch from JavaScript to CoffeeScript despite the fact that I _really_ like the syntax.

It's probably TextMate's fault as well as Apple's—the latter of which seems to get a perverse kick out of jettisoning things people rely on—but, I am increasingly leery of anything that has even the most remote chance of leaving me high and dry.

<comment><USER14> In these cases doesn't the value in "Wow, this is really useful." completely outweigh the cost of having to learn something else if it does go away? It's not like you have a finite set of things you can learn and then that's it, brain's full.

Just use it until it stops being awesome and then use something else. Life's too short and your time is too valuable to pass over things like this, where your gut feeling is probably correct.

</comment></comment><comment><USER15> Too legit to git!

</comment><comment><USER16> I really like this. I have trouble with git - it is not my first VCS, and many of the command aliases that it uses are not intuitive or do something very different from what they do in other VCSes.

</comment><comment><USER17> i don't think anyone who used git daily for a month has problems with the original command names. i used git before svn and now i'm totally unhappy with the svn-command-names...

<comment><USER16> I've used git for almost a year and it's still furiously unfun to interact with. It's not easy, it's not transparent, and it's not intuitive. You need to really, deeply understand git in order to use it. I don't want to really, deeply understand git any more than I really, deeply want to understand rsync. It's a tool. I just want to use it.

<comment><USER6> It took me a day to get to the point where I understood the internals of git well enough to be comfortable using it.

<comment><USER18> Well then you are just awesome. For anyone who has been using various source- control systems for many years, its commands are not intuitive, and cause unnecessary friction. Unfortunately, as elsewhere in life, the best tech does not always win, at least in the short-term.

</comment></comment></comment></comment><comment><USER19> Previous discussion: <http://news.ycombinator.com/item?id=3752447></comment>


Web version of the iOS10 music app design? - <AUTHOR> I like the new Apple Music ios app design (https://9to5mac.com/2016/06/13/new-ios-10-music-app-design/) a lot, and want to apply a web version of such style to my website. Is there any website already using similar style I can take a look as reference? <comment><USER2> Can you please elaborate what you find so "special" in those screenshots from the article? I mean how is it really different from most of the modern apps/websites?</comment>


China's startups advertise for 'good-looking' tech workers - <AUTHOR> https://www.latimes.com/business/la-fi-china-sexy-tech-workers-20190308-story.html <comment><USER2> This would not lure me into their tech company for the simple reason that I know that these women are out of my league.</comment>


iOS bug triggered by censorship - <AUTHOR> https://objective-see.com/blog/blog_0x34.html <comment><USER2> [https://news.ycombinator.com/item?id=17501970](https://news.ycombinator.com/item?id=17501970)

If you're going to rewrite a misleading or linkbait headline, please make it accurate and neutral, not more sensational.

<comment><USER3> Not to defend the rewriting, but it's worth noting that this article is a technical deep-dive, written by whoever discovered and reported this bug. Might be appropriate to replace the Ars URL with this one.

<comment><USER2> Normally we do that, if we catch it before the thread has finished its main cycle. But in this case we didn't see it sooner. I'll add a note at the top of the other thread to point people to the blog post.

<comment><USER3> Seems fair. Thanks for all your hard work!</comment></comment></comment></comment>


Ask HN: Could HN be monetized to the point of becoming its own entity? - <AUTHOR>

If so, why hasn't the successful model of HN been replicated for other niche topics besides hacking? <comment><USER2> Could it? Yes. Should it? No (My opinion). Would it? No (I highly doubt it).

As for your interior question of why it hasn't been replicated for other topics, I don't think it's simple enough to replicated. HN isn't monetized traditionally so there isn't a successful business model to replicate unless you include the entire company of Y Combinator.

<comment><AUTHOR> With 120k uniques and over 1.3M pageviews per day ([http://www.quora.com/Hacker-News/How-many-users-does- Hacker-...](http://www.quora.com/Hacker-News/How-many-users-does-Hacker-News- have)) would advertising revenue not bring in an ample amount of money supposing you could bring in that kind of traffic?

</comment></comment><comment><USER3> Probably, but I hope not. HN has a community of people really knowledgeable in a lot of areas who really try to maintain a high level of discourse. I fear that the priorities of monitization would alienate many members. I couldnt fault PG for wanting HN to pay for itself, but I hope the community itself would justify its remaining as it is.

<comment><AUTHOR> I think in HN's case, it pays for itself with intangible branding factors so there is really no need to monetize and like you said, it maintains the integrity of the site. But I was thinking along the lines of a startup. HN's model is so excellent I think it could be applied to a number of niche topics. It would be interesting to know though, to what extent a site like HN could make money if that were its goal.

</comment></comment><comment><USER4> HN isn't being monetized directly, but it is bringing tremendous value to YC. It's might even be their most valuable asset.

</comment><comment><USER5> At the very least it could be made into a business on donations alone I am sure.

PG has a great thing going here that is far more valuable to him than money. He isn't aching for food on a daily basis so I doubt he'll ever dream of jeopardizing HN the way it is.

</comment><comment><USER6> Why don't all the mini sub Reddits count?

<comment><AUTHOR> I looked into mini sub reddits because my brother said the same thing. But for something like say, finance, there is all kinds of interesting information out there that could be more concisely presented with a HN type of setup. Sub reddits really don't do each topic justice and as you know dont carry the level of discourse that HN does.

<comment><USER6> Sorry, I don't see how information could be better presented through a HN type of setup than through a subreddit: a subreddit _is_ a HN type of setup. What differences do you see between HN and subreddits that mean information can be more concisely presented on HN?

(I note your other point about the standard of the communities on HN -v- Reddit being different, but I have no opinion on the level of discourse on subreddits that would be off-topic on HN.)

<comment><AUTHOR> I've been using finance as an example. Here is subreddits finance page: <http://www.reddit.com/r/finance>. As we have both agreed, you can tell immediately the level of discourse and content quality are lower.

In regards the information presented, concise might not have been the best word choice. I speculate that the user base for /r/finance are not the users you would attempt to attract with what I am suggesting. I think if you could bring out the wallstreet gurus, traders, entrepreneurs of all types, economists, etc. as regular users, the site would provide a unique and valuable experience.

<comment><USER7> "Level of discourse" and "content quality" are almost purely functions of the community. This means that there is no "HN model" that can be easily replicated unless you have an army of Paul Graham clones somewhere that can attract a similar community.</comment></comment></comment></comment></comment>


Nobody talks about the real reason to use tabs over spaces - <AUTHOR> https://www.reddit.com/r/javascript/comments/c8drjo/nobody_talks_about_the_real_reason_to_use_tabs/ <comment><USER2> Personally, I prefer hard tabs to spaces. The rationale is simple: every single dev I've worked with has had a separate preference on how many spaces ahould be used for an indent. I've seen 2, 3 and 4 commonly used. If you use hard tabs, every dev can set their editor to their indentation of choice. If you use spaces, that freedom is lost.

I say this as a currently predominantly Python dev, where spaces are encouraged and recommended, but I disagree as stated above.

Currently, I prefer a 2 space indent after previously using a 4 space indent for decades.

<comment><USER3> > If you use spaces, that freedom is lost.

That freedom isn't lost. As the pro-space camp is wont to point out, you're free to pile on another layer of translation software to revert the translation software that transformed the original tab input to a set of spaces.

And because everybody is using programmable IDEs (or IDEs that have had all possible programs precompiled into them), this translation will be part of your 10MB init config file, and because it's 2019 the translation is guaranteed to work with 100% fidelity. It's seamless!

Also, Google uses spaces, and if it's good enough for them, end of story. No matter that KNF (kernel normal form) for Linux, Solaris, and all the BSDs uses hard tabs, not to mention countless GNU projects. Unix developers aren't accustomed to writing readable, shareable source code that interoperates with a diverse set of tooling.

<comment><USER4> "Also, Google uses spaces, and if it's good enough for them, end of story"

That's no argument

EDIT: The commenter is being sarcastic. Don't downvote them :)

<comment><USER5> "10MB init config file" \- this is the point at which you gotta realize they are being sarcastic.

<comment><USER4> I think you're right. I read it quickly on mobile and missed that.

</comment></comment></comment></comment></comment><comment><USER6> Not going to get into the details of the argument (there is a reason tabs vs spaces is considered the prototypical "religious war"), but I do strongly disagree with the _way_ it was argued, and I felt the need to comment because I so frequently see this type of discourse and find it very disheartening. It's what I usually call the "If you disagree with me you want to kill puppies" (or, in this case, "if you disagree with me you hate blind people") form of argument. The author really isn't inviting people to challenge his thinking with his final sentence - I feel like he's instead trying to flat out invalidate other opinions by emphasizing how callous you must be to have them.

FWIW, I believe there _are_ other opinions that are at least worthy of consideration, but I think other commenters have made those points as well.

<comment> em-bee so what are your counterarguments then?

in your company code that only a known set of people need to work with, you can choose whatever suits the group.

but in a public project, the argument that tabs help visually impaired coders is a serious point that is hard to refute.

<comment><USER7> Even in private company code, there may well come a day when a vision impaired person is hired and has to work on the codebase. Even though the odds are low, you'd be setting yourself up for long term success if you make the switch now. Not saying that you should, just that it's always worth considering who will end up maintaining your code after you finish working on it.

<comment><USER8> See for example this blog post:

[https://blog.aboutamazon.com/working-at-amazon/blind- since-b...](https://blog.aboutamazon.com/working-at-amazon/blind-since-birth- writing-code-at-amazon-since-2013)

</comment></comment></comment></comment><comment><USER9> Did you know that you can abuse font ligatures to have adjustable indents even when using spaces and not tabs?

Its possible using font ligautures to turn predefined sequences of characters into a different set of glyphs. This is usually used to display nicely joined letters, or rendering multi-character math symbols as a nicer single wide character. An example of the letters thing is the sequence "fi" on mac. It's one I see on macs and in my android keyboard autocomplete.

But you can abuse it. I took a mac fixed width font and added a ligature that turned four spaces into three spaces. And what do you know, it actually worked. I tried it in IntelliJ and with whitespace highlighting on, it correctly takes up 3 spaces but has 4 space markings - so IntelliJ handles it properly.

I don't advocate this, but i would like to make a cli tool someday that lets you take a ttf and add in whater spacing conversion ligature you want.

<comment><USER10> That's disgusting and I liek lots.

Every time this subject comes up I get farther down on the opinion that not moving forward from file formats based on what a Model 33 Teletype was capable dealing with is a mistake that keeps on giving.

</comment></comment><comment><USER11> The knee-jerk reaction is almost certainly going to go along the lines of "But you can emulate all of those features with spaces anyways!"

Which is true. But what if my tools don't all do that? What if doing so makes it harder to work for some reason or another? Users who use this tab emulation will experience all of the downsides that spaces are supposed to avoid, like misaligning justified comments. I think it's a waste of effort.

All I can say is, I appreciate the Go team's decision to use tabs. It makes semantic sense, it puts everyone on the same playing field, and it doesn't require editor support. Even Windows 98 notepad can be used comfortably as a code editor for tabs-based code, if you for some reason wanted to do that. In reality that is not necessary or desired, but it illustrates that this is the path of least resistance.

That web browsers handle tabs poorly is of no concern to me. If it were really a huge problem, pretty much any editor in existence can do a Replace All to get back perfect spaces-indented code.

<comment><USER12> I really don't care about tabs vs. spaces anymore. I just go with what ever my auto formatter uses. But I do think we have been having the wrong argument all these years, and I think the proliferation of auto formatters are setting us straight, finally.

The issue is not tabs vs. spaces. It is block indentation vs. alignment. If you use alignment you are forced to use monospace fonts, if you use alignment with tabs, everyone is forced to set the same tab-stop (missing the point of tabs).

Block indentation on the other hand allows people to use whatever font they want (including non-monospace fonts) and what ever tab-stop they want. At that point it doesn't matter anymore whether the indentation is done using tabs or spaces. The preferred font settings of the developers can deal with it.

<comment><USER13> To be honest using non monospace font when coding should be be fireable offense.

I mean good luck with diffing that.

<comment><USER12> You right. Diff tools should use fixed width characters as diff operators (em- space, minus-sign, and plus sign are usually the same width in most fonts), but I doubt any diff tool does. It is a shame. The only reason we use monospace fonts as an industry is because that is how we've always done it, and now we are stuck there because we fail to think out side of the box (pun intended) when we make our tools.

<comment><USER14> Monospaced fonts are good for editing. Variable width characters are good for quick reading because they allow you to scan past spelling errors in prose. Monospaced fonts have distinctive 'textures' that make them amenable to detecting symbol identity. Variable width fonts intentionally eliminate that texture and are often optimized for ink density to 'grey out' blocks of text. Arrow keys don't work predictably in variable width text.

<comment><USER12> There is no reason font designers can't create variable width font faces that optimize character distinctions and important features while reading code. Many font faces even have settings that allow you to opt into making characters more distinguishable.

You are right about navigating between lines in a variable width fonts. However that is a problem with many text boxes on the web (including slack and github) and I don't find it that much of a headache. I find it kind of rare that I need to navigate between subsequent lines and maintain the column except maybe at the start of the indentation level.

</comment></comment></comment></comment></comment></comment><comment><USER15> One thing taught to me by an accessibility advocate in a university was that accessibility isn't just for people who have sensory problems, Accessibility is about making things accessible for everyone. Given that everyone seems to prefer their own indent size, using tabs and setting the tab width in the editor is an accessibility win for everyone, not just partially-sighted users.

I've been a proponent of spaces until now because of consistency, but this argument has won me over to tabs.

</comment><comment><USER16> Any visually impaired person to join the debate and help clarify?

It seems everyone is giving their opinion except the affected population.

</comment><comment><USER17> As a visually impaired person myself, I often find it funny that people who are zealots about certain topics suddenly change their mind because someone with a "disability" (Which can mean nearly anyone tbh) is affected. Its weird, how the other humans opinion becomes suddenly more relevant because I guess they pity them?

"I will fight Frank to the death on tabs vs. spaces, but Marry wears glasses so she is always right!" Humans are weird.

And to weigh in on tabs vs spaces, or rather not, while I always set my preferred tab with and use the tab key to indent, I don't know what characters my tools insert and I don't or ever have cared.

<comment><USER18> If the author had written about how they used to omit alt text on all images and explain to co-workers how it's a waste of energy because it doesn't show up anyway, but then one day reached enlightenment about how some user agents do use it and many people using such agents are visually impaired, and promulgated that everyone should ensure that non-decorative, non-captioned images have alt text, would that also be a form of pity? Are all a11y efforts pitiful?

<comment><USER17> I don't think they are, but there is a difference at not including someone and just discomforting them.

So the guy who has his tabs set to 2 and huge font sizes, that's me, because I am disabled, but it could also be my dad, who is just old and would want a larger font size because its easier on the eyes. But we both would still be able to work with bigger tabs or smaller font, it would just be annoying. But that can be true for every coworker, so I think the disabled persons opinion should not have more weight in such a debate.

Leaving alt tags from images makes them unusable for a screen reader though. That argument carries more weight, because the user would not be inconvenienced, but excluded.

And really, I am not arguing against any form of effort to make something work good for all involved, but rather that it often seems that empathy gets only switched on in people when someone plays a minority card. And that sucks.

<comment><USER18> Great answer, thank you. It seems like the accessibility bar is often described as equal enjoyment for all, not merely attainability for all. Based on that, I figured an inconvenience or annoyance should be below the bar, and you are very forgiving to instead find them acceptable!

Your point about minorities is well taken, but I guess the reality is that creating for the majority involves more obvious or ubiquitous knowledge, so creating with minorities in mind takes more conversation, teaching, learning, and card-like moments. Empathy in the latter but not the former is probably innate at some level.

</comment></comment></comment></comment><comment><USER19> If editors respected logical indentation levels, tabs would be more feasible. Consider a pair of lines like:

        printk(KERN_INFO "%s: blah, blah %d\n",
               __func__, arg)

This will work okay like so:

        [tab][tab]printk(KERN_INFO "%s: blah, blah %d\n",
        [tab][tab]       __func__, arg)

If we change the tab size, the alignment is preserved.

Problem is, many editors in "mixed tabs and spaces" mode wants to fill the second line with the maximum possible number of tabs, and minimum spaces. It has no idea that the two belong to the same nesting level. Say that we have four-space tabs. Then the editor does this:

        [tab][tab]printk(KERN_INFO "%s: blah, blah %d\n",
        [tab][tab][tab]   __func_, arg)

four of our alignment spaces turn to a tab, followed by three spaces for alignment.

Even if your True Scotsman's editor is smarter than this, someone on the team will use something that isn't and mess things up.

</comment><comment><USER20> So far, anyone who lives long enough becomes visually impaired. I hope to be able to still code when I've very old.

</comment><comment><USER21> What proponents of tabs over spaces miss is the fact that consistency is the most important thing.

Editors ship with spaces over tabs as default, so you should use spaces over tabs. You will be more consistent with others and reduce errors if people somehow haven't picked up your configuration.

Anything else is just fighting the tooling.

Without consistency (hopefully brought by automation) you will find team members struggling with merge conflicts that were unecessary and only brought about because of whitespace changes.

Since we started forcing prettier on stage we've seen a reduction in manual merge resolution being necessary.

And if you're using a tool anyway to apply this consistency, the decision just becomes the following, do you use the defaults or a custom configuration? Your life will be a lot easier if you just go along with the defaults, even if they aren't your first preference.

That's not to say you can't custommise anything (e.g. the default line width of 80 in prettier is too low) but you should have a very good reason to do so. And as others have pointed out, this isn't one of them because tooling can recognise spaces as tabs just as they recognise tabs and still adjust accordingly.

<comment><USER3> > Editors ship with spaces over tabs as default, so you should use spaces over > tabs. You will be more consistent with others and reduce errors if people > somehow haven't picked up your configuration.

Actually, no, that's a very recent thing. Tabs were the default for decades in the vast majority of editors, particularly on Unix. Even today, if I fire up most vi implementations (I really only use nvi on BSD) tab is the default. Pretty sure this is still the case for vim and emacs, too, and might still be the case for other common text editors like nano.

There's no denying that spaces are far more popular now in general, but I'll have to draw the line at whitewashing history. I haven't been programming for nearly as long as many people here, but IME it felt like the mainstreaming of C++, which brought the Windows/Visual Studio crowd into open source, in tandem with Python[1], were responsible for the dominance of spaces. Even Java code eventually capitulated, where standard practice was originally all tabs owing to it's genesis at Sun. Unix-related software and open source was almost entirely tabs until the early aughts. You can look at the source code yourself, though it's not always obvious because tabs being tabs the indentation usually looks natural regardless of your tab stop.

As I mention elsethread, Linux, all the BSDs, etc still use tabs. Projects with a sufficiently long pedigree typically still use tabs.

(Says a user of JOE, still bitter that Joe relented and changed the default indentation to spaces a few years ago.)

[1] I always wondered how Python ended up standardizing on spaces. I was never into Python, but IIRC Guido preferred tabs. I'm sure there's a story behind it, and have an inkling it's related to the onslaught of developers who cut their teeth in the Windows ecosystem.

<comment><USER21> I'm not "whitewashing history" that's a bizarre accusation because I'm not talking about history, I'm talking about what you should use today.

Just because tabs would have been the right choice in the past doesn't make it the right choice today.

</comment></comment></comment><comment><USER22> I wouldn't necessarily recommend jEdit, but I'm sure a lot of editors have a soft tabs feature like it. And with linters I can't imagine you couldn't just run your local fork with which ever have the integration make the production version be which ever. Anyway... I personally don't care what you do so long as you try to do the simplest and least and obvious thing.

<comment><USER12> Exactly. I think this debate is kind of outdated, we have tools now to deal with stuff like this. Even the OP argument of the visually impaired doesn't really matter as long as you set your auto formatted to use block indentation and no alignment (sorry gofmt!). Just use a font face the smooshes the whitespace together if you need small indentation with a large font size, or one that draws it out if you need to exaggerate it.

</comment></comment><comment><USER23> So one thing I've wondered for a while is why every single non-public tab- indented project I've ever had to join (as opposed to create) has been a disaster from a consistent code formatting perspective.

<comment><USER24> My experience is the opposite. When a project is tab indented and you have 1 guy indenting by 2 spaces and another by 4 the inconsistency is spotted pretty quickly, maybe this is what you're noticing?. When spaces are used it's easy for tabs to hide.

Also there's a lot of crappy editors that don't handle smart tabs well, including some big, expensive, proprietary IDE's.

<comment><USER23> I'm guessing at least part of it is different smart tab behavior, but I've opened files to find chunks that were indented with double tabs (as in one indent level was done as two tabs) in the middle files that were otherwise single tab indented and even weirder stuff that I suspect is because of somebody indenting wrapped text.

(Yes, poor QC and Dev ops went along with it.)

</comment></comment></comment><comment><USER25> My take: whatever the project is currently using, spaces or tabs, please keep it that way. You might think this is important but really you can find arguments for either way, consistency trumps everything.

</comment><comment><USER26> I recently contributed to a GPL project that uses tabs+spaces, but I have emacs configured to not use tabs ever, at all.

After the first git commit it was obvious that this was going to be a problem, the diff lines didn't match at all.

So I'm seriously considering, after 38 years of being a die-hard 'spaces or death!' user to switch to using tabs with my tab-stop size configured to match my spaces preference.

</comment><comment><USER27> I was a tabs guy but now I've made peace with spaces. Honestly any IDE including low touch ones like Vim will auto indent for you anyway.

</comment><comment><USER28> I don't have a strong opinion on this long-running debate, but the example given sounds like a valid argument.

I just changed my VS Code settings to not insert spaces when pressing tab ("editor.insertSpaces": false) and will see how it goes. Being able to change the tab size ("editor.tabSize": 4) already seems like a neat feature that will come in useful.

</comment><comment><USER29> Well, Lisp code can't be properly indented with just tabs. So tough luck, I guess? Why wouldn't editors programmers use allow to customize indentation space size instead? So you could set up each indentation space = 2 characters and get huge indents. Or set it to 1/2 character and get tiny indents. Seems easy to implement in e.g. Emacs.

<comment><USER30> Why can't it? Fixed width tabs, sure, but tab stops would work fine.

It is more work in the editor, so I don't expect it anytime soon. Especially not with consistency. But it is doable.

</comment></comment><comment><USER31> What most of these discussions leave out is that you can't just say "use spaces instead of tabs."

You have to say _how many_ spaces.

Is it 2? 3? 4? 8? How many?

If you use spaces, you are committing to say how many will represent one indent. And please take note of how your choice affects the visually impaired programmers from the Reddit thread. Or someone like me who finds monospaced fonts hard to read and proportional fonts much more legible.

But why do you even need to say this? Why should it matter how many spaces represent an indent level?

The only time it really matters is when you not only use indentation, you use _column alignment_ , like this:

      myFunctionThatDoesStuff(someArgument,
                              andThisCalculatedOne(anArgumentThatMeansSomething,
                                                   anotherWordyName));

This style is mandated by many coding standards, including Google's C++ standard. If you use an alignment-based style, you had better use spaces, or else you are in the "tabs for indentation, spaces for alignment" muddle.

What would happen if you abandon column alignment and use only indentation:

      myFunctionThatDoesStuff(
          someArgument,
          andThisCalculatedOne(
              anArgumentThatMeansSomething,
              anotherWordyName
          )
      );

Here the parentheses are treated just like curly braces: if you need to line stuff up, don't do it at whatever column things happened to fall on, do it by indentation only. That's how we code curly brace blocks.

Now your code will be just as readable if it's indented with tabs, or with whatever number of spaces you like.

If we coded curly brace blocks the way these standards require us to use parenthesized expressions, our code would end up looking like this:

      if(someBooleanExpression) {someFunctionCall();
                                 if(anotherBooleanExpression) {doSomething();
                                                               doAnotherThing();}}

Do you code like that? Do you _want_ to code like that? Then why do you format code like that (if you do) simply because the delimiters happen to be parentheses instead of curly braces?

If you stop using column alignment, and start using indentation instead, so many problems go away. Space indentation (and how many spaces?) no longer has any advantage over tabs.

I sometimes wonder why so many coding standards mandate column alignment. I think it is because people get tired of talking about it and say "we must agree on _something_ , now! And we will stick with it forever."

I've been in these discussions, and what happens is whoever is most "passionate" about their particular style gets their way. And that will usually be the person who is fussiest about these things, the person who loves fiddly column alignment. Why else would such an impractical approach be baked into so many coding standards?

<comment><USER19> Tabs could plausibly work if the editors were smart enough to treat this:

        myFunctionThatDoesStuff(someArgument,
                                andThisCalculatedOne(anArgumentThatMeansSomething,
                                                     anotherWordyName));

as being all at the same indentation level. If this is at indentation level 2 then all these lines should start with two tabs. All whitespace after those tabs should be spaces. Then you can adjust the tab size without spoiling the relative alignment.

The editor has to understand the language fairly well. (In the case of C or C++, it also has to recognize preprocessor lines and treat them specially, as well as certain elements like goto labels that are out of indentation.)

It won't work in Lisps, because in Lisp, nested expressions have their own internal indentation which can be relative to alignment:

      (long-function-name (lambda (arg)
                            (aligned ...)
                            (stuff ...)))

Basically the only thing that could work 100% would be the original typewriter/TTY/terminal concept of movable tab stops. The editor would grok each expression, and then set up custom tab stops for each line individually:

      (long-function-name (lambda (arg)
                            (let ((var ...))
                              (stuff arg arg
      v                   v v v      v
                                     arg))))

The v's indicate the tab stops for the last line, so five tabs are used. The algorithm for discovering these tab stops doesn't seem overly complicated. We shoot a ray upward at column zero. Whatever it intersects with is the anchor line. We then look for the first tab stops in the anchor line by moving the vertical ray. By this process we discover the ( in (long-function-name, and the ( on (lambda. After that, our vertical hit test encounters the (let line, so that yields a tab stop. If that weren't there, then the (arg) would be the next stop.

Basically tabs should intelligently be based on preceding material, as if an invisible helper were setting tab stops on our typewriter.

One problem with this is that any piece of software that has to format the code has to implement the same thing, exactly.

</comment></comment><comment><USER31> Meta: I am curious why this suddenly dropped off the home page and down to around #98. It can't be the upvote-to-comment ratio, as there are 85 up votes and 43 comments. Was it a manual intervention?

<comment><USER19> Someone just set the vertical indent (form feed character) to 90 lines. It supposedly helps the humor-impaired.

</comment></comment><comment><USER32> Has more energy ever been expended more often for less gain than this debate? It is truly the most well-painted of bike sheds.

<comment><USER33> I didn't think there'd ever be anything new in this debate, but this is the first time I've heard the accessibility argument.

</comment></comment><comment><USER34> I don't see why people spend time on this. Someone mentioned recently (or maybe I dreamt this) that programming is really, really much more about the specification than the implementation. If your specification is done flawlessly, then the implementation follows from that. I had the idea a while ago of starting a alternative to Excel and then I realised it would be way more useful to simply _document_ Excel's behavior.

<comment><USER24> > I don't see why people spend time on this.

Because control freaks still can't accept personal preferences and insist on uniformity, the idea that I won't indentation to look slightly different on my computer than it does on there's is a heresy. If they world were up to them they'd enforce other things like editor schemes, in fact some have tried to: [https://vim.fandom.com/wiki/Modeline_magic](https://vim.fandom.com/wiki/Modeline_magic)

First shalt thou press the Holy Tab. Then, shalt thou space to three. No more. No less. Three shalt be the number thou shalt space, and the number of the spacing shall be three. Four shalt thou not space, nor either space thou two, excepting that thou then proceed to three. Five is right out. Once the number three, being the third number, be reached, then, writest thou thy Holy code.

<comment><USER19> The last thing we want is control freaks preparing instructions for machines to execute.

Control freaks should be in politics, management, education, nursing and such, and stay the hell out of software.

</comment></comment></comment><comment><USER35> click click click click click click click click vs tab

sounds like a perfect embodiment of modern software development style.

<comment><USER36> Do you seriously believe people are manually pressing the spacebar to indent with spaces, or are you trying to make a joke?</comment></comment>


Ask HN: Which algorithms change implementation of data structures at runtime - <AUTHOR>

Data structures "define" how real-world concepts are structured and represented in computer memory. For different kinds of computations a different data structure should/can be used to achieve acceptable performance (e.g., linked-list versus array implementation).
Self-adaptive (cf. self-updating) data structures are data structures that change their internal state according to a concrete usage pattern (e.g., self balancing trees). These changes are internal, i.e., depending the data. Moreover, these changes are anticipated upon by design.
Other algorithms can benefit from an external change of representation. In matrix-multiplication, for instance, it is a well know performance trick to transpose "the second matrix" (such that caches are used more efficiently). This is actually changing the matrix representation from row-major to column major order. Because "A" is not the same as "Transposed(A)", the the second matrix is transposed again after the multiplication to keep the program semantically correct.
A second example is using a linked-list at program start-up to populate "the data structure" and change to an array based implementation once the content of the list becomes "stable".
I was wondering if there are programmers that have similar experiences with other example programs where an external change of representation is performed in their application in order to have better performance. And where the representation (chosen implementation) of a data structure is changed at runtime as an explicit part of the program. <comment><USER2> Another application area for switching data representations explicitly is Computational Geometry. The abstract reason for this is that the initial representations of geometric objects are highly implicit.

As an example, consider a set of points in 2D specified as a list of pairs of numbers. When you need to find the point in the set closest to a given location the easiest and fastest method is to run through the list and look for the minimal distance. However, if you repeat such a query for different locations while the set of points remains the same every time there are much faster (and complicated) ways to do it: geometric search trees and Delaunay triangulations. These make the implicit structure of the geometry of a set of points explicit. Whether this is actually worth it is a matter of understanding the application and its profiling data.

This can also be seen as 'acceleration data structures'.

</comment><comment><USER3> "Self-adaptive" data structures are fairly common. Splay trees ([http://en.wikipedia.org/wiki/Splay_tree](http://en.wikipedia.org/wiki/Splay_tree)) would be one of the canonical examples, where a read operation causes a node to move up in the tree, hopefully making subsequent reads of the same value faster.

"Representation" changes are fairly common as well. Typically these come about with size. There was some well known data structure (I want to say C#'s Dictionary, but a quick search disproves this) that would use an array for some small number of items (less than 10 or so), then switch to a binary tree because ultimately for a small number of items the array proved to be faster.

<comment><AUTHOR> I was hoping to find more examples of application-level changes, where a developer is undecided between 2 (or more) data structure(s) or data representations and decides to swap back and forth at runtime between both.

The examples you provide are very interesting, but they are what I like to call "internal", i.e., the user is not necessarily aware of these changes.

</comment></comment><comment><USER4> Hard disk fragmentation tool could have been an easy analogy I guess.</comment>


Google Cloud earns defense contract win for Anthos multi-cloud management tool - <AUTHOR> https://techcrunch.com/2020/05/20/google-cloud-earns-defense-contract-win-for-anthos-multi-cloud-management-tool/ <comment><USER2> >> However, today the company announced a new seven-figure contract with DoD's Defense Innovation Unit (DIU), a big win for the cloud unit and CEO Thomas Kurian.

So a single digit Million contract? How is that news at Google scale?

<comment><USER3> It's a little interesting because they backed out of the Jedi contract earlier for ethical concerns.

<comment><USER4> I think it was Maven they backed out of due to employee ethical concerns. I don't know that they were ever a serious contender for JEDI, and they didn't submit a bid.

</comment></comment></comment><comment><USER5> Given the dod budget is bigger than the revenue of google, amzn, and msft combined and with a million employees why can't they just build their own data centers?

<comment><USER6> If I had to guess, it is because the working culture of public organizations (often a lack of motivation/incentive due to lack of competition), combined with tenure-based job security, and artificial constraints (pay structures/levels that don't align with the competitive market) mean that someone like the DoD can't really get something like this done. They wouldn't be able to hire the right talent. If they did hire talent, that talent would need to work in the shadow of existing hierarchies/authorities that aren't suited for the role. Not to mention that bidding processes like LPTA (Lowest Price Technically Acceptable) would hinder procurement with a lot of red tape and poor decision making.

TLDR, because they aren't set up for success like private organizations.

<comment><USER7> I would guess it's less likely to be this, and more likely to be purchasing rules in place that ask them to by default place bids for private organizations to carry out work to meet specifications, and only bring it in- house under exceptional cases or where the bids are very uncompetitive.

These rules often exist as a means of ensuring fairness, as an anti-corruption measure, or to provide enough business to maintain a robust network of private contractors.

</comment></comment></comment><comment><USER8> Came here to read about insiders' objections to a deal with DOD. Nothing?

<comment><USER9> I would assume the loudest voices have already been driven out, given several of the protesters from last year claim they were retaliated against by management.

Employees that create problems for a company usually find themselves outside the company one way or another.

<comment><USER8> I had assumed that there were many hundreds if not thousands of employees that would object. Maybe not--perhaps there were just a relatively small number making a lot of noise in the press.

<comment><USER9> People might be unhappy about it, but without people willing to actually speak up and start a walkout or something, most aren't gonna risk it. The people who Google drove off were the catalysts who would start a walkout over this stuff, instead of just expressing discontent on Memegen.

</comment></comment></comment></comment><comment><USER10> It was well known that at the JEDI bidding, GCP's offering is vastly behind MSFT and AWS.

Note that that does not necessary contradict the original decision to withdraw based on conflicting AI principle.

Edit:

A few things GCP is behind at the time:

* Very weak support team

* Very weak sales team

* Very weak past track record

* Very poor market recognition

* Very limited experience in government contracting

Offering is not just technical features. A product is a combination of a lot of things, and technical items are usually the less critical ones.

<comment><USER11> Can you provide some specifics? I am not refuting your claim.

GCP is my favorite cloud platform to develop on, but obviously the needs of the US government are different from the needs of an individual software consultant.

<comment><USER12> Google/Alphabet employee here, but not affiliated with GCP.

One quick way to get a grasp of this is to take a look at the FedRamp page for various Cloud services providers with IaaS and other offerings to see how many authorizations exist, and at what level:

[https://marketplace.fedramp.gov/#/products?sort=productName&...](https://marketplace.fedramp.gov/#/products?sort=productName&providers=Amazon;Google;Microsoft;Oracle;Rackspace%20Government%20Solutions)

What is FedRamp?

"The Federal Risk and Authorization Management Program (FedRAMP) is a government-wide program that provides a standardized approach to security assessment, authorization, and continuous monitoring for cloud products and services. This approach uses a "do once, use many times" framework that saves cost, time, and staff required to conduct redundant Agency security assessments."

Not all DoD work is classified, but classified data storage, transmission, and processing has strict standards defined by the National Security Agency. There are many levels of information classification, and generally these information levels are not allowed to comingle or information systems are run at a system- high level (i.e. everything in and about a system is handled at the highest level of classification for information the system may contain).

Generally, information systems used by the Department of Defense must be certified and accredited for use by the information owner / equivalent of a CIO-level role (G6/A6/N6/etc).

Not all cloud service providers have facilities and systems designed and certified for classified information storage and processing.

[https://fcw.com/articles/2017/11/20/aws-secret- region.aspx](https://fcw.com/articles/2017/11/20/aws-secret-region.aspx)

[https://www.nextgov.com/it-modernization/2018/03/defense- age...](https://www.nextgov.com/it-modernization/2018/03/defense-agency-begin- moving-classified-data-amazons-secret-cloud-after-protest/146619/)

[https://www.nextgov.com/it- modernization/2020/03/microsoft-u...](https://www.nextgov.com/it- modernization/2020/03/microsoft-upgrades-classified-cloud-offering/164169/)</comment></comment></comment>


Linux Baby Rocker - <AUTHOR> http://www.youtube.com/watch?v=bYcF_xX2DE8&feature=player_embedded# <comment><USER2> Some discussion of this already at:

<http://news.ycombinator.com/item?id=868312>

... but it's nice to see a video of it in action.</comment>


TELL HN: I just switched to Firefox 2.0 and it beats Firefox 3.x by far - <AUTHOR>

I have been complaining about how slow and how memory-crazy Firefox has become for a while...
With just a few tabs open it is already at the 200/300M mark and using lots of CPU.
Yesterday night, I installed the old 2.0.2 Firefox version and I am impressed by how fast it is. Much less memory used and everything loads faster.
Anyone here noticing that? <comment><USER2> If you care about 200 megs of RAM, you have a hardware problem, not a software problem.

If you care primarily about speed, you're using the wrong program entirely. Google Chrome is significantly faster than Firefox.

</comment><comment><USER3> Have you tried FF 3.6?</comment>


This Algorithm Can Create 3D Animations from a Single Still Image - jf- https://futurism.com/algorithm-3d-animations-still-image/ <comment><AUTHOR> This is pretty cool. Amazing how many creative ideas just pop in my head!</comment>


If Steve Jobs was such a bad boss why did so many people work with him? - <AUTHOR> http://www.quora.com/If-Steve-Jobs-was-such-a-bad-boss-why-did-so-many-people-work-with-him <comment><USER2> This is only slightly related so I ask forgiveness in advance. But historical accuracy is a pet peeve of mine.

That said Steve Jobs bought Pixar after seeing the Luxo Jr video (<http://en.wikipedia.org/wiki/Luxo_Jr.>). The true genius behind Pixar is John Lasseter and always has been. Steve Jobs just provided funding.

Don't get the wrong impression. I think it says even more of Jobs in that he recognized a visionary in Lasseter and was smart enough to just get out of his way. And Jobs did make some smart business decisions like selling off Pixar's hardware business. But he was not the visionary behind Pixar.

<comment><USER3> _I think it says even more of Jobs in that he recognized a visionary in Lasseter and was smart enough to just get out of his way._

So, he's a meta-visionary? That's what the _real_ angels are, the ones that succeed, and the rest are cargo-cult wannabes. (Perhaps some also-rans who had a little bad luck?)

I'm beginning to see more and more that people with entrepreneurial mindsets need entire sets of strategies for dealing with people who are without the mindset. Maybe this is the reason why Jobs has a reputation, because his strategy is to not suffer fools.

It seems like most people in workaday communications are accustomed to filtering out unnecessary BS, taking the one or two relevant points and acting on them. I can see how this is useful, but if they ever start working for someone who only sends a few relevant pieces of information, _they're still in the habit of filtering out!_

This can lead to infuriating situations.

An example: I send out an email to my assistants. I need someone to complete a transaction in thus and such a timeframe. They need to get this device from me and meet with the other party. I tell them it's an 88 key MIDI keyboard, I give the product number, and _instruct my assistants to Google it_ , so they know exactly what it is. I give the other party's contact information. Let me know if you can handle it.

I get no answer from one assistant, but the other emails back and says he'll be by to pick it up. He comes by, looks at it, then tells me he can't do it, and looks at me like I'm stupid because it won't fit in his vehicle. ARRRRGH!

I have other examples. It seems to me some people are accustomed to ignoring 75% of communications.

(P.S. The gentleman is no longer my assistant.)

<comment><USER4> Interesting. I think I get stung by this as well - I've been struggling to understand why my clear, detailed, fluff-free emails aren't effective. The naive solution seems to be to pad your emails with bullshit, but I think this would often make them so long that they just don't get read.

One solution I've found is to talk to people in person, but this isn't time- efficient; another is to write a numbered(!) list of questions at the bottom, to force people to think about the things I want them to think about. But neither of these seems particularly elegant; has anyone come up with something better?

<comment><USER5> Too many people write stream-of-conciousness emails, where they figure it out in their head, and don't clean out the cruft after (and if they don't want to read it, why would I)

I think people have evolved in response to this to scan every email for 2-3 actionable sentences and stop once their queue is full. The best I can do is to template the email:

[Pleasantries in on paragraph] -action 1 (in 10 words or less) -action 2 (in 7 words or less) [Status updates and other fluff, they can read it or not]

<comment><USER6> Good point. Another technique I use is to send unrelated items in separate emails. People tend to use the inbox as a todo list, so getting 3 short emails is easier to manage than one long email. Once you act on one, you archive it and move to the next.

<comment><USER3> There are others who just act on the 1st email in a group of 3. Fire those people too!

</comment></comment></comment></comment></comment></comment><comment><USER7> _The gift/curse of the visionary is that they can see the future as clearly as they can see the present._

When Disneyworld opened in 1971, a reporter remarked to Roy Disney, "It's a shame that Walt didn't live long enough to see this."

To which Roy responded, "He saw it before you did."

<comment><USER8> I really like that, but Roy Disney died after Disney World opened. You may be referring to his brother Walter Disney (the 'Walt' in Disney), who died prior to the parks completion.

</comment></comment><comment><USER9> Talented creative people want to work on projects that matter. Steve jobs had the vision to create those projects. They also want to work with people who have ideas that are groundbreaking. Again Steve Jobs provided those ideas. Is Steve jobs a bad boss... I doubt it. It probably depends on who you ask.

This question reminds me of my kid's Jiu Jitsu instructor. People have said he's a jerk and he's received bad reviews online. I have a different view of him and so does my son - he loves his students and expects a lot of them. He wants nothing but the very best you can do and doesn't accept excuses. Does that mean he calls you out sometimes? Yep. Does it bruise the ego and make you feel bad? Maybe. But most of the time he's right.

<comment><USER10> That's an awesome analogy.

</comment></comment><comment><USER11> "...but all this "reality" keeps creating excuses, delays, etc. Can you imagine how frustrating that is if the product is so clear in your head you actually used it last night? Just get the fucker done! Enough excuses!!! Do you have any idea of the change in the world this will have, and if I give a shit about your kids little league game?!? He's not trying to be an asshole. But if he doesn't say it, he's not being true to his vision. It's a big weight to carry."

Wow, how self absorbed can the author be? Treat people around you like crap or you're not "being true to your vision?" Oh no, he's frustrated so it's okay. Of course if any of his employees responded to their frustration in a similar fashion they'd be canned....

<comment><USER12> I don't think the author was so much defending it as explaining the point of view. If you're fanatically devoted to your product, then it's more important than any of the people along the way, with all of the good and bad things that that entails.

<comment><USER3> _it's more important than any of the people along the way_

Uh, no. A widget isn't more important than a person. Maybe the quality of the widget and what it means to the Apple brand means more than someone's _ego_.

I tend towards this value system.

People who equate their ego, their saving face, with their value as a person? There's too much communications overhead involved with this.

</comment></comment></comment><comment><USER13> Sorry, but I'm about to Godwin this thread:

"If Adolf Hitler was such a bad leader why did so many people follow him?"

I think both statements are ludicrous and smell of intellectual laziness.

<comment><USER14> I think you've totally nailed the naiveté of the OP. The reason both statements are ludicrous is that they judge the person in question outside the applicable context. Hitler was a brilliant leader and speaker, but he was a monster in other aspects. Horror stories about Steve Jobs abound, generally coming from people not working day in day out with him. The fact that he is a narcissistic, egotistical guy ("I'll be employee zero, then") has _nothing_ to do with him being a bad boss in this sense.

</comment></comment><comment><USER15> The thing that sets visionary leaders like Steve Jobs apart from your common CEO is threefold: First, and the article went in to this is the clarity of their vision. Second is the ability to inspire people to do more than they think they can. People in these companies often work well above the normal workweek, yet they aren't being forced or intimidated to. It's because they are inspired to do so. Finally, they won't accept anything less than perfection from their team. Steve Jobs was(and is) well known to dress down, or even fire employees if their work wasn't up to standards. Bill Gates apparently had no problem saying that his employees ideas were "the stupidest thing I've ever heard". The first two qualities are what attract the people to work, and keep them there and the last one is what makes their work stand out from the crowd.

</comment><comment><USER16> "sometimes it's a vision other times it's a hallucination"

According to Martin Varsavsky, Steve Jobs hallucinates too. [http://martinvars.com/post/3761365862/mi-dificil- encuentro-c...](http://martinvars.com/post/3761365862/mi-dificil-encuentro- con-steve-jobs) (spanish) reads:

"Steve Jobs insisted european mobile networks were worse than american networks, that Apple invented WiFI and that the iPhone is the WiFi product with more sales. Stuff simply not true."

<comment><USER17> I think Varsavsky is a little in left field, but I can see how the Apple -> WiFi thing got started if you read up a little on some of the experiments that Apple was doing.

</comment></comment><comment><USER18> I will offer a possible explanation that might not be popular. There are certainly bad bosses, but there are many more bad employees. Many employees will not be happy with any boss. These people want a friend and not a boss. Even people outside of this group generally try to avoid confrontation. Avoiding confrontation seems to be the main goal of the average corporate employee and it leads to bad work. I am personally willing to tolerate a lot of flaws in a leader if he or she is actually a good leader. I think that Jobs may fall in that category.

</comment><comment><USER19> Working for a visionary often brings about opinions on opposite sides of the spectrum; you either love them or hate them. This is true for Apple as it is for other tech giants. If you are on board with Steve's vision and can even remotely grasp what in fact you are working towards, you will love it. If not, you will probably hate it.

Much of this stems from an outward opinion of Steve Jobs being a jerk, which will of course vary based on who you talk to. This is true for every visionary.

Many people will tell you Bob Knight is a jerk, but he was one of the best college basketball coaches in history. If you talk to any of his past players that were willing to put in 100% effort and understood what his intentions were, they would tell you they loved playing for him.

</comment><comment><USER20> Here's my question: Is being a bad boss a necessary requirement for being a visionary?

I am betting the answer is no. In my experience you can drive people to work really hard without being an asshole as long as you are willing to share the load.

Caveat: My experience is with < 10 people unlike Jobs and Blank.

Thoughts?

<comment><USER21> I used to get this a lot when I led a division of about 20 people. We'd usually discuss some aspect of leadership, and the classic question is asked:

"Would you rather go to a doctor who has great bedside manner, but isn't very good at medicine, or one that will almost certainly cure you but is an asshole?"

It's a false dichotomy. There are a lot of people, however, who confuse being great at something with a license to be a jerk because in most cases, people will tolerate you in exchange for your greatness.

But it's not an excuse, and I don't care how financially successful you are; if you don't treat other people well, you're not a success. There are plenty of people who manage to do both.

<comment><USER20> Exactly. I think it is a false dichotomy too.

</comment></comment></comment><comment><USER22> Response to headline: If cults are so bad for people, then why do so many people join them?

</comment><comment><USER23> I would guess that what some perceive as "bad boss" behavior is simply unfiltered honesty in communications.

To be as successful as Steve is, one must see the world the way it is, which requires complete internal honesty.

</comment><comment><USER24> The pursuit of perfection is damn hard.

But the process far outweighs the proceeds.

</comment><comment><USER25> considering a choice between wasting your life (very productive between half and 1/3rd of it) under a bad boss or making [technology] history and gaining valuable experience under Jobs ...

Hm-m... Why am i not working under Jobs? :)

</comment><comment><USER26> That's kind of like saying, "if having unprotected sex can kill you than why do Thai prostitutes offer to do it bareback?"

Making money is important. Steve Jobs could literally be the devil and people would STILL work for him because cash is important.

</comment><comment><USER27> The problem with Steve Jobs and the Apple gang is that, they indeed innovate first, but then they stop. The iPad was a revolutionary approach at tablet computing, even if the device was quite dumb. But making your second iPad exactly the same (sorry but a cover and slimmer does not equal innovation) that is just plain ridiculous, especially when they have the capability to make something incredible.

They are just taking advantage of their brand right now, like if they were still the old Apple that struggled to innovate!

The vision and execution is there, it's still Apple, but now they are just taking advantage of their market!

<comment><USER28> Whoa slow down there.

This is the company that was nearly down and out and then came up with the iPod. Then the iPhone and iPad.

How many product categories do you want them to come up with (ok maybe not come up with, but you know what I mean) before Apple is innovative? A company is lucky if they come up with one innovative consumer product and corners a lion's share of the profits.

Besides, they came out with the iPad last year. Their time machine needs some time to recharge before they can pull more gadgets from the future.

<comment><USER29> To fairly clarify, while they may not have created any new product categories with the above examples, they certainly did succeed in redefining product categories, in addition to dominating. :) Perhaps the biggest thing the iPod had that other music players didn't have was a successful online music store. Likewise, iPhone and the app store and multitouch. Carry that over to iPad, compared to what tablets were previously.

<comment><USER27> Come on, the iPad doesn't even have a tabbed browser and they still call it the "best web experience" and I'm not talking about Flash. When you have a full tablet and you still have to quit your program, go find the settings icon, to click on Generla to finaly activate your Bluetooth.... it's just plain ridiculous!

You changed the way people will access mobile information with your first tablet, but don't get stuck with it!

<comment><USER30> Do you think the iPad's target audience even knows what tabs in a browser are? Or cares? It's entire goal is to simplify computing.

<comment><USER31> I would venture to say they do. After all, every major desktop browser has tabs (around 11% worldwide are on IE6, but I also doubt those users are getting iPads). How is a tap and another tap a simplified version of browsing compared to tabs?

<comment><USER30> I'm not saying the iPad browsers window management scheme is better than tabs, I'm just saying most people probably don't use them. I have no definite numbers, but from experience in watching people browse, they have a bunch of windows open and use the Google search bar to type in "facebook".</comment></comment></comment></comment></comment></comment></comment>


GitHub goes to school - <AUTHOR> https://github.com/blog/1775-github-goes-to-school <comment><USER2> I was happy to see that my university decided to self-host a Gitlab server for CS students instead of using proprietary options like GitHub or Bitbucket. The students that set up the server learned from the experience, the instructors got around the problems they were having with Bitbucket's account limitations, and the new undergrads have a great platform on which to learn Git.

I would encourage other educational institutions to do the same. Proprietary software like GitHub is anti-educational.

<comment><USER3> GitHub is just as anti-educational as proprietary textbooks, proprietary class management software like Blackboard, proprietary hardware like Macs or Dells, and proprietary software like Windows and OSX.

You're welcome to your principles, but they're not always practical.

<comment><USER2> I think all of that stuff is easily replaceable, in the context of a CS curriculum at the very least, if only other people cared a bit. I took one class that required use of a proprietary circuit modeling program that I ran via Wine, but other than that I did not have to use any proprietary software to complete my CS coursework.

<comment><USER4> The difficulty with replacing proprietary hardware is that, in some cases, the companies donate it. So you'll have a "dell lab" sponsored by Dell, and it's hard to convince a school to say no to the free equipment and go with another solution

</comment></comment></comment></comment><comment><USER5> We use GitHub to teach Harvard's CS171 [1]. Couldn't recommend it more — we use it for the course website and for managing homework [2] (great for pushing out homework updates). Students publish their work on GitHub and we have a script that downloads all the student repos at the deadline.

[1] [http://cs171.org/](http://cs171.org/)

[2] Here's the first homework: [https://github.com/CS171/HW1](https://github.com/CS171/HW1)

<comment><USER6> Wow, I would do that homework even if it wasn't required. (can't believe I just said that)

<comment><USER7> Consider getting involved in some of the edX courses.

CS169.1 and CS169.2 draw from UC Berkeley's CS169 - Software Engineering and present a course in SaaS. They extensively use Github as the code repository and are really cool assignments to boot.

CS188.1x covers the first half of an AI subject and whilst not using github, certianly was really enjoyable from solving machine learning puzzles. It's in fact probably one of my favourite courses I've done.

It's a great way to stretch your brain by either learning new skills or revisiting old, possibly rusty ones. I try to keep doing 1 or 2 at a time.

</comment></comment></comment><comment><USER8> Apart from proprietary software being antithetical to education - I think that schools never ever should teach a product. It's not necessarily wrong to use products in order to teach something, but it is bad to teach a product. Like, using a book that you have to buy in order to learn algebra is fine (though cheaper/more easily available education is better, of course). But teaching MathCorp[tm] Algebra[tm] (patented by MathCorp[tm]) is not. Any knowledge that requires you to buy a particular product from a particular vendor to make use of is not appropriate for being taught in the classroom/for being a requirement for a passing grade. The school has particular power to force you to learn stuff, and that power should never be used to the advantage of a particular private entity, especially so when that private entity bribes the school by providing the product for free.

<comment><USER9> From my viewpoint, I went to college in order to prepare me for my future. If my future likely includes the use of a proprietary product, then I think it is in the best interest of both the students and the school to teach that proprietary product.

I wouldn't go to a design school that didn't teach photoshop. These days I don't think many programmers will leave college and not use git or github at least once in their career, so I don't see a school using it as such a travesty.

<comment><USER8> I guess the important part is that it should not be a requirement. Offering optional courses on products, maybe, but don't give any credits towards a degree.

After all, why do you expect to be taught photoshop? Because it's a de-facto monopoly! What is one of the reasons for it being a de-facto monopoly? Because it's being taught (as a requirement) in schools! That's positive feedback supporting that de-facto monopoly, and that's bad, as it presents a barrier to entry of new market participants. And it's highly questionable that it is good for the students that they get to depend on a de-facto monopoly for their work, as that, for example, probably makes it more expensive for them to work in the field.

For github, it's similar. Teaching git is perfectly fine, obviously, as that is free software, so the knowledge that you gain there you can use without any restrictions, teaching github is not, as that makes it easier for github to gain customers, at the expense of its competitors, and makes it more expensive for the student to become a customer at a competitor.

</comment></comment></comment><comment><USER10> I work at a development house at the University of Alabama, and we have found that our free GitHub micro account has been a wonderful gateway drug of sorts for learning git. But, having just moved over from an SVN set up to an in- house git system (RhodeCode), I would echo the others who have said that other git tools are better for us than GitHub for teaching git.

Without a doubt, GitHub's educational accounts have been great for our undergraduate students because they have exposed them to great open source code and a community that is excited about development. In short, we have found that the intangible gains have far outweighed the tangible gains of a few private repos. Kudos to the GitHub staff for continuing I make development and collaboration fun and easy.

</comment><comment><USER11> Many here seem to share the sentiment that universities should host their own solution and not use something like this. Perhaps I can provide a different viewpoint, as a student that recently got hired in IT support at my university.

Our current repository server is a thrown together solution that covers git/svn/hg. It's extremely ugly, has no features besides creating and deleting a repository and generally isn't very user friendly.

I immediately started thinking about how I could improve this area, and looked around for various things. As probably most here, open-source and self hosting came to mind as the first thing to look for.

I found GitLab and Gitolite and started reading a bit up on those and the pros and cons of using each, and both compared to GitHub.

 _What I found out_

While self-hosting provides the ultimate control, there is one thing you're entirely forgetting; maintenance. This doesn't come by itself and requires both man hours and also the know-how to do this. The case as often is, it will be underprioritized, you will be left with an outdated version, and that will mean annoyances, bugs and possible new features you're missing will stack up. And that's just the case of nothing going wrong on the server you're hosting it in. There could potentially be data loss, server downtime, server interruption etc.

 _So what should we do then?_

Let someone else take care of it. Throwing all these responsibilities over to someone like GitHub, whose sole function is to drive this service allows freeing up a lot of potentially wasted time, and also allows for the students to be using the newest and best tool for the job.

And for the case of something like GitHub specifically, I _really_ think it's ridiculous to complain about it being proprietary, since it is besides the point entirely. You're teaching the students to use _git_ and to collaborate together on projects. You're making the administrative task much easier with the workflow they provide.

You aren't teaching your students _solely_ to use GitHub, it just removes a lot of extra cruft and allows the students to focus on the actual subjects of the course they are in, instead of having to wrestle with the tools they have to use.

<comment><USER12> There's a legal issue with universities though. While the research being done may be public, they could also involve private corporate entities, restricted data, or patentable information. A lot of people forget that, while universities are oftentimes public institutions, they're also very large bureaucracies. Most of them are very sensitive to how data is handled and published, as incorrect findings, proprietary code, and other leaks can be very costly.

<comment><USER11> I think some of that can be solved with [https://enterprise.github.com](https://enterprise.github.com) (which has an academic discount and offers an "unlimited campus-wide student license").

I can't clearly see how much maintenance you have to deal with though, so that might not be a viable suggestion without disregarding my original complaint.

<comment><USER12> That's a good point, there are enterprise hosted offerings. I'm just pointing out that the sell to higher level university officials to switch off of internal infrastructure to "cloud" offerings (yes, yes, I realize that word is overused) can be rather difficult.

</comment></comment></comment></comment><comment><USER13> If you don't need specific features of Github but want a fantastic place to keep Git stuff, Bitbucket is brilliant. Unlimited free private repositories for up to 5 collaborators, and add+confirm any educational email address to make that unlimited collaborators. [http://blog.bitbucket.org/2012/08/20/bitbucket- academic/](http://blog.bitbucket.org/2012/08/20/bitbucket-academic/)

</comment><comment><USER14> Fantastic seeing this initiative by GitHub. Though I'd prefer an open source solution that they could host themselves, this is a good step in the right direction.

I also don't believe Git is the right tool for this problem. Educators need something tailored much more specifically, and one that reduces the complexity of branching and merging along the way. There's a space here.

<comment><USER15> I'm pretty sure this initiative is geared towards CS students/teachers looking to host their class projects, not humanities teachers looking to host their coursework. In that light, there is no need to reduce the complexity of branching and merging because those are real-world skills that CS students need to learn.

As for a VCS that helps non-technical teachers manage their content, I absolutely agree that there is still a need for that but that's a completely different problem space.

<comment><USER16> There is a vast gulf between "CS students/teachers" and "humanities teachers looking to host their coursework". Like, the entire landscape of computational science, statistics, anything with "quantitative" in front of its name...

</comment></comment></comment><comment><USER17> Tech companies that offer discounts usually cater to college students. What about young professionals who want to continue learning?

Most students receive financial support from their parents and have ample disposable income for products like GitHub [0,1,2]. Recent grads who want to keep learning about technology are more in need of discounts.

I'm not discrediting GitHub's campaign — I'm happy that the company is reaching out to students. It's just that the trend toward offering students discounts is somewhat misguided and shortsighted.

[0] [http://news.byu.edu/archive12-apr- payingforcollege.aspx](http://news.byu.edu/archive12-apr- payingforcollege.aspx) [1] [http://www.nytimes.com/2013/01/15/education/parents- financia...](http://www.nytimes.com/2013/01/15/education/parents-financial- support-linked-to-college-grades.html?_r=0) [2] [http://www.usatodayeducate.com/staging/index.php/choice/who-...](http://www.usatodayeducate.com/staging/index.php/choice/who- should-pay-for-college-parents-or-students)

<comment><USER18> That's an incredibly classist point of view. I have plenty of friends at a top institution that can barely afford rent and to eat after their 2 hour commute. If they had to, sure, they'd find a way to sacrifice something to pay for github, but it surely isn't "ample disposable income." Please look outside your bubble.

<comment><USER17> I think you might have misunderstood my comment. Consider where your friends will be _after_ they graduate.

If they're having financial trouble now, those trouble will likely be exacerbated when they first try to enter the workforce.

I'm advocating that companies _not only_ extend financial support to students, but offer ongoing assistance to those students as they try to start their careers.

I think your friends - and all young professionals - could benefit from those incentives.

</comment></comment></comment><comment><USER19> Github, I use you for all my \LaTeX papers, programming assignments, masters projects, whatever else. It is really helpful.

But I don't like that I can only have 5 private repos. Making my work public could be an honor-code violation and a violation of the professors trust, that I won't make solutions available to their projects. On top of that, I'm usually working on more than 5 projects at any given time.

Now that I'm finishing graduate school, this pressure is especially high. If I work on something in github, the other grad students will undoubtedly see it, since we are all gitbuddies. Does github have any talk of raising the private repo ceiling on education accounts from 5 to >5, or should I just remove my work while it's done?

<comment><USER20> You can have a private repo called writing with a folder for each project. Not elegant but it works...

<comment><USER16> This too. I have an "Archive" folder, and before that one called "Dissertation" which was in reality like, 8 different projects.

<comment><USER19> This is a good solution. Have a archive private repo that everything I'm done with goes in. Perfect.

<comment><USER21> I just git clone old projects into a Dropbox private folder. I can easily keep the whole repo history even if there are multiple branches, but it doesn't take up GitHub usage at all. Of course, if you had Issues or the like, none of these solutions really work.

I do wish GitHub had a way to deactivate projects to save money. Maybe put it in a read-only state, still count it against your disk quota, but you'd have to make it active to actively work on it and update it. I feel like a lot of systems do similar things (eg. charge per user but allow deactivating users in case they go on leave or quit but may return--pause paying for that user without losing the data in case you want to reinstate.)

</comment></comment></comment></comment></comment><comment><USER22> Side note:

When you have 15 links in one sentence where every word is a link to somewhere and the word actually has no meaning, then I think it's time for a bullet list. It might just make people actually click a link. But all those links in one sentence are of little help IMO.

<comment><USER23> This is an annoying meme I've seen before, but I don't know what it's called.

<comment><USER24> Overlinking in Wikipedia parlance.

</comment></comment></comment><comment><USER25> Completely off topic: The GitHub Education page shows a blackboard with a picture of a chemistry set up. Did anyone here on HN, _ever_ , do a school project that involved a setup that looked like that? I was always jealous of that stuff, it looks so awesome! With tubes and big spherical bowls and steam and fire and bubbles, wow! Can I send my kids to a school that has that?

<comment><USER26> It's been a long long time, but I'm pretty sure that looks like the set up used for alcohol titration ... which at least at my school we did in teams for 4 or so. Did you not do this? If I did it, I'd assume that it's a standard part of the UK Curriculum (though again, that was some time ago).

A quick google appears to back me up to some degree?[1] (See "Student Activity 3")

[1]: [http://www.scienceinschool.org/2012/issue24/wine](http://www.scienceinschool.org/2012/issue24/wine)</comment></comment>


Ask HN: Is there an app that reviews/rates individual menu items in restaurants? - <AUTHOR> <comment><USER2> Oink from Milk was an app that sort of did that. Heres a video demo: [https://www.youtube.com/watch?v=5xADESocujo](https://www.youtube.com/watch?v=5xADESocujo)

They unfortunately didn't last to long. Maybe they were to early?

</comment><comment><USER3> I don't know of any, but seems like a great app idea. People are often looking for best <insert-food-name> in the area as opposed to "best restaurant in the area".

</comment><comment><USER4> I think maybe people wouldn't eat something here, other there. And not it's trouble for people rate restaurants, even menu items

<comment><USER5> My favorite local Chinese joint is like this though. Some items are home runs and some items are wild pitches into the backstop.

</comment></comment><comment><USER6> I wanted to build this in 2011, didn't finish.</comment>


Naked stripped bare - startup runs out of cash, enters liquidation - <AUTHOR> http://uk.techcrunch.com/2008/05/28/naked-stripped-bare-startup-runs-out-of-cash-enters-liquidation/

<comment><AUTHOR> Are there any stories of Silicon Valley start-ups getting themselves into a similar state to this with a product at a similar stage?

</comment><comment><USER2> didn't look like they were very scrappy from those pictures

<comment><AUTHOR> I'm getting the feeling they had too much cash too early and didn't have a good balance of hacker founders. They had two (excellent) UK web agencies working for them that wouldn't have come cheap.

<comment><USER3> Plus they were working in Clerkenwell, London (around the corner from my work offices) and rent around here isn't cheap. Did they really need 12 employees to launch?

</comment></comment></comment><comment><USER4> I think the story is a little strange with the divorce forcing a freeze on the invested money. It sound more like the investor didn't want to pay, as there are 10 other similar products/sites and their application cost much but didn't deliver much.

</comment><comment><USER5> Sure wish I have enough money to spring for all those Cinema Displays and fancy web agencies to contract work out to.</comment>


Broadsheet: Create Stylish Immersive Pages - <AUTHOR> http://broadsheet.io/

<comment><USER2> Is the app completely broken on Firefox? I choose "Blank page" template and I just get gray area which I cant interact with.

<comment> tech-no-logical same here (latest ff beta). all the 'try before you buy' templates result in a non-interactive grey surface. no errors on the console.

</comment></comment><comment><USER3> Good work on this! Cool app and very easy to use, can definitely see it spreading. I think it would be awesome if you added video support since your landing page has a video and it's very popular to use background video these days. Also, dog-fooding and making building your own landing page in broadsheet seems doable and cool.

<comment><USER4> Thanks! We actually did build the current landing page _in_ Broadsheet. The background video is just an animated GIF!

Addding background video support for other formats is on the road map!

</comment></comment><comment><USER5> Played around with this a bit and think there are some really cool bits and generally a cool idea. Out of curiosity who is this specifically targeted to / who do you think this product will greatly improve the lives of?

<comment><USER6> Thanks! We made it for people who want to make pages that aren't easily made in common CMS tools and page builders. It's for posting quick, focused content experiences that can be easily consumed without distraction.

For a more technical read about how it works, check this out: [http://xoxco.broadsheet.io/how_broadsheet_Works](http://xoxco.broadsheet.io/how_broadsheet_Works)

<comment><USER5> It seems like you are a short jump away from making it a WYSIWYG editing experience. Any reason you went the sort of hybrid markdown approach instead and/or any plans in the future to have direct WYSIWYG editing?

<comment><USER4> WYSIWYG editors hide too much of the important information from the user. We want designers and developers to be able to see the real code and content so they aren't dealing with mysterious hidden complexity.

</comment></comment></comment></comment><comment><USER7> Hi. We're trying to test a widget embed in your site, but it seems the iframe is possibly being embedded in another iframe, when in the site editor mode. Which is strange, because when the page is published, it actually displays the widget: [http://testandu.broadsheet.io/544a10fa5065790200338377](http://testandu.broadsheet.io/544a10fa5065790200338377)

On our platform we're testing the referrer to make sure there's no unauthorised embeds, we cannot access it hence we cannot preview widget in the site editor mode.

<comment><USER7> Is there a way you can send the referrer to the iframe in edit mode?

<comment><USER4> We'd love to help figure this out. Can you email firstname.lastname@example.com?

<comment><USER7> It's fine, we've done a change so that it works. ;)

</comment></comment></comment></comment><comment><USER8> Giant video headers are a terrible trend, its akin to flash intros but at least then it wouldn't cause your eye to constantly drift to the background making it hard to navigate and use the page.

</comment><comment><USER9> "Launch Beta" is taking very long, HN effect?

Still, don't hide the CTA in a small button at top. It needs to be at least visible at the bottom.

</comment><comment><USER10> Great product idea! Is the aim to focus on individual pages, or will there be a seamless way to integrate your Broadsheets?

</comment><comment><USER11> hard to tell what Broadsheet is and why anybody should sign up . Perhaps, a couple sentence summary might help?

</comment><comment><USER12> Cool, but: I dont want to be the product. Give me a price or FOSS it - otherwise GTFO.

<comment><USER4> Everything you create in Broadsheet is yours! There's an export option that will create a .ZIP file containing the raw HTML, CSS and images without any link back to Broadsheet itself.

<comment><USER12> thanks for the tip!

</comment></comment></comment><comment><USER13> Yeah, it's not exactly clear what it does.

</comment><comment><USER14> The main page has a lot more information than the link (just do [http://broadsheet.io](http://broadsheet.io)) - it appears to be a DTP-type service for authoring web pages.

<comment><USER15> This really should have been the submitted link. The submitted link is almost completely useless for anyone who doesn't already know what Broadsheet is. The real homepage is beautiful and does a pretty good job explaining what it is.

<comment><USER16> Ok, we changed the url to that from [http://app.broadsheet.io/#/home](http://app.broadsheet.io/#/home).</comment></comment></comment>


Why I decided to ditch Apple - <AUTHOR> https://medium.com/@icflorescu/why-i-decided-to-ditch-apple-dcf502bed28a <comment><USER2> Next story will be about Windows 10 and WSL? ;)</comment>


Judge Denies Oregon's Request for Restraining Order Against Federal Officers - <AUTHOR> https://www.npr.org/sections/live-updates-protests-for-racial-justice/2020/07/24/895285174/judge-denies-oregons-request-for-restraining-order-against-federal-officers <comment><USER2> ""Because it has failed to do so — most fundamentally, because it has not shown it is vindicating an interest that is specific to the state itself — I find the State of Oregon lacks standing here and therefore deny its request for a temporary restraining order," he concluded."

<comment><USER3> I thought states had jurisdiction over policing in their state.

<comment><USER4> Not over federal agents. Same reason why Arkansas couldn't prevent the Eisenhower administration from using US Marshals to enforce desegregation in Little Rock in 1957. (Or Army paratroopers, as per the Insurrection Act of 1807.)

</comment></comment></comment><comment><USER5> > Protests against racism and police brutality in Portland

That's certainly one way to characterize the activity downtown for the past 50+ nights.</comment>