Developer’s Journal
This is an unstructured journal regarding the development of AFC. I use it to keep track of ideas, goals and discussion notes. Note that the former name of AFC was SEJ (Spreadsheet Engine for Java).
Check the release notes for what’s already been done.
November 2007
Nov 06
Refactoring the Reference Tests – Goals: ...more
October 2007
Oct 16
Typing, Rewrites, and Transforms – Currently, AFC transforms the computation model constructed from the spreadsheet as follows: ...more
August 2007
Aug 17
SUM
and DSUM
, etc. – The definition of the plain and the database aggregators should really be the same. What I need is a fold/reduce operation that applies equally to plain and database aggregations. ...more
Aug 08
Implementation of LOOKUP
, MATCH
, and INDEX
– The LOOKUP
function, and its foundations MATCH
and INDEX
, are likely to be heavily used in Abacus’ financial applications. So they must be implemented efficiently both space- and runtime-wise. ...more
May 2007
May 25
Scale vs. Precision with BigDecimal Engines – AFC currently uses a fixed scale for BigDecimal computations. For anything more complicated than basic addition, subtraction and multiplication, a minimum precision seems more desirable. Problem is, Abacus uses fixed scales internally, too. What do we do? ...more
May 16
Who Parses Function Names? – We have been running against a table size limit in CUP. So I replaced CUP by JavaCC. With great results so far. ...more
April 2007
Apr 24
Modules and IDEs – I have implemented the internal modularization as described earlier on. However, I have not split the project up into modules. Here’s why. ...more
January 2007
Jan 22
Modularization – SEJ is quite nicely modularized in theory. In practice, though, there are a number of problems in the current project setup. ...more
December 2006
Dec 29
Decompiling Generated Engines – The design document makes “trustworthiness” a major goal of SEJ. It suggests that SEJ should, in parallel to the default byte-code generator, include a source-code generator. This would allow users to inspect the code SEJ generates for their spreadsheets. Maybe the JODE Java decompiler can get us this feature for free. ...more
Dec 18
Vector Operators – I just discovered that Excel supports vector operators. Both combinations of vectors and scalars are supported, as well as combination of vectors with vectors (which are pairwise operations returning another vector). ...more
Dec 15
Ranges Overlapping Section Bounds – I have started to implement support for DFOLD()
over dynamic sections in the data. For this to work reasonably, I have to first support range references that overlap section bounds. This is because DSUM()
et al. only take a single range reference in their arguments. ...more
Dec 14
XmlProc – I have had an idea for a very convincing demo application for SEJ (I think). It is a batch processor that transforms XML data using a spreadsheet-defined computation. See here. ...more
Dec 14
Dynamic Sections and External Data – I recently discovered a little feature in Excel that might point the way to an explicit representation of dynamic sections. When importing external data, you can set the flags “Fill down formulas in columns adjacent to data” and “Insert entire rows for new data”. Imported XML data is even better. ...more
Dec 05
Database Functions – I have started implementing the database functions like DSUM()
. Here I intend to sketch out the cases SEJ is going to support, and how. ...more
November 2006
Nov 29
Array Functions – I am implementing IRR( values [, guess] )
and similar functions to see what new expression language and/or template function constructs are needed to support this kind of function. IRR is a function that takes a range of values in its first argument, has a second, optional argument, and is, internally, an iterative solver. This poses a number of new (or not so new) problems. ...more
Nov 22
Robust Engine Storage – I have decided that SEJ’s current engine storage format (a .jar file) is robust enough to let SEJ evolve while maintaining compatibility with existing engines. Contrary to my earlier thoughts, I also don’t think SEJ should store a description of the engine in the .jar for helping with problem diagnosis. Here are my reasons. ...more
Nov 17
Repeating Sections and Caching – Right now, SEJ mandates caching for engines with repeating sections. This is because, internally, SEJ constructs an array of section element engines for every element in a repeating section when the section is first accessed. This is a cache, and so SEJ mandates Resettable
on your output interface. ...more
Nov 16
Common Sub-Expressions In Large Sheets – The following sheet, while grossly oversimplified, seems to be a very typical sheet for the insurance models used by insurance companies (a relative of mine is a mathematician at one of them). The typical things are the large table and its inhomogeneity (in practice, the tables are much larger than the one here). This is not a simple repeating section with a perfectly homogeneous structure. ...more
October 2006
Oct 03
Generating Compilers – I have started to write the hacking docs. As usual, having to explain things made me realize how important it is to make them as simple as possible. Right now, when you add a new function to SEJ, you have to ...more
Older Entries
...can be found here.