Commit 61921454 authored by Erik Huelsmann's avatar Erik Huelsmann

Merge remote-tracking branch 'clo/master'

parents 27203dad 0326aef1
......@@ -14,7 +14,7 @@
:serial t
:depends-on (package)
:components ((:file "patches")
(:file "globals")
(:file "globals")
(:file "helpers")
(:file "process")
(:file "main")))
title: Frequently asked questions
# FAQ - Frequently asked questions
# FAQ - Common-Lisp.Net Frequently asked questions
{table-of-contents :depth 3 :start 2 :label "Table of contents" }
......@@ -18,4 +18,4 @@ please follow the steps outlined in
Use GitLab Pages to deploy your project pages
to `<project>/`
using our [deployment instructions](/faq/using-gitlab-deploy-pages).
using our [deployment instructions](/faq/using-gitlab-deploy-project-pages).
title: Usinng GitLab to deploy project pages -- FAQ
title: Using GitLab to deploy project pages -- FAQ
{table-of-contents :depth 2 :start 2 :label "Table of contents" }
......@@ -51,7 +51,7 @@ depends-on:
modification and debugging of running applications (excellent
for server-side development and long-running critical
software). It is a multi-paradigm programming language that
allows you to to choose the approach and paradigm according to
allows you to choose the approach and paradigm according to
your application domain.</p>
<!-- <p><a href="/features" class="emphasize"> Read more about <b>Common Lisp</b> features here.</a></p> -->
......@@ -141,12 +141,12 @@ title: Companies using Lisp
- 3D CAD modeler for “explicit modeling”. Sindelfingen, Germany. 1M+ lines of Lisp, previously part of HP, paper on[ Common Lisp as an Embedded Extension Language]( Recent blog post about [CL use](
- [Cognesys]( &#9746;
- “automatic ascertainment and further processing of verbal and text messages” (Natural Language Processing). Ubach-Palenburg, Germany. Looking for experienced and fresh Lisp programmers
- [M-creations](
- custom software solutions for mid-size to big companies in
finance/payment, health care, and media research. Missing pieces of
infrastructure are written in Common Lisp (CL) and interact with
existing software components of the cluster (DNS, load balancer
etc.) ([lispjobs announce](
- [m-creations](
- Custom software solutions for mid-size to big companies in
finance/payment, health care, and media. Using Common Lisp in
different fields ranging from dynamic web applications and natural
language processing to systems engineering infrastructure in
container clusters (DNS, dynamic load balancer)
- [stk-hamburg](
- developing an ERP in Lisp ([ECL 2018 lightning talk](
......@@ -13,6 +13,47 @@ Further statement being worked on.
Erik Huelsmann admin
### 2019-02-09 *Foundation to host ASDF fundraiser!
The [Common Lisp Foundation]( hosts an
[appreciation fundraiser]( for the [ASDF project](,
with up to $5,000 __donation doubler__.
An appreciation fundraiser serves as a 'thank you' to those who have invested
their (free) time in the project. It isn't intended as a 'bounty' for new
### 2018-11-18
There was a short period of down time today in order to support an
off-line reorganization of our file systems required to simplify and
strengthen our backups and system maintenance tasks.
### 2018-11-09
Our GitLab instance now has a more open account policy: users with a
social login will be able to create an account without approval by
an admin.
In order to support this openness, a more strict login policy has
been put into place, requiring all users to log in using 2FA.
For those users who don't have a smartphone to install a 2FA
app on, [here's a c|net article how to do
2FA anyway](
### 2018-11-03
There's now infrastructure available to projects to [deploy their project pages
through GitLab](
This infrastructure is now being used to [migrate those project pages
to GitLab Pages
for which there are no OS-level users anymore to update them.
### 2018-10-26
......@@ -44,7 +85,6 @@ system. After further cleaning, the updated list consists of these 23 projects:
* umpa-lumpa
### 2018-10-12 *Intent to remove unused projects*
As per [the announcement](,
......@@ -89,7 +89,7 @@
(flet ((call-next-hook (content context)
(funcall (pop ,next-hooks-sym) content context ,next-hooks-sym)))
(push (function ,name) *render-hooks*))))
(pushnew ',name *render-hooks*))))
(defun render-page-with-hooks (content context)
(let ((hooks (reverse (cons #'(lambda (p c next-processors)
......@@ -6,6 +6,32 @@ body{
#header {
display: flex;
flex-direction: column;
#message-box {
width: 100%;
padding: 8px;
background-color: #ba1e0d;
color: white;
display: none;
flex-direction: row;
#message-box-close {
align-self: center;
#message-hidden-btn {
align-self: flex-end;
display: none;
color: #ba1e0d;
font-weight: bold;
padding-top: 10px;
padding-right: 10px;
#message-box-text {
flex-grow: 1;
.main {
padding-top: 20px;
font-size: 0.9rem;
......@@ -22,7 +48,6 @@ body{
.cl-navbar {
border-width: 0px;
box-shadow: 0px 1px 10px lightgrey;
font-weight: bold;
padding-top: 0;
padding-bottom: 0;
$(document).ready(function () {
$("").click(function (event) {
var nextMenu = $(this).next(".menu");
$('').click(function (event) {
var nextMenu = $(this).next('.menu');
......@@ -13,4 +13,64 @@ $(document).ready(function () {
var $quote = $($quotes[Math.floor(Math.random() * $quotes.length)]);
/* Announcement box */
let announcementUrl = "";
let closeMessageBoxBtn = $('#message-box-close');
let openMessasgeBoxBtn = $('#message-hidden-btn');
let messageBox = $('#message-box');
let messageText = $('#message-box-text');
let initialBodyPadding = $('body').outerHeight() - $('body').height();
function calculateNewPadding(isMessageShowing) {
let messageHeight = $('#message-box').outerHeight();
return isMessageShowing ? initialBodyPadding + messageHeight : initialBodyPadding;
function closeMessageBox() {
messageBox.css('display', 'none');
openMessasgeBoxBtn.css('display', 'block');
localStorage.setItem('was_message_closed', true);
$('body').css('padding-top', calculateNewPadding(false));
function openMessageBox() {
messageBox.css('display', 'flex');
openMessasgeBoxBtn.css('display', 'none');
$('body').css('padding-top', calculateNewPadding(true));
} (event) {
}); (event) {
url: announcementUrl,
success: function (resp) {
if (resp == null || resp.length < 1) { return; }
let previousMessage = localStorage.getItem('previous_message');
if (previousMessage == null || previousMessage !== resp) {
localStorage.setItem('previous_message', resp);
let wasMessageClosed = localStorage.getItem('was_message_closed');
if (wasMessageClosed) {
} else {
This diff is collapsed.
......@@ -51,23 +51,18 @@
(let* ((md-file (enough-namestring (make-path *pages-dir* context t) *pages-dir*)))
(unless (string= (pathname-type md-file) "md")
(return-from preprocess-md-page (call-next-hook content context)))
(let ((html-file (make-pathname :defaults md-file :type "html")))
(format t "Transforming ~A to ~A~%" md-file html-file)
(let ((md-content (with-output-to-string
(cl-markdown:markdown content :stream out))))
(call-next-hook md-content context)))))
(let ((md-content (with-output-to-string
(cl-markdown:markdown content :stream out))))
(call-next-hook md-content context))))
(def-render-hook preprocess-lisp-page (content context)
(let* ((lisp-file (make-path *pages-dir* context t)))
(unless (string= (pathname-type lisp-file) "lisp")
(return-from preprocess-lisp-page (call-next-hook content context)))
(let ((html-file (enough-namestring (make-pathname :defaults lisp-file :type "html") *pages-dir*))
(format t "Loading ~a and creating fresh ~a...~%"
(file-namestring lisp-file) html-file)
;;;###TODO not happy about loading the lisp file; it defeats the preprocessor/postprocessor purpose
(load (merge-pathnames lisp-file *pages-dir*))
(let (*computed-page-content*)
(with-input-from-string (s content)
(load s))
(let ((headers (getf *computed-page-content* :headers)))
(call-next-hook (getf *computed-page-content* :html-string)
(append (mapcan #'(lambda (key value)
......@@ -82,15 +77,7 @@
;; Process news
(defparameter +edit-news-link+ "")
;; FLAG -- If news.html is converted to news.lisp (a la about.lisp)
;; then the following only will have to deal with generating the
;; newsbox. The news.lisp would have to include the hardcoded HTML
;; which is injected below as well.
(def-render-hook generate-news (content context)
(let ((page-path (cdr (assoc :content context)))
(content (call-next-hook content context)))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment