User:Tangentstorm
I am a regular in the #fpc IRC Channel and an enthusiastic supporter of free pascal.
One day, after about 12 years of doing mostly python work, I found myself looking over my ancient TP5.5 code and thought it might be fun to get it working again. I was pleasantly surprised by how far pascal's come over the years, and have found myself reaching for FPC as my default tool.
I think Lazarus is pretty darn slick, but I grew up with text screens and keyboards, and still tend to find myself shelled into my FreeBSD box, editing my pascal code with emacs, and often using org-mode and babel for literate programming.
Most of my pascal code is available for free on github:
libraries
- tangentstorm/xpl contains many general purpose units. A few interesting ones:
- sqlite3ext.pp extends the standard sqlite3 package to allow extending sqlite with custom functions or virtual tables written in pascal. (demo/sqlrange.pas hos an example)
- ubp.pas implements a b+ tree ([ bpdemo])
- unda.pas provides n-dimensional arrays
- kvm.pas (literate version) and kbd.pas together implement a terminal library similar to the old
crt
unit, but with support for widechars and 256-color displays. - arrays.pas (literate version) contains some generic array-like classes and interfaces).
- cw is a rather cryptic mini-language for generating colored text output (ported from turbo pascal when I was in high school, so kind of messy)
- There's also a console-based unit testing framework that I use on almost all of my projects.
- lined.pas is my port of a simple line editor called LineNoise (like gnu readline, but tiny).
- The /code/ui directory has a bunch of other console widgets (but based on my old turbo pascal code, and not fully modernized/debugged yet)]
- tangentstorm/py4d is my fork of Python4Delphi. I'm still learning about everything it can do, but the repo includes a python wrapper for the kvm unit mentioned above.
example code
- tangentstorm/zworld is a small sketch of a lazarus project. I had bigger plans for it, but right now it just uses BGRABitmap to draw a huge number of little sprites. I only link to it here because it might be of interest to someone wanting to use Lazarus for non-traditional graphic stuff (games, animation, etc as opposed to traditional GUI apps).
- tangentstorm/tangentlabs/pascal contains a whole bunch of small pascal examples and experiments. Some especially fun ones (which may or may not require fpc 2.7.1 from the svn trunk):
- GoGoSDL.pas is a basic demo of using SDL (1.x) from fpc, intended as a template for quickly creating SDL apps.
- zenglagg.pas shows how to use AggPas to dynamically create smooth vector images for use as sprites in ZenGL.
- arrayprops.pas shows how to override the bracket operator so you can say things like
grid[5,3];
or evendict['strings as keys'];
. - xpathdemo.pas shows how to use xpath.
- dispatch.pas is a hopefully entertaining look at various approaches to dynamic dispatch/multimethods. (Short answer: dynamic dispatch semantics are possible in fpc, but require complicated setup or creative use of exceptions.)
- hofmap.pas shows how to implement higher order functions as class methods in a generic class. (Probably requires trunk.)
- funops demonstrates another style of higher order function based on function composition. In particular, it shows how to implement J-style hooks and forks.
- jcolor.pas and [1] implement a hand-written syntax highlighter for java.
- helpers.pas demonstrates how to use helpers, by adding some python-style methods to pascal strings.
- goldsmile/zgld25 was a start on a game that I put together in a few hours after giving up on a different game entry for ludum dare 25.
- lazmvc is an example GUI program I made in Lazarus that illustrates the Observer pattern. (It's a small custom implementation that doesn't take advantage of the standard fpObserver unit, but maybe someone out there will find it enlightening.)
- I've collected all my ancient Turbo Pascal code in tangentstorm/silverware.
educational stuff
- sabren/b4 contains a bunch of experiments related to a programming course I hope to present to the world some day. Of particular interest is the /ng directory, which contains a complete implementation of the ngaro virtual machine from retroforth, including implementations of the text/graphics console using SDL and ZenGL.
- minrel is a start on a minimal relational database, written as a literate program. Eventually I hope to guide readers step by step through building this system, but right now there are only 3 lessons. Much of what I eventually want to write about is already working in minneron (below) using SQLite for the database.
- I also have some programming videos online at user/tangentstorm on youtube. Sadly, there's not anything pascal related right now, except for a little turbo pascal experiment I made from scratch in a few hours, showing off various console-mode micro-processes and widgets. (The code also works under fpc and you can see it at sabren/b4/turbo)
minneron
minneron/minneron contains my main project, a novel computing environment that combines a hypertext editor, graph database, and scripting engine. It's nowhere near ready for public consumption, but there's plenty of neat stuff already working.