Neil Hopcroft

A digital misfit

Pattern reconstruction

After something of a hiatus here, I’m going to make a bit of a transition. My time has now become significantly limited, so I can no longer maintain the Octave build system I was working on – it has been archived and I may resurrect it at some point in the future, but for now I cannot give the attention it deserves, better to not try than to do half a job.

Moving forward, I want to develop my ability to write. To this end I want to pick up a pattern from software engineering and apply it to human language. The pattern is this: buy a software design patterns book and implement them one by one as you read about them. You can see this pattern in many code bases as you move around the industry.

This pattern can be applied to human language. It seems to me that language patterns, or figures of speech, can be practised without the kind of maintenance overhead required by long lived software projects.

I never had any formal training in rhetoric, although I attended a grammar school, it was a grammar school in name only and still behaved like the technical high school it was until my arrival. The classics would have bored me at the time, so even if that had been available it would not have been of interest.


Adding project of-sparsersb

The sparsersb package has no dependencies on other octave packages but does have a build dependency upon librsb. It contains a src/ directory which has an autogen.sh script.
Its build fails:

In file included from sparsersb.cc:77:0:
/usr/local/include/octave-4.1.0+/octave/../octave/oct-alloc.h:30:34: error: expected unqualified-id before numeric constant
#define DECLARE_OCTAVE_ALLOCATOR 1
^
sparsersb.cc:1242:3: note: in expansion of macro ‘DECLARE_OCTAVE_ALLOCATOR’
DECLARE_OCTAVE_ALLOCATOR
^

…earlier in the log is a warning “the octave_allocator class has been deprecated and will be removed in a future release of Octave”.
Looking at this a bit more, I found a bit of discussion on the mailing list which suggests that the custom allocator was removed because it added complexity without giving the speed improvement it was hoped for. It also says that the allocator declaration and definition can be removed from Octave Forge packages at any time.
Removing the allocator declaration allows the build to continue but the installation fails with

/usr/share/tomcat7/octave/sparsersb-1.0.0/x86_64-unknown-linux-gnu-api-v50+/sparsersb.oct: failed to load: /usr/share/tomcat7/octave/sparsersb-1.0.0/x86_64-unknown-linux-gnu-api-v50+/sparsersb.oct: undefined symbol: _ZNK17octave_base_value11all_stringsEb
error: unhandled execution exception — eval failed

The missing symbol demangles to octave_base_value::all_strings(bool) const
This error has resolved itself, which I don’t really understand but it could be something to do with the allocator change.
Fixed in build #18.


Adding project of-secs

This project consists of three packages, secs1d, secs2d and secs3d. secs1d depends upon bim, secs2d has no dependencies and secs3d depends upon bim and fpl. Each of the packages has its own subdirectory.
secs1d and secs3d have no src/ directory and can both be installed directly.
secs2d has a src/ directory containing a makefile.
The build fails during the make stage of secs2d:

Uscharfettergummel.cc:39:30: error: ‘Octave_map’ does not name a type
int Uscharfettergummel(const Octave_map &mesh,
^

This happens because Octave_map was renamed octave_map in version 4.0.0, renaming all instances in the source files should allow the compilation to complete.
Fixed in build #16.