Pokémon Go Is Shadow Banning Cheaters - <AUTHOR> https://www.wired.com/2017/05/pokemon-go-cheaters-shadowban/?mbid=synd_digg <comment><USER3> "We could never have expected it would become such a huge success. Our best engineers were unable to foresee the server capacity to support the players' demand. Our biggest prediction was 50 times lower than what actually happened. We knew Pokémon was a powerful brand with 20 years of existence and over 200 million fans across the globe, but people told us this game was for kids, that it had no appeal, that people would need to get out of their homes to play. It wasn't easy, it was a massive bet. Back then, people were already talking about augmented reality, but nobody knew when this technology would be accessible. And then what happened: within two minutes, you could access an augmented reality experience and catch Pokémon in the real world, free of charge. And this game blew up without the need to advertise it."

From an interesting interview with a Niantec Exec on the linked sub, stating they're adding PvP aswell: [https://www.reddit.com/r/TheSilphRoad/comments/6e3qt2/legend...](https://www.reddit.com/r/TheSilphRoad/comments/6e3qt2/legendaries_and_pvp_coming_this_summer/di7y4z7/)

<comment><USER4> See, the thing is, I think that's all it was. Hype at the start. Things aren't looking so well now.

I've heard that the developers are continuously adding things, but it looks like the game has become a lot more harder to play without spending money on it.[1]

[1]:[https://redd.it/6dn5kp](https://redd.it/6dn5kp)

<comment><USER5> The link you posted, did you read past the top comment? There are a lot of people still playing and many of those that are are still heavily involved. I can't say I've ever played every day or every time I get my phone out, but I know enough people that play often that I still keep it around and play once in a while especially if there is an event.

Of course there was a spike at first release, like every other game. Less press after a year is hardly indicative of the game being only hype. If you can name a game that _didn 't_ get less press a year after release I'd love to hear it.

> but it looks like the game has become a lot more harder to play without > spending money on it

I'd love to hear why you think this is true other than someone mentioning it with no explanation in the top comment of that link. The only thing I can think of is a slight hit to pokeball drop rates which - while annoying - <USER2> affects those in rural areas who don't have access to many pokestops. This game (like Ingress) has always been geared toward urban areas and ignored rural players. This was an issue day 1 and it hasn't changed unfortunately, but this is not a recent development.

Honestly, the game is pretty hollow and is hardly something I'd recommend everyone pick up, but to say that it was only hype and things aren't looking good now is uninformed.

<comment><USER6> >If you can name a game that didn't get less press a year after release I'd love to hear it.

Major nitpick, i know, but you said game not app so i guess Minecraft[1] got pretty much a stable news coverage throughout the years

[1][https://trends.google.com/trends/explore?q=minecraft](https://trends.google.com/trends/explore?q=minecraft)

</comment></comment></comment></comment><comment><USER7> I really liked the concept of a Pokemon game for mobile.

Unfortunately, they went with the P2Win model that 99% of mobile games use nowadays, chock full of microtransactions and devoid of any meaningful content.

They stripped the game of all the elements that actually made Pokemon fun and all that was left was Ingress with a Pokemon skin.

Maybe some day we'll get an actually good Pokemon game for mobile. Until then, I'll cherish the memories of playing on my gameboy.

<comment><USER8> I feel like the number one gripe I have is that they are using the branding of one of the most simple and fun games of all time but ignoring it's design. Rather than just copying the mechanics of the Pokemon games, they just made their own game?

For example, battles obviously should be a direct rip off of the main games. Coding Pokemon battle seems super easy to do. And in order for it to be fun, they just have to copy the exact system.

Similarly with leveling, encounters, missions, everything was just designed around what was easy for the team to do rather than what people liked about Pokemon. It's embarrassing.

<comment><USER9> try to take a step back and think about what would actually be involved with coding a pokemon battle. all the possible moves, statuses, mechanics, etc of a pokemon battle is probably not super easy to do. there may be product decisions that you may not have considered. do you think pokemon GO would be as fun if each interaction with a pokemon took 2 minutes instead of 10-15 seconds it takes now?

<comment><USER10> I just want more PvE content. Right now I'm just walking around collecting pokemon, because actual gym battles have been completely impossible for me since about a month after the game came out. All gyms are 12-stacked with pokemon with super-high CP, that I can't really meaningfully interact with, unless I level up significantly. And even then, there's no strategy involved past "pick the pokemon that does well against this element" and tapping the screen really fast.

Their problem with cheaters would be mitigated much better if they focus on PvE.

<comment><USER11> The gym situation is pretty unsustainable.

I'd like to see them either revise the gym mechanics entirely or introduce "junior" gyms that would make some of the weaker Pokémon viable to use. Heck, a gym with a dynamic CP cap could work - max_CP = 1000 - (15 * gym_level) with too-big Pokémon being forced out. You could boot the strongest protectors in a gym with a flock of (weak) Pidgeys at that point as long as they raised the XP of the gym, then evolve/transfer/both all of those for individual XP.

Right now most varieties even fully evolved and with perfect IVs and movesets are simply not worth putting into gyms.

Edit: As far as the pay-to-win aspect, I'm not really seeing that. The purchasable items can all be gotten by getting into a few gyms a day to get "coins," which would go along with a social aspect of getting together with a few friends on the same team to go take down gyms. The only item that's hard to come by and I think inconveniently priced is the Egg Incubator, which without real-$ purchases is weighted towards a LOT of walking per stop.

Lure modules and incense have never seemed to make much difference to me (and lures can be done by just one person in a popular location with everyone benefiting), and while Lucky Eggs are nice they're not really that important.

Buying Pokeballs just seems silly if there's any kind of outdoor art installation area anywhere nearby, because you can wander that for a relatively short time and stock up - or just veg on a blanket in the park between 2-4 art pieces and swipe 2-4 stops every 5 minutes.

<comment><USER10> Personally what I really want is some sort of randomly generated pokemon adventure based on your local landmarks. Just take a bunch of linked quests, scatter them around landmarks that are a good distance away from each other and let me walk to and from collecting mcguffins. Turn parks into Safari Zones. If I live in the middle of nowhere, then make up some virtual landmarks and put the quests there.

There's so much you can do if you think of it as generating a roguelike on top of the landmark, road and park data they have.

</comment></comment></comment></comment></comment></comment><comment><USER12> This is similar to an approach I suggested some time ago here for other games as well - if you detect griefers/cheaters/trolls, just let them play against each other.

<comment><USER13> That's what Blizzard did for Diablo II about 15 years ago.

<comment><USER14> Yep, this is easily the best way to deal with people who are committed to messing with an online community.. Make them think they're still having an impact when they're not..

I believe HN does something similar but I ran a small forum back in the early 2000s and we could flag one or more people into groups where their posts were only visible to each other, but not to anyone else.

Since the site was invite-only, there was no anonymous access so they had no practical way of finding this out on their own.

Eventually they got bored of "being ignored" and left on their own..

<comment><USER15> > their posts were only visible to each other

For the Something Awful forums, this is called hell-banning.

</comment></comment></comment></comment><comment><USER16> I guess my account has been shadowbanned since the beginning - there are only 2 PokeStops in 5 km (3.1 mile) radius and all they have is Pidgey and Rattata 99% of the time.

<comment><USER17> Did you cheat, grief or troll?

<comment><USER18> I am putting a strong assumption that he has the same problem that a large chunk of players like myself have called 'ruralistis' or 'farmlandempti' where if you aren't in a large city or on a coast, your pokemon spawns for the first 8 months of the game were limited to pidgeys and rattatta and once in a blue moon there might be something amazingly rare like a Weedle, because our town data wasn't in the data source they used to calculate biomes.

Many player have noticed this and have been updating openstreetmaps.org data in hopes that Niantic does a biome refresh and that OSM is actually where they are sourcing their data from.

<comment><USER19> "updating" OSM = creating parks and rivers where they don't exist. It's an annoyance for OSM maintainers, there's a Slack channel that specifically flags things that look like they might be Pokemon Go users adding bogus features.

</comment></comment></comment></comment><comment><USER20> Shadowbanning was in place from very early on - we noticed it during the initial attempts at decoding the original protobuf syntax. Specifically, "moving" around very quickly would often get you shadowbanned very quickly.

</comment><comment><USER21> So... paying to level up is not 'cheating', but using a bot is? I don't think the distinction is as stark as Niantec would like one to believe.

</comment><comment><USER22> When I first discovered Ingress it was a revelation. I played it for hours, walked everywhere etc. Then I discovered cheaters and that's it. A pity really, it was a cool concept for millions completely broken by a few dozen morons.

</comment><comment><USER23> This is the best kind of ban. Make them think they aren't banned and just let them continue to waste their time.

</comment><comment><USER24> do people still play?

</comment><comment><USER25> Manager: "You know what this website really needs?"

Programmer: "What?"

Manager: "No scroll bar..."

Programmer: "Hmm..."

Manager: "... For a website that you need to scroll."

Programmer: "Genius!"

</comment><comment><USER26> [https://www.youtube.com/watch?v=tabVaoeNtdk](https://www.youtube.com/watch?v=tabVaoeNtdk)

Start at 27:45 but you should watch the entire thing.

</comment><comment><USER27> Breaking the game IS the fun. Actually winning afterwards is irrelevant.

<comment><USER28> No it is not. Some gyms of my town are full of Blissey from level 40 accounts all with the same looking names. Given how hard it is to KO even one within the allocated time when playing alone, it's effectively ruining a whole part of the game for every non-cheater player.

<comment><USER27> I didn't play Pokemon Go, but the only reason I ever installed Ingress was to figure out how Android location services ran. This led me to arm shared objects decompilation and mocking and other interesting shenanigans.

Achieving internet points was not very high on the goals list

<comment><USER29> The people who are cheating aren't the ones figuring out the cheats. The people providing the cheats are doing interesting things, but also enabling cheaters to steal fun from the game from everyone else.</comment></comment></comment></comment>


Ask HN: What do developers think of cloud IDEs? - <AUTHOR> I keep seeing this topic come up in discussions but haven't really seen much about what other developers/coders/engineers think on the topic.  Me personally, I tend to use vim for almost everything unless I'm playing with a language like java.<p>So, what do developers think about cloud/web based IDEs? <comment><USER2> I don't use them much for real work, but i think HackerRank is pretty fun.

The one I've used the most is the editor for AWS Lambda functions but one of my lambda functions is about to get complex enough that I've going to use a real IDE for it.

</comment><comment><USER3> You keep seeing this topic "come up in discussions" whose participants are not "developers/coders/engineers". I wonder which demographic is discussing cloud IDEs so frequently but don't use them. Product managers? Browser-based IDEs like Jupyter and Monaco are anathema. And yet Googlers must use an in-house cloud IDE for its hooks into their monorepo.</comment>


What Exactly Is Adult Content? Google Forces Ning Onto A Slippery Slope.   - <AUTHOR> http://www.techcrunch.com/2008/12/04/what-exactly-is-adult-content-google-forces-ning-onto-a-slippery-slope/ <comment><USER2> _Is a transgender social network mature content? seems like it is to me._

The word "mature" in "mature content" is a bit of a puzzle whenever it occurs. Surely most intellectual content is "mature" as opposed to "immature"? A really bad term for a complex concept.

<comment><USER3> Calvin wonders why movies are rated R for Adult Situations, eg paying bills, going to work, etc.

</comment></comment><comment><USER4> Just an opportunity for someone else I guess... I'm willing to bet niche adult social networking sites are capable of generating good revenue.

<comment><USER5> Adult Friend Finder?

<comment><USER4> I was figuring the adult sites on Ning were differentiated from Adult Friend Finder in one (or many) ways.

</comment></comment></comment><comment><USER6> "turned YouTube PG."

Too much YC...I was scratching my head; what does Paul Graham have to do with YouTube?</comment>


On Mining - <AUTHOR> https://blog.ethereum.org/2014/06/19/mining <comment><USER2> Satoshi planned for this 51% mining attack problem, and so far we're ok.

His premise was that if a miner ever grew so large as to be capable of performing a 51% attack, that they would have so much wealth invested in the Bitcoin network that they would never dare try anything.

The Bitcoin network is GHash's golden egg laying goose.

The Bitcoin network is entirely safe in GHash's hands imho.

The only real worry comes in when the 51% miner is a bad actor.

>at 35% hashpower and 3 confirmations, this means that GHash can currently steal altcoins from an altcoin exchange with 15.6% success probability – once in every six tries.

Yes, but come on. They never would. Would Bill Gates jump into an active volcano to pick up a penny? Even if he had a 15.6% of picking up that penny without dying a fiery death?

>So what if, for the sake of example, GHash gets over 51% again and starts launching 51% attacks (or, perhaps, even starts launching attacks against altcoin exchanges at 40%)? What happens then?

I'll bite. The ~75% of GHash's mining power that is being pointed at GHash by regular Bitcoin ASIC miners who are enjoying their 0% fees and merged mining drops off overnight. Their domain names are DDOSd at a record breaking level for weeks on end, and every other pool adopts a modified bitcoind that hard- forks (erases) any damange GHash might have caused.

GHash is left with a few thousand nearly worthless Bitcoin (because the USD/BTC value would tank on their 51% attack news) and they are also left without the possibility to basically print themselves free money until the end of time.

<comment><USER3> I find your claims that "worry comes in when a 51% minor is a bad actor" and "safe in GHash's hands" to be conflicting.

All it takes is one bad actor at GHash, as supposedly happened with the gambling incident, and suddenly you've got a problem again.

Just because GHash is successful now does not mean they won't change. Let's imagine a future where CEX.io decides to ditch GHash. GHash no longer has any form of profit (0-fee pool) and thus has no incentive to remain honest.

Satoshi's logic, that a large minor would have a selfish interest to be honest, actually completely falls down when it comes to mining pools. Mining pools have massive power, and yet (in this case) get 0 profit. GHash could easily have nothing invested in bitcoin while still having control of a large gashing power.

Now on to the other things you said. "Would Bill Gates ... for a penny?" is a terrible analogy. For one, this isn't a penny. 51% attacks could allow GHash to steal millions and extort further. They would also allow someone with a vendetta against bitcoin do do real damage... And the risk isn't nearly as severe as jumping in a volcano. A more relevant analogy might be "Would a company commit tax fraud on the order of a million dollars and risk being caught" (yes many have) or "would an executive steal from the company he works at and, when they notice, cut and run."

Your theoretical for what happens on a 51% attack is also silly. There would be signs of some attacks (like consistent double spending on high-confirmation things), but other attacks like extortion-for-inclusion could be silent for as long as the victims don't speak up. Furthermore, people wouldn't leave overnight.. not that many did when GHash performed attacks the last time. In addition, people are highly unlikely to change. Things won't drop off over night. They weren't DDOSed last time. Your entire speculation is optimistically assuming there won't be significant doubt and inertia... and betting against human lazyness is rarely a good idea.

Finally, you assume GHash is left with nearly worthless bitcoins. Well, sort of. The extortion could lead to them being paid in anything. If the entire company decided to do an attack they'd obviously sell all bitcoins first so any new bitcoins gained through any attack would be pure profit (and wouldn't be worthless for at least several hours until someone notices and news spreads). Furthermore, each employee of GHash that is capable of causing such an attack to occur might not have any bitcoins, even if GHash does.

I think that your defense of GHash is flawed, especially considering they've behaved badly in the past. and your arguments in general aren't strong.

I see it as fully plausible that if they maintain 51% hashing power for an extended period of time, a bad employee might modify their code for their own profit and then GHash will plead ignorance when it's discovered and carry on. I also see it as fully plausible that if GHash decides to close shop at over 51% they'll choose to go out with a bang and do what thievery and damage they can on the way out.

I fully agree with the article that this is a problem.

</comment></comment><comment><USER4> > Decentralization, n. The security assumption that a nineteen year old in > Hangzhou and someone who is maybe in the UK and maybe not have not yet > decided to collude with each other.

With parentheses:

> Decentralization, n. The security assumption that (a nineteen year old in > Hangzhou and (someone who is maybe in the UK and maybe not)) have not yet > decided to collude with each other.

<comment><USER5> I think it should be more like: > Decentralization, n. The security assumption that a nineteen year old in Hangzhou and someone who is maybe in the UK (and maybe not) have not yet decided to collude with each other.

If you read your version using the rule that a parenthesised section represents an individual thought _that can be removed_ , yours reads as: > Decentralization, n. The security assumption that have not yet decided to collude with each other.

Which makes no sense.

<comment><USER6> GP was using parentheses as a grouping construct, as in a programming language, in which case it makes total sense.

</comment></comment></comment><comment><USER7> That was a great write-up. I've avoided BTC from the start because I always figured someone would commit the algos to silicon and crush everyone else. That said I'm doubtful there is such thing as a ASIC resistance system in anything that has a direct economic value to highly-repeated calculation ratio. Many years ago people would say of graphics systems "You'll never get X poly's/second" etc. But then gaming came along and all those hungry 3d gamers kept buying more and more powerful GPU's. Then data sciences came along and said "wow we can use these GPU's" and onward marches the power of the GPU. I have lived to see so many things over the years go from "impossible" to "common place" in technology.

Another thought that came to mind several times over the years is that China or USA could spool up enough hardware to swamp the BTC networks and crash them. If you think about advancements in these ASIC's and how cheap power can be to large governmental organizations all that is missing is the incentive to attack BTC. I take the recent slow but steady recognition of BTC by various governments with a certain cynical grain of salt. I think others see these things as proof that BTC is getting more generally accepted, but I see them as very large and powerful entities thinking, "If you can't beat them join 'em". It's entirely possible that these steps are more about staying closer to the enemy then being friends with BTC.

When I read this article making claims about heat and electricity being major blockers to centralization I started to think about how google and facebook have been solving these problems with amazing success in the last couple of years. Imagine an "BTC Factory" in a nice cold climate where power is cheap and labor to maintain the facility is cheap. If BTC continues to grow and become predictably tradable for other currencies then these farms could be built with great ease. All we're lacking here is a VC who sees 15% as a reasonable return and a handful of nerds who don't mind building the worlds most powerful mining environment in a 505,000 sq ft facility in North Carolina. Of course this would be a massive investment and could signal an amazing time for BTC or it could signify the centralization of a decentralized process that destroys the original dreams of BTC and yet again puts the people with the most power (literally) in control.

The only thing that stands between today and that potential future are forward thinking people trying to keep the BTC concept alive and continuing to improve what is today's state of art to stay ahead of tomorrow's state of art. I'm still on the sidelines watching but am enjoying the show!

<comment><USER8> Such a farm has already been built: [http://imgur.com/a/CcIhX](http://imgur.com/a/CcIhX) and [https://www.datacenterdynamics.com/focus/archive/2014/02/bit...](https://www.datacenterdynamics.com/focus/archive/2014/02/bitcoin- mining-firm-building-10mw-sweden-data-center)

10 megawatt. In Sweden. Datacenter should be at full capacity by now, so ~10 petahash/sec (= 10% of the global Bitcoin network) assuming ~1 watt per Ghash/sec. My numbers are all +/-30% depending on how much hw is 28nm (KnC's Jupiter systems) vs 20nm (Neptune).

<comment><USER7> Who was it that said "If you can imagine it most likely someone else has already built it"...

<comment><USER9> I do not know, but they're surely not a true HNer with that attitude!

What a boring website this would be if we all thought like that.

</comment></comment></comment></comment><comment><USER10> One thing people keep forgetting: GHash.io is not a single entity. GHash is made up of miners who choose to be there. It is very easy for a miner to switch to another pool.

<comment><USER11> This is stated quite prominently in the article.

</comment></comment><comment><USER12> The thing I don't understand about the "50% attacks" is that they should be detectable. There's legitimately going to be a transaction on the bitcoin network, and then a ghash.io block is going to show up that invalidates it by spending the input. For the lower percentage ones, there's going to be an orphaned chain with a different set of transactions.

<comment><USER13> Absolutely, if pursued with intent, they'll be very evident. That doesn't _necessarily_ mean you can do anything (inside the protocol) against them. The orphaned chain could be the victim of a 51% attack – or a failed attempt at a 51% attack, or an inadvertent side-effect of network lags. But by design, to converge on a shared serialized history, nodes eventually trust the longest chain as the winner-as-chosen-by-hashpower.

To have nodes consensually adopt some other chain, you'd need some other nice converging criteria for preferring a shorter chain. Those are hard without adopting some other centralizable or monopolizable authority role (like trusted timestamping).

</comment></comment><comment><USER14> One missing factor in the article is the source of energy. Free energy can be easily obtained from renewable sources like wind farms since as a result of wind variance only some fraction of generated power can be practically utilized. Variance is very different around the world making it difficult to centralize.

Though miners would then work only for 20% of their time making it feasible once electricity will be about 5 times more expensive than equipment.

Therefore the sooner we will reach state of the art equipment, the better. And for simple SHA it is much easier to reach the limits imposed by physics than for CPU.

<comment><USER15> __Free __energy can be easily obtained from renewable sources = it seems you solved one of biggest problem in history. How come renewable = free ?

<comment><USER14> I mean it is free for farm owners, since as of today they have nothing better to do with extra energy that is produced in good conditions. So it is basically wasted.

</comment></comment></comment><comment><USER16> As P2P mining pools are becoming more prominent, these situations should eventually stop happening, since P2P pools are themselves decentralised.

<comment><USER17> As vbuterin states in the post, it's unlikely P2P will ever get a significant market share, given the current incentives.

</comment></comment><comment><USER18> This sounds like news from an alien planet.</comment>


Is Google defeating Spam? - <AUTHOR> http://dobbscodetalk.com/index.php?option=com_myblog&show=Is-Google-Defeating-Spam-.html&Itemid=29

<comment><AUTHOR> I have also seen a marked drop off in the numbers of items sitting in my gMail spam box as well.

Also I can't say that Google has come up with any false positives after a (very) few in the first few weeks of using the gMail service.

<comment><USER2> I have seen more spam in my gmail spam box this month. These are anecdotes, not data.

</comment></comment><comment><USER3> They seem to have done little to solve their groups.google.com newsgroup spam problem. And that was once the most useful part of the Internet.

</comment><comment><USER2> If anyone has watched the video the page links to, would you care to summarise it please?</comment>


The decline of Turkish schools - <AUTHOR> https://www.economist.com/news/europe/21729784-out-goes-evolution-comes-islamic-piety-and-loyalty-regime-decline-turkish <comment><USER3> If you're ever again in a discussion with people who claim they have nothing to hide from their government because medieval things don't happen in modern democracies.. just point them to Turkey. Or perhaps the States under Trump.

<comment><USER4> Or that a democracy does not change easily to an authoritarian regime. See also Turkey. I would not say Turkey is a democracy right now, maybe only on paper.

<comment><USER3> I have not gotten the feeling that Turkey is no longer a democracy? I have to admit that I haven't researched it much, but I haven't heard anything in the mainstream media about fraud during the elections or the referendum to expand the presidents powers. The whole coup was a disaster of course, and the way Erdogan reacted is without a doubt dictatorial in nature. But I wouldn't be surprised if a majority of the people are actually supportive of him, much like people are supportive of Putin in Russia.

I've always found it kinda weird that as soon as people in different countries vote for something we don't like, we consider them no longer democratic.

BUT, like I said, I haven't researched it well enough, so I might be entirely off the mark here. If you have any info on this, I'd love to hear it.

<comment><USER5> Democracy is more than just casting and counting votes. It's the biggest trick of tyrants to convince the people that so long as they can vote they're free (see: Putin, Erdogan). Full functioning democracy requires a strong, independent media, quality institutions, an independent judiciary, all of which are accountable and responsive to their constituents. It also requires eternal vigilance because these conditions are vulnerable to despotism, so you always need to be on the lookout (see: Trump, UK tories and the repeal bill, Poland, Hungary)

<comment><USER6> Very well said. However a true functioning democracy require more than these unfortunately. At least in order to have those well functioning institutions you need an entity that can expose groups who have hijacked them.

Countries like Turkey who have been on the losing side of power game for at least couple of centuries, or countries like Syria, Iraq, Jordan, Greece that were non-existent before but either their borders drawn with a ruler on the map or too weak to stand alone are under heavy influence of foreign agents/powers. Heck, even US is under heavy influence of interest groups to the extent that public was sold on to the idea of Iraq's invasion. Even then most Americans opposed the Iraq war but their voices were drowned by heavy media bombardment.

Take Iran. Once they had their own elected government but CIA staged a coup [1] and installed Shah. Think for once, if a country is run with democracy, but a real one, would they throw a democratic country and install a dictator instead? US is a very strong country in many respects and hides many large cracks. Don't be fooled by its looks.

You need more than institutions to have a real democracy. It is not easy to have people's voice heard.

[1] [https://www.theguardian.com/world/2013/aug/19/cia-admits- rol...](https://www.theguardian.com/world/2013/aug/19/cia-admits- role-1953-iranian-coup)

<comment><USER7> CIA might have installed a _different_ Shah, but the Iranian republic existed since 1906 till 1921, and the new Shah was a son of the previous one.

At least, so says Wikipedia: [https://en.wikipedia.org/wiki/Iran#From_the_1800s_to_the_194...](https://en.wikipedia.org/wiki/Iran#From_the_1800s_to_the_1940s)

</comment></comment></comment></comment></comment></comment><comment><USER8> I'm wondering what role brain-drain plays in this catastrophe. Who wants to live at the border of chaos? Smart and open-minded people emigrate to Central/Northern Europe, US/Canada or Australia to live a much safer and fulfilling life. What remains is the conservative personality type (high dutifulness, low openness to experience, tight integration in communities), who is much more likely to reject democratic ideals and to accept theocratic dictatorships.

One might conclude that the only way to reliably stabilize such regions is to massively incentivize them for the personality types that have emigrated over the course of the past decades or centuries, even.

<comment><USER9> I'm not sure that either refugees or guest workers are "smart and open-minded" variety, not the conservative one.

Europe might be importing enough conservative types to repeat this stunt in a few decades.

<comment><USER10> Turkish immigrants to the US were/are generally the elite.

Not every place is Germany.

</comment></comment></comment><comment><USER11> Replace Turkey with a smaller country to the south, Islam with an earlier religion and you'll get about the same picture that's been hapenning for a while now

<comment><USER12> Are you referring to Lebanon? In my experience, making oblique references to Judaism and the Jews often indicates that a person has opinions about them that he or she is ashamed to admit.

<comment><USER11> The ambiguity was intentional, Lebanon would probably fit just as well - <USER2> point being is that this is a world-wide trend that is exploited by any government that can take advantage of it.

</comment></comment></comment><comment><USER13> However Gdp growth of Turkey remains impressive. Can it be that not all of Turkey is fucked up? They must be doing some things right if Gdp keeps growing like this.

<comment><USER14> Number-juggling. Wages grow fast, buying power sinks faster.

<comment><USER13> Where can I read more about your claim?

<comment><USER14> It's a process we've witnessed (I'm from Turkey), so I don't know where to point you to. But while since 2010 minimum wage went from ~800 liras to ~1400, most of the basic needs' prices have at least doubled, and with the USD and EUR parities of TRY tripling in the past two years, the increased amount of liras people get has lost lots of value.

<comment><USER6> Back you claims with data, and don't be elitist and call Turkish institutions crap.

<comment><USER15> Here's one data point:

[https://www.tradingview.com/chart/?symbol=USDTRY](https://www.tradingview.com/chart/?symbol=USDTRY)

[https://www.tradingview.com/chart/?symbol=EURTRY](https://www.tradingview.com/chart/?symbol=EURTRY)

Lira has about 1/3rd of the US dollar value it had in 2009, even if it's been going up slightly this year. In Euro it's lost about 65% of it's value in the same time frame.

Average wages in Turkey went from 1300 Lira to close to 1600 Lira in the same period. So Turks have lost between 30% and 50% of their spending power in the last ~10 years.

<comment><USER6> Turkey's GDP has been growing with a few setbacks steadily. This year alone the growth is 5%.

Turkey has been under a lot of stress for a very long time. Few countries could sustain growth under such circumstances and many could not especially after 2008 global economic crisis. On top of that on going conflicts by its borders, huge refugee influx, terrorist attacks, Gulenist instigated social riots (Gezi Park), and the worst is the coup attempt. I believe it is unfair to point any data without a mention of above.

And do not forget Turkish Lira's value before Erdogan's party came into scene. High inflation (> 50%) for decades, $1 worths over 1,000,000 Turkish Lira and always increasing. All these obscenities were fixed all the while huge infrastructure projects were completed.

<comment><USER6> And one more thing. Turkey paid back all its debt to IMF in that short period.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> I just got back from a holiday in Turkey. What a beautiful country. It was shocking to have things like Wikipedia and Imgur blocked though. Was a real eye opener.

</comment><comment><USER17> it's quite sad. Turkey was pushed way ahead of where it might have otherwise been through Ataturk and his western vision. Now, they are taking backwards step after backwards step. It will be interesting to see what happens once Erdogan is gone, though - will he have destroyed too much to repair it?

</comment><comment><USER14> [I've written a long comment about how this happened, and it seems that it's been too long to include in a single comment, so I'm splitting it into parts.]

[Part 1]

I'm from Turkey myself, in my initial 20s, undergrad at the faculty of letters in Istanbul. We're that interesting generation whose parents were kids/newborns at the first coup d'etat after the first conservative government of Turkey (that of Menderes), teens and young adults during the left/right clash and the coup of 12 September 1980 (that date is so much ingrained to our memories as probably 9/11 is to American ones), 30-something parents during the '90s' hideous bloodshed, and middle aged individuals during the first decade of the millennium where the AKP phenomenon started happening. For us the '90s kids, the dawn of AKP rule is a childhood memory, and also the coalitions, 90-years-old Bulent Ecevit, the shy beginnings of an alternative conservative party that managed to become the sole dirigent power of this country. This past is interesting in that it let us, at least the curious among us with educated parents, to either live firsthand or learn from eyewitnesses the funny story that led us to where we are now as a country. The decline of Turkish schools began since the first day, just like that of every other institution of the republic, and nothing is or was a coincidence.

Ottomans were a family, like Hapsburgs or Bourbons. There was no Ottoman people. Under Ottoman rule were though turkish speaking muslim peasants, which were called Turks. During the 19th century, some intellectuals, under the influence of European romantic racism and nationalism, developped the idea of Turkish nationalism, in the same era where many christian nations parted from the empire, and lots of bloodshed was suffered in particular by Armenians, because they were a way more integrated part of the Empire and one of the last groups to seek independence, and they were Christians (I'm not referring to the Medz Yeghern here, but to the Hamidian massacres). In this atmoshpere of ethnoreligious clash and of the disintegration of a long-standing empire that followed many other long-standing empires since Darius the Great, the ideals and the ideas of Turkish nationalism were initally born. Intellectuals were seeking the origins of the Turkish-speaking anatolians in Central Asia, fooled by linguistic relations (today it seems to me that there's little doubt that the Turkification of the Asia minor was through language and culture replacement provoked by elite dominance by Persianised Turkish military powers, not unlike how the same region was Hellenised under Alexander the Great and how southern Europe was Latinised under Roman rule and later with the influence of the Catholic church), and a plethora false narratives of war glory, mass migrations, racial/ethnic supremity etc. started being produced by the Ottoman-Turkish intelligentsia. When WWI was happening, the Turkish nationalists (Ittihat Terakki Firkasi) was in control of the recent constitutional monarchy, and under their control the biggest bloodsheds happened in Turkey; deportation and massacres of Christian ethnoreligious groups, mass poverty and lots of war casualties because of the short-sighted government following unrealistic, inhumane and bloody agendas (the event of Sarikamis is a really popularly known one, where 90 thousand Ottoman troops died of cold in the extreme conditions of very-high-altitude province Kars, without encountering a single enemy soldier). At the end of the war, the constituent peoples of the empire were tortured both by themselves, the empire itself, and the belligerent European forces; and the empire was dead. As the European belligerent states were in the process of sharing the Ottoman territories, nationalism was becoming more fierce among the Turkish-speaking muslims of Asia minor.

In this atmosphere were born many organisations for Turkish or Muslim indipendence. Kuva-yi Milliye (National Forces) was one of them, it comprised many disorganised bands of amateur warriours, not much unlike the Italian partigiani. In the last decade and a half, Mustafa Kemal (later Ataturk) was rising as a successful general in a decadent army of a moribond empire. After 1919, he left Istanbul to Samsun in disguies on a ship called Bandirma, quit his role in the Ottoman army, and with his many friends started to organise an independence movement in Anatolia. He managed to unify, organise and regularise Kuva-yi Milliye, and to form an army that then fought its way through 1919-1922 to successfully establish a Turkish republic in Thrace and Asia Minor in 1923, with the Lozanne Treaty in 24 August and the declaration of the Republic in 29 October. After this point came the long rule of Ataturk as the de facto BDFL of the nascent country, where the wartime elite executed many reforms to realise their ideal Turkey. They made their Turkey, now they had to make the Turks. The state encircled at that time Muslims of diverse ethnic backgrounds, split mainly in Sunnites and Alawites, and also in Turkish-speakers and Kurdish-speakers; and the surprisingly populous remnants of the Christian population of the territory (given the catastrophe they faced). Ataturk's government implemented a series of rather oppressive and authoritatisn reforms, based on his seven principles (see Kemalism), to modernise and westernise the country and its peoples, and to assimilate the citizens into the figure of modern Turk: a turkish speaking, secular and laicist, patriotic, hard-working individual, for whom religious and ethnic ideals are bad memories of the past, or better yet forgotten altogether. And thus came the dismissal of the Ottoman dynasty, the removal of the Sultanate, the dismissal of the Caliphate, the language reform, the clothing reform, secularist and laicist reforms, mass programmes of assimilation, and a reformist, unquestionable dictating government of recent war veterans. Nearly all of these reforms were unwelcome by different constituent ethnolinguistic and ethnoreligious groups of the new republic, and bloodshed came. The Westernisation was imposed by the founding fathers, either by authoritarian laws or by force. It's really interesting that it's the same government who both executed Sheik Said and incarcerated Nazim Hikmet Ran. Turkey was Ataturk's little baby to be raised as a hard-working modern man, but it was never becoming what he wanted when left on his own, so he didn't. This period did a lot of good to Turkey, but also lots of bad.

In this period were formed the initial modern institutions of education in Turkey. The Istanbul University existed in some form since the 4th century AD, and the Levantines and the Christians had their lycees, but the Turks mostly had the religious medreses at their disposal for study. Under Ataturk a new education system was installed, copying the Western system (I guess a mix of the German and the French systems), and modifying it to produce the first "seed" generation according to Kemalist ideals, securing the continuity of the new Turkish republic and its fundamental philosophy. And surprisingly this worked, though, the copycat nature and the focus on quantity over quality still remains to date in many institutions of the country along with its education system.

<comment><USER14> [Part 2]

On 10 November 1938 Ataturk died (Many Turks still who were born on November 10 either don't celebrate their birthday or celebrate a couple days prior to or after that day). Until '50s Ismet Inonu was going to rule the country, as the head of the founder party CHP, and the president, as one of the top men of Ataturk, always under his shadow. Under him the Kemalist nationalism, which was denominational rather than ethnic, began to become more and more ethnic. With the imminent WWII, an era of Realpolitik started to defend the still- young-and-forming quasi-republic, and during this episode four very important events happened: Koy Enstituleri (Village institutes), Varlik Vergisi (Wealth tax), the admission of Turkey to Nato, and the immigration to Turkey of some German academics. Koy Enstituleri was a project to bootstrap the largely uneducated anatolian peasants as modern citizens. They endured 5 years, and until their removal by the same Inonu who lead their establishment, they produced a generation of rather cultured individuals out of analphabetic peasants. Varlik vergisi was a tax introduced in 1942 and collected as a percentage of wealth from the Christian and Jewish bourgoisie of the republic, which was intended to raise the funds required to defend the country in the WWII (in which she never really participated), and to covertly remove the said bougoisie to give way to a Turkish one (recall the ethnic nationalism of Inonu in opposition to the denominational one of Ataturk, the latter one was more favourable to the ethno-religious "minorities" of Turkey). This tax caused lots and lots of Christians to leave the country, and left the country prive of its biggest class of educated elite. It was collected as about %100-250 of the wealth of the Christians, and %5 from the Muslims. The rest of the Christian population that survived this event left the country after various pogroms and ever-growing ethnoreligious tension during the '50s through '80s. Today the Christian and Jewish population of Turkey is in the hundred- thousands range, and while the active oppression is very weak compared to the recent past, they are still practically second class citizens. The admission of Turkey to Nato happened in the final moments of the WWII, where Turkey declared was on Germany, and per Nato's rules that any state who officially fought Germany would be a part of Nato, Turkey became so, although no battles happened. And lastly, the German professors who fleed Germany for Turkey raised a generation of sophisticated academics especially in the Istanbul University. Most of these returned to Germany shortly after the end of Hitler's regime, but their legacy and their contribution to the nascent Turkish higher education was of vital importance.

1950 is the year of the first really free elections in Turkey, and the right- leaning, conservative party of Menderes won it. His anti-secular and anti- laicist stance brought the coup-d'etat of '61; which executed him, installed a very liberal constitution, and set the path to the formation of the first real Turkish intelligentsia during the '60s, and also to the clash of different wings of this inteligentsia, mainly right/nationalist/religious and left/secular/laicist/communist. This tension quickly escalated and gave way to civil war, especially during the '70s, and epoch of continuous and omnipresent idealistic violence that was finished with the infamous coup-d'etat of 12 September 1980. As the juntas head, the Gernral Commander of the army Kenan Evren read their manifesto on the state TV, a new epoch was on the brink of coming to stay. Under the juntas violent regime, in 1982, the still-present constitution of Turkey, named after that year, was becoming effective after popular vote where it received the approval of the %92 of the Turkish voters. Hundreds of thousands were arrested and tortured, and thousands killed by this regime, and they sterilised every institution of the republic, apolitised nearly everyone, and initiated a regime of fear and uncertainty under the disguise of democracy, always at the gunpoint of the Turkish Armed Forces (TSK), ready to take over should the founding ideals be under threat. Widespread cencorship of all media and centralisation of all kinds of education came, and universities, seen as the root of the evil of the politicised youth, became sterile, high-school like institutions, deprived of any kind of intellectual liberty. It's this episode during which the statues and pictures of Ataturk started to appear everywhere, and nationalism and statism became incredibly prominent everywhere. The schools deteriorated quickly, producing apolitical, unquestioning, anti-intellectual individuals. Free thought was strangled. State entered in each mind.

In mid '80s came the government of Turgut Ozal, a right-wing libertarian politician, under whose lead Turkey became less and less a strictly social- democrat state. And also religious organisations were conceded some liberties, after being completely prohibited for decades, since the Kemalist reforms. Many of these were born, including the Gulenist organisation.

During the '90s Turkey was going through a weird political situation where the government was swinging between prominent right and left wing parties, occasional coalitions (most of which were big failures, thus the Turkish aversion to coalition governments), while a covert bloody war was going on in South eastern regions, fighting PKK, and oppressing Kurds. The oppression on Kurds started right after the Sheik Said event, continued until the coup-d'etat of 1980, only to worsen due to the new agenda the new Consitution and the new mindset installed by the junta, and peaked in 1990s in outright was and nearly a program of ethnical cleansing. The same decade saw the governments of Necmettin Erbakan, a fundamentalist islamist, Tansu Ciller, the only female prime minister of Turkey, a nationalist conservative, and Bulent Ecevit, a left wing politician. Widespread identity crisis was beginning. Especially the continuous failure in joining EU and the general humiliation of living the schizophrenic life of a Turk in the middle of a passage from a mostly agricultural people to a Western, civilised one; and the ever- continuing fascism of the junta constitution was being felt and suffered by everyone.

<comment><USER14> [Part 3]

A TV series in Italy titled _Piovra_ depicts the one-man war of a police officer on the italian Mafia. In the second season of this movie appears Laudeo, with his cultural organisation _Itala_ , with secret political and business agenda. This is what the Gulenist organisation is. They generated capital from participating individuals as a religious non-profit under Fethullat Gulen, and used that capital to form a widespread network of educational institutions, exploiting ultimately the centralised exam system of Turkey for university qualifications via private preparatory courses, and managed to raise hundreds of thousands of supporters and place them in most important statal institutions, and until recently, they continually expanded their influence on Turkish politicans and politics. With the openly right-wing and popular government of AKP from 2002, they gained more and more power, siding with that party, which included many individuals member of both organisations.

The last coalition of Turkey had to deal with the 2000 crisis, with the very popular scene where the then president Ahmet Necdet Sezer threw a book of constitution at the then prime minister Ecevit. AKP was quickly formed during the last months before the elections, attracting many important and popular figures from many right wing backgrounds, and in 2002, they managed to become the sole governing party. I vividly recall how embarassing it was to be an AKP supporter those days, nobody openly admitted to supporting them. They were so unpopular and covertly popular at the same time. The EU agenda of Turkey failed, the laicist and free-thought agenda failed, the secular Turkish assimilation project failed, and the Turkish identity was really in crisis. Education, under this new government, became a tool to produce AKP voters and a source of cash mainly for the Gulenist organisation through their _dershane_ s (supplementary courses for preparing lycee students to the centralised university admission exams). Frequent modifications to the education institutions, misuse and frequent modifications of relevant laws, agenda- bearing curricula, economical failure, insufficient funding, all fed a fast demise of all the Turkish schools in all levels. Furthermore, both the Gulenists and AKP supporters were penetrating the important positions of all schools and of all the education system in general, turning each of them into a political tool. The facilities was laid for such exploitation by the '80 coup, and the '82 constitution, which left no liberties to the universities, and centralised all their management. Meanwhile, AKP managed (and still manages) to maintain and enlarge its supporting base with it's faceless Realpolitik, adapting to every change, and exploiting every soft spot of the conservative majority of the country. The little support for competing right- wing parties melted away because they couldn't make it to the parliament, as a %10 election treshold is in effect, again thanks to the '80 coup. The Wikipedia page on the topic has this relevant and interesting quote [1]:

> Turkey, 2002. All five parties that passed the 10% threshold in the 1999 > elections, as well as two other major parties, failed to pass the threshold > in 2002, rocking Turkish politics to its foundations. Notably DYP got 9.55%, > MHP got 8.34%, GP got 7.25%, DEHAP got 6.23%, ANAP got 5.13%, SP got 2.48% > and DSP got 1.22%, all falling below the threshold. In total, 46.33% of the > votes, i.e. 14,545,438 votes were unrepresented in the parliament.

During the '00s and especially the first years of the second decade of the 21st century, the face of Turkey's already decadent academy was changing, Gulenists, AKP supporters, conservatives, fundamentalists alike were invading the academic institutions. Free thought and academic research was being opressed, cencored; and brain drain was continuously increasing. Then came the Gulenist coup attempt, and a widespread purge of the Gulenists, which affected academia and schools in general too. The lycee system was dependent on the dershane, which were being purged, the students were being forced into religious lycees or vocational ones, the curricula was becoming diluted, all the focus was on the numbers of students graduating, all the bright minds were subject to oppression. All this was already happening since years before the coup attempt, but with it, the government now had (and has) the means to openly attach whomever he wants. The Turkish education system is becoming a chore that one has to endure, and people want to send their kids to do even the highschool abroad. Nearly everyone with the means and without a zealous brain is either has left already, is trying to leave, or considering leaving. Turkey, in its path to becoming an authoritarian regime with an agenda for the individuals mind, is becoming more hostile every day to intellectualism and culture.

This is very related to the tech/IT industry, which suffers in Turkey from brain drain, as most of the IT laureates, knowing they can work abroad and live a happier life in a freer and saner society, leave. Apart from some leading companies like Turkcell, most IT enterprise has to make do with sub- par tech staff. And the fact that we're rolling into a whirlpool of an economic crisis does not help: $1 is ~₺3.5, €1 is ~₺4, and buying power of an average Turkish citizen is rapidly decreasing. Heavy taxation, corruption, and failing industries are trying to be hidden behind Mussolinian construction projects, and faux statistics. We'll see...

[1] [https://en.wikipedia.org/wiki/Election_threshold#Notable_fai...](https://en.wikipedia.org/wiki/Election_threshold#Notable_failures_to_reach_the_threshold)

<comment><USER18> Thank you for the posts. They are very informative.

</comment></comment></comment></comment><comment><USER19> Turkey in total is in decline. It is the classic way of the dictatorship: after some initial successes in the economy, the leader wants to get more and more power, surpresses more and more diversity, tries to bring under control the thoughts of people and finally destroys the country by his power. I wish the Turkish good luck with their deliberate choice to give their sucker at the top everything he wants. They knew what they vote for and they absolutely deserve the results.

<comment><USER3> > It is the classic way of the dictatorship

Let's not kid ourselves though. The people voted time and again for Erdogan and his policies. It's a democracy that brought this upon itself. Putting the blame on a single individual and labeling them a dictator just muddies the water.

<comment><USER20> >Less well known is the paradox of tolerance: Unlimited tolerance must lead to the disappearance of tolerance. If we extend unlimited tolerance even to those who are intolerant, if we are not prepared to defend a tolerant society against the onslaught of the intolerant, then the tolerant will be destroyed, and tolerance with them. — In this formulation, I do not imply, for instance, that we should always suppress the utterance of intolerant philosophies; as long as we can counter them by rational argument and keep them in check by public opinion, suppression would certainly be unwise. But we should claim the right to suppress them if necessary even by force; for it may easily turn out that they are not prepared to meet us on the level of rational argument, but begin by denouncing all argument; they may forbid their followers to listen to rational argument, because it is deceptive, and teach them to answer arguments by the use of their fists or pistols. We should therefore claim, in the name of tolerance, the right not to tolerate the intolerant.

Karl Popper, "The Open Society and Its Enemies", 1945

<comment><USER21> Suppressing ideas perceived to be intolerant by those in power is intolerant itself, though. Who is to decide what is and is not intolerant?

A good example of this is immigration reform in the US. Many people consider deporting illegal immigrants to be intolerant despite the fact that they would just be enforcing existing US law. Should everyone who wants mass illegal immigrant deportation be suppressed and attacked in the name of tolerance?

<comment><USER22> That's why he calls it a paradox. IIRC Popper mentions it in the context of the also relevant democratic paradox (a democracy abolishing itself by democratic process).

</comment></comment></comment></comment></comment><comment><USER23> Article flagged due to pay wall.

</comment><comment><USER6> It baffles me the amount of misinformation given to the public in the West. A deliberate attempt to mislead and misguide people to further an agenda of violence, coup, and war.

Haven't we learned anything from Iraq War? If a country is not submitting your requests and taking care of their own business is enough to be painted as dictatorship.

One truth in an articles is mixed with 10 other lies. There are so many one finds oneself overwhelmed.

<comment><USER24> Not sure what you are trying to say. Can you be more specific?

<comment><USER6> One example. The mentioned Imam Hatip schools were a headway for religious education after a very heavy secularization of the country. It was just an alternative to ultra secular education system so people could send their children to have them get some religious education. They were never meant to train preachers only. Their graduates have become anything but preachers mostly. In my family there are physicians, lawyers, engineers who attended that school (Alas, I did not).

In the article it is presented as if these schools are training ultra religious people even "Jihadist" in the sense Western conception has these day. That is the biggest lie and misdirection.

These schools are actually anti-thesis of such movements like people who join ISIS. The fundamental reason is that they teach religion, and if one knows Islam as it should be one can not join such groups.

For example, The coup attempt executed by Gulenist (a pseudo-religious modern looking power hungry group) have been against these schools. Because these schools were teaching Islam as opposed to a version filled with superstitions, like believing the Gulen himself (the leader of the group) is Mahdi to put the world in order. During the coup attempt they have killed over 250 ordinary citizens. They shot to crowds from helicopter gunships. Due to their so called religious understanding those killed were killed for a greater good anyway or deserved such death. Do you see any resemblance to ISIS? They are more dangerous than ISIS though, at least those thugs show their true color unlike Gulenists.

Where there's lack of proper education and understanding of religion there will always be someone to abuse it. Painting these schools as if training jihadists is nothing but disservice to the public.</comment></comment></comment>


Winklevoss twins abandon appeal of Facebook ruling - <AUTHOR> http://www.reuters.com/article/2011/06/22/us-facebook-winklevoss-idUSTRE75L7NS20110622

<comment><USER2> Did I really need to know their height?</comment>


A bite of Python - <AUTHOR> https://access.redhat.com/blogs/766093/posts/2592591 <comment><USER2> The behavior of 'assert' is not an anomaly. It comes from 'design by contract.' Assert is primarily meant to be documentation of constraints in code and secondarily a way of catching errors during development.

"Contract conditions should never be violated during execution of a bug-free program. Contracts are therefore typically only checked in debug mode during software development. Later at release, the contract checks are disabled to maximize performance." \- [https://en.wikipedia.org/wiki/Design_by_contract](https://en.wikipedia.org/wiki/Design_by_contract)

<comment><USER3> That is certainly one approach, and the article agrees.

> The root cause of this weakness is that the assert mechanism is designed > purely for testing purposes, as is done in C++.

However, C and C++ are perhaps unique in how much undefined behavior is possible and in how simple it is to create. Inserting into a vector while iterating through it, for instance. Or an uninitialized pointer.

That's why many C++ experts believe in runtime assertions in production. Crashing the application with a core dump is generally preferable to trashing memory, corrupting your database, or launching the missiles.

<comment><USER4> All of the C/C++ experts I know, as well as people who have interviewed me coming from primarily that background, have always been among the most adamant to stress that an application crashing unexpectedly should _never_ happen and is _always_ the wrong outcome.

I imagine they would say that your statement about crashing vs. e.g. launching the missiles is a false dilemma. You don't crash _and_ you don't incorrectly launch the missiles.

I'm not a C++ developer so I can't say it with certainty. I more agree with what you're saying. I'm just relaying that my experience has been that out of many different language communities, C++ actually seems adamantly the opposite of what you're describing.

<comment><USER5> I've been writing software in C and C++ for a long time. Crashing is never a good user experience, so avoid it. If something unexpected happens, catch and report the error, then carry on, if possible, or gracefully exit otherwise.

<comment><USER6> As someone who works in support, customers (at least the ones I support) REALLY need a clear and obvious crash to understand something's wrong. That really forces them to "do something differently" and/or look for help. You're correct in that it's not a good user experience. Neither is chaos.

<comment><USER3> > Neither is chaos.

Exactly. "Undefined behavior" includes showing private data to the wrong user and booking ten times more orders than the user originally indicated. I'll take crashing over that.

</comment></comment></comment></comment></comment></comment><comment><USER7> One Python gotcha that has bitten people in my company a lot:

        fun_call('string1',
                 'string2'
                 'string3')

That is, missing commas and subsequent string concatenations can lead to nasty errors. I wish Python didn't nick this from C and would have just enforced the use of + to concat over-length strings, if they need to be split to multiple lines.

<comment><USER8> I love Python, but I have to agree on this one.

<comment><USER9> I mean, this one is solvable by not using magic constants. Pretty easy to avoid. Can also lint it.

<comment><USER10> I don't get what you're saying. How is it possible to write code without string literals?

        subprocess.check_call([
          "/usr/bin/env",
          "echo"
          "hello world"
        ])

<comment><USER11> I think she meant to not pass the strings but assign them to constants and then pass those.

<comment><USER9> Yep! But, like I mentioned, linter can catch this too.

</comment></comment></comment></comment></comment></comment><comment><USER12> If you're interested in reviewing Python code for potential security issues, here's a related project: [https://github.com/openstack/bandit](https://github.com/openstack/bandit) (I'm one of the devs)

It will actually pick up a number of security issues listed in the post. It's useful in real world too - led to a number of CVEs being reported.

<comment><USER13> I looked at Bandit earlier this year, but had to put it down when I discovered it didn't have a way to fill in default config -- the instant I specified _anything_ in the config file, I had to supply a _complete_ config, including literally every single check it's capable of doing, because Bandit would discard all its defaults on encountering that single line of custom config.

Don't suppose you know if that's gotten better?

<comment><USER12> It's not ideal - the config file is still a complete list, but there are a few things you can do.

\- `bandit-config-generator` will give you a file filled with the current/default configuration, so it's a simple way to start with the defaults and modify just what you need

\- if you just need to enable/disable tests rather than reconfigure, you can do that in command line options

\- if you want to get rid of specific warning, you can mark the line with "# nosec" in the source

Merging various configs is possible, but rather complex to implement considering we aim for the config to be a complete description that won't ever need to change between versions.

If none of the above workarounds solve your use case, feel free to report an issue. ([https://bugs.launchpad.net/bandit](https://bugs.launchpad.net/bandit)) I can't guarantee how/whether we'll fix this, but we'd definitely like to know what the problem is and how you're trying to use Bandit.

<comment><USER14> FYI when using pypy bandit fails to discover tests for some reason (could be a pypy bug?). In this case, the default output generated by bandit-config- generator is mostly empty and bandit fails to parse it. It doesn't indicate what the nature of the parse failure is (what line, what rule(s) were violated), even with verbose mode. The readme doesn't cover the format of the config file. Is it YAML/TOML/JSON/other?

<comment><USER12> Which version of pypy are you using? I can't reproduce the issue with 5.1.2 (ubuntu packaged one).

The config uses YAML format.

Regardless, config errors should be more verbose. I raised [https://bugs.launchpad.net/bandit/+bug/1621552](https://bugs.launchpad.net/bandit/+bug/1621552)

<comment><USER14> EDIT: nevermind, couldn't reproduce it with a new virtualenv. Whatever problem occurred in that virtualenv likely wasn't that interesting (wild guess is a package name collision).

pypy2-v5.3.1-linux64 / [PyPy 5.3.1 with GCC 4.8.2]

If you can't reproduce it with that tarball I'll dig deeper to see the mechanism of failure, maybe it's not pypy and it's just something local to my config or venv.

<comment><USER12> Checked the same tarball (downloaded from bitbucket) and still can't repro. Just in case, what I'm doing is:

       cd path/to/bandit
       virtualenv -p path/to/pypy venv
       venv/bin/pip install -r./requirements.txt -e .
       venv/bin/bandit-config-generator -o tmp_file
       venv/bin/bandit -c tmp_file -r path/to/some/project

<comment><USER14> I did something similar, yes. I cannot reproduce this with a new virtualenv anymore. It may have been due to odd bits in my environment (likely not worth further investigation).

        virtualenv -p `which pypy` ~/pypy_env
        source ~/pypy_env/bin/activate
        # indeterminate <but probably critical> changes to this venv
        pip install bandit
        bandit-config-generator -o tmp_file
        bandit --help # "The following sets..." is empty
        bandit -c tmp_file -r path/to/some/project # gives the error regarding config file parse failure

I _can_ reproduce the parse error given the nearly empty config file, but it's not clear to me whether the parse error is expected in this case or not.

        $ echo -e 'tests:\nskips:\n{}' > parse_err.cfg
        $ bandit -c parse_err.cfg .

[main] ERROR parse_err.cfg : Error parsing file.

</comment></comment></comment></comment></comment></comment></comment></comment><comment> alex-yo I wouldn't call it 'traps'. I would call it 'read and understand documentation before writing code' like: what is 'is' operator, or how floats behave in EVERY programming language, or why you should sanitize EVERY user input.

So, basically, I can write such a list for every language I know.

<comment><USER15> Relying on developers to read and remember every bit of documentation for every bit of code is more likely to end up with insecure code compared to introducing sane defaults with an explicit, expressive API.

<comment><USER16> And the TL;DNR being: developers can't be expected to do a good job. Some of them in fact will do a terrible job.

This can be said for every industry involving people.

<comment><USER17> Which is why any sane industry has lots of safety involved. We don't just shrug every time someone gets electrocuted to death and say "they forgot part c page 4 of the operations manual which indicates that the off switch doesn't work on tuesdays".

</comment></comment></comment></comment><comment><USER18> I would never accuse Python of "language clarity and friendliness". Far from it. For someone who came up through C, Java, Perl, and Ruby, but who's wrangled with Python, Javascript, Go, and even Haskell in recent years, I still find Python mysterious, self-contradictory, and filled with implicit rules and assumptions that are entirely un-intuitive to me far more than other languages. And yet, people seem to like it. Certainly this article does. It's an interesting effect.

<comment><USER19> In my experience and implied by the rising popularity of python, you would be among the minority. Personally, I find python to be the most clear of any language I've worked with, most resembling natural language in the way I typically speak. Do you have some examples of how you find it self- contradictory?

Here's an example of its expressiveness a colleague and mine I discussing the other day: Python: [os.remove(i.local_path) for i in old_q if i not in self.queue] Java: old_q.stream().filter(i -> !self.queue.contains(i)).map(i -> new Path(i.local_path)).forEach(Files::delete);

I've programmed in both languages but joked I could only understand the Java line by using the Python line as documentation!

<comment><USER20> I've always found the fork bomb page on Wikipedia to be a good example of different languages. [https://en.wikipedia.org/wiki/Fork_bomb](https://en.wikipedia.org/wiki/Fork_bomb)

The Python is example is both short and obvious, whereas the other examples tend to be either cryptic or complicated.

<comment><USER21> I'd slightly change the wikipedia article to use "while True:" instead of "while 1:". Also, the C# is also quite readable (though very verbose).

</comment></comment></comment></comment><comment><USER22> The point the article makes on comparing floating point values and the floating point type is true, but it's not because of any rounding error.

It's because the comparison operators are defined for every value. That is, "True < []" is valid in Python 2.7, along with any other 2 values, regardless of type. This is a surprising instance of weak typing in Python, which is otherwise strongly typed, which is why this was fixed in Python 3 ([https://docs.python.org/3.0/whatsnew/3.0.html#ordering- compa...](https://docs.python.org/3.0/whatsnew/3.0.html#ordering- comparisons)).

This is also not a case of Python doing something useful, like with '"foo"*2'. The result of the comparison is defined, but it's not useful. I suppose it was useful for making sure that you can always sort a list, but there are better ways to do that.

<comment><USER12> > The point the article makes on comparing floating point values and the > floating point type is true, but it's not because of any rounding error.

Do you mean this example? (it's the only one I can find about floating point comparison)

> 2.2 * 3.0 == 3.3 * 2.0

It's definitely due to accuracy error. (rather than type comparison) How would you explain it otherwise?

<comment><USER23> Accuracy problems in floating-point computations: [https://en.wikipedia.org/wiki/Floating_point#Accuracy_proble...](https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems)

<comment><USER12> My bad, wrote rounding not accuracy. (corrected now) But my point was that it's not related to weak typing as the parent seems to suggest.

<comment><USER23> > But my point was that it's not related to weak typing as the parent seems to > suggest.

And you're completely right there. Any language using floating-point numbers will have the same issue regardless of its typing discipline e.g. Rust: [https://is.gd/4BNoWa](https://is.gd/4BNoWa)

</comment></comment></comment></comment></comment><comment><USER24> The documentation of most modules cited in the article start with a paragraph in red and bold warning the reader of the same danger explained by the author. So this is a nice compilation, but nothing new and nothing somebody looking at the documention of the module he's using will miss.

There are nonetheless good remarks about poor design choices of Python which can lead to misconceptions to newbies, such as naming `input` the function that does `eval(raw_input(prompt))` (as casually documented[0]), and the existence of such function in a first place.

[0] [https://docs.python.org/2/library/functions.html?highlight=i...](https://docs.python.org/2/library/functions.html?highlight=input#input)

</comment><comment><USER25> Completely out of context, sorry, but couldn't avoid to note this:

"Being easy to pick up and progress quickly towards developing larger and more complicated applications, Python is becoming increasingly ubiquitous in computing environments".

Why would you change the order of the subject in such an unreadable way? Isn't much easier to say:

"Python is becoming increasingly ubiquitous in computing environments, as it's easy to pick up and progress quickly towards developing larger and more complicated applications"

I'm not expert in writing, it just sounded weird. If anyone can explains what's going on there, really appreciated.

<comment><USER26> Sounds to me like they started with something like "Being easy to pick up, Python is becoming increasingly ubiquitous..." and then made the old engineer- as-writer error of adding extra specificity.

</comment></comment><comment><USER27> On the float behavior: I really wish Python 3 had the sense to do what Perl 6 did and interpret all literals with decimal points (except those that use scientific notation) as Fractions instead of floats. That would solve all these floating-point errors without requiring significant modification of code, plus Python 3 would be the perfect time to do it because they're already throwing out backwards compatibility because of the str/bytes thing.

<comment><USER28> That would kill Python for scientific use. Also, while nice, Fractions have their own pitfalls due to potentially catastrophic runtime behavior.

<comment><USER27> > That would kill Python for scientific use.

If Python used the Perl 6 model, you could still use floats by writing your literals in scientific notation, so if you want floating-point performance, you can still get it. For example, 2.2 would be a Fraction, but 2.2e0 would be a float. I don't want to eliminate floats from the language, just hide them from average users by default.

And it's not like rationals-as-default are just some weird Perl 6-ism. Haskell does the same thing, and the language is fairly well-received.

> Also, while nice, Fractions have their own pitfalls due to potentially > catastrophic runtime behavior.

Elaborate?

</comment></comment></comment><comment><USER29> Some points are valid, but come on, if an attacker has write access to your code, you can't recover from that, ever.

<comment><USER12> > but come on, if an attacker has write access to your code

Why is this relevant for this article? The article doesn't say anything about attackers having write access to the source.

<comment><USER29> It's in their threat model under 'Module injection':

> The mitigation is to maintain secure access permissions on all directories > and package files in search path to ensure unprivileged users do not have > write access to them.

<comment><USER12> Ok, I see. To be honest I read that as "keep your PYTHONPATH sane". I think that's a bit different from worrying about someone having write access to the source, but still related - point taken.

<comment><USER30> CVE-2008-5983 ([https://bugs.python.org/issue5753](https://bugs.python.org/issue5753)) "Untrusted search path vuln... prepends an empty string to sys.path when the argv[0] argument does not contain a path separator"

Check out the "yes"es in the "fixed" column in comment at [https://bugs.python.org/msg85966](https://bugs.python.org/msg85966)

</comment></comment></comment></comment></comment><comment><USER31> The part of the article about an issue with name mangling of private fields is somehow misleading.

The feature is just some syntactic sugar.

When within a class, private fields such as:

        class Foo:
            def __init__(self):
                self.__bar

are accessible from within other methods of class Foo as `self.__bar`. But that's just syntactic sugar, the real name of `self.__bar` is `self._Foo__bar`.

So from the outside "world", including `hasattr()`, you can still access `self.__bar` as `Foo()._Foo__bar`.

        >>> class Foo():
        ...   def __init__(self):
        ...     self.__bar = 'hello'
        ...   def show(self):
        ...     print(1, self.__bar)
        ...     print(2, getattr(self, '__bar'))
        ...
        >>> foo = Foo()
        >>> foo._Foo__bar
        True
        >>> foo.show()
        1 hello
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
          File "<stdin>", line 6, in show
        AttributeError: 'Foo' object has no attribute '__bar'
        >>> foo.__bar = 'world'
        >>> foo.show()
        1 hello
        2 world

In the end, when `x.__private` is setup outside of the class definition, obviously, it's a new member as its name differs from the internal name `__private` (which really is `_X__private`).

From within the code doing `getattr('X', '__private')` will return the `__private` setup from outside the class, and `getattr('X', '_X__private')` the one defined from within the class.

The whole point of that feature is to ensure that members defined within a class that are not part of the public API are left untouched when that class get subclassed, to avoid unexpected behaviours.

Here's an example of why this has been designed:

      >>> class A:
      ...   def __init__(self):
      ...     self.__internal = "this is a"
      ...   def show(self):
      ...     print(1, "A", self.__internal)
      ...
      >>> class B(A):
      ...   def __init__(self):
      ...     super(B, self).__init__()
      ...     self.__internal = "this is b"
      ...   def show(self):
      ...     super(B, self).show()
      ...     print(2, "B", self._A__internal)
      ...     print(3, "B", self.__internal)
      ...
      >>> B().show()
      1 A this is a
      2 B this is a
      3 B this is b
      >>>

There's nothing that should be surprising or asymmetrical to anybody who've read the python documentation, and use that feature appropriately. It's maybe a weird feature, but it's still a coherent and homogeneous behaviour and actually adding more safety to codes.

Documentation references:

      * https://docs.python.org/3/faq/programming.html#i-try-to-use-spam-and-i-get-an-error-about-someclassname-spam
      * https://docs.python.org/3/reference/expressions.html#atom-identifiers

<comment><USER32> "Private" fields and methods should use one underscore. Two underscores are for name mangling issues and __method__ is for "magic" methods.

<comment><USER33> I'd say that private methods are double underscored, and protected methods are single underscored, since the goal of the __ is to prevent child classes from being able to use the parent implementation via self.__meth.

<comment><USER34> Not prevented from being able to use, but from _accidentally_ using or overriding the parent's. The child can still use the mangled name.

</comment></comment></comment></comment><comment><USER35> the last one (script injection) isn't limited to python but any language that make use of template engine. escaping variables should be the default behavior.

Now I like python, it has many useful libraries, in fact it is one of the language that has the most libraries for any purpose. I wish, even as a dynamically typed language, it was stricter sometimes though.

</comment><comment><USER36> I'm sorry but that whole article is just FUD...

> Input function

Yes, in Python 2, input() is a shortcut for eval(raw_input(...)), and documented as such. Obviously that is not a safe way to parse user input, and therefore it has been changed in Python 3. So this has been fixed, but if you don't read the documentation you probably will keep introducing security issues with whatever programming language.

> Assert statement

If you want to effectively protect against a certain condition, raise an exception! Asserts, on the other hand, exist to help debugging (and documenting) conditions that should never occur by proper API usage. Stripping debugging code when optimizing is common practice, not only with Python.

> Reusable integers

First of all, this behavior isn't part of the Python programming language, but an implementation detail, and a feature as it reduces memory footprint. But even when small integers wouldn't be cached, you would still have the same situation when using the is operator on variables holding the same int object. On the other hand, caching all integers could easily cause a notable memory leak, in particular considering that ints in Python 3 (like longs in Python 2) can be as large as memory available. But either way, there is no good reason to check for identify if you want to compare values, anyway.

> Floats comparison

floats in Python use essentially the native "double" type. Hence they have whatever precision, your CPU has for double precision floating point numbers, actually it is specified in IEEE 754. That way floating point numbers are reasonable fast, while as precise as in most other programming languages. However, if that still isn't enough for your use case, Python also comes with the decimal module (for fixed-point decimal numbers) and the fractions module (for infinite precision fractions).

And as for infinity, while one would expect float('infinity') to be larger than any numerical value, the result of comparing a numerical value with a non-numerical type is undefined. However, Python 3 is more strict and raises a TypeError.

> Private attributes

Class-private attributes (those starting with __) exist to avoid conflicts with class-private attributes of other classes in the class hierarchy, or similar accidents. From my experience that is a feature that is rarely needed, even more rarely in combination with getattr()/setattr()/delattr(). But if you need to dynamically lookup class-private attributes you can still do so like hastattr('_classname__attrname'). After all, self.__attrname is just syntactical sugar for self._classname__attrname.

Also note that private attributes aren't meant as a security mechanism, but merely to avoid accidents. That's not specific to Python; in most object- oriented languages it is possible to to access private attributes, one way or another. However, Python tries to be transparent about that fact, by keeping it simple.

> Module injection

Yes, Python looks in a few places for modules to be imported. That mechanism is quite useful for a couple of reasons, but most notably it's necessary to use modules without installing them system-wide. It can only become a security hole if a malicious user has write access to any location in sys.path, but not to the script, importing the modules, itself. I can hardly think about a scenario like that, and even then I'd rather blame the misconfiguration of the server.

> Code execution on import

Yes, just like every other script language, Python modules can execute arbitrary code on import. That is quite expected, necessary, and not limited to Python. Even if module injection is an issue, it doesn't make anything worse, as you you don't necessarily have to run malicious code on module import but could do it with whatever API is being called. But as outlined above, this is a rather theoretical scenario.

> Shell injection via subprocess

Yes, executing untrusted input, is insecure. That is why the functions in Python's subprocess module, by default, expect a sequence of arguments, rather than a string that is parsed by the system's shell. The documentation clearly explains the consequences of using shell=True. So introducing a shell injection vulnerability by accident, in Python, seems less likely than with most other programming languages.

> Temporary files

If anything, Python is as unsecure as the underlying system, and therefore as most other programming languages too. But CWE-377, the issue the author is talking about, isn't particular easy to exploit in a meaningful way, plus it requires the attacker to already have access to the local temporary directory. Moreover, Python's tempfile module encourages the use of high-level APIs that aren't effected.

> Templating engines

The reason jinja2 doesn't escape HTML markup by default is that it is not an HTML template engine, but a general purpose template engine, which is meant to generate any text-based format. Of course, it is highly recommended to turn on autoescaping when generating HTML/XML output. But enforcing autoescaping would break other formats.

</comment><comment><USER37> Having written code in Python for a few years, I've come across most of these (some of the ways to hack builtins/modify the code on a function reference were new to me).

However, it had also never occurred to me to make anything I cared about the security of in python. Perhaps this article is aimed at people who are writing system utilities for linux distributions, and are considering Python? Presumably some such utilities are written that way already.

It comes down to doing a proper security analysis before you define the requirements of the software: Specifically what attack vectors you want to defend against. A valid conclusion for some types of software, given the list of "bugs" in the post, would be _don 't write it in Python._ (Indeed, I have done exactly this before writing 200 lines of C instead of 20 lines of Python.)

<comment><USER12> > A valid conclusion for some types of software, given the list of "bugs" in > the post, would be don't write it in Python.

Do you have some specific types in mind? I know some types of protection are not reachable from python directly and require native modules, but I'm not sure what would cause you to drop Python altogether. I'd be interested to hear some examples.

<comment><USER37> Well, for example, you might want to write a package manager for a Linux distribution[1]. An attacker could change the behaviour of someone's package manager by some non-privileged means (messing with the user's python path and placing an evil self-hiding module that changes the behaviour of the engine e.g. by always listing a malicious package as a dependency of whatever you're currently installing).

The problematic code here is Python's `import` mechanism and mutable global references to standard library functions. You can cut out the "buggy" code by writing in another language.

[1] [https://wiki.gentoo.org/wiki/Python](https://wiki.gentoo.org/wiki/Python)

<comment><USER12> That's possible, but I don't think it's relevant. If you have access to the user's profile, it doesn't really matter what language the package manager uses. You still have rights to create aliases, create local wrapper scripts, use LD_PRELOAD, set LD_LIBRARY_PATH, and many other ways to execute your own code. You can stop the user accessing the original package manager in the first place.

dnf for example is widely used (Fedora's default package manager) and it's written in Python: [https://github.com/rpm-software- management/dnf](https://github.com/rpm-software-management/dnf)

</comment></comment></comment></comment><comment><USER38> So many people chiming in with their dismissive comments and superior Python knowledge. The article is excellent and should be required reading for Python devs. Having it in one place is valuable resource.

</comment><comment><USER39> I love that the header and navbar is responsive, but the content itself is not.

Also input is truly baffling to me. Such a small mistake that could allow write access to your code.

<comment><USER40> it's historical - python was originally conceived as a toy language for teaching, in which context being able to do x = input(), type 2, and get an integer, is a desirable property.

Then we got stuck with it because backwards compatibility.

</comment></comment><comment><USER41> "Reusable integers" is a real fail - it violates the principle of least surprise and introduces a nasty inconsistency - _all integers_ should logically be (refer to) the same integer object, not just the first 100.

Assert is a statement, not an expression, so do not use it as an expression.

One should never compare floats. This is taught in any freshman CS course. The limitation is due to the standard encoding of floats - IEEE 754 - not Python's fault.

Everything else are features of a truly dynamic language, designed for a _really_ quick prototyping. Python3.x got rid of many inconsistencies and caveats of 2.x

Shall we re-read the classic now?

[https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad- design/](https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/)

<comment><USER42> If your code relies on two integers having the same object ID, I daresay you may be doing something wrong.

<comment><USER41> Yes, but it ether should be that way for all or for none of them, not for some of them.)

Logically, they should refer to the same entity. It is "natural" \- when people are trying to communicate a concept to one another they assume they are referring to _the same concept_. Not to an instance of it.)

</comment></comment></comment><comment><USER43> Not readable on a phone. How can any tech company afford this in 2016...</comment>


Time Complexity of Matrix Determinant - <AUTHOR> https://kevinwinata.com/daily-time-complexity-of-matrix-inverse/ <comment><AUTHOR> Edit link: [https://kevinwinata.com/21-jan-time-complexity-of-matrix- inv...](https://kevinwinata.com/21-jan-time-complexity-of-matrix-inverse/)

</comment><comment><AUTHOR> I wanted to start a blog but find it really difficult to commit to a long, complete and thorough topic. So I'll probably start with an easier format of 30-45 minutes writing of the most interesting stuff I learn each day. Let me know what you think! Thanks.</comment>


Simplify Your Life, Hide Your Bookmarks Bar - <AUTHOR> http://andrewscala.com/bookmarks/

<comment><USER2> Purging bookmarks is fine when it comes to 'sites you visit regularly', I suppose. Slows things down a bit. But it's a terrible idea for bookmarked references that you might only look at rarely, because now you have to fall back to google and pray you remember enough details to get back to the same place. Just a few days ago I spent twenty minutes finding [http://aliciapatterson.org/stories/eurisko-computer-mind- its...](http://aliciapatterson.org/stories/eurisko-computer-mind-its-own) because I'd neglected to save the url anywhere.

I'll go ahead and give support for getting rid of the bookmarks _bar_ , but that's not what the actual article is about.

</comment><comment><USER3> I have a collection of bookmarks, that I haven't quite gotten around to organising! And they span about three machines and many web browsers. In their current state they aren't brilliantly useful for me.

I've always thought that bookmarks are a great idea. It's the bookmark interface in the browser that sucks. I think people use tabs a substitute for bookmarks for that reason. A tab is more in your face than a buried bookmark. It's a visual reminder.

Turning off the bookmark bar might be a good idea, if it's full of links that you barely touch. Would it not be a better idea to use that space for your most visited sites, or to list your recent history, or a filtered history?

The one time the browser bookmark bar was invaluable for me was when the keyboard broke on my computer. I could still surf the web quite well up to a point.

It's all very well saying abandon bookmarks. But free searching requires you knowing what you want to search for. Bookmarks can be mnemonics.

Sometimes we need prompting and/or signposting.

If I read something on the web, like a tutorial, and I think it has value. What chance do I have of remembering every domain/url, or even the magic keywords that got me to the article in the first place? That's when I find bookmarking useful. Recalling that bookmark is the tricky bit.

As I see it, browser's are focusing on rendering and javascript performance, and neglecting the actual user interface.

</comment><comment><USER4> Unused clothing consumes a valuable resource that's often in short supply: closet space.

Unused bookmarks consume virtually no resources at all, relatively speaking, even if you have tens of thousands of them. I don't see the point of spending even this much effort "tidying them up" or whatever. I'm not sure I agree that developing a "philosophy of bookmarking" (or whatever you'd call this) is making your life _simpler_ at all.

</comment><comment><USER5> I love the idea. I'd have to turn off auto-complete, too since hitting CTRL-L then typing "n" <return> would take me right to Hacker News. Muscle memory. I totally check sites out of obligation/procrastination.

</comment><comment><USER6> I've long since forgotten bookmarks and just learnt to trust Chrome's address bar. Even if I can only remember part of a title it'll manage to surface a page I've visited before.

</comment><comment><USER7> This is actually common sense.

In fact, Chrome was based on this idea and it comes with bookmarks bar hidden by default.

</comment><comment><USER8> Or you can keep the Bookmarks at a minimal. Keep only those you TRULY care.</comment>


Jason Aldean Withholding New Album from All Streaming Services for One Month - <AUTHOR> http://www.billboard.com/biz/articles/7487685/jason-aldean-withholding-new-album-from-all-streaming-services-for-one-month <comment><USER2> Movie studios started doing this with Redbox/etc years ago as a way to try to bolster physical disc sales. I don't think that it ever worked. So they pushed the window back to 90 days instead.

With music, I don't really think most people are going to notice or even care. There is too much stuff coming out nowadays.</comment>


Essential fallout software - <AUTHOR>

Which would be the best software to store in a fallout shelter in case something really bad happens? Which softwares have taken the most amount of human effort and deserve to be stored in a limited space? <comment><USER2> Do you want to preserve them so you can use them in your fallout shelter? Or after you leave your fallout shelter? Or are you looking to preserve them for the benefit of future archaeologists?</comment>


List of U.S. presidential campaign slogans - <AUTHOR> https://en.wikipedia.org/wiki/List_of_U.S._presidential_campaign_slogans <comment><USER2> Related: [https://en.m.wikipedia.org/wiki/List_of_political_catch_phra...](https://en.m.wikipedia.org/wiki/List_of_political_catch_phrases)

E.g: "Education, education, education", this was how Tony Blair set out his priorities for office after winning a landslide general election in May 1997.[182]

That's the kind of priority that would diminish my mysantrhopism.</comment>


Two-Phase-Commit for In-Memory Caches, Part 2 - <AUTHOR> http://gridgain.blogspot.com/2014/09/two-phase-commit-for-in-memory-caches.html

<comment><USER2> It's amazing with all the noise around spark these guys hack along. Obviously grid gain is light years ahead.</comment>


Burlesque – A message queue server in Go with an HTTP API - <AUTHOR> https://github.com/KosyanMedia/burlesque

<comment><USER2> Can someone explain the benefit of this over using a list in redis and using a blocking pop. Only thing I can think of is that it uses HTTP so you may be able to get around some port restrictions in your infrastructure, but that is probably a very uncommon case.

<comment><USER3> This server was built for a specific purpose: storing huge amounts of critical delayed job descriptions. Publishing and retrieving jobs is done via HTTP as it's the easiest transport protocol for most stacks. KyotoCabinet database is chosen for its capabilities to tune the speed and the size of the storage depending on the nature of its data and the flow of the app.</comment></comment>


Real-time world map showing user messages for a location based social network - <AUTHOR> https://www.wnmlive.com/map <comment><USER2> That's awesome</comment>