Page 2
ROBERT PAUL SCHOOLFIELD

Colorado Springs, CO 80915
e-mail: rschoolf@gmail.com
This page: http://home.comcast.net/~rschoolf/resume2.htm

EXPERIENCE DETAIL

Software Developer: Coded enterprise shipping solutions. Implementation on-site at customer DC's. Provided custom coding in C# .NET, Visual Basic, SQL Server, TracerX and Kewill.Integrate, and other scripting languages for Data Trak customers. Wrote enterprise shipping application and packing/shipping machine interface for Best Buy. Wrote hundreds of custom solutions. (Data Trak Technologies, Inc., Minneapolis, 2001-2007)

Software Developer II: Principle developer in newly formed Integrated Products group. Mentored three new peers for the group. Designed and wrote client-side code and Windows PC-to-UNIX integration methods for Clippership, Optio, Palm Pilot, Palm VII wireless, ICVerify Credit Card. Kewill TracerX and InstallShield certified developer. Developed automated build procedures, Customer Care web site. Taught UNIX class. Won ROSE award. (NxTrend Technology Inc., Colorado Springs, 1997-2001)

Lead Development Engineer: Wrote CI-Toolkit for Windows, a collection of continuous improvement programs currently in wide use with US military and government agencies. ISO900 methodologies. Also wrote program specifications, company procedure, help documentation. Developed corporate web site. Managed tech support department and personnel. System Administrator for training center, R&D, marketing, and admin LANs. (Systems Improvement Inc., Colorado Springs, 1993-1997)

Contract Programmer: Wrote motion controller interface for a custom CNC application. (Design Sciences Inc., Colorado Springs, 1997)

Contract Programmer: Developed experiment command and control programs, post-processing utilities, data acquisition database for a Defense Nuclear Agency contractor, in Microsoft Professional Basic 7.1. Designed and installed on-line BBS system for Defense Nuclear Agency in Washington, D.C. (JAYCOR, Colorado Springs, 1992-1993)

Contract Programmer: Developed Net Present Value of Disposable Retired Pay legal analysis software for law office. (Law Office, Colorado Springs, 1991-1996)

Contract Programmer: Developed on-line database BBS system and automated data management system for information supplier firm (On-line Contractor’s Network, Colorado Springs, 1992)

Owner/Software Developer: Developed, coded, and marketed several business applications. Design and installation of custom electronic systems such as access control, security, professional audio, two-way communications, etc. (Electronic Systems Design, Colorado Springs, 1988-1995)

Office Management and Analyst: Developed contact management system and invoicing software, full-charge office management included invoicing, (A/R), marketing, daily deposits, customer service, implemented PeachTree accounting software. Wrote custom invoicing software. (Electronic Essentials, Inc., 1991-1994, 1997)

Manager: Responsible for all alarm sales, installation, service and central station management for a large security patrol and guard corporation. Increased alarm sales by 60%. (Knight-Hawk Security Services, Inc. Tyler, TX 1987-1988) Performed routine and on-call field service and security systems installation. Also computer-controlled access and other custom systems. (Alert Security Systems, 1988-1989)

Reliability Technician: Performed dynamic burn-in of microelectronic devices. Compiled company specifications. Maintained device driver boards using oscilloscope. (NCR Microelectronics, 1986)

Audio/Electronics Engineer: Specified, constructed, and managed a multi-track recording studio. On-location and demo recording. Performed installations of high end audio systems in churches, component-level electronics trouble-shooting / repair. Sound man. The Master's Recording, 1983-Date)

Manufacturing Engineer/Programmer: Developed 210 part programs for CNC fabricators using DEC VT-100 and CNC programming language. Employed optimal programming methods. Prepared mechanical drawings and in-depth documentation for shop production. (Micro Metals, Inc. 1981-1986) Worked as machinist in precision sheet metal shop, operated all shop tools, such as shear, press brakes, punch press, CNC press, mills. Performed inspections. Promoted to lead operator. (Pike Tool and Grinding, Colorado Springs, 1979-1981)

EDUCATION

SOFTWARE TITLES

Software application titles written entirely by Robert Schoolfield, except as noted.

OTHER APPLICATIONS

UTILITIES

References available upon request.

SOURCE CODE SAMPLE

This code was written by me. I wrote the language interpreter as well.

' -----------------------------------------------------------------------------
' Script     : Snarf Gazette.e
' Description: Snarf the Gazette local news website, convert to iSilo format
'              and install on Palm Pilot. It also creates a website on your hard
'              drive, for off-line viewing. This exec32 script demonstrates how
'              to use the web clipping function in the exec32 Desktop Scripting
'              Language to gather dynamic information from a website, striping
'              out the "noise", and re-packaging the content for use on a handheld
'              device.
'
'              You can download the exec32 Desktop Scripting Language from the
'              exec32 website at:
'              http://users.adelphia.net/~rschoolfbn/exec32/index.htm
'
' Assumptions: C:\Temp exists.  You have iSilo commandline converter software
'              installed in D:\Program Files\iSiloWeb. You have a batch file
'              "..\Bat\gazette.bat".  Here is the contents of the batch file:
' @echo off
' "D:\Program Files\iSiloWeb\iSiloC32.exe" -y -I -Idef "c:\temp\gazette.htm" "c:\temp\Gazette.pdb" -i"Gazette Local News"
' rem pause
'
' Date       : 02-20-2001
' Author     : Robert Schoolfield, rschoolf@hotmail.com
' Changes    :
' Copyright  : (C) Copyright 2000, by Robert Schoolfield.  All Rights Reserved.
'              This script is released to the Public Domain, and may not be re-
'              sold.
' -----------------------------------------------------------------------------

sub main()
' ----------------------------------------------------------------------------------

'trace

dim r, tmp

' --- change directories to the exec32 Scripts directory...
tmp = getdir("rundir") & "Scripts\"
cd tmp

' --- check to see if we have done run today, and if so, bail...
if done_run() then
  tmb "The snarf has been done run today."
  exit sub
end if

' --- retrieve each local news item to a random file name, prepend an entry for each in the
' control file...
snarf_todays_items

' --- read through the control file, and create a web site...
create_website

' --- convert the website to an iSilo file, install it on my Palm via HotSync, and
' place a copy on a server for other to access...
convert_to_isilo

end sub

function strip_html(thehtml)
' -----------------------------------------------------------------------------------
' --- Given a string, stript out the HTML markup...

dim tmp, r, i, buf, intag, ch, eatlist

eatlist = chr(10) & chr(13)

for i = 1 to len(thehtml)
  ch = mid(thehtml, i, 1)
  if ch = "<" then
    intag = true
  elseif ch = ">" then
    intag = false
  elseif not intag then
    if instr(eatlist, ch) < 1 then
      buf = buf & ch
    end if
  end if
next

strip_html = buf

end function

sub snarf_todays_items
' -----------------------------------------------------------------------------------
' --- retrieve each local news item to a random file name, prepend an entry for each
' in the control file, and finish up with a date line.  Web clipping works on the
' principle of predictable begin and end strings around the desired content...

dim controlfile, buf, tmp, theclip, headline, itemfile, thedate
dim fp, r, i, p, q

q = chr(34)

' --- get the local daily news...
for i = 1 to 8
  theclip = clipping("http://www.gazette.com/daily/loc" & trim(i) & ".html", "<!headline>", "<!-- end of storie")

  if len(trim(theclip)) then
    write_the_clip(theclip)
  else
    exit for
  end if
next

' --- get the daily life...
for i = 1 to 8
  theclip = clipping("http://www.gazette.com/daily/life" & trim(i) & ".html", "<!headline>", "<!-- end of storie")

  if len(trim(theclip)) then
    write_the_clip(theclip)
  else
    exit for
  end if
next

' --- get the daily opinion...
for i = 1 to 3
  theclip = clipping("http://www.gazette.com/daily/opin" & trim(i) & ".html", "<!headline>", "<!-- end of storie")

  if len(trim(theclip)) then
    write_the_clip(theclip)
  else
    exit for
  end if
next

' --- add a date line to the control file...
thedate = date
prepend thedate, "", ""

end sub

function gen_rand_name()
' -----------------------------------------------------------------------------------
' --- generate a random webpage name...

dim randint

randint = Int(Rnd * (9999 - 1000 + 1)) + 1000
gen_rand_name = "c:\temp\" & Left(Trim(randint) & Trim(Int(Timer)), 8) & ".htm"

end function

sub prepend (thedate, itemfile, headline)
' -----------------------------------------------------------------------------------
' --- add a line to the top of the control file...

dim r, buf, fp1, fp2, tmpfile, controlfile

controlfile = "c:\temp\gazette.ctl"
tmpfile = "c:\temp\gazette.tmp"

fp1 = fopen(tmpfile, "output")

buf = thedate & "~" & itemfile & "~" & headline & "~"
r = fprint(fp1, buf)

fp2 = fopen(controlfile, "input")

do
  r = finput(fp2, buf)
  if r < 0 then exit do
  r = fprint(fp1, buf)
loop until r < 0

fclose fp1
fclose fp2

copy tmpfile & " " & controlfile

end sub

sub create_website
' -----------------------------------------------------------------------------
' --- read through the control file, and create a web site...

dim tmp, homefile, fp1, buf, fp2, headline, thedate, controlfile
dim itemfile
dim p, r, q, i

q = chr(34)
controlfile = "c:\temp\Gazette.ctl"
homefile = "c:\temp\Gazette.htm"

fp1 = fopen(controlfile, "input")

fp2 = fopen(homefile, "output")

buf = "<html>"
r = fprint(fp2, buf)

buf = "<title>Gazette Local News</title>"
r = fprint(fp2, buf)

buf = "<body>"
r = fprint(fp2, buf)

buf = "<h2>Gazette Local News</h2>"
r = fprint(fp2, buf)

buf = "<hr>"
r = fprint(fp2, buf)

buf = "<ul>"
r = fprint(fp2, buf)

for i = 1 to 40

  r = finput(fp1, buf)

  if r <> 0 then exit for

  thedate = subtoken(buf, 1, "~")
  itemfile = subtoken(buf, 2, "~")
  headline = subtoken(buf, 3, "~")

  logmsg "thedate: " & thedate
  logmsg "itemfile: " & itemfile
  logmsg "headline: " & headline

  if len(thedate) then
    buf = "</ul><p>"
    r = fprint(fp2, buf)

    buf = "News from " & thedate & "<p>"
    r = fprint(fp2, buf)

    buf = "<ul>"
    r = fprint(fp2, buf)

  else
    if len(itemfile) > 0 then
      ' --- make a link to it...
      buf = "<li> <a href=" & q & itemfile & q & ">" & headline & "</a><br>"
      r = fprint(fp2, buf)
    end if
  end if

next

buf = "</ul>"
r = fprint(fp2, buf)

buf = "<p>News items snarfed from the Colorado Springs Gazette Telegraph by exec32, written by Robert Schoolfield.<br>Version 1.5<p>"
r = fprint(fp2, buf)

buf = "</body></html>"
r = fprint(fp2, buf)

fclose fp1
fclose fp2

end sub

function subtoken(thestr, elem, delim)
' ---------------------------------------------------------------------------------------
' --- retrieve elements in a delimited string...

dim tmp, buf, thestrc, p, i

thestrc = thestr

for i = 1 to elem
  p = instr(thestrc, delim)
  if p > 0 then
    tmp = left(thestrc, p - 1)
    buf = thestrc
    thestrc = mid(buf, p + 1)
  else
    tmp = ""
  end if

next

subtoken = tmp

end function

sub convert_to_isilo
' ------------------------------------------------------------------------
' --- convert the website to an iSilo file, install it on my Palm via HotSync, and
' place a copy on a server for others to access...

' --- kill the existing iSilo file...
del "c:\temp\Gazette.pdb"
pause 1

' --- convert the new website into a Palm database...
exec "..\Bat\gazette.bat"
pause 2

' --- copy it to the server...
if exist("\\nxtintprod\public\palmdb\readme.txt") then
  copy "c:\temp\Gazette.pdb \\nxtintprod\public\palmdb"
end if

' --- install it on my Palm...
exec "c:\Palm\Instapp.exe c:\temp\Gazette.pdb"
pause 1.5
sk "~"

end sub


function done_run()
' ------------------------------------------------------------------------
' --- check to see if we have done run today...

dim fp1, buf, thedate, controlfile
dim r

thedate = date
controlfile = "c:\temp\Gazette.ctl"
fp1 = fopen(controlfile, "input")
r = finput(fp1, buf)
fclose fp1

if instr(buf, thedate) = 1 then
  done_run = true
else
  done_run = false
end if

end function


sub write_the_clip(theclip)
' ------------------------------------------------------------------------
' --- write the clip to a web file...

dim controlfile, buf, tmp, headline, itemfile, thedate
dim fp, r, i, p, q

' --- trim up the clipping...
'p = instr(theclip, "<p>")
'if p > 0 then
'  buf = mid(theclip, p)
'  theclip = buf
'end if

' --- find the headline...
p = instr(theclip, "<!headline>")
headline = "Item"
if p > 0 then
  tmp = mid(theclip, p, 100)
  headline = strip_html(tmp)
end if

' --- write out the story file...
itemfile = gen_rand_name()
fp2 = fopen(itemfile, "output")

buf = "<html>"
r = fprint(fp2, buf)

buf = "<title>" & headline & "</title>"
r = fprint(fp2, buf)

buf = "<body>"
r = fprint(fp2, buf)

' --- write the clipping...
r = fprint(fp2, theclip)

buf = "</body></html>"
r = fprint(fp2, buf)

' --- close the file...
fclose fp2

' --- prepend the entry in the control file...
thedate = ""
prepend thedate, itemfile, headline

end sub


Back to Page 1
Home