This portfolio was last updated on September 9, 2010. To see the code for any project with no code linked, please email a request via the contact form. I prefer not to offer things like database connection strings for free download.

Frederick County Home Page RefreshSearch Box Detail

The problem: About 18 months after launching Frederick County's new site, we were ready to update our home page. The "Message From..." feature had run its course, we wanted more a interactive meeting calendar, we wanted to feature more local events, we wanted to switch to more horizontal navigation, we were requested to include the County's vision statement on the home page, and we wanted to highlight our online services.

The solution: This redesigned home page achieves the goals listed above. To be fair, I should note that the majority of the layout ideas were born from the brain of the County Attorney's secretary. I added to them and turned them into reality. I used a W3C-compliant layout as a foundation for the three-column/header/footer design. Modularity was key to the redesign and each section functions on its own as either an include file or some sort of data-driven component. The Online Services list, for example, is actually a simple HTML include file. The news, calendar items, and calendar item pop-up balloon are all built with ASP.NET Repeater controls. The Google site search box is built with Google Custom Search. To assist users in getting directly to County agencies not hosted on our web server, like the multijurisdictional Northwestern Regional Adult Detention Center, I mixed some specific search results in with the jQuery autocomplete code for the search box. A C# function in the click handler for the search button then catches those specific searches and redirects the user to that agency's website.


Developed by me; © Frederick County

News and Calendar Updater

The problem: I need a simple way to quickly update news items that are displayed on our home page through ASP.NET Repeater and Calendar controls.

The solution: This C# web application offers me the ability to quickly insert, edit, and delete news and calendar items and update the associated RSS feeds from anywhere in the world. Access is controlled Forms authentication and an Active Directory membership provider. TextBoxes have a text limit and the numbers beside them actually count down to help avoid a SQL truncated string exception upon insert.


Developed by me; © Frederick County

Procurement Database Management Sort and Edit Data Interface

The problem: IT secretary needed simple process to update data in IT procurement database.

The solution: This C# web application offers the secretary multiple ways to sort, view, and edit data in a paged GridView as well as a simple web form to submit new procurement data. I recently added the functionality to sort data by date or department; these controls can be toggled to invisible. Access to the application is controlled by a password encrypted with the SHA-1 standard.


Developed by me; © Frederick County

GetRegistrants

The problem: Fire & Rescue staff needed to perform administrative tasks related to students who had registered using the online class registration system which I built. The existing system of emailing me to close classes, drop students, and retrieve records of registrations was a drain on their productivity.

The solution: This C# web application started as a way to list registrants of classes, but it has grown quickly into a more comprehensive administration tool. It uses a databound drop-down menu to list classes. The "Choose" button displays information about the class along with the students registered (their information is redacted here). The delete button in each row allows Fire & Rescue staff to drop a student from a class. The "Close/Open" class opens and closes a class by switching the value of a bit column in the database. The value of this bit column determines what classes are displayed in the databound drop-down menu on the registration application. This way a class can be closed without its data being removed from the database. The "View All Registrants" button is a remnant of the application's initial functionality and simply displays the entire list of students in a GridView. The "Export to Excel" creates an Excel file of the GridView and prompts the user to accept a download.

To control access to the application, I use some generic ASP.NET login materials with an Active Directory membership provider. I have done this in other places, but I further limit the access to specific users within Active Directory by listing their usernames in an array and matching the input of the username field. If the username input does not match anything in the array, the login logic does not even begin. This is not pictured here.

Developed by me; © Frederick County

DeleteByDate

The problem: A coworker needed to delete all files older than a certain date from a few directories. He didn't want to have to inspect the directories and files individually, but he was also worried about accidentally deleting files with a batch script and not being able to recover them.

The solution: This C# console application asks the user for two elements of input: a directory and a date. After verifying the directory and date, it searches in the specified directory and all directories below that one and moves all files older than the user-defined threshold date to a folder at the root of the hard drive. Once there, the user can skim through the list, restore any important files, and then simply delete the folder. The application records its moves in a text file on the root of the drive. In case of a duplicate file, the application generates a random number and appends it to the end of the file name to avoid overwriting files.

Developed by me; © Frederick County

Cancellations Manager

The problem: Parks & Recreation programs run during and outside business hours; therefore, a program can be canceled before or after the normal work day for office staff. In these situations, the cancellations button on the Parks site was useless because there was no way for office staff to update the information from home.

The solution: This application updates a text file stored on the web server. When the page loads, the text of the file is loaded into the textbox. When the user clicks the "Submit" button, the application writes whatever text is in the box over the text in the text file. Another application, called Cancellations Info, displays that text in a label. You can see that in action by going to www.co.frederick.va.us/parks/ and clicking "Cancellations". To avoid a second set of logins for Cancellations Manager and to simplify administration, I used ASP.NET forms authentication with an Active Directory membership provider and added a reference to the Parks & Recreation organizational unit in the connection string so that any Active Directory user in Parks can log in, but all other users are rejected.

Developed by me; © Frederick County

Email Communications Form

The problem: Raw mailto email links on Frederick County's site were contributing to an ongoing spam problem.

The solution: Instead of normal mailto links, email is handled via a form. This preserves the accessibility of email addresses for people who do not use an email client like Outlook while still guarding against spammers. Code is available on request. I would rather not make my anti-spam email form code available to every spammer on the web.

Developed by me; © Frederick County

Planning & Development Meeting Calendar

The problem: There are many committees within Frederick County's Planning & Development department. The department's existing calendar was unattractive and difficult to browse. Also, because the page had to be updated by a staff member with HTML coding skills, the calendar often displayed out-of-date information

The solution: I created this calendar application using ASP.Net Calendar and GridView controls. As the application renders the Calendar control, it queries a database and styles the cells depending on whether or not there is a meeting planned for that day. The GridView then displays all of that month's meetings as a table.

To simplify updates to the calendar, I created an updating page hosted internally on the County's intranet for the Planning staff. Now any member of the Planning staff can update the meetings calendar and the public can get a quick view of all meetings in any month.

Due to security concerns, C# and ASPX code are available only upon request.

Developed by me; © Frederick County

Frederick County Personal Property Tax Calculator C# code-behind

The problem: Frederick County's Treasurer needed to offer taxpayers a way to estimate their personal property tax and to show how PPTRA (Personal Property Tax Relief Act) affects the bill.

The solution: I created this tax calculator that displays the current tax and relief rates and allows a user to enter any value to see the calculated taxpayer and PPTRA portions of the bill. This calculator takes into account three tiers of taxation: no tax under $1,000; full PPTRA up to $20,000; and PPTRA covering the first $20,000 of values greater than $20,000. This app also writes values to a text file for usage statistics.

I also used the System.Web.UI.DataVisualization.Charting namespace to create a version that graphically illustrates how tax dollars are spent with pie graphs. I am still awaiting confirmation of the percentages from the Treasurer, so this version is not yet released.

Developed by me; © Frederick County



New Frederick County Website

The problems: Frederick County's website was visually unappealing and difficult to navigate. Links were organized mostly by department, so visitors generally had to know what department to contact. The website's ability to communicate with the public was far underutilized. Styles and layouts were inconsistent across the site. No website statistics were being collected. The standard .us naming convention was confusing to the average website visitor.

The solutions: Frederick County's new website was designed to be initially more appealing and easier to navigate. Although a departments list is available, visitors are now more empowered to browse by task rather than by department. The homepage now features a "Message from..." box, calendars, easy contact links, quick access to online services, and a news section to better facilitate communication between government and citizen. Sitewide styles and layouts are enforced with CSS and a standard default page template for every department. With the help of a .Net include, Google Analytics code is now present on every page on the website. I purchased the URL www.frederickcountyva.gov and set it to redirect to www.co.frederick.va.us to help visitors see, remember, and use our website address more effectively.

Major site design was by myself with design input from Karen Vacchio, Parks & Recreation Public Information Officer and the Web Committee. I provided departments with default ASPX pages so the subject matter experts could act as the web editors creating the content. Many departments leaned heavily upon the Spry framework for dynamic effects, but in most cases the end result has been improved information architecture; we have yet to encounter any browser compatibility nightmares in our modern browser tests (IE 6, IE 7, Firefox, Safari, Opera, and Chrome on XP and Vista). In fact, we have recently begun extending the utility of Spry widgets from their out-of-box states by targeting actions in URLs.

Major goals for 2009 include skinning the site for DotNetNuke CMS, enhanced ADA compliance, and in-house mapping site development. I also have short-term goals and design tweaks too numerous to mention here.

Link Click Tracker

The problem: A coworker needed to be able to track clicks on a button. Google Analytics data are 24 hours old and are not easily accessible to everyone in the organization. This coworker just wanted to load up a file and see the number of clicks anytime without getting old information or waiting for me to log in and print a report for her.

The solution: I developed this little C# script that writes the time of each click to a text file that my coworker can simply load up in Notepad and read. As a bonus, I included the IP address in the data. This is not the actual production version of the script; this is a distillation of the functionality into a simple page so you will not have to read through tons of extra code.

Developed by me; © Frederick County

Log File Status (on open screen shot) screen shot 2 (after loading log file)

The problem: Sometimes in IT we have to look at log files for information. Sometimes we need to see updates to those log files. For example, when testing the success of Windows Updates with WSUS, we have to open the log file and watch for changes. That sounds simple, but sometimes it requires a lot of looks; that makes for a lot of mouse-clicks just to see if a new line or two have been added to the log.

The solution: This C# Windows Forms Application loads a log file into a textbox. The user can then click the Refresh button to see changes. Because some log files may be in use and will throw exceptions when accessed, the application actually copies the requested log file to a temporary file which is then either deleted on exit or on demand by the user. Also, the user can click the Notepad button to open the log in Notepad.

Developed by me; © Frederick County.
MicroMain XM Alerter (screen shot)

The problem: MicroMain XM offers alert functionality for work orders requested via the xmWeb online component, but not for work orders created in the actual program. Frederick County's maintenance supervisor was missing work orders because the program was not alerting him to the presence of those created by the administration employee responsible for creating them.

The solution: This C# Windows Forms application queries the MicroMain XM database every five minutes for the creation time of the newest work order. If that is less than four minutes old (four accounts for time discrepancy), the application displays a messagebox, the time of the last work order, the asset of the last work order, and the time of the check. The user also has the option of clicking a button to check for new work orders on demand. Future versions will include the ability for the user to set the interval and change to a different database.

Developed by me; © Frederick County.
Directory Updater (screen shot 1) screen shot 2

The problem: Updating the Access database backend for the Frederick County intranet employee directory is too complex for the secretary. She needs a simple solution that offers her only the functionality to update the relevant rows in the table without needing to directly edit it in Access or have the ability to do major damage by accident.

The solution: This C# Windows Forms application opens in a simple mode that allows the secretary to enter employee information into text boxes. The department list box is bound to a table of department names to ensure consitency for searches. By clicking the View button, the secretary can see an expanded version of the interface which shows the table.

Developed by me; © Frederick County.
Directory Creator (screen shot)

The problem: Frederick County's new website requires a completely different directory structure for every department. Creating all of the necessary directories and subdirectories was going to be a tedious process.

The solution: This C# Windows Forms application sets a target location for new directories, handles problems like invalid characters or existing directories, creates necessary subdirectories, dumps the results into a text box, and clears out all user input so it is ready to work some more. I recently added functionality optionally to copy the standard default.aspx to the new directories.

Developed by me; © Frederick County.
IT Procurement Search App

The problem: Frederick County's internal departments need a way to track their IT purchases. The solution must be available on the intranet so anyone inside the network can use it.

The solution: This VisualBasic ASP.Net web application searches an Access database for procurement data. The dropdownlist control is filled programatically by a table in the database. The gridview supports sorting by any column. With a single button click, users can also export their information directly to an Excel file.

Developed by me; © Frederick County.
IT Procurement Information Database App (update 1/20/09: screen shot coming soon)

The problem: Frederick County's IT procurement database intranet application requires updates from the IT secretary, but the secretary does not have access to the production database and needs a quick, simple way to record data.

The solution: This MS Access MDE runs with the Access 2007 runtime and offers a graphic user interface to view and modify data in the procurement database. This works in conjunction with the search web app above.

Developed by me; © Frederick County.
Responsive Management Website

This is the Responsive Management website I have updated as a freelance project. Completed goals:
   • Corrected layout issues.
   • Implemented PHP includes for navigation and footer.
   • Updated many graphics.
   • Implemented enlargement for new graphics.

Many of the graphs were not originally created by me; rather, they were created by Joy Yoder after I left the company. I have also added a search function that is not linked from any of these pages. © Responsive Management.
PHP/MySQL Music Database

This is a table built by PHP from a MySQL database. It is searchable by artist or genre and the initial table can be organzied either way. I also have a version that includes a simple web form that updates the database, notifies me via email of the update, and tweets the addition on Twitter, but security concerns prevent me from linking to it. Code and a link is, of course, yours for the asking if you are in fact an employer interested in offering me a position.
Winchester Star Graphics

These are just a few of the hundreds of graphics I made at The Winchester Star. Click on the link to see a larger version of the graphic. The full versions of these are 200 dpi, so they may load slowly for you. All of these are © The Winchester Star. The little newspaper is © www.DailyClipArt.net.

Graphic for gas tax story
Election night 2004 graphic
Aylor Road detour
Diagram of proposed Clarke County High School
Graphic for cold cases story
Map of drug bust in downtown Winchester
Graphic for home prices story
Map for proposed road changes story
Graphic for series of stories leading up to 2004 election
Graphic for story on voting trends in Winchester
Photoshop 4.0 Help (CHM download)

For TSC 450: Computer User Documentation, my group created a Photoshop 4 help file for people using the computer lab. We used RoboHelp. Right-click (PC) or hold and click (Mac) to download.