Are Web Development Search Results Being Manipulated? - <AUTHOR> http://www.impressivewebs.com/web-development-search-results-manipulated/

<comment><USER3> oh yes, subdomains gone wild have to do with SEO, but not in the way outlined by the author.

duplicate (sub)domains resulting in duplicate sites with duplicate pages mostly have a negative impact on the performance of a webproperty in the SERPs.

why?

a link to www1.example.com does not automatically count as a vote for www.example.com, a link to www.example.com does not count as a vote for www1.example.com, that means they now how two websites both with one vote, instead of one websites with two votes.

additionally, you have two websites which are in competition to each other, and each of these websites has duplicated webpages which are in competition to each other. both websites and webpages usually perform poorer - if google has a doubt which of these duplicated pages on these duplicate sites is the best page to point the user to (said that, google is pretty good in stripping doubt out of the equation for subdomain duplicate pages issues)

if you have a webproperty with a "subdomains gone wild" issue, it is best practice to canonical (either via the canonical tag or via HTTP 301 redirect) them to one (sub)domain. it almost ever (depending on how big the issues was) results in a better performance of the canonicalized webproperty - <USER2> definitely helps the site on the (organic) linkbuilding front.

there are thousand reason why a webproperty can have a subdomain gone wild issue (it was (once upon a time) even a common black hat practice of spamming google with subdomain gone wild duplicate web-properties of the competition sites if possible (and it's possible with sites with a wildcard subdomain setting (i.e. _wildcard_.w3schools.com))

but in most cases "subdomains gone wild" does not have a positive impact on the SERPs. (blocking results is not one of this cases.)

but yeah, what the real issues with w3school? why does this sh/t rank so well?

well first of all it should be said: "you are not statistically significant" just because you (in this case we, the HN readers) are not happy with w3school does not mean the average searcher (searching for HTML web dev stuff) is not happy with it. they are happy (hey, they don't know better) and they use it like crazy. they are happy with what they find. as google is measuring SEPR "long click" very effectively they know exactly how well the average search users uses a page/site. if all users would click back immediately, would not stay long on the page, w3school would not be so dominant as it currently is.

secondly: links - i just did some backlinks check ons some obscure w3school URLs, they all have links. now you might say: oh they buy links... does not look like it, they have links from old forums, new forums, blogs, .edu domains, ...

and: where is the competition? mdn does a great job, but it is a resource for developers, for people who know what they are doing. w3school is a great resource for people who do not know what they are doing or what they are looking for - and w3school has a special page for every single thing / tag that we don't even bother to mention anymore (it's outdated, it's old, some say ugly, but it's there and has a unique description text, a unique example on the page) - that means they have a page for most of the people using the internet interested in HTML, people which think of HTML as a "programming language" - for them w3school is the perfect product, no competition in sight.

what's the solution:

in the xoogler book "I'm feeling lucky" the author describes a case where a wrong product keeps ocurring again and again for popular product searches. they tuned the algorithm again and again, the results got better and better, but the product showed up again and again. the engineers didn't know what to do. one day, it was gone. what happened: one engineer just bought the product. it wasn't listed in the store anymore. the issues was fixed.

fazit: somebody who cares about the internet (w3, mozilla, google, adobe, microsoft, opera, ..) and profits form good, well structured HTML and working javascript should just buy it (can't be that expensive).

<comment><USER4> Nested parentheses: necessary in lisp; kind of a bitch when trying to read a comment.

</comment></comment><comment><USER5> It's nothing black hat going on here. W3schools is just using wildcard subdomains and whenever people are accidentally linking to wwww.w3schools the Google bot picks it up.

I love W3schools btw. Got me into coding and I still use it for reference. Hate me all you want but I'm tired of people bashing them for no reason.

<comment><USER6> W3schools is a cancer. They have old, outdated information. Their website, their content, and their business model is all a throwback to last decade. They sit atop of the search results, doing _nothing_ , and raking in cash while providing a poor service. Meanwhile, their very dominance sucks all the oxygen (page views, ad dollars) away, ensuring that better competitors can't grow.

What redeeming feature do they have? If you aren't easy to use, accurate, comprehensive, or responsive...how good a reference site are you?

I've yet to see anyone bash W3schools for no reason, but I see plenty of people defending them for no reason.

<comment><USER7> Is there another alternative out there? I feel like the mozilla developer docs are the only thing that comes to mind offhand.

<comment><USER8> Tizag, which is second in the results, is a pretty good resource.

<comment><USER9> "Tizag, which is second in the results, is a pretty good resource."

Their Perl tutorial set is pretty terrible. They call it "PERL" (it's Perl), they believe the latest stable version is 5.10 (it's 5.14) and the code samples are simply awful.

</comment></comment></comment></comment></comment><comment><USER10> >They have as much power in web dev search results as Wikipedia has in regular search results. That is just wrong.

Except they've been providing useful info for longer than Wikipedia has been around. Sounds kind of right to me. They may not be as current as they used to be, but for the 12 years that I've used them they have helped fill in my knowledge cracks and I've appreciated it.

I don't understand the hate. If you really want someone to hate, hate the W3C for making their info so cryptic or non-existent for years that places like W3Schools had a market.

<comment><USER11> Mostly that the Mozilla docs are far superior, and it hurts all of us if newbs continue to hit up really confusing documentation.

</comment></comment><comment><USER12> May I suggest we all block w3schools.com at: <http://www.google.com/reviews/t>

Google states that it "may use everyone's blocking information to improve the ranking of search results overall" so this may be the best way to take action.

</comment><comment><USER13> I'm also sick of seeing their site on the first page of google, most of the time their content is completely out of date.

You can permanently block them from search results on Google by visiting: <http://www.google.com/reviews/t> and entering <http://w3schools.com>

<comment><USER14> I have had both <http://w3schools.com> and <http://www.w3schools.com> in my block list for months, but w3schools still show up in my search results, and with www and not wwww or www1 or something like that. :-(

</comment></comment><comment><USER15> This is honestly why I use duckduckgo on any of my dev computers. They don't always have best results, but for stuff like java(script) not only do they have the !js/!java syntax for going straight to the docs but they also don't have over-seo'd websites cluttering up their results.

Edit: Also On DDG the same search would have been !js replace and you would have seen this page : <https://developer.mozilla.org/en-US/search?q=replace>

<comment><USER13> I like DDG, but I'm finding it hard to break the Google habit.

I did just check out their settings area and it offers a lot of customisation which I love. I might just give it another (duck duck) go!

<comment><USER16> The trick is to always use DDG, but just add !g to search google when you're not satisfied (or !gi to search google images). You start to use google less and less after you get used to the DDG layout: At first it seems (for some reason) like you're getting less useful results on DDG - but after a while you can see you're getting pretty much the same results, in a different format!

</comment></comment></comment><comment><USER17> I don't have as many problems with W3Schools as the author of this and many comments below here. What you say is true, but _their target audience is mainly newbies, not professionals who know what they are doing._ They might provide some outdated information, some things may even be false. But do they deserve to be called a cancer? (Read it below in the other comments, and that wasn't the first time I read it.) After all, doesn't every website with lots of information make mistakes?

Also in the case of the author, who was looking for about the second most basic Javascript method there is, the result seemed appropriate. He didn't even have to click the page, the info was right there in front of him.

Don't get me wrong though, I do agree that their different subdomains are a wrong thing to do, and I fully agree if Google decides to punish them by blocking/lowering results for *.w3schools.com for a couple months. I also agree that the Mozilla Developer Network may be a much better resource, both for newbies and professionals. But if you are that much against W3Schools, why don't you use the search function of MDN instead of Google's general search?

<comment><USER18> As you say, they contain outdated and _out right false_ information.

Now, it's not merely being wrong once in a blue moon or one or two articles being a bit behind the curve, but the sheer egregiousness of its mistakes plus the lack of action despite being shown to be incorrect (see: w3fools.com) which in the eyes of many qualifies it to be called a "cancer"; certainly in the realm of web development resources, that label seems rather valid.

</comment></comment><comment><USER19> Having all of these mirrors of their domain indexed certainly isn't helping W3schools from an SEO perspective.

It is highly unlikely that this was done intentionally, just wildcard subdomains set as many have already said.

Read the last few comments on the actual post for good laugh.

</comment><comment><USER20> Having two or three domains with the same content should be OK. After all, many sites have a www and simply a top level domain with the same content. But having more than that should be penalized by the search engine gnomes.

<comment><USER21> Why not use a 301 instead of having duplicated content?

<comment><USER20> That's what I do, but I'm just saying a lot of sites duplicate the content without intending to do anything nefarious.

</comment></comment></comment><comment><USER4> Paging Dr. Cutts....

</comment><comment><USER22> I think Google classifies sites in different buckets. There's the "trusted" sites - the brand names that will only get penalized by their algorithms if they do something very very wrong, and another bucket, where you get less leeway. W3Schools is in the first.

Of course, big brands do get penalized like JCPenny and Forbes, but this often happens when they're called out by the media. Google for the most part, since Panda have said they want to rely more on algorithms rather than on handjobs

<comment><USER23> which leaves us the questions:

1) why is w3school in that list?

2) if they got it because lots of (outdated) sites are linking to them, why do their alternate subdomains get a similar bonus?

3) this whole privileged "authority" bucket crap stinks. it used to be that a really good sub-page on somebody's geocities site could be the no.1 go-to first result for a certain search topic. why? because loads of people that knew it was good would link to it because it was just that good of a comprehensive resource. hearing more and more about this new ranking method makes me wonder whether it's even _possible_ for a small guy to come up top in the results like that. And it's not so much that I feel for this small guy, but rather that I _know_ I'm missing out on a lot of _honest_ good web content that Google simply isn't showing me.

<comment><USER24> > this new ranking method makes me wonder whether it's even _possible_ for a > small guy to come up top in the results like that

If you search for "Remote Unix" on Google (at least for me), a post on my humble blog is the second result. This isn't exactly the narrowest search term, and I'm certainly no juggernaut of a site, so I take that to mean that small random-ass pages can still rank well for a query.

</comment></comment></comment><comment><USER25> Aren't all search results manipulated if you think about it - that is what the SEO "experts" do. And I think the right word is "gamed".

</comment><comment><USER26> w3schools.com runs google.api's and hosts ads using Google services.

This very day, I have it on good authority that their ability to game Google's search algorithm is entirely coincidental.

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

</comment><comment><USER27> This is a clear violation of the webmaster guidelines - the subdomains should get swatted by google soon.

<comment><USER28> How do we report that to google? Interestingly, I googled that, but couldn't find it :S

<comment><USER29> The same way you report anything to Google - you whine on your own blog or kick up a stink on social media, and hope a Google employee who cares notices…

(Or, I suspect having a $100k+/month Adwords buy probably gives you a magical number to call.)

<comment><USER27> Actually Google works pretty hard to keep the Adwords and web spam teams separated; they are discouraged from talking to each other at all.

</comment></comment></comment></comment><comment><USER30> Or maybe they are just trying to parallelize downloads. [http://code.google.com/speed/page- speed/docs/rtt.html#Parall...](http://code.google.com/speed/page- speed/docs/rtt.html#ParallelizeDownloads)

</comment><comment><USER31> This certainly would explain a lot. I don't even see the option to block that site, though I have blocked a few others before. It doesn't seem to do anything at all. Bigresource.com is my nemesis.

<comment><USER32> I believe you can only block a site if you click a link and hit back within a certain amount of time.

<comment><USER33> Plus you need to be logged into google account

</comment></comment></comment><comment><USER34> Now, this is going to bring them even more back links to make sure that they remain at the top once again.</comment>


Run your end-to-end encrypted chat server using Matrix and Riot - <AUTHOR> https://blog.cryptoaustralia.org.au/2017/03/21/run-your-end-to-end-encrypted-chat-server-matrix-riot/ <comment><USER2> > You might get a python-cffi package conflict error at this point which will > cause the matrix-synapse install to fail. If this is the case, we'll install > Aptitude (an alternative Debian package manager) to help us resolve the > conflict semi-painlessly.

An easier way to resolve the conflict is to just run "apt install python- cffi/jessie-backports".

<comment><AUTHOR> Thanks for the tip, corrected :)</comment></comment>


Google Receives $25 Million in Equity Funding (1999) - <AUTHOR> http://googlepress.blogspot.com/1999/06/google-receives-25-million-in-equity.html <comment><USER2> "A perfect search engine will process and understand all the information in the world," said Sergey Brin, Google president and co-founder of Google. "That is where Google is headed."

Wow. Sergey is still after it. :)

</comment><comment><USER3> What was their traction and valuation when they raised this round?</comment>


Context switch logging with the Windows Event Tracing API (2014) - <AUTHOR> https://mollyrocket.com/casey/stream_0029.html <comment><USER2> This API is for people (both program authors and users) who really know quite well what they're doing, for very rare occasions, and the alternative/status quo was to not be able to get this info from the kernel at all. I imagine someone at MS thought they did a favor to people doing performance optimization by giving them something instead of nothing, perhaps they even had to fight to include this feature in the product because obviously Windows would sell rather well without the feature. They must have had a bad day reading this criticism.

(I'm not saying "poor Microsoft" \- it's definitely not poor - and I'm not saying "you should thank people for whatever API they give you" \- a lot of programs/features do more harm than good - and I'm not saying someone shouldn't vent having had a lot of time burnt by some ugly API. I'm saying specifically that this here is a dark corner of the OS that the API in question sheds at least some light on and I have a hunch, perhaps an entirely mistaken one, that it was someone's pet initiative and they thought it was definitely better than nothing. "Little did they know." To take a simple example of the other kind of API: sprintf, the version that doesn't take a buffer size, is a really bad API because that's something everyone's gonna use a lot and you just shouldn't give this kind of thing to people (give them snprintf at the very least) and you certainly can't be excused by "one should know what they're doing" in this case because it's between hard and uneconomical to use safely while passing the buffer size is the obvious thing to do, also one seems entitled to care-free string formatting, definitely 100x more so than care-free kernel status monitoring on the grounds of it being something many more people do much more often.)

<comment><USER3> Normally, I'd agree with your optimistic assumption, but having spent a bunch of the early to mid 2000s writing code for Windows applications, the oddness of this API relative to the simplicity of what you're actually doing was, IMO, nearly universal across Microsoft, including for APIs (like Direct3D in the first couple of releases, DirectShow, COM in general from any non-Visual Basic language, etc) that were wholly intended to be public facing APIs by their very nature.

I can't speak to the conspiracy-theoryish idea that Microsoft wrote bad APIs on purpose to make it easier to compete with other software companies at the application level, I suspect the issues were more subtle than that (an overly bike-sheddy code review culture, maybe?), but I did find them nearly universally bad to use as a programmer for a Windows "ISV" at the time.

Having said that, most modern Microsoft/Windows APIs I've used have been quite sane. Not bashing Microsoft in general here, just their APIs from about the mid 90s to the mid 2000s.

<comment><USER2> I've used Win32 (I guess calling it that in the 64b era dates me) including some of the COM stuff, though I guess not as extensively as you did (TFA definitely brought some memories, the stuff looks a lot like the usual Win32 stuff.)

I think it's generally hard to make an easy-to-use API in C, unless the memory management involved is really trivial. (Let's ignore C++ for the moment including Microsoft's attempts like MFC and ATL, on the theory that binary compatibility issues make C that much more practical than C++ for this kind of thing.) IMO say poll or select (and the rest of the socket API, actually) aren't a picnic, either, and the only way to have a nice experience with these is by using a higher-level wrapper, and that's because everything involving variable-sized data structures, or any sort of data structure nesting, or literal initialization of this sort of thing, or lifecycles and memory management, or callbacks with private state, etc. etc. is just gnarly in C. (In C++ everything of course is just ducky and hence we never tire of articles discussing why smart pointers should really be passed by reference and shared_ptr is as good as gc except it's slower if used throughout and it doesn't work with circular references and don't use it unless you really have to etc. etc.) I haven't used the standard X C API but I glanced at it and it didn't looked very appetizing; that Microsoft's C API for GUI and OO looks worse than most of the standard Unix APIs kinda results from MS's APIs doing more, IMO, and X in particular, or Motif, which do more of what Win32 does, do not seem superior to Win32 in terms of usability, though if someone with experience in both strongly disagrees I'd take their word for it.

Now if you're saying that their _C_ APIs of today are better than my argument is off. If you're saying that say writing a Windows program in C# is better than a C/C++/VB COM-infested program, then I think it's more of a testament to the strength of .NET/similar runtimes than anything else.

</comment></comment></comment><comment><USER4> If by "worst API ever" he means "didn't do it the way I'd do it", he might be right. But if what he really means is "biggest pain in the arse to use", I give the crown to the AirWatch API. Not only do few of the functions work they way that they are documented, the sample code will never work (nor is it even close to a representation of how one might use it in the real world"), and my fave: you have to misspell the parameter name going in, but when it comes out it will be spelled right. So my code is littered with "no, that's not a typo; it's what the API requires" and "don't forget to spell the parameter correctly when referencing the return value". What amounted to maybe 100 lines of code against that API took me _days_ of experimentation and cursing the useless docs. On our internal wiki, I documented what I was writing with a preface: "in 30 years of writing against APIs of all shapes and sizes, including ISAM data engines on IBM 370 mainframes from the 70s and open source projects written by some dude during an all nighter of coding and bong hits, the AirWatch API is by far the most steaming pile of poo I've ever had the displeasure of working with."

To me it's obvious that no one within the AirWatch organization ever used the API. They couldn't without running into the egregious bugs I have. My suspicion is that someone said "we should have an API", wrote a spec and shipped it offshore, then never checked the work that came back.

</comment><comment><USER5> ETW isn't supposed to be written like this at all. MS has entire codegen toolchain that lets you define events in an xml manifest as part of your build process. This codegens a C header file which lets you fire events in your own code with a simple function call.

When you want to correlate events from your own code and OS events you use a tool like XPerf which knows the OS events and can read your application manifest to get strong typing on the events your application fires. This also lets you take traces on deployed software on customer machines.

If you want to roll your own event consumers you can do that too. But XPerf probably already does what you want.

This all existed back in like 2010 when I was using ETW. I'm sure the tooling has only gotten better since then. So yeah you can go write your own bad incomplete version of XPerf and not leverage your existing build process and MS tooling. But then is the API really bad? Or are you just not googling correctly?

<comment><USER6> It has gotten much better since then. These days the preferred logging API is the Tracelogging API [https://msdn.microsoft.com/en- us/library/windows/hardware/dn...](https://msdn.microsoft.com/en- us/library/windows/hardware/dn701953\(v=vs.85\).aspx) . No schemas, no XML, no build integration required, no decoding problems.

As for collecting logs, WPR is currently the best tool.

There's a great .NET library for both logging and reading recorded events. [http://www.nuget.org/packages/Microsoft.Diagnostics.Tracing....](http://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.TraceEvent)

<comment><USER7> How is that API supposed to be used from C (not C++)?

<comment><USER6> This page has sample code in both C and C++, look at the #ifdef's: [https://msdn.microsoft.com/en- us/library/windows/hardware/dn...](https://msdn.microsoft.com/en- us/library/windows/hardware/dn904622\(v=vs.85\).aspx)

</comment></comment></comment></comment><comment><USER8> I think most of the author's comments apply to the Win32 API in general. Windows game developers are probably among the few tech demographics that still have to encounter it on a regular basis. Having written an entire game to the Win16 API and then later ported it to Win32 I lost a significant chunk of my life spent in drilling into GDI and DirectDraw (I think that is what it was called then) structures and entrypoints. Pretty much the whole native API looks like his examples.

I also thought it was perhaps a tad strange to equate CSS, DirectShow, and the Android SDK as examples of tough "APIs" to master. I get his point, but those are three pretty wildly different levels of abstraction there.

<comment><USER9> Win32 API is the most horrendous collection of badly named, nonsensical types and functions I've ever encountered in my career.

Back in the mid 90s I was learning how to program and understanding a Win32 "Hello world" was a royal pain compared to everything else I was doing. Functions with more than 8 parameters were the norm, structs with tens of members had to be manually initialised before calling them. And don't get me started on the WPARAM/LPARAM idiocy.

<comment><USER8> Easy to call it idiotic today, after twenty years of evolution, but it's a little silly to do so. The windows API was written in C, and as such they needed some way to accommodate multiple dispatch in the message loop using statically typed parameters. That same entry point handled literally hundreds of different message types for every operation in the system. From my perspective it was pretty well designed for its time.

<comment><USER10> SDL is written in C, and it has a much more pleasant way of dealing with heterogeneous event types. There is a struct called SDL_Event, which you fill by calling SDL_PollEvent() until there are no more events to read. The struct is a (discriminated) union of all the possible event types. (It even wraps the Win32 API, so it is very directly comparable -- it is returning the same events!)

[https://wiki.libsdl.org/SDL_PollEvent](https://wiki.libsdl.org/SDL_PollEvent)

</comment></comment></comment></comment><comment><USER11> Previously on HN: [https://news.ycombinator.com/item?id=8146124](https://news.ycombinator.com/item?id=8146124)

</comment><comment><USER12> Somewhat related, Jeff & Casey take down another MS API: How to draw a rectangle with Direct2D.

[http://braid-game.com/news/2009/01/the-jeff-and-casey- show-o...](http://braid-game.com/news/2009/01/the-jeff-and-casey-show-on- visual-studio-2010-and-direct2d/)

<comment><USER13> Most of that sample is actually how to deal with the Window API to get a window that redraws itself when resized. All that has nothing to do with Direct2D. Drawing the rectangle is just three lines, actually.

</comment></comment><comment><USER14> Another oldie-but-a-baddie:

[http://www.thejaywalker.net/2010/12/system-v-semaphores- how-...](http://www.thejaywalker.net/2010/12/system-v-semaphores-how-not-to- design.html)

<comment><USER15> Oh, they're not _that_ bad. It uses the ioctl() metaphor. I'm surprised somebody who's read ALP doesn't see that.

<comment><USER16> ioctl() isn't a metaphor, it's a sin-bin for things that don't fit in the file metaphor.

<comment><USER15> I'd agree if there were no codes for READ and WRITE under the ioctl() rubric :)

</comment></comment></comment></comment><comment><USER17> So is this badness from over-engineering, or from complexity due to other parts of the API?

<comment><USER18> IMO, it looks like the API carries alot of heritage. It clearly contains 'layers' fo crap with different design patterns that were added over time.

They should simply make a new one.

</comment></comment><comment><USER19> Yep, it's a difficult API, which has unfortunately meant the functionality, which works amazingly well, hasn't been learnt or adopted as much as it should have been.

However reading this, it seems the author simply wanted to collect trace information. It's probably a documentation issue, but typically you would just use tools like xperf or logman to collect and analyze traces based on in built Windows providers. There's no need in this use case to utilise the API directly at all.

<comment><USER20> > You can use tools like PerfMon to view logged information about your game, > like how much working set it was using or how much disk I/O it did. But > there is one specific thing that directly accessing Event Tracing gives you > that you can't get anywhere else: context switch timing.

<comment><USER19> PerfMon != logman/xperf, which exercise the same API this guy was struggling with.

</comment></comment></comment><comment><USER21> I thought this might be about the (old) Java Date API (which also inspired the JavaScript API as well):

[https://stackoverflow.com/questions/1969442/whats-wrong- with...](https://stackoverflow.com/questions/1969442/whats-wrong-with-java- date-time-api/1969651#1969651)

As it is, it's a JavaScript laden blog about a Microsoft Win32 API and is virtually unreadable, so there's not much point in following the OP link.

<comment><USER22> I had no problem reading it on my mobile phone. Did you have any comments about the content of the article?

</comment></comment><comment><USER23> Was expecting this to be about Paypal's API.

</comment><comment><USER24> Please amend with '2014' this is not a new post

<comment><USER25> OK, done.

</comment></comment><comment><USER26> Could a mod de-hype the headline please? I propose, "Context switch logging with the Windows Event Tracing API"

<comment><USER25> Ok, done.

</comment></comment><comment><USER27> Well, I don't know about the API, but that's certainly the worst blog software ever made, requiring me to enable JavaScript and execute code in order to read some simple HTML and CSS. Why‽

<comment><USER28> People still disable JS in 2016? I take it that 80%+ of the web is horribly broken for you guys.

<comment><USER29> > People still disable JS in 2016? I take it that 80%+ of the web is horribly > broken for you guys.

Yeah, it is — but it's better to have to enable JavaScript on a one-by-one basis when desired that to travel across the Internet executing random code and impairing one's privacy.

Some websites require JavaScript to _display images_ nowadays. What's wrong with <img>? Others require JavaScript to use the correct font. What's wrong with CSS? Still others require JavaScript to show text. What's wrong with HTML? Still others require JavaScript to build links. What's wrong with <a>?

JavaScript is destroying the Web. What was a powerful technology for disseminating formatted text across the world has become a cobbled-together GUI held together with baling wire and twine.

<comment><USER30> > Some websites require JavaScript to display images nowadays. What's wrong > with <img>?

Lazy loading. By default, browsers will load all images as soon as the page loads. If you have a long article with potentially megabytes of images, this behaviour will seriously slow down the initial load, and many readers who jump early will still download a bunch of images that they never see. That's why many sites only load images as they are about to appear, but to do that, you _can 't_ use regular <img> tags.

You're right in that JavaScript shouldn't be a requirement though. A good implementation will provide a regular <img> inside a <noscript> tag.

> Others require JavaScript to use the correct font. What's wrong with CSS?

Avoiding "flashes of invisible text"[1] when using web fonts. Unfortunately, different browsers have very different strategies for loading web fonts. Some of them will wait for the web font to load at any cost rather than showing a fallback font in the meantime. This means that you can be stuck for ages with everything in place except for the text, which is seriously irritating.

I've never implemented FOIT mitigation myself, but I assume that you could (and should) again provide a fallback in a <noscript> tag. Even without it, the text will at least still display without JavaScript, just in the second font in the font stack.

[1] [https://css-tricks.com/fout-foit-foft/](https://css-tricks.com/fout-foit- foft/)

</comment></comment></comment></comment><comment><USER31> Off-topic, but take a look at the source on the site: all absolutely- positioned divs. Previously: [https://news.ycombinator.com/item?id=8895662](https://news.ycombinator.com/item?id=8895662)

<comment><USER32> This site worked great on my android phone. Much better than most responsive sites I've visited. Add to that it loaded quickly. I'd say it's a good design.

<comment><USER33> There are overlaps between paragraphs due to Opera's autoreflow after pinch to zoom.

<comment><USER33> Downvote me as much as you want, reality doesn't change. If you use Opera with force reflow and you zoom in, text of different paragraphs overlap and you can't read anything.

Bad design as expected when trying to format HTML as if it was PDF. The designer has to adapt to unpredictable user agent settings, not the other way around.</comment></comment></comment></comment>


Ask HN: Any advice for someone getting out of prison after 18 years? - <AUTHOR> I met this person when I was in high school. He made a huge mistake in his early twenties and has almost finished paying for it (bank robber). He gets out of prison next week. I've kept in touch with him through letters and have been telling him that his only chance of financial independence is through writing code.
He's very familiar with business logic, as he was the MS Access dba for the prison factory. And about six months ago I sent him a few conceptual programming books that you all suggested he read. He paid for his own master's degree (distance learning program in organizational dynamics), and even started a phd--though prison officials would not let him conduct the necessary research to complete it (and he ran out of money).
He's about 40, has no family, and virtually no friends (outside of prison). Army veteran, so he has health insurance covered. I think he has about $1000 saved. I'll be giving him a laptop, smartphone, and mobile hotspot. He won't be able to leave Indiana for a few years (terms of supervised release).
Would really appreciate everyone's thoughts and advice. I'll compile all of it and make a list for him. Thanks. <comment><USER2> I'm seeing a lot of "he got what he deserved" and "he's gonna have to wash dishes, nobody will hire him" kinds of comments here. This is one of the really broken elements of US culture. We have a culture of revenge and shaming, rather than healing and allowing reparations. This is why we have the highest prison population per-capita in the world; higher than China, higher than Russia, higher than Iran, higher than Cuba, higher than any other place you might think of as "repressive" or a "prison state" ([http://en.wikipedia.org/wiki/List_of_countries_by_incarcerat...](http://en.wikipedia.org/wiki/List_of_countries_by_incarceration_rate)).

People change. Prisons make some folks worse, this is true. But, many people come out of prison with no desire other than to lead an honest life. One of my best friends over the past year or so is a felon; spent several years in prison on a drug-related crime (a serious drug-related crime, not a little weed in his pocket). When I went to Mexico for a month, he's the person I trusted the keys to my storage unit (with tens of thousands of dollars in gear) to. Why hold a mistake made in someone's youth over their head for the rest of their lives? How does that make a better, safer, more peaceful society?

<comment><USER3> I still don't think nonviolent drug crimes are the same as bank robbery. When you commit a bank robbery with a loaded firearm, you're telling society you have no problem taking a person's life for a little money. If people change, why is the recidivism rate for felons over 50%? And those are just the ones who get caught. Again, I'm speaking strictly to violent crimes here. Nonviolent/drug offenders should be treated very differently.

<comment><USER4> > Why is the recidivism rate for felons over 50%?

Because it's damn near impossible to make an honest living with a felony conviction on your record in the current economy. The mentality of "Why should you get the same as honest men like me" is one that has societal costs, but it is a third rail of politics, as no congressman is going to make an argument for lighter sentencing, or easier integration of felons. In reality, all felony sentences are life sentences, and this is something we need to fix.

</comment></comment></comment><comment><USER5> Firstly, thank you for your humanity.

There's a guy on Quora named Michael Santos that spent 25 years in prison for drug dealing. He was released last August. While incarcerated, he got his degree, got married, and wrote a book. He has written extensively on the prison experience, and how one can come out on top. He's also quite willing to answer any questions:

<http://www.quora.com/Michael-Santos-4>

You may have to sign up to Quora to read his answers, but it's totally worth it, if just for his perspectives alone.

Once again, I salute you for what you're doing. I don't know if you've seen the movie 'The Shawshank Redemption', but there's something very "Andy Dufresne" about what you're doing. Through your humanity, you're giving this man dignity. Salaam.

<comment><USER6> Wow, thanks for posting about Michael here, I've met him and he's an awesome guy, and he's a very driven and intelligent person.

If you don't want to create a Quora account, you can probably contact Michael on his website as well: <http://michaelsantos.com/>

I haven't checked recently, but he had been including some of his Quora content on his blog as well.

</comment></comment><comment><USER7> I'm a convicted federal felon. To top it off, it's a computer fraud conviction involving a former employer.

I used to think I'd never even be able to flip burgers for pay. I'm actually probably right - McDonalds would never hire me. But since my conviction I've worked a decent string of IT jobs.

First, he needs to understand that there are a _lot_ of people with a criminal record. I've met plenty of people with criminal records (mostly DUI, fraud, and drug charges) that have been able to find normal work, raise kids, volunteer, etc. Every time I tell someone my story, they tell me that their gainfully employed brother / uncle / co-worker / etc. has a criminal record that I used to think would force someone into washing dishes for the rest of their career.

Second, he needs to make a clean break with _anyone_ shady. I've had tempting inquiries and offers from friends-of-friends. He needs to find new friends. Take up a hobby, join a church, go to user groups and meetups, go back to school, etc. Something to find a new set of friends that will occupy his time with things that won't land him in trouble.

He should be able to leave Indiana, especially if he has work lined up. I'm a little unclear on that since I wasn't in the state system, but I think he can be somehow transferred to another jurisdiction's probation office or remotely report in.

I don't agree that his only chance is writing code, but it's certainly not a bad approach. I'd particularly suggest mobile apps. It's not steady work, but jobs on Fiverr.com could bring in some cash while he looks. There's also affiliate blogging / Pinterest Pinning. I could probably sit in a public library, pinning Amazon links a few hours a day and earn enough to get by.

<comment><AUTHOR> "I could probably sit in a public library, pinning Amazon links a few hours a day and earn enough to get by."

\--Really? I would have assumed that mTurk would have dropped the floor on this type of work.

<comment><USER7> Well, I don't pin a lot of Amazon links, but I make a bit from the ones I have pinned. I grind out about $200 a month now mostly from other affiliate programs and I'm not really trying. It's a side income that I keep thinking about expanding since it's working. I need to teach my kids to do it...

It takes forever to get paid though - maybe 3-4 month lag time.

</comment></comment></comment><comment><USER8> Long time lurker, created an account just to add a comment here. Your friend's situation hits close to home as I spent most of my 20's in prison and am a software developer.

He can move forward and be reasonably successful despite his felony record. There are plenty of people in the world who will be willing to look past that and give him a chance, but to be balanced, on the flip side there are equally many who will not. It saddens me to hear he has little family, it is hard to underestimate the value of personal support to a recent ex-con.

Job hunting can be difficult. Many organizations will flat out not consider you because of the felony record. I had good luck with smaller companies, where you met the boss and had the chance to make a personal impression, where I was given the opportunity to explain why I was sent to prison and why the employer should take what is admittedly a bigger chance on hiring me.

But here's the kicker with software development. I was already good at it before prison. It was no challenge to demonstrate some level of skill that outweighed the uncertainty of hiring a felon. In your friend's case, this may or may not work as well.

It's great that he had the chance to work with computers and Access in prison. I had similar opportunities and in fact learned .Net during my stay, letting me come back into the job market with relevant, polished skills.

My first job out of prison was the type that gives you plenty of fodder for The Daily WTF, but it was a job and it was much easier to get the second job than the first. If your friend can get his foot in the door - at any job - he'll have the opportunity to prove himself and may find that the disadvantage of a felonious past fades quickly into the background. My experience has been that if you can actually do useful work as a programmer and show this to potential employers, you will quickly get past the felony tag. A programmer that can produce is still a hot commodity at least in my area (and Indiana is likely no different).

<comment><USER9> You said you were a good software developer before prison - was your crime a white collar one? Do you mind sharing what you were convicted for?

<comment><USER8> Drugs, I had a brief encounter with methamphetamine in my late teens that landed me a hefty sentence for selling small amounts to support my habit (12 year sentence, though between normal parole time and early release via prison boot camp for drug offenders I served about half that).

<comment><USER10> I have a friend who is in a halfway house after finishing a two year sentence for manufacture. He's lucky, and I hope to get him working soon. He's made emulators since he was 12 (now 28). Good luck and god bless.

</comment></comment></comment></comment><comment><USER11> First, a rant: I always get shocked about how the US justice system works, where punishing (and revenge) is obviously more important than protecting humans. He should have been released as soon as he posed no threat to others. If the US keeps its current course there will be more people inside prisons than outside of them in the future.

He certainly has a lot of expectations. I can only imagine the pressure he is putting upon himself right now. My only advice is for him to find the first regular job he can. That will give him more time to learn programming (if he wants to do that) and release a bit of the pressure to succeed fast.

<comment><USER12> He shouldn't have committed the crime in the first place. End of story. If he knew that bank robbing was a crime and he committed it anyway, he deserves whatever punishment was meted out to him. People could (or may) have been killed over his greed for money.

That being said, I have no problems with the notion of helping ex-cons try to turn their lives around, after they've paid their debt to society. I am a supporter of Delancey Street organization in SF, which helps ex-cons reintegrate with society by giving them jobs in the moving industry, cooking, selling Christmas trees, etc.

<comment><USER13> He "deserves whatever punishment was meted out to him"? What if the law dictated life in prison, or the death penalty, or for him to be drawn and quartered?

People, particularly young men in their early 20s, mess up. He certainly needed to be put in prison for years, but decades? The person someone is when they're 30 is wildly different from who they were when they were 20, biologically.

Even if his crime actually ended in someone being injured or killed.

<comment><USER12> We're not talking about Jean Valjean who stole a loaf of bread to feed his family. It's someone who committed a violent crime of robbing a bank because they wanted someone else's money, and they didn't want to earn it the slow, hard way. They knew what they were doing was wrong. They need to accept the consequences of their actions, including 18 years in jail. I'm sure the person in question has done this, and that's why I have problems with any efforts in rehabilitating him now that he has served his time.

If you can't do the time, don't do the crime. It's as simple as that. If the punishment were death for robbing a bank were death, and you still went ahead and did it, whose fault is that? People need to take responsibility for their own actions. They didn't accidentally rob a bank, or they weren't somehow tricked into robbing a bank. They knowingly decided to do it. If the sentence was 18 years, then I'm satisfied that justice was served.

<comment><USER13> So, suppose the crime were downloading academic articles, and the punishment was to be up to 35 years in prison...

What you're arguing for is the inherent rightness of State violence. But the government can be wrong, and it often is wrong. If it's wrong, it's not moral to say, "Well, the government said it would do [wrong thing] to him, who am I to question it?" Instead, you question it and call it into doubt, not try to make a descriptive consequence into a prescriptive consequence.

</comment></comment></comment></comment></comment><comment><USER14> First off, great job in being involved in this guy's life. He really needs people like you to help him get on his feet and recover.

I'd say introduce him to a recruiter who has a lot of connections and can get something going for him. If that doesn't pan out, perhaps some biz owner here on HN might hire him.

<comment><USER15> Wow this is naive. Nobody is going to hire a felon parolee for anything other than menial work. I don't think there are recruiters for washing dishes.

The only hope, as the OP says, is to figure out a way to market a tech skill directly, or to start something on his own.

<comment><USER16> _Nobody is going to hire a felon parolee for anything other than menial work._

I disagree. The _number_ of people willing to take a chance on a felon parolee might be small, but I know it's non-zero.

</comment></comment></comment><comment><USER17> "and have been telling him that his only chance of financial independence is through writing code"

There are tons of trade skills that he could learn quickly at a local community college. Plumbers, electricians, auto mechanics, hvac repair, etc.. can make seriously good money and his felony would likely not be as big of a factor either. Especially if he went into business himself.

<comment><USER18> His felony wouldn't be a big deal for employers who would potentially be sending him _into people's homes_ on a regular basis?

I have to strongly disagree with that one.

<comment><USER19> There are tons of trades that do not require you to ever leave a machine shop or electronics lab. If said person is very capable of coding then I would also strongly encourage them to pursue it, but to convince them that it's their _only_ chance? That statement seemed to be a bit of a stretch. Whatever endeavor though, I wish them luck.

</comment></comment></comment><comment><USER20> Unfortunately getting a "job" will be difficult with a prison record, but consulting could be a good path. If you can find someone to sub-contract jobs to him he can get started (he might have to take a low rate to start with), and once he establishes himself he'll be able to win new deals himself.

As he establishes himself it'll probably be worthwhile to create a company that he can build a reputation around - that way his personal background becomes less visible.

</comment><comment><USER21> Since he's a vet, have him talk to the VA. They have this <http://vetsuccess.gov/> and especially this <http://www.benefits.va.gov/vow/> Also see if he has service-related disability and thus can use VA Vocational Rehab. <http://www.vba.va.gov/bln/vre/> Even if he doesn't have a disability rating now, if he can trace something back to his time in the military he can still get a rating and be eligible. With the skillset he has they ought to be able to help him out somehow. I'm not sure how the prison service will tie in, but it's worth a shot.

Along a similar vein he might try his local American Legion or VFW chapter for assistance.

</comment><comment><USER22> Step 1) Get a laptop

Step 2) Start a GitHub account

Step 3) Write code

I care a lot more about what people have created than what they have done in their past lives.

<comment><USER23> ... profit?

</comment></comment><comment><USER24> Perhaps a freelancing site, such as oDesk? He can build up some basic references doing trivial technical work. He won't make much money as there will be a lot of competition, but many recruiters would rather hire from within the US if the cost made sense.

<comment><USER15> Or, he might be able to use freelancing online to establish a working relationship with a company that would hire him directly. It is just tough, the money is terrible and I think this guy is going to need more structure than working from home will provide. Self-starting is hard for anyone and our friend has had every minute regulated for the past 18 years.

</comment></comment><comment><USER25> I represent one of the largest venture capital funds in the state of Indiana with a substantial number of investments in tech-focused companies. I would be more than happy to speak with you and your friend and see if we might be able to help him.

<comment><AUTHOR> That's very kind of you. How can I contact you? My email address is on my profile page.

<comment><USER25> I'm not seeing it in the profile page. Can you double check?

<comment><AUTHOR> Odd. Maybe it's hiding it from you due to low karma. Looks like we just connected on LinkedIn. Thanks.

</comment></comment></comment></comment><comment> jack-r-abbit Even with a masters degree, he's certainly going to have a smaller pool of job opportunities than a non-felon just by the fact he is a felon. But that doesn't mean there is not a bunch of opportunities for him. I've worked with several felons at different places. Programmers and IT. Not every company cares about that. Just like not every company cares to have you pass a drug test. But he should probably forget about any jobs in the financial sector as they tend to be pretty strict on hiring felons (and being a bank robber is probably a double whammy). My only advice would be to be totally up front about his past and don't let the "no thank yous" get him down.

However, I would say that he might be facing almost as much trouble getting over the fact that he is 40 with very little industry experience. Honestly, this might actually be worse to some companies. I have no idea what he had to work with in prison, but 18 years away from real world tech might have him slightly behind the curve. Maybe my perception of technology in prison is not accurate.

<comment><AUTHOR> His technology-paradigm is definitely not a modern one. For example, he doesn't really understand open source software; just the concept of it--and how good it can be.

</comment></comment><comment><USER26> I would tell him congrats for going through all this with a positive attitude and I wish him the best of luck in his programming career. As for financial independence, may I suggest that he start on elance with a very cheap price to get experience and build a reputation. A beautiful portfolio website really help (At first there would no "past project"; Just a beautiful splash page offering services with X years of experience; then best projects could be added as they are finished.) Also, it's easier to get paid more and be taken if you get specialized in marketing/SEO/business strategy. It's very hard to compete on elance with a psd->html 8$/hours. Lastly, may I suggest that he assist some weekly tech event in his city.. if you say he's got few friends, that would be a good way to meet people sharing his own passion.

</comment><comment><USER16> There was a recent discussion[1] on Reddit, about how a guy with a criminal record could get a job and what-not. It was a somewhat different situation, but I expect _some_ of the discussion there might be applicable here as well.

[1]: [http://www.reddit.com/r/jobs/comments/16jqz3/i_have_a_crimin...](http://www.reddit.com/r/jobs/comments/16jqz3/i_have_a_criminal_record_its_not_terrible_but_i/)

My own comment included the sentiment that having a criminal background doesn't mean you'll _never_ get a job (even a good job), but that it definitely makes it harder, so you have to find ways to compensate for that. I mean, for at least certain classes of crimes, I'd hire someone with a criminal record, and I know there are other people out there who feel the same way.

</comment><comment><USER27> He's going to have a lot of employment difficulties due to a felony record.

I'd probably suggest stuff like online task markets or contracting, particularly on low-sensitivity stuff. The other thing that might work would be creating software/services for sale directly.

</comment><comment><USER28> He seems like a real self starter. If he has an aptitude for programming I'd recommend getting into mobile development as an independent contractor.

I'm not saying it would be easy. I started teaching myself iOS at the end of my sophomore year (4 years ago). In six months I felt comfortable accepting contracts off of elance. By the time I graduated I was employed full time as a contractor. It's just gotten better from there.

Mobile is one place where your past doesn't really matter. You either can or you can't. And your past doesn't matter much.

<comment><AUTHOR> Why/how is mobile any different from regular web development?

<comment><USER28> A few reasons... 1) Mobile is hot right now and skilled developers are still hard to come by. Employers who _need_ a mobile developer are in a sellers market. 2) High quality apps can be built with a single skill set, if you know your SDK. The good web guys I know need to be experts at multiple languages, architectures, and services. I have one skill that I'm good at, but because no one else has it my career has gotten a nice jump to it compared to my classmates. 3) There is room to be disruptive. The web is 20 years old. iOS development is 4 years old and Android is three. There's a lot less baggage in mobile and a lot more room for a small team of developers to impact the platform. 4) It's cheap to get started with. For under $750 you can put together a serviceable lab to work in.

The bottom line is there are low barriers to entry and a high rate of return.

</comment></comment></comment><comment><USER29> If he is near Indianapolis, it could help to get involved in the local hacker scene. We have a pretty decent number of meetings and the like he could attend. See the calendar at <http://indyhackers.org>.

I like to think we're pretty merit-based here, but it is a largely conservative state (though this city can be pretty "blue" compared to its surroundings), so I could be wrong. Knowing people is a significant portion of the battle, and just showing up to events can go a long way.

<comment><AUTHOR> Unfortunately, he will be starting out in Michigan City at a halfway house. But maybe Indianapolis is someplace he can transfer to? Are there any other hacker hubs in Indiana? West Lafayette? Valparaiso?

</comment></comment><comment><USER30> Just a thought I had, and maybe someone can help me, but if a convicted felon has a hard time getting an apartment, can they start an LLC (or any other business entity) and then have the business rent the apt? I'm assuming the management would still like to see see financial history, so probably an aged LLC or corp would be best?

</comment><comment><USER31> If his offense was because of drugs/alcohol abuse (which is likely as something like 80% of crimes are), he should seek out Alcoholics Anonymous/Narcotics Anonymous. His incarceration experience there would be commonplace.

Many people in those groups have "run-ins" with law enforcement and a large percentage are themselves felons (DUI/Drug possession) and are on probation.

I would also recommend he focus his energy (initially) on trades which have a rougher edge, like construction & oil services, metalworking, etc...They are tough jobs, no doubt.

However, these fields have plenty of opportunity, a chance to make a decent living, get paid weekly (sometimes in cash), and the people are less subjected to background checks.

Once he is off probation and can explain his "gap" with real work history, he will be more likely to be accepted in society. He can then focus on education and re-training.

</comment><comment><USER32> > _and have been telling him that his only chance of financial independence is > through writing code_

I don't get this. Neither will "writing code" make him more "independent" than other jobs nor is it likely that he will get a job in this field.

<comment><AUTHOR> I see a career in code as being one based on merit, versus others that are based on credentials or politics. I believe that if he can make things that people appreciate, then the money will follow. In theory, right?

</comment></comment><comment><USER33> You are indeed the genuine loyal friend that he needs to get re-established. Some of the comments here are good suggestions.

Assuming that you are also involved in IT (well you do read HN) are you able to help him get some consulting gigs? If he is motivated and able to get some basic support, then doing small, well priced jobs for local businesses is a great way to ramp up.

Being a consultant avoids the employer background checks and helps him avoid the low pay trap of menial jobs. You may need to monitor his manners and speech as after 18 years, he may have picked up some habits that are uncool in our current society.

Best of luck to you both.

</comment><comment><USER34> I commend you for doing the right things. The system inherently goes against it's only goal, by sending people out that are almost guaranteed to commit another crime and unleashing even more upset people onto the population. Instead of keeping us safe it makes progressively more savage criminals, people that have to hurt or kill in order to survive in prison don't generally come out better for it.

I think the fact that you are even doing all this will keep your friend on the right track, that he has a friend to talk to may be the thing that keeps him from a depression that will send him towards a life of crime.

</comment><comment><USER35> I would focus on helping him build community, the more community he has around him the better he'll cope, integrate and thrive.

So say your getting him in on ruby or python or mobile dev, start taking him along to as many meetups as you can find. A bar camp or RailsCamp would be great to.

The hackerspace movement is very open and accepting and beginner friendly IMHO, I'd get him in on that too.

If he can build up a community in tech around him then the code part has a good foundation to thrive in. Think of his needs in terms of 'structures for success'.

<comment><AUTHOR> This was excellent, thanks. I wish he was not required to be in Indiana. I'll be moving to Chicago soon and that is a much more conducive environment to growing this kind of community (compared to northwest Indiana).

</comment></comment><comment><USER36> Saying "nobody's going to hire an ex-felon, wash dishes" is very encouraging guys. :S

This is someone who already has paid his debt to society. Why continue to damn him after he's trying to work his way up again. I'd rather be naive and give someone like him a second chance. Unfortunately I don't have a lot to offer at the moment but I can seem to remember from the "Help HN, I'm homeless" thread that there are many people on HN who are willing (and able) to help someone out in need.

</comment><comment><USER37> #1: Learn Rails - i would suggest a few rails cast a day

#2: Make a few sites; I will help w/ this as much as he needs

#3: As you make sites blog daily about your progress learning

Once you feel comfortable post on job sites, ODesk etc... and start building up your reputation.

my email is on profile he can email me or you (OP) can

<comment><AUTHOR> Do you have any thoughts on this remote Rails class: <http://www.gotealeaf.com/>

I'd be willing to pay the tuition if it's really useful for someone who has still not ever seen/used a web browser.

<comment><USER37> It would take more information to properly determine what the best starting poing would be for him; but if he has not used a web browser I suggests starting w/

1\. email setup 2\. google 3\. facebook

etc... basically as much basic computer usage as possible; IMO rails classes like that and pretty much everyone else is going to assume their audience is comfortable w/ computers and other modern day technologies.

<comment><AUTHOR> So this is one of things I was specifically looking for: Exactly what does he need to learn immediately? What is the best set of tools he should experience and submerge himself with to really understand the internet, both as a consumer and as a potential creator?

</comment></comment></comment></comment><comment><USER38> Help him setup an account on Facebook (if he doesn't have one already) so he can log on to Codecademy & start learning Python there in his spare time with his laptop & mobile hotspot.

</comment><comment><USER39> I'm happy that it sounds like he'll be fine, thanks to his own drive and of course the help you're offering (a laptop, smartphone, and a mobile hotspot are pretty helpful, really).

Best of luck to him.

</comment><comment><USER40> Obviously an 18 year felony is much more serious but I wonder how tech companies view misdemeanors such as DUI, Possession of Marijuana, Domestic Battery, etc?

<comment><USER27> Tech companies in the bay area would probably wonder WTF you got arrested for marijuana or other minor drug offenses.

DUI I think would be a more serious issue, depending on the area. In the Bay Area, DUIs are pretty frowned upon, since there are other transportation options. I think they're much more accepted in rural areas.

I know plenty of tech people who have convictions for assault (bar fights), drugs, computer crime (particularly as kids), etc.

</comment></comment><comment><USER41> Sounds like Les Miserables...

</comment><comment><USER42> don't go back! don't do anything that will cause you to go back!

</comment><comment><USER43> My #1 bit of advice would be for him to read How to Win Friends and Influence People.

Yes, really. If you need to brush up on your social skills, it's the go-to guide. You can practice it even without having close personal or business relationships… on anybody you meet on the street, in a shop, online, etc. It's a little bit cheesy, but not at all scummy… the basic advice is something everyone should follow, and yet most do not. Following the advice is something that can set anyone apart from the crowd (in a positive way)... ESPECIALLY in the tech world.

#2 With those social skills, and what he's learning technically, my second bit of advice would be to tackle it on. Be up front about the mistake. When he applies for a job or talks to someone, he should tell them. Not Scarlet Letter-style, but in a way like this:

"I came by xyz lessons the hard way. I was really stupid at jkl age… it's hard to believe how stupid! But there's nobody more than me who knows the value of abc."

Help him figure out how this experience has made him BETTER. Sometimes the hard way is the best way to learn something.

It sounds like he's learned a lot in his time behind bars… dedication, for one. Most people never complete a master's much less in such adverse circumstances. Maybe he learned the lesson about making decisions in emotional circumstances. Maybe now he's a calm, cool, cautious individual… or maybe he's just not going to jump the gun. Maybe he learned something about surviving in tough social situations. How to befriend difficult people. Or something else, equally powerful.

One thing: If he hides his past, it'll only come back to bite him, when people find out about it via background checks. If he owns it, and sounds mature, and honest, then that'll be a feather in his cap. He didn't murder anyone; he made a crime against property. You can recover from that, socially.

#3 He should write about it. He should write about learning programming (or whatever he decides to tackle), doing his master's program in prison, will he finish his PhD, etc. People trust a person who is honest about his flaws (maybe more than they should, sometimes!), and they love a person who can communicate. They also love somebody who they can learn from. Plus writing is a very valuable skill, and it could do a lot to rehabilitate a person's image.

Best of luck to your friend.

</comment><comment><USER44> I heard there was a military bootcamp program you could go through and get your criminal record scratched. Is this applicable, or am I confusing things?</comment>


"Learning How to Code is a Waste of Time" - <AUTHOR> http://www.forbes.com/sites/tarabrown/2012/01/10/learning-how-to-code-is-a-waste-of-time/

<comment><USER2> Is this going to be some new trend to discourage people from learning to code?

Its so strange to see one specific skill being targeted.

Even stranger: [http://www.forbes.com/sites/venkateshrao/2011/12/05/the- rise...](http://www.forbes.com/sites/venkateshrao/2011/12/05/the-rise-of- developeronomics/)

In this article Forbes talks about how programmers are basically the safest and smartest investment an entrepreneur can make, but now they are saying that investing the time to learn to program yourself is a waste of time?

I could understand if the headline and tone of the article was something like "could learning to program compliment your current skills?", but right off the bat they are attacking the idea of acquiring a new skill.

Does anyone really come out worse off if they miss a season of American Idol to learn programming instead?

<comment><USER3> Much of the content on Forbes is just blog salad, there does not seem to be a great deal of editorial oversight of the content.

</comment></comment><comment><USER4> The author is basically saying that having a good reason for learning something means you're much more likely to complete your course of study.

 _My guess is that less than half the people who signed up for Codecademy's Code Year challenge will finish, it will be closer to 10-15%. I'm not being harsh, I'm being realistic. Most of the people that signed up don't really know why they are learning to code, they just think it's a good idea. Jumping right into learning JavaScript, the 'beginner-friendly' language without first knowing why you want to learn it, seems like a recipe for abandonment._

She's just presenting the message from a very pessimistic vantage.

Edit: She not he....

<comment><USER5> The author is female.

</comment></comment><comment><USER6> Can we just ban forbes.com here? I'm getting very tired of their poorly- written linkbait blog posts with a huge interstitial ad after every click.

</comment><comment><USER7> The World As An API </comment><comment> Writing was not considered important for the average person back in the day. You could get a job on the farm or some kind of manufacturing job and it was therefore not a necessity to survive in the real world. It was still valued but it was something for the rich. As time moved on and technology changed, so did work requirements, as the economy grew from substance and agricultural based to industrial and then to services based, the type of skills also moved from manual labor to more intellectual labor. The economy is changing again, becoming more information technology based, also with the internet of things increasing, our homes will become more tech based. We will move to a future where everything has an API, from your washing machine to your nike's and to be able to make small customization's, you will need basic programming skills. Basic Programming is the new Writing and Reading. My kids will learn basic programming whether they like to or not.

</comment><comment><USER8> Learning is never a waste of time. If it is not valuable for your work and your goal , you will not go as far as masterize it and stop it. So not loosing so much time but just opened your mind to other way to think. Either a foreign language, a book, a programming language...

To answer the article, learning what will not be our everyday job is called "curiosity, knowledge and culture"

</comment><comment><USER9> People like this confuse the positive encouragement of the general public with their own needs. The recent code.org campaign is simply a campaign that is trying to encourage young kids and schools to pony up because there are tons of jobs going unfilled and they will continue to go unfilled if the education system doesn't catch up.

</comment><comment><USER10> Misleading title -- the point is that having an item on your to-do list 'learning how to code' is not as useful as something more specific, say 'learn javascript to start work on my own blogging platform' ... essentially it's an article on better goal creation/identification</comment>


Facebook's git repo is 54GB - <AUTHOR> https://twitter.com/feross/status/459259593630433280 <comment><USER2> In terms of engineering tradeoffs, this reminds me of a recent talk by Alan Kay where he says that to build the software of the future, you have to pay extra to get the hardware of the future today. [1] Joel Spolsky called it "throwing money at the problem" when, five years ago he got SSD's for everybody at Fog Creek just to deal with a slow build. [2]

I don't use Facebook, and I'm not suggesting that they're building the software of the future. But surely someone there is smart enough to know that, for this decision, time is on their side.

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

[2] [http://www.joelonsoftware.com/items/2009/03/27.html](http://www.joelonsoftware.com/items/2009/03/27.html)

<comment><USER3> Facebook tends to throw engineer time at the problem, though. I know one Facebook DevCon I went to they presented how they completely wrote their own build system because Ant was too slow for them.

<comment><USER4> They built their own build system because once you are dealing with top engineers NIH sets in quickly and you write your own everything.

<comment><USER5> They have their own in-house version of just about every dev tool. [http://phabricator.org/](http://phabricator.org/)

<comment><USER6> FYI phabricator originated at Facebook, but the guys who wrote it left and founded Phalicity, who supports it full time now. Facebook did the world a service by open sourcing phabricator.

Review board and Gerrit are both awful in comparison

<comment><USER7> I've been using Phabricator for a few months now, and I used Gerrit for over 2 years at my last job.

They each have their strengths, but both of them are infinitely preferable to not doing code review. Neither is awful.

</comment></comment></comment></comment></comment></comment><comment><USER8> Although this is large for a company that deals mostly in web-based projects, it's nothing compared to repository sizes in game development.

Usually game assets are in one repository (including compiled binaries) and code in another. The repository containing the game itself can grow to hundreds of gigabytes in size due to tracking revision history on art assets (models, movies, textures, animation data, etc).

I wouldn't doubt there's some larger commercial game projects that have repository sizes exceeding 1TB.

<comment><USER9> But they surely don't use git for that, right? In scenarios like this a versioning system that does not track all history locally would be a better fit.

<comment><USER10> It could use git-annex[1]?

[1] [https://git-annex.branchable.com/](https://git-annex.branchable.com/)

<comment><USER11> Strange as it sounds, git-annex doesn't really do file versioning very well.

<comment><USER12> Are you talking about git annex assistant or git annex? git annex does file versioning very nicely then again it doesn't work on Windows so that's probably not very useful for most game developers.

<comment><USER13> git-annex does file versioning, but it's extremely uncomfortable to use (and I say this as somebody totally comfortable with git) and I'd never expect an artist or other only-semi-technical person to use it even if it worked with Windows. Especially when Subversion or Perforce are _right there_.

</comment></comment></comment></comment></comment></comment><comment><USER14> Didn't they switch to Mercurial?

[https://code.facebook.com/posts/218678814984400/scaling- merc...](https://code.facebook.com/posts/218678814984400/scaling-mercurial-at- facebook/)

<comment><USER15> Somebody asked that on Twitter and the OP responded with:

>> At least according to the presentation by a Facebook engineer that I just watched, they're still on git. [0]

[0] [https://twitter.com/feross/status/459335105853804544](https://twitter.com/feross/status/459335105853804544)

<comment><USER16> You can check out, but you can never leave?

</comment></comment></comment><comment><USER17> Pay attention to the footnote:

      *8 GB plus 46 GB .git directory

<comment><USER18> 8 GB is still a lot. Would be interesting to know how much of it is actual code and how much is just images and so on.

<comment><USER19> The big .git directory is probably binary revisions? Is there any good way around that in git?

<comment><USER20> I'm a bit confused. Whenever I've used git on my projects, I'd make sure the binaries were excluded, using .gitignore

Don't other people do that, too? What's the benefit of having binaries stored? I've never needed that; I've never worked on any huge projects, so I might be missing something crucial.

<comment><USER19> Well, it depends. Images are for instance binaries where a text diff makes little sense, so you have a copy of each version of the image ever used. And many projects use programs where the files are binaries. For instance, I've been on a project where Flash were used and the files checked in. Or PhotoShop PSD files, .ai files etc.

<comment><USER20> I usually keep a separate repo for PSD/AI files (completely neglected to consider them as binary files).

As for images, icons, fonts and similar, I just have a build script that copies/generates them, if it's needed.

I guess I've always been a little bit "obsessed" about the tidiness of my repositories.

</comment></comment></comment></comment></comment></comment><comment><USER21> The worrying point here is the checkout of 8GB as opposed to the history size itself (46GB). If git is fast enough with SSD, this is hardly anything to worry about.

I actually prefer monolithic repos (I realize that the slide posted might be in jest). I have seen projects struggle with submodules and splitting up modules into separate repos. People change something in their module. They don't test any upstream modules because it's not their problem anymore. Software in fast moving companies doesn't work like that. There are always subtle behavior dependancies (re: one module depends on a bug in another module either by mistake or intentionally). I just prefer having all code and tests of all modules in one place.

<comment><USER4> How does monolithic repos solve that. Surely people who fix bugs in a library aren't testing the entirety of Facebook every time (how long would that even take? Assuming they've even set such a thing up.)

<comment><USER22> I used to work at Facebook. They have servers that automatically run a lot of their test cases on every commit.

</comment></comment></comment><comment><USER23> FB had previous scaling problems with git which they discussed in 2012 [http://comments.gmane.org/gmane.comp.version- control.git/189...](http://comments.gmane.org/gmane.comp.version- control.git/189776)

It appears they are now using Mercurial and working on scaling that (also noted by several others in this discussion): [https://code.facebook.com/posts/218678814984400/scaling- merc...](https://code.facebook.com/posts/218678814984400/scaling-mercurial-at- facebook/)

</comment><comment><USER24> I bet most of that size is made up from the various dependencies Facebook probably has, though I'm still surprised it's that large. I expected the background worker things, like the facial recognition system for tagging people, and the video re-encoding libs, to be housed on separate repositories.

I also wonder if that size includes a snapshot of a subset of Facebook's Graph, so that each developer has a "mini-facebook" to work on that's large enough to be representative of the actual site (so that feed generation and other functionalities take somewhat the same time to execute.)

<comment><USER25> Having all code in a single repository increases developer productivity by lowering the barrier to change. You can make a single atomic commit in one repository as opposed to N commits in M repositories. This is much, much easier than dealing with subrepos, repo sync, etc.

Unified repos scales well up to a certain point before troubles arise. e.g. fully distributed VCS starts to break down when you have hundreds of MB and people with slow internet connections. Large projects like the Linux kernel and Firefox are beyond this point. You also have implementation details such as Git's repacks and garbage collection that introduce performance issues. Facebook is a magnitude past where troubles begin. The fact they control the workstations and can throw fast disks, CPU, memory, and 1 gbps+ links at the problem has bought them time.

Facebook made the determination that preserving a unified repository (and thus preserving developer productivity) was more important than dealing with the limitation of existing tools. So, they set out to improve one VCS system: Mercurial ([https://code.facebook.com/posts/218678814984400/scaling- merc...](https://code.facebook.com/posts/218678814984400/scaling-mercurial-at- facebook/)). They are effectively leveraging the extensibility of Mercurial to turn it from a fully distributed VCS to one that supports shallow clones (remotefilelog extension) and can leverage filesystem watching primitives to make I/O operations fast (hgwatchman) and more. Unlike compiled tools (like Git), Facebook doesn't have to wait for upstream to accept possibly- controversial and difficult-to-land enhancements or maintain a forked Git distribution. They can write Mercurial extensions and monkeypatch the core of Mercurial (written in Python) to prove out ideas and they can upstream patches and extensions to benefit everybody. Mercurial is happily accepting their patches and every Mercurial user is better off because of Facebook.

Furthermore, Mercurial's extensibility makes it a perfect complement to a tailored and well-oiled development workflow. You can write Mercurial extensions that provide deep integration with existing tools and systems. See [http://gregoryszorc.com/blog/2013/11/08/using-mercurial- to-q...](http://gregoryszorc.com/blog/2013/11/08/using-mercurial-to-query- mozilla-metadata/). There are many compelling reasons why you would want to choose Mercurial over other solutions. Those reasons are even more compelling in corporate environments (such as Facebook) where the network effect of Git + GitHub (IMO the foremost reason to use Git) doesn't significantly factor into your decision.

<comment><USER26> Hello there, have you heard of service oriented architecture? You must be joking to justify a single repository with "easier to change". Your problem is that the code base must be tightly coupled if splitting the services out to different repos is not possible and you need to contribute to multiple repositories to get something done. I would say, the biggest change in Amazon's architecture was moving over to the service oriented way and it was worth the effort. Developers are forced to separate different functions to separate services and they are in charge of that service. If it goes down their are getting the alerts. All of the services are using 250ms timeouts so there is no cascading effect when a services goes down. The web page consists of few thousand service calls and it degrades gracefully. Facebook obviously have some tech depth that they need to fix. Using stupid design justified with some random crap that does not even make sense is not really acceptable (at least for me).

<comment><USER25> SOA isn't a magic bullet.

What if multiple services are utilizing a shared library? For each service to be independent in the way I think you are advocating for, you would need multiple copies of that shared library (either via separate copies in separate repos or a shared copy via something like subrepos).

Multiple copies leads to copies getting out of sync. You (likely) lose the ability to perform a single atomic commit. Furthermore, you've increased the barrier to change (and to move fast) by introducing uncertainty. Are Service X and Service Y using the latest/greatest version of the library? Why did my change to this library break Service Z? Oh, it's because Service Z lags 3 versions behind on this library and can't talk with my new version.

Unified repositories help eliminate the sync problem and make a whole class of problems that are detrimental to productivity and moving fast go away.

Facebook isn't alone in making this decision. I believe Google maintains a large Perforce repository for the same reasons.

<comment><USER27> > _" What if multiple services are utilizing a shared library? For each > service to be independent in the way I think you are advocating for, you > would need multiple copies of that shared library (either via separate > copies in separate repos or a shared copy via something like subrepos)."_

No, you have a notion of packages in your build system and deployment system.

You want to use FooWizz framework for your new service BarQuxer? Include _FooWiz+=2.0_ as a dependency of your service. The build system will then get the suitable package FooWiz when building your BarQuxer. Another team on the other side of the company also wants to use FooWiz? They do the exact same thing. There is never a need for FooWiz to be duplicated, anybody can build with that package as a dependency.

<comment><USER25> I think you are missing the point. Versioning and package management problems can largely go away when your entire code base is derived from a single repo. After all, library versioning and packaging are indirections to better solve common deployment and distribution requirements. These problems don't have to exist when you control all the endpoints. If you could build and distribute a 1 GB self-contained, statically linked binary, library versioning and packages become largely irrelevant.

<comment><USER27> I'm telling you how corporations with extremely large codebases and a SOA do things. The problem that you described has been solved as I describe.

SOA is beneficial over monolithic development for many other reasons unrelated to versioning. It just happens to enable saner versioning as one of it's benefits.

</comment></comment></comment></comment></comment></comment></comment><comment><USER28> > @readyState would massively enjoy that first clone @feross

The first clone does not have to go over the wire. Part of git's distributed nature is that you can copy the .git to any hard drive and pass it on to someone else. Then...

> git checkout .

</comment><comment><USER29> Am I missing something or this means a new intern working on a small feature, for instance, would have access to entire codebase?

<comment><USER8> It should be possible to restrict each employee's access to specific parts of the repository. However, I can't really see Facebook doing that.

Everyone having access to everything must be worth the security trade-off. On the other hand, I suppose it's debatable whether it would be a trade-off at all.

<comment><USER30> >Everyone having access to everything must be worth the security trade-off.

I would find this extremely hard to believe, especially at Facebook. At any software company, your code base is what defines you as a company; there is no way they'd let the good stuff sneak out like that.

<comment><USER31> Lets say you managed to sneak out the code from facebook. You take the logo, draw a red cross over it and scribble "ProAmbook" below. You push it live.

Now what? How do you get users? "We are just like facebook - only your friends aren't here" probably wouldn't get users excited.

And if you somehow DID manage to get users, don't you think there are "watermarks" in the code, that they could detect and sue you to death with?

<comment><USER29> They have anti-spam heuristics, graph heuristics, models on how to serve the best ad for each user, tons on bugs that can be only discovered by reading the source, etc.

</comment></comment></comment></comment></comment><comment><USER32> Is there a reason why they keep _everything_ in the same repo? Can't you just split the code across multiple smaller repos?

<comment><USER33> It becoms a lot harder to keep everything in sync, especially if internal interfaces change frequently. At facebook scale though it's probably a good idea to defined boundaries between areas in the application better.

<comment><USER34> You end up with less developers having to pull & merge/rebase if you have things in separate repos.

Individual libraries/dependencies get worked on by themselves, with an API that other applications use. Then the other apps just bump a version number and get newer code.

<comment><USER35> The problem with this, is that you are assuming the APIs change in some sort of odd isolation to the parts that use them.

That is, the reason an API changes is because a use site has need of a change. So, at a minimum, you need to make that change and test it against that site in a somewhat atomic commit.

Then, if the change has any affect on other uses, you need a good way to test that change on them at the same time. Otherwise, they will resist pulling this change until it is fixed.

Add in more than a handful of such use sites, and suddenly things are just unmanageable in this "manageable" situation.

Not that this is "easy" in a central repo. But at least with the source dependency, you can get a compiler flag at every place an API change breaks something.

And, true, you can do this with multiple repos, too. But every attempt I have seen to do that just uses a frighteningly complicated tool to "recreate" what looks like a single source tree out of many separate ones. (jhbuild, and friends)

So, if there is a good tool for doing that, I'd certainly love to hear about it.

</comment></comment></comment></comment><comment><USER36> Meh. I'm working on a comparably small project (~40 developers), and we're over 16GB.

Mostly because we want a 100% reproducible build environment, so a complete build environment (compilers + IDE + build system) is all checked into the repro.

<comment><USER37> IDE checked into the repo eh? For some reason I kinda like that idea. So portable... if it works.

</comment></comment><comment><USER38> Someone recently told me that Facebook had a torrent file that went around the company that people could use to download the entire codebase using a BitTorrent client. Is there any truth in this?

I mean, the same guy that told me this, also said that the codebase size was about 50 times less than the one reported in this slide, so it may all be pure speculation.

<comment><USER39> If you're interested in the deployment process at Facebook, look at the link of a Facebook engineers paper I submitted in my other comment in this thread : [https://news.ycombinator.com/item?id=7648802](https://news.ycombinator.com/item?id=7648802)

"The deployed executable size is around 1.5 Gbytes, including the Web server and compiled Facebook application. The code and data propagate to all servers via BitTorrent, which is configured to minimize global traffic by exploiting cluster and rack affinity. The time needed to propagate to all the servers is roughly 20 minutes."

</comment></comment><comment><USER40>
      NAFV_P@DEC-PDP9000:~$ python
      Python 2.7.3 (default, Feb 27 2014, 19:58:35)
      [GCC 4.6.3] on linux2
      Type "help", "copyright", "credits" or "license" for more information
      >>> t=54*2**30
      >>> t
      57982058496
      # let's assume a char is 2mm wide, 500 chars per meter
      >>> t/500.0
      115964116.992 #meters of code
      # assume 80 chars per line, a char is 5mm high, 200 lines per meter
      >>> u=80*200.0
      >>> v=t/u
      >>> v
      3623878.656 # height of code in meters
      # 1000 meters per km
      >>> v/1000.0
      3623.878656 # km of code, it's about 385,000 km from the Earth to the Moon
      >>> from sys import stdout
      >>> stdout.write("that's a hella lotta code\n")

</comment><comment><USER41> I wonder what their branching strategy is like and how merges are gated with a single codebase of that size?

<comment><USER25> They aim for a completely linear history. They may even have a policy of not allowing merge commits. It is described in various places on the internet. I like [https://secure.phabricator.com/book/phabflavor/article/recom...](https://secure.phabricator.com/book/phabflavor/article/recommendations_on_branching/) because it and its sister articles on code review and revision control are terrific reads.

<comment><USER42> Dear everyone: you should be using Phabricator. It is Facebook's collected wisdom about software development expressed in software. It has improved my life substantially. The code review is better than Github's, and their linear, squashed commit philosophy has worked out much better than the way I used to do things.

<comment><USER41> It looks pretty great. How does it compare to Atlassian products (if you have used any)?

<comment><USER43> Mixed bag. The code review part is much better than stash and significantly better than crucible. Namely, diff of diffs makes reviewing changes based on comments infinitely easier (especially on large reviews). We installed phabricator just for the code review piece initially. Repo browsing is about on par with stash, but it doesn't seem to experience the horrific slow downs that our stash server does. We don't use the tasks because a number of non engineering roles also use JIRA and the tasks functions in phabricator don't have nearly the depth of security and workflow options we need.

</comment></comment></comment></comment></comment><comment><USER44> Relevant: [https://code.facebook.com/posts/218678814984400/scaling- merc...](https://code.facebook.com/posts/218678814984400/scaling-mercurial-at- facebook/)

</comment><comment><USER45> I thought I had read an article about facebook switching to perforce due to their really large git repo. Were they at least thinking about it?

A quick google comes up with nothing but I could have SWORN I read that.

<comment><USER46> You are thinking about Mercurial, not Perforce: [https://code.facebook.com/posts/218678814984400/scaling- merc...](https://code.facebook.com/posts/218678814984400/scaling-mercurial-at- facebook/)

</comment></comment><comment><USER47> Why don't people use multiple git repos for multiple internal projects? It seems totally nonsensical and undesirable.

</comment><comment><USER48> That's actually not that bad for a engineering shop of their size. I would start archiving metadata at some point.

</comment><comment><USER49> gosh, last time I had trouble with 8GB data checking in, it's very memory hungry when the data set is big and then you need check them in all at once, how much memory on the server side you need when you want to 'git add .' all the repo of 54GB?

what about a re-index or something, will that take forever?

I worry at such size the speed will suffer, I feel git is comfortable with probably a few GBs only?

anyway it's good to know that 54GB still is usable!

</comment><comment><USER50> ...but 8GB for the actual current version.

How much of it is static resources, like CSS sprite images?

</comment><comment> Dorian-Marie They must storing a lot of images and binary files I guess.

</comment><comment><USER51> Company I did a contract for last year has 8MB of (Java) source code and a 52MB SVN repo and make £40 million a year out of it...

We're doing something wrong.

</comment><comment><USER52> I thought they used Mercurial

</comment><comment><USER53> Someone must have forgotten a .gitignore or two.

</comment><comment><USER54> well, git gc --aggressive --prune=now, duh.

(jk)

</comment><comment><USER55> I hope everyone realizes this is not 54GB of code, but in fact, is more likely a very public showing of very poor SCM management. They likely have tons of binaries in there, many many full codebase changes (whitespace, tabs, line endings, etc). Also not to mention how much dead code lives in there?

<comment><USER3> Honestly, I prefer check-in everything shops. It's way too often otherwise some different Java version, or IDE version, or Maven central being down screws something up, or you have to wait a long time for a Chef recipe or disk image to give you the reference version. Half my day today was dealing with someone updating Java on half our continuous build system slave computers and breaking everything because it didn't have JAVA_HOME and unlimited strength encryption all setup properly.

<comment><USER55> That sounds like either poor Sys Admin'ing and/or poor documentation... SCM should not have "clutter" in it, otherwise you wind up with an all-day download of 54GB of dead or useless garbage. The Kernel's repo is only a few GB's and it has MANY more changes and much more history than FB does...

<comment><USER56> You should realize that the kernel doesn't have image and other assets that FB might have. And the repo obviously is the right place for them.

<comment><USER47> "The" repo. As if they had no choice but to put everything for every aspect of the business into ONE giant repo.

Hopefully they actually have some separate sites, separate tools and separate libraries. Or could understand how to use submodules or something rather than literally putting everything in one huge repository.

Whether to put images and other assets into git repos is a separate decision.

</comment></comment></comment></comment></comment><comment><USER55> Hey Facebook! You're doing it wrong!!!!!

</comment><comment><USER57> So what? This probably means they're versioning data files they shouldn't be. I feel like this just exists here as a pissing contest.

<comment><USER47> It is supposed to justify the engineering effort they put into switching to Mercurial, then trying to make it "scale." (Rather than just using separate repositories to begin with, according to the design of the tool and best practices)

<comment><USER55> aka. a pissing match to show "they are too big for any standard industry tools". Really speaks to the level of (non)expertise employed at FB.</comment></comment></comment>


Facebook UK loses almost 2% users in December (clarification to media) - <AUTHOR> http://www.socialbakers.com/blog/1277-clarification-to-guardian-on-facebook-losing-uk-users

<comment><USER2> Not the matter of worry.</comment>


Are we living in a simulated world? - <AUTHOR> https://www.wsj.com/articles/are-we-living-in-a-simulated-world-11578581268 <comment><AUTHOR> [http://archive.is/hoMtS](http://archive.is/hoMtS)

</comment><comment><USER2> Sometimes we live too much in our mind and question each source of information that we read because of such misleading sources that we begin to question our very understanding of life itself.

That came out a big too "prophetic", but I think it's fairly true if you think about it.</comment>