.NET
Dec 2012—Jun 2013
Rich Geographic Internet Applications
Seattle, WA
Remote Project
Summary:
Convert project from
Silverlight to Mobile Framework (Sencha)
… VS2012 MVC4, Web API, OData, JSON, JSONP, Entity Framework.
Web Kiosk for
University of Washington campus. Display assets … buildings, trees,
piping, sewer, bollards, etc. Represent each asset visually and link to
database for tracking, maintenance, deployment, monitoring. Allow
Facilities crew to make onsite evaluation and instantly update central
repository.
1.
Work remotely …
RDC (Remote Desktop Connect),
Skype,
Join.Me.
2.
Convert
web project from Silverlight
to Mobile Platform using
Sencha Touch.
3.
Install, debug, configure
XAMPP Apache
distribution as per instructions for running Sencha Framework.
4.
Install and Configure
Faro Scene 3D software used to scan underground utility tunnels … in
order to provide 3D Viewing
facility of UW Utility Tunnels similar to
Google Maps Street View.
5.
Faro
runs as Java Servlet on
Tomcat … Client calls via IIS
… so configure Apache Tomcat
Connector to redirect
from IIS to Tomcat.
6.
Problems with
ISAPI filter … switch to
BonCode which is an IIS to
Tomcat Connector … essentially upgrade from
C++ to
C#. Worked better … could now
redirect calls from IIS to Tomcat to Faro 3D Server.
Integrate SQL Server 2012 database running Windows Server 2012
on Domain #1 … server code running on Azure (Domain #2) …
JavaScript Client on Domain #3.
1.
Use Microsoft’s
Web API framework to
build RESTful applications using VS2012 MVC4 project.
2.
Entity Framework to build CRUD services against database.
3.
Initially incorporate
OData Protocol to
standardize REST-based CRUD operations against disparate UW campus-wide
resources exposed as data services.
4.
OData supports two formats … XML-based AtomPub and JSON.
This was a Problem because cross domain requires JSONP …
Solution was to add third format via Custom JSONP Formatter.
5.
Drop OData approach when discovered Sencha only supported OData for
SAP … so OData for anything else became a moot point.
6.
Standard way Sencha Controls want data returned is wrapped with
additional info. Used Json.NET to Serialize data and
JsonWriter to wrap it … then Deserialize Response. Doing this
made the Queryable Attribute meaningless … further eliminating
any chance of using OData.
7.
Create Azure website … publish VS2012 JSONP server code to Azure
… test CRUD from C# client.
8.
Install
Aptana Studio 3
as development environment for Sencha. Build simple Sencha test app
using
Ext.data.JsonP.request.
JSONP request to Azure worked OK. After confirming that Sencha was
consuming JSONP data from Azure server … next step was to use
Sencha Command
to build framework for
Sencha MVC app to test JSONP using
Sencha Data Stores.
Skills:
C# 4.5, VS2012, Azure Cloud, SQL Server 2012, LINQ, IIS, Web
Services, ESRI, GIS Spatial Data, Entity Framework, Stored Procedures,
MVC4, JavaScript, HTML5, CSS3, Sencha Touch, XAMPP, Firebug, ExtJS,
jQuery, Aptana Studio 3, Windows 8 Professional, Windows Server 2012,
Faro Scene 3D Software, NuGet Package Mgr., Json.NET, Fiddler.
Jun 2012 – Oct 2012
GeoEngineers
Tacoma, WA
Web
Applications Developer
Remote Project
Summary:
GeoEngineers
specializes in environmental, ecological and geotechnical solutions for
the Water and Natural Resources, Transportation, Energy, Federal and
Development markets. I was hired for a
casual, on-call position to
develop desktop, web and/or mobile applications … integrate applications
with databases and GIS applications … develop web services, and
enterprise solutions using ESRI’s Adobe Flex API, JavaScript API, and
Microsoft Silverlight API.
1.
VPN in remotely for Office of Species Conservation (OSC)
project, which was a planning tool to allow comparing and prioritizing
fish habitat restoration for the State of Idaho in the Upper Salmon
River Basin.
2.
Project initially prototyped using
DotNetNuke
…I explored and prototyped conversion to Visual Studio 2010
MVC4 and LINQ / Entity Framework for data.
3.
Used Expression Web 4 to do basic layout.
4.
User Validation
in MVC4 to control behavior depending on roles was important aspect for
this project.
5.
I
researched and implemented all these technologies in first 3 weeks … but
by that time GeoEngineers felt it was all too much new technology to
“risk” on the short timeframe allowed.
6.
GeoEngineers was new to MVC style, so they decided to fall back to their
“comfort zone” … i.e., not use Razor view engine, go back to *.aspx
rather than *.cshtml, write SQL rather than use Entity Framework, stick
with JavaScript/HTML/CSS approach, cut-n-paste code from prior ASP.NET
project to provide Role management.
7.
Complete this project via “old style” technology stack.
Oregon Department of Environmental Quality (DEQ) was
conducting Cleanup Training Seminars focusing primarily on petroleum
cleanups. I built website to announce, promote, and register for this
seminar.
1.
Develop code as per Use Case document.
2.
Insert Google Maps, Pushpins, GeoLocation, Hover
info Popups.
3.
Accept user registration info.
Puget Sound Energy
(PSE) project.
1.
Convert PDF of PSE Spill
Response Field Report to JavaScript/HTML/CSS online web form.
2.
Initially import PDF into Word Doc … and then into Expression Web.
3.
First Pass -- Timed myself … 11 minutes starting from scratch …
to create & publish to web … the converted forms for the entire PSE PDF
doc … using Expression Web for auto conversion.
4.
Looked great … but HTML was pretty “Ugly”!
5.
So back to building JavaScript/HTML/CSS equivalent form.
6.
Layout was biggest issue … HTML + CSS is not nearly as user friendly and precise
as using XAML.
Skills: C# 4.0, VS2010, SQL Server 2008, LINQ, Expression Blend 4, IIS, Web Services, ESRI, GIS Spatial Data, Entity Framework, MVC4 Roles, XAML, JavaScript, HTML, CSS.
May 2011 – Dec 2011
InfoHarvest
Seattle, WA
Remote Project
Summary:
InfoHarvest:
Developed visual tool that assists making complex decisions.
Current work is in conjunction with the
Redlands Institute
which conducts applied research into complex environmental and social
systems using GIS and associated technologies. Core decision making
technology is written in VB. Goal of this project is to update to C# and
current .NET Framework. Convert WinForms to XAML. Use
ObservableCollection to decouple bindings.
Problem: Dynamically select
database at runtime, but LINQ needs to do database mapping at
compile time. Solution:
ADO.NET creates DataSet … then query via LINQ to DataSet.
Screenshot of “decision” in VB6
version
-
Create light version of InfoHarvest’s Multi-Criteria Decision Analysis object to replace current wrapper for COM WDObj decision analysis DLL.
-
Convert VB 6 code to C# 4 … WinForms to XAML.
-
Decouple binding between View and Model using ObservableCollection.
-
Problem: Database selected at runtime, but LINQ needs to do mapping at compile time.
-
Slow solution: System.Diagnostics.Process to fire SqlMetal.exe in order to create *.dbml mapping file. Similar process to create *.cs file from *.dbml. System.CodeDom.Compiler namespace to dynamically compile *.cs file and return compiled assembly. Dynamically load assembly.
-
Fast solution: ADO.NET creates DataSet … then query using LINQ to DataSet.
-
List of tables in database from which user selects one table.
-
Populate list of column names from table.
-
Load Decision Analysis Model and use Regex to match Model columns to Database columns … allowing for white space, capitalization, etc.
- Filter to select columns with unique entries that can be used as Foreign Keys.
Skills:
C# 4.0, VB6, VS2010, SQL Server Compact, LINQ, WPF
Mar 2011 - Feb 2012
Weston Solutions
Seattle, WA & Rancho Cucamonga, CA (via Techstaff
Seattle, WA)
Remote Project
Summary:
Cucamonga Valley Water District:
Needed to add a section to their website where a customer could
enter a Service Request and track its Status. A Silverlight app was
built that is embedded within current site. Bing Map allows user to
locate request. GIS to Reverse Geolocate map point/street address. Web
Service backend for Request Categories, Questions, Answers,
Instructions, Comments. Confirmation Page summarizes Request. Email
provides link for customer to monitor Status of request.
-
Build Silverlight UI for Cucamonga Valley Water District (CVWD) web based Customer Requests System that facilitates public entry and tracking of service requests.
-
Embed Silverlight app within current CVWD website.
-
Address entered in text field … Geolocate to translate Street Address to Longitude/Latitude and display Pushpin on Bing Map.
-
Pushpin dropped on Bing Map … ReverseGeolocate to convert Longitude/Latitude to Street Address displayed in text field.
-
Convert ESRI Shapefile to SQL Server 2008 Spatial GML format using Shape2SQL tool.
-
Extract boundary from imported ESRI Shapefile.
-
Implement algorithm, using polygon created from boundary points, to calculate if an address lies within or outside CVWD Service Area (could have done this in SQL Server 2008, but client runs 2005 which does not have Spatial features).
-
Alert user if address falls outside CVWD Service Area.
-
Web services to select applicable problem descriptions, present list of services, provide clarification questions, capture customer answers.
-
Validation via Silverlight ValidationSummary control and bindings Mode.
-
Email confirmation (via Web Service) with unique ID sent to customer so request status can be tracked.
Skills:
Silverlight 4.0, C# 4.0, VS2010, SQL Server 2008 Geospatial,
LINQ, Expression Blend 4, SketchFlow, Bing maps, IIS, Web Services, ESRI
Shapefiles, GIS Spatial Data.
Jan 2011- Mar 2011
Intellacuity
Dallas,
TX (via Consultis
Dallas, TX)
Remote Project
Summary: Create application
for Capstone Metering (CM) to monitor and manage their smart water
meter. Business Analytics has Adobe Flex interface, so UI built in Flex.
Prototype in SketchFlow. Read data from SQL Server 2008 … parse with C#,
LINQ, RegEx. Create web services (*.asmx) in VS2010. Construct water
meter widget using ActionScript. Pushpins and Info popups on Google Map.
Live WebCam. iPhone-like display.
-
Build prototype Dashboard for real time management of water systems (residential & commercial).
-
Prototype process using SketchFlow (Expression Blend 4).
-
Read data from SQL Server 2008 … parse with LINQ.
-
Create Web Services in VS2010.
-
Adobe Flex 4 UI consumes Web Services.
-
Construct water meter widget using ActionScript.
-
Populate PushPins on Google Map via Google Flash API.
-
PushPins can popup an InfoWindow using Flex DataGrid to display meter data … with links to Reports, live WebCam, and meter data displayed on face of iPhone-like display surface.
-
Data Forms popup to capture user input.
Skills:
Adobe Flex, ActionScript, C#, VS2010, LINQ, Google Map,
Expression Blend, SketchFlow, SQL Server 2008, Web Services.
Fall 2009—Nov 2010
Rich Geographic Internet Applications
Seattle, WA
Remote Project
Directory Research & Development
Summary:
Web Kiosk for University of
Washington campus. Display assets … buildings, trees, piping, sewer,
bollards, etc. Represent each asset visually and link to database for
tracking, maintenance, deployment, monitoring. Allow Facilities crew to
make onsite evaluation and instantly update central repository. Original
project in Open Laszlo + Google Maps. Convert to Adobe Flex + ESRI Maps.
Because of performance (thousands of icons), convert to Silverlight +
Bing Maps.
-
RGIA builds a rich interactive mapping application (RIA) to locate and plot assets and link to databases for tracking, maintenance, deployment, and monitoring. The AssetMapper application is targeted for the University of Washington.
-
Establish communication between multiple Flash instances.
-
Setup Red5 Media Server an open source Flash Server.
-
Build Flex 3 and ActionScript 3 applications as templates for connecting to Red5 shared objects.
-
Concept Maps as tool for capturing Architecture, Design, Agile Planning and Use Cases.
-
Expression Blend 4 and SketchFlow to prototype UI.
-
Setup IIS as web server … and TFS (Team Foundation Server) as code repository.
-
Initially convert OpenLaszlo + GoogleMap application to Flex/Flash/ActionScript + ESRI Maps.
-
Convert to Flex4/FlashBuilder 4.
-
Convert Flex to Silverlight + ESRI Maps because of performance and wider range of components.
-
Flex is single threaded … Silverlight is multithreaded. Use threads available with Silverlight to run processes in BackgroundWorker threads. Invoke behavior back on UI thread via Deployment.Current.Dispatcher.
-
Shibboleth single sign-on for security.
-
Modify basemap to incorporate both ESRI and Bing mapping … via Silverlight API.
-
Parse XML query results using LINQ and RegEx.
-
From parsed XML, render Points, Lines, Polygons on map layers to represent features such as trees, bollards, water/sewer/high pressure lines, buildings, parking lots.
-
Build and Consume Web Services via WCF 4.
-
Animations and Transitions via XAML.
-
F# to explore dynamic routing of King County bus routes.
-
Silverlight animations, sliding panel, video brush.
-
Switch out Bing basemaps, drop points on map, right mouse context menu, popup info window.
Skills:
VS2010, SQL Server 2008, Silverlight 4, XAML, LINQ, RegEx, C#,
F#, WCF, Web Services, WPF Expression Blend 4, SketchFlow, TFS, ESRI
Maps, Bing Maps, Shibboleth … Java, Flex 3/4, Flash, ActionScript, Red5
Media Server, Tomcat.
Sept 2003--Feb2004
InfoHarvest
Seattle, WA
Summary:
WOPR: Bureau of Land Mgmt
developed plan to manage Oregon lands. Build website to gather
feedback/comments from residents so that
InfoHarvest
Decision Analysis could be used
on results to enable fine-tuning of plan.
MSFT:
Build website for Microsoft,
using Decision Analysis techniques, to monitor Microsoft vendor/partners
in order to determine needs/wants/issues.
-
Build website to explain Draft Environmental Impact Statement (DEIS) for BLM's Western Oregon Plan Revision. Website tracked user identity and feedback via Interactive Map Browser and comments users made in online documents. C#, SQL Server 2005, ASP.NET.
-
Upgrade ASP HTML controls to Server (and HTML) controls for ASP.NET 2003.
-
Refactor client side script to C# code-behind.
-
Develop web application for Microsoft to monitor vendor/partners. Data access for controls via ADO.NET DataSets. Automate SQL Server database table generation using DataSet that was populated, via Data Adapter, from Excel spreadsheet description.
-
Emulate database tables via creation of XML files.
-
Manipulate and extract data via DataViews.
-
Author Stored Procedures and use them to create DataAdapters.
-
SQL Table creation.
-
XSLT Transform of XML files for input to Excel.
-
Capture database script changes via VS.NET Database project.
-
Hyperlink and Template columns.
-
Web Tree Control. Deploy projects to Web.
-
Mentor developers on upgrade path using Visual Studio .NET 2003.
Skills:
C#, ASP.NET, VS2003, SQL Server 2005.
July 2003--Sept 2003
WIRB
Olympia, WA
Summary:
WIRB:
Research and Review of FDA related products, processes,
regulations. Ensure compliance. Early adoption of beta VB.NET to
automate process. New system of 500,000 lines of VB.NET code suffered
from severe memory leaks that WIRB
had worked with Microsoft for about six months, and were unable to
solve. I debugged the system and found 163 classes that were creating
instances which were never garbage collected. Fix resulted in
considerable improvement in performance.
-
WIRB does independent evaluations of tests involving drugs, vaccines, and medical devices for health care industry.
-
WIRB was early adopter of beta VB.NET to convert massive manual process for tracking and coordinating documents and processes. New system had about 500,000 lines of code and 36 GB of data in SQL Server … but had memory leak performance problems.
-
WIRB worked first half of 2003 with Microsoft to solve this, but was unsuccessful. Microsoft PerfMon had problems with .NET 1.0 Framework. DevPartner Studio memory profiler not available until Fall 2003.
-
Solution: Upgrade BIOS in obsolete PCs and setup automated test framework using WinBatch + .NET Memory Profiler to debug application in both 1.0 and 1.1 .NET Frameworks.
-
Found 163 classes that created thousands of instances of custom controls not being released (Garbage Collected) because of way application was using cloning.
-
Debug and fix other tasks using Visual Studio .NET 2003.
Skills:
VB.NET, VS2003, SQL Server, PerfMon, Memory Profiler
Apr2003--Jun2003
ScienceOps Lynnwood, WA
(contract via Saltmine
Seattle, WA)
Summary:
ScienceOps:
PhDs only consulting firm that develops algorithms and tackles
complex problems that no one else in the area would be able to solve.
This particular project involved calculating the optimal layout for long
strips of 2 inch wide electrical floor heating elements … in order to
cover the most floor area with the least waste. The client was
off-shoring this work to teams in India, to solve manually … which
resulted usually in a 24 hour delay. Client wanted computerized system
to solve problem “instantly” while customer was still in showroom.
Solution prototyped/solved in Mathematica. Mathematica solution then
converted to C# and put on the web.
-
Convert complex algorithms from Mathematica 4.2 to C#.
-
Develop optimization algorithms in Mathematica.
-
Mathematica lacked the rich data structures of C#, thus often becoming a roadblock … requiring rethinking the process.
-
Analyze performance problems in unmanaged .NET C++ code that had originally been developed in Mathematica.
-
Data representation in .NET XML.
-
Extensive debugging of .NET C# and C++ code.
-
Evangelize need for infusing software engineering principles into client's development process.
-
Proofread, analyze, and write technical reports.
-
Begin development of technical websites using WebMathematica.
Skills:
.NET, C#, C++, XML, Mathematica.
2003
InfoHarvest (part-time)
Seattle, WA
Summary:
Criterium DecisionPlus software applies structured methodology to
decision making. Originally written in older VB, it needed upgrade to
new .NET Framework. Partial upgrade of key components … enough to get
system functional.
-
Partial upgrade of InfoHarvest's Decision Analysis application from VB6/ASP to VB.NET/ASP.NET.
-
Develop multi-tier system including ASP.NET WebServices and ASP.NET Application, using MS SQL Server database as backend.
-
Upgrade existing VB6 modules to VB.NET.
-
Convert ADO to ADO.NET.
-
Ensure safe execution of single-threaded VB6 COM components within .NET.
Skills: C#, VB.NET, ASP.NET,
ADO.NET, VB6, COM, Web Services, SQL Server.
Nov2002--Jan2003
Mircosoft Redmond, WA
(contract via Saltmine
Seattle, WA)
Summary:
Microsoft had client who
wanted to link their Java environment to a .NET client. Several
developers were contacted about this project, but decided the timeframe
was too short. I accepted the “challenge” and brought in a PhD friend
who helped me build a .NET client that used SOAP to communicate with a
Java server running the standard
Java Pet
Store demo. Java running on RS6000 using AIX and DB2. Much coding
done in Notepad while browsing W3C
standards. Finished on time. A
real challenge.
-
Develop prototype for Microsoft to demonstrate WebService used by .NET Client to communicate with Java Server.
-
SOAP to send XML messages from Win2000 .NET Client, via HTTP, to IBM WebSphere EJB Application Server running AIX on RS6000, which queried DB2 Database using JDBC ... pass result back to.NET Client.
-
Initial prototyping done using Redhat Linux 7.2 on WinX Intel box, then ported to IBM's AIX Unix on the RS6000.
-
Session and Entity Beans developed on server side.
-
Visual Basic.NET and ASP.NET employed on client side.
-
JSP used for testing WebService.
-
Considerable debugging because of Application Server Deployment bug.
Skills:
VB.NET, Java, JDBC, JSP, Web Services, SOAP, XML, HTTP,
WebSphere, AIX Unix, RS6000, DB2, Redhat Linux, Session/Entity Beans.
Jan2001--Mar2002
Advanced Biometrics
Tacoma, WA
Mgr R&D /
Architect / Developer
Summary: Advanced Biometrics: Patent for using infrared to read subsurface blood vessels in palm of hand. Essentially a subsurface fingerprint of the hand. Think of those hand scans in science fiction movies. Between time I was hired, and time I started, the technical people left the company. I suddenly became in charge of technology. Built team to develop algorithms for pattern recognition of combination of surface features of palm along with subsurface blood vessels. Get prototype working using Microsoft Visual C++. By that time, poor management of company finances resulted in lawsuits. Company was bought out and it moved to another state.
-
Build and manage new software team for biometric identification of hand using infrared and pattern recognition.
-
Lead development of proprietary pattern recognition algorithms and lead team development process using modified eXtreme Programming methodology.
-
Architect new application framework.
-
Debug undocumented code for C/C++ embedded application using Microsoft Visual C++, Metrowerks Codewarrior, and Understand For C++.
-
Explore using Python.
Skills:
C/C++, Python, Biometrics, XP