Saya menerapkan aplikasi komersial berpemilik di Common Lisp yang disebut Tankan yang berjalan pada Microsoft Windows sebagai executable asli.
Ini adalah program untuk melatih diri Anda untuk menghafal karakter kanji Jepang.
Program ini berjalan sebagai server HTTP latar belakang. Eksekusi server ini dan menavigasi ke halamannya, dikoordinasikan oleh aplikasi ikon area notifikasi sistem kecil (alias "Baki") yang saya kembangkan menggunakan Visual C ++.
Aplikasi ikon baki kecil ini memulai, memantau dan menghentikan server berbasis Lisp, dan berkomunikasi dengannya menggunakan pipa Win32 yang terikat pada input dan output standarnya. Melalui pipa, server Lisp menginformasikan aplikasi ikon baki dari URL yang tepat dengan nomor port yang tepat, dan aplikasi ikon baki itu dapat meluncurkan browser melalui API Shell untuk menelusuri URL itu. Pengguna hanya mengklik dua kali pada ikon untuk membuka UI.
Program Lisp mempertahankan dalam memorinya keadaan sesi yang cukup kompleks yang berisi riwayat masukan pengguna dan berbagai hubungan di antara berbagai objek. Notasi objek melingkar Lisp (diaktifkan oleh *print-circle*
variabel) dan cara kerjanya di custom CLOSprint-object
metode adalah bantuan luar biasa dalam menerapkan kegigihan: pengguna dapat menyimpan status ke disk dan melanjutkan di mana mereka tinggalkan. Semuanya disimpan, termasuk keadaan UI. Ada banyak substruktur bersama dalam grafik objek, serta siklus. Plus, banyak cruft statis yang tidak harus bertahan, seperti konten objek entri kamus. Dengan metode ANSI Common Lisp custom print object, Anda dapat membuat representasi tercetak kental untuk objek yang dapat dibaca dengan mesin,
Hampir tidak ada JavaScript yang digunakan di UI web. Bahkan kontrol untuk menyembunyikan dan menampilkan bagian-bagian UI dilakukan dengan mengirimkan formulir dan merender ulang HTML. Setiap detail dari keadaan UI karenanya di server dan bertahan saat pengguna menyimpan. Pembuatan ulang HTML sangat cepat. Ini dilakukan oleh ekspresi backquote Lisp raksasa yang memberi makan makro penghasil HTML. Kode yang dikompilasi oleh Clozure Common Lisp (CCL) membuat ini terjadi begitu cepat sehingga Anda hampir tidak menyadari bahwa ketika Anda mengklik tombol [+] pada UI untuk membuka sesuatu, Anda mengirimkan permintaan ke server yang membuat ulang seluruh halaman darn, dan tidak hanya menjalankan beberapa JavaScript lokal untuk mengubah visibilitas elemen dokumen lokal.
Program ini awalnya dikembangkan dengan CLISP. Berkat ANSI CL menjadi bahasa standar, dengan implementasi yang sesuai dengan baik dan tidak terlalu banyak jebakan licik dalam bahasa (perilaku "tidak terdefinisi" atau "ditentukan-implementasi") dengan mudah dipindahkan ke CCL.
CLISP belum ditinggalkan; masih digunakan untuk menyalakan ujung belakang lisensi, menggunakan banyak basis kode umum yang sama.
Saya mengembangkan sistem lisensi asli untuk program, menggunakan cryptto curve eliptik yang disediakan oleh perpustakaan IronClad, yang digunakan oleh server lisensi untuk menandatangani lisensi untuk mengesahkannya. (Sepertinya saya ingat saya mungkin telah menggunakan program command line OpenSSL untuk menghasilkan parameter EC untuk kunci server.)
Lisensi direpresentasikan sebagai objek Lisp. Ini adalah penghargaan untuk portabilitas Lisp yang program Windows yang disusun oleh Clozure Common Lisp dapat menghasilkan lisensi berbasis ekspresi-S, program CLISP yang berjalan pada server Debian dapat mengisi bidang tanda tangan digital yang hilang di objek itu, dan mengirimkannya kembali ke program Windows yang dapat memvalidasi tanda tangan.
Di server, selain layanan lisensi berbasis CGI, saya menggunakan API baris perintah sederhana untuk mengelola lisensi. Anda dapat membuat daftar lisensi, menemukan yang spesifik, dan mengedit atributnya: seperti misalnya mengedit tanggal kedaluwarsa lisensi sementara untuk memberikan pengecualian kepada pengguna. Back-end lisensi juga menghasilkan email. Saya tidak menggunakan pustaka untuk penanganan CGI di sisi server: hanya linting kode tangan untuk berurusan dengan variabel lingkungan Apache dan argumen baris perintah. (Meskipun kode perpustakaan digunakan untuk menangani penyandian URL dan pembuatan HTML.) Tidak ada database yang digunakan untuk penyimpanan; lisensi dipatenkan menjadi file yang dipanggil licenses.lisp
dan hanya itu.