PurelyFunctional.tv Newsletter 253: Poe, Cookies, Flash
From OO to Clojure Workshop!
Watch my free workshop to help you learn Clojure faster and shift your paradigm to functional.
Issue 253 - November 26, 2017
There's a lot to talk about this week.
Clojure SYNC tickets are on sale until Wednesday.
This conference in February is going to be unforgettable. World-class speakers, amazing location, and a thoughtful community.
Understanding Re-frame, the still-incomplete, soon-to-be comprehensive course on everything in Re-frame, is still on sale in Early Access. But the sale ends Monday (that's today!).
There was a bug on mobile devices (phones and tablets) that made videos blurry and didn't let you set the speed or quality. This should be fixed now across PurelyFunctional.tv.
Please enjoy the issue.
PS Want to get this in your email? Subscribe!
I'm very proud to announce a new feature of PurelyFunctional.tv: Location-based discounts. For a while I've been very aware that a monthly or yearly membership is quite expensive for a lot of people around the world where salaries are much lower than in the US. I want to meet people where they are. That's why I'm now offering discounts on all membership levels and all individual courses, depending on where you live.
When you visit the site, if you live in one of the countries where I'm offering a discount, you'll see a blue banner under the top navigation with a coupon code. That code is valid for membership registration and for purchasing individual courses. Just use the code when you're checking out.
For those of you with existing memberships who would like to get the new discount, I believe re-registering with the new coupon code will update your account.
You should consider this a Beta release. The system is far from perfect now. The discounts may change. I'd love to get bug reports if coupon codes don't work. We'll get through the hiccups together :)
We have a great community built on open source tools. Clojurists Together is trying to support the most important parts of our infrastructure with funding donated from the community.
How can we design for privacy first instead of having to warn the user of something they have no control of anyway?
I've been enjoying the conversation over at Clojureverse. Hop in and introduce yourself!
The Legacy of Computer Science YouTube
Gerald Sussman delivering a nice lecture about how Computer Science gives us new tools to think with. It places CS squarely in history as just the latest thing in a long succession of increasingly powerful perspectives. Don't forget that Dr. Sussman will be speaking at Clojure SYNC about a similar topic. You'll get to meet him if you're there.
In the above lecture, Dr. Sussman refers to this essay by Edgar Allen Poe. In it, Poe explains a bit about how he composed The Raven.
The Flash Games Postmortem YouTube
Game Postmortems are a curious mode of literature, but I love them, even if I have never played the game. You get to dig into the highs, the lows, the victories, and the regrets. Game programming is hard work, and very often those produce the best stories.
The authors analyzed git repos to figure out which types of languages lead to more bugs. I don't agree with all of the methods here. They average Clojure code and Erlang code together to come up with a "dynamic functional" group, when the languages have clearly different bug rates in their sample. And they make three "paradigms" called "procedural imperative", "procedural scripting", and "functional". The idea that scripting is opposed to imperative is a bit weird. If you look at their list, it's really compiled vs uncompiled.
But I digress. All of that said, we need more of this kind of quantitative analysis. The fact that there is even something to disagree with is progress. I'd love to see more studies from logs of projects on GitHub. Do you know of any?
This week was Thanksgiving, so I did not record every day :( I'll pick up the habit again this week. But I did manage to record two lessons about Subscriptions:
Today is the last day to save 60% with coupon code REFRAMEPEAP.