el

Yarnold secures skeleton bronze

Great Britain's Elizabeth Yarnold wins a bronze medal at the women's skeleton World Championship.




el

BORROWED TIME release and launch photo report!

As of November 10, 2015, BORROWED TIME (the sequel to CHRONAL ENGINE) is now available in bookstores everywhere as well as online (in hardcover and ebook)!  Signed copies are available from BookPeople.

In an article titled, 'Borrowed Time' mixes paleontology and fantasy, Saturday's Austin American-Statesman had a great review of BORROWED TIME, stating it's "a slam-dunk for dinosaur aficionados and will appeal as well to those who are fans of literary time travel and outdoorsy adventure."

Sunday was the launch party at BookPeople! I had great fun doing a presentation discussing the connections between the book, Charles Umlauf, dinosaurs, Johnny Weissmuller, and me (really).

The dinosaur standees for the photo booth were a hit, as were the refreshments including water, soft drinks, wine and cheese, and crackers. (The wine, from the Languedoc region of France, is made from grapes grown in Cretaceous clays where dinosaur fossils have have been found).

But the real eye-opener was the mosasaur cake by author/cakelustrator Akiko White. About two feet high, it featured a mosasaur sculpted from modeler's chocolate on a chocolate cake base with buttercream frosting! She'll be doing a youtube video on the making of it soon (and I'll link when it's available).  Suffice to say that still pictures don't do it justice -- it was mounted on a motorized turntable and illuminated with a blue strobe that made it look like it was underwater!

Here are the pics:

Me and cake

Carmen Oliver and T.rex
Akiko assembles! (photo courtesy Akiko White)
Presenting (photo courtesy Akiko White)
Cake!
Refreshments
Signing
Frances Hill and Lindsey Lane (photo courtesy of Shelley Ann Jackson)
Shelley Ann Jackson and Lindsey Lane (photo courtesy Shelley Ann Jackson)
 Many thanks to BookPeople for hosting the event, to everyone who came for the event, and to everyone who helped out: Akiko, for making the awesome cake; Cynthia Leitich Smith; Carmen Oliver; Lindsey Lane; Shelley Ann Jackson; and Cory Putnam Oakes!

Cake topper in its natural habitat






el

2018 Releases by Austin Authors and Illustrators

It's the eve of the Texas Book Festival so make sure you check out the festivities on the Capitol grounds! And here's a tentative list of projects from Austin authors and illustrators releasing next year! For previous years, go here.

Picture Books, Easy Readers, and Board Books

WHAT DO YOU DO WITH A VOICE LIKE THAT? by Chris Barton, ill. by Ekua Holmes (Simon & Schuster/Beach Lane 2018).

MIGHTY TRUCK: ON THE FARM, by Chris Barton, ill. by Troy Cummings (HarperCollins, May 2018).

MIGHTY TRUCK: THE TRAFFIC TIE-UP, by Chris Barton, ill. by Troy Cummings (HarperCollins, May 2018).

PENGUIN AND TINY SHRIMP DON'T DO BEDTIME, by Cate Berry, ill. by Charles Santoso (Balzer + Bray/HarperCollins 2018).

ABRAHAM LINCOLN'S DUELING WORDS, by Donna Janell Bowman, ill. by S.D. Schindler (Peachtree, 2018)

THE BOOK THAT JAKE BORROWED, by Susan Kralovansky (Pelican 2018).

COUNTING COLORS IN TEXAS, by Susan Kralovansky (Pelican 2018).

KATE, WHO TAMED THE WIND, by Liz Garton Scanlon, ill. by Lee White (Schwartz & Wade, Spring 2018).

FRANCES IN THE COUNTRY, by Liz Garton Scanlon, ill. by Sean Qualls (Neal Porter Books/Roaring Brook Press, Summer 2018).

DEAR SUBSTITUTE, by Liz Garton Scanlon, ill. by Chris Raschka (Disney-Hyperion, Summer 2018).

STALEBREAD CHARLIE AND THE RAZZY, DAZZY SPASM BAND,  by Michael Mahin, ill. by Don Tate (Houghton Mifflin Harcourt, 2018).

PAR-TAY: DANCE OF THE VEGGIES (AND THEIR FRIENDS), by Eloise Greenfield, ill. by Don Tate (Alazar Press 2018).

POTATO KING: THE STORY OF JUNIUS G. GROVES, by Don Tate (Knopf 2018).
 

Middle Grade

THE BOY, THE BOAT, AND THE BEAST, by Samantha Clark (Paula Wiseman Books/Simon & Schuster, Summer 2018).

KNOCKOUT, by K.A. Holt (Chronicle, Spring 2018).

DEAR ME (tent. title), by K.A. Holt (Scholastic, Summer 2018).

THE PARKER INHERITANCE, by Varian Johnson (Scholastic, Spring 2018).

THE CAMELOT CODE: THE ONCE AND FUTURE GEEK, by Mari Mancusi (Disney-Hyperion, Oct. 2018).

GIRLS WHO CODE: LIGHTS, MUSIC, CODE, by Jo Whittemore (Penguin Workshop, Spring 2018).

REVENGE OF THE TEACHER'S PETS, by Jennifer Ziegler (Scholastic, June 2018).

Young Adult

HEARTS UNBROKEN, by Cynthia Leitich Smith (Candlewick Press, 2018).

AVENGED, by Amy Tintera (HarperTeen, May 2018).




el

How EELS could change the future of robotic exploration

The snake-like robot is being designed to autonomously navigate the challenging terrain of Saturn’s moon Enceladus, including descending into fissures in the moon’s icy crust. The skills it needs in order to explore this distant, unfamiliar world may make EELS well equipped to explore even more alien worlds, perhaps including exoplanets.




el

The Tianlin Space Telescope

China is in the early stages of planning a huge space observatory to help answer the matter of whether we are alone in the galaxy.




el

Space in the 2024 elections

An overview of what U.S. space policy might look like under a Trump or a Harris administration.




el

Barbour Nimbus Wellington Boots




el

2026 Cadillac Vistiq Electric SUV



  • SUVs & Trucks

el

Manscaped The Chairman Pro Electric Shaver




el

Christmas jewelry in progress.

Sneak peek — Christmas jewelry in progress.




el

Dwarf King in the shield wall

A Dwarf king and his elite guard take to the field.

 Amongst the Eagle helms of the shield wall is the kings champion himself. Nothing must get to the king and the champions blue axe, will see that nothing does.

I could use this base for King Balin when he tries to retake Moria. A future project of mine.
The King points out floors in the enemies formation to the chief engineer.
The Dragon standard flies over head echoing the Kings mighty dragon helm.
This base has been created for the upcoming Hobbit battle, replacing Dain's base in the ranks. This allows Dain to roam freely as a character on the field.

 The figures are beautiful old sculpts from Asgard and Citadel. There has been a bit of tweaking on a couple of them, like the axe and the standard.



  • lord Of The Rings
  • lord Of The Rings.

el

Fomorian Shields from Hobbycraft

yesterday I popped to Hobbycraft to see if they had any pieces I could use for the new Midgard rules. I couldn't find any goblets but I did track down the beads needed for heroic deeds.

While I was travelling through the bead tray, I saw one that I thought would make a great Celtic shield.

It has a nice wrap around curve to it but more importantly, sports a nice Celtic swirly pattern.

Ancient Irish warriors fight with the sea devils.
It has a good level of detail to make it look well crafted and ornate. Once I sculpt a boss for the centre I think it will look just the ticket. Nice deep grooves that will catch ink and weathering very well. The swirl too is a very Celtic looking design.

 This tub was £4 which is unbelievable for an armies worth of shields. I might end up using these beads as heroic deeds markers too as they won't roll unlike the rounder ones.

You can get a next size up in container to fill with your beads for £8, again for hundreds of shields this isn't bad. The small tub should be enough though.




el

vindarel: Running my 4th Common Lisp script in production© - you can do it too

Last week I finished a new service written in Common Lisp. It now runs in production© every mornings, and it expands the set of services I offer to clients.

It’s the 4th service of this kind that I developed: - they are not big - but have to be done nonetheless, and the quicker the better (they each amount to 1k to 2k lines of Lisp code), - they are not part of a super advanced domain that requires Common Lisp superpowers - I am the one who benefits from CL during development, - I could have written them in Python - and conversely nothing prevented me from writing them in Common Lisp.

So here lies the goal of this post: illustrate that you don’t need to need a super difficult problem to use Common Lisp. This has been asked many times, directly to me or on social media :)

At the same time, I want to encourage you to write a little something about how you use Common Lisp in the real world. Sharing creates emulation. Do it! If you don’t have a blog you can simply write in a new GitHub repository or in a Gist and come share on /r/lisp. We don’t care. Thanks <3

We’ll briefly see what my scripts do, what libraries I use, how I deploy them, what I did along the way.

Needless to say that I dogfooded my CIEL (beta) meta-library and scripting tool for all those projects.

Table of Contents

Scripts n°4 and 2 - shaping and sending data - when you can write Lisp on the side

My latest script needs to read data from a DB, format what’s necessary according to specifications, and send the result by SFTP.

In this case I read a DB that I own, created by a software that I develop and host. So I could have developed this script in the software itself, right? I could have, but I would have been tied to the main project’s versioning scheme, quirks, and deployment. I rather had to write this script on the side. And since it can be done on the side, it can be done in Common Lisp.

I have to extract products and their data (price, VAT...), aggregate the numbers for each day, write this to a file, according to a specification.

To read the DB, I used cl-dbi. I didn’t format the SQL with SxQL this time like in my web apps (where I use the Mito light ORM), but I wrote SQL directly. I’m spoiled by the Django ORM (which has its idiosyncrasies and shortcomings), so I double checked the different kinds of JOINs and all went well.

I had to group rows by some properties, so it was a great time to use serapeum:assort. I left you an example here: https://dev.to/vindarel/common-lisps-group-by-is-serapeumassort-32ma

Dates have to be handled in different formats. I used local-time of course, and I still greatly appreciate its lispy formatter syntax:

(defun date-yymmddhhnnss (&optional date stream)
  (local-time:format-timestring stream
                                (or date (local-time:now))
                                :format
                                '((:year 4)
                                  (:month 2)
                                  (:day 2)
                                  (:hour 2)
                                  (:min 2)
                                  (:sec 2)
                                  )))

the 2 in (:month 2) is to ensure the month is written with 2 digits.

Once the file is written, I have to send it to a SFTP server, with the client’s codes.

I wrote a profile class to encapsulate the client’s data as well as some functions to read the credentials from either environment variables, the file system, or a lisp variable. I had a top-level profile object for ease of testing, but I made sure that my functions formatting or sending data required a profile parameter.

(defun send-stock (profile &key date) ...)
(defun write-stock (profile filename) ...)

Still nothing surprising, but it’s tempting to only use global parameters for a one-off script. Except the program grows and you pay the mess later.

SFTP

To send the result through SFTP, I had to make a choice. The SFTP command line doesn’t make it possible to give a password as argument (or via an environment variable, etc). So I use lftp (in Debian repositories) that allows to do that. In the end, we format a command like this:

lftp sftp://user:****@host  -e "CD I/; put local-file.name; bye"

You can format the command string and run it with uiop:run-program: no problem, but I took the opportunity to release another utility:

First, you create a profile object. This one-liner reads the credentials from a lispy file:

(defvar profile (make-profile-from-plist (uiop:read-file-form "CREDS.lisp-expr"))

then you define the commands you’ll want to run:

(defvar command (put :cd "I/" :local-filename "data.csv"))
;; #<PUT cd: "I/", filename: "data.csv" {1007153883}>

and finally you call the run method on a profile and a command. Tada.

Deploying

Build a binary the classic way (it’s all on the Cookbook), send it to your server, run it.

(during a testing phase I have deployed “as a script”, from sources, which is a bit quicker to pull changes and try again on the server)

Set up a CRON job.

No Python virtual env to activate in the CRON environment...

Add command line arguments the easy way or with the library of your choice (I like Clingon).

Script n°2 and simple FTP

My script #2 at the time was similar and simpler. I extract the same products but only take their quantities, and I assemble lines like

EXTRACTION STOCK DU 11/04/2008
....978202019116600010000001387
....978270730656200040000000991

For this service, we have to send the file to a simple FTP server.

We have a pure Lisp library for FTP (and not SFTP) which works very well, cl-ftp.

It’s a typical example of an old library that didn’t receive any update in years and so that looks abandoned, that has seldom documentation but whose usage is easy to infer, and that does its job as requested.

For example we do this to send a file:

(ftp:with-ftp-connection (conn :hostname hostname
                                   :username username
                                   :password password
                                   :passive-ftp-p t)
      (ftp:store-file conn local-filename filename))

I left you notes about cl-ftp and my SFTP wrapper here:

Scripts n°3 and n°1 - specialized web apps

A recent web app that I’m testing with a couple clients extends an existing stock management system.

This one also was done in order to avoid a Python monolith. I still needed additions in the Python main software, but this little app can be independent and grow on its own. The app maintains its state and communicates it with a REST API.

 

It gives a web interface to their clients (so my clients’ clients, but not all of them, only the institutional) so that they can:

  • search for products
  • add them in shopping carts
  • validate the cart, which sends the data to the main software and notifies the owner, who will work on them.

The peculiarities of this app are that:

  • there is no user login, we use unique URLs with UUIDs in the form: http://command.client.com/admin-E9DFOO82-R2D2-007/list?id=1
  • I need a bit of file persistence but I didn’t want the rigidity of a database so I am using the clache library. Here also, not a great activity, but it works©. I persist lists and hash-tables. Now that the needs grow and the original scope doesn’t cut it any more, I wonder how long I’ll survive without a DB. Only for its short SQL queries VS lisp code to filter data.

I deploy a self-contained binary: code + html templates in the same binary (+ the implementation, the web server, the debugger...), with Systemd.

I wrote more on how to ship a standalone binary with templates and static assets with Djula templates here:

I can connect to the running app with a Swank server to check and set parameters, which is super helpful and harmless.

It is possible to reload the whole app from within itself and I did it with no hiccups for a couple years, but it isn’t necessary the most reliable, easiest to set up and fastest method. You can do it, but nobody forces you to do this because you are running CL in production. You can use the industry’s boring and best practices too. Common Lisp doesn’t inforce a “big ball of mud” approach. Develop locally, use Git, use a CI, deploy a binary...

Every thing that I learned I documented it along the way in the Cookbook ;)

Another app that I’ll mention but about which I also wrote earlier is my first web app. This one is open-source. It still runs :)

 

In this project I had my friend and colleague contribute five lines of Lisp code to add a theme switcher in the backend that would help him do the frontend. He had never written a line of Lisp before. Of course, he did so by looking at my existing code to learn the existing functions at hand, and he could do it because the project was easy to install and run.

(defun get-template(template &optional (theme *theme*))
  "Loads template from the base templates directory or from the given theme templates directory if it exists."
  (if (and (str:non-blank-string-p theme)
           (probe-file (asdf:system-relative-pathname "abstock" (str:concat "src/templates/themes/" theme "/" template))))
      ;; then
      (str:concat "themes/" theme "/" template)
      ;; else :D
      template))

He had to annotate the if branches :] This passed the code review.

Lasting words

The 5th script/app is already on the way, and the next ones are awaiting that I open their .docx specification files. This one was a bit harder but the Lisp side was done sucessfully with the efficient collaboration of another freelance lisper (Kevin to not name him).

All those tasks (read a DB, transform data...) are very mundane.

They are everywhere. They don’t always need supercharged web framework or integrations.

You have plenty of opportunities to make yourself a favor, and use Common Lisp in the wild. Not counting the super-advanced domains where Lisp excels at ;)


Links

I have done some preliminary Common Lisp exploration prior to this course but had a lot of questions regarding practical use and development workflows. This course was amazing for this! I learned a lot of useful techniques for actually writing the code in Emacs, as well as conversational explanations of concepts that had previously confused me in text-heavy resources. Please keep up the good work and continue with this line of topics, it is well worth the price! [Preston, October of 2024]







el

borned in the hellscape

Today on Married To The Sea: borned in the hellscape


This RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see!




el

help operator

Today on Married To The Sea: help operator


This RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see!




el

tried to deliver

Today on Married To The Sea: tried to deliver


This RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see!




el

traveling across the ocean

Today on Married To The Sea: traveling across the ocean


This RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see!




el

welcome to the magical lair

Today on Married To The Sea: welcome to the magical lair


This RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see!


























el

Meet BRAD (Berkeley's Ridiculously Automated Dorm Room)

Party the absolute hardest you can imaginably party!




el

It Only Has Some of The Bells and Whistles

Along with the pink helmet and white basket, the bike gang had serious questions about granting him membership.

~NSHA





el

Wheelchair, The Early Days

It's a great budget option, unless you're leaking for comfort. Or functionality.

~NSHA




el

Protecting Itself From The Impending Cactus Attack

He'll just wait this one out. Cacti can't survive without water, right? ~NSHA




el

McDonnell ends his Armagh career

Armagh football suffers another blow as Steven McDonnell announces his retirement from the intercounty game.




el

Tropicana Field can be fixed by 2026, but Rays must play elsewhere in 2025

A detailed assessment of the hurricane damage to Tropicana Field concludes that the home of the Rays is structurally sound and can be repaired in time for the 2026 season, but not by 2025 Opening Day.