Permalink
Browse files

Replaced trunk with reorganized branch.

  • Loading branch information...
hanshuebner committed Feb 18, 2008
0 parents commit cd97dedcaef95557ef8d9cf8f99e3ffc5095a590
Showing with 14,080 additions and 0 deletions.
  1. +68 −0 doc/1_introduction.txt
  2. +97 −0 doc/2_guided_tour.txt
  3. +18 −0 doc/Makefile
  4. +48 −0 doc/README-orig
  5. +10 −0 doc/TODO
  6. BIN doc/applicationicon.png
  7. BIN doc/bknrlogo.png
  8. +1,016 −0 doc/datastore.tex
  9. BIN doc/datastoreicon.png
  10. BIN doc/eboyshot1.png
  11. +7 −0 doc/example.tex
  12. +213 −0 doc/guidedtour.tex
  13. BIN doc/guidedtouricon.png
  14. +633 −0 doc/impex.tex
  15. BIN doc/impexicon.png
  16. +730 −0 doc/indices.tex
  17. BIN doc/indicesicon.png
  18. +81 −0 doc/introduction.tex
  19. +54 −0 doc/manual.tex
  20. BIN doc/peecol.png
  21. BIN doc/peecol1.png
  22. BIN doc/peecol10.png
  23. BIN doc/peecol2.png
  24. BIN doc/peecol3.png
  25. BIN doc/peecol4.png
  26. BIN doc/peecol5.png
  27. BIN doc/peecol6.png
  28. BIN doc/peecol7.png
  29. BIN doc/peecol8.png
  30. BIN doc/peecol9.png
  31. BIN doc/satelliteicon.png
  32. +17 −0 doc/schleuder-artikel.txt
  33. +7 −0 doc/templates.tex
  34. BIN doc/templatesicon.png
  35. +6 −0 doc/web.tex
  36. +34 −0 experimental/dump-core.lisp
  37. +31 −0 experimental/fswrap/fsd.pl
  38. +143 −0 experimental/fswrap/fswrap.c
  39. +25 −0 experimental/fswrap/fswrap.lisp
  40. +97 −0 experimental/mop-bug.lisp
  41. +99 −0 experimental/slot-attributes.lisp
  42. +65 −0 experimental/xml-schema/examples/test-schema.xml
  43. +47 −0 experimental/xml-schema/examples/test-schema2.xml
  44. +197 −0 experimental/xml-schema/xml-schema.lisp
  45. +68 −0 patches/patch-around-mop-cmucl19.lisp
  46. +21 −0 src/bknr-data-impex.asd
  47. +29 −0 src/bknr-datastore.asd
  48. +33 −0 src/bknr-impex.asd
  49. +32 −0 src/bknr-indices.asd
  50. +18 −0 src/bknr-skip-list.asd
  51. +40 −0 src/bknr-utils.asd
  52. +21 −0 src/bknr-xml.asd
  53. +21 −0 src/data/TODO
  54. +15 −0 src/data/anon-circular-test.lisp
  55. +194 −0 src/data/blob.lisp
  56. +87 −0 src/data/convert.lisp
  57. +459 −0 src/data/encoding.lisp
  58. +84 −0 src/data/object-old.lisp
  59. +114 −0 src/data/object-tests.lisp
  60. +700 −0 src/data/object.lisp
  61. +108 −0 src/data/package.lisp
  62. +43 −0 src/data/tests.lisp
  63. +863 −0 src/data/tutorial.lisp
  64. +635 −0 src/data/txn.lisp
  65. +41 −0 src/data/xml-object.lisp
  66. +25 −0 src/data/xml-tutorial.lisp
  67. +5 −0 src/indices/TODO
  68. +202 −0 src/indices/category-index.lisp
  69. +453 −0 src/indices/indexed-class.lisp
  70. +462 −0 src/indices/indices-tests.lisp
  71. +496 −0 src/indices/indices.lisp
  72. +57 −0 src/indices/package.lisp
  73. +69 −0 src/indices/protocol.lisp
  74. +693 −0 src/indices/tutorial.lisp
  75. +23 −0 src/skip-list/package.lisp
  76. +72 −0 src/skip-list/skip-list-tests.lisp
  77. +334 −0 src/skip-list/skip-list.lisp
  78. +9 −0 src/statistics/package.lisp
  79. +39 −0 src/statistics/runtime-statistics.lisp
  80. +5 −0 src/utils/Makefile
  81. +50 −0 src/utils/acl-mp-compat.lisp
  82. +32 −0 src/utils/actor.lisp
  83. +8 −0 src/utils/capability.lisp
  84. +32 −0 src/utils/class.lisp
  85. +76 −0 src/utils/crypt-md5.lisp
  86. +719 −0 src/utils/date-calc.lisp
  87. +38 −0 src/utils/make-fdf-file.lisp
  88. +144 −0 src/utils/package.lisp
  89. +635 −0 src/utils/parse-time.lisp
  90. 0 src/utils/pathnames.lisp
  91. +113 −0 src/utils/reader.lisp
  92. +14 −0 src/utils/smbpasswd-wrapper.c
  93. +45 −0 src/utils/smbpasswd.lisp
  94. +545 −0 src/utils/utils.lisp
  95. 0 src/utils/xml.lisp
  96. +23 −0 src/xml-impex/package.lisp
  97. +7 −0 src/xml-impex/tutorial.dtd
  98. +579 −0 src/xml-impex/tutorial.lisp
  99. +10 −0 src/xml-impex/tutorial.xml
  100. +7 −0 src/xml-impex/tutorial2.dtd
  101. +5 −0 src/xml-impex/tutorial2.xml
  102. +4 −0 src/xml-impex/tutorial3.dtd
  103. +10 −0 src/xml-impex/tutorial3.xml
  104. +4 −0 src/xml-impex/tutorial4.dtd
  105. +8 −0 src/xml-impex/tutorial4.xml
  106. +7 −0 src/xml-impex/tutorial5.dtd
  107. +14 −0 src/xml-impex/tutorial5.xml
  108. +213 −0 src/xml-impex/xml-class.lisp
  109. +120 −0 src/xml-impex/xml-export.lisp
  110. +187 −0 src/xml-impex/xml-import.lisp
  111. +39 −0 src/xml-impex/xml-update.lisp
  112. +16 −0 src/xml/package.lisp
  113. +63 −0 src/xml/xml.lisp
@@ -0,0 +1,68 @@
+1. Introduction
+
+[ BKNR satelliten icon ]
+
+BKNR is a software launch platform for LISP satellites. You could
+replace "launch platform" with framework and "satellites" with
+"applications", but that would be too many buzzwords.
+
+BKNR is made of facilities that are not very useful on their own, but
+they can be used to quickly build shiny and elegant LISP
+satellites. For example, a very important component of BKNR is its
+datastore, which brings persistence to CLOS in a very simple way. By
+adding a few declarations to your class definitions, you can have
+persistent objects. You can also add XML import/export to your objects
+in a similar way. I think this is the single most attractive feature
+of BKNR: no more mapping from a relational database to LISP objects,
+no more XML parsing and XML generation, you just write plain
+application code.
+
+Another interesting feature of BKNR is its web framework, built on top
+of the Portable Allegroserve webserver. The web framework has a simple
+object-oriented handler hierarchy, with sessions, authorization and
+all the features you are used to from other frameworks. It also
+gathers usage information, stores it in the datastore, generates
+statistics, maps sessions to persistent users. Furthermore, a very
+useful feature is the HTML templater, which enables you to call LISP
+code from XML templates. The LISP template callbacks are simple LISP
+functions that can work on the XML DOM representation. This eases
+working with web developers, who can still use their standard editors
+to develop the layout of the webpage. Dynamic content is easy to
+integrate.
+
+[screenshot von einer bildergallery von eboy.com]
+
+The application which started BKNR was the website for the graphic
+designers eboy. A lot of work went into the manipulation of images and
+the integration of images into the LISP framework. So another big part
+of the BKNR web framework is the image manipulation code and the image
+layout code, based on the CL-GD library by Edi Weitz.
+
+We have started developing BKNR in March 2004, and it is used in 2 big
+web applications (the Eboy dynasite "eboy.com", and the BOS website
+"BOS creates rainforest"), and has been used to implement a few
+personal websites (the website for the hacker gathering GPN in 2004,
+which featured an interactive LISP music-dj, the temporary conference
+website for the European Lisp Workshop and the BKNR website). The code
+was opensourced right from the start, but we didn't put a lot of
+effort into making it accessible for other developers. This is the
+first try at releasing some kind of public version of the BKNR
+codebase, with (we hope) decent documentation.
+
+If you would like to look at some of the BKNR features in a little
+more detail, take the guided tour in Chapter 2. Chapters 3, 4, 5, 6
+then show how to use the different facilities in short tutorials,
+respectively object indices, the datastore, the web framework and the
+templater. These chapters are slightly modified versions of the
+tutorials that can be found in each of the facilities. Finally,
+Chapter 7 shows how to build a full web photo album application using
+BKNR.
+
+We would like to thank the eboys for their support while developing
+BKNR, their cool graphics and their enthusiasm :) We would also like
+to thank Edi Weitz for his impressive libraries, and his
+support. Also, I would like to thank Steffen Hurrle for his cool
+website designs (he also has a new design for the BKNR website, which
+sadly nobody has the time to update). The BKNR developers are Hans
+Huebner, David Lichteblau and Manuel Odendahl.
+
@@ -0,0 +1,97 @@
+2. Guided Tour of the BKNR Launch Platform
+
+[Icon mit Leine]
+
+Let's take a guided tour of the BKNR sourcecode. Most facilities are
+independent of each other, and can be used to build completely
+different types of applications. However, all use the common toolbox
+called `BKNR.UTILS', which contains a lot of small lisp
+functions. These functions are not very important, and we will leave
+them behind to get to the first important facility of the BKNR launch
+platform.
+
+
+The Datastore [container]
+
+The datastore is one of the oldest facilities in BKNR, its role is to
+store the application data, so that this data is persistent between
+LISP sessions. Most existing applications use a back-end
+database to store persistent objects, for example a relational
+database or an object-oriented database. Despite the immediate
+advantages of having an existing database (reliability, speed,
+management tools), this approach is quite cumbersome: every
+application data structure has to be mapped onto a data structure in
+the database. This is not trivial, as can be seen by the gazillions
+attempts to write automatic conversion tools. Another fundamental
+problem is the integration of the database into the language itself,
+and into the development workflow. Errors in the database are
+"external" to the LISP process, rollback, error-catching, transactions
+are not as easy to write as they would be by having an "internal"
+database. In the end, we believe that the advantages of having an
+external database are outweighed by the disadvantages.
+
+With the decreasing hardware costs nowadays, it is quite feasible for
+most applications to keep their entire dataset in memory, and indeed
+this is the approach taken by the BKNR datastore. Even with a growing
+data set, memory costs decrease faster than the data grows, so that
+evolution is not a problem. This approach is known as "prevalence",
+and the BKNR datastore was initially based on the prevalence solution
+by Sven Van Caekenberghe (also see
+`http://homepage.mac.com/svc/prevalence/readme.html'). The key points
+of the prevalence model are that:
+
+ - All data is held in RAM
+
+ - Changes to persistent data are written to a transaction log
+ file. When loading the datastore, the transaction log is read, and
+ all changes are applied to the persistent data. All changes ever
+ made to the persistent data are executed in order, and the data is
+ recovered.
+
+ - If the data model supports it, the persistent data state can be
+ captured and written to a file, which is called a "snapshot
+ file". The snapshot file is read when loading the datastore, and
+ the snapshotted data is used as a "starting point" for the
+ transaction log.
+
+In the datastore, transactions which are logged to the transaction log
+are LISP functions defined using the `DEFTRANSACTION' form. Thus, all
+transactions transforming persistent data are made explicit in the
+source code. This if different from object-oriented databases, where
+the fundamental transactions are object creation, object deletion and
+slot access, which are not special cases in the prevalence model at
+all. The main problem with this approach is that it is possible to
+modify the persistent data in a way that is not logged into the
+transaction log, which leads to lost data after reloading the
+database. However, the BKNR datastore has a lot of development and
+debugging helps, warning the user when he is making dangerous changes
+(or forbidding them alltogether).
+
+The datastore has gone through a few development iterations, which are
+actually quite interesting to explain, as they show which compromises
+have been made, and how the datastore can be tweaked. After having
+used the prevalence solution of Sven van Caekenberghe and deciding
+that it didn't quite fit our needs, we wrote a simple datastore
+closely modelled on Sven's approach. However, the datastore featured
+helpers to create and modify indexed CLOS objects. Also, the
+transaction log consisted of SEXPs, and the loading of the transaction
+log consisted of using the `LOAD' LISP function. The main part of the
+object datastore consisted of a really big `DEFINE-PERSISTENT-CLASS'
+macro, which generated a `DEFCLASS', and overrided a lot of methods
+making up a store generic method protocol. Special slot options could
+be used to tell the store to index objects. For example, you could
+specify that the slot `NAME' of the class `USER' was stored in an
+index called `USER-NAME-INDEX'. The persistent objects could be
+snapshotted and written to a snapshot file, which again was a LISP
+file.
+
+
+The XML Import/Export
+
+The Webhandlers
+
+The Templater
+
+eboy.com
+
+
@@ -0,0 +1,18 @@
+all: manual.pdf
+
+manual.pdf: manual.tex introduction.tex guidedtour.tex indices2.tex datastore2.tex impex2.tex
+ pdflatex manual && pdflatex manual
+ cp manual.pdf /home/manuel/public_html/
+
+indices2.tex: ../src/indices/tutorial.lisp
+ /usr/local/bin/pbook.py -c BknrTexFile -t "BKNR Indices" -o indices2.tex ../src/indices/tutorial.lisp
+
+datastore2.tex: ../src/data/tutorial.lisp
+ /usr/local/bin/pbook.py -c BknrTexFile -t "BKNR Datastore" -o datastore2.tex ../src/data/tutorial.lisp
+
+impex2.tex: ../src/xml-impex/tutorial.lisp
+ /usr/local/bin/pbook.py -c BknrTexFile -t "BKNR XML Import/Export" -o impex2.tex ../src/xml-impex/tutorial.lisp
+
+clean:
+ - rm -rf manual.pdf impex2.tex datastore2.tex indices2.tex
+
@@ -0,0 +1,48 @@
+BKNR CODENAME: SPUTNIK
+
+Hans Huebner, David Lichteblau, Manuel Odendahl
+
+1. Introduction
+
+BKNR is a software launch platform for LISP satellites. You could
+replace ``launch platform'' with framework and ``satellites'' with
+``applications'', but that would be too many buzzwords.
+
+BKNR is made of facilities that are not very useful on their own, but
+they can be used to quickly build shiny and elegant LISP
+satellites. For example, a very important component of BKNR is its
+datastore, which brings persistence to CLOS in a very simple way. By
+adding a few declarations to your class definitions, you can have
+persistent objects. You can also add XML import/export to your objects
+in a similar way. I think this is the single most attractive feature
+of BKNR: no more mapping from a relational database to LISP objects,
+no more XML parsing and XML generation, you just write plain
+application code.
+
+2. Installation
+
+BKNR has been developed with CMUCL 19a under FreeBSD, and has been
+tested with Allegro Common Lisp 6.2 under Windows and Freebsd. Install
+the BKNR sourcecode and the thirdparty sourcecode.
+
+Then configure the pathnames in bknr/init.lisp, and load
+bknr/init.lisp. Afterwards, you can use ASDF to load the BKNR
+facilities.
+
+To load the BKNR indices facility:
+(asdf:oos 'asdf:load-op :bknr-indices)
+
+To load the BKNR datastore facility:
+(asdf:oos 'asdf:load-op :bknr-indices)
+
+To load the BKNR impex facility:
+(asdf:oos 'asdf:load-op :bknr-indices)
+
+To load the BKNR framework:
+(asdf:oos 'asdf:load-op :bknr)
+
+3. Further documentation
+
+You can read the BKNR manual in bknr/doc/ . You can also browse the
+sourcecode for the tutorials in bknr/src/indices/tutorial.lisp,
+bknr/src/data/tutorial.lisp and bknr/src/xml-impex/tutorial.lisp.
@@ -0,0 +1,10 @@
+BKNR Manual:
+ Frontseite : Dickes BKNR logo
+
+ 1. Introduction
+ 2. Guided tour
+ 3. BKNR Indices
+ 4. BKNR Datastore
+ 5. BKNR Web Framework
+ 6. BKNR Templates
+ 7. BKNR Example (photo album)
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.

0 comments on commit cd97ded

Please sign in to comment.