A Day of Questions

Today I was very excited to wake up in LA knowing full well that I didn’t need to
depend on a form of transportation other than my own two feet to get me to the PDC.
(I confess, I took the shuttle, but I could have walked). Arriving early at the site
to register (Thanks to Scoble for the heads up on the early registration times) before
any sort of rush.


Without any lines I walked up and was rapidly provided with a bag full of goodies.
Since there was no line, the nice lady that helped me decided she had some time to
ask about my “I’m blogging this” t-shirt. “What does that mean?” She asked,
“What is blogging”. Hmmm…. what is blogging?? I know what it is. I have a blog,
but what “is it”? I did my best to explain that it was an online journal
that allowed me to make comments about subjects, in this case the event, that
allowed anybody on the internet to view it. She heard the words, but I think I need
to come up with a better definition.


I quickly found myself all ready nowhere to go. I used the time to get my devices
configured for the wireless access. Everything worked great just like it’s supposed
to. However, seeing that I was online brought a number of questions from others having
problems getting configured. (Most just needed to refresh and IP or connect to the
correct wireless service)


Before long it was time to get in line to get a good spot for the keynote. The whole
line up, file in, and find a site made the “longhorn” name seem much more appropriate.
However, before going in there was another question. A fellow in a “Longhorn” shirt
approached, greeted me and proceeded to ask what I expected to see and hear. Again,
more questions. If I knew what I was going to see and hear I wouldn’t be standing
in line. I did my best anyway to explain that I was optimistic we’d see the new OS
Longhorn and some demos about the other various aspects. I continued on to explain
that I was also there see the “hype” and too be inspired by it. After a few minutes
of chatting he mentioned his name (Hillel). A short while later in the middle of Bill’s
talk I was quite shocked when he introduced Hillel Cooperman to demo Longhorn. All
I could think about was what I could have said differently if he had walked up and
said “Hi, I’m Hillel Cooperman and I’ll be doing the Longhorn demo for Bill Gates.”
Oh well… You live and learn.

PDC Here I Am!

What started out as a day of excitment boarding a plane to head west to LA almost
become a day ending wondering what strange city (Other than LA) I might rest
my head in. While transfering planes half way accorss the country we were informed
that the Air Traffic Control Center for southern California had to be evacuated and
that all flights into that area were on hold. We were told that our 11:23 am flight
would be 12:30… 1:30… 2:30… 4:15…. 7:00…. and FINALLY at 8:30 (I’m not even
sure in what time zone) two flights worth of people were loaded onto one larger aircraft
and we all finally made it. I hope that everybody attending the conference will share
out luck.

It was interesting how during this wait time I was able to meet a number of strangers
heading to PDC from various places. We’re all really looking forward to the show.

Version 0.5 of my PDC Session Browser is ready to roll!

Version 0.5 of my PDC Session Browser is
ready to roll! This started off for me as a way to learn how to do a few specific
new things for a current project and to get ramped to attend the (Now sold out!) Microsoft
Professional Developers Conference in LA. In order to get the most from the conference,
I’ve been working hard to increase what I know going in so that I can build upon it
and do even more with what I’ll see. It has been great to hear the ideas of others
including those working on similar projects.
it has been great to make a number of new contacts and I look forward to meeting you
in LA. I think that this is an excellent time to be a Windows developer, with great
opportunities for us to make the most of.

 

As mentioned before, I decided to create a Visual Basic.Net application using the
Compact .Net Framework so that it would run on my Pocket PC PDA. The goal was to write
a small application that would provide me with informational details on the various
conference sessions.

A few of the things used in to achieve this were:

 

- To connect to a web
service
to receive the latest updated session list.
- Store the all data locally on the device in XML
- Create a custom control to display the session data
- Maintain as small of footprint and ease of deployment possible

 


 

 

 

My next steps are:

- Fix the date sort

- Refactor a lot of the code now that I know what I’m doing
- Provide better error handling
- Create some sort of P2P/Blog style message board WIFI equipped devices
- Provide session notes (Share session notes?)
- Update notifications.

 

The ARM self-installing CAB file is available
here
. Drop me an email if you require a different version. Just copy it onto your
device and give it a tap. It will install itself in the Program Files directory.

 

Thanks to everybody for your help and support!

PDC Session List Web Service

To me, it seems really strange that I’m not somehow able to get a data friendly version
of the Microsoft PDC sessions and their appropriate info. What better way to attract
a bunch of developers than to give them a webservice with the details!!! It’s just
one of those things that would be really handy. Well folks, it’s not official, it’s
the best list I could compile and I hope it’s accurate (Don’t blame me if you miss
a session at this point because you think it’s gospel! Use at your own risk, Bill
and Steve own the rights, not me! …(Did I miss anything?))

PDC
Session List Web Service

PDCSessionList returns a dataset that looks something like this. After some sleep
I’ll do some fine tuning and post some better details!

<?xml version=”1.0″ encoding=”utf-8″ ?>

- <DataSet xmlns=”http://tempuri.org/DemoApp/PDCSessionList>
- <xs:schema id=”sessions xmlns=” xmlns:xs=”http://www.w3.org/2001/XMLSchema xmlns:msdata=”urn:schemas-microsoft-com:xml-msdata>
- <xs:element name=”sessions msdata:IsDataSet=”true>
- <xs:complexType>
- <xs:choice maxOccurs=”unbounded>
- <xs:element name=”session>
- <xs:complexType>
- <xs:sequence>
  <xs:element name=”title type=”xs:string minOccurs=”0 />
  <xs:element name=”track type=”xs:string minOccurs=”0 />
  <xs:element name=”codenumber type=”xs:string minOccurs=”0 />
  <xs:element name=”room type=”xs:string minOccurs=”0 />
  <xs:element name=”timeslot type=”xs:string minOccurs=”0 />
  <xs:element name=”speakers type=”xs:string minOccurs=”0 />
  <xs:element name=”abstract type=”xs:string minOccurs=”0 />
  </xs:sequence>
  </xs:complexType>
  </xs:element>
  </xs:choice>
  </xs:complexType>
  </xs:element>
  </xs:schema>
- <diffgr:diffgram xmlns:msdata=”urn:schemas-microsoft-com:xml-msdata xmlns:diffgr=”urn:schemas-microsoft-com:xml-diffgram-v1>
- <sessions xmlns=”>
- <session diffgr:id=”session1 msdata:rowOrder=”0 diffgr:hasChanges=”inserted>
  <title>“Avalon”
Graphics and Media (Part 2): Using Graphics, Animation and Composition in Your Applications
</title>
  <track>Client</track>
  <codenumber>CLI341</codenumber>
  <room>Room
403AB
</room>
  <timeslot>Tue,
October 28 3:45 PM-5:00 PM
</timeslot>
  <speakers>Greg
Schechter
</speakers>
  <abstract>All
Windows “Longhorn” application developers that make use of graphics to create exciting
applications and controls will benefit from this session’s essential knowledge, including
the extensive set of graphics primitives and capabilities. For those developing specialized
graphics applications, the advanced rendering concepts and capabilities provided in
Longhorn will be covered, such as composition, the key graphics abstraction Visual
(used for off-screen rendering and printing), and the imaging pipeline.
</abstract>
  </session>
- <session diffgr:id=”session2 msdata:rowOrder=”1 diffgr:hasChanges=”inserted>
  <title>“Avalon”:
Building Applications with Controls and Dialogs
</title>
  <track>Client</track>
  <codenumber>CLI300</codenumber>
  <room>Room
502AB
</room>
  <timeslot>Mon,
October 27 3:00 PM-4:15 PM
</timeslot>
  <speakers>Rob
Relyea
</speakers>
  <abstract>Learn
the way to build basic “Avalon”-based applications. This session covers layout of
applications, dialogs and controls using markup, code, properties, methods, events
and basic animations.
</abstract>
  </session>
</sessions>
</diffgr:diffgram>
</DataSet>

>

 

Sorting an ArrayList using the .Net Compact Framework

In order to provide sorting capabilities
for me Session List custom control, I needed a way to sort the ArrayList that I am
using to store my data.  Within
the .Net Compact Framework it is possible to due this by implementing the IComparable
interface on the object class I’m storing in the array. This allows a single sort
method. To provide multiple ways to sort the data, I can add more flexibility allowing
multiple sort orders by implementing IComparer. The code listed below allows me to
easily add the desired sort without adding a lot of custom sort code and taking advantage
of the framework.


 


 

Public Class SessionListItem

        Implements IComparable


 

.

. 
The rest of the class code is here


.


 

        Public Function CompareTo(ByVal obj As Object) As Integer _

        Implements IComparable.CompareTo

           
The default sort method

            Return Me.SessionCode.CompareTo(CType(obj,
SessionListItem).SessionCode)

        End Function


 

        Public Shared ReadOnly Property SortByName() As IComparer

            Get

                Return CType(New SortByNameClass,
IComparer)

            End Get

        End Property


 

        Public Shared ReadOnly Property SortByTitle() As IComparer

            Get

                Return CType(New SortByTitleClass,
IComparer)

            End Get

        End Property


 

        Public Class SortByNameClass

            Implements IComparer


 

            Public Function Compare(ByVal obj1 As Object, ByVal obj2 As Object) As Integer Implements IComparer.Compare

                ‘SortByName
can use the default IComparable interface

               
so call the CompareTo method

                Return CType(obj1,
IComparable).CompareTo(CType(obj2, SessionListItem))

            End Function    ‘Compare

        End Class    ‘SortByNameClass

        Public Class SortByTitleClass

            Implements IComparer

            Public Function Compare(ByVal obj1 As Object, ByVal obj2 As Object) As Integer Implements IComparer.Compare

                ‘SortByTitle
compares the integer property

                Dim SessionListItem1 As SessionListItem
= CType(obj1, SessionListItem)

                Return SessionListItem1.m_SessionTitle.CompareTo(CType(obj2,
SessionListItem).m_SessionTitle)

            End Function    ‘Compare

        End Class    ‘SortByTitleClass

    End Class


 


 

 

nbspAnother Day Some More Code

 Another
day, some more code. I made some good progress on my Pocket PC PDC Session project.
Mostly just worked on the custom control to display the info. I’ve started on the
code to sort and I’m trying to decide what I want to do about filtering data views.
I’m hoping to find time to put together all of the session info from the conference
and get the web service going. I’m jus tnot looking forward to trying to strip all
the info off of the PDC web site.(Wouldn’t it be great if I could just get my hands
on an XML file or something with all the session info!)

Benefits of Exploration Testing

A full day it has been! Tonight at the Triangle .Net
User Group
I enjoyed a very entertaining talk on the “Benefits of Exploration
Testing”
presented by Justin Gehtland founding partner of Relevance,
LLC
. Justin shared a learn by doing approach to software development. His highlights
include:


 

The key principles that motivate Exploration Testing are:

 

1. *The best documentation is observed
behavior.* Instead of reading

about how something should work, make
it work yourself.

2. *Failures in your application are
your fault, even if they aren’t

in your code.*Between system libraries,
frameworks, and third

party tools, most of “your” code isn’t
actually /your /code.

However, this is little consolation
to users who trusted /you/ to

assemble a correctly functioning application.

3. *Learning is active.* Passively
reading text or listening to an

instructor does not provide adequate
reinforcement of concepts.

4. *Programmers* *are often forced
to choose technologies based on

incomplete information.* Basing major
decisions on documentation

alone is certain to lead to suffering
later.

5. *Programmers must isolate and work
around bugs in supporting

libraries.* Since the technologies
are chosen based on incomplete

information, we are often forced to
work around shortcomings or

flaws in the chosen technology.

6. *Knowledge must be kept continuously
up-to-date. *Writing some

sample code before using an API in
a shipping application is a

very good idea, but it isn’t enough.
Your knowledge of an API needs

to be validated against every patch
or upgrade that end users

might encounter. Exploration testing
naturally dovetails with

continuous integration.

 

He’s got a white paper and
some other really good info on his site! I think with the pace of change in the industry,
the succesful learning styles are changing. They need to for us to keep up!

Pocket PC PDC Session Utility

Oh sure, just when you think you have a good idea, you read a PDC
blog
about somebody else doing the same thing. Well, at least similar! Who says
there is no competition to innovate! I guess a learning project is still a learning
project even if it’s not totally unique. Maybe this will even inspire me to get more
done. It’s all good.


 

So what the heck am I talking about you ask? Well, in an attempt to try out a few
coding things for a work project I decided to write a .Net Compact Framework app,
partially inspired by the Task Vision sample, to act as an event guide at the upcoming
Microsoft PDC Conference in LA.

 

The original idea was to have a disconnected app that could obtain a current session
list from a web service, allowing the user to view and select their own “personal”
session list stored on their device. I also wanted to have certain network aware capabilities
to do some cool (potentially P2P) things at the conference if there happen to be some
WIFI enable areas. I’ll keep you posted on my progress…