2017-05-29 Update

Not much to report on the Scheme and Clojure fronts this week.

I am still going through the Kotlin koans. Frankly, it still seems more verbose than Groovy. There are still a lot of generics, which I think really cluttered up Java.

But it does have some metaprogramming abilities. There is an inline function called sumByDouble that they added for the java.lang.Iterable interface, which includes List and Set. You give it a List/Set of objects, and it will get the sum of one of the attributes that is of type Double. I made one called sumByDoubleEKM, which does the same thing and adds a few println statements.

Maybe that’s not metaprogramming to a Lisp person, but it is nice to be able to add methods to classes. You can also add a method to a class outside the class definition. That seems to be what is happening in the collections koans. And the functional/closure/collection stuff does seem cleaner than what we got in Java 8.

You’re welcome.

2017-05-21 Update

The big news in the JDK space this week is that Android now supports Kotlin. See this page, on the Android site and this post on Hacker News. So I will start learning Kotlin.

I don’t want to turn into one of those Scala weenies who goes on about how much they hate Java (see Note 1 below), but Android development was always pretty ghastly. Lots of XML, lots of anonymous inner classes (at least the last time I looked).

When Java started, it was basically: We took C++, and removed the hard parts you don’t like. Android is pretty much: We are using Java, but mostly the hard parts you don’t like.

I might look into React Native and ClojureScript at some point. But for now I am going through the Kotlin koans. Back when I was living in Chicago (back when Google told you to use Eclipse for Android), I spoke to a mobile developer who wrote apps for both Android and iDrone. He did not use any of the Javascript wrappers. He said the best way to do it was to just do it the way Google and Apple tell you to do it.

Maybe I will love Kotlin, but to be upfront I am not too happy with it at the moment. It is kind of a competitor to Groovy. I have spent a lot of time with Groovy, and I wish that it had more traction. But the world isn’t going to change for me. A lot of people at my job think every gosh darn thing has to be in a Word file. We make a web app for our client, why not make one for ourselves? But whatever.

There is no Kotlin group in Austin at the moment. Officially, there is a Groovy group, but there hasn’t been a meeting since January. The past two companies that hosted are no longer give the group the space. The group organizer works for OCI, the company that supports Grails. He works with clients all over Texas. I guess there is more Groovy out there than people think. Groovy is one of those languages where the user group is full of people who think the language is great, but their companies won’t even look at it. At the last meetup when he said he works with companies large and small all over Texas,  everyone got pretty excited. But he couldn’t give out any more info because of NDAs.

I know this sounds like I am not oozing with enthusiasm about leaving a language I like for one that I do not know very well. Frankly, at this point, I am not. But it looks like this is where the world is going. Kotlin had already gained a lot of momentum on Android before this (more than Groovy, certainly). If Google is willing to listen to its developers, then maybe Google is a vendor to pay attention to. Unlike Shiny-Wrapper-Microsoft (aka Apple).

Kotlin does have some similarities to Scala, which I do not like, so we will see how this all goes.

So, not a whole lot on the Clojure front.

I am still going through Simply Scheme.

You’re welcome.

Note 1: I always found Scala developers’ hatred of Java odd for two reasons: 1. The language you say you love was/is implemented in the language you say you hate, and 2. Why does Javascript get a complete pass from everybody?

2017-05-14 Update

It’s time for another regular update.

Lately I have been getting more into Scheme again. I am going through Simply Scheme. Maybe it won’t help me get a job right away if I need one (who knows what could happen at a large corporation), but I have read and heard a lot of people say that Lisp/Scheme makes you a better programmer. I don’t simply want a good job and lots of money, I also want enlightenment.

I tried to use Kawa for Simply Scheme, but I could not get it to read the simply.scm and functions.scm files, so I decided to just go with Chicken Scheme. Both that and Guile can run the example files. Simply Scheme pushes itself as a prequel to SICP. One thing I find a bit odd is the talk of “word” and “sentence” as data types. But I am getting used to it.

I worked a bit on the Groovy Validator project. I might re-do it using run-time metaprogramming instead of compile-time. Using compile-time I had to use string interpolation to create another class with the same package and name as the class I am working on. It works, but it feels kind of dirty. If I go with strictly run-time, I will only be able to get it to work with Groovy properties:

and not with setters:

It is not as flexible, and it does not with using the “with” method, but using properties seems more idiomatic.

Not too much happening on the Clojure front for me lately. I think Simply Scheme exhausted my Lisp quota for the week. Hopefully I can do Clojure and Scheme at the same time. I started changing my emacs environment using the tools from Brave Clojure, and so far they seem pretty nice.

I have been going to the Austin Ruby Microservices Meetup (which is totally separate from the Austin Ruby Meetup and Austin On Rails). They are teaching people how to build microservices using event-sourcing. This is kind of new to me. I have never heard of event databases before. But if I can build thread-safe systems, then I am interested. A lot of it sounds like the sort of thing I hear from the Clojure and functional camps: immutability, thread-safety.

I might re-implement it in Groovy (and later Clojure). The group organizer said that was unnecessary, since JRuby runs on the JVM. I told him that in my opinion JRuby people seemed mostly like Java programmers jumping through a bunch of hoops they don’t need to jump through just so they can tell their friends they are using Ruby. He said JRuby is only tough if you are doing Rails, but I do not care. I had to do it in the past, I am not touching it again. Besides, agile and dynamic scripting on the JVM is why Groovy was invented. JRuby is trying to stick a square peg in a round hole and fill a niche that another language has already filled. It’s a solution looking for a problem. No thanks.

You’re welcome.

2017-05-01 Update

Per the advice of Nathan Marz and Dan Vega, I will try to blog more often.

I got a new laptop. At least new to me. My main laptop was starting to use the battery even if the charger was still plugged in. I took it to Discount Electronics, and they couldn’t find anything wrong. But I saw a used Dell for a good price. I asked how much would it cost with more memory and a 500GB hard drive, and it was still a good price. Cheaper than a new one.

From what I understand, UEFI and Secure Boot have made installing Linux a bit trickier than before. It used to be that you could just go to Best Buy, get a random laptop, put in an install DVD, and keep hitting “Next” until you had Linux installed. This seems like a step backwards. Some admins say “all you need to do is hit F$RANDOM_NUMBER, so into the BIOS and disable Secure Boot.” I am tired of going into the BIOS. That reminds me of what installing Linux used to be like.

If I buy a laptop with Linux pre-installed, I will probably go to System 76.

After installing, I locked myself out of my laptop because the GUI would not start. I went with Ubuntu, and usually one of the first things I do is get rid of Unity. I have never liked it. I ran a few commands to get rid of it, but when I rebooted I got a black screen. So I had to re-install and try again.

Now it looks like Ubuntu is dropping Unity. Fine with me.

For future reference, the magic command is:

You’re welcome.

No Longer Using aTunes

First off, that is not a typo: I really meant aTunes and not iTunes.

For the past few years, I have used an application called aTunes to fetch and listen to podcasts. One reason is I am pro-Java, and I generally prefer to use Java technologies where and when I can. Another is that it is NOT something from Apple. I have always found it strange that lot of people in technology will say they are pro-open source, and they don’t trust Microsoft or other big corporations and think are they too smart to let The Man tell them what to do, yet they will buy anything from Apple without question. I like to strive for consistency.

aTunes has not been updated for a couple of years. I know that the makers of the JDK strive for backwards compatibility, but I think at some point it might be best to use something that is maintained. Plus I had a hard time getting aTunes to work the last few times I tried it. I think I had to go a couple of versions back on one of my laptops.

There is another music player written in Java called Jajuk, but that has not been updated for a while either.

I did some digging, and I found a multi-platform music player called Clementine. So far I like it.

So far, I am still using jEdit, but I am getting more into emacs lately. There is an emacs Meetup here in Austin. For a long time it met around noon, but now it meets in the evening.

You’re welcome.

Image of aTunes from Wikipedia, image of Clementine from Wikipedia. Images assumed allowed under Fair Use.

Rebooting Ubuntu After It Goes Read-Only

Sometimes my Ubuntu laptop malfunctions and the file system goes into read-only mode.

This might mean it’s time to upgrade to a new laptop. Which I will probably do in a few months.

But I want to note how I can get back to normal.

The obvious way is just to reboot. But sometimes the system goes into a initramfs prompt.

To solve the issue, I need the location of my drive in the /dev file system, which I can get by running df -h:

The one I want is “/dev/mapper/ubuntu–vg-root”.

So in the initramfs prompt, I run this:

I got this answer from the Ask Ubuntu site (see another answer here). As long as I can access my site from another machine, I should be able to solve this.

I may need to get a new laptop soon because sometimes my laptop does not detect the power chord is plugged in, so it starts using the battery.

You’re welcome.

Yet Another Change In Plans

I am getting a bit frustrated with Realm Of Racket.

I am going through chapter 8. I downloaded their source from github and tried to run it locally. It does not work for some reason. It works if I clone the repo and run it from there. But it should still run somewhere else. I have the same directory structure as they do. I really don’t feel like debugging it.

I couldn’t get their example from chapter 6 to work either.

I will try to run some Scheme in DrRacket. If that does not go well, I will just go back to Clojure.

You’re welcome.

Back To Racket

I am back to going through Realm Of Racket. I am not doing the challenges. I guess I want enlightenment sooner rather than later. Or just cross this off my list.

I am doing it because I get the impression that it can be hard to get through some of the Scheme books using the Scheme implementations available.

There is one Scheme implementation that looks interesting is Kawa, which is written in Java.

You’re welcome.

Back To Clojure

My Plan To Be The Smartest Person Ever is changing yet again. I have decided I will focus on Clojure for the foreseeable future.

I was at the Austin Clojure Meetup last Saturday, and I spoke with another member who I first met when I lived in Chicago, and was a gung-ho Ruby person for quite some time. Over the past year, this person has decided to look into Clojure. They interviewed recently for a Ruby position and a Clojure position. They got stumped on both interviews, and decided that they wanted to go all-in with Clojure, and recommended that I do the same.

They also recommended I get a subscription to Purely Functional TV. It seems like the whole point of that site is to help people get Clojure jobs.

I thought about it, and I agree with them. I would like to get a job in some form of Lisp/Scheme, and spend the rest of my life as an Enlightened Lisp Developer. The language that is most likely to make that happen quickly is Clojure.

One thing that cemented my decision is I went to a heated Vinyasa yoga class this weekend, and I realized I am not as fit as I wish I was, and I am not where I need or want to be in any area of my life.

(But I might still work on my Groovy Mail Server.)

You’re welcome.

Note And Plans On Lisp, Racket, Scheme, Clojure and Other Buzzwords

Once again, my plan for the rest of my life is undergoing some revision.

My plan a week ago was to put 4Clojure on hold. I have tried it a few times and just wind up randomly scanning the Clojure cheat sheet for whatever function will get all the sub-problems to work. My plan was to just go through the Clojure cheat sheet and try out each and every function so I am at least a tiny bit familiar with them all.

Then I went to Austin Clojure last week. The speaker was Alex Miller who works on Clojure at Cognitect. He went over transducers. I understood it while I was there, but a week later it’s a bit fuzzy. A few things I think I remember: They do not give you any speed benefit unless you have large collections. But you should avoid them if you are using a function that returns a lazy sequence or an infinite sequence, like range.

Also: I should go through all Clojure code I have and ensure that all uses of reduce supply the “val” argument. Apparently they guys at Cognitect prefer that version.

Then someone mentioned 4Clojure. A few people mentioned that the difficulty curve shifts pretty suddenly, so I did not feel too stupid. Then Alex Miller said he never finished all the 4Clojure problems. So I thought that maybe I should learn Clojure and Lisp another way.

I know this might put off my Clojure/Lisp enlightenment, and probably delay any Clojure/Lisp employment, but I am thinking about trying Racket and going through Realm Of Racket. It is based on Scheme, and bills itself as a Scheme “with batteries included”.

Scheme is intended as a teaching language, so the standard is intentionally small. So Scheme implementations have to fill in a lot of gaps to be useful in production. Which holds back industry adoption. Racket decided to break with Scheme standards and do its own thing to be more useful.

Racket claims to be a “programmable programming language” (but that seems to be true of all Lisps). I have glanced at a few parts of Realm Of Racket, and various web pages and articles and parts of videos, and from what I gather some programmers have used Racket to implement other languages in Racket. Including some versions of Scheme.

Which brings me to the next phase of My Plan To Be The Smartest Person Ever.

After Realm Of Racket, I might go through a few other Scheme books. One I found is Simply Scheme. That is intended as a prequel to the granddaddy of them all: Structure and Interpretation of Computer Programs (see pages on MIT site here and here, as well as pages by Andres Raba here, here and here). Paul Graham wrote that Lisp can make you smarter. Eric Raymond wrote that it will bring you to enlightenment. Many people point to SICP in particular as broadening people’s minds and expanding their understanding (see this page on Quora, this post by Not My Uncle Bob and Why SICP Matters at Berkeley).

But wait, there is more. Daniel P. Friedman of Indiana University wrote a few books on Scheme (a few of which he co-wrote with Matthias Felleisen, one of the creators of Racket): The Little Schemer (1996), The Seasoned Schemer (1996), The Reasoned Schemer (2005) and The Little Prover (2015) (which I think also uses Scheme).

Julian Gamble went through these (and a few Common Lisp classics as well) and did the exercises in Clojure. A noble effort, but I think the best thing might be do suck it up and learn some Scheme and go through the books in Scheme. You would need to work through them in the original Scheme or Common Lisp to redo them in Clojure, so why not learn Scheme? As Chancellor Gorkon pointed out, the only way to truly understand Shakespeare is to read him in the original Klingon.

Scheme is a lot older than Clojure, so for right now there is nothing in Clojure that people can point to and say, “Read this and you will become a much better programmer”. Julian Gamble’s site is the exception, but it seems like a lot of people have tried to go through these books in Clojure, and they never finish or the sites get abandoned. http://sicpinclojure.com/ is one example.

Maybe I will get through Realm Of Racket and decide to change my mind again. Who knows? A lot of this stuff has been on my vaporous to-do list for a while.

You’re welcome.