GIS Salary Survey Results

Posted on July 27, 2011. Filed under: .NET, AGIS Server API for Flex, ArcGIS Server, ArcGIS Server for Silverlight, ESRI, GeoSpatial Training Services, JavaScript, Open Source GIS, OpenLayers, PostGIS, Python |

We’re keeping the survey open through July 31st.  If you haven’t already participated in the survey please take a few moments to do so and forward this to your colleagues.

To date we have had 731 respondents.  Here are some of the highlights:

  • 40% of respondents list their job titles as either GIS Analyst or GIS Technician.  16% are GIS Managers/Coordinators/Directors, and 6% GIS Developers/Programmers.
  • 40% of respondents have 10 years of experience or greater.
  • 43% have a Master’s degree or higher.  Should You Get a Master’s Degree in GIS?
  • 70% of respondents are male.  I suppose this is better than it was 10 years ago, but we really need to attract more women to the field.
  • 41% of you are between the ages of 30-39.  24%  are between the ages of 40-49.  Less than 2% are above the age of 60.
  • Salaries appear to be widely dispersed with 29% between $50,000-$70,000/year.  I was surprised to see almost 13% below $20,000/year.
  • ESRI is far and away the most popular platform with 93% of respondents indicating this as one of their primary platforms.  This question allows more than one platform to be selected.  Open Source GIS software came in second at 14%.  I suspect this will grow quite a bit in the coming years.
  • Primary programming languages in use include .NET (55%), Python (50%) , JavaScript (27%), Java (20%), and Flex (17%).  You can learn more about Python, JavaScript, and Flex through our training classes.

You can get all the results here.

Read Full Post | Make a Comment ( 1 so far )

Working with the Popup Widget in the ArcGIS Server API for JavaScript

Posted on June 13, 2011. Filed under: ArcGIS Online, ArcGIS Server, GeoSpatial Training Services, JavaScript |

The new Popup widget, provided with the 2.3 release of the ArcGIS Server API for JavaScript can be used as a replacement for the default info window.  This new widget provides an attractive alternative to the info window complete with navigation tools that allow you to move through the selected features, zoom to a selected feature, highlight the selected feature, and maximize/minimize,close the window.

You can also customize the look of the window as well as the content.  In this post you will learn how easy it is to programmatically add this new widget to your application.  You can also use the map viewer to create popup windows.  This post is the first in a three part series.  This first post will cover the basics of adding a Popup window to your application while the second and third posts will cover advanced customization topics.

For this series of posts we’ll review several Popup samples which can be found here, here, here, and here.

Reference the Widget
You’ll first want to add the popup stylesheet to your application as seen below:

Next, reference the Popup widget using dojo.require.

Creating the Popup
The constructor for a Popup widget takes two parameters: options and an HTML source reference to where the popup will be placed.  The ‘options’ parameter is optional and can be used to customize the look of the popup window.

In the code example below you’ll see that we simply provide a ‘null’ reference for the options object.  This simply means that we’ll use the default options provided by the Popup.  The srcNodeRef is going to be a <div> container that we create to hold the content.

The second line of code highlighted below indicates that when the map is initially created the new Popup widget, stored in a variable called ‘popup’, will serve as the info window for the application.

Finally, the method is used to define where the popup will appear which in this case is the <div> container that we created.  Place the popup under the map’s root element. This ensures that the coordinate space used by the popup for positioning aligns with the map’s coordinate space.

Adding just the lines we’ve already discussed is enough to create a basic Popup window.  Many times that’s all you need for your application, but you can also customize not only the look of the window but also the content.

Formatting with the PopupTemplate Class
Popup content can be formatted using the PopupTemplate class.  PopupTemplate inherits from the InfoTemplate class.  A code example showing how to create an instance of PopupTemplate is provided below.  This object can be used to create a title and description for the window along with a means for defining the fields that should be visible along with their labels and formatting.  You can also define whether attachments should be visible (showAttachments:<boolean>) as well as images, charts, and other media that will be part of the window.  We’ll examine some of these advanced customization techniques in our second post.

In this code example above we’ve simply defined a title for the window along with the fields that will be visible and stated that we want attachments to be loaded if they exist.

A PopupTemplate is then referenced from the ‘infoTemplate’ option when defining a new FeatureLayer as seen in the code example below.

In the next post we’ll examine several ways that you can customize the look and content of your popup windows.

Want to learn more about creating ArcGIS Server applications with the JavaScript API?  The next session of our Internet based, instructor guided course Mastering the ArcGIS Server JavaScript API begins August 29th and runs through September 30th.

Read Full Post | Make a Comment ( None so far )

It’s Finally Done! Mastering the ArcGIS Server JavaScript API Course Revision

Posted on March 21, 2011. Filed under: ArcGIS Server, GeoSpatial Training Services, JavaScript |

Well, it seemed to take forever but we’ve finally finished the course revision for our instructor guided, Internet based course Mastering the ArcGIS Server JavaScript API.  The current session of this course runs from March 21st – April 22nd.  We do still have 3 seats available for anyone that would like to join.

The next session of this course will run from June 6th – July 15th.  Register by April 15th to take advantage of our early registration price of $499.  The regular course price is $715 so this is a great deal.

The newly revised course includes nearly 1000 pages of lecture notes, and 36 exercises.

You can view the full course syllabus here.

You can view a sample lecture from the class here.

You can view a sample exercise here

And here is a second example exercise from the class

Although our courses run for a specific period of time all materials are self-paced and you have a full year of access to all course materials so you can go back and review and rework as necessary or simply take your time.  You also receive any course updates free of charge during that year.  And since the folks at ESRI keep putting out new versions of the API for JavaScript every few months this is a great perk!  Version 2.2 was just  released a couple weeks ago and these new concepts will be included in the course by the first summer session.

What have past students of this class said about the course?

“I wanted to let you know about the project that resulted from the ArcGIS JavaScript class I recently took with you. The site is, which I did through my job at AAAS and in cooperation with Amnesty International, USA. On the site, there is a section called interactive maps which utilizes a human rights database and maps I created. I used a variety of techniques from the course in the creation of the site and the things I learned were invaluable in its creation” .– Susan Wolfinbarger, American Association for the Advancement of Science

“Liked the combination of slides and exercises. I learn best by example – your approach lets me type in code, and if it doesn’t work I can check solution. More examples the better for me, everything I’ve ever learned about GIS programming came by starting with an example and modifying it. Thanks again, will likely take a course in the future.” — Joe Spollen, President, Geodatamodelers

“I’m impressed with the quality of the course and materials. I’m recommending your courses to my clients. I think they’re the best thing out there.” — Stephanie Stanfield, Fargeo

“I have enjoyed the class (Mastering the ArcGIS Server JavaScript API).  I like working at my own pace through the materials, between the other things I am working on.  The examples are clear, and I appreciate that I will be able to go back and refer to them during my development efforts.  The advanced dojo section seems like a deep topic, and I see myself referring back to that section and the other dojo resources as I am developing.  Finally, I am glad that I was able to get this training in a cost-effective manner.  It is difficult to get training classes up here in Alaska.  Often we have to get on a plane and leave the state.  As much as I enjoy travelling, it may not be the fiscally responsible thing to do in this era of strained budgets.  This training format seems to work, and I hope to participate in more of these in the future.” — Erick Johnson, GISP, GIS Programming/Analyst – Matanuska – Susitna Borough

Read Full Post | Make a Comment ( None so far )

Spring Training Schedule from GeoSpatial Training Services

Posted on March 3, 2011. Filed under: AGIS Server API for Flex, ArcGIS Server, ArcGIS Server for Silverlight, ESRI, Geoprocessing, GeoSpatial Training Services, JavaScript, Python |

Our Spring 2011 training schedule has been released.  Most of these courses are taught in a web based environment but we do have one traditional face to face session of GIS Programming 101 for ArcGIS 10 scheduled for the King County GIS Center in Seattle, WA.  Here is the upcoming schedule:

Download a beta chapter from our upcoming book on the AGIS JavaScript API

Read Full Post | Make a Comment ( None so far )

Beta Chapter From My Upcoming Book on the ArcGIS Server API for JavaScript

Posted on January 25, 2011. Filed under: ArcGIS Server, ESRI, GeoSpatial Training Services, JavaScript |

I am in the process of writing a book (tentatively titled ‘The GIS Geeks Guide to Mastering the ArcGIS Server API for JavaScript”) about the ArcGIS Server API for JavaScript.  I thought that I would make the process a bit more open by releasing beta chapters that some people might read and give feedback on. Hopefully one of those people is you!

I’m doing this because I think the book will be better based on feedback that I get from my readers and of course it will serve as motivation for finishing the book!

About the book

In short the book is about how to use the ArcGIS Server API for JavaScript to build high performance, attractive Web mapping applications using the lightweight, browser based ArcGIS Server API for JavaScript.  It will be very hands on with lots of examples that can be used right away.

Download the chapter

I am not going to release the chapters in chronological order so the first chapter to be released in public beta is not the first but rather the third covering maps and layers.

Download the chapter, read it, and tell me what you think. Either by posting a comment below or by contacting me directly through eric at

Download a beta chapter.

The chapters

Here’s a tentative list of all the chapters in the book:

  • Chapter 1: Introducing to the ArcGIS Server API for JavaScript
  • Chapter 2: ArcGIS Server Basics
  • Chapter 3: Working with Maps and Layers
  • Chapter 4: Adding Graphics to the Map
  • Chapter 5: Using Widgets and Toolbars
  • Chapter 6: Editing Data in the Browser
  • Chapter 7: Working with Time
  • Chapter 8: Querying Data from Map Services
  • Chapter 9: Obtaining Information about Features
  • Chapter 10: Finding Features
  • Chapter 11: Turning Addresses into Points
  • Chapter 12: Getting from Point A to Point B (Routing)
  • Chapter 13: Geometry Tasks
  • Chapter 14: Using the Geoprocessor
  • Chapter 15: Understanding Events
  • Chapter 16: Configuration Parameters
  • Chapter 17: Working with Secure ArcGIS Services
  • Chapter 18: Dojo Application Layout Controls
  • Chapter 19: Dojo Form Controls
  • Chapter 20: Advanced Dojo Controls (Trees, Grids, Charts, Image Handling)
  • Chapter 21: Integration with Google Maps
  • Chapter 22: Integration with Bing Maps
  • Appendix: API Reference

As of now I don’t know in which form this book will be published, but I’ll keep you informed as things progress.

If you have a request for something that you want me to include in the book, or any thoughts or questions about it, please contact me.

We’ve also written a number of posts on the API for JavaScript and most have been compiled here.

The next session of our Internet based, instructor guided Mastering the ArcGIS Server JavaScript API begins March 21st.

Read Full Post | Make a Comment ( None so far )

2011 Schedule of Instructor Led Courses (1st Quarter)

Posted on January 5, 2011. Filed under: ESRI, GeoSpatial Training Services, Geoprocessing, ArcGIS Server, JavaScript, Python, AGIS Server API for Flex |

Here is our schedule of instructor led courses for January-March 2011 in both web based and traditional face to face formats.

Mastering the ArcGIS Server JavaScript API
Web Based
January 10th – February 18th
Still 5 Seats Available

Programming the ArcGIS Server API for Flex
Web Based
January 10th – February 18th

ArcGIS Server Bootcamp
Web Based
February 14th – March 18th
$715 when you register by January 15th

GIS Programming 101 for ArcGIS 10
Web Based
February 21st – March 18th
$567 when you register by January 15th

GIS Programming 101 for ArcGIS 10
Traditional Face to Face
February 7th – February 9th
Keck & Wood Headquarters
Duluth, Georgia
More Information
Click here to register

This last one is in May but it’s already on the calendar so we’re including it as well.

GIS Programming 101 for ArcGIS 10
Traditional Face to Face
May 23rd – May 25th
King County GIS Center
Seattle, WA
Contact sales at for more information on this session or to register.

Read Full Post | Make a Comment ( None so far )

Clustering with the ArcGIS Server JavaScript API

Posted on September 9, 2010. Filed under: ArcGIS Server, JavaScript |

In this post I will describe how you can use a third party clustering tool in your AGIS JavaScript API applications.  Clustering is an excellent technique for visualizing lots of point data.  We’ve all seen applications where there were so many points that they simply appear as one big blob.  Clustering takes the individual points and groups them into clusters and then renders the cluster as one graphic.

Those of you using either the AGIS API for Flex or Silverlight have easy access to clustering functionality built into the APIs.  However, this hasn’t yet been done for the JavaScript API.  Fortunately, globoserve was provided with the clustering algorithm from ESRI and created a sub-classed GraphicsLayer to provide a third party adding clustering to your applications.  You can get additional information, see a demonstration, and download the Javascript files here.

I downloaded the JavaScript files and incorporated them into a simple application that displays retail customer data as points on the map.  In the first figure I have displayed all the customer locations as points on a map.  This results in a somewhat cluttered display of markers.

Next I applied clustering to the customer points which resulted in a much more appealing display.

The clustering algorithm automatically creates the clusters and then re-creates the clusters as you zoom in.

Let’s spend a little time discussing how you can easily integrate clustering in your application.  Here are the basic steps.

The first thing you’ll want to do is download the JavaScript files that you’ll need.  You can get them here.  There are three files in the download.  The first, Ext.util.DelayedTask-nsRemoved.js is a copy of ExtJsDelayedTask class with its namespace removed.  There is not a whole lot to say about this file so I won’t.  Globoserve discusses this file in a bit more detail.  The second file, esri.ux.layers.ClusterLayer-debug.js does the work of creating the clusters.  In this file, the esri.layers.GraphicsLayer class is extended to create a new class called esri.ux.layers.ClusterLayer.  In your code you basically just create a new instance of ClusterLayer, pass in some parameters, and it does work of creating the clusters.  There is also a “-min” version of this file which cuts down the size of the file for performance reasons.

Now that you’ve downloaded the files you can code your application to take advantage of the clustering.  There are a couple requirements.  First, the clustering algorithm uses the basemap’s tiling scheme for  its “grid” which means you will need a tiled basemap.  The WKID of the features being clustered should also be one of the following:

  • Projected: 102100, 102113
  • Geographic: 4326, 4269, 4267
  • Or matching the WKID of the basemap

On to the code.  I’ve created a displayCustomers() function which executes when the user clicks the Display button.  Inside this function I first create a QueryTask object that points to my customer layer.  This is a tiled map service.  I also create a Query object and set several parameters.  This Query object acts as input to the QueryTask object.  Here we have defined parameters to return the geometry of the features, return all records (1=1) and specified that we’d like to return the Address and LastName fields.  This is highlighted in green in the figure below.

Once the QueryTask has finished executing a featureSet is returned to the callback function which creates a new ClusterLayer object.  Several parameters are supplied for the creation of this object.

  • map – refers to an esri.Map objects from the AGIS API
  • features – this is just a reference to the featureSet that was returned from the QueryTask execution
  • infoWindow – configuration options for the infoWindow that will appear when you hover over each individual graphic point.  You can see an example of this below.
  • flareLimit – the number of “flare graphics” that can appear around a cluster (default is 20)
  • flareDistanceFromCenter – the distance in pixels that the flare graphics appear from the center of their cluster.

From there we simply call Map.addLayer passing in our new instance of the ClusterLayer object.  That’s pretty much all there is to it.  I’ve included some screenshots below to show the flaring and infoWindows.  Once again, thanks to Adam at globoserve for creating this really useful functionality that many of you will no doubt use in your applications.

The next session of our Mastering the ArcGIS Server JavaScript API begins October 4th, 2010.  We still have seats available.

Read Full Post | Make a Comment ( None so far )

Introducing the ArcGIS Server Mastery Club

Posted on September 3, 2010. Filed under: AGIS Server API for Flex, ArcGIS Server, ArcGIS Server for Silverlight, ESRI, GeoSpatial Training Services, JavaScript |

GeoSpatial Training Services is excited to announce the immediate availability of the ArcGIS Server Mastery Club!

This is our most exciting product to date for anyone looking to develop custom ArcGIS Server applications with any or all of the ArcGIS Server REST APIs including Flex, JavaScript, and Silverlight.

In our new ArcGIS Server Mastery Club you have 24 x 7 access to all our ArcGIS Server course materials including Introduction to ArcGIS Server, Basic ArcGIS Server Concepts for Developers, Programming the ArcGIS Server API for Flex, Mastering the ArcGIS Server JavaScript API, and Programming ArcGIS Server with Silverlight.

We provide serveral pricing options:

  • Single User Monthly Subscription $59.00
  • Single User Annual Subscription $799.00
  • Unlimited Users Annual Subscription $2999
  • Academic Unlimited Users Annual Subscription $1999

In addition to all the great content that you can access today you will also have immediate access to all future courses that we develop for the ArcGIS Server platform.  In early 2011 we expect to release two new courses that will be part of the club: Integrating Social Media with ArcGIS Server Applications, and Developing GIS Applications for the iPhone and iPad.

What comes with the ArcGIS Server Mastery Club?

  • Complete access to all our ArcGIS Server course materials including
    • Introduction to ArcGIS Server
    • ArcGIS Server Concepts for Developers
    • Programming the ArcGIs Server API for Flex
    • Mastering the ArcGIS Server JavaScript API
    • Programming ArcGIS Server with Silverlight
  • Immediate access to new course materials as they come online
    • Integrating Social Media with ArcGIS Server Applications (coming in late 2010 or early 2011)
    • Developing GIS Applications for the iPhone and iPad (2011)
  • 24×7 access to all lectures, exercises, capstone projects, and more
  • Access to over 1,000 pre-recorded audio lecture slides
  • Access to 60 exercises covering all the REST development platforms (Flex, JavaScript, Silverlight)
  • New exercises added every month
  • Article digest containing articles of interest for ArcGIS Server developers
  • Guest interviews with subject matter experts
  • 24×7 discussion forums for communicating with other members and moderators
  • Integrated chat for communicating with members and moderators
  • Code examples
  • Work with others in the club to develop custom, live applications
  • Learn from the comfort of your home or office, at the time of your convenience
  • Group application development projects to refine skills
  • Application development contests
  • Job board
  • Recommended books and websites
  • Get education credits toward your GISP certification
Read Full Post | Make a Comment ( None so far )

User Interface Creation Made Easy with ArcGIS Server JavaScript API and Dojo

Posted on August 19, 2010. Filed under: ArcGIS Server, ESRI, GeoSpatial Training Services, JavaScript |

One of the most difficult tasks for many web developers building GIS applications is designing and creating the user interface.  The ArcGIS Server API for JavaScript and Dojo greatly simplifies this task.  Dojo’s layout dijits provide a simple, efficient way to create application layouts and ESRI has provided a number of sample application layouts that you can use to get up and running quickly.   The AGIS JavaScript API also provides Draw, Edit, and Navigation toolbars that you can use to quickly embed commonly used tools in your application.  In this post we’ll examine how you can quickly build your application layout using these tools.

BorderContainer Dijit
Since the AGIS API for JavaScript is built directly on top of Dojo you automatically have access to the user interface libraries including layout dijits such as BorderContainer.  BorderContainer serves primarily as a container for other child containers and can be one of two design types: headline or sidebar.  You define the design type using the ‘design’ attribute as seen in the code examples below.  In either case, whether you define a design type of headline or sidebar is split into as many as 5 different regions: top, bottom, right, left, and center.  Each region is normally filled by a Dojo layout element.

Note: Not every region has to be filled by a layout element.

In the first code example, we are defining the design to be of type ‘headline’ which results in the general configuration that you see below with the ‘top’ and ‘bottom’ regions stretching across the entire width of the screen space.  In this case you only need to set the ‘height’ property for the top and bottom regions.

In the second code example we define the design as ‘sidebar’.  With the sidebar design the left and right regions expand to take up 100% of the height of the window, sacrificing the area available to the top and bottom regions.  In this case you only need to define the width style property since the height will always be 100%.

In either case the center region will conform to fit the amount of space available based on the sizing of the other regions.

Child Elements of BorderContainer
Each region of a BorderContainer (top, bottom, left, right, center) can be filled by a Dojo layout element.  These elements are AccordionContainer, ContentPane, SplitContainer, StackContainer, and TabContainer.  You can also created nested BorderContainers to further divide the available layout space.

Child elements are placed inside a region through the use of the ‘region’ attribute as seen below.  Notice in the yellow highlighted section that the ‘region’ attribute is set to ‘left’.  This will create a ContentPane in the left region.  A ContentPane is a very basic layout element and is used as a container for other widgets.  In this case it is going to hold a TabContainer (green highlighted code).

The other child layout elements that can be placed inside a BorderContainer include AccordionContainer, SplitContainer, and StackContainer.

AccordionContainers hold a set of panes whose titles are visible, but only one pane’s content is visible at a time.  As the user clicks a title, the pane contents become visible.  These are excellent user interface containers that can hold a lot of information in a small area.

StackContainers resemble books where only a single pane of information is available at a time.  Users can page through various panes of information.

Finally, a SplitContainer is a container that contains multiple children.  All the children are displayed side by side either horizontally or vertically with a bar in between.  The bars can be dragged to change the relative size of the child areas.

There are a number of other design considerations which you should take into account.  ESRI has done a great job of defining those here near the bottom of the page.

Sample Layouts from ESRI
ESRI has provided a number of sample layouts that you can use to get started in the layout of your application.  Go to the ArcGIS API for JavaScript Samples and click Layouts on the left hand side to see the available layouts.  If you see one you like you can easily copy and paste the code into your application files to get started.  Spend some time getting to know the various options provided by BorderContainer and its child layout elements.

ESRI also provides toolbar helper classes that enable you to easily add in navigation, drawing, or editing functionality.  These toolbars aren’t user interface components that you simply drop into your application, but are instead helper classes that make creating the toolbars a snap to create and add to your interface.  For now we’ll just take a look at adding a navigation toolbar to your application.  There are several steps to adding the toolbar, but all are quite simple.

First you’ll want to add in the references that you’ll need to implement this functionality.

You need a reference to the navigation toolbar along with a reference to dijit.Toolbar and dijit.form.Button.  Each of the tools in the toolbar is actually a Dojo Dijit Button that is contained within a Dojo Dijit Toolbar.

Next we’ll define the icons that will be used for each of our buttons.  This can be done through CSS styling as seen below.  Here we are defining the images to be used along with their width and height.

Finally, we create the toolbar through the use of dijit.Toolbar which is defined inside a ContentPane in the ‘top’ region of our BorderContainer.  You can see this in the code below.  In the yellow highlighted code we are creating an instance of dijit.Toolbar called ‘navToolbar’.  This new toolbar is located inside a ContentPane called ‘toolbar-container’ which is a child layout element of BorderContainer.  This code is highlighted in green.

Inside our toolbar (‘navToolbar’) we create a series of dijit.form.Button objects that correspond to the type of function that should be performed by that tool.  I’ve highlighted one example of this in the code below.  This is the Zoom In tool that a user can click and then drag a rectangle on the map to zoom to a new extent.  This tool is defined as type dijit.form.Button.  The ‘onClick’ event is particularly important here because it references back to the esri.toolbars.navigation reference that we defined earlier.  This actually defines what type of functionality should be provided by this button.  In this case, esri.toolbars.Navigation.ZOOM_IN.  The ‘iconClass’ attribute is used to reference back to the style we created earlier which contains the icon that will be used for the button.

So, all of that results in a toolbar.

It’s really quite simple.  You no longer have to worry about writing basic navigation code such as creating the rectangular zoom box, zooming to the extent defined by the user, and other basic navigation functionality that most web mapping applications need.  The AGIS JavaScript API handles all that.  You just need to worry about hooking everything up.

More information about the ArcGIS Server JavaScript API?  The next session of our Mastering the ArcGIS Server JavaScript API course begins October 4th, 2010.  Only $567 when you register before August 31st.

Read Full Post | Make a Comment ( None so far )

2010 Schedule of Internet Based, Instructor Led Courses

Posted on July 26, 2010. Filed under: AGIS Server API for Flex, ArcGIS Server, ArcGIS Server for Silverlight, GeoSpatial Training Services, JavaScript, Python |

Below you will find our schedule of Internet based, instructor led courses for the remainder of 2010.

Programming ArcGIS Server with Silverlight
August 30th – October 8th
October 18th – November 30th

Early registration for the August 30th session ends July 31st.  Course fee is $499 if you register before this date.

Programming the ArcGIS Server API for Flex
August 9th – September 17th
October 4th – November 12th

Last week to save on August 9th session.  Course fee is $615 before July 31st and $715 after.

Early registration for the October 4th session is only $499.

Mastering the ArcGIS Server JavaScript API
August 9th – September 17th
October 4th – November 12th

Last week to save on August 9th session.  Course fee is $615 before July 31st and $715 after.

Early registration for the October 4th session is only $499.

ArcGIS Server Bootcamp
September 7th – October 29th

Last week to save on early registration!

GIS Programming 101 for ArcGIS 10
October 25th – November 19th

Read Full Post | Make a Comment ( None so far )

« Previous Entries

Liked it here?
Why not try sites on the blogroll...