RedesignGoogle: clarity wins, with risque and rebuilt not far behind (NSFW) - <AUTHOR> http://blog.webmynd.com/2010/02/01/clarity-wins-with-risque-and-completely-rebuilt-not-far-behind/

<comment><USER2> If Google switched to anything like that, I'd be tempted to GreaseMonkey it back to how it was. It looks a bit like Bing. Just to start: Not every result has the domain showing (unless you mouseover) which makes it hard to filter the crud at first sight and results are spread too far apart. When you do mouseover, the URL is in a realllly bright, hard to read green. I thought fades, pastel colors, and stupid mouseover effects went out in 2008.

I take back what I said about Google not having enough creatives on the other Google story today. At least the engineers have made something that's usable..

<comment><USER3> I don't get the feeling that this design saw much user testing. As you describe, the domain plays an important part in helping mentally filter results and thus doesn't really merit relegation to rollover visibility.

What I think _would_ qualify for that is the rest of the URL path.

Overall, as nice as it all looks, there are some serious discoverability issues. "Show options" doesn't need to be shown in as much detail as Google has it, but the plus-sign itself isn't enough to go on. The rollover visibility for the other Google products just makes it hard to find them; the header isn't that noisy with them visible. The single gear for settings/sign in is a little better than the lone plus sign, but still, such condensation is extreme, especially for the importance Google places on getting users to use accounts.

<comment><USER4> I agree with everything you've said. Plus, the page is so javascript-heavy, it probably crawls in IE6. It already makes my scrolling a little less smooth. Interface responsiveness and discoverability trump flashiness and visual minimalism.

Other nitpicks: the slightly grey (cream?) background is a weird, subtle annoyance, and the lack of _any_ underlined links would definitely get Nielsen's panties in a bunch.

One thing I think the (re)designer did get right: The AJAX-loading down arrow at the bottom of the page. I wonder if there's any reason Google hasn't tried something like this over their more traditional pagination model. I'm guessing it has something to do with advertising and/or existing SEO conventions of referring to result ranking by Google page #.

</comment></comment></comment><comment><USER5> _Google spends a lot of time tweaking their front page when they really should be working on their results page, which has stayed the same for about a decade now._

Actually they spend a ton of time tweaking the results page, and there have been a lot of changes in the past decade. Most of them are fairly subtle: fonts, spacing, colors. Some of them are quite obvious: the Comment, Promote, and Remove links, for example.

They've also integrated other forms of search into the results page (maps, shopping, twitter), and put a lot of work into optimizing the load time. There is at least one (fairly large) team working basically full-time on the results page. They do a lot of A/B testing; only design changes that "work" are released to everyone.

<comment><AUTHOR> Does Google personalize the design of the search page in any way? A/B testing to find the best design on average won't give you the optimal design for each individual.

</comment></comment><comment><USER6> Not sure how seriously to take a contest where the second place entry includes a naked woman.

<comment><USER7> I have to agree, second place looks exactly like google but different colours + naked woman.

<comment><AUTHOR> Did you try the design? There's a lot more to it than the background.

<comment><USER7> Oh, no sorry. Using Chrome which isn't supported. Apologies if I was wrong!!

</comment></comment></comment></comment><comment><USER8> NSFW - you've been warned, albeit, probably like me, belatedly.

For anyone wondering why - the second redesign down features a nude woman as the background.

<comment><AUTHOR> Really?!

I would have warned if I thought it was an issue at all. Do others also think the small thumbnail of the Go Ogle design is NSFW? I doubt I would have warned even with a larger thumbnail but maybe I'm miscalibrated...

<comment><USER9> The fact that it's tasteful art doesn't change that it's nudity. If 1% of the population will get offended, it's best to at least put up a warning.

<comment><USER10> Who is offended by nude art? The world's museums are _packed_ with nude art.

Porn is a different matter.

<comment><USER8> Winning an argument with your boss or HR person over whether it is art or not is pointless when you're being fired. Nudity in the workplace is generally frowned upon. Whether that is right or wrong is another point entirely.

<comment><USER10> I never argued that nudity in the workplace is appropriate.

It is, however, pathetic to be _offended_ by nudity in and of itself. There's a distinction between pornography and nudity.

Think breast-feeding.

<comment><USER11> From the under-appreciated movie Copland, "Being right isn't a bullet-proof vest."

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> While the winning design is nice and quite devoid of visual noise, I did find the mouseovers that display the "Cached" and "Similar" links along with the green URL to be distracting precisely because they would appear during mouseover and catch my eye more than if they were just there to begin with.

Also, there are probably millions or billions of other web pages in greater need of a redesign than Google's results page. This contest feels like trying to come up with a more exotic flavor of vanilla: Tahitian, Indonesian, Madagascar, etc.

</comment><comment><USER13> I was able to get these running on the latest dev-channel Google Chrome on Mac (or regular Chrome Windows) with the Personalized Web extension (which lets you inject HTML, CSS, and JS, the latter two being the important ones): [https://chrome.google.com/extensions/detail/plcnnpdmhobdfbpo...](https://chrome.google.com/extensions/detail/plcnnpdmhobdfbponjpedobekiogmbco)

<comment><USER14> Here's the required CSS: [http://www.injectiondesign.com/google/designs/air2/2/clarity...](http://www.injectiondesign.com/google/designs/air2/2/clarity.css)

</comment></comment><comment><USER15> Link to a demo of the winner: <http://www.injectiondesign.com/google/>

<comment><USER16> Personally, I find this incredibly unpleasant to use. The URLs and other hidden information is actually quite useful to me. Rollover just isn't fast enough.

<comment><USER15> Agreed - Just providing a direct link - The absence of the URLs really bothered me. It hides an extremely important piece of info (until you mouseover). More than that, the green URL breaks up each result. Without it the results blur together.

</comment></comment></comment><comment><USER17> I like the <http://duckduckgo.com/> design. I use duckduckgo for search now instead of Google.

</comment><comment><USER18> This is a "less-is-more" approach and any designer worth their salt could come up with a similar design (if not 100 more).

The page feels like a page from a contemporary kitchen in architect digest - where you see a huge glass table with maybe one vase in the center. It looks great but it misses out on some of the "roll-up-your-sleeves" and get thing done feel, which is what Google does best.

</comment><comment><USER19> That is a really slick looking interface, good job!</comment>


US student dies a week after North Korea release - <AUTHOR> https://www.ft.com/content/ddfd6186-5535-11e7-80b6-9bfa4c1f83d2?mhq5j=e1 <comment><AUTHOR> I have been following Otto's news since the time he was detained in North Korea. This was the first news I saw this morning in India, really pained and sad to see his fate.</comment>


Ask HN: Should I learn Python 3 or 2? - <AUTHOR>

<comment><USER2> I think nowadays you should just start with Python 3. The majority of the ecosystem is compatible with Python 3, now.

As soon as you have mastered the basics you can learn on how to write Python-3 code that is compatible with Python 2.7. There are some excellent tutorials for that on the net. For new projects there is no need to start with Py27 and then port things to Py3, which is more difficult than writing Py27 compatible Python-3-code.

</comment><comment><USER3> If you have a mac or linux system, I would just learn whatever is already installed on the machine. For most systems this would be python 2.7.X. This will be a good version to learn the basics of python and most third party libraries will be compatible with it.</comment>


On blockchains and why secure ledgers don't require proof-of-work - <AUTHOR> http://pfrazee.github.io/blog/secure-ledgers-dont-require-proof-of-work <comment><USER2> Ugh. He completely misunderstands what PoW (or PoS) are for. The _entire point_ of PoW is deciding between two valid & correct blockchain states.

Alice owns a bitcoin. Alice validly signs a transaction transferring that bitcoin to Bob. Alice also validly signs a transaction transferring that same bitcoin to Charles.

WHICH IS CORRECT? Neither is a forgery. Both signatures are valid. If Dave downloads the blockchain, or receives both transactions, he can't just look at them and determine one of them is fake. Neither is fake. He needs a way of arbitrating who actually has the bitcoin now - Bob or Charles.

PoW is that arbitration process. Dave looks at the competing blockchains (one with Bob having received it, and one with Charles having received it) and can trust that everyone in the world will respect the chain with greater PoW behind it.

Paul's system has no way of addressing this other than "trust the central authority to process transactions in the order they receive them". Thanks, pal, that's called e-cash, and was invented by David Chaum in 1983.

<comment><USER3> > Paul's system has no way of addressing this other than "trust the central > authority to process transactions in the order they receive them". Thanks, > pal, that's called e-cash, and was invented by David Chaum in 1983.

Flatly wrong. Decentralized consensus is not a necessity to create trustless operation. Monitoring service operation via a secure ledger provides trustless operation. As I said, the point of PoW is to provide strict transactional consistency in a decentralized network. You're just describing that process mechanically.

<comment><USER2> Hi Paul. I'm Brock.

I hope we're not talking at past each other, but I read your post as proposing a system where there's a central party that computes transactions "in the open" in a way that third party observers can verify.

That's hardly useless, but it's not a replacement for Proof of Work. PoW is for decentralizing the ability to choose between competing valid blockchains. It prevents double-spending by making the benefit of double-spending (the value of the your transaction) far less than the cost of double-spending (the electrical cost of 51% of the mining power for 1 hour or so).

Your system uses a centralized host (see "Services with Secure Ledgers", paragraph 2), and (I presume) third-party observers can verify a "secure ledger" by seeing which one has been more recently signed and time-stamped by the single host.

I mean, sure, centrally hosted servers are more efficient than Proof of Work. No one who know what they're talking about disputes that. But the _whole point_ of PoW is to allow decentralization without a single host.

<comment><USER3> Hey Brock.

My argument is that decentralized consensus is actually a political solution. It has technical merits -- it makes it easier to deal with a host that breaks the contract, because there are lots of nodes, so you just 'route around' the faulty host's output. But that's a technical solution to a political problem: how do you deal with a bad actor. And we deal with that every day with existing services, by switching away from bad actors. You handle bad behavior politically. If we can lower the cost of a switching, and we can build accountability into the system, then we're getting the same kind of value that decentralized consensus provides at substantially lower system cost.

<comment><USER2> How do you "switch" from a global shared ledger that everyone uses to a shared ledger that no one uses? I mean, you an, you can fork Bitcoin and start your own, but what does that get you? No one else will use your coin. There will be no market for it and it will have no value.

I mean if you're REALLY lucky you'll start something that's as popular as Litecoin and it will be worth 1% of what your Bitcoins were worth.

Bitcoins are only worth anything because you can go anywhere in the world and people will accept that there is one and only one blockchain, and if you own bitcoins on that blockchain then you own them, period.

Proof of Work allows you to solve bad actors without switching away to a new network and losing all your Bitcoins. Your solution doesn't. If you have a centralized system that centralized party could refuse to honor your bitcoin holdings and wipe out your balance.

This really isn't a new solution. I was serious before when I said David Chaum's ecash (from 25 years ago) was an approximation of this .

<comment><USER3> I think you're right that handling catastrophic failure is the key question for a hosted ledger. You have to find a way for the network to agree on who will rehydrate the balances, so to speak, into a replacement host, and you need to do it quickly. The whole network has to agree on this.

This isn't impossible to solve. You can establish, in the ledger itself, the process for migration after a catastrophic failure. You can set a party which will mediate the issue and decide on the solution. You set up rules for how to reconfigure the network, and trigger them when a corruption proof is published.

I agree it's less elegant than what decentralized consensus provides for handling bad nodes, but you really have to balance this against the expenditure of proof-of-work. The cost of a handling every ledger failure ever will almost certainly be less than the cost of proof-of-work.

Part of my point is also that it's a gamble, which I find questionable, that Bitcoin will become "the blockchain" in the future, because it still has a political reality, and that political reality has involved plenty of forks. So, my point is, between the cost and the political instability, PoW doesn't sustain it's claim.

</comment></comment></comment></comment></comment></comment><comment><USER4> The catch is at the end: "There are some downsides to losing decentralized consensus. A ledger-backed service could manipulate the order in which it handles requests, or reject some requests altogether, and clients would have a hard time proving it." Calling that a "secure ledger" is kind of a stretch.

<comment><USER3> There's aaalways a catch.

See my response to hagreet. Neither of those problems are unfixable.

<comment><USER5> Incidentally, I think there may be a product here that could be sold to financial institutions. Check out

[https://www.hyperledger.org/](https://www.hyperledger.org/) [https://www.r3.com/](https://www.r3.com/)

There are lots of other 'private blockchain' distributed ledgers being pitched right now to financial institutions and to me the distributed aspect of them seems like a bit of an inconvenient and unnecessary complication for those use cases.

</comment></comment></comment><comment><USER6> Security can be extremely simple and efficient when you just have to trust a third party. The author is describing Linked Timestamping [1], which has been detailed since the early 90's.

Removing the need for trust is what takes all the energy.

[1] [https://en.wikipedia.org/wiki/Linked_timestamping](https://en.wikipedia.org/wiki/Linked_timestamping)

<comment><USER3> Well, no, I'm not describing Linked Timestamping (hereafter LT), because LT is a system for creating trustable timestamps, and I'm talking about a system for auditing the state and operation of a service. Hash/block chains are common and going to get more common. LT, Git, Certificate Transparency, Bitcoin, and now what I'm describing.

And, further, I'm not suggesting you trust a third party, but if you feel I am, please point specifically at where.

</comment></comment><comment><USER5> It's fun to see this here after I've just spent some of the afternoon 'pitching' 'Centralised Ledger Technology'. Single source of truth, verifiable, secure, permissioned, efficient, scalable, the advertising copy writes itself (or would if you needed it to, rather than just taking any of the copy from hyperledger or simlar and fixing it up a bit). Any of the people selling private block chain solutions will generally tell you that there needs to be a strong political actor within a 'business network' that can insist on the use of the distributed ledger. The truth of course is that Mr Car Loader or Mr Fruit Picker who is lent on to run a node on the distributed ledger really couldn't care less about whether they are verifying other peoples transactions or not, they'd be just as happy with a web site that they fill the details in, or a signed email system. Indeed, they might ask - why should I be expected to run computation to secure bits of the value chain I never see, I just care about confirming what I've received and what I've passed on, and I can do that by digitally signing a transfer note.

I don't particularly think that using a central secure ledger is surprising or new, but I do think that politically the furor around DLT (and who knows, maybe one day CLT too) has provided us with a fantastic political opportunity to actually fix some of the horrendousness in financial software systems.

To my mind, even if the relevant technological change is pretty minor or nonexistent, this is an opportunity for us to replace a bunch of miserable systems duct taped together with more modern systems that have externally accessible APIs baked in from the start.

</comment><comment><USER7> So if there is no proof of work how do you avoid forks? The author says something about splits being detectable but that doesn't really help us decide on which side of the split is correct.

<comment><USER8> I think this obsession with consensus is a fad.

Forks are ok as long as they can be merged in the short term.

If something forks for a long time and stays forked, there is hardly any reason to establish a total order during the merge!

Think of an IRC netsplit for example. One that happens for a few seconds may attempt to merge back the chats in some fair order they were made, in diff forks.

But if the netsplit happens for a whole day, or month, no one really gives a crap about ordering messages across forks. The merge is too complex! In fact, the resulting conversation would be MORE nonsensical than if you correctly rendered the split conversations as a DAG in the client.

Similarly, if bitcoin forks into bitcoin cash or whatever, and enough validators accept it, I get to "double-spend" my new money now. Proof-of-work is no panacea. If we religiously want consensus then no transaction can ever be truly confirmed - there is always a chance some larger fork comes along and undoes all transactions on my fork going back a whole month. Interplanetary File System has to deal with this.

The problem is that we still haven't evolved our thinking about currencies as DAGs and keep worrying about the double spend problem and turn to global consensus to fix it.

<comment><USER9> In the specific case of currency, practical double spends are a real issue. 'Merging' the state after a double spend requires either forcing the double spender to pony-up, or taking back money from those who received it without being aware of any wrongdoing. That is, unless you are fine with people printing their own currency.

This is rather unique to the case of currency though. Specifically, the history of transactions determines which future transactions are possible. Instead a system that only records promises (but doesn't allow transfer of such promises) would work without centralization. If I promise something to 2 different people I remain on the hook for that promise. The fact that I am effectively 'in debt' on the system isn't an issue because the system gives no guarantees on people meeting their promises.

<comment><USER10> Everybody prints their own currency all the time. Currency is just promises made. Double spend is when you duplicate somebody else's promises that you are holding as an asset.

</comment></comment></comment></comment><comment><USER11> I would agree that _many_ use cases that imply a distributed ledger, do not need a proof-of-work.

Perhaps cryptocurrency still need it, but not many of the 'non-cryptocurrency' use cases.

My argument is centered around a following nuance:

If the use case allows to assume that 'originator' of a particular event is trusted, then the distribution of that event across multiple untrusted servers/access points, _does not_ require a proof-of-work.

The example of how this works is explained in paper " Balloon: A Forward- Secure Append-Only Persistent Authenticated Data Structure

by Tobias Pulls and Roel Peeters

Abstract: We present Balloon, a forward-secure append-only persistent authenticated data structure. Balloon is designed for an initially trusted author that generates events to be stored in a data structure (the Balloon) kept by an untrusted server, and clients that query this server for events intended for them based on keys and snapshots.

" [https://eprint.iacr.org/2015/007](https://eprint.iacr.org/2015/007)

</comment><comment><USER12> The author apparently doesn't understand sh&t about the computer science background of blockchain, since he constantly throws "decentralized consensus" term to mean as a wrong thing. Blockchain does not do that (consensus problem, as stated by computer science, requires the protocol to actually terminate with an output; then, Lamport et al. in their original paper over thirty years ago _proved_ an impossibility theorem that blockchain would break if it was solving the stated consensus problem).

All that blockchain does is to timestamp documents (transactions), the purpose of which is to tell which of the two documents was earlier. Then, the only purpose of proof of work and its derivatives is to artificially slow down signing the documents (transactions), so everybody would have about the same processing speed. This single assumption (that no single entity has computing power comparable to a significant portion of all the others combined) is what allows to choose longer chain in the case of double-spend incidents. When this one breaks, the whole protocol breaks.

There are also other dumb ideas, like that "blockchain is supposed to have a single linear history of transactions". It's not. It would if there was only one party that issues the transactions, so of every two transactions one would be marked as earlier than the other. It's wrong, since there can be incomparable transactions (usually concerning unrelated wallets).

> With proof-of-work, you can have multiple computers make additions to a > blockchain without having them trust each other. That's decentralized > consensus.

No. That's distributed timestamping. Again, consensus is totally different problem (and well-defined at that), but author apparently doesn't know that.

> Instead of a network of miners, you use a single host. That host maintains a > secure ledger which contains the host state and its activity log, including > all requests and their results. That ledger is then published for clients to > actively sync and monitor.

Congratulations, you have developed a centralized timestamping service and you have discovered that centralized service is functionally equivalent to a distributed one. Mind you, you're not the first to think about those.

</comment><comment><USER13> >it would be profitable for Bitcoin miners to burn through over 24 terawatt- hours of electricity annually

So 0.02%[1] of the global per annum energy consumption? <snore> I'll gladly trade that to run an economy without violence and bring financial inclusion to 6 billion unbanked people.

[1] 24/109613*100 [https://en.wikipedia.org/wiki/World_energy_consumption](https://en.wikipedia.org/wiki/World_energy_consumption)

>Because you don't need permission to buy hashing power and participate in Bitcoin, there's no way a "51% attack" can be stopped, except by outbuying your competitors

Incorrect, this author doesn't understand the miner<->node relationship. Miners do what users value or else users change the consensus system they value. DoubleSHA256->Script or Equihash etc etc

>In Bitcoin, acceptance of a change is signaled by the miners - once some percent of the miners agree, the change is accepted. This means that hashing power is used as a measure of voting power, and so the political system is essentially plutocratic.

Incorrect again. The author is mistaking how consensus-level changes, that users want, are coordinated among miners. BIP 9 was a method where users said "we'll wait for you all miners to coordinate amongst yourself a consensus change" which was used to delay. In the future Bitcoin will use BIP 8 which is "Miners prepare to have your old consensus rejected at flag point X or else your blocks will be orphaned.

>Bitcoin has been wildly unstable, with controversies and forks happening quarterly.

The bitcoin network is stable as a table. Bitcoin can't deny anyone from creating their own fork from consensus. This is a critical feature not bug, to be able to easily exit from the system. It prevents lock in that plague trusted third parties.

>I'd explain proof-of-stake here, except that I don't totally understand it yet.

If you don't understand the second most prominent proposal for decentralized consensus, why are you writing a critique about blockchains? PoS is inherently broken from an economic perspective because it is no more "efficient" than PoW. Marginal Cost = Marginal Revenue.

If you have an incentive mechanism that says, "Do X and you get Y money" you're going to spend X<Y amount of economic work to get Y money. [http://www.truthcoin.info/blog/pow- cheapest/](http://www.truthcoin.info/blog/pow-cheapest/)

PoW = destroy X value in fiat space to gain Y value in Bitcoin space PoS = destroy X value in Ethereum-PoS space (via TVoM, meat-space work) to gain Y value in Ethereum-PoS

The value in PoW is that it's very hard to 'more efficiently' consume electricity than your competitor. All that PoS does is push that wasted work into hidden area or human space.

>Instead of a network of miners, you use a single host. That host maintains a secure ledger which contains the host state and its activity log, including all requests and their results. That ledger is then published for clients to actively sync and monitor.

Ah, So digicash. Which when it went out of business the market died because there was no coordinator any more to check double spends. Let's assume that the business never can go out of business. If I want to destroy the network, I can compromise one system and control the entire state of the database. Ok let's assume the system is uncompromisible. Oops the state just censored your 'secure' ledger because someone did something with it that the political class didn't like. "We'll host it in a country with 'just' laws" There is no such thing as "the public good" where all people benefit from a certain action. There will always be winners and losers in any policy decision. Now value is sapped from the system by constantly having to pay lawyers to defend your rights from encroachment by the state.

The author is right to question if everyone application needs to run on a blockchain (hint: they don't). But if you need trustless, robust, decentralized, uncensorable state to be agreed on by multiple parties, you're gonna need a blockchain

<comment><USER10> "If you have an incentive mechanism that says, "Do X and you get Y money" you're going to spend X<Y amount of economic work to get Y money."

That assumes you know what Y money is worth, when in reality you don't.

If you do X then Y money is worth X by definition because you won't let go of Y money for any less than X value in exchange unless you are forced to.

</comment></comment><comment><USER8> Straw man. Blockchain consensus algorithms don't only use proof of work. We have proof of stake, delegated proof of stake like LISK, proof of Correctness like Ripple (my personal favorite), and so on.

No need for a wasteful arms race just to elect a leader who can be DDOSed.

<comment><USER3> I absolutely _do_ respond to alternatives to proof of work in my post, thank you very much! And I agree that they may be valuable, but I'm skeptical, and you can reread my post to see why. And, by the by, the DDOS argument _is_ a strawman, because we already survive DDOSes in services every day.

<comment><USER8> You're right, you do mention proof of stake and dismiss it quickly. There is also delegated proof of stake, where validators can elect a leader without needing a proof of work arms race.

But you should really look at Ripple's consensus and study it:

[https://ripple.com/build/xrp-ledger-consensus- process/](https://ripple.com/build/xrp-ledger-consensus-process/)

As well as HashGraph. Both of these do NOT require proof of work!

But in any case I think consensus is the wrong long term goal for technology powering currencies and other things. See my other comment in this thread regarding that ([https://news.ycombinator.com/item?id=15646385](https://news.ycombinator.com/item?id=15646385))</comment></comment></comment>


Get caught staring – The beating heart of being approachable - <AUTHOR> https://www.lesspenguiny.com/articles/get-caught-staring <comment><USER2> I have been managing a Russian Blue cat who can be highly aggressive towards other cats, learning a lot about cat body language, and what I've learned parallels what is that article.

<comment><USER3> My curiosity is triggered! What was the most surprising thing you noticed about cat body language mirroring human body language?

</comment></comment><comment><USER4> I have learned that to make a friend I would have to make the first move almost exclusively. To be smiled at, usually I have to smile first. That is just my experience. (I am an introvert)

<comment><USER3> I'm not sure about this at all, but I wonder if both parties feel they have to smile first for something to happen. A social protocol, a non-verbal handshake, carried out before moving to the verbal. Kinda like how all partners in a remote business sometimes feel they are doing more work than everyone else, even if they are not.

Independent of whether this "mutual sensation of making first moves" idea is true or false, the right answer, as an actor, is to smile.

</comment></comment><comment><USER3> hi baud147258 — I saw that you submitted this via Analytics and I really appreciate it.

I'm considering rebranding a bit. If you don't mind, could I email you privately to ask your opinion on some possible taglines?

<comment><AUTHOR> Sorry, I missed the comments on that submission. If you still want to contact me, you can contact me on twitter at BaudDev.</comment></comment>


Duckhunt: Now With Multiplayer - <AUTHOR> http://bwillard.github.com/DuckHunt-JS/DuckHunt/

<comment><AUTHOR> Hey guys, this is a little extension of the game posted on Friday: <http://news.ycombinator.com/item?id=3138712> hopefully people find it fun.</comment>


The case for normalizing impeachment - <AUTHOR> https://www.vox.com/2017/11/30/16517022/impeachment-donald-trump <comment><USER2> Do we really want Pence as president?

He's about as conservative as they come.

<comment><USER3> Duh! If we normalize impeachment then we can just impeach Pence for wrongthink! Then we can impeach his replacement for looking at someone funny! Then we can impeach his replacement for being a stupid doodie head! Then why not impeach his replacement for backing the wrong football team! Finally we get away from the semi-stable form of government the world has known the US for nearly 240 years.</comment></comment>


Walt Mossberg: The Exit Interview - <AUTHOR> http://mashable.com/2013/12/20/walt-mossberg-all-things-d/

<comment><USER2> _I would tell them quality over quantity_

This. I see so many websites with clickbait articles that contain six photos with captions that they turn into a slideshow, with no useful content added. I love Anandtech when it comes to in depth reviews and quality over quantity.</comment>


Howard Roark: In Praise of the Self Speech from the Fountainhead (1943) - <AUTHOR> https://www.panarchy.org/rand/roark.1943.html <comment><USER2> > Thousands of years ago, the first man discovered how to make fire. He was > probably burned at the stake he had taught his brothers to light. He was > considered an evildoer who had dealt with a demon mankind dreaded.

Hate or love her, Rand had a powerful way with words. You can admit that and still thinks she was the evildoer. By her influence she was one of the greatest expository writers of her generation. She brilliantly wrapped treatises on economics and philosophy in sugar pills of fiction. For good or ill, Howard Roark is among the great literary characters of the twentieth century.

<comment><USER3> Nah. Her exposition is mediocre at best. What she did was simply give her readers a rationale for their innate selfishness and lack of empathy, wrapped in flowery platitudes. Those that are naturally self-centered read her work and the underlying message of radical egocentrism speaks to them. But since it's such an abhorrent message, they justify their attraction to it by claiming Rand was a compelling writer. She really wasn't.

What I guess you can say is that being a hypocrite and narcissist herself, Rand knew her audience quite well and wrote accordingly. There's a lot that can be learned from that.

</comment></comment><comment><USER4> That book was great until Howard roark broke his quiet dignity to brag in a speech. It amazes me how bad the ending of this book is.

</comment><comment><USER5> Much can be said of Ayn Rand and her books. That aside, I find the money speech of Atlas Shrugged [1] far better at conveying the point than the self speech of The Fountainhead. 1: [https://www.capitalismmagazine.com/2002/08/franciscos- money-...](https://www.capitalismmagazine.com/2002/08/franciscos-money- speech/)

<comment><USER6> What's really interesting for me in Atlas Shrugged is the way people are going back to sound money by leaving the hyperinflationary fiat system. When I read the book, I thought that gold is just some symbol/metaphor, but not something important. Since then I learned more about the way money works and realized that it wasn't a metaphor at all, and I'm seeing how history repeats itself, and people haven't learned from the mistakes that were made 80 years ago.</comment></comment>


Bone music: the Soviet bootleg records pressed on x-rays (2015) - <AUTHOR> https://www.theguardian.com/music/2015/jan/29/bone-music-soviet-bootleg-records-pressed-on-xrays <comment><USER2> > _the small ads of music papers in the 1960s were frequently littered with > desperate pleas from people who had heard a song once, sometimes years > previously, and were haunted by the memory_

Understandable. I'd very much like to know what was that song that died together with my hard disk almost fifteen years ago: a simple repetitive upbeat-but-relaxed rhythm of mid-bass synth with animeish girl voice chattering over it, and a refrain with the words "Ichi ni san go." The melody of which refrain is somehow almost identical to that of "Perfect" by Princess Superstar—which didn't help me one bit in my search. And the only metadata I know about the song is that it was '12.mp3' in some compilation.

With the google-fu, I've managed to find two cartoons from my childhood just by vague descriptions, but no such luck with this song.

I also sometimes get a melody stuck in my head for days on end until I finally remember where it comes from. And sometimes, only a chance listening to the album relieves the curse when I'm pretty much ready to wade through the entire genre that in fact turns out to be mostly unrelated (damn you wild Japanese synth-jazz experimenters).

<comment><USER3> If you can remember enough of it you might try writing down a Parsons Code and searching against, say: [https://www.musipedia.org/melodic_contour.html](https://www.musipedia.org/melodic_contour.html)

[https://en.wikipedia.org/wiki/Parsons_code](https://en.wikipedia.org/wiki/Parsons_code)

<comment><USER2> I've tried using Musipedia on several different occasions, and achieved absolutely nothing. It lures me with the 'microphone' section, into which I tried whistling after jumping browsers to resurrect Flash from the dead. I've clumsily transcribed a couple melodies into the 'keyboard search,' tried the contour thing and even knocked something out in the 'rhythm search.' Bupkis. More often, it emits an error during processing my pitiable attempts, so I don't even know if it can actually find anything with those offending inputs.

There's also Midomi, into which I similarly whistled, hummed and even made some endeavors at singing, and likewise got no luck.

I feel like there indeed should be a music search engine that works from whistling, but I haven't encountered one so far.

In a vaguely topical sentiment, I several times had success with Audiotag.info—but you need a piece of the actual music there. It worked better for me than Shazam, SoundCloud or Picard. Probably because I'm unlikely to be looking for a hit song—now, 'William Tell' on a xylophone is closer to my thing: [https://www.youtube.com/watch?v=gXajSUb29ZY](https://www.youtube.com/watch?v=gXajSUb29ZY) (also related: [https://www.youtube.com/watch?v=mRXUzWNdLx8&t=9m40s](https://www.youtube.com/watch?v=mRXUzWNdLx8&t=9m40s)).

</comment></comment></comment><comment><USER4> Speaking of bootleg uses of xrays - apparently they are made of ultra high molecular weight polyethylene, which when sandwiched in many layers works as impromptu body armor (proper laminates are used when lightweight or positive buoyancy armor is required).

The Filipinos were using this during one of their recent disturbances when they began duct taping discarded xray sheets from their local hospital to their chests.

<comment><USER5> Apparently also popular in Thailand. This guy tested one, and it did work against .22 and some .38 pistol rounds, which is surprising. Failed with anything more powerful: [https://www.theboxotruth.com/the-box-o- truth-58-homemade-x-r...](https://www.theboxotruth.com/the-box-o- truth-58-homemade-x-ray-film-bullet-proof-vests/)

</comment></comment><comment><USER6> This is an _excellent_ Radio Documentary on a Russian Pianist that mentions these records 'Music on the Ribs'(41:00~). He was persecuted and sent away to work camps. [https://www.bbc.co.uk/sounds/play/p03csqbn](https://www.bbc.co.uk/sounds/play/p03csqbn)

[https://en.wikipedia.org/wiki/Vadim_Kozin](https://en.wikipedia.org/wiki/Vadim_Kozin)

<comment><USER7> Thank you so much for the link to Vadim Kozin! Lovely voice and music.

</comment></comment><comment><USER8> Related from 2015: [https://news.ycombinator.com/item?id=10724639](https://news.ycombinator.com/item?id=10724639)

and a bit from 2017: [https://news.ycombinator.com/item?id=14287608](https://news.ycombinator.com/item?id=14287608)

<comment><USER9> And a 99% Invisible episode: [https://99percentinvisible.org/episode/bone- music/](https://99percentinvisible.org/episode/bone-music/)

</comment></comment><comment><USER10> Obligatory documentary on the subject: [https://www.youtube.com/watch?v=XMCCYnDvpJQ](https://www.youtube.com/watch?v=XMCCYnDvpJQ)</comment>


Edinburgh Parents Block Sick Child's Learning Robot from Class - <AUTHOR> https://digit.fyi/edinburgh-parents-block-sick-childs-remote-learning-robot/ <comment><USER2> I bet they are anti-vaccination as well...

<comment><AUTHOR> Sounds like the objections are from the privacy implications of the live stream.</comment></comment>


Email opt-out assistance - <AUTHOR>

I've got a small problem, and it seems fairly elementary to solve, but thought you all might be able to help out.
I send out a mass email to potential clients once a month.  The list is generated using advertising database.  There are several recipients that ask to be removed from the list after each mailing, and right now I manually edit the list.
My proposed solution is a link in the email to an opt-out landing page.  The opt-outer (new term, courtesy of moi) would enter their email and click "submit" to be removed from future mailings.
For the next email blast, I would export a CSV of potential clients from the advertising database (it's refreshed monthly), and then using a php script, would compare the two tables (opted-out and new addresses), and wherever an entry exists in both tables it would be removed from the mailing list.  Then export the remaining list into a CSV for a mail merge.
Does this look like I'm on the right track or is there any easier way?  Know of any canned scripts that would execute this?
Thanks in advance.
-Jake Butler (long time reader, first time poster) <comment><USER2> Don't make your potential client enter his email address to opt out, pass it in as a parameter. If you demand more than one click from him to opt out, then you are asking too much, it is after all your rudeness that has interrupted his day and is causing him to take action in the first place.

In broader terms, there are companies that will handle this for you for a small fee. They also have fancy tricks to get through the bulk mail filters. If you send enough messages to get tagged as a bulk mailer you will probably have to change your domain name to get through in the future.</comment>


Gene editing isn't about designer babies, it's about hope for people like me - <AUTHOR> https://www.theguardian.com/commentisfree/2017/aug/03/gene-editing-mitochondrial-replacement-therapy-designer-babies?CMP=twt_gu <comment><USER2> "I know the dangers. I have read Aldous Huxley's fiction and it's not pretty. But come on, if designer babies is the only argument against trying potentially life-saving treatments, what gives someone without an incurably debilitating disease the right to debate the future of our health? If we're going to debate anything, let's debate the science. Let's debate the risks. Not could-bes or scaremongering predictions. And then we can get on with saving lives."

It isn't just about designer babies. It is about those who would use engineering for dangerous purposes not just to engineer out genetic errors or genetic time-bombs. How long would it be before it is used to engineer super soldiers? This could lead to domination by one country over all others. We have already seen gender selection change the balance of genders such as in China and this is a far greater threat than gender selection if used for such purposes.

Having a child w disabilities I find it difficult to argue against anything that could make a child's health or safety better but which future children benefit? Would it be those who have wealthy enough parents to afford to benefit while the remaining population remains afflicted with diseases, disabilities, or genetic time bombs. And how much would be spent on research to find cures for, or treatments for, conditions that only afflict the poor, or particular races, etc? How do we ever get to a world that is better to live in when we continue to go down a road that benefits some but not all or positions a few with ethical choices that could so negatively affect so many?

Taking the religious aspects completely out of the equation, just the few concerns noted above should give everyone pause to think this is not only a slippery slope but one that could slide into an ethical quagmire. Who decides who? Who decides which conditions? Who decides availability and cost? You get the picture.</comment>


Datasaver compressing proxy for Chrome by Google - <AUTHOR> http://venturebeat.com/2015/03/25/google-quietly-launches-data-saver-extension-for-chrome/

<comment><USER2> Do we really need to send all of our browsing habits and website data to Google? I can't imagine the amount of data they will be able to mine from this.

<comment><USER3> Agreed. It also doesn't work for HTTPS, for obvious reasons. But, so many sites use HTTPS by default that the savings might not actually be that great.

I think I will use this though when I am tethering from my iPhone on my laptop as I can really slam my data usage from simple browsing.</comment></comment>


California's Unconstitutional Gender Quotas for Corporate Boards - <AUTHOR> https://reason.com/volokh/2018/10/04/californias-unconstitutional-gender-quot <comment><USER2> At the risk of sounding insensitive, can one member of an all-male board just legally change their gender identity? Its like 2 forms filed with the clerk and maybe an appearance before a judge, then you are legally recognized by the state as a female whether you make any other life changes or not.

<comment><USER3> ...is that really easier than finding a qualified woman?

<comment><USER2> The company can just do nothing and meet the quota. Whats easier than doing nothing if one board member happens to take the initiative?

</comment></comment></comment><comment><USER4> I find quotas in bad taste, and somewhat lazy.

There is clearly an issue, but if we attempt to fix it with positive discrimination, we just create more issues.

A better way to approach the problem might be increased scrutiny (for discrimination) on boards/companies with significant gender bias, and increased penalties.

This would be harder to implement of course, but might go further to actually solving the issue.

<comment><USER5> How can you implement penalties for gender bias without introducing a threshold for an acceptable division of representation? And once that threshold is established, how exactly does it differ from a quota?

<comment><USER3> I guess the argument would be that you look at practices instead of outcomes, but that seems impossibly hard to implement

</comment></comment></comment><comment><USER6> What about gay people? What about mexican people? Asian people?

Why not extend the law for these too?

"Based on the number of people that run your company, you're required to hire at least 1 women, 1 trans gender, 1 muslim and 1 person older than 60"

Sounds fun!

<comment><USER2> The alternative is that companies can select anyone for their board that they want and if they make bad choices, they have do deal with the consequences of their actions. Either with less money or lawsuits or collapse of the whole company.

</comment></comment><comment><USER7> I'm curious if this is likely to be struck down as unconstitutional in the California or Federal courts?

Also, why is this an acceptable attempt to address the issue of under represented groups in corporate boards? Should there be similar legislation for ethnic minorities in boards as well. If not, why is gender special in this regard?

For women that are appointed to boards as a consequence of this legislation, would it be unfair to consider those women to be 'diversity hires', and not appointed strictly on merit?

<comment><USER8> My understanding is that there is a solid constitutional challenge at the Federal level because the bill specifies designated headquarters rather than, for example, state of incorporation, which means that they are trying to enforce state law on national and international entities.

Regarding 'diversity hires', if the experience in Europe is any guide, qualified women will just be members of even more boards than they are now. There's no limit on the number of boards that a person can be a member of.

</comment></comment><comment><USER9> David Koch's libertarian monthly dislikes policy to get women on boards. Shocker.

If this policy is truly counter-productive wrt its stated aim, I'd be interested to see that in the thoughts of people who have consistently _given a damn about female representation on boards_.

It's less convincing when people who bark "regulation is evil" for a living find that _"regulation is, once again, evil"._

<comment><USER10> Disliking using force to get women on boards != Disliking women on boards.

</comment></comment><comment> ur-whale It's not as bad as it sounds: one more incentive for corporations to vote with their feet and move their HQ out of the great socialist state of california.

<comment><USER11> Nothing is socialist about this law, nor any other law California has. This law is stupid (and unconstitutional), but it has nothing to do with socialism.

<comment><USER12> Webster's dictionary defines socialism as a form of society in which government owns or controls major industries. This law controls what happens in corporate boards.

<comment><USER11> Um, no, that's not how Webster's defines it.

> government owns or controls

The definition is 'government (or the community) owns _and_ controls'. Ownership by the masses is an absolute requirement for socialism, having a bit of control is not enough.

</comment></comment></comment></comment><comment><USER13> I feel like this is just another step in a series of trends where we use legislation to enforce diversity, to the detriment of everyone involved. Let companies run their business as they please. If they don't want to hire women, they shouldn't have to. You see the same thing with hiring engineers. 50% goal for women engineers but that's not even possible given the current pipeline.

<comment><USER2> Dont forget about companies that are very open to appointing women, but can't find any female candidates that surpass all the male candidates available at the moment.

</comment></comment><comment><USER14> Except for that it's not a quota, at least not in the sense that the word is used within the context of affirmative action, because there is no maximum cap set on the number of board members.

<comment><USER5> It is a quota - quotas need not be proportional to be quotas. From the dictionary:

"3 : a fixed number or percentage of minority group members or women needed to meet the requirements of affirmative action"

<comment><USER14> Of all the supreme court cases involving quotas, which have involved a mandate to admit a fixed number of minorities with an uncapped class size or whatever? The "dictionary says" isn't a very good argument if it's not aligned with case law.

<comment><USER5> The Supreme Court interprets law - it does not define words.</comment></comment></comment></comment>


A grim outlook on the future of browser add-ons - <AUTHOR> https://palant.info/2020/08/31/a-grim-outlook-on-the-future-of-browser-add-ons/ <comment><USER2> (disclosure: I am a former member of the Mozilla addons engineering team. I haven't been a Mozilla employee for more than a year and don't have any internal information about recent developments)

Regarding Android: As many folks probably already know, the new Firefox for Android is a complete rewrite of the front-end to use an embedable version of gecko (GeckoView). This entails re-implementing all the extension API support that existed in the old monolithic browser. The timeline for switching from the Fennec (the original Firefox for Android) to Fenix (the GeckoView based version) was driven by a bunch of conflicting things. In an ideal world it wouldn't have happened until the extension support was broader, but we reached a point where Fennec can't be maintained any longer yet full extension support in Fenix isn't ready. I don't agree with the way Mozilla has handled this, but to be fair to them -- if they provide a way to easily enable extensions that they haven't tested they will be flooded with reports about extensions that don't work. Sorting through all this would be a huge distraction to a team that's already busy trying to complete the extension implementation. It seems popular here to be skeptical about Mozilla's goals and ascribe hidden motivations to them, but if you follow the work that's happening on GeckoView extensions (go to bugzilla.mozilla.org search for product GeckoView, component Extensions), you can see that progress is happening slowly but steadily.

As for desktop and additional extension APIs: I think that this is another place Mozilla has dropped the ball on communication. WebExtensions support a concept of "experimental APIs" with which developers can easily prototype new extension APIs. The intention here was always that this would be an avenue for developers outside Mozilla to experiment with new ideas that could eventually become regular apis available to all extensions. To be clear, the bar here is high: among other issues, many things that developers would like to be able to do from extensions are prone to abuse by malicious extensions. Figuring out a way to create an API that allows for customization while also helping users understand how extensions are changing their browser and make an informed choice about whether to allow it is a difficult problem! The developer community seemed to take Mozilla's intention to expand extensions' capabilities as a promise to have Mozilla employees do all that work, rather than an invitation to work together with the community on the process of designing new APIs that can be used in a safe way.

<comment><USER3> > if they provide a way to easily enable extensions that they haven't tested > they will be flooded with reports about extensions that don't work.

Well, it _used_ to be the case that extension had to explicitly declare which applications they support (e.g. thunderbird, seamonkey, firefox). That's not the case anymore with the webext manifest format, but at least temporarily mozilla could have introduced some sort of opt-in by extension developers to avoid this scenario without gatekeeping. The assumption would then be that the developers tested that the available api subset on android is sufficient for their extension.

> The developer community seemed to take Mozilla's intention to expand > extensions' capabilities as a promise to have Mozilla employees do all that > work

I was interested in that, but when I looked into it it turned out that it was limited to developer edition and required two separate extensions to be installed it's a lot of work that only a handful of users could ever test and after going 2 migrations (XUL -> jetpack -> webext) it felt like yet another temporary thing with uncertain future. It seems to have changed a bit since then, so maybe it's worth looking into it again.

<comment><USER2> > at least temporarily mozilla could have introduced some sort of opt-in by > extension developers to avoid this scenario without gatekeeping

Yep, I agree completely. In the mean time, there is [https://github.com/mozilla- mobile/fenix/issues/14034](https://github.com/mozilla- mobile/fenix/issues/14034)

As for experiments, the days of two separate extensions are long gone :) The point about multiple migrations (you didn't even mention e10s!) is a fair one...

</comment></comment></comment><comment><USER4> I'm ok with Mozilla making it _harder_ to install add-ons. Requiring going deep into the settings could be a useful enough friction that a lot of privacy and experience issues are solved for the average user.

But a strict prohibition on apps really seems antithetical to what they stand for.</comment>


Announcing Tokio 0.2 and a Roadmap to 1.0 - <AUTHOR> https://tokio.rs/blog/2019-11-tokio-0-2/ <comment><USER2> How did this have zero comments?

Huge milestone for the rust ecosystem and can't wait to see benchmarks!</comment>


Search - <AUTHOR> http://search.conduit.com/?ctid=CT329536&SearchSource=13 <comment><USER2> I didn't get to explore your service too deeply because the UI _really_ needs work. For example, the "more services" button just unleashes them onto the screen, forcing me to scroll the screen to view them.

Also, switching between different searches doesn't react consistently, which creates a very bad feeling for the user as they can't reasonably predict what their actions will do.</comment>


Git-secret – store private data in a Git repo - <AUTHOR> https://coderwall.com/p/e-azzg/store-your-private-data-inside-a-git-repository <comment><USER2> This project scares me because it helps foster a bad practice -- keeping secrets in a repo. You really shouldn't be keeping secrets in the repo.

You should be using a secrets service that is designed for such a purpose, like Hashicorp's Vault[0], so that you never have to keep a secret in the code.

[0] [https://github.com/hashicorp/vault](https://github.com/hashicorp/vault)

<comment><USER3> Perhaps it's an alternative practice/behavior rather than a "bad" practice?

<comment><USER4> It's a bad practice, because git makes keys practically irrevocable. It's not enough to rotate encryption keys, because the old ciphertexts are in the git history; you have to rotate the underlying secrets as well (people don't do this and shouldn't have to).

Don't store encrypted secrets in git if you can avoid it.

<comment><USER5> The problem is you need some repository to store this information and it's incredibly helpful to store the configuration along with the code.

If someone has access to a shared secret and then shouldn't you should assume the secret is now compromised and rotate it. Rotating the keys doesn't solve this problem.

<comment><USER4> No. If that were the case, there would be no purpose to rotating keys. The problem is that despite rotating keys, your old crypto keys have permanent access to secrets, because the old _ciphertexts_ are by default retained in the git history.

It's a bad idea to store secrets in any form in your source code repository.

<comment><USER6> I think what grandparent and others are saying is that you also revoke the secrets contained in the ciphertext, e.g. if it's an AWS key you would revoke that AWS key on AWS's side as well as encrypting new secrets with a different encryption key.

Obviously this is a huge hassle and isn't easily done with all kinds of secrets (which is what I think you're getting at?). But it's also often necessary.

</comment></comment></comment></comment></comment></comment><comment><USER7> Nice work!

I've been using [https://github.com/AGWA/git- crypt](https://github.com/AGWA/git-crypt) until now, always good to have more alternatives.

Can you tell us what is different about your approach with this project?

<comment><USER8> I've started using git-crypt for deploying configuration. It keeps things simple and ensures that keys are not in plain text on bit-bucket which is basically good enough right now.

</comment></comment><comment><USER9> I've been using ansible-vault to solve this problem in our infrastructure repository. A symmetric vault key is encrypted using gpg, and Ansible's vault_password_file is set to to an executable shell script containing `gpg --batch --use-agent --descrypt vault_key.gpg`.

Very specific to Ansible, but works fine. It's a shame only files containing variables (we're using group_vars) can be encrypted, and not arbitrary files or templates.

<comment><USER10> More things about Ansible vault that are a shame:

\- no file encryption, only YML

\- no separate values, only entire file

\- OMG it's s...l...o...w...

\- password based instead of certs

\- only one password

\- password cannot even stored in an env var

More: [http://jpmens.net/2014/02/22/my-thoughts-on-ansible-s- vault/](http://jpmens.net/2014/02/22/my-thoughts-on-ansible-s-vault/)

<comment><USER11> A good trick I found was to have a file with your values assigned as vault_something and then in the clear version have the variable assigned as: something: "{{ vault_something }}"

But yeah, the "only one password" is the biggest pain for me...

</comment></comment></comment><comment><USER12> Another tool worth looking into is git-gpg, which allows you to store encrypted git repositories on third-party / potentially insecure servers, but unlike this tool it stores all changes to source files as compressible textual deltas (a key reason for using git in the first place). The repository is encrypted remotely but the local version has no encrypted blobs inside.

[https://github.com/rustyio/git-gpg](https://github.com/rustyio/git-gpg)

Other benefits include architectural simplicity and low footprint: it consists of a single Python script that you add to your executable path.

</comment><comment><USER13> Similar project, that I personally use quite often: [https://github.com/StackExchange/blackbox](https://github.com/StackExchange/blackbox)

<comment><USER14> I'm glad that blackbox is gaining in popularity. Future directions for the project are listed here: [https://github.com/StackExchange/blackbox/blob/master/Versio...](https://github.com/StackExchange/blackbox/blob/master/Version2-Ideas.md)

</comment></comment><comment><USER15> This should really work with ssh public/private keys¹. Public keys are probably already on the box the git server runs on, and users already have them generated to access git - no need to generate separate gpg keys.

If you have a github account the script could also get the pubkey directly from the github api...

¹[http://superuser.com/questions/576506/how-to-use-ssh-rsa- pub...](http://superuser.com/questions/576506/how-to-use-ssh-rsa-public-key- to-encrypt-a-text)

<comment><USER16> SSH keys aren't really used for encryption. Typical ssh uses some kind of DH construct, with the ssh keypairs just used for authentication.

However, stackexchange is the right place to go if you want to use asymmetric secret storage in git.

[https://github.com/stackexchange/blackbox](https://github.com/stackexchange/blackbox)

<comment><USER17> See [https://www.netmeister.org/blog/sharing-secrets-using-ssh- ke...](https://www.netmeister.org/blog/sharing-secrets-using-ssh-keys.html) and [https://github.com/jschauma/jass](https://github.com/jschauma/jass)

</comment></comment></comment><comment><USER18> I used to put .gpg files in my repos that stored sensitive information like database passwords and such.

I don't do that anymore. The main problem as I saw it was that you basically liberate your security to an environment you can't monitor or send rejections to (if someone downloads your gpg file). Compare this to an ssh server which affords both those abilities.

</comment><comment><USER19> > When someone is out - just delete his public key, reencrypt the files, and > he won't be able to decrypt secrets anymore.

But they still can encrypt old versions stored in git, no? Do you change all secrets when somebody leaves the team/company? I guess that'd be best practice, but I have no idea how often that's done out there.

<comment><USER20> Yes, they can still decrypt old versions.

Storing secret keys, API keys, etc. in your git repo is a terrible idea and an antipattern any way you slice it. Keep your secrets out of version control.

The quoted advice is extremely bad. If someone who has access to a secret of any importance leaves your team, the _only_ acceptable response is to rotate the secret.

</comment></comment><comment><USER21> A word of warning to those considering using this. While I completely understand why people might want to encrypt/decrypt files within their public Git repositories, doing so doesn't come for free.

As Junio C Hamano explains more eloquently and in greater depth here[1], one thing to bear in mind with this (and similar) tools is that they store the managed files as binary blobs, regardless of their original format, meaning that a change to the source file of even a single bit will result in an entirely different _uncompressed_ blob being stored, rather than a compressible textual delta.

[1] [http://article.gmane.org/gmane.comp.version- control.git/1132...](http://article.gmane.org/gmane.comp.version- control.git/113221)

<comment><USER22> While technically true, the type of data this extension is meant for (small configuration snippets containing sensitive credentials) are both small and rarely-changing. A couple extra bytes in the index won't be a very big deal.

</comment></comment><comment><USER23> At Zemanta, we developed py-secretcrypt[0] and go-secretcrypt[1] for keeping secrets encrypted with Amazon KMS (Key Management Service) in our repos. They are then decrypted on the fly by the application.

Access control is managed through AWS KMS key policies, with EC2 instances running the applications having permissions to decrypt the secrets.

Blog post about this will follow soon.

[0] [https://github.com/Zemanta/py-secretcrypt](https://github.com/Zemanta/py- secretcrypt)

[1] [https://github.com/Zemanta/go-secretcrypt](https://github.com/Zemanta/go- secretcrypt)

</comment><comment><USER24> See also: [https://github.com/StackExchange/blackbox](https://github.com/StackExchange/blackbox) "blackbox by StackExchange"

</comment><comment><USER25> Hmm... adding access controls to Git? I'm not sure how I feel about this. I like how Git is low level and stays away from all of that stuff leaving it up to wrappers like GitLab, GitHub, Gerrit, etc.

When you remove someone from the list of users does it have to go and re-write history? Isn't that a big no-no in Git?

<comment><USER22> I have nothing to do with this project, but I think the answer to your question is no - you don't have to re-write history. If the removed party had access to previous revisions signed with his key, they're already "compromised" as far as security is concerned. Whether or not you rewrite history, he already has it.

The re-encryption they're referring to is presumably just to protect future revisions (since you would ideally rotate all keys they had access to, git- secret or not, and publish new ones right away).

</comment></comment><comment><USER26> If you need to do this, I would recommend looking at Transcrypt: [https://github.com/elasticdog/transcrypt](https://github.com/elasticdog/transcrypt)

</comment><comment><USER27> If all you have is a hammer, everything looks like a nail.

</comment><comment><USER28> I am using keybase.io to store soft secrets like the coveralls.io token. Let me share my simple use case: [http://g14n.info/2014/07/my-keybase- experience/](http://g14n.info/2014/07/my-keybase-experience/)

</comment><comment><USER29> Some cross platform tool that we've developed for our company which has some nice features

[https://github.com/franela/vault](https://github.com/franela/vault)

</comment><comment><USER30> I've been using [https://github.com/ahoward/sekrets](https://github.com/ahoward/sekrets) in private repos for years. Great tool.

I definitely agree this should be used with heavy caution and only in private repos.

<comment><USER20> This should not even be used in private repos unless the only person who will ever access the repo is you.

</comment></comment><comment><USER31> Recently, I've wrote simple tool for storing secrets like passwords in public Git repos using AES cypher: [https://github.com/seletskiy/carcosa/](https://github.com/seletskiy/carcosa/)</comment>


YouTubers Must Unionize, No Matter What Google Says - <AUTHOR> https://www.wired.com/story/youtube-union/ <comment><USER2> I don't quite understand. YouTubers aren't employed by YouTube or Google. What obligations does Google have to these people? Have there been contracts signed that has YouTubers act similar to Uber drivers?

Maybe I'm out of the loop or something, but out of all the people that should unionise, YouTubers are nearest to the bottom of the list, right above execs and CEOs.</comment>


Reddit channels for nerds - <AUTHOR> What are some of the best channels you can recommend for a nerd that wants to learn constantly? <comment><AUTHOR> the best reddit chanells for anything tech</comment>


NPM and Bower Bundler - <AUTHOR> http://gabrielcsapo.github.io/granary-server/ <comment><AUTHOR> Based on the work done on [https://github.com/node-freight/freight- server](https://github.com/node-freight/freight-server).

It has been passion project for the past week and a half, let me know what you think :)</comment>


Most creative way to display 42 - <AUTHOR> http://codegolf.stackexchange.com/questions/21835/most-creative-way-to-display-42

<comment><USER2> None of these mention one of my favorite unintended references. The ASCII character '*' is 42 (in decimal, 0x2A in hex). Which I like to think that after all that time the only proper answer a computer could respond with to define life was a wildcard.</comment>


SpaceX software engineers are hosting a Reddit AMA tomorrow at 10AM PT. - <AUTHOR>

<comment><USER2> Here is the link: "We are SpaceX Software Engineers - We Launch Rockets into Space - AMA", [http://www.reddit.com/r/IAmA/comments/1853ap/we_are_spacex_s...](http://www.reddit.com/r/IAmA/comments/1853ap/we_are_spacex_software_engineers_we_launch/)</comment>


University of Cambridge to kill homegrown email service in favour of Microsoft - <AUTHOR> https://www.theregister.com/2020/08/04/cambridge_uni_decommissioning_hermes_email/ <comment><USER2> I can remember the good old days of telnetting into hermes to read my mail...

</comment><comment><USER3> Is fanf2 retiring?

<comment><USER2> His homepage ( @ the wonderfully named dotat.at domain) says he's looking after the central DNS and email servers, but his work homepage says he's just responsible for DNS services and domain name registrations. So maybe he doesn't manage the email side any more?</comment></comment>


Peter Thiel-backed MetaMed brings personalized health care - <AUTHOR> http://venturebeat.com/2013/03/01/peter-thiel-backed-metamed-brings-personalized-health-care-to-the-1-percent/ <comment><USER2> Since only the "1%" can afford this level of care, hopefully, with time, this will drop in price so that it will be affordable to the masses. But since technology is a relatively small part of the solution, it's doubtful. The key is the service provided by the medical and analytical experts and their fees are not likely to drop.</comment>


Zig 0.5.0 Release Notes - <AUTHOR> https://ziglang.org/download/0.5.0/release-notes.html <comment><USER2> Zig looks like a really interesting language. I've been keeping my eye on it, waiting excitedly for the 1.x milestone.

Out of curiosity, what's the state of the world regarding Zig's stdlib? While the base language docs seem like they're in a pretty good state, the stdlib is still largely undocumented. Is this because it's unstable? Or is the lack of docs there due to lack of time/resources? Would love to get some clarification. Thanks!

<comment><USER3> [https://github.com/ziglang/zig/wiki/FAQ#where-is-the- documen...](https://github.com/ziglang/zig/wiki/FAQ#where-is-the- documentation-for-the-zig-standard-library)

<comment><USER2> Yeah, I always check that. The part that says "There is no stdlib documentation yet, but it is planned for the next release" links to a 2015 github issue. That's why I was wondering if it's still a priority or if there were still high level concerns about stability/curation/etc preventing docs from being written.

<comment><USER3> It's an unwillingness to implement documentation generation twice. Why do it in the c++ compiler when the goal is to become self-hosted?

I think there's a good answer to this which is, "because people really, really need documentation." So I am kicking around ideas of how this can be done without too much duplicate effort.

<comment><USER2> I see. Do you think there would be value in having someone just manually writing some interim docs (perhaps as a wiki) until the time when it can be properly generated?

This may seem like a weird place to draw experience from, but in my early days of programming, I've found the PHP docs extremely helpful largely thanks to community comments sections giving examples of how to do various things. Just some food for thought.

<comment><USER3> I think that would be problematic because the standard library is still very unstable. You can see from the release notes just how much changed from 0.4.0. A wiki page would be outdated right away.

One of the tenets of my development process with Zig is "avoid local maximums". A wiki for std lib documentation is not the long term solution to the problem, and so I won't be investing any time into it. All my time is invested in the long term solution.

</comment></comment></comment></comment></comment></comment><comment><USER4> One thing that immediately stood out to me was the section titled "UEFI support" [1]. And there are demo projects and examples too. Neat!

[1]: [https://ziglang.org/download/0.5.0/release-notes.html#toc- UE...](https://ziglang.org/download/0.5.0/release-notes.html#toc-UEFI-Support)

<comment><USER5> Zig + UEFI = Comic Neue in the BIOS.

[0] [https://twitter.com/andy_kelley/status/1176561072398098432](https://twitter.com/andy_kelley/status/1176561072398098432)

Perhaps I could see some toy ransomware bootkit demanding the user to pay up or face using your computer with comic neue or comic sans as the default unchangeable font.

<comment><USER6> > _Comic Neue_

For the uninitiated:

[http://www.comicneue.com/](http://www.comicneue.com/)

As far as Comic Sans-like fonts go it's quite nice

<comment><USER7> It's currently my main UI font: [https://imgur.com/cTLq6Oo.png](https://imgur.com/cTLq6Oo.png)

Pairs nicely with Fantasque Sans Mono (though if there was a more Comic Sans/Neue-like typeface, I'd set that as my terminal/editor font in a heartbeat).

</comment></comment></comment></comment><comment><USER8> I might be alone with this thought: Zig seemed really appealing in the beginning, but now I dislike it more and more with each release. It does not seem to keep the simplicity of C at all, it has lots of peculiarities, and it is becoming more and more bloated. I would consider it a C++ replacement at this point, not a C replacement due to its increasing complexity. One of Zig's philosophy was simplicity[1], but I do not think it applies now.

[1] [https://github.com/ziglang/zig/wiki/Why-Zig-When-There-is- Al...](https://github.com/ziglang/zig/wiki/Why-Zig-When-There-is-Already- CPP,-D,-and-Rust%3F#simplicity)

<comment><USER9> Can you give examples of the peculiarities? I write cpp all day and zig is a nice change for me because of how simple it is to me

<comment><USER10> > Zig both signed and unsigned integers have undefined behavior on overflow, > contrasted to only signed integers in C

make a feature unwanted in C, worse. nice.

<comment><USER11> debug and safe modes in zig disallow overflows entirely unless you specifically use the wrapping operator to _clearly specify your intent_. These checks are removed in speed-optimized builds.

In other words, the compiler will enforce that `a + b` does not overflow through all your testing and wherever you explicitly say such checks are required, but turns them into nops for you when you desire speed. You can let the compiler know that you explicitly want wrapping overflow (and not some undefined kind) using the wrapping operator `a +% b`.

</comment></comment></comment></comment><comment><USER12> > _Speaking of performance, Zig is faster than C._

These kinds of claims make me so dubious for a language. Also who is trying to switch from C to get an ever-so-slightly performance improvement? That use- case goes to specialized hardware such as FPGAs.

<comment><USER13> You picked that quote from the main page, not from the release notes, here is what directly follows:

* The reference implementation uses LLVM as a backend for state of the art optimizations.

* What other projects call "Link Time Optimization" Zig does automatically.

* For native targets, advanced CPU features are enabled (-march=native), thanks to the fact that Cross-compiling is a first-class use case.

* Carefully chosen undefined behavior. For example, in Zig both signed and unsigned integers have undefined behavior on overflow, contrasted to only signed integers in C. This facilitates optimizations that are not available in C. Zig directly exposes a SIMD vector type, making it easy to write portable vectorized code.

So the argument is "exact same compiler as C/C++, but more opportunities for optimization thanks to better semantics and better access to native instructions". This seems reasonable on its face, so care to elaborate on the doubt?

The arguments for _not_ switching from C are often performance or target related, so a language that purports to be an alternative to C would want to point out that those issues aren't a problem.

The reasons to switch away from C are numerous and well documented.

<comment><USER14> > For example, in Zig both signed and unsigned integers have undefined > behavior on overflow, contrasted to only signed integers in C.

Huh, that's a strange choice. What's the safety story for Zig? Are these always undefined, or is that only in an "unchecked" build?

<comment><USER11> The latter. Zig actually kinda does define this behavior as "`a + b` shall not overflow" and inserts checks in debug and safe builds for it. To get overflow, which zig defines as wrapping overflow, you use a different operator and no check is inserted "`a +% b`". For speed optimized builds, unless you've explicitly told the compiler to insert checks in that scope, it will turn the checks into nops.

So, while it is technically correct to say that it has undefined behavior for overflow, the practical reality is quite different.

<comment><USER15> We do the same thing in Rust, but I think that characterizing this as UB is misleading, personally. We created a new category, "program error", for this, to distinguish from UB proper.

I'm not sure if Zig inherited the defined/implementation defined/undefined hierarchy from C and C++ though.

<comment><USER16> Undefined as in undefined by language spec. There are various processor implementations that have different results that are often quite useful. Would you preclude their use?

<comment><USER15> Right, the key here is that the behavior is defined. That's why calling it "undefined behavior" is misleading.

<comment><USER16> It is defined _if you want to restrict where your program runs_.

<comment><USER15> If something is defined or not is a property of the language specification, as you stated.

What you're now bringing up is something different: should a specification define this behavior, or not? I think you've properly identified a trade off, but mid-identified the details. Defining a behavior here does _privilege_ certain architectures, but it doesn't make it impossible. It means the behavior must be replicated in code on some architectures, which is slower.

This is the trade off that Rust (and apparently Zig) are making. This is informed by the architectures that exist, and which ones are wished to support. At this point, two's compliment is overwhelmingly used, and so the decision was made that defined behavior is worth it. Note the parallel here with POSIX specifying that CHAR_BIT must be set to 8.

Notably, the situation here is so overwhelming that even C++ is specifying two's compliment: C++20 says that signed integers must be. This was recently voted in. I haven't read the paper recently and I don't remember if it changes the UB rule here or not, but it does define the representation of integers, a very similar thing that's the motivation for UB here.

<comment><USER16> I was holding out for hardware enforced overflow and underflow checking but I guess it has been abandoned. Thanks for the info. These choices are being made as was made opposite in C standard deliberations... I am interested to see how it will work out.

<comment><USER15> The way we're dealing with that is that there's room in the spec where we're allowed to turn it to "always checked" as a compiler setting, and will if it ever gets good enough hardware support. We'll see though!

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> Looks like its still lacking in network support:

[https://github.com/ziglang/zig/issues/2007](https://github.com/ziglang/zig/issues/2007)

I wonder though, does it already have socket support? that could be a stopgap for me. Edit, looks like it doesnt have sockets either:

[https://github.com/ziglang/zig/issues/1271](https://github.com/ziglang/zig/issues/1271)

Edit 2, looks like it does:

[https://github.com/ziglang/zig/blob/5026db1d/lib/std/net.zig...](https://github.com/ziglang/zig/blob/5026db1d/lib/std/net.zig#L219-L247)

[https://github.com/ziglang/zig/blob/5026db1d/lib/std/os.zig#...](https://github.com/ziglang/zig/blob/5026db1d/lib/std/os.zig#L1724-L1748)

<comment><USER9> You can use any c libraries networking or socket implementations in zig but I think thats as far as it goes at the moment.

<comment><USER18> zig's C-interoperability is second to none and using libcurl works great for networking.

example: [https://github.com/donpdonp/zootdeck/blob/master/src/net.zig](https://github.com/donpdonp/zootdeck/blob/master/src/net.zig)

<comment><USER19> Nim and d both have comparable interop, and nim even works with c++.

</comment></comment></comment></comment><comment><USER20> [https://ziglang.org/documentation/master/#Zen](https://ziglang.org/documentation/master/#Zen) >> Minimize energy spent on coding style.

For me this is sort of important because languages not having standard coding style end up 10000 coding styles. Rust fmt is an excellent example for avoiding that. Does anybody use Zig + fmt?

I know they have something. [https://github.com/ziglang/zig/issues/1523](https://github.com/ziglang/zig/issues/1523)

<comment><USER15> There's a section in this notes about it [https://ziglang.org/download/0.5.0/release-notes.html#zig- fm...](https://ziglang.org/download/0.5.0/release-notes.html#zig-fmt)

The end even has a link to a web-based version of it.

<comment><USER20> Thanks, I totally missed it.

</comment></comment></comment><comment><USER21> It's an exciting week for programming languages. First Nim, then Zig. Keep up the great work!

<comment><USER22> Does anyone here have a good understanding of the relative merits of Zig, Crystal, and Nim? Especially compared to higher profile languages like Rust and Go?

All of these languages seem to be statically compiled, and they all seem to promise both performance and safety. Rust and Go are discussed all the time on HN, so I expect most of us here have a reasonable notion of their relative benefits, for example, performance compared to ease of learning.

What about these lesser discussed languages Zig, Nim, and Crystal? Are their runtime performances comparable to one another? Are they equally safe to program in? What are their relative strengths? Or does it just come down to syntax preference?

I think there's value in having a lot of choices to program in, so I'm not asking which language is "best" any absolute sense. We're better off for having all of these languages coexisting. I'm just asking if anyone with experience in the three of them has any insight or impressions of their relative merits.

<comment><USER23> Zig and Rust both don't have a runtime/GC, they should be on par with performance in C, meaning they are slightly faster than the others (of course this all depends). Go is the only one you listed that doesn't have some kind of parametric polymorphism support (generics). Rust is the only one that will validate your program is memory safe at compile time, they call this 'data race freedom'.

I think in the end it's really up to your tastes which you prefer. Have a look at the tenets of each of the languages and see which resonates with you.

<comment><USER24> I didn't try Crystal, but Nim is definitely on par with C.

Actually you can use just plain (stack) objects and ptr object and you have no GC involved.

Pass the flag -d:useMalloc (or just call your preferred allocator) and you have the full C experience and speed.

<comment><USER23> Maybe, but libraries that you use in Nim will probably use the GC, so will many functions in the std library (I imagine). Additionally, the binary you ship will still probably include the runtime & GC. So it's not really fair to say it's on par with C/Rust, there's reasons to avoid GC besides just performance. Say you are writing an embedded application for example. I don't know any Nim, so correct me if I'm wrong.

<comment><USER25> > not really fair to say it's on par with C/Rust

It is. The GC is inline, thread-local and can be run manually, disabled completely, or switched to the new owned reference.

</comment></comment></comment></comment></comment></comment><comment><USER13> The new async/result location stuff reminds me of the _Pin_ concept that Rust fairly recently adopted. It seems like a pretty huge step forward for the language. Especially since it's casually mentioned that it also solved "safe recursion".

I'm curious about the tools zig offers around doing asyc work while guaranteeing certain invariants, and how the @Frame builtins work with that, but I'm guessing that's going to be elaborated on in a future post.

</comment><comment><USER26> The author also livestreams (I believe on twitch) and publish VODs on youtube, showcasing new features, updates and whatnot!

I'm quite enjoying watching progress updates, relevant examples and Q&A :)

<comment><USER27> The streams are on Twitch: [https://www.twitch.tv/andrewrok](https://www.twitch.tv/andrewrok)

</comment></comment><comment><USER28> Looks promising.

Can we have a consistent function notation

fn name(a: int, b: int) -> void {}

This also helps with clean functional type arguments.

swift and rust support this.

A single consistent notation will be helpful for new polyglots.

</comment><comment><USER29> Zig, Crystal, Nim, Rust, Go. It seems like the industry is responding to the end of moores law and is refocusing on performance. Contrast this with 90's languages like python, ruby, java and c# where computers were expected to get exponentially faster and they focused on developer ergonomics instead.

Can anyone familiar with zig tell me how well it works with more macro heavy libraries? Something like GTK ([https://developer.gnome.org/gtk- tutorial/stable/c450.html](https://developer.gnome.org/gtk- tutorial/stable/c450.html)) or something with generics.

</comment><comment><USER30> The windows build isn't working for me. Still stuck on 0.4 .

</comment><comment><USER31> At the very first glance: what is wrong with

        function xxx()

instead of

        fn xxx()

what are we trying to save here?

Also would be nice to do _import_ instead of _@import_. More readable I think.

Afraid to dig deeper as I do not have time to play with the languages that I can not yet use in production.

<comment><USER7> The @ indicates that the function's built into the compiler itself. Yeah, it looks ugly, but it's nice to be able to visually identify "okay, yeah, this didn't come from any of my imports", and also (I'd assume) avoids cases where one might inadvertently shadow them with their own function definitions.

Re: fn v. function (v. fun v. def v. defun v. defn v. define v. proc v. sub v. label v. the cornucopia of other options here): I don't think it's all that big of a deal. fn does happen to be short, which means more actually-useful information can fit into the same line, so I guess that's nice. The choice of keyword for function definition feels like a really weird criticism.</comment></comment>