October 6th, 2016
This post is an actual exaggerated account of events in the office. Names of the innocent have been protected.
I'm sitting in my office working on a way to streamline checking data from a large and terrible organization and I click on one of our links and see the worst possible thing: a negative AADT (Annualized Average Daily Traffic, basically a traffic count!).
AADT's can't be negative. They'd cause a rift in the space-time continuum.
After screaming across the aisle to the poor soul that has to fix things like this (who replied with an exacerbated "WHAT?" when I said "Hey, why are the AADT's negative on the Big Mac Bridge?" and we both checked the model output to see that, indeed, the model output claims that the AADT is positive, I started looking further into the problem.
I started with FoxPro (I may be the last person with FoxPro installed on their computer, but IT can uninstall it over my cold dead body AND after removal of my ghost) and found that the AADT should be 44,043 (in one direction).
Then I remembered that we've had this problem before, but I thought that bug was fixed (silly me for thinking multiple-year-old bug get fixed). I looked into it on the web and found a statement from one of ESRI's own indicating that the problem is with ArcWhatever* converting 5-width numbers in DBFs to be short integers (which range from -32,767 to 32,767). 44,043? Too big, so the number gets displayed incorrectly.
The fix is surprisingly simple: change the width of the field in FoxPro from 5 to 6.
That 5, it's bad! Make it a 6.
Once the fix is made, the data is displayed as a 32-bit integer.
- I first saw this with a data layer served by ArcServer. Or ArcSDE. Heck, I don't know the difference, I just ask our GIS department for a REST endpoint and they take care of me and that's where I actually saw this.
June 10th, 2014
I've been working on the project mentioned last week, and found something interesting in ArcObjects for Java. It comes out looking like a bug, but it is just bad code that is hard to detect (partly because it involves setting a value a programmer would never expect to set).
The problem manifests itself in an error like this:
# A fatal error has been detected by the Java Runtime Environment:
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x60e9f090, pid=6184, tid=3704
# JRE version: Java(TM) SE Runtime Environment (8.0_05-b13) (build 1.8.0_05-b13)
# Java VM: Java HotSpot(TM) Client VM (25.5-b02 mixed mode windows-x86 )
# Problematic frame:
# C [GdbCoreLib.dll+0x14f090]
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
# An error report file with more information is saved as:
# C:\Users\arohne\workspace\GPS HHTS Analysis Esri Export\hs_err_pid6184.log
# If you would like to submit a bug report, please visit:
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
I poured over this for days, and even considered sending this to ESRI Support. As I continued looking into it, I found the problem:
fieldCount+=2; //FIXME: Trying to @&#$ things up
Previously, I didn't have the loop and instead had fieldsEdit.setFieldCount(2+GPSData.class.getDeclaredFields()+2);. The problem was that it was returning all the fields (both public and private), but I only defined public fields. This caused that error. I tested this by adding the fieldCount+=2; to the code (hence the FIXME tag) and was able to get things to work without intentionally changing the field count and break it when I have an incorrect field count.
I hope this helps someone out, as it isn't documented elsewhere that I could find.