Ingres Community Forums Login Register Ingres.com  

Ingres Community Wiki

Navigation
Learn About
Developing With
Ingres Talk
Information
Toolbox

OpenROAD Code Sprint UK Sep2009

From Ingres Community Wiki

Jump to: navigation, search

Contents

Code Sprint Event

Dates: September Monday 28 and Tuesday 29
Venue: Ingres office. Slough, UK
Numbers: 10 to 15
Pre requisites: Programming experience in OpenROAD and/or C. BYO laptop.
Cost: The event is free.
Contact: Paul White (Click here to send email)
Meals provided: Dinner Monday night, Lunch, Morning and Afternoon refreshments on both days.
Accommodation: See below
Transport: see below

AGENDA FOR CODE SPRINT and USER GROUP MEETING (including directions)

The agenda has been updated. 28 Sep 2009.
View Agenda


Day 1 is nearly over. Just got back from dinner - good food good wine good conversation.
Click here to see Pictures

Theme

To be confirmed but plan to have fun! Meet OpenROAD community members from around the world. Learn what it takes to get enhancements into the main code line: Specifications, Source Change Control, QA, Documentation and Programming! Get hands on assistance from OpenROAD architects and gain insight into the bug fixing process. Help bring some of the latest community developments into the enterprise GA release.

Your input will help accelerate OpenROAD into a fully open source product

User Group Meeting

On the Monday evening we are holding an informal Ingres / OpenROAD user group meeting. All are welcome. There will be some nifty demonstrations and an opportunity to play with new technology. Have your say in the future direction of OpenROAD. The presentations are not too technical and we think you will find the case studies interesting. If you have a suggestion for a topic or would like to make your own presentation please let us know. It's a good opportunity to meet your peers in the industry.

View Agenda

Date: Monday 28 September
Time: 6pm
Venue: Ingres office. Slough, UK
Numbers: If we fill the venue we may have to run break out sessions
Light refreshments will be provided.
Registration: Contact Sean Thrower or phone +44 (0) 18.8362.2464

Sponsorship

We are looking for sponsors to the event to help offset costs for this and future community events. Please contact me for more details if you would like to assist.

A huge thank you to goes to Ingres for providing the venue, meals and organising much of the infrastructure. Thank you to Peercore for covering the cost of refreshments.


Dinner event

We would like to hold a special dinner event on the Tuesday evening. Planning is still underway. Please let us know if you would like to attend. Costs are unknown at this stage, we are hoping to subsidise the cost with sponsorships.


How to get there

The code sprint is being held in the office of Ingres Europe Limited
215 Bath Rd, Slough, Berkshire, SL1 4AA, United Kingdom‎
Phone: +44 (0) 17.5355.9500

Gatwick airport. 55 min drive . 60GBP for taxi
Heathrow airport. 15 min drive. 25GBP for taxi
Taxi. online bookings
Rail. Plan your travel

  • Slough railway station is 7 min drive or 26 min walk from the office.
  • Heathrow T4 Leaves every 30 min. duration 38 min 1 change
  • Heathrow T123 infrequently. duration 58 min 1 change
  • Gatwick leaves every 15 min. duration 1:45 - 1:52. 2 changes


Accommodation

Most of our participants are staying here:

Express By Holiday Inn SLOUGH
New Station House
Mill Street
Slough, Buckinghamshire SL2 5DD
United Kingdom

The cost is around 45 GBP which includes buffet breakfast. This is the base rate for a room with 2 beds. Taxes included You’ll need to do a bit of surfing to get the best internet rate.


Links

Check out the results of previous code sprints here:

Wizards of Oz Tour 2008 Wiki

Wizards of Oz Tour 2008 code sprint. (great pics)

UK code sprint July 2008


Code Sprint Preparations

Hardware Requirements

If you are participating in the OpenROAD Code Sprint, you will need to bring your own laptop computer. We recommend the following minimum hardware:

  • Pentium 4 1.8 GHz or higher
  • 1 GB memory (2 recommended)
  • 500MB free disk space
  • 1 available USB 2.0 connector
  • Windows XP Professional, Windows 2003 Server or RedHat (or compatible) Linux

Software Requirements

You will be required to install VMWare Server 1.0.8 on your laptop for the duration of the code sprint. All development work done during the sprint will be done in preconfigured virtual machines. These VMs will be provided to each participant on a 60 GB USB drive which you will keep as one of your gifts from Ingres Corp. To save time at the sprint, you may pre-load VMWare on your machine by downloading it from the VMWare download site at here.

IMPORTANT: Download and install the 1.0.8 version of VMWare Server NOT the 2.0 version of the product!

Training Materials and other Resources

You may want to familiarise yourself with the OpenROAD Empire and Community Applications before arriving at the sprint. The following materials will help. Check back frequently as more materials will be added to the site as the event draws closer.

  • Working with OpenROAD Empire and the Community Applications is available in PDF format here. This presentation was prepared for the OpenROAD Wizards Of Oz 2008 Code Sprint particpants to familarize them with the VM that was provided. While this VM will be available we will be focusing on another technique for working with the code under an NDA.


Listed below are different project suggestions to be considered as candidates for the OpenROAD Development Sprints. This list is not meant to be the only choices, other ideas are certainly welcome. Feel free to add your sprint project idea to the list.

3GL Projects

Enhancement to the ARRAY .Find and .Sort Methods

Description: .Find Enhancement: Allow the specifying of multiple attributes to be searched for in the array. Frequently I need to find an entry in an array based on multiple attributes. Currently this cannot be done using the .Find method as it only supports 1 attribute & so I have to resort to an IF test inside a FOR or WHILE loop. This gets slow when it is having to be repeated within another FOR loop.

.Sort Enhancement: Allow an array to be sorted on an attribute of an object attribute. In my application company information is stored in a company userclass. This is used to create an attribute in another userclass-based array. In order to Sort the array by Company name, I had to process the array, copying the data into a "dummy" attribute at the array level before performing the sort. Ideally I'd like to be able to do something like:

MyArray.Sort (Source.CompanyName = AS_ASC, Component = AS_ASC); 

Comment:

Submitted By: Martin Bloomfield

Add the -l flag to the DocumentApp and DestroyApp Utilities

Description: In OR 2006 there exists a -l flag to the import and export utilities which operates on a set of files. This project will apply this same functionality to the documentapp and destroyapp utilites. Once this is accomplished the corresponding 4GL project can be implemented

Comment: This should be reasonably straightforward to implement as the code to accomplish this already exists in the import and export utilities.

Submitted By: Colin Hay


Complex Data Types Objects

Description: OpenROAD allows the calling of external API’s that can reside in dynamic link libraries on Windows platforms or shared libraries on Linux/UNIX platforms. Currently the feature is limited to API’s whose input parameters are simple scalar types. The supported data type mapping between OpenROAD and C/C++ are as follows:

  • Varchar <> char *
  • Integer <> int
  • Float <> float, double
  • Char <> char

Some external API’s have one or more input parameters that are complex data types. These represent memory storage blocks that must have a precise layout and can be linked together by references. In the C language these complex data types are structures. This project implements a new OpenROAD system class that allows the instantiation of a complex memory object such as an arbitrary C structure.

Goal: A reasonable goal is to develop a working prototype of this feature. Several Win32 API’s that require complex data types as input parameters called from a OpenROAD 4GL program would be a successful proof of concept.

Submitted By: Joseph Kronk

Trace Window Portlet

Description: The current trace window is a 3GL feature (disaster?) that can not be controlled by the 4GL application. The 3GL part of this project enables the 4GL application to receive trace information from the OpenROAD runtime. The 4GL part of this project is to enhance the IDE to use a portlet to display trace information.

Goal: TBD

Submitted By: Joseph Kronk

HashTable Class

Description: OpenROAD 4GL currently does not have a system class for storage of objects in a keyed memory table, which can be used for later quick lookup operations. Developers are therefore forced to (mis)use a 4GL ArrayObject and its Find() method, which is harder to implement and could have a huge performance impact. Some developers also use the ChoiceList for performance reasons. A HashTable class can be configured using a Setup(size, keytype, isunique) method with a configurable size and key type (e.g. varchar, integer, object) and an option if it's using unique keys. It also offers methods like: Clear(), Enter(key, elementobject), Find(key), FindAll(key), Remove(key).

Goal: A reasonable goal is to develop a working prototype of this feature. It can be used to improve the performance, e.g. within the AsoLib BPM implementation (switching contexts etc.).

Submitted By: Bodo Bergmann

FileObject Class

Description: OpenROAD 4GL currently does not have a system class that offers methods for reading and writing files, which leave the file open, e.g it's currently impossible to read in a large file (e.g. 2GB - which wouldn't fit in a StringObject) line by line. The StringObject methods WriteToFile() and AppendToFile() always open the file, then position within the file, write to it, then close it. A FileObject class will act as a wrapper to the C functions, so it will offer methods like Open(), Close(), Seek(), Read(), Write().

Goal: A reasonable goal is to develop a working prototype of this feature.

Submitted By: Bodo Bergmann

ObjectFactory Class

Description: OpenROAD 4GL currently does not have a system class that allows the creation of arbitrary objects from the varchar name of the class. For simple user or system class objects there is a workaround by getting the value from a DynExpr created from the string: classname+'.Create()'. But this has performance implications and limitations, e.g. it can't be used for creating an ARRAY of the given class. In addition we currently have no way to create an external object without using an external class library, but according to the registered name of the class, e.g. "Word.Application" (like in VB), which will create the object of the latest version installed on the current machine. Also, there should be away to get a list of installed versions before trying to create the instance. The ObjectFactory class would provide the following method CreateObject(classname, isArray, useRegisteredName).

Goal: A reasonable goal is to develop a working prototype of this feature.

Submitted By: Bodo Bergmann

FormatObject Class

Description: OpenROAD currently only allows formatted output of values by the use of an EntryField with FormatString/TextValue. Formatting is often required without the visual component (GUI), e.g. in an OpenROAD Server environment or when writing output to files or the DB. The FormatObject provides the formatting functionality of EntryFields without the GUI dependency and therefore is also a component to reduce the GUI (and therefore MainWin) dependency of OpenROAD Server applications. The class offers the attributes/methods required for formatting, e.g.: Datatype, TextValue, StringValue, FormatString, SetValue(), GetValue(), SetValueFromString(), GetValueAsString(). The implementation will mostly be a copy&paste from the EntryField code.

Goal: TBD

Submitted By: Bodo Bergmann

SysUtils Class

Description: You currently have to use "CALL SYSTEM" statements if you want to copy, rename or delete files on the harddisk. It would be nice to have a system class which implements these operations in an OS independent way with functions like "CopyFile", "RenameFile", "MoveFile" or "DeleteFile". We could also implement these functions into the "SessionObject" class, since a lot of similar functions are already in this class (e.g. "FileExists", "DirectoryExists", etc.). Here is a list of funtions that could added to improve the usability of OpenROAD (may be extended):

  • CopyFile(FileName = varchar(2000), NewFileName = varchar(2000))
  • DeleteFile(FileName = varchar(2000))
  • ExcludeTrailingPathDelimiter(FileName = varchar(2000))
  • FileAge(FileName = varchar(2000))
  • FormatStr(???)
  • GetTempDir()
  • GetTempFileName()
  • IncludeTrailingPathDelimiter()
  • MoveFile(FileName = varchar(2000), NewFileName = varchar(2000))
  • RemoveDir(Directory = varchar(2000))
  • StringReplace(S = varchar(2000), OldPattern = varchar(256), NewPattern = varchar(256))
  • StrPos(S = varchar(2000), SubStr = varchar(256))
  • TouchFile(FileName = varchar(2000))
  • WrapText(S = varchar(2000), BreakStr = varchar(8), BreakChars = varchar(8), MinLength = integer, MaxLength integer)
  • ChangeFileAttribute( FileName = varchar(2000), Attribute = integer)
  Description: Attribute can be:  READONLY, READWRITE, HIDDEN, SYSTEM

Goal: TBD

Submitted By: René Slowenski, Colin Hay

Code-hiding

Description: When components are developed, much of the code is typically scaffolding, performing programmer-validity-checks, reporting, intimate commentary that will all disappear in the production system, and which during development makes the code hard to read because you cannot visually differentiate between programmer-scaffolding and enduser-policing. It usually gets deleted when the component is nearing production (or even code review), which is most unfortunate given the testing information and capability it contains.

We could nominate a non-code character (¶, for example) that the compiler ignores (if at column 1), but uses to determine if that line should be included in the compilation (.CodeHiding=CH_INCLUDE), or ignored (.CodeHiding=CH_HIDE). The character would be at the start of the line (like the # is now) - when editing the code caused it to inset, it could be made to disappear (or to be the programmer’s responsibility to cleanup).

Advantages:

  • developers and maintainers would have the scaffolding available to them at the click of a switch whenever they needed to reopen a production component to work on a bug or enhancement.
  • Information identifying the likely weaknesses and justifications of any section of code would not be lost
  • Developers could identify and eliminate unintended dependencies of the production code on the scaffolding before they deleted it, saved, tested, screamed, and threw themselves off the nearest bridge (a daily occurrence here)

... big savings in development & maintenance costs, quality and sanity.

Goal: A working prototype.

Submitted By: Sean Thrower

FocusBehavior Improvement

Description: FocusBehavior is triggered only by click events, and this creates scenarios where changes are lost, and workarounds are incomplete at best and often complex. Focusbehavior processing is important to events such as FrameDeactivate and Terminate (needed for eclient), as well as Properties and ClickPoint. We could implement a focusbehavior attribute for frameexec, to manage responses to FrameDeactivate and Terminate. Immediate benefit – the properties sheet (and eclient) would stop losing input values ...

Goal: A full working implementation of the frameexec handling may be achievable.

Submitted By: Sean Thrower

Regular Expression Class

Description: Potential New or Modified Exisiting OpenROAD System Class. Support for regular expressions -- there are lots of regexp libraries out there that could be wrapped into a system class or incorporated into string support somehow.

Goal: TBD

Submitted By: Roger Whitcomb

Mathematical/Computational functions

Description: Support for more mathematical and computational functions: trigonometry, hyperbolics, bessel and J functions, etc., etc. New OpenROAD System Class –or- Functions.

Goal: TBD

Submitted By: Roger Whitcomb

Support New Bitmap Formats

Description: Modifications to the BitmapObject System Class to add support for more image and/or vector graphic formats (PNG, SVG come to mind) for images

Goal: TBD

Submitted By: Roger Whitcomb

Compression Class

Description: New OpenROAD System Class to add support for compression (i.e., wrapping ZLIB or something like that) to be able to create/read .ZIP, .TAR, .GZ, .JAR, .WAR, etc. format files. A follow-on from this could be importing/exporting apps from/to .ZIP format (for instance)

Goal: TBD

Submitted By: Roger Whitcomb

FTP Class

Description: An easy way to send and receive files using ftp protocol.

Goal: TBD

Submitted By: Kim Ginnerup

MAIL Class

Description: Provide an easy way to send and receive email.

Goal: TBD

Submitted By: Kim Ginnerup

HTTP Class

Description: An easy way to send and receive files using http protocol.

Goal: TBD

Submitted By: Kim Ginnerup

Localization

Description: In a non English speaking country you cannot use any of the built in popups because you cannot translate them.

Goal: TBD

Submitted By: Kim Ginnerup

DateObject Enhancement

Description: A lot of new features would be great here such as GetISOWeek(), GetYear(), month(), day(), dow(), quarter(). Also GetDateAsString() to return a date in a fixed format string that is not dependent on II_DATE_FORMAT and getXMLString() to return the date in standard xml notation. In general most if not all Ingres Date functions should also be available in the DateObject class

Goal: TBD

Submitted By: Kim Ginnerup

FloatObject Enhancement

Description: Have getString return a float in a string that is not dependent on II_DECIMAL

Goal: TBD

Submitted By: Kim Ginnerup

Object Class Enhancement

Description: In general a toString type of function on the Object class would be a good thing to have, and would make it easier to make a persistence mechanism in OpenROAD

Goal: TBD

Submitted By: Kim Ginnerup

OptionField Button Enhancement

Description: You only have limited control on the visual aspects of an OptionField. I would like to add an attribute that controls the visibility of the OptionField dropdown button. It should be possible to make the button invisible. This way you have an excellent and simple way to show foreignkeys as readonly entryfield style fields. I suggest that we add a new attribute. "Buttonbehavior". The attribute can take the following values:

  • OB_ALLWAYS: (default) this is the same behavior as today
  • OB_FOCUS: The button becomes visible when the OptionField gains focus
  • OB_INVISIBLE: The button is invisible

The attribute should be available from the Property inspector and should be changeable at runtime

Goal: TBD

Submitted By: Kim Ginnerup

OptionField outline Enhancement

Description: You only have limited control on the visual aspects of an OptionField. I would like to enhance the outlineStyle so it works as expected. Today OS_SOLID has no or limited effect on the outline. An OpenROAD OptionField always has a 3D outline. OS SOLID should work the same way as it does for Entryfields. By implementing OS_SOLID for OptionFields we bring that fieldtype in line with EntryFields outline.

Goal: TBD

Submitted By: Kim Ginnerup

OptionField Button image

Description: You only have limited control on the visual aspects of an OptionField. The OptionField drop down button image is fixed size. I would like to add an attribute that controls the image of the button. This will make it possible to give the OptionField a more modern look and adds the ability to change the size of the image. Combining this with the OptionField outline Enhancement will make it possible to make more modern and Vista like OptionFields

Goal: TBD

Submitted By: Kim Ginnerup

Add a hook to allow Ctrl + a keyboard character to asynchronously trigger internal 3GL actions as well as 4GL activations

Description: Add the ability to trap keyboard input, such as CTRL+C, and trigger either a runtime related action ( such as breaking the 4GL interpreter out of an eternal loop ) or an application-specfic 4GL activation.

Comment: (Don Criley) A 3GL/4GL prototype is underway.

Goal: TBD

Submitted By: Don Criley


4GL Projects

Virtual Key Constants

Description: The OpenROAD Language Reference (Appendix D) lists a number of constants for Virtual Keys originally provided in Microsoft's WM_KEYDOWN documentation. These have never been implemented in OpenROAD proper so KeyPress events et al. have to resort to using magic numbers.

Comment: Reading materials on the subject includes WM_KEYDOWN documentation and the article VK_A is not always A.

Submitted By: Roy Deal Simon

Add the -l option to the DocumentApp and DestroyApp

Description: In OpenROAD 2006 there exists a -l option to the import and export feature which operates on a set of files. This project will apply this same functionality to the documentapp and destroyapp utilites.

Comment: This should be reasonably straightforward to implement as the code to accomplish this already exists in Workbench for the import and export feature.

Submitted By: Colin Hay


OpenROAD IDE Resizing

Description: OpenROAD 2006 Workbench is currently a fixed size window. This project implements resizing logic in the IDE to allow the top level frame to be resizable. Portlets contained by the top level frame will react proportionally to the resize action

Goal: TBD

Submitted By: Joseph Kronk


Find Component and Find Text

Description: Add a find component function to the IDE that will search across all applications in that database. Also, add a find text string function to find any text in any component for the currently connected database.

Comment: (Michael Singman-Aste) A prototype has already been written. It both searches for a component name across applications AND will find specified text across any component in the database. The problem with just using "like" is that text is broken up at the end of rows in ii_srcobj_encoded. The prototype concatenates the rows for a given entity and then performs the search.

Goal: TBD

Submitted By: Michael Singman-Aste for Adrian Williamson


Dynamic 'Call' Statements

Description: We can already perform the following in OpenROAD lv_framename = 'frFred'; callframe :lv_framename ( lv_message = 'hello', li_counter=1); The suggestion is that the entire callframe statement can be dynamically built e.g. lv_framename = 'frFred (' + lv_param_name1 + ' = ' + lv_param_value1 + ',' + lv_param_name2' + '=' + varchar(li_counter_value) + ')'; callframe :lv_framename;

Why: If you have a situation where it's not certain which option a user will choose, but when they do make that choice you want to invoke a call/goto/open frame statment. The frame identified to call has its parameter list held on the database or in a reference object somewhere. You can build the entire CallFrame statement dynamically and open the frame.

Comment: Without this type of facility some mechanisum is required to 'carry' the parameters across frames in a generic class e.g ParameterCarrier and then provide code into the initialise block of each frame to populate the real variables with the values passed across in the 'ParameterCarrier' class.

Goal: Working Prototype

Submitted By: Matt Rendell For Dave Clark

OpenROAD Performance Statistics

Description: SPOTRACE.LOG for 'normal' OpenROAD applications. The information that comes from application server in the SPOTRACE.LOG file is excellent and invaluable when you are trying to tune the application server. Can we have the same type of facility for 'normal' OpenROAD applications? The output will show how much time each Initialise, Procedure call (local and 4gl) and Method invocation takes to complete (from begin to end).

Comment: The information gained from this output would allow application teams to identify slow running areas of their application. As with OpenROAD discovery the information must be keyed on application name, component name, invocation type e.g. Callproc. Data from this process will be in a format that lends itself to being loaded into a database. Queries on the data can be performed and graphical output generated if necessary. Regular health checks on applications will avert performance degradation and perhaps outage.

Goal: Ambitious? Something to think about

Submitted By: Matt Rendell


OpenROAD Discovery

Description: If you have ever seen the discovery report generated by phase 1 of the Transforge process this is what this is all about but for OpenROAD and not ABF. A facility to output to CSV file(s) or XML file(s) key information about about the application content. The use of SQL (SELECT, UPDATE, DELETE broken down by column, from, where, order by etc), frame calls with parameters, procedure calls with parameters, method invocations with parameters, identify where userobjects are declared, comment blocks at the top of components. Each record must be keyed on application name, component name, event block type event block name.

Comment: This type of feedback would give you a true picture about how the OpenROAD application has been engineered. Especially helpful with legacy applications where the knowledge left the building many moons ago. I have listed just a few thoughts I had below. I'm not sure this is one for the code sprint, but it would be good to get some feedback on the idea.

  1. Comprehensive application documentation
  2. The ability to perform accurate impact analysis on your precious application before implementing a table changes or application changes.
  3. Understand the testing requirement as a result of a change, create comprehensive test plans.
  4. Identify how much component reuse is being employed across the application.
  5. New starters to your organisation will see a 'picture' about the applications structure
  6. Ability to identify a 'ROADMap' of the application e.g. this frame calls this frame
  7. Monitor the amount of SQL within the application
  8. Identify if SQL is being coded into frames or into UserObjects
  9. For the first time, truely understand the size of application you are maintaining
  10. Identify the different component types used to engineer the application e.g. 3GL, ActiveX
  11. The winner of the new competition 'Design a great OR GUI for all this information' gets a rare signed photo of Joe Kronk :)

Goal: Ambitious? Something to think about

Submitted By: Matt Rendell

Personal tools
© 2009 Ingres Corporation. All Rights Reserved