Why Hipmunk Is The World's Best Travel Site - <AUTHOR> http://www.forbes.com/sites/bruceupbin/2012/06/29/why-hipmunk-is-the-worlds-best-travel-site/

<comment><USER2> I like the idea behind Hipmunk, but it doesn't really work with how I personally pick travel.

I generally have an airline in mind first. If I want to fly to Seattle, I basically know my choices are VX, UA, AK. If I want to fly to Hong Kong, I'll try hard to be on CX, or failing that, SQ, or UA (to use the eBayed SWU to be in business for +$300 over cheap coach). To Kuwait, UA or LH.

Alternatively, I want to know "when will flights to (exotic destination) be cheap" -- the best choice for that is still Kayak. Flyer Talk is also a good source of information, because when an airline runs a 3x miles qualifying special, a $500 transpac costs about $0 if you value the miles to hit a tier.

If I need to fly at specific times, it's usually bounded on one side -- get from point A to point B either leaving as late as possible or arriving as early as possible. Longer layovers aren't a big deal, so it's search for the relevant time first, then optimize.

For hotels, it's the same thing -- I know of a specific hotel I want to use (Pen or MO or one of the good SPG properties in BKK), or I'm trying to maximize SPG status/points and shop Starwood, or want to find something as cheap/deal as possible (usually Vegas). Couch-of-friend or AirBnB also come in, especially if the preliminary hotel search fails. I rarely care where in a city I'm staying as much as the property itself.

There clearly is something better than the current travel sites, but for me, Hipmunk isn't it (yet).

<comment><USER3> _> I generally have an airline in mind first_

Isn't the point of the flight search sites to list all/most of the options that do a given trip, so you don't have to think about the details of which airlines fly where?

(This is assuming there aren't other reasons, like rewards programs with specific airlines or safety concerns.)

<comment><USER2> There are lots of prices not in GDSes, so they won't appear on Hipmunk. :(

</comment></comment></comment><comment><USER4> Hipmunk has the best interface of any travel site, and displays the same information in a easily understandable page than other sites take 15 pages to do so - but I've always been able to find cheaper prices elsewhere. Sometimes much cheaper!

If the pricing isn't right, than it's algorithims get thrown of to, so some flights which are better and cheaper aren't even displayed as it will have instead display some other flight which Hipmunk for some reason thinks is cheaper and so displays that instead.

The hipmunk interface is light years ahead of everyone else in terms of displaying information - but flights and pricing - not so much. I wish it was though, as I hate booking through sites like expedia where you have to fill out 15 gazillion things each time and it's a pain to compare different flights.

</comment><comment><USER5> I've tried Hipmunk several times because I feel like I should like it, and though I agree it has some great UI elements, I've never found a flight I've wanted through it. It just amazes me that it's still so hard to get quick and decent-enough results with semi-ambiguous depart/arrival dates. Though it's not perfect, Adioso.com i would say is the best flight search site I've seen for this (and find myself constantly going back to it because of this particular feature). It very quickly accepts ambiguous search terms, then quickly displays a nice price graph. As soon as I select a depart date, it jumps me to the return date price graph (if it's a return trip), and I'm done.

I just tried the price graph feature in Hipmunk, and I set my "outbound date" easily enough, but I can't for the life of me find how to choose my inbound flights?!

Edit: I just figured it out. I need to click on the plus to the right of the # of days selection to add +- days to consider. I'm not entirely sure this is intuitive or necessary?

</comment><comment><USER6> I don't doubt the sincerity of his own fondness of the site, but I still don't see why people continue to pretend that travel search is a pain point. Am I the only one who has no problem understanding travel search on Kayak and Bing? Travel search is a solved problem.

<comment><USER7> The travel market is huge and air search is still very fragmented with a lot of the low cost carriers (Southwest, Ryanair, etc.) not participating in metasearch engines. The most recent user research on travel planning/purchasing still shows most users visiting 6+ sites and spending a lot of time comparing prices, checking options, etc. so I think a lot of startups want to find a way to simplify the process. The problem with air though is the margins are low and outside of the UI, there's very few ways you can innovate with someone else's inventory.

At Room 77, we're exclusively focused on hotel search. This is also a market that's highly fragmented from a pricing/distribution perspective. You can get widely different pricing options for the same room at a hotel based on whether or not you're buying through the right channel. Sometimes, those channels are only accessible to travel agents or to wholesalers and other times the standard online travel agencies have the best price. We're aggregating every channel we can tap to find the best prices. Most people also don't realize that hotels discount for a lot of special groups like seniors, aaa members, military members, and government workers and those are not easily searchable today and we're starting to expose those in our search.

Of course, we've got a lot of work to do to simplify the UI and the search experience and would love to hear about any pain points you have when you're doing hotel search that we can solve.

Roger (ex-Farecast/Bing Travel, now Room 77)

<comment><USER6> There's not a whole lot can be done about fragmentation in search results for airlines that don't want to participate in comparison sites. The only way to fix that is for the airlines themselves to make the decision to change, and Southwest doesn't really have much to gain by doing so because they have a reputation for being a discout carrier despite having fares that are usually more expensive than many other major carriers. Same thing with Spirit Air. I usually maintain a short list of airlines that I know don't show up on travel sites and perform separate searches. Not the easiest thing in the world, but certainly not what I would consider a major pain point in my day.

In any case I don't see how Hipmunk eases that process at all. To me it is just a different view setting for a typical search site, which seems more like a feature than a game-changing business. Maybe I'm wrong, but I've tried searching the site a couple times but went back to using Bing and Kayak because I think they offer the best travel search that I've seen. I don't have anything against the site or its founders, I just have a hard time believing articles like this that rave about how much better the process is. I just don't see it, and based upon what others have written I think a lot would agree. It's not about being a naysayer, I just like to try to keep an objective viewpoint regardless of who is behind the business. If I thought it was an awesome service, I would certainly give it it's due.

</comment></comment></comment><comment><USER8> I love Hipmunks interface, but it usually fails at finding the cheapest available price.

I've used flightfox.com, a crowd sourced flight finding service, a few times and I've been surprisingly impressed each time. The guys on that site have found me some incredibly cheap flights that I have no idea at all how they found. I've saved a ton of money using it.

It's great to pay someone a small amount of money to handle the pain in the ass that searching for flights is.

<comment><USER9> Flightfox is pretty awesome, but they're generally for more complicated itineraries that require searching over lots of different variables (e.g. dates, layover, multiple stops, etc.). Hipmunk I've found is great for finding that quick flight from BOS<->SFO on dates I'm certain about. I imagine Hipmunk may expend the kind of usage cases they're optimized for as they grow.

</comment></comment><comment><USER10> > _George Orwell said journalism is "printing what someone else does not want > printed: everything else is public relations."_

Orwell? I'm pretty sure it was Lord Northcliffe (founder of the Daily Mail in late 19th century) who said _"News is what someone wants to suppress. Everything else is advertising."_

<comment><USER11> Yeah, it wasn't Orwell. It just hopped into Orwell's orbit because he has the greater mass. Quotes get acquired by market leaders over time.

Why do I say it wasn't Orwell? Because [https://www.google.com/search?q=everything+else+is+public+re...](https://www.google.com/search?q=everything+else+is+public+relations) produces no source, just a plethora of (extremely recent) attributions. Similarly with Google Book Search. If you go back to 2003 you can see variants of the quote being attributed to David Brinkley ([http://books.google.com/books?ei=5WjvT-6JKsrgqAGi9cCFBA&...](http://books.google.com/books?ei=5WjvT-6JKsrgqAGi9cCFBA&id=VydZAAAAYAAJ&&q=%22everything+else+is+public+relations%22#search_anchor)). Changing wording is a tell-tale sign of misattribution, by the way, because when quotes are severed from any canonical text they become free to evolve.

Probably the OP got the misquote from goodreads.com because that's the top result Google gives for it, and the OP links to the goodreads.com entry for Orwell (though not to the quote).

There are many more and much older citations for the Northcliffe quote you mention, though the original source is apparently lost in time, or at least lost to 5 minutes of googling.

I find it interesting that the quote hopped to Orwell instead of to Rupert Murdoch. Almost by definition, there are only a few possibilities for any hop. Murdoch is the natural inheritor of the social category (press baron) but Orwell is the more natural heir to the content. But by being attributed to Orwell, the quote acquires an ethical connotation it didn't have before. Now it's of a piece with "speaking truth to power" and "comfort the afflicted and afflict the comfortable" ([http://mikeswritingworkshop.blogspot.com/2010/03/comfort- aff...](http://mikeswritingworkshop.blogspot.com/2010/03/comfort-afflicted- and-afflict.html)), which I doubt Lord Northcliffe would have endorsed as his mission.

That's probably also why "advertising" flipped to "public relations" in the phrasing. Advertising is legitimate in a newspaper while public relations is sinister. So these things undergo semantic hops as well.

This would be a good one to email to the masked detective at <http://quoteinvestigator.com/about/>.

<comment><USER10> Thanks for this investigation! What I like about the Northcliffe attribution is that the guy was not a saint; he practically invented tabloïds. That lends a very practical aspect to the quote -- secrets sell.

Journalists are not fighting holy wars, they are printing secrets, _and that's what makes them good journalists_. People who print things "that nobody wants to suppress" aren't journalists. They're more like... "useful idiots"?

Now the problem with the OP is that his post has absolutely nothing to do with good or bad journalism; it's precisely a PR stunt for Hipmunk, which I certainly don't object to (AFAIK Hipmunk is a very fine service); I object to the fact of calling that piece "journalism" -- and invoking Orwell on top of it!!

</comment></comment></comment><comment><USER12> Bing Travel: <http://www.bing.com/travel/> (aka FareCast) is my personal favorite.

Their price predictor for certain routes is quite accurate.

</comment><comment><USER13> Ever used momondo.com? Love the site - it's the first app I look up these days.

<comment><USER14> Thanks for the link. I often don't care if I arrive a day earlier or later, and the quick day switching is something I miss in Hipmunk. Kayak is alright, but momondo seems to do an even better job.

<comment><USER13> Do check the list of sites they search: <http://www.momondo.com/we-search/> I don't remember how I stumbled upon these guys, but generally their flight results are the cheapest. They don't do too well in hotels (I tried US ones) though.

</comment></comment></comment><comment><USER15> Hipmunk serves a niche within the industry by providing travel and flight info in a unique way, and they do it well. As the story notes, they won't necessarily find the cheapest flight or present the most flight options. I think it is a good case study of a service succeeding in a narrow segment as opposed to trying to be the end-all, be-all provider.

</comment><comment><USER16> The comments here are more negative than I expected (because my sense is there is a lot of positive Hipmunk love/hype/PR going around and it is a YC darling). Anyway, just an observation. I too have tried to use HM at travel booking time and so far have never found or booked a flight through it.

<comment><USER17> Or because it's a bought article. Forbes has zero integrity and I wouldn't doubt for a second there's some sort of back-scratching/kickback/payola situation going on here.

And because, quite frankly, Hipmunk just isn't that good.

<comment><USER18> If you have a source for this I'd love to see it. The only unethical behavior I've seen at a major publication was at the WSJ, and there it wasn't payola. They have writers who blatantly distort the facts, manufacture quotes, and screw people by "forgetting" that something was off the record if it fits their spin.

Only thing I can think of that comes close is some of the trade press for industries that are dominated by a few big players. Trade press often are getting a huge percentage of their print ad revenues (and sponsorship dollars for conferences) from one or two companies, and will bend over backwards to avoid criticizing them. They'll also do slam pieces on upstart companies. But there's no explicit agreement going on, they just know where their bread is buttered.

</comment></comment></comment><comment><USER19> _The winners from here on out will the ones who make the Web functional and simple._

On a site with lots of ads (including a popup ad), social media "sharing links", a sidebar with unrelated content, and persistent top- and bottom bars.

</comment><comment><USER20> I'd like to recommend Dohop (<http://www.dohop.com>). We try our best to not only get the cheapest prices but to also display the complete price, that is, including potential credit-card fees, booking fees etc.

We also have a nice affiliate-service where you can set up your own Dohop- powered flight-search engine on your site and customize it to your liking. (<http://whitelabel.dohop.com/>)

Dislaimer: I work for Dohop (if you hadn't already guessed it).

</comment><comment><USER21> Hipmunk has a great interface but is totally unusable for one reason: they don't list all flights.

This may have changed since the last time I checked (within the past year), but Kayak would list many more flights than Hipmunk would. Until they have data for ALL flights, what's the point?

Kayak is pretty awesome. The one feature I'd like them to add is a filter for flight duration. I can -sort- by duration, but I can't tell it to just ignore 15+ hour journeys when it's showing me ~8 hour journeys.

</comment><comment><USER22> As a hacker, for me, the best airline search website would be something that presents all available flights as a gigantic SQL table (or set of tables) so I could just type in a SQL query:

select * from allflights f where start = 'London' and end = 'Chicago' and roundtrip = true and airline in ('American', 'Virgin') etc.

<comment><USER23> You want ITA Matrix:

<http://matrix.itasoftware.com/>

They have an incredibly powerful query language called QPX. Your search would be as follows:

      LHR VS,AA ORD (nonstop)
      LHR VS,AA+ ORD (zero or more stops)
      LHR VS,AA NYC,IAD ORD (with at least one stopover in any NYC airport or at Dulles)
      LHR VS NYC AA ORD,MDW (Virgin to NYC, American to ORD or Midway)
      LHR F+ ~IAD ORD (any number of legs, but don't stopover at Dulles)
      LHR VS ORD / f bc=J|bc=W (nonstop on Virgin in full-fare  business class or premium economy)

You can get even more complicated by specifying booking classes, operating airline, specific flight numbers, etc. All this, and it gives you the same time-bar interface as Hipmunk (it's where they got the idea, in fact) which is a fantastic way of visualizing the length of flights, stopovers, different airlines, etc.

For someone who travels a lot (like me) it's indispensable.

The only caveat for me (and this applies to all US-based travel search engines) is the lack of data from low-cost carriers (Southwest, AirAsia, etc) and only Y (full-fare) fare data for many Asian carriers.

<comment><USER24> And we (Hipmunk) support the first 4 of those too. Just type two colons after your city code. :)

</comment></comment></comment><comment><USER25> For me there's Southwest, and everything else that's usually much more expensive. So I won't be using Hipmunk much for air. I also find Southwest's interface to be excellent. I really like Hipmunk's hotel search.

</comment><comment><USER26> The fact is that Hipmunk is oriented for people searching shorts travels (cabotage) meanwhile the competence (AKA Kayak, Expedia, etc) offers best options for longs travel (for example, for holidays).

</comment><comment><USER27> Proof that kitsch can get you pretty far. But it's time for this site to start refining the visuals a bit.

I count seven different font sizes on the home page alone.

</comment><comment><USER28> It's too bad it takes 15 seconds to perform each search...

Ever tried Google flight search? Instant.

<comment><USER29> True, but Hipmunk searches all airlines almost all over the world, and allows all destinations all over the world. 15 seconds is not a lot when comparing it to other flight planning websites.

<comment><USER30> It does search world-wide, but not very well.

I happen to be booking a flight today, so tried it.

I need a flight from Quimpere (France) to London (City Airport). Expedia brings up the usual suspects, and I chose a direct British Airways flight for ~£100.

Hipmunk comes up with a single result - an American Airlines flight via Orly (Paris) for over $800.

<comment><USER31> Yes, noticed the same thing. For a site to be called "World's best travel site" it needs to work all around the world and not only in the US.

</comment></comment></comment></comment><comment><USER29> What's even more incredible is that their IOS app is _more_ useable than the regular website.

</comment><comment><USER32> It's not even close to the world's best travel site. I've looked at it before - maybe it's good in America but outside the results are bizarre.

I̶ ̶j̶u̶s̶t̶ ̶t̶r̶i̶e̶d̶ ̶i̶t̶ ̶a̶g̶a̶i̶n̶ ̶-̶ ̶S̶y̶d̶n̶e̶y̶ ̶(̶S̶Y̶D̶)̶ ̶t̶o̶ ̶S̶a̶p̶p̶o̶r̶o̶ ̶(̶C̶T̶S̶)̶ ̶m̶i̶d̶ ̶s̶e̶p̶t̶e̶m̶b̶e̶r̶.̶ ̶J̶u̶s̶t̶ ̶g̶o̶i̶n̶g̶ ̶t̶o̶ ̶q̶a̶n̶t̶a̶s̶.̶c̶o̶m̶ ̶d̶i̶r̶e̶c̶t̶l̶y̶ ̶g̶i̶v̶e̶s̶ ̶m̶e̶ ̶~̶$̶1̶1̶0̶0̶ ̶f̶o̶r̶ ̶t̶h̶e̶ ̶r̶e̶t̶u̶r̶n̶ ̶f̶l̶i̶g̶h̶t̶ ̶-̶ ̶h̶i̶p̶m̶u̶n̶k̶ ̶c̶a̶n̶'̶t̶ ̶d̶o̶ ̶b̶e̶t̶t̶e̶r̶ ̶t̶h̶a̶n̶ ̶~̶$̶1̶3̶5̶0̶.̶ ̶G̶r̶e̶a̶t̶ ̶s̶t̶a̶r̶t̶.̶ (edited - prices have changed since yesterday and my criticism is no longer valid)

OK, so I am thinking of going over to the old country, SYD-LHR mid october. That's a long flight, I want at least premium economy - wtf, I can't even specify that on hipmunk! Well, that search is over even before it begun. I am sorry but a travel site that doesn't know what premium economy is is literally useless.

I don't want to sound like a dick. This stuff must be hard. But World's Best Travel Site? Are you kidding? How about learning "chopsticks" before you claim you're the greatest pianist in history?

(edit - the sapporo price changed under me in the last few hours, rendering my comment pretty void, right now at least. What I said about no prem econ stands, though. I'm a tall guy, and I'll flat-out refuse an economy flight more than 8 hours. Business is very expensive if I'm on my own money. Premium economy is a lifesaver to me. It needs to be on the site, yesterday)

<comment><USER33> For the SYD-CTS comparison, does the quantas.com price include all taxes and fees, the way Hipmunk does?

<comment><USER32> Actually, it seems a sale or something just ended and the qantas.com price is back up to 1800!

I'll edit to remove that.

But yeah, all Australian sites have to state the fully loaded cost. I can't stand sites that don't do that..

<comment><USER33> I loved this deep-rooted aspect of Australian (and, uh, New Zealic) culture when I visited your part of the world. Hotel advertises "$129 / night"? That's exactly the amount that gets charged to your credit card.

</comment></comment></comment></comment><comment><USER34> I find Hipmunk's look unintuitive, but I can't speak to the prices because I don't use it anymore.

<comment><USER35> I'm not sure if I'm the only one who finds their UI confusing as hell.

<comment><USER36> it doesnt confuse me per se, it just values some things i dont care about. i dont need 80% screen devoted to when the flights are and how long there are. i only fly nonstop and pretty much dont care what time of day it is unless its really early or redeye.

</comment></comment></comment><comment><USER37> Hipmunk is good but not the best. Price and choice is still a huge factor for many consumers and Hipmunk still falls short on that front many a time.

Each aggregator has it's own unique advantages which have to be considered... Google is super fast with amazing flexible fare options, Kayak often finds amazing hacker fares and Bing's price predictions are very valuable. Combined they would make a formidable site...

Is there a solution? we believe there is... - www.Cheapflightsfinder.com is a new site that allows you to compare all of them - Hipmunk, Kayak, Google flights, Bing and many more in seconds - we call it meta-meta search and in our opinion it is the best way to make the most powerful search of all... Try it out - we think you will be glad you did.

Shah Sid (CEO - Cheapflightsfinder.com)

</comment><comment><USER38> Where is talk about www.skyscanner.com? What is better?

Perform entire month or year searches, choose things like ANY NYC or EVERYWHERE as a destination or departure.

I have saved hundreds on EVERYWHERE searches. If you can just get into a region like Europe or South East Asia then you can take advantage of their cheap rail systems andor internal flights.

The interface has cluttered over its evolution but it still runs better than Hipmunk on a low resource box andor low bandwidth.</comment>


Why Discord Is Wrong - <AUTHOR> https://entrepreneursjourney.blog/2019/07/09/musings-on-gaming-why-discord-is-wrong/ <comment><USER2> In-game voice chat has always been hot garbage on nearly every game that I have tried in comparison to 3rd party, Expecting the standard to rise for games when there is very little incentive to do so (you are not going to get sizably more players on good voice chat) and at the same time expect it for not just one game, but all of them?

Also why would one want to readjust voice settings for friends on each and every platform? I don't want X amount of configs that I have to adjust for my laptop/desktop and/or when the games inevitably undergo a major patch and decide to hard reset all the settings for no discernible reason.

That isn't even touching the fact that discord is not only dominate in voice base services, but it is aggressively expanding simply as a messaging service as well. Channels of permanence, aggregation of content and communities, high powered bot services, Discord isn't just games anymore. Server personalization with Nitro features is definitely a great play and imo this take severely underestimates the importance of communities outside the gaming sphere.

edit: Check out a bunch of major subreddits and they will have Discords, people are already cutting out FB and a combination of pseudo-anonymity and personal community feel and you have Discord taking a slice of FB groups, hell I recently pivoted my music chat-groups to Discord, I don't even see why they won't eventually pivot to take bites out of Slack (I would assume they already are even without doing anything serious), hell for more certain tech-oriented groups it serves as the official platform of communication due to ease of accessibility and moderation tools.

</comment><comment><USER3> > _Once upon a time, games like World of Warcraft and Second Life included > their own voice chat systems directly within the game._

I played WoW near launch in 2004, all the way through 2017. Voice chat was not an early feature of WoW - this was not added until much later (I believe 2016/2017)

Pre-Discord days were predominately Vent, with Mumble gaining popularity a little later on. Many guilds also used Skype. Up until the end of my playing - no guild I knew of used the in-game voice chat.</comment>


Mid air airplane repair: Troubleshooting at WhatsApp [video] - <AUTHOR> https://codesync.global/media/mid-air-airplane-repair-troubleshooting-at-whatsapp/ <comment><USER2> Debugging live in erlang and code hot-loading is addicting, but sometimes one small mistake means you blow up a server or even whole system. And it really feels like mid air airplane repair, especially when your server is serving 1M events a second and you try not to drown your console in debug output. One mistake and your terminal is blocked trying to display several GB of text.</comment>


Ask HN: 32 OR 64 BIT for the JVM? - <AUTHOR>

While reading this book over here:
https://www.safaribooksonline.com/library/view/java-performance-the/9781449363512/ch04.html
I can see the following section, which says:
32 OR 64 BIT? If you have a 32-bit operating system, then you must use a 32-bit version of the JVM. If you have a 64-bit operating system, then you can choose to use either the 32- or 64-bit version of Java. Don't assume that just because you have a 64-bit operating system, you must also use a 64-bit version of Java.
If the size of your heap will be less than about 3 GB, the 32-bit version of Java will be faster and have a smaller footprint. This is because the memory references within the JVM will be only 32-bits, and manipulating those memory references is less expensive than manipulating 64-bit references (even if you have a 64-bit CPU). The 32-bit references also use less memory.
Chapter 8 discusses compressed oops, which is a way that the JVM can use 32-bit addresses even within the 64-bit JVM. However, even with that optimization, the 64-bit JVM will have a larger footprint because the native code it uses will still have 64-bit addresses.
The downside to the 32-bit JVM is that the total process size must be less than 4GB (3GB on some versions of Windows, and 3.5GB on some old versions of Linux). That includes the heap, permgen, and the native code and native memory the JVM uses. Programs that make extensive use of long or double variables will be slower on a 32-bit JVM because they cannot use the CPU's 64-bit registers, though that is a very exceptional case.
Programs that fit within a 32-bit address space will run anywhere between 5% and 20% faster in a 32-bit JVM than a similarly-configured 64-bit JVM. The stock batching program discussed earlier in this chapter, for example, is 20% faster when run on a 32-bit JVM on my desktop.
Is any one have tired this? Running JVM on 32-bit mode on 64-bit machine and have a success story? <comment><USER2> I personally am skeptical of the value of 64-bit computing.

Recently I heard - I'm not dead certain this is really the case - that Apple will soon require iOS Apps to be built for 64-bit ARM.

There are some good reasons for 64-bit, such as memory-mapping an entire database file. 64-bit x86 has a few more general-purpose registers than does 32-bit x86, but I don't regard that as evidence of the superiority of 64-bit, rather I regard that as a failing of the x86 architecture. There are other instruction set architectures such as PowerPC where 32-bit has lots of registers. ARM has more than x86, less than PowerPC.

32-bit pointers require less storage than 64-bit ones. I know that's obvious but in the case of Java, there is a great deal of allocation so you have to consider the memory space used to store all those pointers.

It's not so much that all those pointers would use up all your gigabytes, but that they'd use up more of your L1 cache.

If you don't need such a large range of integer values you don't need so many bits in your integers. If you have a for loop that counts from 0 to 9, you don't really need 32 bits let alone 64.

<comment><AUTHOR> > but I don't regard that as evidence of the superiority of 64-bit, rather I > regard that as a failing of the x86 architecture.

Can you say me why that is the case?

<comment><USER2> Among the advantages of x86_64 is that it has more general-purpose registers than 32-bit x86, which was originally designed to do everything on the stack.

However, one can make a 32-bit CPU that has lots of registers, it just won't be an x86. Such processors typically have calling conventions in which the first few arguments to a function are passed in registers. Because there lots of registers, sometimes there are enough that you don't need to store any local variables on the stack.

It's not just that you can operate on registers faster than memory, but not having to access memory at all means you don't thrash the cache as much.

It's not just modern processors; the ARM architecture dates back to the Acorn personal computer, which was made at roughly the same time as the 8086 IBM PC.

The 68000 CPU has eight general purpose data registers and eight address registers (one of which is the stack pointer). It was made by Motorola at roughly the same time as Intel introduced the 8086. While the 68k only had 16 external data lines and 24 external address lines, it had 32 registers, and a 32-bit instruction set architecture.

The reason everyone uses x86 or x86_64 these days, has a lot to do with that the 16-bit 8088 was quite a lot cheaper than the 32-bit 68k.

There were other factors than the instruction set and the size of the registers; little-endian processors are easier to design, use less real estate, are cheaper to manufacture, I expect have a better yield at the fab, perhaps they use less power.

However all of those factors are, today, quite insignificant. The extra circuitry required for a big-endian CPU doesn't cost much as compared to the cost of everything else today's CPUs can do.</comment></comment></comment>


C or C++ for my game engine? - <AUTHOR> http://crafn.kapsi.fi/new_engine.html <comment><USER2> Author here. I'm positively surprised, constructive discussion on internet!

There's been some discussion about using Rust.

Rust is an interesting language, and has definitely potential substituting C and C++ in some domains. The main reason I'm not so interested in using it is for game development, is because it's more complicated than C (like C++), and the complications are a bit off from what I'd want (like in C++). Just a quick googling reveals that rust mangles names by default, and doesn't have reflection, so I'd probably be in for a lot of negative surprises. Add that with being indifferent about the absolute security, and soon my code is mostly inside unsafe blocks so that I don't have to spend time convincing the compiler my pointers are safe. Maybe. I haven't done much programming in Rust. There are some nice convenience features though, when comparing to C, but they seem to be rather minor things.

It comes down to choosing between two non-ideal solutions. I value simplicity more than some, so favoring the simpler one feels more natural to me. Sure, when you need the safety then Rust seems like a decent choice.

<comment><USER3> Only responding to one element of your comment -- but I think that Rust's safety features are over-marketed in my experience. The safety Rust offers is only part of a package that provides high-performance high-level abstractions over functionality that is normally very bit-twiddly in C. So far, my favorite thing about Rust is not its safety, but how easy it is to write good performance software using abstractions that are as convenient as Python (or another high-level language). The safety is just icing on the cake at that point (for me at least).

EDIT: Re: pointers -- Rust is a lot easier to write if you just ignore pointers. Really. Either pass small structs by value or pass references (either immutable or mutable), and let the compiler handle the actual pointer manipulation.

<comment><USER4> I think they are marketed exactly well.

If it wasn't for the uptake of UNIX, we probably would never had to discuss about memory corruption in 2016, other than writing stuff like device drivers.

There is now a whole generation that thinks C was the very first systems programming language, the compilers were as good on day 1 as they are today and it has became some kind of sacred cow.

[http://www.itsecdb.com/oval/definitions/product-47/0/Linux-L...](http://www.itsecdb.com/oval/definitions/product-47/0/Linux- Linux-Kernel.html?family=unix)

Regarding memory corruption and games, it is how we get around to achieve game cheats.

<comment><USER3> I don't think Rust's safety guarantees are over-marketed because they aren't important, but because many of the benefits of the language/stdlib/tooling are available to people who don't frequently have to deal with memory corruption. It's not that the safety isn't valuable (I just about pulled all my hair our implementing custom data structures in C++ last time I did it), but that most developers think it's not as useful as other marketable elements of the language.

</comment></comment></comment></comment><comment><USER5> I can sense the pitchforks coming out already! A quick disclaimer first of all: I LOVE C. Love love love it. I'm a reverser so it's my native tongue. I get as much joy from the actual creative process of coding and playing with pointers as I do from having a reliable working finished project.

No offense, but I think you suffer from the same problem. You're in love with coding, so being forced to micro-manage things the 'C' way isn't a problem for you.

But at some point in time you have to look back and justify the hours spent. You -will- be more productive by having the majority of your code in C++ 11. Things -will- be easier to maintain for yourself and others.

I have written absolutely brilliant C code that I'm very proud of, but if it's been a while since I looked at the project I have to sit down for an hour and re-familiarize myself with how things work....and I'm the one who wrote it.

Based on what you've written I can tell that you don't have the experience to justify writing the bulk of your code in C. Guys who inline ASM all day long can have a hard time doing that. I know it's harsh, but it's meant as helpful criticism.

One other thing: You don't have to pick just C or just C++. If you have engines in your project that are clearly better in C and you enjoy doing it, more power to you....I encourage you to do that. However, it's very easy to get hung up on C and lost in your own C world of imagined optimizations.

My advice: Start off with solid C++, move parts to C later on when testing justifies it and your amount of free time justifies it.

<comment><USER6> I don't think you're addressing the concerns which made him choose C. In his case: debugging is complex, compilation is slow, name mangling is unreliable, global state is abound.

He makes no mention of inline assembler, nor does he encourage premature optimization. He talks instead about a concrete problem he had: the typical performance of operations was not good enough, thus no single optimization would help much. He also mentions that the abstractions encouraged by C++ do not help you build data-oriented applications (e.g. games); using them properly actually hurts performance.

<comment><USER7> meh - imo, even if C++ is a ridiculously bloated beast, it has some things that are indispensable for game programming that C doesn't. vector math without operator overloading is gross. being able to have generic containers with templates is really useful, even if templates are gross. encapsulating functionality in classes is always useful, and you can get a lot of use out of inheritance without overusing it.

these things are really codebase readability and maintainability concerns, and to me they're orthogonal to "data-oriented programming", things like optimizing for cache locality, SoA instead of AoS, not calling virtual methods in warm or hot paths, throwing away malloc and using purpose-built custom allocators, SIMD/AVXify all the things, etc. etc.

it's a lot harder to handle the insane, byzantine complexity of a game engine in something as pared-down as C.

with that said, i don't like C++ and i definitely don't think it's a beautiful language by any means.

jonathan blow's new language, jai, is very interesting. purpose-built for game programming. check it out if you don't know about it yet. it's looking really promising for all types of high-performance, game-like projects.

<comment><USER8> > vector math without operator overloading is gross.

Many C compilers can use normal infix operators with SIMD vectors and it will have better performance than C++ operator overloading (especially in debug builds). All you need is a typedef.

        typedef float vec4f __attribute__ ((vector_size (16)));
        vec4f a = { 1, 2, 3, 4 }, b = { 5, 6, 7, 8 };
        vec4f c = a * (a + b);

The typedef is slightly different for Clang, but that's just one line. This code should work with GCC, Clang and the Intel C compiler. MSVC doesn't do this, but I don't write code for MSVC any more because I can compile compatible object files with Clang.

In my experiments, I've noticed that you get the best performance by passing vectors and matrices by value, not by pointer or reference. It also makes the API nice, because you can return matrix values, e.g. `mat4x4f mvp = matrix_product(projection, matrix_product(model, view))`. In some nasty cases you might need to add force_inline attribute, but most of the time the compiler will inline the functions anyway.

In C++ with operator overloading it's easy to do stupid things like in-place addition (e.g. operator+= for a vec4f) or start transposing matrices in place. This will make the compiler emit memory load/store instructions when you'd want to have these values in registers.

> being able to have generic containers with templates

Generic containers are somewhat of an issue with C, but most of the std::containers are not suitable for some game development tasks (this is why projects like eastl exists). I prefer using intrusive containers in C, similar to how the Linux kernel deals with linked lists and red-black trees. Even the C++ standard library (the GNU one) is internally implemented this way, the "generic container" is just a thin type safety shim on top to avoid template bloat.

<comment><USER9> > In C++ with operator overloading it's easy to do stupid things like in-place > addition (e.g. operator+= for a vec4f) or start transposing matrices in > place. This will make the compiler emit memory load/store instructions when > you'd want to have these values in registers.

That sounds like a failure of inlining. If you're at the point where a single stack spill makes a difference, you won't want to pay the cost of the calling convention spills either. And if you _are_ inlining, then SROA and mem2reg will easily remove those load/store instructions. Modern compiler optimizations make what you describe not a problem anymore.

<comment><USER8> > Modern compiler optimizations make what you describe not a problem anymore.

Yes, it _should_ get inlined, but I've seen this fail in a recent-ish GCC (4.6 to 4.8 or so). And there's still the issue of debug builds being slower even if the compiler works perfectly in optimized builds.

Operator overloading will only work with SIMD if you write your vector class using intrinsics or SIMD extensions anyway. If you're doing scalar loads and stores, you can't rely on getting SIMD instructions in the output.

<comment><USER9> > Yes, it should get inlined, but I've seen this fail in a recent-ish GCC (4.6 > to 4.8 or so)

Seems like a pretty bad GCC bug then, one that should be fixed upstream.

I really dislike it when code avoids functions because of fear that they won't be inlined (or to try to work around compiler bugs to that effect), because doing this dramatically reduces code maintainability and safety in exchange for very little benefit, given the inline hint keyword and __attribute__((always_inline)).

<comment><USER8> GCC's inlining has been a bit brittle, especially when dealing with vector arguments, and also depending on the ABI (4x double vectors without AVX, etc). It's much better in GCC 5.x now.

I generally use always_inline for vector arithmetic functions, just to be sure. You never want to have a function call to do just a few SIMD instructions.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> You speak about perfomance a lot, but do you actually have it as an important requirement, or is it just fun problem to tackle as programmer? In modern game development, it's usually the latter — most hobby game projects don't have art assets detailed enough to be slow on platforms where your end-users actually will play your game.

I make games in Unity/C#, and yes, of course it's slower than a custom C solution. But instead of spending time on writing my own containers and memory allocation, I spend time writing game logic. Instead of optimizing game to run from 100 to 150 FPS on my computer, I'd rather spend this productive time making 5 variants of the same game mechanic to find out which is more fun. Even if the game runs in just 30 FPS.

Of course, I sometimes try to research low-level stuff, write my own renderer, or do a small experimental project in pure C, but then my goal is to research, not to write a game. I can hardly imagine a project, where the goal would be to develop a game, and not to research, where using C and having to spend so much time on this matters would be a good trade-off compared to working on actual game mechanics in higher-level language.

<comment><USER11> Unity is written in C. That the game logic is written in C# is hardly relevant as you explain. In fact this guy might still embed C# at some point if he wishes for his logic to be less painful to write.

The author states at the beginning that his goal is writing an engine and only after that write a game. You are right on all other points though, most people working on game engines simply never get to the making a game part. There's simply too much to do.

I spent a couple years' working together with a friend every now and then on a game+game engine in C#. We did get past the game engine phase because it was kept simple (ECS + box2d and simple monogame 3d renderer) but we eventually gave up because even though game logic was progressing swiftly assets were just a pain in the ass.

Most low level engineers (as we are/were) underestimate the work it requires to get a proper asset pipeline set up. You're never going to build a 3d game if you can't load cheap 3rd party assets with their animations and materials. And then the level designer which is basically just another game in your game.

We went with UE4 as a change of pace and man is it librating not to have to worry about the limitations of your homebrew engine anymore. In UE4 literally anything is possible (you have the full source after all) and its always less work.

<comment><USER10> I guess, my question to the author should've been: why are you trying to write a game engine? It's a completely different task than writing a good game, and mostly conflicts with it.

<comment><USER2> Two reasons: Creative interests which make traditional game engines a hard fit. I could make compromises to the design, but as I also have technical interest in making game engines, it's a double win.

</comment></comment></comment></comment><comment><USER12> > I have to choose between writing duplicated code, writing a code generator, > or tedious macro stuff for generic code.

Code-generation all the way. Use an expressive language like python/lua/tcl/lisp/scheme to work on a higher layer than C.

Two-language programming (one GC scripting, the other C) beats the heck out of C++, in terms of best of both worlds: expressivity in higher layer, performance in lower layer.

C++ has a dirty secret no one likes to talk about. Stroustrup himself was a two-language programmer. C++ was C with classes where the classes were built with unhygienic C macros. When he decided to show his work to "average joe programmers" of the world, he turned it into one language (it turned out he was not a very good language designer so the world has to live with it).

If you're working with C++ you are Stroustrup's average-joe customer.

If you're working with two-language programming you're Stroustrup himself (even better cz you're using a higher language way better than the C macro system)!

Other than that. You want superpowers? give your text-editor your C parser (something similar to this [1]). Structured-editing can do amazing productivity gains in C. This is something I'm still looking into (using some vi/vi-clone, or emacs/emacs-clone, and pycparser) but I very excited about the possibilities.

[1] [https://www.jetbrains.com/mps/](https://www.jetbrains.com/mps/)

<comment><USER13> Script it out in python then replace the hot spots with c!

<comment><USER14> Or better yet, Lua!

<comment><USER13> Why do you prefer lua?

</comment></comment></comment></comment><comment><USER15> > 5\. realize that I shouldn't be using some parts of C++ (exceptions, stdlib)

> 6\. start to ponder if I really need even the good parts of C++

This reads like wisdom and maturity to me; unfortunate, but not surprising, that people are quick to judge.

Last game studio I worked at, we wouldn't have given up C++, but there were frequent conversations about its pitfalls and complexity, and quite a few rules and conventions recommending against, out outright prohibiting some C++ practices, exceptions, for example.

Before that, the last film studio I worked at, a bad experience with C++ led them to chuck it (before I got there) and go object oriented C. I learned their style of C and quite liked it. I missed operators and templates a bit, and it felt a little verbose, but I came to really appreciate the simplicity and explicitness.

Sounds like it wasn't an easy choice, but on a solo project that large you have to prioritize what makes you feel the most productive in the long term, and there are always tradeoffs.

<comment><USER16> I don't use C++ for anything serious, can you explain what's wrong with exceptions and the std lib?

<comment><USER17> For exceptions: \- A bit unpredictable (hard to optimize)

\- Introduce a lot of exit points which are hard to find

\- They deviate from the "pay what you use," since they generate some extra code

\- They can introduce some nasty performance penalties (I experienced this myself a few yeas back, the compilers might be smarter these days, maybe)

About the stdlib: There's a "myth" that often times the stdlib/stl is slow and doesn't do what you expect (unless you've thoroughly read the documentation, which everyone should do anyway). I can't say I was personally affected by this since I also use C++ for nothing too serious. I said "myth" because the argument against the slowness it that this is an outdated notion.

<comment><USER8> Most C++ compilers these days should have zero cost exception handling, meaning that the non-exceptional path should be free. This works by making the compiler add exception handler data to the executable file, ie. telling where the catch() blocks are. When an exception is thrown, the stack trace is analyzed and the appropriate catch handler is found by searching for the return addresses in the exception handler data.

This can make C++ with exceptions faster than C with error checks because there's no branches to check for every error condition. Using __builtin_expect for marking the error conditions as unlikely may mitigate this issue.

<comment><USER18> The cost is that you have to ensure that all your code is exception safe unless you are extremely careful to ensure that exceptions are only thrown in places you've expected and coded for.

Exception safe code is both difficult to write correctly and often has a significant run time cost.

<comment><USER8> Agreed on both accounts but the grandparent comment was talking about runtime performance penalty, which is gone (for the non-exceptional path) in modern implementations.

But yes: exception safety, even basic safety (don't leak resources or crash) is difficult, let alone strong exception safety (no side effects if exception occurs).

</comment></comment></comment></comment></comment></comment><comment><USER19> A good article, but what disturbs me is that the author, while obviously aware of relatively good C++ and programming practices, has somehow arrived in a place where he discounts essentially all of C++s core competencies... like claiming RAII is "far from optimal", that exception safety is "a constant mental overhead", and that copy and move semantics involve writing "a lot of code". These are fairly outrageous claims, and it all smells of total burnout, and losing sight of the forest for the trees, to me.

I feel if the author refocused on his C++ basics instead of bemoaning lots of peripheral crap (like OOP, and the unsuitability of the STL for game dev) he'd reconsider some joy in C++ again.

<comment><USER2> >These are fairly outrageous claims, and it all smells of total burnout, and losing sight of the forest for the trees, to me.

Maybe, I don't know. I have been a lot happier with C though, while still writing some C++ code during the year.

<comment><USER20> I'm _happy_ when I'm writing C. It's only when I look back on a week of coding and realise how little functionality I implemented that I realise it's a bad idea.

</comment></comment></comment><comment><USER21> I agree wholeheartedly with most of this post, but ended up coming to a different conclusion to the author. I don't trust myself to write good, maintable and safe C, so instead my semi-toy game engine has been (and is being) authored in Nim instead, which I've found quite interesting. Writing safe wrappers over C-libraries is a challenge in and of itself!

<comment><USER3> Isn't Nim (and almost all of its standard library) garbage collected by default? I've been very intrigued by Nim but it seems that while it has nice native/C code generation, it opts into my least favorite element of "high- level" languages.

<comment><USER21> It is, yes, however it's a bit different to most other GC-based languages in that it's soft-realtime tracing GC. In addition, you can manage your memory completely manually if you like, and in-fact thats how you interface with C libraries, which I can say from experience works much nicer than I honestly expected going in to it.

Excellent reference regarding Nim's GC and what it does differently here: [http://nim-lang.org/docs/gc.html](http://nim-lang.org/docs/gc.html)

</comment></comment></comment><comment><USER22> > When using OOP, like the idiomatic C++ coder does

Huh? Sure, you can go OO architecture astronaut in C++, but if that isn't a good model for your problem, don't do it. I see more of a focus on generic programming, anymore, in C++.

</comment><comment><USER18> Excellent article. I'm not sure I agree with all the points, but none of them are stupid or necessarily wrong. It's a very constructive argument.

I've been thinking for a while that the problem with C++ is that 100 decisions have been made both in the library & language and in "best practice" that all individually are good, but the combined effect has been unfortunate.

I'm not quite getting from the article why you can't write in the C "subset" of C++ and add in a few of the more helpful parts of C++ though.

<comment> loup-vaillant > _I 'm not quite getting from the article why you can't write in the C > "subset" of C++ and add in a few of the more helpful parts of C++ though._

I think this is because of C++ name mangling, which prevents the creation of a quick and dirty reflection system. And maybe compilation times, which must be higher since the compiler has to deal with all of C++, even if you don't.

</comment></comment><comment><USER23> Completely agree, this is why most game developers use only a subset of C++ as "C with classes", and at the end of that thought process some are going back to C completely (I haven't made the jump yet though, but have been pondering this for at least 2 years). What I still like about C++:

\- user-provided code called when an "object" goes out of scope

\- operator overloading sometimes makes sense

\- simple template-meta-programming sometimes makes sense (but could be replaced with other sorts of code-generation)

3rd party libraries are usually a pain to integrate when they have a C++ interface, and usually simple when they are just a C header, and when they can simply be dropped in as source into the project.

A good middle-ground is probably to build the building blocks in C, this way they are way better reusable then writing C++ code, also across languages, and tie the low-level buildings blocks together in whatever language one likes (even interpreted languages).

[edit: formatting]

<comment><USER24> Most are not writing their own engines anymore.

In this day of mobile and web gaming, indie developers everywhere, and game engines like Unity and UE4 being so accessible, I think more game developers are writing games in Java, JavaScript, C#, and other garbage collected languages -- not to mention "visual programming" of Unity and UE4.

If you're writing a game engine in C/C++ today you're probably never going beyond the desktop Windows platform.

<comment><USER25> Performance will be back if VR gets adopted. At 90 fps, you have around 11 milliseconds to update your game state and render views for each eye. That is not much time. C#/unity and scripting languages will have a noticeable penalty compared to native C code. Bloated engines will likely suffer as well.

</comment></comment></comment><comment><USER26> A lot of games run on Mono/.net Java etc. IIRC these languages have far more overhead. (I could be wrong.) So unless you suspect you need >9000 fps OR you are going to be doing a LOT of processing / complex game you might not need to worry about it ?

<comment><USER27> The JVM can run pure Java code to within 2× of native code (although it has a pretty weak vectorizer, so if you're getting vectorized speedups in native code, Java won't get you that). However, calling a native function from Java is a really high overhead call. Which means that the core engine likely can run at essentially the same speed, but the graphics is going to be slower.

<comment><USER28> Note that this is the default, standardized behavior. If you're willing to use Oracle (and I think by extension OpenJDK)-specific features then there are some functions with "unsafe" in the name that allows you to hand over memory directly to native code, instead of copying it over. The default behaviour is to copy all memory passed in and out of the JVM, so as to avoid native+java+GC messing with the same memory area (potentially at the same time).

<comment><USER29> Same problem writing the engine in C#. You often run into memory and GC problems that are a pain to work around.

</comment></comment></comment></comment><comment><USER30> As soon as I saw this headline, I knew there would be dozens of comments.

First of all, they are both great languages, no matter what anyone tries to tell you.

I went through this same dilemma and, while I have great respect for C, I soon realized that _my_ situation would be more productive with C++ and its tools immediately available. For one thing, a lot of important libraries that are common in games and graphics have C++ interfaces, so if you use C you are asking of yourself to exclude some great tools out there, or, go through significant steps to wrap some of them (which would still involve some C++ anyway).

</comment><comment><USER31> I would look at one if those new type and memory safe languages which are more pleasant to work with and usually faster than C/C++, esp. with concurrency. Pony, felix, nim, Julia, Ocaml, elixir, rust.

</comment><comment><USER32> This reminded me of Banished [1], a game developed by a single developer who also wrote his own engine (though in C++). His development blog [2] goes into quite a lot of technical detail.

[1] [http://www.shiningrocksoftware.com/game/](http://www.shiningrocksoftware.com/game/)

[2] [http://www.shiningrocksoftware.com/](http://www.shiningrocksoftware.com/)

</comment><comment><USER33> I can't help but think the author would benefit from some of the philosophy of James Hague (a game programmer):

[http://prog21.dadgum.com/](http://prog21.dadgum.com/)

Don't focus too much on technology, disconnected from what people (including you) might want to actually use. Otherwise you will not get the real inspirations -- even purely technical inspirations -- that come from something that you intend to use.

<comment><USER2> I get where that comes from. I surely did have the disconnection some years back, but think I'm on a better track now. Thanks for the link.

</comment></comment><comment><USER34> Has anyone attempted using Objective-C for game development outside of iOS gaming? It'd be interesting using it as an OO language substitute for C++.

<comment><USER35> No. It has the speed of smalltalk and the type safety of C.

<comment><USER36> That's a nice soundbite, but not really fair.

Modern Smalltalk-style languages can be fast. Look at Javascript! And in Obj-C, you can drop down to plain C when you need the speed.

It's possible to get your types mixed up when using non-generic collections, and that will throw an exception at runtime. No different from Go or Python.

In terms of memory safety, it's a step up from C if you use ARC, as all your object lifetimes are managed automatically. You can still get memory corruption if you're careless with arrays, but it's not really an issue with objects.

</comment></comment></comment><comment><USER37> Every one of his complaints has a good solution, albeit some not widely known. Except compile time, single source file or otherwise - the compiler is using lots of smarts and lots of library headers on your behalf.

That said, author has done a good job explaining his thought process in taking the rewarding-at-every-step path, given he's not a C++-wrangling junkie.

</comment><comment><USER18> Are there any other sources of information on "modern C"? I'm thinking particualrly on how to handle memory allocations well and safely, and how to write clean containers and algorithms. It's been a long time since I wrote pure C and I'd like to try it again!

</comment><comment><USER30> Wow, I had to change the brightness and contrast setting on my monitor just to read this article. What is the strategy behind this darkish font against black background? I wish more websites geared towards a reading audience actually provided a nice reading experience.

</comment><comment><USER38> I have recently started using myrddin (compiler here [https://github.com/oridb/mc](https://github.com/oridb/mc) ) as a c replacement.

It is still changing fast but I think it could be great for writing games in the future.

</comment><comment><USER39> > are going somewhat off already by definition, as they're focusing primarily > on safety, which is not the focus for most game code.

Depends on what you consider safety to be. A game engine that doesn't deadlock and doesn't crash should definitely be high priority!

</comment><comment><USER40> Why not Rust for example? If I'd be making an engine, I'd tried that.

<comment><USER3> "Safety-enforcing languages like Rust are going somewhat off already by definition, as they're focusing primarily on safety, which is not the focus for most game code."

I don't really agree with this assessment (I think rust's "safety guarantees" really amount to amazing compile time programmer assistance), but that's their stated reason.

<comment><USER4> What many that issue that kind of statements forget, is that safety is also a means to keep the game experience clean.

Exploiting buffer overflows, stack corruptions and friends is how we get to earn extra lifes, bypass hard levels, get extra ammunition and so on.

<comment><USER3> Are you saying those are good things or bad things in the context of games? As I commented elsewhere, it's not that I don't think that Rust's safety isn't important, but it's not the only worthwhile element of the language and I think it's good to recognize that its safety guarantees can eliminate many "non-safety" bugs in many programs.

<comment><USER4> I am saying they are bad things, then again game developers aren't known for worrying 1s about safety anyway, specially if that implies 1ms less, even if that isn't an issue for the game being developed.

<comment><USER40> The major benefit is simply avoiding all kind of crashes which plague many games.

<comment><USER4> That is another thing that sadly many game developers usually don't care that much, given time to market.

<comment><USER40> Which is surprising, since games are very much human faced, and those crashes is what's considered reducing the value quite a bit. So using something like Rust should be a big boon for game developers. The only issue is that some things will still remain in the unsafe area (i.e. interfacing with graphics backend and such), but at least the code that developers control can be safer.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER41> Thank you for this very detailed and interesting write up.

</comment><comment><USER42> what are your thoughts on using D? I find it to be a better C++ and a step up from C.

</comment><comment><USER43> I'd hazard to offer Rust :)

Someone has to.

<comment><USER44> The author does mention Rust:

> New and hip GC'd languages don't care about the priorities efficient game > engine code has. Safety-enforcing languages like Rust are going somewhat off > already by definition, as they're focusing primarily on safety, which is not > the focus for most game code.

However, I disagree with this. Rust does enforce safety, but once you have a feel for how the borrow checker works (which isn't hard at all coming from C or C++), it fades into the background. The real benefits of Rust for games are the build system, the module system, affine/linear types, and all the various syntactic features like pattern matching and expression-based control structures that make it way less crufty to read and write than C or C++.

Rust's biggest weakness for game dev (again) isn't the enforced safety, but the still-growing ecosystem. There's a few really good low-level libraries (Glium, for example), but if you stray beyond them it turns into a nightmare of writing your own FFI definitions and unsafe glue code.

<comment><USER45> Right. The last ultra-performance-oriented work I did (in C) I'd have loved affine types and a borrow checker. Used right, these kinds of tools not only don't get in the way (as you note) but prove tremendously useful when you need to refactor.</comment></comment></comment>


Cue's hookshot: hacking the iOS runtime for fun and profiles - <AUTHOR> http://tech.blog.cueup.com/hookshot-hacking-the-objective-c-runtime-for

<comment><AUTHOR> Robby from Cue here: we've found a ton of non-trivial performance wins for the Cue app by using this. Let me know if there are things we can do to make it useful for you too.

A lot of the inspiration for how to actually make this work came from Mike Ash's awesome NSBlog:

<http://mikeash.com/pyblog/>

<comment><USER2> A post like this is begging and screaming for concrete numbers. I want to see - initial perf, perf with Apple sampling, perf with hookshot instrumentation, perf after fixing issues found via hookshot.

<comment><AUTHOR> Fair point! It's hard to assign numbers to perf for something like an entire application - a lot of the wins we found were places where the main screen was locked (causing app un-responsiveness) or where we were able to change the order of some actions to get the app to render quicker.

I'd say the app takes around 2-3x less time to load than when we started our most recent performance quest, largely due to issues we found using hookshot. We did find some performance critical inner loops in our rendering code where we were able to achieve something like 10x speed-ups.

Apple's profiler has significantly lower overhead than hookshot - which makes sense given the relative amounts of information collected. Our app runs noticeably slower when hookshot is enabled, but when it is disabled, hookshot introduces exactly 0 overhead. We only enable it when we're specifically debugging performance issues.

<comment><USER3> Would love to see a concrete example of where this helped out. What's going on that's so complex under the hood?

<comment><AUTHOR> One example that comes to mind: we have a networking layer that prioritizes some HTTP requests over others. For example, we seed our cache by firing off requests for the next 30 days, but at a low priority. There was a bug in this layer where request initiation could block the main thread while unrelated work was finishing.

Another example: we used the "HOOKSHOT_TAG" macro to tag objects related to rendering different days in Cue (today, yesterday, tomorrow). This makes the thread activity graph use different colors for time spent on those objects. This helped make obvious a few edge cases where some rendering/processing for a day that was not on screen was done before the day that was.

</comment></comment></comment></comment></comment><comment><USER4> This kind of stuff is awesome. I made a profiler for ObjC that did a similar thing, but by programmatically creating a new subclass and only profiling certain instances.

On your prevent instrumentation proxy methods; if the original method references ivars without using self.x or [self x] do you notice weird results?

<comment><AUTHOR> Seems to work fine since we're dropping in the exact same implementation instructions as would have been there otherwise, and using the same object too. That way, any ivar references still correspond to the same positions in memory.

<comment><USER4> I misread you as running the original method on the proxy object. But if you don't, aren't you missing methods you do want to track called from methods you don't?

<comment><AUTHOR> The trick is that we use the same original object at the same address in memory and overwrite what class it thinks it is (as opposed to wrapping it). So in a way it becomes a proxy to itself.

<comment><USER4> I see, I thought you were using the proxy as normal and had programmatically made new classes also. But you are creating an object and then setting its class to the proxy. Neat.

</comment></comment></comment></comment></comment><comment><USER5> Off topic: The reason I closed my Cue account was two fold, because I would get notifications for calendar events sometimes _days_ after they had occurred, and because even though I linked everything under the sun to it, I would more often then not be presented with a day that has just sunrise and sunset on it. App just provided no real value, and I really wanted it to work and work well.

<comment><AUTHOR> Sorry to hear it! About two weeks ago we closed the last of our known push bugs. There is one that's left where iOS itself will re-send an old push along with new notifications which is fixed by a phone restart. (this happens with all apps, not just ours)

If you have time, email me at email@example.com - I'd love to talk about what things you wanted to see and let you know if any of them are on the roadmap.

<comment><USER6> I've run into that iOS push re-send bug a few times, but I've had trouble finding any information about the bug online. It seems to only happen to me for scheduled push notifications, but not immediate push notifications. Do you have any online resources that talk about this bug?

<comment><USER7> Engineer at Cue here.

We haven't been able to reliably reproduce the problem and haven't found much about it online. I've filed a bug report here if you'd like to add your two cents:

[https://bugreport.apple.com/cgi- bin/WebObjects/RadarWeb.woa/...](https://bugreport.apple.com/cgi- bin/WebObjects/RadarWeb.woa/58/wo/OAdgWRVJFkGt1VRYohMeeg/126.96.36.199.9)

<comment><USER8> Radar's aren't public. File a dup at <http://openradar.appspot.com>?

</comment></comment></comment></comment></comment><comment><USER9> Why/When is this better than Time Profiler?

<comment><AUTHOR> Time Profiler is a sampling profiler, this one is instrumenting. They're both useful at different times - we find this one useful for

* Thread activity graphs with drill-in

* Seeing accurate counts of calls

* More precise per-call timings of messages

* Measurement of messages with highly variable performance</comment></comment>


Ask HN: News Website without the 'Silly News'? - <AUTHOR>

I'm looking for a "normal" website (i.e. not the drudge report) with normal news, minus all the sensationalist headlines.
I'm sick of the "common man's" approach on CNN and BBC, which are my primary two sources. I'm tired of polls asking "Do you agree with the racist decision by xxx?" and 8-month old news recycled as a news video taking up the headline spot.
Anyone know of a good, real, hard-core news site? It needs to be "mass marketable" because this'll be going to some non-geeks. <comment><USER2> Try the English version of Al Jazeera - <http://english.aljazeera.net> I'm sure it won't be your primary source but it's usually worth a look.

</comment><comment><USER3> On paper, it was always _The Economist._

<comment><AUTHOR> I keep track of The Economist online, but the problem is, it's not a general news service.

You don't find news in real-time (with the breaking bar, etc.) and it's more geared towards discovering the effect of a particular story rather than learning about the story itself for the first time.

e.g. You wouldn't find news about a shooting in a school in real-time on The Economist.. nor would you hear about foreign stories until they've had time to be analyzed and stripped down. It's pretty much The Economist paper edition in online form, and ergo it suffers much the same as traditional media on the front of news discovery.

<comment><USER3> Disconcerting that school shootings are now a recognized category of news. That was not true when I was growing up.

But I would argue that it's not a coincidence that the more serious news source is a weekly. News that happens suddenly seems more likely to be fluff. Plus if anything really important happened, friends would tell you.

</comment></comment></comment><comment><USER4> What has been your experience with customizing Google News? Google will never have the fastest coverage of a breaking story like the balloon boy, because it is aggregating other people's content with a time lag, but I have tweaked my preferences a lot on Google News to where I can rely on it for a lot of international news and very little news that shows up on local TV. (I do have a Google News customization that shows me local news from my town, but not most of the silly stuff.)

I agree with the endorsements of The Economist (especially), BBC, and the New Yorker already posted, but what I like about Google News is the even broader reach of sources and stories.

</comment><comment><USER5> I was thinking about starting a site like this (perhaps based on this source code). The only issue I thought of was that people would just have to accept that I was going to be the dictator in what goes in and what doesn't. With topics like politics that can cause a problem and also if I don't know enough about a given topic (say local US politics) to know if it's a recycled story or not.

I still might do this though so if anybody wants to help out or has any ideas please chime in.

</comment><comment><AUTHOR> BTW, my fallback is global.NYTimes.com - it doesn't have as much "news" as CNN/BBC but it does update fairly quickly and with less Bull.

</comment><comment><USER6> Tell me when you've found it.

Seriously. I'd love a site like that.

</comment><comment><USER7> I like <http://www.democracynow.org/>

</comment><comment><USER8> I"m guessing you likely won't get any suggestions and that this is one of those cases where, if someone wants to act on it, this might be a good business idea because the solution probably doesn't already exist.

<comment><USER8> I have yet to see anything listed that fits the exact criteria listed, so I don't see why my thought on it should be downvoted. I'm also amused that my remark is the second remark and the one before it was the one indicating they would love to see something like this. In other words, suggestions for things that met part of the criteria didn't begin appearing until I remarked that I didn't expect to see any suggestions. I see that kind of thing a lot and I think it's not mere coincidence. In some sense, it appears to be a sort of "rebuttal" of my observation. But it doesn't change the fact that I still have not seen a website link listed that meets the full criteria listed. Listings include: print versions, radio versions, a tv show, once-weekly RSS feeds and a foreign publication, all of which are listed with provisos concerning what portion of the criteria they likely won't satisfy.</comment></comment>


Payments provider Stripe has raised another $150M at a $9B valuation - <AUTHOR> https://techcrunch.com/2016/11/25/payments-provider-stripe-has-raised-another-150-at-a-9b-valuation/ <comment><USER2> [https://hn.algolia.com/?query=stripe%20150&sort=byDate&prefi...](https://hn.algolia.com/?query=stripe%20150&sort=byDate&prefix=false&page=0&dateRange=all&type=story)

Posted a few times already.</comment>


Markov Model Crash Course in Python - <AUTHOR> https://medium.com/@alexdejeu/from-what-is-a-markov-model-to-here-is-how-markov-models-work-1ac5f4629b71#.u3ttgtm3l <comment><AUTHOR> Want to learn more about Markov Models? What they are, how they work, and how to implement them in Python? Check out this article I just published on Medium :)

I would love any and all feedback!</comment>


JavaScript iterator patterns - <AUTHOR> https://loige.co/javascript-iterator-patterns <comment><USER2> One thing I dislike about the iterator protocol is that it creates garbage around every value you're iterating over:

      let set = new Set([1,2,3]), it = set.values(), n;
      while(!(n = it.next()).done) console.log(n);
      // {value: 1, done: false}
      // {value: 2, done: false}
      // {value: 3, done: false}

I found this strange considering javascript has symbols now. Symbols would be perfect for the iterator protocol:

      while((n = it.next()) !== Symbol.iteratorDone) console.log(n)
      // 1
      // 2
      // 3

Not that this is too much of an issue, I'm sure using yield/yield*/of will eventually optimize this.

<comment><USER3> The generational garbage collectors in all (or the vast majority of) javascript implementations is specifically tuned to make this a pretty big non-issue for the extreme vast majority of code.

It's the same argument people make against many React patterns, that inline objects or inline functions generate additional garbage, but when tested it's found that the time spent cleaning up that garbage is insignificant (and in the React case, workarounds often end up causing performance issues at boot time by trying to move that garbage-generating code out of the render function where it's a non-issue!)

Without measurements you are just guessing, and JITs don't always work the way most will intuitively assume they work. I've tested the overhead of creating and throwing away objects on each iteration of a loop, and the reality is that it just doesn't impact the performance of the code in any meaningful way. The GC happily cleans it up extremely fast, and in some cases the JIT will even compile the code in a way to avoid generating the garbage at all.

<comment><USER4> Agreed on all points, but I'd just like to point out the main reason inline objects and inline functions is a perf antipattern in React is not garbage collection pressure, but rather the fact that they invalidate perf optimizations like PureComponent and React.memo because the objects/functions will have new references on each render. If you use those two together, then you're incurring the cost of individual prop comparisons used by PureComponent/React.memo without reaping the benefit of being able to skip the render entirely if no references have changed.

<comment><USER3> They are in that one case, but the vast majority of components aren't PureComponent, and therefore it's not a universal "perf antipattern".

It's also one of those things that people tend to extrapolate out. They hear that the function changing every render causes perf issues, and then just assume it's truth and apply that thinking everywhere. It's so common that the Hooks FAQ actually has a section dedicated to talking about this specifically [1]!

We are getting off topic now, but it was one of the areas that I believe the react team wasn't happy about when it comes to the design of React. You had/have to treat components differently depending on whether they are pure or implement `shouldComponentUpdate` and how they implement it.

It's also one of the things that the new Hooks API solves. With hooks like `useMemo` and `useCallback` you can cache those values and functions that you pass around.

[1] [https://reactjs.org/docs/hooks-faq.html#are-hooks-slow- becau...](https://reactjs.org/docs/hooks-faq.html#are-hooks-slow-because-of- creating-functions-in-render)

</comment></comment></comment></comment><comment><USER5> Iterators and generators are powerful and can make code much cleaner/more declarative. Especially when used with async/await.

If anyone is interested, I recently released a real-time WebSocket library (Node.js and front end) which only uses Async Iterators to stream data (no event listener callbacks):

[https://hackernoon.com/getting-started-with-asyngular- bbe3dd...](https://hackernoon.com/getting-started-with-asyngular-bbe3dd1c716c)

Feedback welcome.

<comment><USER6> As a cool example of the practicality of generators, my son and I wrote a generator in PICO-8 (Lua calls it coroutines) to animate moving the tiles in a 2048 game we made, using simple a for-loop to animate the tile's pixel coordinates, but yielding at the end of the loop body, so that we could let _update() and _draw() continue. This allowed the program to still be able to respond to key presses, which would "skip" to the end of an animation by fast- forwarding the coroutine until it was dead, and then create and start the next animation coroutine. I think when he saw that it was just a for-loop but it that kept "pausing" (yielding) at the end of each iteration, he finally understood generators.

</comment></comment><comment><USER7> The next step I would have shown if I wrote this article, would have been to tell reader that JS generators as they are now, do not work with async / wait.

As long as you have some simple Fibonacci interview question they look nice to show off, but when you want to use them for real like return some paginated data from server as on going iterator, then current JS generators cannot be used.

This makes js generators limited for any real usage, given JS IO is async.

<comment><USER8> Both async generator functions and async iterators have been in the pipeline for a while. The proposed, and currently implemented syntax in Firefox and Chrome is `for await ... of`[0]. Creating an async generator function is as easy as `async function* functionName`.

[0]: [https://developer.mozilla.org/en- US/docs/Web/JavaScript/Refe...](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Statements/for-await...of)

Example of this syntax in practice: [https://jsbin.com/folotu/edit?js,console](https://jsbin.com/folotu/edit?js,console)

<comment><USER9> You might be interested in a slightly unusual UI framework I wrote that heavily focuses on async generators to define the UI - [https://github.com/ajnsit/concur-js](https://github.com/ajnsit/concur-js).

The idea is that a UI "Widget" is a sequence of UIs (which themselves can be Widgets) generated asynchronously (say when a UI event fires).

A sample widget -

        async function*() {
          // Show a clickable button.
          // All processing is async, this will conceptually block until button is clicked.
          yield* <button onClick>Click me</button>
          // Button was clicked, show text
          yield*
Button was clicked!

        })

It uses React and VDOM to diff the UIs generated and update the page slightly more efficiently. As you can see, it also provides JSX support (by overriding createElement calls).

The Widgets themselves can be easily composed, and the entire thing is designed to be extremely easy to get started with. The README on github has more information.

</comment></comment></comment><comment><USER10> If anybody is interested in coding in a way that is closer to requirements, generators are really helpful to switch towards a paradigm called Behavioral Programming: [https://lmatteis.github.io/react- behavioral/](https://lmatteis.github.io/react-behavioral/)

<comment><USER11> Forgive me if I'm missing something but this looks needlessly complex. Could you explain how this could be helpful, especially for developing React applications? The page doesn't really explain it besides insisting that this is closer to how we think, but I don't agree at all.

<comment><USER10> One of the things it helps with is the idea that we can modify the behavior without having to actually see how old code has been implemented. All one needs is a trace of events (a particular behavior) and can decide with newly added code how to modify that trace to fit the new requirements (by blocking specific traces and have others happen instead).

This is an extremely powerful way of programming because it more easily fits how we develop apps: requirements constantly change. Currently when behavior needs to be modified we are stuck with having to modify and understand old code which can be very tedious (in my opinion it's a crucial pain-point in software development).

Behavioral Programming makes it easier to modify a system without having to understand _how_ it was built, but by observing a particular behavior. Once observed, the behavior can be modified, removed or completely changed _incrementally_ , without having to go back and refactor old code.

Sorry if it's very abstract. I gave a talk about it in case it helps: [https://www.youtube.com/watch?v=_BLQIE- _prc](https://www.youtube.com/watch?v=_BLQIE-_prc)

</comment></comment></comment><comment><USER12> > Consecutive calls to next() will always produce { done: true }.

Not necessarily. You can make recursive generators which never "terminate". For example, here's a codegolfed version of a recursive generator which represents a n + 1 sequence:

        p=function*a(x){yield x;yield*a(x+1)}(0)

<comment><AUTHOR> I meant there "[Once the generator has completed], Consecutive calls to `next()` will always produce `{ done: true }`".

I should probably make it more explicit

PS: I like your n+1 example.

</comment></comment><comment><USER13> Good article thanks.

<comment><AUTHOR> Thank you, Nick I am really glad you liked it!</comment></comment>


What is it like to have an understanding of very advanced mathematics? - <AUTHOR> http://www.quora.com/What-is-it-like-to-have-an-understanding-of-very-advanced-mathematics#ans873950

<comment><AUTHOR> Thought much of this applied to the mindset of a programmer entering their second decade of work.

"the biggest misconception that non-mathematicians have about how mathematicians think is that there is some mysterious mental faculty that is used to crack a problem all at once. In reality, one can ever think only a few moves ahead, trying out possible attacks from one's arsenal on simple examples relating to the problem, or using analogies with other ideas one understands."</comment>


DuckDuckGo's new privacy policy tried to explain why you should care - <AUTHOR> http://duckduckgo.com/privacy.html

<comment><AUTHOR> There are clearly a lot of DDG fans here on HackerNews, but it hasn't yet broken out into the mainstream. That said, providing a great search engine (I took the DDG Challenge -- tried it as my default search for a week -- and I'm still using it months later) is step one.

Beyond that, explaining things like this in plain English for people who don't normally think about things like search privacy are doing a great service for DDG.

<comment><USER2> Yes but my anecdotal evidence suggests average people really don't care at all. It seems like only technically oriented people concern themselves with privacy issues.

<comment><USER3> I don't think it's true that only technical people concern themselves with these things. Only a small but overly vocal subset of technical people do...

I'm technical, and I couldn't care less about search security/privacy.

The page screams out to me "solving a problem that doesn't exist". Why do I care that Amazon knows that I searched google for "shoes"??? Surely that's useful info to pass on to Amazon. In what instance would I care? I can't think of any...

The way a startup will win against Google is by doing what Google did 10 years ago. Give users better, clearer, faster, more streamlined results.

Whilst Google is chasing silliness like 'real time update results' - WTF do I care what people are saying on twitter? - a startup can stick to what people actually want - clean search results.

Pandering to an _extremely_ small niche of privacy freakouts, I don't think is a scalable strategy.

(just my 2c)

<comment><USER4> Don't forget that this guy (still) works alone. He only needs a small niche, he doesn't need to beat Google at all. His users don't even have to be loyal; they could just be (temporarily) frustrated.

<comment><USER3> Sure, but targeting 'privacy freakouts' isn't very monetizable IMHO.

</comment></comment></comment></comment></comment><comment><USER5> Today is my first time trying it out (although I've heard of it before), but I feel a little tricked with the image, map, and news searches. They are google links, but don't use the google logos.

Some people will use DDG specifically for the privacy, and those links will forward the search query without asking any questions.

At least use the standard logos, or say google. Or proxy the search (not sure if that's practical).

If it's simply a better search then fine, but if the draw is the privacy then you need to be much more strict about the external searches.

<comment><USER6> Thx--those are new, and I'll probably go with something else as the default as well as let you choose which provider you want in the settings. Any ideas for the best default?

<comment><USER7> FWIW, I also dislike that those don't point out they're using google.

<comment><USER6> Will fix.

</comment></comment></comment></comment><comment><USER8> The main page doesn't state why you should use the search engine over Google. If there are two or three compelling reasons, then they should be mentioned there.

<comment><USER6> The current about page (<http://duckduckgo.com/about.html>) is dedicated to answering that question. Are you saying you think I should add a summary sentence on the homepage? I just haven't because I don't want to introduce clutter.

<comment><USER2> Maybe something really simple that might attract the curious? "A better search engine, learn why"

</comment></comment></comment><comment><USER9> I know a lot of people that would use DDG if they actually read this page, but I think the problem is that most of them won't find it or read it. They are not hackers and they don't read blogs or meta/about pages of sites.

<comment><USER6> Any ideas for how to reach them? Somehow incent people like you to spread it to them?

<comment><USER10> That's a difficult one - we can see how hard Yahoo and Bing have tried against Google - it's hard to get mainstream users to change - maybe if DDG could be positioned to drive site search for some more mainstream sites so that when people searched they would see the DDG branding especially with a "web search" option in the site search results. There might be some wiggle room to move into the territory Yahoo BOSS was targeting now that it seems like that project is abandoned after the Bing deal.

</comment></comment></comment><comment><USER11> Question: Does anonymizing/cleaning of the searches break a site owners analytics report, where it doesn't show which keywords drive traffic to the site ?

<comment><USER6> Yes it does.

<comment><USER12> I wish there were a balance between privacy and providing site owners with some sort of analytics. Correlating search terms to destinations on my site is something that I find very valuable.

For example, I recently noticed that searches for "invalid JSON primitive" were bringing users to a page on my site where that error was briefly discussed a few places within its over 200 comments, but no where within the body of the post. I think people may have eventually been finding their answers by searching on the page, but I can't imagine that it was a very good experience.

So, I wrote a new post that directly addresses that error in more detail, and now that newer post is ranking for the query instead of the older one. A win for everyone involved.

If I had been unable to see what search terms were bringing people to my site, I couldn't have done that.

</comment></comment></comment><comment><USER13> Gabriel, have you thought about linking your privacy policy from the front page of your site?

On a broader note, have you thought about focusing your branding on the "we are insanely private" aspect? You could add "the world's most private search engine" to your Title tag. I just looked it up and saw this search engine uses that angle: <http://ixquick.com/>

<comment><USER6> Thx. I have thought about it, but just don't want to clutter the homepage. It is on the about page, though. In any case, I will reconsider this.

<comment><USER14> Why not simply create another front-end that's seriously branded and with a secure sounding name?

If you're about it too you could create a serious but not privacy-targeted front-end too and do some A-B testing on take up, retention, et cetera.

</comment></comment></comment><comment><USER15> Is there a shorter URL variant than "duckduckgo.com"?

<comment><USER16> <http://dukgo.com>

<comment><USER17> even better, just type dukgo.com/(search terms, no parens needed) and it takes you straight to the search page you want. So far it hasn't failed, no matter what punctuation I've used (Chrome)

</comment></comment></comment><comment><USER18> I wonder how they are ensuring that the searches I do are completely anonymized.

I understand that that they do not store IP address/cookie/etc, but often by just looking at as little as a few searches you can zero down on the person in question. For example I have often searched for:

Citrix Blogvault

I am possibly the only person who will be searching for both those things.

<comment><USER19> If _only the search itself_ is stored, without any separate and possibly- identifying information (IP, sesssion, time), then it doesn't matter if you are the only one that searches for these things.

By their account, if you search something (A) and then you search _something else_ (B), there is no way to link A and B. They are two separate searches and they could have been performed by separate users.

Granted, given a ton of disparate searches, you could theoretically group searches by possible users — or at the very least, by similar users — by statistical means.

(Edit: Actually, now that I think about it, while they mention timestamps in terms of other search engines, they do not mention their own policy regarding them. Timestamps are not directly "identifying information" but they still significantly boost the likelihood that a specific user is performing a given set of searches.)

<comment><USER18> Actually now thinking about it, hopefully if they are not storing IP(or cookie etc)at any point of time, even temporarily, two searches will not show relationship with each other.

But I can imagine the benefits of keeping track of all searches done by one user. It can definitely be used to improve the search engine itself.

</comment></comment></comment><comment><USER20> This convinced me to give DuckDuckGo a try.

I can't say I love the design though. I'd prefer a more professional look.

<comment><USER6> Thx. I've toyed with having themes, and a "more professional" look would certainly be among them. If anyone wants to take a stab at one, let me know.

<comment><USER21> I like this professional theme you already have:

[http://duckduckgo.com/?v=c&q=professional](http://duckduckgo.com/?v=c&q=professional)

</comment></comment></comment><comment><USER22> Duck Duck Go should seriously consider adopting a serious sounding name.

<comment><USER23> Yeah, something with gravitas like Yahoo! or Bing, right?

</comment></comment><comment><USER24> A reddit founder posting on Hacker News? Controversial.

<comment><AUTHOR> Eh? This reddit co-founder <3s Hacker news. I lurk here as much as I read reddit.</comment></comment>


How many times have you searched Google? - <AUTHOR> https://history.google.com/history/

<comment><USER2> I turned off web history a while ago. I didn't like the filter bubble [1] that I found myself in. One of the things I like best about the internet is access to new and different information. With web history and personalized searching on, I was finding the same results at the top seemingly no matter what I searched for.

Lately I've been using DuckDuckGo about half the time, and Google the rest of the time.

[1] <http://dontbubble.us/>

</comment><comment><USER3> Usually when I "search" Google I'm actually just shortcutting to Google from my set search engine which is DuckDuckGo. DDG does the job most of the time, but for some things I find it easier to hit Google still.</comment>


A Silk Road Renaissance - <AUTHOR> https://www.archaeology.org/issues/386-2007/features/8756-a-silk-road-renaissance <comment><USER2> That was one of the most interesting things I've read here for a while, thanks for sharing!</comment>


Secret Service Will Post All Aaron Swartz Files On Website, First Batch Up Now - <AUTHOR> http://news.firedoglake.com/2013/08/29/secret-service-will-post-all-aaron-swartz-files-on-website-first-batch-up-now/

<comment><USER2> This is interesting. It looks like government damage control.</comment>


How to find out if your idea is worth pursuing - <AUTHOR> http://areatech51.com/how-to-find-out-if-your-idea-is-worth-pursuing/ <comment><USER2> I used google survey once to validate an idea. only cost $50 to get 500 people to answer a basic question. For consumer ideas not a bad way to see where your at with it. also google adwords research can help. won't help creating the next ipod/iphone but for the rest of us mortals not a bad way to do "market research"</comment>


EU's Most Widely Use Language, English, Endangered by Brexit - <AUTHOR> http://www.nytimes.com/aponline/2016/06/28/world/europe/ap-eu-britain-eu-what-about-english.html <comment><USER2> Will not happen. Many EU parlamentarians speak English more often than their own language on the floor. English is essential for the EU to function; German or French could not fill that role.

It could be easily solved by having one of the "spare" countries that only have languages that are also an official language in another country choose English. Candidates would be Belgium, Luxembourg, Austria, and several others.

<comment><USER3> The proposed solution mentioned is easier - let a country select two languages.</comment></comment>


The Bad Grade That Changed the U.S. Constitution - happy-go-lucky http://www.npr.org/2017/05/05/526900818/the-bad-grade-that-changed-the-u-s-constitution <comment><AUTHOR> previously - [https://news.ycombinator.com/item?id=13934576](https://news.ycombinator.com/item?id=13934576)</comment>