No, Dubai will probably not become a start-up hub: "The Top 20 Reasons Not to Move to Dubai" - <AUTHOR> http://www.escapeartist.com/efam/94/art_20_Reasons_Not_Move_to_Dubai.html

<comment><USER3> I spent 20 years in Dubai, and when this article came up on other sites months ago, it urked me how many mistakes there were. I'll address the glaring ones.

1\. No, that's not true. Taxi drivers usually have a great sense of direction and locations. It takes time to get used to giving directions by landmarks, but that isn't always necessary. Houses are usually in areas where it is easy to reference the community, street, house number etc. Apartment buildings have names, and if you name the location, street and building you're fine. I've never been "expected to draw a map". Mail delivery to your door is not impossible.

2\. Got nothing here, unfortunately. Etisalat (the oldest and primary ISP) does do this, but mine (my parents still live there) does not. I speak to my parents using Skype, I can play poker online and since the ISP is privatized (Etisalat is not), they aren't bound to obey the Islamic laws that make Etisalat filter content through a proxy.

3\. There isn't sand everywhere. It is in a desert, but if you walk around you won't get covered in sand. It is incredibly hot though, yes. But so is Texas.

4\. First, the author complains that there aren't enough plants. When the government solves this problem, then it becomes an issue of water consumption. All water is desalinated, and the government foots the bill. By the way, Dubai has more greenery than Manhattan.

5\. I don't know where this author went, but of course there is poverty and so there are going to be poorly maintained toilets. In 20 years in Dubai, I never had to use anything that wasn't a proper, Western-style toilet. Oh, and Burj Al-Arab is a 5-star hotel.

6\. There were issues with labor exploitation, and I can't argue that this isn't a problem. Unless you're working in construction or something along those lines, this isn't going to affect you. I have never met anybody (neither has anybody I know) that has had their passport taken from them for a decade.

7\. That is true. Dubai is very expensive. But this isn't a secret: <http://www.citymayors.com/economics/expensive_cities2.html>

8\. This is just idiocy: break the law and you will be fined. I actually find the way the city of Dubai manages intersections very well. Everything is clearly marked out, if you can turn on red then there will be a separate lane to do so that will actually turn off. Cops are much more ubiquitous than claimed; "weeks" driving around without seeing one? Bah, maybe in your driveway.

9\. And now we're insulting people on their religious beliefs? If someone wants to dress like that, let them. You are under no obligation to do so. In the summer, I walk around in shorts and sandals. 15% or so of the population is local, and I guarantee you not everyone dresses like that.

10\. Maybe people stare at her because she is hot. Or extremely ugly. Or because she is a white girl who for some reason thinks she should be wearing a full burkha. As I already mentioned, around 15% of are local, so it's not like they haven't seen a white girl before.

11\. No, it isn't. Prostitutes are illegal. There are also prostitutes in New York, London, Tokyo, etc. etc.

12\. No. Alcohol can only be sold for on-site consumption at bars and restaurants in hotels and some clubs. To buy it for yourself at home, you have to go to government-approved stores (African & Eastern is the company that has the distribution rights) and buy from them. Yes, it is expensive. Canada does this in much the same way (government stores that are more expensive than they would be in, for example, the United States). The liquor license isn't needed to consume alcohol in your house, it is needed to buy alcohol.

13\. One by one: for rent: I've never heard of this, and I can't attest to it's accuracy, as my dad owns his own business. For telephones: I think this is wrong. I have friends who have walked into stores and gotten their own phones. In fact, there are special cheaper tourist packages that have shorter expiry dates etc. Satellite? Again, can't speak for sure, but I am going to say this is wrong, just as I've never heard it.

14\. There is no road where the speed limit is 160 kmph (100 mph) in the United Arab Emirates. Kids are kids. Kids in Dubai aren't more prone to be stupid.

15\. "Litte business"? No. Weekends are what they are for religious reasons-- Friday has the religious signifance in Islam that Sunday does in Christianity.

16\. Dubai has MBC2, which was, at conception, the world's only free-to-air movie channel. I've watched lots of big-name movies on there. As with all other channels. Television is syndicated late for the most part because American networks don't feel that the UAE is a market worth giving premiers to. As for commercials...come on. If a show is 42 minutes long and is put in an hour slot, the time has to come from somewhere. Commercials repeat regularly--this isn't a problem only with Dubai--because companies bought two slots. That's it.

17\. This is because the author is unfamiliar. I've mentioned what I think about the roads already.

18\. Are we back on taxi drivers again? There is some definite racism by a white person here against people who are normally from in and around India.

19\. Speeding is a major problem, yes. I'll be the first to say that I won't be surprised if Sheikh Zayed Road has the highest per-capita death rate on the planet of any single road. 30% tinting is allowed to anyone, local women can get much higher because they can take off their burkhas in the car to drive with unhindered vision but with the security that their face won't be seen by a man that isn't their husband.

20\. Touché.

There's about 50 words of real complaint spread into 20 link bait points. Hilariously enough, the author mentions "tax breaks, multi-cultural environments, and beautiful buildings" which to me, are incredible. There are few countries, nay, cities, in the Middle East that are as welcoming and appealing to expatriates. They should take her visa away.

<comment><USER4> >>6\. There were issues with labor exploitation, and I can't argue that this isn't a problem. Unless you're working in construction or something along those lines, this isn't going to affect you. I have never met anybody (neither has anybody I know) that has had their passport taken from them for a decade.

Well hey unless you hang out with penniless migrant workers you're not likely to hear of it are you?!

</comment></comment><comment> daniel-cussen The ad at the end was a little off.

<quote>It has spectacular beaches, but is not Australia. It is one of the world's most secure destinations, but is not Singapore. It has opulent city hotels and superb beachside resorts but it is not Bali. It has world class shopping, but is not Hong Kong.This is the Insiders Guide to Dubai, city of merchants, cultural crossroads, and surprises. A Scientific Approach - <USER2> goal is to move to Dubai, to find a excellent employment there, to purchase real estate and take advantage of the booming market. How do you accomplish your dream? As in any pursuit, determination helps, but it takes more than determination to relocate to Dubai. It takes facts. Anyone can thrive in Dubai, the now and future playground of the rich and famous, after getting The Insiders Guide to Living in Dubai, UAE.</quote>

</comment><comment><USER5> I find it interesting that there is no mention of the Dubai "Free Zones"

[http://en.wikipedia.org/wiki/Free_economic_zone#United_Arab_...](http://en.wikipedia.org/wiki/Free_economic_zone#United_Arab_Emirates)

Most notably:

<http://en.wikipedia.org/wiki/Dubai_Internet_City>

I will always maintain that because of the internet, it should have very little impact where you are physically, unless you absolutely have to network with people like pg in person. In this case, the only place to be is on an airplane jetting between locations chasing after such important people because they are not always in one place (but most likely all are somehow connected to San Fran).

<comment><AUTHOR> I did not know about the free zones. They are really interesting. Thanks for sharing that.

However attractive they are, the cost of flying a team out to Dubai probably equals the cost of the average web application beta.

</comment></comment><comment><USER6> I can't conceive of a single reason to move to Dubai. I would seriously rather live in a shanty in the middle of Appalachia.

</comment><comment><USER7> This is an advertisement for her ebook (insider's guide thingy). Trying to establish herself as an expert. Marketing huey. Annoys me that I'm voting simple by commenting.

</comment><comment><USER8> crazy awesome response post.

i do however think that if dubai wanted to fix anything on the list, it would happen with dictators speed.

<comment><USER9> Thing is, it sounds like the classic dictator problems: bureaucrats try to solve problems of complex systems top down (like traffic, urban development), which is just not possible. So I doubt a dictator would come up with a good solution.

<comment><USER10> Despite the old saying that the trains always run on time, just about everything else seems to go to hell.

Note Singapore is one of the few modern examples I can think of of a dictatorship that turned out pretty well. Of course the plain-clothes police everywhere probably have something to do with why in two solid days of counting I never saw a single person laugh or grin. I didn't even notice that it had been happening until crossing over to Kuala Lumpur I was struck by seeing laughing and smiling people.

</comment></comment></comment><comment><USER11> Thanks for the reply, avinashv--I almost took the article at face value. I should know by now to be wary of "Top n Xs" articles. Good to have both sides, anyhow.

George Saunders has a great study of Dubai in his essay collection, the Braindead Megaphone. He mostly focuses on the exaggerated class division between guest workers and the rich natives. The book is worth picking up for the other essays, too, but certainly if you're interested in an intelligent Western perspective on Dubai. He was there as a tourist and journalist, not a resident, though.

</comment><comment><USER4> here's another reason [http://www.timesonline.co.uk/tol/news/world/middle_east/arti...](http://www.timesonline.co.uk/tol/news/world/middle_east/article3395661.ece)

you can get four years for 0.05 of a g of cannabis

</comment><comment><USER12> Martin Newland is "starting up" a new well-financed (naturally) English- language newspaper in the Emirates (<http://www.guardian.co.uk/media/2007/dec/23/1>).

Web-startups probably don't mop enough cash fast enough to be interesting yet. ??

</comment><comment><USER13> No weed. No move.

<comment><USER3> There's weed everywhere. Here, too.</comment></comment>


Russia Will Genetically Test Soldiers to Identify the Best Fighters and Thinkers - <AUTHOR> https://www.forbes.com/sites/zakdoffman/2019/06/08/russias-new-genetic-military-passports-will-sort-the-fighters-from-the-thinkers/ <comment><USER2> I wonder what exactly they will test for.

Seems like one of those cases where someone picks what traits they want and discover that those aren't actually the best traits for the job.

For a military (and any to some extent) historically so reliant on throwing mass numbers of humans at a problem, I am not sure "thinkers" is what they will ultimately want, perhaps the opposite.</comment>


Ask HN: When does a master's of cyber security degree make sense? - <AUTHOR> <comment><USER2> It all depends why you would want it in the first place.

My opinion is you would be better off getting a GIAC Cert or an Offensive Security Cert (i.e. OSCP, OSCE). The OSCP Cert will be much more difficult than acquiring a masters and depending on your background may take longer.

For management types the CISSP or CISM is typically a good route since so many companies regard them highly (don't understand why but whatever)...

To be honest the best security folks I know have little more than a HS Education. Two are on Wall St making well into the 7 figures and another is working as the leading technical expert for one of the biggest credit companies in the world.

Sadly there are few Uni's that even offer a decent Cyber Security Track.

<comment><AUTHOR> Primarily for a differentiator, just not sure how much weight it holds.</comment></comment>


Exploring AArch64 assembler - <AUTHOR> http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/ <comment><USER2> For those who are interested in running your software on AArch64 hardware directly, without any additional firmware or operating system in between, I've developed a boot loader and tool chain to test and execute unikernels on a Pine64:

[https://github.com/Lichtso/UnikernelExperiments](https://github.com/Lichtso/UnikernelExperiments)

<comment><USER3> Hmm, what are the advantages of using this bootloader over U-Boot? Or is it simply that U-Boot doesn't support Ethernet or some other peripherals on the A64 SoC?

<comment><USER2> On one hand it is very light weight: less than 4k LOC and 16 kB executable (which fits completely in the first stage of SRAM), so it is easier to grasp compared to U-Boot: [https://github.com/trini/u-boot/search?q=sunxi&type=Code](https://github.com/trini/u-boot/search?q=sunxi&type=Code)

On the other hand, it has different goals and is just meant to load a blob of instructions over ethernet (faster evaluation cycle) not an entire Linux kernel with all the POSIX / UNIX stuff from SD. So you have far more control but are also on a lower level, somewhat like developing for a more powerful Arduino.

</comment></comment></comment><comment><USER4> This article is very short and shallow. I mean... you can apply it to any architecture that Qemu supports (and there are many). Altogether there are 2 assembler instructions in the whole article. Not much of an exploration...

Qemu usermode emulation is nice, but the full-hardware emulation is way more interesting. Eg. in [https://github.com/dpc/titanos](https://github.com/dpc/titanos) \- toy kernel for Aarch64 written in our lord-and-saviour programming language: Rust, I use Qemu to run kernel and unittests for that kernel. With Qemu gdb stubs it's like having a software-defined hardware platform with a JTAG debugger attached. `make run` and it runs - no need to plug cables and press reset buttons.

<comment><USER5> nice, from "i dont like this article" to "rust advertising" in 5 sentences?

</comment></comment><comment><USER6> I recommend the Pine 64 board. I bought one (2GB RAM, gigabit ethernet model, for 29$ [1]), and despite running its 4 cores at just 1.2GHz, it is quite speedy, and rock solid running Debian 24/7 as ARM64 build server.

[1] [https://www.pine64.org/](https://www.pine64.org/) (I'm not related to Pine, just a satisfied user)

<comment><USER7> I wish I had know about the Pine 64! I ended up buying an ODROID-C2 ([http://www.hardkernel.com/main/products/prdt_info.php](http://www.hardkernel.com/main/products/prdt_info.php)) when looking for an AArch64 board, which is pretty similar.

<comment><USER8> I think you're better off with the Odroid and it's Amlogic CPU - the Pine 64 has an Allwinner CPU. You'll have fewer headaches getting kernels to build for and run on the Amlogic chip.

</comment></comment></comment><comment><USER9> Another cool thing you can do is setup the kernel's binfmt handler to run the user-mode qemu emulation automatically.

</comment><comment><USER10> > single-board computers that support the 64-bit mode of ARMv8 are less common

hey, you can use Nexus 5x, 6p or Pixel phones! I've been meaning to write a blog post about this.

<comment><USER11> What about iPhones?</comment></comment>


Sam Altman is not a blithering idiot - <AUTHOR> http://unqualified-reservations.blogspot.com/2013/03/sam-altman-is-not-blithering-idiot.html

<comment><USER2> One of the things about HN I find annoying is that anything by or about certain people makes it onto the front page.

This blog post is near-incoherent, was published over a year ago (March 2013), and is a reaction to a blog post that current returns a 404 error. But hey, it name-checks Sam Altman, so vote it up, apparently.

<comment><USER3> It seems some intellectuals take pride in being difficult to understand. As if that difficulty is proof of their intelligence. So they use big words and write big ideas, and wonder why so few others appreciate their brilliance. The truth is that it is often harder to make the big ideas easy than it is to make them hard, and that the goal of the people who do the latter is not to spread knowledge but to show off just how clever they are. I dislike this sort of writing for exactly that reason (and, interestingly, it is almost exactly this sort of writing which Orwell took to task in "Politics and the English Language"), that it is more interested in being noticed than in being understood.</comment></comment>


Scheme to become two languages - <AUTHOR> http://lambda-the-ultimate.org/node/3582

<comment><USER2> Actually, it's not being split at all. There's going to be a "small" variant that is a proper subset of the "large", or complete variant. Small would just be a reduced feature set.

</comment><comment><USER3> This is a great idea.

To keep a standard subset for lightweight implementations (which are better suited for embedded systems, or for being embedded as a scripting language). How cool is this?

Edit: not to mention that a greater portability among the full featured implementations would be even more cool.

I'm so happy to see Scheme alive and kicking.

<comment><USER4> I'm currently planning out a project that involves building a OSC controller using an ARM chip. I hope I will be able to use scheme to write the firmware for the device, that would be swell (and much more fun than using ASM).

<comment><USER5> How do you like Lua?

<comment><USER4> I have very little experience programming so i figured an embedded system would give me a good "ground up" approach to learning some programming. I've heard good things about lua, i was considering ADA (rock solid stability is key for this project) or smalltalk. I'm still in the planning stages of everything involving this project and infact i'm going to build a midibox first to get familiar with embedded systems and circuit design. Some people have made some impressive controllers, and synths with the project.

<http://www.midibox.org/> <http://www.ucapps.de/>

<comment><USER5> Oh, well, you should try some stuff before you make up your mind, then. Ada and Smalltalk couldn't be much more different.

</comment></comment></comment></comment></comment><comment><USER6> This kinda looks like a linkjacked version of that:

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

<comment><USER7> It's on Lambda the Ultimate, which is a well-known programming language theory discussion site. While the link could have been to the steering committee statement, the signal-to-noise ratio for LtU's discussion will probably be on par with HN's.

It's worth browsing their archives (<http://lambda-the- ultimate.org/classic/lambda-archive1.html>) sometime, when you have a couple hours. Great stuff. (I'm only posting the link because it's a Friday afternoon. ;) )

<comment><USER6> Oh, I read stuff there from time to time, and it's often interesting. I just didn't see anything in the original posting at LtU that made me think "Yes, it was definitely important to submit this instead of the actual meat of the matter."

</comment></comment></comment><comment><USER8> Why do languages always have to evolve? On average, do languages get better over time or do they deteriorate? I am sure that Java has deteriorated a lot.

Keep it simple, please!

<comment><USER9> Java was never simple. Scheme is simple, Smalltalk is simple, Java was always a beast.

<comment><USER8> Probably, but they still managed to make it far worse (generics, annotations, ...).

<comment><USER10> Neah. Generics are useful. Not perfect, but useful. They also happen to be optional.

The language evolution has been good, but too slow.

Even the platform evolution has been good, they have (and perhaps still) set the standard for many types of libraries.

My main issue is the growth of the platform (to what, 200mb?). I would like a much tighter standard library. In an ideal world, Swing, XML parsing ... etc. should be seperate, deprecated items removed and old apis redone.

<comment><USER11> 200MB? The latest JRE is only about 20MB. Those libraries consume very little space.

<comment><USER8> 20 MB might just be the loader, though. I recently installed the JDK after a long pause and I was appalled at how unpleasant the process had become.

<comment><USER11> No, 20MB is the complete JSE runtime download including all libraries.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> How can anyone think that deciding on expressions of computation should be done by committee? Imagine mathematicians were to get together to agree on standardized terminology for papers - what a waste of time it would be!

<comment><USER13> Assuming you're not being facetious, I happen to think mathematics would be more advanced today if a little attention was paid to standardizing its notation:

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

But don't take that as enthusiasm for committees.

<comment><USER14> Almost _no one_ is enthusiastic about committees. That doesn't make them any less of a necessary evil.

</comment></comment></comment><comment><USER15> We already have both Theory Focused Lisp (Scheme) and Practice Focused Lisp (CL).

What did I (sorry, I meant you :) miss?

<comment><USER16> The idea is that Scheme has been controlled by the expansionists lately and has gotten pretty large and practical.

As for why people don't just use CL, Scheme isn't laden with the historical mistakes that Common Lisp is, Scheme is still capable of evolving, and "large Scheme" is much more approachable to beginners than CL because of DrScheme and other efforts of the PLT people. And some people just like Scheme's approach better.

<comment><USER15> _historical mistakes_ (regarding CL) is only an opinion, not a fact.

For many aspects it's a huge advantage of CL to not having continuously evolve into something slightly different and only opinionatedly better.

I know both Scheme and CL, and I'll continue to prefer CL for at least the next decade coming, I think.

Meantime, I like all the effort anybody is putting in any kind of Lisp, and I always follow the different attempts (the different Schemes, Arc, Clojure).

<comment><USER16> No I think Common Lisp does have more mistakes than Scheme. But I should have said, "Scheme isn't _as_ laden with mistakes..." And that's partly because most of the current Scheme standard was evolved after the Common Lisp standard was set.

Agreed on your last point, and I recommend trying Clojure out for some little project. It might surprise you how much more succinct it is than Common Lisp. Arc too, from what I've heard.</comment></comment></comment></comment>


Trucking Is the Security Crisis You Never Noticed - <AUTHOR> https://foreignpolicy.com/2018/09/19/trucking-is-the-security-crisis-you-never-noticed/ <comment><USER2> Lurking behind the article's entire thesis, and yet barely addressed in it, is the issue that despite demand for truckers outstripping supply, their employers aren't willing to significantly raise wages. They instead eat the costs of trucks sitting empty despite loads available to carry. "Higher demand for labor raises wages" is the bread-and-butter of mainstream economical arguments for how to help poorer segments of society and, fundamentally, why economic growth is a good thing- yet cases like these show that it is _simply not true_. Raising wages for less skilled workers is apparently so absurdly painful for employers in almost any field that they'll pay almost any _other_ cost.

This is how wage growth has stagnated for the majority of workers in the U.S., even in the face of a prolonged economic boom [0]. The standard economic models of the labor market _do not work_ , and yet almost no one is willing to acknowledge this.

[0] [http://www.pewresearch.org/fact-tank/2018/08/07/for-most- us-...](http://www.pewresearch.org/fact-tank/2018/08/07/for-most-us-workers- real-wages-have-barely-budged-for-decades/)

<comment><USER3> They can afford to have trucks sitting idle rather than raise pay because the cost of capital is at historic lows. If the cost of capital were higher, the balance between capex and opex would favor labor more.

Much of the middle class hollowing effect could be helped by rather small changes in capital costs.

<comment><USER2> I'm not an economist, and the following argument is qualitative- "cost of capital" essentially means the cost of _things_ (as opposed to, the cost of services/labor.) Perhaps, indeed, when the cost of things goes up, this will lead to an increase in wages- but humans also require and purchase _things_ , so this will drag their effective earning (their purchasing power) back down, even if their nominal wage has increased.

Which leaves peoples' motivation to be truckers (and the fortunes of the middle class) in roughly the same boat regardless of the cost of capital.

<comment><USER3> No, cost of capital is not synonymous with "cost of things". It's how much you have to pay to use someone's money for a while. There are all kinds of other costs that go in to the cost of goods.

Big trucking companies borrow money and buy semi trucks. They get them straight from the manufacturer complete with 4-5 years worth of all maintenance and warranty. They run them for that time, spending nothing else other than fuel, tires, driver pay, and insurance cost, and then sell them at the end of the 4-5 year period. The cost of using the truck is essentially the difference between the purchase price-selling price, plus the interest cost of the borrowed money.

If that interest rate is low, let's say it's zero: they can buy 1,000 trucks and let them sit idle and not lose much money because they just turn around and sell them as almost new, and don't have to pay interest. If the interest cost is high, they need to keep the trucks working to bring in revenue to cover the depreciation + interest cost.

Lower and middle-class people don't use debt anywhere near the extent that capital-intensive businesses do. Higher interest rates do not affect their bottom line as much. So if the cost of capital goes up, there is pressure on that capital to produce, which makes it more beneficial to spend money on labor to create revenue. Labor gets a bigger slice of the revenue pie because it is more valuable compared to capital.

Even better, a dollar spent by a consumer is far more beneficial to the economy than a dollar spent by a corporation, because such a high proportion of corporate spending ends up back in the pockets of plutocrats and plutocratic corps. A dollar spent by a consumer tends to go back in the local economy at the grocery store, gas station, mechanic's shop, child care, etc. That same dollar gets spent again and again in the local economy as it passes along.

</comment></comment></comment></comment><comment><USER4> Why not rebuild railroads here in the US? On a trans-country trip by Amtrak, I was struck by the number of abandoned spurs to industries which still seem to be operating. Presumably those industries have switched to road-based transportation.

<comment><USER5> Freight rail in the United States is unmatched. Cheapest ton/$ and on-time.

Coal power plants are comfortable scheduling supply intake on a daily granularity as it's very rare for it to arrive late. It's also a reason passenger rail is more dismal in the states; the rails are operated by the freight companies and passenger trains have the lowest priority so they pull over to let a 2 mile train of coal pass by at 15 mph.

It's also difficult to expand this capacity as the complexity of handling so many trains isn't linear. Rail yards are both tough to revamp because they're near 100% in-use and even just tough to physically expand: [http://www.chicagonow.com/dennis-byrnes- barbershop/files/201...](http://www.chicagonow.com/dennis-byrnes- barbershop/files/2016/07/rail-yards.jpg)

</comment></comment><comment><USER6> > _In the past, the fee per container going from Asia to Europe was often > 2,000 euros [$2,300]. Today, it's 200 euros [$233]._

wow. i had no idea a container shipping fee was that low.</comment>


CTF3 architecture - <AUTHOR> https://stripe.com/blog/ctf3-architecture

<comment><USER2> That was a lot more sophisticated than I expected! By the way, I think I was responsible for about 10k of those 640k pushes :)

I was really hoping for an overview of the solutions people found for each level though. Going through individual write ups to find them all is a little tedious.

Here's the rough list of what I was aware of:

level0 (take input of words from stdin, output to stdout whether they exist in the dictionary):

a) Read file into a hash set, test each word as it comes in.

b) Read file into a bloom filter

c) Realize that it is always the same dictionary and pre-compile it into a hash set/bloom filter. The fastest solutions were generally of this type, written in highly optimized C with a ~600kB bloom filter compiled into the binary.

level1 (gitcoin mining):

Not very familiar with this one, but I believe near the end several people had written custom GPU miners with openCL and were running them in small clusters of EC2 GPU instances.

level2 (ddod prevention):

I am also unfortunately not very familiar with the high scoring solutions to this level, since I never really figured out how idle time was calculated. However, the one common and easy solution was:

a) Keep a list of requests per IP and ban any IP after it made more than n requests (4 was a good number).

level3 (text search):

a) Shell out to 'grep -r -n query path', parse out the relevant part of the path/line number and submit (surprisingly, this worked to get a score just above passing if you tried a few times).

b) The intended solution was probably to build text search with a trigram index/suffix array/etc. I know a few people did this with reasonable success.

c) A faster solution was to realize that the tester only ever queried words that were in the dictionary. You still had to return results for words in which the query was a substring, but this is a finite set that could be pre- computed during indexing (or even before uploading your solution, since the dictionary is known in advance). The fastest (legitimate) solutions were of this type. Single node, single threaded (because requests were sequential) TCP servers written in C in which the answer to every possible query (only 250k possibilities) was pre-computed and stored in memory during indexing. It was just a matter of running this until you got a sufficiently optimal run, since the bottleneck was always the ~1.68ms of latency the test framework added to the request.

level4 (distributed consensus):

a) Just proxy all requests to a hardcoded master node which ran a single sqlite instance in memory. You would lose a connection to it, but as long as your queries were fast you would score enough points early in the round to pass even after the single-point-of-failure tester was added.

b) Implement Raft. Conveniently, the example code was laid out suspiciously similar to the open source goraft implementation, which served as a drop-in solution. Minor tweaks were necessary to account for the test framework pinging non-leader nodes (which meant you just had to proxy to the leader).

c) The most clever solution I was aware of, which I believe was discovered by the highest scoring player (xthexder), was to abuse the underlying http library in the octopus test framework. To understand how it worked, you must first understand that the test framework used a stripe developed system called 'Octopus' which would run your nodes in isolated containers that could only communicate with each other over specifically designated Unix sockets. Octopus would do nasty things to these sockets such as adding latency, severing connections between certain nodes, or partitioning whole sets of nodes from each other. However, the nodes were always running and they always had a connection to Octopus. So if you could convince Octopus to carry your message to the other nodes for you, you wouldn't have to worry about any of this silly distributed consensus logic.

The way xthexder discovered to do this, was to send 302 redirects back to Octopus with the query and the location of the hard-coded leader node (which was running a custom in-memory SQL database that was optimized for the very few queries that octopus ever used). I don't remember the exact details (read his write up for more info!), but it required some trickery to get Octopus to respect the redirects, but once it did you were able to get a perfect connection to a master node with 0 intra-node traffic (which would normally reduce your score).

I also discovered a couple really dirty tricks for level0 and level3:

a) The test framework actually used predetermined test cases so that if you failed the test, you could rerun the exact same test locally and see where your code went wrong. The test cases were randomly selected after you pushed your code, so you couldn't hard-code the solutions into your code (that would be cheating!). Except there was a weakness: The build phase ran on a container that allowed external network connections so that you could download packages from common package repositories like npm. The test framework would also output the test case it selected to you (but not to your code) prior to running the build phase. This meant you could write a request in your build script to your own server which would hold open the request until you read the test case from the test framework output, ran it locally, packaged up the answers, and gave them to your server for it to return back to your running solution on the test container. This allowed your solution, running on the test container, to have the answers to level0 and level3 loaded in memory before the test framework even sent its queries.

b) Method 'a' was patched over the weekend by moving the test case disclosure after the build phase, so I went looking for a workaround. What I found was just about as good. It turns out there was a fixed number of test cases for each level (I believe it was 1000 for all levels). All of them were publicly available on AWS S3, you just needed their names which I got from continually running a git push, parsing the test case, aborting, then running git push again. I ran at about 30 cases per minute, which meant running through all 1000 only took ~30 minutes on average. I downloaded every test case, found the ones that had the highest scoring potential (generally the ones with the worst benchmark score) and hard-coded the answers to those in my solution. I then had a script to run 'git push', parse out the test case it would run, abort, and rerun until it got one of the test cases that I had hard-coded. It's important to note that the remote server still reported the chosen test case prior to finishing the test run, so it only took a couple seconds to decide whether to let the run finish rather than waiting a minute or two for it to fully run. With 10 hard-coded test cases (out of 1000 possible) and checking one possibility every 2 seconds, it only took an average of ~3 minutes to get a run where the code running on the test server would once again have the answers loaded in memory before the test framework sent a query.

<comment><USER3> My solution to level0 accounted for about 10% of the total process runtime (measured against an empty `int main() {}`. The rest was process/libc setup time.

I realized after the competition you can compile with -nostdlib or -nostartfiles and halve the process overhead, which would almost double any of the top 10 scores at that point.

<comment><USER4> On this tangent, where do I go to learn how to write C with nostdlib? I've tried this on both MSVC++ and gcc and it's really painful.

<comment><USER5> Well you just use system calls and import functions from other shared libs dynamically. There is really not more to it. The stdlibs are supposed to make your life more comfortable, of course its not that comfy without them.

</comment></comment></comment></comment><comment><USER6> All that for a service that was up just a week.

"We put together a quick-and-dirty LDAP server implementation"

Yeah, no problem. Just slapped that together. Clearly some great sysadmins at Stripe.

Coming from a hands-off heroku world, this definitely increases my respect for ops guys/gals.

<comment><AUTHOR> :)

Even though it was just up for a week, people's Git commit histories show there were 20,000+ hours (2.3 programmer-years) spent playing CTF. So it was worth the time investment!

</comment></comment><comment><USER7> Thanks for the writeup.

I remember thinking during level1 "Wait, they have miners going for each user? No way... these have to be premined (wrong, makes sense now why) somehow." I recall after thinking that, looking at the timestamps and seeing that they didn't exactly align with when the git pull happened. I would check, do some work, check, do some work, etc., and a new commit would come in that looked to be only a few seconds after the last commit, although it clearly wasn't available to me at that time.

</comment><comment><USER8> _" One consequence of this architecture was that submitting Gitcoins was decently slow — we weren't maintaining persistent connections to the backend gitcoin server, so there was a decent amount of overhead. We compensated for this by tuning the difficulty to ensure the time to mine a coin was large compared to the time to complete a push."_

Interestingly, this is the reason Bitcoin confirmations are 10 minutes and not less: it gives plenty of time for new blocks to be broadcast to the majority of the network.

It's not currently a big issue since the maximum block size is 1 MB (50% propagation typically takes less than 10 seconds: [http://bitcoinstats.com/network/propagation/](http://bitcoinstats.com/network/propagation/)) but to scale to Visa volumes block sizes will need to be increased to hundreds of megabytes.

It's also a reason why quicker confirmation times of Litecoin and Dogecoin aren't necessarily a good idea.

</comment><comment><USER9> Thanks to Stripe for running the ctf! It was great fun.

I'd be interested to know how much of the load was generated from folks looping 'git push' on level4 in order to find a test case the benchmark bombed on (or just to rng the goraft race condition). The variability in scoring on that level was huge.

</comment><comment> brown9-2 I think there is an error in this writeup - _testasaurus_ is a great name!

Curious - was all of this set up on EC2 or a similar environment?

<comment><AUTHOR> Yep, we ran everything on AWS, which was nice since we could directly use a lot of the management infrastructure we've built for Stripe.

<comment> brown9-2 Thanks. One more question: the writeup mentions that Stripe is hiring for remote folks in US timezones. Is that for all engineering positions? I could be missing something but the jobs page doesn't mention anything about remote people.

<comment><AUTHOR> Yes, that's for all engineering positions. We've been so busy building CTF we haven't had time to maintain the jobs page :).

</comment></comment></comment></comment><comment><USER10> My word that looks like a lot of fun to put together.</comment>


Bitcoin reaches 18-month high as Facebook's Libra spurs interest - <AUTHOR> https://www.reuters.com/article/us-crypto-currencies/bitcoin-reaches-18-month-high-as-facebooks-libra-spurs-interest-idUSKCN1TR10L <comment><USER2> With all these articles I always find myself asking on why they are so sure on what caused the recent price change. It often seems like price is changing first and then everyone goes searching for an explanation, and one is then chosen arbitrarily.

It could have just been that many buyers simultaneously came to the conclusion that Bitcoin is undervalued.

</comment><comment><USER3> BULLISH. 100k by 2020???</comment>


Jeffrey Epstein Pitched a New Narrative. These Sites Published It - <AUTHOR> https://www.nytimes.com/2019/07/21/business/media/jeffrey-epstein-media.html <comment><AUTHOR> NYT title, but Epstein is not the important part of the story.

> The articles in praise of Mr. Epstein came about partly because of an online > publishing model adopted by some news organizations that relied on outside > contributors who often wrote for little or no pay, with little or no input > from editors.

So, formerly trustworthy news sites are serving as pass-through conduits for whatever content PR firms can pump in through a "contributor". _Oh tempora, oh mores_.

<comment><USER2> > formerly trustworthy news sites are serving as pass-through conduits for > whatever content PR firms can pump in through a "contributor"

Yes PG has written about it [http://paulgraham.com/submarine.html](http://paulgraham.com/submarine.html)

<comment><USER3> Good read! 14 years later, and 'The Suit' is still 'back'!

[https://www.google.com/search?client=firefox- b-d&q=%22The+su...](https://www.google.com/search?client=firefox- b-d&q=%22The+suit+is+back%2C%22)

</comment></comment></comment><comment><USER4> This should be bigger news.</comment>


If Your Car Were Emacs (2014) - <AUTHOR> http://wiki.c2.com/?IfYourCarWereEmacs <comment><USER2> ...and would only be available in beige with a triangular steering wheel as RMS wants to encourage people to bring the functionality to free vehicles. You're welcome to fork the vehicle but until then only commercial vehicles have colour choices and round wheels.

I'm wholly in favour of FOSS and what it stands for but I often think RMS does more harm than good. Even when I agree with the point he's trying to make!

</comment><comment><USER3> I don't get the vi(m) vs emacs war. Vi(m) is a great editor; emacs is a great operating system. Take the best of both worlds and enjoy spacemacs :)

<comment><USER4> Spacemacs is actually the worst of both worlds...

<comment><USER5> If you're referring specifically to evil mode I would agree with you (and this is coming from someone who loves and uses both Emacs and Vim regularly). I do enjoy what Spacemacs provides from a configuration and package management standpoint. Maintaining one file is a lot easier than maintaining entire .emacs.d.

<comment><USER4> Actually, I was talking about the configuration layers, in part: I don't know about you, but I'd like to know what my config is doing, dammit. Yes, my init.el is pretty long, but I know exactly what it's doing.

<comment><USER6> That's not really the worst of both worlds though, it's a spacemacs issue that neither emacs or vim has.

<comment><USER4> Well, I was also talking about various other things, but you're right.

So it's not only the worst of both worlds, it also has problems unto itself.

</comment></comment></comment></comment></comment></comment><comment><USER7> Actually, there are cars like Emacs.

Their steering wheels look like this: [https://www.google.se/search?q=F1+car+steering+wheel&&tbm=is...](https://www.google.se/search?q=F1+car+steering+wheel&&tbm=isch)

<comment><USER6> Those are single function buttons. To be like emacs you'd have to press at least six of them at once to do something.

<comment><USER7> Don't forget pedals.

Some wheels have multi function rotary switches (Mercedes for example). You use buttons to control what rotary buttons do. And rotary switches can be used to control how gas or breaking pedals behave, so there are all kinds of Emacsy Meta happening.

</comment></comment></comment><comment><USER8> Here's a link for people who don't want to run so much JS just to view a bulleted list of text

[https://archive.fo/VgNuv](https://archive.fo/VgNuv)

<comment><USER3> Yeah. With all respect to Ward and his federated wiki thing, using a webapp- ish thing for this is just plain awful.

</comment></comment><comment><USER9> "...a steering wheel you could move to the passenger side, for those trips to Canada"

Does someone really believe that we drive on the left-hand side of the road in Canada? Someone is really messed up in their geography.

<comment><USER10> From the article:

"Why would you want to do this? For countries that drive on the other side of the road. Like Canada. But, oops: they drive on the same side of the road, not the other side, so we see humorous bit #1: feigned American ignorance of Canada. But oops, again: assuming a left-side steering wheel is an AmericanCulturalAssumption - you might really want to change the side it's on if you're British and you're driving to Canada. That's humorous bit #2: we've caught the picky people in an unwarranted assumption (and a USAian one, at that!). Humorous bit #3 is the sheer unlikelihood of a British (or Japanese/Australian/Indian) person driving to Canada, after all.

That's the explanation. But it doesn't make the joke any funnier."

</comment></comment><comment><USER11> I do have Emacs for a car and I call it my bicycle.

<comment><USER12> wouldn't that be Vi?

<comment><USER11> No, I can tune my bike to fit me, rather than having to adapt to the bike.

<comment><USER12> well I guess I can tune my bike to fit me too, within limits. This principle of limitations is why I can't tune my wife's tiny bike to fit me ( without cutting metal and welding it together again I guess)

</comment></comment></comment></comment><comment><USER13> Also interesting:

[http://wiki.c2.com/?IfYourCarWereVim](http://wiki.c2.com/?IfYourCarWereVim)

<comment><USER14> > _The first time you actually sit in the car, you have to ask a friend how to > get out again..._

I remember that day!

<comment><USER15> As a vim user, I've never understood this. Does no novice pondering how to exit vim ever try ^C (which _seems_ perfectly natural), which outputs:

      Type  :quit<Enter>  to exit Vim

… and now you know.

I'll admit that not much else is discoverable, until you start learning to peruse :help and Google.

You're not the only one[1] to express this though.

How you're supposed to discover ^X^C in emacs, though, I truly have no idea. See also ed, and if you've not see it, Ed man! !man ed[2].

[1]: [https://twitter.com/iamdevloper/status/435555976687923200?la...](https://twitter.com/iamdevloper/status/435555976687923200?lang=en)

[2]: [https://www.gnu.org/fun/jokes/ed- msg.en.html](https://www.gnu.org/fun/jokes/ed-msg.en.html)

<comment><USER16> Sure, _now_ , but back in the dark ages of 1992, basically nobody at my university had heard of vim, so we just got vi, which didn't have such a helpful prompt. After entering vi, I spent about 15 minutes alternately trying to do anything useful and cursing at it until a helpful grad student next to me pointed me at emacs. When I fired up emacs, by contrast, it had a helpful message telling me to type C-h t, which ran me through a nice little tutorial on how to use it, including C-x C-c to exit.

</comment></comment></comment></comment><comment><USER17> I just see a loading gif...

</comment><comment><USER18> All I see there is a rotating "loading" animation. Is it supposed to take a very long time to load?

<comment><USER19> i think that might be the joke?</comment></comment>


Parsing Techniques - A Practical Guide - <AUTHOR> http://www.few.vu.nl/~dick/PTAPG.html <comment><USER2> There is a certain degree of contradiction between "a practical guide" and a book that purports to cover "(almost) all parsing methods, not just the popular ones".

As a matter of practicality, you could probably get away with just (a) finite automata, both in the hand-coded lexer style and regular expression style tools like lex; (b) LL(k), both in hand-coded recursive descent and tools like antlr; and (c) GLR, when you need to pull out bigger guns.

<comment><USER3> According to TFA, "No advanced mathematical knowledge is required; the book is based on an intuitive and engineering-like understanding of the processes involved in parsing, rather than on the set manipulations used in practice." I'm guessing this drives the "practical" moniker.

A little googling uncovers a Second Edition, also available on pdf.

<comment><USER2> The thing is, the mathematics behind parsing, such as they are, are not complicated. The concepts of first and follow sets, if not their names, are required to see how grammars can be ambiguous for a simple LL or LALR parser. Set notation for formal definitions of state machines may be slightly daunting, but the intuitions are easily grasped from a few diagrams.

I'm probably too close to this domain to have a useful perspective for those not familiar with it though.

<comment><USER4> Completely disagree -- there are tons of parsing papers that are extremely notation-heavy and difficult to follow. Even other authors say so; this is from David Gries' 1972 paper "Describing an Algorithm by Hopcroft":

"In [3], Hopcroft gives an algorithm for minimizing the number of states in a finite automaton. [...] Unfortunately the algorithm, its proof of correctness and the proof of running time, are all very difficult to understand. We present here a "structured", top-down approach to the presentation of the algorithm which makes it much clearer. [...] Such a structured approach to presenting an algorithm seems to be longer and require more discussion than the conventional way. If the reader wishes to complain about this, he is challenged to first read Hopcroft's original paper and see whether he can understand it easily. The advantages of our approach will thus be clear."

And this is just a DFA minimization algorithm! It's not an undecidability proof or anything like that. And Hopcroft's original paper (PDF: ftp://reports.stanford.edu/pub/cstr/reports/cs/tr/71/190/CS-TR-71-190.pdf) isn't nearly as dense or symbol-heavy as a lot of parsing papers out there.

There is a wide gap between reading papers that begin "A grammar G is a 4-tuple G=(N, sigma, P, S)" and are full of proofs and lemmas, and actually implementing algorithms.

<comment><USER5> I agree with both of you - parsing isn't that mathematically demanding, and many papers are badly written.

This is why 'parsing techniques' is a joy. It explains with clarity what is often nightmarish to gleam from papers.

</comment></comment></comment></comment></comment><comment><USER4> Love this book! It's the encyclopedia of parsing: it contains enough information to get a basic understanding of almost any parsing topic, but contains an awesome 417-entry annotated bibliography for references to primary sources.

See my Amazon.com review: [http://www.amazon.com/review/R17E19PSPM2UO9/ref=cm_cr_dp_per...](http://www.amazon.com/review/R17E19PSPM2UO9/ref=cm_cr_dp_perm?ie=UTF8&ASIN=038720248X&nodeID=283155&tag=&linkCode=)

<comment><USER5> There is an extended bibliography online for the second edition you've linked

ftp://ftp.cs.vu.nl/pub/dick/PTAPG_2nd_Edition/index.html

''' The printed book contains only the about 400 literature references that are referred to in the book itself, all of them with annotations. The complete list of literature references comprises about 1700 entries of which around 1100 are annotated. It can be found here. It consists of augmented versions of the Table of Contents, Chapter 18, the Authors' Index, and the Subject Index, each reflecting in its way the added entries. '''

<comment><USER5> I would also like to say that the second edition is one of the finest cs-books I have.

</comment></comment></comment><comment><USER6> It's to bad they didn't put the table of contents online as HTML. I could download the postscript but I'm bouncing instead (boiing!)</comment>


Ask HN: Working on open source full-time vs at a fast growing product company - <AUTHOR> Has anyone here left his job to work full-time on open source projects? How has your experience been?<p>Does one learn more contributing to open source? <comment><USER2> It's probably much less awesome than you think it'll be.

The biggest problem working solo (open source or not) is motivation. Many people find it really hard to do the work without the external pressure of bosses and co-workers. Search HN for freelancing thread for some harsh truths.

It seems like you plan to contribute to someone else's projects, which is the worst of both worlds.

When I do open source (e.g. [https://github.com/sumatrapdfreader/sumatrapdf](https://github.com/sumatrapdfreader/sumatrapdf)), the biggest advantage is that it is my project, I'm the boss and I make all the rules. I get to decide what is done and how it'll be done.

Contributing when other people have a veto over what you do is like having a boss without the benefit of paycheck.

For example, recently I noticed a few improvements I could make to libuv. But then I saw how many PR are languishing for days if not weeks ([https://github.com/libuv/libuv/pulls](https://github.com/libuv/libuv/pulls)) and decided I'm not even going to bother. And this is a well known, active project that is better than most at accepting people's changes. I could give you examples of projects with many outstanding PRs without even a comment from the owner.

Certainly don't do it if you don't have a project of your own to work on.

Possibly don't do it even if you do have a project to work on. You can start by working on open source in your free time.

You also didn't mention anything about money - are you independently wealthy to even be able to afford writing code without someone paying you? Roughly speaking, there's no money in open source.

As to learning - how much you learn is more about how intentional you are about learning and how you go about it rather than whether you work or do open source. At the very least, you'll learn different things.

<comment><AUTHOR> Thanks for your reply.

I understand where you are coming from. Motivation is definitely a problem. The way I see it is that I get to have mentors from whom I can learn in open source(considering I choose the projects carefully) and not a boss.

I have enough money to sustain for 5-6 months. There are a lot of companies which make open source software and are a business too, maybe I could work for one of them in the future.

Another thing is that I have been doing web development now for two years, so I was thinking that contributing to open source would help me learn how things work. Yes, I am thinking of contributing to someone else's project.

Here in open source I can learn core server side technology(mostly in Golang) which excites me rather than working on HTML/CSS at work.

</comment></comment><comment><USER3> I agree with everything kjksf said.

If you can start contributing on the side first.

The majority of your users will be anonymous and only contact you if something breaks or have special requirements. That doesn't mean they will pay for a new feature. Instead you can expect cries for help, impatience and the occasional blame. Your most well-prepared pull-request can be shot down by another project if it doesn't fit their strategy and you will have to shoot down pull- requests from your user once and a while (or forever ignore them).</comment>


Typeform form data breached - <AUTHOR> From their email:
What happened?
We identified the breach at 14:00 CET on June 27th, and remedied the apparent cause of the breach at 14:30 CET on June 27th.
We have since been performing a full forensic investigation of the incident to be certain that this cannot happen again.  The risk of reoccurrence is now deemed low enough to send out this communication. The results that were accessed are from a partial backup dated May 3rd, 2018.  Results collected since May 3rd 2018 are therefore safe and not compromised. <comment><USER2> Just received another email from Typeform today but it seems very Phishy with a "click here link" if you hover over the link it reads [https://typeform.amps5.com/....](https://typeform.amps5.com/....).

They should make a public announcement or a notable media source should confirm it. Or at least put it on their blog.

see Below:

The solution we created is a secure link which enables you to download all of your compromised data. Please remember you'll need to log into your Typeform account first in order to access this.

Here is the link to access your compromised data.

If you would like more information regarding this incident, please refer to this page.

</comment><comment><USER2> Is this real? No response, publicly, from Typefoem

<comment><USER3> It's real, I also got an email - and one (1) month money back after several emails back and forth.

No public acknowledgement, they are probably trying to hide it from the public aside from the customers affected.

So glad I didn't end up using Typeform for a large insurance client. Would have had some explaining to do after this one!

They should really have encrypted the survey results</comment></comment>


Ask HN: What are the best resources to learn about compilers? - <AUTHOR> <comment><USER2> I can recommend the book "Compilers: Principles, Techniques and Tools" [often called "Dragon Book"]. It explains from the basics with all the theory how to write a Leser, parser and much more features. It is one of the few books I bought after university.

[https://en.m.wikipedia.org/wiki/Compilers:_Principles,_Techn...](https://en.m.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools)

<comment><AUTHOR> thanks this looks good.

</comment></comment><comment><USER3> Depends on what you want to learn. Structure and interpretation of computer programs is good for a high-level view of what a compiler does, but it compiles a lisp-like language, so it won't learn you much about parsing or about generating good error messages when given syntactically or semantically incorrect programs (typically more work than parsing correct programs), and it compiles to some abstract 'instruction set', so it won't be worthwhile if you want to know how to wring maximum performance out of any specific CPU.

</comment><comment><USER4> This book is not completionist but instead it's to the point and avoids wasting your time: [https://www.amazon.com/gp/aw/d/155558179X/](https://www.amazon.com/gp/aw/d/155558179X/)

[Edit: it's _Building an Optimizing Compiler_ by Bob Morgan.]

That's assuming you don't want to waste your time reading about parsing, type checking, or serializing an AST into some form of assembly, the parts of a compiler which just aren't that interesting.

</comment><comment><USER5> Assuming you want to know this to make your own programming language...

Step one is to learn about BNF grammers.

When I was in school we used a book called Princples of Compiler Design. I felt this was an excellent bok at the time. It taught me a lot about how toprogram well.

</comment><comment><USER6> [https://github.com/aalhour/awesome- compilers](https://github.com/aalhour/awesome-compilers)

</comment><comment><USER7> a college compiler class

<comment><AUTHOR> done it ;)</comment></comment>


Concrete slab water cooler loop for overclocking - <AUTHOR> http://forums.overclockers.com.au/showpost.php?p=10817635&postcount=172

<comment><AUTHOR> Also, some initial pictures of the copper pipe loop before the slab was poured:

[http://forums.overclockers.com.au/showthread.php?t=800958...](http://forums.overclockers.com.au/showthread.php?t=800958&page=1)</comment>


TorCoin - <AUTHOR> https://drive.google.com/file/d/0B7r4osQgWVqKTHdxTlowUVpsVmJRcjF3Y3dtcTVscFhEaW5F <comment><AUTHOR> I'm Miles Richardson, one of the authors. This research was my Yale senior project, in collaboration with fellow student Mainak Ghosh, Professor Bryan Ford, and Tor community leader Rob Jansen. I thought now was a good time to post, with the EFF initiative on the front page of HN.

We will be presenting our research at the HotPETS 2014 privacy conference in Amsterdam, in July. Please come by if you can. :)

At a glance, the point of this research is to introduce an alternative cryptocurrency, called TorCoin, that rewards relays with coins for transferring bandwidth. Relay operators can then sell those coins on any altcoin exchange. TorCoin is like Bitcoin, but it's bandwidth intensive, rather than CPU intensive. So in effect, relay operators "mine" TorCoins and make money selling them on exchanges.

Let me know if you have any questions or want to discuss. The next step is developing a prototype, and/or a network simulation to run experiments. Anyone interested in helping, let me or any of the authors know. Email is firstname.lastname@example.com

<comment><USER2> What would give "TorCoins" value? It is obvious relays would sell their coins on some altcoin exchange, but who would be purchasing these coins? It seems that the only people purchasing TorCoins would be people looking to donate to Tor relays (this is a totally valid use case, but I was wondering if you have something else in mind.)

Looks really cool by the way.

<comment><AUTHOR> Yes -- This is one of the open questions for discussion, and one of the most important. (HotPETS is a "workshop", which in Academia is the precursor to a conference... papers are meant to be early stage drafts ready for discussion. So we are curious how people would be interested in the currency.)

You're right, one of the early reasons for purchasing TorCoins would likely be donating to Tor. But they are a totally usable altcoin, just like Dogecoin for example. What reason do people have to buy Dogecoin? Not much, beyond using it as a currency or speculating with it as an investment. I could see TorCoin working the same way.

<comment><USER3> Another use you should consider is to follow the FON model - you can spend TorCoins to buy bandwidth from people operating networks.

The more bandwidth you share for TOR, the more free wifi you get. If you only "sell" wifi to torcoin owners, you simply trade internet access time, but running a tor relay would be like "mining" in the traditional bitcoin world.

EDIT: The point I'm trying to make is that instead of "just" the way to create torcoins, this would also create a way to spend it (and provide value to people by spending it).

</comment></comment></comment></comment><comment><USER4> TL;DR: why don't you call your paper "TorCoin.pdf" instead of "paper.pdf"?

Minor nitpick: what is up with PDF naming? When I "save" the PDF to my computer I don't even get the choice to rename it (I guess I could configure that but I am too lazy). So now I have a PDF called "paper.pdf" on my HD. If I ever want to find the paper on TorCoin again, it will fail. This problem seems very common in the world of academic papers.

<comment><AUTHOR> Sorry about that, I changed the name for you. :)

<comment><USER4> Thanks! Well I think it's not just for me, it's just basic "Search Optimization" :-) In fact your paper was downloaded as "(paper (2).pdf" because there was already at least one other paper.pdf in my Downloads folder.

</comment></comment></comment><comment><USER5> Ok, 90% of these "useful mining" projects get the economics backwards. Paying coins to miners does not generate demand for the coin! The miners (in this case, tor nodes) will sell and push the price to the ground. Who will buy the coins? Other altcoin enthusiasts who also don't get the economics?

(And yes, this argument theoretically applies to Bitcoin, but you have to use bitcoins to pay the transaction fee to use the bitcoin network, which has value because of its network effect for use in value transfer).

<comment><USER6> Your last statement is circular. "Network effect in value transfer" exists only when there is "network effect in seeing value in BTC units". You can't transfer value before something has value. Also, act of transferring or fees does not generate value either.

Bitcoin units are rare collectibles. Like gold coins or USD paper bills. They are scarce, hard to counterfeit and they are portable and fungible. They are easy to collect. Once you have a club of people who collect them and speculatively value them, this club can grow (or shrink). If such token is superior than others, then some people will likely sell their inferior tokens in order to acquire superior ones. This way the club grows.

Plus, there is value in liquidity. People generally want to store wealth in something "secure" which means not only secure in terms of storage (personal vault, swiss bank account etc.), but also in terms of purchasing power. The more and quicker I can buy myself something I suddenly need, the more secure my wealth is. E.g. if my computer breaks and I need a new one, my cash will help me buy a new one better than a collection of postal stamps. So people will generally prefer to keep savings in money that is more marketable, i.e. valued by more people. This means that once a superior collectible starts to grow, it will drive the value of inferior collectibles down to zero. (However, if there are currency controls and banking regulation in your country, then you might be stuck with a less marketable local currency.)

Nick Szabo explains how money evolved: [http://szabo.best.vwh.net/shell.html](http://szabo.best.vwh.net/shell.html)

I explained why we all want one universal money: [http://blog.oleganza.com/post/54121516413/the-universe- wants...](http://blog.oleganza.com/post/54121516413/the-universe-wants-one- money)

</comment></comment><comment><USER7> I would like to comment that while the intentions seem very good, I think it may be a severe mistake to use monetary compensation as a means to increase the number of TOR relays.

Framing a situation as an economic transaction has been shown to interfere with other motivations. The classic research paper would be [http://papers.ssrn.com/sol3/papers.cfm?abstract_id=180117](http://papers.ssrn.com/sol3/papers.cfm?abstract_id=180117) where introducing a fine to make parents pick up their children at daycare considerably worsened the situation. The interpretation is that behaviour that was evaluated in a context of prosocial motivations such as being decent towards the staff, keeping a good relation with them, etc, were supplanted by a view that 'it's worth the cost of the fine'. It is worthy of note that going _to_ an economic reference frame is often easy whereas going _from_ an economic reference frame to one based on social values is frequently difficult - it certainly can't be expected to recover spontaneously just because the money is taken out of the picture again.

Now, TOR is very much about prosocial values - liberty, free speech, the right to communicate without being unjustly surveilled, and so on, and because of that, I think it is potentially quite vulnerable to these kinds of effects.

I think there is a substantial chance that running a TOR node is not going to be worth the economic profit in the long run, but that shouldn't matter, because running a TOR node is about something other and something more important than making an economic profit. If we start framing it as a business transaction there is a risk we hurt the (in this context) much more important motivations to operate a node. I think the TOR initiative should be developed on motivation based in the human rights values it naturally supports. And in this case I believe the option of monetary compensation is genuinely at odds with that.

I'm somewhat sad to be saying this, because as I mentioned, it seems to me that the project is based in the best of intentions. Some components of the TorCoin system may be valuable for other service functions in the network.

I summary, I think the psychological effects of introducing the compensation scheme really should be carefully evaluated before any attempts to introduce it in practice. My spontaneous impression is that it is the wrong method of motivation for growing and maintaining the TOR network and should not be introduced at such. If it is after all introduced, that should be done in a manner that is informed of the psychological consequences.

As a preferred alternative we should emphasize the social and ideological benefits of TOR for core motivation and lower the threshold for contributing by making it technically trivial for the contributor and by making the situation as clear as possible about risks and benefits of operating a node.

<comment><USER8> It's _much_ better when running a Tor node is a decision that is evaluated in an economic reference frame.

There are very few tor nodes currently because there societal incentive is very low. If you can actually start making money off it, many more people will start doing it. It's a concept so basic I'm wondering how one can miss it.

And the paper you linked to not applicable to the situation at all.

<comment><USER9> > It's much better when running a Tor node is a decision that is evaluated in > an economic reference frame.

That may be true if the economic incentives available are sufficiently strong, but that is not a given.

<comment><USER8> Even when the reward is tiny, people will try to optimize the process as much as possible.

It would also be great if people provided internet content out of altruism and didn't want any compensation for it, but it doesn't work that way. A lot of websites can only survive by putting up web-ads, even if the compensation is pretty low.

<comment><USER10> That's not a given. Here's an example: A daycare center was getting tired of parents not picking their kids up on time. So they implemented a fee - something small like $5 for late pickup. The result is that even more parents left their kids late! The social pressure of not annoying the daycare employees had been replaced with a monetary transaction: $5 for late pickup, not a bad deal.

If you start paying people tiny amounts of money to run a Tor relay, they will calculate that it's not worth it and they will stop doing it.

<comment><USER8> Again, that paper is interesting because in _that specific case_ the results were counter-intuitive. In the overwhelming majority of instance a financial reward is an incentive.

Parking fines work because people respond more strongly to the monetary incentive than to stern looks. Paying doctors high wages works because monetary incentives work better than handshakes from patients. You don't get a paper published for that, because it's obvious.

<comment><USER10> _And what 's interesting about this experiment is that it's not an aberration. This has been replicated over and over and over again, for nearly 40 years. These contingent motivators -- if you do this, then you get that -- work in some circumstances. But for a lot of tasks, they actually either don't work or, often, they do harm. This is one of the most robust findings in social science, and also one of the most ignored._ [https://www.ted.com/talks/dan_pink_on_motivation/transcript](https://www.ted.com/talks/dan_pink_on_motivation/transcript) I'm linking to a TED talk transcript because it makes the point better than I can.

<comment><USER8> Running a TOR node is not what I would call a "creative endeavor". It consumes electricity and bandwidth, and is a legal risk if it is an exit node.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> Couldn't a tor client establish a bitcoin micropayment channel[1] with each relay node instead? This seems much simpler than introducing a separate currency based on proof-of-bandwidth.

[1] [https://bitcoinj.github.io/working-with- micropayments](https://bitcoinj.github.io/working-with-micropayments)

</comment><comment><USER12> Slightly OT...

Assuming I'd like to 'donate' to TOR by just running a node myself, what would be a cost-effective hosting provider to use for this?

This would be a relay node, not an exit node (I can imagine that hosting providers wouldn't be so happy about exit nodes).

<comment> tech-no-logical I've been running a small exit node for over 5 years, with three providers, none of which have complained (I'm in the netherlands, that might matter).

there's one disadvantage though : a lot of sites refuse my ip because it's an exit node. which is no problem because all my own traffic runs through a vpn anyway...

</comment></comment><comment><USER13> Does this protocol use bandwidth to achieve consensus, or is there another consensus mechanism such as proof of work assumed to be available?

</comment><comment><USER14> Who is working on a "BittorrentCoin?

</comment><comment><USER15> Maybe this somehow be a away of rewarding bitcoin full-nodes</comment>


Method chaining and lazy evaluation in Ruby - <AUTHOR> http://jeffkreeftmeijer.com/2011/method-chaining-and-lazy-evaluation/ <comment><USER2> If I were implementing this, I would go for an implementation where my Criteria objects are immutable. To me, it seems that code like

        crit1 = Criteria.new.where(:name => 'Jeff')
        crit2 = crit1.where(:age => 19)

would result in two different criteria, which is not the case. "crit2 is the original criteria where age is 19" makes sense, but I would not expect that to update crit1.

I don't mind mutability per se, but it needs to be clear what data is mutable and when it is mutated.

</comment><comment><USER3> It seems obvious to me that this would be how to implement this. When I read his initial code, I immediately wondered why he wasn't returning self.

Maybe this familiarity comes with having spent enough time reading through the jQuery internals. Speaking of which, if you like this article, the classic "10 things I learned from the jQuery source" is great reading:

[http://paulirish.com/2010/10-things-i-learned-from-the- jquer...](http://paulirish.com/2010/10-things-i-learned-from-the-jquery- source/)

</comment><comment><USER4> This is a pretty good bite-size sampling of the workings of some of the nice things we take for granted in Rails (like AREL). Rspec is another one that's worth looking into:

[http://stackoverflow.com/questions/3105755/ruby- metaprogramm...](http://stackoverflow.com/questions/3105755/ruby- metaprogramming-how-does-rspecs-should-work)

<comment><USER5> Thanks! I totally agree RSpec's a good library to dive into too. To understand how it works, I wrote Raptor (<https://github.com/jeffkreeftmeijer/raptor>) a while back. I might write about that too, sometime. :)

</comment></comment><comment><USER6> I really enjoyed that. It's something I wish I knew early in my Ruby programming experience. I've done similar things on my own but I really appreciated the approach taken here.</comment>


Bash Infinity: A standard library and a boilerplate framework for Bash - <AUTHOR> https://github.com/niieani/bash-oo-framework <comment><USER2> I have wondered if there could be a CoffeeScript or TypeScript of Bash. Basically a transpiler to Bash that is safer and more convenient to write in.

Then you just ship the bash script with no dependencies. The transpiler might even be smart enough to take GNU/BSD differences into account.... ahh another project idea that I do not have time to implement :(

EDIT: Apparently there is one and it is even the language I would have problem implemented the compiler in (OCaml) [1] . It is shame though it doesn't seem to have much functionality other than checking if files exist and string manipulation. If they had just focused exclusively on Bash/coreutils (and Powershell for windows) they could probably add a lot more features.... Windows seems to be holding them back.

[1]: [https://github.com/BYVoid/Batsh](https://github.com/BYVoid/Batsh)

<comment><USER3> It seems to me there's little reason to not just use another shell or scripting language (Python? Ruby? TCL?)

You're not constrained by the browser only supporting JavaScript here.

<comment><USER4> Ability not to install a dependency (especially something relatively sprawling, like Ruby) may be the whole point.

Some even constrain the scripts to sh, so that even bash isn't a dependency and you can run on e.g. OpenWRT.

<comment><USER5> For avoiding a dependency you can use Go instead of Ruby for example, I don't use Go so I don't how well will it run in something like openwrt.

<comment><USER4> It will likely run fine, but you'll have to prepare a binary for every platform you support, while `sh` is already there.

</comment></comment></comment></comment></comment><comment><USER6> If you need something this elaborate, you really shouldn't be writing it in Bash in the first place.

Anytime I find myself wishing I had arrays, or real data types, or real functions, I stop using shell languages immediately. Shell scripts are really only suitable for the exact same sorts of things I would type myself at a Unix prompt...and since those sorts of things are rarely more than a few lines long, shell scripts shouldn't be longer than that either.

<comment><USER7> I can think of some cases where it might make sense depending on the specific details. For example if you already had tons of scripts that you wanted to wrap and one couldn't install things as root this could be the quickest path forward.

The nice thing about shell languages (like sh and to some extent bash) is they run everywhere with minimum dependancies. This makes them great for things like build environment configuration. Those scripts can easily get very complex and it's nice to have some built-in tools to help keep it under control.

</comment></comment><comment><USER8> Cool idea. Wish it supported Bash 3 (did read the note on that). For some strange reason, sourcing Lib/Array/Intersect.sh is an infinite loop. The full library, apart from that file, sources in a few seconds which isn't terrible:

      $ time { . lib/oo-bootstrap.sh ; for f in `find lib/ -type f -name '*.sh' -not -name oo-bootstrap.sh` ; do echo $f && source $f ; done ; }
      lib/Array/Contains.sh
      lib/Array/List.sh
      lib/Array/Reverse.sh
      lib/String/GetSpaces.sh
      lib/String/IsNumber.sh
      lib/String/SanitizeForVariable.sh
      lib/String/SlashReplacement.sh
      lib/String/UUID.sh
      lib/TypePrimitives/array.sh
      lib/TypePrimitives/boolean.sh
      lib/TypePrimitives/integer.sh
      lib/TypePrimitives/map.sh
      lib/TypePrimitives/string.sh
      lib/UI/Color.sh
      lib/UI/Console.sh
      lib/UI/Cursor.sh
      lib/util/bash4.sh
      lib/util/class.sh
      lib/util/command.sh
      lib/util/exception.sh
      lib/util/log.sh
      lib/util/namedParameters.sh
      lib/util/pipe.sh
      lib/util/test.sh
      lib/util/tryCatch.sh
      lib/util/type.sh
      lib/util/variable.sh

      real	0m2.490s
      user	0m1.240s
      sys	0m0.834s

Sadly it broke my already installed bash completion:

      $ ls # + <TAB>
       x UNCAUGHT EXCEPTION: quoted
      gsed: -e expression #1, char 2: invalid usage of line address 0
         |}  [bash_completion:0]
         |}    * _filedir [bash_completion:1196]
         |}    x COMPREPLY=( $( compgen -P "$prefix" -W "${COMPREPLY[@]}" ) ) [bash_completion:1196]

       ! Press [CTRL+C] to exit or [Return] to continue execution.

I don't understand why somebody would use Bash in this way though, maybe just for fun?

<comment><USER9> It is odd. It's not like you can assume bash is everywhere, it's not installed by default on some BSDs (unless this is really an sh standard lib, not bash). You're probably better off going with Perl, it probably exists on the system you are targeting (and it's quite heavy, but it you want to you can package it into an executable for Windows if you need).

<comment><USER10> Do you know if anyone has done a survey of what software is on almost all the BSD or Linux boxes for deployment purposes? Especially, transpiling unsupported X to supported Y.

<comment><USER9> No, but that would be wonderful! A caniuse.com for operating systems, listing whether a major for of software (library, interpreter, compiler, shell) is available as part of the default install, part of additional packages from the core set during install, from additional packages blessed by the provider but not available through install media, a third party repo, source compilation, or is known to not be functional.

<comment><USER10> That's pretty nice link. Thanks for it. Yeah, that but for basic software.

</comment></comment></comment></comment></comment><comment><USER11> This is a really interesting project for testing the boundaries between "shell scripting", "scripting" and "programming".

The semantics are advanced enough and different enough, that if I needed them, I would probably write the code in my favorite "scripting" language such as Python or NodeJS.

If Bash Infinity became ubiquitous, would it displace that "scripting" sweet spot that has been pretty constant with Perl/Python/Ruby for two decades? Or are you better of with a dedicated scripting language?

Of course you can write "shell scripts" in Haskell (or insert your favorite lang), but the tooling and rigor pushes you into "programming" territory.

</comment><comment><USER12> Project homepage: [https://invent.life/project/bash-infinity- framework](https://invent.life/project/bash-infinity-framework)

</comment><comment><USER13> Recently xonsh became a very good drop-in for Bash and if you know Python, then it's just a few things to learn.

[http://xon.sh/](http://xon.sh/)

</comment><comment><USER14> On another note, what is this rather distinctive monospace font? [https://raw.githubusercontent.com/niieani/bash-oo- framework/...](https://raw.githubusercontent.com/niieani/bash-oo- framework/master/docs/exception.png)

</comment><comment><USER15> I often feel Bash is too limited, and the language really could be extended. For instance passing anything by reference is a huge pain to deal with (using global variables is a very ugly workaround).</comment>


The Uber Engineering Tech Stack, Part I: The Foundation - <AUTHOR> https://eng.uber.com/tech-stack-part-one/ <comment><USER2> Can anyone answer why they use both Spark and Hadoop (and storm)?

<comment><USER3> They mentioned using hadoop for file storage - perhaps they are just using HDFS and not MapReduce.

Otherwise, Spark is relatively new, so they might have some older infra/jobs in Hadoop.

Storm and Spark streaming work a little differently (real-time streaming vs "micro-batching) and apparently have different use cases, but I'm not totally sure what the practical difference are here either..</comment></comment>


WordPress 2.9 launched - <AUTHOR> http://wordpress.org/development/2009/12/wordpress-2-9/ <comment><USER2> Anyone upgraded? As usual with WordPress upgrades, I wonder, does it break anything from 2.8?

<comment><USER3> I've been running on trunk, with nightly updates, since 2.5, and only once had any issues.

<comment><USER2> Thanks everyone! (I had problems with upgrading from 2.7 to 2.8 due to WP changing how it handled feeds, and my custom redirection rules in .htaccess didn't work).

</comment></comment></comment><comment><USER4> I'd give it two weeks until it's hacked. Anybody using Wordpress is asking for trouble.

<comment><USER5> You know, I hear this all the time, but can you elaborate on exactly what makes Wordpress so inherently insecure?

<comment><USER6> As a guess: track record?

<comment><USER7> WP have been around for a while, is hugely popular, and many of its vulnerabilities have been discovered and dealt with. Its track record makes it more secure, not less.</comment></comment></comment></comment>


PigletC, a toy C-like language compiler for PigletVM - <AUTHOR> https://github.com/true-grue/PigletC <comment><USER2> First Look: Code looks very succinct and well-written. Useful for thinking about other compilers in Python.</comment>


Augmented Reality 3d Video on iPad with Kinect  - <AUTHOR> http://www.youtube.com/watch?v=R8tiHXDiqsw This is an awesome way to demonstrate what can be done with the Kinnect and the iPad String Augmented Reality SDK <comment><USER2> So damn clever... releasing an SDK for the Kinect[1] was one of the smartest things Microsoft could have ever done and I think has gone a long way to contribute to it being the fastest selling piece of hardware in history[2] (did anyone know that? I sure didn't, and barely believed it reading it).

This reminds me a lot of what Johnny Lee did with the Wii soon after it was released with head-tracking 3D[3]

Part of me wants to stop using a computer and take up beet-farming because the cool factor seems so much less than what these guys are doing.

Anyone on HN actively toying with a Kinect and want to share some video?

[1] [http://research.microsoft.com/en- us/um/redmond/projects/kine...](http://research.microsoft.com/en- us/um/redmond/projects/kinectsdk/)

[2] [http://www.vgchartz.com/article/83375/kinect-is-the- fastest-...](http://www.vgchartz.com/article/83375/kinect-is-the-fastest- selling-videogame-hardware-of-all-time/)

[3] <http://www.youtube.com/watch?v=Jd3-eiid-Uw>

<comment><USER3> I have no video, but I was able to get a WebGL-powered game world running that was controlled through a Kinect using DepthJS. This was done in just over a day of playing around. Was pretty cool when it worked.

The source code is available on github at <https://github.com/thoughtworks/kinect-spike>

Edit: My co-workers were looking at me with concerned looks that day. I would stand up and wave my arms for 30 seconds and then sit back down at random times throughout the day. :)

<comment><USER2> Very impressive Derek -- how easy was it to work with the Kinect data via the API? Is the information coming out of the sensors pretty straight forward or does it just come in as a video feed with additional metadata (positional?)

<comment><USER3> The way that DepthJS works is through three technologies: libfreenect[1], OpenCV[2] and then a simple Tornado (push) server. libfreenect is what grabs all of the data from the Kinect device and OpenCV is the 'interpreter'. This translates to just getting events such as 'move' in the browser.

[1] <http://openkinect.org/wiki/Main_Page>

[2] <http://opencv.willowgarage.com/wiki/>

</comment></comment></comment></comment><comment><USER4> Here's the launch video for String SDK. Looks pretty impressive, much smoother than many other implementations I've seen

<http://www.poweredbystring.com/official-launch>

Great demo video about 1:30 in to the launch video.

<comment><USER2> It's hard to tell how it performs in real life (not a launch video) but that being said the demos of it in action were impressive.

I wonder if this is the form the Holodeck/3D technology we've all been waiting for since the 70s will be in.

AR of your living room mixed with a glassesless 3D TV[1] and some motion controls. Very exciting stuff.

[1] [http://3dradar.techradar.com/3d-tech/52-inch-glasses- free-3d...](http://3dradar.techradar.com/3d-tech/52-inch-glasses-free-3d-tv- hits-japan-23-05-2011)

</comment></comment><comment><USER5> Isn't the new Nintendo tablet doing something like this?

Also, why wasn't the piece of paper on the table showing up, only the books?

<comment><USER6> Ya it looks like the "augmented reality" part was faked. The angle of the video never quite matched up with where he was holding it either. In any case it's still a nice proof of concept.

<comment><USER5> I found the Nintendi E3 Wii U Demo.

It gets interesting around the 2:40 mark (the whole thing is pretty impressive)...

<http://www.youtube.com/watch?v=DowHrWluHxg>

</comment></comment></comment><comment><USER7> Very, very cool. I want to use this with my own app!</comment>


Using cohort analysis to make your funnels more actionable - <AUTHOR> http://blog.mech.io/post/48631870585/using-cohort-analysis-to-make-your-funnels-more

<comment><USER2> A thoroughly underwhelming post, in my humble opinion. Could have been summed up in 4 sentences rather than a whole post's worth of blogspam.

<comment><USER3> my thoughts exactly. i'd love to see an actual tutorial on how to do this with dummy data.

</comment></comment><comment><USER4> The two HN discussions I found that seemed to have useful info on cohort analysis:

[https://news.ycombinator.com/item?id=5245571](https://news.ycombinator.com/item?id=5245571) (Cohort analysis - User retention in a Rails application, 203 days ago)

[https://news.ycombinator.com/item?id=4122000](https://news.ycombinator.com/item?id=4122000) (How we reduced our cancellation rate by 87.5%, 450 days ago)

The second link references the following class: [http://www.skillshare.com/classes/business/Data-to- Dollars-U...](http://www.skillshare.com/classes/business/Data-to-Dollars- Using-Cohort-Analysis-to-Plug-Your-Leaky-Holes/794424332/2002269540) ($35; 90 minutes in NY)</comment>


Ask HN: Can I write all my doco using markdown? - <AUTHOR>

OK. I'm tired of having to use Word, Pages, whatever the word processor is when it just seems to get in the way of getting words and information down.
I coding and website land I have pretty much transitioned to using markdown everywhere thanks to (joDoc and Jekyll, Django's markdown support is helpful too), but when it comes to writing doco for clients it's back to word processors.
How can I be free from this enslavement to GUI tools and use markdown and <insert your favorite text editor here, so as not to spark debate> to author these docs? <comment><USER2> Here's an experiment we are running here for our technical documents.

We have an Etherpad server (<http://etherpad.org/>) we heavily use, and we've used it to write some of our technical docs in Markdown. We use other pads to define HTML templates. Then, we have simple web app which merges a chosen HTML template with the Markdown content, which lets the user preview the rendered results before saving the final HTML output.

Advantages: you get all Etherpad's realtime collaboration goodness, automatic version control and revision history, the HTML templates can be edited simply (and restricted to editing by certain users), it's pretty quick to pick up. Disadvantages: Etherpad is primarily text based so you're SOL if you need diagrams etc, slight complexity of the parts (templates, content, web app) to make it run.

<comment><AUTHOR> Sounds like a pretty nifty way of doing things, I might try running up an etherpad server at some stage and going down a similar track.

I'm setting something up at a shell level using Jekyll (<http://jekyllrb.com/>). Won't have the collaboration goodness, but I guess it could be transitioned over to Etherpad at a later date.</comment></comment>


Hillary Clinton wins VR experience - <AUTHOR> http://vr-retreat.com/hillary-wins-vr/ <comment><USER2> Democrats always embraced tech more.

<comment><USER3> This is exactly the kind of partisan talk that leads to infighting, like Oculus vs Vive... Every Republican knows the Vive is better.</comment></comment>


CRM Is Not Enough – Announcing the Platform of Independents - <AUTHOR> https://marketingland.com/crm-is-not-enough-nearly-200-martech-companies-sign-pledge-to-change-the-data-ecosystem-for-customers-274540 <comment><AUTHOR> This seems like a very principled move by marketing tech companies. If they can make it work, we can hopefully expect other domains to follow open standards too?</comment>


What are the differences between the transaction isolation levels in databases? - <AUTHOR> https://github.com/ept/hermitage <comment><USER2> In relation - I've always liked the "Chaos" value from msdn for their IsolationLevel enum

[https://msdn.microsoft.com/en- us/library/system.transactions...](https://msdn.microsoft.com/en- us/library/system.transactions.isolationlevel\(v=vs.110\).aspx)

</comment><comment><USER3> Past discussion of related blog post: [https://news.ycombinator.com/item?id=8658584](https://news.ycombinator.com/item?id=8658584)</comment>


The Internet Archive Now Lets You Play 900+ Classic Arcade Games in Your Browser - <AUTHOR> http://techcrunch.com/2014/11/01/the-internet-archive-now-lets-you-play-900-classic-arcade-games-in-your-browser/

<comment><USER2> [https://news.ycombinator.com/item?id=8542318](https://news.ycombinator.com/item?id=8542318)</comment>