Links to other sites
Lisp: the programmable programming language

Advanced Web Application Development

These are advanced topics regarding use of Lisp for Web application development. The focus is on high performance with high availability.

If you're just starting or without a mentor to help answer questions, consider first starting with more introductory material.

Here's an excellent essay: why functional programs are inherently more secure. It eloquently covers the reality of avoiding bugs without the usual hype, urban legends or myths. It offers practical advice and explanations while also providing a bit of history and even social context.

Lisp systems

Begin with the Lisp Survey by Daniel Weinreb

SBCL
Clozure (formerly "OpenMCL")
LispWorks
AllegroCL

More Lisp Books -- advanced topics

Let Over Lambda (LOL)
solid, contemporary tutorial on advanced Lisp topics such as deep macros
Paradigms of AI Programming: Case Studies in Common Lisp (PAIP)
This provides both ANSI and pre-ANSI code explanations. Includes topics such as advanced parsing with Lisp and constructing your own programming languages on top of Lisp beyond just "domain specific languages." Then go deeper into artificial intelligence with Norvig's other well known book, AI: A Modern Approach (AIMA).

Text Mining

What Is Text Mining?
What some of the potential applications and limitations are.
A Closer Look At Characters in Common Lisp

In-Memory Databases

An in-memory database may be free from relational tables or SQL syntax. Without such overhead, you should see huge perormance increases.

Issues include: saving objects and loading them back later; safeguard against crashes; too much data to keep in memory at once; portable data; etc.

Start with an introduction to object prevelance then discover basics of Persistence in Common Lisp.

BKNR
BKNR is a set of Common Lisp libraries which together form an environment suitable for serving HTTP clients from a persistent Lisp system and includes an in-memory db which is a fairly mature fork of Sven's Prevalence
Common Lisp Prevalence
by Sven Van Caekenberghe.
Bit twiddling in ANSI Common Lisp
Whether you're packing/unpacking C data structures or building your own custom network protocols, most programmers don't realize how nice Lisp is for manipulating bits. The idea is that you have an arbitrary set of bytes from which you access in chunks of arbitrary bit lengths. Compare Lisp versus C manipulating 5 bits from a sequence with 7 or more bytes:
LispC
Extract (setf bits
      (ldb (byte 5 7) value))
bits =
  (word>>7)&0x1F;
Modify (setf new-value
      (dpb bits (byte 5 7) value))
new_value =
  (value&(~(0x1F<<7)))|((bits&0x1F)<<7);
See mod_remoteApp (think: highly tuned mod_lisp) for an example-- particularly the quad byte integer conversions in #'process-content-length and #'set-content-length.

JavaScript

JavaScript reference
Versions 1.6 and 1.8 added Lisp favorites map() and reduce(), respectively.
JavaScript Best Practices
introduction to JavaScript closures
Compress JavaScript using the JavaScript Minifier

JavaScript Libraries

Yahoo! Developer Network
UserScripts
Externally rewritten JavaScript for various sites using greasemonkey
AJAX Edit In Place (EIP) With Prototype
HTTP Caching & Cache-Busting for Content Publishers
includes mod_images_never_expire and other tricks

User Interfaces for Web Applications

Voice as User Interface using W3C's VoiceXML
From the book, Software Engineering for Internet Applications (SEIA)
Create a GUI with XHTML, CSS and JavaScript: Yahoo! User Interface Library
and read their blog for more tips and examples

Browsers

How to debug JavaScript in Safari
There's a magic menu that must be enabled: defaults write com.apple.Safari IncludeDebugMenu 1

Web Site Optimization

Google code: speed
Let's make the web faster
Web Site Optimization
Free tools and a book to help analyze page load performance and other web site factors within your control
14 Tips to Speed Up Your Web Pages
Loading JavaScript files in parallel
Other techniques for loading in parallel
Use of defer within <script ...> element:
Details are actually in the HTML4 spec, yet this is carried over into XHTML1. Because it's not mentioned explicitly in the XHTML spec, it's often overlooked.
Usage: <script src="foo.js" type="text/javascript" defer="defer"></script>
On JavaScript sequential loading
Yahoo! performance research
HTTP Content-Negotiation
All file extensions in HREFs and URLs should be dropped (i.e., no more .html, .php, .cgi, etc.) in favor of content-negotiation. File extensions in URLs are so 1997...
Optimizing Page Load Time

Web dev & debug tools

Load Time Analyzer by Google
Firefox plug-in that graphs page loading time of all components
Tamper Data
Plug-in for Firefox/Mozilla. Few features, but nice waterfall charts.
Firebug
Plug-in for Firefox/Mozilla. Beta but has some features equivalent to Fiddler.
HTTP Pipelining
Except Opera, browsers are only pipelining in multiple connections, one GET a time. The HTTP 1.1 standard of multiple asynchronous GETs in a single connection is really not supported widely (end of 2006).
ClusterMaps and gVisit
Visually track visitors to your website on a map

Miscellaneous

Xach's goodies for web designers - visual things
his back-end apps are written in Lisp, of course
widgipedia
Need Hosting? dedicated server thread on WebHosting talk
I must mention the Tech Co-op for hosting Lisp apps!
Web Science, anyone?
what's next for Sir Tim Berners-Lee, et al

Content on this page last updated 2009-12-06

Site maintained by Daniel Pezely every now and then