TGE Software
This page is intended to serve several purposes:Retail Pro 8 & 9
Coming into the company, one of the first things I was tasked with was creating plug-ins for V8 and designing a new customization layer for V9. Within the constraints I was given for designing it, my approach to the V9 customization layer was to satisfy the 95th percentile and maximize effectiveness by simply opening up access to all business objects at the lowest level. That allowed us to get to market quickly with the most functionality. The hardest part of that effort is probably the least used, the plug-in datastore functions.
I immediately got a chance to eat my own dog food when I leveraged the customization layer to build interfaces to OPOS hardware devices. Retail Pro 9 uses the PIAPI to abstract the interface to point of sale devices, and the plug-ins we created up front talked to OPOS drivers for cash drawers, bar code scanners, line displays, etc.
I also taught a class to the development partners, explaining the difference between the V8 and V9 customization interfaces and the advantages and power of the V9 approach. In doing that I created a ski rental customization that illustrated how to hook into the guts of V9 to inject logic into the V9 workflow.
Retail Pro Prism
When it came time to build a new product line, I and two other developers were tapped to figure out what that would look like. We settled on REST as the interface methodology and committed to making it database agnostic. We also built in an RPC facility, but as a matter of policy we discouraged the developers from using it unless absolutely necessary. And, of course, we embraced unit testing, if not test driven design, immediately.At the time we started it, the Embarcadero Datasnap framework was new and had serious issues, and their JSON support was just plain broken, so I decided to roll my own REST framework that was tailored to how Retail Pro builds software. I brought in code that I had developed a long time ago for multi-database support and wrote a set of serializer classes that would allow us to switch between XML and JSON as the payload format. I built an interface that allows a consumer to get just about anything they need from any resource, without being tied to pre-built SQL statements or database-specific stored procedures.
The decisions we made to go with a stateless, full-featured API paid off huge. The load time and performance of the web services rival that of the monolithic V8 and V9 systems, and the flexibilty from the perspectives of both the business logic coder and the API consumer made development on that product a breeze.
Custom Work
That project was a HUGE learning experience, and I want to make my expertise available to the Retail Pro community. I am available for contract work on any of the Retail Pro products, and I would love to help existing development partners get a leg up on moving their customizations to Prism.You can contact me at 209-679-2802, or email me at todd@tgesoft.com
Skills
I've worked on a lot of different projects, and I've picked up experience with wide variety of technologies along the way. This quick list isn't comprehensive, so if there's something you don't see here, ask me about it.It's worth mentioning that, in some cases, the experience is cumulative, broken up over several projects at different times. For instance, I've been using Javascript for at least 12 years, but I've only undertaken really complex projects with it in the last 4 years.
Languages | |||
---|---|---|---|
Skill Name | Skill Level | Last Used | Experience |
Java | Advanced | current | 20 yrs |
Javascript | Advanced | current | 6 yrs |
Delphi | Expert | current | 25 yrs |
HTML | Advanced | current | 15 yrs |
CSS | Intermediate | current | 9 yrs |
PHP | Advanced | current | 9 yrs |
C# | Intermediate | current | 5 yrs |
C | Intermediate | 11 yrs ago | 2 yrs |
C++ | Beginner | 11 yrs ago | 1 year |
Arduino | Intermediate | 4 yrs ago | 2 yrs |
Tcl/tk | Beginner | 18 yrs ago | 1 yrs |
VAX/Basic | Advanced | 23 yrs ago | 5 yrs |
80x86 Assembler | Intermediate | 23 yrs ago | 2 yrs |
COBOL | Intermediate | 29 yrs ago | 2 yrs |
Fortran | Beginner | 30 yrs ago | 2 yrs |
IBM 370 Assembler | Beginner | 30 yrs ago | 2 yrs |
Development Tools | |||
---|---|---|---|
Skill Name | Skill Level | Last Used | Experience |
Delphi IDE | Expert | current | 30 yrs |
Eclipse | Advanced | current | 15 yrs |
IntelliJ | Intermediate | current | 1 yr |
Android Studio | Intermediate | current | 1 yr |
Maven | Intermediate | current | 10 yrs |
Gradle | Beginner | current | 1 yrs |
KDiff3 | Intermediate | current | 10 yrs |
npm | Intermediate | current | 2 yrs |
JMeter | Intermediate | current | <1 yr |
Selenium | Beginner | current | <1 yr |
JUnit | Intermediate | current | 2 yrs |
DUnit | Advanced | current | 12 yrs |
NUnit | Intermediate | current | 6 yrs |
Frameworks, Servers, Distributed Systems, and Related Technologies | |||
---|---|---|---|
Skill Name | Skill Level | Last Used | Experience |
Spring/Hibernate | Beginner | current | 1 yr |
AngularJS | Intermediate | current | 4 yrs |
Express/Node | Beginner | 3 yrs ago | 1 year |
Android | Advanced | current | 5 yrs |
J2EE | Advanced | current | 7 yrs |
JAX-RS | Intermediate | current | 2 years |
Apache | Intermediate | current | 14 yrs |
Struts/Tiles | Intermediate | 14 yrs ago | 2 yrs |
TomEE | Beginner | current | 1 year |
EJB | Intermediate | 4 yrs ago | 4 yrs |
JDBC | Advanced | current | 14 yrs |
XML | Expert | current | 13 yrs |
XSLT | Advanced | current | 3 yrs |
DOM | Intermediate | current | 5 yrs |
JSON | Advanced | current | 9 yrs |
HTTP | Expert | current | 12 yrs |
COM/ActiveX | Expert | current | 7 yrs |
REST | Expert | current | 7 yrs |
RPC | Expert | current | 7 yrs |
SOAP | Intermediate | current | 7 yrs |
JSP | Expert | 6 yrs ago | 2 yrs |
NetDynamics | Intermediate | 14 yrs ago | 1 year |
CGI | Intermediate | 2 yrs ago | 2 yrs |
CORBA | Intermediate | 15 yrs ago | 1 year |
Databases | |||
---|---|---|---|
Skill Name | Skill Level | Last Used | Experience |
MySQL | Advanced | current | 15 yrs |
MS SQL Server | Advanced | current | 8 yrs |
Oracle | Intermediate | current | 15 yrs |
SQLite | Intermediate | current | 2 yrs |
MS Access | Intermediate | current | 2 yrs |
Informix | Intermediate | 20 yrs ago | 1 year |
Btrieve | Expert | 14 yrs ago | 10 yrs |
Pervasive SQL | Expert | 14 yrs ago | 1 year |
DEC RMS | Expert | 20 yrs ago | 5 yrs |
Operating Systems | |||
---|---|---|---|
Skill Name | Skill Level | Last Used | Experience |
Windows | Expert | current | 27 yrs |
Linux | Intermediate | current | 12 yrs |
MSDOS | Expert | current | 30 yrs |
Unix | Intermediate | 20 yrs ago | 1 year |
Novell | Intermediate | 28 yrs ago | 1 year |
Sun/Solaris | Intermediate | 20 yrs ago | 2 yrs |
Graphics | |||
---|---|---|---|
Skill Name | Skill Level | Last Used | Experience |
Print Shop Pro | Expert | current | 12 yrs |
GIMP | Intermediate | current | 1 year |
Blender | Beginner | current | 1 year |
Xara 3D | Advanced | current | 12 year |
Virtualization | |||
---|---|---|---|
Skill Name | Skill Level | Last Used | Experience |
VMWare | Intermediate | current | 15 yrs |
Virtual PC | Intermediate | current | 10 yrs |
Docker | Beginner | current | 1 yr |
Source Control | |||
---|---|---|---|
Skill Name | Skill Level | Last Used | Experience |
Mercurial | Intermediate | current | 10 yrs |
Git | Intermediate | current | 1 yrs |
VSS | Intermediate | 5 yrs | 10 yrs |
Industries | |||
---|---|---|---|
Industry | Systems | Since | Experience |
Retail | POS, inventory, customer management, EFT, customizations | current | 15 yrs |
Mobility | Front-end integrations to legacy systems | current | 4 years |
Healthcare | Social media | 3 yrs | less than 1 year |
Health and Human Resources | Fiduciary and case management | 20 yrs | 5 yrs |
Shipping | Manifests, tracking, billing, web services | 25 yrs | 5 yrs |
Medical | Patient accounting, medical records, clinicals | 30 yrs | 5 yrs |
Real Estate | Sale tracking, customer tracking, mapping, integrations | 30 yrs | 2 yrs |
Call center | Statistics, reporting | 35 yrs | 1 yr |
Methodologies
Miscellaneous
As a hobby I tinker with electronics. Using the Arduino hobby board platform I've programmed ATmega microcontrollers in conjunction with XBee tranceivers and various sensors to create motion/range detectors, motor drivers, etc. While my first electronics project didn't involve an Arduino, it allowed me to use my phone to open my garage door.One on-going project, which I get to when I can, involves reusing HP printer parts -- the motors and sensors -- to build robots on the cheap. This requires writing drivers for the various motors, which is always a challenge since each motor seems to operate differently, but it's so cool when you see them operating.
My latest project, though, is to build a 3D printer from scratch.
Back in the day, the best projects for researching 3D printing
were being tracked by Hackaday,
and I always wanted to build one, but didn't have the time. One of
my resolutions for this upcoming year is to finally build one. I
might cheat and reuse the 3Doodler I got my daughter as the print
head. If I ever get to that, I'll post pictures and videos of the
progress.
Copyright (c)2014, 2018 Todd Grigsby, all rights reserved