2022-09 Austin Emacs Meetup

There was another meeting a week ago of EmacsATX, the Austin Emacs Meetup group. For this meeting there was no predetermined topic.

#1 was one of the organizers, and is active in the Austin Clojure group.

#2 was one of the organizers, and formerly worked for the City of Austin.

#3 was the professor in OKC.

#4 was a new guy in India. I do not think he said what part of India he was in (or I did not put it in my notes).

#5 was a new guy in Warsaw, Poland.

Two months ago we had an attendee in Japan. This meeting we had attendees from both Europe and Asia. If we get one each from South America, Africa and Australia, then we will have attendees from each populated landmass. Someday we might get someone out there who has used Emacs for scientific research in Antarctica.

I googled “Emacs Antarctica”, and I found out there is another software package called EMACS: Electromagnetic Airport Control and Survey. It is used to monitor electromagnetic radiation at airports. I also found an article from Linux Journal from 1994 about Australian researchers using Linux all over Australia, even on their bases in Antarctica. There is only a brief mention of Emacs in the article. It is listed with other software that was installed “to make life a little easier”. I guess they did not like vim.

As vim boosters love to point out, you should use vim because it comes with Linux. Kind of like how your Luddite relatives use Windows because that is what was on the machine when they bought it at Best Buy. In all seriousness, there is nothing wrong with buying stuff at Best Buy, but if you are going to spend all your time in a text editor, inertia is a terrible criteria.

As usual, there was no set topic.

When I joined, #1 said that he updated his Mac laptop and everything broke. I am not a Mac person, so I just waited until the topic changed. Someone told #1 to try the Emacs For Mac OS X site to get new binaries.

There was some discussion about features coming in the next version of Emacs. #5 mentioned pgtk, or pure GTK. From googling, the benefit is that there are a few GUI backends to Emacs for different OSes, and pgtk should make Emacs look better and run more quickly on multiple OSes. I use Emacs with the –no-desktop command line switch, so I might be wrong about pgtk’s benefits. #3 started using nightly builds, and found out there is a new command line switch: –init-directory, that might make chemacs2 obsolete. #1 pointed out that native compilation was supposed to be in 28, but got pushed to 29.

#1 was having some issues with git and Emacs. He uses dired instead of his OS’s file explorer interface, but when he moves a file in dired he loses the git history. He asked the other attendees if there was a solution. Someone suggested he try magit. I will ask him next month if he resolved his issue. The magit site is here, the Magit docs are also on EmacsDocs.

#1 and #2 talked about Javascript for a few minutes (another topic that does not interest me). They compared the relationship of ClojureScript to Javascript to that of Clojure to Java: Clojure started out with a lot of wrappers around Java libraries, but now seems more “filled out” (#2’s term), which ClojureScript does not seem as advanced. They said a lot of ClojureScript projects that they are close to have been re-written in Javascript. I pointed out that the Brave Clojure jobs list seems to have more ClojureScript jobs than Clojure jobs, which depressed me and surprised the other two.

At the meeting before the prior meeting, The Artist Formerly Known As #3 talked about his experience w/XEmacs. At some point I came across SXEmacs. Some developers forked the XEmacs source code and are trying to keep the dream alive. I did not try it out, and I have no idea if it can work with a current GNU Emacs config file. The last commit was a year ago. I don’t know if that means the developers have it at a point where they are happy, or if they have abandoned the project. You have to join the mailing lists to view the archives, and I did not feel like joining just to see if it is still active.

It looks like a one-man show. This reminded #5 of TempleOS. I don’t think it is a fair comparison. The TempleOS guy really did go crazy. I think it’s funny that the maintainer of SXEmacs says he will not “tollerate” fools (page here, Wayback Machine snapshot from November 28, 2020 here). I have to admit, for a long time, one of my fears was misspelling “intelligent”. Perhaps it’s time to add spell check to SXEmacs.

Someone pointed the group to Rust Emacs, an attempt to port Emacs to Rust. It has not been maintained. The language stats for the project are interesting:

Emacs Lisp 71.5%
C 16.7%
Roff 5.7%
Rust 1.3%
Objective-C 0.8%
M4 0.7%
Other 3.3%

 

I admit I do not know a lot about Rust. I always thought that Emacs was written mostly in Emacs Lisp, with the Lisp interpreter written in C. I assume that the main task would be to re-write the interpreter in Rust. But they have 10 times as much C as Rust. #2 thought it is odd that the Rust community seems so gung-ho about writing everything in Rust. Then again, when you are trying to replace C, you have to be gung-ho.

I asked #4 and #5 to introduce themselves since they were new. #4 is a developer in India. He uses Python, R, and Org mode, and is interested in literate programming in Org. #5 is a PHP developer in Poland. He has been using Emacs for four years, and intends on diving in and learning more about Emacs, Lisp and Clojure. His goal is to live in Org mode. He likes Emacs because he can execute PHP in Emacs. #1 told me it is possible due to Org Babel.

#4 then shared his screen and showed us how he does literate programming in Org. He was able to put images in his Org files and resize them. This is similar to how #3 in OKC uses Org, and he was very interested in doing more with images. They were exchanging ideas that were over my head, since I do not use Org the way they do.

At first #4 was not able to share his screen. Then he switched from Firefox to Chrome, and we could see his screen. We were using Webex for the meeting. So if you ever have trouble sharing with Webex, try a different browser.

You’re welcome.

I give people numbers since I do not know if they want their names in this write-up. Think of it as the stoner’s version of the Chatham House Rule. I figured that numbers are a little clearer than “someone said this, and someone else said that, and a third person said something else”. Plus it gives participants some deniability. People’s numbers are based on the order they are listed on the call screen, and the same person may be referred to by different numbers in different months.

I am not the official spokesperson for the group. I just got into the habit of summarizing the meetings every month, and adding my own opinions about things. That said, if you like something in this post, I will take credit; if you don’t, blame somebody else.

Image from Dobrilovo Gospel, a 12th century manuscript housed at the Russian State Library; image from Wikimedia, assumed to be under public domain.

2022-08 Austin Emacs Meetup

There was another meeting a couple of days ago of EmacsATX, the Austin Emacs Meetup group. For this meeting there was no predetermined topic.

I will tell you up front there was a lot of talk about Doom and running Emacs on Windows, neither of which interest me. Then again, you can get Emacs to do anything you want, so this may interest you.

#1 was one of the organizers, and is active in the Austin Clojure group.

#2 was a developer in the Dallas-Fort Worth area. He tends to talk quite a bit. Kind of like our non-professor developer in OKC. Now that I think about it, I don’t those two have ever been at the same meeting. Coincidence? I think not.

#3 was one of the organizers, formerly worked for the City of Austin. Now your complaints must be taken elsewhere. He did not say much while I was on the call.

#4 had just come back from Europe, and is a developer in Austin. Everyone else seemed to know him, but I did not recognize his face, his voice or his handle. At one point he made a comment that he got a programming job “off the street”. I do not know if that means he scraped by getting a CS degree, or if he was in a non-STEM related field and decided to do something different with his life.

I called in a bit late. #1 was sharing his screen and trying to get emacsclient working on his Mac.

Then #2 and #4 talked about getting Emacs working on Windows with Windows Subsystem for Linux. If you can use Emacs, then you should have no problem with Linux. And why not just run straight Linux? I do not like MS, and I do not trust MS. I got a mini from System 76 with PopOS pre-installed, and it works flawlessly. MS might consider people running Linux to be a problem; I think that is the solution. WSL might be solving a problem MS has, it is not solving a problem I have. Maybe the guy is a hardcore gamer. Still, I think most developers can shell out enough cash for another system. I would never want to discourage people from running Emacs, but it looks like #2 and I see some things differently. (Perhaps that is inevitable with something as customizable as Emacs.)

Granted, he has a job where he uses Emacs all day, so he is doing something right. #2 also mentioned they recently converted a few vim users to Doom Emacs, and one of them said it changed their life.

#2 said running Doom Emacs on Windows was difficult. Apparently Doom uses some C libraries that are not available on Windows. I have no interest in Doom, so I did not ask for details. Later #2 mentioned that he was able to run Doom with multiple profiles without using Chemacs. I would not be surprised if multiple profiles becomes a feature in future versions of Emacs.

#2 also mentioned MS Powertoys. At first I thought he was being facetious and making fun of something called “Power Tools”, but I checked, and, no, it is actually called PowerToys. The jokes write themselves. The page on MS’s site describes PowerToys as “Utilities to customize Windows”. Unfortunately, MSPT would not let #2 make the adjustment he REALLY wanted to make, which sounds like Peak Microsoft.

#4 said they use Emacs for Ruby and Go, and that led to several minutes of people offering their opinions on Go. I have tried it out a bit, and constantly checking if something is nil gets old fast. #4 had heard people say bad things about it, but when he tried it he liked it. #2 and #4 both use Doom, and like #1 use Emacs for Clojure.

#2 mentioned that a recent change in Emacs resolved the “long lines” issue. I think he might be referring to so-long, which was mentioned on Mastering Emacs (also see EmacsWiki page, ELPA page, Savannah page and source page).

The last topic was Brushes With Greatness. #2 had a talk with Simon Peyton Jones at Strange Loop where SPJ gave a talk on “Shaping our children’s education in computing“. #2 mentioned a few things about Haskell that he did not like, and realized it was a mistake. SPJ was not a jerk, and he actually seemed interested in making Haskell better and hearing what #2 had to say, but he was asking questions at a level of detail that #2 was not able to answer.

#1 talked with Rich Hickey at ClojureConj a few years ago. RH uses a minimal setup: Just paredit (see pages on EmacsWiki and WikiEmacs) and Inferior Lisp mode. #1 asked RH if he did any web development, and RH said that he thought web development was too complicated. #1 and #2 thought it was interesting that some big names in development who work on some important projects have some of the simplest setups.

You’re welcome.

I give people numbers since I do not know if they want their names in this write-up. Think of it as the stoner’s version of the Chatham House Rule. I figured that numbers are a little clearer than “someone said this, and someone else said that, and a third person said something else”. People’s numbers are based on the order they are listed on the call screen, and the same person may be referred to by different numbers in different months.

Image from Harley MS 5647, an 11th century manuscript housed at the British Library, assumed to be under public domain.

2022-07 Austin Emacs Meetup

There was another meeting a couple of weeks ago of EmacsATX, the Austin Emacs Meetup group. For this meeting there was no predetermined topic.

#1 was one of the organizers. He told us he no longer works for the City of Austin, and now works for a payment processor.

#2 was the other organizer, and active in the Austin Clojure group.

#3 was one of our developers in OKC.

#4 was a developer in Austin, and also a member of the Austin Clojure group.

#5 was an expat in Japan. This is the first time we had an attendee from overseas. He is a Haskell programmer.

#6 was our other developer in OKC.

The first topic of conversation was some new things in Emacs 28. There are a lot of new changes. The pace of Emacs development has accelerated in the past few years along with interest in Emacs. A few people on the call were getting into the new built-in project management solution called simply “Project”: see the page on Mastering Emacs (there are a LOT of things listed on this page; Project is more than halfway down) or the GNU site. This can be used as a replacement for Projectile (Github page here, documentation page here). Number 3 has replaced Projectile with Project.

Number 3 has had a finger on Emacs development for quite a while. He said that Bozhidar Batsov approached the FSF about integrating Projectile into Emacs, but they did not get back to him for a couple of years. By the time they did, Projectile had changed and also had accrued more contributors. Mr Batsov did not think that all the contributors would sign their code over to the FSF (or chose not to bother), and that was the end of it. At some point the FSF decided to make their own. Number 3 said this is in line with Crafted Emacs (formerly Rational Emacs): use or enhance what is built-in as much as possible, with using something external as a last resort. He admitted he might be biased, but he said that there is a general trend of moving towards the built-in stuff.

I will have to add looking into Emacs 28 features (like ibuffer and fido) to my ever-expanding to-do list (which of course is in Org mode). There are a few new functions in Emacs 28 that deal with outlines. Since I tend to use M-x commands rather than key chords I will definitely look into those.

I asked #5 and #6 how they learned Emacs (since I am interested in helping evangelize Emacs to newbies). #6 gave a presentation a few months ago, and while he had been using Emacs for two years when he presented, he learned a lot in his first few months. By the time this topic was over, I think almost everyone had given their Emacs origin story and waxed nostaligic for OSes and systems long gone into the ether. I will start with mine.

I worked at a firm doing analytics from 1998 to 2000. All the developers had Sun workstations (I think mine was a SPARCStation, but it might have been an Ultra). So you had to learn Emacs or vi. Someone showed my vi, and while I got the idea of modes, it just seemed stupid to me at the time. It feels like the Unix version of the Microsoft Paper Clip: “I see you are editing text. Do you want the text to actually appear in this file?” I went to one of the people who knew Emacs, and I asked them: “What happens in Emacs when you press the ‘a’ key?” The guy said: “The letter ‘a’ is added to the file wherever the cursor is. Just like almost ever other text editor on the planet.” I told him to show me more Emacs. Later in 2000 I went to Bank Of America, and I had to use Windows. But I did have a PA-RISC workstation under my desk running HP-UX.

Over the years, my Emacs usage waned. I started running Linux on my home machines, but I tended to use JEdit more than Emacs. There was an Emacs group in Austin, but they met at lunchtime. Given how spread out Austin is and how spread out the jobs are, a lunchtime meetup just seems like a bad idea. Growing up near Chicago, the Loop felt like the center of the universe. It had the highest density of jobs in the region. There are jobs throughout the region, but the Loop has a lot more. Even then, a lunchtime meetup would not have gotten a lot of traction. Doing that in Austin just makes no sense at all.

Number 2 took over, and started having meetups in the evenings. It has been blue skies and no blue screens ever since. The first evening meetup was on Thursday, September 22, 2016, at the now-closed Cafe Express (they still have locations in Houston). It was at one of the meetups at Cafe Express that I first heard about ido and smex. Someone asked what happens if two modules have the same keychord. Another member mentioned smex. It changed my Emacs experience. When I learn new modes, I use the M-x function names and not the key chords. Granted, it can make following along a bit cumbersome. Usually the function names describe what they do.

I finally ditched JEdit and went all-Emacs outside of work around October/November 2021 when I found out about the Emacs desktop, and how to only use it for one open session and not others.

I do have Emacs installed on my work laptop, even though it is not a standard tool. I would like to work a job where I can be in Emacs all day. I used to keep notes about all sorts of things at work and at home in text files. Now I use Org. One day I googled if it was possible to do outlining in Notepad++. One suggestion is to “use a UDL (User Defined Language) and just have parentheses to do the folding for you.” Using your editor to use parentheses to make your own language. Sounds familiar.

There are a few other suggestions here, here and here. One of those suggestions lead to this post on OutlinerSoftware. They only have 8 topics to a page (as of 2022-07-27 there are 3,760 pages).

I use the outlining feature in Org a lot. I am on Teams calls with our testers at work a lot, and some of them write their scenarios in Notepad. Not Notepad++, but Notepad. I have no idea why. Anyway, they will have a list of preconditions in a run-on sentence on one line. Making these sections in an outline would make them easier to keep track of. I know PowerPoint has soured people on bullet points, but they are good for organizing thoughts. I am reluctant to talk to them about using an editor with outlining features because I have a feeling they would all go to Word. Note to corporate America: Innovation does not mean “Let’s do everything in Excel” or “Let’s do everything in Javascript.”

Number 1 used vi at his first job. Everyone else used Emacs, but he resisted for a long time. He started doing Lisp, Scheme, and started using Emacs for that. He looked into Perl, and when he found out you could run the perl debugger through Emacs he was hooked.

Number 2 used Emacs on and off. He was working at a company that could not get licenses for UltraEdit, so one day he sat down at a cafe with Number 4 and started learning vanilla Emacs.

Number 3 started using Emacs in 1990 on an AIX machine without info files for reference. He switched to MicroEMACS for a while, and eventually got GNU Emacs running on OS/2. He started getting serious about Emacs in 1995, and kept using Emacs wherever he went. For a period he used SlickEdit to configure Emacs. I told him if we had geek points to award that we should give them to him. Most people have never heard of AIX. He might be the first person I have spoken to in a long time who has actually used it.

Number 5 was a vim user for eight years. He found a vim plugin for org-mode and liked it. He decided to try Emacs, but had trouble with key chords, so he uses Evil mode. He started eight months ago, and has been using Emacs every day for about two months (which will be three months by the time I publish this). He prefers Emacs since it is more customizable. He said Emacs and vim are so different he does not know why people lump them together.

Number 6 started two years ago, and committed a year ago to using Emacs everyday. He started with a book, I think he said it was Learning GNU Emacs, and said it was a good overview. He tried Spacemacs, but found having to deal with the extra layer offputting. Then he just went with the default. He said the main thing is to have a reason to use Emacs and weave it into your daily work. I think for him Org mode was the killer app, although at first he tried to do too much and found success by starting over and incorporating Org more slowly into his workflow. Number 6 uses Org, overleaf, Atomic Chrome and a lot of LaTeX.

There was some discussion about keyboards and ergonomics. Number 5 uses evil because Emacs is hard on his wrist. Number 1 has learned to use both control keys instead of just one. I just move my hand an inch. Speed is nice, but it is not the most important thing. Numbers 3 and 5 both tried Dvorak keyboards with Emacs, and both thought it was a train wreck.

We talked about the changes that have been happening in the Emacs community over the past few years. XEmacs came about because some people thought new versions of GNU Emacs were not coming out quickly enough. XEmacs got some traction. I used it for a few years, but the last release was in 2009. There was some turnover in the GMU Emacs leadership, and there have been more frequent releases and improvements to GNU Emacs. Number 3 said he submitted a small patch to both GNU Emacs and XEmacs. GNU Emacs incorporated it without a fuss, but this small change caused a lot of arguments on the XEmacs mailing list. He said it turned him off to XEmacs, and was not surprised that it eventually died.

You’re welcome.

I give people numbers since I do not know if they want their names in this write-up. Think of it as the stoner’s version of the Chatham House Rule. I figured that numbers are a little clearer than “someone said this, and someone else said that, and a third person said something else”. People’s numbers are based on the order they are listed on the call screen, and the same person may be referred to by different numbers in different months.

Image from the Susteren Gospel Book, an 11th or 12th century manuscript housed in Susteren Abby in the Netherlands; image from Wikimedia, assumed to be under public domain.

2022-07-13 Update

I know I said I wasn’t going to write about my site, but I have been spending a lot of time on it, and looking into static site generators and moving away from WordPress (or as some people call it, “WordMess”).

I have a few sites that do not get much traffic (which is fine with me). But I do use the search features on WordPress a lot. It is nice to have a record of my thoughts without relying on Google. I got locked out of one of them recently. I don’t know if it was the site host or WordPress that locked things down. The lockout said it would expire in fifteen minutes, but it lasted an hour. I googled for a solution, and one was to change the slug for the login page. Which required a plugin. So I installed the plugin and changed the URL to a random word. I suppose I could have used a UUID.

Then I was getting email reports about attempted logins due to some xmlrpc issue. Google searches showed that the preferred solution was another plugin, but I was able to take care of this issue with the first plugin.

And then there are the comments. I might just turn them off. I have not gotten a useful or relevant comment in a long time. And since Russia invaded Ukraine (which is NOT anyone’s fault but Russia’s) I have gotten a lot more comments in Cyrillic. And I still get ads from people offering me SEO capabilities, even though my contact page says this is not a business and I do not need any services from you.

And then there is the possibility that the custom editor will stop working. And then one time it went into “Maintenance mode”, and did not come out. I had to delete a file from the server via SFTP.

Also on my post about CJUG presentations I was not able to get the formatting the way I want. A few times I got it to look the way I want in the preview, but after hitting the “Update” button the system changed it.

So I have started looking into static site generators. This is a larger project than I anticipated, and will take longer.

I would like a static site generator that can make my site like it is now: showing full posts ten to a page, with subsequent posts on subsequent pages. I do not want one page listing all the posts. I would like to have the files in different directories as well. I have a lot of posts, and I do not like hundreds of files in a directory if I can avoid it. I want each post to have links to the posts before and after it. I want an SSG with themes in case I do not like the default. And I want an SSG with an active forum or mailing list in case I have questions that I cannot answer from looking at the documentation.

Here are some notes for future reference:

  • The Python contender is Pelican (Github link here). I have not tried this one out yet. They do have an IRC channel. Those are not the best ways to get answers. I prefer forums or mailing lists. Their Github wiki has pages not on their main site. I do not want to have to look in multiple places for information.
  • The Clojure contender is Cryogen (Github link here). I could not find any mention of a way to interact with the community. In general that would be a point against, but I am pretty familiar with Clojure so I might be able to get it to work the way I want without assistance. Plus a lot of Clojure projects Just Work(tm).
  • The Java contender is JBake (Github link here, themes on Github here and here). I tried this out with a few posts. I do not have to have all the posts in one directory. However I do not know if all of the archive posts have to go on one page. I will keep looking into this one.
  • The Ruby contender is Jekyll (Github link here, forum here, themes site here). I had to jump through a lot of hoops installing Ruby via rvm, but I got it working. This is one system that seems to require all the files being in one folder. One point in favor of Jekyll is I did find a WordPress plugin that converts WP content to Markdown pages.
  • The Go contender is Hugo (Github link here, forum here, themes site here). Like Jekyll, this has a lot of features. It could probably do what I want, but it would take a lot of time to look into it.

You’re welcome.

Image is a scene from the life of 5th century Desert Father Arsenius the Great from an 11th century menologium manuscript housed in the State Historical Museum in Moscow, image from Wikimedia, assumed allowed under Public Domain.

2022-06 Austin Emacs Meetup

There was another meeting this week of EmacsATX, the Austin Emacs Meetup group. For this meeting there was no predetermined topic.

Most of the attendees were in Austin, but we had a few from other states.

#1 is one of the organizers. I think he works for the City of Austin, and does not use Emacs much at his job.

#2 has a math degree and makes machine learning software.

#3 is a student in Massachusetts. He did not specify which school. He uses Emacs to program in Haskell (which was the first language he learned), Common Lisp, and Perl.

#4 is a sysadmin in Tennessee. He was one of the few who lives the dream of using Emacs for his job. Now that I think about it, I should have asked him why he likes Emacs, since a lot of sysadmins prefer Vim. Granted, he could use both. I recently logged into a system that had only Vim and I was able to make a small change. I was not converted.

#5 is another machine learning developer in Austin.

#6 presented a few meetings ago on Rational Emacs (now called Crafted Emacs). He is a software developer in Oklahoma City. I asked him if he knew the presenter from last month before the presentation, and he said he did not. (I know there are around 700,000 people in OKC, but it was a possibility.) We did spend a few minutes chatting about Oklahoma City in general. Like its economy, the OKC tech scene is dominated by oil companies. The capitol building is on top of an oil field, one of the few in the country in an urban area. #6 uses Emacs for several languages for his job, and is also living the dream. I do not remember what languages he uses. I think Python is one of them.

I was hoping the presenter from last month would be here. I think he learned Emacs not too long before he submitted his talk to EmacsConf. If he is a beginner and able to put executable source code into an Org file, then whatever tutorial or book he used was effective.

#7 is a local Austin developer, living the golden dream: Using Emacs to write Clojure. He showed us running Emacs on his iPad using the iSH app. A few people wondered how long it will be until Apple cracks down on this, and whether you can run Emacs on Android.

#3 mentioned shx for Emacs (or “shell extras”), which extends Comint mode. Per the Emacs manual, Comint mode is “a general-purpose mode for communicating with interactive subprocesses”. This led to some discussion about shell modes in Emacs. #6 said that since there are modes for every programming language he uses, he does not do much in the shell since the modes have commands for most things he needs to do. “There’s a mode for that.” I have been spending time with eshell. #1 pointed out eshell works wherever Emacs does, and you can run ELisp code in it, so it is portable and powerful.

The discussion then pivoted to comparing Lisps. The consensus was that Clojure might be The Lisp That Sticks, and that since it is on the JVM it handles dependencies better than most Lisps. I pointed out that a lot of Racket packages do not have version numbers or version numbers for their dependencies, which horrified a couple of people. A few of us agreed that Dr. Racket looks cartoonish, and Racket Mode is much better.

#7 mentioned that Edsger W. Dijkstra wrote a letter to the UT CS department complaining about the decision to drop Haskell as the introductory language. The more I read about Dijkstra, he seems like the sort of person who is only happy if he has something to complain about. #3 started with Haskell, and then went to Prolog before finding Lisp enlightenment. #7 was a CS student at UT when Dijkstra was there. He regrets not taking a course with Dijkstra. Apparently, EWD did teach undergrads. But #7 decided not to since the grade for the course available was based on one oral exam. #5 pointed out that sometimes you don’t know you are in the “good old days” while they are the good old days.

#7 also posted a link to a book by Edgar Graham Daylight, who blogs about EWD at Dijkstra’s Rallying Cry for Generalization. You have to go to the “Recent Posts” list on the right to see the latest post. The post on the front page is the one of the first posts from 2011.

You’re welcome.

I give people numbers since I do not know if they want their names in this write-up. Think of it as the stoner’s version of the Chatham House Rule. I figured that numbers are a little clearer than “someone said this, and someone else said that, and a third person said something else”.

Image of Saint Luke from the Gelati Gospels, a 12th manuscript housed in the Georgian National Museum, assumed allowed under Public Domain.

2022-05 Austin Emacs Meetup

There was another meeting a few weeks ago of EmacsATX, the Austin Emacs Meetup group. For the third month in a row we had a predetermined topic.

The speaker was Blaine Mooers, Director of the Laboratory of Biomolecular Structure and Function at the University of Oklahoma Health Sciences Center in Oklahoma City. They engage in crystallography, which according to Wikipedia is “the experimental science of determining the arrangement of atoms in crystalline solids”. He gave a talk on what his lab does and how they use Emacs at the 2021 EmacsConf. The talk is Reproducible molecular graphics with Org-mode. He posted the slides for his EmacsATX talk to his Github repository.

His lab uses software called PyMOL. I have not gotten around to going through all the EmacsConf talks, but I think he spoke about calling PyMOL from Org files, and using Org mode to incorporate the code for the molecular visualizations in journal articles.

His presentation at EmacsATX dealt briefly with what his lab does (slides 2 to 9). Then he talked about functional programming (slides 10 to 14), different ways to invoke Emacs Lisp (slides 16 to 20), and he went over some of the Emacs Lisp functions he used (slides 21 to 36). I won’t repeat too much of it here. Go look at it; it’s pretty good.

The section that interested me the most was the section on the different ways to run Emacs Lisp code. I had always restarted Emacs and invoking functions over and over until I got what I wanted. The methods are:

  • elisp file (.el)
    (documentation ‘main) ; C-x C-e at space of right of )
    Or C-M-x inside parens
  • scratch buffer: C-j (for me, C-j is mapped to paredit-newline; the default mapping for C-j is eval-print-last-sexp)
  • M-x eval-buffer
  • M-x eval-region
  • M-: ; REPL in mini buffer
  • M-x ielm ; eval one expression at a time
    (defalias ‘erepl ‘ielm): M-x erepl
  • M-x eshell
  • elisp REPL outside of Emacs (from a question on the Emacs Reddit):
    alias erepl="rlwarp emacs --batch --eval \"(progn (require 'cl) (loop (print (eval (read)))))\""
    
  • Could run scripts in the terminal without running Emacs
    “#!emacs –script” in file
    or emacs –script in comment line
  • In Org docs in source blocks
    To execute the code blocks in Org file, you use M-x org-babel-execute-src-block. The “RESULTS” line will be updated with your result, and the universe will open up in all its heavenly glory.

    #+BEGIN_SRC emacs-lisp :results value scalar
        (* 40 1001 1001 1001 1001 1001)
    #+END_SRC
    #+RESULTS:
    : 40200400400200040    
    

The Emacs Lisp overview included lambda functions, required and optional arguments, and three mapping funtion: mapcar (applies a function to a list), mapcan (similar, but always returns a list) and mapconcat (similar, but returns a single string). During the Q&A, someone pointed out Emacs Lisp now has seq* functions, that work with lists and arrays. I think those were inspired by Clojure.

You’re welcome.

Under the Stoner Chatham House Rules in previous EmacsATX write-ups, the speaker was referred to either as “The Esteemed Gentleman From Oklahoma”, or “Attendee Number Three”.

Image from an 11-th century Byzantine manuscript; image from The Walters Art Museum, assumed allowed under Public Domain.

Random Thoughts On Javascript

Random thoughts on Javascript.

As Matthew Butterick put it, Lisp makes me smarter, while anything named *Script kills brain cells on contact.

Here is a comment from Hacker News that sums it up for me: ..they feel like walled gardens of arbitrary knowledge that only applies to their ecosystem rather than to some fundamental learning about software. When I learned about OOP I was able to understand OOP code in a broad range of applications, languages and frameworks, but learning how react works gives me no insight into anything but react, and it’s even abstracted enough from JavaScript that you could learn React without ever properly knowing how to write JavaScript (which is something I’ve encountered in a handful of new devs).

It does seem like a lot of Javascript developers are like small children: They only know Javascript, and cannot imagine anyone not knowing only Javascript. Like iPhone users but worse. They seem to constantly re-invent the wheel, and there seems to be no collective learning. If Javascript is so wonderful, why are there so many libraries, frameworks and entire languages that transpile to Javascript? If Javascript is so wonderful, why do people go through all that effort to avoid dealing with Javascript directly?

Whenever I tell people I want nothing to do with Javascript, I get the same song and dance that “you have to know Javascript.” First off, I do not use it at my current job, so for a lot of jobs you do not. But I do have to use apps made by Microsoft. Because I have to. I am tired of using garbage because I have to. That is one reason I tend not to call in to the Austin Clojure Meetup when they talk about ClojureScript. Lisp is something I want to learn. I spend enough time with things I have to use. Don’t pollute the stuff I want to use with the stuff I have to use.

And usually you get to the first stage of “you have to use X” because a lot of people are too lazy or too stupid to investigate alternatives. The second stage is the X that you have to use is the only alternative, and most people are too lazy or too stupid to know there ever was an alternative. If I wanted to do what everybody else does, I would not be interested in Lisp or Clojure. You use Lisp because you know the world is wrong.

Maybe everybody else uses it because everybody else is stupid. JS is like Windows: It is a status quo that everybody defends, nobody actually chose, and very few actually like.

I don’t buy the argument that developers should learn Javascript because it is a combination of Lisp (the good parts) and C (everything else). “It has the stuff you like with the stuff you do not like.” I would like my life to have more of the stuff that I like, and less of the stuff I do not like, not to mix them together. “It’s Lisp and C” is really a reason to learn Lisp.

I am tired of being treated like a dog, and people thinking that I will just eat whatever is put in front of me.

But I am not the only one. The README for Coast states “It uses a relational database and renders html on the server without javascript which allows you to ship your web applications faster.” The Pragmatic Bookshelf has a book called Programming Phoenix LiveView: Interactive Elixir Web Programming Without Writing Any JavaScript. Granted, they do not seem to be against JS. I think that LiveView is like GWT: You write code in Elixir (LiveView) or Java (GWT), and it gets translated to JS. Because JS is too complicated.

The PDFs for that book said that we need JS to make single-page apps and give users all the “modern” features of the web: like notifications and infinite scroll. Personally, I need fewer notifications and I hate infinite scroll. JS seems to give nothing but bloat. Granted, there are some things it is useful for: I think a lot of video players are done with JS. But beyond that, all JS has given us is bloat and complexity. I feel like I am spending more and more time on websites waiting for circles to stop spinning.

I think we need to get back to CRUD apps. The kind we used to make 10 years ago. Yes, you had to know several languages, like HTML, CSS, SQL, maybe some Javascript. But you could focus on a language that interested you, like Java, or Ruby, or Python. Now it seems like a lot of people want to make it all Javascript all the time, now it’s Javascript AND maybe a little bit of the thing you really wanted to learn. Two years ago I took a course on Pluralsight about making web services in Go. The course included an Angular app to view the database. The Angular app takes up 589 megabytes on my hard drive. I took the course to learn how to use Go, not deal with Javascript. It reminds me of Joe Armstrong’s line about OOP: I just wanted a banana, not the monkey holding the banana and the tree it is sitting in.

Why they did not have a prerequisite course about making a web application in Go is beyond me.

Javascript is like someone comes to a restaurant, and at first they seem outgoing and charismatic. Then you realize the guy is groping all the women, he’s hammered and you can’t get rid of him.

I haven’t gotten around to reading any of the PDFs I have going over the history of Lisp. Perhaps for a couple of decades the Lisp world was total chaos like JS is today. But now it isn’t. Why not stand on the shoulders of giants?

If my impression of Javascript is out of date, so be it. It wasn’t my idea to ignore history and push a language which was described by its own creator as having “a lot of stupid in it.” He is still jerking around the world by giving us a browser that shields you from ads so they can give you their ads. And if that isn’t shady enough, Brave is involved with corrupt-o-currency. This guy is the poster jerk for crank magnetism.

I am open to learning new things. Lisp. Go. Elixir. Functional programming. Graph databases. I probably need to learn more about relational databases. Just using Emacs will help you to pick up new things: Org mode, CIDER. I learned some Scheme and Racket and how to get them working in Emacs so I could go through Simply Scheme so I could eventually go through SICP.

I have noticed that when people judge you for not being open to new ideas or learning something new, what they are really doing is being judgemental because you are not interested in what they are interested in. Being open to new ideas does not mean being open to all ideas.

You’re welcome.

Image from the Melisende Psalter, a 12th century manuscript assumed to have been created at the Monastery of the Holy Sepulchre; housed in the British Library as Egerton MS 1139, assumed allowed under Public Domain.

2022-05-18 Update

It is time for another update.

I am done for the time being editing and making changes to my site. For now I will stick with WordPress, and I will leave the old posts intact.

I have been working more with Clojure. I have not done a lot with Programming Clojure, and at some point I plan on finishing it. I need to work on learning more about Clojure and its capabilities, but I think I want to make an app, even a small one. I think it can help some of the information stick more, and after a while just doing tutorials is a slog. Granted, maybe if I kept going for a few more pages, I would read about something that would give me an idea, but for now I will look into other things. I have mentioned this in the past, but I would like to get into the Clojure rules engine Clara. (Granted, there are a lot of things I would like to do.)

I have been looking into web frameworks for Clojure. I started looking into Luminus more. I went through the first few pages of the tutorial a few years ago, but recently when I tried to run the application it did not work. So I started over. There have been a few changes. My goal was to be able to add some code to get the same results as the Rails routes for a database table. I know a lot of people like to make REST apps, but from what I have seen, when people make REST apps they add data by sending JSON requests and typing them by hand. I find this to be tedious. I went through a tutorial on Pluralsight on making web services with Go, and typing requests in Postman was a drag. This was a few years ago, and I looked at Postman again more recently for work. There were limits on what you could do with the free version. Maybe making forms on HTML pages is more work, but I was put off by Postman.

So I started going through the Luminus tutorial and taking more thorough notes. I went to the Luminus channel on the Clojurians Slack, and someone made a reference to a new framework named Kit. The developer behind Luminus (who goes by “Yogthos” online) is one of the Kit developers. I get the feeling that Kit is intended to replace Luminus. Judging by the projects’ commit histories, Yogthos seems to be spending more time on Kit than Luminus lately. He has a post on his website about Kit; he never comes out and says that Kit is replacing Luminus, but that seems to be the takeaway. Another one of the Kit developers has a post on his site here.

Also, Kit uses the Clojure CLI tools. Luminus uses Leiningen, and gives you the option to use Boot as well (which I think is a hint that Luminus will get less attention going forward than Kit). The CLI tools seemed to have killed Boot stone dead. The most recent tag in the Boot repo was on 2019-04-13. (Granted, Luminus’s most recent tag was in 2015.) I have been seeing fewer mentions of Boot since the CLI tools came out. I think CLI really took away a lot of Boot’s momentum. I am getting the feeling that CLI is also taking some mindshare from Leiningen, although this is happening more slowly since Boot was not as popular as Leiningen. It looks like CLI tools are the future.

So I have also spent some time with the CLI tools. There is a site with some Clojure tutorials called Practicalli. They have a nice page on the CLI tools and a repo with a nice deps.edn config file. For the most part it is pretty easy, but it is a drag learning something else. I am not sure I have got the hang of using CIDER with the CLI tools. I had to run the app in one terminal, and fire up Emacs in another to use CIDER. With Leiningen, I could do it all in Emacs.

Another difference is Luminus manages state with Mount, while Kit uses Integrant. I need to spend some time studying Integrant.

I then “pivoted” to Coast, a web framework that tries to be the Rails for Clojure (site here, Github repo here). It has been around for a few years. I did not look at it because it uses the CLI tools, and for a long time I was not interested in learning about CLI tools. Coast also uses make, which strikes me as odd. Right now I am intersted in making a web app in order to quickly work with data, so I thought that since I am looking into CLI tools, why not try Coast. Plus it looks like Kit is still a work in progress (the devs pretty much said that on Slack), so I will let it percolate for a while. Interesting note: I think Yogthos starting working on Kit not too long after the third edition of his book came out.

Coast uses Make for some tasks. That is make, or as cats on the internet would put it: The thing that runz ur see code. Although if you look at the Makefile, the Make commands are aliases to clj commands. So if you really wanted to stick with pure Clojure, you could just run the clj commands.

Recently there was a post on Hacker News about a new web framework for Go called Bud (Hacker News post here, Github repo here). One of the commenters told the Bud developer to try to avoid the word “framework” because a lot of people in the Go community hate the concept, even though some commenters thought that frameworks are useful. When I was in The Starter League, one of the instructors said he liked to handle sessions and authentication himself. I never understood this mentality. A lot of web apps are going to have common needs: handling sessions, routes, authentication, authorization, database connections. What you usually care about is what comes after. I would like to make some pages so I can create data so I can look into a rules engine.

I think you are more likely to make changes to an existing app than build one from scratch. So score one for the framework crowd. Plus, whether the anti-framework people like it or not, this question will come up until there is an answer. I bet nobody looks at Ruby and asks how to write a web app in Ruby.

You’re welcome.

Image from an 11th century manuscript known as Dionysiou 587, created and housed at the Monastery Agios Dionisiou on Mount Athos, assumed allowed under Public Domain.

CJUG Presentations

This is the second (and probably last post) about my time with CJUG and CJUG presentations.

Note: I have edited this page several times, and I cannot get the formatting to look the way I want. WordPress does weird things with paragraphs in list items and spacing between list items no matter what I do. I originally exported from Org mode, and at one point I edited the HTML and pasted that it, and it still does not look the way I want. A few times I got it to look the way I want in the WYSIWYG editor, but it was different after I hit “Update”. For now I will just leave it. Perhaps it is time to look at something other than WordPress.

I downloaded the posts from the old CJUG blog, and kept them on my website for years. I have decided to get rid of those posts. Here I will make a few notes about the projects/frameworks that are still around and/or look interesting to me. You can still find the old CJUG blog at archive.org (you might have to use the side menu to look at the old posts). I did not attend any CJUG West presentations.

Before going through the old posts, I had this notion that CJUG had dwindled to nothing before I showed up. That is not entirely true. Until about 2008 there were a lot of people attending. They had some pretty big names come in: Gavin King, Martin Fowler, Marc Fleury. Then for a while it was pretty bare. Sometimes it was just me, a guy named Rakesh Vidyadharan (who was the acting president for several months) and the presenter. Sometimes Rakesh was the presenter. But there were some meetings at Loyola that had decent turnouts, sometimes a dozen people. Rakesh did a good job of building it back up and kept things going when nobody else would. The meeting where the presidency was handed off to me had a decent turnout. (This was also the day of the infamous meeting where we had to change buildings.) The handoff had to be postponed for a month.

Still, I think it is fair to say that before I took over attendance had gone down a lot. Most of the board and officers seemed to move on. One was getting his masters in CS (at Loyola). A couple of others went on to Rails (this was about the time Rails was setting the world on fire). After I started running it, we never had single-digit attendance again. All in all, I would say I did pretty well.

I think I got the job because nobody really wanted it. Java had lost some of its buzz. I have a blog post about the CJUG elections stating that 2 people applied for 4 positions. I think it was Homer Simpson who said the most beautiful phrase in the English language is “by default”.

Before I became President, I spoke to someone who spent a year in Salt Lake City. He told me that he got a lot of reminders about presentations in Salt Lake City, and not much from CJUG. I did start posting more to the list and the blog. Afterwards I always posted to the blog thanking people for attending, thanking the presenter (when it wasn’t me) and thanking any sponsors and our hosts.

I imagine that running a group now is a lot different. You can have meetings over Zoom or WebEx, so space and food are not a problem. Content is still a challenge.

  • 2006-02-21: Spring Web Flow at CJUG West. Honestly, I think I am done with Spring. I will say that Spring Boot looks interesting, and would probably solve a few pain points at my current job. If I do Java at another job, I would like to try other frameworks: Dropwizard, Javalin, Quarkus, Spark, Vert.x (which I am leery of since it is an Eclipse project), Web4J from the guy behind Java Practices, as well as a few mentioned later in this post.I took a few tutorials on Spring. They mentioned that a lot of Spring developers got tired of writing XML and they preferred writing Java code, so Spring started using annotations for configuration. Now it seems like in Spring you just mess with annotations instead of XML or writing Java.
  • 2006-06-01: Lucene at CJUG West.
  • 2006-07-06: Rich Client Development at CJUG West. I do not know a whole lot about Eclipse Rich Client Platform. Desktop apps have declined in use in the past decade. On the other hand, there is always somebody using something, and like COBOL and FORTRAN, there are probably more desktop apps and developers out there than people think. Eclipse started in IBM, and at this point I am leery of IBM. IBM was Microsoft before Microsoft: They structure everything to maintain your dependence on them. Even when they open source a project and it leaves the nest, it is more complicated than it needs to be.There are other platforms for desktop apps that can run on mulitple OSes: Free Pascal and Lazarus, and Google’s Flutter. There is also Gambas, an IDE for BASIC, and there is a company called DevExpress which sells Delphi components. Even JavaFX is still around. Now that I am starting to use Emacs more, perhaps I will have less need for desktop apps.
  • 2006-09-07: Practical Pair Programming at CJUG West. I do not have a lot of experience with Agile. I was on a project that used Scrum. There were a lot of charts and numbers and forms to fill out. To boil it down to a sentence: Agile is about technology teams making their own process and adjusting, it, while Scrum is the business pinheads doing what they always do: making it about metrics and numbers and generally missing the point. On the Scrum project, there was a lot of “grooming” of stories. It involved a lot of time sitting in a hot, crowded room that had more chairs than necessary.The first time I heard about Agile was at a CJUG presentation (which was before the blog posts I was able to save) and the presenter said one thing he loved about Agile was that it used terms people understand: People know what a story is, but not what a “use case” is. But I don’t think Agile people use words that people understand. They use words people understand and give them different meanings, which I think is even worse. The uses of the words “Sprint”, “Story”, “Epic”, “Grooming” and “Spike” in scrum/agile are different than they are in other contexts.Like REST and Roy Fielding’s dissertation, the Agile Manifesto is not an ISO standard. You can do whatever you want and call yourself “Agile”. I think a lot of the practices associated with Agile are from Extreme Programming (aka XP). I know the term “Extreme Programming” was coined by Kent Beck, who also signed the Agile Manifesto. What is Agile and what is XP is kind of fluid.

    The Agile/XP practice that I got the most value from was pair programming, yet it was the one we did the least. It never seemed to be the default. It was a fallback when someone was stuck. But when I paired with someone, we were usually able to solve in less than 20 minutes something I had struggled with for far longer. They did not give me the answer, we just figured it out more quickly together. I guess measuring output is more important to some people than producing it.

  • 2006-11-02: JRuby at CJUG West. I have tried JRuby, and I do not like it. I know that some Ruby people like it because Ruby was not able to handle multiple threads (I do not know if that is still true). Coming at it from the Java side, I honestly do not see the point.I went to the GR8 Conf a few years ago, and Guillaume Laforge told some of us about the origins of the project and how he got involved. He was the head of the project for several years but did not initiate it. He said one of the initiators was trying out Python on their laptop at an airport. Python has an interactive shell like Ruby, and he thought, “We need something like this in the Java space.” And that is how Groovy was started. So if you want an agile, dynamic scripting language on the JVM that can also be used to build large applications, that is what Groovy is for. It is made to work with Java. JRuby is like sticking a square peg into a round hole. I always got the feeling that Java shops that use JRuby use it to impress their Ruby friends. News flash: They won’t care, and you are making you life more difficult than you need it to be.
  • 2006-12-07: Spring AOP at CJUG West. There was a later presentation on aspect-oriented programming at a downtown meeting, and I think I attended that one. I will leave comments there.
  • 2007-01-16: Network Attached Memory at CJUG Downtown with Ari Zilka. Ari Zilka founded Terracotta. He is a really smart guy; I should look him up and see what he is doing. He also spoke at CJUG downtown again in 2010 about Ehcache. This was around the time MongoDB was the big thing because “SQL is not web-scale”. Ari said that the people who think SQL cannot scale really do not know what they are doing. (Perhaps we should call him “Ari Zinger”.) Granted, he was at CJUG to talk his book, and MongoDB is still around, but the “NoSQL” hype has died down. Why learn a whole new database technology when you can use some open source projects to help you scale?I have heard the idea that a lot of people would not need extra tech for their relational databases if they knew the relational model better quite a few times. That is one thing on my ever-expanding to-do list. I honestly do not know if I could explain the different levels of database normalization.
  • 2007-03-10: Enterprise Search Technology at CJUG Downtown. This was about internal search for a corporation. The speaker was from a company named Dieselpoint.
  • 2007-04-17: Tomcat Security at CJUG Downtown.
  • 2007-05-15: Echo2: Ajax-based Web Development Framework at CJUG Downtown. The repo for Echo3 has not been updated since 2018, so I think this one is dead.
  • 2007-06-07: Another presentation about Eclipse RCP at CJUG West by the same guy who did the last one.
  • 2007-06-19: Agile and Secure: Can We Be Both? at CJUG Downtown.
  • 2007-07-17: JBoss Seam at CJUG Downtown. According to the Seam website, this project is dead.I had a job using Seam. I hated it. The boss said he was disappointed that I was not more involved in making decisions about their product. I said nothing because my only suggestion was to stop using Seam, and I knew he wasn’t going to do that. I remember one day one of the co-founders and I spent several minutes trying to get the other co-founder to grasp the concept of the sunk-cost fallacy. But looking back I cannot remember which one got it and which one did not.I do not remember what I did not like about Seam. I am just glad it’s dead. If you ever wondered why nobody cares about Gavin King any more, I think Seam is part of the reason.
  • 2007-08-21: Google Web Toolkit at CJUG Downtown. My understanding is that with GWT you can write the front-end of your app in Java, and it will transpile into Javascript. Granted, the site does not use any form of the word “transpile”, and I do not think I encountered the word “transpile” until just a few years ago, but that sounds like what is happening.Honestly I do not know why GWT is more popular. And I do not get why JavaScript is so popular. Why so many people think EVERYTHING has to be in Javascript. A lot of people only seem to know Javascript. It is like a dumbing down of technology. Javascript is to a lot of technology people what Microsoft is to a lot of business pinheads: It is the one thing they cling to, and the rules are different for it than they are for everything else, just because * * jazz hands * *It is bizarre to me the way some people complain about Java, and the semicolons, yet Javascript which stacks braces, parentheses and semicolons (and is so awful that people build entire languages to shield them from it) gets a total pass.

    Anyway, GWT looks interesting, and it is something I will keep an eye on. I think Vaadin uses GWT.

  • 2007-09-06: Dynamic Languages and the JVM at CJUG West: JRuby, Groovy and Rhino.
  • 2007-09-18: Groovy/Java Integration at CJUG Downtown. This presentation was given by Jeff Brown of Object Computing, one of the companies contributing to Grails.
  • 2007-10-16: Grails at CJUG Downtown.
  • 2007-11-20: Overview of Coherence Data Grids at CJUG Downtown. The presenter was Cameron Purdy. Oracle Coherence is now open source. From the Github page: Coherence is a scalable, fault-tolerant, cloud-ready, distributed platform for building grid-based applications and reliably storing data.
  • 2007-12-18: Aspect-Oriented Programming and Software Design in Java and AspectJ at CJUG Downtown. I never quite got AOP. I understood it when I was reading about or hearing a lecture, but it never quite stuck. When I learned about metaprogramming in Groovy, then the ideas seemed to stick. AOP uses a lot of terms that it either makes up and do not really make any sense (“join point”, “point cut”), or like Agile/Scrum they use everyday words and give it a different meaning (“advice”) which makes it all less clear. In Groovy the terminology is more verbose but at the same time more clear. I prefer clear over concise.
  • 2008-01-15: JavaFX Script at CJUG Downtown. JavaFX is still around, but JavaFX Script has been discontinued.
  • 2008-02-19: JSR 170: Content Repository for Java technology API at CJUG Downtown.
  • 2008-05-20: Object Databases at CJUG Downtown.
  • 2008-06-05: Inside Spring Batch at CJUG West. I think this was the last CJUG West presentation.
  • 2008-07-15: Another presentation on JRuby at CJUG Downtown.
  • 2008-07-29: Cloud Dreams: From Ideas to Innovation at CJUG Downtown. I think this is one of the first times I heard about Amazon Web Services.
  • 2008-08-19: An Architect’s View of Domain Specific Language (DSL) for Enterprise Applications and Services at CJUG Downtown. The presenter was from a now-defunct company called Skyway Software. They had a RAD tool based on Eclipse that you could use to quickly build web applications.
  • 2008-09-16: OSGi – Why Java Modularity Matters at CJUG Downtown.
  • 2008-10-21: Open Source Barometer at CJUG Downtown. This was a presentation by Alfresco Software about how their customers use open source. As of 2022-04-23, you can still read about here and here.
  • 2008-11-18: Zero Turnaround in Java at CJUG Downtown. This was about the product now known as JRebel. It allows you to deploy Java class changes immediately without a full restart. I think Spring Boot also has this capability.
  • 2008-12-16: The Seductions of Scala at CJUG Downtown. No comment.
  • 2009-01-20: Maintaining agility on a mature project at CJUG Downtown. This is when I found out that “spike” is another word that agile people use differently.
  • 2009-02-17: iPhone SDK: Java Developers Perspective at CJUG Downtown. From the summary: ” This presentation will introduce Objective-C/Cocoa to Java Developers and show how Java developers can get productive with the technology very quickly.”. This really had nothing to do with Java. Whatever the opposite of “Peak CJUG” is, this might be when we hit it.
  • 2009-03-17: Exploring Terracotta at CJUG Downtown. This presentation was by Alex Miller. Back then he was with Terracotta. Now he is with Coginitect working on Clojure.
  • 2009-04-21: Scripting on the JVM at CJUG Downtown. Yet another JRuby/Rhino/Jython talk.
  • 2009-05-19: Don’t Do This! How Not to Write Java Software at CJUG Downtown. Here are some bad ideas from the summary:
    • This code will never be used in a multithreaded environment.
    • Just because you’re paranoid doesn’t mean you shouldn’t check for nulls!
    • Comment everything!
    • I’ll create my own JDBC Connection, thank you very much!
    • Why retest when you can copy and paste?
    • Why use two methods when one will do?
    • Here, have an exception.
  • 2009-06-16: OpenSSO and Identity Federation at CJUG Downtown.
  • 2009-07-21: Google App Engine for Java: welcome to the cloud at CJUG Downtown.
  • 2009-08-05: Programming Clojure at CJUG Downtown. The presenter was Stuart Halloway. Despite my current interest in Clojure, I do not recall attending this one. There was another presentation later that month, so perhaps this one was thrown together very suddenly.
  • 2009-08-18: GridGain – Open Cloud Platform at CJUG Downtown. You can find the GridGain page here. I made a blog post on 2009-08-26 that the handover of the CJUG presidency was postponed since one of the current acting officers was not there.
  • 2009-09-15: Flex and Java at CJUG Downtown. The presenter was James Ward. This is when the CJUG presidency was handed over, and this was the disastrous meeting where we had to go to another building halfway through. Adobe gave Flex to the Apache project, and the last update was in 2017. Flex was based on Flash, so I am guessing it is dead. This was not anti-Peak CJUG. This was anti-anti-anti-Peak CJUG.
  • 2009-10-20: Testing the Web Layer at CJUG Downtown. Another not-Peak CJUG moment. The speaker was from No Fluff Just Stuff. Smart guy, but not a Java guy, which is kind of an issue for a Java group. No Fluff sent us a speaker every year and let us raffle off a ticket to that year’s Chicago event. That year they chose the speaker, and we had to choose the topic, none of which were JVM related. Back then NFJS sold itself as “Like JavaOne, but it’s cheaper and it comes to you”, so getting a non-Java speaker was a bit frustrating. Now they have some conferences that are focused on JavaScript, but I think “Woodstock for Java without the mud” is still their main focus.
  • 2009-11-17: Java Content Repository (JSR 170, 283) at CJUG Downtown.
  • 2009-12-15: JavaFX at CJUG Downtown. There was also a presentation by a recruiter on interviewing. I had hoped to have more presentations on all the things tech people need to do but don’t want to think about, but that did not work out too well.
  • 2010-01-19: Lightning Talks: JackRabbit Configuration, Apache James, JUnit Testing Tricks, More? at CJUG Downtown. Three board members gave lightning talks. Rakesh Vidyadharan gave a follow-up to his November talk; he spoke about JackRabbit configuration and deployment models. I spoke about configuration of the Apache James email server and the future direction of the project. Jim Breen reviewed the proposal to add closures to JDK 7.
  • 2010-02-16: Instant Messaging and DSLs in Java at CJUG Downtown. This was hosted by a company called Dotomi, which I think was in the West Loop. The speaker was Yair Goldfinger. He was one of the original developers of ICQ, one of the first instant messaging applications. He spoke about that as well as DSLs in Java.They made ICQ because back in those days people still used modems over phone lines. If you were on the computer, you could not be on the phone. So they made ICQ so they could chat while online. I honestly think he lifted some of his DSL presentation from this InfoQ article dated 2008-02-19. His presentation is the first time I had heard of fluent interfaces (check) and I am pretty sure one of his examples was about booking a vacation at the Paris Hilton (check). Maybe the authors got their information from him, or they had worked at Dotomi, but I am pretty sure the article and the presentation have some of the same material.
  • 2010-03-16: Agile All The Way Down and Update On the Oracle/Sun Merger at CJUG Downtown. Earlier that day Oracle had a seminar about their merger with Sun and how it would affect their product lines. I went, took notes, and gave a presentation about it. There was also a presentation by Bjorn Freeman-Benson about New Relic.
  • 2010-04-20: Tomcat 6 at CJUG Downtown. This was the meeting where we were in a different room that had a very large projection screen but could not get a projector. This is when I decided that we needed to find a different location than Loyola. The speaker did well under the circumstances.
  • 2010-05-18: Google DataStore API and App Engine Deployment at CJUG Downtown. One speaker covered the low-level APIs, and another covered deployment.
  • 2010-06-15: Liferay Caching at CJUG Downtown. I think this was the first meeting at ThoughtWorks.
  • 2010-07-20: JavaFX 1.3 at CJUG Downtown. This presentation was given by Sten Anderson, who also gave the JavaFX presentation on 2009-12-15. He mostly talked about the new features in 1.3.
  • 2010-08-17: ActiveJDBC at CJUG Downtown. The presenter was Igor Polevoy. ActiveJDBC is a Java implementation of the Active Record pattern. It is part of JavaLite, “a cohesive collection of frameworks designed from ground up to add pleasure back to your daily life.” It is still used and still maintained. Here is a link to the presentation. This is another technology I will keep an eye on.
  • 2010-09-21: What’s Brewing in Java at CJUG Downtown. I think this was the first presentation at CME. The content was about changes in the upcoming version of Java. You know it was good, because it was Venkat.
  • 2010-10-21: High-Performance Scalability for Enterprise Applications with Enterprise Ehcache at CJUG Downtown. This was Ari Zilker’s second time speaking at CJUG. I think this is when he told me a lot of people using NoSQL think they have to because they do not understand RDBMSs very well. He was probably talking about document databases like MongoDb, since some NoSQL technologies like graph databases are never touted as replacements for relational databases.
  • 2010-11-16: Intro to Hadoop at CJUG Downtown. Back in the day when “MapReduce” was an exotic procedure. Again, this is a time when bad terminology makes a simple concept harder than it needs to be. I think “map” is a bad name for what the map function does (I think “apply-to-all” is better), and “reduce” is an even worse name (surpassed in badness only by “fold“, which is the same thing as reduce; I think “accumulate” or “aggregate” are better).
  • 2011-01-18: What’s new in Java EE6 at CJUG Downtown.
  • 2011-02-15: Drools at CJUG Downtown. I use another rules engine at my job, so I might look into Drools. One issue is I think you have to run it in a web app. At least the Drools docs only talk about using it that way. Drools is one of those JBoss projects where you have to do five things in order to do the one thing you really want to do. I think Clara can handle rules outside of a web app.
  • 2011-03-15: Android at CJUG Downtown. I gave this presentation. You can find it here. I did it because I wasn’t able to get anything lined up in time. Sometimes you have to do that when you run a group.
  • 2011-04-11: Groovy on Grails at CJUG Downtown.
  • 2011-05-17: Java and R at CJUG Downtown. This was a presentation on using Java with the R language. It seems like R has been supplanted by either deep learning libraries in various languages (many of which are wrappers around C or Fortran libraries) or Julia.
  • 2011-06-21: Arquillian at CJUG Downtown. The speaker was Andrew Lee Rubinger. Arquillian is an integration testing framework that tests J2EE apps without using mocks or requiring a full deployment. Like many JBoss projects, some of the links to their own sites are dead. I might suggest this at work. I think this might be something we need. Their website does not state this, but I think the etymology of “Arquillian” is that it is a species from the film Men In Black.
  • 2011-07-19: Play Framework at CJUG Downtown. The Play Framework was a Java web framework that uses REST and convention over configuration. It is a stateless, asynchronous, full-stack, pure Java framework that aims to help web developers have more fun and be more productive. Then Lightbend decided to make it all Scala. There is a Java web framework called Ninja that I think came about because some users of Play did not like Scala. (A note to Scala developers: A lot of people do not like Scala, and never will. Stop trying to make us do stuff in Scala.)The speaker was Jeff Schwartz. He gave a presentation about Play at another meetup, and I asked him if he would be willing to give the presentation to CJUG.
  • 2011-08-16: ActiveWeb at CJUG Downtown. This was another presentation by Igor Polevoy. ActiveWeb is the web framework component of JavaLite. Check out the presentation, see the lite.
  • 2011-09-20: State of Java at CJUG Downtown by Roger Brinkley. He was a Java developer advocate. I am not clear what he is doing these days. Based on his Twitter feed, I am guessing he is retired.
  • 2011-10-18: Gradle: Bringing Engineering Back to Builds at CJUG Downtown by Tim Berglund. This was the first time I had heard about Gradle. I used to use Gradle when I was into Groovy. I liked it. You don’t need it for Clojure, so I don’t use it much anymore. They went to Kotlin and all my scripts broke, and they changed a lot of the API function names. I am not saying I will never touch it again, but changing the names of an API that was notoriously difficult was pretty dumb. It’s not really any different, just the names are different.
  • 2011-11-15: Security In Java at CJUG Downtown.
  • 2012-01-17: Tips and Tricks for Writing Low Latency Java Applications at CJUG Downtown. This was well-attended. The presenter was Charlie Hunt, who at the time was JVM Performance Engineer at Oracle. He wrote a book on Java performance. He offered to sign any copies people brought to the presentation.
  • 2012-03-20: Graph Traversals in Neo4j with Gremlin Java at CJUG Downtown. From the presentation: Graph databases are a NoSQL/polyglot persistence solution that provide a natural way to model complex, interrelated data.
  • 2012-04-17: Real World Groovy on Grails at CJUG Downtown. This was at Jak’s Tap instead of CME.
  • 2012-05-15: Build your own CMS with Apache Sling at CJUG Downtown. This was at the Sears Office (not the building now known as Willis Tower). The presenter was Bob Paulin, who helped run CJUG after I left.
  • 2012-06-19: JavaFX at CJUG Downtown with Roger Brinkley.
  • 2012-07-17: Spring Data at CJUG Downtown. The presenter was Andrew C. Oliver who wrote the POI library.
  • 2012-08-21: CDI meets GWT within Errai at CJUG Downtown. I have the announcement in my “Sent” folder, but I have no memory of it, and I do not remember ever hearing about the Errai Framework.
  • 2012-09-18: Embedded Java at CJUG Downtown. This is the last meeting for which I sent out an announcement, and the last I attended.

You’re welcome.

Image from The Codex of Fernando I and Doña Sancha, aka Beatus Facundus, an 11th century manuscript manuscript of ‘Commentary on the Apocalypse‘, written in the 8th century by Beatus of Liébana; manuscript created at monastery of Santo Toribio de Liébana  (Wikipedia page here), currently housed at the National Library of Spain; manuscript information here. Image from World Document Library, licensed under CC BY-NC-SA 4.0.

My CJUG History

As part of my site changes, I am getting rid of my pages about CJUG, the Chicago Java Users Group. I will post about my time with CJUG, as well as list some of the technologies/projects/frameworks that were interesting, with an emphasis on the ones that are still maintained and used.

I also had posts from the old CJUG blog. But now many of the links are dead, and many people are doing completely different things, so I will just put it all on disk and send those posts to the void.

This post will give my history with CJUG, and later I will post about the technologies that were presented which look interesting and I think are still maintained. There is also a big chunk about why I do not like Scala; I have been thinking about writing a post about why I do not like Scala, and this felt like a good a time as any.

I lived in Chicago for 14 years. For about 12 of those I was going to CJUG, as an attendee, sometimes as a presenter. For two years I was CJUG president.

The location changed over time. Before I ran things, some were held in the AT & T building (which is now the Franklin Center), the Bank of America building at 231 South LaSalle (which is now the Central Standard Building), and for a time various buildings at Loyola University. Loyola is about seven miles north of the Loop in Rogers Park and Edgewater. Attendance went down when the group moved there.

I am not too clear why the location changed up to Loyola. I know that one of the board members was on the CS faculty at Loyola, and he reserved rooms for us. One difference between Chicago and Austin is that Chicago feels like it has a center in the Loop; not just geographically, but culturally and financially as well. The Capitol is in the center of Austin, yet there is not as much concentration of businesses and jobs in that area as there is in Chicago in the Loop (granted, COVID may have changed things). A lot of people who worked in the Loop live outside the city and take the train to and from work. Going a few miles north and then coming back is just not convenient. (See Note 1 below.)

After a while I started to lose respect for our professor. He said we should drop Java and focus on Scala. I never really liked Scala, either the language or the community. It relies way too much on symbols; it looks like a cat walked across your keyboard. Scala is proof that while most things are more pleasant to do in Java than they are in C, Perl is not one of them. It has the syntactical elegance of Perl, with the simplicity and focus of C++ (that statement is both literal and sarcastic at the same time). I think that like C++, Scala is a multi-paradigm language that most of its users should not be using (or better yet, never invented). The people that seem to use it well are those who stick to a small subset of features; most developers do not do this and instead use Scala as a chance to prove they are smarter than everyone else, and in the end making life more difficult.

I never liked the Scala community in general. I have gotten along with a couple of Scala advocates. I like and respect Dean Wampler (he’s not just a developer, he’s a photographer and has a PhD in theoretical nuclear physics). And how can anyone hate Daniel Spiewak? (If you have Daniel Spiewak on speed-dial, none of these criticisms apply to you.)

The overall Scala community always struck me as condescending, and generally wrong. Scala people love to go around and tell us they are sooooo much smarter than everybody else, and Scala was going to replace Java, and we were all just too dumb to see it, and using all the symbols was so much better, and if all the punctuation looked like line noise, well, again we were all just not smart enough to get it. And did they fail to mention that it is functional? And that anything functional in Java could only have come from Scala, because until our lord and savior Martin Odersky walked the earth nobody ever understood functional programming.

(I never thought Dean Wampler was talking down to anyone, and Daniel Spiewak is too busy moving objects with his mind to say an unkind word about anyone.)

The Scala community can be split into three groups (or kinds, if you will):

  1. People who realize that using all of it is a bad idea, limit themselves to a subset of Scala, and generally have success.
  2. People who try to use as much of it as they can to show how smart they are, and look down upon the rest of the world, including Scala devs in group number 1.
  3. People who started in group number 2 a few years ago, and found out the hard way that not only was group number 1 using Scala correctly, but maybe the Scala critics were right and it really is a mess.

Pro tip for life: Never say that people WILL do something whether they like it or not, or whether they realize it or not. You can say you think people SHOULD do something, or you wish they would. But then, most Scala people are not that bright. Scala never went anywhere. And sometime around Scala 3, Odersky said he was going to simplify Scala. The Scala community again congratulated themselves for Odersky’s brilliance, oblivious to the fact that this move meant the critics were correct. And as far as functional programming goes, while I don’t know about the relationships between the big names in the Java community, I know that Guy L. Steele, Jr has been working on Java for a couple of decades. He was there before Odersky, and is still there. Scheme was basically his PhD thesis. If there was any smack being laid down, Steele explained reality to Odersky, not the other way around. (If there are going to be Chuck Norris facts about anyone in CS, Steele is a top contender.)

Scala is like the first two chapters of the Book of Job. It’s like God said, “What if we made a language as cluttered as Perl, with a community as arrogant as Haskell?”, and Satan said, “Hold my beer.”

So this bozo professor said we should ditch a language everybody uses for one that nobody uses. Like a small child, he thought it was the future because HE liked it. There were a couple of issues. One was that I was getting emails from people (admittedly, a lot of companies pitching products) asking if they could speak at CJUG. Meanwhile, the Scala group was struggling to find material. I was on the mailing list for a while, and most months Deal Wampler would send a message a week before the meeting and say if nobody had anything to present, then he would cancel the meeting. So the second issue is why steal what little Scala oxygen there was from the pre-existing Scala group?

The day I was appointed president we had a presentation at Loyola. For some reason, our reservation was not for one room for the whole period, as it usually was, but split between two rooms. In two different buildings. People were not happy about having to go to a different building halfway through. The final straw was when we had a room reserved, and while this room had one of the largest stand-alone projector screens I had ever seen, it had no projector. I did not have the professor’s number, and there were no students attending. Since neither I nor the speaker were affiliated with Loyola, we could not get a projector. The presenter was Damodar Chetty, and he did very well under the circumstances. Maybe the guy has been cursing me ever since, but at the time he was very gracious.

I posted to the JUG Leaders list for advice on how to handle this in the future. Someone said one thing to do is get the speaker’s notes ahead of time and be ready to print out copies or copy the file from a thumb drive. Another one of those brilliant and practical ideas that never occurs to you when you really need it. My other solution was to find a location in the Loop.

We had a few presentations at the headquarters of Thoughtworks in the Aon Center. This improved both attendance and morale. At least one presenter hosted their talk at the Merchandise Mart. At some point someone put me in touch with a guy who worked at the Chicago Mercantile Exchange, and we started having presentations at The Merc. That was the best location. Close enough to the Loop for the hipsters, and close enough to Union Station for the suburban dads. We had meetings on the third Tuesday of the month. All I had to do was see if the presenter could be there on that day, and call my contact at CME. He would reserve the room and order food once I had a count of the people. Some months I had multiple people wanting to speak, and some months I had to scrape something together myself. With regards to content, running a group is like living paycheck to paycheck.

After the Great Recession, I was let go from my job. Bank Of America lost billions after they bought Countywipe, and they decided to try to make it back by getting rid of me and a few thousand other people who had done everything they asked us to do. (Life pro-tip number two: Never buy anything from a guy who looks like a bizarre comic book character; see here and here for comparison.) I got a job with a startup that only lasted a year. Then I learned Rails. I tried to get a job with a particular firm in Chicago, but after a few months, the CEO said no. I needed to find work, and I got a job in Austin. I had to resign from CJUG rather suddenly. But from what I can tell it is doing pretty well these days.

There was also a CJUG West that met in Schaumburg. I never attended those meetings. As far as I know, CJUG West stopped around 2008.

You’re welcome.

Note 1: I am not clear on what the office use stats are for Chicago post-COVID. I still get a few emails from organizations in Chicago. One mentioned that tech companies are starting to move into the Old Post Office building.

Image from the Theodore Psalter, a 9th-century manuscript housed in the British Library, assumed allowed under public domain.