- Rails, and now Java, in the cloud
- Pair programming at a distance
- Imote2 .Builder Kit makes creating wireless sensor networks a snap
- DSM tool offers high developer productivity
- New Backbase version improves Ajax speed, features
- New Rhapsody version interesting for embedded software and systems
- Free Web-based content management for sites
- TDD with Silverlight
- Alpha Five Platinum looks useful for enterprise development
- Silverlight 2 beta 1 design tools
May 06, 2008 | Comments: (0)
Rails, and now Java, in the cloud
I had a conversation today with David Abramowski, CEO of Morph Labs. We were supposed to talk about how Morph Application Platform, which uses Amazon EC2 and S3 for on-demand cloud computing and storage along with its own routing and provisioning infrastructure, compares with Google App Engine, which uses Google's own cloud infrastructure. That part of the conversation was short, though, because beyond the fact that they're both on-demand cloud computing platforms, the two have nothing in common. I was put in mind of Shakespeare sonnet 130, My mistress' eyes are nothing like the sun.
Google App Engine, as I've discussed previously, currently supports only Python for an implementation language and BigTable for a (join-less) database, with Django and a simpler Python Web framework developed at Google both on offer to structure a Web application. I can't yet speak to what deployment is like on Google App Engine, as I signed up too late to get into the beta.
Morph currently uses Ruby on Rails as its framework, and PostgreSQL as its database. Today's announcement at JavaOne was for a beta release of Morph Application Platform for Java, developed in collaboration with Webtide. Abramowski expects the beta to fill up in a couple of days.
I was actually more interested in the Ruby version of the Morph Application Platform than the Java beta for my own projects. I've signed up for a free developer account. I've run into a snag subscribing to the DevCenter service that will let me access an "AppSpace," but I imagine that will be fixed before long, and I'll be able to say something about the service first-hand. It almost has to be better than the Rails hosting experience I had at TextDrive, now called Joyent.
Meanwhile, two user quotes from the Morph Web site:
"Morph is a great service. Deployment is simple. I give them lots of points for ease of deployment. They can help you scale as they are using Amazon's services on the back end."
- Justin Ball from www.justinball.com
"Morph AppSpace is the best experience we've ever had for Rails deployment. We can scale to as many app servers as we want in minutes, and then scale back as demand changes. We are also happy about the effortless deployment and the amazing client support. The Morph guys were helpful before, during, and after. From now on, we'll be using Morph AppSpace in releasing all our new applications."
-Jim James, www.mytripscrapbook.com
Posted by Martin Heller on May 6, 2008 01:03 PM
May 04, 2008 | Comments: (0)
Pair programming at a distance
One of the drawbacks of working by myself is that I can't usually do pair programming. This is usually offset by the increased concentration and "flow" that comes from being by myself and undisturbed for long periods, but sometimes I just need another pair of eyes to look at my code.
Last Tuesday was one of those times. No sooner had I published my little blog entry on "clans" than I started to hear bug reports that traced back to some ActiveX code I'd written for PC Pitstop. It wasn't straightforward: two people reported "IE aborted in an unusual manner" errors, but over 8,000 people had run it successfully. I'd missed a rare case.
After looking at the relevant code until my eyes started to cross, I gave Dave Methvin a call. "Dave, do you have a minute? I think that I'm insufficiently paranoid to fix this bug."
Each in our separate offices in different states, we opened up the same Visual Studio project checked out from our version control repository, and looked at the same code. When either of us saw something we didn't understand, we'd point the other at the line of code. It was almost like pair programming, but without the physical presence. In some ways it was better, because we each had our own mouse, keyboard, and screen.
"Look at line 129. What happens if that pointer is null?"
"How could it be null? It's set in line 128."
"Suppose there were no items in the list. It's unlikely, but it's still possible."
"You're right. I'll add an 'if' test right there. OK, it compiles and I've checked it in: update your copy and have a look."
We went on like that for about an hour, and convinced ourselves we'd found every possible problem in what was, after all, not very much code. Then I rebuilt the control, ran all my regression tests, and promoted the control to production.
The ending was happy: after that, there were no more reported "IE aborted" errors, even from the people who had reported them before.
Do you have your own ways of collaborating at a distance?
Posted by Martin Heller on May 4, 2008 12:01 PM
April 25, 2008 | Comments: (0)
Imote2 .Builder Kit makes creating wireless sensor networks a snap
I spent several hours today exploring the Crossbow Imote2 .Builder Kit, a "complete development environment for high performance wireless sensor networking (WSN) applications leveraging the Microsoft .NET Framework," as the company describes it.
(I'd never say "leveraging" and "Microsoft" in the same sentence myself if I could avoid it, because of Microsoft's rather checkered legal history of "leveraging" its near-monopoly -- but oops, I did it again. Back to Crossbow.)
The Imote2 .Builder Kit sells for $990 in the U.S. in small quantities. It includes three Imote2 processor boards, two Imote2 sensor boards, two battery boards, batteries, a USB cable, and software on CD-ROM. Obviously, individual boards are cheaper, especially in quantity.
Why so many boards? The processor boards also have radios, and can talk to each other using the 802.15.4 protocol. The Imote2 has an XScale CPU @ [13–416] MHz and a DSP, 256kB SRAM, 32 MB of SDRAM and 32 MB of FLASH, and baker's dozen of I/O ports of various stripes in addition to the radio and antenna. It has two pairs of connectors for sensor boards, a set for a "basic sensor board" on one side and an "advanced sensor board" on the other side. The flash image includes the .NET Micro Framework.
The sensor boards that come with the kit are of the basic variety, but I guess that refers to the connector they use: they actually have a 3d Accelerometer, an advanced temp/humidity sensor, a light sensor and 4 channel A/D.
The Imote2 software is an add-on to Microsoft Visual Studio 2005 (yes, 2005, not 2008) and .NET Micro Framework 2.0 (yes, 2.0, not 2.5). A 90-day trial version of Visual Studio 2005 Professional is provided with the kit.
I found the programming model for the Imote2 easy to understand, as I was already fluent in C# and familiar with Visual Studio 2005 and the .NET Micro Framework. I think I could build wireless sensor network applications with this kit very quickly: in days to weeks, depending on the complexity of the application.
The processors seem plenty fast. Debugging is trivially easy. The only trouble I had with the kit was a minor but annoying deployment issue: sometimes a board would stop taking downloads, and code deployment from Visual Studio would fail. I was always able to recover from this by stopping all the software on the PC that talked to the board, disconnecting the board from the USB bus, reconnecting and resetting the board, and restarting the software.
According to the company, this is most likely a problem with the Microsoft USBSPOT driver. Once I had a board programmed, it would be fine.
The picture at the top of this article is the hardware configuration for the most advanced demo in the kit, a star network in which two battery-powered CPU/sensor stacks transmit accelerometer data, one CPU board receives the signals and sends them over the USB cable, and the PC plots the live output, as shown at left.
Overall, this is a very impressive kit. There's more information at the Crossbow site.
Posted by Martin Heller on April 25, 2008 12:10 PM
April 17, 2008 | Comments: (0)
DSM tool offers high developer productivity
I should have known better than to write about a vendor demo, as I did on Monday for Telelogic Rhapsody. Now everybody wants to give me a demo. As the organ-grinder's song from The Threepenny Opera goes, "Oh, the line forms at the right, dears, now that Mackie's back in town."
This morning's demo was a Web meeting, since the vendor, MetaCase, is in Jyväskylä, Finland. My Plantronics DSP headset worked well, the voice quality was good, and the VoIP delay wasn't all that bad as long as I didn't interrupt Dr. Juha-Pekka Tolvanen, CEO of MetaCase.
Dr. Tolvanen's starting point is the proposition that Domain-Specific Modeling (DSM) offers something like a 7x productivity improvement over C++ and Java, even when those languages are enhanced by UML modeling like Telelogic's. He cited several customer quotes in support of that: Panasonic experienced a "5-fold productivity increase when compared to standard development methods"; Nokia reported module development decreasing from 2 weeks to 1 day, i.e. a 10x gain. Other customer quotes supported different perceived values: EADS cited the improved quality of generated code because of the design rules; DENSO claimed "MetaEdit+ has eliminated our need to outsource software development activities."
Dr. Tolvanen showed me a demo of a DSM for building Enterprise applications for Nokia smart phones running on Symbian (see figure at left). This particular application does conference registration. The underlying DSM knows about the capabilities and limitations of Symbian, and the code generator emits Python.
Where does the high productivity come in? Only one or two hard-core developers in the company work on the code generation; most developers (hundreds at Nokia, if I understood correctly) work on applications in a high-level design view like the diagram editor shown in the figure, or an alternative view like a matrix or table.
I've played around with Microsoft's DSL tools, and found them to require a lot of work -- weeks -- to build an effective model. I assumed that was the state of the art. Apparently not.
Here's the money quote, from Laurent Safa of Matsushita, speaking about MetaEdit+:
"I could define a domain-specific language in about six hours -- design, testing and one failed trial included."
MetaCase can be reached by email at info@metacase.com and on the Web at www.metacase.com.
Posted by Martin Heller on April 17, 2008 12:05 PM
April 16, 2008 | Comments: (0)
New Backbase version improves Ajax speed, features
Backbase introduced Enterprise Ajax 4.2 today. According to the company, the new framework version offers developers more technologies, allowing for choices between rich and lightweight Ajax functionality, between CSS and XPath, between JavaScript and tag-based development, between JSON and XML, between native widgets and 3rd party widgets and between online and offline RIAs.
The principal improvements to this version are:
- New hierarchical data binding
- New Data Services module
- Support for lightweight Ajax
- New and improved widgets
- Performance enhancements
A more complete discussion of the new features can be found in Jep Castelein's blog. The offline RIA feature is basically support for Adobe AIR (see sample at left). One of the more ambitious new widgets is a Rich Text Editor.
Speed improvements have been made in all three phases of Ajax operation: load, build, and runtime. The Enterprise Ajax 4.2 product has also been tested against beta 1 of Internet Explorer 8, Opera 9.5 beta, and nightly builds of Safari 3 and Firefox 3.
A Community License for development and deployment on up to 2 server-CPUs is free; this version can be downloaded today. A commercial license is available to businesses needing more CPUs or professional support and software maintenance. A JSF Edition (optimized for Java Server Faces) will be available next month.
Posted by Martin Heller on April 16, 2008 06:30 AM
April 14, 2008 | Comments: (0)
New Rhapsody version interesting for embedded software and systems
Last week I took advantage of the fact that Telelogic has a facility here in Andover to get an in-person preview demonstration of Rhapsody 7.2, the new version of their model-driven development product, which is being announced today. I should actually say "Telelogic, an IBM Company," given the recent acquisition: please take that as read. The signage at the facility still just said "Telelogic."
At the beginning of the demo, I sat there thinking "All this modeling junk gets in the way. Let me at the code." Then we got to the point of doing testing on animated UML diagrams synchronized with the compiled code that had been generated underneath, and I started to be impressed. When I realized that many common system-dependent constructs (a timer, a button, ...) had been abstracted and that the entire project could be switched to a different target operating system (there were over a dozen) with a menu pick, I was really impressed.
Some of what's new in version 7.2 extends the capabilities that Rhapsody already had for C++ to plain C. That makes sense for many embedded systems. Other new features are aimed at systems designers, and provide a SysML virtual prototyping facility.
Here's the full release:
Telelogic Announces Enhancements to Rhapsody Model Driven Development Solution including New Eclipse Plug-in
New capabilities facilitate mid-stream adoption of Model Driven Development, and help systems engineers validate technical, real-time or embedded systems designs earlier
MALMO, Sweden and Irvine, California Telelogic, An IBM Company (NYSE: IBM) today announced enhancements to its market leading Model Driven Development™ (MDD™) solution, Telelogic Rhapsody®. The new features decrease time-to-market through the support of MDD best practices that do not disrupt current project workflow, and provide system engineers a way to leverage advanced visualization and prototyping capabilities to easily validate design correctness and effectively communicate intended design behavior.
Today’s announcements include:
- The introduction of Rhapsody 7.2, a new version of the company’s flagship Model-Driven Development solution that provides breakthroughs in systems engineering, software asset re-use, and automated documentation and testing;
- The new Telelogic Rhapsody Eclipse Plug-in, a version of Rhapsody integrated within the Eclipse open source development environment, scheduled for release this summer; Rhapsody Eclipse Plug-in allows embedded device and real-time system software developers to continue working on existing projects at the code level while gradually adopting MDD within a single familiar development environment.
“Leveraging existing code from previous projects is a significant part of most embedded system development efforts and for teams implementing model driven development approaches the need to efficiently automate the transfer of design intent among system models and software code is of key importance,” said Matt Volckmann, Senior Analyst/Program Manager with Venture Development Corporation’s (VDC) Embedded Software practice. “By offering several new features within Rhapsody 7.2 that allow for more integrated methods of code design and model driven development, Telelogic continues its strong history of product innovation and clearly endeavors to maintain its leadership position within the embedded software and system modeling tools market,” said Volckmann. “VDC’s most recent analysis of the embedded standards-based software and system modeling tools ranked Telelogic as the market share leader on a revenue basis”.
New Features Increase Automation; Open MDD to C Developers and Integrated Eclipse Development
Building on Telelogic’s “Code Respect” initiative, Rhapsody now allows C developers to leverage the benefits of MDD while preserving the code structure, functionality and order. Rhapsody further offers the unique ability to reverse-engineer existing code and then forward-generate identical code. This allows software developers to use the right tools for the job and work at either the code or model level.
With Rhapsody’s Eclipse Plug-in, software developers can streamline their workflow and increase efficiencies by taking advantage of Eclipse’s powerful code editing capabilities and gain the benefits of working with an MDD solution all within the same development environment. Using Rhapsody’s strong reverse engineering and code synchronization capabilities, Rhapsody’s Eclipse Plug-in allows developers to work on the code or model within one complete development environment. Working in this manner, the code and model remain in synch and it is easy to navigate from one to the other. Developers can leverage debugging at the code or model level using the Eclipse debugger and Rhapsody’s animation with the ability to synchronize breakpoints between them.
IDT, a company that specializes in Automated Software Testing (www.idtus.com) recently conducted a one year Software Testing survey which concluded that among other statistics, some 50 - 75 percent of the software development lifecycle is spent on testing related efforts. With recent enhancements to Rhapsody TestConductor™, an integrated model-based testing solution, C developers can now detect and eliminate software defects earlier in the development cycle when they are less costly to fix. Rhapsody TestConductor facilitates unit and integration testing by automating many manual test procedures and decreasing the time needed for testing. It executes tests in single or batch mode, determines the success of the test, and creates a report, enabling developers to collaborate more easily and bring products to market more rapidly. Rhapsody TestConductor is based on the Unified Modeling Language™ (UML®) Testing Profile, enabling tests to be easily linked to design requirements captured in Rhapsody or in Requirements Management products such as market leading Telelogic DOORS®.
“Model Driven Development techniques help engineers become more efficient with the potentially time-consuming tasks of test creation and execution, as well as document creation,” said Greg Sikes, Executive Vice President, Modeling Solutions, Telelogic, An IBM Company. “With Rhapsody, engineers immediately gain a better understanding of their software and systems architecture and functionality, while operating in a more open and flexible environment with improved team communication.”
Systems Engineering Advancements
With the enhancements announced today, Rhapsody is the first Systems Modeling Language™ (SysML™) solution that will provide systems engineers with virtual prototyping capabilities using integrated graphical panels to rapidly visualize and validate a user mock-up early in the development cycle. Additionally, the graphical panels will allow engineers to easily modify, monitor and analyze data during simulation making it easier to ensure the design is correct. Rhapsody 7.2 also offers SysML Requirements Tables, Allocation Tables, and N-2 matrices, enabling large quantities of information to be easily organized, customized, and viewed. Improved model consistency and checking functionality further allows software developers to create their own and domain-specific checks, improving design quality and integrity.
Rhapsody 7.2 will be available in April, 2008. The Rhapsody Eclipse Plug-in and graphical panels will be available in Summer 2008.
For more information, visit http://www-306.ibm.com/software/rational/welcome/telelogic/
© 2008 Telelogic AB. Telelogic Rhapsody and Telelogic DOORS are registered trademarks of Telelogic. Rhapsody TestConductor is a trademark of Telelogic. Other trademarks are the properties of their respective holders.
###
Posted by Martin Heller on April 14, 2008 12:00 AM
April 07, 2008 | Comments: (0)
Free Web-based content management for sites
Let's start with the press release:
On Tuesday, April 8, Stateless Systems will launch a private beta of CushyCMS, a fast, simple and free Content Management System that aims to make Web designers’ lives a lot more comfortable.
Unlike other CMSs, Web designers can implement Cushy in minutes, without any hosting requirements or software installation, and it is easy enough for non-technical content editors to use without any training or programming skills. Web designers can give content editors access to separate pages or parts of a page at a granular level (headings, images, sidebars, etc), enabling them to produce standards-compliant, search engine-friendly content all in the browser. With Cushy, Web designers spend less time managing content changes, freeing them to focus on more important development projects. And did we mention we're giving it away?
To see how Cushy can help you edit a site in under three minutes, please click here: http://www.statelesssystems.com/cushy/
My first question for Stateless Systems was "What's the business model?" Co-Founder Guy King said:
Business model is in the future to introduce paid monthly plans. Rather then restricting existing users we plan on allowing extra features to paying subscribers such as the ability for them to brand the interface and use a custom domain. Other features will be largely based on the user feedback we receive plus the time to develop.
In other words, what you see now will always be free; added value will cost some money.
I tried the system out briefly myself, and it worked very nicely. I can see this being useful for allowing a content editor to change specific parts of a site without allowing them to mess up the overall design. In many situations you might do this with blogging software, but this is a much lighter-weight solution.
I created a test page using my standard HTML template on my personal site, then went through the process of tying that page to CushyCMS. My personal site already had FTP access set up the way CushyCMS expected to see it.
Here is the CushyCMS Web control panel (click on the image to see a larger version):
I went through the drill of adding classes and titles to the two fields I wanted to make editable, and was able to edit the fields in CushyCMS:
After publishing my changes, the HTML looked like this:
And finally, the page displayed like this:
The fact is, I didn't use half of the capabilities of CushyCMS in this little test. It can also edit image tags, for example, and both client-side and server-side script. Of course, the more of the site you expose, the more dangerous changes made this way can be.
The first 150 people to visit www.cushycms.com and enter the code BETA on April 8 will be granted early access. Cushy will be launched to the public on April 15.
Posted by Martin Heller on April 7, 2008 10:00 PM
March 28, 2008 | Comments: (0)
Microsoft has not only released the source code for the Silverlight controls, they have released almost 2,000 of their own unit tests -- and a unit testing framework that works with Silverlight.
More on Brad Abrams' blog...
I think this is seriously cool. What do you think?
Posted by Martin Heller on March 28, 2008 02:25 PM
March 18, 2008 | Comments: (0)
Alpha Five Platinum looks useful for enterprise development
I mentioned last Thursday that I'd had a visit and product demo from Richard Rabins of Alpha Software. I was initially hesitant to take this meeting at all, because I remembered Alpha Five from the 1980s: it was essentially an easy-to-use variation on dBase II. I couldn't imagine any of my readers being interested in a product that depends on DBF files, no matter how easy it is for the developer.
What changed my mind is that Alpha Five Platinum, a.k.a. Alpha Five Version 9, supports working with SQL databases from the desktop, using active-link tables. For that matter, it can perform heterogeneous joins, with the relations between the heterogeneous tables enforced on the client. It uses optimistic record locking when working with active-link tables to avoid holding unnecessary server locks, and has a query optimizer that decides what filtering and sorting can be done on the server.
The quick overview of the Alpha Five product, according to the company, is that it is "software for building desktop and web database applications - applications that include report writing, intelligent email, web connectivity, backend database access, data browsers and security." The company goes on to say:
Alpha Five is "beginner friendly." You can define and manage databases — and create complete applications without programming. With Alpha Five's Action Scripting, Genies, and point-and-click interface you focus on building your solution, not on the programming details.
Professional developers benefit from Alpha Five's Xbasic language. You can create user defined functions and integrate external software libraries. Thousands of functions are included.
My enthusiasm for learning yet another computer language was extremely limited, but Xbasic and Xdialog both turned out to be easy and well-documented. I was skeptical about the performance of the Alpha Five application server for Web applications, but it was perfectly fine in my limited tests -- and Alpha has introduced a clustered server for people who need extra performance, scalability, and reliability. I was skeptical about how Alpha Five could possibly support Web 2.0 applications and still be easy for developers, but its new Ajax support easily integrates with Xbasic.
I haven't done extensive development with Alpha Five Platinum at this point, but I have tested the beta enough to uncover a few small bugs in the newest demos, which the Alpha developers fixed overnight. On a weekend, yet.
I'd say at this point that the Alpha Five Platinum beta is good enough to be worth some evaluation time. Start with the older Alpha Five product overview to get a feel for the product; go on to the Alpha Five Platinum tour to find out about the new version; read about what's new to get the details; watch the videos embedded in the "what's new" material; read the blogs for Richard's inside tips; and sign up to download a beta trial.
Posted by Martin Heller on March 18, 2008 01:40 PM
March 07, 2008 | Comments: (0)
Silverlight 2 beta 1 design tools
Yesterday I explained how to get started with Microsoft Silverlight 2 beta 1 if you're a developer. If you're a designer rather than a developer, of if you're a developer who does some UI design and prefers to drag and drop controls rather than writing XAML, you'll need to download and install at least one more tool: the Microsoft Expression Blend 2.5 March 2008 Preview.
Why is that? Given how good the WPF Designer is in Visual Studio 2008 (VS08), why should you need Expression Blend?
The answer is that the Silverlight 2.0 tools for VS08 really are in a Beta 1 state. Yes, the WPF Designer opens for a Silverlight 2 project in VS08; yes, the Silverlight 2 controls appear in the toolbox. But no, you can't drop them on the design surface, at least not yet: the mouse cursor turns into the universal "not allowed" symbol if you try, as shown in the figure below. On the other hand, you can type in XAML, see error messages when it's wrong, and see the UI displayed when it's correct.
You can drag and drop controls onto the Silverlight 2.0 design surface with Expression Blend 2.5, although the documentation warns that this part of the preview isn't up to the standards of the Expression Blend 2.0, of which it is a superset. As long as you're downloading Expression tools, you may also want the balance of the Expression Studio 2.0 beta: Expression Web, Expression Design, Expression Media, and Expression Encoder.
I'm happy to report that the Expression 2.0 betas and the 2.5 preview do not overwrite or interfere with production copies of Expression 1.0. So far, what I have seen of the betas and preview is mostly good, but I like the safety of being able to use release-quality tools when necessary.
Posted by Martin Heller on March 7, 2008 01:00 PM
March 06, 2008 | Comments: (0)
Getting started with the Silverlight 2 beta
I'm up to my elbows in the Silverlight 2 beta, the release of which Paul Krill reported on here. I don't have much to say about it yet, but I thought I'd share the best way to get started developing with this version, since I wandered into and had to find my way out of several blind alleys myself.
Assuming that you already have Visual Studio 2008 installed, then start by downloading the Microsoft Silverlight Tools Beta 1 for Visual Studio 2008. If you have any previous versions of the Silverlight tools or SDK installed, go to Add/Remove programs and remove them.
Then run the silverlight_chainer.exe you just downloaded. It'll either tell you that you have something else to remove, tell you that you're missing a prerequisite, or tell you what it's going to do. If you need to make adjustments and run it again, do so. Once it runs, expect it to grind away on its own through a coffee or tea break.
The beta doesn't register its help collection for use with Visual Studio. You can find the instructions by opening the Silverlight SDK 2.0 Welcome page and then opening the Readme file from there. The short version, however is to open Visual Studio 2008, pick Help|Index, make sure the index view is unfiltered, and look for Collection Manager. When you find it, double-click on the Help item below Collection Manager, and wait a minute or two while it grinds again. When it finally comes up, scroll down to the bottom of the page and check the box beside "Microsoft Silverlight 2 SDK Documentation" and click Update VSCC.
Then you'll have to OK some frustrating dialogs and let them close Visual Studio and Document Explorer. After they've closed, reopen them. When you bring up Help|Contents, it'll grind through yet another coffee or tea break, but eventually it'll open with Microsoft Silverlight 2 SDK near the bottom of the contents.
You can also find the Silverlight documentation online on MSDN and additional tutorials, samples, and videos at Silverlight.net.
Posted by Martin Heller on March 6, 2008 02:14 PM
March 05, 2008 | Comments: (0)
I mentioned the 2/20 LINQ webinar given by Joseph Albahari in advance of its live presentation, but some of you didn't hear about it until the weekly newsletter went out on 2/21. (That's what the RSS feed is for, folks.) A few of you even asked for me to arrange a reprise or a video. Of course, I have nothing whatsoever to do with this, but the good folks at O'Reilly have obliged. The hype is theirs, not mine:
If you missed out on the recent O'Reilly Webinar, "Writing LINQ Queries with LINQPad," you can still learn the ins-and-outs of using LINQPad directly from author Joseph Albahari. LINQPad is the querying tool that's sweeping the .NET world. This is a must-view webinar for anyone working in C# 3.0 and Framework 3.5.
Download and watch the webinar video (43 minutes, .mov file, 50 MB) here:
http://downloads.oreilly.com/oreilly/videos/oreilly-linq-webinar.mov
You can also join authors Joseph and Ben Albahari in our C# 3.0 in a Nutshell Forum to continue the conversation.
Recent posts include:
- Table Of Contents In Pdf
- Linqpad Customization
- Linqpad Open Source?
- Sql Optimization
- Intellisense
- Linqpad Case Sensitivity
Join the discussion here:
Enjoy.
Posted by Martin Heller on March 5, 2008 08:27 AM
February 27, 2008 | Comments: (0)
An old Visual Studio problem rears its ugly head
I encountered a Visual Studio 2008 bug this morning that had me baffled. The short summary is that, in a C++ source file with multiple #ifdef blocks, only the first block was properly displaying in gray for the deliberately undefined symbol. Subsequent blocks were showing up in color, even though they used the same symbol as the first block. In addition, mouse hovers didn't display values after a certain point in the file. The project built fine, however.
It was a weird enough symptom that I emailed someone on the Visual Studio team about it to ask if it was a known problem. He was at the launch event, but he forwarded my email to a few other people, who forwarded it to a few more people, until finally someone responded:
Hi Martin,
The most probable cause is one of two things: you are using this file in a solution where it is included by multiple projects/files with different macro contexts. In VS2008 we can only interpret the file once in one context (something we’ve fixed in the next release). The other reason is that you have not specified the full set of macros but I doubt it since you say it builds. If you can isolate this into a small repro, we’d be happy to look at it.
It wasn't either of those problems. When I went to try to isolate a minimum set of files to reproduce the problem, however, I was surprised by what I found. As I wrote back:
I’ve isolated the problem. I’ve also fixed it for now.
In the original ATL project, the CPP file correctly showed the first block that had been #ifdef’d out in gray, but showed subsequent blocks #ifdef’d out using the same name in color. Also, every symbol below a certain point was treated as undefined, even very common symbols like S_OK.
I created a new ATL project, added the problematic CPP file to it, and brought it up for editing. Once the IDE had processed the file, and before I tried to compile, the #ifdef’d blocks all displayed in gray as I expected, and all expected symbol values displayed properly on a mouse hover.
When I switched back to the original project, I immediately saw a message in the output box on the order of “can’t open source database,” along with some irrelevant suggestion about it being open in another project. (If this message was there before, I didn’t notice it.) I closed devenv, deleted the .NCB file for the solution, and reopened the solution. After a pause, all was well.
I remember corrupted .NCB files being a recurrent, nagging problem in Visual Studio .NET, but I thought that was behind us. Apparently it’s still an issue in VS08.
The response was good news:
Indeed, the frequency of the problem has been greatly reduced but given the difficulty in reproducing those problems, we can never be sure to remove it completely. You’ll be happy to know that our next release has completely overhauled this architecture and we’ll be able to safely say that this type of thing won’t ever occur again.
Needless to say, I'm looking forward to Visual Studio 2008 SP1.
Posted by Martin Heller on February 27, 2008 11:30 AM
February 25, 2008 | Comments: (0)
Leaving Windows 9x behind to move forward
Last August I wrote about maintaining backward compatibility to versions of Windows from 15 years ago while supporting new features of Windows Vista. Several of you had trouble believing I would continue to go to all that trouble.
I have finally given up, although not voluntarily.
As it happens, I had to merge some code from a program into an ActiveX control. The program is compiled with Visual Studio 2005 (VS05), maintained by another developer, and runs on Windows 2000, XP, 2003 and Vista. We haven't yet tested it on Windows Server 2008.
The ActiveX control was compiled with Visual Studio .NET 2003 (VS03) and ran on Windows 95 and up. When I tried adding the new code and compiling in VS03, it was clear that I'd have my work cut out trying to remove all the calls to new library functions to get it to compile without errors. Then I'd have to face updating my branched code every time the developer did a maintenance release. There was too much code for me to go the conditional compilation route and get this working in a reasonable amount of time.
I tried upgrading the project to Visual Studio 2008 (VS08). The new code compiled without warnings, but my old code had bunches of errors and warnings. Fortunately, the errors were all from duplicate definitions, and it was easy enough to remove the inline definitions that were now coming from the default SDK. The warnings were mostly to get me to update to "safe" string functions: that can wait until I have time, since this code has been heavily tested over many years.
I got the new code working and tied into the proper ActiveX interfaces, and started testing it on my array of Windows computers and virtual PC images. When I got to the Windows 98 SE Virtual PC, I discovered that the control wouldn't load.
I explored the DLL with "depends" and discovered that the new code uses five kernel functions that weren't introduced until Windows 2000. Using my standard techniques, I wrote a dynaload class for those five functions and modified the code to use them.
The control still wouldn't load in Windows 98.
To make a long story (think days of failed experiments) short, we discovered that VS08 no longer targets Windows 9x. Apparently VS05 doesn't, either. There are a couple of kernel functions called by the C++ libraries that require later versions of Windows. In order to get this control built in VS08 to work on Windows 9x, I'd have to make custom modifications to the C++ libraries and link to them. I'd also have to reapply my changes every time Microsoft updated the libraries.
That was the last straw for me. I reverted to the version of the control without the last group of dynaloads, and I now plan to leave Windows 9x behind. There's no real business reason to keep supporting it, and now there would substantial costs in attempting to do so.
I might wish that Microsoft had continued to target Windows 9x in VS05 and VS08, but I can't really blame them. They, too, need to leave the past behind in order to move forward.
Posted by Martin Heller on February 25, 2008 01:12 PM
February 17, 2008 | Comments: (0)
Readers of this blog might be interested in an upcoming O'Reilly Webinar on LINQPad. From the official announcement:
"Writing LINQ Queries with LINQPad — Happening Wednesday, February 20th at 2:00pm PST. In this webinar, Joseph Albahari, author of C# 3.0 in a Nutshell, the LINQ Pocket Reference, and the upcoming C# 3.0 Pocket Reference, provides an introduction and brief tutorial to LINQPad, the querying tool that's sweeping the .NET world. This is a must-attend webinar for anyone working in C# 3.0 and .NET Framework 3.5. Learn more."
Posted by Martin Heller on February 17, 2008 02:41 PM
February 12, 2008 | Comments: (0)
You can't know how much it excites me to hear that Microsoft is designing yet another computer language. Why, what a novel idea! It isn't like there were hundreds of new computer languages designed every year. If that were the case, there would be conferences about the subject. Oh, wait: that's how we first heard about this one, at the Lang .NET conference on the Redmond campus.
But it's a declarative language! Ah, yes: that eliminates maybe half of the languages proposed every year. "Declarative" is an awfully broad term, with multiple meanings. Standard ML is considered declarative, and so are its derivatives OCAML and F#.
Prolog and rule-based AI systems are considered declarative. You declare the rules: the logic engine decides how to run them. SQL queries are declarative: you describe the data you want to see, and the query optimizer figures out how to get it out of the database.
Haskell is considered declarative as well as functional, not to mention that it has monads. Don't ask me to explain monads in the context of functional programming: it's not a short answer. The "Summarizing Proust" contest isn't on today, thank you very much.
Back to declarative languages. XAML is a declarative language for the domain of graphics. It was designed as an extension of XML. It's such an expressive language that Charlie Petzold, arguably one of XAMLs most vocal proponents, built himself a alternative to Microsoft's XAMLPad called XAML Cruncher, so that he could "interactively type XAML code and see the object it creates." In Visual Studio 2008, Microsoft included a bidirectional, split-screen XAML designer, so that you can create XAML by dragging and dropping objects and by typing XAML code, with the ability to freely switch back and forth between the two methods. I freely admit to needing these tools; I can almost never write XAML that will display correctly on the first try.
Watching the Connected Systems Division (CSD) at Microsoft over the years, it has been clear that they have been on a code-reduction path. Why? SOAP was invented by Don Box and others to be an XML-based lingua franca for communication among disparate computer applications and systems. The functional deficiencies of SOAP were addressed by the WS-* series of standards, to give it security, authentication, reliability, and so on.
All of those standards made it harder to write conformant client and server code, raising the complexity by orders of magnitude. CSD engaged in a series of efforts to counter this by raising the level of abstraction for programmers developing connected systems. Web Services Enhancements (WSE) for Microsoft .NET cut the amount of code you needed to write drastically, but not enough for mere mortals.
Windows Communication Foundation (WCF) brought the amount of code down by another order of magnitude or so, partly by using attributes in code and by depending on XML-based configuration files. Attributes are of course one approach to making a language more declarative, and configuration files are another.
Looking at WCF in Visual Studio 2008, it seems like the classes and attributes and design tools are fairly mature, but are still built on top of the general-purpose C# language and the .NET Framework. I wouldn't be at all surprised to hear that the CSD architects decided to try starting over from scratch with a new language that would raise the level of abstraction and reduce the amount of code that needed to be written for a connected application by another order of magnitude. But it's not like nobody else has ever tried that: there's a robust research community working on that kind of problem.
I can guess about the process they're going through, but I can't guess what the outcome will be. It's an emergent experiment, and there are a dozen ways it could go. Nevertheless the criteria are kind of obvious:
High level of abstraction? Check.
Regularity of syntax? Check.
Easy to write? Check.
Easy to read and understand? Check.
Suitable for connection to disparate systems over multiple protocols? Check.
Posted by Martin Heller on February 12, 2008 07:35 AM
February 04, 2008 | Comments: (0)
Debugging into the .NET Library Source
I was hesitant to add any preview plug-ins or apply any patches to Visual Studio 2008 until I'd finished my review, but now that it's done I've gone a little wild. I have installed the ASP.NET 3.5 Extensions, the ADO.NET Entity Framework Tools Dec 07 Preview, the Silverlight Tools, Volta, and the patches needed for the EF Tools and for debugging into the .NET Library source code.
The instructions for enabling Visual Studio 2008 to debug into the .NET Library source code are on Shawn Burke's blog. The only part that gave me any trouble was installing the Hotfix, and even that didn't take long.
The EULA that comes up the first time you try to view Library source code is a little more specific than what was originally announced: it does not give you a license to view the source if you're building a competing product for a non-Microsoft OS. That addresses the "patent troll" issue that Dave Rosenberg raised last October, and which I discussed at the time.
It's worth understanding which assemblies are currently available for symbol/source loading. Shawn lists them in his blog entry:
- Mscorlib.DLL
- System.DLL
- System.Data.DLL
- System.Drawing.DLL
- System.Web.DLL
- System.Web.Extensions.DLL
- System.Windows.Forms.DLL
- System.XML.DLL
- WPF (UIAutomation*.dll, System.Windows.DLL, System.Printing.DLL, System.Speech.DLL, WindowsBase.DLL, WindowsFormsIntegration.DLL, Presentation*.dll, some others)
- Microsoft.VisualBasic.DLL
More assemblies will be added in the future.
There's a new MSDN forum to discuss the Reference Source Server. There are already 27 questions, but I'm sorry to say that many of them are just rehashes of FAQs that were already answered in Shawn's blog.
Posted by Martin Heller on February 4, 2008 08:11 AM
January 30, 2008 | Comments: (0)
A Working Distinct LINQ Query in C#
As I mentioned Monday and in my Visual Studio 2008 review, I've been struggling with the finer points of LINQ queries. In a talkback comment to my review, "CSharper" pointed me at one solution to finding the LINQ equivalent of a SQL "SELECT DISTINCT" query: tack on a LINQ .Distinct() method call to the query, which needs to be enclosed in parentheses.
That worked, but it destroyed the sort order created by a previous orderby clause. Obviously, I also had to learn to use the LINQ .OrderBy() method so that I could apply the sort after the sift. That was a little harder, since .OrderBy() takes a lambda expression, and I wasn't yet familiar with that new C# syntax.
Nevertheless, I got it working. It isn't beautiful, but this is really version 1.0 of LINQ.
var qAV = (from ai in db.AppInfos join acai in db.AppCatAIs on ai.Prodid equals acai.Prodid join ac in db.AppCategories on acai.acatid equals ac.acatid where ac.Category == category1 || ac.Category == category2 select ai) .Distinct() .OrderBy(n => n.ProductName);
Posted by Martin Heller on January 30, 2008 08:18 AM
January 28, 2008 | Comments: (0)
When I was writing my review of Visual Studio 2008, I built a little console application that generated JavaScript data structures from a SQL Server 2000 database in C#, using LINQ to SQL. As I mentioned in the review, I never did figure out how to write the LINQ equivalent of a SQL "SELECT DISTINCT" query.
In reading the LINQ section of C# 3.0 in a Nutshell*, I have come to realize that the LINQ code I wrote for that little project was basically SQL translated literally to LINQ. I might have done it quite differently if I had been thinking directly in LINQ.
Here's the meat of the program:
using(pcpDataClasses1DataContext db=new pcpDataClasses1DataContext())
{
//Generate AVInfo
string category1 = "AntiVirus";
string category2 = "AntiSpyware";
bool init = false;
var qAV = from ai in db.AppInfos
join acai in db.AppCatAIs on ai.Prodid equals acai.Prodid
join ac in db.AppCategories on acai.acatid equals ac.acatid
where ac.Category == category1 || ac.Category== category2
orderby ai.ProductName
select ai;
//Beginning of JS structure
Console.WriteLine("var AMInfo = [");
//Per-item entries
string fmt = "{{\nProdid: {0},\nName: \"{1}\",\nInst: [ {2} ],\nRoot: \"{3}\",\nSigs: \"{4}\",\nInit: {5},\nNeedRoot: {6}\n}}";
foreach (AppInfo a in qAV)
{
if (init)
Console.Write(",");
Console.WriteLine(fmt, a.Prodid, a.ProductName, a.InstPattern, a.Root, a.Sigs,
String.IsNullOrEmpty(a.InitMethod) ? "null" : a.InitMethod, a.NeedRoot.ToString().ToLower());
if (!init)
init = true;
}
//finish it off
Console.WriteLine("]");
}
The O-R diagram for the database tables being queried is here.
How would you rewrite this to (1) emit only distinct items, and (2) be more like idiomatic LINQ and less like translated SQL?
*In my posting on Books for Learning C# 3.0 I said that I didn't yet have a copy of the C# 3.0 Nutshell book. I'm embarrassed to admit that I did have it: it was hiding in a big stack of books.
Posted by Martin Heller on January 28, 2008 08:39 AM
January 24, 2008 | Comments: (0)
Visual WebGui: Easier, More Secure Web 2.0 Apps?
The basic goal of Web 2.0 applications is to provide the user experience of a desktop application on the Web. As we all know from using Ajax and RIA applications, it's possible to get fairly close. As developers who have built such applications know, it can be hard to get them right.
Visual WebGui, from Gizmox of Israel, attempts to make developing Web 2.0 applications just like developing Windows Forms applications. It's currently a free, open-source product built on top of ASP.NET on the server, with a DHTML presentation layer on the client. It uses an "empty client" model with a "gateway" channel to the server.
In December, Gizmox CTO Guy Peled posted a teaser blog entry entitled Visual WebGui Will Soon Support Silverlight as its Presentation Layer. Today, Gizmox dropped the other shoe with a press release and an alpha product rollout.
Gizmox is funded by venture capital. How are they going to make money (and a profit for the VCs) with a free open source product? According to the press release:
"Though Visual WebGui browser-based solution is and will remain a free, open-source platform, the company will generate revenue from development partnerships, premium enterprise dedicated controls and components, Silverlight extensions, enhanced scalability, plug-in support, customized development and a market place that will be a third party's (Visual WebGui's community developers) channel for their propriety development and other future added-value products and services," said Mr. Navot Peled, CEO, Visual WebGui. "We will announce the commercial version of Visual WebGui in April 2008."
To download Visual WebGui, you first need to register (free) on the site.
Posted by Martin Heller on January 24, 2008 06:00 AM
January 04, 2008 | Comments: (0)
As I was testing the LINQ to SQL functionality in Visual Studio 2008, I found myself missing the SQL Query Builder. For the relatively simple three-table inner join SELECT queries I needed, I was able to write correct LINQ syntax myself with only a database diagram, IntelliSense and online help for guidance. Writing more complicated LINQ queries freehand felt like it would challenge my nascent LINQ skills.
Do we really have to generate the SQL with SQL Server Management Studio and then translate it into LINQ?
I asked Microsoft, and it turns out that we don't. Joseph and Ben Albahari, the authors of C# 3.0 in a Nutshell, have released a free LINQ query builder (written by Joe), LINQPad.
It requires .NET Framework 3.5. If you have Visual Studio 2008 or Visual C# 2008 Express, then Framework 3.5 will already be installed. LINQPad supports SQL Express, SQL 2000, SQL 2005, and (with some limitations) SQL 2008.
Posted by Martin Heller on January 4, 2008 11:36 AM
December 26, 2007 | Comments: (0)
Visual Studio 2008 Installation Follow-up
I wrote on Sunday about my week-long, beyond-weird troubles installing Visual Studio 2008: lack of Internet bandwidth, lost shipments, defective DVDs, and generally bad installation karma.
On Monday, things looked up. Two packages that had been missing showed up at my office door, merely delayed by the Christmas shipping rush, and not lost. One was a retail package of Visual Studio 2008 Team Suite, and it installed almost perfectly.
The other was a burned DVD-R of a VSTS/TFS Virtual PC. It didn't install: there was a CRC error in the last of 7 large files. However, I was able to copy the 6 good files from this DVD to a file server, and then add the 7th file from a previous copy of this DVD that had CRC errors in other files. Once I had a complete set assembled on a server, I was able to install the image with no problem, and run the image successfully in Microsoft Virtual PC.
I'll be rolling up my sleeves this week and diving into the review.
Posted by Martin Heller on December 26, 2007 09:30 AM
December 23, 2007 | Comments: (0)
Weird Happenings: A Visual Studio 2008 Saga
For awhile, I thought I was living an episode of The Twilight Zone or The Outer Limits, or a Lovecraft tale. But I should start from the beginning.
When Visual Studio 2008 (VS08) was released just prior to Thanksgiving, I tried briefly to download it, and quickly gave up: the download speed I was seeing was horribly low. I didn't know where the bandwidth was being restricted, but it wasn't worth continuing.
As I blogged at the time but didn't explain, I decided to wait for the DVD to ship from MSDN. As I had blogged a few weeks earlier, I was planning to set up a new computer for VS08; my thinking was that I didn't want to disturb my working production Visual Studio 2005 (VS05) installation.
Then, in a surprise move, Doug Dineley asked me to write the Visual Studio 2008 review for InfoWorld. I let Microsoft's PR firm know that I had the assignment, and asked for reviewer's materials, including a Visual Studio 2008 Team Suite DVD.
That's when it started to get weird. The first overnight package that Microsoft sent me never arrived. The second package arrived with nothing but a DVD and a business card; a key for it came by e-mail. The hand-written label on the DVD said "Visual Studio 2008" but didn't specify the edition.
I thought about making an image backup of the hard disk. I thought about driving over to CompUSA and picking up a bargain system before they closed their doors. I thought about calling the product manager who had burned the disk.
I didn't actually do any of those things: I ran the installation and entered the key I had received. The installation was relatively uneventful, given that it was side-by-side with VS05: only one package failed, and it wasn't one that I was planning to review. There were two problems, however. First, it was VS08 Professional, not Team Suite, which meant that I wouldn't be able to review the additional Team System features. Second, the key was for a 90-day trial, which meant that I wouldn't be able to use this installation to review other products in the VS08 "ecosystem" later on.
When I let the PR people and the Microsoft product manager know the situation, I also raised the issue of whether there were VSTS features that required an installation of Team Foundation Server (TFS). That was a problem for me because I don't have any computers in my office that run server operating systems: I would either have to install TFS on a remote server or in a Virtual PC.
Not a problem: they'd send another package with a full VSTS DVD and a permanent license key. When it arrived, however, it wouldn't install: the setup program complained of an invalid digital signature and stopped.
More fun ensued: by this point most of Microsoft had disappeared for Christmas vacation, and the product manager couldn't find the right people to diagnose this problem. He suggested that I uninstall VS08 Pro and try again to install VSTS; not only didn't that help, it broke my VS05 installation to the point of unusability.
He ended up giving me a Quick Help number and telling me to call Product Support Services. After half an hour on hold and two hours doing guided experimentation, the verdict was that the DVD had a CRC error and should be replaced.
Meanwhile, he found someone on the installation team to help me fix VS05. The magic formula was to run a VS05 repair from the original install DVD, and then reapply the VS05 SP1 patch. This largely fixed the problem, although there was some weirdness about .NET Framework 2.0 that turned out to not matter. The one remaining, nagging problem was that my code signing no longer worked.
The VS product manager shipped me a full retail VSTS box; it never arrived. The VSTS/TFS product manager burned me a Visual Studio Team Suite/Team Foundation Server Virtual PC DVD; it arrived in two days rather than overnight, but it, too had a CRC error. He burned another DVD, tested it to make sure it worked, and shipped it to me overnight: it never arrived.
Friday evening, at home, I downloaded VS08 Professional from MSDN to my Vista x64 laptop. Once I found and installed Daemon Tools for the Vista x64 system so that I could install directly from the ISO image, VS08 installed fine: by Saturday morning I was fixing one small but annoying first-run problem by re-running Devenv as Administrator.
Sunday morning I went to my office and kicked off downloads of VSTS and TFS trials from MSDN. This time the download proceeded with the full rated bandwidth. I'm hoping that I'll be able to install VSTS properly this time from the ISO image, and that the key from the defective DVD will upgrade the downloaded installation from trial to permanent. I'm also hoping that I can install TFS from the ISO image into a Virtual PC, and use the same trick for the upgrade.
While I was at the office, I wrote a note for the interior designers downstairs in my building who have gotten some of my packages in the past, letting them know that I was missing a few more packages, and asking them to call me if they found them. I left it stuck to their door.
I think I've reversed the curse. Knock on wood for me, would you? And please don't change your socks...
Posted by Martin Heller on December 23, 2007 09:32 AM
December 20, 2007 | Comments: (0)
Silverlight for Designers: New Expression Blend Preview Available
Most designers would never use Visual Studio, or even consider using it. Microsoft has a partial solution for designers who want to create Silverlight-based RIAs: Expression Blend. There's a free December preview of Expression Blend 2.0 available for the downloading.
Why do I say it's a partial solution? Because at this point designers probably can't get everything they want from Silverlight by themselves. For many applications, the designer will have to collaborate with a programmer to get the project absolutely right. They may also have to use Visual Studio themselves, but only for a few simple, infrequent tasks.
Posted by Martin Heller on December 20, 2007 07:34 AM
December 11, 2007 | Comments: (0)
SlickEdit is Nice for JavaScript, Too
I've mentioned before that I like SlickEdit for editing C++ code, because it's the only tool I've found that can reliably refactor C++. In the last couple of days I have found that it's also a really nice tool for editing JavaScript, both server-side ASP JavaScript and client-side JavaScript.
Most of the other programming and Web design tools I use treat JavaScript as so much plain text. I was very pleasantly surprised to find that SlickEdit's tagging gives me reasonably good word completion and function parameter information, even when the code is being tied together with server-side includes. The dynamic preview that shows me the definition of a function in another window when I'm working on a call to that function helps as well.
Of course, I want more. It's too bad that SlickEdit can't offer anything in the way of page design, and can't seem to work directly with files on sites that use the FrontPage extensions.
Posted by Martin Heller on December 11, 2007 09:31 AM
December 06, 2007 | Comments: (0)
I downloaded the Microsoft Volta preview bits yesterday after writing up my initial take on the announcement, only to discover that my Visual Studio 2008 Beta 2 Virtual PC had expired, meaning that I couldn't actually try Volta out myself.
Meanwhile, I looked into how Volta works. As documented here, Volta basically works as a recompiler for .NET 3.5 applications. As a developer, you build the whole application as though it will run entirely on the client, and then you mark parts of it to belong to the server tier. Compile it. Volta then looks at the generated MSIL in your assemblies, and rewrites it "into any number of target languages, including, today JavaScript and MSIL itself."
According to Microsoft, the three techniques used are "refactoring, retargeting, and remodulating. Refactoring converts single-tier code into distributed, concurrent code as directed by user-supplied annotations. Retargeting converts MSIL code into code for other virtual machines. Remodulating tailors a single piece of code for multiple browsers."
The fact that Volta can retarget .NET applications for JavaScript means that you can write plain old .NET code to generate Ajax applications, much in the same way as GWT lets you write plain old Java code to generate Ajax applications. That opens up a number of interesting scenarios.
It also opens up a number of interesting questions. How well will all of this work? Will it make developers' lives easier, or add yet another layer of junk between us and our goals, and introduce hard-to-debug, hard-to-profile black boxes into our applications? Will it turn out to be the powerful, liberating tool that Microsoft's write-up suggests, or will it turn out to primarily be a way to lock developers into writing for the .NET Framework?
What do you think? Have you been able to try Volta yourself?
Posted by Martin Heller on December 6, 2007 11:48 AM
December 05, 2007 | Comments: (0)
Volta: Web Development by Tier-Splitting
Microsoft Volta was just posted as a technology preview at Microsoft Live Labs. The short summary is that Volta is a new methodology for creating Web applications. Instead of deciding on your architecture at the beginning, building the tiers and tying them together, you start by building a .NET client application, then designate components to run on the server and client tiers later in the cycle, and let the tool generate the plumbing for you.
The tag line is "Web development using only the materials in the room." Why do I keep looking around for Heidi Klum and Tim Gunn?
Here's the full introduction from the Volta home page:
The Volta technology preview is a developer toolset that enables you to build multi-tier web applications by applying familiar techniques and patterns. First, design and build your application as a .NET client application, then assign the portions of the application to run on the server and the client tiers late in the development process. The compiler creates cross-browser JavaScript for the client tier, web services for the server tier, and communication, serialization, synchronization, security, and other boilerplate code to tie the tiers together.
Developers can target either web browsers or the CLR as clients and Volta handles the complexities of tier-splitting for you. Volta comprises tools such as end-to-end profiling to make architectural refactoring and optimization simple and quick. In effect, Volta offers a best-effort experience in multiple environments without any changes to the application.
Read Paul Krill's news article about Volta here, including discussions with the architects and product managers.
Posted by Martin Heller on December 5, 2007 11:13 AM
November 29, 2007 | Comments: (0)
A few weeks ago I had a long conversation with Dave Gruber of Adobe about Flex. The short summary is that Flex was designed to be Flash for programmers, and that Flex has been gaining traction for Web applications in a number of areas.
The first thing we talked about is the designer orientation of Flash. I freely admitted that I never really grokked Flash, while my sister the RISD BFA/Cornell MFA had no trouble at all with it. Gruber told me that I was not alone, and that the tools for Flash were intended for designers and built around paradigms that designers understand. The difficulty that many programmers have with Flash is the principal reason that Adobe developed Flex in the first place: it's their programmer-oriented RIA tool.
You may recall that I reviewed Silverlight a couple of months ago, and said it competes with "Adobe Flash and Flex, with OpenLaszlo and Curl, and with a variety of AJAX (Asynchronous JavaScript and XML) frameworks." A few days later the irrepressible Tom Yager wrote a rebuttal in the Test Center Daily that said "Looked at in a vacuum, Silverlight is nice, and it demos smashingly well, but Microsoft is bringing a plug-in and unfamiliar tools to developers and content creators, while Adobe is expanding its Flash ecosystem with its own Internet run-time framework, AIR."
I think Tom got that both right and wrong: different audiences have different expectations. Silverlight is immediately familiar to .NET developers, and the Silverlight tools are mostly the same tools that .NET developers already use.
While I never took to Flash, I'll probably be able to learn Flex; nevertheless, FlexBuilder is a new tool for me with its own learning curve. I have downloaded the FlexBuilder 3 beta, but haven't yet gotten far with it. Designers and what they are used to is another story entirely.
Gruber and I discussed AIR and other new parts of the Flash/Flex ecosystem. AIR can be used to deploy Flex, AJAX, and Flash applications to the desktop. The motivation for AIR is that developers who use FlexBuilder for Rich Internet Applications want to use the same tools for desktop applications.
"Thermo" is an "upcoming Adobe product that makes it easy for designers to create rich Internet application UIs." Thermo applications "are Flex applications that can be loaded directly into Flex Builder, providing a great roundtrip workflow for designers collaborating with developers." In other words, Thermo is a Flex tool for designers who have outgrown Flash.
The Flex 3 SDK and engine will be open source when they are released in February of 2008. FlexBuilder, however, will remain proprietary.
Gruber mentioned that Adobe was in the process of acquiring Virtual Ubiquity, the creators of a Flex-based word-processing application called Buzzword. I have been playing with Buzzword online recently, and it is getting better and better. I'm impressed: in some ways it's already better than Zoho Writer, although it's not far enough along to replace Microsoft Word, at least not for me.
Stay tuned: the whole RIA language and tool area is emerging rapidly. I don't think it will be a matter of anyone "winning" so much as a matter of several players staking out separate but overlapping territories in the RIA market.
Posted by Martin Heller on November 29, 2007 08:35 AM
November 27, 2007 | Comments: (0)
What happened to my Visual Studio 2005 News Feed?
Today the news feed on my Visual Studio 2005 start page stopped working. I don't know why.
I was able to fix it, though. I went to Tools | Options | Environment | Startup and copied the existing news channel URL. I pasted that into my browser, and it redirected to http://www.microsoft.com/feeds/msdn/en-us/vstudio/rss.xml. I copied that URL back into the Startup form, pressed OK, and the news feed came back.
I'm looking forward to Visual Studio 2008, but I suspect I'll wait for the DVD to arrive instead of downloading it.
Posted by Martin Heller on November 27, 2007 12:30 PM
November 12, 2007 | Comments: (0)

I guess I shouldn't be surprised, since Google has been advertising heavily for Java developers with device experience: the much-hyped Google Android Open Handset SDK is basically a Java API. In addition, it supports XML-based layout files, and contains a variety of development tools.
What tools? An emulator, an Eclipse plug-in, a debug monitor, a debug bridge, an asset packaging tool, an interface description language, SQLite, a trace visualizer, a disk image generator, a bytecode translator, and an Ant script creator.
What does "Hello, World!" look like as Android code? Basically this:
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
TextView tv = new TextView(this);
tv.setText("Hello, Android");
setContentView(tv);
}
}
There are four building blocks to an Android application:
- Activity
- Intent Receiver
- Service
- Content Provider
I'm oversimplifying, but an activity is a screen, and an intent moves from one activity to another. An intent receiver is an event handler. A service is long-lived non-UI code. A content provider is a class that implements a standard set of methods to let other applications store and retrieve the type of data that is handled by that content provider.
For more, read the Android documentation and download the SDK.
Posted by Martin Heller on November 12, 2007 11:33 AM
November 07, 2007 | Comments: (0)

