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
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:
Lisp C 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);#'process-content-length
and#'set-content-length
.
JavaScript
- JavaScript reference
- Versions
1.6 and
1.8
added Lisp favorites
map()
andreduce()
, 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
- Part 1: Speed page load time by reducing
GET
s - Part 2: research on caching showing 50% of Yahoo Unique Users are not caching, and 20% of all Yahoo page views are uncached
- Part 1: Speed page load time by reducing
- 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 asynchronousGET
s 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