Silverlight DataGrid Current Item as Click.CommandParameter

Posted by Dave Bouwman | Posted in M-V-VM, Prism 2, Silverlight | Posted on 02-07-2009

0

Note: This applies to Prism v2 with Silverlight 3 Beta.

So I’ve added a button into a column of my DataGrid, and I want to bind in the Click handler to my ViewModel, as well as pass the selected item into said handler.

I’m not going to go into the details of Commanding in Prism at this time (maybe later), but here’s what the xaml looks like:

...
<data:DataGridTemplateColumn Header="Details">
    <data:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Commands:Click.Command="{Binding Path=Value, Source={StaticResource ViewDetailsCommand}}"
                    Commands:Click.CommandParameter="{Binding}"
                    Cursor="Hand"
                    Content="Details" />
        </DataTemplate>
    </data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
...

The Click.Command is a little out of the ordinary in that the Binding Path is set to Value, and the Source is a StaticResource on the control. There are a few hoops to jump through on this, but the Prism reference implementation application (RIStockTrader) does show how this works.

What had me scratching my head was how to send in the object which represents the current row in the grid. All of the examples looked like this:

Commands:Click.CommandParameter="{Binding Path=ItemId}"

Which is great when you just want to send the Id of the item in. But in my case, I want the actual object so I can send that to the "Details" form for editing. In hind sight it’s obvious that you would set the CommandParameter to the "Binding", since that’s the item itself, but it was one of those things that you don’t think would make sense.

Anyhow - through the power of Google, I hope this saves someone else some time/frustration.

Silverlight Templating: Bending Controls to Your Will

Posted by Dave Bouwman | Posted in Sample Code, Silverlight | Posted on 22-06-2009

0

I’m building an forms-over-data application that needs to control edit access based on the user’s role, and the active item’s workflow status.

Download Sample Code

When building similar functionality in ASP.NET MVC applications, we’ve handled this scenario by having the server render a partial page, and based on the user’s edit access, we emit form elements (text areas, select boxes etc), or just content. The partial is injected into a containing DIV element, and all is well.

Of course, this is not an option with Silverlight - well I guess we could build separate read-only and read-write Views, but that would be a bunch more work. Why not leverage the IsEnabled property instead - that should work, and it’s ok from a sematic point of view (purists may want to sub-class all the controls and add a "IsReadOnly" property and use that, but I’m a pragmatist - IsEnabled is a reasonable compromise).

The only problem is that by default the control’s content is grayed out when it is disabled (shown below). This makes the "Read Only" state less than "readable"…

sl-disabled

With WinForms, we’d just be out of luck. But since this is XAML, we can override the control’s template and change it’s look and feel for the various states.

Since we’ll want these styles accessible across our entire application, we’ll be adding the templates into App.xaml. But before we do that we’ll need to add a namespace for the visual state manager (vsm)

 

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="sl_templating.App"
             xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
             >

 

From there, we grab the default template from MSDN ( http://msdn.microsoft.com/en-us/library/dd334408(VS.95).aspx ) and assign it a key so we can force our combo box control to load it’s template from App.xaml instead of it’s dll.

<Style TargetType="ComboBox" x:Key="DTSComboBox">
...
</Style>

Then in our page (or to be more specific our Views) we tell the combobox to load it’s style from the static resource

<ComboBox x:Name="cboComboBox" IsEnabled="True" Grid.Row="0" Margin="5,5,5,5" 
       Style="{StaticResource DTSComboBox}">
       <ComboBoxItem Content="Thing One"/>
       <ComboBoxItem Content="Thing Two" IsSelected="True"/>
       <ComboBoxItem Content="Thing Three"/>
   </ComboBox>

 

Now it’s time to have fun - we change the template to match what we need. For the first cut here’s what I was looking for:

Combo Box: When disabled, gray out the drop down button, and the border, but leave the text readable

TextBox: Gray out the border, but leave the text readable.

Visual States

For this sort of thing, we are going to be modifying the visual states for the controls. The state we are interested in is called (not surprisingly) "Disabled". So we locate this in the Visual State Manager section of the control template…

<vsm:VisualState x:Name="Disabled">
    <Storyboard>
        <DoubleAnimation Storyboard.TargetName="DisabledVisualElement"
                         Storyboard.TargetProperty="Opacity" To=".7" Duration="0"/>
    </Storyboard>
</vsm:VisualState>

and we see that when the control’s state is changed to Disabled, a Storyboard with the name "DisabledVisualElement" is called. So we go and locate that…

<Border x:Name="DisabledVisualElement"
        Background="#A5F7F7F7"
        BorderBrush="#A5F7F7F7"
        BorderThickness="{TemplateBinding BorderThickness}"
        Opacity="0" IsHitTestVisible="False"/>

And from the looks of this, we can see that the Background and Border are set to a lovely gray (F7F7F7). Since we know that text content of a control is rendered in the Background color, we simply remove that property.

<Border x:Name="DisabledVisualElement"
        BorderBrush="#A5F7F7F7"
        BorderThickness="{TemplateBinding BorderThickness}"
        Opacity="0" IsHitTestVisible="False"/>

Voila! The disabled state for our TextBox will leave the text color as is, and just gray out the border, thus giving a visual cue that it’s read-only.

For the ComboBox, it’s a similar process, but complicated by the fact that the ComboBox is made up of multiple parts. We can leave the ToggleButton as is - it gray’s itself out nicely, and that’s fine with us. The other default behavior is to draw the control as a filled rectangle with a opacity set. This is what "grays" out the ComboBox item. Instead of setting a Fill, we just set the Stroke to a nice gray (the illustrious F7F7F7 again).

<Rectangle x:Name="DisabledVisualElement"
           RadiusX="3" RadiusY="3"
           Stroke="#A5F7F7F7" Opacity="0" IsHitTestVisible="false" />

That’s it. Now our controls enable & disable nicely, and the content is still readable.

sl-disabled-templatesd

This is clearly just scratching the surface of what you can do with templating, and I’m sure I’ll be digging into more controls like this, but it’s a nice capability to have.

Building Line-of-Business Apps with Silverlight 2.0: Part 1

Posted by Dave Bouwman | Posted in .NET, Silverlight | Posted on 10-06-2009

1

While I’ve been playing around with Silverlight for a while now, the time has come to build something a little bigger with it. Here’s the situation:

  • I’m Converting an Access/SQL Server application over to use a Silverlight 2.0 front end with ADO.NET Data Services on the back.
  • Database already exists, with 83 tables, including users and roles.
  • We need custom Authentication and Authorization services to control who can view/edit data
  • Application will have about ~30 User controls, which will be composed into about ~20 screens

Given this situation, I needed to find a framework that’s proven instead of trying to hack something up myself.

My goals were:

  • the client side Silverlight code needs to be unit testable
  • clean Separation of Concerns where ever possible – both to support unit testing and so we use "fakes" during development
  • Something that’s documented so myself and others on the team can figure it out.

After some Googling, it came down to two options:

Hand-Rolled Model-View-ViewModel (MVVM) or the Composite Application Library (aka Prism v2) from Microsoft Patterns and Practices.

Having used Enterprise Library, I knew that the MS Patterns and Practices stuff would be complex, but it would work. In an effort to keep things simple, I took a peek at "raw" MVVM first.

I’ll also mention that Nikhil Kothari has created Silverlight.FX - “light-weight application framework for building Rich Internet Applications with Silverlight 2”. While I have huge respect for Nikhil, and the project looks promising, it seemed a little too big to take on with just his blog posts and source code as documentation.

"Raw" MVVM in Silverlight 2.0

Conveniently there is a fair bit of information on MVVM floating around, so it was relatively easy to get the gist of things. One of the best resources was this screen cast by Erik Mork at Silver Bay Labs.

silverbay

Erik walks through the basics of the pattern by referencing an article by Shawn Wildermuth in MSDN Magazine, and then shows how to build out a very simple sample application based on the article’s code, and shows how to test the ViewModel using the Silverlight test harness.

As Erik notes here (he uses a media player that sync’s the code display with the video, and it’s bookmarkable!), the down-side of using "raw" MVVM in Silverlight is that you still need to have some "goop" in the code behind that fires events back into the ViewModel (due to the lack of "commanding" in vanilla Silverlight). Ideally we’d like to avoid the code-behind and have the ViewModel linked to the View (XAML) declaratively.

Another downside is that while MVVM provides a pattern for the individual views, it does not provide much infrastructure to create an application that’s composed of many views – I’d have to roll this myself or hack parts from a variety of samples – not idea. Conveniently though, we can use MVVM with Prism…

Composite Application Library aka Prism

Many people have heard of the “Old” Composite Application Block (aka “CAB”), and that alone could be enough to scare some people off. Although it shares a similar name, the Composite Application Library is much different. Prism is a set of components, services and patterns that can help with the construction of  MVVM Silverlight applications. It includes:

  • The Microsoft Unit Inversion of Control Container
  • Commanding for Silverlight (declaratively linking the ViewModel to the View in XAML)
  • Centralized Event Aggregation (makes loosely coupled designs much easier)
  • Support for UI composition from multiple views

Getting Started with Prism

As like most other things from Microsoft Patterns and Practices, this stuff is both complex and well documented. In fact, the Guidance is simply amazing. It has overviews of all the key components, solid descriptions of how/when to use them, as well as “Quick Start” project that show the concept in action. They also have a “reference implementation” which seems to combine all possible aspects and combinations in one project. I’d hold off on looking at this until you’ve got a good handle on the individual components though, as it’s pretty hairy.

But to get a good idea of how Prism works, there are some good videos I recommend checking out:

Erik Mork of SilverBayLabs.org has a couple of great really simple intro videos. These were great for introducing the basic components – the shell, models, viewmodels and how they relate.

Channel9.com has a 4 part series with Bob Brumfield and Erwin van der Valk from patterns and practices showing to build a modular application using Prism.

At this point I’ve managed to get my app’s structure laid out, I’ve got login capabilities which correctly add cookies which allow access to secured services, and I’ve got a few rough modules and a rough means to transition between them. Learning Silveright, XAML, Expression Blend, MVVM, Unity, and Prism all at once made for a pretty harsh learning curve, but I’m past the roughest parts. In some cases I’ve departed from MVVM due to some limitations on databinding (twoway data binding to a PasswordBox is apparently verboten), and I have a little “goop” in my View code-behinds, but I think these are corner cases, and the “main” modules (the ones with the business logic) should be MVVM.

When I get some time, I plan on posting some notes and sample code for things which were difficult to understand, or implement.

Agile Workshop on June 26th in Denver

Posted by Dave Bouwman | Posted in Uncategorized | Posted on 02-06-2009

1

Venturesome seagull Just a quick note that Brian Noyle and I will give a one day Agile Project Management training workshop on Friday, June 26, 2009 in Denver, CO.  This course will cover both project management practices and development/engineering practices. While we *talk* about developer tools & practices, this is not just for developers – the whole day is equally pertinent to technical and management staff.

We’ll begin with an introduction to agile practices and rapidly progress to specific methodology examples (Scrum), cover roles and responsibilities, project controls, and how to scale the agile process in your organization. 

In addition, we’ll introduce specific software development processes that mesh well with the agile process including automation for code documentation and unit testing, design patterns, refactoring tools, and automated builds and continuous integration.  Throughout the course we’ll give you specific examples, the good, the bad, and the ugly, from our own experiences using the methodology in our shop. We’ll also have hands-on exercises so you can try out some of the ideas we are discussing.

Course Details:

Course Material: Introduction to Agile: Project Management and Development

Date: Friday, June 26, 2009

Location: USGS Mtg Room, Fed Center, Lakewood CO (suburb of Denver for those not from Colorado)

More Information: www.rm-urisa.org/news.html

Please use the “more information” link above to read the full course abstract and get additional details including how to register, maps of how to get there, etc. 

Hope to see some of you in June!

GeoGeekTV: Today @ 4:00pm

Posted by Dave Bouwman | Posted in GeoGeekTV | Posted on 29-05-2009

0

Just a quick note that we’ll be doing another edition of GeoGeekTV today at 4:00pm Mountain. We’ll be talking about "Bing Enterprise Geo-webby mashup silliness" as well as Flex, Silverlight, the beer of the week, and anything else that comes up in the chat. Drop by UStream http://www.ustream.tv/channel/GeoGeekTV  or just click on the graphic below.

geogeektv-white

When User Interfaces Fail: Expedia.com

Posted by Dave Bouwman | Posted in Life, Usability | Posted on 26-05-2009

0

While doing some hotel booking during my recent vacation I came across some usability issues which I thought I’d share with everyone as an example of an anti-pattern in interface design.

For this trip we booked a vacation home in La Jolla California using Vacation Rental By Owner (VRBO.com) but we needed a hotel room for the last night before flying out. Enter Expedia.com

My search was pretty simple, a hotel room for 2 adults and 1 child for one night in San Diego. After grinding away for a few seconds, I got back 16 pages of listings. I think “Great – we should have lots to choose from!”… until I started to scroll down the list…

image

Awesome. On the first page of results there were only 5 listings that did not have the handy little note: This Hotel Cannot Be Booked: Exceeds Max Guests”. So just why the hell am I seeing a listing for a hotel that I can’t book into? And what does “Exceeds Max Guests” mean? Maybe it means it’s fully booked? Nope…

image

It seems that the “Exceeds Max Guests” is related to the number of beds. So Expedia’s search is smart enough to know that I need more than one bed, but their result viewer is designed to waste their customers time by showing a list of hotels which don’t have appropriate accomodations. As if this was not bad enough, for two of the places they listed as “available”, I went through the whole order process only to get a message at the end of the process that the hotel in question did not actually have any rooms. By this time I was fuming, but also not interested in messing around any more, so I called Expedia

Miraculously they were able to find hotels with availability for 2 adults and one child in seconds. What this tells me is that internally, the Expedia reps have a better, more streamlined interface that does not waste their time, which makes sense because Expedia actually pays for the time of their internal people. However, Expedia feels that they can/should waste their customer’s time with ineffective interfaces which return irrelevant results.

I’ve used Expedia for the last 5 years, and this is the last interaction I will have with them. I’m very fond of this quote from Scott Karp - “In the age of Google design has no margin of error, and there are no stupid users, only inadequate designs”. Bye Bye Expedia – I’ll be back when you stop wasting my time.

And another note on the hotel room they finally did book for me – I specifically requested a non-smoking room, which the Expedia rep (“Lance”) ensured me it would be. Of course, when we get to the hotel, it’s a smoking room, that reeks. Since the hotel was 100% full, we had no option to change rooms. From talking with the very apologetic hotel manager, apparently this kind of bullshit is pretty common when dealing with Expedia.

As I sat in the lobby writing up this post, another person came in with a confirmation from Expedia for the hotel, but the hotel had no record of it, nor a room. I did not find out how that worked out as I had to fetch my wife and son from the pool, but apparently Expedia is working really hard to piss off their customers. Perhaps the age of the “travel agent” is not over, as I’d gladly pay a 5 or 10% fee to someone who could actually ensure that I’d get what I wanted and I would not have to fight with some “customer dis-service” representative simply does not care.

Simple ASP.NET 301 Moved Permanently Redirector

Posted by Dave Bouwman | Posted in ASP.NET, Blogging | Posted on 25-05-2009

0

I’ve been running DasBlog since I started blogging back in February 2005, and it had been good, but the time came to move on to something that required less hand-on work to keep current. Enter WordPress. You can read how the content migration went in a previoud post, but this is just about the final step in the process – setting up a redirector. 

Armed with my csv file listing the old dasblog based urls and the new wordpress urls, I needed to build a simple ASP.NET app I could drop in the old location, and have it spit back “301 Permanently Moved” responses when someone (or Google) hits the old Urls. It’s important to let Google know that your pages have moved, thus we send a 301 server response, which tells the search engine to never come back to that original location.

I should note that I can do this because my blog’s address changed – from blog.davebouwman.net to blog.davebouwman.com – thus I still had the old location available to run a .NET application, which could do the re-direct. If you are paving over a .NET blog with WordPress, and hosting it on the same Url, you’ll have to find a different option.

What I came up with was a simple Global.asax that seems to work pretty well. Not sure how it would scale if I had 10,000 posts, but at 390, it’s just fine – besides it was the only part of this project that went as predicted. The code below is everything – I do have a simple empty Default.aspx page, and of course the linkmap.csv file, but that’s it. You can try it by following this link:

http://blog.davebouwman.net/2009/01/06/CodeCoverageWhatsEnough.aspx 

 
<%@ Application Language="C#" %>
<%@ Import Namespace="System.IO" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e)
    {
        //Load the CSV list into a hashtable and cache it
        LoadUrlsIntoCache();
    }

    private void LoadUrlsIntoCache()
    {
        Hashtable urls = new Hashtable();
        FileStream fs = File.OpenRead(Server.MapPath("./linkmap.csv"));
        using (StreamReader sr = new StreamReader(fs))
        {
            while (sr.Peek() >= 0)
            {
                string line = sr.ReadLine();
                if(line.Contains(","))
                {
                string[] parts = line.Split(',');
                urls.Add(parts[0], parts[1]);
                }
            }
        }
        Context.Cache.Add("UrlCache",
                            urls,
                            null,
                            System.Web.Caching.Cache.NoAbsoluteExpiration,
                            new TimeSpan(0, 0, 20, 0, 0),
                            CacheItemPriority.High,
                            null);
    }

    protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        string requestPath = HttpContext.Current.Request.Url.ToString();
        Hashtable urls = (Hashtable)Context.Cache.Get("UrlCache");
        if (urls == null)
        {
            LoadUrlsIntoCache();
            urls = (Hashtable)Context.Cache.Get("UrlCache");
        }

        string newUrl = "";
        if (urls.ContainsKey(requestPath))
        {
            newUrl = (string)urls[requestPath];
        }
        else
        {
            //Requested Url not in cache... send to "missing content" page...
            newUrl = "http://blog.davebouwman.com/index.php/content-missing/?foo=" +requestPath;
        }

        Response.Clear();
        Response.Status = "301 Moved Permanently";
        Response.AddHeader("Location", newUrl);
        Response.End();
    }

</script>

Speaking @ GIS Colorado Friday May 15th

Posted by Dave Bouwman | Posted in ArcSDE, Uncategorized | Posted on 15-05-2009

0

Apparently there was a configuration issue with FeedBurner, and this was not aggregated - thus the repost.


This Friday, May 15th, I’ll be giving a talk titled “Building Great Apps for Your Maps” at the GIS Colorado (GISCO) Spring Quarterly Meeting.

Building-Great-Apps-For-Your-Maps

The meeting will be at the Boulder County Administration Building, 1325 Pearl Street, Boulder, CO 80302. The meeting will start at 8:00 am with coffee, juice, and breakfast-y fare. Please be prompt to get some food and hear about GISCO goings-on and a GIS “state-of-the-state” from Colorado State GIS Coordinator Jon Gottsegen. Again, you do NOT have to be a GISCO member to attend  and there is NO COST for the meeting. Here’s the latest agenda that I’ve received - I’ll be talking at 1:00pm - hope to see you there!

8:00-8:30am

Registration – Coffee, juice, donuts, etc.

8:30-8:45am

Welcome, greeting, business announcements – Frank Orr - GISCO

8:45-9:15am

Update on State ActivitiesJon Gottsegen - Jon.Gottsegen@state.co.us

9:15-9:45am

Using a GIS to manage Agricultural Water Resources at Boulder County Parks and Open Space

Kristina VanDenBosch,kvandenbosch@bouldercounty.org

Summary: The Boulder County Parks and Open Space program began in 1975 as a single property. Since that first acquisition in 1975 the Parks and Open Space program has grown to more than 97,000 acres, including directly owned properties and conservation easements held over private property. In addition to the land, BCPOS has a large water portfolio. These water resources, used predominantly for agricultural production, have a value in excess of an additional $60 million. Making decisions about the management of these water resources for agricultural production requires a thorough understanding of complex information, including climatic conditions, natural and artificial water systems, agricultural practices, and legal conditions. Learn how Boulder County Parks and Open Space has designed and implemented an integrated GIS, based on the existing technology structure, to effectively manage these water resources.

9:45-10:15am

Automatically Assigning User-Defined Unique IDs in ArcSDE

Dave Murry - DMurray@CityofWestminster.us

Summary: The automatic assignment of unique IDs in a GIS environment is described in this presentation. The process uses a versioned ArcSDE database environment and Microsoft SQL Server script to assign a unique ID to each new record. The key to the successful automated assignment of unique IDs in a versioned environment is making sure the database is compressed and that no edits are outstanding. This requires the automation of the SDE version process and the editors adhering to these versions. The business process allows for the ID assignment to be one day out of sequence. Some organizations require immediate propagation of IDs and this method would not work for them. Also, environments that do not version their datasets would not necessarily need to use this process but they could take advantage of the automated steps described here. The presentation will review various alternatives explored when developing this method. Future enhancements as well as possibilities for different approaches will be discussed.

10:15-10:30am

Break

10:30-11:00am

On-Demand Spatial Solutions

Frank Orr - Frank.Orr@CH2M.com

Summary: CH2M HILL’s ODSS Small Government Edition is a managed enterprise GIS for government organizations without the time or specialized resources to build and maintain a comprehensive, scalable GIS. CH2M HILL can provide the specialty servers, software, and support so that your staff spend more time focused on your core mission and less time figuring out how to access and support the GIS. ODSS provides a number of advantages compared to other enterprise GIS implementation approaches:

· Lower up-front capital and overall operating costs

· Predictable, subscription-based pricing

· Rapid deployment of industry leading GIS technology and data sources

· GIS accessible by all staff using only a browser—no need for specialty software!

· Guaranteed service levels and scalability

11:00-11:30am

DRCOG Data Catalog

Jonathan Harahush - JHarahush@drcog.org

Sara Eberhardt - SEberhardt@drcog.org

Summary: The Denver Regional Council of Governments (DRCOG) had a business need to develop and maintain a regional data catalog comprised of up-to-date regional data and its associated metadata. The DRCOG Geospatial Team did not have significant budget for additional commercial software or vendor support to build and deploy this Web-based application so we leveraged our collective knowledge and experience and built a framework consisting of Free and Open Source Software (FOSS) in our existing IT environment. The basis for developing this application was to create an open data framework to share regional land use and transportation planning data with DRCOG member governments, internal staff, partner agencies and the public through a searchable web interface. We’ll highlight the project focusing on the open source solutions involved such as PostgreSQL with PostGIS, Geoserver and OpenLayers to name a few. We will also discuss the project’s success and challenges and what the future holds for future FOSS projects at DRCO.

11:30-12:00 noon

Best Practices for Mobile GIS Technology Integration

Glenn Vlass - glenn@cartopac.com

Summary: Today, many local and state governments are deploying mobile solutions, many of which have workforces in the field with more than a hundred users. Determining requirements, defining data work flow and understanding how data is to be moved between the office and the field are all essential steps in order to be successful. This presentation will help you understand key issues and determine how to plan for a mobile implementation and integrate it into an existing GIS. Already have a mobile application in the field? Learn best practices, improve your efficiency and increase your ROI. Learning objectives include:

· Discuss the essential requirements to successfully deploy mobile applications within your workforce.

· Learn the value of defining a data work flow for your mobile application before deployment of your mobile workforce.

· Understand the challenges faced by many Municipalities when deploying mobile applications.

1:00-2:00pm

Building Great Apps for Your Maps

Dave Bouwman - dbouwman@dtsagile.com

Brian Noyle - bnoyle@dtsagile.com

Summary: The GIS community is faced with a number of challenges and opportunities today when developing applications for the GeoWeb. In this session, speaker Dave Bouwman (http://blog.davebouwman.com) will discuss what to consider when developing GeoWeb applications. Real-world examples will be used to illustrate and explain development concepts relating to using an agile development process, selecting map canvases, interface design, back-end service design, and unit testing. Some of the technologies covered will include ASP.NET model view controller (MVC), MbUnit, esri.map, and OpenLayers.

2:00-2:30pm

Getting The Lay of the Land: Free and (mostly) Easy Mapping of Land Resources With The Help Of Government Web Services

Brian Timoney - brian@thetimoneygroup.com

Summary: Be a hero to your clients and co-workers by quickly whipping up comprehensive snapshots of land use in the west by tapping the WMS services offered by the USGS and BLM. More than simply topos and land grid, with these services you can stream federal land ownership, oil & gas leases, coal & geothermal, etc. Imagine: no shapefile downloads, no stacks of DVDs on your desk. Even better, your users won’t need fancy software to view your handiwork: we’ll show you how stream this info into Google Earth as well as create your own browser-based map using Open Layers. By showing the utility and flexibility of streaming open-standards web services, we’ll highlight the difference between public entities making their data accessible and merely making it available (e.g. shapefile download via FTP–hello 1999!).

2:30 – 3:00

The GIS in Higher Education Summit

Jamie Fuller - j.d.full@gmail.com

Summary: On Friday, April 24, 2009, professors and instructors from across the state gathered at Colorado State University in Fort Collins to discuss the role of higher education in geospatial technologies. The GIS in Higher Education Summit attracted representatives from over 15 colleges and universities and facilitated discussion on topics including: strategies for coordinating geospatial programs and certificates offered across the state; articulation between community colleges and universities; possibilities for sharing resources across campuses—curricula, data, teaching methods; efforts to establish standards for certificates, minors, majors, and other degrees; and what is expected from GIS students once they are out in the workforce. The Summit marked a starting point for collaboration among academic institutions teaching GIS and related subjects. A centralized website and a listserv are initial items to establish; coordination with both GIS Colorado and the state GIS office on these efforts seems imperative! The “GIS in Higher Education” website (currently under construction) will be demo’d and comments will be welcomed.

3:00 – 3:15

Break

3:15 - ??

Breakout Sessions:

  • Commercial and Public Data Updates – Dave Murray
  • GIS Education and Mentoring – Esther Worker
  • National Hydrography Dataset Stewardship Committee – Chris Brown
  • SWUG 2009 Planning Committee

GeoGeekTV May 8th @ 4:00pm MT

Posted by Dave Bouwman | Posted in GeoGeekTV | Posted on 08-05-2009

0

Given that Twitter is apparently down right now, I’ll opt to send out a notice that GeoGeekTV will be occuring at it’s usual time 4:00pm MT today Friday May 8th.

We’re moving to what we hope will be a permanent home at UStream. I will be setting up a separate site for the show and it’s eventual archive, but for now the url is: http://www.ustream.tv/channel/GeoGeekTV

As usual, join the chat, as some random questions, and we’ll try to answer them without excessive Rick Rolls.

This week Brian Noyle is taking his son to the Circus, so I’ll have Michael Hayden - one of our Javascript Dojo kung-fu experts with me. And as always - some Colorado beer to virtually share with you all.

Speaking Tuesday at the Boulder GIS Developer Group

Posted by Dave Bouwman | Posted in Presentations | Posted on 04-05-2009

0

Just a note to readers in the Denver/Boulder area – I’ll be speaking this Tuesday evening at the Boulder GIS Developer Group.

Julie Kub, who runs the group, invited me to give my Dev Summit talks, so I’ll be doing a slightly re-mixed combination of “Designing for the GeoWeb” and “Unit Testing 101”, and then taking random questions. We *may* try to stream it, but I can’t promise anything (we’ll tweet that right before if it’s going to happen). Drop by if you are in the area.

The meeting is this Tuesday, May 5, from 6 p.m. to 7 p.m. at 66 S. Cherryvale Road in Boulder. If you are thinking of coming, please let Julie know

jkub [at] its [dot] bldrdoc [dot] gov