All posts by joshholmes

Microsoft and PreEmptive Solutions – new features for VS 2010

PreEmptive SolutionsI’ve been a long time supporter of PreEmptive Solutions. They’ve done a great job of supporting .NET. As a Cleveland based company, they are in my territory as an evangelist.

Microsoft just released a huge press release on the new things that PreEmptive is doing – specifically, they are expanding well beyond obfuscation to anti-tampering, run time intelligence, licensing support for ISVs and much much more.

PreEmptive is no longer just an obfuscation company.

Read the official press release below…  

Microsoft and PreEmptive Solutions to Provide Application Feature Monitoring, Usage Expiry and Tamper Defense in Visual Studio 2010

Post-build utility utilizes software plus services and instrumentation to improve application security, portfolio management and usability.

LOS ANGELES — Oct. 27, 2008 — Microsoft Corp. and PreEmptive Solutions announced today at Microsoft’s Professional Developers Conference 2008 that an enhanced version of Dotfuscator Community Edition™ (CE) will be included in Microsoft Visual Studio 2010. Dotfuscator CE, which has been included with every version of Visual Studio starting with Visual Studio 2003, prevents the reverse engineering of .NET applications. The Visual Studio 2010 version, renamed Dotfuscator Software Services Community Edition™, has been extended with instrumentation capabilities including tamper detection and defense, feature level application monitoring and automatic time limits on .NET application use.

“Instrumentation is an important component of good software development practices as part of an overall application lifecycle management (ALM) approach. Microsoft knows that extending the ability to modify an application’s behavior to the time after compile is a valuable part of good ALM practices,” said Norman Guadagno, the director of product management for Visual Studio Team System at Microsoft Corp. “.NET developers can now protect, manage and increase the value of their application development investments easily and without having to write additional code.”

Development teams will be able to track feature usage to improve adoption and quality, ISVs will be able to integrate evaluation software usage into Microsoft Dynamics CRM to increase win rates, and enterprises will be able to integrate application runtime data into Microsoft Business Intelligence Solutions to improve business agility.

Dotfuscator Software Services CE also has enhanced capabilities to stream alerts and runtime data to one or more cloud-based services.

“Dotfuscator’s ability to integrate application behavior with one or more cloud services not only improves application quality and value, it actually creates new business opportunities for software service providers and developers alike,” said Gabriel Torok, president of PreEmptive Solutions.

Dotfuscator Software Services Community Edition is scheduled to ship with all versions of Visual Studio 2010 (other than Visual Studio Express) at no additional charge.

About PreEmptive Solutions

PreEmptive Solutions produces the Dotfuscator and DashO instrumentation and obfuscation product families and the Runtime Intelligence application analytics service. With more than 3,000 corporate clients, 40,000 registered installations in 100+ countries and inclusion with Microsoft’s 6,000,000+ Visual Studio seats, PreEmptive Solutions has become the clear choice for every organization that is serious about source code protection, application security and IT governance. To learn more, e-mail solutions@preemptive.com or call +1 216 732 5895.

About Microsoft

Founded in 1975, Microsoft (Nasdaq “MSFT”) is the worldwide leader in software, services and solutions that help people and businesses realize their full potential.

Note to editors: If you are interested in viewing additional information on Microsoft, please visit the Microsoft Web page at http://www.microsoft.com/presspass on Microsoft’s corporate information pages. Web links, telephone numbers and titles were correct at time of publication, but may since have changed. For additional assistance, journalists and analysts may contact Microsoft’s Rapid Response Team or other appropriate contacts listed at http://www.microsoft.com/presspass/contactpr.mspx.

More links:

Official Press Release
http://www.microsoft.com/Presspass/press/2008/oct08/10-27PreEmptivePR.mspx

http://www.sdtimes.com/content/article.aspx?ArticleID=33003

http://dotnet.sys-con.com/node/725076

Architecture of RIA from JAOO

Josh Holmes and James WardI did a joint session with James Ward from Adobe at the JAOO conference. As you know I’m an evangelist for Microsoft focusing on RIA and UX. James is one of the Flex evangelists for Adobe.

This is a talk that James and I have been talking about trying to pull off for quite a while and I was thrilled that we actually got to do it. James and I have been going back and forth for over a year and a half now talking about the definition of RIA as well as what are the best and worst architectural patterns. Some of this was based on an article that James co-wrote for InfoQ called “Top 10 Mistakes when building Flex Applications”. I borrowed the mistakes that applied across the board regardless of what RIA technology you were using and added the best practices part.

The first time that I delivered a version of this session it was with Mike Labriola at RIAPalooza.

Architecture of RIA from JAOO

View SlideShare presentation or Upload your own. (tags: josh holmes;james)

image

James and I both welcome emails and contact – email addresses in the slide. You can also comment on the blog. We’ll both be watching the comments here.

image

The first question that we have to ask ourselves is – what do we mean by RIA?

image

The acronym could mean anything.
It could be the Rural Inoculation Association whose out there in the world trying to immunize all of the cows and chickens in the world.
If could be the Rare Isotope Accelerator – you know, the one in Switzerland that didn’t end the world… Yeah – I’m thrilled about that.
All the way down to Really Inane Acronym – which is the one I often go with.

But in this session we’re talking about RIA as Rich Internet Applications. This means that we are not talking about simple media players or fancy splash screens or advertisements. We are talking about solid enterprise quality applications that leverage the Internet as a deployment model and typically are built on one of the Rich Internet platforms such as Silverlight or Flash. These are meant to enhance the user’s experience and if you do a good job with design, you will dramatically improve the usability of the application. This is what James and I are both passionate about.

image

Before you decide that you need to build a RIA, you need to first think about your users and how they are going to use the application. This will help determine where on the continuum of user experience you should target and what type of application you should write.

On the far left hand side, if you are going for absolute ubiquitous reach and need to have information in front of the widest possible audience, text over http is the lowest common denominator. HTML and CSS will still have a long and prosperous life on this end of the spectrum.

On the far right hand side, the guys that were writing Halo for the XBox 360 were able to test the exact hardware, right down to how fast the hard drive spins and which exact video card was in the machine. This means that they are able to make trade offs between how large a map is and what textures are on the walls and so on. This is a huge advantage when trying to create a really rich experience for the users.

However, most people don’t have the luxury of shipping hardware with their software. But can you target a desktop application on a given operating system? Or a family of operating systems?

If you can’t, then you need to start looking at this supplemented web space that we are talking about with RIA.

image

So what’s different with this RIA development. Really it depends on the skill set of your team. The interesting part is that it’s actually a much tougher jump for web developers than desktop developers.

For desktop developers, there are a number of things that they have to get used to. For example they are locked into a secured browser based sandbox. This means that they can’t do a lot of the things that they are used to doing such as reading and writing anywhere on the hard drive, reading from the registry, accessing local hardware or any number of other typical tasks that desktop developers do.
The back and the refresh button are also quite scary to the desktop developer. Conceptually, you can think of it as opening up the task manager and killing your application. Oops. The question is what do you do when someone does that? There are a lot of differ
ent strategies that you can leverage but the point is that you do have to think very clearly about this potential issue.
State management is also an issue that we have to think about more. On the desktop, it’s natural to just have your state locally. But in this RIA space, what do your users expect if they open up a browser on a second machine? hmmm. You might need to store your state on the server side.
And typically you have a more limited runtime in the browser than you do on the full desktop. For example, the full .NET runtime is about 50 meg and Silverlight is just 4 meg. That’s quite a difference.

However, none of these issues are fundamental shifts in how you think or go about doing your job.

For web developers, on the other hand, there are some serious mind shifts that have to happen. We are used to, as web developers, having everything from the server on hand at any given time. The UI itself is simply rendered HTML. All of the logic and work happens on the server. Often, this happens in a single tier.

Now that we are looking at the RIA space, we have to think about where the business logic goes. Sometimes that’s on the UI side running in the browser. Fundamentally this means the web developer needs to understand service oriented architecture. This is a big change from what we are used to where we could, if we so desired, open up a database connection and query directly from the UI logic layer. Instead, our UI logic is happening out in the browser where they don’t have access to do that through the firewall etcetera.

Ron Jacobs talks about a lot of the possible issues in a set of talks called SOA Patterns that can be found
http://channel9.msdn.com/shows/ARCast+with+Ron+Jacobs/ARCast-Patterns-and-Anti-Patterns-for-SOA-Applied/ and
http://channel9.msdn.com/shows/ARCast+with+Ron+Jacobs/ARCast-Patterns-and-Anti-Patterns-for-SOA-Part-2-of-2/

For example many people look at mapping their database directly to their web service tier. This is the anti-pattern that Ron calls the CRUDy web service layer. Really, you are not service orienting your application. Rather, you are simply exposing the database tier out to the rest of the world.

Once you get over this hump, the rest of the changes are relatively small in comparison.

image

Onto the best practices… We have laid out 10 best practices here. These are not by far the only solid practices. These just happen to be the 10 that James and I thought were in the top 10 that are across the board regardless if what RIA platform you are using.

image 

image

Those couches, no matter how pretty they are, are not amazingly comfortable. The primary point here is that your application has to be functional and usable or nobody will use it regardless of how pretty it is or what technologies you are using.

image

The easiest way to make sure that you are building a functional application is to focus on the architecture.

This is a picture of from Taliesin West, Frank Lloyd Write’s winter home in Arizona. He spent a lot of time working on the overall architecture of the building and the looks of the building. 

image

However, he spent almost as much time on the inside. He built much of the furniture, designed the lighting, the flow of the rooms, the acoustics and much more.

The lesson that we can learn from this is that we should spend as much time on the inside of our application and the architecture of the client side as we do on the overall application. You really need to apply a lot of rigor to the architecture of the client side as well as the overall application.

There are two client side architectural patterns that are the front runners that we should talk about.

image

First in the MVC or Model, View, Controller pattern. The idea here is that you have three separate layers with very distinctive roles.

The model is the first layer that we need to talk about. It reflects your web service layer, not the database but what’s returned from the services. This is the only access layer to the services and hides away the details of which services, protocols, security and other details from the other layers.

The second layer to talk about is the controller. This is the logic. It makes the decisions as to which view is shown, what data is changed in the model and so on. It watches what’s going on in the view for various events and responds to those events by making updates in the model.

The third layer is the view. Often, there are multiple views for a given controller. For example, there might be a complex and a simplistic rendering of a given item from the model. The view is very thin as far as logic goes. It watches the model for changes and updates itself based on those changes. Those changes are either the result of logic in the controller or from a web service call. Often, in Silverlight, WPF or even Winforms, this watching for changes in the model is often implemented as data-binding. As it’s data-bound to objects, the view can decide on what attributes of the object it wants to show.

image

The second pattern to talk about is the MVP or Model, View, Presenter pattern.

The first layer, the model, is actually very similar.

The second layer is the presenter. One of the big differences here is that the presenter actually updates the view with the changes from the model rather than the view watching for those changes. The result here is two fold. First the view are much closer tied together. The second is that, since the presenter is doing all of the input and output, it’s easier to unit test.

The last layer, the view, is much thinner then in the MVC pattern. It’s simply a presentation of the data that the presenter has chosen to show.

image

I personally prefer the MVC pattern. I don’t thing that the extra testability that you get out of the MVP is not worth the loss in flexibility in the view. Unit testing is still quite possible in MVC and definitely should be part of the process.

image

image

The second best practice is that you should have a set of design tenets that the team shares. Really these are values that should be held by the designers, developers and all of the stake holders. This has to be agreed on by the team at the beginning of the project. I actually like to do two. One for the UI layer and the second for the overall development process of the application. For example, in the UI layer, Search is Failure. This means that if the user has to hit search in order to find something on your web site in the course of normal navigation – you failed in the design and navigation of the application. On the development side, think about TDD or Test Driven Development as one of the tenets that you hold.

image

image

The third best practice is to use the appropriate level of fidelity for the user’s context. There are couple of things to talk about here.

image

The first is when you are developing a prototype. If you bring in an amazingly beautiful wire framed application with a ton of colors and full animations the user is going to do one of two things. Either they are going to argue with you over the exact shade of red or some other little detail without really getting through the functionality of the application or they will say – cool, you’re done. It’s really hard to explain to a non-technical person the difference between a good looking prototype and a a finished application and why it’s going to take 9 months to make that leap.

The answer to this is to use a set of printed mockups for the look and feel and a skin such as ProtoXAML for the running prototype so that you can work through the functionality without getting into the arguments about look and feel. 

image

The second item to talk about with regards to fidelity is the forest for the trees. This means understanding the user’s context and only showing them the data that they need in that context. For example, if you are dealing with a C level executive you shouldn’t show them how much it costs for a particular pencil. Instead, you should only show them how much it costs for office supplies in general. If the want to dive into that detail, then you should let them dive into that level of detail. Another thing to think about is what should be on a dashboard verses in the full application or report.

image

image

The fourth best practice is to build with both the customer and user’s input. Step one here is to recognize that these are indeed separate people. The customer is the one who is signing the checks. Often this is some layer of management far removed from the actual day to day operations that the users are doing. The users are the ones that are actually going to be using your application and getting upset with you about the things that don’t work the way that they want.

This is one of the central themes in most agile methodologies. Most actually want to have one of the users on the development team sitting in the meetings and providing input the entire time.

image

image

The fifth best practice is to understand who your users are and what type of users you have. For example if you have a public facing web site, you’ll have something like the curve in the slide with some large percentage of your users being first time visitors to your site, some smaller percentage being repeat visitors and some really small percentage being your power users.

Your goal should be to turn those brand new to the site into repeat visitors and then into power users. For those that are brand new to the site, you need to explain what your web site does and why they want to come back. One the other end, the power users shouldn’t be bothered by that introductory information that you present to the new visitors. A couple of sites that do this really well are WordPress and Twitter.

image

image

Sixth is planning for concurrency. Concurrency is always an issue in application development, it’s just highlighted in RIAs as the client is running somewhere on the network or across the Internet in the client’s browser.

The fun issue is with concurreny is that it’s hard to test for in development because typically the developer has their own dev environment and/or a database full of junk test data. This makes it hard to spot concurrency issues. Instead they find these issues in training when the trainer asks the 30 students to open up Mr. Jones and change his address and save. At that point, what happens? Which of the users actually saved the new address successfully?

image

There are two basic forms of concurrency. Optimistic and Pessimistic.

Pessimistic includes locking down the rows that you are accessing until you are finished with them. It really isn’t a consideration in RIA as you don’t have a long running transaction with an open connection to the database.

However, simple last in wins optimistic concurrency is really not concurrency either. You need to think through the various scenarios and understand where you need to detect that there was a change and then decide on what to do with that change. In order to detect that there was a change, the traditional strategies are to either pass both the original version of the data that you retrieved in the first place as well as the changes or to use a timestamp of some sort. As far as what to do with the change, you might be able to perform logic to make the determination on what to do such as if there is an addition or subtraction of some numerical amount. Most of the time, however, you need to raise awareness to the user that there was a change and have them decide what to do. Other times you need to think about doing some type of escalation to a manager. Obviously that requires more development and thought but it’s worth the time.

image

image

The seventh best practice is balancing the computing load. Think about the fact that you’ve got the ability to do a lot of logic client side and you can offload the computing load on the server that way. However, there’s still a lot of good reasons to keep the logic server side. The question is what’s the decision tree on where the logic should run. My preference is to keep the operations as close to the data as possible. If most or all all of the data that you need is client side, there’s no reason to burn the extra network traffic and time waiting on the the round trip. On the other hand, if the majority of the data is server side and you can process the data and just return the results of the processing – do that.

image

image

Security is a huge issue and really hard to get right. If you make it too tough, people will find ways around it or stop using your application all together.

image

Both Silverlight and Flash have security protocols around calling web services. It’s based on the domain that your application was loaded from and what domain the application is trying to call the service on. If you were loaded from the domain you’re trying to call then there are no security issues. The domain is defined as the combination of the domain name (including sub domain such as www), protocol (http or https) and port (such as 80 or 8080). If any one of these are different, then it’s considered a cross domain call. That means that http://www.somedomain.com is different from http://somedomain.com and http://somedomain.com is different
from http://somdomain.com:8080. The reason behind this is that any of those variables, sub domain, port or protocol could point to different servers. That possibility of changing servers is considered a cross domain call and more security kicks in.

The reason that this matters is that when the application makes that call, all of the cookies for the domain that you are trying to call are passed along with the call. This is not an issue if you are calling a server that doesn’t have private information such as the public web services on Flickr or book searches on Amazon and the like. However, this is a huge issue if the application can call some outside domain that does have private information, such as Paypal or your hospital or some other server that has sensitive information, and pretend to be you by passing in those cookies.

Since it’s the server that knows whether or not it holds sensitive data, the server gets to decide if it is going to allow that call. The method for doing that is a policy file. The Adobe version of this file is the crossdomain.xml and the Microsoft version is called the clientaccesspolicy.xml though Silverlight will leverage the crossdomain.xml file if it doesn’t find the clientaccesspolicy.xml file. In these policy files the server can specify which domains, from all down to a very specific one, are able to call which services.

image

The quick dos and don’ts for your server that you’re expecting RIA applications are divided into private services that your own applications are going to call and public services that you are opening up to third party applications to call.

For private services:
Do use browser-based authentication through cookies, HTTP Auth and so on. This will allow your application to leverage the existing authentication methods that you are using with the rest of your web applications. This is a big win.
Do not, since these are private services that are using browser based authentication, enable public access via a cross-domain policy file of any sort.

For public services:
Do not use browser-based authentication. You can either just open up anonymous access or pass in the credentials on each of the service calls and use more traditional authentication methods from the SOA world.
Check on the calling application’s URL and other authentication techniques.
And definitely separate out the public from private services into different domains but at least subdomain or something.

image

image

If you’ve not spent any time in a support center answering calls from irate users, you should. It will change you’re outlook on writing software, logging, bug reporting and more. Now, let’s have the application running out there in a browser in a secured sandbox so that you’re users don’t have direct access to any log fine and the issues that they might run into could be network issues and you wouldn’t able to log errors on the server side.

Do you see the problem? 

One technique to deal with this is to code for a parameter that the user can pass in on the url that will bring up an error console that the user can read back to you. For the error log, you can store the errors in a cookie or local storage.

The point is that you need to think long and hard about supportability and what could possibly go wrong and how to handle it.

image

image

Very importantly, you have to keep your user’s context in mind. Are they mobile? Disabled? What role do they play? How are they going to be using your application? What’s the minimum data that they need to accomplish their duties?

By remembering your user’s context you can build the most effective application for them in their unique situation.

image

I’d love to hear about best practices that you’ve uncovered in your work as a RIA designer, developer and architect.

image

I learn best from my failures and the best practices wouldn’t be best practices if there weren’t worst practices. As such, I don’t think that any best practices talk is complete without addressing the possible worst practices.

image

image

The first possible worst practice when creating a rich internet application creating a rich internet application in the first place. You shouldn’t use 2.0 technologies to build a 1.0 web site. HTML, CSS and light javascript can go a really long ways in creating a beautiful site that’s rich with information. You have to think about the user’s interactivity and context when picking the technologies that you’re using. We are all gui
lty of finding a slick technology and picking it as our hammer going around making every problem a nail.

image

image

Many RIA applications forget about the page refresh and back button. By default, when the user hits refresh, the application unloads, reloads and starts over from the beginning forcing the user to navigate back to the where they were in the first place. By default when the user hits the back button, the page with the application in it is unloaded as the browser goes back in the history to the previous page. In either case, this is probably not what the user expected.

If they were using a traditional HTML based web application the refresh would simply reload the page that they are on. If there was a postback involved, it will even offer the user the possibility to repost those variables to get the same result again. You can, if you write code to handle it in the unload and load of the application write out the state on unload and recreate the state on load.

For the back button, things are little bit more complicated. One way you can handle this is to build a state machine that tracks the logical pages in your application such as the pages in a wizard. Then you can trap the back button event and unwind the state machine. If you are at the beginning of the application, let the event go and act as normal.

image

image

The first thing that a lot of people think of when they start thinking about those challenges with regards to the back and refresh button is to simply disable them rather than going through all of the effort of handling them. This is a choice but if breaks the way that users expect to browse on the web so doing do it.

image

image

Ignoring your bandwidth is another large mistake that people make. There are a couple of different ways that this happens.

To start off, you need to think about the size of your application and how that will effect load times. A lot of desktop applications are many meg in size. This is fine since you are not having to download the application to run it over and over again. If this is the case with your right internet application, you need to think about partitioning your application to optimize load times. The simplest example here is to make sure that you don’t embed assets such as videos or images inside your application unless you absolutely need them on startup.

More advanced techniques include partitioning the application itself into multiple easily digestible parts.

The second thing to thing about is video streaming if you are using video.

One more area for concern is the amount of data that you are pulling back at one time. There are a lot of different paging techniques that you can employ with easily implemented patterns.

image

image

There are good ways and bad ways to leverage animations. Many times there is gratuitous animation that have been thrown in just because they can.

The good is when a particular animation helps the user visualize data in a unique way or leads the user to the next action. For example, you can, when all required fields are filled in, add a shimmer behind the “next” button to draw the user’s eye to guide them along the way.

Another example of good use of animation is showing transitions in state or data. As Mike Labriola put it, if your user rolls a ball and it just disappears as it leaves their hand and appears across the room, they would be very surprised. By showing the state transforming through animation, you can show your user what happened.

image

image

We, as developers, are infamous for NIH (Not Invented Here). There are, even with a limited framework, a tremendous amount of utilities in the framework that you don’t have to reimplement. There are a lot of possible issues with not leveraging the framework that you’re running on. First, you have to maintain it. But the other issue that is more unique to the RIA world is that the user has to download this code when they run your application. This bloats the application and contributes to the other worst practice that we already talked about with ignoring your bandwidth.

image

image

Cowboy development is always a worst practice. The problem is that there are times that people get away with it. And that makes them bolder and bolder. “It’s just two lines of code. A tweak really. I’ll just make that on the production server.” Tweaks have brought down more servers than major production roll-outs. The major changes have been through testing and QA and all sorts of engineering rigor. The tweaks has at best been reviewed by the guy sitting in the next cube.

With RIAs, we are building real production applications and we need to apply the same disciplines that we should for any other application development. That includes Source Control, Change Control, Bug Tracking, solid development processes, TDD, Continuous Integration and the whole kit and caboodle.

image

image

In laying out the application’s interface, it’s really easy to get carried away with the number of containers to control the exact positioning of the items on the screen. In the HTML world, we did this with tables until we were all told that tables were evil. The answer was to switch to divs and put divs inside of divs and so on. This proved not to be any better. The real answer was to use CSS to set the relative positioning of the items.

The same idea applies in the RIA technologies. The more containers that you use to create your layout, the more constricted it will be. 

image

image

If you have a really complex rendering of a given item, that’s not necessarily a bad thing. However, if you take that same item and databind a thousand of them into list – now you have a problem.

image

image

Getting religious about your technology decisions is a really common and really horrible practice. You should evaluate the possible technologies on their technical merits rather than on feeling, personal biases or any other non-technical method.

Instead you have to determine if the technology will actually do what you need for it to do, what your team make up is and if they will be able to leverage the technologies, if the IT department will be able to support the roll out of the application and all of the other technical merits of the chosen platform, technology and so on.

This is the point in the talk where James Ward (remember that he’s from Adobe and I’m from Microsoft) came over and hugged me on stage!

image

I’d also like to, just as I asked for your best practices, hear from you about worst practices that you’ve found over time.

image

image

Rich Internet Applications are meant to enhance the users experience. Poorly designed applications don’t accomplish this goal. Furthermore, we’re probably going to face a period where we have a lot of “Silverlight Blink” so called for the HTML Blink tag that annoyed us all for so long. We all need to champion user centered design to ensure that we are building the applications that will help, not hurt, the user.

The architecture of the client matters, especially now, as much as the overall client. It helps with testability, maintenance, flexibility, changes and a ton more.

These are real applications and should be built following the best development practices. This includes all of the engineering rigor that any enterprise quality application is built with. This includes change control, feature and bug tracking, TDD, continuous integration and the whole ball of wax.

Don’t rewrite the framework that you should be leveraging.

Leverage user centered design techniques. There are a lot of great resources out there that you can tap into to learn more. I’ll follow up with a post about that in the near future.

Take religion and emotion out of the technical decisions that you are making. Evaluate technologies for their technical merit and choose the one that’s going to work best for your team
makeup.

image

Be sure to subscribe to James and I’s blog. Follow up with us with questions. Let us know how you’re leveraging the RIA technologies. We’d love hear it.

I enjoyed giving this talk and thank Mike and James for joining me in presenting it.

What does an Evangelist do?

With such a bizarre title people often ask what an evangelist does. There are evangelists all across the world working for a ton of different countries. Christian works for Yahoo out of India London, England (**Update Thanks for the correction Christian! **) but he described what I do very accurately.

Below is a slide deck that he did to explain the role of evangelism in the world of development.

Developer Evangelism

View SlideShare presentation or Upload your own. (tags: advocate publicspeaking)

I’m hoping to meet Christian someday at some conference some where. He’s obviously a great evangelist and passionate about what he does.

ArcReady – the Soft Skills

As an Architect, you should be more than just a technical guy. Your job is to be the liaison between the technical side of the world and the business side of the world. You need to be able to effectively communicate with all sides and understand the motivations of the different parts of the business.

To that end, this quarter’s ArcReady is here to help you. This quarter, your local Architect Evangelist will discuss the soft skills needed to perform the job of an architect and how to gain those skills.

Here’s the official text from the invite:

clip_image002

Microsoft ArcReady

Professional Patterns on the Job

You’re smart. You deliver. What more could your company want from you?  Why don’t they come to you for the big technical decisions? Why won’t they listen to your proposals? It seems like everyone has an agenda and they’re doing everything they can to kill your great ideas.

Join us this quarter as we focus on the soft skills that architects need to master. Learning these skills will boost your emotional intelligence and help you become a more professional, well rounded contributor. You’ll gain insight into the architect’s role as leader, influencer, and business professional and learn how to leverage your position to become a positive force within your organization.

Session 1: Mastering the Soft Skills
In this session, we’ll discuss key interpersonal skills and how they can affect your projects and career. We cover how to positively connect with humans, how to participate in and influence the business processes you support, and how to transcend your technical role and maximize your connections with all members of your organization.

Session 2: Organizational Dynamics
This session examines the dynamic nature of large organizations – their structures, decision making processes, and political landscapes. We’ll discuss the goals of key business and technical decision makers and their influence on architects and software projects. We’ll conclude with some strategies for maximizing the soft skills from Session 1 to ensure successful outcomes for your projects and career.

WHAT IS ARCREADY?

  • A forum for aspiring and practicing architects to discuss industry trends
  • An overview of Microsoft’s roadmap as it relates to software architecture
  • A mechanism to solicit your feedback
  • An opportunity to showcase the work you do!

WHO SHOULD ATTEND?

Architects and Senior Developers who are interested in becoming an architect.

WHERE ARE THE EVENTS?

Events are held in 19 cities across Central Region.  To register for this event, please visit www.arcready.com.

 

  • Omaha, NE November 4, 2008 9:00am – 11:45 am
  • West Des Moines, IA November 6, 2008 9:00am – 11:45 am
  • Bloomington, IL November 11, 2008 9:00am – 11:45 am
  • St. Louis, MO November 12, 2008 9:00am – 11:45 am
  • Waukesha, WI November 13, 2008 9:00am – 11:45 am
  • Overland Park, KS November 13, 2008 9:00am – 11:45 am
  • Knoxville, TN November 17, 2008 9:00am – 11:45 am
  • Franklin, TN November 18, 2008 9:00am – 11:45 am
  • Downers Grove, IL November 19, 2008 9:00am – 11:45 am
  • Dallas, TX November 20, 2008 1:00pm – 3:45 pm
  • Indianapolis, IN November 20, 2008 9:00am – 11:45 am
  • Minneapolis, MN November 20, 2008 9:00am – 11:45 am
  • Southfield, MI November 25, 2008 9:00am – 11:45 am
  • Mason, OH December 2, 2008 9:00am – 11:45 am
  • Houston, TX December 2, 2008 9:00am – 11:45 am
  • Independence, OH December 3, 2008 9:00am – 11:45 am
  • Columbus, OH December 4, 2008 9:00am – 11:45 am
  • Austin, TX December 4, 2008 9:00am – 11:45 am
  • Chicago, IL December 9, 2008 9:00am – 11:45 am
  • WHAT TIME ARE THESE EVENTS?

          9:00am – 11:45am 

    clip_image003

    This is definitely going to be a great session with content that you’re not going to get anywhere else. Register and report back what you learned!

    European Silverlight Tour

    Beat SchweglerIt’s been an amazing month. I had the opportunity to take a tour around Europe speaking about Silverlight. I got to see a lot of different countries, speak to a lot of different people, hear a lot of different visions and opinions and really experience how global of a company Microsoft truly is.

    First, let me just say thanks to Beat Schwegler who set up the whole trip. He has an interesting role. He is the technical leader for DPE in Western Europe. He’s a great mentor and I’ve learned a lot from him.

    So what was I talking about? I was really talking about building Rich Internet Applications with Silverlight from an architect’s perspective. The first part of the talk is really more about usability and user centric design than it is Silverlight in specific. The second part of the talk is an expanded version of a talk that I first did with Mike Labriola and later with James Ward. I added a ton of specific material about Silverlight to it. The whole deck is up on slide share and embedded below.

    Spain

    European Silverlight Tour 2008I started off my trip in Spain. Madrid to be exact. I had a few days to adjust to the jet lag before I had to speak. This was cool because I got to see a little of Madrid and get to know the people. This included, among others, Cesar De la Torre Llorente, Isabel Gomez Miragaya, David Salgado Bermejo and their manager Enrique Fernández.

    I started off the “work” portion of the trip by doing a couple of interviews. The first of these was with a CIO magazine called Computing Magazine. I probably went a little too poindexter on the poor reporter on top of the slight language problem. Overall though, Cesar was pleased with the interview. The second interview was, thankfully for me, with a technical guy who runs a technical magazine out of Spain called .NET Mania.

    For my public session, it was packed with close to a hundred people. They had very slightly overbooked the room anticipating some drop-off but there was a lot less drop-off than they usually get so it was jammed. The session went well, despite the language barrier. Beat had warned me that of all the countries, Spain would be the biggest issue as people speak less English there than anywhere else on my trip. France would be a close second but that wasn’t a scheduled stop. I just spoke as clearly and slowly as I could (and got thanked for it on the break). Even so, Cesar ran though a quick high level version of my session in Spanish as soon as I was done.

    Many more pictures from Spain found in the sets Random Pictures from Spain and Speaking in Spain.

    Switzerland

    Very cool motorcycle shop in SwitzerlandAfter my session, I flew to Switzerland where I spoke at the partner council meeting organized by Ronnie Saurenmann and Stefano Malle from the Swiss DPE team. There were about 15 consultants from around Zurich that were there including Atif Aziz who I know from way back when I was doing a lot of training and Laurent Bunion who had just finished writing a new book called Silverlight 2 Unleashed for Sams. They obviously were prepared for the session and asked a ton of really tough question. It was cool though to see the excitement around the technologies. I want to send a big thanks out to Christian Gross who set me up with a user group meeting at Credit Suisse. I love talking about dynamic languages. Here I got to talk to the group about IronRuby and IronPython following a short session that Christian did on F# and the functional programming concepts in C#. It was a smart crowd with good questions.

    Afterwards, I got to spend the weekend at my friend Christian’s house. We went hiking through the mountains and even saw this slick looking motorcycle outside of a Swiss custom bike shop…

    More Pictures from Switzerland found in Random Pictures from Switzerland.

    Denmark

    Next up was JAOO in Denmark. We started out the week with a dinner organized by the Microsoft guys from Denmark including Daniel Mellgaard Frost and Martin Esmann.

    JAOO was an awesome conference and I was honored to be part of it. They had an amazing number of industry greats:

    Speaker Dinner at JAOO

    • Anders Hejlsberg, Technical Fellow, Microsoft
    • Martin Fowler, Chief Scientist at ThoughtWorks
    • Neal Ford, Ruby Shepherd at ThoughtWorks
    • Lars Bak, Google Inc. – one of the authors of the V8 JavaScript engine for Chrome
    • Michael T. Nygard, Author of “Release It! Design and Deploy Production-Ready Software”
    • Joe Duffy, Microsoft – author of the Parallel Extensions for .NET
    • Erik Meijer, Microsoft – Architect of Volta, parts of LINQ and much more
    • Glenn Vanderburg, Relevance Consulting
    • and the list goes on – check the rest of th
      em at http://jaoo.dk/aarhus-2008/speakers/

    Josh Holmes and James WardOne of the things that I did was a joint session with James Ward from Adobe on the best and worst practices of building RIAs. We had about 175 people in this talk. The great thing about this talk is that when we are talking about applications, there are many practices that we can talk about. I’m prepping a much longer post with that deck that will go up later today or tomorrow.

    Following that, I talked about Silverlight specifically with about about 150 people and had a full day tutorial on Friday with about 15 people. The tutorial was interesting as my video adapter on my laptop got damaged and I had to borrow one of the student’s computer. The interesting part there was me struggling through on a Danish keyboard… Definitely a different layout for all of the special characters.

    Klassic 65 - Aarhus DenmarkI loved Denmark. The people were over the top friendly. After a dinner at Klassic 65, James Ward and I wanted to go grab a scotch before heading to bed. Sorin, the owner who had already dipped into his private wine collection for us, was trying to give us directions to a great scotch place. When we failed the test with all of his usual landmarks, he said – “Ok, then I’ll take you” and piled us all into his station wagon and drove us across town to the scotch place. That was cool! I really dug Klassic as they cook in the old ways. According to what I understood from Sorin, the cooks and much of the wait staff have to pass a certification test. Part of the testing is this antiquated set of methods that include doing the Flambé at the table with the crepes and so on. However, after doing it for the test, none of the restaurants actually use this knowledge. Sorin decided to go for it. His little shop has limited room and a very short set of dishes. They typically offer 4 starters, 4 entrees and 4 desserts and they do those few items amazingly well. The wine choices are far more plentiful. Sorin is a master as picking the wine for the meal.

    I have to go back to JAOO every year just so that I get to go back to Denmark.

    More pictures from Denmark found in the sets Klassic 65 in Aarhus, Speaking at JAOO with James Ward and Denmark.

    Sweden

    Speaking in SwedenI love Sweden. One of the conditions that I had for taking on the trip in the first place was that I get to spend a weekend in Sweden. It turned out that Richard Hale Shaw was wrapping up a class in Stockholm the day I arrived. We hung out that evening and had dinner at very cool local Jazz club.

    Unfortunately, it rained all day Sunday. That aside, it was a great day. I had dinner in the old town (Gamla Stan) and hung out people watching all day. It’s one of my favorite pastimes.

    Monday I met up with the local evangelism team, including Jonas Torstendahl and Robert Folkesson.

    I did a public session at the Sheraton with about 50 people. It was a great audience – mostly consultants that came with solid questions. One of the attendees had actually already been doing quite a bit of Silverlight including a Greeting Card application that they are working on getting ready for release on Codeplex.

    *update* – the Greeting Creator is on CodePlex at http://www.codeplex.com/greetingcreator.

    More pictures from Sweden found in the set Views from the Nordic Light in Sweden and Speaking in Sweden.

    BelgiumSpeaking in Belgium

    I really wish that I had more time in Belgium and in Holland but I only had a day each. I got in on Monday night and was on the train Tuesday night. In the mean time, I got to meet several of the Belgian evangelists, including Philippe Destoop, and do a public session. I really liked the facility that we were in. It’s called Living Tomorrow and it’s all about the future of sustainable technologies. They had a set of solar panels out front that had an LED display that showed how much energy it had generated and how much of that energy had been used. The whole venue was the latest and greatest technologies from a number of different companies. They had touch panels on all of the refrigerators to show the ingredients. They had automated lights and lighting control in the auditorium. They had automated lawn mowers. They had an amazing amount of cool tech.

    More pictures from Belgium found in Random Pictures from Belgium and Speaking in Belgium.

    HollandSpeaking in Barneveld, Holland

    Next up was Holland. I took the train into Amsterdam and then caught a cab out to near Barneveld where the session happened the next day. I stayed in a cool little spa type of an hotel that was nice and old school. Right down to the old fashioned iron key for my hotel.

    The next day I caught a lift to the venue with Mark Voermans. It was an interesting session because part of the crowd was brand new to the technologies and was really interested in the first part of the session but lost in the second part. The other part of the crowd is already actively doing Silverlight development and was bored to tears in the first part and rapt in the second half. 

    Following the public session, we had a two more meetings. One was an interview with Web Designer Magazine. Here I was joined by Martin Tirion, Holland’s User Experience Evangelist. The second one was with one of the TV stations to discuss their systems.

    More pictures from Holland found in the set Speaking in Holland.

    Ir
    eland

    From Holland I flew to Ireland. This was the final stop on the work tour. I started off with a long meeting with Sean Foley, the evangelism manager for Ireland. He had a tremendous amount of great insight into the the tech industry, Microsoft, politics and a ton more. It was great to meet him and learn from him.

    I had a number of side meetings during the day and an evening event. The meetings were with two different training companies that are ramping up for Silverlight and a company that’s been doing Silverlight application development since Silverlight Alpha 1.1 called Zignals. They have a pretty cool set of chart controls specifically tailored for the financial industry. They had some really deep and technical questions. I’m hoping that I was able to help them out…

    Dynamic Languages Crew in Dublin, IrelandThe next meeting was also really cool – Martha Rotter, the local DE, had set up an interview with a lot of the local dynamic languages folk from around Dublin. That included Ana Nelson from Ruby Ireland, Jaime Hemmett from PHP Ireland, and Sean O’Donnell and Vishal Vatsa from Python Ireland.

    That was a ton of fun. I’ll be posting that on WiresideChat soon.

    Speaking in Dublin, IrelandLast stop was the public session that I did in Ireland with about 75 people in attendance. It was a varied group ranging from consultants to people that work on the Live platform for Microsoft out of the Dublin office. It was impressive how many people came with good and solid questions ready to ask. There was even a couple of people with written lists of questions that they wanted to make sure that they wanted to get answered. Martha told me afterwards that the crowd is usually very reserved and doesn’t ask a lot of questions – but they were really enthusiastically engaged during my session.

    More pictures from Ireland found in the sets Dynamic Languages in Ireland and Speaking in Dublin.

    Conclusion

    I learned a ton from my trip and hopefully was able to help people out. I’d love to hear from those that were in the various sessions about how they are applying anything that I talked about.

    About Me

    Josh Holmes I’ve been speaking at a lot of different events recently and I keep having to put together a bio. Some events want short bios, some want long bios. To help me more than anything else, I thought I’d post a couple of different lengths of bios out here so that I had a nice easy to point people to collection.

    Micro Bio
    Passionate soul who gets his kicks solving problems with deep fried awesomeness. Currently employed by Microsoft.

    Short Bio
    Josh Holmes is a passionate soul who gets his kicks solving problems with deep fried awesomeness. He is currently employed by Microsoft as a UX Architect Evangelist with Microsoft focused on building and educating the dev partners with a UX or Rich Internet Application offering in Central Region. Prior to joining Microsoft in October 2006, Josh was a consultant working with a variety of clients ranging from large Fortune 500 firms to smaller sized companies. Josh is a frequent speaker and lead panelist at national and international software development conferences focusing on emerging technologies, software design and development with an emphasis on mobility and RIA (Rich Internet Applications). Community focused, Josh has founded and/or run many technology organizations from the Great Lakes Area .NET Users Group to the Ann Arbor Computer Society and was on the forming committee for CodeMash. You can contact Josh through his blog at https://joshholmes.com.

    Josh Holmes on Mount Crested Butte - photo by James WardLonger and more self serving Bio
    Josh Holmes is a passionate soul who gets his kicks solving problems with deep fried awesomeness. He is currently employed by Microsoft as a UX Architect Evangelist with Microsoft focused on building and educating the dev partners with a UX or Rich Internet Application offering in Central Region. Prior to joining Microsoft in October 2006, Josh was a consultant with SRT Solutions working with a variety of clients ranging from large Fortune 500 firms to smaller sized companies. In most situations, Josh was called in as the technical leader on a project to lead the clients team to success. Josh is a frequent speaker and lead panelist at national and international software development conferences, including VSLive, Software Development Expo (East and West), Basta and the Rich Web Experience,  focusing on emerging technologies, software design and development with an emphasis on mobility and RIA (Rich Internet Applications). Josh has written and delivered many training classes over time for both public audiences as  well as courses tightly tailored for the clients needs. The topics of these classes ranged from XML to ASP.NET to the Compact Framework. Josh speaks from his experience and conviction based on many production successes that his clients have experienced. Community focused, Josh has founded and/or run many technology organizations from the Great Lakes Area .NET Users Group to the Ann Arbor Computer Society and was on the forming committee for CodeMash. You can contact Josh through his blog at https://joshholmes.com.

    You can contact me at josh.holmes@microsoft.com.

    Josh Holmes at RIAPalooza

    Josh Holmes

    eRubyCon 2008 Day 3

    I wrote a write up for eRubyCon 2008 Day 1 and eRubyCon 2008 Day 2.

    Jerry Nummi's buddy icontheedgecase's buddy iconBTW – thank you to Jerry Nummi for all of the great pictures of eRubyCon. I haven’t had time to browse and put them in this post but I’ll do that tonight or tomorrow.

    *Update – I added pictures…*

    I’m sitting in the back of day 3 reflecting on the previous two days. It’s amazing the group of people that Joe has put together here to speak on Ruby in the enterprise.

    Joe O'BrienJoe O’Brien started up the day with his DSL talk. I’ve heard the talk before but it’s still a fantastic talk. His sub-title on the talk “Why I love Ruby”. I like to add “(and Emacs chest thumping)” but that’s me… 🙂

    I’m not going to explain DSLs here because I wrote about them after hearing this talk the first time at https://joshholmes.com/2008/04/25/DomainSpecificLanguagesDSL.aspx.

    Honestly, part of what is so great about the talk is that Joe is just infectious in his passion and delivery. He, like a lot of great speakers, is a story teller. He told stories that ranged from past work in tech to past work prepping food displays for a cruise liner.

    One of the stories that he told was about a large company that he did some consulting work for. They realized that the core issues at the company really came down to two people being able to communicate – a DBA and an Accountant. The issue was that they weren’t speaking the same language. One was speaking in rows, columns, triggers, sprocs and so on. The other was speaking in points, rates, forecasts and so on. The solution was to write an ORM that the accountant could understand that the DBA could work with. This came in the form of a DSL.

    The food story was that the great sculptures on the table displays are actually food – not really edible but food non-the-less. It’s made from refined beef fat. There are many different forms, some softer and more moldable and some closer to marble than clay, and depending on what was needed, the master sculpture would pick a different form. Similarly, Joe picks a language that he can shape and mold to his needs. That’s what Ruby is for him.

    Back to Emacs, one of the reasons that Joe loves Emacs is that you can shape the commands and key-bindings and the whole environment to shape your way of working rather than the other way around. I’m still not convinced. My biggest problem with Emacs is that the learning curve before you can be even mildly productive is giant. I understand that once you climb that mountain that the view is nice. I’m just not convinced that the incremental jump over my current tools will be enough to be worth it.

    Interested in the talk? You can watch it from when Joe did it at the Mountain West Ruby conference.

    Chris WanstrathChris Wanstrath followed Joe with a talk about GitHub. They have taken the Git source control and given it a centralized source server. The reality, as he explained it, with Git is that every person has a full blown copy of the repository. The interesting part is that people can go client to server or they can go peer to peer or any combination that you can possibly imagine. When they want to make a change, they actually fork the project.
    Especially with the Git peer to peer checkins, it’s actually not a checkin. Nobody actually has write access to anyone else’s Git repository. When they are ready, they let the other devs know that they should pull and merge. They way that it works all the way up the list is that there are devs that make changes who let the project managers know that they should pull. That project manager is the “blessed version”.
    The simplest explanation of GitHub is that it gives the individual programmer an offsite repository so that they don’t have to be online when the other members want to make a pull.  

    Jim WeirichJim Weirich did the lunch time keynote called “What the Enterprise Can Learn From Your Mom”. In the spirit of the previous talk, he told us that all of his slides were up on GitHub already. He started out talking about Moores law. The first thing that he points out is that the number of transistors on the chip doesn’t mean that the chips will be faster – it might, and does in current times, mean that we get more cores. There’s a possibility of 100 core processors in the near future. Similar to our moms, we will have to learn how to do more and more things at one time. The fun part is that most people don’t know how to write multi-threaded applications… Jim went on to do a fantastic explanation of race conditions and threading at large. Somewhere in here I missed part of the talk trying to track down why the air-conditioning was not on. As I walked back in Jim was telling war stories about collecting real time data off of a jet engine in a multi-threading system. They designed a system that would only fail one in a million times – except that it was collecting data about a million times a day – oops. They had designed the system to fail once a day. Back to the drawing board…
    Then Jim shifted gears. He started talking about “Blub Programmers” and languages other than Ruby. Jim is definitely the guy to do this. Jim is always playing with some bizarre language that would twist a normal brain like a pretzel.
    First language that he talked about was Erlang. It’s a bizarre language. For example, you loop by writing tail recursion functions and most of the communication is done by sending process messages. The next language that he talked about was Closure Clojure (thanks Stuart Halloway for the correction). The interesting part about it, especially in light of the rest of his talk, is that it’s got different types of variables that are aware of multi-threading inherently.

    Michael LetterleMichael Letterle followed Jim’s session with a session on IronRuby. To be far, I was supposed to follow Jim. However, I convinced to sw
    itch me and Michael because I thought his talk was more core IronRuby than mine and would free me up to concentrate on Silverlight more than spending my time talking strictly about IronRuby. I was right and I liked the order. But I do deserve the comment that Michael started with where he called me an “ass” for making him get up right after Jim Weirick who is a phenomenal speaker.

    Michael is one of the community contributor to the IronRuby project and has done a lot of work. He started with a lot of discussion about how the culture at Microsoft is shifting to be more and more open. With projects like CodePlex and Port25, there’s a lot of great new things.
    Michael ran a lot of the test that were run at the Ruby Shootout in 2007 to see the differences and where things are now. While the functionality was largely complete, the perf was not great. It was a little worse than twice as slow as Jruby and MRI. As it’s still in beta and heavily under development, I’m not dismayed by that at the moment. If that’s still the case in a year, I will be.
    Michael’s take on the talk was that since IronRuby is Iron, we should look at it with battleship grey windows applications. 🙂 He was adamant that there be an IronRuby talk that wasn’t about web technologies. He wrote a small windows app that hits a database and does normal IO type work similar to any and every enterprise application out there in the world. The next thing he did is fire up ir.cmd which is the IronRuby’s interpreted runtime. Then he attached to the running windows application and modified the application’s GUI and business logic to include tax information. Some of the cool things that he did was opening up base class library items and started adding Ruby things to them. For example, he added method_missing to the base Windows.Forms.Form class.

    It’s awesome that there are guys like Michael out there in the world that are passionate Microsoft, Open Source, Ruby, .NET, Enterprise and Community. He’s a great ambassador from one world to the next carrying those passions with him everywhere he goes.

    Josh Holmes– I followed Michael talking about Ruby in the Browser through Silverlight. I started out by talking about what evangelists do. After that I talked about User Experience and what that means to software. Then I started talking about some companies where the user experience, and their use of Silverlight, are making a great difference. I showed off the Olympics and the Hard Rock Cafe live and online. Then I pulled up some of the great work that Jimmy Schementi has been doing with a project that he calls Silverline. It’s pretty fantastic – it’s a number of different IronRuby samples running in Silverlight. The one that I missed showing and discussing was the idea of moving the controller in a Rails app out to the browser with IronRuby. Oh well. Next year.

    I think that my talk was well received but welcome any comments. 

    – Lance Carlson followed my session and closed out eRubyCon with a talk about an open source project that he’s writing called Anvil. It’s a framework for creating desktop applications that’s platform agnostic. The goal is to wrap all of the possible desktop frameworks from Shoes to RubyCocoa in one common framework. It’s a very interesting idea.

    – Closing thoughts. Joe O’Brien did a fantastic job putting together this whole conference. The quality of the program, the speakers, the logistics, the whole package is fantastic every year. This is one of the highlights of the year for me every year. The other absolutely non-negotiable item on my calendar is CodeMash. The ton and the maturity of the conference coupled with the passion that not only the speakers show but the attendees as well is unparalleled

    It’s an honor to me that Joe has invited me to come and associate with this group of elite and influential speakers/friends/attendees/geeks/passionate people that makes up the Ruby community. I’ve really enjoyed getting to know everyone at the conference.

    I was thrilled that Joe wanted to host the event at the Microsoft offices in Columbus. We’re not going to be able to do that next year because we’ll overflow the venue but this year is was the perfect size. We can fit about 120 in the bigger meeting room without having to sit on laps and we had right at 106 in there. It was full but not crazy.

    Last year, Joe closed with question as to whether or not they were going to do it again. This year, Joe ended with a definitive – “We’ll be announcing dates soon for next year, keep an eye on http://www.erubycon.com or the mailing list”. Me… I’m very happy about that.

    eRubyCon 2008 Day 2

    Yesterday I wrote a write up of eRubyCon 2008 Day 1.

    Erubycon – Charles Nutter started up with JRuby. I’m always impressed by people that are able to make their weekend project their full time job. I was further impressed that Charles was up with the rest of the speakers until closer to 4am than any of us should really admit, drinking really good scotch and solving the world’s problems.

    Charles talked about the JVM and Java as both a problem and a great asset. There are a lot of people that look at the J in JRuby and automatically associate it with all of the things that they don’t like about Java. Charles answer is to separate the JVM from the Java language. He did a really good job of talking about the things that the JVM brings over the standard Ruby runtimes such as world class garbage collection, memory compaction, thread handling and the like. He did a number of really compelling demos around threading in particular. One of the things that he said here is that JRuby and IronRuby are really the only Ruby implementations that are able to do native threads because they are the only ones that are built on production quality VMs that handle that native threading for them.

    0816080915One of the great quotes was “We write a lot of Java. So you don’t have to…” – Charles Nutter

    After setting the stage, he pulled up a long list of features and said – “There’s way too much for me to cover in the time left – what do you want to see?”. that was fun. The first suggestion that he showed was 2D graphics that flashed a bunch of little balls around the screen. It was even responsive to voice commands. The second suggestion was to show Rails running on JRuby. He showed that they are running Rails on Ruby 1.8.6 (java). Next he brought up image_voodoo to do more 2D libraries. Lastly, he showed “java_inline” which allows you to inline Java code similar to the Ruby_inline which allows you to inline C right in your Ruby code.

      – Evan Light came up next. Unfortunately I was putting out a few small fires. Fortunately Michael Lettere wrote up a small write up so that I could include it here.

    Evan Light hates EJBs.
    EJB encourages difficult to test idioms, private fields, private static final fields.
    Nice demo code “public class DeepThought” <— How do you test that?
    You COULD shoot the guy who wrote it, but don’t do that.
    Very good use of humor, engaged the audience.

    Stuart Halloway, Neal Ford – The lunch keynote was Neal Ford. Neil Ford is an amazing speaker. What’s cool about him is that every time I see him speaker, I wonder how he could get any better. And then he does. Today’s talk was about complexity. One of the core concepts that he talked about is the idea of Language Lockdown. It’s when language writers put in features to protect people from themselves and cut down on the stupid things that you can do. The idea is that if you do that the lower end (read cheaper) developers will still be productive. “What they are trying to do is strap a rocket to the ass of a turtle. What they are actually doing is putting chains on the rabbits than can go fast.”
    The problem with that take though is two fold. First, it is not a linear line between the top developers and the lower end developers. What that means is that on the curve, a highly productive programmer will get done in one day what it will take an average developer more than a week to do and the weak developer a month or more. To point out the second issue, Neal quoted one of my other favorite speaker – “Bad developers will move heaven and earth to do the wrong thing” – Glenn Vanderburgh
    One of the huge questions that he put out there is “How much of your enterprise software simple services accidental complexity?”. It’s a great question.
    As he was wrapping up, he left us with the thought that “Courage is contagious. Cowardice is infectious”.

    Stuart Halloway– Following Neal was Stuart Halloway again. He was talking this time about how one can fail with 100% test coverage. It’s an interesting topic because for so many people, 100% test coverage is the holy grail that they shoot for. The first thing that he pointed out is that you might cover all the lines, but not all the branches so it depends on how you measure things to get to 100% coverage. The second thing that he points out is that you can cover all the code, but not all the corner cases. The example that he used is testing if a value is above or below $25.00 but forgetting $25.00 even. Oops. Then you can start writing way too much code and too much complexity into your tests. Now you need to test your tests and you’ve taken too much time writing them. Then he talked about the “ugly mirror” where the test is really a mirror of the code where you’re covering the line but using the code that you are trying to test while testing – oh dear I have a headache. This is where he says that you are allowed to write literals in your tests.
    Neal Ford piped in – “It’s ok for your test to be moist, not drenched”.
    The next topic was slow tests and how dangerous they are. The short version of the issue is that if the unit tests don’t run in under 1 second, developers are not going to run them. Functional tests should run in under 2 minutes. If they don’t, then factor them so that they run on different schedules, parallelize them on different machines to get the normal check-in process back under the 2 minute mark if possible.
    The last type of fail that he talked about is shallow tests. The quote that he referenced is “No automated test suite can ever replace exploratory testing.” – Jay Fields. The goal is that once the unit and functional testing passes, that people will put themselves in the clients seat and go spelunking and try out a bunch of stuff.

    Joe O'Brien, Chris Nelson, Jim Weirich – The next talk was a very unique idea called “Dialogue Concerning the Two Chief Modeling Systems”. They wrote a play! The guys from EdgeCase, Joe O’Brien, Jim Weirich and Chris Nelson, acted out a normal project for them. They started out on twitter talking about the new project that they just landed. Then they actually started with the early on meetings that they have. Joe played the cowboy dev lead who insists that it’s a “simple rails app” and decides to do a data first model. Chris played clueless nub and Jim played the seasoned architect that was concerned about requirements analysis, separation of layers and behavior driven models. Joe, ready to start slamming code out, starts pairing with Chris. The first thing that they tackle is a simple calendar event. Then they have to schedule r
    eoccuring events. Joe, the cowboy, just decides to replicate the events in order to do the reoccurence. The next requirement is rescheduling the reoccuring meetings…. Oops. They have neatly coded themselves into a corner and start hacking out a solution. At that point, Chris decided to take a walk and went to see what Jim thought of it all. Jim started writing out CRC cards and started thinking about higher level ideas, bringing in light-weight design patterns around temporal expressions from Martin Fowler and so on. Jim, the architect, is blithely ignoring “implementation details” such as where to store the data and performance. When performance sucked – they went back to the drawing board. Jim and Joe had to eventually come together. Of course the answer was to write a DSL… 🙂
    Great talk. The good news is that Neal Ford is following them so there won’t be a let down as we end the day…

    – The last talk of the day was Neal Ford talking about Design Patterns in Ruby. One of the things that he pointed out fairly early on is that the Design Patterns book, even according to one of the authors ( Vlissides), should have been called “Making C++ Suck Less”. Even the Smalltalk that’s in the book was really C++ written in Smalltalk syntax. He covered a number of different patterns including the Iterator and the Interpretor pattern. There were a number of circumstances where he pointed out that the issues addressed by the pattern were addressed by the Ruby language. For example, the interpretor pattern’s intent is really addressed by DLSs which are dead easy to implement in Ruby. The only problem with this session is that it’s at the end of the day and my brain is a little mush at this point.

    eRubyCon 2008 Day 1

    image I’m sitting here at the second Enterprise Ruby Conference (eRubyCon). There’s a couple of fun and interesting things that have happened this year.

    One of them that’s exciting for me is that the whole event is being hosted at the Microsoft facilities in Columbus, OH. Joe O’Brien was looking for a facility so I offered up the office since we can get that for free. There are some minor facility issues, such as the internet access is fairly limited due to the Microsoft security policies. We got that mostly sorted by renting a number of cell card based routers from iBox2Go. It’s not a perfect solution because we’re at about double the recommended number of users per router. That’s caused network to be a touch spotty but it’s better than non-existent.

    Another thing that’s a ton of fun is that we’ve doubled the number of attendees. The conference room here at the Microsoft office is FULL. Tomorrow I’ll show some pictures from the conference room. It’s really cool to see.

    0815081326The whole event is going very well. Joe has been plagued with speakers having travel issues and the like. For example, Stu Halloway was supposed to do a lunch time keynote but was thrown off as his plane had mechanical issues. The great news is that this is an Agile conference and everyone is used to requirements changing mid-project and Joe was able to shuffle the speakers.

     – First up was Randall Thomas from the Engine Yard. He was talking about ETL (Extract, Transform, Load). He did a masterful job of making that important topic interesting and fun. It’s a fundamental topic but even Randall equated it to Bob Ross painting trees and it was tough to keep people awake talking about the best possible way to make one string into two and two into one…

    – Next was Tom Mornini. I wish I had been able to stick around for this talk. He talked heavily about Vertebra, Scalability and Accountability.

    Anthony Eden followed Tom with a session on Identity Management. It was interesting to hear his take on OpenID, InformationCard, SAML and how Ruby works with those. The good news for Ruby is that it does really well with and is leading the way with OpenID. The bad news is that the things that are done inside of an enterprise are a little less prevalent in the Ruby at the moment. It was a great tutorial on the state of

    Giles Bowkett talked about Meta-Programming vs. Code Generation. He had a fun and deep tirade on something called Monkeypatching.

    “A monkey patch (also spelled monkey-patch, MonkeyPatch) is a way to extend or modify the runtime code of dynamic languages (e.g. Smalltalk, Javascript, Objective-C, Ruby, Perl, and Python) without altering the original source code.” – http://en.wikipedia.org/wiki/Monkey_patch

    This is meta-programming at it’s finest. He then went on to talk about meta-monkey-patching or meta meta programming… Somewhere in there I got a headache. That’s about the time that he brought it back to Code Generation. My favorite quote, other than “Here’s a completely gratuitous picture of Jessica Albert” (which did come with a gratuitous picture of Jessica Albert…) ” “Should I hire a programmer or should I just write one?”. He gave an example of a past job at NY Times where he left after he wrote a “mini-giles”. That’s a code generator that did much of what he had been doing until he wrote the generator. The “mini-giles” meme has really taken off since then and has been worked into a ton of the talks and conversations…

    Stuart Halloway followed Giles with a keynote called “Ending Legacy Code in Our Lifetime”. He had one of the better starts that I’ve ever heard – “Legacy Code is like Porn. I know it when I see it. It’s ubiquitous on the internet. And like all porn, it’s ultimately unsatisfying”. (At least he has it on good authority that porn is ultimately unsatisfying). One of the things that Stuart points out is that code can be broken down to Ceremony and Essence. The Essence is what you actually want to get done. The Ceremony is the stuff that you have to do in order to have the Essence work. For example, if you have gone from “New” on an object to writing factories – the reality is the factory is Ceremony. End of the day, all you really wanted is an object.

    Another great quote from Stuart was “Ceremony leads to fear. Fear leads to anger. Anger leads to pain. Pain leads to Ceremony.” The goal, according to Stuart, is to have as little ceremony as possible and have every line of code contribute to the Essence. And right now, Ruby is the closest answer as it’s got a fairly high Essence to Ceremony ratio.

    His talk was chock full of great quotes – “What authority authorizes this in the Ruby world? – ME – and I’m Right”. It was full enough of great quotes that there’s a Stu Halloway Quote Tracker.

    – Brian Sam-Bodden, always a great speaker, closed out the day with Refactoring with JRuby. He talked about the core of refactoring is having a great suite of tests. One of my favorite quotes from him was “Since I’m a Java consultant, I have a lot of work to do…”.

    Overall, it was a great day. I really enjoyed catching up with a lot of the guys that I don’t get to see at the .NET community events. I’m hoping that most of these guys will be at CodeMash cause that will give me 2 times a year to hang out.

    Miguel de Icaza on Mono and Moonlight

    Very, very close (It was #1 Explore)         132 times Fav.!Moonlight is still continuing to progress. Moonlight is the open source implementation of Silverlight for Linux. It’s being run by Miguel de Icaza of Novell.

    There are a couple of things that are interesting to me about this project.

    First, as I talked about in Dancing in the Moonlight!, it’s unprecedented interop and openness on the part of Microsoft. Microsoft gave the project the specs and a ton of support. The Moonlight devs even have access to the Silverlight engineers as they are developing the open source compatible solution to help clarifying specs and ensuring compatibility. One of the things that’s tough from a legal perspective is all of the codecs and other video components. What’s going to happen is that there’s a “Media Pack” that users will download from Microsoft to play videos. This circumvents the legal issues and allows Moonlight users access to all the great VC1 video out there.

    Second thing I find interesting is that they are finding interesting ways to innovate even in the constraints of being 100% compatible. For example, They built a Silverlight designer called Lunar Eclipse completely in Silverlight. That’s a really cool idea. They are looking at offline ideas around Moonlight and making their implementation a WPF light enabling them to revamp the GNOME’s desktop development paradigm. They’ve started with desklets, which are small Silverlight components that run in a desktop framwork. Again, really innovative idea.

    Miguel did an interview with derStandard.at about the projects and how they are going at Miguel de Icaza on Mono