Is Blockchain Really the Killer App? - <AUTHOR> http://www.joecoin.com/2015/02/crypto-20-and-other-misconceptions.html <comment><USER2> > I am presently incapable of seeing how any token other than Bitcoin will be > the one that wins.

In some sense, Bitcoin has already "won" in that it currently has a non-zero value. Anyone who says "Bitcoin can't possibly exist or hold value" already is known to be wrong, simply by Bitcoin's existence.

In the same way, I don't understand people like OP who say "No other cryptocurrency but Bitcoin can have value" because many of them already have a value and have "won" by some measures- Why do people keep trying to argue that dogecoin/litecoin/etc/etc don't have value, when people trade them for other currencies every day on open markets?

Near as I can tell, there will be (and already are) multiple "winners" in the cryptocurrency competition, filling different niches, just like there are multiple species on planet earth filling different niches.

<comment><USER3> Just because something is bought for money doesn't mean it actually has value.

Ask anyone that has been in a ponzi scheme or stocks that went to 0.

<comment><USER2> I disagree- The value of something is "what you can get someone to pay for it." That is the only concrete, objective, and rational way to determine value.

> Ask anyone that has been in a ponzi scheme/stock that went to 0

Well, given that you're stipulating a value of zero then clearly you are unable to get someone to pay for it and it's value is zero, by definition.

<comment><USER3> A ponzi scheme has a net value of 0 or less at any point in time.

Just because some people can get out more than they put in doesn't mean a ponzi scheme has created any value for the economy as a whole.

<comment><USER4> "value for the economy as a whole"

You've shifted the goalposts there from "has value" to "value for the economy as a whole".

If I have money in a ponzi and can exit at that point in time, my stake has value. Later it might not, but at that point it does.

<comment><USER3> So you are saying that drcode means cryptocurrency has value as a ponzi scheme?

<comment><USER4> ?!? No.

<comment><USER3> Then how could you possibly think I have "shifted the goalposts there from "has value" to "value for the economy as a whole""?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> The common adage seems to be "storage is cheap", meaning "multi-TB blockchains won't be a problem because you can buy that much storage for a few hundred dollars".

But I think the stupidly-large size of the blockchain is a major hurdle, given the concurrent trend of miniaturization. Embedded devices like one might find in the much-vaunted "internet of things" (eyeball roll) can't really afford to be toting six SSDs just for storing 3 or 4 different blockchains, or even one big one.

There comes a point when it's just no longer practical to store the entire blockchain, but truncating the chain (or only storing some kind of "working set") isn't feasible either.

Not to mention the gargantuan download that's required for that initial setup to get up to date with the latest network transactions.

I think it's a great idea in theory but ultimately pretty annoying in practice.

<comment><USER6> A friend of mine joined chain.com and, as I understand it, their value proposition is to handle the load of blockchain while providing trusted access to whatever needs to be known. I'm no expert, but this seems like the right sort of solution for the problem you pose. Blockchain management is handled in the cloud, and clients (including embedded devices) talk securely to a trusted cloud service to get the relevant details.

<comment><USER5> That seems self defeating. None of the advantages of a decentralized system are realized by centralizing the blockchain

<comment><USER7> That's perhaps my favorite part of Bitcoin. For good or bad, it was started by people rallying against the big centralized banks, and now at every turn we are hitting reasons why centralization makes a lot of sense. I half suspect that eventually it will come to resemble the current centralized systems, whether people want it or not. For example, the number of complete blockchains is dwindling as more people individually elect to start using partial- blockchain clients because of space & traffic.

It's especially endearing to me because it's my primary objection to anarchists (of whom I have several as friends)- that the system they envision just isn't stable, and we arrived at the system we have now for that reason.

<comment><USER8> I find this line of thinking unconvincing. There is a vast difference between voluntary centralisation from which you can withdraw at any time, and forced centralisation from which there is no practical way to withdraw without huge sacrifices.

Many socialist and anarchist ideologists are/were perfectly fine with centralisation of production, as long as _decision making_ is decentralised, and participation is a result of free choice and can be withdrawn.

The _capability_ of decentralisation in Bitcoin is important because it acts as a safeguard against forced centralisation and coercion. As long as the capability remains, whether or not people for practical/efficiency reasons opts for centralisation ought not cause most anarchists any major concern.

<comment><USER9> > The capability of decentralisation in Bitcoin is important because it acts > as a safeguard against forced centralisation and coercion. As long as the > capability remains, whether or not people for practical/efficiency reasons > opts for centralisation ought not cause most anarchists any major concern.

I'm probably misunderstanding something, but isn't it more that blockchain technology allows decentralisation, while dominance of any particular deployment supports centralisation? As I understand it, once Bitcoin is centralised, the 51% can control it as they wish, and the only alternative is to set up a wholly separate Bitcoin2 chain, or another altcoin.

(Again resulting in cryptocurrency being a bad store of value.)

<comment><USER8> There are two "levels" here: Centralisation to more than 51% means you have to trust the central "authority". The safeguard there is that if the central authority starts misbehaving, the technology is out there, and everyone can start using it one a new blockchain as you suggest, while agreeing on a blacklist.

The lower level is centralisation into a small-ish pool of large services where no service exceeds 51%. That's what I was mainly thinking about.

We've seen in the past how Bitcoin has adjusted to the threat of 51% with people withdrawing capacity from large pools etc. in response.

In either case the point is that the existence and open availability of the technology acts as a deterrence to coercion because the act of trying to take advantage of a 51% attack will send people running for the hills (and the existence of altcoins makes that even easier).

We've seen people willingly pull back from potentially even "accidentally" exceeding 51% of the Bitcoin network in the past for that very reason.

The point is not absolute decentralisation at all cost (though _some_ anarchist tendencies do want to maximise decentralisation), but the ability to withdraw consent and unilaterally decentralise.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> I kinda get the author's point here - to run a proof of work based system you need an incentive to actually do the work. Bitcoin has such incentives, and so it will succeed for any tool that people try to run on it. If you try to create a new system, you have to convince people to do the work in the first place.

So it makes much more sense to use bitcoin as your distributed consensus system, for whatever application you choose to place on top of it.

I'm not sure I agree with the premise, though - which is that people actually think that - I reckon that Sam Altman's comments might just be a way of saying 'Bitcoin is in the news a lot, I think it's a waste of my time, but I don't want to write it off just yet.' It's good, it makes him sound profound, everyone's kinda happy.

The question is: What non-currency applications would actually benefit hugely from being decentralised in such a way?

<comment><USER11> an attempt at answering this:

fact: people working on useful tools benefit us all problem: incentive is only big-picture, feel good. money is, by design, ridiculously hard to come by for helpful projects. teachers, farmers, babysitters, soldiers and many other professions provide valuable service to society yet make only a fraction of what money-manipulators (bankers who specialize in generating $$ from $) or cross-cultural entertainment like motion pictures.

Patents, trade secrets, close source & government regulations all contribute to incidentally de-incentivize many projects built around benefitting a large chunk of humanity as opposed to localized (individual, corporate or nation- state) profiteering. << REWRITE

I ran into this recently designing <link CodeSwarm> \- a distributed protocol where programmers receive escrowed bitcoins for an open-source project accepting their work, merging it into the master branch of the project. The payout system sounded promising, but the money had to come from somewhere and be managed to fund these projects!

So how can we, the people, reward people for doing good things, things we like?

"FarmerCoin", described below, is a thought experiment where local Farmers can receive fiat-by-consensus cryptocurrency in exchange for an independent third- party recording (both videographically and on a chain of signatures) the farmer's produce.

I propose the formation of semi-independent regulators for specific industries who accept payment of their choice to regulate a deed done. Regulators film their investigation and verification of the deed, publish to the protocol along with a signed message containing a hash of the video and a magnet link for nodes to torrent.

Once regulators have published a video, end-users known as "verifiers" or "voters" who have clients monitoring the network receive a notification that there is a verification to vote on. This would involve torrenting or finding the video online, verifying its hash, playing the video, then presenting a vote to the user. This vote would say "This is acceptable" or "This is not acceptable".

In "FarmerCoin", this plays out by the farmer showing regulators a bin of vegetables. 10kg of tomatoes, for example. Regulators film the weighing of the tomatoes then use a software to upload that video, a signature of its hash and farmer identity information to the network. If the tomatoes were rotten, the regulators are incentivized not to upload a video because their reputation may become damaged and farmers will not hire them (see next paragraph for why).

Farmer receives "FarmerCoin" for 10kg of tomatoes as the network approves it. If the network disapproves the quality of the tomatoes, the farmer receives nothing.

I admit - there is a flaw in this design. How much "FarmerCoin" is 10kg of tomatoes "worth"? I'm not sure. I don't know how to answer that. Maybe "FarmerCoin" should be generated per calendar year. Please discuss because I think this, at the time of writing, is the only missing link I see in the system.

Regarding the voters - trusting the internet as a whole to vote on if a farmer gets paid is ripe for exploitations. Instead, "FarmerCoin" could use votes _only from public-keys the farmer has explicitly accepted to vote for them_! Namely these are the farmer's regular customers at the market. This solves the trust problem on a human level. Trying to make this system "completely automated" ignores the fact that real-world actions are happening, which require intelligence. We don't have software to do this process so I think the best bet is to incentivize voters by _also_ generating "FarmerCoin" for each vote they cast.

To be clear, _YES_ "FarmerCoin" is generated by _fiat_. It is a more decentralized kind of fiat. For that reason and the reason that it is in the voters' \-- who are customers of the farmer -- best interest to see the farmer receive accurate feedback on their produce so they grow better yields. ((FIRST REASON???))

YAKSEE As far as how does "FarmerCoin" have value or "Yet Anthoer Crypto Currency" \- consider this. When people speak of "Bitcoin" as being "decentralized", they really are only referring to network logs and the _theoretical_ potential to generate currency. In actuality, those who held existing fiat resources and hardware manufacturing quickly became juggernauts in the cryptocurrency world. I mention this because when I talk about the "fiat" of the above localized consensus I imagine many crypto-currency fans revolt and insist that no, only computationally generated cryptocurrencies are valuable because commerce should be "trustless". I feel that on an intuitive level striving for a trustless society is mal-incentivized. "FarmerCoin"(s) gives us another kind of cryptocurrency just like LiteCoin's alternative hashing algorithim co-exists with Bitcoin.

Besides the intrinsic value of whatever a cryptocurrency with a novel generation mechanism, "FarmerCoin" could be accepted by farmers for discounts on food that those same voters gave feedback on. I think this completes the incentive circuit quite nicely.

MANY FARMERCOIN "FarmerCoin" could be Tomato Coin, Apple Coin. It could also exist for each specific farm, or region. This would be up to the farmers, regulators and community of voters to work together and decide. Having an exchange (centralized or not) for these currencies to trade could provide additional economic incentives to the voters and farmers. Even if "regular" cryptocurrency is not traded for FarmerCoin, community specific networks could trade eg plows, immunizations etc.

EXPANSE This concept can be applied to many real world actions. Making a work of art, patching a pothole, giving someone the finger, giving your cat a ball of yarn. Only if the community finds vaue in the "FarmerCoin" they are receiving and the farmer finds it beneficial to receive this subsidized fiat- by-consensus currency will the currency survive.

<comment><USER12> 'FarmerCoin', as you describe it, sounds utterly pointless.

What farmercoin measures:

1) A farmer takes a picture of good produce (whether or not they sell said produce)

2) Verifiers / customers claim the produce looks good from only video evidence (did you know that you pinch the ends of cucumbers to check it? You knock on watermelons to judge their quality?).

3) The farmer gets a coin that is somehow more useful for trading than USD and the verifier gets discounts

What you want to measure: "Does the Farmer sell good produce"?

The market forces already gravitate towards the solving this problem. If I go to a farmer's market and one seller consistently gives me amazing tomatos and a second consistently gives me one rotten one per bunch, you can bet I'll "vote with my wallet" so to speak. Similarly, the farmer who sells better produce will be rewarded by people choosing his produce.

There's no need to try and force "Yet Another Crypto Crap" into something where it's not solving any problem.

As an added bonus, farmers are possibly one of the _worst markets_ I could imagine to try and impose some meaningless techno mumbo-jumbo on. Many a farmer still refuses to use credit cards, preferring only cash, because cards are too complicated.

Today, we already have online reviews which people give out and consume for free on many sites, and that _MUCH_ better fits this problem then some crazy akt-coin meant to proxy reviews.

</comment></comment></comment><comment><USER13> TL/DR: the Blockchain only wins if Bitcoin wins, because miners need an incentive to mine.

"...the Bitcoin Blockchain cannot win without Bitcoin as a currency winning too, but if the Bitcoin price languishes, the incentive mechanism backstopping the Blockchain will be weak and therefore unreliable, ..."

<comment><USER14> Why wouldn't companies who rely on the blockchain step in and incentivize the miners to ensure the health of the network?

<comment><USER15> But if they did that, what would the mechanism be? The simplest way to incentivize the miners is to... buy bitcoins.

</comment></comment></comment><comment><USER16> This argument hinges on the assumption that miners need the incentive of new coins mined from the blockchain for them to continue mining. However, there are several other incentives that people can have. There are several actors inside and outside the US who like to have a currency without government control for various ideological reasons and do not need an economic incentive to continue validating the blockchain.

</comment><comment><USER17> > _" The moment one becomes centralized, whether due to a flaw in the protocol > or the concentration of mining power, it is no better (and probably worse in > fact) than fiat money, e-gold, or any other monetary scheme which is > vulnerable to capture by a minority, and therefore vulnerable to abusive > seigniorage and capital controls."_

Hasn't this already happened? I believe I heard something about a '51%' attack some time ago, which (I think) would mean that attacker could re-write history (I'd appreciate any corrections or clarifications).

Edit: Here's one story [http://arstechnica.com/security/2014/06/bitcoin- security-gua...](http://arstechnica.com/security/2014/06/bitcoin-security- guarantee-shattered-by-anonymous-miner-with-51-network-power/) (not quite about rewriting history but double-spending becomes possible).

<comment><USER18> The Bitcoin wiki gives full details[1], but tldr, 51% attack breaks most elements of the blockchain (reverse attacker's transactions => double spending, prevent transactions from getting confirmation, prevent valid blocks originating elsewhere) but doesn't allow the attacker to arbitrarily rewrite history.

As far as "hasn't this already happened", some of the mining pools in aggregate have had or presently could combine to get 50+% of the Bitcoin mining power[2], but to perform the attack requires active coordination from all pool participants. If an attack like this were launched, it would be obvious to anyone viewing the blockchain, likely destroy the value of Bitcoin, and hence their investment, so is economically not a good idea for them.

[1]: [https://en.bitcoin.it/wiki/Weaknesses#Attacker_has_a_lot_of_...](https://en.bitcoin.it/wiki/Weaknesses#Attacker_has_a_lot_of_computing_power) [2]: [https://blockchain.info/pools](https://blockchain.info/pools)

<comment><USER17> Thanks for the clarification.

> _"...so is economically not a good idea for them."_

This would imply that the trust model itself would have to undergo a fundamental shift (and likely has done). There are now entities you have to trust, rather than the system itself -- at which point the decentralised aspect is less of a defining feature.

<comment><USER19> Having to trust knowledgeable people to act in their own interest is hardly a violation of trustlessness.

</comment></comment></comment></comment><comment><USER20> In order for bitcoin to "win" it needs to get massively more valuable. Valuable enough to move the equivalent of trillions of dollars per year and users need to be able to make million dollar purchases without drastically changing it's price. Otherwise it will never be truly useful as a currency and as interest is lost and prices go down parties concerned with verifying the blockchain will become sparse and the whole system collapses, magical blockchain and all.

Bitcoin has far from "won" in the sense of a currency and if another crypto- currency surpasses it's current popularity the faith in any crypto-currency being stable enough to move trillions of dollars each year is irreparably harmed.

People raising a few thousand dollars here and there in other crypto currencies is fun but it's not only paltry and not generally useful but can easily be attributed to entertainment more than economics. Once the novelty wears off, where will crypto currency stand. That's the most important question we need to ask ourselves. All these alt-coins aren't evidence of a thriving eco-system, they're evidence of the very reason why a cryptography based currency is inherently valueless.

The blockchain cannot last without bitcoin becoming massively more valuable. Many people already see bitcoin as being too valuable and alternatives too easy to create. What needs to be done to scale crypto-currency to the level of an actual currency? Government backing?

</comment><comment><USER21> While in theory Bitcoin can be adapted to "2.0 features" and beyond, in practice it's impossible.

Bitcoin code, protocol and marshaling formats are a mess. Bitcoin blockchain and transaction data structures make too many hardcoded assumptions about underlying application - payments with a single token.

Bitcoin scripting language was designed for transaction validation only, which makes implementing a smart contracts with it a hack and requires external Oracles.

TL;DR: Bitcoin is a good PoC which gained a network effect.

<comment><USER22> > Bitcoin code, protocol and marshaling formats are a mess.

Which is why people are working on e.g. Libconsensus.

There are dozens of functional Bitcoin clients based on entirely different codebases, which indicates that it's entirely possible to start from scratch.

>payments with a single token.

While the Bitcoin transaction format is a bit inflexible, you're wrong about the assumptions it makes. Even from the beginning, there has been in-protocol support for more advanced transaction types, like escrow transactions. You can even use a lot of these transaction types right now! There are still some transaction script opcodes that haven't been fully enabled yet, but that's just a matter of tweaking the consensus rules once we're sure that the opcode was implemented correctly and won't have any bad side effects. This has happened several times already with no major problems.

<comment><USER21> You can find a list of Bitcoin script shortcomings in the Ethereum whitepaper and Ethereum Design Rationale document.

Writing a BIP to add a new opcode for every possible transaction type is not the answer. And still I don't see how multisig or P2SH can use something else than BTC tokens (colored coins require external asset registries).

<comment><USER22> >You can find a list of Bitcoin script shortcomings in the Ethereum whitepaper and Ethereum Design Rationale document.

Ah, Ethereum, the ultimate crypto-currency vaporware. When did vbuterin announce it, over a year ago now?

There's a reason the Bitcoin script is simple; because it does everything we want Bitcoin to do (facilitate economic transactions) and it's simple enough that we can be sure it works properly.

If Ethereum actually releases, I'll take that into consideration for my judgement of more complex script schemes.

Yes, Bitcoin is "single-token". What's the downside of this? Why do I care if I need an external registry for non-standard tokens? For tokens to have any effect in the real world (e.g. economic value), you need some form of "external asset registry" no matter what. In most cases, this comes in the form of the seller passing judgement on the value of the token.

</comment></comment></comment></comment><comment><USER23> I don't necessarily agree with the conclusion at the end. Supposing that sidechains can be mined simultaneously with the bitcoin at no additional cost, and that there is a fixed bitcoin <-> sidecoin conversion ( _not_ market based) built in to the protocol, bitcoin would never completely lose its value, because it could be converted to sidecoin at the same rate it would be before. The market price would be fixed to some small price differential below the price of the amount of sidecoin it could be converted to.

The thing about bitcoin is there are a lot of things done "wrong" with it, that are impossible to retrofit into it. However, the network effect means that it's also impossible to switch to another altcoin without completely devaluing bitcoin, which would mean that the altcoin would be devalued because it could happen to the altcoin as well. I agree with that part. However, something that's pinned to the value of bitcoin like what I've read of the sidechain proposal would be a way to do that.

<comment><USER24> > Supposing that sidechains can be mined simultaneously with the bitcoin at no > additional cost

Which is obviously not true. Extra storage and bandwidth at the very least.

<comment><USER23> Hash rate is independent from bandwidth/storage. Assuming you can do N hashes/s, you can still do N hashes/s with merged mining of multiple sidecoins.

Also, presumably any bandwidth incurred by a sidecoin would have been incurred by bitcoin if the sidecoin didn't exist, so total bandwidth/storage would be similar.

</comment></comment></comment><comment><USER25> Interesting post in that this is the first time I've seen someone from the bitcoin speculator group challenge the thesis of those in the VC/startup group.

Both groups are clearly 'talking their book', but this reads like little more than cheerleading/threatening aimed at himself and fellow speculators. For example:

        If Cryptocurrency 2.0 ever replaces Bitcoin and all Bitcoins
        become worthless, confidence in the category of
        cryptocurrencies in general will be, I believe,
        irreparably damaged. If Cryptocurrency 2.0 just replaced
        Bitcoin, there's nothing stopping Cryptocurrency 3.0 from
        replacing Cryptocurrency 2.0 and sending the value of its
        tokens to zero. Ad infinitum.

</comment><comment><USER26> I'm pretty sure what people mean by "Blockchain not Bitcoin" is "Bitcoin 2.0" and not "Bitcoin 1.0" i.e. people think that the killer apps will be complex programs running on the blockchain that enable things like smart contracts etc much like search & social apps were more of killer apps than email which is the analog of bitcoin the currency. The point this article goes into detail to explain is likely not lost on people as smart as Sam Altman or Fred Wilson who say this.

</comment><comment><USER27> One of the central assumptions in the argument is that the miners need an economic incentive, a (spendable) reward for mining.

How then to explain why people contribute to Wikipedia? Or volunteer at the local seniors centre? Or donate compute time to SETI@home (and other BOINC projects)? Or add map data to OpenStreetMap? Or test open source software? Yes, some of those people get paid, but many do not.

The incentive need not be economic.

<comment><USER28> Say what you like, there _is_ an incentive in the opposite direction in the case of a blockchain used as a trust-store, which does not exist in the other cases you described. One could make _a lot_ of money subverting a trusted blockchain, whereas Wikipedia vandals don't profit a cent.

This means that you will inevitably have massively funded efforts to subvert such a blockchain. One thing I know for sure is that simple financial self- interest is one of the most powerful things in the world. Every blockchain has that fact working against it. The reason they don't collapse is that on the other hand, they have that same force working _for_ them as well. A volunteer blockchain like you propose wouldn't stand a whelk's chance in a supernova. Sorry.

</comment></comment><comment><USER29> I think its the decentralized nature that is the big win. However for bitcoin to really "win" is when people would actually prefer payments in bitcoin than any other medium. Which is not the case so far, except for illegal market places.

</comment><comment><USER30> You mean, Blockchain is the platform and 'currency' is the first killer app?

<comment><USER31> Yeah, "killer app" means a powerful _application_ of technology, not the technology itself. The emphasis is that cool-technology is not enough, you need to get _work_ (or play) out of it.

A warp-drive is just a technology, but "colonizing the galaxy" is the _application_ which will make people really use it.

<comment><USER32> The thing is, the regular payments system (plastic cards, Dollars, Euros, and other national currencies) already works very well for the vast majority of people. If you're a merchant, then you should certainly think about being able to accept payments in Bitcoin, but as a consumer I'm having difficulty thinking of an instance where I've _ever_ said to myself 'I need some Bitcoin...'. If I was into drugs it would be convenient, I guess, but hte size of the illegal drug market :: regular commerce is pretty small, and I'd imagine drugs about the largest illegal consumer market by a long way. Other contraband markets involve much higher risk factors and are correspondingly smaller.</comment></comment></comment>


How Facebook Connect Freaks Me Out - <AUTHOR> http://daggle.com/facebook-connect-freaks-2365 <comment><USER2> The title is misleading. It should be "How Groupon freaks me out".

Facebook Connect doesn't ask for all that information by default; it was Groupon's choice.

<comment><USER3> I don't know, it seems like a lot of applications are requesting to post to my wall. It freaks me out as well. I wonder how many people decline the Facebook Connect login when they see applications requesting that permission.

</comment></comment><comment><USER4> Generally, I ask for access to the user's data at any time (even when they're not logged in) for flexibility. There are some situations where you need access and the user is either not presently using the website or Facebook isn't properly detecting them. I'm normally not worried when a legitimate company like Groupon asks for permissions like these.</comment>


Fundamental design principles for non-designers - <AUTHOR> https://medium.freecodecamp.org/fundamental-design-principles-for-non-designers-ad34c30caa7 <comment><USER3> I fully believe that the principle of proximity is the main design tool (though contrast in size helps, of course). You could forget about color and still lay out things clearly and beautifully.

The primary rule is incredibly simple, as mentioned in the article: there should be more space around an element than inside of it―then the eye will perceive the element as cohesive.

This, then, is applied on all levels of a layout: letter shapes and kerning, line spacing, headers and paragraphs spacing, blocks layout, page margins. Even architecture uses this principle―not too surprisingly, since it just describes the workings of visual perception.

Beginner designers sometimes try to remember a bunch of rules for optimal line spacing, header and paragraph spacing, page margins, etc. They can go for years not knowing why particular proportions work, and if elements change they begin to calculate this stuff anew in pixels, or just get lost as to what to do now. Meanwhile, if you go to the principles, you learn to see the proximity, and all spacing becomes obvious to you.

P.S. A bit ironic that the article uses line spacing too close to double. By the way, on Macs and phones, Matthew Butterick's 'Practical Typography' website is absolutely perfect in both spacing and contrast, at least with the default Valkyrie font. I'm immeasurably envious of this feat, as I have no idea how to achieve such mastery. Link: [https://practicaltypography.com](https://practicaltypography.com)

<comment><USER4> I'd disagree with your P.S. - I find the content on that page to be too big and too widely spaced to be easily readable.

<comment><USER5> did you open any of the links? I disliked the table of contents, but when I opened one of the pages it was much nicer

</comment></comment></comment><comment><USER6> I like those and generally agree, though I'd change one thing: if you're designing something that's meant to be used - as opposed to just looking pretty - ignore advice about maximizing negative space. Just fit all the information your users need at a given moment on the screen. Information density is your friend, scrolling isn't.

(Of course, the section "Reduce Visual Noise" still applies.)

<comment><USER7> I strongly agree with this. From TFA:

> Putting too many elements into a limited amount of space is like trying to > listen to three different songs at once. It's hard to understand what is > being said.

In some situations, putting _more_ information on the screen, parseable without scrolling, helps tell the right kind of story (for example, when comparing a bunch of options). So I think this advice is only halfway there:

> give your designs as much negative space as you possibly can, to declutter > them and make their meaning more obvious.

Should also include "Don't add so much negative space that cohesiveness is lost."

<comment><USER8> Although I'm an engineer and not a designer, I think it's fair to point out that this is article is primarily about _visual design_ , which is only one aspect of the design of the overall user experience. There's a phrase I've heard, "information architecture", which roughly seems to mean "how the layout and presentation help the user process the information being presented". With this in mind, I think a lot of folks (both designers and engineers) conflate the two sometimes.

Another thing: I suspect that information-dense visuals are sort of like highly-performant software: hard to design, harder to implement, and _much_ harder to change once you've gone to all the trouble of squeezing out every possible optimization. As advice for beginners, it seems fine to say "add more negative space", just like we tell junior engineers to "avoid premature optimization", because the ability to recognize when those optimizations are needed goes hand-in-hand with the ability to actually _do them right_.

<comment><USER4> Is conflating them the wrong thing to do? Surely you're never working on just one in isolation?

</comment></comment></comment></comment><comment><USER9> "The Non-Designer's Design Book" by Robin Williams was a big help to me when I needed to take a leap in my ability to pretty things up. The tenets in there seem to be rediscovered and reworded often (not sure if this book is the first, honestly) but I think the main idea is to have some kind of strategy for how to be purposeful with your design choices. From the book: Proximity, Alignment, Repetition, Contrast. I think that ordering is less funny as an acronym but more useful as a guide with respect to what you focus on first (Proximity - grouping ideas is a natural place to start, Contrast - <USER2> comes last because it's the trickiest).

<comment><USER10> My first though was this book as well. Everything in the article has been taught and talked about for well over 20 years (probably longer). I'm surprised that there is so much less backlash on HN when it comes to "rediscovering" design principles compared to engineering principles. Probably just has to do with where expertises lie. With that being said, I'm all for spreading good design principles to the masses.

</comment></comment><comment><USER11> I recently read Refactoring UI by Adam Wathan, which goes more into detail about basic design principles in a manner that noobs can understand. There are also a whole bunch of examples and stuff. Highly recommended:

[https://refactoringui.com/](https://refactoringui.com/)

[https://twitter.com/adamwathan](https://twitter.com/adamwathan)

<comment><USER12> We bought a copy for work - well worth it. I really like the materials presented, as well as the walk through videos showing transformations of UI.

</comment></comment><comment><USER13> Yes, regarding the color thing, I would add that when you put a light color on a light color there also is the problem that the amount of contrast that you get varies quite a bit depending on the monitor. What looks like enough contrast on your monitor might not be on the one that your user has.

<comment><USER3> Light text also tends to disappear into the background when an 'evening light' red filter is enabled―which are becoming more popular these days.

</comment></comment><comment><USER14> I very much dislike how the word "design" is now used in place of "visual design". Design very much used to be a science of creating cohesion and intuitiveness in any system; it's now commonly used to mean "making things look nice and attractive". There is nothing wrong with visual design, but it is a small (and arguably, less important) subset of design as a whole. Look at Apple for an example of why this is a regression; they have always touted themselves as a design-centric company. This used to mean that design principles were used to make their products incredibly intuitive, attractive, and user friendly. Now, they make very, very pretty devices and software, but they are not intuitive nor user friendly.

</comment><comment><USER15> I was told my designs had too _much_ contrast, being the fad a couple of years ago was low contrast, which followed the "tiny font" fad. Fads often violate practicality and logic. Consider torn jeans.

</comment><comment><USER16> Nice list. Like someone said, the true expert knows when to break the rules, but for someone who doesn't really know anything about design but needs to put together a site, just following these simple rules is likely to make a big difference.

Also, even a lot of experts should take the first point to heart more...

</comment><comment><USER17> The anti-visual noise bias has gone too far. You remove boxes, underlines, and understandable cues like arrows, then they remove words and replace them with nonsense icons. Most UIs make no sense.

<comment><USER18> I agree. I think even touch UIs should have some hints if you can click on something, and if you can click, force press, or long-press.

It would be great if someone could make hover work on touch UIs.

The great 1980's Mac OS UI was really something. You could explore the menus and see what options was available, and those that didn't apply was still there, giving a hint that you should selecting something to make then selectable.

</comment></comment><comment><USER19> As with every list of guidelines, the true expert knows when to break the rules.

I am not such an expert.

</comment><comment><USER20> Pretty much all those points are different techniques for grouping, negative space to push away from non-associated elements, common elements such as fonts so the eye associates things together, etc...

</comment><comment><USER21> Just follow the CRAP rule: Contrast Repetition Alignment Proximity

</comment><comment><USER22> Principle 1: Don't use medium.</comment>


Clojure Don'ts: Lazy Effects (2015) - <AUTHOR> https://stuartsierra.com/2015/08/25/clojure-donts-lazy-effects <comment><USER2> This isn't just a Clojure "Don't". It's a general programming "don't".

In my old team we had a semi-serious production bug result from this (it didn't actually kill anyone but stopped the system from being used) because we had an expression with a side effect inside a debug logging statement. The code worked perfectly in a debug build, but in release the DEBUG_PRINTF() equivalent was removed by the C++ preprocessor (so logically equivalent to "!debug && " in front of every line) and a crucial value didn't get updated. It took some tense minutes debugging it on site in front of the client before we figured it out... lesson learned!

<comment><USER3> It's an obvious-enough "don't" that it's one of the stated reasons for universal laziness in Haskell. Simon Peyton Jones has said that he's committed to keeping everything in GHC lazy to keep them honest about side effects. I think the idea is basically that if something has side effects, it will become painful to use immediately due to Haskell's laziness.

<comment><USER4> I've had a Haskell program fail in exactly the same way, though - removing a debug statement caused a program to start crashing - even though the lazy functions were completely pure.

We had a numeric counter that was enumerating the frame number of a simulation. When we removed the debug statement, we didn't realize that no other code ever evaluated the counter - so instead of resolving each X+1 into an integer, Haskell kept it as a ever-growing nested series of unevaluated thunks: 1+1+1+1+1+1+1+1+1+1+... , and our efficient little program started filling up all its available RAM and crashing.

<comment><USER5> Just, wow. I'm curious if there are mechanisms that could guard against growing strings of unevaluated thunks. Would be an interesting GC problem. One where you free up space by forcing a maximum depth of unevaluated space. (You'd obviously have to treat any "infinitely extra" computations versus the "do this on top of that" ones. But that shouldn't be undoable, should it?)

<comment><USER6> Yeah, this is Haskell's biggest footgun by far. The language gives you tools to control evaluation order (including some neat libraries that let you parallelize things without much disruption to the logic of your program), but there are no silver bullets.

A good rule of thumb is to by default mark fields for basic types like Int, Bool, etc. as strictly evaluated, and leave larger structures (trees, lists, etc) lazy. But you still need to be careful.

The compiler trying to silently fix things is probably a bad idea. The current behavior is at least easy to understand; I'd hate to have a program that's working because the compiler could figure out that it could make something strict, and then I bump something mostly unrelatrd such that the optimizer can't be sure anymore, so I get a space leak.

Also, unintended evaluation can potentially cause high memory use as well (e.g. [1..1000000]), so the compiler also has to be careful about _introducing_ excessive memory use.

The compiler does do some strictness analysis, but it's a hard problem.

I like the way idris does things -- strict by default, laziness controlled by the type system, and some nice support for automatic coercions.

<comment><USER5> To be clear, I was not voting for the compiler to do this, but the runtime. It should be instrumented and it would likely be a round trip process sometimes, with people tweaking how it does things.

</comment></comment></comment></comment></comment></comment><comment><USER7> This is a sound article - Clojure's laziness is often a source of common gotchas for new users of the language.

It's often not clear what is lazy and what isn't - concat is lazy for instance. It isn't externally obvious which of the very common operations are lazy, filter being lazy has bitten me in CLJS a few times too.

Adding to the source of the confusion is that the REPL will often realize your side-effects which then won't get evaluated in your runtime environment.

One of the errors I used to make earlier on was:

        (map insert-into-db table-rows)

<comment><USER8> always mapv when doing I/O on the backend and always extra vec when returning sequences in the frontend

<comment><USER9> run! and doseq are for IO on each element of a sequence. Functions like mapv are intended for data transformation, not side-effects. This is why run! and doseq return nil

<comment><USER7> I don't often find myself doing sequential side effects so often anymore, but when I do doseq has been my go to, though I will confess I didn't know about run! until this thread.

</comment></comment></comment></comment><comment><USER10> This is part of the reason for monads: they specify the order of operation, which is necessary in a lazy language like Haskell. The `bind` or `flatMap` operation in a monad specifies "what happens next". Once you have defined order of operations you can start to reason about effects.

<comment><USER6> It's worth noting that while monads themselves naively introduce a data dependency, that doesn't necessarily force evaluation order. If the compiler is smart enough and sees something like:

        foo >>= \_ -> bar

It is well within its rights to evaluate bar and then foo, or do both in parallel, or not evaluate foo at all, as long as it can guarantee that the resulting value is the same. The big thing it needs to be careful of is not to introduce nontermination.

What makes this do the right thing for effects is what values of type IO actually _are_ , and what bind means specifically for IO. It's helpful to think of an IO value as code in another (imperative) language. Bind takes two fragments of code in that other language, and stitches them together into a script that executes one after the other.

The key thing is that the order in which you compute parts of the script is entirely orthogonal to the order the commands appear _in_ the script.

In Haskell, evaluation does not cause side effects, period. `main` is a value of type IO, which is executed when the program is run. The effects of that execution are independent of how the value `main` is computed.

Obviously, the computation itself takes time and space though.

</comment></comment><comment><USER11> Something that is specially dangerous is mixing laziness and dynamic vars. If you bind a dynamic var to then return a lazy seq, and the dynamic var is used to generate the seq's elements (e.g. `binding` over `map`, and use the bound var inside the map's `fn`), you may get different results depending on when the seq is evaluated (which is not determined)

This made me waste a whole afternoon once. I was even ready to submit a compiler bug!

</comment><comment><USER12> > In my opinion, the presence of doall, dorun, or even "unchunk" is almost > always a sign that something never should have been a lazy sequence in the > first place.

I'd say it's a good rule of thumb, but it's sometimes justified. For example, `line-seq` returns a lazy seq of lines read from a given Reader; the appeal being you can process them one by one, without keeping them in memory all at once. But if you just want them all, you wrap the `line-seq` in a `doall` in a `with-open`.

My scraping library, Skyscraper [1], has a similar justification for laziness around side-effects: scraping a site returns a lazy sequence of elements, each corresponding to one page. It's terrifically useful to have that sequence be lazy, and there's unchunking code on Skyscraper to enforce full laziness. Incidentally, I'm rewriting it to be based on core.async, but it has a less functional feel to it.

[1]: [https://github.com/nathell/skyscraper](https://github.com/nathell/skyscraper)

</comment><comment><USER13> Does mapv not do exactly what the author needs? Ie an unlazy map? [https://clojuredocs.org/clojure.core/mapv](https://clojuredocs.org/clojure.core/mapv)

<comment><USER14> It can, but using it that way is considered non-idiomatic in Clojure. The intent of using variants of map is to produce a collection with each element transformed. Someone who reads the code might reasonably expect not to find side effects inside any variety of map.

Clojure provides doseq and run! for side effects on collections, and both return nil. One might get the impression that these design choices are intended to discourage the programmer from complecting transformations of sequences with performing side effects on their elements.

Most of the time, you can replace one with another, such as pmap (lazy, parallel) and have the program behave the same way. Using mapv for side effects breaks this assumption.

</comment></comment><comment><USER15> This problem is magnified in ClojureScript doing React.js rendering. React.js renders breadth-first in stratas (compared to a call stack which is depth first). Everyone gets bitten by it once.

</comment><comment><USER16> (2015)

<comment><USER17> That is valid clojure too ;)

<comment><USER18> No way, a number does not implement IFn :-)

<comment><USER19> Curious... are numbers open to extension ? so I can (1024 2) => 10</comment></comment></comment></comment>


All-Pro Hacker Wanted - <AUTHOR> http://www.fleaflicker.com/jobs.do

<comment><USER2> "red-black tree while blindfolded-in assembly"

you are kidding right? most people won't know what that is and if they do they probably can't program one in C if they know programming in C

<comment><USER3> Actually the correct answer is "you don't want a red-black tree, you want a splay tree" as it works with just a pair of left/right pointers and requires no extra per-node data.

:)

<comment><USER4> Splay tree are the moment when you should stop reading your theoretical data structures book, for all practical purposes.

</comment></comment></comment><comment><USER5> Ynews! isn't a job board.

<comment><USER6> Sure it is

<comment><USER5> its cool to link to things that might lead to jobs; but not to directly link to a job listing with no other cool information.</comment></comment></comment>


Facebook bug 'kills' users in 'terrible error' - <AUTHOR> http://www.bbc.com/news/technology-37957593 <comment><USER2> The biggest thing I take away from this is that users have learned to tolerate minor problems in software. I always make it a personal goal to have 0 bugs, but never succeed. It is good that users cut us some slack, because it means we can spend some time pushing the featureset forward, rather than making everything 100% perfect 100% of the time. (Be more careful if you're working on life-critical software, though. Features are not necessarily the most important thing there ;)

</comment><comment><USER3> "We hope people who love %s will find comfort in the things others share to remember and celebrate %s life." is one of the most insincere code commits of that day. Let others write about a lost loved one, not robots.

<comment><USER4> I don't know, my microwave flashes "Enjoy your meal" every time it's done heating something and I like that little touch.

<comment><USER5> What kind of microwave is that? Mine just swears at me. Consecutively.

<comment><USER6> Microwaves are the most aggressive robots.

"Hey! Hey! Your food has been ready for zero seconds! Hey!"

. . .

"Hey! F#$face! Your burrito has been ready for five seconds! Eat your g-d food meat bag!"

. . .

"Ten seconds?! REALLY?! Are you serious?! We're enemies forever now! Eat this crap for f's sake!"

<comment><USER7> I see you've met my dishwasher.

"Hey, the wash cycle is over" Yes, but everything is still as hot as lava.

"Hey, it's been 5 minutes." Still hot.

And then it beeps a "Hey!" every five minutes thereafter.

</comment></comment></comment></comment></comment><comment><USER8> "An unusual bug on Facebook briefly labelled many people as dead."

</comment><comment><USER9> You know, I bet it was something to do with `memorializeUser` again (see [https://www.columbia.edu/~ng2573/zuggybuggy_is_2scale4ios.pd...](https://www.columbia.edu/~ng2573/zuggybuggy_is_2scale4ios.pdf) slide 46). In fact I would go so far as to say this is the kind of thing that should be encoded in the type system so it's a compile error to try to do this.

</comment><comment><USER10> Thirty years from now: Same headline without quotes.

<comment><USER11> "It turns out these users had been dead for several years, but due to a glitch in payroll, they had still been physically alive. We, uh, just fixed the glitch."

</comment></comment><comment><USER12> I have to wonder what the attempted feature was that resulted in this.

<comment><USER13> If it's anything like my bugs, it's a single-character typo in the template.

<comment><USER14> I feel like Facebook must do a phased roll out of their front-end modifications such that they'd detect that before it was big enough to matter (or perhaps during language normalization which must be huge for them). My guess is they were running something on the back-end to "clean up" dead users and it went haywire.

</comment></comment></comment><comment><USER15> Let's wait for the post-mortem on this one.

<comment><USER4> (lol) do they usually give such? I'd love to know what happened here.

</comment></comment><comment><USER16> Who uses Facebook?

<comment><USER17> Comments to HN need to be civil and substantive. Please read the site guidelines:

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

[https://news.ycombinator.com/newswelcome.html](https://news.ycombinator.com/newswelcome.html)</comment></comment>


The Myth of the Lone Inventor (2013) - <AUTHOR> http://mentalfloss.com/article/49434/sxsw-myth-lone-inventor <comment><USER2> What sticks with me is the notion that whereas _a posteriori_ we may think of notable inventors of yesteryear as being bolts from the blue, they themselves invariably laboured under the paranoiac fear that somebody would trump them: Bell, Marconi, Eckert, Astastof (sp?): they all feared somebody would scoop them and scrambled over themselves to get patents for their creations. That alone should dispel the myth.</comment>


Get Ready for the New Nexus Phones - <AUTHOR> http://techcrunch.com/2015/08/12/get-ready-for-the-new-nexus-phones/

<comment><USER2> After my nexus 5 PoS I'm definitely ready to give them a miss.

N5 screen cracked all by itself, while flat on a table. I was amazed.

Oh, and the N9 is worse still, after a year or so, the screen is no longer flat, it looks like a dish, from the side. For a device that costs as much as an iPad, that's pretty crap.

Only 'nice' nexus was the N4. Wish I had kept it!

<comment><USER3> That's unfortunate. I've had a great experience with both the Nexus 5 and 6.</comment></comment>


Gawker Media files for bankruptcy - <AUTHOR> https://twitter.com/CNBCnow/status/741312913789575168 <comment><USER2> Comments moved to [https://news.ycombinator.com/item?id=11877814](https://news.ycombinator.com/item?id=11877814).

<comment><USER3> Ah, that helps. I saw "14 comments", clicked this, and then saw no comments on this post for a while, and was seriously confused.</comment></comment>


Android Game "Push Down" shown to be NP-Complete - <AUTHOR> http://mystictri.blogspot.com/2010/05/push-down-is-np-complete.html

<comment><USER2> Neat result, and neat marketing for a neat game - I like this genre. also impressive was the QR code on the homepage - I just installed it by pointing my phone at my monitor. Woah.

<comment><USER3> Sorry if this is a bit dense: I've had to download a 3rd party app to read qr codes on my Magic. Is there an built in/default reader that I am unable to find?

<comment><USER2> I used Google Goggles which is preloaded on my Nexus One.

The only thing I dislike about it is the camera shutter noise (unless you silence the phone first). I presume this is to discourage covert intrusions on people's privacy.

<comment><USER4> Or, people just like their phones to make noise. That's my guess.

<comment><USER5> I'm sorry to say you are wrong and parent is correct :(

<comment><USER4> If it's a privacy thing, then why is it a setting? If I turn the sound off, then I can take all the upskirt pictures I want.

</comment></comment></comment></comment></comment></comment><comment><USER6> Wow, I never guessed that my simple proof achieved so much resonance! You're right in the comments that the proof just shows the NP-hardness. I ommitted the other part of the proof, because it seemed obvious to me - as others already said, you just have to find a solution of the level by nondeterministically "guessing" and verifying it. Of course, the game levels can get arbitrarily large. You have to assume this for any problem, otherwise there is only a finite (and therefore constant) number of configurations of the problem, and checking them can be done in constant time. Btw., I also found a direct reduction from directed Hamiltonian cycle. The proof is a little bit more complicated, the idea is that you have to collect a key in each node, and that you can leave each node only once, i.e., leaving a node on one edge will block all other outgoing edges of the node. Another technical difficulty was to create crossing edges. If you are interested in the proof, I'll ask Holger to put the example level in his blog.

</comment><comment><USER7> Based on the description in this blog post, this proof shows that the game is NP-hard. They have not indicated that they proved that it was NP-complete.

<comment><USER8> I haven't played this game but it looks like the certificate is just the solved level-- verifying that a cleared path exists can definitely be done in time polynomial with the level size.

</comment></comment><comment><USER9> That's very interesting, but I didn't understand if all the game is NP- Complete or just that level.

The example strikes me as a level specifically designed to look like a boolean equation, while the other levels in the app website are quite different.

<comment><USER10> His game being NP-complete means that if you write a program that can efficiently solve every instance of puzzle that is provided by his game, you can efficiently solve NP-complete problems.

It doesn't make sense to consider any particular level as NP-complete or not, much like it doesn't make sense to consider any particular boolean proposition as NP-complete or not. Even a particularly complicated level or a particularly complicated formula has a trivial program solving it, one that simply prints the solution to that particular puzzle/level without doing any real computation at all.

<comment><USER9> I understand what NP-complete means and that for a single problem there will always be a particular solution that just prints the solution.

But in the article is said: _The proof is surprisingly simple and he did it by showing how the boolean satisfiability problem (SAT) can be mapped onto a level in the game._

And only an example level was given, one that looks like it was designed for that purpose. What I can't understand is how a "real" level of the game (like this one: <http://bit.ly/bOWbgi> ) can be mapped in a boolean equation.

<comment><USER10> Ah, but you see, there doesn't need to be bijection between his level and SAT problems. There only needs to be a function that when given an arbitrary SAT instance (your "boolean equation") and a blackbox way of solving his puzzle problems can solve that SAT instance.

The proof of NP-hardness is basically

For every instance of a SAT problem, there exists some puzzle whose solution encodes the SAT solution.

You are asking about

For every instance of his puzzle, does there exist a SAT formula solved by this puzzle

Which is a different question.

<comment><USER11> No, NP Completeness states that you can go either way.

Specifically: A problem X is NP Complete if:

1: X is in NP.

2: Every problem in P can be reduced to X in polynomial time.

We have established the first condition by intuition-- pathfinding is easy. Immediately, we know, then, that there exists some way to reduce this to 3-SAT, in a way general for any level. Reducing 3-SAT to this, however, proves the second criterion (because 3-SAT is NP-complete, so by doing two reductions you can reduce any NP problem to this, in time at worst the cost of doing sum of the two polynomials describing the complexity of the reductions).

So we can also convert 3-SAT-- or any NP-complete problem, in fact, and even more generally, any NP problem-- to this in poly-time.

<comment><USER12> Indeed. You're correct. But this does show NP-completeness.

A rather incredible theorem is the Cook-Levin theorem which states that any problem that can be verified in polynomial time can reduced to an instance of sat SAT (in polynomial time).

The practical upshot of this is that to show NP-completeness, you only need to provide a polynomial certificate and reduction to SAT, or some other know NP complete problem.

<comment><USER11> I didn't say otherwise, and did explain why reducing 3-SAT to this proved NP- completeness.

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> These proofs aren't really that interesting, it's more of an exercise really... most solitaire games with certain properties are NP-complete and most 2-player games are PSPACE-complete.

</comment><comment><USER14> File this under "most obvious hardness proofs".

</comment><comment><USER15> Any games on the iPhone that are like this?</comment>


WikiWatchdog - Uncover organizations editing Wikipedia anonymously - <AUTHOR> http://wikiwatchdog.com/

<comment><USER2> Duplicate of <http://news.ycombinator.com/item?id=4955067>

(Posted by the same user, even.)</comment>


Ask HN: What does a rails/laravel/Django dev need to know about HTTP2/3? - Joseph-Stalin It seems like the only thing a regular webdev can do with http2 is update their nginx and maybe use a CDN. But I remember reading people talking about replacing websockets with http2. Where is all that stuff? I've seen nothing in the docs for http2+ features in any MVC framework. <comment><AUTHOR> Most of the time the answer is "absolutely nothing". From framework (and framework user) point of view there is no difference which protocol version is used, request handling is exactly the same. Protocols are handled somewhere else (by nginx/uwsgi/whatever). Http2 does not provide replacement for websockets.

There are some features and tricks you can use, and some optimizations which are done differently, but this also mostly is either outside of framework scope, or so use-case specific that no common patterns have been accepted widely enough to reach web framework.</comment>


GoF patterns in ruby - <AUTHOR> http://www.scribd.com/doc/396559/gof-patterns-in-ruby

<comment><USER2> Here's an oldie, but goodie from our favorite director of AI.

<http://norvig.com/design-patterns/>

It's a talk on design patterns in dynamic languages, how most of the GoF design patterns get simplified or just go away. I can't iterate through each pattern and tell you how, but as anecdotal evidence, this has been my experience as well. Closures and first class functions, as well as dynamic typing gives ways around certain patterns.

That's not to say Ruby doesn't have design patterns. The more I look at metaprogramming constructs, the more I see the same tricks that people use. It's just not yet been enumerated by the Next GoF.

</comment><comment><USER3> Three comments.

(1) Reads like "case-in-point" for Norvig's argument that the GoF patterns are artifacts of less expressive languages. Most of these examples battle clearer, more effective idiomatic alternatives in Ruby.

(2) Yet another misinterpretation of what Chris Alexander meant by "A Pattern Language". The GoF book isn't a cookbook, it's a starting point.

(3) This document didn't benefit at all from being "typeset" in PDF; any Wordpress blog with syntax highlighting plugins would have presented it better.

Wouldn't it be cool to see the "real" design patterns for Ruby?</comment>


Rename to Klaus-Heidi and get a new life. - <AUTHOR> http://klaus-heidi.se/en/

<comment><USER2> This feels like something out of a Sherlock Holmes novel. The Red Headed League or something...</comment>


Online generator of positive feelings - <AUTHOR> http://asmrion.com/?player <comment><AUTHOR> Mostly Asmr noises and sounds.</comment>


Finding, retaining IT talent still a struggle - <AUTHOR> http://www.cio.com/article/3091860/hiring/finding-retaining-it-talent-still-a-struggle.html <comment><USER2> In other words, it's still a problem to find skilled workers without offering higher wages, and it's still a problem to retain skilled workers without offering them meaningful career path and meaningful work that enables professional development.

What a surprise.</comment>


How Spontime wants to change social network - <AUTHOR> http://spontime.co <comment><USER2> Is this even a real product? Their website doesn't work in Firefox (scrolling down does not work), even though it includes shims for IE8 (of all things).

</comment><comment><AUTHOR> The main problem with social networks is that in a sense they are not even social.

They are wonderful tools to share informations and opinion, to keep contact with each others, but then they can become our own digital prisons.

Spontime wants to make meeting with friends spontaneous. The concept is simple, you broadcast whatever you are up to, or whatever you are heading to. And people in your circles are free to join.</comment>


Ask HN: I just got a new password by email from info[at]ycombinator.com - <AUTHOR>

I didn't log in / out, or request a new password.
Has this happened to anyone else?
And is it possible to get the IP that requested this?
thanks <comment><USER2> You have a very short username - could be that someone was looking at the "send a new password" page and made a mistake or was just plain curious.

I don't think I would worry about it too much unless I started getting lots of these emails.

</comment><comment><USER3> A better way for Hacker News to handle password resets is to send the original email address associated with the account an email containing a one-time, expiring link allowing the user to change their password from. Otherwise, your password would remain unchanged.

<comment><USER4> I think a better method is to send a new password but continue to allow the users old password until they first login with their new password at which point the old is erased and only the new is valid.

It removes that extra step and is in turn simpler for the user. Rather than sending them this weird long URL - not such a problem with HN but with other less-technical sites I suspect this causes some confusion the first time someone experiences one.

<comment><USER3> This approach would introduce more complexity than it's worth, in addition to being less secure. Instead of just one password that can be used to login to your account, you now have two valid passwords.

<comment><USER4> I'm not convinced its less secure, the old password invalidates the second you login using your new password. This beats the current method which just locks you out (I believe anyhow? I've not tried it personally). Its along the same lines as the URL method but without the added confusion for the user.

Complexity for the developer perhaps, although you could also use the same branch of code to give you the ability to force password changes etc. And I think the added dev work is worth it for the user.

Time for some A/B testing perhaps.

<comment><USER3> At any moment, you can have two valid passwords used to access your account. Do all the A/B testing you want, this is NOT how you handle password resets.*

* Note that even my proposed solution is not the best way to handle password resets. Trust me on this, I've seen way too many applications do this wrong which have resulted in ability to compromise arbitrary users' accounts.

<comment><USER4> Please explain why, simply saying its not doesn't really add anything to the conversation nor convince me otherwise.

I'm not sure I understand why not. With your common URL method theres still two ways to authenticate, just as there is mine. They could "guess" the reset key just as easy as they could "guess" the new generated password. You'd have both expiring so the period for attack is minimal.

Please explain how my method is any less secure? Perhaps I'm missing some key security principles (likely), in which case please guide them to me. But just repeating that its less secure without backing up with some logic really doesn't convince me nor teach me anything.

Edit: I forgot to mention apologies - I'm not saying the password should remain as the one that was emailed. You can and should force people to change it upon the first login with their new password. Perhaps thats where the security confusion was. People storing passwords in email is poor, theres no debate there. Though yes, at a second thought this puts an extra step in for the user - A/B testing would be of use here.

<comment><USER3> Sorry for not explaining, maybe the following will convince you. When an application generates a password, about how long/secure are these passwords? (on average, and remember, we're staying user friendly...) Probably about 8-10 characters, alphanumeric, MAYBE a special character.

Now let's say you had to only create a link as I proposed. The length of the "secure" token can be as long as you want! Because the URL is not entered manually, you don't have to worry about being so "user-friendly" (as long as your url doesn't break in mail clients..)

If you fed a secure PRNG to an HMAC-SHA256/512 hash or a UUID... These values would be much, MUCH harder to guess than any password you could generate for your user. As a result, the following is not true:

> They could "guess" the reset key just as easy as they could "guess" the new > generated password.

You bring up a good point about the password delivery over cleartext (though HN doesn't use SSL anyway, I didn't consider it at the time of posting). On a side note, does HN even have account lockout?

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> The admins probably have access to that info. I don't see how its going to help you though. If it was a malicious hack attempt then the person is probably running it through proxy or using dynamically allocated IPs making the IP addr worthless without a court order from a court in the country that has jurisdiction over the ISP/proxy.

</comment><comment><USER6> Anyone can request new password for your account by entering your username.

Btw, just send you a new one.

<comment><USER7> Let's all do that O_o

</comment></comment><comment><USER8> it was me

oops

</comment><comment><USER9> This is really tragic.</comment>


Why We're Still Seeing PHP 5.3 in the Wild - <AUTHOR> https://ma.ttias.be/why-were-still-seeing-php-5-3-in-the-wild-or-php-versions-a-history/?hn

<comment><USER2> I think that main problem of using old versions of php is the given ability to install old versions on your server (hosting). For example on my server I can choose between 5.2.17; 5.3.39 and 5.4.43. Of cause I have chosen the last version, the newest. And as there was written in the article about Wordpress, Drupal has the same problem. Drupal gives the ability for users to install CMS on php version 5.2 or higher. If you are not advanced user (programmer) you can easily make a mistake and configure your server with old php version. Then you can have problems with incapability with modern modules or scripts.

</comment><comment><USER3> I'm somewhat surprised these days when I see a company using a shared hosting account. A t1.micro instance on AWS is trivial to set up and run Wordpress on, and cheap, and _really fast_. But I know why it happens: agencies. Most agencies will host your company site for you as part of the cost of getting the site made. That hosting is likely to be in the region of $300 - $500/year (compared to the $200/year for a big brochure site on AWS). The cost to the agency of a server with WHM and CPanel is no more than about $20/year per site - so shared hosting represents a vast amount of profit.</comment>


Software Bundles Don't Have to be Evil (Just Profitable) - <AUTHOR> http://www.dangerouslyawesome.com/2009/05/30/i-just-got-my-masters-in-bundle-dynamics-or-software-bundles-dont-have-to-be-evil/

<comment><USER2> "Even funnier, there are now online places where you can buy boxes of software, have them MAILED to you, and then you can install them."

UPS is always going to have faster throughput than the internet. It's just the latency that's a killer.</comment>


If you hate trying to get press coverage, read this. Now. - <AUTHOR> http://blog.ooomf.com/post/36194316012/getting-press

<comment><USER2> as a tech/product/marketing guy who used to run a PR firm, I can say this is one of the best summaries of how to get effective PR i've ever read...</comment>


Ask HN: What's the purpose of pre- and post-money valuations - <AUTHOR> In an investment scenario, the two terms pre- and post-money valuation mean different things. The definition of these terms is clear, however I wonder what the purpose is and why the term "pre-money valuation" even exists.
Example:
A startup raises 500 000 USD giving up 50%. The pre-money valuation is 500 000 USD. The post-money valuation is 1 000 000 USD.
However, considering the meaning of the word "valuation" this is not really true, because for both the pre- and post-money valuation the true "valuation" of the company was always determined to be 1 000 000. One side merely decided to sell half of the shares for the price of their worth.
What is the purpose of pre-money valuations, given that they don't reflect the real valuation of a company? <comment><USER2> Pre-money determines the value of the business before investment; the post- money valuation takes into account the investment.

Your example isn't quite right. $500k USD at 50% equity does imply a $1M pre- money valuation. However, if we're agreed that 50% of the business is worth $500k, then immediately after the investment the value of the business is 100% of the equity (which we agreed is $1M) plus new assets (we've just put $500k in). So the post-money valuation is $1.5M.</comment>


What Your Boss Doesn't Want You to Know About Negotiation - <AUTHOR> https://hackernoon.com/what-your-boss-doesnt-want-you-to-know-about-negotiation-a7b19508d9f4 <comment><USER2> _You have no idea what the other person wants, and don't think that matters anyway_

This point leaves me agog. If this is at all an accurate description of how many people think... I guess that would explain a lot of lousy stuff out in the world.

 _You want to win the argument more than achieving your goal._

An awful lot of people operate this way. I tend to view it as a mark of immaturity.

<comment><USER3> > I tend to view it as a mark of immaturity.

Is it? In my experience people, especially men, get worse when they get older. Especially between 45 and 70 this seems to be strong; they are (always) right and winning the acknowledgement of that being right is more important than anything else. Even if it destroys companies, money, respect for them or people in the process of winning, completely and irrationally ignoring the goal of the discussion/argument.

Still might be immature, but then what is that exactly? I know people from all walks of life who have this issue. Maybe almost no-one grows up?

<comment><USER2> Paradoxically, emotional growth is held back by one's strengths, not their weaknesses.

Lots of bright students have zero patience and have never learned how to cope with failure. Perhaps typically privileged people, as many men are, don't deal well with things like their growing physical frailty as they age and react to that by refusing to acknowledge any weaknesses in other areas, such as their knowledge base or logic.

</comment></comment></comment><comment><USER4> Reminds me a lot of the book Never Split the Difference. If you enjoyed this post, I highly recommend that book. It's fantastic and really opened my eyes to all the areas I could improve my ability to relate to other people and negotiate more effectively.

<comment><USER5> Can you share any insights?

</comment></comment><comment><USER6> The title of the article is hardly related to the contents.

<comment><USER7> It's funny how Medium thinks they'll find a business model in subscriptions when what they actually are is a clickbait farm.</comment></comment>


Do American doctors get paid too much?  - <AUTHOR> http://www.slate.com/id/2227965/ <comment><USER2> I'm surprised that the article doesn't mention the effect that the AMA has had on the medical community. The article points out that in France and the UK one aspiring doctors go to medical school for free immemdiately after high school, whereas in the US aspiring doctors go to a university before going to medical school and must pay tuition for both (not to mention the residency period afterward). This is a consequence of rules put in place by the AMA (which, in turn, are backed up by legislation). The AMA has ensured that doctors in the US tend to be quite good, but it has also restricted the supply. The result is that cheap, lower-quality doctors are forbidden from entering the marketplace. In many cases, this is good -- I wouldn't want to undergo open-heart surgery with a low-quality doctor. But if I break my arm, do I really need to see a doctor who has had over 10 years of training? I would likely be just as well off seeing a doctor who is not quite as good and has had only a few years of training.

As a consequence of the AMA, patients are forced to see extremely well-trained doctors even for routine procedures. In many cases, this is just overkill. But the net effect is reduction in the supply of doctors, and an increase in their salaries.

<comment><USER3> SPOT ON. The AMA is an unconstitutional cartel that punishes the poor. All the changes they are talking about are total bullshit until this issue is addressed.

And what about prescriptions? The vast majority of drugs are safer than a bottle of Nyquil, but oh, we have to protect you so you have to make a doctors visit for some freaking allegra. Prescriptions need to come to an end unless it's a highly addictive or dangerous (class II?).

You can't let the "experts" dictate what is best for all those "dumb citizens" when they stand to dramatically benefit from fear-mongering. It's elitist idiocy. It's the same reason why I'm highly skeptical of most global warming policy. Maybe we have global warming, but we have no idea if we can even stop it to begin with-- so hell, let's just let the "experts" make stuff up ("change your light bulbs!")... while we dump tons of money into funding research projects. Dumb.

<comment><USER4> What the hell are you talking about? Unconstitutional? The AMA is a professional association. A _private_ professional association. The Constitution enumerates the powers of the federal and state governments and certainly doesn't have anything to say about the AMA...

 _You can't let the "experts" dictate what is best for all those "dumb citizens" when they stand to dramatically benefit from fear-mongering. It's elitist idiocy. It's the same reason why I'm highly skeptical of most global warming policy. Maybe we have global warming, but we have no idea if we can even stop it to begin with-- so hell, let's just let the "experts" make stuff up ("change your light bulbs!")... while we dump tons of money into funding research projects. Dumb._

Ahh... Ok... Global warming skeptic: this makes so much more sense. It's clear you have no idea what you're talking about and, more to the point, are _certainly_ not qualified to make any kind of judgment on "the vast majority of drugs." Please come back with some actual data next time.

</comment></comment></comment><comment><USER5> Yes, they do.

In my opinion, the biggest cause of this is the artificial caps on the number of doctors graduated every year. Only a small fraction of qualified med school applicants are accepted each year. (In my idealism) more doctors would create more of a free market. The market would find ways to identify high quality doctors who deserve $1m a year, but there would also be the $200k/yr doctors for normal middle class and $50k doctors for low income areas.

The cynic would say it's because the medical community is being protectionist. The conservative would say it's those pesky liberals worrying too much about our safety. The doctors I've worked with speculate it's because of the "priest" like status that doctors have historically held in society.

For hackers... well, let's just say there's a lot of money to be made in medical software. Doctors value their time very much and are willing to pay silly amounts of money for modest efficiency improvements. Most hackers are scared away from medical software because of concerns of excess regulation and complexity. That's a fair concern, but that doesn't mean there's still not good opportunities.

<comment><USER6> Economist Martin Feldstein found out a long time ago that increasing the supply of doctors just increases the share of national income that all doctors enjoy, and still results in high incomes for each doctor, because doctors refer to other doctors.

The United States has a higher supply of medical doctors per capita than most countries, and those doctors make a good living.

After edit: Here's a link to a follow-up paper by that economist on the issue of physician income:

<http://lingli.ccer.edu.cn/he2007/ref/1014/reply.pdf>

</comment></comment><comment><USER7> Has anyone seen an adequately objective breakdown of United States health care costs?

 _edit_ Here is the best I can find: [http://www.kaiseredu.org/topics_im.asp?imID=1&parentID=6...](http://www.kaiseredu.org/topics_im.asp?imID=1&parentID=61&id=358)

<comment><USER8> This McKinsey report shows the best breakdown of costs that I have seen:

[http://www.mckinsey.com/mgi/rp/healthcare/accounting_cost_he...](http://www.mckinsey.com/mgi/rp/healthcare/accounting_cost_healthcare.asp)

</comment></comment><comment><USER9> Well, the AMA appears to use an almost Marxist model of labour supply:

> Apparently the American Medical Association has a board that calculates > something called "relative value units", or RVUs. These attempt to measure > how difficult a given procedure is for the physician [...] We have a name > for setting prices this way. It's called the "labour theory of value", and > it was invented by a guy named Karl Marx.

[http://www.economist.com/blogs/democracyinamerica/2009/09/ma...](http://www.economist.com/blogs/democracyinamerica/2009/09/maybe_medicare_really_is_commu.cfm)

<http://www.slate.com/id/2227082/>

</comment><comment><USER10> Do technology startup founders get paid too much?

And: if you think doctors do get paid too much? What are you going to do about it? Offer to pay less? That would be reasonable, but do you pay your doctor?

</comment><comment><USER8> Dont forget about medical malpractice. This insurance has gone through the roof in the last 10-15 years, many times dramatically eating into doctors salaries.

Also remember doctors have peoples lives in their hands. I dont understand how people could think they are overpaid.

<comment><USER11> > doctors have peoples lives in their hands

And so do bus drivers.

</comment></comment><comment><USER12> > According to Reinhardt, doctors' take-home pay (that is, income minus > expenses) amounts to only about 1 percent of overall health care spending, > or about $26 billion.

This doesn't make any sense whatsoever. So where is all that money going?

> That's a drop in the ocean compared with overhead for insurance companies, > billing expenses for doctors' offices, and advertising for drug companies.

There is absolutely no way those things add up to 99% of medical expenses.

In every field most of the money goes to pay people. So who is making the money? Is Reinhardt excluding specialists perhaps?

<comment><USER13> He left out a lot of other stuff. Hospital rooms. Nurses, lab technicians, all the other staff at the hospital/clinic/doctor's office. Other overhead (office rent, equipment leases) on and on.

Liability insurance premiums for malpractice insurance. A _huge_ cost. Enough to drive doctors away from some specialties, such as obstetrics.

There's some overhead in insurance company billing operations, but I've not seen any good evidence that the government can do it for less.

<comment><USER4> I was curious, so I asked my dad what it was on average. He said that it was about $30,000-$40,000 per year per doctor, but that is highly dependent on the specialty. For surgeons, probably close to $100,000 a year, while probably close to nothing for psychiatrists.

</comment></comment></comment><comment><USER14> It's a free market - leave it alone. If anyone wants to be a doctor - go to school for 12 years. No one is stopping you.

The article also fails to address the ridiculous cost of malpractice insurance that doctors must carry (for obvious reasons).

<comment><USER15> It's the exact opposite of a free market. The supply of doctors is limited. The ability for people to care for their own health is limited by the FDA and prescriptions. Lots of very good candidates for medical school are eliminated from the physician pool by the AMA every year due to the availability of med school seats, which currently is around 11,000 per year.

Doctors limit the supply of doctors. When DeBeers does this in the diamond industry it's considered illegal.

<comment><USER6> See my other reply.

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


Wifi Camera takes "pictures" of spaces illuminated by wifi - <AUTHOR> http://wificamera.propositions.org.uk/

<comment><USER2> "Netbook collects data and streams it over Wifi"

\-- Wouldn't this, hm, affect the readings somewhat?

<comment><USER3> do you affect picture taken by camera by looking trough viewfinder?

<comment><USER4> If it's an SLR, you do, in that you block the stray light that can go in through the viewfinder, which is perhaps the counterpart of the wifi signal emitted by the netbook in your analogy. Most photo enthusiasts and professionals will block their SLR viewfinders when doing long exposures during which they aren't looking through the viewfinder, and pretty much every SLR comes with an eyepiece cover.

<comment><USER3> true. great point!

</comment></comment></comment></comment><comment><USER5> The video at the bottom of the page was pretty informative: <http://vimeo.com/908888>

In it, they showed and discussed WiFi interference patterns, which looked like standing waves and remained stable for months. Cool!

</comment><comment><USER6> Awesome! For several years I've wanted to build this camera.

</comment><comment><USER7> This is just plain, old fashioned cool.

</comment><comment><USER8> Boring "pictures".</comment>


Ask HN: What in IT shouldn't exist? - <AUTHOR> We often talk about how this or that technology, feature, or product ought to exist. Let's touch on the other end. What technologies, products, and features (including programming language features) would the world be better off not having?
For example, it could be argued that certain features promote bad habits or inhibit learning about more powerful or extensible features. In theory this phenomenon applies to products and technologies as well, as for example burning fossil fuels or using lead-based paint, to give some non-tech examples. <comment><USER2>
        1. null
        2. type coercion
        3. autotools
        4. int* === int[]
        5. C/C++ preprocessor as modularity system (
        #ifndef... #define #endif #include)

<comment><USER3>
        3. autotools

It's _still_ better than most of the build systems we have today.

        4. int* === int[]

It's not.

</comment></comment><comment><USER4> Custom power adapters for each device you buy. That said it's has gotten much better in the last couple of years. More and more power adapter cables use USB.

</comment><comment><USER5> Discrimination base on race, creed, gender, sexual preference, age, country of origin, etc.</comment>


Ask HN: We made a helpdesk and feedback community. Would you use it? - <AUTHOR>

Do you see any benefit in providing a feedback community (crowd-sourced support) together with a help desk (private support) for your brand? <comment><AUTHOR> See [http://support.helprace.com](http://support.helprace.com) for demo.

What is your initial impression of what you see?

Are you encouraged to create a new account?

Would you sign up for a free trial of this type of service? Why/why not?</comment>


Google: Announcing Project Virgle - <AUTHOR> http://googleblog.blogspot.com/2008/04/announcing-project-virgle.html

<comment><USER2> At first I thought it was a search engine for finding virgins.

</comment><comment><USER3> Posted 4/01/2008 12:01:00 AM...

</comment><comment><USER4> Surely that's in Beta?

<comment><USER5> Ready to ship!</comment></comment>