Kotlin: The Problem with null - <AUTHOR> http://arturdryomov.online/posts/kotlin-the-problem-with-null/ <comment><USER2> >Unfortunately, it is not really possible to change Kotlin behave the same way. Apple uses a bridging mechanism to connect Objective-C and Swift binaries, when Kotlin uses the same bytecode as Java. To make a simpler mental picture, imagine Objective-C and Swift being connected side-by-side and Kotlin and Java as a stack, where Kotlin is on top. I presume it would be pretty challenging to provide a proper compatibility with Java, transforming all nullable Kotlin values to Optional and vice-versa, especially in such tight areas like Java reflection.

This is not correct. The Kotlin compiler could treat every parameter and return value that doesn't have a nullability annotation as an implicitly unwrapped optional (Type!). It could even support all of the popular nullability annotations. There is no requirement to choose just one.

The beauty of IUO is that you can ignore the nullability and you have the same amount of safety you have today: if you touch a null value you get an exception (or abort in Swift's case). The benefit is you can insert a null check in one place which then propagates through the rest of your Kotlin (or Swift) code.

<comment><USER3> Yeah (agree) that's not correct. Kotlin has to compile to Java bytecode, true, but it does not overlay Java like e.g. Groovy does. Kotlin and Java very much exist side-by-side in exactly the same way Swift and objective-c do: they (can) target the same machine but have different language scemantics.

<comment><USER4> The Chris Lattner quote at the end explains the fundamental difference. Kotlin is an interloper in a Java world - that includes the JVM, a VM designed to run Java.

Swift integrates and interoperates with but is not based on the Objective C runtime. Apple also controls all the relevant bits and pieces and they can bridge, compile-to, shim, wrap, etc however they want. They can can pick the design approach and fiddle with all the parts to make them fit. This isn't a luxury Kotlin has.

<comment><USER5> That would have been true to say if this was a decade ago. After the advent of .NET and CLI's ability to support multiple languages, Sun started moving the JVM away from being Java specific and including features to support other languages. Your criticism hasn't been correct for years.

<comment><USER6> It is not a criticism as much as it is a fact, no less true than ever. The JVM is designed to run Java. Other languages also compile to Java bytecode, and Sun and Oracle have made some helpful changes.

But the VM is OVERWHELMINGLY designed around the requirements of Java and to be performant for Java. Try compiling a non-OO language to fast bytecode without spending a lot of time considering what the analogous Java code would compile to.

Java bytecode is so close to Java, you can decompile it almost directly to readable Java source. Try that with JRuby or Clojure or Scala and see how close you land.

<comment><USER7> Kotlin can compile to Javascript too. Just saying.

</comment></comment></comment></comment></comment></comment><comment><USER8> They could have gone hardcore and said any non-primitive, unanotated platform type is nullable but that would have made interop really ugly. And all of the null checks would have muddied up code and added (admittedly minimal) runtime costs.

I want something in between Kotlin and Scala. I want option as a real type that is treated as a max-single-element collection that can be flattened with the same APIs as other collections. But I want no runtime penalty. People in Rust are so lucky to have zero cost abstractions for these things. I suppose I'll need better compile time support (even more than Scala macros) and whole program optimizations (i.e. cross JAR) to get zero cost optional on the JVM. Things like Scala Native use LLVM and surely Option things are inlined or otherwise optimized out.

<comment><USER9> I wrote a zero-allocation `Option`-style (monadic) data structure for Scala a while ago [1]. Unlike all the previous attempts, it supports the distinction between `None`, `Some(None)`, `Some(null)`, `Some(Some(None))`, etc., which is what allows it to remain monadic. The surprise is that it does _not_ use `null` as the `None` value. The downside is that `toString()` is altered: `Some("hello").toString()` returns `hello`, not `Some(hello)`.

There was an experiment to use it as a replacement for the implementation of `scala.Option` in the dotty compiler code base [2], but it is inconclusive so far; it should be tried directly in the collections library.

[1] [https://github.com/sjrd/scala-unboxed- option](https://github.com/sjrd/scala-unboxed-option)

[2] [https://github.com/lampepfl/dotty/pull/3181](https://github.com/lampepfl/dotty/pull/3181)

<comment><USER10> Just curious, if Some(hello).toString produces `hello`, what does None.toString() and Some(None).toString() and Some(Some(None)).toString() produce? (My guess is `None` for all)

I think it's impressive† that you got nesting to work, I'm really curious how you pulled that off for longs and doubles without incurring extra overhead.

† Though, given the magic you worked in getting Union types working in the ScalaJS facades I shouldn't be surprised.

<comment><USER9> Oh primitive types do get _one_ level of boxing (on the JVM): a `Double` becomes a `java.lang.Double`. But it doesn't become a `Some` with a `java.lang.Double` inside, so we gained one allocation anyway. It is not possible to remove that box without compiler support, and even then not in all cases (return values for examples) because `Double` contains a finite amount of values 2^64, and `Option[None]` has 2^64 + 1 values.

And in that implementation, `None.toString == "None"`, `Some(None).toString == "Some(None)", etc. Although that could be changed.

<comment><USER11> Seems like one could use the wasted digit of signed numbers to stor options rather than have asymmetric range (two's complement) or positive/negative zero... IE have a [ed:bit string] that indicates none/some?

</comment></comment></comment></comment></comment><comment><USER12> Shameless little self promotion

"Comparing Optionals and Null in Swift, Scala, Ceylon and Kotlin"

[http://codemonkeyism.com/comparing-optionals-and-null-in- swi...](http://codemonkeyism.com/comparing-optionals-and-null-in-swift-scala- ceylon-and-kotlin/)

Personally I like Monads better than the Kotlin solution. Best is probably the way Swift does it.

<comment><USER13> My issue with Monads (and why I like kotlin and swift nullable types) is that it allows the compiler to infer nullability like the following code:

fun f(a1: Int?, a2: Int?): Int {

      if (a1 == null || a2 == null) {

         return 0

       }

       //now you can do something like

       return a1+a2

}

In contrast, if it didn't, the code would look like:

fn func1(q: Option<i32>, z: Option<i32>) -> i32 {

        if let Some(q_in) = q {

            if let Some(z_in) = z {

                return q_in + z_in

            }

        }

        return 0

}

Note the deeply nested parenthesis.

<comment><USER14> In languages like Haskell and Scala that supports `do` / `for` comprehension sugar, this could be done without the nesting:

      fn :: Maybe Int -> Maybe Int -> Int
      fn q z = fromMaybe 0 $
        do
          q_in <- q
          z_in <- z
          return (q_in + z_in)

<comment><USER15> Or just:

        fn (Just q) (Just z) = q + z
        fn _ _ = 0

<comment><USER16> Surely since you have monads you can just use the tools they give you?

        fn = liftM2 (+)

<comment><USER15> That doesn't do quite the same thing; the original example gets rid of the Maybe, defaulting to 0.

<comment><USER16> > That doesn't do quite the same thing

You're missing the point entirely.

> the original example gets rid of the Maybe, defaulting to 0.

[http://hackage.haskell.org/package/base-18.104.22.168/docs/Data-M...](http://hackage.haskell.org/package/base-22.214.171.124/docs/Data- Maybe.html#v:fromMaybe)

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> At least for android kotlin programming, with the release of api level 27 + support libraries, it's a lot better. They have placed the annotations all over the place. Using nullable annotations have good use cases in java too.

I would think optional types and everything else being non nullable is the way forward for java too

</comment><comment><USER18> Well, the null issues in Java libraries have always been there, I don't really think it's a fault of Kotlin and its tooling that those bugs are not caught at all by the compiler, as all object types in Java are Kotlin optionals if not annotated.

Maybe in time most of the necessary open source projects will be pure Kotlin ones, but for now I believe annotating Java code with null constraints is certainly a boon for everyone and should be encouraged.

<comment><USER19> I agree that the tooling is getting better. Some of the popular libraries are still figuring out the right patterns to apply to make them more "Kotlin friendly". Tools like the Checker Framework [1], JSR 308 [2], and compiler plugins like Traute [3] can also help with the safety issues on the Java side. Kotlin is beginning to understand these more, and some of the basic annotations are supported, but the tooling is only going to improve with all of the backing that Kotlin currently has.

[1]: [https://checkerframework.org/](https://checkerframework.org/)

[2]: [https://jcp.org/en/jsr/detail?id=308](https://jcp.org/en/jsr/detail?id=308)

[3]: [https://github.com/denis-zhdanov/traute](https://github.com/denis- zhdanov/traute)

</comment></comment><comment><USER20> _> Turns out Swift does not have null pointers. At all!_

 _Mostly_ true under the hood; optional value types are tagged unions (I didn't know this before reading this article and checking for myself), but optional reference types are still, as you'd expect, nullable pointers.[1]

[1] [https://godbolt.org/g/QZk6wL](https://godbolt.org/g/QZk6wL)

</comment><comment><USER21> The java compiler might not know if a variable is safe to pass as null, but it is not unknowable. I think on every thread similar to this that I am on, I have plugged Coverity as a tool that can and will flag spots like this. That is, it won't just say "it is possible this will be a null pointer exception," instead it will say "setting this value to null will lead to this dereference of a null." It can look magical sometimes, because they will trace pretty deeply into your code.

Which is just my way of saying over and over again that tooling can improve that does not require a complete rewrite of your software.

<comment><USER22> It sounds like you're claiming that Coverity has a solution to the Halting Problem? That would indeed be magical.

<comment><USER21> Uh, no? Null pointers are far from the halting problem, though.

And to be clear, there are still limitations. It can't say if any value you pass into a function that is not part of the current compilation is safe. For somewhat obvious reasons.

But for a large large class of bugs, using advanced tooling can go a long way. As evidenced by the power of the advanced tooling new languages bring into the compilers. :)

<comment><USER22> The claim seems to be that the tool will always tell you absolutely whether a null-dereference will happen, and never say "maybe." The Halting Problem is trivially reducible to this (just put an intentional null-deref in front of each halt).

<comment><USER21> Not necessarily the same point being made. At least, they are subtly different, to my understanding.

It can tell you that, "if this line is reached, and it was called from this path (with evidence on how this could happen), it will dereference a null." It is not saying that "running this program will guarantee give you a null dereference."

The halting problem is more in line with "this program will terminate on any possible inputs", which is more expansive. It is trivial to say that you can prove some programs won't terminate on a particular input. Question is if you can do it for all inputs, no?

<comment><USER15> Rice's theorem is a bit more direct here: C is Turing complete, some C programs derefernce null pointers, and some don't. Therefore, the question of whether a an arbitrary C program derefernces a null pointer is in general undecidable.

But I don't think the Op was claiming it was possible to do this perfectly, just possible to write very useful tools. You will always have either flase positives or false negatives (or I suppose inputs where you just hang).

Turing completeness is the bane of static analysis, but that doesn't make it a fruitless endeavor.

<comment><USER23> I wouldn't say that Rice's thm is the bane of static analysis. It is what makes the field _interesting_. If the problems were not undecidable then we wouldn't have do so many interesting and challenging things to make working tools.

</comment></comment></comment></comment></comment></comment></comment><comment><USER24> After coding enough Crystal, which instead of optionals have raw and anonymous sum types, I can say this: I don't see the point of a type system where nil is a special case. I don't want optionals, I want to have nil as a totally separate type.

<comment><USER25> Optionals are sum types, too! No special-casing there. It's just that Crystal just has anonymous sum types, I guess, which can be a lot nicer to look at.

<comment><USER26> Optional is a special case of a sum type where one of the types is Null. If you have Null as a type whose only value is null, then an Optional is just a T|Null. No need for Optional to exist.

</comment></comment></comment><comment><USER27> I don't quite get the problem as stated in the article. I assume it's a contrived example and the real (kotlin) code rather looks like:

        val foo: T? = null
        Observable.just(foo).subscribe()

Here foo is defined as nullable, hence the problem. If you make it

        val foo: T = null
        Observable.just(foo).subscribe()

the kotlin compiler will bark on foo being null and you'll never have a runtime error.

I think the motivating example should be described better but maybe I misunderstand it.

<comment><USER16> > I don't quite get the problem as stated in the article.

> Here foo is defined as nullable, hence the problem.

How do you know it's "the problem"? The answer is that you don't until it blows up in your face, because this is a Java interop call.

And of course the local could come from an other call into Java which returns a nullable reference, or it could make complete sense for it to be nullable.

<comment><USER28> Remove part of your sentence, and I think you've answered your own question.

> How do you know it's "the problem"? [...] because this is a Java interop > call.

If you're making platform calls, you know you have to deal with nulls (or at least, you should, in my opinion). So you declare returns nullable and avoid passing nulls unless that's documented to be okay.

Kotlin's Elvis operator makes this really easy:

val a: String? = null val b: String = a ?: "alternative"

</comment></comment></comment><comment><USER29> I wrote a post a few years ago comparing nullable types to maybe/optional. [https://www.lucidchart.com/techblog/2015/08/31/the-worst- mis...](https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of- computer-science/)

A lot of it is a more specific cas of sum types vs union types.

</comment><comment><USER30> It seems like a good article but the grammar makes it difficult to read at times.

</comment><comment><USER31> Aren't null pointers just a variation on the Maybe Monad?

<comment><USER25> Maybe is just another Optional type, but with a much weirder name, so that's pretty obvious. But this makes me wonder - does Haskell optimize `Maybe`-like types down to a null-pointer, like Rust does?

<comment><USER31> Dunno, but I'd have thought that you can make None look like a null pointer, but Some(p) needs to be tagged in some way.

<comment><USER31> Actually, having Some(x) be just a pointer to x seems to work fine without an explicit tag, as dragonwriter says below.

</comment></comment></comment></comment><comment><USER32> .online is a terrible TLD.</comment>


Show HN: A open source Heroku-like PaaS that runs on your server - <AUTHOR> https://www.repobus.com/ <comment><USER2> It's great to see all the good competition in this area. The more use, discussion, and cross pollination among them the better. Here's another one (Akkeris) I've used, open sourced by an excellent former employer and devops team: [https://beta.akkeris.io/](https://beta.akkeris.io/)

</comment><comment><USER3> Isn't Show HN for products that we can actually try out? Looks like this is just collecting emails at this point.

</comment><comment><USER4> See also: CapRover. Beats dokku all to hell, in my experience.

[https://github.com/caprover/caprover](https://github.com/caprover/caprover)

Be careful, their (CapRover) embedded NetData image has the NetData upstream defaults for spyware, so you are advised not to enable it (use of their embedded NetData is optional).

[https://github.com/caprover/caprover/issues/553](https://github.com/caprover/caprover/issues/553)

It is straightforward to set up CapRover with an ssh deploy key and a webhook for deploying automatically on any repo change (even from a self-hosted Gitea, which CapRover also makes easy).

<comment><USER5> The github issue you linked to and the discussion it contains is the reason I am sticking with dokku. The CapRover maintainer seems to argue in bad faith and not have the users best interest at heart.

<comment><USER6> Agree. It does not inspire confidence to recommend a product and quickly follow it up with worries about spyware.

And dokku works well for my use cases.

<comment><USER7> Author here. Just to be clear, this is false information. It's a toxic thread.

1) The author of that thread is calling a software with analytics a spyware. By that definition, any website you use, including this very website you left a comment on, is spyware.

2) NetData is built-in, but it's not enabled by default. Use is free to install/ or not to install the package.

<comment><USER4> Silent surveillance, which is not disclosed to the user. Additionally, the user's IP (and thus location) is also provided to Google with the surveillance data.

Webpages and local software are not the same thing. Local software does not need to report my activity to Google, a third party, to work. Webpages do require second party communication to function.

Surely you realize the difference. Your attempt to conflate the two is not productive.

<comment><USER7> If you believe they're the same thing, let's call it "analytics" then, exactly what it is. Let's avoid using the terms like spyware or etc which is an umbrella term which covers very serious damages such as stealing your bank info.

<comment><USER4> Transmitting a user's activity silently and without their consent is called spying, not analytics.

The way that such surveillance is legitimized into not-spyware is via obtaining AFFIRMATIVE consent from the user.

Without that, it's spying, and software that does so is spyware. It's quite simple.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> People at Convox[1] and Remind101 are doing similar open-source work.

Convox's business model is selling you the managed version of their open source rack. We've been using Convox in production for over 3 years now and we've had pretty good success with it. It's not perfect but the UX improvement for developers when building docker images, promoting new builds or rolling back cannot be understated.

Remind101 has built Empire[2] which is not a product they actually sell but rather the tool they use internally and have decided to open-source it. Empire is a little less managed and while it allows you to run services on it it requires you to have your own solution for building and hosting docker images.

[1] [https://convox.com/](https://convox.com/), [https://github.com/convox/rack](https://github.com/convox/rack)

[2] [https://github.com/remind101/empire](https://github.com/remind101/empire)

<comment><AUTHOR> I might be wrong, but isn't Convox only operational in the AWS cloud. If I want to run Convox on Azure, GCP or bluemix, will this be possible?

The empire alternative pointed out also appears to be another option only operational in the AWS cloud.

<comment><USER8> Correct, both the Convox ECS rack and Empire are AWS exclusive. Convox has a public-beta of their rack running on Kubernetes which is cloud agnostic as it only needs a Kubernetes cluster to operate in.

<comment><AUTHOR> Does Convox provision and manage the underlying Kubernetes cluster or depends on the Cloud provider's managed Kubernetes offering?

<comment><USER8> Convox does not manage the underlying Kubernetes cluster. If you're using EKS it's managed by AWS, GKE by GCP, AKS by Azure, etc. If you're using a self- hosted cluster, then it's up to you to manage it. The Convox platform runs as Kubernetes CRDS so it is cloud agnostic.

</comment></comment></comment></comment></comment><comment><USER9> How is it different than Dokku?

<comment><AUTHOR> Perhaps to answer the question, one might ask: How is Heroku different from Dokku?

<comment><USER10> For one, Heroku has dedicated customer support when you pay them.

<comment><AUTHOR> Right, dedicated support should be available at launch. Thanks for the feedback.

</comment></comment></comment></comment><comment><USER11> How does this differ from CloudFoundry?

</comment><comment><USER12> What part of this is open source? I don't see any Github or other links to said source.

It looks like you're going to eventually build a company around this and maybe you will think about releasing the source then? In which case, the title is still misleading.

I do appreciate that you've released documentation ahead of the product, it does indicate that you understand how important that aspect of the business will be.

</comment><comment><USER6> Looking forward to seeing this mature. I am using dokku to host Webase [1] on a dedicated server and also have used Heroku extensively. It feels like there is room in the market for a tool like this.

[1] [https://www.webase.com](https://www.webase.com)

</comment><comment><USER13> Neat, although apparently not available yet.

In the meantime, if you want something that is simple enough that you can read the entire code base in one sitting, check out Piku:

[https://github.com/piku](https://github.com/piku)</comment>


The Little ASP.NET Core Book - <AUTHOR> https://www.recaffeinate.co/post/introducing-little-aspnetcore-book/ <comment><AUTHOR> Just wanted to say: congrats on the book launch Nate! I haven't read through it yet, but skimming through it seems really great. I'm looking forward to reading it all this weekend.

If any of you are on the fence about reading this: please give it a go! Nate is one of the best people I know (both personally and professionally). He's an incredibly hard worker, really great developer, and awesome human. I'm sure you'll learn a lot from him.

<comment><USER2> Thanks man!

</comment></comment><comment><USER3> Thanks for the book! I really like your style and I think this is another great resource I'll get a lot out of.

One of my concerns about .NET core is it seems that there are a handful of ways to do things compared to Java. But I'm starting to like the fact that there are fewer options that work really well. Plus there are things like LINQ that I haven't seen used much elsewhere that blow my mind.

<comment><USER2> LINQ and the async/await pattern are my two all-time favorite things about C#.

<comment><USER4> Isn't LINQ quite slow?

</comment></comment></comment><comment><USER5> Enjoying the book, I'm new to to asp and razor although I have done a little .net wep api before.

I have an issue with the first view, when running I get the error below on all references in the cshtml. I'm using a stock install of VS 2017. Any ideas?

/Views/Todo/Index.cshtml(4,5): error CS0103: The name 'ViewData' does not exist in the current context /Views/Todo/Index.cshtml(8,33): error CS0103: The name 'ViewData' does not exist in the current context /Views/Todo/Index.cshtml(8,27): error CS0103: The name 'Write' does not exist in the current context /Views/Todo/Index.cshtml(19,31): error CS0103: The name 'Model' does not exist in the current context /Views/Todo/Index.cshtml(23,1): error CS0103: The name 'WriteAttributeValue' does not exist in the current context /Views/Todo/Index.cshtml(25,16): error CS0103: The name 'Write' does not exist in the current context /Views/Todo/Index.cshtml(26,16): error CS0103: The name 'Write' does not exist in the current context

<comment><USER6> Did you also install the .Net Core 2.0 SDK?

<comment><USER5> Not yet, and I was thinking that this might be the issue - would you expect this to be required?

dotnet --version shows 1.1.0, I think I assumed that the latest VS2017 would have the latest dotnet core but this doesn't seem to be the case.

<comment><USER6> This is a common misconception, VS2017 doesn't ship with the .Net Core SDK, you need to manually install it seperatly. This is also described in the Book: [https://nbarbettini.gitbooks.io/little-asp-net-core- book/con...](https://nbarbettini.gitbooks.io/little-asp-net-core- book/content/chapters/your-first-application/get-the-sdk.html)

<comment><USER5> Thanks for pointing this out, this did indeed fix the problem. Somewhere in the installation I had ended up with 1.1 but it works fine now.

</comment></comment></comment></comment></comment><comment><USER7> The "little" part is appreciated, as I recall all too vividly learning ASP.NET by slogging through "Beginning ASP.NET" by Imar Spaanjaars. It's a good book, don't get me wrong, but its two biggest strengths (thoroughness and being good for beginners) result in its being 800 pages long!

<comment><USER2> I have fond memories of learning VB3 from Teach Yourself Visual Basic in 21 Days, which had to be 500+ pages. It turns out it's tough to have a good introduction to a topic without going really long.

</comment></comment><comment><USER8> C++ has John Carmack, PHP has Zuckerberg, Lisp has Paul Graham. Does anyone know of any good role models to look up to in the ASP.NET world? As childish as it might sound, that has honestly been a sticking point preventing me to be able to really get into all this.

<comment><USER9> Anders Hejlsberg for C# I guess? ASP.NET as a framework doesn't have any 'celebrity personalities' that I am aware of, but then it doesn't really need any. Its a good framework, especially with the dotnet core rewrite; you should try it! Put it on Docker and run it on Linux for fun :)

<comment><USER10> Has Hejlsberg ever written a book? He must have a lot of valuable insight to share. I think part of the success of C++ and C was that their developers are good writers. K&R is phenomenal and Stoustroup's book are excellent too.

<comment><USER9> Not sure, aside from his books on the C# language. But the great thing about Hejlsberg and his team is that the evolution of the language is really transparent, and rapid: proposals for C# 8 (possibly 2019/2020): [https://github.com/dotnet/csharplang/milestone/8](https://github.com/dotnet/csharplang/milestone/8)

</comment></comment></comment></comment><comment><USER11> I have been following along and so far filed a couple of minor issues on github. This is a very very good book and does well to explain the various mechanics. Thanks!

<comment><USER2> Thanks for filing the issues. And thanks for reading!

</comment></comment><comment><USER12> great starter book! Any plans of expanding it to a more advanced level? I would like to see elaboration on the async/await patterns and more on http verb support techniques and routing. I like your holistic but bare bones approach and I would pay for an advanced version of this book, especially if it included short exercises with answers after each chapter.

<comment><USER2> Thanks for the feedback! I don't have anything in the works right now, but will definitely consider it.

</comment></comment><comment><USER13> Are new to programming Already code in a backend stack like Node, Python, Ruby, Go, or Java Are an ASP.NET MVC developer

Consider me sold!. Have been watching .NET Core from the sidelines while I have been "teaching myself" Python. But being constantly on a Windoze systems there is so much more that one could with .net core. Thanks for putting this together.

<comment><USER2> I think it's a great time to jump into .NET Core if you've been on the sidelines. There was a lot of version pain early on, but it's way better now. Being able to write C# code on my Windows box that runs natively on my MacBook Pro feels awesome.

</comment></comment><comment><USER14> This looks great. I've been learning ASP.NET Core with scattered resources around the web, and your book seems to explain everything in a simple way. Adding to my list of resources...

</comment><comment><USER15> I would like to see a version for REST and SPAs as well

<comment><USER16> Agreed! It's great that the book is published under an open license - my first thought was that it'd be fun to port this to f# - and my second thought was to restructure it a bit, focusing on REST/SPA.

Having read through it, it is indeed nice and concise - but I'm of two minds of the content - is it really good to introduce server side rendering with jquery and ajax - _today_?

I think, that showing server side rendering is good, for a beginner (how do I go from a form, to db, and back to a simple html table?) - but I'm not sure how useful the "half-way to smart client"-approach of jquery is. I'm almost convinced throwing out most of the server side rendering in favour of returning json and rendering everything client side would be better, than the "in between" approach.

Now you have rendering and interaction spread over server side views and client side javascript - and I'm not sure I like the path it sets up for new developers.

But for someone that "grew up" with the html to html+ajax it made the book very accessible, and manages to show off a remarkably broad and (apparently) useful section of asp.net core to someone not well versed in asp.net core.

<comment><USER2> Very good points, thanks. I struggled with this myself as I was trying to plan out the structure of the book. I ultimately went with the "path of least resistance" (ASP.NET Core MVC ships with Bootstrap, jQuery, etc) but I agree that it could be better in future versions. :)

</comment></comment></comment><comment><USER17> Great intro to ASP.NET Core, it will help me cover the gaps in knowledge. Congrats on your work!

</comment><comment><USER18> Thanks for making and sharing this!

<comment><USER2> Thanks for reading it!</comment></comment>


AMD unveils Radeon RX Vega GPUs for high-end gaming PCs - <AUTHOR> http://www.anandtech.com/show/11680/radeon-rx-vega-unveiled-amd-announecs-499-rx-vega-64-399-rx-vega-56-launching-in-august <comment><USER2> Related HN threads:

\- AMD unveils its Vega 10 GPU architecture (tomshardware.com) [https://news.ycombinator.com/item?id=14892149](https://news.ycombinator.com/item?id=14892149)

</comment><comment><USER3> I really hope that AMD gets better deep learning support so it will push NVIDIA's pricing structure down. Also, AMD's processor lineup looks very appealing compared to Intel (which has had more pressure on their solutions also.

<comment><USER4> > better deep learning support

They released the cuDNN equivalent for AMD devices a few weeks ago: [http://gpuopen.com/developer-quick-start- miopen-1-0/](http://gpuopen.com/developer-quick-start-miopen-1-0/)

So AMD devices should now be capable of accelerating tensorflow, caffe, etc. (insert your favorite GPU deep learning framework here)

</comment></comment><comment><USER5> The price is attractive, but having followed vega for the last year, it is way behind schedule (they had promised deliveries as early as December 2016) and way under performance targets.

To put this claim into perspective, Nvidia has had a card of comparable speed on the market for 14 months, which consumes 40% less power than RX Vega (GTX 1080).

The price is definitely attractive, but we're comparing it to year-old units from nvidia. Throw into the mix the fact that NO graphics card is selling for MSRP and hasn't for the last 6 months, you can expect supply and price to be far from this mark.

I just can't see this being a compelling business model - release late, under performing and cut margins to make up for it.

I love team red, and I have owned AMD cards for the last 7 years (one of which mined 50+ bitcoins on it's own) but this latest showing is quite late and quite lackluster. I can see nvidia releasing volta in the coming month or two, giving them a strong lead in performance and efficiency, and slashing their pascal card prices to vega level.

AMD is keeping nvidia on their toes, and for nothing other than that, we should support them. It would be nice to be doing that AND having the fastest hardware.

<comment><USER6> >and way under performance targets.

Well... It's AMD. Did you really believe what they promised? How many times have they lied and played the hype game just to deliver garbage?

>AMD is keeping nvidia on their toes, and for nothing other than that, we should support them.

It's cheaper. Yep. But worse. Worse than Intel, worse than nVidia. And what's even worse is that, for example in GPUs, you can see they sell not-so-bad hardware coupled with horrible, abhorrent drivers. It's really pathetic. AMD never again, at least for me.

<comment><USER7> Horribly unguided comment. The Zen architecture outperforms Intel at smiliar or lower TDPs. Their drivers have aren't top notch but after a month or two the drivers are stable and performance is better than ever.

Additionally if you think RX Vega is "garbage" you're a bit of a clown. Only because it doesn't outperform the fastest GPU in the world does not mean it's garbage.

<comment><USER5> I'll add that the drivers (on all platforms) have really turned around in the last few years - for the better. Crossfire support is still terrible compared to SLI, but that is a small demographic.

</comment></comment></comment></comment><comment><USER8> Following this along with curiosity. It seam like a much better compute card at attractive prices and an okay (not great) gaming card.

A lot of the silicone was dedicated to features that just do not matter to gaming. For example, HBM cache (I'm not aware of any games that blow through 8GB of VRAM) or FP16.

That's because the part is more (then less) identical to their professional compute offerings.

</comment><comment><USER9> I'm very excited to see how these will perform in folding@home and similar projects, where Nvidia historically has been very dominant.

</comment><comment><USER10> So, what's the actual TDP in these cards? Last reports were conflicting about it.

<comment><USER5> Two TDPs, depending on if it's air cooled or liquid cooled. Seems to be 300/375 respectively.

<comment><USER10> I saw much lower numbers - 165 W (for RX Vega 56) and 220 W (RX Vega 64). That's why I said it's confusing.</comment></comment></comment>


What's the story with the Makerbot patent? - <AUTHOR> http://boingboing.net/2014/05/30/whats-the-story-with-the-mak.html

<comment><USER2> I wanted to address one thing:

> Venture-backed companies are generally forced to file patents -- often very > silly and overbroad ones -- by their investors, who are alive to the > possibility of flogging them off to a troll in the (likely) event that the > company fails.

If you're dealing with an R&D focused company, as opposed to a product company, it is essential for investors to require the company to take out patents. Without a patent, an R&D focused company is an empty shell with no assets. All the technology is in a bunch of engineers' brains, all of whom can walk out the door at any moment. If the company isn't successful, without a patent investors are left with no assets of value, even if they produced technology that is itself valuable. Competitors can come along and hire away the engineers or just pick through the publications to glean the benefit of the R&D that the investors may have poured tens of millions of dollars into. And this is also where NPE's show their value: if investors can count on being able to sell the technology to an NPE who might then try and license it out, they are more likely to be willing to invest in the first place.

For a company like Makerbot, patents are going to be essential. Their brand isn't worth anything. They don't have an audience of users that might be disinclined to use a competitor for loss of the network effect. They've got technology, which by virtue of their generally open nature, is easy for a competitor to copy without the R&D effort they had to put into developing the technology in the first place. And as far as I can tell, they're not running a non-profit and have been the subject of tens of millions of dollars in investment.

<comment><USER3> To me personally there is big difference between spending millions in R&D to develop something novel that would have never happened and spending millions in R&D just to make sure you get there first. I rather have something 6 months later free and clear than having to wait 20 years for a patent to run out.

It's a difference between creating something no one would have otherwise, and simply winning a race to claim property rights on something.

<comment><USER4> But it's often not clear what the outcome of research will be -- unexpected results can start off as being simply the next iteration of an existing technology.

</comment></comment></comment><comment><USER5> Personally, I don't think the community reaction has been overblown at all. If nothing else, they have acted in profoundly bad faith by soliciting free work from the open hardware community in exchange for the promise of an open hardware business model.

They can't just say "you guys should design a bunch of stuff for us for free, but any minor improvement we make is proprietary and WE'LL SUE YOU INTO THE GROUND IF YOU TRY TO USE IT IN YOUR DESIGN!".

Patents and closed source software are the enemies of the Open Source Hardware/Software movements. They lied about their intentions, and people feel betrayed. If they had been up front about their business model, I suspect they would have not received as much support from the community as they did - support which was instrumental to reaching the status that they have.

<comment><USER6> So in software land, we have licenses which include patent protection clauses. It's not particularly difficult for me to release my work under a license that would prevent anyone distributing it from engaging in patent litigation. Why haven't hardware hackers embraced similar practices?

<comment><USER7> > So in software land, we have licenses which include patent protection > clauses. Why haven't hardware hackers embraced similar practices?

Copyright is one of the three main types of intellectual property in the world-wide WIPO system. The other two are patents (hardware) and trademarks. Guess which one gets to trump copyright licensing and exist beyond copyright law?

This isn't an explicit answer, but related to your question: [http://www.publicknowledge.org/news-blog/blogs/open- source-h...](http://www.publicknowledge.org/news-blog/blogs/open-source- hardware-and-law)

My guess is that a lawyer (which I'm not) would tell you that the patent protection clauses you refer to only apply to the copyrightable material, and not the inventions themselves (even in software).

</comment></comment></comment><comment><USER8> I think the disconnect here is that its not unreasonable, illegal, or even particularly surprising that a company like Makerbot might seek these patents, especially in light of their acquisition.

Our (the makers) problem is that it was _rude_. The community supported them in large part _because_ of their declared support of openness. What they're doing isn't like running a red light because they're in a hurry, its more like farting on an elevator. The backlash is justified.

</comment><comment><USER9> Why is this post separate from the Boing Boing blog with no ability to comment?

<comment><USER10> A recent upgrade to the Discourse forum/comment system made the wordpress bridge fall over. It's now gotten back up and comment links are working again.

</comment></comment><comment><USER11> The inventions their parent company filed patents for were also very different from the community-invented features that they're suing their competitors over. This is not terribly reassuring under the circumstances.

</comment><comment><USER12> Needs a tl;dr. Clearly my attention span is shot on a Friday night. :(

<comment><USER13> "People are freaking out too much; they aren't patenting _everything_."</comment></comment>


Foreign Languages Fade in Class — Except Chinese - <AUTHOR> http://www.nytimes.com/2010/01/21/education/21chinese.html

<comment><USER3> I spent several years of my life learning Mandarin and, although I am about ready to enter a Masters program so that I will become proficient in both Japanese and Classical Chinese, I strongly doubt the utility of any and all of the above for most professionals. While there is certainly a large degree of discipline and effort necessary to be fluent in these languages (I am technically fluent in both Mandarin and German, although technical fluency seems a low bar to meet) this means little all things considered.

Why? Ask yourself what you will do with the language once you have learned it. Unless you have a strong interest in classical literature or contemporary politics, both of which would essentially making the transition to an academic career, it is hard to justify the time invested in learning such a language, esp. when the best and brightest speakers of that language also speak yours and have more hours (cumulative over more than a decade) to become proficient in yours than you do for theirs.

Now, you might say, what if I go to China and attempt to make something of myself among the economic maelstrom?

Well, what exactly will you do? Have you thought that far ahead? I was there, in several cities, with part-time work as a translator among other things. My experience and the experience of close associates is that, despite frantic generation of infrastructure and cheap consumer products for sale in the United States, there simply isn't a lot going on that would qualify as "interesting," and "interesting" and "challenging" work is what I personally thrive on. Also, since you cannot be a Chinese factory worker, you will be limited to making dubious investments with generally disreputable business partners (see the China Law Blog, an excellent resource on this topic and the enforced opacity of the Chinese Legal system), or serving as a middleman for cheap consumer products. You could also try to promote human rights or green tech but, frankly, why do you need to go overseas to do that? There are lots of opportunities in the US to promote environmental consciousness or reduce sex slavery.

Moreover, from what folks who invest at a much higher level than I have access to, corruption is rampant and infects virtually every aspect of public life and the necessary shift to transparency which should accompany liberalization (e.g. open media) has not happened, meaning that corruption often increases instead of being exposed (reporters are routinely dismissed who do not tow the party line).

So learn Mandarin, sure, if you are really interested in it. I spent approximately four years of my life on it, worked as a translator, co-founded for a non-profit dedicated to China-related issues, worked in a think tank on economic policy and China. I learned a lot about how the world works and, ultimately, how poorly it all works.

Of course, it might also be an eye-opening experience as to what is happening in the United States. Another commentator on this thread remarked how trade will optimally decrease wars. Yes, it is possible to subject virtually everything to an economic motive and many policy makers in the United States seem to see complete integration of Chinese and American systems as an ideal. Decide for yourself what that means.

<comment><USER4> Not a total waste. At least you will get better service at the local Chinese restaurant....

But seriously, from the tech angle, China is becoming a dominant force in the global technology supply chain, whether it be services or products. Trying to depend on English only as the sole form of communication is not efficient in long term. It will indeed become much more useful in commerce. At the very least some immersion in the language will allow you to understand a little bit about the culture and country, which is actually much more important....

<comment><USER3> Please explain why dependency on a single language that everyone knows as the sole form of communication is less efficient than multiple languages.

Please also explain which global tech sectors China is becoming a dominant force in.

As for immersion and understanding the culture, I completely agree.

</comment></comment></comment><comment><USER5> I am very discouraged by how dismissive most of the comments are in regards to learning another language regardless of what it is. I thought this was a group of HACKERS. Understanding another language, especially one as challenging as Mandarin is beneficial education to learning the capabilities, strengths and structures of communication.

To me, the "English is enough", is totally akin to fanboy mentalities surrounding technology. I supposed you've only bothered to learn C or Java and are completely indifferent to even bothering with any other language. Obviously, this is an extremely limited view.

Additionally, exposure to another language provides exposure to other cultures. In this day and age of internationalization, exposure to a variety of cultures beyond what's within walking distance is extremely important.

I know a lot of HNers are dismissive of formal education in general, and maybe knowing Chinese isn't directly applicable to most, but come on. We need to teach our kids early on that it's OK to learn for the sake of learning

<comment><USER6> Agreed. Even worse are the comments talking about how difficult Mandarin/Chinese is to learn compared to English, so let's just stick to Spanish and French. Well, I wonder just how many people learned English or a similar language as their first language. Some people fluent in some languages are going to find another that is completely different to be difficult. Welcome to reality. (Although if my high school foreign language classes were any indication, similarity of languages was something most people had a very hard time grasping...only a few could see that Spanish/French/Portuguese had some things in common and took advantage of that to learn languages faster. We had a mandatory Spanish 1/French 1 freshman year curriculum, and some people just struggled the whole year long and chose the language they struggled with less for the next year.)

> In this day and age of internationalization, exposure to a variety of > cultures beyond what's within walking distance is extremely important.

My first languages were English and Korean, and I had no difficulty whatsoever in a couple semesters' worth of Mandarin classes, and I'd like to think I can hold some kind of basic conversation in Mandarin and understand basic written Chinese text. The downside of trying to use my knowledge though, is realizing just how little i18n/L10n support there is in applications out there (for starters...TextMate completely fails because it assumes fixed-width - <USER2> [http://img.skitch.com/20100724-kcjdt411djee6u59p4pc9x5qe6.jp...](http://img.skitch.com/20100724-kcjdt411djee6u59p4pc9x5qe6.jpg)). If for that reason only, hackers should care :)

For what it is worth, I've taken a bunch of language courses just for the hell of it. Languages intrigue me, even if I never end up speaking it ever again (ask me how often I speak Spanish in Los Angeles....never...). I never did it for any economic advantage, I'm probably never going to spend more than a week of my life in China as a tourist, but it's interesting. I can walk around in Chinatown and understand what signs say, I know how to address people correctly, et cetera. That's all.

</comment></comment><comment><USER7> The problem with this (at least in theory) is that unless US schools devote as much time to learning mandarin, or spanish for that matter, as chinese and taiwanese schools spend teaching english the effort is useless. I have studied mandarin for several years and traveling to anywhere outside of rural china makes my efforts seem largely pointless. There is always a chinese person who speaks far better english than I do mandarin. Essentially unless these schools plan on starting kids in mandarin from kindergarten an going through high school and using it for at least 3 hours every school day, these kids are never going to catch up to chinese children's second language proficiency.

<comment><USER3> Moreover, the Chinese do not want to speak Chinese with you but would prefer English.

That said, this is only true in certain circumstances and among the younger generation. Among bureaucrats, for example, you will be hard pressed to find good English spakers.

</comment></comment><comment><USER8> Mandarin is spoken by roughly 1 billion people. Most Americans only speak English. Learning a second language, especially one spoken by that many people can only be a good thing. That said, while I certainly feel that any efforts to get Americans to learn languages in addition to English are a good thing, I can't help but being suspicious of the agent and financial backer of the program that facilitates these teachers: the Chinese government.

Put it this way, can you imagine the Chinese government being receptive if the US State Department offered to send over several hundred English-language teachers and pay part of their salaries?

<comment><USER9> I think, however, that the Chinese government itself pays for americans to teach english in China.

<comment><USER10> Not just Americans, anyone from a country whose mother tongue is English. And not just this, English or at least passign the English exams is a requirement for EVERY UIVERSITY DEGREE. I teach Tradtitional Chinese Medicine undergrads and postgrads, and they all need to pass the English tests to get their degree.

Although the vast VAST majority can only speak a few words, something of a failure when you think that they study English in School for hours each day from middle school, all the way through Universty and only 1%(probably less) have any level of fluency.

In my University of 20,000 students there are about 4-5 students whose English is good enough for me to have a conversation. Including the teachers, there is only one person in the Entire college who I would say has excellent English.

So in short, take this with a pinch of salt, China does quantity, not quality.

</comment></comment></comment><comment><USER11> We should learn X language for X reasons!

Seriously though, it's like saying that you should get a liberal art education. Most people will just goes around carrying quadratical equations, biology trivia, bad impression of Shakespeare and biased historical views and other sort of random information. Now we will remember random Chinese characters and Chinese phrases too. They are certainly _useless_ to the average Joe because they're just a bunch of disconnected facts.

There's no emphasis on teaching people to be rational thinkers who can make use of said random information or learn to cope with imperfect information. It's _hard_ to teach anyway. Can you imagine finding 6 million teachers who know these kind of stuff? Never mind launching a serious Chinese language program so that we don't get people who only know random amount of stuff about the Chinese language.

</comment><comment><USER12> How many of these kids will actually achieve any sort of fluency in Mandarin? When I was in school, everybody took easy languages like French and Spanish, and almost none of them ended up with any sort of fluency. How are they going to handle a hard language like Mandarin?

I'm not against learning a second language (I took 4 semesters of non-required elective language classes and then learned over 2000 kanji on my own), but if you go into it half-assed it's a waste of time.

</comment><comment><USER13> I lived in Japan for two months. I've been to China for a week. I'm fluent in Japanese and I've taken a Mandarin class.

There is no doubt in my mind that English is the superior language and we'd all be better off if the Chinese would learn English rather than the other way around.*

* We'd probably be better off still if we all learned Esperanto, oh well.

</comment><comment><AUTHOR> I know it's an oldish article (from Jan 2010), but I still think it's both a little frightening (another sign of China's economic rise) and heartening (we're able to adopt).

One point of interest, the Chinese government now pays to send teachers to the US to teach Chinese in US schools.

<comment><USER14> Is not China's economic rise a comforting thing, rather than frightening?

<comment><USER15> Considering the fact that they are a political enemy, of course it's a frightening thing.

<comment><USER14> My local council has political enemies on it but we don't frisk them for weaponry when they come in. Given that China is benefiting more and more from trade, do you think it's more or less likely that they will attempt to destroy their trading partners? do you think that they dislike having better, more comfortable lives, and will want to throw it all away?

</comment></comment></comment></comment><comment><USER16> Despite any teaching efforts I don't believe they will be _learning_ it soon, especially the written form. It takes years longer to learn any Chinese dialect than to learn English.

<comment><USER15> _It takes years longer to learn any Chinese dialect than to learn English._

Do you have any proof of this? It's not like Chinese is inherently more difficult than English. You are underestimating the difficulty of learning English as a second language for a native Chinese speaker.

<comment><USER17> I believe it is inherently more difficult - <http://www.pinyin.info/readings/texts/moser.html>

<comment><USER15> I have read Moser's essays before and agree that passable written Chinese (have to be able to write the characters correctly) is harder to learn than passable written English (just get the spelling close enough and the reader will probably figure it out).

However, giardini said "It takes years longer to learn any _Chinese dialect_ than to learn English", and I'm also referring to the spoken language. In many ways, spoken Chinese is easier to learn, especially at more advanced levels, than spoken English. One reason is that most of its word roots are native. For example, the word for computer literally means "electric brain". In English, OTOH, most advanced/scientific terms are derived from Latin/Greek roots, which makes them much more difficult to remember.

<comment><USER18> In that particular example the English word "computer" simply adds a suffix to the already-in-native-use Latin verb "to compute" which is a standard English way of converting to a noun meaning "a thing that computes". The main problem here is that compute is a relatively uncommon word (especially outside the context of computers), and English as a language has too many uncommon words.

However there are more important things than vocubulary (which you can learn by rote given sufficient motivation) when applying basic foreign language skills learned in your homeland from a non-native speaker. English-speakers tend to be unusually tolerant of mispronunciations as well as misspellings; likewise with our excessively complex grammar. When you're not having to master things like tone usage, communication on a basic level (surely all that can be expected of most US high-school students) is a lot easier to master.

<comment><USER15> _In that particular example the English word "computer" simply adds a suffix to the already-in-native-use Latin verb "to compute" which is a standard English way of converting to a noun meaning "a thing that computes"._

Which is exactly the problem. We shouldn't be using Latin roots to derive English words - we should use native vocabulary, because then we don't end up with commonly used words based on obscure roots that are rarely used.

 _When you're not having to master things like tone usage, communication on a basic level (surely all that can be expected of most US high-school students) is a lot easier to master._

If you think that the Chinese aren't tolerant of accents, you are sorely mistaken. In fact, a large portion of Chinese TV contains subtitles because of the various accents from different parts of China that can make it difficult for them to understand each other.

Also, do you think that English doesn't convey meaning by tone? One English sentence can have several different meanings based on things such as tone and stress, and is one of the most difficult aspects of English for ESL speakers to master.

And in all honesty, the tones aren't that difficult to master. If you take a Chinese class, you'll spend at least the first month working on them, and once you've got them down, that's that.

<comment><USER18> Many Latin words are arguably as native to the language as those with Germanic or Norse ancestry; compute was present in the language long before the concept of a computer was conceived. Obviously there are purposely archaic examples designed by intellectuals to make their new discoveries more impressive. Borrowed words are a problem for any language, I understand the influence of Western culture and innovations difficult to express using native words is increasingly leading to awkward transliterations in Chinese which mislead both when it comes to semantics and phonetics.

I'm aware of the huge differences between Chinese dialects, but lack of mutual intelligibility when listening to other Chinese is hardly a sign of receptiveness to the incoherent ramblings of foreigners.

English intonation is subtle (which might make it hard to learn). It's also a relatively advanced skill, with it being quite possible to converse in English without intentionally using tone at all. Tone in English might imply something about the context of what is said, such as whether it is intended as a question, but doesn't change the meaning of the word and make the sentence nonsensical.

</comment></comment></comment></comment></comment></comment></comment><comment><USER19> It's a very common thing to hear that eventually Chinese will become the language of commerce. I think this is wrong for a few reasons.

1\. Chinese is relatively hard to learn

2\. English is relatively easy to learn

3\. English is part of the standard curriculum in most of the world's schools and therefore has immense momentum.

4\. Despite America's economic troubles, I believe we're still the leaders in technological innovation. It's my impression that China's economy is fundamentally based on manufacturing and exporting Western products. How many original and innovative products have come out of China in comparison to the US?

I think Chinese is a good language to learn if you're involved with manufacturing and international business, but English will remain the language of technology.

<comment><USER20> _1\. Chinese is relatively hard to learn 2\. English is relatively easy to learn_

I think that depends on what your native language is. Certainly I know that Chinese people struggle with English.

</comment></comment><comment><USER21> In the 1980s, we used to get articles about how we'd all better start learning Japanese. Now it's the Chinese.

I'll believe it when I see it actually happen.

</comment><comment><USER22> si

</comment><comment><USER23> wo zhi dao zhong wen</comment>


Ask HN: Why can't I comment on HN ads? - <AUTHOR>

I just saw a post about a job at Meteor on the front page of HN (Meteor hiring Engineers at Large (meteor.com)), but there is no way to comment on HN about it. I think it would be a great opportunity to ask questions about the job and have those answers shared with others. <comment><USER2> It used to be possible to comment on YC job ads, but people used that capability to unmask stealth-mode companies, posting competing non-YC job offers, or start unproductive flame wars.

The ability to post job ads directly to the front page of HN is a YC perk, as is the right to do it without allowing comments on the ads.

</comment><comment><USER3> If the mods are genuinely interested in what's best for the HN community, I think a discussion about the appropriateness of this YC-only advertising model is in order.

<comment><USER4> Okay, shoot. What do you think is appropriate?

For a long time the policy has been that only YC cos can post to /jobs, but once a month we have whoishiring threads which are open to everyone. It doesn't seem an unreasonable balance to me, given that YC funds HN and asks (almost) nothing else of it [1]. I also like that it's completely clear and up front. But I'm interested in opposing views, if you'd like to share them.

[1] Re that "almost": the other YC-specific privilege on HN is that founders' names show up in orange. (PG did that years ago when there were beginning to be too many YC founders for them all to know each other.) Unless I'm forgetting something, that's literally everything.

<comment><USER5> I agree. It takes a lot of effort to run HN, so allowing YC companies to post ads justifies the cost. I'd prefer YC-only ads as I think it would be too spammy for anyone to advertise. This makes it a nicer perk for the YC companies too.

Also, regarding no commenting on job ads, I think this is better for HN. Otherwise, the attention of HN is thrown into threads that are promotional spots.

I think another benefit of HN is that YC keeps its name relevant to a great many potential entrepreneurs.

</comment></comment></comment><comment><USER6> Email them.

<comment><AUTHOR> We could replace HN with a mailing list also, but I'm not sure that would solve anything, would it? HN is about discussion, and the inability to comment makes it spam, rather than a topic.

<comment><USER7> Sorry, but YC owns HN, so their companies' job ads aren't "spam". If they posted their ads to _your_ web site without your permission, then they'd be spam.</comment></comment></comment>


Tool lets Android apps run on computers with Chrome - <AUTHOR> https://gigaom.com/2014/09/21/the-floodgates-open-tool-lets-android-apps-run-on-computers-with-chrome/

<comment><AUTHOR> GitHub: [https://github.com/vladikoff/chromeos- apk/blob/master/archon...](https://github.com/vladikoff/chromeos- apk/blob/master/archon.md)</comment>


Visualizing Javascript (ITP Course) - <AUTHOR> http://stewd.io/javascript/index.html

<comment><USER2> > Auditing is not permitted and the class size will not be augmented to > accommodate those wait-listed.

This is too bad, it would have been nice to drop in on a lecture</comment>


TryClojure - Browser based Clojure REPL - <AUTHOR> http://tryclj.licenser.net/ <comment><USER2> It seems to have a problem with large numbers.

      => (type 10)
      java.lang.Integer
      => (type 10000000000)
      java.lang.Exception: EvalReader not allowed when
      *read-eval* is false.

Edit: a few bugs or limitations:

      => (defn pow [base exp] (apply * (take exp (iterate #'identity base))))
      #'net.licenser.sandbox.box1712/pow
      => (defn long-compute [power] (def p (pow 10 power)) (loop [i 0] (if (> i p) i (recur (inc i)))))
      #'net.licenser.sandbox.box1712/long-compute
      => (long-compute 6)
      1000001
      => (long-compute 7)
      Execution Timed Out!

      => (import java.lang.System)
      java.lang.System
      => (System/getCurrentTimeMillis)
      Disabled for security purposes.

      => 10000000000
      10000000000
      => (type 10000000000)
      java.lang.Exception: EvalReader not allowed when *read-eval* is false.
      => (type (pow 10 10))
      java.lang.Long

<comment><USER3> It would be foolish not put limitations on a live clojure repl.

</comment></comment><comment><USER4> It would be great to see a walk through tutorial in the same style as <http://tryruby.org/> and <http://try.redis-db.com/>

</comment><comment><USER5> This one looks a lot different then the one you posted to IRC earlier but its nice to see support for functions! :)

EDIT: Great work though!

</comment><comment><USER6> this is very good idea, but the design of the page make me want to close the window - it hurt my eyes.</comment>


Ask HN: Name an app for anonymous text-based group therapy - <AUTHOR> Our mission is overcome barriers surrounding mental healthcare by harnessing technology to connect individuals anonymously to networks of peers who can relate.
What We Do: We have built a mobile application for text- and voice-based group therapy. Through our mobile platform, users can tap into a support group with a profile anonymous to other users and receive peer support from others going through similar issues. Patients can receive text-based support 24/7 in tailored group chats of 5-7 peers, with the clinical structure provided through scheduled VoIP conference calls with a therapist.
We discovered early on that anonymity allows users to speak what is on their mind without fear of judgment, but as seen by the behavior of "Trolls" on social media sites such as Reddit and YikYak, anonymity has a malicious side. Since it is not feasible for a moderator to review every user interaction line-by-line in real time, we developed natural language processing algorithms to assist group moderation. This algorithm automatically detects phrases that are indicative of suicidal or malicious intent, immediately triggering human intervention.
Our startup currently needs a name that matches our core focus >Group / Community modality of therapy & support
>24/7 Anonymous (i.ie stigma-free) help to build people up
>Mental health which is a highly emotional topic
Thanks so much, in advance, for your help <comment><USER2> Talkit CircleTime HearMe

</comment><comment><USER3> 4chan

EDIT:

Actually...

hug-chan feel-chan sad-chan

</comment><comment><USER4> S ave

M y

S anity

</comment><comment><USER5> Grouphug

Hug it out

Hard talks

Groupy

Groop

Theragroup

Theragroupy

Joy Again

Group Therapist

</comment><comment><USER6> irc</comment>


Why We're Patriotic - <AUTHOR> http://nautil.us/issue/30/identity/why-were-patriotic <comment><USER2> In the bad old times, patriotism might have been appropriate. Hell, there was a time when "l'état, c'est moi" was appropriate. Since the opponents of civilized progress have grown to be transnational, patriotism is a quaint indulgence from the past, at best.

<comment><USER3> And at worst, it not only promotes but _requires_ othering, categorizing those who are slightly different as somehow _less_.

It's the basis of all sorts of institutional racism and xenophobia and lends these a veneer of social acceptability, and has no place in any community that can see beyond its own valley.</comment></comment>


Show HN: Launched my startup solo after rejected twice.100 business signup in 1M - <AUTHOR> https://conferfly.com <comment><AUTHOR> just don't give up guys, i got 100 business sign up since i launched Conferfly a month ago. it was hard and i almost gave up after i got rejected twice but i am happy i didn't. finished the project by myself with my humble budget. now i am working with some happy customers

*Thanks for all help from HN community

</comment><comment><USER2> the key is not to give up

</comment><comment><USER3> congratulation, it looks really good.</comment>


Ask HN: Suggest me some good books on work ethics - <AUTHOR> I have found that well-written books help me a lot getting back on track and also getting better at some values.
These days I feel in need of some inspirations, anecdotes, and experiences about work ethics and productivity. If it's by someone in the tech domain that would be an added excellence.
Thanks, fellow kind people. <comment><USER2> The Clean Coder: A Code of Conduct for Professional Programmers by Robert C. Martin

</comment><comment><USER3> It's a tough question, and I think depends a lot on what you're looking for.

For the specific case of work ethic in the sense of committing deeply to projects you believe in, then I'd point you towards "The Soul of a New Machine".

But I'm sure others see it completely different.

<comment><AUTHOR> Interesting suggestion; thanks for this. What changes did it bring for you?

</comment></comment><comment><USER4> "Zen and the Art of Motorcycle Maintenance"

It's not about Zen or motorcycle maintenance. However, it _is_ a book that will make you think about the nature of work and how one way of looking at work collides with another.

<comment><AUTHOR> Thanks, I will give it a try again. I tried reading it years ago but didn't find it clicking.

</comment></comment><comment><USER5> FYI it's "work ethic", not "ethics".

<comment><AUTHOR> Thanks.

</comment></comment><comment><USER6> Ray Dalio's Principles I think is an interesting read for that area.</comment>


"2014 has probably been the best year in history" - <AUTHOR> http://www.telegraph.co.uk/history/11310456/Goodbye-to-one-of-the-best-years-in-history.html <comment><USER2> People need to remember that as late as the early 1900s, the foreign policy of world powers was described as "The Great Game". (Look it up, I kid you not). Thousands of soldiers would march forward and die in unknown foreign soil in the name of Imperialism and conquest.

It was under these politics of world conquest that WW1 and WW2 were fought upon. All countries... US included, fell into the trap of imperialism. Expanding during the Spanish American war, gaining the Philippines, Guam and other territories.

The current world has no apatite for imperialism, although I guess this can change quickly. But... knock on wood... lets hope the great powers of the world continue to refuse a direct fight with each other. The worst we have between great powers today are some economic rivalries.

<comment><USER3> > The worst we have between great powers today are some economic rivalries.

After WWII there were only two great powers left. Now there's one. It has nothing to do with appetite. The military budget of the US dwarfs the other countries. It would be suicidal to start a war that the US will seriously want to be involved in. Welcome to Pax Americana.

[http://en.wikipedia.org/wiki/Pax_Americana](http://en.wikipedia.org/wiki/Pax_Americana)

<comment><USER2> Historically though, the great power would have declared imperialism and began conquering the world at this point. (Mongols, Romans, Alexander the Great, Babylonians, Assyrians... etc. etc.)

It is historically very unusual for a great power to care so much about how others think of them. Part of it is Hollywood. The US naively wants to be loved. A major component of the misguided Iraqi War was that we'd be loved by the Iraqis once we toppled Saddam.

Outside of Pax Romana, I don't think any of the other great eras of peace were characterized by this "loved by the lesser barbarians" attitude. Instead, they were characterized by massive armies conquering the world with an iron fist.

This was of course a seriously misguided concept. But believe me, the naivete of the Bush Administration has been recorded, and the US seems to have learned its lesson... for now anyway.

<comment><USER4> How many countries has Obama had bombed at this point? (hint: it's a bunch).

<comment><USER2> How many people did Ghengis Khan literally enslave and then raped by his 6th year in tenure?

[http://en.wikipedia.org/wiki/Mongol_invasion_of_Khwarezmia_a...](http://en.wikipedia.org/wiki/Mongol_invasion_of_Khwarezmia_and_Eastern_Iran)

        As usual, the artisans were sent back to Mongolia, young women and children were given to the Mongol soldiers as slaves, and the rest of the population was massacred.

A lot more than Obama... I'm sure.

I'm talking about historical norms here. In the great eras of single-power world dominance (US, British, Spanish, Romans, Mongolians, Chinese, Babylonian, etc. etc.), the US, the British, and the Romans were the most peaceful, in approximately that order.

US wins vs Brits because we aren't using Gatling guns against spearmen and conquering entire continents (erm... anymore).

If you disagree, name me a great period of single-power dominance and I'll offer a counter-example.

<comment><USER5> It is about reward structure. Ghengis Khan had gold and fortune to pillage from all the nations he conquered. He forced his ideals upon others but his will was absolute and his moral compass never involved giving a shit about those you crush in battle.

The US is still somewhat run by people - a lot of work has gone into dismantling legitimate democracy in America, but fundamentally I doubt even in the gerrymandered guaranteed seat no choice electorate system the US has today, that the people would idly allow the American military to pillage nations around the globe for gold and jewels.

At least, they could not do it as fast as Ghengis did. I do understand a lot of looting happened in Iraq / Afghanistan and in a large part the motivations to go to war there were over possessions of a different kind.

</comment></comment></comment></comment></comment></comment><comment><USER6> It has been about three years since I realized this. It is awesome.

So let's make it the new bottom line. Let's say it is a awful time in history. Internet should be is as ubiquitous as electricity, and electricity should be as ubiquitous as having water near by; but there are places without internet, without electricity and where you need to walk _miles_ to get some water.

I like to think of these time as a new "Dark Ages". We have internet, electricity and infrastructures that would be unthinkable in the actual dark ages, but is far from enough. I like to think about our governments and corporations as the equivalent to those feudal lords and duches and sires. I like to imagine a future that is unthinkable.

Maybe is time to start hoping for a global government, that could be no government at all, but an efficient way to coordinate efforts. Maybe this "global coordination" would be doomed in the event of some global catastrophe that could destroy the necessary infrastructure . It wouldn't matter, if we have it once, we will want it forever. Like with democracy in the greco-roman culture.

This is crazy, far fetched, but so it was the human rights, flying, self moving cars, etc.

We humans are inherently crazy and we like far fetched ideas. We picture an image of the world and then try fit the actual world in it. Some times that takes us to war and genocide, some times to the Moon.

We don't need to know how this global future will be, we won't know.

</comment><comment><USER7> The same article comes out every year, usually from one of these conservative murdochy news sources, and every year hn and reddit eat it up. Every year is the best year from someone's perspective. Hell, I'd say the 1800s were great because land was plentiful, pollution was low, wage slavery was non existent, people controlled their own schedule and became artisans of their trade who passed along their vast experience to apprentices.

Quite frankly, who gives a shit what some article says about this? Was it your best year? That's all that matters. Let's focus on things that ought to be improved, not this lazy, pat-ourselves-on-the-back "we're doing the right thing" circle jerk.

</comment><comment><USER8> This is such a matter of perspective.

We would have a safe and perfect society if we were living in a society described by Brave New World. But I'd argue that it would be worst year of human history.

People make the argument that civil rights were a problem, which is true. But I feel that my personal freedoms are far more restricted and no matter how petty they maybe, I don't want to forfeit them for your brave new world.

</comment><comment><USER9> best, are they blind? There's no mention of ISIS, IRAN nearing a nuclear weapon or Putin being a total nutcase.

<comment><USER10> > This may have felt like the year of Ebola and Isil but in fact, objectively, > 2014 has probably been the best year in history.

They did mention ISIS ("Isil"). There's a seeming trend of these newspapers to fail to capitalize things that should definitely be capitalized (acronyms). I've seen at least a dozen cases of it in the last week. I don't know if perhaps it is a side-effect of automating/technologizing the editor's role or if this is a new style thing or what?

Edit: in this article, it is almost surely intentional:

> The Isil barbarity in the Middle East is so shocking, perhaps, because it > comes against a backdrop of unprecedented world peace.

<comment><USER11> Many British publications only capitalize acronyms if you pronounce each letter separately [http://en.wikipedia.org/wiki/Acronym#Pronunciation- dependent...](http://en.wikipedia.org/wiki/Acronym#Pronunciation- dependent_style_2)

<comment><USER2> Crazy Brits, screwing up our American English...

</comment></comment></comment></comment><comment><USER12> Eesh. I'm surprised that such a self-evidently whiggish article would make it to the front page of HN. I assume that the author lives in a bubble of wealth and privilege.

If "we've never had it so good" then why did my parents and grandparents generations never have to attend a food bank?

<comment><USER13> Can I make the assumption that you're white and from a Western country? Greater average global prosperity does not mean the lives of everybody are better, and more equality often means that those who were traditionally privileged no longer are.

<comment><USER14> Even white people from Western countries had two World Wars, the Spanish Civil War and the rise of multiple dictatorships within the lives of currently living people.

</comment></comment></comment><comment><USER15> Sure, if you ignore the CIA torture, the NSA mass-surveillance, the US drone strikes, the protests in the US and Turkey, the Islamists in the Middle East, the Israel/Palestine conflict, the NATO/Russia stand-off in Ukraine, the lukewarm handling of the Ebola epidemic, the rising "anti-Islamic" neo-racist tendencies in Europe and everything else, 2014 was a pretty good year. But I guess most of these problems aren't entirely particular to this year.

EDIT: The article can be summarized with something my grandmother used to say whenever you asked her how she was: "Good, if you ignore the bad parts".

<comment><USER16> No one says that there are no problems. The world is chock full of problems. But, from a long-term historical perspective, the problems we face today are relatively minor. And more importantly, fewer people live in abject poverty and more people are wealthier and healthier than ever before. IMO, this is a good thing.

<comment><USER15> Sure, I'm not questioning that the 21st century is doing relatively well (we had two world wars and several major attempts at genocide in the last one -- that sets the bar pretty low). Nor that we are, all in all, doing progressively better.

But I'm not sure that, it is meaningful to point out 2014 _in particular_ as the best year in history. If we just go by "we're still making progress and third world nations are still becoming better places to live", _of course_ 2014 is the best year in history so far. As will 2015 be. Or any year after that, world-wide catastrophes notwithstanding. But that's nearly tautological.

So depending on how you look at it, the article's claim is either trivial enough not to warrant ending up on HN IMO (any point along an upward slope is the highest point on that slope compared to those preceding it, by definition), or it's simply inaccurate (by sweeping the real problems 2014 surfaced under the rug and just saying it's all good).

<comment><USER17> I think your point here is a great note on the topic, but sort of misses the very large, loud group of people out there who honestly think the world's improvement has inflected and is now going to hell in a hand basket.

As such, I prefer being reminded about how remarkably not-awful things are versus the next pointlessly negative everything's falling apart rhetoric. Mind, that may have to do with where I live, maybe, and I _prefer_ balanced rhetoric. But it's useful to remind people that the general goodness of the world is monotonically increasing (perhaps with a 10-point moving average and a little spot of outlier filtering).

And yeah, this sort of conversation is almost necessarily a long-now topic. To talk about it over the course of a few months or just a year is a bit silly - there's a _lot_ of noise. But over many decades and especially centuries, things certainly look better now. Things may be crap now in many ways, but it's only knee-deep crap. In the bad old days people waded through crap up to their eyeballs uphill both ways.

<comment><USER15> Fair enough. Yes, it's not getting worse overall. A lot of the stuff I mentioned wouldn't even have been news-worthy a few centuries ago.

But for Europe and the US this was most certainly not the "best year in history", regardless of general positive trends.</comment></comment></comment></comment></comment>


Autosetup – a replacement for autoconf - <AUTHOR> https://msteveb.github.io/autosetup/ <comment><USER2> Well if can't be made to work on Windows then it's not a worthwhile replacement for autoconf because autoconf does every job on all environments except Windows already, why need a replacement?

To do the job on Windows, I use CMake and CMake is my autoconf replacement on Windows. Actually, if I was willing to spend some time to configure MinGW & MSYS to make autoconf work on Windows, I wouldn't need to use the CMake either .)

<comment><USER3> > To do the job on Windows, I use CMake and CMake is my autoconf replacement > on Windows. Actually, if I was willing to spend some time to configure MinGW > & MSYS to make autoconf work on Windows, I wouldn't need to use the CMake > either .)

Why not just use cmake and be done? Less dependencies?

Every time I use cmake I wonder how I ever managed to use autotools or (even straight Makefiles). Especially when things like 'ctest' just work and are waiting for me to write unit-tests to utilize them.

</comment></comment><comment><USER4> I think that most projects use autoconf only because you need autoconf to use automake.

</comment><comment><USER5> The URL query suffix is pretty humorous.</comment>


SpinPunch (YC S12) Aims To Build Faster, Prettier HTML5 Games - <AUTHOR> http://techcrunch.com/2012/08/17/yc-backed-spinpunch-aims-to-build-faster-prettier-html5-games/

<comment><USER2> Well, given all the talk about negativity on HN and what-not, I thought I'd take a harder look at this to give some constructive criticism.

The graphics. Good, from a traditional RTS perspective. Limited and dated in comparison, but c'mon it's HTML 5 and runs pretty smoothly. However, I don't think you're going to get the traditional RTS market, a few minutes in they'll get a whiff of the skinner-box-ness and run off. I assume you're going for the more traditional Facebook game market, in which case I think the graphics need to be made simpler and larger, and also more distinguishable - the units all look quite similar. Think TF2 or Plants vs Zombies.

Speaking of target market - is there any point in using HTML5, really? It impresses the hacker crowd but I'm not sure if there's any actual benefit to your users - plus they'll all have Flash installed already and be used to using it, to use your game they may well have to upgrade or switch browser.

As for the game content, it seemed a little fast paced to me? Perhaps give the user more time to click around and fiddle with things between dialogs. Definitely get them to repeat essential actions - maybe look into Valve's "rule of 3" to make things less tutorial and more learn by doing. I can't be certain about the pacing though as I haven't played any FB games recently.

Lastly, a couple of technical considerations.. please adapt the game window to my screen size! Either the top or bottom controls are off the screen at any given time for me (1440x900 display), and please don't crash the game if my privacy settings are locked down!

<comment><USER3> Thanks for the feedback!

Agree on many of the points you raised, particularly the tutorial changes needed. Urg, sorry about the issue with your display. May I ask what browser you're using? Also, sometimes browser add-ins cause issues, and if you figure out if one might be responsible, we'd love to know.

In terms of crashing, wondering if you might remember the error message received? I'm not aware of errors related to privacy settings, but if we have one definitely want to fix it.

Thanks for taking the time to help us improve!

<comment><USER2> I'm using Firefox 14 on OS X Lion.

Just triggered the error again, I got:

Communications Problem

Sorry, there has been a temporary network error. Please reconnect to Mars Frontier. (code 0650)

<comment><USER3> Thanks ZoFreX, yeah, this can happen sometimes when a network connection has a hiccup. It's pretty common for connections--particularly on WiFi--to go down briefly and randomly. You typically don't notice when reading a web page, since your requests are intermittent, and streaming video hides it with buffering. We need to get smarter here. Thank you the feedback.

<comment><USER2> It's definitely not my connection hiccuping - I only get the error whenever the game tries to do something with my friends, and I assume it's not a coincidence that my privacy settings prevent it from doing so.

<comment><USER3> Oh, that could be different. We're probably missing a case. Appreciate your letting us know. Is this for inviting friends or messaging them? If your privacy settings prevent this we should be more graceful in catching the error than a connection failure.

</comment></comment></comment></comment></comment></comment><comment><USER4> First thing I'll say is that I really don't like the idea of using Flash, HTML5 etc any web technology for making games. However I see the need for it. I'd like to get more information though how your game engine makes it easier to create faster/prettier games. I am a fan of Construct2 (<http://www.scirra.com/construct2>). They make it really easy to create HTML5 games (it is all point and click, no programming required).

What differentiates your technology from the many existing ones on the market now?

Before the negative/hate comments star pouring in, maybe the OP/founders can give us an insight and some more information on what their plans are.

<comment><USER3> Hi mirsadm, excellent question. Our focus is pushing the limits of HTML5 to rival hardcore PC and console games. Our alpha for Mars Frontier came out in January, and some of our top players from the early days have spent over 500 hours in game so far. These guys are master competitors and dominate our leaderboards. It's a very different dynamic than casual games, and we think it requires a very different mindset and approach.

</comment></comment><comment><USER5> > Tien thinks the shift toward building more compelling browser-based gaming > experiences is a matter of course, but doesn't see too many players in the > space really trying to push HTML5's limits.

He doesn't? I see plenty, some random examples I can remember off the top of my head,

Turbulenz

PlayCanvas

Game Closure

Cloud Party

and those are just new startups, there is a lot of interest from existing companies as well (more slowly, though).

<comment><USER2> Angry Birds has an HTML5 version [1]. Also, the article said that no good browser games exist, not no good HTML5 browser games. There are some notable exceptions to that claim, one that springs to mind is Quake Live.

[1]: <http://chrome.angrybirds.com/>

<comment><USER5> Well, I believe the intention there was HTML5 games (which Quake Live is not, cool as it is).

But yeah, there are things like Angry Birds and Cut the Rope which show 2D games working very well in HTML5.

</comment></comment></comment><comment><USER6> wanted to try the demo game. don't have/want a facebook account. didn't get to try it.

<comment><USER5> Me too.

Is there any reason to make it run only on Facebook? Some requirement by Facebook perhaps? If not, why wouldn't you at least put a preview version of it outside of Facebook, which might make people interested enough to join?

<comment><USER2> There's a very good reason to make it run only on Facebook - it's a "Facebook game", through and through.

To be clear, this isn't a real-time strategy game. It is no different to any of the hundreds of "skinner box" games already on Facebook. I let the app access my Facebook, but refused to let it post anything to my friends (make posts from this app available to: only me). Every time I reach an action where it wants me to message my friends or post to my wall (these are frequent) the app crashes and I have to restart it to continue. Probably not a coincidence!

In addition you can click on buildings in progress to speed them up, initially for free but I've played enough of these games to know soon that resource will become limited, unless I spam my friends or fork out cash.

From a gameplay perspective, you just click on what it tells you you need to be clicking on next, and then do quests to unlock more items that you can click on. You collect resources from your resource harvesting buildings by clicking on them periodically when they are full, an absolutely classic FB game feature that is completely absent from any actual PC game or RTS game.

Lastly, it doesn't even leverage the HTML platform well. One thing I expect from HTML is for things to be at least semi-usable on many devices, and in particular I expect sites to work well on reasonable resolutions. I'm on a MBP and even in fullscreen mode, I couldn't get the whole game to fit on screen, and so had to scroll in the browser to be able to click on some of the buttons. This really negatively impacted my experience of button clicking, especially as sometimes it took me a long time to figure out which button I was being told to click.

Edit: Played on for a few more minutes, and sure enough, time, money, or friends. I can really, really recommend that anyone on HN who hasn't played one of these games creates a throwaway Facebook account and tries one out, just to see how vacuous and manipulative these games really are.

<comment><USER5> Thanks for the explanation.

That's worse than I expected, you saved me the effort of trying it out.

<comment><USER2> You should still try it out, because a) you shouldn't trust just one person decrying something and b) because everyone should witness the awfulness of skinner box games first-hand at least once!

<comment><USER5> Ok, ok :)

I registered and tried it. Technically the graphics and gameplay looked smooth, but as far as 2D games go, I thought that was already normal in HTML5. Despite the comment in the article, lots of people are doing stuff like this, and even 3D content that looks very good.

As for the rest, the constant nagging to connect to Facebook friends was highly annoying. But I guess that's the same as any Facebook game these days?

Otherwise, the game didn't really appeal to me, not sure why, I used to like this genre. Something about the tutorial felt overly contrived perhaps.

<comment><USER2> I wouldn't judge your like of the RTS genre on this game - if you are looking for a good one, StarCraft II is probably the best recent one. Going back a little, Dawn of War (I and II), Company of Heroes, and World in Conflict are all worth a shot too.</comment></comment></comment></comment></comment></comment></comment>