Life is like Code, you never know what you will create next

Java JPA Just Sucks

6. March 2012 14:22 by Scott in Java, ESRI  //  Tags: ,   //   Comments (0)

Now hear me out, before you go commenting like crazy or I stir a hornets nest saying something bad about Java.

We have this project at work that has consumed a year and a half of development time.  Some developer in the very beginning decided to use Java JPA and Java webservices as the server side environment.  So we went with it.  After a while, we ran into Java JPA.  For those .Net folks out there, its Java’s attempt at LINQ or the Entity framework.  While its not bad, I seem to run across countless more problems with it than I ever would have with LINQ or Entity.

It generates tables poorly, it has problems with foreign keys and it doesn’t error out properly with good error codes or problems.  Overall, it is just a poor attempt.  Sort of reminds me when I started developing in highschool.  Tons of concepts, bad design and crappy documentation.

I attempted to convince my colleagues to move over to .Net before it was too late, but sadly they thought we were already too far in. 

If you would like some proof, well let me just show you.  I received this error just now.

JPA table “sequence” does not exist.

What sort of error is that?  Where does that come from and how would that even help me towards a solid solution?  So I google it and find one thing on stackoverflow.

Sadly, the link http://stackoverflow.com/questions/8761448/jpa-table-sequence-does-not-exist doesn’t help much either.

At least in .Net they will both tell you the problem and suggest a fix in the comments of the error.  Yes, thats right, they will suggest a fix.  You should all write your frameworks that way.  If you think an error is possible, help that poor coder along and give them solutions.  JPA reminds me a lot of ESRI code.

Thats my Rant.

In Looking for a public Web Processing Service (WPS)

6. December 2011 12:18 by Scott in ESRI, GIS  //  Tags: , ,   //   Comments (0)

I was looking for some public WPS’s to run some tests against.  Well, my searches didn’t pull up much in Google or Bing until I got more detailed, so for all the world to see here are some that I found.

I found a good list here at least to start testing with.

WPS

http://wps.globalsoilmap.net/pywps.cgi?&version=1.0.0&service=WPS&request=GetCapabilities

http://giv-wps.uni-muenster.de:8080/wps/WebProcessingService

http://deegree3-testing.deegree.org/deegree-wps-demo/services

http://zoo-project.org/cgi-bin-new/zoo_loader.cgi

CIESIN

http://beta.sedac.ciesin.columbia.edu/wps/WebProcessingService?Request=GetCapabilities&Service=WPS

WMS

CATHALAC

http://maps.cathalac.org/wmsconnector/com.esri.wms.Esrimap/dataframeworklayers?Request=GetCapabilities&Service=WMS

CIESIN

http://sedac.ciesin.columbia.edu/mapserver/map/HOTSPOTSv1?Request=GetCapabilities&Version=1.1.1&Service=WMS

DEPHA

http://www.dephadata.org/geoserver/demo.do">map demo

DEPHA

http://www.dephadata.org/geoserver/ows?service=WFS&request=GetCapabilities

DEPHA

http://www.dephadata.org/geoserver/ows?service=WMS&request=GetCapabilities

GEMS/WATER

http://www.gemstat.org/WS/stationByCountry.aspx?service=WFS&version=1.0.0&request=GetCapabilities

GRID/GENEVA GEO

http://geodata.grid.unep.ch/webservices/">directory -

GRID/GENEVA GEO

http://gridca.grid.unep.ch/cgi-bin/mapserv?map=/www/geodataportal/htdocs/mod_map/geo_wms.map&service=wms&version=1.1.1&request=getcapabilities

GRID-Arendal

http://maps.continentalshelf.org/wfsconnector/com.esri.wfs.Esrimap/osdsF?request=getcapabilities

GRID-Arendal

http://maps.continentalshelf.org/wmsconnector/com.esri.wms.Esrimap/shelfdatashop?request=getcapabilities&service=WMS&version=1.1.1

GRID-Nairobi

http://gridnairobi.unep.org/aimscsw/csw2.0?request=GetCapabilities&version=2.0.0&service=CSW

GRID-Sioux Falls

http://na.unep.net/cgi-bin/global_postgis?request=getcapabilities&Service=wms&version=1.1.1">here

 

ICIMOD

http://216.108.232.20:8080/geonetwork/srv/en/csw?request=GetCapabilities&service=CSW&acceptVersions=2.0.1&acceptFormats=application%2Fxml

ICIMOD

http://216.108.232.20:8080/geoserver/wms?service=WMS&request=GetCapabilities

NDIDC

http://nsidc.org/cgi-bin/atlas_north?service=WFS&request=GetCapabilities

NDIDC

http://nsidc.org/cgi-bin/atlas_south?service=WFS&request=GetCapabilities

UNEP PREVIEW

http://preview.grid.unep.ch:8080/geoserver/ows?service=WFS&request=GetCapabilities

UNEP PREVIEW

http://preview.grid.unep.ch:8080/geoserver/ows?service=WMS&request=GetCapabilities

UNEP/DEWA

http://dewa03.unep.org/geoserver/ows?service=WFS&request=GetCapabilities UNEP/DEWA

http://dewa03.unep.org/geoserver/ows?service=WMS&request=GetCapabilities

WCMC

http://maps.unep-wcmc.org/arcgis/services/WDPAv2_0/wdpa_all_WGS84/MapServer//WFSServer?request=GetCapabilities&service=WFS

WCMC

http://maps.unep-wcmc.org/arcgis/services/WDPAv2_0/wdpa_all_WGS84/MapServer//WMSServer?request=GetCapabilities&service=WMS

Draw a Circle Graphic with ESRI Android SDK

14. November 2011 12:56 by Scott in Development, ESRI  //  Tags: , , ,   //   Comments (3)

I wrote this code a while back.  The requirement was to have a user draw a circle with the ESRI Android SDK.  Well, their Android SDK doesn't currently support drawing circles.  It draws all other types of polygons except for the circle.  So what does a Software Engineer do, we come up with our own implementation.

So for the world to see, here it is:

First we capture the OnMotionEvent and the comments are in line.

Hope this helps someone.

    public boolean onDragPointerMove(MotionEvent from, MotionEvent to) {

        if (tempCircleGraphic != null)
            _graphicsLayer.removeGraphic(tempCircleGraphic);

        // creates a new polygon to be drawn.
        _circleTemp = new Polygon();

        Point point = _map.toMapPoint(to.getX(), to.getY());

        // If the starting point is null, create a polyline and start a
        // path.
        if (_startPoint == null) {
            _startPoint = _map.toMapPoint(from.getX(), from.getY());
            // creates a polyline so we can measure the radius of the
            // person
            // drawing the circle.
            _polylineTemp = new Polyline();
            // starts the poly line
            _polylineTemp.startPath(_startPoint.getX(), _startPoint.getY());
        }
        // continues the draw of the poly line
        _polylineTemp.lineTo((float) point.getX(), (float) point.getY());

        // calculates the circle when getting ready to be drawn.
        int pointsAroundCircle = 50; // N
        double radius = _polylineTemp.calculateLength2D(); // radius
        for (int i = 0; i < pointsAroundCircle; i++) {
            double fi = 2 * Math.PI * i / pointsAroundCircle;
            double x = radius * Math.sin(fi + Math.PI) + _startPoint.getX();
            double y = radius * Math.cos(fi + Math.PI) + _startPoint.getY();
            if (i == 0) // starts the drawing of the circle. if
                        // beginning
                        // the for loop
                _circleTemp.startPath(x, y);
            else if (i == pointsAroundCircle - 1) // ends the circle
                                                    // when at
                                                    // the end of the
                // for loop.
                _circleTemp.closeAllPaths();
            else
                // continues drawing the cirlce while it iterates
                _circleTemp.lineTo(x, y);
        }
        // creates a new graphic and sets the geometry to a polygon.
        Graphic graphic = new Graphic();
        graphic.setGeometry(_circleTemp);

        int drawColor = getDrawColor();
        int transparentColor = Color.argb(POLYGON_ALPHA, Color.red(drawColor),
                Color.green(drawColor), Color.blue(drawColor));
        SimpleFillSymbol fillSymbol = new SimpleFillSymbol(transparentColor);
        graphic.setSymbol(fillSymbol);
        
        tempCircleGraphic = graphic;
        // add the updated graphic to graphics layer
        _graphicsLayer.addGraphic(graphic);

        // Refresh the graphics layer
        _graphicsLayer.postInvalidate();
        return true;

    }