UCOSP code sprint day #2

Today we continue to explore the unanswered questions left over from yesterday. These are the things that I have explored

OGC stands for opengeospatial consortium, and GEOS is an implementation of the OGC specification. It is formed by a set of companies who have invested their time to have set out a standard for geospatial information systems and databases. GEOS implements part of the SFS standard and Ingres uses it for geospatial manipulation and calculation. The patch Alex sent sends me extends GEOS to support more of the standard so that Ingres can use the GEOS.

Functions instances to implement:

  • IsSimple,
  • IsEmpty,
  • Overlaps,
  • X(on points only),
  • Y(on points only),
  • NumPoints (on linestring only)

Files to change:
  • adgoptab.roc
  • fi_defn.txt
  • aduint.h
  • adfops.h
  • adupoint.c
  • adffiids.h


Following the standard that is quoted from OpenGIS Implementation Specification for Geographic information - Simple feature access:
Organization: Open Geospatial Consortium Inc.
Date: 2005-11-22
Reference number of this document: OGC 05-134
Version: 1.1.0
Category: OpenGIS® Implementation Specification
Editor: Keith Ryden

SQL functions on type Geometry
IsEmpty(g Geometry) : Integer
The return type is Integer, with a return value of 1 for TRUE, 0 for FALSE, and –1 for UNKNOWN corresponding to a function invocation on NULL arguments.
TRUE if this geometric object corresponds to the empty set

IsSimple(g Geometry): Integer
The return type is Integer, with a return value of 1 for TRUE, 0 for FALSE, and –1 for UNKNOWN corresponding to a function invocation on NULL arguments.
TRUE if this geometric object is simple, as defined in the Geometry Model

SQL functions that test spatial relationships
Overlaps(g1 Geometry, g2 Geometry) : Integer
The return type is Integer, with a return value of 1 for TRUE, 0 for FALSE, and –1 for UNKNOWN corresponding to a function invocation on NULL arguments.
TRUE if the intersection of g1 and g2 results in a value of the same dimension as g1 and g2 that is different from both g1 and g2 Integer

SQL functions on type Point
X(p Point) : Double Precision
return the x-coordinate of Point p as a double precision number

Y(p Point) : Double Precision
return the y-coordinate of Point p as a double precision number

SQL functions on type LineString
NumPoints(l LineString) : Integer
return the number of Points in the LineString

Posted byA nerdy girl at 12:23 PM 0 comments  

UCOSP code sprint day #1

Today Andrew started off the day with explaining to the group of Ingres UCOSP students the general overview picture of how a user at the browser level, Tomcat, GEOServer/Map Server, Geotools and Ingres DMBS fit together. It's decided that the 4 students from University of Waterloo and University of British Columbia work on the Geotools communication with the Ingres DBMS, and that me working on the implementation of SQL functions while Sara test them out.

We have also decided the goal of the code sprint for the Geotools group to figure out where the code that need to be modified sit, what are the road blocks, and what is the schedule of the work for the rest of the team. It's clear for the Ingres SQL group what need to be done, so the goal of the code sprint will be having 1 patch completed and if not, what is the road block to it and the schedule fo the work for the rest of the team.

We had pizza lunch and I met with some sponsors who is those that support us financially. I have also talked in person to some other graduate students and professors who I have been talking to on IRC/mailing list in previous term, and they are working on the analysis of the performance of Ingres. Hope that I can learn more from them/together for this semester!

Posted byA nerdy girl at 12:19 PM 0 comments  

Yay, SQL implementation in action!

I am always interested in coding and stepping through the code in a DBMS in action and my dreams have finally come true!

As a continuation of the work that I have been doing from last term, other than the error handling of the SQL functions, this semester it's clear that I will be implementing 6 SQL functions embedded in Ingres using the GEOS library with my mentor Alex Trofast.

Posted byA nerdy girl at 3:23 PM 0 comments  

I'm back with Ingres again

After spending a semester with the Ingres community, I have decided to stay with the team for another semester with Andrew Ross and the Geospatial team.

Other than me, this time we also have Sara Castaneda Danaher(University of Virgin Islands) as a returning student, Lim Goh(University of Waterloo), Xiaoxiao Li(University of Waterloo), Henry Chow(University of British Columbia), and Anthony McCallum(University of British Columbia).

I'm already looking forward to the code sprint that will be 2 weeks from now :)

Posted byA nerdy girl at 2:32 PM 0 comments  

Screencast showing building GEOS and Geospatial as a non-root user in action on Linux

The following video is done with GEOS 3.2.0, compiled in gcc 4.3 and g++ 4.3 on Debian as a non root user.

Posted byA nerdy girl at 8:23 PM 0 comments  

UCOSP: 2009 fall term final thoughts

It was a valuable experience to work on the Ingres Geospatial project along with the community. The most valuable ones are not those that I got from the coding, but the co-operation, management, and more importantly, my weakness.

This project is challenging to me since I am the only University of Toronto student working with Ingres and one of the very few UCOSP students who have been grouped with a partner who is not under the same university. In order to co-operate well, I need to know more about the expectation from students at that university from which my partner is in, need to understand more about their work load level, schedules of the semester, etc, which is totally different from the group projects/assignments that I have ever done.

Although it was upsetting when I have not heard anything from my assigned partner until the end of term, because of that I caught the valuable chance to co-operate with other Ingres students as well as the community, and made myself comfortable with the style of the day to day working experience at Ingres.

I would give myself a grade 80 out of 100, with the reasons as follows.

Things that went went well

  • Get myself to be familiar by the Ingres community at IRC, which always guide me back to the right track when I went side ways.
  • Let the Ingres community see the scope of work that Andrew has assigned each of us to when the grading scheme is finalized such that the community has a better picture about the UCOSP students.
  • Attended most of the meetings and updated Andrew and/or my mentors whenever there's news from me.
  • Helped out with the other UCOSP students who are also under Ingres the best that I can, either on IRC or skype.
  • Kept track of and jotted down the solution to the roadblocks that I encounter during the installation and configurations stage, also some cheat sheets for newbies like me to refer to understand the bigger picture more.
  • Organized meetings with UCOSP students at their needs to update each other when normal meetings are cancelled.
  • Updated several wiki pages which had parts that are irrelevant/outdated as I digged deeper about Geospatial.

Things that could have done better
  • Should have contacted Andrew discussing about the organization of the course back in the summer.
  • Although I have mentioned to the Ingres community, but I should have raised the concern about non-responsive partner to the school earlier.
  • Should have better time mangagement, especially at peaks of assignments/midterms/exams.


After this term, I am more assure of my interest about project management and software architectural design, as well as about my abilities and weakness.

Posted byA nerdy girl at 7:29 PM 0 comments  

UCOSP: status report #14

Back on Wednesday, I have committed the "guiding patch" into the repository. I followed these steps, confirmed with the Ingres community that this is how I should be working for development:

  1. Go to https://bugs.ingres.com/ to create a ticket as "New enhancement" for development. The ticket system is not only used for bugs, but also development purpose.
  2. do "svn commit --username=yourUserName /path/to/file.s -m=#123456 your description", where 123456 is the ticket number that you have created
  3. commit 1 fix/small feature at a time
  4. after committing, send off a quick email notifying everyone that something has just committed.


Other than that, I have also been reading on this knowing more about the structure of the Ingres code.

As for my understanding now, the current development is currently focusing on improving the robustness of this following part.
adu – This is where most of the actual expression and function semantics live. ADU contains code for string functions, date functions, coercions, and more.


For the rest of the week, I'll be working closely with Chuck Thibert on the small part that he's also working on.

Posted byA nerdy girl at 6:26 PM 0 comments