I’m Carin Meier, I’m the author of Living Clojure. I’m interested in Machine Learning, AI, and more generally any interesting way to think about the world and computation, like Chemical Computing and Genetic Programming. I’ve also dabbled in controlling robots with Clojure as well.
I’m in the US in Ohio (EST) where I’ll be answering any questions throughout the day and tomorrow morning. Let me grab a cup of tea and
You can ask many questions but only ask one question per post
You can vote for questions by giving them likes
Use the “reply to” button on the post you’re replying to, rather than the one at the bottom, this way we can easily move tangential discussion into its own thread
You can select some text from a reply and press “Quote” to quote another post, we recommend using this liberally.
And finally please be aware of the Code of Conduct. Let’s keep things friendly!
Hi Carin, thanks for doing this!
I know you’re interested in deep learning with Clojure - have you been doing anything with both of these recently? Have you had the opportunity to use them in practice?
I’ve been recently started building a cardboard pinball machine to give my 5yo son a taste of making stuff, electronics and a touch of what you can do with programming. I’m using an Arduino for the project, but I would much rather be working in Clojure to build it all, since that would be a whole lot easier to teach later on…
What do you see happening in the area of realtime systems for Clojure? Would it be possible to work at realtime speeds (like arduino), but still be coding in Clojure?
I really like Spheros. There is a good api via bluetooth for general hacking and having fun. For more structured teaching of children, there is even a Educational Sphero that is see through and comes with a app that has drag and drop programming blocks, which is fantastic for younger children.
I prefer higher level robot platforms because I’m more interested in doing complex operations rather than focusing on lower level operations (like teaching a hexapod to walk )
I started off hacking Roombas, then moved to AR Drones and Spheros. The lowest level I’ve worked with was a hexapod robot that I built from scratch Hexapod.
I think your chemical computing blog post and repo are amazing. It really highlights the playful, exploratory nature of clojure(script) as a lisp. I was wondering if you had any other explorations like this in the pipeline.
I’ve been spending quite a bit of time trying to teach myself about the field and just keep up with it. Things move so fast!
Recently, I’ve put some of that knowledge into action by helping to contribute some new activation functions to the Cortex project from academic papers. If you are interested in deep learning and contributing, I would recommend taking look. It is a great project and one that is open and welcoming to new comers.
One of my goals is to help Clojure gain traction in the Deep Learning community, so one of my newest personal projects is to help build a Clojure bridge with MXNet by creating a Clojure module to contribute to the Apache project based off of the Scala version. MXNet is not as popular right now as TensorFlow or PyTorch, but AWS has thrown it’s weight behind it so I think it will continue to grow in the future. I’m still in the early days of development, but hope to have something to share soon.
As far as using Deep Learning in a work setting, I haven’t had the opportunity yet - but of course, I’d love to.
When I was working with my hexapod, I was programming to the XBee via the serial port with Clojure https://github.com/gigasquid/clj-hexapod. I could give it a command in the repl to move forward and it would do it.
I haven’t tried, but I think you can do a similar thing with Ardunio and the serial port clj-hexapod. If I was going to start hacking in that direction, I would try out something like blog post, which should allow sending command from the repl real-time to the board.
The pinball machine sounds like a lot a fun. Good luck!
The post and exploration of Chemical Programming came from a book that I got Unconventional Programming Paradigms, (I think you can see the papers here that are in the book UPP04 Proceedings. In it there were all sorts of cool things like Quantum Computing, Autonomic Computing, Generative Computing, and Chemical Computing. I had no idea what Chemical Computing was and it sounded interesting, so I picked a paper and dove in.
I don’t come from an academic background, so trying to figure out what a paper is about is a challenge for me, especially when it comes down to dense formulas. I found the best way for me to understand is to try to implement the ideas. Clojure, ClojureScript, and figwheel are great for that. You can rapidly try out ideas and see them come to life. It’s great fun.
I do hope to get some time and revisit that book. There is a whole other chapter that called Amorphous Computing that I have no idea what it is. To me, that is the most exciting part! It’s just like unexplored lands
Thanks for doing an AMA! I’ve gone through some material on genetic algorithms and find them to be very interesting. There’s a few videos on youtube showing results in different kinds of applications, and they all have a very “biological” touch, which makes me very curious.
Can you recommend any resources to get into genetic programming more in-depth (preferably resources which won’t drain my budget ;)), any tips, experiences or general advice you can share? In particular, I’d like to do it in Clojure, to further my learning there as well.
Hi - I’m currently focussing on algorithmic art - which naturally makes great use of recursion and loops.
Python is great for beginners, but the javascript version of Processing, p5js, is also popular as you only need a browser to create / view art.
It seems to me that the functional approach should be ideal for “defining” visual forms - especially recursive patterns.
Is there a good way to use Clojure to create algorithmic art? Someone pointed to Quil. The key for me is great tutorials as many of us are not that expert and some artists have never even coded before!
EDIT - I guess I’m hoping that the declarative approach makes more sense than procedurally defining patterns.
I really enjoyed your blog posts about Cortex. Myself coming from an artistic background I am especially interested in the more visual side of AI. Lately I see a lot of nice works done with GANs for example the stuff that’s build with pix2pix from artists like Mario Klingemann or Gene Kogan. I think due to its interactive nature (using the REPL) Clojure could play an important role in this field.
Now to my question: Do you know of any work done with Cortex in this field and what will your MXNet bridge bring to the table regarding this topic?
Quil is nice place to start. If someone hasn’t coded before, there are some good tutorials using it in the ClojureBridge curriculum that involves making turtles walk and generating snowflakes along with a general introduction to the language.
There are also some libraries that use only the browser and ClojureScript. There has been some fantastic work with the Th-ng/geom library and there are a good set of examples posted during one of their workshops in London https://github.com/thi-ng/ws-ldn-1/.
You can also use p5js with ClojureScript as well. It looks like it is already part of the cljsjs package https://github.com/cljsjs/packages/tree/master/p5. So if you are already familiar with that library, you might want to try that.
Please post some of your creations as you go along to share
Cortex right now doesn’t have GANs, but all the plumbing is there to support adding the new layers. If someone is interested, this might be a great area to contribute.
I should also mention that there is a new Clojure library called Flare that has support for LSTM. There is also an opportunity to contribute new layers as well.
I’m not a data scientist but from recent conversations with @daslu I was wondering what you think is the path forwards for data science in Clojure. As far as I can tell Python still seems very far ahead of the pack and it will probably not be very attractive to rebuild all this infrastructure in Clojure.
Do you think the necessary tools for data science will eventually be available on the JVM?
Or is embedded interop as described in your blogpost a (commercially) viable way forward maybe?
Any thoughts/pointers about how to do exploratory data analysis (EDA) using SQL for large databases in Clojure?
EDA tends to be eager in most popular languages/libs (eg. python/pandas) and newcomers get derailed by the lazy nature of Clojure. The problem is exasperated because pandas uses the efficient tables of numpy to make experiments cheap.
One of the most pleasurable things about using Clojure is the REPL but when dealing with larger (say, 1GB+ raw data) the interactivity gets muddled by a less-than-ideal abstraction.
I run the London Algorithmic Art meetup, we write up all our events here, and you can find some of the members work there.
I may organise a future session on Clojure based coding for algorithmic art.
I’m also writing an intro book on Algorithmic Art but that is aimed firmly at complete beginners so won’t touch on Clojure … maybe a future part 2 will.