Ceramic – Turn Lisp web applications into desktop apps
ceramic.github.io
ceramic.github.io
I used to make standalone apps from SBCL Common Lisp, and they were not too large (even though SBCL has no tree shaker unused code remover).
Rob
We've had a string of really cool lisp projects this year, web frameworks, implementations, web servers, libraries, etc. Couple that with Edi Weitz's upcoming book, it's as exiting to be a lisper now as ever. Hack gloriously and eat your parenthesis for breakfast my lispy friends :)
Mark's book can be found used for $3.00 on Amazon.
Edi's upcoming book on Amazon is listed as $56, due December 2015. I will probably buy a copy when it ships.
EDIT: I just pre ordered a copy on Amazon to lock in that price.
I did a benchmark of executable image sizes and startup times for the popular open-source implementations[1] it depends on cl-launch since asdf:program-op was still experimental at the time.
A few points I discovered:
SBCL and CCL are neck-on-neck for startup time; very slightly longer than a hello-world in python, but much faster than any python script that has to do any significant importing.
SBCL has by far the largest image size overhead ~80MB for "hello world". It has an option to compress the image with zlib, but that is a big impact on image startup time. I did a proof of concept of an lz4hc image compressor, and it made for acceptable startup times while taking the overhead down to under 30MB. Someone else turned this into a real patch, and it is waiting to be merged.
CCL's image size is about 1/2 that of sbcl.
ECL has, by far, the smallest image size, even including the DLL (3.2MB for a lisp runtime is tiny!). However, it has a startup time that is two orders of magnitude higher than sbcl/ccl
clisp was ind the middle of things; executable image was about double that of ecl, it's startup performance is better.
Barring that, most GUI executables are fairly insensitive to startup time, so SBCL core compression would the lisp image down by a factor of 4:1.
Lastly, you can always just not worry about it:
du -s /Applications/*.app | sh ~/avg.sh
Total: 28529040; Count: 126; Mean: 226420; Median: 56752; Min: 8; Max: 6132408
1: Note that SBCL generates the best code of any Free lisp implementation, and makes it the easiest to tune your code for better performance. As disk space is cheap, it's what I use for most of my applications.https://www.reddit.com/r/Common_Lisp/comments/3d3oqh/ceramic...
The gist is: for the Javascript parts on your site, any plans to integrate Parenscript for the full Lisp experience?
Thanks for your work. I saw again it was posted before today on /r/lisp and /r/programming, but I missed it.
The only JavaScript is in the Electron process, and it's fixed, ie you don't have to touch it. You interact with it through CLOS methods on window objects.
Other than that any JavaScript is optional, you write it yourself (using whatever source language, e.g. ParenScript) and ship it with your app as a resource.
GP was to the point, but not mean and added something to the discussion (even if you disagree with it). You, however, were rude.
If the situation hasn't gotten better since then, well... what are people waiting for?
Also https://github.com/robert-strandh/McCLIM looks maintained but if it's anything like what it was a couple of years when I last looked at it, it could use some contributors :)
There are also at least 3 GTK+ bindings that I've seen around.
http://cliki.net/GUI lists 31 GUI libraries. We have enough for every day of the month :)
There are GUI libraries for Common Lisp. CommonQt+qtools is essentially the gold standard, and everyone seeking to make a GUI application should use it.
I like the web, it lets me design applications with a precision native GUI tools don't have. And you can make an app that runs on the localhost and you can access through the browser: I do this for some applications I've written.
The problem is distribution: most users won't really know what's going on when they run an executable and it opens a terminal window and a browser window to some weird URL called 'localhost:41000'.
So I wrote this.
http://www.lispworks.com/documentation/lw70/CAPI-M/html/capi...
Good work =]! I also really need to look more into Electron. I've only used node-webkit (before it was NW.js).
Ceramic opens an HTTP server (in lisp), starts electron (using a shell command), communicates to the electron process via streaming, then electron sends back HTTP requests to the lisp process.
However this is tied to Common Lisp because the containing project itself is built in Common Lisp and can't be switched out without completely rebuilding in another language.
I guess I'm not alone in thinking so: https://github.com/facebook/react-native/issues/247
I think the wells fargo banking app on the phone is not native. The At&t one doesn't feel like it. Usually there's something different about the controls and interactions that make it not feel native. Sometimes there's a dead giveaway like being able to double tap and accidentally zoom in just like in mobile Safari.
And the spacebar will 80% of the time page down rather than pause the music, something which sounds minor but which makes the user experience 50% more annoying for me. Do most people even use spacebar to page down in normal webpages!?
It wouldn't be so sad if it wasn't so noticeable.
.net uses the native win32 gui toolkit - but you typically build it WPF, which is XML, styled with XML.
On mac? plists - which is you guess it XML (I have no idea what, if anything, you style a mac app with).
So basically the three biggest platforms use XML to bind their guis with - and there isn't much difference between XML and HTML. Granted when you design XML for guis it tends to be nicer than if you wrangle HTML into that role but this is a programmer, not a user, issue.
Saying "HTML is nearly XML, therefore HTML is native" is akin to saying "Vietnamese is written using the Latin alphabet, hence it's basically the same as English".
You are confusing what HTML and XML are if you think they are similar. XML is a way to encode data, validate it conforms to a schema, query it, etc. HTML is more than the surface syntax. It includes an schema and semantics (the DOM, the CSS OM, the boxing model, etc). Using XML as a declarative layer on top of their UI, as android does, does not make it similar to writing HTML because of the completely different semantics associated with it.
Android takes all the xml layouts and compile them and expose them through the R(esource) class.
So it's native at least along those lines.