Show HN: WeekendHack: Does Website X Run Prestashop (and which version) - <AUTHOR>

I was looking for a simple way to figure out whether an e-commerce site is running Prestashop, and if so, which version it runs.
So I built : http://runprestashop.com
It works by analyzing several resource files (CSS, JS) and compare them to the signatures of the different versions of Prestashop.
If this is helpful, I'll probably write the same tool for Magento :)
What do you think (idea, execution, etc.)?
Cheers, Julien <comment><AUTHOR> Clickable link : <http://runprestashop.com/></comment>


Show HN: A visual explanation of Fisher–Yates shuffle - <AUTHOR> http://bost.ocks.org/mike/shuffle/ <comment><USER2> Beautiful. I love the visual demonstrations of the less efficient methods as well. This is a great learning tool for a super common programming problem. One general comment/question. Code like this trips me up:

      t = array[--m];

Well I don't know if it trips me up so much as it makes me think too much about syntax especially when the focus is on the algorithm itself. When writing educational code I find the following more effective:

      m -= 1;
      t = array[m];

Anyone else have any thoughts?

<comment><USER3> Most of the mainstream languages support these operators and programmers are encouraged to use these operators since they make the code much more elegant and readable. Even an average programmer would be able to understand the nuances of post/pre increment/decrement operators.

<comment><USER2> I definitely understand it. It's not a matter of understanding the syntax. It's a matter of teaching people most effectively. Here's a comparison of the spoken explanation of the code:

      't' equals the value of 'array' at index 'm' minus 1 and 'm' equals itself minus 1.

vs

      'm' equals itself minus 1.
      't' equals the value of 'array' at index 'm'.

To me one of those seems more concise for writing production code, and the other more useful for teaching algorithms.

<comment><USER4> That explanation is not how someone who understands the syntax would read the statement. In general, when an expression contains one pre- (or post-) operator, the reader will take that action before (or after) the rest: "decrement then index" in both cases.

It sounds confusing that the pieces of such a statement are not executed in the order that they are written, but in reality it's not any more strange than the fact that "a = b;" reads "evaluate b and store in a".

The real problem happens when there are multiple operators like that in the same statement, or multiple appearances of a post/pre-inc/dec-remented variable and you need to parse operator precedence in order to figure out the order of execution. As usual, abusing the syntax leads to confusing code, but simple and straightforward cases like "a = b[--i];" are cleaner and easier to read for anyone competent enough to matter.

<comment><USER2> "competent enough to matter" is a bit condescending don't you think?

</comment></comment></comment></comment></comment><comment><USER5> Pet Peeve of mine with math: Fisher and Yates have come up with something interesting here, yes. But like most mathematical theorems named after someone, attaching their names to it doesn't help understanding of what it does at all.

I don't name my functions benmathes_foo().

<comment><USER6> To be fair, the wikipedia page for the algorithm _is_ called "Fisher–Yates _shuffle_ ". This is in my experience a common way to call an algorithm. I can't think of a better way to do it.

<comment><USER5> After putting a few seconds of thought into it, "In place shuffle" explains what it does better than "Fisher-Yates shuffle".

I'm not complaining about Fisher or Yates, who are just following the example their/our research community uses.

</comment></comment></comment><comment><USER7> The final method uses a really common programming idiom for optimizing the removal of elements in a std::vector known as "swap and pop". Swap and pop works by taking advantage of the facts that the most efficient element you can remove from an array/vector is the last one by `pop`ing it off and that the preserved order of the given set isn't important.

        // swap and pop in C++11
        int offset = 2; // remove the second element from the vector
        int end = vec.size() - 1;

        auto tmp = vec[offset];
        vec[offset] = vec[end];
        vec.pop();
        // `tmp` now contains the value removed from the std::vector

<comment><USER8> Yeah, aside from the swap trick, there's very little to the Fisher-Yates-Knuth shuffle. It's just following the standard recursive recipe for generating permutations: to generate all permutations on n distinct elements, try every element in the first place concatenated with every permutation of the n-1 remaining elements.

You can implement this directly with hash sets in O(n) time, assuming you're willing to treat hash set insertion and deletion as O(1) operations:

        # O(n) time
        def shuffle(elems):
            elems = set(elems)    # O(n) time
            xs = []
            while elems:
                x = choose(elems) # O(1) time (expected)
                xs.append(x)
                elems.remove(x)   # O(1) time
            return xs

This whole approach is obvious when you stop thinking of the problem as shuffling an array in place and start thinking of it as randomly generating a permutation of elements drawn from a set. In the final analysis, the optimized in-place implementation of the algorithm with the swap trick does provide in- place shuffling; the way the two halves of the array are used to contain respectively the partial result and an auxiliary set of remaining elements is very much like heap sort.

Not coincidentally, if you interpret the algorithm as I wrote it above monadically, then it can be used to generate either a random permutation or all permutations, depending on whether choose() is interpreted in the probability monad or the list (non-determinism) monad. This shows conclusively that the shuffling algorithm is really just the standard combinatorial generation algorithm for permutations adapted to random sampling. If so, you'd also expect the swap trick to be useful for generating all permutations in place. Well, of course:

        void perms(int *xs, int n, int i)
        {
            if (i == n) {
                for (int j = 0; j < n; j++)
                    printf("%d ", xs[j]);
                puts("");
                return;
            }

            for (int j = i; j < n; j++) {
                swap(xs + i, xs + j);
                perms(xs, n, i + 1);
                swap(xs + i, xs + j);
            }
        }

<comment><USER9> I find it a bit hard to see how to reinterpret your Python code in the list monad. Can you post a Haskell version of this function?

<comment><USER8> Hey, sorry for the late reply.

It seems pretty obvious to me, so I'm not sure what is confusing you.

        class Monad m => ChoiceMonad m where
            choice :: [a] -> m a

For the list monad, choice is just the identity function. For the probability monad, choice picks a random element from the list. (Ideally choice would take a random access structure like a set as its argument, but I'm doing it the simplest way here.)

To implement shuffle, you more or less just transliterate the Python code as you'd expect.

Before you tackle this, make you sure completely understand how the same situation plays out for the simpler case of subsets:

        subset        :: ChoiceMonad m => [a] -> m [a]
        subset []     = return []
        subset (x:xs) = do b <- choice [True, False]
                           xs' <- subset xs
                           return (if b then x:xs' else xs')

Over the list monad, this generates a list of all subsets. Over the probability monad, it generates a random subset.

<comment><USER9> Thank you, now I see. Here's my version:

        shuffle :: (ChoiceMonad m, Eq a) => [a] -> m [a]
        shuffle [] = return []
        shuffle elems = do
          x <- choice elems
          xs <- shuffle (x `delete` elems)
          return (x:xs)

</comment></comment></comment></comment></comment><comment><USER10> I love the d3.js data visualization framework, which is what Mike Bostock (the creator of d3, as it happens) used the create this page. Well done, Mike.

Does anyone have suggestions for an algorithm for me to use d3.js to illustrate visually? This is such an effective learning tool that I would probably benefit from some review. I was thinking of trying a graph or tree search algorithm, maybe's Dijkstra's. Any other suggestions?

<comment><USER11> Clustering can be visualized quite well and there are several families of algorithms that could be run over similar data, such as k-means clustering or DBSCAN.

</comment></comment><comment><USER12> This is a pretty common way to use arrays, at least in game programming on earlier versions of Android where you couldn't garbage collect during a frame due to the delays. You'd often have big pre-allocated arrays with a marker for how much is currently used. That or object pools when you needed someone more than arrays.

</comment><comment><USER13> Great article. This is probably a question for the statisticians: Would repeatedly sampling from a uniform distribution mean that on average the next card chosen will come from the middle of the remaining pack (as repeatedly sampling from a uniform distribution gives a normal distribution), or does the decreasing sample size somehow cancel that effect out? Then at the same time the algorithm is moving cards from the end towards the middle. Intuitively it feels like the shuffle ought to be biased towards selecting the middle-end of the pack first, but wikipedia indicates it's unbiased. Any help with getting further intuition?

<comment><USER14> Repeatedly sampling from a uniform distribution gives a uniform distribution - uniform means the probability is the same for all cards.

<comment><USER13> Yes, but the average value of the sampled values will tend towards a Normal distribution by the central limit theorem, and I'm probably misapplying it by wondering whether the next sample tends to be from nearer the middle. I think skimbrel is right that as the sample being drawn from is decreasing each time the CLT will be invalidated anyway.

<comment><USER14> Sorry to be blunt, but you're confused.

The _average_ of the sampled values will be normally distributed, but the values themselves will be uniform.

If you sample every number once from [0,100], the average is 50, but that doesn't imply that the distribution of the sampled elements is normal - it's uniform.

His question of whether "on average, does the next card come from the middle" (which it doesn't) isn't the same as "is the mean of the next sampled card in the middle" (which it is).

The language was a little misleading - he said "on average" when he intended "most frequently".

<comment><USER13> Ok thanks for clearing that up. I hadn't appreciated the difference between the two.

</comment></comment></comment></comment></comment><comment><USER15> Great post, and extra points for visualizations that work on the iPhone.

<comment><USER16> It uses d3.js, which pretty much requires a modern browser with SVG. I suspect you will find it doesn't work on IE8.

</comment></comment><comment><USER17> I have a question. Why does the shuffled deck have the cards criss-crossed with its neighbors? I'm not sure what it's suppose to represent.

<comment><USER17> Nevermind. I just answered my own question. It's a result of the original deck being fanned visually. So when he reshuffles the deck, the cards are still orientated in the same direction as they were in the original deck, so you get the visual side-effect of having cross-crossed cards. So you can tell approximately which side of the deck the card was from originally. And by visual estimation, a properly shuffled deck should have a combination of cards orientated in all different directions.

<comment><USER18> Which if you look at the sorting visualization links at the bottom, is actually a really effective way of showing when things are very out of order, or close to in order.

</comment></comment></comment><comment><USER19> Thanks for posting this! I just updating my own silly shuffle module (<https://github.com/substack/node-deck>) to work using the last in-place algorithm for uniform shuffling and I saw a huge speedup.

</comment><comment><USER20> In your last example you could do; [array[m], array[i]] = [array[i], array[m]]

And forget about t entirely.</comment>


Udacity cuts 125 employees as part of global restructuring plan - <AUTHOR> https://venturebeat.com/2018/11/28/udacity-cuts-125-employees-as-part-of-global-restructuring-plan/ <comment><USER2> Udacity essentially failed its sole purpose: to become an actual alternative to regular universities by bringing high quality courses to the masses.

It's been more than seven years, and I still can't earn a bachelor's degree via Udacity.

No wonder it needs "restructuring".

<comment><USER3> This is a curious fixation, I would say. In the US, a bachelor's degree is something that is regulated to have some type of meaning. It needs to come from an accredited institution, and if it's in a specific field, it gives you the right to pursue grad school, apply for certain professional licenses, and apply for pay raises from state institutions.

I imagine Udacity didn't really wany to go through all the hassle and bureaucracy and lobbying that's required to become a dinosaur-style college. So, it's hoping that its classes can provide reliable proof of knowledge and skill for employers to hire specific employees.

If it can't do that, then it's basically a hobby site, at which point RIP because people won't really spend enough on these types of courses to support such expenditures</comment></comment>


How Bernie Sanders Tech Volunteers Code the Bern - <AUTHOR> http://blogs.wsj.com/washwire/2015/10/02/how-bernie-sanders-tech-volunteers-code-the-bern/ <comment><USER2> The Lessig 2016 campaign also has a tech volunteer program[1], but it is officially endorsed (unlike Coders for Sanders), and all of the software developed for the campaign (including software developed by the paid folks) is open source, developed on GitHub, and discussed openly on Slack.

[1] [https://github.com/Lessig2016/Lessig2016.github.io](https://github.com/Lessig2016/Lessig2016.github.io)

<comment><USER3> I'll just leave this here.

[http://www.vox.com/2015/8/27/9214015/tech-nerds- politics](http://www.vox.com/2015/8/27/9214015/tech-nerds-politics)

<comment><USER4> That was a great article, if a bit of a nonsequitur here.

</comment></comment></comment><comment><USER4> Something I made for Sanders recently[0] which has gotten a little traction on r/SandersForPresident[1], a simple website backed by the NYS electoral rolls. It generates self-mailing fliers to voters who are not registered Democrat informing them that they have until this Friday to register if they want to vote in the 2016 NYS Dem primary. The fliers try to make it as easy as possible for the recipient to register by providing the form and a way to mail it back to their county Board of Elections. Volunteers can go to the website to generate and mail fliers for a unique set of at-risk voters.

Critical feedback is welcome. I know just walking through a CSV file and using python's HTTPServer is terrible, though. :-)

If anyone knows about setting up full-service bulk mailing with USPS, I'd love some help getting started. It's probably too late for this particular project, but I think this distributed approach to mass mailing potentially has a lot of promise.

[0] [http://nysmailing.xyz/](http://nysmailing.xyz/) [https://github.com/coventry/nysmailing](https://github.com/coventry/nysmailing)

[1] [https://www.google.com/search?q=site%3Areddit.com+nysmailing...](https://www.google.com/search?q=site%3Areddit.com+nysmailing.xyz+alexcoventry)

<comment><USER5> It doesn't matter how terrible it is if it works and does some social good. Thank you so much for trying to bring about some change in the world.

</comment></comment><comment><USER6> I would be very interested in volunteering for Donald Trump. Does anyone know how I could get involved?

I like the way he is the only candidate with the guts to oppose illegal immigration, even though it should be obvious to everyone that illegal immigration is wrong and must be stopped. It's especially ridiculous given that almost all liberal candidates support much worse in Israel, while calling Trump a racist for proposing relatively mild measures in the US.

<comment><USER7> [https://www.donaldjtrump.com/about/](https://www.donaldjtrump.com/about/)

Their 'get involved' form has a checkbox to tell their campaign that you want to volunteer. I couldn't seem to find a better way for you. I can only presume that Mr. Trump has a war chest which negates his need for charitable work contributions.

<comment><USER6> Thanks a lot. Yes, Trump is very wealthy, but on the other hand there a lot of big wealthy companies who would fire their employees for saying the things that Trump does. Universities even more so. The middle classes are basically forced away from the positions that Trump holds. And so really the big money is against him.

</comment></comment></comment><comment><USER8> I'm not sure how I feel about the advertising of free labor. On one hand, it's great seeing people participating. On the other hand the WSJ comes off as saying that "hey this politician is getting free development."

<comment><USER9> I hope the article didn't come across that way. We're all developers passionate about the movement, love hacking on projects, and decided to come together and build cool things.

All developers are welcome if you have an idea and want to work with people on it - come join! [https://www.reddit.com/r/CodersForSanders](https://www.reddit.com/r/CodersForSanders) and [http://slack.forsanders.com](http://slack.forsanders.com) and

<comment><USER10> Bernie Sanders has promised everything to everybody. I would say he has the least credibility than any other candidate (and that's saying a lot considering how shitty the lineup is), because at least the other candidates don't make such ridiculous promises like he does... Seriously, how are you going to give people free healthcare, free education, free [insert entitlement program]. His plan of action, "tax the rich more". What a joke.

<comment><USER11> I know, right? Why isn't he promising to defund planned parenthood, build a wall on the Mexican border, and defund the government for ideological reasons! /s

It's funny really. I've never been political until Bernie Sanders has come along, and I believe all of his policies are practical to implement (yes, universal healthcare and free education is easy, stop spending as much on the military _as the next top 10 countries combined_ ). I'm volunteering for his campaign, helping with Coders For Sanders, and am maxing out my campaign contributions.

Perhaps its because I've always leaned a bit to the left, and have reached the end of my rope with conservative crazies.

<comment><USER12> > _(yes, universal healthcare and free education is easy, stop spending as > much on the military as the next top 10 countries combined)_

I think this statement further reinforces the GP's point. Simply "stop funding the military" isn't "easy" \- and I doubt it is something that can be done over a 4 year term. Most of the military's budget are salaries, not just soldiers but likely millions of factory workers who produce a wide range of products for the military. While the question of "are the products they produce useful" is grey, the fact is you'd have to start by laying off millions of Americans and likely damaging the many smaller towns that have come to depend that income source. While its simple to just state "defund the military" the truth is much more complex and likely an even greater political minefield. If he does win the election, if he were to pull off that move, I doubt he would have the political strength to keep a trajectory going for a second election.

As much as I believe that free education should be a thing, I believe that is also a minefield. How will schools be funded? Does the government pay the inflated tuitions, or do we solve the student loan problem first? Will we be forced to massively scale back the amount of people who attend 4-year schools (currently around 70% in the US vs. 30% in Germany)?

And then to seemingly do this by "just taxing the rich"? It seems that people forget that the President just doesn't wake up one day and decide what to tax people at - it's in part decided by congress (as well as many of the other issues) - and it just seems unlikely that he'll make good on everything he is promising.

Personally, I believe Bernie to be a sound candidate, but um_ya has a point.

<comment><USER13> >" _and it just seems unlikely that he 'll make good on everything he is promising._"

This is unfortunately a big failing of democracy and the political landscape, in my opinion. You have individuals that are voted into political positions under certain "promises", and then have access to a myriad of excuses that they claim prevented them from implementing said promises. Of course, I understand that sometimes there really are stumbling blocks and active measures preventing a plan from being implemented. But can we not draw a line somewhere? And hold political figures accountable for at least trying to implement their promises. Or at least require them to present sound reasons or studies for actually wanting to enact something as law. E.g. "Study on effects of UBI on the well-being of single-parent households"

Additionally, I'm a tad confused about this concept of Democracy (warning, not really confused, just arguing): If the president is elected in a presidential election and represents the majority of the people, why then do we elect a separate set (branch, as they call it), of individuals at a more granular level that could very well "fight" the already-elected president? I'm referring to the congress/senators there. Could the entire problem not be solved by removing the entire "checks-and-balances" concept, and simply hold presidents accountable for their actions (or lack thereof when it comes to promises)? And by accountable, I mean real consequences: prison/large-fines.

Following from that, we don't all believe that we could potentially get a "crazy" or "rogue" president that abuses his power after election? E.g. creating some sort of police-state, starting wars that the public doesn't want or rewriting constitutional-law? Such that we require some sort of "checks- and-balances" entity/branch to keep him/her from doing so.

Anywho, just some random rants from someone that thinks too-logically about politics, because my ideology requires me to.

<comment><USER14> > Additionally, I'm a tad confused about this concept of Democracy (warning, > not really confused, just arguing): If the president is elected in a > presidential election and represents the majority of the people, why then do > we elect a separate set (branch, as they call it), of individuals at a more > granular level that could very well "fight" the already-elected president?

You're confused. That's not a bug, it's a feature. The whole political philosophy of the US is that _no one person_ gets power that somebody else can't block.

> Could the entire problem not be solved by removing the entire "checks-and- > balances" concept, and simply hold presidents accountable for their actions > (or lack thereof when it comes to promises)?

The thing you see as a problem could be solved that way, yes. But imagine that the next president is Trump rather than Sanders. Still think it's a good idea?

The public makes bad decisions at the ballot box sometimes. No matter which way you lean politically, you're sure to be able to find examples in the last 20 years. Having Congress able to block some of their most stupid ideas is genius, rather than a flaw.</comment></comment></comment></comment></comment></comment></comment>


Can Urine Rescue Hydrogen-Powered Cars? - <AUTHOR> http://www.greencarreports.com/blog/1022028_can-urine-rescue-hydrogen-powered-cars

<comment><USER2> Strange title as the articles conclusion points directly to creating electricity from hydrogen for homes, rather than cars. That's the beauty of electric cars. For the most part they don't care what the source of their electricity is.

</comment><comment> onreact-com PEEtroleum rules!</comment>


Tell HN: Happy New Decade - <AUTHOR> Someone wise once said: "Most people overestimate what they can do in one year and underestimate what they can do in ten."<p>May the 2020s bring fruitful and fulfilling endeavors for all! <comment><USER2> Check your math.

<comment> chupa-chups Off-by-one kind of fits here, no?

<comment><USER3> If by _kind of fits_ , you mean the entire problem? Yeah.

Of course, the epoch is so arbitrary that a decade means nothing anyway, whether or not it's a year off.

If people like numbers flipping back to zero, we should just tell time in binary.</comment></comment></comment>


Sanitizing Agriculture - <AUTHOR> http://www.sfgate.com/cgi-bin/article.cgi?file=/c/a/2009/07/13/MN0218DVJ8.DTL

<comment><USER2> Rancher/farmer here, from the Salinas Valley surrounds.

There are some factual errors in the article, like this gem: "The deadly bug first appeared in hamburger meat in the early 1980s"

E. coli has been around approximately forever, so I don't know what the hell they were thinking when they wrote that. See: <http://en.wikipedia.org/wiki/Escherichia_coli>

However, they do make some valid points. One of them is the bit about wildlife being killed off in pursuit of food safety. The Salinas Valley is essentially a dead zone for birds at this point, as they're seen as a disease vector for food. This is a far cry from the direction agriculture had been taking prior to the spinach scare, which was towards organic and sustainable agriculture.

Secondly, they do mention the feral pig vector (just Google for "feral pig e coli"). California has some fairly ridiculous ideas about feral pigs, among them being the requirement that people purchase a pig tag to kill them ($19.70 each, plus $41.20 for the hunting license). This is absurd, given that they're one of the most destructive invasive species in existence. If they really are a vector for the spread of E. coli (which is easy to imagine... there are millions of feral pigs in California, and especially around the Salinas Valley), there should be a bounty on them, not a fee. There are depredation permits available, but they're not in widespread enough use to make a dent (and I know farmers who have killed hundreds of pigs in a year, on a single plot, with a depredation permit and one rifle).

And, yes, I realize the two above paragraphs may sound contradictory. There's a difference between trying to enable sustainable agriculture and letting invasive species spread unchecked. As it stands, California is getting the worst of both worlds.

<comment><USER3> I think the article meant that a deadly strain of E. coli first appeared in the early 1980s.

E. coli in general does not cause death, It is present in the gut of most mammals, including humans.</comment></comment>


Government Sachs - <AUTHOR> https://www.tabletmag.com/sections/news/articles/government-sachs-lind <comment><USER2> I'm far from the inane "it's a private company, they can do whatever they want" view so common here, but this strikes me as a bad example of abuse of corporate power:

> But now Goldman Sachs has announced that it will not assist companies in > initial public offerings (IPOs) if they have all-male boards. As this > example suggests, if you cannot get the legislature or a democratically > accountable government department or independent agency to pass your policy, > you can try to persuade the major corporations and banks which dominate U.S. > economic life to act as though your proposed policy was already the law of > the land. The end justifies the means.

As far as I understand, assisting companies in initial public offerings is not just an infrastructure function, rather it means selling their stock to your clients. Suppose Goldman Sachs thinks, for whatever reason, that all-male boards make systematically worse decisions. Then they would be violating their duty to their clients, by selling them the stocks of companies with all-male boards.

The "build your own x" argument, often made in bad faith, is really appropriate here. If you disagree with goldman sachs, you don't even have to build your own anything, you can just invest in the IPOs run by other financial institutions.</comment>


Show HN: Filemap, a file-sharing service your parents can use - <AUTHOR> https://filemap.xyz/ <comment><USER2> Hmm, interesting concept. I'm curious about what led to creating this

<comment><AUTHOR> The clue is the this thread title.</comment></comment>


The Real "Authenticity Killer" - <AUTHOR> http://scobleizer.com/2011/03/07/the-real-authenticity-killer-and-an-aside-about-how-bad-the-yahoo-brand-has-gotten/ <comment><USER2> Fine if you are a huge social media personality like Scoble. If Scoble got fired from Microsoft then he'd make himself a martyr and his social cred would only increase. He'd lose nothing.

If you are a small-time schmuck with a wife and kids to support, you'd think twice before voicing a controversial comment on your employer. Part of the free speech of the web is having your opinion heard, even anonymously, without risk to yourself.

Yes, that leads to trolling - whether idiots, sock puppets of the left or right, etc. But that's the drawback of free speech - like drunken hecklers in an audience. But I'd rather have the trolls than lose the right to post anonymously or under an assumed identity if I wanted to. If I want to use my real name - fine. But that's my choice to make.

We don't have to play in Zuckerberg's world if we don't want to.

<comment><USER3> > If Scoble got fired from Microsoft

FYI, Scoble hasn't been at Microsoft since 2006; he's a Rackspace evangelist now.

</comment></comment><comment><USER4> He doesn't seem to take the issues from <http://paulgraham.com/say.html> very seriously, maybe because his most controversial position to date has been to support anti-discrimination legislation while living in the heart of a blue state. I have to negotiate for food and shelter with members of a nosy, judgmental, sometimes irrational species. My name doesn't make my arguments more valid, and using it is a stupid risk to take because it doesn't offer me any upside. Without a pseudonym, I wouldn't even offer purely technical opinions when it would affect my ability to line up projects in the future (e.g., just because MySQL is crap or iOS turned evil doesn't mean I'd rather starve than touch them).</comment>


Elon Musk starts another company - <AUTHOR> https://www.google.com/amp/www.theverge.com/platform/amp/2017/3/27/15077864/elon-musk-neuralink-brain-computer-interface-ai-cyborgs <comment><USER2> Actual article link: [http://www.theverge.com/2017/3/27/15077864/elon-musk- neurali...](http://www.theverge.com/2017/3/27/15077864/elon-musk-neuralink- brain-computer-interface-ai-cyborgs)

</comment><comment><USER3> <Black Mirror spoiler>

This is just like that one episode of Black Mirror where they implant that game AI into the guys head!!

</comment><comment><USER4> Dup : [https://news.ycombinator.com/item?id=13971728](https://news.ycombinator.com/item?id=13971728)

</comment><comment><USER3> This type of technology sounds way too invasive. Are there no other ways of empowering people through technology without having to create such a ridiculous vulnerability and dependency on technology?

<comment><AUTHOR> I remember he was talking about how inefficient it is to type. The pc had great bandwidth, phone has pathetic bandwidth. Presumably this increases bandwidth exponentially.

<comment><USER5> I don't think that it will speed up exponentially, as thought speed is (most of the time) at the speed of your 'inner voice', which (depending on the person) is only a few times normal speach speed, which can already be typed in real-time (e.g. stenographs, s2t engines).

It would help for symbols (e.g. "slash"("/") is a full syllable in speach, but might be part of the sentence structure in your 'inner voice' and therefore take less space, similar to the full stop), but the human mind can only produce so much output consciously, and I think we're only going to get up to a 10x speed increment.

I assume here that the norm is typing at roughly 130 keys/minute.

</comment></comment></comment><comment><USER6> Sounds Great!

</comment><comment><USER7> Oh? What subsidy program is he exploiting now?</comment>


Anonymous email service? - <AUTHOR>

Is there a consensus for which are the best providers of anonymous email services? <comment><USER2> Tormail. Afaik, there aren't too many anonymous services at all.</comment>


Data Classes for Java - <AUTHOR> http://cr.openjdk.java.net/~briangoetz/amber/datum.html <comment><USER2> _... To write such a class responsibly, one has to write a lot of low-value, repetitive code: constructors, accessors ..._

If you're writing a plain data class, why on earth would you write getters and setters? Just make your fields public and be done with it.

I will be forever perplexed by the idea of getters and setters (and this extends to C#s syntax sugar). I have no idea what problem they solve. If you're at the level of plain data, then just make a class with public fields and no methods. If you're trying to write a 'higher level' object - then don't refer to the names of fields in your method names. The getter/setter/property approach is just the worst of both worlds. They make explicit reference to an objects internal fields, while at the same time obfuscating what happens when you actually access them.

<comment><USER3> > obfuscating what happens when you actually access them

This is the point, AFAICT. In languages with both primitive "read/write field" operations that can't be interceded upon, but also with interfaces/protocols, "obfuscating" (encapsulating) a field access in getter/setter methods is how you allow for alternative implementations of the interface/protocol.

Specifying your object's interface in terms of getters/setters allows for objects that satisfy your interface but which might:

• read from another object (flyweight pattern)

• read from another object and return an altered value (decorator pattern)[1]

• read from an object in a remote VM over a distribution protocol (proxy pattern)

Etc.

Then a client can build these things and feed them to your library, and you won't know that they're any different than your "ordinary" data objects.

You don't see this in languages with "pure" message-passing OOP, like Ruby or Smalltalk, because there's no (exposed) primitive for field access. All field access—at the AST level—goes through an implicit getter/setter, and so all field access can be redefined. But in a language like Java, where field access has its own semantics divorced from function calls, you need getters/setters to achieve a similar effect.

And yes, this can cause problems—e.g. making expected O(1) accesses into O(N) accesses, or causing synchronous caller methods to block/yield. This is why languages like Elixir, despite having dynamic-dispatch features, have chosen to _discourage_ dynamic dispatch: it allows someone reading the code to be sure, from the particular function being called, what its time-and-space- complexity is. You know when you call MapSet.fetch that you're getting O(1) behaviour, and when you call Enum.fetch that you're not—rather than just accessing MapSets through the Enum API and having them "magically" be O(1) instead of O(N).)

\---

[1] Which is a failure of the Open-Closed Principle. That doesn't stop people.

<comment><USER4> I like Swift's approach to this. (I'm sure other languages do it too, that's just the one I know that does this.)

If you write a property (what other languages might call a "field") then by default it's a stored property, i.e. it's backed by a bit of memory in the object. If you need to take actions on changes, you can implement a willSet or didSet handler to do so. If you need to change how the value is stored and retrieved altogether, you can change it to a computed property, which invokes code to get and set rather than reading and writing to a chunk of memory. All of this is completely transparent to the caller.

It's particularly interesting because it still acts like a mutable value. You can still pass a reference to such a field into an inout parameter using &, or call mutating methods on it. Behind the scenes, the compiler does a read/modify/write dance rather than mutating the value in place.

<comment><USER5> I really, really dislike Swift's approach. get/set/willSet/didSet -- so much complication to preserve the illusion that you are operating on a field when you are actually doing no such thing. Why is this desirable? It reminds me of a class of C++ footguns where some innocuous code is actually invoking member functions due to operator overloading.

I think that Java got this one right. (I do not at all like the cargo cult custom of getter/setter methods for fields; I'm referring to the language only.)

<comment><USER6> Today's fields are tomorrow's computed properties. Fields are rigid and cannot be changed without recompiling dependencies. Notice how few fields there are in Java's standard library. Why have fields at all?

<comment><USER7> How many times have you run into this in your career (the need to convert "today's fields to tomorrow's computer properties")?

<comment><USER8> Plenty of times! The situation where a library released to third parties requires internal structural changes is not an uncommon one. What do you do? Break every piece of third party code or satisfy the new structure and the old interface simultaneously with a computed property? "Move fast and break stuff" doesn't always have to include breaking stuff.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> AutoValue with Builders is nice:

      Animal dog = Animal.builder()
        .setName("dog")
        .setNumberOfLegs(4)
        .build();

[https://github.com/google/auto/blob/master/value/userguide/b...](https://github.com/google/auto/blob/master/value/userguide/builders.md)

<comment><USER10> Not that nice compared to kotlin:

        data class Animal(dog: String, numberOfLegs: Int)

        val dog = Animal(
            name = "dog",
            numberOfLegs = 4
        )

The amount of boilerplate for AutoValue builders is so ridiculous that most people use IDE plugins to generate it.

<comment><USER11>
      data class Animal(dog: String, numberOfLegs: Int)

and

        Animal dog = Animal.builder()
        .setName("dog")
        .setNumberOfLegs(4)
        .build();

are very different. In this case the builder pattern is more powerful as it lets you pass around builders that haven't been "built" yet. Kind of like currying.

<comment><USER12> True, but the constructor method is checked/validated at compile time vs. run time with the builder pattern. Not quite the same as your example, but Kotlin does have good syntax for copying data classes while only changing a single field - this could be used similar to your currying usage.

[https://kotlinlang.org/docs/reference/data- classes.html#copy...](https://kotlinlang.org/docs/reference/data- classes.html#copying)

<comment><USER10> Here's that kotlin copy syntax

          val cat = dog.copy(name = "cat")

</comment></comment></comment></comment></comment><comment><USER13> I, for one, am enjoying the ever so slow scalaization of java.

<comment><USER14> If the JVM magically got rid of nulls and Scala cleaned up some of the slightly wartier bits (implicits come to mind, although they are useful and no clue how I'd fix em...) then Scala would be my favorite language around by quite a bit.

Besides maybe Rust. Really different usecases though.

<comment><USER15> I don't think many of Scala's wartier bits will go away without Java getting its act together re: things like type erasure and a bifurcated type system, because a lot of the odder things in Scala are basically workarounds for deficiencies in the underlying platform. And I just don't see much political momentum behind either of those.

<comment><USER16> Why would type erasure affect the front end language? I'm generally interested.

<comment><USER17> One of the earliest use cases for implicits is that in Java most types are erased but Arrays aren't, so you can't instantiate an Array in a generic method without having some way to pass the concrete type through.

<comment><USER16> I do not see why this problem cannot be solved by a compiler rather than a language feature. The type is statically known. It may require additional metadata alongside class files for separate compilation, but I don't see this as a big issue.

<comment><USER15> Scala needs to interoperate with other Java languages, and there is no platform-wide spec for supplying such metadata.

Even if there were, it couldn't be statically known at compile time in the case where a library written in Scala is being called by code that was written at a later date.

And even without _that_ consideration, types still cannot be statically known in cases where you're being handed objects whose type is not determined until run time. Which happens all the @$#% time in Scala, due to its use of algebraic data types.

So, e.g., Java's run-time has no real way of expressing the type `Option<List<String>>`. You can declare it and get some compile-time checking, but that's all erased before the final bytecode is generated. There's no such thing as `Option<List<String>>.class`. This really limits what you can do with generic code. Scala added its own parallel type tag system to get around that. It's weird as heck and only really usable from other Scala code, though.

<comment><USER16> > Scala needs to interoperate with other Java languages

But does it? Can I even use e.g. a Scala collection from Java? (let alone Clojure, Kotlin, etc) Certainly it looks easy to import and use Java objects, but that looks to be the extent of it.

> it couldn't be statically known at compile time in the case where a library > written in Scala is being called by code that was written at a later date

When you build some new code that uses an existing library, any parametric polymorphic type variables get instantiated at the use sites. Where I admit this isn't true, is the adhoc polymorphic dynamic dispatch via subtyping, but this wasn't given to me as an example. I don't see that ArrayLists and ADTs should present a problem.

> types still cannot be statically known in cases where you're being handed > objects whose type is not determined until run time

Again, I think you are referring to dynamic dispatch here? I agree this could be a problem in open class hierarchies. But the ADT encoding in Scala is a closed statically-known hierarchy, so I can't see why it has to cause problems. Truly "generic" or parametric polymorphic code should not depend on type tags or even be allowed to introspect the runtime type, doing so violates parametricity, which ultimately reduces our ability to reason about the code.

<comment><USER15> > Can I even use e.g. a Scala collection from Java? (let alone Clojure, > Kotlin, etc)

Yup to all. Sometimes the code comes out looking a bit ugly (e.g, you _can_ access default parameters from Java, but it's done by calling methods with kind of awful auto-generated names), but the only things you really can't get at are things that relies on implicits, type tags, or traits with fields.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER18> Or just install Lombok.

<comment><USER19> Lombok @Value for the win!

<comment><USER20> @Data seems more like what they are proposing. It comes with toString, equals, etc and has a bunch of cool features [0].

[0] - [https://projectlombok.org/features/Data](https://projectlombok.org/features/Data)

</comment></comment></comment><comment><USER21> As the article starts out with, Algebraic Anny, Boilerplate Billy etc wanting different things, I wonder if rather than side stepping this issue with a compromise if they could solve it with metaclasses as proposed for C++ [https://herbsutter.com/2017/07/26/metaclasses-thoughts-on- ge...](https://herbsutter.com/2017/07/26/metaclasses-thoughts-on- generative-c/)

I really like the idea of metaclasses and would love to see proposals for C# and Java too. As the proposal mentions Java and C# have already gone down a separate path with interfaces (and structs for C#) but would be cool to see if it could be resolved anyway.

</comment><comment><USER22> Honestly immutable data classes that are created via builders is a must have in Java.

<comment><USER23> Is there something that a builder gets you that Kotlin-style data classes doesn't?

<comment><USER24> One thing I love about builders, besides the sibling replies, is that builders force users to explicitly name the arguments. Passing args to a constructor/method/whatever with implicit argument ordering can be error-prone in certain situations (multiple adjacent args with the same type).

        c = Class(firstName, lastname)   // are these passed in the right order?
        c = Class(lastName=firstName, firstName=lastName) // obviously incorrect

Especially when you're using other magic like auto-generating constructors based on fields (as with Lombok)...then rearranging two String fields can subtly break things with no compiler errors!

<comment><USER17> Named parameters for functions (including constructors) are a good idea - better to build them in as a general case rather than making people read a lot more code to have them in one specific case. Look at what Scala does.

</comment></comment></comment></comment><comment><USER25> Interesting to see everyone discussing Java vs C# properties, when C# properties are actually based on how Eiffel and Delphi do them. :)

</comment><comment><USER26> Why underscores in "__data"? Is this just a temporary thing?

<comment><USER27> It's decoy to avoid bikeshedding. The value class proposal used __value

<comment><USER28> When you say decoy, do you mean it's intentionally gross to keep people from going off on syntax debates?

</comment></comment></comment><comment><USER29> So essentially Lombok?

</comment><comment><USER30> > Can a data class extend an ordinary class? Can a data class extend another > data class? Can a non-data class extend a data class?

No, no, and no. There are interfaces with default impls these days, don't allow base class state.

And figure out how to make interfaces "sealed".

</comment><comment><USER31> Can't we just use AOP to generate the boilerplate code if we are ok with Kotlin style data types? Toss an annotation on the class like @Data. After that everything should get generated at compile time.

</comment><comment><USER32> Classic Brian Goetz bashing Java serialization.

</comment><comment><USER33> "data class" is already in Kotlin flavor.

Yes, I refuse to call Kotlin a different programming language like Scala, because it's just syntactic sugar over good-ol-Java, while all tools, approaches, stackoverflow are the same. But it has the data classes, implemented just like the article described.

<comment> ben-schaaf Have you actually used kotlin before? It most certainly has features that are much more than just syntactic sugar.

<comment><USER33> Yes, I use it every day and absolutely love it. Especially the part that it's still syntactic sugar over Java.

<comment> ben-schaaf It does a lot more than just syntactic sugar. It expands the type system with nullable types, smart casts and covariant/contravariant generics, and it has actual closures. I agree that most of the features kotlin provides are syntactic sugar over Java, but kotlin is as much a separate language to Java as Scala is.

</comment></comment></comment></comment><comment><USER34> This seems unnecessary if the functional / lambda approach is fully adopted as the data can be understood by looking at the functions that operate on the data, so there would be less of a need for simplifying access to the data values when passing them into functions. As I have developed more data- intensive computational methods in Java I no longer implement data encapsulating classes but rather just use collections containing the basic data types.</comment>


Great leaders are great followers. - <AUTHOR>

They say we need to be leaders not followers, but we have to be great followers before we become great leaders.We have to follow before we're being followed. We have to obey before we're being obeyed. Tha't what we call set a good example. Do it first before we ask someone else to do it. Action speaks louder than words. A leader is a follower; he/she follows to lead. <comment><USER2> Dude, what's the deal with the Donald Rumsfeld-like statements (known knowns, known unknowns, and unknown unknowns)? See <http://news.ycombinator.com/item?id=126828>

I like the thoughts, but personally don't think they belong on Hacker News. If they do impart great words of wisdom, some evidence from the startup world would be nice, right?

<comment><AUTHOR> Dude, I really appreciate that you like my thoughts, but what really belongs on hacker news? Maybe your thoughts? I'm really not sure; please help me!

</comment></comment><comment><USER3> My answer: Not necessarily.

Leadership, especially for start-ups, is about creating, communicating and empowering in relation to a vision. You can learn by following, but most likely you will become an outstanding leader by doing instead of following, ie. by doing what leaders do.

All your statements statements "lead" towards the follow then lead direction. In my opinion its more interesting to know your followers, as there are good and bad. Especially for start-ups it is useful to have the _right_ type of followers, namely in activists and diehards. There's a pretty good HBR article about this from this past December titled "What Every Leader Needs to Know About Followers." A must read for aspiring leaders!

-oscar

<comment><USER4> What Every Leader Needs To Know About Followers: <http://www.bravacorp.com/leadershiphbr17followers.pdf>

</comment></comment><comment><USER5> Steve Jobs doesn't seem to be a great follower

<comment><AUTHOR> Steve Jobs is a big follower; He follows his heart.

</comment></comment><comment><USER6> Steve jobs followed xerox park..</comment>


Starliner faced "catastrophic" failure before software bug found - <AUTHOR> https://arstechnica.com/science/2020/02/starliner-faced-catastrophic-failure-before-software-bug-found/ <comment><USER3> ""While this anomaly was corrected in flight, if it had gone uncorrected it would have led to erroneous thruster firing and uncontrolled motion during SM separation for deorbit, with the potential for catastrophic spacecraft failure," Hill said during the meeting."

I guess some things just never get old, citing from [https://en.wikipedia.org/wiki/Soyuz_5](https://en.wikipedia.org/wiki/Soyuz_5) :

"The flight was also memorable for its dramatic re-entry. The craft's service module did not separate, so it entered the atmosphere nose-first, leaving cosmonaut Boris Volynov hanging by his restraining straps. As the craft aerobraked, the atmosphere burned through the module. But the craft righted itself before the escape hatch was burned through."

This actually happened three times so far with the Soyuz (in all cases without the loss of crew):

"An incomplete separation between the Service and Reentry Modules led to emergency situations during Soyuz 5, Soyuz TMA-10 and Soyuz TMA-11, which led to an incorrect reentry orientation (crew ingress hatch first)."

(from [https://en.wikipedia.org/wiki/Soyuz_(spacecraft)#Service_mod...](https://en.wikipedia.org/wiki/Soyuz_\(spacecraft\)#Service_module))

One would kinda expect that past crewed vehicle emergencies would be studied in detail when designing a new one & that the developers would make extra sure they can't reasonably happen with their design.

<comment><USER4> Given commercial pressures would a Boeing reentry vehicle be over designed to such a extent that on such a failure (failure to separate, entering with the wrong attitude ?correct term?) result in "...the craft righted itself before the escape hatch was burned through"?

<comment><USER3> I would assume it would work the same as with the soyuz, provided that the service module separates/explodes before the capsule reentering the wrong way is irrecoverably damaged.

Basically, all space capsules have their of gravity placed in such a way that they will automatically orient themselves heat shield forward once they encounter the atmosphere. So once the service module is gone, it should flip into the correct orientation just by physics alone.

(BTW, this is the same reason why the Crew Dragon spacecraft keeps it's aft section "ring" attached during a launch escape, where it's super draco thrusters drag it to a safe distance from a failing launcher.

The aft ring prevents the capsule from trying to flip over during the abort. Then once in safe distance from the vapor & debris cloud that used to be the launcher, the aft section is jettisoned and the capsule again automatically re-orients itself heat shield forward.)

<comment><USER5> I think who you're replying to is implying the escape hatch would have been cheaper if it wouldn't last long enough before burn through during improper re-entry

</comment></comment></comment></comment><comment><USER6> "Given the potential for systemic issues at Boeing, I would also note that NASA has decided to proceed with an organizational safety assessment with Boeing as they previously conducted with SpaceX"

<comment><USER7> Ah so just the fact that Boeing has been around for half a century doesn't absolve them from being subject to safety reviews? Nice to see some sense.

<comment><USER8> It's McDonnell-Douglas with a Boeing name -- beancounters run the show now.

<comment><USER9> You put a very disappointing feeling into words. Such a shame.

</comment></comment></comment></comment><comment><USER10> > According to the source, Boeing patched a software code error just two hours > before the vehicle reentered Earth's atmosphere. Had the error not been > caught, the source said, proper thrusters would not open during the reentry > process, and the vehicle would have been lost.

Uh, that's _extremely_ concerning for a CREWED capsule.

<comment><USER11> It depends on if the crew would have been able to control those thrusters themselves. Obviously you want the entire system to be autonomous enough that no crew interaction is required but things do happen and the crew needs to be able to act and fix the problem if capsule can't do it nor the ground. When the Starliner started a burn at the wrong time, a crew would have been able to stop it and prevent the loss of fuel. I wonder if this re-entry thruster issue was a result of the earlier thruster issue (or a result of the troubleshooting of it).

There are uncrewed test flights for a reason. You can't always simulate every possible failure mode. Things fail on the ground that wouldn't be possible during normal operation and vice versa.

<comment><USER3> The "crew would fix it" argument is a very very bad one. Many spacecraft maneuvers need to be very precise in both pointing and direction. Something computers are very good at, humans less so.

Also, the crew would first have to know something wrong is going on either based on activity happening that was not planned previously or unexpected data on flight instruments. But guess what is driving those instruments in a modern crewed space vehicle - also computers and software. That software might be faulty as well or even displaying the same wrong data the automated control software is acting upon.

In such a case the crew might not even notice something is wrong until the craft is on a wrong and potentially even unrecoverable trajectory once ground radar notices something is wrong.

As for the crew taking over thtuster control during a _reentry_ \- sorry, if you space capsule is trying to kill you that hard, something is wrong.

At that point in time, the capsule is hurtling through the atmosphere protected only by its from ablative shield. The thrusters are used to shift the center of gravity a bit, to give the capsule some lift, offsetting some of the g forces due to the rapid deceleration. This is called "lifting reentry".

This all needs to be very very precise & based on up to date sensor data, as the whole capsule is _not_ covered by the heat shield and if you change the center of gravity too much, you might expose unprotected parts of it to the hot plasma.

This is not really a good environment for a crew member to take over - <USER2> only are you under couple g's of deceleration but any mistake will kill you all. But hey, no pressure!

BTW, the Soyuz capsule has a backup mode available in case it's reentry control thrusters fail, where the capsule just follows an unguided ballistic reentry. This is much harder on the crew (due to no lift compensating for some of the deceleration), but survivable & has been used a couple times during various emergencies.

<comment><USER12> Im not disagreeing with you, I suppose, but we _did_ do this before with a lot less sophisticated systems and a lot more manual control. It stands to reason that, given proper training, a pilot of one of these spacecraft could identify a problem and switch to manual.

<comment><USER13> A good spacecraft would allow transportation of injured or incapacitated crew, so fully automatic landing is definitely desirable.

</comment></comment></comment></comment></comment><comment><USER14> So we know there were catastrophic bugs in the 737 Max, they've found additional bugs that haven't been catastrophic yet and now we hear that the Starliner also has software bugs. I'm going to order a copy of "The Mythical Man-Month" for Boeing ... they need to get way back to the basics.

(Where's Margaret Hamilton when you need here?

<comment><USER15> > I'm going to order a copy of "The Mythical Man-Month" for Boeing

too late. Boeing is already deep in Agile, a methodology which promises that a child can be delivered by the way of 9 incremental monthly deliveries.

[https://www.infosysconsultinginsights.com/2019/06/12/the- ris...](https://www.infosysconsultinginsights.com/2019/06/12/the-risks-of- moving-to-mature-agile-too-fast-a-cautionary-tale/)

"Boeing was an early Agile adopter in 2008 surpassing its rival, Airbus, in 2012 by deploying a newly renovated 737 Max 8 faster to market.

[...]

The 2008 article Boeing Frontiers- Goin' Agile by Doug Cantwell from Boeing describes how Boeing, in partnership with Lockheed Martin, created an Agile lab to move changes to the aircraft to market it faster, cutting down flight test times from months to days. "

<comment><USER16> The baby analogy is pithy, but I don't really see the comparison.

You don't do your software development in increments smaller than a month? What does that mean, you spend two months just writing specs?

<comment><USER15> I'd hope that it takes more than 2 months for specs at Boeing. No, we don't write the specs that long, if any. I mean that would be so w-word. In our case while usually almost everybody is on the same page that legs should be attached lower and hands - higher, the actual attachment points and number of the legs, hands, etc. may be pretty fluid through the iterations, and especially the things like number and topology of digits or the shape, number and location of eyes and other sensors.

</comment></comment></comment></comment><comment><USER17> What I would like to know is what the software bug was. Unfortunately the article does not say it, and I am sure no information online exists about this.

</comment><comment><USER18> On a certain blog that is completely outside acceptable standards for wrongthink and political correctness, a very popular topic of late is why NASA seems to have it in for Elon Musk Personally and SpaceX generally. The commonly stated reasons, and I will be paraphrasing and transliterating freely, are: HR culture defining administration wide objectives and methods and reasoning, professional embarrassment over languishing reputation, gross incompetence, turf defense of budget and status, and a desire to stay firmly planted on Terra while being lauded for dreaming of the stars.

I am always skeptical of any argument that is unfamiliar, but more and more it does appear that NASA has lost its way. The shuttle was an obvious mistake in retrospect; there may even be some credibility to the obscure theory that NASA only did it to further separate themselves from DoD. I think NASA has become a political creature that is less concerned with science and more concerned with SCIENCE™. If this is the case, they will fight tooth and nail against any expansion of manned space exploration (because it will be both private and military in nature), the will fight against innovation that doesn't spring from their own workshop(s), and they will use Cape Canaveral (and their heritage facilities/infrastructure) as a way to bully "adversaries" into submission.

I hope this isn't the case, and if it is, I hope they can reverse whatever practices and policies that have led us to where we are. As it stands though, it appears NASA is more like OSHA then it is like its historical instance.

<comment><USER19> > On a certain blog that is completely outside acceptable standards for > wrongthink and political correctness

What does this statement really add besides political signaling?

<comment><USER20> It is important as a community that we are aware of the criteria, both claimed and actual, which guide the moderation of our community. Statements like this give people like me an opportunity to research and learn more about the decision making of the mods.</comment></comment></comment>


Building a CustoMac: Buyer's Guide - <AUTHOR> http://www.tonymacx86.com/446-building-customac-buyer-s-guide-october-2014.html <comment><USER2> I tried once but now I don't understand it.

The main benefit for me using OSx is that is a nix desktop os that works well on a very specific hardware. Having used linux on the desktop before for years I always had some problem with drivers and alike.

If I were willing to deal with these kind of issues I'd do it with some linux distribution not osx.

I guess there are some cases like developing software for Apple os.

<comment><USER3> I can only speak for myself, but I Hackintosh because I need more computrons than I can get in a retina MBP or a Mac mini and I'm not paying $5K for a Mac Pro. My desktop (a Nehalem i7 with a Radeon HD6870) is still competitive with every Mac they field, aside from that Pro, and I paid about a grand for it three years ago.

Even aside from the lack of basically essential applications like Photoshop and Illustrator, I'd rather invest a little effort making OS X work than work every day in a Linux environment. The desktop experience, be it GNOME or KDE or XFCE, is at best lukewarm and usually leaves me asking in vain why this software hates me and wants me to waste my time.

<comment><USER4> Same here, I run a spec that Apple simply won't sell me. The moment they sell me a computer that's user upgradable over time and allows me to choose the monitors (no glare, please) that fit my needs, I'll say TAKE MY MONEY!

My Hackintosh built in 2012 for less than $800, it has:

\- Core i5 3.4 GHz (still competitive with Mac CPU specs sold in 2014 and into 2015) \- GeForce GT 640 with 2 x DVI + 1 x HDMI for a triple monitor setup (much better than anything in Mac Minis and some iMacs) \- 2 SSD drives for main OS \- 2 x 3TB magnetic drives (sync'ed to Amazon Glacier)

Note that two years after my initial build, faster CPU options and graphics cards can be swapped in with incremental upgrades as my requirements increase.

I'll post separately in this thread tomorrow about my recommendations and experience running this machine, but it's hands down the best Mac money can't buy, with room to grow.

I don't do it because I don't want to give Apple my money, I have to do it because Apple won't take my money.

-

P.S. IMO, Hackintosh only makes sense for desktops. While the various methods could get it to work for laptops, no manufacturer comes close to Apple's build quality. That trackpad is just amazing.

</comment></comment></comment><comment><USER5> The Hackintosh movement is still going strong. One would think Apple would make their life difficult but quite the opposite appears to be the case: there are a few well-understood workarounds to get OS X working on an off-the-shelf PC, mostly just audio and networking.

Be careful if you choose not to follow the guides, though! There's a reason most Hackintoshes use Gigabyte motherboards, Atheros wireless, etc.

\- Just another happy Hackintosh user.

<comment><USER6> Once it's set up and working the way you want, how often do you find yourself dealing with small issues?

<comment><USER7> There are a few different kinds of issues that come up.

Software updates are a pain. Most of the time they work fine (especially now that Apple has more commodity hardware and public OS betas). Sometimes there are issues though and it is just always smart to wait a few months while they are figured out. If you are the sort that always wants to be running the latest OS version you'll find this frustrating or you'll spend a lot of time updating. My MacBook Pro was running Yosemite from day one. My hackintosh is still on 10.9.5. There are a few other minor software issues that come up.. iMessage is always a chore to get working.

On the hardware end you get much greater build to order flexibility. You are limited in hardware to largely things that Apple uses somewhere in their product line but this still gives you quite a few options since there are a few very useful combos that Apple just doesn't sell. My configuration is basically an iMac without a screen and with the Mac Pro graphics card. A Mac Pro would require me to buy ~$2000 of Xeon hardware and a second GPU, neither of which I need. An iMac would saddle me with a mobile GPU and non-replacable glossy screen. As a bonus I have 5 different internal SATA drives (with room for more) and a Blu-Ray burner.

That said, there are a lot of things about Apple hardware that I miss. I don't have any Thunderbolt ports though and the graphics card is full of legacy DVI ports instead of useful DisplayPort ones. The machine is large and uses way more power and throws off way more heat than an Apple machine. I had to do some careful design work to get something quiet and it is still not as quiet as Apple hardware. Sleep has never worked reliably. Boot screen support for my graphics card doesn't exist so I have to physically unplug video cables if I want to see what is happening during boot up (say if I want to reboot in Linux or Windows or from a recovery partition). The audio ports don't have the third contact for a headset like Apple's do so I need a USB headset.

Overall, as a desktop solution for home use, non-commercial software development, and gaming it lets you be more cost efficient with your computing hardware at the price of time spent researching and tinkering. Particularly so if your use case is one that Apple doesn't cater to like gaming or anything that thinness isn't a top priority. Once it was set up I don't tend to have problems. My hardware was ordered with Hackintosh compatibility in mind though. Problems typically tend to be clustered around OS upgrades or hardware changes rather than day to day issues (except for issues due to hardware constraints like sleep/wake and boot screens). It is otherwise pretty stable.

I'd never recommend it for a laptop, a non-technical person, anyone who has more money than time, or anyone who needs something reliable/with manufacturer support/help. I wish I could justify a Mac Pro for my use case but I can't at 3-4x the price. I have a MacBook Pro for serious work which lets me take on more risk of having the desktop out of commission due to any issues.

<comment><USER8> Ultimately comes down to the trouble of building your own Hackintosn vs Organic Mac with smooth future upgrades ...

Worth to note that the latest Mac mini has dropped to $499, that makes Hackintosh even more unattractive

[http://www.nextofwindows.com/buying-a-cheap-mac-mini-vs- buil...](http://www.nextofwindows.com/buying-a-cheap-mac-mini-vs-building-a- hackintosh-pros-and-cons-late-2014-edition/)

<comment><USER9> Yup, and the CPU in that one is slower than the CPU in a (base-model) Mid-2011 Mini. What a deal!

</comment></comment></comment></comment></comment><comment><USER10> This is a little odd to post here. It the same article posted monthly, slightly updated each month to include new and updated info.

Having said that, I used the tonymacx86 guide to buy and build my hackintosh. My details: [http://envoy510.wordpress.com/2014/03/01/build-complete- the-...](http://envoy510.wordpress.com/2014/03/01/build-complete-the-new- hackintosh-is-a-success/)

</comment><comment><USER11> It's worth noting that this site, TonyMacx86, isn't well-liked by some of the Hackintosh community, because they plagiarise and rebrand software and drivers helpful or necessary in Hackintosh setup. The guide may be useful, but please get your setup tools from the original sources.

My main source for this is conversations I've had in IRC, but it's also been noted elsewhere.[0][1][2][3][4][5][6][7][8]

Also, apparently they have weird anti-piracy measures on their software... software which they stole from others![9]

If you want Hackintosh install software which isn't stolen, I suggest myHack: [http://myhack.sojugarden.com/](http://myhack.sojugarden.com/) (I'm unaffiliated with it, but I've used it and I've had it recommended to me.) Unfortunately, myHack is now proprietary, because the author has had their code stolen in the past. It is, however, freeware.

[0] [http://prasys.info/2011/01/tonymac- seriously/](http://prasys.info/2011/01/tonymac-seriously/)

[1] [http://www.reddit.com/r/hackintosh/comments/17cb3x/have_any_...](http://www.reddit.com/r/hackintosh/comments/17cb3x/have_any_other_people_new_to_osx86_hacking_found/c850t3a)

[2] [http://gigabytedaily.blogspot.co.uk/2012/04/gigabyte-uefi- bi...](http://gigabytedaily.blogspot.co.uk/2012/04/gigabyte-uefi-bios-perfect- fit-for.html?showComment=1370171495963#c6546710102114784135)

[3] [http://forum.osxlatitude.com/index.php?/topic/626-d620-help/](http://forum.osxlatitude.com/index.php?/topic/626-d620-help/)

[4] [http://archives.somethingawful.com/showthread.php?threadid=3...](http://archives.somethingawful.com/showthread.php?threadid=3558672)

[5] [http://rog.asus.com/forum/showthread.php?32906-ASUS-UEFI- vBI...](http://rog.asus.com/forum/showthread.php?32906-ASUS-UEFI-vBIOS-tool- for-GTX-600-series-cards!-It-s- Here!&s=379a275a55d98d9b86e048febc56885e&p=294927&viewfull=1#post294927)

[6] [https://news.ycombinator.com/item?id=8468789](https://news.ycombinator.com/item?id=8468789) (HN post, turn on showdead)

[7] [https://twitter.com/Zackehh9lives/status/337548817513717760](https://twitter.com/Zackehh9lives/status/337548817513717760)

[8] [http://forum.osxlatitude.com/index.php?/topic/3593-myhack- vs...](http://forum.osxlatitude.com/index.php?/topic/3593-myhack-vs- unibeast/?p=25760)

[9] [https://web.archive.org/web/20130215124559/http://tkware.inf...](https://web.archive.org/web/20130215124559/http://tkware.info/2013/01/27/hypocrisy- thy-name-is-tonymacx86/)

<comment><USER12> I don't think anyone is surprised when a software piracy site doesn't have careful copyright attributions for all of its piracy tools.

<comment><USER13> Don't fall for that story.

Building a Hackintosh is far from illegal, it's merely breaking Apple's EULA, and even that might be null in many places (especially EU).

<comment><USER14> They are both violating licenses authored by Apple to protect their copyright. In one case, the APSL, in the other, an EULA.

<comment><USER15> MatekCopatek's point is that just because you are breaking Apple's bullshit licenses agreement, doesn't mean you are breaking the law.

<comment><USER12> You are making an unauthorized copy of their copyrighted software.

Copyright infringement is illegal.

<comment><USER16> it's that simple right- go back to facebook -it's where you belong.

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> Do these rigs break down with Apple patches or the like? Can I reasonably expect a setup now to work 5 years from now?

<comment><USER18> As long as a standard accepted configuration is used stuff tends to "just work". I have my Hackintosh identified as a MacPro3,1. Standards OS X maintenance releases upgrade just fine. I try to be careful with full OS upgrades which usually just involves waiting a month or so to see what problems people run into. Though, I do that even with official Apple hardware because inevitably there is some issue with official Apple hardware or software that ends up screwing me until fixes are pushed out.

The only reason the hardware would stop working is if Apple drops the similar official hardware as being supported in a new release such as when they dropped 32-bit EFI support.

</comment></comment><comment> dj-wonk This compares pricing of some Apple offerings versus their hackintosh counterparts: [http://www.macbreaker.com/2012/05/how-much-money-will- hackin...](http://www.macbreaker.com/2012/05/how-much-money-will-hackintosh- save-you.html)

<comment><USER10> The "Mac Pro vs. CustoMac Pro Socket 2011" comparison is completely bogus, because the CustoMac has space for hard drives and the Mac Pro requires the purchase of an external bay that runs $1,500 to $2,500. That moves the base up to $4,500 and $5,500 for people that need more than 3 hard drives (me). Now you're talking $1,550 vs $5,500 and that is the precise reason I didn't buy a Mac Pro and I did build a hackintosh.

</comment></comment><comment><USER19> While I'm not saying it's not fun to try and run OS X on PC hardware, can anyone explain to me how this is not morally equivalent to unauthorized copying / software piracy, given that they are both violations of the license agreement?

<comment><USER20> If you acquired the software legally, what then do you think?

Now ask yourself this question if you legally purchased Oracle or MSSQL, and were evaluating for an application, testing, etc - and now I inform you that that's unauthorized, and Oracle's license forbids you from doing any form of benchmarking related to the database. Do you feel that you are being immoral to test your application?

<comment><USER21> Oracle licensing allows you to benchmark the software. You're not allowed to disclose the results without permission.

[http://www.oracle.com/us/corporate/pricing/olsa- uk-v111003-0...](http://www.oracle.com/us/corporate/pricing/olsa- uk-v111003-070670.pdf)

You may not:

• remove or modify any program markings or any notice of Oracle's proprietary rights;

• make the programs or materials resulting from the services available in any manner to any third party for use in the third party's business operations (unless such access is expressly permitted for the specific program license or materials from the services you have acquired);

• cause or permit reverse engineering (unless required by law for interoperability), disassembly or decompilation of the programs; or

• disclose results of any program benchmark tests without Oracle's prior written consent.

<comment><USER20> Disclose to whom, though? It doesn't specify 'externally' to your company, 'publish' or 'to any other person'.

</comment></comment></comment></comment><comment><USER22> Just quickly doing the math in my head, it seems like the Mini costs roughly the same as a real Mac Mini. So, what's the advantage of going the DIY route? I presume the price gap grows on the higher end systems?

<comment><USER23> What's 'real' about the 'real' Mac Mini that's not real about this one?

For one I would assume that since it's built up from separate parts you can upgrade it at will, something you can't really do with a 'real' Mac Mini.

<comment><USER24> > What's 'real' about the 'real' Mac Mini that's not real about this one?

Warranty and support. If Apple releases an update that breaks your Hackintosh then too bad, if Apple does it to your $100 more legit Mac Mini then you can moan at them if nothing else.

I do, however, completely agree with the upgrade argument. Particularly with the latest gen' of Mac Mini which don't allow the RAM to be upgraded because greed.

<comment><USER20> If your definition of support is the ability to "moan at [the vendor] if nothing else", is it really worthwhile to consider as an alternative? Your hardware is still warrantied by the respective vendors.

<comment><USER25> You can't walk into the Atheros Store at the mall to get warranty service.

<comment><USER26> Eh, that makes no sense. You can't go to the AMD store in your mall to get your Mac Pro fixed either.

You can however, if you buy your HackPro all together at one store, go to that stores service desk and have any component replaced, they might even give you a loaner to work on while your HackPro is being repaired.

Most computer stores have better support than Apple too.

<comment><USER25> You can walk into an _Apple_ Store on most cities.

</comment></comment></comment></comment></comment></comment></comment><comment><USER27> Personally I am a happy cow with my hackintosh able to drive 4k @ 60hz :-) GTX750/UP2414Q with Yosemite

<comment><USER28> Which monitor are you using?

<comment><USER27> Dell UP2414Q

</comment></comment></comment><comment><USER29> After a bit of brain storming between mac and hackintosh, I eventually decided to buy a mac mini 2012. I agree that the site appears very convincing, but I wonder if it's worth putting the effort to build a system that may or may not work 5 years from now.

I took the cheapest mac mini 2012, $499 at BHPhoto, and upgraded the RAM to 16 GB, and HDD to 512 SSD. Couldn't be happier! I can see this device working 5 years from now.

<comment><USER30> The installation is by now very straightforward, if you have for example Gigabyte board and standard components. In 2012 I bought a i7-3770, 8gb ram, nvidia gtx 680, gigabyte-z77-d3h and 256 SSD. On such hardware all it takes is readjusting some BIOS settings (turn on AHCI, disable Intel Vd) and maybe install a ethernet driver and sound driver. I'm pretty sure an equivalent iMac would have been significantly more expensive, than what I paid then.

<comment><USER29> I agree - the front cost is not as high as it used to be. Although, the maintenance cost is probably high which is what I was hinting to in my comment. How has your experience been around upgrades in the last two years? The apps like iMessage check BIOS to ensure that it's apple hardware that they are running on. And between upgrades, those things can potentially change. How many adjustments have you had to make along the way?

</comment></comment></comment><comment><USER12>
      Your karma check for today:
      There once was was a user that whined
      his existing OS was so blind,
      he'd do better to pirate an OS that ran great
      but found his hardware declined.
      Please don't steal Mac OS!
      Really, that's way uncool.
      (C) Apple Computer, Inc.

(from a low page written in memory when Don't Steal Mac OS X.kext is loaded)

<comment><USER4> Apple is rolling in cash from the 20+ Macs/iPhones/iPods I've personally owned or got from work over the years, I don't feel a tinge of guilt, I'm probably one of their best lifetime customers.

</comment></comment><comment><USER31> There are two fairly consistent benefits to running OS X:

1\. It usually comes installed on great hardware.

2\. It's less vulnerable to most things than Windows.

Beyond that, if you choose to build a Hackintosh, in my opinion you (for whatever reason) enjoy OS X enough to depend on it but don't like Apple enough to run their OS without paying their hardware premium (entirely understandable from the price perspective but a little illogical if you take it a bit further).

Frankly, I can't see any reason for the Hackintosh middle ground other than people who can't cope without the OS but can't afford the hardware. The software is little more than a neutered and compromised version of BSD that lets you part way into a walled garden (cue _It 's a trap!_ meme).

Granted: There's also the requirement of a Mac for iOS development... but guess what? You're still stuck with the developer program membership fee. Save $500 here, lose $100 a year there, along with probably being in violation of half a dozen usage limitations.

<comment><USER32> First, I don't think Apple hardware is expensive when you compare it to other machines with similar specs.

The reason for building my own Hackintosh was mostly getting a machine that was good for gaming (a powerful GPU). It wasn't about saving money, as the same money would have bought a decent iMac, but using that money better.

<comment><USER7> I'd second this. In general, Apple hardware is not terribly expensive for what you get (assuming that you don't value things like software, industrial design, power efficiency, noise, compactness at zero because you personally are not interested in them).

A Hackintosh lets you get combinations of hardware that Apple doesn't sell. It also lets you add or remove features that Apple doesn't offer on any model such as replaceable components and large/loud/inefficient machines. In many cases this does end up being cheaper because you are purposely choosing to use fewer or lower quality components.

</comment></comment></comment><comment><USER16> Tonymacx86 = a glorified Amazon Affiliate blog.

Dude is all about driving traffic to his amazon affiliate account. brilliant.

I can't complain because the site has helped me from time to time.

Tonymac has been good for the overall main streaming of the hackintosh movement. Back when OSx was $20 he forced the app store purchase (good i guess)

</comment><comment><USER33> I built one 3 years ago and have been mostly pleased. It's a pain that with every point release I have to re-apply the patches for my audio to work, and migrating to new OS X versions can be nerve-wracking, but tonymac's site is an outstanding resource to help you through the process.

</comment><comment><USER34> I would love to see such a list for linux distros !

</comment><comment><USER25> Those parts links need a List Link to easily view each bundle together on newegg/ amazon.

</comment><comment><USER35> Id like to find someone reputable to build one for me. Any volunteers?

<comment><USER4> I've built Hackintoshes since 10.7, but I would never offer to build one for friends and family, only because I know I'll be called upon to fix the inevitable problem during software updates. This is a social obligation I rather avoid, lest I become the "IT guy" for yet another dependent.

My recommendation is - if you don't have the knowledge or patience to build one yourself, you should not ask one to be built for you, because it will break and you're gonna have an unproductive day/week while you wait for help to arrive. Not worth the headache and lost productivity.

Hackintoshing should be strictly treated as a hobby.</comment></comment>


Show HN: What the Hash? – A chrome extension that explains hashtags - <AUTHOR> https://chrome.google.com/webstore/detail/what-the-hash/dccmckjomcladobbckpcgcgkflnelioc

<comment><AUTHOR> Built this over the weekend to scratch an itch after finding [http://api.tagdef.com/](http://api.tagdef.com/)

Any input welcome.</comment>


Ethiopia to launch its first-ever satellite in 2019 - <AUTHOR> https://www.iafrikan.com/2018/11/17/ethiopia-set-to-launch-its-first-satellite-next-year/ <comment><USER2> > "We explore the universe for the benefit of our people"

lol how about just trying to get food, running water and electricity to most of them first?</comment>


Ask HN: Why Electron? Isn't there an easier and better way? - <AUTHOR> Instead of Electron, why not just an installable proxy server that provides controlled access to resources on the users PC and JavaScript objects in the browser for programmatic access to the proxy server.
If you could put an icon on the desktop that displayed a browser Window without tabs and menus, then that's a better Electron - without the complexity, deployment issues and security concerns.
Isn't this a much better and simpler alternative to Electron? <comment><USER2> PWAs do exactly what you propose, but desktop support is kinda low: [https://caniuse.com/#feat=web-app-manifest](https://caniuse.com/#feat=web- app-manifest)</comment>


Google Cloud Is Having IO Issues in US-EAST1 - <AUTHOR> https://status.cloud.google.com/incident/compute/19012 <comment><USER2> This outage is affecting Discord.

[https://status.discordapp.com/](https://status.discordapp.com/)

<comment><USER3> Is it just me or are Discord's status updates legendarily bad to the point of being entirely useless? As a user of the discord app, don't tell me the "API is having issues." Just tell me, "Discord is currently down. We are working on it and apologise for the disruption." Everything else is unnecessary line noise.

<comment><USER4> Mentioning the cause of the issue seems better than just "shits broke yo" to me.

<comment><USER3> Really? What in their status update read to you as "the problem is on our side, not yours"? Understand that I'm a programmer and couldn't figure that out.

<comment><USER5> Because if it was a problem on your end, it wouldn't be listed on their status page....?

</comment></comment></comment></comment></comment><comment><USER6> I am in general a big fan of GCP, especially for startups. In many cases I find I can be productive faster in GCP compared to AWS, in the sense that it's easier to do "wrong" things in AWS if you don't have a top notch devops person.

That said, it seems like GCP has a real, significant problem with overall reliability. While I don't have numbers to compare, seems like I see frequent outage notifications on HN for GCP. They really need to focus more on reliability than new features.

<comment><USER7> In case you're curious, here's some logs about their status [https://status.cloud.google.com/summary](https://status.cloud.google.com/summary)

Looking at Cloud Compute, the one responsible for the outage today and I think the big one a few months ago (13 hours!!!), they still do achieve 99% uptime (having been down 81 hours total this year).

While 99% uptime "sounds" great, this is paltry in comparison to AWS, which has set the standard for 99.99% (also known as "4 9s") in reliability, translating to about an hour of downtime per year.

Just gives you some more perspective and concrete numbers. Perhaps one of the reasons you find GCP "faster" is due to more devotion of resources to "speed" over "reliability".

<comment><USER8> Where is AWS logs for all service outages, partial or not?

Can't seem to find them, only "selected" outages. The recent, several hours long, service degradation in Frankfurt EC2 isn't in the historical list, seems like it is only in the rolling status history?

AWS and GCloud seem to also be reporting disruptions completely differently, AWS reports on tons of smaller pieces which makes any "aggregate" uptime become something completely different than if you report on larger aggregates as GCloud seems to do.

Unless I'm missing something, I don't see how one could compare comparing service availability reasonably without running large numbers of "canary" instances on both providers to actually measure aggregate availability?

</comment></comment></comment><comment><USER9> Cloud SQL has been down for me for 45 minutes now. The status page still doesn't say, but it says this in the Known Issues for technical support:

"We are experiencing an issue with Cloud SQL instances hosted in the us-east1 region, beginning at Saturday, 2019-12-07 10:00 US/Pacific. Symptoms: Some Cloud SQL instances hosted in this region are becoming unavailable, and are refusing connections. Self-diagnosis: Connections to the Cloud SQL instance are rejected. Workaround: None at this time Our engineering team continues to investigate the issue. We will provide an update by Saturday, 2019-12-07 12:04 US/Pacific with current details."

</comment><comment><USER10> The most recent update indicates that this outage is only affecting a single availability zone. [https://groups.google.com/forum/m/#!msg/gce- operations/oYoFJ...](https://groups.google.com/forum/m/#!msg/gce- operations/oYoFJiQzgVk/VubkMZ-pBgAJ)

</comment><comment><USER11> Well here goes the 4 nines.

<comment><USER12> No worries, that's what the other datacenters are for. :- )

</comment></comment><comment><USER13> Interesting, do they use a SAN or is it local storage?

<comment><USER14> Google Cloud Persistent Disks are implemented on a kind of Storage Area Network (AFAIK it's based on IP networking, IIRC it's iSCSI over Colossus /D, not on fiberchannel or other off the shelf SAN tech)

<comment> joatmon-snoo It's not iSCSI (at least I don't think so).

The closest thing to public literature about Colossus and D that we've ever published is the Procella paper, which describes the abstractions that Colossus provides for it. In some ways it's similar to GFS (RPC interface, writes are generally append/overwrite) but many things are completely different now.

<comment><USER14> Yeah, that's what Colossus is, but t it's not (was not?) suitable to directly implement a block store such as a (remote) disk.

You need something that provides the block store abstraction on top of the primitives exposed by Colossus/D. Think of something like what modern SSD do in order to work efficiently with the underlying flash memory.

Then you have to hook that adapter in your virtualization stack (e.g. kvm) so you can boot from the volume and mount it from inside the VM. You could implement a kernel module or do it internally in kvm/qemu somehow, but iSCSI provides a straight-forward way to implement this in user-space: you have a process on your physical machine that speaks iSCSI upstream, and speaks Colossus/D RPC downstream.

(I don't know if they still do this but I have a vague memory of somebody describing the stack of an early version of GCP while I was working there long time ago)

<comment><USER15> It's a custom log-based block device implemented on top of Colossus/D in the user-mode lib in the virtualizer (Vanadium). Guest OS communicates using NVMe or VirtIO, Vanadium intercepts, calls PD lib.

This design has only one hop to the storage node. Low-latency workloads benefit from this design, high-bandwidth workloads sometimes actually benefit from off-loading PD to another host. To do iSCSI with one hop, you need to implement iSCSI interceptor, and basically you would have same design with less flexibility for guest OSes.

The irony, of course, that all this is a lot of legacy technologies needlessly wasting computer power: guest file-system trying to communicate with 4K blocks with "block device", which goes through multiple layers of queues, then is re- maps to another abstraction, which goes over network to multiple hosts, etc. Not a single cloud customer ever said "we are so excited to manage volume sizes and bandwidth quotas for PD". Better design would be to implement true data center-level filesystem to better support container workloads and leave PD for legacy cases, but Google's storage management is so detached from reality, that it's impossible to do cross-organizational project like this.

<comment><USER14> What do you mean by "true data center level"? A FS with posix semantics suitable for normal apps doing file IO or something else?

<comment><USER15> I would break it down like this: 1) FS-core: provide FS-like semantics on top of D (or Colossus/D). Apart from data format and GC challenges, the piece that is missing is fast DC-level locking service.

2) Then, for VMs you can do FS driver, jump to VMM and booms, you are done, multiple legacy levels of re-packing and redirection are gone. For shared access cases you do NFS/Samba interceptor and then same code path as above.

This system would be highly beneficial not only for Cloud, but for other Google properties as well: it would provide normal posix FS to Borg jobs. Amounts of equilibristics required to use any open-source package is enormous and by this time exceeded costs of developing FS multiple times, ask YouTube, MySQL, package management, etc groups.

Another example of Google's storage craziness is cross-dc storage. This should be low-level Colossus responsibility. Instead godzillion of teams implement their own, GCS, PD, Spanner, Placer, etc. Crazy.

<comment> joatmon-snoo Haha, yeah, I do wonder about the insanity on a pretty regular basis :)

I will say though, that most of the time I don't want to use open source stuff. Observability is pretty crap, I don't want nor need software that uses write() without fsync(), and the assumptions that most OSS makes about FSs gives me nightmares on Borg.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> The beauty of distributed systems is that you spread your services across lots of different computers, so that when one of them goes down, they all go down.

<comment><USER17> Not sure what you mean here. Would a similarly architected non-distributed system have higher levels of availability?

<comment><USER18> He was joking :) a buggy or poorly designed distributed system might behave more like a house of cards than independent silos

</comment></comment></comment><comment><USER19> Is this the beginning of Google's wind-down of "cloud services", as part of the de-emphasis of Alphabet and the refocus on the core ad business?

<comment><USER20> yes, they're moving out of a profitable business where they have a lot of knowledge about.

and they start this move with an outage during the busiest time of the year

why not?

<comment><USER21> > yes, they're moving out of a profitable business where they have a lot of > knowledge about.

Rackspace is trying to get out of the public cloud game. We had $20k/mo account with them and the rep called me every month asking if we wanted their help (professional services) migrating to AWS. I was baffled but they admitted they don't want to be in the Cloud game anymore and wanted to get customers off their platform.

<comment><USER22> The notification on their website is interesting:

 _Rackspace announced that it has completed the acquisition of Onica, an Amazon Web Services (AWS) Partner Network (APN) Premier Consulting Partner and AWS Managed Service Provider._</comment></comment></comment></comment>


ScURLr - the screenshot generator/visualization tool for web URLs - <AUTHOR> http://www.scurlr.com

<comment><USER2> I think what you are going for is something like viewzi's screenshot presentation of search? But maybe not, your 'Usage' page says I can use your service as a host for screenshots?

Either way, I entered a site, and even looking at your gadget demo, all I'm getting is 'screenshot is queued for processing. Maybe you are getting tons of hits right now, but unfortunately, this seems to me to be much more difficult than just grabbing a screenshot and hosting it myself.

Maybe you can expand for me on why I would use this. I think I'm missing the point. I suspect I'm not the only one.</comment>