Sunday, November 13, 2011

Dart and the Future of Web Development

Recently Google released information about the Dart programming language. Google touts it as the best way to overcome the shortcomings of JavaScript. I agree that there are issues with JavaScript. I've seen and dealt with many issues that I've shaken my head at for the implementation decisions, or things missing from the language (need I mention automatic semi-colons?).

While I agree that there are problems with JavaScript, I disagree that Dart is the best way to solve them. In my opinion, there shouldn't be ONE specific language for the web. A common runtime that other languages could target would be great. I'm not talking things like CoffeeScript, or even Dart that compile to JavaScript. I want to remove JavaScript from the equation completely and introduce something like Mono or the JVM into the browser. I want to use my favorite language to target the web.

I've seen this idea proposed before, it is not new. Miguel de Icaza brought this up on his blog last May. The idea took hold in my head and I haven't been able to forget it since then. I think it's a great idea. No, not just great, genius.

Google is going down a similar route with NaCl, but I think they are missing the point there too.

Web development is hard. I believe it should be easier, we shouldn't have to learn new languages as developers to write for the web. JavaScript is not terrible now, but the future of web development requires something better. That something better should allow developers from all backgrounds to come to the table and contribute in a language they are familiar with. Python on the client? Absolutely. Haskell? Sure. Intercal? Why not? If it can be targeted to the common runtime, it should be available.

Google needs to go one step forward on their idea, Dart is not enough to revolutionize the industry, but allowing developers to write in a language they are familiar with and good at, THAT would revolutionize the web.

Saturday, July 9, 2011

Developers, developers, developers, developers...

Lately I've been feeling the desire to change the way I do development. I've been using and developing with C# and .NET since pre-1.0 days (beta versions) and have stuck mainly to that set of tools for most of my development. My core development platform is Windows, but I would like to branch out. I've dabbled with Python, and looked at other languages (Go, Vala, etc), but have never made the jump to actually developing something meaningful in them. I haven't even gotten into Python enough to have written a full set of tools. In addition, I've looked at tools like Scons to replace make at work, and would love to do it, but it seems like I never get the chance to sit down and learn it and become proficient enough in it to make the move.

So, the question I pose is, how can I change my development life? I feel like I need something new. Something to keep development exciting. Just another .NET library or tool won't make the difference here. I feel too safe and secure with .NET, I need something that forces me outside my comfort zone a little and keeps me on my toes.

This is why I go through a period every year where I want to rewrite the main suite of tools I develop using C++/boost and friends. It would be something new and something that I haven't done in a while which would make me less comfortable. How do you do XML or JSON processing in C++? I don't know right now. How would I do a plugin architecture? I don't know right now. It would be the thrill of learning something again. The thrill of not knowing the answers to some questions and having to search and discover the way to do it.

I miss that right now. I still enjoy my work. I am writing both Windows apps and doing embedded development, but there isn't a lot of "new" going on there. I'd like to rekindle that by exploring new ways of developing; whether it be tools, languages or platforms.

There are so many cool projects out there, and I wish I could be part of them. I enjoy contributing and have picked up contributing a few things to a couple projects, but I'd like to start something as well. Something that would be useful to people. I guess that's the goal of most developers, providing something that is useful to someone.

Friday, January 7, 2011

Monday, October 18, 2010

Mono.CSharp

Back in April, I read this post by Miguel de Icaza about the C# REPL (read-eval-print-loop) feature coming to MS.NET framework (previously it had only run on the Mono framework, for reasons detailed in the blog post). I was pretty excited. The feature looked really awesome when Miguel first blogged about it back in 2008 and I was pretty bummed that it was only available for Mono. 

I hadn't had an opportunity to play with it as I had been pretty busy doing other stuff at work and really didn't want to touch the application that I wanted to add it to because it's pretty touchy for some reason. It's a very multithreaded application with networking, database and a bunch of other stuff, so trying to touch it can cause rippling effects. It's something I've really wanted to rewrite for a while anyway. I finally decided to implement a couple new features in the application and brave the problems that would come.

I implemented the features and it seemed like everything was working fine until the day before I went on vacation. Everything went to pot. Right down the drain. I patched up the app as best I could before I left and received some frantic pages from a colleague before I actually hit the road.

Once I got back from my vacation I set about to correct the application correctly. You know, actually implement mutual exclusion and so forth so that it wouldn't die a horrible death every couple days. I switched some of the threadpool stuff over to the new TPL (Task Parallel) that was released in .NET 4.0 and that has had a great improvement in speed, but I still wanted a way to break in and debug stuff at runtime. Enter the Mono.CSharp library.

I wrote a very simple network interface that received commands from a raw connection, would evaluate them and then print back the results to the client machine. I still have a few kinks to work out, but all-in-all the solution is AWESOME. I can now remotely login and run commands to see what is happening internally in the application. I used some of the code from the example csharp.exe that Miguel released in order to have some pretty-printing and other similar features, but nothing real intense.

If you haven't checked out the Mono.Csharp library, I highly recommend you do. It has some potential to be very powerful. MS has promised a similar feature for the next revision of C#, but you can have it now, and very easily by just using the Mono.CSharp library.

If you'd like more information about Mono, check out http://go-mono.com.

Wednesday, October 6, 2010

The Widow's Mite

This is a booklet that my sister wrote. She is an extremely talented woman and I look up to her. Buy lots of these, it is really good!



This is her blog. http://myamateuradventures.blogspot.com/

Monday, October 4, 2010

Boost.Spirit

I've been looking at replacing an application at work that was original written in C. The application has it's own little language for defining hardware register sets and also takes care of managing slight differences between register sets for different products. I would normally write this application using C#, but it needs to be able to run  on systems that may or may not have .NET, and it is not an installed utility, but something that is checked into our source control system.

I thought originally about just updating the application to be C++ because it really is a good candidate for inheritance and polymorphism for the different register types, and having the STL is always a nice bonus for string manipulation. So, I need to write a parser. I've looked at Boost previously for other applications, but never at the Spirit library.

The library sounds really nice in theory, but I the examples for the latest version don't seem to follow the need that I have, or I am not understanding the examples very well.

Has anyone used the Qi library for writing a complete parser for a real life language? I'd like to see something like that.