Showing posts with label microsoft. Show all posts
Showing posts with label microsoft. Show all posts

Sunday, March 21, 2010

MIXation Sensation

This past week was Microsoft's MIX conference. I almost went to it, and I would have gone if it was not the same week as my oldest son's birthday. You gotta have priorities. Anyways, the reason I almost went was not because I have suddenly embraced ASP.NET development (even though I must admit my admiration for Scott Gu). No, my interest is all browser related and MIX was browser heavy this year.

On the browser front, the big news was the early preview of IE9. For web enthusiasts, it's fun to wax poetic about the mind blowing speed of V8 or the brilliance of TraceMonkey, but these technologies will always be secondary at best. If you are a web developer the most important browsers are the ones from Microsoft, because they dominate the market. They form the baseline that you develop against. If you want to do something that these browser do not support, you have got to get creative or be willing to live with your work simply being a toy. Simply put, IE9 news is more important than all of the Firefox, Safari, Chrome, and Opera news combined.

Luckily, Microsoft did not disappoint with IE9. It is obviously a far from finished product, and Microsoft was a little too dodgy on sharing its roadmap for my taste, but I can empathize with their position. Still they showed a browser with significant speed improvements and with support for a lot of standards based, visual eye candy. I'm talking about a lot of CSS3 features and most surprisingly, an amazing SVG implementation. They whipped out some classic Microsoft tricks, i.e. using their intimate relationship with their operating system to tap into GPU acceleration. You might think it's not a fair trick for them to do, but who cares? The boys at Mozilla, Apple, and Google have to accept this challenge, even if it will be super painful to pull of across platforms -- and Linux will surely suffer here once again.

I was a little disappointed in some of the other JavaScript features. In particular, I was really hoping that Web Workers would be included with IE9, and I was cautiously optimistic that geolocation would also be included. Neither is included in the IE9 preview that Microsoft made available to developers.

Of course that definitely does not mean that these features are out of IE9. I think there is a lot more to come. Microsoft has done some amazing work to give IE9 a lot of graphics features, but they have left out Canvas. Further intense graphics programming would benefit from the multi-threaded programming model supplied by Web Workers. So it would make a lot of sense for both of these to be added. I'm even optimistic that Microsoft will implement these standards directly, and not offer some proprietary alternative.

All of this makes you wonder about IE9 as a compelling graphics/gaming platform. I think that some serious tooling will be needed to make this viable. That's an area that Microsoft excels at. However, would this not put Microsoft in conflict with their own efforts around Silverlight? It's like the HTML 5 vs. Flash war could be played out in miniature within Microsoft's walls, only it would be IE9 vs. Silveright. Speaking of Silverlight...

The other big news, from my perspective at least, that came out of MIX was a lot more information about the Windows Phone platform. As a mobile developer, I have very mixed feelings about Windows Phone. On one hand, I really like the idea of using Silverlight as the application platform. This is a mature application platform, with fantastic tooling. You get to use a beautiful programming language -- C# (oh an maybe other .NET langs, like F#?) that has a decent runtime that includes garbage collection. However, Microsoft looks like they are copying Apple's approach. A lot of the restrictions being placed on non-Microsoft applications are very similar to the restrictions placed on iPhone applications.

Back to the browsers... Microsoft shipped a preview of tools for building Windows Phone applications. Again, major props to Microsoft for getting this software ready out at MIX, even if it is a little rough in places. I don't like companies using end users as a substitute for QA, but this is different. Getting tools into the hands of developers is critical. In this case, the tools include a Windows Phone emulator, which includes *drumroll please* the Windows Phone browser! As a mobile developer, this is the most important thing that can be included. I'll have to support your browser before I have to support your application platform.

However, the Windows Phone browser is not very promising. It seems to be based on IE7. It does not seem to support many HTML 5 features at all. No geolocation. No local storage. No application cache. No web workers.

Maybe some of these things will be added by this fall, but I'm not as optimistic about this. Even the documentation that is included emphasizes building web applications that are designed to work on legacy browsers. They seem to be saying, don't go looking for coolness in the browser!

Thursday, September 04, 2008

JavaScript Benchmarks, now with Chrome

As promised yesterday, I did the JS benchmarks again on a Windows machine so I could include Google Chrome. I tried to be pretty inclusive, adding in IE7, IE8 beta 2, Firefox 3.0.1 (current release), Firefox 3.1 with and without JIT, Safari 3.1 (current release), Safari 4 beta, Opera 9.5 and Chrome. This was all run on my workstation, a 4-core, 3.2 GHz box with 8 GB of RAM. Any add-ons, extensions were disabled. Here is the pretty picture.


Once again Safari is the kind. Safari 3.1 beats everything except for Safari 4 beta, which crushes even Safari 3.1. Opera was a little slower than Safari. Chrome was generally comparable to the various Firefox browsers, but overall slightly slower. Like Firefox 3.1+JIT, it was very on error handling! Of course IE was the slowest by far, but at least IE8 is faster than IE7. Maybe IE8 is shipping with debug symbols included (as Microsoft has often done in the past) and the release candidates will be much faster than the betas. Or not.

Anyways, Chrome, and its V8 engine, does well, but does not seem to be ahead of Firefox and is certainly behind Safari and Opera. Maybe they can do better on the Mac!

Friday, May 23, 2008

Armchair Architects

Funny post by @al3x about Twitter architecture. Oh wait it wasn't supposed to be funny, oops. The fact is that he should totally expect more people to diss Twitter and pretend that they could easily solve all of the problems. I am not just being cynical about people, they actually have some good reasons to do so:

  • Twitter crashes a lot. If your site did not crash so much, then people would not think you are an idiot and that they could easily do a better job. The people may all be wrong, but that does not matter. Why do you think Microsoft has come to have such a bad reputation? People do not care about what MSFT did to Netscape, Sun, or Apple. They care about BSODs. People hate Vista because Microsoft did not make it as backwards compatible with 3rd party drivers that did lots of bad, hacky things. But now Vista crashes, so people complain about MSFT.
  • Twitter seems simple. You put a 140 character limit on updates and what do you expect? Part of Twitter's appeal is its simplicity, but that same simplicity creates expectations and makes people think they could do it themselves better. Maintenance is expected for things that seem complex, like cars or Photoshop, but not for (seemingly) simple things like iPods or Twitter. If you think hard about it, Twitter is much more complex than it seems, but who wants to think hard?
  • Ruby developers are obnoxious. Oh this is my favorite. Ruby developers are a small but very vocal group. They love rubbing it in your face that Ruby is so much more expressive or object-oriented or whatever than anything else on the planet. The Rails sub-cult is even worse about this. So when the most high-profile Rails site starts failing constantly, you must expect a lot of smug developers to wag their fingers. It is kind of a shame that Twitter is paying for DHH's bad karma ... but then again @blaine did make that infamous claim about how easy it was to scale Rails. Of course he's gone now, but there is still enough bad karma to go around. How many Ruby developers would admit how bad their software is? Think about that.

Saturday, May 03, 2008

Twitter Me This

No Twitter running off the Rails discussion tonight. One reason I write about Twitter is because I really value the service.  It was particularly useful to me today.

I took my oldest son, Michael, Jr. to Maker Faire today. We left right after lunch. I set Twitter to deliver messages via IM, which for me means Google Talk. I have a Google Talk client on my Blackberry, so all updates went to my phone via IM. I did a "track #makerfaire". Just as I was about to hit the road I see tweet saying how bad traffic was on the 101 near San Mateo, where Maker Faire takes place. I also see a tweet saying the best way to avoid the street traffic was to take the Hillsdale Blvd. exit to Saratoga Drive, where there is free parking. These were not tweets from people I follow, but from people going to Maker Faire, and they were right on. So I took 280 to 92 instead of 101, and used the Hillsdale Blvd tip to find free parking. I got to see a parking lot on the freeway near the San Mateo fairgrounds, as well as on Delaware Avenue (where most people got off the freeway) getting onto Saratoga Drive. I did not have to deal with any of that traffic. Thank you Twitter!

Not long after I got home from Maker Faire, I checked Twitter and saw the first mention of Microsoft withdrawing their bid for Yahoo. I had turned off my Blackberry setup, but immediately change my settings back to IM and turned on iChat on my MacBook. I did this so I could track Yahoo and Microsoft on Twitter. All I can say is ... wow. It was amazing to watch the collective conscious of ... well at least Silicon Valley ... react to such surprising news. Now I'm not going to exaggerate, most of the tweets were redundant and few had any particular insight. That is not the point. Crowd sourcing may be great for traffic info, but not business and technology analysis (just ask a communist survivor!) But it is fun to see how some people were relieved, while others were disappointed because they knew that YHOO stock was doomed to plummet on Monday. 

Thursday, March 27, 2008

Beta Browsers 2008

This is a big year. Both IE and Firefox will release new versions this year. That hasn't happened ... ever? IE8 had its first beta, whereas Firefox 3 is at beta four. Indeed FF3 is much more polished at this point than IE8. However, I must say that Microsoft has been smarter than the Firefox team in a number of ways.

First, IE8 includes an improved IE Developer Toolbar by default. The IE DevBar is roughly equivalent to Firebug, but Firebug does not work with FF3. Of course you can’t really blame this on FF, but IE8 is much more web developer friendly. Web developers are the primary (only?) audience for beta browsers. IE8 also includes the IE7 emulation mode. Again this is very nice for web developers who have to program for IE7 currently, but need to get a head start on IE8 (wait, isn’t that all web developers?)

Vista Annoyance #432

A few weeks ago, I watched Guy Kawasaki's interview of Steve Ballmer at MIX. Kawasaki gave Ballmer a hard time about Vista. It made me think of some of the problems I have had with Vista. I started thinking "well things seem better now.' Then this morning I try to log on to my home system and get an error message saying that Windows could not load my user profile. In the event viewer it says:

Windows cannot load the locally stored profile. Possible causes of this error include insufficient security rights or a corrupt local profile.

DETAIL - The process cannot access the file because it is being used by another process.

Luckily I rebooted and everything was ok. Yep, rebooting is still the best way to fix most Windows problems. Things haven't changed much in the last fifteen years.

Actually I still have other problems with Vista. I still get problems caused by Windows Firewall. Vista was so unstable on my MacBook under Parallels that I replaced it with XP. In December, my Vista install was completely corrupted. After several minutes of use, its network and memory consumption would go ballistic making the system unusable. I thought at first it was a virus or malware of some sort, but I never found any evidence of either. I wound up re-installing Vista to fix the problem.

Now Vista SP1 is out. I don't know if I should be hopeful that it will be a remedy for all of my pains ... or if it will just be fuel for the fire and cause me to "upgrade" Vista to XP.

Thursday, March 13, 2008

Silverlight Stocks

Ever since details of Silverlight 2.0 came out, I planned on re-doing my stocks app using it. This is an app that I first wrote for a GWT tutorial I did for IBM, and then re-wrote when I learned Flex last year. I wanted to write it in Silverlight last year, but Silverlight was not ready then. Now it is. Here's a picture of it.


This look-and-feel is all defaults. It looks like a web page! It's usually easy to spot Flex apps, but that is not as true with Silverlight. Everything works the same as with the Flex or GWT versions, except the color-coding for stocks that are up or down. I figured out how to define styles with Silverlight (more on that) but could programmatically set the style. Let's take a look at the code. First the UI code.


<UserControl x:Class="SilverStocks.Page"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Enter Symbol "/>
<TextBox x:Name="symbol" Width="100" KeyDown="symbol_KeyDown"/>
<Button Click="Button_Click" Content="Get Info" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Company Name: "/>
<TextBlock x:Name="company"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Price: "/>
<TextBlock x:Name="price" Text="$"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Change: "/>
<TextBlock x:Name="change" Text=""/>
</StackPanel>
</StackPanel>
</UserControl>


Pretty similar to MXML, but distinctive. As with ASP.NET pages, Silverlight puts all code in a code-behind file:


public partial class Page : UserControl
{
const string url = "http://localhost:8080/Stocks/Stocks?symbol=";
public Page()
{
InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
invokeStockService();
}

private void invokeStockService()
{
string symbol = this.symbol.Text;
WebClient service = new WebClient();
service.DownloadStringCompleted += new DownloadStringCompletedEventHandler(handler);
service.DownloadStringAsync(new Uri(url + symbol));
}

private void handler(object sender, DownloadStringCompletedEventArgs args)
{
if (args.Error == null)
{
this.showInfo(args.Result);
}
}

private void showInfo(string xmlContent)
{
XDocument root = XDocument.Parse(xmlContent);
var stocks = from xml in root.Descendants("stock")
select new Stock
{
Symbol = (string) xml.Element("symbol"),
Company = (string) xml.Element("companyName"),
Price = Decimal.Parse((string)xml.Element("price")),
Change = Decimal.Parse((string)xml.Element("change"))
};
foreach (Stock stock in stocks)
{
this.company.Text = stock.Company;
this.price.Text = stock.Price.ToString();
this.change.Text = stock.Change.ToString();
}
}

private void symbol_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
this.invokeStockService();
}
}
}


Notice that I used the LINQ-XML cleverness, as advocated by Scott Gu. Most dynamic language folks will probably favor ActionScript's E4X over using this lambda-ish query language and a statically defined class. Actually I'm sure I could refactor this to not use the class at all, and just set the text fields during the query.

Finally, the other major difference between the two is the Flex framework's mx:HttpService. This component encapsulates the call to the back-end and provides dynamic binding. There is no handler code in the Flex version because of the binding. Will data source bindings and components like mx:HttpService find their way in to Silverlight?

Thursday, March 06, 2008

IE-Hell Freezing Over

Even after I heard the rumors, I still never thought I'd see it with my own eyes:

My enthusiasm was quickly curbed when I tried to use IE8 to post this blog entry. Not only did the Blogger interface look crazy, but the upload image link did not work. I tried switching to "Emulate IE7". To do that, you must restart the browser. That's not very practical, and just means that most people will have to default to the IE7 emulator. Oh well, I guess Blogger just needs to fix up their non-standard JS? Maybe I will open up a debugger to figure out what is breaking. Probably some kind of browser sniffing code that picks different JS syntax depending on if it is IE or not. Maybe what is needed is an IE8 add-on that fakes the user-agent so that most sites think IE8 surfers are actually Firefox surfers.

Thursday, January 24, 2008

Some Love for Microsoft

I got Office 2008 for my MacBook, and I have to say, I love it so far. Actually, I should say that I love PowerPoint and Entourage, as those are the two programs I have used a lot so far.

PowerPoint -- This is mostly a case of lowered expectations... A lot of the older bugs I used to experience with PowerPoint have been fixed. It works better (perfectly) with some of the templates I use from work, especially those that involve integration with Excel. This should have been the case with Excel 2004, but it was not (the templates were made with Excel 2003 on Windows of course.) This fact alone gives PowerPoint 2008 a huge edge (for me) over Keynote or NeoOffice. I might still use Keynote if I was making a presentation for a conference or the like, but when doing "work", PowerPoint wins easily.

Entourage -- This is the really big winner. This beast works flawlessly with Exchange. I put in my email address and said "use Exchange". It prompted me for my domain and password, and everything just worked. All of the features of Outlook that I use work fine. Many of the features are much better on Entourage. Case in point, auto-complete on addresses. Our Exchange server stores names like Galpin, Michael. So if you start to type "Michael" then "Galpin, Michael" will be a hit on the "M" but not on "Mi" etc. Entourage 2008 is definitely smarter than Outlook 2003 (haven't used Outlook 2007 enough to say about it.)

I generally use Word and Excel more than PowerPoint and Entourage/Outlook, so I will definitely be giving them a workout soon. Finally, as for the UI... I like the switch to the metal look that is the de facto on OSX now. I actually like the ribbon in Office 2007, so I was a little disappointed that it was not used. However, there is very nice consistency between Office 2008 and Office 2004.

So kudos to Microsoft for making a great product for the Mac.

Tuesday, November 13, 2007

The Network Application Pattern

    Several years ago I worked in consulting. My company was hired by larger companies to build web applications. We worked on internal web applications, external ones, and even some that were completely consumer focused, like the Washington Post Jobs site. Often we wrote applications that replaced existing desktop applications. Many of these were so called thick clients or client-server applications.
    The list of technologies was all over the place: PowerBuilder, Swing, and Visual Basic. The reasons for the conversions were pretty similar though: make things more easily accessible. It was much easier to say “you need InternetExplorer 5.5 or higher” to run an application, than it was to require somebody to download and install, and stay upgraded to the latest version of an application. The hardest part about these conversions was trying to reproduce all the functionality. You just could not do it, and there were always compromises that you had to work out with the clients on this.
    These days I am starting to think that such compromises are unacceptable. The days of the thin client are coming to an end. At the same time, the days of the thick client are not coming back. Instead a different pattern has emerged, and it is going to win. I call it the Network Application, though other folks have different names and different takes on it. Here is what it is.

Misuse of Big Iron

    To make things as accessible as possible generally meant to require as little as possible on the end user’s machine. The browser wars necessitated this as well. Inconsistencies across browsers required a least common denominator approach. The browser become a rendering device, and nothing else really.
    All the computation required to determine the interface shown to a user was performed on servers. For awhile these servers were Big Iron -- look at how well SUNW did in the late 90’s. Moore’s Law caught up and lots of cheap servers replaced Big Iron, but the usage pattern remained unchanged. Programming languages flourished around this. Look at all the UI frameworks in Java, the explosion of PHP, and the emergence of Ruby on Rails.

Another Shift

    I am not one of those melodramatics who look for a single event and say “this epoch caused everything to change.” Things started changing. Browsers stabilized and Moore’s Law kept moving along. Microsoft’s attempt at subverting web browsers by creating IE-only extensions, ultimately backfired on them. They created XMLHttpRequest, which ultimately allowed for exactly what the Netscape think tank had always hoped for and Microsoft always feared: web applications that were on-par with desktop applications. Well sort of...
    Web applications still have a lot to be desired. As I mentioned earlier, it can be really hard to reproduce a desktop experience in a browser. There are a lot of things going on to solve that, and some of them might even work. Orthogonal to the technologies at play is the pattern of how to program applications that are as feature rich as desktop applications, but can be run from a browser with no software to download or worry about updating.

The Pattern

    The key to the pattern is to stop using servers for creating user interfaces. If you like to think of UIs using the popular Model-View-Controller paradigm, the server should only be a place for Models. Your View and your Controller should be running on a client computer, not a server. Your server will probably serialize a Model to send to the client so it can use it in a view, but otherwise the boundaries should be very clear.
    Why does this help with the problem of creating desktop-like applications? Because when all the view logic is located on the client, there are no limitations to the interactivity. For an example, think about infinite scrolling like you see in Yahoo Mail (I usually rip on Yahoo, so I thought this would be a nice change of pace.) If the view of the list of your emails is formed on a Yahoo server, then to scroll past the bottom means recalculating that view on a Yahoo server, even if it is to show one more email that is just past the bottom of the list. If you had to do it that way, you would not allow scrolling. You would force pagination, like GMail does. However, if you already have the code for creating that view on the client, then all you need on the client is the data to display.

Servers Are for Services

    The beauty of this pattern is that your servers become specialized in serving up data, not HTML. There is still some overhead in de-serializing the request and serializing the response and making it all work over HTTP, but it’s a lot less than the alternatives. Of course it’s not a read-only world, so you’re not just sending out data. You are also receiving changes to the data, either directly, or (hopefully) via a service interface. Just because we’re getting clever with our presentation design, doesn’t mean our middle-tier design can be garbage.
    Notice I used the Service word. This is the same word used by those SOA guys, and it means the same thing. There’s no reason that the clients that you build for your service (in this case user interfaces) cannot leverage the same infrastructure that clients built by other folks use. Now you may want to expose more services to the user interfaces that you built, or maybe you don’t... The point is that if you decouple the so called business logic of your system, then it is easy to build Network Applications that provide rich user interfaces to the end users of your system.

Implementations of the Pattern

    Like most patterns, this was one has emerged from implementations. It is not something I dreamed up in my ivory tower in San Jose. One of my favorites is the Google Web Toolkit. GWT let’s you build things kind of like you would for the old-school thick clients using Swing, but it turns around, turns everything into code that runs on the client. One of my friends was starting to learn GWT recently and I think he was surprised when I told him that everything in GWT becomes static assets that can be served up by any web server directly. They are very cache-able assets as well... There are GWT ways to hook up your server calls as well, and of course this does require a Java application server. But that part of your code can be done in JavaScript, using GWT’s JavaScript Native Interface (JSNI.) The nice thing about using the GWT server code is that you get to use the same object model on client and server.
    GWT is tied to JavaScript, and thus it inherits the limitations of JavaScript. My other favorite implementation of the pattern is Adobe Flex. Flex Builder 3 even has code generators for creating Java or PHP data services for communicating to your Flex application. Flex applications run inside the Flash player, and don’t have nearly as many limitations as JavaScript applications. Flex applications are usually much bigger than JavaScript ones, but are also very cache-able. Bandwidth is becoming less of an issue in terms of user experience, though it is still a cost issue.

The Moral of the Story

    If you are a UI engineer, you should not be writing HTML. You should only be writing code that executes on the client. There are many other options out there. In the JavaScript world, there’s Dojo’s Dijit, the Yahoo UI Library, even script.aculo.us. Ruby on Rails’ RJS has some similarities to GWT, but is not there yet. The Rails guys are still perfecting the last generation of web applications, and have not moved on yet :-) Straddling the JS and non-JS worlds is OpenLaszlo. I would be more enthusiastic about Laszlo if it was using new Flash technologies. On the non-JS side, the two chief non-Flash entities are Microsoft’s Silverlight and JavaFX.
    Now again, these are all technologies that can be used with this pattern. They can also be used outside of the pattern, though I would say that is probably a mistake :-)

Saturday, September 29, 2007

No Silverlight for You

I attended an MSDN talk this week on Silverlight. It was given by Microsoft evangelist Anand Iyer. If you've been to any Microsoft developer centric events in the Bay Area, chances are that you've got to listen to Anand. He's an excellent speaker and this week's talks were no different. One of the things that makes his talks so good is the honesty. There's no BS, marketing spin.

My chief interest in Silverlight is as an "RIA" technology. I put RIA in quotes because there are different interpretations of that acronym. I was used to a definition similar to the one in Wikipedia: Rich Internet Application. The key in this definition is bringing a desktop-like experience to web applications.

Microsoft's definition is different. They call RIAs: Rich Interactive Applications. To them it is not about web applications with a desktop-like experience. It's about media. This may seem like a minor point, but actually it's the only point worth mentioning to me. It was the most important thing I took away from Anand's speech: Microsoft is only interested in rich media when it comes to Silverlight.

This seemed contradictory to me. After all, they've made a big deal about bringing the CLR to Silverlight 1.1. But Anand was crystal clear on this. If you want to build web applications, then you should be using ASP.NET and all of its great AJAX goodness. You can use Silverlight, but it's going to be very difficult as this is not the focus of Silverlight.

Indeed this message is consistent with the use of Silverlight. You can create a Silverlight application in Visual Studio 8, but you're going to be editing XAML, i.e. XML. Essentially you're creating low-level vector graphics commands wrapped in XML. One of the other attendees at the MSDN talk asked Anand if there is any kind of nice designer that was going to be built in to Visual Studio to make this easier and the answer was "Yes there will be a design view, but it is awful. You need to use Expression Blend."

And there it is. If you want to do Silverlight work, you need Blend. This is a tool made for designers and is not even available to MSDN subscribers. This tool is not meant for developers, and thus Silverlight is not meant for developers.

It's only meant for designers. It's only meant for creating animations or embedding video, etc. That's all Microsoft is going for. Imagine if Adobe got rid of Flex and said "you have to use Flash CS3." That's Microsoft's position.

Again with CLR support built into Silverlight, you might think that it's just a matter of time before it becomes a developer platform. But from what Anand had to say, it's going to be a long itme. There's not going to be developer support in Silverlight 1.1 and Visual Studio 8. VS8 won't be shipping until February and Silverlight 1.1 won't be shipping until next summer. Given that, I would have to guess that it will be at least two years before Silverlight becomes something that can be used by developers. That's truly disappointing.

Tuesday, July 24, 2007

Google Docs To The Rescue

I was reading this post by Jeremy Zawodny, and it reminded me of my recent Mac Office 2004 meltdown. I went down a similar path. I had an Important Doc(!) that I needed to make some edits on for work. I had planned on doing the edits that morning, before I went in to the office. So I had some serious time pressures. I didn't know how long it would take me to solve the riddle dropped on to me by Apple Software Update. I actually tried loading the document into Pages, but it barfed on it (maybe because the doc had a table of contents?)

So like Jeremy, I fired up Google Docs. I uploaded the Important Doc there (hope nobody from Security is reading this, though the doc was intended for folks outside of my company.) It came through just fine. I made the edits I needed to make and saved it on Google Docs.

Then I went back to fixing Office, which I eventually did. I went in to work, opened the Google Docs version of my document, and manually merged in changes to the original. I would've just exported it as a Word Doc, but I was afraid of how it would handle the table of contents. So I manually merged and then updated the table of contents.

Friday, June 15, 2007

More iPhone Thoughts

Lots has been written about the lack of an SDK for the iPhone:

Valleywag had a pretty good aggregation of opinions. This included a great write-up by John Gruber that echoes the opinions of many developers. Dave Winer chimed in on Apple's overall dislike of developers and then gave an alternate theory that it's AT&T's fear of Skype that is the real key.

I have to agree more with Dave's first point and with John Gruber. Apple has never treated their developers well. Apple has always treated developers very poorly, unlike Microsoft.



Focusing on more positive things, Eugene Ciurana on TheServerSide looks at the iPhone and its lack of SDK as an opportunity for Java web developers. This is some truth here, but there are way more people online already than will ever be using the iPhone, so that opportunity must be put in context. Also, I have to admit finding it amusing that Eugene thinks that:
Most mission-critical and scalable websites run on Java, and most serious Web 2.0 frameworks are implemented in Java.
Playing on this point, I did notice the new add from Apple playing up the web app capabilities of the iPhone.

Thursday, May 24, 2007

The Pain of Silverlight

I'm starting to write the Stocks application with Silverlight. I installed Visual Studio Orcas. That took forever. I installed the Silverlight extension to VS and the Silverlight 1.1 runtime. That was a lot to install! But that's the hard part, right? Microsoft development tools are great, right?

Uhh, no. Creating a Silverlight project was easy enough. I was surprised to see that VS did not provide any kind of visual designer for Silverlight. It was basically just an XML text editor for creating XAML. I was able to quickly throw together Hello World. I hit the Run/Debug button, and hit my first problem. VS had a problem passing the URL for my Hello World page to Firefox (the default browser on my system.) So I changed my default browser to IE, and tried again. Hey that worked.

I played around with the IntelliSense in the Silverlight/XAML editor. I only saw graphical options. No form elements. I needed a way for a user to input a Stock symbol for my Stock app! So what to do?

There is a visual designer for Silverlight, Expression Blend. So I downloaded that (yet another download) and cranked it up. I created Silverlight project in it. I looked for a text input box in the palette, but didn't see anything I consulted the Help. It indicated that there should be something in the palette for this:


Further exploring Help reinforced this:



The icon I see there sure looks like the Icon in the first screen, near the blue circled 4. But when I use Expression, I only get the TextBlock option. That's also the only option I got when I used IntelliSense in Visual Studio. I'm getting the impression that Silverlight does not currently support any kind of text input!

It appears that I am not alone in this frustration. Luckily that led me to some text controls that somebody else made...

Thursday, April 26, 2007

Opening Up Flex

Interesting news on Adobe open sourcing some of the Flex platform. Here is a cool video from the Scoble Show on the architecture.

For the past couple of years I've thought Flex had some clever concepts behind it, but it was going to be collateral damage in the ascension of AJAX. Why? It was too closed on multiple levels. First, to take advantages of its greatest strengths (continuous, bidirectional communication between client and server) required a proprietary Adobe server. Second, the development tools were also proprietary. It's hard to quickly prototype something in Flex, unless you've already made an investment in it. That is poison for innovation. That's also why so much more innovation occurs in Java and PHP rather than .NET, but I digress.

I don't think the above equation has changed with Adobe's new open source initiatives. However, it seems like maybe they are more concerned with competing with .NET/XAML/SilverLight as browser/desktop hybrid technologies. There might be some potential in that, but I still don't think they have the right strategy for it.

Imagine if you were at a mall and you were hungry. There were several hamburger stands in the mall. The hamburgers were pretty cheap and pretty good, and there was a lot of variety. There was one place (Microsoft) that sold hamburgers and fries, but it was very expensive. Now let's say you wanted to sell hamburgers and fries as well. You could make a hamburger and fries that were in similar quality to the sole hamburger+fries vendor, and maybe charge a little less. Or you could make a hamburger that could stand on its merits to the many hamburger-only places, and charge a price similar to those guys. It's riskier, because there's so much competition, but you could still charge a nice premium for the fries. If people start buying your hamburgers, there's a good chance some will splurge on the fries too.

Adobe has chosen to charge a lot for both the hamburger and the fries, just like Microsoft. It's a safer strategy, but with a lot less upside in my opinion. They have to hope that Apollo will lead them to success, because otherwise my original thought will still hold. Flex will be a casualty of Web 2.0.

Tuesday, February 06, 2007

Vista Uneasiness

There's an open call for Vista questions on MSDN Channel 9. This was posted by Microsoft programmer/Technical Evangelist Charles, so theoretically there will be some answers to the many questions being posted.

On another Vista related topic, Apple is warning iPod users not to use Vista as it may damage their iPod. As Dave Winer points out, that is just ridiculous. Shame on Apple for not having readied an iTunes update to go out BEFORE Vista shipped. They had a huge amount of time to resolve this issue, so clearly they chose not to. I would be shocked if they did not already have an iTunes update ready. They probably had it ready a couple of months ago. They clearly chose not to send this out in advance, since they thought they could create some negative press for Vista at its launch. A look at Apple's "Hot News" shows lots of cherry-picked Vista reviews that slam on it. Just when Apple seemed to be concentrating on electronic devices instead of computers, they start acting like a rejected boyfriend yelling "Don't go out with him, I'm the best guy for you!"

Monday, February 05, 2007

Office 2007

I went to a Microsoft Vista/Office launch event last week. I really wanted to hear about XAML support in Vista/Office. I got to hear a little about it, and see some very cool demos of applications that were built using XAML, but it was all in all short on XAML details. Oh well.

As part of the event, I scored a free retail copy of Office 2007 and Groove. I haven't bothered with Groove, but I went ahead and installed Office 2007 on my laptop. I use Outlook all day at work, and now I have this staring at me:

Notice the "Click here to enable Instant Search". That's not just for the inbox...

Pervasive indeed. Of course the "instant search" being referenced here is Microsoft's Desktop Search. I've played with this in the past, but I liked Google's a lot better. Mostly because it handled Firefox and Thunderbird well, but MS's did not. I now also use Google's Desktop sidebar, and I have some gadgets for things like my calendar, iTunes controller, and some RSS feeds.

So I entertained the idea of switching to the MS version of these things. I realized that the vast majority of desktop searches I do are for Outlook emails. So the MS search probably does that as well as the Google one. Most other searches I do are in code using Eclipse. I did occasionally use GDS to search through legacy code back when I worked with lots of legacy code... Also, I thought if nothing else, perhaps it would use less resources (even though Google Desktop is actually pretty darn efficient.) First problem with this idea is that MS does not offer a sidebar for Windows XP. On Vista they have one, but I've heard nothing about them porting it to Windows XP. Perhaps it is dependent on Aero, who knows.

So I thought, well what about Yahoo's Widget Engine + Microsoft's Desktop Search? Maybe that would be a comparable combination. So I tried out YWE, and found widgets that did all the things that my Google ones were doing. They had a much larger memory footprint on my system, around 2-to-1. They also took up more real estate. I only use the Google sidebar at work, where I have a dual monitor setup, so I am very sensitive about desktop real estate.

Anyways, I was unsatisfied with Yahoo's widgets, so I did not even give MS's search a try. Guess I will have to live with the MS Advert. Or maybe there's some option for turning it off.

One other interesting thing about Outlook 2007. It somehow imported all my RSS feeds. I really don't understand how this happened. I suddenly had a huge RSS folder with all my Google Reader feeds, plus a few random ones from Microsoft. My Google Desktop email widget was then overwhelmed with all these RSS files that it thought were emails received via Outlook. I have no interest in a desktop based RSS reader, as I am quite happy with Google Reader. So I deleted all the RSS that Outlook had created and downloaded. I just wish I knew how it did this. Maybe it detected it from Google Reader, who knows.

Update: One more Office 2007 issue. When I loaded Word 2007, I noticed that my PDF maker buttons were gone. These get installed when you install Adobe Acrobat. I did some searching and supposedly they should be in the "Add-Ins" tab of the ribbon. But I had no Add-Ins tab. Just for kicks, I opened up Acrobat and tried to create a new PDF from a Word document. It crashed Acrobat. I went back to Word 2007, and simply printed my document to the PDF Printer that Acrobat creates. That worked great. I also downloaded Microsoft's PDF maker that is an add-on to Office 2007. It also allowed me to easily create a PDF. So I have no problems creating PDFs, which is good since that is how I like to share documentation at work. Still, I'd like my buttons back. Maybe re-install Acrobat? That's a pain, since I have to re-activate it as well...

Thursday, December 21, 2006

The End of Computer Viruses

Remember back when the news was filled with stories of some new computer virus or worm that was wreaking havoc with corporate networks and home computers all over the country and world? Remember Melissa, I Love You, Code Red, Slammer, Blaster, and MyDoom? Of course you do, it was only two years ago when "malicious" code and "outbreaks" were in the headlines on a regular basis.

Do those days seem long gone? We really haven't seen any kind of "outbreak" in the last two years. The last worm that got any kind of press was Zotob. One can argue that the only reason it got a lot of press was because it hit CNN's website.

So what's happened? Are people much better at keeping their OS updated with the latest security fixes? Do we all have anti-virus software that is also frequently updated? Those things are probably true. You have to give credit to Microsoft, too. The mighty XP Service Pack 2 (and Server 2003 Service Pack 1) plugged a lot of holes. It turned on firewalls and it annoyed the crap out of you if you didn't have the latest patches and an updated anti-virus program always running.

Vista is even more secure than XP-SP2, with Microsoft finally realizing that having every user as an administrator by default is a flawed strategy. However, is the extra security even needed? Maybe it will provide extra deterrence to spyware, but the age of the computer virus appears to be over.

I'm not just saying this because of the lack of notable outbreaks over the last two years. I recently had coffee with a friend of mine who works for a major security software company. He told me the entire emphasis in the company has switched from viruses to spam. It's not nearly as high-profile. There's not going to be a story on CBS about spam making it into your inbox, but that's where the money is now. The only capitalist conclusion is that viruses are dead. Of course to put my money where my mouth is, I should turn off the antivirus software on my computers...

Monday, November 13, 2006

Slideshow Software

This past weekend was Raymond's first birthday party. One of the things I did for Michael's first party was make a slideshow video of the best of the many, many pictures we had taken of Michael. Of course a lot of the pictures were really cute, and it's also interesting to see him grow up in the pictures. I thought I would do the same thing for Raymond.

When I did Michael's slideshow, I used my G5 with the iPhoto/iDVD integration. It's been almost two years since then, and I am no longer a Mac user. I didn't think something as simple as making a slideshow would be require very sophisticated software. I decided to try Windows Photo Story. This was a disaster.

It was easy enough to add photos, edit photos, etc. It was the music that became the first problem. First, you have to place the music in the slideshow manually, i.e. pick which picture to start each song on. There is no fit to music. It default to 5s durations per slide. So you basically have to either pick enough music to take 5s * number of pictures or edit the duration of each slide. If you go the second route, it gets worse. There is no way to change the duration for all the slides or even two slides at a time. That's right. If you wanted to make it 6s per slide and had 200 slides, then you have to change this one at a time on all 200.

But wait, it gets worse. Photo Story incorrectly calculates the length of variable bit rate mp3s. If you're like me and use LAME to rip most of you music, then most of your mp3s are variable bit rate mp3s. So for example, I wanted to include the song "Close to Me" by The Cure. If I look at this song in iTunes, it correctly shows it as being 3:40 long. In Photo Story, it was convinced the song was over 6 minutes long. So in my editing of the slideshow, it showed what slide the song would end on. Of course I picked the next slide to begin the next song, and what did I get? Three minutes of slides with no music behind them.

I thought about trying Windows Movie Maker instead, but then I figured that a more general purpose program for Microsoft would probably not be any better at a specialized task. So at the advice of my wife, I tried using Adobe Photoshop Elements.

We use Picasa for organizing our pictures, but before we switched to using Picasa, we used Adobe Photoshop Album which then became Adobe Photoshop Elements. This was a much better experience. First off, it had the coveted "fit to music" feature. However, it still had issues with vbr mp3s. All was not lost. It allowed me to simply edit how long each song was to play. So I could look at iTunes and see how long each song really was, edit it to play for that much time, hit the fit to music button and I easily had seamless music for my slideshow.

There were some things that were nice about Photo Story. It automatically did the Ken Burns effect, something I liked from using iPhoto. I'm not sure if there was an option for this in APE. I liked Photo Story's UI a little better too.

Now it was time to burn my little slideshow so I could play it at the party. Here is where things were not so good again. APE did not have any kind of DVD burning option. It did have a VCD option, so I thought I would give that a try. First it converted the slideshow to Windows Media Video file (why oh why this option) and then it tried to burn it to a CD. It took forever for it to make the WMV file and then it had an error burning the CD. I couldn't just put in a new CD for it to try again, it had start over. This was really annoying.

So instead of doing the burn VCD option, I decided to just export to WMV so that at least the fruits of the labor would be persistent. Again this took a long time. I had done this on Photo Story and it was much faster (and gave a lot more options on the quality, and it was encoding a slideshow with the aforementioned Ken Burns effect enabled, which would seem like a more complex encoding task.) The encoding did seem to make use of both cores on my computer, keeping one core maxed out and the other at around 70%, but it still took close to an hour to encode a 20 minute video.

Once I had the video, I decided to use Nero to burn it. My only option with a WMV on Nero was a Super VCD, so I went with that. Again, Nero had to decompress the video before burning it, which took awhile. Once it did that, it burned rapidly. The quality was really not that great. The WMV movie looked very good, but the burned result was so-so. I made the WMV at 800x600, the highest quality offered by APE and a much higher resolution than Super VCD supports. Still the encoding-decoding-encoding process is going to be lossy, no way around that.

So all this made me really miss my Mac! It was so nice being able to create the slideshow in iPhoto, then just export it to iDVD. The DVD it would burn was really nice, and of course I could do other fun things like create menus, etc. for my DVD. The WMV creation with Photo Story was definitely a lot faster than the similar step on the Mac, but was painfully slow from the Adobe program. I'm not sure if it was slower than the same thing on the Mac. The other steps were a lot faster than they were on the Mac, but again I'm comparing a first generation G5 Power Mac to a year old, custom built Athlon 64X2. Still, I would have gladly traded a slower encode/burn process for an easier creative process.

Now there are other software packages out there. I used Roxio Easy Media Creator at the recommendation of my brother-in-law. It was an incredibly slow program to use, and seemed very unstable. Perhaps it is better now. Still, it's really disappointing that there's not an easy way to do something like this on Windows.