Martín Salías - Software Architect









<< July 2007 >>
Sun Mon Tue Wed Thu Fri Sat
01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

RSS Feed

Subscribe with Bloglines

Martín Salías Home
Universal Thread
Level Extreme .NET Magazine
Microsoft User Group Argentina

Blogroll:


 

Contact Me

If you want to be updated on this weblog Enter your email here:


rss feed


 
Sunday, July 08, 2007
Of Mice and Men

My July editorial for Level Extreme .NET Magazine.

We seem to be in the verge of an important change on computer interfaces. The mighty keyboard dominated the human-to-computer interaction from the last 50+ years. Indeed, since its beginning, in the form of a teletype first, then in a more direct way. Output was more complicated, and moved ahead a bit faster with the jump from cards to printers and finally to the still dominating (but slowly fading) Cathodic Ray Tube.

Anyway, computer history is not linear, but logarithmic, and while the mouse started shaking its tail just a mere twenty-something years ago, it became so ubiquitous as his cousin keyboard, and certainly more fashionable.

But in the last years we are seeing a lot of wanna-be interfaces trying to win over this dynamic duo. Technology declared obsolete the CRT and it is being replaced by LCDs, which are maybe in the process of being replaced by OLEDs, but the important thing is that this sparked a myriad of new screen formats, from 19" notebooks to 2" portable video players. In one corner, multi-monitor setups are gaining adoption, while many of us have several tiny screens where we keep up with our schedules, calls and videos.

Pointing at screens with a stylus first and then with a finger is so common, than many are pushing for the next step which is allowing you to use as many fingers as you want, as in the talked-about-ad-nauseam iPhone to the still niche Microsoft Surface. But really, if you try any of this devices (I played with a prototype) you see there is a lot of great uses it can enable.

Still, I can't see touch screens of any kind wining over the mouse any time soon. I can't imagine having to touch my notebook screen all the time. The small arrow has the nice property of not hiding anything, and your hand can move the mouse over the table, so you don't get tired too soon. But someone smarter can figure out a better way than the mouse, maybe...

The keyboard seems a more difficult rival to me. Even if voice recognition improves a LOT, and even if you are a lousy typist as I am, I guess the keyboard is more practical. For people who mostly write prose document voice can be a great complement, but I can't imagine how to edit text easily with voice commands. And definitively, I can't think of programming with voice... can you? Just try to read a piece of code aloud...

In any case, these innovations and additional input and output devices will be increasingly common, if they still can't beat old Querty and Mickey. And we as developer have to start thinking on them more seriously. I guess the days of the pop-down menus are over. Even desktop application interfaces are sliding off them. Look at Office and their ribbons. Even if you don't like them too much, I think they are more effective than the previous polluted menus.

Well, maybe what we have to think more and more about is separating the interface from the logic, but this time for real. While we got accustomed to tiered applications, we still have a tendency to think in menus and data entry screens as the UI when we think in our domain model. It noticed that some time ago when I had to provide an IVR interface (phone-based, with a mix of voice and button commands) for a system. My team have to make some changes to the business objects to make them more usable from something different than a windows or a web page.

Windows Presentation Foundation, and now Silverlight, as Flash is doing from some years ago, makes the need for this separation more clear, and we can see separated tools, with some capabilities in the middle, for both interaction designers and programmers. And I avoid saying "graphic designers" on purpose, because there the web was full of graphic designers producing nightmarish interfaces because they were not prepared. Interaction design is much more than that. I guess this could be the next hot area for the upcoming generations, together with our now old profession.


Posted at 01:58 pm by msalias
Make a comment

 
Tuesday, July 03, 2007
Next Step: Web IDEs

I wrote about this some time ago on one of my Level Extreme .NET Magazine editorials. It seems I'm not the only one.

Peter Fisk of Vista Smalltalk fame is thinking among the same lines, although for less sophisticated developer types.

My take is that this should happen short-term, but inevitably more complete IDEs will start appearing, and development tools will quickly move server-side.



Posted at 03:12 pm by msalias
Make a comment

 
Tuesday, June 26, 2007
Meta-Art

I love when software -what I like to do for a living- meets art -something I liked all my life.

Thanks to Bill Gibson (one of my favorites writers, too) for the link:

Women in Art
http://www.youtube.com/watch?v=nUDIoN-_Hxs

Sit, relax, and enjoy...

Posted at 10:14 pm by msalias
Make a comment

 
Friday, June 22, 2007
R# 3.0 is officially released

Most probably you already know I'm a huge Resharper fan. It has really boosted my productivity and helped me craft better and cleaner code.

I've been using the R# 3 beta for quite some time now, and I'm happy that they released version 3.0 yesterday.

Among other things, VBers can now enjoy most of the great features.

There is a trial version waiting for you, but take in consideration that R# is a one-way trip:
http://www.jetbrains.com/resharper/download/index.html


Posted at 11:24 am by msalias
Make a comment

 
Thursday, June 14, 2007
Installing Resharper 3.0 on Orcas Beta

After playing a bit with the Orcas Beta, next thing I did was trying to install Resharper before actually working on VS, because when I really sterted to code beyond a few checks I felt like walking in the mud... Even while the IDE improved somehow, there is still a LOT of room for improvement.

But, Alas! Resharper 3.0 (beta) didn't seem to work on VS, so I went on and struggled for a about two weeks, and every time I switched from the Orcas VM to my host machine and VS 2005 it felt like... "why is Orcas experience soooo horrible".

So I went as begged the JetBrains guys if there was a way to make R# work on Orcas, and (fool of me) of course it is! Thanks to Oleg Stepanov for pointing me to:
http://www.jetbrains.net/confluence/display/ReSharper/Installation+Notes+for+ReSharper

To make it short, all you have to do isrun the MSI like this:
msiexec /i ReSharperSetup.msi VSVERSION=9.0

And now I can honor the JetBrains motto in Orcas too: Develop with pleasure!


Posted at 04:37 pm by msalias
Make a comment

 
Sunday, June 10, 2007
Blurring lines

My June editorial for Level Extreme .NET Magazine.

Some time ago I wrote about some limitations still blocking the scope of things like web applications. I was seeing how many different players in the industry were taking a new look at the problem of disconnected browser-based programs, which is one of the main shortcomings in this space. In the last month or so several important announcements has been made public, and some basic support for this scenarios are actually working right now.

For once, Google just released Google Gears, its browser extension that adds offline support for applications. This is in a very early stage and thus it is just adding basic functionality like a local web server to serve locally cached content, a small local database to hold data, and a little thread pool to ease the handle of asynchronous tasks. As several people noticed, there is a bunch of stuff that's still missing, mainly more features to handle different synchronization scenarios, which is something that the current implementation leaves to the developer. But for the first release, this API looks really promising.

On the other side of the fence, Microsoft recently released Silverlight, which has planned offline support although it is in an even early stage in this particular area. However, the scaled-down version of the .NET Framework runtime is a perfect sandbox strategy to provide this kind of services in a safe and easy way, and this is something they definitively ave in their roadmap.

At the same time, Silverlight brings another push to other area where web applications were often turned down: rich applications. While it is true that Flash is a well-established platform, so far it has been mostly used in areas like marketing, games and other niches. Microsoft is trying to push Silverlight and its promised simplified programming model to a wider audience, including business applications and other typical markets where Flash didn't penetrated much yet.

In the meantime, another huge trend both competitors are heavily pushing now is mashups. These are web applications built out of parts, much like you could build with components before, but in the lousy-connected scene of the web. Microsoft has PopFly in Beta, while Google has its own Mashup Editor.

What's interesting in this space is that you can built a valuable service out of already existing services and sources by adding very little code or configuration on your part, usually just connecting outputs with inputs. But of course, this poses a new series of challenges, like the need to store this configuration and data somewhere. As it is usual in the mashup style, you may not own or control the server where you are hosting your creation, so finding a store for your data is not that easy. Also, as this kind of strategy evolves, there is an increasing need to have a standard way to access some specific information which has a more complex structure than what RSS or Atom supports.

Microsoft came up with a very interesting approach to help in this issue with a project called Astoria. What they are trying to provide is data services over the web, and this really captivated my attention. I had always discouraged people to try to use web services as a data service, in the typical sense of exposing a "query" service over HTTP. This something I reconsidered in certain cases once we arrived to the point where we were talking about XML Services (without the "web" emphasis). My main concern was always the high-latency nature of the whole SOAP-HTTP combo. Providing data access over the web means that you need to add to the actual database access a lot of overhead in the form of packaging, connection and disconnection, etc. This can decrease once you use SOAP over TCP, etc, but still SOAP is not designed to handle this kind of situation.

Astoria take a more RESTful approach (basic background on REST architecture in Wikipedia). It is based also on the ADO.Net Entity Framework (another piece of yet-unreleased software) that provides a conceptual model over a given physical database schema (to follow me, just think of it as sort of Object-Oriented Database). An Astoria service provides an entry point to this model, where you can start by querying its content (like "http://host/vdir/northwind.svc") and get an XML with the entities (kind of tables). Then you can refine your URL based on this information, to access a specific resource. I won't make this into an Astoria overview, but what's important is that this allows you to get the equivalent of select, insert, update or delete operations over the web, with a fairly good throughput, and -more importantly- with a single consistent mode that allows tools to be very generic. For example, there are some sample controls for ASP.Net that will figura out the whole structure of an Astoria service and allow to navigate trough its data by using grids with sortable columns, filters, paging and editing without any other configuration than the entry point (again, this "http://YourServer/YourModel.svc").

The point I'm trying to make is that we are starting to see some forbidden territory explored. I guess that sooner than we expect we will witness how cities are built over there. Convergence is happening really fast, and the traditional lines we take for granted today between desktop, web and mobile applications are finally starting to fade. New technology and faster communications are accelerating it.

I'd just want that the level of quality of the produced solutions evolved as fast as its reach... What do you think?


Posted at 02:01 pm by msalias
Make a comment

 
Monday, May 07, 2007
Static languages vs. dynamic languages

My May editorial for Level Extreme .NET Magazine.


Programming languages have gone a long path, as you can see in this nice diagram by Éric Lévénez. Throughout its history, programming was always searching for the perfect balance between several forces like expressiveness, productivity and correctness. While the first two evolved with object orientation, higher abstraction and an increase in composability (as more and more reusable algorithms and even executable code accumulated), correctness was somehow slower, maybe because it is a more complex problem, and maybe because for a relatively immature industry, the competitive advantage seemed to be more productivity-related.

As software became more pervasive in our daily lives, however, predictability and safety in execution started to be bigger concerns. Also, software lives more and more as part of an ecosystem, where dependencies on other services its crucial, and minor mistakes or errors get quickly magnified.

Verifying that a program is correct is a tricky task. For once, intention has to be clear to be able to know what to check. Then, inputs and outputs have to be clearly defined, allowing to detect any misbehavior. Even at a lower level, some operations over the platform have to be validated to avoid problems in the hosting environment (like memory leaks, drying resources, locks, etc).

From an academic and mainstream perspective, so far, the tendency has been to solve these issues by strengthening the runtime environment (like the Java Virtual Machine or the .NET Framework), and letting it handle dangerous operations instead of the languages, and also making the compilers smarter to detect as many problems as early as possible.

To enable this many languages (like Java and C#) followed the C++ path of strong typing. The focus of type safety helped to make compilers much better, but also helped with many other levels of checking, like static analysis, which allows to provide a higher level overview of a system and detecting more subtle things like compliance to specific practices or conventions.

Strong typing also helped providing better contextual information within IDEs, greatly improving features like Intellisense and refactoring tools, but until recently, it also added some verbosity.

While this mainstream approach captured most attention in the enterprise market, a grass roots movement with a noticeable mix of open source initiatives and communities pushed in a different direction: toward dynamically-typed languages.

This is indeed a complex terrain, as there is not a strict definition of what makes a language "dynamic". Some of their attributes, however, are things like runtime evaluation and dynamic creation of types and objects, and many times, dynamic typing, although this is not a requirement. Generally speaking, they are perceived as simpler to program and more functional in nature.

I personally feel very happy about all this renewed language explosion because I love this field, but I still see a greatest reward in static languages, coupled with some features that are usually perceived as "dynamic".

Type inference for example, arriving in C# 3.0, allows developers to avoid declaring variable types in many situations, by using the var keyword. This is handy and nice, but it is also great in the sense that strong typing is still there, because the type is inferred from the value been assigned.

Functional programming is making its way also in the form of lambda expressions support, but without the need of been checked at runtime. I really prefer lambda composability over runtime expression evaluation, as it provides a much safer experience and fastest feedback.

But dynamic languages (and the DLR) will provide a good complement to strongly-typed languages, like a good way to handle scenarios where late binding is a need, or contributing some interpreter environment for checking short snippets of code without the need to have projects, compilation, etc. This is great to quickly instantiate stuff and play around, then getting code into a program.

I guess that convergence is here, and the will be no real static vs. dynamic fight in the end, but a great leverage of all the languages strengths. This will boost productivity and safety at the same time, and I hope programming would be able to make a quantum leap as a discipline pretty soon.


Posted at 02:03 pm by msalias
Make a comment

 
Tuesday, April 24, 2007
Is "smart TV" a contradiction in terms?

You may have read about Joost, the beta service that the original founders of Kazaa and Skype are now rolling out. It is basically a free, full-screen, real-time, on-demand TV service.

I wrote about in my April editorial for Level Extreme .NET Magazine.

I don't watch TV except for an ocassional movie on saturday nights when I'm out of the city and offline.  Shades  But I guess my main gripe with TV is that most of the time, when I know about some program which could interest me, it is scheduled on an impossible time. Or maybe it is on a suitable time later that day, so I just forgot.

I know devices like TIVO solve this, but been no fan of TV to begin with, I don't feel the need for this.

But now, Joost can be a good alternative for that. It is already available on the device I use the most (my notebook) and also in the one which is ubiquous at home (we have 5 PCs for a family of four -not counting handhelds). But the great thing is having access to programming on-demand, even searchable!

Right now Joost is offering just a few programs, but it is just in Beta, so it is no surprise. In any case, the promise is big. Also, video quality is not always so good, but it is magnificent compared with YouTube (and I'm comparing full-screen experience). Again, this is also due to the beta status, but not so much for the network capabilities, but for the network size. One great thing about Joost architecture is that as the service usage grows, the network improves, dure to its distributed, peer-to-peer strategy. So instead of "more users=worst service", here you should have "more users=better service". Of course this is theoretical, but so far they have proved the concept with Skype.

Actually, this is the first time I feel interested in Television since I stopped watching Pink Panther 30 years ago.




Posted at 11:58 am by msalias
Comments (1)

 
Friday, February 02, 2007
No Ruby in .NET yet, but Ruby in Visual Studio

Yes, Ruby fans around the .NET world, now you can use Visual Studio to code on Ruby with nice intellisense, syntax coloring and debugging.

Thanks to the people at SapphireSteel we now have Ruby in Steel. They have a free personal edition if you want to try it. I've been using it to play a bit and it is very nice.

Now that John Lam started working at Microsoft, I guess if RubyCLR can go beyond a mere bridge and we can expect a full .NET implementation...

 


Posted at 02:12 pm by msalias
Comments (1)

 
Monday, January 22, 2007
Guilty as charged

I am nerdier than 93% of all people. Are you nerdier? Click here to find out!


Posted at 10:52 pm by msalias
Make a comment

Next Page