Book mini-review: "Children of Ruin"

Children of Ruin is the second book in Adrian Tchaikovsky's Children of Time series. It follows another branch of the terraforming project that began in the first book. Interesting read with non-human intelligences which feels relevant because of all the recent AI buzz and the apparent imminence of…

Building a Membrane Pipeline to talk to Google Gemini

This post was also published in the Software Mansion blog. Large Language Models like Google’s Gemini 2.0 Flash and OpenAI’s GPT-4o Realtime are multimodal, meaning users can chat with them via text, talk to them directly like in a conversation, or even send a live video feed.…

Assorted links(January 2025)

Speed matters: Why working quickly is more important than it seems « the jsomers.net blogJames Somers, July 26, 2015REVIEW: Reentry, by Eric BergerReentry: SpaceX, Elon Musk, and the Reusable Rockets that Launched a Second Space Age, Eric Berger (BenBella Books, 2024).Mr. and Mrs. Psmith’s BookshelfJohn PsmithSchool is Not…

TIL: Avoid modifying headers with Dart HTTP package

I'm using the http package to make a POST request to OpenAI, and the API seems to only strictly accept application/sdp as the Content-Type: flutter: Response body: {"error":{"message":"Unsupported content type. This API method only accepts 'application/sdp' requests,…

Book review: The MANIAC by Benjamín Labatut

Historical fiction about von Neumann and AI. This felt different than other historical novels I've read because as far as I could tell, there was no fictional plotlines introduced to the history. The fictional bit is just the first-person narratives from people around von Neumann that never actually…

Gemini file upload in Elixir

If you want to send videos or images to the Google Gemini API, eg for video summarization, you need to upload the video to a separate endpoint and wait for it to get processed. This is described in the Gemini docs, and it's fairly straightforward to translate into…

Implementing distributed pooling in Elixir

In Elixir, once you have clustering set up, it's ridiculously easy to run some code on another node in your cluster: Node.spawn(:"another_beam_instance@10.0.1.2", fn -> # This runs on a different node send(self(), node()) end) receive do response…