Why I Write Games in C - <AUTHOR> http://jonathanwhiting.com/writing/blog/games_in_c/ <comment><USER3> You don't really get rid of complexity by using a simple language. You just move the complexity into your own code.

Say if your language doesn't have dynamically sized containers, you will end up writing your own. You hack it so you can store different types in it. You have reinvented polymorphism. And then you need sort functions, and everything else that is missing from the language.

And it wont be simple any more. Probably slow and buggy too. But you are not alone. Everyone has their own private code framework that is too complicated for anyone else to make use of. If only there was some way to avoid this mess ...

<comment><USER4> > their own private code framework that is too complicated for anyone else to > make use of

Well, to be fair, games are one place where code reuse and maintenance by third parties is less likely to be needed. The real sadness is when you get corporate websites, technology platforms, and the like that decide they need their own framework to make their own set of tradeoffs, and do a mediocre job of it, and end up with a slow buggy bastardization with 15% of the capabilities of a common well-understood framework. If I had a dollar for every minute I wasted on something like that... it'd be an accurate description of a nontrivial portion of my career :b

Bonus points for making this framework to optimize performance, without actually measuring the performance or setting explicit goals.

<comment><USER5> > Well, to be fair, games are one place where code reuse and maintenance by > third parties is less likely to be needed.

i feel like this is somehow perpetuated like folklore, but there shouldn't be any reason why game code should be inherently less reusable than other areas of software development. For example, code that deal with geometry data shouldn't really be any different for games, or code that deal with setting up a rendering environment ought to be the same for most, if not all games (i can't imagine initializing directx or opengl would be different for different games).

Game logic is one area that is going to change a lot between games. However, if you partitioned your game logic well, wouldn't it make the next game easier since you're "just" swapping game logic?

<comment> loup-vaillant > _code that deal with geometry data shouldn 't really be any different for > games_

Counter-example: [http://jonathanwhiting.com/games/knossu/](http://jonathanwhiting.com/games/knossu/) (Highly recommended if you have 20 minutes to spare.) The geometry of this game is unlike _any_ I have seen so far. There is common logic with that of a Doom-like ray caster, but I'd argue not much. The time spent rewriting the generic parts of a ray caster probably pales in comparison to the specific parts of his graphics engine.

(Of course, your point stands in general. But for Jonathan Whiting in particular, I have the feeling that it may not.)

<comment><USER6> Great game, thank you!

</comment></comment></comment></comment></comment><comment><USER7> >Even more than that I care about the speed of the compiler. I am not a zen master of focus, and waiting 10+ seconds is wasteful, yes, but more importantly it breaks my flow. I flick over to Twitter and suddenly 5+ minutes are gone.

Quick suggestion, has really helped me: take that 10 or 20 seconds waiting for compilation, and stare out a window. This gives your eyes much needed break from focusing on a computer monitor, allows the muscles to refocus and breathe, and doing this regularly during a coding session can have important long-term benefits for your vision.

<comment><USER8> _10 or 20 seconds waiting for compilation .. but more importantly it breaks my flow_

Luckliy the OP doesn't build for microprocessors etc. There you wait for compilation (of C, for instance) but than the damn thing has yet to be flashed.. Thing is, it actually learns you how to not let it break your flow. Which is a valuable skill.

<comment><USER9> My day job regularly involves git bisecting the Linux kernel and testing it on a hardware platform that can take up to 10 minutes to reboot. If I find a new bug introduced in an -rc1, that can be the better part of my afternoon gone just in bisection...

</comment></comment></comment><comment><USER10> I understand the want for simplicity in C (and Go gets closer, but has its issues), however, it seems in the end it drags you down.

Just having the C++ ability to have objects doing things is very helpful. But yeah, C++ has the ability to get very complicated

But it's your choice to have "complicated C++". Limit yourself to some functionalities and it's much more manageable.

Use basic STL and keep it simple (also C++11 at least) and it's a very pleasant experience (or less worse experience, depending on your point of view).

<comment><USER11> There are some arguments to stick with C instead of a very C-like subset of C++. Off the top of my head:

\- Recompiling and reloading parts of your game at run-time is quite easy in C. In C++ you have to make sure (at least) that nobody has pointers to vtables of the dll at the time of reload. This can be a bit tricky if you're using things like std::function in your dll code. Yes, you could be using a scripting language, but thinking how to match the semantics of a scripting language with your engine, where to draw the line, and then write the glue code is a lot more work than just reloading some plain C functions. And if you later decide this was a bad/worthless idea, reverting from dynamic C code to static is almost a no-op, whereas reverting back from scripts is dreadful.

\- A quick & dirty reflection is easy when you don't have to deal with name mangling, templates, and overloading. Just some script scanning through your code and outputting elementary type info to .c file may be enough for things like real-time memory browser-editor for your whole engine. This can be very valuable when developing new engine features, as you can view and edit, and maybe draw even graphs of members you just added to some struct. Also useful for modifying game object data on the fly when debugging/creating levels.

(I too do my game programming in C)

<comment><USER7> >Recompiling and reloading parts of your game at run-time is quite easy in C.

This is cool to hear. I've never done anything like this, but it almost sounds like REPL-driven development is a possibility in C?

<comment><USER12> Check out the first few episodes of Casey Muratori's Handmade Hero series where he implements an extremely simple hot code reloading system in C (actually C++, but he doesn't use almost any C++ features, certainly not vtables).

<comment><USER5> if you don't want to watch the video, here is a basic overview tldw; of the technique:

on every run of the game loop(usually every frame), reload a dynamically linked module (dll for windows, .so for linux), which contains the actual code you want to run every frame. The function you then invoke from the module must be passed the entire block of memory allocated for the game state. You then just recompile the dll/so module when you make a change, and the game would execute the new code on the next frame. Adding new data structures is OK as long as you don't mangle an existing data structure...but because a game can expect to work with a constant block of pre-allocated memory, this actually works fine most of the time...

<comment><USER7> I assume you'd be using techniques discussed here?

[http://stackoverflow.com/questions/384121/creating-a- module-...](http://stackoverflow.com/questions/384121/creating-a-module- system-dynamic-loading-in-c)

<comment><USER5> yes - but different OS have different ways to load dynamically linked modules, and the casey video only showed the windows method. But it's basically the same, just library calls differently named.

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> How about Nim? [1] [2]

To me it is in many ways a "nicer and safer C". Sure it's not as mature as C, but what is? What it does have going for it is portability (it compiles to C so it shares C's portability), a soft real-time GC which can be manually controlled [3], generics, AST macros and much more.

1: [http://nim-lang.org](http://nim-lang.org)

2: [https://github.com/nim-lang/nim](https://github.com/nim-lang/nim)

3: [http://nim-lang.org/docs/gc.html#realtime-support](http://nim- lang.org/docs/gc.html#realtime-support)

<comment><USER14> I can't speak for the article writer of course, but the Python-like syntax / significant indentation would be a deal-breaker for me. I'd suffer through a lot to avoid that. And back when I used C a lot myself, I found that even more objectionable. I often care more about syntax than many other language features - with a good syntax you can sugar over a lot of other deficiencies, but a syntax you dislike will stare you in the face every moment you use the language.

<comment><USER13> I am in some ways the same, but the other way around. I like Python-like syntax more than C-like syntax. But not to the same extreme as you, I wouldn't mind using a language with a C-like syntax.

What are your reasons for disliking Python-like syntax?

<comment><USER14> I want strong visual cues for the end of blocks most importantly. And I want the freedom to adjust indentation in ways that to me improve readability without consideration of whether or not it matches language expectations.

But also because I've yet to work in any environment where broken indentation due to tools with different ideas about how to handle it has not been a regular occurrence - indentation is brittle.

<comment><USER15> I think Haskell gets whitespace-sensitive indentation right. It is a lot less strict than Python, and if you didn't know it was whitespace-based you wouldn't necessarily realize it. Thanks to the functional nature of the language, the "hanging block" problem you have in Python (where the lack of an explicit end construct has blocks indent but never "close") doesn't really exist.

<comment><USER14> I wouldn't know - I gave up on Haskell because of the cryptic syntax long before I got to the stage of hating on smaller syntactic details... I love a lot of concepts from functional programming, but I wish I could get them in a language with a syntax more like Ruby and very much less than Haskell.

</comment></comment></comment></comment></comment></comment><comment><USER16> The thing I miss most in C when I don't cheat and use a couple C++ features is templates. Specifically, a dynamically sized List implementation that is type- generic.

If you do this in pure C, you have to pick your poison:

1\. preprocessor abuse

2\. void *

3\. multiple redundant implementations of the data structure

Dynamically sized lists are used so often, that this tends to be a problem in almost every C project. I wonder what the author's solution is to this dilemma.

<comment><USER17> BAH!

4\. The "intrusive" containers, but of course.

The one true way to do it in C.

For one, you can keep items in multiple containers, all being on equal footing. None of that typical C++ mess, when _this list_ is a primary storage for items, and _those maps_ are secondary indexes, all sprinkled evenly with iterators. Intrusive containers don't _own_ items, they merely _organize_ them, which is exactly the right way to go about it.

For two, the actual code for container operations is as abstract and on-point as it gets as it focuses solely on "weaving" items into and out of a container rather than on other things, like de/allocating supporting structures.

For three, you get no heap activity when adding/removing items to/from a container. This means that if you already have the items, you can always arrange them into a collection. This also eliminates a lot of error handling code, leading to a simpler code.

Obviously, this is not limited to just linked lists.

[1] [http://www.makelinux.net/ldd3/chp-11-sect-5](http://www.makelinux.net/ldd3/chp-11-sect-5) (

<comment><USER18> What is an intrusive container?

<comment><USER19> A technique commonly used in C, for example in the Linux kernel. You embed "links" to other nodes in your structs, and find the struct from the link based on offsetof. Linux kernel uses linked lists and red-black trees this way. Probably other data structures too.

Intrusive containers are cache friendly and typically require no dynamic allocations (in addition to allocating the data itself).

See the link in the post above for more about linked lists in the linux kernel.

<comment><USER20> Interesting. At first I thought you were claiming this technique made linked lists cache friendly. After looking at it, I have concluded you meant merely that the next and prev pointers are near your data. Am I understanding you correctly?

<comment><USER21> That's my understanding too. Instead of going to your data structure, and then dereferencing a pointer to your data, after going to your data structure, you're already there.

</comment></comment></comment></comment></comment></comment><comment><USER22> Because he claims that reducing the possibility for bug is a main concern I feel two languages, in his nicely written write-up, are left out:

Rust -- low-level like C, fast like C, more modern than C, specific ways to reduce categories of bugs (borrow checker), promotes a more functional way for programming

Haskell -- not as low-level as C, but pretty fast (best possible performance was not his main concern), many ways to reduce categories of bugs that can arise

For game dev't you'll find both have maintained bindings to SDL2.

<comment><USER23> Do you have any examples of AAA games (or even major indie ones) that use Rust or Haskell?

Often I find that when people recommend a technology for game development, no professional game studios ever seem to use them. I'd love to be proven wrong though...

<comment><USER24> Professional game studios only change when forced to do so.

It was straight Assembly until console and OS SDK became mostly C.

Then it was straigh C until the said SDKs became C++.

Nowadays it will be C++ until they get forced to change again.

<comment><USER23> In your mind who is forcing them and why?

<comment><USER24> I said it on my comment already, OS and console vendors SDKs.

Contrary to common belief among current generation of young developers, C compilers did not always generated good code.

In the 8 and 16 bit days, proper games were done in Assembly. Any language you can think of, were the managed languages of the day.

At the end of the 16bit days, C had widespread enough outside UNIX, that OS vendors started adopting it. So SDKs were then in C.

So many were forced to use C, even if their code was mainly composed of C functions wrapping inline Assembly.

Similarly, around the PS3 time, SDKs started to move to C++. So many didn't had other options than moving along to C++ compilers. But, just like the Assembly generation, many still use mainly C code compiled by a C++ compiler.

So when an OS or console vendor says the language X is the platform's language, they either adopt it, even if only partially, or ignore the platform until they cannot avoid it anymore.

</comment></comment></comment></comment></comment><comment><USER25> C++ compile and link time. I once worked on a PS3 game that had a 50 minute turnaround time (change code -> compile -> link -> load). No scripting either. The horror. It was because the company had home brewed a bunch of "optimizations" into the build process.

On the up side it will force you to learn to live edit the game with the debugger to tweak and adjust.

If its C++ and the programmers know the engineering KISS adage it can be ok. I have seen so much horrible needlessly complex C++. So bad you are pleasantly surprised it runs at all. C++ so bad and unpleasant to work on it makes you question why you are a programmer at all.

 _sigh_

Then you write some python, C, ruby or lisp (or scheme, or clojure) and your like: "oh, now I remember why i do this again, this is so much fun!"

I like the simplicity of C too. You can have a good mental model right down the CPU of what is going on. But these days given how fast CPUs are and how much more productive you can be in a high level language (python is 10x more productive than C++, apparently) I think a garbage collected high level language is the way to go.

If I accept their offer, my next job will be using Golang.

<comment><USER26> > I like the simplicity of C too. You can have a good mental model right down > the CPU of what is going on.

Not really, with compilers as sophisticated as they are and the spec as liberal with undefined behavior as it is. The C virtual machine that the spec defines is every bit as complex as any other virtual machine.

> But these days given how fast CPUs are and how much more productive you can > be in a high level language (python is 10x more productive than C++, > apparently) I think a garbage collected high level language is the way to > go.

I totally agree. In fact, I wouldn't use C even for projects where a GC isn't suitable, just because we have alternatives now and it's so difficult to write programs free of basic memory management mistakes we've been making since the 80s.

<comment><USER27> >>Not really, with compilers as sophisticated as they are and the spec as liberal with undefined behavior as it is. The C virtual machine that the spec defines is every bit as complex as any other virtual machine.

Having some undefined behavior in your code is just a bug, it has nothing to do with being complicated or compiling to machine code. It's not nearly as complex, in fact there are many people who understand quite well what the code compiles to. You can read the assembly as well and understand it for big parts of the code (oh, it compiled it to that, vectorized this but didn't vectorized that etc.). Try guessing what Java compiles to. It's not even close to the same level of complexity.

>>I totally agree. In fact, I wouldn't use C even for projects where a GC isn't suitable, just because we have alternatives

The only serious alternative as of today is C++. Rust is a new untested language which no one wrote anything quite serious in yet and which offers a lot of trade-offs in exchange for being safer, everything else is slow as hell.

<comment><USER26> > Having some undefined behavior in your code is just a bug, it has nothing to > do with being complicated or compiling to machine code.

In theory, yes. In practice, all C/C++ programs have undefined behavior in them, so you have to understand what compilers do to _really_ understand your code.

> It's not nearly as complex, in fact there are many people who understand > quite well what the code compiles to.

Not true in my experience. The only people who really understand it are, by and large, compiler developers. There are very few compiler developers.

> Try guessing what Java compiles to.

I know what Java compiles to more or less as well as I know what C++ compiles to. The only real difference is in GC (which is quite simple--inline a nursery bump and fall back to a malloc-like slow path if it fails) and ICs, which are a lot less complicated than things like alias-analysis-sensitive load forwarding.

<comment><USER28> Re. undefined behaviour, this fairly definitive paper agrees that it has gone too far: [http://www.open- std.org/jtc1/sc22/wg14/www/docs/n1637.pdf](http://www.open- std.org/jtc1/sc22/wg14/www/docs/n1637.pdf)

</comment></comment></comment></comment></comment><comment><USER29> > I would like to use [Go], but there are big roadblocks that prevent me. The > stop-the-world garbage collection is a big pain for games, stopping the > world is something you can't really afford to do.

GC pauses in Go should not be a serious issue for games like the ones featured on the OP's site. The same general techniques used for high-performance manual memory management work fine in garbage-collected languages -- allocate on the stack if possible, allocate the heap you're going to need up front and reuse it (with object pools or the like).

> The library support for games is quite poor

I would say the same for C, honestly. Last time I was looking for game libraries to write a binding to (from OCaml) I found more C++ and Java options than C.

<comment><USER30> >I would say the same for C, honestly.

Really? SDL is quite poor??? It has bindings in pretty much every language and I would guess is the most popular game library in existence, written in pure C. It is not a game engine but is an excellent library to build one with. It is so popular for this purpose that it has its own COLUMN in the Wikipdia table of game engines:

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

<comment><USER31> Another nice library is SFML[1], which has bindings for C and several other languages (including OCaml).

[1]: [http://www.sfml-dev.org/](http://www.sfml-dev.org/)

<comment><USER32> There's also Allegro[1]. While its popularity peak was on older versions, Allegro 5 has been completely redesigned and it's a pretty great modern C library now.

[1]: [http://liballeg.org/](http://liballeg.org/)

</comment></comment></comment></comment><comment><USER33> "C# ... does a lot to railroad a programmer into a strongly OOP style that I am opposed to".

C# has functional capabilities as well. People write in it nowadays in a whole lot of different styles, including procedural, OO, functional, reactive.

Yes, the average developer uses it in an OO style, but it can do a lot more.

<comment><USER34> His argument against OOP makes it sound to me more like he's using OOP design patterns he doesn't like:

> I've spent most of my professional life working with classes and objects, > but the more time I spend, the less I understand why you'd want to combine > code and data so rigidly. I want to handle data as data and write the code > that best fits a particular situation.

To put it simply, I find when using DTOs to store data, and following SOLID principles to write the rest of the code, I end up with quite clean code that provides a very nice separation of code and data, and that the right level of abstraction and loose coupling is exactly what allows me to write the code that best fits a particular situation. Granted, I don't write games, but I do write high-performance, highly-distributed multi-threaded applications where clean and fast connectivity between components is very important, and the ability to unit test basically everything is essential.

I guess to characterize OOP as 'combining code and data rigidly' is just so far off base from my style of OOP and my experience that I really can't identify with this as a reason to drop to C.

<comment><USER35> Exactly - After all, you don't put all your code in a single C file.

Using classes as simple modules - encapsulating a set of functionality - <USER2> still lead to a very procedural style without all of the extras.

</comment></comment></comment><comment><USER36> The article mixes up the virtues of a programming language with the quality of the environment. C might very well be the best language in our current environment, which says little about the language itself. One major point certainly is, that it is that good compilers are available everywhere and almost any library can be used from C. There are a lot of historic reasons for that.

If he wants strict typing, C is actually much worse than many languages of its time. But it is certainly stricter than Javascript.

GCs and gaming are of course a challenge, but with the new GC of Go1.5 and hopefully futher improvements, it might actually become a very good language for gaming, especially if there is a better support with libraries. But if one wants good type checking, a simple language model and fast compilation times, it checks all the boxes.

<comment><USER37> The Google Go team lives in a completely different environment. Their perspective of performance is not the same as a game dev. Go 1.5 stated their goal was 10ms GC latency. A game loop is 16ms for a 60fps game. 10ms is not close to acceptable. Fast for a web server backend, but not fast for a game.

<comment><USER36> I have not experimented with the Go GC under heavy loads yet, but the important points of 1.5 are, that the GC pauses have an upper limit of about 10ms for multi-gigabyte heaps - previously they could be up to a second, and often are much faster (in a game environment with smaller heaps, they might actually as low as 1ms, which would be acceptable). I wrote, that there might be further tweaks required, i.e. having an API to call the GC for a set number of milliseconds. If your code isn't 100% using the time slice for each frame, it could use the remaining part of each time slice for garbage collection, eliminating the need for blocking stops. So, whether Go is acceptable now entirely would depend on some measurements. And if not, could be possibly tweaked. As I wrote, I would rather count this under "environment" where C might still win.

</comment></comment></comment><comment><USER38> The language wars get exhausting. Several years ago Ruby was the coolest thing ever, now I guess people think it's just boring. Also, PHP got really unpopular and all you heard about was how it would kill your dog and sacrifice it to satan. Now days it's still cool to look down on those who use it, but you shouldn't talk about it. Don't know know all "real" devs program in Python? Go was short lived, a year or two ago it was the greatest thing ever and now all you hear about is how much it sucks. The latest trendy thing is Rust. Rust is our new savior. I wonder how long that will last before something else comes along as the coolest thing ever. Maybe Brainfuck for it's simple syntax?

<comment><USER39> who says Go sucks?

</comment></comment><comment><USER7> Since game development often requires interfacing with robust C++ libraries in graphics or physics (i.e. Bullet), I'm curious how you do that... are you either not using physics or writing your own basics physics engine? Or, are you writing parts of your app in c++ just to wrap the interface in a way you can do the rest of the work in C?

<comment><USER40> Its trivial to expose a C interface from C++ and I would guess most game libraries have an api

<comment><USER7> It's not as trivial as you would think. I'm reading through the long discussions from the Bullet developers, and clearly it's not just a short project.

</comment></comment></comment><comment><USER41> > The library support [in Go] for games is quite poor,

I'd like to know the author's familiarity of Go libraries. Perhaps he's unaware of what does exist and makes false claims, or perhaps he's saying accurate statements and just has really high standards.

I help maintain many of the Go libraries/wrappers for games, so I might be biased, but I'm happy with what is available. Almost more so than when I was using C++, because Go packages can be made go-gettable and very easy to include and distribute, unlike with C++.

I've also not hit GC problems so far, but arguably my games are just not demanding enough yet.

<comment><USER42> I'd like to pick your brain in real-time, but, in a nutshell, how far do you think Go game ecosystem is from something like Corona, LibGDX, Haxe? Have SDL, OpenGL wrappers stabilized, are there native ports? Any frameworks that might be considered close to production-ready?

<comment><USER41> OpenGL libraries have definitely stabilized and have been that way for multiple years now. GLFW 3 wrapper is go-gettable (some years ago, it required manual installation of the C library separately, now you just go get it). I don't use SDL so I don't know much about it.

I don't know if there are complete frameworks or engines that are finished, but there are some works in process.

[https://github.com/avelino/awesome- go#opengl](https://github.com/avelino/awesome-go#opengl)

[https://github.com/avelino/awesome-go#game- development](https://github.com/avelino/awesome-go#game-development)

</comment></comment></comment><comment><USER43> I've had this thought quite a few times.

Basically, if you want your software to last and work on lots of platforms (particularly if it is a game you put a lot of love into), using a lot of dependencies you worry about it.

I know I've written some things - not even games, that would be a major chore to port.

But C and OpenGL APIs are still going to be there, and there's a nice feeling of quietness when it's just you, libraries you know are going to be stable, and the code, and not having to wonder "is this fully baked?" or "which one of these libs is the best".

You can almost get paralyzed in finding the ideal tools and libs to use and keeping up with all of them. Whereas if you limit yourself to just what comes with the language (and maybe a few small things) a side project can be a lot more fun.

A side project is also often about the journey, not the destination, and people can get a lot of mileage out of building incredibly complicated weird things that not many people will know are even there (I don't really know how to play Dwarf Fortress and don't play it, but the idea of the history generator, terrain generator, and so on... all that runs before you play the game strike me as great examples - the kind of thought that this is incredibly impractical and therefore must have been a ton of fun to write)>

</comment><comment><USER44> Delphi compiles extremely fast, is strongly typed, no GC, has templates, objects. Too bad Embarcadero positioning towards Enterprise with its relatively high pricing effectively derailed it as a mainstream language and killed its community.

<comment><USER45> And doesn't have console support (AFAIK).

<comment><USER46> If iOS and Android devices count as consoles (and I think some of them do) then Delphi has console support. :)

Free Pascal ([http://www.freepascal.org/](http://www.freepascal.org/)) says it supports the Nintendo GBA, Nintendo DS and the Nintendo Wii (to what extent and how well I don't know, never tried it). It also supports Win32, Win64 and FreeBSD so I suppose it could be made to work on the PS4 and XBox One without too much trouble.

A real strength of Object Pascal is that it can be as low level (inline assembly, manual memory management, etc) or as high level (OOP, generics, etc) as you like. It satisfies most of the article's wishlist items.

Today I happened to find a simple but still interesting programming language feature matrix on Ian Hixie's website: [http://ian.hixie.ch/programming/](http://ian.hixie.ch/programming/)

He'll have to update the Execution column for Free Pascal to be both "Native" and "VM" since Free Pascal 3.0 can now also compile to JVM byte code: [http://wiki.freepascal.org/FPC_JVM](http://wiki.freepascal.org/FPC_JVM)

</comment></comment></comment><comment><USER47> He mentioned a bunch of languages, and I'm not sure why he doesn't look into something like Kotlin. It's the JVM so you get maturity and it's fast as hell (ran a few economics-related benchmarks on my machine, OpenJDK 8 beat both C++ and Fortran!), has great IDE support (Intellij IDEA - which will actually translate Java into Kotlin if you want to translate snippets), and it doesn't strong-arm you into an OO style. And of course Lwjgl 3 is written mostly in Kotlin.

If he liked Flash, I'm also surprised he didn't go with Haxe. It's fairly mature, is a very nice language (Swift looks like it was mostly ripped from Haxe), with OpenFL he gets the Flash API (but can also compile to native or JS), and of course Haxe also has other frameworks available, or can even be used with native frameworks quite easily.

Anyhow, as far as C goes, it's a decent enough choice. It's simple enough, if you don't mind writing helpers for various tasks and building your own libraries then why the hell not. I definitely prefer the typical C style of programming to the prevailing C++ style.

<comment><USER48> Making games on the JVM is a lot of fun, but the garbage collector does limit what you can do (the OP mentions this as one of the drawbacks of Go).

<comment><USER47> Does it though? Java's garbage collector is very mature and can be tuned any which way. It's definitely more mature than Go's (although Go's is getting better all the time).

Not to mention, Unity uses a garbage collector (for all the C# bits, which is a very significant part), as does Unreal (their own written in C++), and even game-oriented languages like Flash and Haxe have garbage collectors. I'm not sure it's as big a problem as popular wisdom would state.

Edit - here's some documentation from Oracle about tuning the GC: [https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gc...](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html#sthref12)

<comment><USER48> It's entirely possible I'm behind the times, I haven't attempted game programming on the JVM in a long time.

</comment></comment></comment></comment><comment><USER49> I write games as well (Written more than 10 games, though they are not very large at scale) and I write them in C++. Reasons being writing networking code (TCP/UDP) is much easier & efficient in C/C++ than any other language IMHO. And most of the code works across platforms.

<comment><USER32> Just my 5 cents: Although there's nothing wrong with it in the context of your comment alone, C and C++ are so distinct languages it's weird to see them aggregated as "C/C++" given that the article is about C and it explicitly recognizes C++ as a bad alternative.

<comment><USER49> The article doesn't say C++ is a bad alternative. Just that he did not use it to avoid complexity.

And yes C and C++ are distinct. But the simple modules can be written in C, but the bigger ones need OOPS, so generally written in C++.

</comment></comment></comment><comment><USER50> > _I can 't afford to spend my time dealing with bugs I didn't cause myself_

It is very frustrating to deal with bugs introduced by others, a product or engine changes that you aren't aware of. But you have to balance that with how much you can get done in your own engine/tech with the time wasted from bugs, and how much time you want to spend on tech vs games.

For 2D games, building your engine is probably doable with lots of small kits like physics libs (box2D, bullet, etc), libgdx, sdl etc but for 3D games and certain titles, a single person working on an engine is difficult, tons of work on the tech side. So the balance is key, whatever makes you able to ship more often is probably the best choice.

Unity is used by many people and does have very frustrating releases that aren't solid many times. Recently 5.3, 5.3.1 [1] all have issues. For a long time in 2015 the IL2CPP iOS versions were broken. But doing it alone you get caught in a tech swamp instead of making games if you aren't careful and limiting. There will be times where your engine product or team or yourself is wading tech changes that are needed and take time away from game making. During the period of IL2CPP and Unity bugs, games could still be developed in parallel and for other platforms, so this is a benefit even though there are bugs.

Even when we do engine or platform based games it is a good idea to keep it as platform agnostic as possible. In Unity this might be keeping all source assets, using less MonoBehaviours, storing/loading data in JSON/web formats rather than in serialize prefabs. Anything that locks your game into one engine too much one should be careful of to limit your surface area of exposure to bugs by the engine. For a long time other UI libraries ruled Unity before they made their new UI, it is still a bit buggy but better. For a long time Mecanim was not very solid and many still use legacy animation. The newer Shuriken particle systems are awesome but not as accessible in code and had scale limitations for a long time. You just have to see where areas are solid and not venture into areas prone to bugs in your own engines or existing engine platforms for shipping games like Unity/Unreal etc.

[1] [http://forum.unity3d.com/threads/unity-5-3-1f1-particle- syst...](http://forum.unity3d.com/threads/unity-5-3-1f1-particle-system- errors-invalid-aabb-result-isfinite-d.374926/#post-2432662)

</comment><comment><USER51> To me lambdas justifies using C++ while still coding in a C style.

Although my wet dream would a C language with map, vector and other containers, a simpler build system (no more headers), more nice syntactic sugar, and an interactive mode... I'd gladly see a language that break C compatibility for this.

<comment><USER37> Swift might hit all your bullet points there. It breaks from C compatibility, but it has really impressive C bridging/interop.

</comment></comment><comment><USER52> This is exactly what Casey talks about on handmade hero.

</comment><comment><USER53> What about Rust?

<comment><USER16> I like Rust, but sometimes it is pretty difficult to convince the compiler that one's code is safe. And this does not mean that the compiler is preventing unsafety; there are many safe programs that the compiler rejects.

Also, the OP said that compile time was a priority, and compiling Rust code is closer to C++ speed than C.

<comment><USER26> > And this does not mean that the compiler is preventing unsafety; there are > many safe programs that the compiler rejects.

Two nits:

1\. The compiler _does_ prevent safety problems. It just happens to rule out some safe programs while doing so. (Although I think this is a bit of a misconception, because with the aliasing rules being used for optimization many things that the Rust compiler rejects that people think are safe are actually not.)

2\. You can describe any type system this way. That doesn't mean we don't like type systems.

<comment><USER54> I think game programmers don't like type systems -- or rather, they prefer the minimal typing necessary for speed improvements and their ability to simplify basic static analysis (with tools or in their heads). I don't blame them, games are a lot of work even for relatively simple things, and to get anything done at a reasonable pace you just need to be able to churn out lots of code that compiles on the first try, and when it doesn't the mistakes should be easy to fix and minimize the time you're spending fighting with the type system (C++ templates come to mind as they're often avoided in games no small reason being the cryptic error messages they can produce). There might be an argument of familiarity, that eventually if they used Rust or Haskell enough it would all come to them as easy as C, but then well known Haskell promoters say things like "if you're using the type system right your code will never compile on the first time."

<comment><USER55> > the mistakes should be easy to fix and minimize the time you're spending > fighting with the type system

In Haskell you don't fight the type system. It fights your bugs.

[Yes, yes, this isn't an absolute truth, but it is a relative truth when the point of reference is C++'s, or even Java's, type system.]

</comment></comment></comment></comment></comment><comment><USER56> I don't share some of the needs the author has, however, for game development, I like to use Haxe. Mainly because it allows for very easy crossplatform development (to both PC and mobile OSes)

</comment><comment><USER57> Are GC pauses really significant? I can understand there being problems if you have to churn through gigabytes of world data, but the author's games don't appear to be on that scale.

<comment><USER58> They often are if specific care is not taken to minimize garbage in the game loop, particularly in resource-constrained environments like some console and mobile platforms [1]. In GC languages, this often means deliberately avoiding common idioms that perform allocation under the hood.

The threshold for a noticeable pause is much lower for action games than it is for general applications. 100ms is often used as a rule-of-thumb "instantaneous reaction" threshold for general UX [2], but that's a lot of time to a highly competitive player (e.g. this guy playing Super Punch-Out blindfolded [3]).

In fact, in high-reliability real-time software, even non-GC heap allocation is often avoided (or done once at startup and then left alone). Heap allocation is not a very predictable operation beyond "probably fast enough".

[1] [https://stackoverflow.com/questions/5063190/game-jitters- on-...](https://stackoverflow.com/questions/5063190/game-jitters-on-xbox360)

[2] [https://www.nngroup.com/articles/response- times-3-important-...](https://www.nngroup.com/articles/response- times-3-important-limits/)

[3] [https://youtu.be/vSr3aXd4XuQ?t=358](https://youtu.be/vSr3aXd4XuQ?t=358)

<comment><USER57> I can see that you'd probably have to take care on mobile and older platforms, and with resource-heavy games. But I have difficulty imaging that there'd be much issue with anything else, as long as the code wasn't overly terrible.

Do you happen to know of any benchmarks, or non-anecdotal evidence?

</comment></comment></comment><comment><USER59> Incidentally, all of his reasons that don't misrepresent C are all the same reasons I write games in JavaScript. Mostly, it's about speed of development, understanding, and platform compatability. Performance is good enough and almost always my fault when it isn't.

I wish for a strictly typed language, but OP isn't using one, either. I've tried several of the transpilers and have generally found the workflow lacking in one way or another.

<comment><USER60> Did you try Typescript? I'm curious what you thought of it for games if you tried it. I enjoyed using Cocos2D JavaScript bindings for cross-platform game development.

<comment><USER59> Found it difficult to integrate with existing JS, such as THREE.js. Also found it difficult to create libraries (I make a RAD workflow for VR apps) that could be used in arbitrary JS projects; I want people to be able to drop my concatenated script into their page with a script tag and not have to worry sbout anything else. Also, early on I ran into quality issues with the 3rd party type mappings for popular libraries, and eventually decided it wasn't worth the hassle.

Generally speaking, gradual typing doesn't get me excited. I don't think there is a payoff to having some of your code statically typed and others not. The mismatch between the two causes problems. So TypeScript, et al are an all-or- nothing proposition, and there were big chunks in my workflow that prevented it from being "all".

If you choose to embrace dynamic code, you can write less of it and minimize your surface area to bugs. I'd prefer static checking and more code because of stricter typing, but dynamic can be done well in its own right if you approach it at a much higher, metaprogramming level. Don't half-ass two programming styles. Whole-ass one.

I also missed the fast-reload workflow of native JS. I sometimes live-edit code in the browser, and being able to go back and forth between the two with no hiccups is nice.

So while a lib layout e.g. THREE.js is "old", it at least works without major machinations on the most systems for the most implementing developers.

I might start using more ES6 features, as I could use native browser support in my browser of choice for development and a transpiler to pack up packages for deployment. But I won't be going to a language that gets between me and the browser.

Contemporary webdev workflow is designed for either A) automated setup and execution of scripts in remote, headless environments or B) getting beginners gluing libraries together quickly. These are frequently not the same thing as a great developer experience.

<comment><USER61> You should give Flow a try, seems it would fit your requirements from typing point of view. You'll see whether it'll be fast enough for you.

<comment><USER59> You will have to provide a link, because Googling revealed only a long-dead project with a Chinese website and an empty GitHub repo.

<comment><USER62> flowtype.org

</comment></comment></comment></comment></comment></comment><comment><USER63> no auto in C. no standardized data structures. no lambda. no exceptions. and C++ still compiles actually fast. at least on my machine.

<comment><USER64> For years developers used C++ without most of these features and built great code. So this is not the problem of C. There are still lot's of great code done in C.

<comment><USER63> Really ? Look at this code: [https://github.com/danfis/libccd/blob/master/src/ccd.c](https://github.com/danfis/libccd/blob/master/src/ccd.c) Looks like great C code doesn't it?

Still you see lots of plumbing: 1\. call of init functions 2\. unsafe array/pointer usage 3\. goto

I rather use C++'s functional constructs rather than the imperative ones. It is less code, that directly self-explains the business logic; instead of being littered with (unsafe) plumbing code.

And IF I find a performance bottleneck - I can still opt to use/develop an unsafe lowlevel version.

</comment></comment></comment><comment><USER65> Absolutely amazing games on the webpage, especially Knossu, a "A non-euclidean horror game." Crisp and trippy graphics and sounds. Good gameplay, no "installation" required.

But running a closed-source binary can be a bit sketchy; whereas you don't have to trust a publisher to the same degree running a game in the browser.

</comment><comment><USER66> Flash is not dead. It's the ONLY plugin left that works in all desktop browsers, and works on Mobile phone. Facebook supports it, more and more who have started in HTML5 have lived to regret the day. For many years I was a C++ snob who totally dismissed Flash, but now I really enjoy actionscript

I am working with a client who is write a phone app in Flash because of the low level cross platform abilities and it is awesome! It also lets me build web based admin tools for the backend really quickly. Only negative thing I can say about it is the garbage collection is slow...

<comment><USER67> Flash doesn't work in most installations of desktop Safari, nor does it work on iPhones. Many others are fleeing it because of massive ongoing security problems with it. If you're content with the audience that remains then great, but it's far from "all."

<comment><USER66> Flash has many colors now, on mobile phones its called Adobe AIR. And it just won the mobile tech of the year award as CES.

</comment></comment></comment><comment><USER68> I thought Lua was great for games development, the author does not mention it.

[http://www.lua.org](http://www.lua.org)

<comment><USER69> Lua is widely used as a scripting layer on top of a game engine. The intense calculations needed to generate a high-fidelity simulation like graphics and physics are usually implemented in the engine in C++, and then the game logic/item behavior/etc. is defined in Lua. I haven't heard of anyone using pure Lua for a whole game, including the engine. It'd be really interesting to see what it looked like if someone did so.

<comment><USER70> there are plenty of games using pure Lua. www.love2d.org :)

<comment><USER71> No, Only the scripting is Lua. The engine is all in C++.[1]

[1] [https://bitbucket.org/rude/love/src/tip/src/](https://bitbucket.org/rude/love/src/tip/src/)

<comment><USER72> After all, that's kind of the point of Lua. Write all of the performance- critical / low-level stuff in C or C++, expose it to Lua, then orchestrate it from a Lua script. Lua's C API is very pleasant to use.

As a standalone scripting language, I found it rather awkward to use when compared to, say, Python or Perl. It was only when using it as an embedded scripting language (not on a game, though) that I could really see it shine.

</comment></comment></comment></comment></comment><comment><USER6> Simplicity of a programming language, and simplicity of programs written in it are two very different beasts.

I understand funny things happening under the hood (garbage collection) might not look attractive ; However you can't require everything to be explicit and, at the same time, keep your programs simple/small.

The more you want your code to be small, the more you're gonna need a programming environment (language/API/runtime/framework) doing things for you under the hood. And there's nothing wrong about it!

<comment><USER73> > The more you want your code to be small, the more you're gonna need a > programming environment (language/API/runtime/framework) doing things for > you under the hood. And there's nothing wrong about it!

Or have your code do one thing and only one thing, a single purpose, with clear, well defined interfaces and then compose things doing only one thing to a bigger thing that you can reason about more easily because the interfaces and processes are well-defined.

One thing I've seen too much of in my professional life is complex projects trying to do too much, with ill-defined roles and implicit, poorly documented interfaces.

Simplicity of a language works well as long as your projects are kept simple. You can build fairly complex solutions by composing multiple simple projects with well defined interfaces.

I think we agree that simplicity of a language works less well when the scope of a single project is too large and too arbitrarily defined.

</comment></comment><comment><USER74> Static typing and C.

C is very simple and it's missing a Hindley-Milner type system.

If that was a part of it, I'd use it.

C++ wins now, every time. Type safety in C is a pain.

</comment><comment><USER75> Just mix C and C++ like a regular horrible person would do. An entire game in C sounds....tedious.

</comment><comment><USER76> I see one of the core reasons C is chosen over C++ is the speed of compilation. My question would be, to what extent is compilation speed relevant? What time differences are we talking about? I agree that every second counts, and I understand that fast compilation just feels good to work with for a hobby project, but what serious relevancy it has? At least the way I do it is divide program (a game for example) into several projects and compile them into dll's, this way compilation time is drastically reduced and with a side benefit of clear separation of different parts of the program.

<comment> loup-vaillant Most C++ projects I have worked with, regardless of their size, had re- compilation times that routinely exceeded 20, sometimes 30 seconds. There are various reasons for this, among which uncontrolled use of templates and nested header inclusions where a forward declaration would have sufficed.

C, with its simpler grammar and the absence of template, tend to re-compile under 5seconds even for sizeable projects.

<comment><USER76> So, roughly speaking, you can expect for a difference in the order of tens of seconds. But my question was, how relevant is this? At least in my experience, and I have worked with projects that took up to 50 minutes to fully recompile (before we moved to newer ms compiler) when taking all dlls, the full recompilation is rarely required. Sometimes you have to recompile project, which can take minute or so, but most often you do incremental compilations that barely takes a second. So for me it's hard to imagine compile time having considerable impact on delivery. Most of the time is used while reading the code and thinking how to solve a problem, not typing the keyboard and waiting for compilation to finish. And I would argue that properly written C++ can greatly improve the biggest part of work - reading and understanding the code. I admit that properly written code is not a given etc., but for personal project you can write however you want. In the end it's probably more personal prefference and how confortable you feel rather than strict rational choice. I think both C and C++ are very close calls, especially considering all the other choices there are.

<comment><USER37> As for understandability, I used to work with a lot of EE people building various equipment that required both hardware/software. Everybody was smart, but not necessarily an expert in programming. We also used various programming languages. The rule was keep all code at an "8th grade level" and write everything like C. Everybody regardless of language background can read C. C has become the universal pseudo-code.

Nobody agrees on what "properly written C++" is. A colleague with a C++98 background told me C++11 looks like a completely foreign language to him.

</comment></comment></comment></comment><comment><USER77> I wanted to program my game in C but then I took notice of how incredibly comfortable things like Vector and Map are. I never look back again. C is for plain libraries and OS where compatibility and performance are of utmost importance.

</comment><comment><USER78> Well into C++14, but yet this outdated myth of an unbearable "complexity". This is not the language you knew.

<comment><USER79> C++11 and 14 make it possible to avoid or ignore much of the complexity of old-style C++, but they also introduce plenty of complexity of their own and they don't deprecate any of the old stuff. It's not a myth.

<comment><USER78> Yes, but now you can safely use a nice and clean subset without ever touching any dark corners.

<comment><USER7> There are a few new dark corners in modern c++ ... Enough to inspire Scott Meyers to fill a new book of advice just for the new idioms. C++ is powerful but complex no matter how you look at it.

</comment></comment></comment></comment><comment><USER80> Did anyone break it to him that when he writes C, he is writing C++?

<comment><USER81> C is not a true subset of C++ so no, when he is writing C he is writing C.

<comment><USER59> Given he is calling C a strictly typed language, I'm not sure the OP really knows C _that_ well. Sure, it's strictee than, say, PHP. But in the pantheon of languages, it's not objectively strict.

<comment><USER81> I mentioned this in another comment, as has many others.

</comment></comment></comment></comment><comment><USER82> C is super slow when it comes to compiling, if you really want fast compiling take a look at Pascal, around 10 times faster the last time I checked. There is Free Pascal that is open source and also has a great IDE called Lazarus. Both much better as a language compared to C and C++ and still close to their speed.

</comment><comment><USER83> tl;dr overly comfortable, old school C developer is still worrying about the death of flash and hanging on to what he knows. Finds reason why he shouldn't step out of his comfortable zone.

<comment><USER84> Um, "fast compilation", "hotloading dll:s", "future proof" are all to me valid and non-trivial technical requirements. Also - there are better languages than c for lots of things but there is a class of problems (like efficient and correct numerial code) where c is as good as any language "in the same category" (unless one counts fortran)

</comment></comment><comment><USER81> If by "strict typing" you mean strongly typed then you are factually incorrect. By virtue of casting C is weakly typed, as is Java, C++ et al.

If your understanding of strict typing is statically typed, i.e. that types are checked at compile time then C still has some flaws as you could write a whole slew of C that is "typeless" using void * although that would be terribly misguided.

I understand your intent, but I dislike the ambiguity of the phrasing.

<comment><USER85> > By virtue of casting C is weakly typed, as is Java, C++ et al.

Java's casts are dynamically checked, memory-safe and only work through the inheritance hierarchy, if you try to cast to an invalid type you'll get an error. Putting it in the same class as a C-style cast makes your usage of "weakly typed" as meaningless as it ever is.

For C++ — ignoring C-style casts — it depends which cast you use, dynamic_cast requires RTTI but IIRC it offers the same guarantees as Java's cast; static_cast should check that the types are related and the conversion is valid at compile-time, reinterpret_cast is the "weakly typed" one (essentially a simpler version of a C-style cast).

> I understand your intent, but I dislike the ambiguity of the phrasing.

Yet you use the expressions "strongly typed" and "weakly typed"?

<comment><USER79> There's also a valid distinction to be made between weak typing through implicit conversions and weak typing through reinterpret_cast. C++ has both unfortunately, but the second one is often necessary for a low-level language.

</comment></comment></comment><comment><USER86> TL;DR Many people is making money doing Unity games, so I ignore it exists - for $1500 - and I go the hipster way and create my own hundreds of memory corruption bugs myself.

<comment><USER87> If you're going to write a TL;DR for others, you should at least read the article yourself, don't you think?

<comment><USER86> I did, it is so abstract to pretend you can do better that there is no way to discern. He didn't even mention "unity" in his post, thats just ridiculous in 2016, but yeah, keep down voting, your implementation of 2d graphics, sound, collision, physics, plugins, marketing, sprites, menus is gonna be so much better than hundreds of engineers at unity withing 10 years straight.

<comment> loup-vaillant Try and implement [http://jonathanwhiting.com/games/knossu/](http://jonathanwhiting.com/games/knossu/) with Unity.

My guess is, the author would have taken more time learning Unity than implementing this game.

<comment><USER54> I'm looking forward to playing that next time I boot into Windows (couldn't get it to even create a window on my Linux machine after satisfying its dynamic dependencies (really old libpng for one), or even the Windows exe via Wine -- one of the perils of custom engine development) but I know Antichamber ([http://www.antichamber-game.com/](http://www.antichamber-game.com/)), which has the similar concept of a non-Euclidean world, was built in Unreal. Unreal is pretty different from Unity, and I know neither of them well, but I think it shouldn't be all that difficult once you know Unity. And a lot of what I briefly looked at on Youtube for Knossu looks like shader heavy lifting, rather independent of the core engine.

<comment> loup-vaillant From the author of Knossu himself here [http://jonathanwhiting.com/games/knossu/press.html](http://jonathanwhiting.com/games/knossu/press.html)

> _[Knossu is] an answer to the question: What can you do with a Doom style > raycasting engine if you 're tired of realism and shooting things?_

So it's a Ray caster. Which you can confirm by playing the game and looking up and down: the distortions are typical of a ray-caster.

Too bad you're using an old GNU/Linux distribution. For the record, it worked out of the box for me (Debian Testing, 32bits).

<comment><USER54> My distro is current (Gentoo), I meant that the game required libpng 1.2 when libpng current is on the 1.6 branch. (Though apparently the 1.2 branch still receives security updates so maybe it's not as old as I thought.) On a whim I tried again by just copying a 32-bit libpng1.2 so from Penumbra, that actually made it work, but no sound plays. Ah well.

<comment> loup-vaillant Crap. Why does it even work on my system?</comment></comment></comment></comment></comment></comment></comment></comment>


NSA "touches" 30X all relevant emails and 60X all ingested Facebook data daily. - <AUTHOR> https://hackpad.com/NSA-Data-Numbers-PCXJoOnHgyv

<comment><AUTHOR> I've been trying to grok the data coming out of the NSA yesterday and could use everyone's thoughts. I am by no means sold on my approach, but I've definitely put thought into it.

Feel free to critique / destroy / inform.

</comment><comment><USER2> Deciphering the doublespeak is tough. "Touches" implies, at least to me, data that passes through hardware controlled one way or another by the NSA or it's corporate affiliates.

It's affiliates..

That brings me to "The reality is the NSA has no physical ability to touch 1/4 of the basketball court." As we know the NSA hires corporations like Booz Allen, another such corporate entity is Endgame Systems[1]. In terms of courts Endgame dabbles in collections and offensive operations that cover the entire court:

"There are even target packs for democratic countries in Europe and other U.S. allies. Maui (product names tend toward alluring warm-weather locales) is a package of 25 zero-day exploits that runs clients $2.5 million a year."

"The Cayman botnet-analytics package gets you access to a database of Internet addresses, organization names, and worm types for hundreds of millions of infected computers, and costs $1.5 million."

The use of malware, most probably the very malware others are prosecuted for, gives the NSA a limited but as cgshaw noted valuable foothold into otherwise dark neighborhoods of the net.

[1] [http://wiki.echelon2.org/wiki/Endgame_Systems](http://wiki.echelon2.org/wiki/Endgame_Systems)</comment>


We sent our last hire to Ethiopia. Where in the world will you go? - <AUTHOR> https://www.craftcoffee.com/careers <comment><USER2> Great team, and what could be better than coffee and travel...for work. Killer opportunity.</comment>


Eric Schmidt's thoughts about Pakistan - <AUTHOR> https://plus.google.com/u/0/104233435224873922474/posts/4UcNomnhipX <comment><USER4> British Pakistani here.

Schmidt has not seen Pakistan for what it really is - a cesspool of corruption and poorly educated people.

Pakistan has two major problems. Primarily, education of the people ... what good is a democracy if people cannot understand the democratic system - <USER2> see past the public visage and look deeply into what kind of person a political candidate is.

This poor education leads Zardari (a corrupt politician who has ties to the murder of Murtaza Bhutto) only coming to power due to a three way effect of a sympathy vote (assassination of Benazir Bhutto), bribery and threats to people who work on his land (he is one of the largest land owners in Sindh). Nowhere else in the world would a criminal become the president of a nation.

The secondary problem is ALL the corruption from the upper levels of politics, to the police itself. If you're caught speeding in Pakistan, simply apologise to the officer who has caught you and slip him a few hundred rupees.

Want to get out of the airport faster by not having your bags security checked? Slip 500 rupees to the security officer.

Are you the prime minister of the country being investigated for money laundering? Make the lives hell for judges and lawyers.

Fix the education problem and everything else will fall into place and this is something that I truly hope that PTI will do, should they on the unlikely chance get into power (I say unlikely as I envisage that the PPP will somehow manage to bullshit their way through another election).

<comment><USER5> Corruption is everywhere. Pakistan is hardly different. Even in the UK you'll find corrupt politicians or entrepreneurs. Perhaps they are less so (or simply better at it?) but this simply won't stop any time soon.

Education is an issue but only in the long term. Assuming Pakistan managed to overcome several of its other problems, uneducated would become Pakistan's most important resource. Uneducated people are what make industrialisation possible. They make low wages possible and so the country becomes interesting as a manufacturing base (as Thailand has become for example).

With more economic activity will come education and then the country will have to find an alternative economic source.

More education will also affect corruption as educated people tend to be less willing to put up with it.

This is of course overly simple but for a big picture, it does hold some truth.

I believe that focusing prematurely on education, is actually counter- productive as the tissue of companies in need of educated workers simply is not there and makes low wages more difficult.

The West is also a good example of other issues with educated people. Countries full of educated people are more difficult to manage. For example France is badly in need of deep reforms but they will simply never happen because French would go on strike as a result of such reforms.

For what it's worth, in France you'd get a 90 Euros fine for speeding on a standard road. I'm not arguing whether it's good or bad, the answer simply isn't black or white. I do know though that 90 Euros is not sustainable for many a family in France while a 250 Bath (in Thailand) is fairly cheap for car-owners.

<comment><USER6> I think you have to understand that corruption in the UK and in Pakistan are likely two different things. In the UK corruption, any corruption is about Greed. In Pakistan and similar countries not _all_ corruption is about greed, it's about an alternative system of taxation.

Your average police officer, or fireman or customs official probably gets paid a tiny amount of money per month maybe $30-$50. But as an official of the government they have the opportunity to levy "additional taxes" during their day to day life. That's why often you'll find such countries have thousands of official regulations which on the face of it make no sense, how can anyone get anything done legally with all these regulations? The answer of course is that these regulations merely exist to create opportunities for the relevant officials to "collect taxes". You pay the official directly, you don't need to comply.

And their superiors know, their superiors get a cut of every bribe, it feeds up the chain of command within the relevant organisations. The officers on the beat or the fire department official who checks building fire regulations collects the "taxes" for himself and his superior.

So when you talk about stopping corruption in these countries you've got to replace this system of "taxation" with a real one that works. But that's easier said than done because the real corruption (fuelled by greed) also exists here and no one in their right mind is going to pay serious tax money to their government because it will disappear never to be seen again.

I can't claim that I know what the solution is to that, I thought I'd just put a different perspective on it.

<comment><USER7> > In Pakistan and similar countries not all corruption is about greed, it's > about an alternative system of taxation.

What exactly is this "auxiliary taxation" about besides greed? It's not like the money they collect is used for the greater good.

<comment><USER8> It's not like the money which forms part of a policeman's salary is used for the greater good either.

Except insofar as it compensates the policeman for doing his job, and insofar as that job is for the greater good. (Although, I don't think everyone agrees that the moral justification for everything is a unitary 'greater good').

The problem isn't the policeman taking money, the problem is that he is taking money under the table and it is likely compromising how well and how fairly he does his job.

When bribery becomes so regular and highly routine, to the point where you can be seen to justly complain about the bribe being raised, the difference from a normal fee is entirely one of top-down regulation. Which is good and helpful for management. But the distinction is about the looseness of supervision and control (and the bad results that leads to) rather than the basic interaction.

<comment><USER7> > It's not like the money which forms part of a policeman's salary is used for > the greater good either.

 _All_ of the money that goes into a policeman's salary is used for the greater good. That's what having a part of our earnings confiscated buys us. What the policeman does in his official capacity is another mater.

> The problem isn't the policeman taking money, the problem is that he is > taking money under the table and it is likely compromising how well and how > fairly he does his job.

No matter what his salary is, greed may lead him to take bribes regardless.

> When bribery becomes so regular and highly routine, to the point where you > can be seen to justly complain about the bribe being raised

Well, it sounds like you're thinking from the point of view of that "auxiliary taxation" mentioned above. I still can't see how a group of people collecting bribes in some kind of hierarchy is not all about greed. I'm pretty sure the bribes don't actually improve the job performance of those policemen or the other looters up the chain.

</comment></comment></comment></comment></comment></comment><comment><USER9> Eric Shmidt's opinion on this topic has no value. People like him are treated _way_ better than ordinary people in Muslim countries. People like me can be arrested/executed for the silliest of reasons [1][2][3]

I wouldn't ever go to a Muslim country because some rich dude said it's quite alright. What works for them needn't work for me.

[1][http://articles.cnn.com/2012-03-13/asia/world_asia_pakistan-...](http://articles.cnn.com/2012-03-13/asia/world_asia_pakistan- blasphemy-petition_1_asia-bibi-blasphemy-salman-taseer?_s=PM:ASIA) [2]<http://en.wikipedia.org/wiki/Hamza_Kashgari> [3][http://www.amnesty.org/en/news/iran-must-halt-execution- web-...](http://www.amnesty.org/en/news/iran-must-halt-execution-web- programmer-2012-01-19)

<comment><USER10> > I wouldn't ever go to a Muslim country because some rich dude said it's > quite alright.

Wow, I'm amazed that this comment can take top spot on HN. How does this even happen? There are plenty of 'muslim countries' that are perfectly fine. Jordan, Turkey, Morocco, Dubai and Oman strike me as immediately safe 'muslim' places to go to. Millions of tourists go to these places every year and are fine.

The problems in Pakistan are not about whether or not it's a "muslim country" as you put it. The problems are based on what is societally and culturally acceptable which is a progression of traditions and norms, not Islam itself.

Let me put it this way, try swapping Muslim out for Jewish and re-read that statement, or Muslim for Christian. How do you think a muslim Pakistani would feel dressed normally for Pakistan in the bible belt of the US? Does that mean that they shouldn't go to Mardi Gras in New Orleans?

I'd hoped to see more discussion on the specifics in HN rather than sweeping statements with an undercurrent of racism.

<comment><USER9> In turkey, you will be thrown in jail simply for dissent - [http://www.npr.org/2012/01/26/145844105/for-turkish- journali...](http://www.npr.org/2012/01/26/145844105/for-turkish-journalists- arrest-is-a-real-danger)

In Morocco, a court ordered a teenager to marry her rapist. She killed herself. [http://www.guardian.co.uk/world/2012/apr/03/moroccan- teenage...](http://www.guardian.co.uk/world/2012/apr/03/moroccan-teenager- death-women-rights)

The Dubai Sheikh torture clip is infamous now. Amazing how you can torture a guy and not go to jail if you're a Sheikh. We know about this specific incident because of the video leakk. Who knows what else goes on there. <http://abcnews.go.com/Blotter/story?id=7402099>

Oman will throw you in jail for dissent with the govt [http://gulfnews.com/news/gulf/oman/oman-crackdown-on- dissent...](http://gulfnews.com/news/gulf/oman/oman-crackdown-on-dissent-nets- poet-and-blogger-1.1034411)

A lot of these emirates are guilty of encouraging human trafficking to allow supply of cheap labour. When your rich american/european visits the UAE, he doesn't see the human rights violations going on right around him - <USER3> because his environment is sanitized of ill treatment of labour from poorer countries and partly because he chooses not to see. Should we all just shut up about the UAE's behaviour then?

The reason turkey, morocco etc are better behaved are because they're dependent on EU for economic support. I didn't mean to go muslim bashing with my comment but as you can see, they're easy to classify in this fashion. I wouldn't go to China either for the same reason I wouldn't go to a muslim country.

<comment><USER10> I can't believe you're trying to defend this position. I'm really quite shocked.

Human rights abuses against local people for dissent happen all around the world, including the US and the UK. In Germany you can be jailed for denying the holocaust. In France you can be jailed for wearing a headscarf. Exercising common sense is generally a good thing to do anywhere you go, but the things you talk about occur around the world and aren't just limited to states with a majority muslim population.

> The reason turkey, morocco etc are better behaved are because they're > dependent on EU for economic support.

It's clear you've never been to Turkey. Turkey's outpaced the EU for economic growth for years and effectively dodged an economic bullet by not joining the EU. It may benefit by not being in the Euro, but loses out on tariffs and taxes. If you walk around Levent in Istanbul you'll see the real money's coming from China, Russia and the Middle East, not Europe.

<comment><USER11> Please stop propaganda. There's no jail in France for the hidjab (or what this scarf is). It's a 150 euro fine. Not for wearing the hidjab, but for covering the face in public. Real jail time or corporal punishment is a different story, don't you agree? Let's say I had a few beers and took a leak on the street. Is there a difference between a few hundred bucks fine and having my weapon of crime chopped off?

There's something in his position worth defending. And I guess that the difference is in the age. Islam is younger than Christianity, they're a few hundred years behind. Remember what Christians were doing 600 years ago? Inquisition, Crusades, etc. But this is just my theory.

<comment><USER12> "Remember what Christians were doing 600 years ago? Inquisition, Crusades, etc" Yeah Christians did it 600 YEARS AGO. But islamic countries do that kind of horror nowadays and AFAIK they did not developed in a bubble, isolated from the other countries. So it is perfectly relevant to judge them. Human Rights are universal, not a simple "cultural standard".

<comment><USER8> Where are Muslim Crusades currently being waged? Remember that the Crusades were a huge undertaking involving many entire nations engaged in full scale war.

<comment><USER11> To run a crusade you need a target. All obvious targets for Muslim crusades either have the nukes, or rumored to have nukes or have friends with nukes. Bummer.

<comment><USER8> Even if that were not the case, and even if it were actually true that the majority of today's Muslims were in support of such adventures (let alone willing to die in the numbers that European crusaders did) ... Muslim countries are flat out too poor to dedicate the same percentage of GDP that European countries did to the Crusade. The ones which are less poor are making all their money by working with the West anyway.

<comment><USER11> Agree in general, but I believe that if there was no (rumor of) nuke in Israel, they would have tried (again).

Another "positive" moment within the Muslim world itself is that Muslims are still happily killing each other (like Christians were doing a few centuries ago). Eventually they will stop doing this.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> A Pakistani from Karachi here.

What actually amaze me most of the time that people consider Pakistan similar to Afghanistan and they believe that Pakistan == FATA region. The reality is that Fata is not even 5% of Pakistan and the region is disturbed because of invasion in Afghanistan and closed cultural ties between FATA and Afghans.

Totally agree about Mobile penetration in Pakistan. It is something similar to Africa. The difference that in Pakistan there is no wider acceptance of mobile usage other than sending useless SMS and Spams. There are only 2 companies offer mobile payments and that are also not TRUE mobile payments.

The technology is quite enjoyed by Pakistanis both in rural and urban areas. The biggest obstacle is corruption and politicians itself who don't let people to get educated.

<comment><USER14> Fifteen years ago I thought of Pakistan as "that other India". Now I think of it as "that other Afghanistan". This doesn't seem like progress.

</comment></comment><comment><USER15> I live in Lahore which is one of the three major cities in Pakistan. Trust me, what he says about electricity is absolutely true. Right now I am sitting which out any electricity. My internet modem is on UPS so that I can have uninterrupted internet. As far as computer is concerned, I have to religiously charge my laptop whenever there is electricity so that I can use the laptop during the load shedding times.. Since its so hot( I am sweating right now no fan, and the temperature is 50 C), my laptop heats up which usually causes my graphics card to burn out. Just bought my third laptop in last 12 months. Desktop computers are out of question.

<comment><USER16> 50 deg C == 122 deg F.

</comment></comment><comment><USER17> I spent a few days in Pakistan last week, specifically in Karachi. I found the people to be very polite, the city vibrant and modern (much more so than I expected), and in spite of their enormous challenges, there are pockets of growth and development (telecom, islamic banking). Like much of South Asia, these developments are in spite of the government.

There also seemed to be an air of optimism about the prospects of Imran Khan becoming the next Prime Minister. I asked my taxi driver what might cause Imran Khan to lose and he mentioned if America does not want him, he wont become PM.

Here is an interview of Imran Khan with Julian Assange - <http://www.youtube.com/watch?v=WacS98ATtIM>

</comment><comment><USER18> The following article by a Pakistani-Indian is a good read and explains the fundamental problem that Pakistan faces. [http://online.wsj.com/article/SB1000142405270230491110457644...](http://online.wsj.com/article/SB10001424052702304911104576445862242908294.html)

</comment><comment><USER19> Vice magazine recently went to karachi and made a fascinating documentary. The situation on the ground is pretty bad.

[http://www.vice.com/the-vice-guide-to-travel/the-vice- guide-...](http://www.vice.com/the-vice-guide-to-travel/the-vice-guide-to- karachi-part-1)

</comment><comment><USER20> great read - but in the process of painting a peachy picture for the future, he glosses over a huge core problem that pakistan has. The fact that a significant part of its identity is based on being the anti-india.

<comment><USER21> Historically, isn't the USA kinda based on being anti-British? Wasn't there some war thingy where you chaps booted us out? We get on now, don't we?

<comment><USER22> The colonies were an ocean away during the age of sail. I imagine things would have turned out quite differently if Britain was on our southern border.

<comment><USER23> You don't even need to imagine!

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

Though I'm not sure whether this supports or refutes your point... because we _did_ start to get along pretty swimmingly once it was all over.

</comment></comment></comment></comment><comment><USER24> _the rest of Pakistan for the average citizen, much larger than the first and which is reasonably misunderstood and relatively safe;_

I'm not an expert on the topic, but if Karachi[1] can be regarded as "relatively safe", the Pakistan has bigger problems that I imagined.

[1] [http://www.guardian.co.uk/world/2012/apr/30/karachi- ethnic-f...](http://www.guardian.co.uk/world/2012/apr/30/karachi-ethnic- faultlines-exposed-killings)

</comment><comment><USER13> Interview of Imran Khan, the budding politicians and ex successful cricket Captain, you will learn more and have more authentic view about Pakistan.

Julian Assange interviews Imran Assange

<http://www.youtube.com/watch?v=an-AJIqN_r4>

</comment><comment><USER25> _The emergent middle class of Pakistan won't settle for a corrupt system with constant terrorism and will push for reforms in a burgeoning democracy. Here's to the new civil society of Pakistan, who will use connectivity, information and the Internet, to drive a peaceful revolution that brings Pakistan up to its true potential._

Gosh, I sure hope so. Maybe Eric should talk to some of the Green Revolution folks.

I don't mean to be cynical, but the desires of the emerging middle class are going to have to compete -- perhaps with great violence -- with the desires of the established interests. That's what happens when political systems aren't able to auto-correct and run for many decades.

The question I would have like Schmidt to answer is this: _is Pakistan a country_? That is, does it control its borders, is the government the sole user of force against the population, is there a place where international partners can go and ask for and receive redress when wronged by citizens of Pakistan?

I don't think it is. Or if it is, it's a close call.

Having said all of that negative stuff, I wish the people living in Pakistan the best. An emerging middle class, along with a decent education and unfettered internet access, is their best shot at a happier tomorrow.

<comment><USER26> I think you raise valid points. One difficult problem is (and I have faced this myself for the longest time and it is evident the Eric Schmidt is suffering from it as well) is that one tends to appraise a country along a line that mirrors one's own priors of what a country typically is. Such priors usually mirrors ones own country.

Pakistan's position is really very unique and it takes time to understand it. The usual labels take very different meanings. For instance what the western world calls "middle class" almost doesn't exist in the form that they expect it to. Even if it did, it has nowhere the clout or the purchase. The country is deeply, and I do mean deeply, feudal. "Middle class" either means of a feudal family decent or of military lineage. Feudal land holdings and military are the two, and pretty much the only two centers that drives the economy and are locked in their desire to keep their privileges intact. If you are interested in this topic, do take time to find out what percentage these two forces account for.

And then you have the significantly large radicalized population. And even here it is very different. You would think radical groups are fringe groups, but not quite so in Pakistan and this has been cultivated by deliberate intent over several decades. The identity of a victimized population that the world has been unfair to because of their religion gets ingrained very early in the education system. Such a belief of persecution is rampant even in the mainstream, sometimes given a modicum of a veneer. Its difficult to catch these undertones unless one is familiar with the language and reads the same newspapers that the Pakistanis read, or watch the same TV shows that Pakistanis watch. Find out about Zaid Hamid and then consider the fact that there he is as main stream as vanila ice-cream.

Next word: army. It is very different from an army one would expect to see. It is a cross between a rich political party that has an unprecedentedly militarized cadre and a mafia house doling out favors (in the form of jobs and other privileges) to keep the population in control. On one hand it controls what you would call the civic life and on the other it also controls albeit at a very decentralized way the different Jihadi outfits which are again smaller mafia houses as entrenched in an economic endeavor as much as a religious one. Its common to dismiss these radical outfits as religious whackos, but you would get a better understanding if you also follow the money and see how the business side of it works.

Entwined with the feudal system is a deep ethnic undercurrent and you would often find the different parties locked in a perverse game theoretic equilibrium trying to gain control. All this goes unreported in the western media, or well in their own country as well. To see what I am talking about, dig up statistics of violence related civilian (police personnel included) deaths in Karachi in the past year, and Karachi is the most liberal city there.

The funniest comment by Eric Schmidt was about freedom of the press. That does not exist. Unless you have some seat of power guarding your life you cant say what you want to say at least not while residing in Pakistan.

If you have interest you can follow this sarcastic blog of a faux major [http://majorlyprofound.wordpress.com/2012/04/10/prospects- fo...](http://majorlyprofound.wordpress.com/2012/04/10/prospects-for-peace/) but you have to read between the lines because beneath the sarcasm there lies a lot of deliberate thought.

</comment></comment><comment><USER27> In terms of startups, Pakistan is being let down by the banking bureaucracy. Paypal doesn't work in Pakistan, and there is no official explanation of why it is so. Lacking a mode of easy/ secure online payments, startups are kind of dead in Pakistan at this time.

<comment><USER8> If you have a risky or nonexistent payment infrastructure, poor ability to enforce contracts, high inflation, high interest rates, and high risk due to corruption then it is going to be tough. Unfortunately these kinds of conditions cover most of the populated world.

</comment></comment><comment><USER28> The only thing that will save Pakistan is a complete disassociation with radical Islam. That, more education and less corruption. Godspeed.

</comment><comment><USER29> Is this really Eric Schmidt? How do we verify a Plus account?

<comment><USER30> The "check" icon next to the name on the profile page: <http://i.imgur.com/Jzg8Y.png></comment></comment>


The Great U-Turn - <AUTHOR> http://online.wsj.com/article/SB124424701106590613.html

<comment><USER2> The Onion predicted this three years ago. No, seriously:

<http://www.theonion.com/content/node/47978>

I wonder how many of "satirical" articles actually wind up describing the future; it would be fairly easy to do a study on, say, articles published in 1999 and see how many of them have since become accurate.

</comment><comment><AUTHOR> With regards to the current recession hitting the developed and developing worlds differently, I was looking at this graph a while back: [http://en.wikipedia.org/wiki/File:2007-2009_World_Financial_...](http://en.wikipedia.org/wiki/File:2007-2009_World_Financial_Crisis.svg) and I'm still trying to decide how to interpret it. Does it mean that the US was the epicenter of the blast and the shock waves just haven't hit the economies that are less tied in yet? Or is it indicative of the world's wealth moving towards equilibrium (the Western world decelerating while the developing world accelerates)?</comment>


Will Coronavirus Pandemic Diminish by Summer? - <AUTHOR> https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3556998 <comment><USER2> It seems to me mathematically certain that it will.

A week ago there were 170,000 cases, now there are 337,000.

337000*(337/170)^14.5 is roughly 7 billion.

14.5 weeks from now is July 1st.

So either it diminishes or it's over by July, guaranteed.

<comment><USER3> This is not taking into account the slowdown of spread due to containment measures.

<comment><USER4> Also not taking into account in many parts of the world there is no such thing as Flu Season.

And no one knows why.

<comment><USER5> Could you elaborate on that? Which parts?

</comment></comment></comment></comment><comment><USER6> I'm not much aware of details, but it seems it's thriving here in Brazil.

<comment><USER7> Likewise in Australia. I suspect this study hints that person to person transmission is not affected but that the virus has lower viability via surface spread in hot and humid climates.

Australia is much more densely packed in Urban areas than other countries like India and in spite of favorable weather conditions the person to person transmission is high. They haven't enforced the shelter in place yet

<comment><USER8> I am very confused at the shockingly low cases in India, and the Indochina region.

Either it really is the climate or we're talking zero testing and a fiasco that's gonna engulf that region soon.

<comment><USER9> Perhaps because India is not testing?

If you don't test, then you cannot confirm someone has the virus. Thus, your confirmed cases remains low.

India has not shown up on the map yet, but I suspect that the virus is picking up steam. Every week, the numbers slowly increase. And by the time someone is confirmed with the virus, then they probably already infected 10 to 20 other people.

</comment></comment></comment></comment><comment><USER10> Houston has high humidity, and will make it into the 90's this week. If this is true, it should slow down here before someplace colder, right?

I would presume that if it doesn't, then this summer assumption is not relevant.

<comment><AUTHOR> I think we should encourage people to turn off their Air Conditioners, especially in indoor places like malls and bars where people gather. ACs reduce both temperature and humidity and make a more favorable environment for the virus.

</comment></comment><comment><AUTHOR> Nytimes article: [https://www.nytimes.com/2020/03/22/health/warm-weather- coron...](https://www.nytimes.com/2020/03/22/health/warm-weather- coronavirus.html)

Some research papers from the past about SARS-CoronaVirus: [https://www.ncbi.nlm.nih.gov/pubmed/22312351](https://www.ncbi.nlm.nih.gov/pubmed/22312351)

</comment><comment><USER11> From the abstract, I gather this is a solid "maybe, maybe not".

</comment><comment><USER12> We in the southern hemisphere are heading into winter. Not ideal

</comment><comment><USER13> I think we will only have a definite answer by May/June for this question. The close cousin of nCov, the SARS Cov-1, had started retreating back in June 2003.

</comment><comment><USER14> An unscientific observation about "summer" is in the west, schools aren't in session. That might be a very large contributor to the spread of all viruses.

I think there are too many variables to approach this scientifically and people won't really care how it diminishes. Just do everything possible to limit the spread while scientists formulate a vaccine of sorts.

Suggesting that a seasonal change could even be considered dangerous because it may lead people to believe that containment is no longer necessary. It's only "summer" for roughly half the planet, right?</comment>


Ask HN: Technical Writing course suggestions? - <AUTHOR> <comment><USER2> For me, what helped was doing a Master's Degree. And I'm sure a PhD would have continued to help. My advisors bikeshedded the hell out of every line I wrote in papers that had their names :). They also made me read specific material they had on how to write. But reading all those papers got me used to the model.

That said, it may not be the most effective method if all you want is the writing skill.

</comment><comment><USER3> If your ok using a book, I would highly recommend the book The Pyramid Principle. It covers logical structure and logical thinking.

</comment><comment><USER4> Practice.

Try writing a blog about something you know very well technically, but imagine you are explaining it to a Jr. Dev or maybe even a complete beginner.

Also, pay attention to the technical docs you like. For me, I think Digital Ocean does a really good job.

Experiment with drawings; simple sketches/models that can illucidate systems in a way that writing cannot.</comment>


What If Street Crime Statistics Matched Those of Cybercrime? - <AUTHOR> https://secalerts.co/article/what-if-street-crime-statistics-matched-those-of-cybercrime/bcc857ea <comment><USER2> The biggest difference, however, is that almost all cyber crimes are preventable.

The level of op-sec in most large companies, personal accounts, and even critical infrastructure is abysmal. Once a vulnerability is discovered and a patch is released, the bad guys know they have a guaranteed in if they act quick enough. And they do. All they have to do is beat the Sysadmins.

Here's a hypothetical: MS discloses a vulnerability in Word and advises an immediate update. Well, the SysAdmin is overworked and can't get to it this week. Friday, Suzy in HR gets an email with a malicious word doc. She opens it.

The bad guys are in. And chances are, word isn't the only piece of software that missed a vulnerability patch. The hacker gets privilege escalation and crypto-locks the computer. And of course, there were no backups of the data. So, the company pays the 35K or whatever in bitcoin.

Where could this have been stopped?

\- Better updating protocols for vulnerable software \- Teaching Suzy in HR not to open random file attachments \- Frequent, immutable backups

Only one of those things has to happen, and you wouldn't have had to pay a single satoshi to the bad guys.</comment>


100 million OpenIDs in service - <AUTHOR> http://www.readwriteweb.com/archives/openid_at_web_20_expo.php <comment><USER2> I love the OpenID concept, but here are three major problems IMO:

1) Will users remember an URL? Users already have enough problems remembering their own email addresses! And I don't think the "users are familiar with URLs" assumption is true: I've seen over and over non-tech users actually using Google as an address locator (that is, typing "Yahoo Mail" on the Google search box to access Yahoo Mail).

2) The phishing issue is a show-stopper, and convincing users to download a plug-in or install a client cert is simply not feasible. I don't see how they will fix this issue, unless if they convince Firefox and IE to provide an out- of-the-box fix (like a pre-installed plug-in or an open id CA cert)

3) It's not like user management is a huge pain from an implementation standpoint. And right now the risks of outsourcing user management to OpenID is higher than doing it in-house.

<comment><AUTHOR> A 100 million users can't be wrong

<comment><USER3> 63M of those are AOL users: <http://dev.aol.com/aol-and-63-million-openids>

Those OpenIds were created automatically. What percentage of those AOL users do you think even know what OpenId is?

<comment><AUTHOR> You don't need to know the name of something to use it. I think OpenId is going to become like an email address.

</comment></comment></comment></comment><comment><USER4> Who here actually has an open id? I don't know anyone with one.

<comment><AUTHOR> I am seriously considering getting one. Its also interesting how seem to have parallel systems. An OpenId system running alongside a login systems as we know it.

</comment></comment><comment><AUTHOR> I guess thats a critical mass. Enough to make you think hard about allowing people to log into your app with open id.</comment>