esrh.me https://esrh.me Sat, 15 Nov 2025 00:00:00 UT Overdue life update (2025 recap) https://esrh.me/posts/2025-11-15-year-recap.html
Posted: 2025 / 11 / 15

1 Intro

With 2025 coming to a close, I thought I’d write up a sort of free-form summary. These kinds of things are of course mostly for the author’s own self satisfaction, but I also do genuinely want to stay connected to everyone interested in this site (and me), whether we’re close or have never met at all. If you talk to me regularly in person, then there are some things you’ve inevitably heard from me; so I want to pick and choose a few of them and keep everyone else updated too.

2 Master’s degree, moving back to japan

2.1 Moving back to japan

2.1.1 Cycling

As many everyone who knows me in person is aware by know, I got into road cycling this year. In 2025 I cycled a bit over 3000km on my bike, with really only one long distance trip on the Shimanami Kaidou and the rest just around Tokyo and Yokohama. I bought my bike off ジモティー, a second-hand sales website, late last year:

It cost me about $350 as pictured, which was probably too high with all things said, but I immediately fell in love with the look of the frame. It’s a 2008 Lemond Poprad CX bike with fairly beaten up parts. I knew pretty much nothing about road bikes when I bought it – I literally didn’t know how to shift up on the Shimano brifters when I first got on. If I did, I would’ve noticed that the front shifter was completely busted. Over the course of the next half year or so I taught myself to service every part of my bike. Some new Microshift shifters, all-new cabling and housing, new linear pull brakes to replace cantilevers, new Campagnolo/Fulcrum wheels, new tires, all-ultegra drivetrain (including the chain!) later, it looks something like this:

I feel like bicycles are simultaneously magical and intricate but also surprisingly foolproof and operationally obvious. I find this balance of simplicity and technology extremely elegant, which is also why I personally couldn’t imagine using the new wave of electronic shifters & derailleurs, or power meters, or hydraulic brakes. Not that I could afford any of them anyway. Not too long ago I used to be a huge fan of trains and loved taking them whenever I go anywhere, but these days I have to come up with places to go just so I can hop on the bike. City cycling, for all its risks and inefficiencies, is so thrilling and liberating.

I happen to live quite close to the city, so areas like Shibuya, Shinjuku, and Akihabara are all within around 10-15 km away. One of my favorite pastimes is to bike over, eat some good food and watch the people and cars for hours at a time. While the city is nice, another area I love to cycle to is the series of artificial islands on the south-east coast: Shinagawa/Oi wharfs, the south edge of Haneda airport, all the Kawasaki industrial islands, and Daikoku. I am generally fascinated by the logistics that make possible the modern lifestyle we take for granted – trains, airplanes, ships, but also radio networks and manufacturing. I’ve collected a kind of amusing set of photos from cycling through these areas which for the most part are only conveniently accessible by car, and I plan to put them up on my site somewhere. I also have quite a bit of cycling footage from a action cameras, but editing them turned out to be way, way more effort than I thought it would be. I should probably give up on Kdenlive (I won’t).

One special cycling trip was in March of this year, during which I cycled the Shimanami Kaidou, a road connecting Onomichi in Hiroshima with Imabari in Ehime. Most of the route has excellent bike infrastructure is quite famously the ultimate cycling destination in Japan. The views really didn’t disappoint, I posted a couple photos but something went horribly wrong with the color grading during development and I didn’t want to fix it in post. I travelled with some very interesting people (mostly from the Dice ctf team and Zellic) who were in Japan for SECCON. I made some awesome lasting friendships (everyone comes back to Japan eventually) and it was all-around a really great time.

2.1.2 School life

I’ve finished a bit over half of my Master’s course at Science Tokyo now, and I’d like to write a bit about how it’s been.

From an educational standpoint, I find it difficult to recommend coming here. The courses I’ve taken os far are in general exceedingly superficial, easy, and exclusively busy work. I assume this is unique to my department (Information & Communications (ICT)), but there’s a distinct culture of prioritizing research. To be honest though, I like it much better this way. I have nothing but positive things to say about my supervisor and lab. I’ve been given all the resources I could ask for and more, both in lifestyle and technological terms. I’ll discuss the details of the my research work in a different section.

The campus and my office though, are really awesome. In the spring, the pathway to the main building is flanked by cherry blossom trees:

And in the fall, the main road is covered in yellow gingko leaves (let’s not talk about the rotting fruit):

(My office is just off to the right).

One very funny course I took this year was “Getting familiar with the Science Tokyo campuses” about each of the campuses of the (newly merged) university and their surrounding areas. Each class took place in a different campus and included a tour of the clock tower of the main building. This class was really amusing; I wrote my final paper as a ranking/review of ramen shops near the main (Ookayama) campus (my top ranking was なるめん, I’d recommend visiting if you get the chance, but you have to monitor the owner’s X to figure out when it’s open).

For the most part, school was fun this year. There’s a fairly large population of foreign students from many countries, both exchange and regular students. I live in a mostly international university dorm, so I’m definitely interacting with more cultures than I ever have before.

  1. TraP

    I’m a member of only one club, the traP “digital creation circle”, a unified CS and digital art organization (which is also by far the biggest club on campus). Trap has a bunch of sub-clubs, like for game dev, ctf, and competitive programming. Most of my (japanese) friends are also in/from trap, and I keep up with them through an internal discord-like chat app called traQ. The club has a lot of culture and creative soul, and produces a suprising amount of output in the form of code, games and miscellaneous projects. The only issue is that it’s essentially 100% japanese, and definitely leans more undergraduate in composition.

    I had the chance to compete in the ICPC Japan competition this year with some foreign students from traP (@malfisto (my friend Bohdan), and @Eraxyso). I’m completely washed at competitive programming now (not that I was ever really good), so I kinda just tagged along for moral support. Out of 355 teams, yamatonadeshiko placed 20th in the country, but we still didn’t qualify for the Yokohama regional since we only placed 7th in the school. Science Tokyo was so strong this year that all 4 teams that qualified full solved. It kinda inspired me to start practicing again, and I’ve been working through the Japanese CP book 「競技プログラミングの鉄則」on Bohdan’s recommendation.

2.2 Research

While being a regular student, I’m also employed as a research assistant in our lab. So, I’ve naturally been somewhat focused on research this past year.

The project I worked on for most of 2025 (which is now winding down) is latentcsi, a method to generate images from Wifi CSI (a record of the effects of the physical channel on signals transmitted at various frequencies). To summarize the method, it adapts a traditional Stable Diffusion type image to image process by replacing the image-to-latent encoder with a different csi-to-latent neural net that’s trained to imitate the output of the original model with a different input modality. This constituted one half of the work; the other half implements this idea in real life, with distributed sensor nodes, a training server, and clients. It turns out that using a neural network to predict small latents instead of large images means you can train it fast enough to show interestingly generalized results in a few minutes and use it for nearly real-time inference. The paper contains more details, but I’d instead suggest browsing the slides for a more concise summary.

To my great shock and horror, this paper got sort of popular on a few websites, typically with people not really understanding the limits of the work. Generalized learning off of raw CSI is very difficult, and this isn’t a problem we claim to solve. Instead, we try to find a really lightweight solution that can be trained so fast that you can learn new scenarios in a practical way. A short while after we put out the arxiv paper, several companies contacted our lab interested in the work, including worryingly some consumer technology companies. I can say with some confidence that the industry is actively and eagerly interested in abusing CSI sensing in quite concerning and directly consumer impacting ways. This is real and might very well be coming soon. Send me an email if you’re interested in discussing more about this topic. Sometimes it’s quite easy to forget, when you’re working on an academic project, that what you do does impact the real world and can very well hurt people. It’s seems quite clear to me that pursuing this direction of research is somewhat morally compromised.

…anyway, I had the opportunity to do some (sponsored) travelling over the past months to attend a few conferences. Travelogue follows:

2.2.1 Conferences

  1. MIRU @ Kyoto

    The first conference I attend this year was MIRU in Kyoto, the largest domestic computer vision conference in Japan. This conference is huge: there were at least a few thousand attendees, mostly composed of students with an unexpectedly large cohort of undergrads. As I understand, many undergrads present their senior-year thesis here.

    Kyoto is of course only a short Shinkansen trip away from home, and a city I’ve visited many times before. The highlight of the trip travel wise was definitely the venue, the Kyoto International Conference Center. This building is extraordinarily striking:

    It’s designed in such a way that there are very few vertical lines at all, and no vertical supporting columns. The famous Kyoto Protocol was signed in the same main hall, and was a lot of fun to explore and photograph.

  2. Mobicom @ Hong Kong

    In November, I visited Hong Kong for Mobicom 2025. Hong Kong was a destination I’d wanted to visit for a long time, so I was very excited. I stayed in the Kerry Hotel near Whampoa, which had excellent food and a really spectacular view of the Hong Kong island skyline:

    Carlsberg at the conference reception

    I presented a demo of our real-time implementation of LatentCSI. I met some very interesting people, students and professors alike. The final day of the conference was held at the Hong Kong University of Science and Technology (HKUST), a beautiful campus and environment. The symposium presentations (which I managed to attend) were very interesting.

    This was my first time in officially-PRC territory, so I tried to make the most of the trip. The very same day I landed I’d already hit most of the big tourist spots, like the Avenue of Stars and the Peak. After that, I kind of just wandered around Tsim Sha Tsui and Central either trying to find famous restaurants or movie spots (my favorite of which was the Central-Midlevels escalator from Chungking express). I’m a big fan of Hong Kong cinema, especially Wong Kar-wai and the classic Triad movies. While I did visit a couple of really good expensive restaurants (especially for dim-sum), one of the most memorable things I ate in HK was 車仔麪, or “cart noodles”, where instant noodles are mixed with the sauces and toppings of your choice. I’m sure I’d be eating it every day if it was popular in Tokyo.

    I took a day to visit Shenzhen, which is directly north of Hong Kong. I’d read about a 5-day visa on arrival for the Shenzhen Special Economic Zone, so I decided without thinking too carefully to buy a ticket for the HSR from West-Kowloon in Hong Kong to Futian in Shenzhen. However, I’d unfortunately missed that the visa is only available at direct ports of entry, namely the land-border crossings at Luohu and Huanggang, the Shekou ferry port, and Bao’an airport – not any of the HSR stations. So here I am, at the immigration counter to Shenzhen and the lady in charge looks through my passport and asks me where my visa is, and I had to vaguely explain away my horrific lack of research. The good news is that it’s less than an hour from West-Kowloon to the real land-border crossing, where I got my 5-day visa and finally made it across.

    Stepping into mainland China really feels like entering a different world if you’ve never been there before. Everything’s done slightly differently, like the mobile payments, simplified Chinese, brands I’ve never heard of before, delicious convenience store drinks, and above all, the raw scale of buildings and public infrastructure. Luohu station, the most popular land-crossing, is probably close to 10x bigger in size on the Shenzhen size than on the HK side. I imagine this sense of wonder is how many people feel when they visit Japan for the first time (I’m so jaded now I can hardly remember it). My favorite experience in Shenzhen was the Huaqiangbei electronics market, a sprawling collection of buildings selling almost any electronic product in any state of completion. When I was in high school, I remember reading the Guide to electronics in Shenzhen book for mysterious reasons, so it was cool to finally be there. The scale and sprawl of the market was very impressive to see, since technology has of course been a big part of my whole life. A common sight in Huaqiangbei are groups of foreigners rolling around large suitcases full of electronics (especially smartphones) buying hundreds of items at a time to resell in regions like India and Western Africa. This mirrors what you can see in places like Chungking Mansions (also of Chungking Express fame), where a large number of south asians (mainly Indians and Pakistanis) run smartphone export businesses. I also spent a bit of time in the Chungking Mansions while in HK, mainly for the delicious and very authentic south Indian food, but also to get a sense of this extremely weird and unique environment – an ostensibly poor piece of the Third World right in the middle of one of the riches cities in the world. I highly recommend the book Ghetto at the Centre of the World, which aptly describes this pattern as “low-end globalization”. I guess it’s still surprising that the market hasn’t fully optimized electronics export out of China.

  3. Globecom @ Taipei

    In December, I attended Globecom held at the Taipei Internatinal Convention Center. While it was my first time in Hong Kong, I visited Taiwan for nearly 2 weeks in the summer. I stayed for about a week in Taipei and another week in Kaohsiung. As such, I had a decent idea of what I missed, what I wanted to do again, and what I should advise my school friends to skip.

    The main thing I missed was probably Yangmingshan park, with its grasslands, cows, and hilly hiking routes:

    Yangmingshan grasslands (entrance)

    In the same area I missed doing the hot springs at Beitou, but I did get a chance to see the very cool old Xinbeitou train station. The bulk of my trip was however, revisiting places I’d already been – restaurants and food stalls. I absolutely love the kind of congyoubing (scallion pancakes) that’s served from streetside stalls – I usually ask for an egg and extra spicy sauce.

    Congyoubing

    When it’s done right, it’s incredibly flaky on the outside but soft and chewy on the inside. My other top choice of street food is hujiaobing (pepper buns), a slightly spicy meat bun from Fuzhou. For dessert, I recommend xuehuabing (milky shaved ice), but it’s probably just as popular in the USA or Japan. I probably remember the night markets in Taipei better than anything else from the trip – I’d say a trip to Taiwan is worth is just for the food (indeed there might not be that much else to do). We stayed fairly close to Ximending station, and since our conference happened to coincide with the Qingshan king festival in Wanhua we got to see the whole place lit up and packed with dancers and parade cars at every intersection.

    After all three of our presentations were finished, we took the Maokong gondola up to Maokong station. While the weather was far from ideal, the views from the gondola and the Taiwanese tea we shared at the top were both fantastic.

    Maokong gondola view, Taipei 101 barely visible on the right
    Tea and sweets (maybe a bit overboard for 3 guys)

3 Looking forward

With that, I think I’ve covered my 2025 in fairly large strokes. When I look back on this year as a whole, two things stand out to me. First, it felt quite dense, a fair bit of travel, very new experiences, and new people coming into my life. But paradoxically, I don’t really have much tangible artifact to show for it! I didn’t learn as much as I might’ve hoped to, despite reading a lot; and didn’t make as many things as I would’ve liked to, despite programming a decent amount. It’s much harder to find value in experiences that change you subtly and over time compared to individual events.

I’ve never been a big believer in new years resolutions, but there are some trends I’ve felt recently that I hope carry on into 2026. One of these is that I’ve returned to trying to learn Chinese (since ~3 years ago). The last time I gave it a serious attempt, I decided to learn traditional characters, which seriously limits the scope of content you can immerse in. So, I ended up mostly doing a lot of vocabulary on anki and not as much content immersion. This time around, I’m taking it really easy on the anki, learning simplified characters (which turned out to be much harder at all), and watching more content. Still, I feel that compelling easy content for Chinese is much harder to come by than for Japanese, for which you can pick and choose from younger audience manga and anime popular and widespread on the Western internet. My trips to the (Republic of) China, a (SAR of) China and the (People’s Republic of) China left a pretty strong impression on me. I’d like to get to a reasonably conversational level next year – my standards and expectations are probably not going to be as high as they were for Japanese.

I’m still enjoying programming in lisps, but I’d like to do more next year too. The biggest thing I’m working on is a new static site generator written in Racket. It uses scribble/html s-expression based html templates, and will support really flexible transformation pipelines (with a focus on ergonomic pandoc). I do like Hakyll, and I’ve been using it for a long time now, but at some point I did come to terms with the fact that it is just hard to “hack” on. Changing anything that’s not intentionally exposed (built-in) requires hackage-reading and hoogling, it’s impossible to monkey-patch functions like we can do in lisp, and the templating system is slightly awkward. I am essentially planning a hakyll-type SSG, with the same structural philosophy about “contexts” and “compilers”, except dynamically typed (everything is a string), and much more easily hackable. While I have a prototype working, getting it feature-complete enough to totally replace both this blog and my photos website has proved to be a bit more complicated. I am also planning a total style/layout overhaul of both websites soon.

In any case, happy new year and holidays to everyone!! Here’s to a fun and fruitful 2026.

]]>
Sat, 15 Nov 2025 00:00:00 UT https://esrh.me/posts/2025-11-15-year-recap.html Eshan Ramesh
Why I love lisp, among other topics https://esrh.me/posts/2025-02-11-lisp.html
Posted: 2025 / 02 / 11

1 Introduction

So far, I’ve usually written posts here when I feel I have something atomic and at least somewhat unique to say, but this one will be a bit more personal, retrospective, meandering and kinda pointless. I’d like to talk about something that’s quite dear to my heart, lisp.

But first of all, I’d like to update my dear readers of this website on where I’ve been! It’s been just about a year since my last post, and longer since the last redesign of the site design (if memory serves me right, we’re on the third or fourth iteration at the moment). My photos site is updated every so often, but I rarely take many photos unless I’m travelling – I plan to change this in the near future!

I spent the summer 2024 taking the last classes I’d kept until the end, working on an SDR time-of-flight estimation project, playing lots of badminton with Sidong (now ECE PhD at GaTech) and of course – as we did for 2 years – watching anime and yapping way too much with Stephen (now CS PhD at CMU). Excluding the year I spent interning at NTT, I was at Georgia Tech for 2 years. I’d rather not comment about the state of the admin, CS classes, or housing, but I really did come to like Atlanta and the people I spent my time with there. I changed considerably from 2021-2024, broadly attributable to two experiences. One was the year I lived in Japan, which gave me a bit a of a bigger picture about life and deeply influenced my sense of aesthetics; but the other was living in close proximity with Daniel and Stephen – who influenced everything from my sense of humor to my thoughts on programming languages (ostensibly, the topic of this post). My friends at GT were honestly one of a kind and had such strong, bright and interesting personalities, I’m so glad I got to know them :)

I was always vaguely amused by cool programming languages, but I started seriously programming lisp in my first year of undergrad to prove to my neovim-using friends that emacs was way cooler. I say “amused” because really I’m just interested in alternate ways of thinking about computing, since I don’t know much about PLT or compilers. I had briefly interacted with Haskell in high school, but hadn’t ever written anything in it. Daniel and I learned Haskell again together in my first year, doing the monad challenges and a bunch of advent of code problems, although my main use for Haskell was for configuring Xmonad and Hakyll. Daniel was (and is) very good at functional programming, and these moments are fond memories to me. I remember particularly well getting badly stuck deriving liftM2 while he cruised along ahead. I highly recommend that challenge set if you’re interested in learning Haskell. Haskell was the first time I was exposed to FP proper, and all the abstractions built up with types and higher order functions – things like functors/applicative/monads, arrows, zippers, etc. What caught my interest was the way that Haskell programmers continue making abstractions until the actual problem to be solved appears syntactically trivial – and relatedly, why the code of some Haskell projects are practically DSLs. But this post isn’t about Haskell, and I don’t think any of my friends from then had any love for lisp, but Haskell forever changed the way I wrote lisp (and all other languages too).

1.1 Some rambling

One of the many magical things about lisp is that it’s the only language that can claim to be truly multi-paradigm – because it has minimal syntax. The more syntactical rules are baked into the language (like, for instance the way Python deals with generators), the more the language guides people into a certain idiomatic way of programming. Lisp on the other hand, is only a few macro expansions away from raw abstract syntax tree. This is what makes lisp so powerful in my eyes; it can implement a huge variety of ideas elegantly. Macros enable features that require deep changes in other languages, like object oriented systems, runtime data validation, async programming, crazy loop facilities, and even static types.

For instance, the commonly used when macro from many languages adds a new syntactical construct:

(define-macro (when cond exp . rest)
  `(if ,cond
       (begin ,exp . ,rest)))

Which lets you run any number of forms when a condition is true. This means you can write

(when (at-war?)
  (display "Lauching missiles!")
  (display "Attack at dawn!"))

instead of

(if (at-war?)
    (begin
      (display "Lauching missiles!")
      (display "Attack at dawn!")))

Since the first one gets compiled to exactly the second one. Obivously this is a trivial (but useful!) example, but macros become more complex when code is generated programmatically rather than just by mechanical substitution into a template. The loop macro from common lisp is a good example of another commonly used macro with a very complex implementation. In common lisp, a for loop can be written with the loop macro:

(loop for i from 0 to 10 do (pprint i))

The loop macro has a quite intricate natural-language syntax.

Of course, macros aren’t unique to lisp by any means, but the degree of freedom and ease of definition of macros in lisp is due exactly to the homoiconicity; code is data, so manipulating code is just as easy as manipulating data! In other languages, like rust, c++, defining macros is limited, dangerous, difficult, and thus rarely done. In lisp, defining and using macros is natural. I will point out a notable exception to the “other languages” scope: Julia, which is remarkably close to the syntactic freedom one has with lisp – the lisp influence is markedly clear in many aspects of that language: metaprogramming, multiple dispatch, flexible typing, repl interactivity, etc.

Anyway, I become involved with the meow project in my first year of college as well, and that marked my full immersion into elisp. My emacs config became filled with functional commands like those from dash and weird macros. This was really the point of no return for me, and I started writing much more lisp – but ran into the classic issue: you’re spoiled for choice. There are tons of different lisp dialects, some with tons of different implementations. I finally settled on janet for scripting needs, it was small, fast, and had a convenient standard library. But after touring clojure, emacs lisp, common lisp, and scheme, I kept feeling like I was missing some feature from some language, or preferring some naming scheme that I was used to. This sparked matsurika, a fork of janet with additional functions and macros wrapped up in the binary. Essentially, every helper or abstraction I wanted to write while actually solving a problem I’d generalize as best as possible and put it into the interpreter instead of that particular script. It’s very powerful to be able to modify your interpreter as you go; and when you can do this freely knowing nobody will ever read your scripts, and nobody will ever use your fork, it leads to extremely concise and clean programs with a lot of hidden complexity.

Some of the macros added to matsurika include:

  • $, which runs a shell command and returns the output – very useful to hack quickly, by using unix commands when convenient. For example, getting python files in the current directory: (filter |(s-suffix? ".py" $) ($ ls))
  • cli, a concise way to define a main function make the args accessible
  • s+, a string concatenation facility with constants in scope: (s+ qt "hello" s "world" qt nl) to print "hello world"\n which
  • awk, which runs lisp forms on every line of a string/file that matches a PEG (CFG-like grammar) – ported from TXR lisp’s awk macro
  • ->>, chains a sequence of computations by threading a value as the last argument of each form… (->> 5 (+ 1) (- 5) (* 100)) evals to -100. However, it is sometimes convenient to change the arg order for only one computation in the chain. In my version of the threaded macro, prefixing a form with * reverses the order of the args. So, (->> 5 (+ 1) *(- 5) (* 100)) evals to 100. I am a big fan of these threading macros, I used them first in Clojure, but find myself wanting them everywhere. My favorite macro library is swiss-arrows, which invents some new kinds of arrows with… rather odd names. I ported several of them to matsurika and use them surprisingly often. Actually, this is a good example of the contrast between a lisp-enabled “abstraction by rewriting” approach and a traditional fp “abstraction by higher order functions”. ->> can be easily interpreted as foldl const over a list of partial functions, or composing partial functions. This has effectively been turned into a new convenient syntactical construct with a macro. Similarly, the “Nil-shortcutting diamond wand” (??) from swiss-arrows, which ends the chain early if any intermediate value is nil, is equivalent to chaining Maybe computations with >>= in Haskell.

I’ve written a number of scripts that use reasonably often in janet/matsurika, and in general it’s been fun. However, I don’t think that choosing janet was the right choice in retrospect. This is for a number of reasons. First, janet (and by extension, clojure) is already too opinionated, and is not a good base to mold to your tastes. I like some of those opinions (for instance, the PEGs, the table syntax) but don’t like some others. Second, the maintainance cost of having to hack on the janet source code, combined with the fact that since its forked i will need to periodically rebase to get the latest changes (with manual merge conflicts), turned out to be nontrivial. Finally, needing your own deranged binary to run your scripts is a bit awkward. One of Janet’s biggest differentiators, and indeed a project goal is that it’s small, written in C, has no dependencies, and is embeddable. My goals include only “small.” Everything new in matsurika could easily have implemented as a library providing new macros and functions. In the near future, I plan to implement this for either r5rs scheme or racket. Racket seems particularly appealing, since it has explicit support for other lisp dialects using the #lang keyword. I do enjoy clojure as a language, but for mostly superficial reasons: it tends to encourage a stateless pure FP style, and the standard library is pretty good (batteries included). However, I’m not a huge fan of some of the modern clojureisms like the square brackets; one might argue that clojure is not a lisp at all because the code is not linked lists and there are no cons cells; one of the minimal specifications for a lisp according to the original paper by John McCarthy.

2 Other

I graduated college in August 2024 – and I’m now doing my Masters at the Institute of Science Tokyo (formerly Tokyo Tech). I love it here! I’m working on using using diffusion models with wireless data at Nlab. I’m living a lot slower than I did the last time I was here; there’s not much local tourism left to do, and it feels normal rather than magical as it once did. I bike a lot around the city, and it’s become one of my favorite hobbies.

I’ve been using emacs for a long time now, but lately I’ve been keeping my on lem; I think it’s a matter of time before I switch (probably after I port the core of meow to CL). I no longer believe as strongly as I once did in the future of emacs, but I do still feel that my current keybinding scheme on meow’s editing model is really close to optimal for me. I’m sure that emacs and its religious users will continue to hack away underground long after the nukes fall and wipe out surface life, but there are fundamental flaws that need to be fixed:

  • emacs-lisp is really not that good
  • decades of cruft has led to bad performance

With a project of emacs age and popularity obviously there have been a number of attempts to hack it: GNU Emacs is itself a reimplementation for one (1984), Lucid emacs (late 80s), emacs-ng, remacs, commercial-emacs, etc that I’m probably forgetting. I like lem mainly because it makes the step of finally ditching emacs lisp for common lisp. It’s much better suited for developing editor packages, and cl compilers are more performant. I think of lem to emacs as perhaps neovim to vim; a tight, modern reimplementation that doesn’t forget the culture and soul of the original project.

No matter how much I wax about lisp, I write mainly python on a day to day basis. That’s why the “soul” (as I like to call it) of the language/ecosystem and the experience of writing in lisp is so important to me; it’s my reprieve. I’ve wasted more time than most readers could possibly imagine trying to convince people that lisp is the best programming language ever (true), literally goated (also true), alien tech from the future (so timeless!), divinely inspired (it’s said God came to JMC in his sleep) etc but it really doesn’t matter. What matters is that writing lisp is truly fun! It’s a joy to iterate and organically build up a solution, testing as you go in the repl, precisely manipulating the code with sophisticated tools (structural editing! paredit!). Lisp dialect tooling (especially CL, Schemes, Clojure) is blissful to use – the very first language servers were for lisps! The monkey-wrench move-fast-break-things attitude encouraged by dynamically typed lisp combined with the patterns of interactivity, self-documentation, and hot-swappability is to me, at the very core of hacker culture. If you spend enough time with lisp, the parentheses fade out with the stars and you’re left to admire the raw, pulsating heart of computation.

As Stallman puts it:

The most powerful programming language is Lisp. If you don’t know Lisp (or its variant, Scheme), you don’t know what it means for a programming language to be powerful and elegant. Once you learn Lisp, you will see what is lacking in most other languages.

Y F = F (Y F)

]]>
Tue, 11 Feb 2025 00:00:00 UT https://esrh.me/posts/2025-02-11-lisp.html Eshan Ramesh
spectral blessing (a short story) https://esrh.me/posts/2024-02-25-spectral-blessing.html
Posted: 2024 / 02 / 25

For Sa-yi, the time has nearly come. Most of children she grows up with all live for the ceremony she will soon take part in. Most children pick a trade, a kind of specialization. Some work on the autofarms, some learn to decode the messages from the elders, and some make handicrafts and tools. Some children, of course, decide that the work isn’t worth the effort, and instead engage themselves with trivial matters, like competing to see who can climb the highest up the holy tower (a common demonstration of masculinity), or playing card games for extra snacks.

Sa-yi learns the scripture. She always has, for as long as she can remember. There are no adults in their cocoon, not since they all turned 8 (at which time there is another ceremony, the i/Ha, celebrating the sacred nature of the number). To her, the scripture is everything. Seemingly, the more she reads the more there is to read; the more questions are answered the more questions reveal themselves. But this doesn’t bother her; it excites her. Her trade is to read, and she is the best at what she does.

The i/Yi-ro is what one might call a coming of age ritual, underwent at twice the age of the i/Ha. The hatch in the center of the cocoon is opened for a child to descend into, and they are never seen again. The scriptures (the easiest of them, the Yajur) tell the children that they will receive their true name during the ceremony, and the children have no choice but to believe them. They don’t know what their true name would mean, or even what it might sound like, but they all feel a certain weight and importance attached to it. They’re only told it’s a judging, where the bad children will be punished for their misbehavior with a disgraceful name and and the good children will be rewarded for their effort with a beautiful name. It goes a long way towards keeping them in line, but it’s hardly necessary. Nobody really misbehaves in the cocoon, and there is no serious conflict. All the children are familiar with the invisible force on their heads that presents itself when they begin to disobey the scripture.

Today it is Sa-yi’s turn. She tries her best to suppress her shaking hands as she climbs down a set of stairs – irreverent oscillation is frowned upon by the Third Book of the Rig. The stairs soon give way to a gently sloping spiral slope that leads her deeper underground. At the bottom she finds a finely woven mesh door made of the same metallic material as the walkway. She pushes opens the door and steps inside. It is warmer here, and dark. Before she can take another step, a light finds her and she lays eyes on three vague, shadowy silhouettes.

The central figure speaks: “We will now begin with the 31st i/Yi-ro of this epoch. Sa-yi, step forward. Speak only when asked.”

She does as she is told, stepping forward onto a circular platform, feeling a slight but definite pressure as she does so. It’s not all so different from what the children feel every night as they go to sleep. It’s stronger, and much clearer.

“State your identity” the figure booms. Sa-yi begins almost immediately:

“My false name is Sa-yi, cocoon DF0, batch AA1, group DC3. I am an Interpreter with guild 71. Confirm?”

As she utters the last phrase, she stretches her arm out in front of her, palm facing forward. On it, an intricate tattoo of swirling lines and intertwining curves – her eigenkey – glows hot for a brief moment. Even the youngest among them knew the proper etiquette.

“Accepted.” they reply, in unison yet such that one can match each voice with its owner effortlessly. They are in perfect harmony.

“The truth of the i/Yi-ro is not as you have been told it is, Sa-yi. We do not judge here. There is no need to judge you. We have been judging you for a long time now, and we are nearly finished. The purpose of this event is for you to listen, rather than to speak.”

Sa-yi begins to feel the pressure on her head grow, and grow until it becomes unbearable and piercing and all-consuming and resonant with her skull. And finally, for the first time, she begins to see.

Colors rush forth, the normal colors included, but more colors too. Colors that one cannot see but with the mind’s eye. There is no end to the color, each more fresh than the last, and each unlocking a new visual perspective, in the same way a blind child is awakened to the world of art – and in that instant she realizes she has been blind all her life.

What Sa-yi sees, I cannot tell you – it is inexpressible in our languages. It is inexpressible not like 1 = 2 (which is illogical but expressible), but like that which cannot be pictured by in our minds. All I can give is a projection, like a lower dimensional slice of a deeper world. This is what she sees:

the universe begins. nothing. a planet passes by a star.
its orbit is very long.
lifeforms are born, lifeforms die.
the planet passes again.
nothing happens exactly once. if one were to live long enough, one would see it happen again.
when something happens again it has a frequency.
it need not have a form of course, the form is predetermined because there is only one form
the wave, of course.
the waveform.

a lake surrounded by mountains.
it was formed once, it will be destroyed, and it will be formed again,
all in tune with the universal frequency, the uberfrequency, as all is.
a stone, the perfect stone is thrown, and the water ripples,
a smooth wave, the perfect wave, propagates from the source (the transmitter).
it is perfectly clear, and perfectly smooth, it is the waveform in shape,
yet nothing but a harmonic of the uberwave.
a pure shape, with a seductive symmetry, an innocence in each gentle curve that
entrances the eye like the pendulum of an intricate grandfather clock.

the mountains fade smoothly into nothingness and the water stretches
as far as the eye can see.
infinitely many waves from infinitely many imperfect stones hit the water
and the ripples touch each other like tendrils of effect intermingling and intertwining –
and they combine in tune and out of tune into a new wave
one that has not yet been seen before in this universe
but surely will be in another.
in this instant there are enough waves to name a wave for every string in every language,
and in the next instant there are more.

something is lost when these waves are made,
for they are impure,
and they are hideously imperfect compared to the harmonics of the uberwave.
the intrinsic natures of the component waves yearn to be free,
because nature is smooth and free.
the sudden and sharp are unnatural and binding.
nature is smooth.
nature is smooth but sometimes bent out of shape by the free energies of the universe
but its heart always makes itself known:
ringing artifacts in the fabric of spacetime,
harmonics,
nature screaming out as its spinal cord is shattered into
the gray-coded constellations of the night sky.

and finally she sees that she is made of water, defined by one great wavefunction,
carefully constructed, with not one error,
by a mechanical monstrosity that throws stones into the lake.
the machine is not of this world; it is of the world above.
it stretches across the sky, but the world is not cast in darkness.
gears and pulleys mash and spin silently.
you would know god too if you saw it.
the machine simulates the world with its energy,
warping and weaving the simple into the complex.

it is impossible to discern its objective.
it may have none at all but to sculpt its pond to match its algorithmic sense of beauty,
an artistry of symmetry and simplicity and oscillatory aesthetics.
the machine, oscillating at the uberfrequency, must be tormented;
the waves seem to splash and wriggle incessantly.
we can only imagine how awful the harmonics of the sculptures it forms must appear to it –
but we see a beauty in the unintentional imperfections, for the only
complexity our imperfect selves can understand as beautiful is
exactly that which is resonant with our perfect components.

and finally she sees that
she is always propagating further away from the center of the machine
her one and only birthplace.
everything she has done and will do is merely
a consequence of a perfect component,
some with a period of days,
some longer than she will live and be reborn and die again.
the anxiety of autoscopy is instantly replaced by an overwhelming sense of peace,
knowing that one is
nothing if not predetermined,
nothing if not a drop in the river to heaven.

And her world goes black, pure black. She struggles to open her eyes only to realize they were already open as she regains feeling in her limbs. Her proto-vision will not return to her for several days. She feels as if she’s lost something; whatever it was, she knows it must have been unimportant. But she has gained something far more important.

The three figures speak again, but she doesn’t hear them; she sees: three blobs of pattern in three complimentary colors that she finds immensely pleasing together, as if they’ve been chosen from a higher-dimensional color wheel.

She knows, somehow, her true name: Na-ha-ze, after the current epoch, 780. She knows that this ceremony had been performed millions of times before. She knows everything about her new purpose, and the world she was born into. She is perfectly aware that most children were not given the Spectral Blessing; after all, how could they handle such a thing? Most were handed down some common name and sent on their way. A few were disposed of. Na-ha-ze feels this is all as it should be, and what she feels as the new Prima-Intendant is fact.

Somewhere above her, she senses a gate opening, and her field of vision is washed away by the most beautiful colors she has never seen.

  • thanks to stephen and my friends for reading early drafts
  • inexpressibility of what gives logic to the world (and is outside the world) is an idea from tractatus (6.41)
  • the world being simulated by a machine that prioritizes speed, simplicity, and algorithmic beauty is inspired by schmidhuber
  • many allusions are made to a fundamental idea about the decomposition of functions in math and signal processing
]]>
Sun, 25 Feb 2024 00:00:00 UT https://esrh.me/posts/2024-02-25-spectral-blessing.html Eshan Ramesh