Welcome to MSDN Blogs Sign in | Join | Help

We've seen a number of reports in the forums and on twitter about confusing results when you customize ClassificationFormats in Intellipad. Here are a few known pitfalls:

  1. If you run with UAC turned on and your changes are not getting picked up at all, you might be running into a virtualization issue described in this blog post. The January CTP should help avoid this issue but if you're using another editor to edit your XCML file (why would you do that?), that app might not be "UAC aware" and it will run in virtualization mode leading to this issue.
  2. If you choose to back up your original ClassificationFormats.xcml file, make sure change the file extension or back it up somewhere else. Intellipad loads all XCML files in the directory so changing the filename is not sufficient.

Thanks to all of you for your feedback and help in figuring out these issues!

-hoop

Tomas Restrepo tweeted about notable font size differences in Intellipad compared to Visual Studio.

Intellipad uses a text editor built on the Windows Presentation Foundation (WPF). In WPF, font size is a numeric double measured in device-independent units (1/96th inch).  The January CTP of Intellipad doesn’t use the WPF FontSizeConverter to parse font sizes so Intellipad defaults to this unit. Visual studio uses points (1pt = 96/72)px.

We hope to have this resolved in the future so that the FontSize property on a ClassificationFormat can be specified in any of the following formats:

  • px (default) is device-independent units (1/96th inch per unit)
  • in is inches; 1in==96px
  • cm is centimeters; 1cm==(96/2.54) px
  • pt is points; 1pt==(96/72) px

For now, a little math is necessary.

-hoop

A reader asked,

How do I change the default background color?

I have successfully changed keyword foreground/background colors by modifying the ClassificationFormats.xcml file, but I don't see how I change the white background for the entire buffer view.

While we have an open item to make this configurable in the same way, for now this can be done by adding a custom command, as in this example:

# Add the following to commands.py, reload using Ctrl+Alt+F5, and the next time you hit Ctrl+Shift+F2,
# the background will change to black.
@Metadata.CommandExecuted('{Microsoft.Intellipad}BufferView', '{Microsoft.Intellipad}SetBlackBackground', 'Ctrl+Shift+F2')
def SetBlackBackground(target, bufferView, args):
bufferView.TextEditor.TextView.Background = System.Windows.Media.Brushes.Black

Intellipad has been live for about 3 weeks now and we're really glad to see the excitement around it. Lots of folks have been following examples on this blog and others that describe the many ways to customize Intellipad. We've already received a great deal of feedback and we love it so keep it coming.

Here are a few tips for anyone customizing Intellipad after installing it with the Oslo SDK:

Intellipad Configuration Files

At startup, Intellipad loads extensions and customizations based on a configuration file that specifies where to look for extensions and how they should be loaded. By default, it loads ipad.xaml but you can load other ones using the /config option. Creating custom configuration files is a great way to launch Intellipad with different customizations or to load extensions from a different location. On my laptop I have an ipad.xaml that looks like this:


<ipad:IntellipadCore
  xmlns:ipad='clr-namespace:Microsoft.Intellipad;assembly=Microsoft.Intellipad.Core'
  xmlns:mi='clr-namespace:Microsoft.Intellipad;assembly=Microsoft.Intellipad.Core'
  xmlns:cm='clr-namespace:System.ComponentModel.Activation;assembly=Activation'
  xmlns:s='clr-namespace:System;assembly=mscorlib'
  xmlns:scg='clr-namespace:System.Collections.Generic;assembly=mscorlib'
  xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
  <ipad:IntellipadCore.CatalogSources>
    <cm:FileCatalogSource RelativeCacheFilePath='ipad\root.catalog'>
      <cm:FileCatalogSource.Files>
        <s:String>Microsoft.Intellipad.Core.dll</s:String>
        <s:String>Microsoft.Intellipad.Framework.dll</s:String>
        <s:String>Microsoft.VisualStudio.Platform.Editor.dll</s:String>
      </cm:FileCatalogSource.Files>
    </cm:FileCatalogSource>
    <mi:IntellipadCatalogSource SubDirectoriesOnly='true' DirectoryPath='Components' RelativeCacheFilePath='ipad\components.catalog'/>
    <mi:IntellipadCatalogSource SubDirectoriesOnly='true' DirectoryPath='Samples' RelativeCacheFilePath='ipad\samples.catalog' />
  </ipad:IntellipadCore.CatalogSources>
  <ipad:IntellipadCore.SettingsSources>
    <mi:IntellipadCatalogSource DirectoryPath='C:\Users\hsomu\AppData\Local\intellipad\Settings' RelativeCacheFilePath='ipad\settings.catalog'/>
    <mi:IntellipadCatalogSource DirectoryPath='C:\Users\hsomu\AppData\Local\intellipad\Settings\VisualStudio' RelativeCacheFilePath='ipad\settings-visualstudio.catalog'/>
  </ipad:IntellipadCore.SettingsSources>
</ipad:IntellipadCore>

I made a copy of the Intellipad settings folder at " C:\Users\hsomu\AppData\Local\intellipad\Settings" and pointed my xaml file there instead of the default location. I can now customize the files in that directory and launch Intellipad using a shortcut " ipad.exe /config: C:\Users\hsomu\AppData\Local\intellipad\ipad.xaml". This allows me to customize Intellipad to my heart's content and not worry about breaking anything.

UAC Virtualization Compatibility

The PDC build of Intellipad doesn't contain an application manifest so users can run into compatibility issues with UAC enabled. The Oslo SDK installs Intellipad to the 32-bit program files folder under " Microsoft Oslo SDK 1.0\Bin\Intellipad". Trying to customize files in that folder can result in files seeming to appear and disappear depending on how you're looking for them. As an example open Intellipad, create a text file and save it to %ProgramFiles%\test.txt. Then try finding that file in Windows Explorer or via the command prompt. (Hint: it's not under " %ProgramFiles%\test.txt". Try " %LOCALAPPDATA%\VirtualStore\Program Files\test.txt"). Virtualization is a UAC compatibility feature to support legacy applications that need to write these locations. You can learn more about UAC virtualization here.

Note

  • This only occurs on versions of Windows with UAC (Windows Vista, Windows Server 2008 and Windows 7)
  • This only occurs if the user running Intellipad is an administrator otherwise the user will simply be denied access.
  • This does not occur if Intellipad is running as a 64-bit process (this is the default on 64-bit Windows).
  • This behavior will be more consistent in a future build of Intellipad. We will have a better story for customizing Intellipad and non-elevated processes will simply be denied write permissions to administrator writable locations.

Intellipad Startup Issues

We've seen incidents where users run into problems starting Intellipad because of the UAC virtualization issues above. If you made changes to your Intellipad files and are trying to undo them, make sure to check under "" %LOCALAPPDATA%\VirtualStore" to make sure there are no files in there that are getting picked up. The fastest way to get there is to use the "Compatibility Files" button in Windows Explorer (This button only shows up if there are files in VirtualStore). If you have files in the VirtualStore, Intellipad may pick them up when it's loading extensions and settings. Uninstalling the Oslo SDK does not clean up files in the virtual store.

The Intellipad team is really excited about all the cool extensions and customizations people are doing for Ipad. Here are a couple more that you might find useful:

Syntax Coloring for Your Custom Mg Language with Intellipad
on Justin Bailey's CodeSlower blog

Discover Intellipad commands using PowerShell
on Doug Finke's Development in a Blink blog

Have something you want us to see? Need help on an extension or customization you are trying yourself? Let us know! Use the EMAIL link at the top of the page.

Since I am new to Ipad (like you!) and also new to Python, I thought I'd give you a little different take on the process of adding a custom command for ipad, along with the command itself. I apparently do things in a non-standard way, even when following instructions. The up-side is that I tend to uncover a lot of bugs that way. The down-side is that things don't always work first try. So, follow along with me to get a look at some troubleshooting and debugging as well.

I created a new python file and placed it in the Settings directory. I copied imports, initialization, and a command header from Commands.py. I renamed the command, gave it a new shortcut key, and defined it as just a simple writeline, using Core.Notify. I saved, reloaded settings (Ctrl+Alt+F5), and tried to execute it. I tried the shortcut key and executing by name, and I got no error but nothing seemed to happen either. Here are some steps I took to debug: 

  • Used the Help menu and chose Commands (or, Alt+F1). My command was showing up there but the shortcut key I assigned was not. It's possible that I duplicated a key combination that was already in use. If your command is not showing up in the list, make sure your file is in the Settings directory of the running ipad instance and has a python (.py) extension, and try reloading via Ctrl+Alt+F5. Refresh the Commands help to see it there. (I just changed my command keys to None -- that will be an issue to track down another day.)
  • Tried executing the command by name. I learned that I needed to give the whole name, including the namespace that I had copy-pasted when I created the command:
  • Used Visual Studio to attach to the Ipad process to debug the script. In VS, I opened the Commands.py file and my new file. I set a breakpoint in a Commands.py command, then called it in Ipad. I saw the breakpoint hit. Then I tried the same thing in my command. The breakpoint was not hit. What I discovered was that some text I had copy-pasted was indented too far, creating (I think) an essentially empty function definition (hey, I said I was new to Python too!). I unindented the line and voila, breakpoint hit.  

Next, I swiped code from BuildProjectCommand to get the project items. I called Common.py OpenProjectItemHandler to actually open the items.

I discovered that for this to work, the .mproj had to be opened using 'Open Project' and not just 'Open'. This seemed to work ok with the Enumeration sample project. But, when I tried my command on the Relationships.mproj, which has 4 .m files, I got this error:


Intellipad nicely put the cursor on the error line in the file (I have highlighted it here). Ah, I see that this function wants a project context from the current view on each call, but our second call opened a .m file in the view that had contained our project buffer. Hmmm, maybe this is overkill and all I really need to do is call this:
   
   
Common.OpenUriInActiveView(uri, sender)

This does what I want. I thought my command had a side effect of opening a second buffer for the .mproj file itself, in MS Build Project mode rather than Project View mode. I added a line to skip any uris ending in ".mproj", but this didn't fix the problem. I found that issue elsewhere as well.

 So, like I said, I tend to uncover a lot of bugs. I filed three as a result of this exercise:

  • Opening the spurious project buffer
  • Inability to toggle a project file between Project View and MS Build Modes
  • Project context attributes not always tracked for buffers 

The last 2 have to do with why you have to choose "Open Project" and can't just open a project file to get this to work. I did not institute any guards or error handling for these issues in my command -- I think moving on to actually fixing bugs is more important! 

Jon wrote a great article how to add a custom command. Quoting from Jon's post: "All in all I find IPad to be a really interesting and powerful text editor - but being able to customize the menus and commands with such ease I think is just another example of the cool work the Oslo team is doing for us as developers." 

For details see:  http://www.masteringbiztalk.com/blogs/jon/PermaLink,guid,92ec6f1f-45e5-4b7d-b675-548be5131a07.aspx 

In this post we will go over how to create a custom MGrammar Command in Intellipad.

Launch Intellipad with Samples enabled (See Quetzal's post on Intellipad Samples if you are unfamiliar). Let's open up %ProgramFiles%\Microsoft Oslo SDK 1.0\Bin\Intellipad\Samples\Microsoft.M.Grammar.IntellipadPlugin\MGrammarCommands.py in Intellipad. WordWrap is turned on below via Ctrl+W,W as the lines are too long to fit on the screen below:

Now let's copy the following python snippet to the end of the MGrammarCommands file. It is a slight modification to the TreePreview command to support launching the MGrammar panes without requiring an existing MGrammar (Caveat: APIs used by the following command is not yet locked down and are expected to change significantly before release):

@Metadata.CommandExecuted('{Microsoft.Intellipad}BufferView', '{Microsoft.M.Grammar}NewMGrammar', 'Ctrl+Shift+Z')
def NewMGrammar(target, sender, args):
    from Microsoft.Win32 import OpenFileDialog
    from Microsoft.Intellipad.Host import HostWindow
    from System.Windows.Controls import Orientation
 
    transformSource = Core.ComponentDomain.GetBoundValue[System.Object]('{Microsoft.M.Grammar.IntellipadPlugin}MGTreePreviewBufferSource')
    
    hostWindow = HostWindow.GetHostWindowForBufferView(sender)
    
    #reset the panes if needed
    if hostWindow.BufferViews.Count > 1:
       for (idx, view) in enumerate(list(hostWindow.BufferViews)):
           if view != sender:
               view.Close()
       Common.DrainDispatcher()

    uri = System.Uri('file://')
    sender.Buffer = Common.BufferManager.GetBuffer(uri)
    errorUri = System.Uri('transient://errors')

    errorView = hostWindow.SplitBufferView(sender, Orientation.Vertical)
    hostWindow.ChangeBufferViewLength(errorView, 0.20, Orientation.Vertical)
    errors = Common.BufferManager.GetBuffer(errorUri)
    errorView.Buffer = errors
    errorView.Mode = Core.ComponentDomain.GetBoundValue[System.Object]('{Microsoft.Intellipad}HyperlinkMode')

    grammar = Common.BufferManager.GetBuffer(uri)
    hostWindow = HostWindow.GetHostWindowForBufferView(sender)
    grammarView = hostWindow.SplitBufferView(sender, Orientation.Horizontal)
    grammarView.Buffer = grammar
    Common.Write(grammarView.Buffer, 'module M1\r\n{\r\n\tlanguage L1\r\n\t{\r\n\t\tsyntax Main=empty;\r\n\t}\r\n}')
    SetMGMode(target, grammarView, args)
    hostWindow.ChangeBufferViewLength(sender, 0.4, Orientation.Horizontal)
    Common.DrainDispatcher()
        
    uri = System.Uri('mg2tree://TreeView')
    (hasBuffer, treeViewBuffer) = Common.BufferManager.TryGetBuffer(uri)
    if hasBuffer: treeViewBuffer.Close()
    buffer = transformSource.CreateBuffer(uri, sender.Buffer, grammar)
    Common.BufferManager.OpenBuffers.Add(buffer)

    hostWindow = HostWindow.GetHostWindowForBufferView(grammarView)
    newView = hostWindow.SplitBufferView(grammarView, Orientation.Horizontal)
    hostWindow.ChangeBufferViewLength(newView, 0.5, Orientation.Horizontal)
    newView.Buffer = buffer

    SetPreviewMode(newView)
    
    SetDynamicParserMode(sender)

    Common.SetActiveView(sender)

Now that I have pasted the above snippet, let's go over the python snippet.

@Metadata.CommandExecuted is a decorator for the immediate python function followed. It registers a command to Intellipad:

1st parameter: Command Target: This command is targeting a BufferView (i.e {Microsoft.Intellipad}BufferView), just like the TreePreview command

2nd Parameter: Command Name: The name is {Microsoft.M.Grammar}NewMGrammar, which will also be displayed in help -> commands

3rd parameter: Command Keyboard Binding: In this case, we are mapping this command to Ctrl+Shift+Z

This new command is similar to the existing TreePreview command except the following:

  1. It allows one to launch MGrammar panes without requiring a pre-existing MGrammar on disk.
  2. Reset the splits/panes prior launching the MGrammar panes so it will always have enough space to display them

Save all the changes. Remember you will need administrator permissions to overwrite MgrammarCommands.py in the October 2008 CTP on Vista. Either launch Intellipad as Administrator or change the permission on the file from the windows explorer.

Now refresh the settings. This can be accomplished by invoking the '{Microsoft.Intellipad}ReloadSettings' command or Ctrl+Alt+F5. After a short delay, invoke Help -> Commands, you should see the newly created command:

So far so good, it will be even better if we can add this command to the MGrammar Mode specific drop down menu. You can access the Mode specific menu for MGrammar Mode in %ProgramFiles%\Microsoft Oslo SDK 1.0\Bin\Intellipad\Samples\Microsoft.M.Grammar.IntellipadPlugin\Private\ModeMenuItem.xcml. For details on adding the command to the mode specific menu, you can refer to Quetzal's post on Customizing Menu Bar.

With the new command, you can now launch the MGrammar panes without a pre-existing MGrammar file, like below:

 

An earlier post by Quetzal went over how you can customize Intellipad menu bar. In this post I would like to show how Intellipad can be customized to bind to your favorite shortcut of your favorite command easily.

In this example, I would like to have the RouteMiniBuffer command to bind to Ctrl+Space also. Below window show the existing keyboard bindings:

In order to do the binding customization, you will need to open KeyboardBindings.xcml in %ProgramFiles%\Microsoft Oslo SDK 1.0\Bin\Intellipad\Settings\VisualStudio\KeyboardBindings.xcml:

As Quetzal pointed out earlier, you will need to have Administrator permissions to overwrite KeyboardBindings.xcml in the October 2008 CTP on Vista. Either launch Intellipad as Administrator or change the permission on the file from the windows explorer.

Now, let's tell Intellipad to have Ctrl+Space be another binding for RouteMiniBuffer, in addition to the existing two bindings:

Save the change, and let's tell Intellipad to reload its settings (Ctrl+Alt+F5 or invoke the '{Microsoft.Intellipad}ReloadSettings' command). The edit menu should appear with the changes after a short delay:

The help -> commands menu is now also updated with your latest keyboard bindings preference:

That should be it!

[Update: Thanks to everyone who pointed out that the originally described method for setting the mode to MGrammar doesn't work in the PDC build of Intellipad.]
[Update 2: clarifying some things about using tree preview.]

One of the cool features in Intellipad is its support for creating custom DSLs using the MGrammar language. In the PDC release of the "Oslo" SDK, the MGrammar language services are shipped as part of the Intellipad samples. The goal of this post is to get folks started down that path.

Getting MGrammar support in Intellipad

To launch Intellipad with the sample plug-ins loaded, you either select the "Intellipad (Samples Enabled)" item when launching it from the start menu or pass it a startup configuration file that includes the samples directory (startup config files are specified using the /c option). An example would be: ipad.exe /c: ipad-vs-samples.xaml

In the future, the MGrammar Language support will not require loading with samples.

Creating your DSL

Once your buffer is in MGrammar mode, You should get a new top-level menu-item allowing you to access MGrammar specific commands. Now you're free to begin entering MGrammar code, as you do this, one of the really nice features Intellipad gives you is live parsing of a file via the Tree Preview. If you create and save a file written in your grammar, you can use the Tree Preview mode to see the results of your grammar as it is parsed.

You enter "Tree Preview Mode" by selecting Tree Preview from the MGrammar Mode menu.

You will then get an Open dialog prompting you to provide an input file for your grammar:

This will result in a layout in Intellipad similar to what you see here:

The errors window at the bottom will give you feedback about errors encountered while parsing the input file. You also get red squiggles:

Similarly, if there's an error in your grammar, the errors window tells you about it and gives you squiggles in the grammar.

The Intellipad October CTP ships with some extra capabilities that are not enabled by default. Some of these are interesting extras, like the column indicator behavior, and others were still "in progress" like the IronPython language services plugin. The easiest way to get these capabilities is to use the supplied shortcut to launch intellipad with samples enabled:

Or from the command line: ipad.exe /c:ipad-vs-samples.xaml

So, what are the rewards of running Intellipad this way? For starters you get the MGrammar mode as described by Hoop in an earlier post. In addition, you also get a python mode and a sql mode. Both of these modes give syntax coloring, and the python mode also provides syntax error squiggles:

Above you can see I have enabled the Line number behavior in the buffer view containing untitled3:

I set untitle3 to PythonMode by invoking the mini-buffer (Ctrl+/) and typing SetMode('PythonMode').

I created a new split by typing Ctrl+W,H (or I could have used the Window menu). In the new split I typed Ctrl+O to open an existing file in the new buffer view (or I could have chosen the File|Open menu). The file I selected was "%ProgramFiles%\Microsoft Oslo SDK 1.0\Samples\Northwind\Northwind.m". Then I chose the "M Mode"|"Reach SQL Preview" menu to generate SQL from the northwind model. However, this opened a new split on the right which is not where I wanted to see the SQL:

So I closed the reachsql split, typed Ctrl+W,V to create the new split below, and clicked the Northwind.m dropdown to change the buffer selected in that buffer view:

I selected mtfm://reachsql/ and I'm almost happy. Unfortunately there is a known bug in the CTP that the SqlMode gets lost when loading the buffer in a new buffer view. I fixed that by once again invoking the mini-buffer using Ctrl+/, and typing SetMode('SqlMode').

If you are wondering how I changed the color scheme for syntax coloring from the default shades-of-gray to blue, green, and red then I would be happy to tell you. Just edit the file "%ProgramFiles%\Microsoft Oslo SDK 1.0\Bin\Intellipad\Settings\ClassificationFormats.xcml". Here is where I made the keywords blue:

There is a column indicator behavior available off of the Window menu that highlights the 120th column in a subtle shade. Source code for this behavior is available in the "Sample Source" directory adjacent to the Settings directory.

Finally there is a proof of concept of an MSchema REPL. It is activated by typing SetMode('MScriptMode') in the minibuffer. Then you can type in valid MSchema program fragments and see the results:

Have fun!

-Quetzal

Intellipad's appearance and behavior is extremely customizable. In this post, I would like to show how the Intellipad menu bar can be modified. Future posts will look into changing syntax fonts and colors, and adding or modifying command behavior. In most cases, Intellipad is customized by modifying text files, and these text files are usually found in the Intellipad settings directory. This directory is located at "%ProgramFiles%\Microsoft Oslo SDK 1.0\Bin\Intellipad\Settings".

There are several ways to set the zoom level of text. You can click the zoom level indicator in the buffer view header , you can open the mini-buffer and issue a command like Zoom(1.5), or you can use the default keyboard shortcuts Ctrl+Minus or Ctrl+Plus (without the shift key). For the sake of argument, suppose you would like to have a menu for increasing and decreasing the zoom. The first step is to determine the name of the command you want to bind to. There are two ways to do this. One is to look at the python files in the settings directory. Another is to use the built in help. Press the F1 key or choose the Help|Commands menu to see the list of available commands. In the resulting buffer view, you can search through the list of commands. Here I have found the ones I am looking for and highlighted them:

Now I would like to create a top level View menu with Zoom Up and Zoom Down items. From the File | Open menu, I navigate to the file "%ProgramFiles%\Microsoft Oslo SDK 1.0\Bin\Intellipad\Settings\VisualStudio\MenuBar.xcml". Notice the mti namespace (in the green box) and the File | New menu definition (in the blue box). This definition creates a File menu with a New item that will invoke the command '{Microsoft.Intellipad}New' when selected.

Scroll down the document to just above the top level Window menu definition and insert the selected text:

Save your changes. Unfortunately you will need to have Administrator permissions to overwrite MenuBar.xcml in the October 2008 CTP on Vista. Either launch Intellipad as Administrator or change the permission on the file from the windows explorer.

Now tell Intellipad to reload its settings. This can be accomplished by invoking the '{Microsoft.Intellipad}ReloadSettings' command. The keyboard shortcut is Ctrl+Alt+F5. After typing those keys, the view menu should appear after a short delay. Selecting the Zoom Up menu item should increase the text size.

That is it! Let me know if you have any questions.

-Quetzal

In this post we will cover how to create your first M model with Intellipad. For more information about M language please see http://blogs.msdn.com/mlanguage

I launch Intellipad and start authoring my first M. Not very surprisingly, the first thing I want to model is the Intellipad team:

I want some syntax coloring. Let me bring up minibuffer…

.. and let me change the mode to MMode

Notice the following:

  • All M Keywords are now bolded (type, module)
  • Intellipad is telling the user that this file is currently in MMode (top right hand corner)
  • Also a M Mode Specific menu appeared in the top toolbar

Let's look at how the SQL look like for the above M from the M Mode specific menu:

A split is now appeared with the generated SQL:

The generated SQL is too big to view in a split. Let me close the left split (x button in the Untitled1* window) so I can view the SQL alone:

You can still view the original M file (untitled1*) by accessing the drop down:

Happy Modeling!

Welcome to the Intellipad Team Blog!

Emacs.net

Intellipad is what has previously been described as emacs.net. We like to think of Intellipad as a light-weight text editing tool with extensible hooks for both simple and sophisticated language services. Intellipad provides a text editing experience for the "Oslo" modeling platform.

Introductions

We thought we'd start out by introducing ourselves. The Intellipad team is a 5 person interdisciplinary feature team in the "Oslo" modeling platform team.

Hoop: I'm Hoop Somuah, the one authoring this post. I've been working on the Intellipad team for about 3 months now. Other teams I've worked on here at Microsoft include the Zune Web Services team, the Xbox Live team and the Windows Communication Foundation team. I'm very excited about connected systems and the tools that make it easier for people to build them.

Lynn: Lynn Gasch is the newest member of the intellipad team. In her own words: "I recently joined the Intellipad team and am learning the ropes. When I had my informational interview and got my first look at Ipad, I was really impressed with its slick UI, configurability, and transparency (won't it be great not to fight with tools that do things for us but hide how to fix them when they're wrong?!). We have some great features planned for the next milestone and I am excited to be here to help implement them. As a new user and developer of Ipad, I will probably be going through some of the same steps as you, so I am glad to have a place here to dialog about our experiences."

Sara: Sara Wong joined the Intellipad team about 6 months ago. Prior to joining the Intellipad team Sara worked on the Windows Communication Foundation and Silverlight. Her favorite hobby is Snowboarding. Sara would be a samurai but we can't have a samurai and a ninja on the same team.

Super Ninja: If you follow Doug Purdy's blog or attended the Lap Around "Oslo" talk at PDC, then you've already heard of Vijaye Raji the Super Ninja. In addition to his work on Intellipad, Vijaye is also the main developer behind Small Basic.

'Q': Quetzal Bradley is the engineering lead for Intellipad. He has a shiny metal desk and has some interesting ideas on testing after unit tests and code coverage.

5 out of many

The 5 of us aren't the only brains behind Intellipad. As part of the "Oslo" team we're fortunate to be able to draw ideas and opinions from a very diverse spectrum of extremely talented engineers. Hopefully in time you will get to meet some of them here or on other related "Oslo" blogs.

I'll end this post with a pointer to the Oslo Dev Center where you can get access to Intellipad along with the rest of the Oslo SDK. You'll also find a link to the MSDN Forums where we will keep an eye out for your questions, suggestions and other feedback.

-Hoop

 
Page view tracker