Netflix Starts Using VP9 Codec, Saving Up to 36% of Bandwidth - <AUTHOR> http://variety.com/2016/digital/news/netflix-offline-downloads-codecs-vp9-1201932502/ <comment><USER2> A lot more technical information over at Netflix's blog [0].

I'm unsure what to think about VP9 gaining some decent ground. Firstly, it's great that effort is going into more effecient video streaming, considering how difficult to compress and encode quality video can be. However, the chosen standard doesn't seem to be the best on offer.

Just sort of Google randomly choosing one [1], and Netflix hedging their bets that others will adopt if they do, so the codec continues to get improved, and they aren't left hanging with the bill if everyone else ignores it.

[0] [http://techblog.netflix.com/2016/12/more-efficient-mobile- en...](http://techblog.netflix.com/2016/12/more-efficient-mobile-encodes- for.html)

[1] Not quite, Google developed VP9 themselves.

<comment><USER3> Netflix and, well basically everyone of note in web video, from Amazon to Microsoft, is now on board with the Alliance for Open Media and their AV1 codec, which is largely based on VP10. So this just gives them a head start on that.

On Netflix's YouTube channel they have technical presentation on some of the research they are doing on codec quality and objective metrics.

[https://m.youtube.com/channel/UCK2q3q4dshZHzn- EP3ZdUeA](https://m.youtube.com/channel/UCK2q3q4dshZHzn-EP3ZdUeA)

</comment></comment><comment><USER4> Why not H.265? Other benchmarks suggest a comparable or even higher benefit moving from H.264 Main to H.265 Main, and hardware support for decoding is already present in many phones.

<comment><USER5> H265 is a patent licensing minefield at the moment.

</comment></comment><comment><USER6> Can somebody elaborate on how many Android devices support VP9 with hardware decoding (wrt to AVC Main support)? The article is shallow on this, but I think it's an important point, because it affects how much battery is being consumed on the client side, and thus user satisfaction with the service.

<comment><USER7> Some info here: [https://en.wikipedia.org/wiki/VP9#Hardware_encoding.2Fdecodi...](https://en.wikipedia.org/wiki/VP9#Hardware_encoding.2Fdecoding_support)

</comment></comment><comment><AUTHOR> Note to observers/moderators, title of article: "How Netflix Keeps Downloads From Eating Up All Your Phone Storage"

Title-page of site: "Netflix Starts Using VP9 Codec, Saving Up to 36% of Bandwidth"

Site-title seems more descriptive/of interest to HN.</comment>


Goodbye Google Reader - <AUTHOR> http://www.mondaynote.com/2013/06/17/goodbye-google-reader/

<comment><USER2> Goodbye GR... won't miss you much due to [http://multiplx.com](http://multiplx.com).

<comment><USER3> Agreed, although I used [http://feedly.com](http://feedly.com). Google Reader's interface was never particularly good IMO.

</comment></comment><comment><USER4> 2 more weeks to go

</comment><comment><USER5> goodbye :( you will me missed

<comment><USER6> Been using GReader for the last 7 years or so. I guess I'll miss it a little, though it's mostly nostalgia. With so many people launching their own readers (myself included), I'm sure you'll be able to find a good replacement.

</comment></comment><comment><USER7> never say...</comment>


We, the universal - <AUTHOR> https://medium.com/p/bac163e52ec

<comment><USER2> Interesting, but I would have to disagree with 'creating the concept of God', there was an (apparent) external influence in most (all?) cases, whereas a computer was all internally conceived.</comment>


Ask HN: "Contact us for pricing" nonsense - <AUTHOR> I am looking to purchase advanced communication device manufactured by specific vendor - but every single website has this "Contact us for pricing" links.
This certainly is an invitation to sales dance and subsequent spam.
I'd rather avoid that and buy from reseller/store that is clear and opened about their pricing.
This "contact us for pricing" approach certainly doesn't help to win business (at least mine).
Just wonder if this kind of policies are dictated and enforced by actual manufacturer or is that a habit of a specific industry? <comment><USER2> A few possible reasons for this:

\- You aren't their target audience. I come from enterprise SaaS, where we often force people to talk to someone, and working with sales is not a problem for the people we care about. I know that someone who has your reaction (calling it a "sales dance" and assuming you'll be spammed) is unlikely to be a real buyer, since real buyers are accustomed to the sales process. They also appreciate that sales reps for this type of product can be really valuable. Maybe you're the exception here, but it's worth losing your business to filter out bad leads.

\- They've done the math and realized that when they get someone on the phone, they are better able to build a long term relationship and have a substantially greater customer LTV. They lose some customers, but the ones they retain end up being higher enough in value to offset the loss.

\- The product can't be sold as a standalone item - it requires setup and integration, and without understanding what you have in place already, they can't give you a quote. Of course, this seems less likely for a hardware solution.

\- Related to the above, it's possible that it's a complex product to set up, and they've found that if they don't get you on the phone, you're likely to screw up the setup and get mad at them and/or return it. Better to scare you away up front if you're ultimately just going to take up time and end up getting a refund.

Ultimately, the answer to this question and any like it is that if they're competent, they do this because they've done the research and determined that it is better for them (typically in terms of revenue generation, but really better is defined as they see fit).

<comment><USER3> I work around enterprise SaaS sales also and the other reason is that we don't want to give our pricing strategy to our competitors.

<comment><USER4> Does it mean your pricing isn't competitive against competitors?

Otherwise, wouldn't showing the pricing just upset your competitors?

Also, can't one of your competitor ask you for a quote and figure that out as a fake customer?

<comment><USER5> Possibly, but not necessarily. You might want to lead with your value before price, especially in an industry where it's difficult to see at first look what the differentiators are. Alternatively, public pricing could start price wars, leading both companies to unsustainable pricing. Or maybe you want to be able to give strategic customers specific discounts. These aren't pricing strategies to make sure your customers get the best price possible -- they are designed to allow me, as the creator of some value, better control over how that value is perceived and deployed.

For a business, you want to build relationships, not just have transactional customers. The more custom or integrated your solution is, the more important this is. (Also, it's the best way to make sure your customers are deriving the most value from your product, which is a win-win.)

Yes, competitors can do that, but that additional friction means they won't stay up to date, and you have a chance to discover what's going on.

<comment><AUTHOR> As a customer - in this case I don't want to build "relationship" with some random middleman reseller.

I know exactly what i want and rather avoid wasting time on upsells thrown at me.

I understand that sales departments strongly prefer "bait and pimp" vs. "sell and forget" strategy - but some customers and often significant ones will give business to competitors if former is the only strategy to generate revenues.

</comment></comment></comment></comment></comment><comment><USER6> For buying a piece of hardware — especially one that doesn't require some complex sw to go with it — doing the "contact us" thing definitely turns a lot of people off. When I see that I think they will start off by pumping me for information about my company and basically trying to figure out if I can afford a high price, then they ask me what my application is and if I'm aware of any other solution than theirs. Then they give me the price and if I say no thanks I proceed to get spammed by them for 6 months about whether I want to buy the product or not..

<comment><USER7> Care to name and shame? Or are you talking about many different experiences.

I've never really had this problem but my sample size is small.

</comment></comment><comment><USER8> If you feel like talking to someone over there wouldn't add any value, simply hire a freelancer with decent English on Upwork to act as your 'representative' and take the call with their sales rep to find out the price. I've absolutely done that before to avoid talking with low-level account executives who don't add any value but just want to 'build a relationship' and upsell you etc.

If you're a senior person in your workplace, I suppose you could make a junior employee do the call, with strict instructions not to give out your name or contact info to the sales rep. A bit mean but also a perk of seniority

<comment><USER9> Wonder if you could go really low-end and successfully use Amazon Turk for this?

<comment><USER10> Or train an AI from the kennel and name her the real Duplex.

</comment></comment></comment><comment><USER11> If you really want to know the price of such a device, it is likely that someone in the US federal government has bought it before. If you know the name or even better have a part number, search for it in combination with GSA or DLA. I have managed to get pricing for all sorts of instruments that way.

<comment><USER6> Very interesting.. classic useful response from the HN community! Any chance you could point me to an example so I can use this technique in the future?

<comment><USER11> I've used it for various biomedical equipment before like PCR machines and a Mass Spec. Here is a list I found while trying to find out the approximate cost of an AKTA FPLC([https://inventory.data.gov/dataset/2d2da689-5342-4024-b9e1-f...](https://inventory.data.gov/dataset/2d2da689-5342-4024-b9e1-fb6bc9ec79eb/resource/64873a3a-432f-46f4-96e5-4fd0189f71ac/download/ebuyawardsfy2016.xlsx)). The pricing may swing wildly from what you might pay based on various factors, but at least you have a starting price.

As an example, how about a ballpark figure for everything that AT&T has for internet connectivity. Search things like "AT&T OC3 GSAadvantage" with and without PDF and I got this([https://www.gsaadvantage.gov/ref_text/GS35F0249J/0TQT0R.3OCL...](https://www.gsaadvantage.gov/ref_text/GS35F0249J/0TQT0R.3OCL2C_GS-35F-0249J_ATTPRICELISTCONTGS35F0249J.PDF))

If the government buys it and it isn't secret or a one off item or service, there is pricing for it on the web. For some, the price won't be useful. If you looked up contracts for something like tech support, it might not be possible to find out what exactly they were asking for. But if it is something you can put a part number on or a service that is somewhat commodity, you should have a good chance of getting some sort of pricing.

</comment></comment></comment><comment><USER12> I often prefer the self service model, but other times I like talking to sales. Some of them are good (just happened yesterday) where they take time to understand your company and goals. He suggested their cheapest plan. You can often get deals. I know of a cloud hosting company that cuts outrageous deals if you talk to sales. Another gave a potential customer 80k in credit to leave AWS.

Most sales people aren't very good and there is a bad stigma that perpetuates

<comment><USER13> If I believe that outrageous deals are available, then I can't help but think that whatever I do, this company will end up outrageously ripping me off if I do business with them. After all, why else is an outrageous deal possible?

<comment><USER12> Because their sticker price is 2x the competitors and they are willing to take a loss to get people on the platform. They are not winning in the cloud wars.

<comment><USER14> Would you trust such a company over AWS or Azure?

<comment><USER12> Nope, I use GCP first

<comment><USER14> I don't have anything against GCP on a technical level - I don't know enough to. But their enterprise support is abysmal and that whole "No one ever got fired for buying AWS/Azure".

<comment><USER15> But they might get fired buying from IBM

<comment><USER14> I'm not sure. I think IBM will be selling systems compatible with the mainframes of the 70s until the heat death of the universe.

<comment><USER12> I can sell you some IBM if you'd like, official reseller.

Working on the GCP equivalent if you prefer :]

<comment><AUTHOR> IBM better get their act together to make your (reseller) life easier.

I used to work with IBM big data analytical tool and honestly you should get a medal for closing sales on this garbage.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> I ask this question a lot from new clients coming in for marketing or ecommerce rebuilds who have this style pricing.

I get three answers

1\. Not allowed ( manufacturer/vendor regs)

2\. High Touch sales, "anyone who was over worried about price isn't likely a buyer/good match" real buyers know the price range and we need to customize/vet the buyer

3\. Highly customizable product that they cant or won't invest into making possible to pre-price online, probably wont get added to a cart and shipped or sold without a buyer wanting to actually talk to someone)

( for example, a 150k Caterpillar with various attachment options)

<comment><USER17> > Highly customizable product that they cant or won't invest into making > possible to pre-price online, probably wont get added to a cart and shipped > or sold without a buyer wanting to actually talk to someone)

This isn't a good reasons not to have a guide to the pricing though (e.g., the base price plus the rough prices of popular options). That can be super useful for determining if this is possibly something the buyer might want to buy, and saves them a ton of time calling salesmen.

The other two reasons are reasonable.

<comment><USER18> If you're selling ~$150k worth of customizable hardware and services to improve people's business processes, I'm not sure there are many genuine buyers out there that haven't got a few minutes to discuss which of the many, many options might be relevant to their needs rather than rely on probably unrepresentative "base price" and "popular" options on a website. If there are executives that evaluate ~$150k range business process improvements based on published sticker prices to save time on calling salespeople, their company really, really ought to be taking decision making power away from them.

</comment></comment></comment><comment><USER19> I had the same issue a few months ago; I wanted to get some advanced networking equipment and it was all "call for pricing". It was clear that the reason why was to determine if I was actually knowledgeable enough to handle advanced equipment as it's considerably more complicated than a home router.

The sales process did take much longer than buying something off of Amazon, which was very annoying. But I did get it relatively quickly and it did work for my purposes, so there's that.

</comment><comment><USER20> When a product is super complex, fixed pricing might not make sense. I wouldn't ask a general contractor "how much would it cost to remodel my kitchen?" before they have seen my home (especially because I don't because a kitchen!)

<comment><AUTHOR> It's more like: "how much does it cost for that specific model of a washing machine?".

You shouldn't be forced to "call for pricing".

<comment><USER20> Even if you know what washing machine you want, that might not be the one you want to buy. An experienced salesperson will ask what you need, why you need it, and help you understand your options. They aren't there to take orders and be micromanaged.

If you want to walk in with the attitude that you know what is best, I recommend writing down what you need and why you need it in advance, so you can communicate you know what your needs are without insisting on a solution. The recommended thing may or may not be what you thought you wanted. If you can't write down your needs clearly and concisely, buying what you thought you wanted is likely to turn into an expensive waste of time for all parties.

Source: was good salesperson in a former life

</comment></comment></comment><comment><USER21> In a former job where I was in applications engineering, the cost of getting the customer up to speed (from a support point of view) was many times the product price. In a couple hundred sales cycles, there was only one we would have made money on in qty 1.

And value based pricing...

</comment><comment><USER22> I'm wondering about this too, since I recently am looking for a payment processor that also handles VAT. Most of them don't have the pricing, and one of them even called me up after I asked for prices. This is a total waste of time on my side.

I also have the feeling that they are ripping me off if I don't negotiate, because why else wouldn't you be upfront with your pricing?

Nice to see that Atlassian became really successful with their upfront pricing.

</comment><comment><USER23> You can try buying used if that works for you. You will get a way better pricing and they will either be sold to you on a set price or auction price.

If that isn't your cup of tea, call the salesperson. And tell them you need this now as a replacement part. If your hardware cycle is 3 years down the road, they will wait 3 years to find you again to try to sell you $100k+ in gear.

</comment><comment><USER24> I personally love it because then I know I can't afford it

</comment><comment><USER25> We had a strict policy that we didn't do business with companies that hide their pricing. For anything.

<comment><USER5> Have you evaluated whether you were cutting off your nose to spite your face? In a commodity market, this makes sense. But if you're eliminating potentially valuable and unique solutions to your problems because of a principle about up front pricing, you might be hurting your own business. After all, the whole concept of buying something like this is that it adds more value than it costs...

It's a suboptimal process to limit options because you personally are affronted by having to talk with someone on the phone.

<comment><USER9> Doing things on principle is inevitably less economically efficient, otherwise it would be indistinguishable from making an optimal selection regardless of principle? I don't think that implies you should discard all principles.

I've done the same thing with a £60k piece of farm machinery recently. I took the time to write to the more opaque dealers, apologising for not considering them but noting that their pricing wasn't transparent, and therefore they lost the business regardless of the price they would have quoted.

If more of us don't do this, we'll be stuck with sleazy salesmen and the "how much can we extract from this gullible customer" model indefinitely.

<comment><USER26> Thank you.

This is not only taking the long view, but really a form of public service.

A million other selfish thoughtless people have it as good as they do, only because some number of less-thoughtless people stood on principle once in a while and simply demanded better rather than taking the 100% path of least resistance 100% of the time.

<comment><USER5> An alternative narrative is that standing on principle (for things like this) is at best orthogonal to the reasons I (us) have it as good as we do.

Just because the stories about people standing on principle are sticky doesn't mean they cause good outcomes. (Also, there's the other side of the coin, where people who stand on principles cause great harm, intentionally or otherwise.)

</comment></comment></comment></comment></comment><comment><USER27> Manufacturers typically dictate reseller pricing and marketing to serve the needs of their brand ("you can't sell below x as that makes our product seem cheap") so dictating a sales tactic isn't unimaginable. Especially if the tactic is designed to sell services and what not the manufacturer offers via the resellers.

My other guess is that the resellers have figured out that while they cannot fleece you on the price of the device - they all sell the same, identical hardware after all - they can charge you extra for services, support insurance and extra options as long as those prices aren't readily available for comparison.

<comment><AUTHOR> To me the clear winner of business would be the site that has available pricing for base + options. Literally they can make an easy $2-$4k sale just by adding [Buy now] button, considering that the rest of the pack are playing tough sh.. to get with the prospects.

I also found one site that has "add to card to reveal pricing" \- which is perfectly fine with me. The problem with that specific site is that they only carrying outdated models.

PS: this is hardware device, not SaaS or service.

<comment><USER28> "add to card to reveal pricing" is just bad UX, without any gain (assuming there is one from the sales dance) to anyone.

<comment><USER3> It's an end run around contract clauses that tell them they can't advertise pricing until there's a qualified lead (or similar).

</comment></comment></comment></comment><comment><USER29> Very common for legacy enterprise software products repackaged as SaaS. I hate it for the friction it creates. Self-service with transparent pricing is the way to go for me and preferably coupled with payment convenience.

</comment><comment><USER30> Some thoughts after reading your various responses in this thread:

1\. You seem to be looking for commodity pricing -- that is, you just want the product/service, and you do not want any others services related to it.

2\. Most (all?) of the vendors are unwilling to provide open commodity-level pricing. This makes me think that one of two things (perhaps both) are in play. One is that the margin on commodity-level pricing just isn't worth the time. If that's the case, good luck finding a vendor -- maybe go straight to the manufacturer.

3\. The other (more likely imho) is that the device requires something else to reach its full potential/value, and that something else is variably priced (e.g., set up, follow up, maintenance, etc.). If that's the case, make the call and either buy their expertise or demonstrate that you do not need their expertise. You can get to a near-commodity price fairly quickly if you actually know your stuff.

4\. You seem to think that the "song and dance" is a waste of time. As a provider, I want satisfied customers. I want to add value to their experience purchasing through me. There exist cases where certain unsophisticated customers think that all they need is a product or service, and they do not realize that the real value add is in something else (e.g., the proficiency with which the product is used, onboarding, etc.). There are a lot of products and services for which this holds true. I have declined to do business with people because I knew they would use the product/service I was selling them in an inefficient manner _and then blame me_ for it not working.

5\. My general thought about customers like you who are not even willing to pick up the phone is that I do not want you as a customer. If you can qualify yourself as needing absolutely zero support, I am happy to sell you a product or service at a lean margin, and I have a sales process that accommodates that. If you do not trust me to qualify you as a customer, then feel free find someone else to do business with.

6\. Beware of becoming a pathological customer. You may find that somehow your options are much narrower than others around you. Good business people engage in mutually beneficial relationships -- show that you can add value to the relationship (money is just one factor).

</comment><comment><USER31> It may certainly be dictated by the manufacturer. Some products simply require someone properly trained to make sure people are buying correctly. This might not be your case.

Now, a contact us approach sounds like a huge waste of time for you. You know what you want. You can describe it exactly. Know what? Most people don't. They need and appreciate the help.

A contact us approach is basically the sales process adjusted to the market needs.

It is a habit of many industries because purchasing is a complex process most people dont get. Throw in the complexity of a corporation and you have a recipe for disaster.

</comment><comment><USER32> I have personal experience working on both the software and marketing site for the software product like this.

In particular, we had a very high-touch sales process that started with cold- calling or references. The marketing website was more likely to act as an aid to a cold call than as Google traffic.

Second, it was a more abstract product with a custom implementation that had to pull data from whatever pre-existing software they were using.

Also, it was a very young product that was constantly evolving with ad-hoc deals and pricing. Some would buy the software package outright with full integration, demanding high-touch support and training. Others were willing to go with our "development partner" package, with a 50% discount off any custom implementation - but we also retained the ability to decline those customizations if they didn't fit with our vision.

Also, the product was so abstract, it was very rare that its potential would be understood without a conversation.

Finally, often the person "tasked" with buying the software was not actually the holder of the purse strings. They usually needed a boss or other stakeholder to sign off and write the check. So it wasn't really advantageous to discuss the price and sticker-shock that the lower level employee might experience, vs the business owner who was more used to making those types of purchases. Really, we needed to turn the person who was doing the inquiry into an advocate for our product within their organization. If they could advocate the value of our product to the check writer in an effective manner, it reduced the friction for us to come in and tell the check writer the price of the solution. Then we let them make the judgement call.

Another part of this is that since the sales process was very high touch, and since we were so small. There was a serious opportunity cost to incur if our sales guy was wasting his time creating materials for a particular customer who wasn't going to buy. So we would quickly qualify the customer by getting them to pay a non-trivial amount of money to RESEARCH the implementation. If they paid that qualifying cost, we would ask for information on all of the software systems they had in place, along with database schema information. Then we would pour over it to determine what we could do with that data, if it would be a successful implementation, and if there was any data missing that we'd need to collect. Either from a UI or through a bulk dump from some obscure archive. That was definitely not worth the opportunity cost of a barely interested customer.

Overall, I think we were trying to be honest and fair. Not trying to price gouge or anything, but it was a very complicated product, and it was a complicated sale.

Now being a technically minded business owner, I have been on the other end of this and found it to be extremely annoying. But it is not too often that whatever product I am looking at is being researched directly by a business owner with check-writing ability, and one who is also coming from a technical background. So while it annoys me, I get why the company/product is choosing to do that.

</comment><comment><USER33> one thing everyone so far is missing: often the product being sold is vapor ware

<comment><USER34> Sometimes, anyway. The company wants to gauge interest before committing to development. Availability: 6 months' lead time. Still interested?</comment></comment>


Any tips for networking at events? - <AUTHOR>

I am a comp sci student starting to network around my university. Any advice on networking or meeting connections would be appreciated. <comment><USER2> Besides that my best advice will be when meeting new people switch from "I want" to "I can offer" this way you'll make yourself useful to the new connections you meet. Think of your skills that can make you valuable. Hope it helps. Isaac.

</comment><comment><USER2> Hello, What are your issues when trying to Network in your university ? We are working on a networking + location solution, so I'll be glad to see if we can help you, send me en email to: email@example.com if you are interested. Thank you. Isaac.</comment>


Ask HN: Speaker independent voice recognition for auto-generated transcriptions? - <AUTHOR>

Does anyone know of any code for doing speaker-independent voice recognition? I would love to be able to automatically transcribe various pieces of media.
I already know nothing is going to be even close to perfect. Is Sphinx still it? Is there anything out there that's great?
The code for YouTube's automatic transcription would be ideal. Someone tell me Google already open sourced it? </prayer> <comment><USER2> Check CMU Sphinx. Its quite dated though. To get any decent performance out of it you'll have to train it and generate the databases (Acoustic Model and Language Model) yourself.

Google has not open sourced their Engine or databases. I don't think it will happen.

There are no ready made solutions for auto-generated transcriptions. Speaker Independent Speech Recognition is still one of those unsolved problems and unlikely to be solved anytime in the near future. Even research is at a standstill. Check <http://news.ycombinator.com/item?id=1313679> for more.

</comment><comment><USER3> You may check the System.Speech.Recognition Namespace in .NET 4 [http://msdn.microsoft.com/en- us/library/ms554855%28v=VS.100%...](http://msdn.microsoft.com/en- us/library/ms554855%28v=VS.100%29.aspx)

</comment><comment><USER4> spinvox.com</comment>


Show HN: Docgen.io – LaTeX as a Service, Using Serverless AWS Lambda - <AUTHOR> https://www.docgen.io/ <comment><USER2> I wrote a Django app that uses LaTeX to create invoices and some other stuff. It allows me to create nice-looking invoices and reports without manually specifying the (x, y)-position of each line of text, which some PDF generating libraries require. Maybe docgen.io can help others to also create nice invoices.

Unfortunately the "Try me" part seems to be broken - no matter what I input, it always shows the same PDF.

<comment><AUTHOR> Check at the log tab and the tex tab, the tex tab is the tex file compiled after templating and the log is the output generated by pdflatex. In the log you should see an error. Likely you Tex file contents ins't properly understood by the system

<comment><USER2> The log tab says error, but it still displays a PDF. Actually, it displays the last PDF that was rendered on the server, even if that PDF was created by a different user.

<comment><AUTHOR> yeah I have to fix that render bug in the example implementation. The try this uses the same API_KEY for every client. In real life you wouldn't be seeing other peoples PDFs

</comment></comment></comment></comment><comment><USER3> Security issue reported via email to nick@. Hope that's the right contact.

PS. Do you have a bug bounty program? ;)

<comment><AUTHOR> That is the right contact - Thanks for the find.

</comment></comment><comment><USER4> Is it possible to use other templating engine such as ninjucks, swig to generate the documents?

<comment><AUTHOR> Currently no. I use mustache with <% as an opening tag and %> as closing tag so as not to conflict with the tex file structure.</comment></comment>


Is Ontolo the fastest crawler, parser, indexer? - <AUTHOR> https://ontolo.com/blog/ontolo-v7-behind-the-scenes/ <comment><USER2> Why phrase it as a question? The linked article is a PR piece that obviously argues that Ontolo is the fastest crawler, parser, indexer.

The actual article title "400,000,000+ Prospects a Day: Behind the Scenes of ontolo" seems less click baity.

<comment><USER3> I didn't even bother clicking through because I saw the domain name (ontolo.com) and assumed it was a PR piece. Also, Betteridge's law of headlines gave me my answer already (spoiler: it's "no").

<comment><USER4> Hi Joe. I just saw this post here on HN. I'm the sole author of ontolo.

Your comment about the ontolo domain and assuming it was a PR piece, is that because you know of ontolo as a marketing tool, or because it wasn't a more generalized site like Medium?

Also, if you know of any other crawlers, etc, that are faster than ontolo (in the public domain, or public claims), let me know. There aren't a lot of folks I know who are working on this sort of thing and not also working at search engines. It'd be neat to meet some other folks who are interested in the problem.

<comment><USER3> Hey Ben. It's because it was immediately apparent it would be a totally biased piece. When companies write about their own products, they usually do so from a completely biased perspective, in their favor, because they want whoever is reading it to favor their product. Microsoft.com isn't going to feature an article proclaiming OSX is the better operating system, for example -- so anything comparing the two on that site is going to be heavily biased towards Windows. If I'm looking for something that's actually informative, whatever I find there isn't going to be much use to me.

<comment><USER4> That makes sense. I don't know if this factors in, but I didn't post the link here. And if I ever did post a link here to ontolo, the HN post title would be very different.

And I agree that few, if any, folks that talk about their own stuff are able to do so objectively.

</comment></comment></comment></comment></comment><comment><USER5> Interesting read. I'm assuming throughput is a key requirement for the system, but I wonder how much more difficult writing and maintaining the codebase is compared to a "safer" but slower language such as Java, Scala, or Go.

<comment><USER4> I just saw this post. I'm the sole author of ontolo.

As for requirements, they're very low. The machines running the crawler+parser+indexer, which achieve those speeds, are dual Xeon 5639s with 72GB ram. When the indexer isn't running, the crawler and parser use 6 cores, but only "need" 4 of the 24 total on the box. The indexer generally uses very little CPU. All of those cores are actually needed only for queries. So, the limitation on throughput, at this point, is the 1gbps connection to the box. I say 'box' singular, as the 400,000,000/day is per box.

As for maintaining the codebase, it's about 10k lines, plus another 10k of data that's referenced throughout. As I've written everything in the crawler and parser by hand. There are no magic boxes or libraries that it goes into, so debugging is working around only the logic I've constructed, as opposed to someone else's logic.

That said, I've designed it to use as few system resources as possible, unless it would run faster using a uint32_t vs a bit field, for example. If someone else were to begin working with my code, I'm unsure of what that would be like for them. I'd like to believe it's generally straightforward, but I can't say until that happens.

That said, I've also designed it to be easily updated as the way that HTML is written continues to evolve. I know that's a bit hand-wavey, but it's as much as I'm comfortable describing how it works behind the scenes, as no one else I know of (other than common search engines) parses HTML like ontolo does.

If you have any other questions, just let me know. I'll be monitoring this post today.

\- Ben

<comment><USER5> Thanks for the reply!

That's truly impressive - around 4.6k rps, including all of the additional post-processing involved - on a _single_ machine! I'm also quite surprised by the lines of code: ~20k is quite small for a project of this complexity written in C.

<comment><USER4> It's my pleasure. I love talking about this sort of stuff.

As for the rate of requests, I just couldn't figure out how to max out the gigabit connection on Linux with epoll. I ended up moving to FreeBSD and kqueue, and when I did, that's when I was finally able to comfortably max out the connection. I could have just been doing something wrong with epoll, but I wasn't figuring it out, and neither did a friend who looked at it. My guess is that some of the limitations of the api that are resolved in kqueue, just weren't cutting it for that much data coming into epoll.

I briefly considered writing my own tcp stack to run on raw sockets, but I'm quite happy with FreeBSD's network stack, which seems to be more than sufficient.

As for the size of the project, toward the end, it kept shrinking as I better eliminated redundant logic. There might be more ways to improve it, but I'm pretty happy with where it is.

<comment><AUTHOR> Ben ontolo is truly awesome product. What is the tech stack you are using? Any open source projects like Lucene? Also are you hosted on the cloud AWS? Just curious.

<comment><USER4> I think that everything I'm willing to list publicly is in that post. Understand that almost all of it is written in pure C. [Edited to add: I do not use Java in any part of ontolo.]

An example is that I do use Redis for some queueing operations. But there's a bottleneck in part of the process (not with Redis, but the nature of being unable to POP multiple items off of a list at once using the blocking pop requests, requiring multiple requests over a socket, or two separate data stores; one to notify, another to hold the data). So I'm in the process of writing my own queue for the crawler system.

I'm guessing that your question comes from a curiosity or desire to build something similar, or something similarly performant. I don't know if this is a useful perspective or not, but it's mine: that every time I don't know what's happening to a byte of data and how it's processed, there's the possibility of some unknown amount of inefficiency there, and that inefficiency could be small or large. But the not knowing is the problem. So I've tried to eliminate as many of those as possible. I don't always get it right, and I'm sure there are many areas for improvement. But if I find a performance bottleneck, I go in and edit my own code, rather than having to learn someone else's codebase that is written to handle edge- and use-cases I'll never need. I then either have to modify their code - and have to maintain future updates as well, etc - or I write my own, and keep refining it.

I'm certainly in no position to give any sort of programming advice to anyone, but that's just the philosophy I've had from the beginning while I worked on this. And I think it's an important one that's helped me get the performance I've achieved with it. It's a conversation I have often with other friends who are programmers and who make more liberal use of tech stacks. But those are often problems of a very different nature than the ones I'm interested in solving.

And if you do hope to build something similar, or something different but similarly performant, be sure to test everything. You don't need amazing tests, just consistent tests with consistent units of measure. Learn where the compiler is optimizing things out and how to make sure that doesn't happen, etc (I will often insert an integer that gets incremented by a random number generated by a fast xorshift prng at the critical place of measure, in order to increase the odds the compiler won't optimize it out), to ensure a level of quality in your tests. And when you're working at the byte level, keep refining the operations that run the most frequently and test all possibly ways you could imagine doing it.

<comment><AUTHOR> I have already built similar large scale crawling systems using forks of Apache Nutch, Lucene and projects from hadoop eco system. To be honest with my limited knowledge, I just couldn't believe the numbers from the blog post. I came over to HN for smarter people to shed some light. But the master himself has revealed most of the answers. Thank you. We are not into what Ontolo does, that is just too complex for us.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> No, Google is.

<comment><USER7> [https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headline...](https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines)</comment></comment>


Csvkit - command line utilities for working with csv files - <AUTHOR> http://csvkit.readthedocs.org/en/latest/index.html

<comment><USER2> It's worth noting that this is a tool that was built by Chris Groskopf (he's @onyxfish on twitter) while he was working at the Chicago Tribune.

Chris is now working on a Knight Foundation funded project called PANDA to build a FOSS search appliance for tabular data (especially for CSV and spreadsheet based files) intended for deployment in news rooms ([http://www.pbs.org/idealab/2011/11/panda-project- releases-a-...](http://www.pbs.org/idealab/2011/11/panda-project-releases-a- first-alpha307.html) ).

You can test out the alpha for panda online here: <http://alpha.pandaproject.net/>

(Chris is also a super nice guy)

</comment><comment><USER3> Mucking around with CSV files in command-line is painful. Been there, done that, got annoyed by many limitations of that approach, bit the bullet and learned R. It is somewhat weird language, but it was one of the best decisions I ever made in my professional career: now it is my go-to tool for data analysis and plotting.

CSV data is easily imported into R where you can easily analyze it, transform it, plot it -- everything from a unified command-line interface (there also exist GUIs, but I haven't used them). reshape and plyr packages are worth learning too. There's also an emacs package for interacting with R (ESS), and it significantly eases interaction; works also under Win, and is what I use in my work with R.

TL;DR: nice project, but it's a toy compared to what you can get from R. (Re unix philosophy: I'm the type of person that likes to get the job done and I therefore very often choose pragmatism over idealism.)

<comment><USER4> I don't think the intention of this tool is for doing statistical analysis of data, just for manipulating it at a shell prompt. For example, csvcut is similar to Unix cut in that it's a binary you can pipe data through, which R isn't.

</comment></comment><comment><USER5> Is there a CSV AWK?

By that i mean, something that could read the header line in a CSV and automatically generate those variables for each line.

Demonstration:

        $ cat test.csv
        Field1,Field2
        1,2
        3,4
        5,6
        $ csvawk '{print Field1+Field2}' test.csv
        3
        7
        11

<comment><USER6> IIRC Aho, Weinberger, and Kernighan's excellent slim tome _The Awk Programming Language_ implements something similar; awk is used to generate the awk with Field1 replaced by $1, etc.

<comment><USER5> It's not that simple because you have to properly handle stuff like "blah,blah" which is supposed to be treated as one block (but blindly using awk -F, will give you two separate fields)

<comment><USER6> What's not that simple? I didn't say anything was, just citing a reference. Did you mean to reply to the parent?

</comment></comment></comment></comment><comment><USER7> You might also want to look at csvtool (already in Fedora, Debian, RHEL, etc). It's a command line tool for doing the same thing, written as part of the OCaml CSV library.

</comment><comment><USER8> Related: <http://docs.python-tablib.org/en/latest/index.html>

</comment><comment><USER9> MySQL has a CSV storage engine, just give it the file to load and you can read/write using SQL.

</comment><comment><USER10> Anyone know of a similar tool based on Ruby?

<comment><USER11> These are command line utilities, why worry about the language? Just pipe data into and out of csvkit's tools and level up!</comment></comment>


Why C# is the best language for mobile development - <AUTHOR> http://blog.xamarin.com/eight-reasons-c-sharp-is-the-best-language-for-mobile-development/ <comment><USER2> As languages go, C# may be the ultimate "middle ground" because it really _excels_ and providing a middling implementation of [your-favorite-language- feature].

That is, if you're a functional programming enthusiast, you can do _a lot_ of functional programming in C#. Sure, it's often more painful than haskell or lisp or F#, but it's workable.

If you're a dynamic programming enthusiast, C# has a perfectly workable (but ultimately unsatisfying) implementation of _dynamic_.

Systems programmer? Mark your code as "unsafe" and twiddle bits to your hearts content! It's not as quick or necessarily easy as C, but it's there!

Even its' OOP, which is C#'s "official" paradigm, is probably disappointing to smalltalk guys, but hey, it's better than Java, right?!

It's not glamorous or flashy, it's a workhorse language. And at being a workhorse language, I'd say it really is one of "the best".

<comment><USER3> Sorry, but you're really attacking a straw man here.

Neither C# itself nor the OP's article sell C# as being a prime language for functional, dynamic, or systems programming. Rather, it has inherited some convenient little bits of each paradigm to make the language that much nicer to write.

For example, don't want to redeclare that "List<List<LongTypeName>>" you're copying over because it has a scope of 2 lines? Just dynamically type it by calling it a "var" and be done with it. Boom: Cleaner code and zero performance hit because the compiler infers the type such that the resulting IL is identical at runtime.

Sure, given features can be misused to produce ugly or "unsatisfying" code, but that's true of any language and is ultimately the programmer's fault. Just because said features are provided, doesn't mean you need to use them. You should ultimately be using the right tool for the job, after all. C# gives you the power of having a wider choice of tools, and I love it.

<comment><USER4> "var" is not dynamic typing. It's just a way to enable type inference - it's still as static as can be. It also has a very limited useful scope in C#, as type inference isn't supported in most areas.

<comment><USER5> There is only one place where the type inferencing is not supported, field declarations. Not sure how that became "most areas".

<comment><USER4> Miguel I'm confused then - your experience with Mono certainly means you have a better understanding, but I thought I understood it pretty well, too.

Places lacking type inference:

      - Parameter definitions
      - Method return types
      - Generic type parameters (sometimes)
      - Lambda expressions (due lack of syntax to indicate quoted code)
      - Field declarations

The only place type inference works for declarations is in local variable declarations and lambda parameter types if the delegate type is known.

Perhaps the definition of "most" is arguable, but C# has many places that need you to unnecessarily specify types, and there's no good theoretical reasons for any of it, right? (Except the whole syntax sharing for expression trees versus anonymous functions, which is debatable.)

<comment><USER5> "var" is a shorthand to not declare the type when it can be inferred, in most cases to avoid Foo foo = new Foo(). The point is that it avoid repetitive typing, while still preserving type safety and everything that comes with it: compiler checking that right types are used in the right places.

[Digression While it is possible to use in var foo = GetIt() the practice is discouraged because it makes the type of "foo" opaque to the casual reader]

For a parameter definition, its use clearly makes no sense. What is the type for the following method?

void Demo (var x) {}

"var" in the above example would not really add much value, neither would the following example, where inference will oscillate from useless to fragile, depending on who you ask:

void Demo (var x) { var j = x.Parent; }

For method return types the reason is simple, it serves no useful purpose, in fact, it can be quite damaging as the public API contract can change during routine work. Consider a method:

var Demo (PointF f) { if (f.X < 0) return f.X; return 1; }

The above method signature cal oscillate easily between float or double on the day that someone changes the 1 with 1.2. Reading a diff or a patch file wont catch the fact that you have accidentally changed the type of the function.

If this is the kind of code that you need to write (both cases above), then by all means, use the right tool and replace "var" with "dynamic". I would argue that using "dynamic" for the sake of not declaring the type there is a poor practice, but I am not about to lecture you on poor coding choices.

Generic type paramters: your comment makes no sense.

Lamdba expressions: makes no sense, the parameters are already inferred. Not sure what value (var x) adds over the already existing (x) syntax.

Which brings us to the very case I quoted "field declarations".

The ones that you skipped where it is supported: local variable declarations, for statements, using statements, consts locals and fixed statements.

<comment><USER4> Honest question: Are you just playing devil's advocate? It appears that the reasoning for C#'s design is that it targets LINQ as a goal, and the new features (like var and extension methods) were implemented just for the LINQ case, not considering those features by themselves.

In fact, the lack of type inference for fields was said to be due to technical limitations in the C# compiler implementation, not for any language reason. [1] Sure, any product will have limitations due to schedules/resources, but that doesn't change the fact that they're unfortunate limitations that could be fixed. C# hasn't addresses these issues, but they've had 2 or 3 releases since they were introduced.

>For a parameter definition, its use clearly makes no sense. What is the type for the following method? >void Demo (var x) {}

In that case, x has no constraints (it's unused), so it's generic. Pretty simple. An unused parameter isn't that useful outside of a few cases. Usually you'll use the variable, and constraints can be inferred. Or you'll find a constraint that limits the type to a concrete type. Here's some examples:

      void dub (var x) { Tuple.Create(x,x); } // x is T
      void uri (var x) { new Uri(x); } // x is string
      void cmp (var x, var y) { Nullable.Compare(x, y); } // x and y are Nullable<T> where T : struct

The example of "void Demo (var x) { var j = x.Parent; }" is probably one place you'd want it to fail, because using member access to infer types can get complicated, at least within C#'s type system. You'd want a static duck typing system in this case like "anonymous interfaces" or something to that effect.

Arguing against return type inference is wierd: C# does that in anonymous functions - certainly you don't think we should have to annotate types there!

As for type signatures changing, if you need want to keep public contracts, then write them out! No one is saying you need to always infer everywhere, just that it's a great aid. Also, this particular example just demonstrates why C#'s type coercion is a bad idea, albeit understandable, given their desire to follow C style.

Generic type parameters. What do you mean it makes no sense? I can't write, e.g. "new List() { 1 }" - it complains List needs a type parameter. Another example: "Func<var> = () => 1". Nope, I'm required to explicitly provide the type. What if C# didn't have syntax support for Nullable<T>? You'd have to do e.g. "x = new Nullable<int>(1)" or create a helper function like Tuple and have e.g. "x = Nullable.Create(1)". Generic type parameter inference only happens on methods.

Also note that C# can't infer generic type parameter constraints - you've got to annotate them all by hand. Makes sense, I guess, because it doesn't infer any generic type parameter definitions, either.

Lambda expressions can't be type inferred. "var x = () => 1" does not work (CS0815). This is because of the same syntax for expression trees versus anonymous functions. And if that was changed, you'd still need to "promote" func somehow, due to C#'s wierd nominal typing for delegates.

Fixed statements can't be type inferred either: error CS0821: Implicitly-typed local variables cannot be fixed.

The things you mentioned, for (and foreach), using -- those are all local variable declarations. So we have it working for local variables, for some generic type parameters, lambda parameter definitions (when the lambda type is known) and lambda return types.

It's a nice start, and it makes C# far more enjoyable than some other languages like Java. But it's still quite limited, without solid reasons.

1: [http://blogs.msdn.com/b/ericlippert/archive/2009/01/26/why-n...](http://blogs.msdn.com/b/ericlippert/archive/2009/01/26/why- no-var-on-fields.aspx)

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> _Sigh_. Okay, let's play this game.

1\. "Cutting edge", first thing listed is asynchronous programming. Okay, don't get me wrong, I like C#, I like the Task Parallel Library, but Grand Central Dispatch in OS X/iOS is beautifully simple and incredibly powerful. It does everything I need it to do.

2\. "Powerful features" - OOP. Really? And Java/Objective-C don't support OOP/encapsulation? You can't do dependency injection in Java/Objective-C? lol.

3\. "Advanced runtime" - garbage collection. I'd rather use ARC in Objective-C instead of depending on a garbage collector.

4\. "Reliability" – type safety. Really? And Java/Objective-C aren't type safe? I seriously doubt that anyone considers Java or Objective-C to not be reliable languages when it comes to type safety. This is almost laughable, IMO.

5\. "Easy to adopt" - easy to learn. Ok, I'll give you this one over Objective-C. But frankly, I expect a good programmer worth his salt to be able to learn another platform, and I don't consider iOS or Android to be conceptually more difficult than Windows.

6\. "Fast execution. C# on iOS is powered by the LLVM optimizing compiler." Uh, I think I'd rather use Objective-C compiled with LLVM. And the bit about "performance of a low-level language"? I don't consider Objective-C to be a "low-level language".

7\. "Native access" - sweet, I can use some fragile interface that breaks when Apple decides to deprecate half of their stuff. Can't wait! I love waiting for libraries to catch up.

8\. "Portability" - this is a decent point, but let's be realistic - we're talking "minimally portable" here. Write-once run-anywhere is a pipe dream, IMO (at least at this point). There are always platform-specific considerations that need to be taken, and they are not always compatible with other platforms. But even still, this point should have been the main focus of the article. Points 1-7 are minor compared to this.

This just doesn't feel like a serious discussion of C#'s potential for mobile development.

 _Edit_ : just for the record, I'm not necessarily trying to refute all or some of the OP's points. I think the original article was poorly written, and the case for C# was poorly made. Hence my "let's play this game" comment.

<comment><USER7> LINQ is pretty sick and if obj-c has a similar feature I have never seen it.

<comment><USER8> Eh, disagree. It's confusing for a number of reasons, firstly because instead of choosing the common functional names -- map, filter, reduce, flatten, etc. they choose to go with SQL-like naming. Just an annoyance. Secondly, Expressions are a clever hack on top of the language, but they are not intuitive for the person using them and requires you to know too much about the particular implementation you are using (for example, if using Microsoft's ORM, string concantenation inside an Expression is disallowed). It's not their fault, C# isn't really functional, and Expressions allow them to make it look functional and have some laziness built in, but there are still enough gotchas that make using it a pain.

<comment><USER4> Is there any other quotation-based system that _doesn't_ require you to understand the implementation? Or any language/runtime/library? SQL is different from one DB to the next, and a lot of C APIs are not implemented identically on all OSes.

As to the names, I'm not sure it's safe to assume that "Map" would result in better usability than "Select", for MS's target audience.

</comment></comment></comment></comment><comment><USER9> Obviously a bit one-sided (it's from Xamarin, after all) but I'm a big believer in C# and what it offers compared to what else is out there. I think the biggest weakness is dealing with another single-vendor-of-failure (in this case, Xamarin themselves) in order to cross-compile to Android/iPhone.

</comment><comment><USER10> > Their data shows that C# popularity grew by 2.3 percent in 2012, more than > any other programming language during the same period.

As many pointed out when that story came out, that datapoint is highly suspicious. There are plenty of smaller languages that have surely grown much more than that (it's easier to grow more when you are small).

Also, the actual popularity is what really matters, not the increase. If C# increased 2.3% from 1000 to 1023, but say Java was at 1,000,000 and stayed there at 0% growth, then the conclusion is obvious. (Not saying those are the numbers, the point is that actual popularity trumps a few percent of growth in a year.)

> What accounts for the growth of C# in 2012? Well, the launch of Windows 8 > has probably played a role — C# remains the dominant language of third-party > application development on Windows devices.

Doubtful. Windows 8's launch has been a failure, even compared to Vista according to the latest figures. And is C# even the "dominant language" for Windows 8? It seems JavaScript might be just as important if not more so for Metro apps.

<comment><USER11> C# is a dominant language for indie games: Unity, and almost all games using the Unity engine; Magicka, Terraria, Breath of Death, Weapon of Choice, and Sol Survivor, which use the XNA framework; Eufloria, which was originally written in C# prior to the cross-platform release, AI War, which uses C# and Mono, and Bastion, which uses MonoGame.

<comment><USER10> Yeah, exactly, indie games would have been a much better example than Windows 8 in that article.

</comment></comment></comment><comment><USER12> The vast majority of the code in most apps is not core code, it's display code. That's STILL entirely device specific.

I think the C# advocates oversell how much it is reusable

If you STARTED with a great pile of C# code, say, running on the desktop or server, then wanted to port that to an iOS device, then you have a point.

One big problem with non-native code is that example code is almost always written in native code, and can be hard/impossible to get new features working once you try to translate across the language barrier (mobile gets REALLY finicky about when X or Y is called, especially for things like animations)

<comment><AUTHOR> That's actually not what we see with our customers and their apps.

Here is a real-world example of code sharing percentages for an iOS, Android, and Mac app written in C#: <http://lipsky.me/blog/2012/9/11/touchdraw-code- reuse-updated>

And here is another one across iOS, Android, Mac, and Windows, also in C#: [http://praeclarum.org/post/31799384896/icircuit-code- reuse-t...](http://praeclarum.org/post/31799384896/icircuit-code-reuse-the- fourth-edition)

Both of these apps are using 100% _native widgets_ for their user interface, and I think it's fair to say that both of them are fairly UI-heavy. And yet they average >70% code sharing.

It should also be pointed out that these apps were written from scratch. In fact, Jon Lipsky didn't even know C# before he started writing TouchDraw (the first app I linked).

<comment><USER6> Not all code is created equal. That 30% that needs to be rewritten for each device could be difficult to tune for each platform. Personally, I'd like to see some more information on what exactly was reused.

</comment></comment></comment><comment><USER4> "Async support as a first-class feature" - that's actually a flaw. C#'s async implementation would be better served by having e.g. a generic monad system that allows async to be done in a library. Instead, it's another baked-in compiler feature, like C#'s duck typing and LINQ's query operators.

Calling it "cutting-edge" is an exaggeration, too.

<comment><USER13> It's not a flaw. Arguably it's worse than having a generic mechanism, but it's certainly not worse than having to use explicit callbacks, as in essentially all other popular languages (and previous versions of C#).

</comment></comment><comment><USER14> Assuming all 8 points are valid. I still will not use MonoTouch on anything ever because it costs $999 apiece while everything else is free.

<comment><USER15> Same here. I'm not opposed to paying for quality tools even when free alternatives exist, but I'd pay like $99 for this, not $399 (or $999).

</comment></comment><comment><USER16> Please don't actually do this - or if you do this, use the C# code only for the backend, and write the UI code natively for each platform. Nothing is worse than a 'not quire right' 'seems almost the same but isnt' UI.

<comment><AUTHOR> You have misunderstood. iOS and Android apps built using C# have access to 100% of the native API of the underlying platform. So all of the UI is fully native. Take a look at our API documentation on iOS, for example:

<http://iosapi.xamarin.com/?link=root%3a%2fMonoTouch-lib>

You can see thousands of iOS APIs bound, including all of UIKit: <http://iosapi.xamarin.com/?link=N%3aMonoTouch.UIKit>

</comment></comment><comment><USER17> What is he comparing to? Arguments #2-#5 & #7 seem to apply to Java as well, and #6 just quotes an extremely lopsided benchmark exploiting one specific feature of their C# implementation. Most of the arguments would apply to Objective C too, I presume (though I haven't really used that outside of toying around).

I'd personally expect we'll see a lot more JS for mobile apps: a terrible language compared to C#, but a very well understood UI layer (HTML).

<comment><USER18> I don't think each point is meant to show that it's better in that respect than every other competitor. I think it's meant to be sort of like those feature grids on software packaging, where some of the competitors may have some combination of the features, but only Our Product has the complete set.

</comment></comment><comment><USER19> Read this article for me to waste time because a programmer that program in a programming language that dominates more he soon comes to post here trying to convince others to learn the same...

</comment><comment><USER19> after not ashamed to post an article saying that C# is the best language for developing mobile ... must have little shame .. I'm sure you still not programs Naive Code Android, HTML5 + CSS3 and other top mobile development languages

</comment><comment><USER20> While a bit of an aside, personally I find LINQ to have been a horrendous misstep in the evolution of the language. While the argument that it makes code more concise and easy to maintain holds in the small, once a project grows it becomes a terrible cancer -- everything becomes an amorphous blob of stuff, unintuitive, performance-disaster LINQ filters applied everywhere to bend it into shape.

<comment><USER21> Yes, but it's not specific to LINQ or MS or C#. If you give a tool to mediocre developers to make things easier they will use it right away. If you don't supervise its usage (how it fits into the architectural goals of the project you are on) you will end up with a mess.

Anonymous methods, unnamed classes, try catch blocks are all examples of these type of tools that when used improperly will kill the system performance, code readability, maintainability and extensibility.

<comment><USER20> _Yes, but it's not specific to LINQ or MS or C#_

We are specifically talking about C#. LINQ was specifically held as one of the improvements to the language. I am not quite sure what your point is relative to that.

There are shockingly few examples where LINQ is superior to alternatives. LINQ is the brute force technique of avoiding proper collections/algorithms.

<comment><USER22> I don't understand. Are you saying that map, filter, reduce and al. on lazy sequences in functional languages are inferior to loops, or that Python list comprehensions and generators are inferior to loops? That's basically LINQ to objects.

Maybe you're refering to LINQ-to-whatever (LINQ to SQL, etc.), a LINQ generalization where you can quote your expressions, rewrite the AST and emit something else (a very constrained kind of macros, if you will).

MS is probably to blame here, but people keep conflating the two.

<comment><USER20> In the vast majority of cases it is nothing more than syntactical sugar around loops. And no, I'm not saying that loops are superior, but rather I'm saying that loops are usually a terrible solution, but LINQ has a way of essentially hiding those egregious violators.

Take a block of code with LINQ in it and rewrite it minus LINQ but logically performing the same operations that the sugar is resolving to. To most developers it would offend the sensibilities of construction, but somehow in LINQ-land all seems fine.

<comment><USER23> 95% of the time, what looks like a failed "loops 101" test actually doesn't matter at all. Maybe your list comparison function takes O(n^2) time... if your list never gets above 10-20 objects, who cares? Yes, if you're running LINQ over a list of 1,000,000 items, then you'll want to be careful what you're calling. But how often does that really happen in mobile apps?

What LINQ does is make your code more concise and readable. It makes it easier to find bugs and easier to understand by someone else (even if someone else is you, 6 months down the road).

It also just takes a lot less time to write.

<comment><USER24> Depends on what kind of mobile apps you are writing. Most of the apps I've worked on written tend to deal with video/ pixel level image conversions. In these cases it's really common to say convert an rgb pixel array to yuv or simliar and a linq expression on one of those arrays would quite simply kill the app. Which I think is the best counter argument to the op. C# might be fine until you decide to do something beyond the normal performance wise. Then you are back to square one learning the native supported tools, IMO you are much better off learning the native environments from the ground up.

<comment><USER20> This is really the crux of it. The counterargument essentially seems to be that such broad abstractions are fine in the small or when you have enough hardware, however that in no way carries over to smartphones where you want to do the most with the least, and even where you have a kick-ass processor and multi-GB RAM, you still want to reserve battery. The primary reason Android seems to need so much more hardware than iOS can be attributed to this. Even when you have powerful hardware, this can kill you in the large (which was the original failure of Windows Vista -- people forget that Microsoft did a complete revert after thousands of man years of work)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> Mobile development issue is not the language. It's the API.

And how would using C# help me deal with the fragmentation issue ?

<comment><USER5> It does not.

And nobody claimed it did.

</comment></comment><comment><USER25> I can't stress enough how I think being able to do SQL queries is a must have for cellpones.

Because we all know all the top-selling iPhone / Android apps do ship with an embedded SQL DB right!?</comment>


Schleuder: A GPG-enabled mailinglist with remailing-capabilities - <AUTHOR> https://schleuder.nadir.org/ <comment><USER2> Kinda cool but it depends on you trusting the central mailer since it does decryption and reencryption.

I suppose if you know about that then it is ok.

The benefit of this approach over the alternative (making people encrypt and sign with a lot of keys) is that once received, the content does not give away the key names of the other mailing list members.

<comment><USER3> _> once received, the content does not give away the key names of the other mailing list members_

This doesn't present a problem, because you can construct anonymous group signature schemes.

<comment><AUTHOR> > because you can construct anonymous group signature schemes

Heh. In practice this is true, but only for sufficiently advanced values of "you". I certainly wouldn't feel comfortable attempting such a thing without consulting a real cryptographer.

<comment><USER3> Absolutely agreed, I was speaking as a matter of theory :)

</comment></comment></comment></comment><comment><USER4> I've been using schleuder through various mailing lists over the past years, it's always been doing what it says on the tin :)

<comment><USER5> is there a list I can subscribe to how to find a schleuder or gpg enabled list ?

</comment></comment><comment><USER6> I'm interested in how non-subscribers are handled.

(And, by the way, applaud the Schleuder project's recognition and support for that, since I believe that mailing lists should be easily usable by non- subscribers. This modern widespread phenomenon of lists insisting on subscription before you can post is deplorable, and raises the bar for people to report issues to FOSS projects and such.)

The traditional plain text mailing list handles non-subscribers simply via two mechanisms: the _Cc:_ header, and the use of "Reply-All" by participants when they reply to the mailing list. So messages are going not just through the mailing list robot but directly between people, and that keeps non-subscribers in the loop for conversations that they started.

This direct reply mechanism can't work for the encrypted case, clearly. A direct reply requires that we have the key for that party. So it must be that the encrypted list manager goes out of its way to handle the non-subscribers. The message must be relayed with a "Reply-to" header set to the list, and the list must then remember that the conversation includes an outside party that must stay in the loop somehow. The robot must also have the public key of the non-subscriber.

So effectively, the non-subscriber must become an "effective subscriber" for the conversation that they started. The robot remembers that person in a membership-like list.

Or, perhaps a special header can be used as a cookie, storing the non- subscriber's pubkey. If all the conversation participants relay this header back to the robot reliably, it doesn't have to keep it anywhere. (And the robot can also sign that pubkey so it doesn't have to blindly trust that the members are relaying it correctly.)

</comment><comment><USER6> Should just be a patch for GNU Mailman.

<comment><USER7> schleuder is not a replacement for GNU Mailman, it does not contain all the features of GNU Mailman, while adding certain other features (e.g. remailing) that are not part of GNU Mailman.

<comment><USER6> GNU Mailman most certainly does remailing; something that doesn't do remailing can't be called a mailing list manager!

It not only re-sends a message to list subscribers, but manipulates the headers and bodies. It can optionally add footers to bodies and alter Subject: lines.

It just won't decrypt messages with its own GPG key and then re-encrypt them for the recipients; it doesn't do "crypto remailing".

<comment><USER7> Please have a look at [https://schleuder.nadir.org/docs/#an-email-hub-for- groups](https://schleuder.nadir.org/docs/#an-email-hub-for-groups) about the context here of remailing.

So correctly it should have been called resending.

</comment></comment></comment></comment><comment><USER8> Alternative software that does the same: [https://fbb-git.github.io/gpg- remailer/](https://fbb-git.github.io/gpg-remailer/)

<comment><USER9> Schleuder can do more than gpg-remailer, e.g. resending messages to non- subscribers [https://schleuder.nadir.org/docs/#an-email-hub-for- groups](https://schleuder.nadir.org/docs/#an-email-hub-for-groups) or actions triggered by keywords [https://schleuder.nadir.org/docs/#special- keywords](https://schleuder.nadir.org/docs/#special-keywords). It also has a web-interface to manage lists: [https://0xacab.org/schleuder/schleuder- web/](https://0xacab.org/schleuder/schleuder-web/)</comment></comment>


Free hosting for static websites - <AUTHOR> http://coralrift.com/

<comment><USER2> You know, my 7yo has been asking for me to let her create a web page for some idea she has about crime reduction. Might be a decent test case.

Also, GeoCities 2.0, c/d?

</comment><comment><USER3> Nice, coralrift is slick. It does look super similar to <http://staticloud.com>

I wonder how much inspiration they have taken from there. It looks like they have uploaded their demo site to: <http://dane2.staticloud.com/>

Who would be the target market for this sort of service. It is potentially quite niche. Is it targeted towards users technical enough to be able to write html, css, and javascript. But not technical enough to use say Amazon's new static web site options on S3 <http://bit.ly/h1rcJ8> or github's static hosting option?

<comment><AUTHOR> We found out about Staticloud after we started but decided to keep going because we wanted to create something that people could use for their serious websites (like portfolios). Thus the need to have ownership of your subdomain and be able to add and remove files etc...

We were inspired partially by the struggles of our less technically minded classmates [we go to design school] who can piece together a simple portfolio but end up paying $5 a month to tear their hair out trying to figure out how to host their site on Godaddy.

</comment></comment><comment><USER4> This is pretty impressive. It will be nice to see a way of adding your own domains though.

The video was a little hard to see though, but the simplicity of the process probably negates that fact.

<comment><AUTHOR> The primary market for this are people who glaze over when you start talking about DNS Servers or CNAME. But that is definitely something that would be cool to add.

<comment><USER5> Even for those of us who don't glaze over when you start talking DNS, there's certainly something attractive about the simplicity that you've achieved. With coralrift I can publish a static site in 15 seconds. I'd love to be able to configure the coralrift side to match my TLD in another 15 seconds. I won't mind configuring the other side of DNS "manually".

</comment></comment></comment><comment><USER6> I like it, very simple and easy.

small bug/feature is that single letter domains are not working, i.e. <http://a.coralrift.com>

</comment><comment><USER7> I love free stuff!

Small suggestion: the first instruction was to "drag zipped website here", but it did not mention that I need a file exactly called "index.html" inside. Maybe change it to "drag zipped website containing your index.html here" ? I understand that it gets too long, but then, your first response to customer would be "womp womp womp".

</comment><comment><USER8> Looks really nice for the non-technically-inclined!

I'll probably be sticking to github or dropbox for my free static sites though. Does this provide any sort of versioning or live editing?

Also, very minor, the FAQ mentions "You can upload .html, .css, .js files." but should probably include any image restrictions.

<comment><AUTHOR> No versioning or live editing. Of course you can always reupload individual files or a new zip and it will replace whatever was there. For the moment there are no image restrictions.

</comment></comment><comment><USER9> I think that in the video you should get rid of the elevator music and have someone narrating the most important points about the service, such as how it differentiates itself, what are the limits (storage capacity, etc).

</comment><comment><USER10> CoralRift and the sites it is hosting are hosted by Dreamhost.

As a fellow Dreamhost customer, I'd be curious to know how it is handling the subdomain creation stuff ... Dreamhost API?

<comment><USER11> I would guess they have a VPS. A VPS with Dreamhost allows you to do wildcard DNS, so I'm guessing they're doing something along those lines.

<comment><AUTHOR> Yes, we have a VPS with root access</comment></comment></comment>


Ask HN: Is Apple ashamed of the iPhone upper notch? - <AUTHOR> Is Apple ashamed of the iPhone upper notch area? Commercials running now show a planet display deliberately excluding the area... <comment><USER2> They should be, but apparently they are not.</comment>


My BabylonJS game - <AUTHOR> https://jounce.space <comment><AUTHOR> Try ZOOM at jounce.space. Fly fast at first, then slow down to maneuver among growing obstacles. Distance = score.</comment>


First ever Posterous Hack Day: July 16th in San Francisco and on IRC - <AUTHOR> http://technology.posterous.com/join-us-at-the-1st-ever-posterous-hack-day-ju

<comment><USER2> For a second I misread that as "Preposterous Hack Day", and got excited.</comment>


Oculus CEO Palmer Lucky responds to Notch's "cancellation" of Minecraft for Rift - <AUTHOR> http://i.imgur.com/nk9dvCX.png

<comment><USER2> Just throwing this out there, Notch has also cancelled 0x10c. I have a lot of respect for the guy, but his history of finishing things is not fantastic.

<comment><USER3> Yes but clearly he has a pretty good nose for cheap PR.

<comment><USER4> I guess the entire tech world has a pretty good nose for cheap PR then.

<comment><USER3> ok......

</comment></comment></comment></comment><comment><USER5> can we get some link _other than_ an i.imgur link of a facebook screenshot?

<comment><USER6> The link to the actual content is probably behind a Facebook login page and might not even be viewable to all Facebook users.

Thanks for NOT posting the link to Facebook and instead using imgur :).</comment></comment>


Anonymous no more - Amateur facial recognition in the social networking age - <AUTHOR> http://www.economist.com/node/21524829

<comment><USER2> The error rates on this are tremendous if you are working with a large recognition database and a large set of subjects.</comment>


Ask HN: Can you mine Bitcoin faster using analog computers? - <AUTHOR> <comment><USER2> Analog computers are good at solving tasks like differential equations for numeric (analog) variables while mining bitcoins is mostly about computing a hash function and it is a digital problem. Yet, some old ideas could be probably be useful if appropriately reformulated.</comment>


Ghostery - A Web tracking blocker that actually helps the ad industry - <AUTHOR> http://venturebeat.com/2012/07/31/ghostery-a-web-tracking-blocker-that-actually-helps-the-ad-industry/

<comment><USER2> I found the explanation on Ghostery's own site a bit clearer/more informative in terms of what data they actually collect, and what they do with it for profit:

<http://purplebox.ghostery.com/?p=1016020665></comment>


Spideroak Kloak: Zero-Knowlege Social Networking - <AUTHOR> https://spideroak.com/solutions/kloak <comment><USER2> Kloak's threat model is advertisers and data-miners. It is an experiment in private social networking. It is part of a set of new applications we are building at SpiderOak. Kloak is more or less a lab experiment in the UX of private systems.

<comment><USER3> How does Kloak handle metadata? If people can see who you communicate with, they can get access to your social network, which contains a lot of information.

By seeing my location dozens of times, a company can figure out where I live. They might not know what bar I went to last night but they will be able to know that I visit Chipotele frequently.

It's better than nothing, but it seems like strong analytics could still access most of the important information.

<comment><USER4> I was about to ask a lot of these questions of how deep the metadata layer really goes - including using SpiderOak as the threat. It seems this is built on Crypton, linked below; however, the paper itself [1] goes into a lot of detail on what metadata SpiderOak could see, and what they can infer from it.

I am personally curious why p384/ECDSA was chosen; vs. p521 or Curve25519+Ed25519. I assume this is because p384 is standardized and recommended in NSA Suite B.

[1] [https://crypton.io/crypton.pdf](https://crypton.io/crypton.pdf)

<comment><USER2> p384 is the standard, yes, however, any future implementation of Crypton will, I hope, move to Curve25518

</comment></comment></comment></comment><comment><USER5> Either show my location or don't. Randomizing in a four-mile radius is both compromising and useless.

<comment><USER2> Making the location fuzzy was a notion I had - it's still not great. One problem here is doing location name without calling any external APIs. We store all place names in the app. Not ideal.

<comment><USER6> How about four options:

( ) Accurate location

( ) Fuzzy location (within 4 miles)

( ) Super-fuzzy location (state/country and time zone)

( ) No location

<comment><USER2> yes! that is a much better set of options. I will file an issue.

<comment><USER7> How are you doing fuzzy locations? You're probably not doing it this way, but note that just adding a random 4 mile radius vector to the users location in insecure (against multiple samplings), you need to quantize it to a fixed set like a 4 mile grid or something like that. I remember tinder made this mistake and you could locate users very precisely anonymously.

<comment><USER2> The dataset of all towns in the world with > 1000 inhabitants is bundled into Kloak. The GPS location was originally highly accurate, but we rounded down to 2 decimal places. So if your GPS coordinates match the center of the city (rounded down), a place name can be generated. It basically will place you near the center of the closest town, again, its naively rounded to 2 decimal places. I want to go back to make this code a bit more sophisticated, with more choices for the user.

<comment><USER7> Yea just rounding the coordinates is problematic at high latitudes. Curiously, the problem of finding a "nice" quantization set on the sphere is a well known mathematical problem called Spherical Coding [1]. But you don't need anything this fancy I guess, you can just round the coordinates if the latitude is less than e.g. 60 degrees , and if above you chose another pole and round the coordinates with respect to the second pole. It would probably be a good idea to add some hysteresis as suggested below too (so you're not localizable when you're at one of the edges). Then you can give it some fancy name like "Advanced location privacy protection" :)

[http://mathworld.wolfram.com/SphericalCode.html](http://mathworld.wolfram.com/SphericalCode.html)

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

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> I'm not an encryption guy, so I'm probably totally off base, but how does this work in terms of decryption?

When you 'friend' someone, are you sharing your decryption key with that person? That seems very vulnerable to mass data collection when you start emailing it around to friends. Does each friend get a different key that you can disable if you believe they've been mismanaging your key?

<comment><USER9> I don't know how they are doing it, but one way this could be solved is with assymetric encryption.

If a person wants to see your data, that person asks you for it, and you use their public key to encrypt your data, send it over, and then they can use their private key to decrypt said data.

I doubt they are actually doing it this way as I imagine the overhead would be very high, but it need not be as cumbersome as sharing a specific secret key for each person.

<comment><USER10> > I doubt they are actually doing it this way as I imagine the overhead would > be very high

It wouldn't be very high, they could easily put the burden on the client to do the encryption and like all practical public key encryption they only thing you encrypt with the public key(s) is a symmetric encryption key that the content is encrypted with.

</comment></comment></comment><comment><USER11> I tested this out. I don't know anyone else to try with, so here is my contact card: [https://goo.gl/photos/yhVvYGfy9Vepcp1h9](https://goo.gl/photos/yhVvYGfy9Vepcp1h9)

I found one other person on G+ and imported their card. I saw it said "adding to trusted contacts". I assume it means that they can read anything I post. I went to timeline and saw nothing new from the other contact. I expect that because I'm not one of their trusted contacts, I can't see what they have posted.

Then I went into contacts. I can view the new contact but not do anything I was expecting like adding to a group. The only thing I could do was delete the contact.

Next I went to write a new post. There was no options I could find to choose my audience. All posts you make will end up going to everyone in your contact list. Hopefully there is a feature in the works to create something like streams or target groups.

If I delete a contact, do they lose access to my posting key? Or do they continue to be able to access all future posts I make?

<comment><USER2> My contact card is here: [https://twitter.com/deezthugs/status/654457605650255872](https://twitter.com/deezthugs/status/654457605650255872) I'll add you to my contacts now

<comment><USER11> I added you as well. I am deltafoxzed on Kloak

</comment></comment></comment><comment><USER12> I've been wanting something like this for a long time: a private network for those you trust and truly care about, offering actual privacy but without requiring my less-than-technically-inclined friends and family an easy way to opt in. I have hundreds of "friends" on Facebook, many I don't really know but think of as potentially useful contacts to have. It's like a more casual LinkedIn to me, you could say.

Funny note: "kloak" means "sewer" in Swedish. An apt name for most social feeds, to be honest.

<comment><USER13> — and in danish ⌘ [https://twitter.com/kseistrup/status/675775244565655556](https://twitter.com/kseistrup/status/675775244565655556)

</comment></comment><comment><USER14> Really like the idea. Unfortunately name might work against them in Scandinavia and other places where kloak means sewer (it has the same origin as "cloaca" in English).

<comment><USER2> That is an unfortunate naming problem. Kind of ironic as social media can be such a sewer!

</comment></comment><comment><USER15> Is this just a loss-leader for their backup/storage service? I am a big fan of not being the product, but how does this make money?

<comment><USER15> Not to mention: if everything is encrypted using your password as a key, how do your friends see your posts? Are they encrypted for each friend with that friend's public key?

<comment><USER16> > Are they encrypted for each friend with that friend's public key?

That sounds about right. However this is a closed-source project, so I don't see why it would be picked up by privacy enthusiasts.

<comment><USER2> No, it is fully open source from day one: [https://github.com/Crypton/statusapp](https://github.com/Crypton/statusapp)

<comment><USER17> This seems buried. Is there a reason it's not mentioned or linked on the kloak page? I actually went looking for the code and couldn't find that repository.

<comment><USER2> The link to the source code is in the about screen in the app. Hardly buried. I will have it added to the site, I was unaware of this.

<comment><USER17> Thanks.

I figured it was likely in the app, but for an experiment like this, that appeals to many of the ideals of an open source philosophy, I'm less likely to bother installing it if I'm unaware that it's an open source project.

Obviously the appeal ultimately needs to be greater than just being open source, but that initial bump can't hurt the outcome of the experiment.

</comment></comment></comment></comment></comment></comment></comment><comment><USER18> @daviddahl, is there any reason why this is not available from a browser and instead seems to be available only through Android and iOS apps? If it's not available from a browser, is there a plan to introduce that (when)? It looks like desktops, laptops and other mobile platforms that have standard compliant browsers are completely ignored.

</comment><comment><USER19> The greatest problem is adding friends. It's very important that this is very easy, without friends you can't communicate with anyone.

Possibilities for making it easier that are still privacy conscious include IMO: Adding friends of friends. Adding people that are in your local wifi.

<comment><USER2> This initial version is is very deliberate about who you share with. The idea is that the user is always in control of who anything is shared with. One way to help create your social network will be an "opt-in profile page" that others can view and collect your card via. Its in the works.

</comment></comment><comment><USER20> Just tried the Android app. The automatically generated xkcd-style passphrase is really cool, but the app insists on storing it in the operating system's credential storage with seemingly no other option.

As it happens, I don't have credential storage enabled on the spare device I tested it on, so this was a bit annoying.

I've dabbled with several messaging apps from Signal to Telegram and a bunch of others in between, and in fact this is the first time that an app tried to make actual use of Android credential storage. I wonder what the advantage is, and how other security-conscious apps like Signal are doing without it.

<comment><USER2> Yeah, Android < 5 is a PITA as there is no secure storage. I almost wish I could make this app require Android 5.

</comment></comment><comment><USER21> I don't see how you can trust any of these sorts of privacy apps without compiling and side-loading them yourself. Even then, it's risky on a device you really don't control (f.e. Are we sure that the wi-fi radio that the FCC requires manufacturers to isolate from apps can't itself backdoor the device? Will we always be sure that the app developer won't ever update the software in a nefarious way?)

<comment><USER2> This is easy to do in this case, as the source is on github: [https://github.com/Crypton/statusapp](https://github.com/Crypton/statusapp). Also, you can run your own server if you like.

</comment></comment><comment><USER22> How would I keep up with developments from Spideroak? Their blog ([https://spideroak.com/about/perspectives](https://spideroak.com/about/perspectives) ?) does not appear to have an RSS feed.

</comment><comment><USER23> Played around with it for 10-15 minutes. Looks like there are some good ideas in there but the UX on the iPhone version lacks polish. Not sure about the use of fixed width fonts.

Will play around with it some more but it does look promising.

<comment><USER2> The source/tracker is here if you want to file issues, etc: [https://github.com/Crypton/statusapp](https://github.com/Crypton/statusapp)

</comment></comment><comment><USER24> Hm, could this be a business application of zkSNARK proofs? [https://github.com/scipr-lab/libsnark](https://github.com/scipr-lab/libsnark)

<comment> Ar-Curunir This thing doesn't really have anything to do with zero knowledge proofs.

</comment></comment><comment><USER25> This is a cool idea but it'll be tough to get people to switch from FB and Twitter.

<comment><USER2> That is not the premise. The premise is that this is a parallel network for your trusted friends and family, off limits to the data-miners at FB and TWTR

<comment><USER26> That's a good approach. And probably the only one. Just needs some form of vitality to help with spreading it, e.g. one-item sharing links/emails that double as invitations that auto-whitelist recipients as followers.

</comment></comment></comment><comment><USER27> Its not a bad idea but its not better than existing products [e.g. TextSecure] in terms of actual privacy.

<comment><USER5> Signal (formerly TextSecure and RedPhone, now merged) isn't a social networking app.

<comment><USER2> Correct, it is a texting app, and is fantastic. I did not want to build another texting app. As a twitter fiend I wanted a private twitter-like experience. Still, there is much to do.</comment></comment></comment>


Playtesting Tabletop Games - <AUTHOR> https://gaslands.com/playtesting-tabletop-games-advice/ <comment><USER2> This misses an element that's really worth mentioning to designers. Simplicity is good. Few games suck because they didn't have enough rules, so probably if your game sucks you shouldn't try to fix that by adding more rules.

In playtesting this means noticing - the players never seem to cause X to happen. Is that because X seemed cool to you but actually the rules for it are confusing and add nothing to the game? Rip them out. Cry about it if you like, hold a mini-funeral for feature X, but rip it out.

The temptation to have too many rules is exaggerated for video games, because whereas a human player won't put up with six binders of rules for a 20 minute board game, millions of lines of custom code isn't a blocker for a AAA video game title even if, again, the complexity actually makes the game worse.

Which doesn't mean your game needs to be Snap, or Pong, but it means that making the core shooting mechanic of your shooter feel a bit better is a superior use of your time to integrating a half-arsed RPG element everybody will ignore anyway; a few more weeks on fine-tuning the card text for your hybrid card plus dice game will go a lot further than adding two other sizes of card, a cloth playing area, paper money, plastic tokens, and a life-size plastic rat.

Unless the whole point is to get the maximum possible money for your Kickstarter, in that case go for it. Stretch goal of hand painted miniatures for each of the 640 possible playable characters? Why not.

<comment><USER3> I've commented a few times (on BGG) on games where too many rules can cause frustration or confusion. Are the rules limiting or are they allowing a new ability? Do the rules follow a path that makes sense to the game (heuristics)?

The work behind (tabletop) game design is to create a meaningful product in the most elegant and interesting way. Streamlining gameplay is essential. Keep what is meaningful, throw out the rest, and iterate again. The most recent game I played that I feel violated this was Feudum. [https://boardgamegeek.com/boardgame/163839/feudum](https://boardgamegeek.com/boardgame/163839/feudum)

<comment><USER4> This was my biggest problem with the game Brass. It had too many rules to deal with game breaking moves. Time and time again, I'd see something that looked like a strong move only to realize I couldn't do it in what seemed like an arbitrary 'can't do X in round one'. It was clear to me in retrospec that the rule was because it prevented these strong moves, but it felt tacked on and contrived. Worse, is you have to keep a list of all the things you can't do in your head, and they're the type of rules that are likely to be missed, only to have someone salty over losing look at the rulebook, and say 'wait, you can't do that'.

</comment></comment></comment><comment><USER5> This is solid advice, also for playtesting video games as well.

I definitely think the point about not being the one to teach the game to players, but rather letting the rulebook do so, is important. You won't be there at every play session of your game, for every group that ever buys it.

Additionally, having sessions where you can observe (either because they were recorded or you were there) are great, especially when you aren't interacting with the game, as this will prevent your biases or experience from steering the game onto already discovered paths.

</comment><comment><USER6> This is all generally very good advice. However, I think the "Ignore Playtesters" section is wrong. You do have to not just take their idea carte blanche and add it. But you should listen to their ideas because it is always in one of three categories.

1) Their idea is to fix a problem in your game but they may have trouble articulating it. 2) Their idea is for an additional element that will add to the strategy or fun of your game. 3) Their idea is to change the game to the type of game _they_ like. You shouldn't usually heed this advice but it is very important to ask why players of games X don't like this game.

<comment><USER7> I think the quote they used in the article puts it pretty well.

"When someone tells you there is problem with your game, they are almost always right. When someone tells you how to fix that problem, they are almost always wrong."

I don't have experience with games but I had the same conclusion with feedback about music productions and concerts. Some of the most valuable input we got was from people completely ignorant of what goes into making music or the theory thereof. They just tell you that they don't feel it, that a part is odd, etc., but can't put their finger on what is wrong. On the other hand, some of the most useless input came from people that know a little bit about music, but don't have actual experience doing it. They jump to the solution directly, telling you what to change without being aware of the consequences, what impact for example making one instrument louder has on others, whether it fits into the theme, how much is just their personal taste, etc. Often while being very insistent that they are right.

You should certainly always listen what people say. But honestly for me it was only ever really useful if it came from either (semi-)professionals, or from people that don't know anything.</comment></comment>