Software Architect at Genzeon Corporation in Malvern, Pennsylvania, Microsoft .NET MVP, Husband, Dad and Geek.
15600 stories

Functional Geekery Episode 112 – Micheal Sperber

1 Share

In this episode I talk with Micheal Sperber. We talk his introduction to programming and functional programming languages, important commonalities across languages, power of syntactic abstraction, teaching programming to beginners and experienced programmers, Concurrent ML, and more.

Our Guest, Micheal Sperber

@sperbsen on Twitter

Conference Announcements

CodeMesh is coming up November 8th and 9th in London. For more information, and to keep an eye open for registration, visit

Clojure SYNC will be taking place in New Orleans on February 15th & 16th of 2018. For more information and to register visit:

LambdaDays 2018 will be taking place February 22nd and 23rd in Kraków, Poland. For more information, and to register, visit

BOB 2018 is coming up in Berlin, Germany on February 23rd, 2018. For more informationa, and to register, visit

:clojureD will be following BOB 2018 in Berlin, Germany on February 24th, 2018. For more information, and to register, visit

If you have a conference related to functional programming, contact me, and I will be happy to announce it.


Some of you have asked how you can support Functional Geekery, in that vein,
Functional Geekery now has a Patreon Page.

If that is one of the ways you would like to show your support, you can
find out more at

Topics [@3:03]

About Micheal
How Micheal got into software
How Micheal’s interest in teaching related to his interest in software
Micheal journey of learning different languages
Germany’s National Competition of Programmers for high school students
Finding a community of people to learn from
How Micheal came across functional programming
Structure and Interpretation of Computer Programs
What is the core that Micheal finds across functional languages
Type Based Design (regardless of static or dynamic typed)
Macros as the “feature wish” for all languages
Hygienic Macros
Power of a common, well known, syntactic abstraction
What Micheal has found about teaching functional languages
“Your students are different than you”
“You have to put some distance between what you teach and what you love”
“You need to have languages designed for teaching, and tooling designed for teaching”
Dr. Racket
Commonality of teaching beginning programmers and teaching experienced professionals
Common principles for teaching as starting points
“Keep excitement out of it”
Program by Design
How to Design Programs
Design Recipe
Using types about your data to match information in your problem statement
Lessons from taking the teachers’ excitement out of the curriculum
“Here’s this thing, we don’t care if you love it or not, just do your thing”
Letting the students get excited for themselves.
Difference in thinking in types between dynamically and statically typed languages
Concurrent ML
Overview of similarity and differences in concurrency across functional programming languages
Messages and immutable data
Erlang process model for concurrency
Overview of Concurrent ML
Algebra of Rendezvous
“It’s like Christmas when you pull it out of the box”
Composition of Rendezvous across different concurrent mechanisms
Wittgenstein “The limits of your language are the limits of your world”
Going back to other concurrency mechanisms after knowing about Concurrent ML
Concurrent ML as a way of thinking
Standard ML of New Jersey
Extracting Concurrent ML concepts as a library
Concurrent Programming in ML
Concurrent ML as the best book on concurrent programming
John Reppy Ph.D. thesis
Concurrent ML book on covers multiple paradigms
Mike’s upcoming CodeMesh presentation
International Conference on Functional Programming
Funktionale Programmierung
BOB Konf

As always, a giant Thank You goes to David Belcher for the logo design.

Read the whole story
22 minutes ago
West Grove, PA
Share this story

Double Shot #1959

1 Share

Read the whole story
23 minutes ago
West Grove, PA
Share this story

How to Publish Your Vue.js Component on NPM

1 Share

You've made an awesome component with Vue.js that you think other developers could use in their projects. How can you share it with them?

In this article, I'll show you how to prepare your component so that it can be packaged and published on NPM. I'll use an example project and demonstrate the following:

Read the whole story
23 minutes ago
West Grove, PA
Share this story

Do Something Awesome with Have I Been Pwned and Win a Lenovo ThinkPad!

1 Share

Presently sponsored by: Get a security solution that will keep your website up and running—and keep you sleeping soundly: Symantec Website Security. Learn how

Do Something Awesome with Have I Been Pwned and Win a Lenovo ThinkPad!

Friends who follow what I'm up to these days will see that I'm often away from home in far-flung parts of the world. What that means is a lot of time on planes, a lot of time in airports (which is where I'm writing this now) and a lot of time in hotel rooms. Want to know how I churn out so much content? It's using that otherwise wasted down time to do useful things. But to do that, I need to be productive whilst mobile and I owe a lot of that to the machine I use when travelling.

Now, to make sure this doesn't sounds like an incentivised Lenovo pitch, firstly, refer back to my stance on what I'll endorse and my history with buying Lenovos and secondly, there's nothing in this one for me, it's someone else who's going to get something cool! But seriously, a huge part of how I get so much stuff done is that I can be super productive using the ThinkPad I travel everywhere with and that's due to a combination of the keyboard (one of its most highly-regarded features), reliability (I'm yet to have one die on me) and frankly, brutally functional design. These are not aesthetically pleasing machines - let's be honest about that - but man they've got substance over beauty in spades. (Fun fact - I'm just returning home from a conference where the AV guy had to warn the speaker after me that Macs sometimes slip off the lectern due to the curved bezel on the base not holding it in place.)

But best of all, Lenovo is giving me one to give you! Well, one of you anyway and it's a pretty slick unit being the ThinkPad 25 Year Anniversary Edition. This machine is packing a Core i7, 16GB of RAM, a half TB of SSD, an Nvidia GeForce 940MX GPU, USB Type C (Thunderbolt 3), 3 classic USB 3.0 ports (three!), SD card reader, HDMI port, ethernet jack, infrared face recognition camera and fingerprint reader. This is no half-hearted attempt at a laptop, it's the full beans:

Do Something Awesome with Have I Been Pwned and Win a Lenovo ThinkPad!

So yeah, Lenovo said I can give one away, I just needed to work out how I wanted to do it. I wanted to give it to someone who actually did something (no randomisation) and I wanted them to do something for the betterment of online security. It also had to be something that other people could use to achieve that objective which brings me to the Have I Been Pwned (HIBP) API.

I launched the HIBP API right after launching the service itself, almost 4 years ago now. Since then, many people have done many wonderful things with it (some of which are linked to on the API consumers page) which further the objective of helping victims of data breaches learn of their exposure. I want to use this opportunity to motivate people to do more with that API.

Here's the rules of the competition:

  1. Whatever you build must be made publicly available and without cost. Code on GitHub, free app in an app store, openly available website etc.
  2. The scope covers both the API to search for breached accounts and the Pwned Passwords either by API or querying the downloadable password hashes.
  3. You should leave a comment below explaining what you've built and linking to where it can be found.
  4. It must be working software that people can actually use!
  5. The deadline is 2 weeks from today which puts it at 7 November. Cut-off time is midday for me Gold Coast time.
  6. I will take the 4 best uses of the API and put out a Twitter poll that will run for 24 hours. The winner of that gets the ThinkPad.
  7. If the poll draws, I'll run it again with the front-runners from the poll.

Lenovo will ship this machine to you anywhere in the world so you're eligible regardless of your geography. If you've already created something using the API, awesome, you've got a head start, but I still need a comment here submitting it to the competition. If you're looking for inspiration, let me share a few ideas:

  1. Find a way to reach more people who may not already know they've been pwned.
  2. Find a way to visualise the data in a way that helps people understand their exposure.
  3. Find a way for organisations to make better use of either the breached account API or Pwned Passwords.
  4. Find a way to integrate into other tooling such that the data is more accessible.

Do also read the API docs page carefully; there's info on the rate limit, what I consider abuse and what the acceptable use is. Anything that doesn't adhere to this isn't in the running!

So that's it - go and build awesome things - then whoever can build the most awesomest gets an awesome machine to build even more awesome things!

Read the whole story
25 minutes ago
West Grove, PA
Share this story

Uploading Files in Razor Pages

1 Share
Uploading Files in Razor Pages
Read the whole story
25 minutes ago
West Grove, PA
Share this story

Azure Tips and Tricks Part 38 - Create a JSON Schema to be used in a Azure Logic Apps

1 Share


Most folks aren’t aware of how powerful the Azure platform really is. As I’ve been presenting topics on Azure, I’ve had many people say, “How did you do that?” So I’ll be documenting my tips and tricks for Azure in these posts.

The Complete List of Azure Tips and Tricks

Available Now!

My Scenario - Tracking Run Data

I thought I’d use this week’s Tip and Tricks series to show a practical example of how I am using Azure. I’ve started running outdoors and would like to extract several links that my app generates via email and send them to my OneDrive account automatically vs doing it manually after each run. I’m also concerned that the app that generates my data may be abandoned one day. In order to secure my data, I used a combination of and Azure to solve my problem and over the course of this week, we’ll cover the following sections needed in order to implement this:

Create JSON Schema to be used in a Azure Logic Apps

In the last post, we decided that we’d extract the following 4 pieces of information from the email.

  • Filename - This is the general filename that the app uses and I think it’s a piece of data we may want to store.
  • CSV URL - A URL to the CSV File that we’ll be posting to OneDrive.
  • GPX URL - A URL to the GPX File that we’ll be posting to OneDrive.
  • KML URL - A URL to the KML File that we’ll be posting to OneDrive.

We need to create the JSON body which we’ll use to create the schema. I used to quickly create this piece, but you can just manually type it if you want.

Here is the JSON payload with some sample data.

  "filename": "myfilename",
  "gpx": "",
  "csv": "",
  "kml": ""

OK, now I clicked the “Copy” Button and headed over to and pasted it in and my JSON schema was generated.

  "$schema": "", 
  "definitions": {}, 
  "id": "", 
  "properties": {
    "csv": {
      "id": "/properties/csv", 
      "type": "string"
    "filename": {
      "id": "/properties/filename", 
      "type": "string"
    "gpx": {
      "id": "/properties/gpx", 
      "type": "string"
    "kml": {
      "id": "/properties/kml", 
      "type": "string"
  "type": "object"

Too easy! Now head over to the Zappier Editor and create a new app.

You’ll want to use the New Email Trigger and use the Email Parser by Zappier and allow it to connect to your mailbox that you created earlier.

For the next step, you’ll want to use an Action that is a POST request that uses Webhooks by Zappier. When you get to the point to where it asks you for a URL, then use to see what your HTTP client is sending or to inspect and debug webhook requests. Now you have a URL that you can use for testing. Ensure your payload is set to JSON and now you can select the data from your parsed email (filename, csv, kml, gpx). You can leave the rest of the fields as-is. When you finish your screen should look like the following:

Go ahead and save and run the test. After you switch over to your You should see the output that matches the parsed data from the email.

Come back tomorrow and we’ll replace the URL with a live Logic Apps URL.

Want more Azure Tips and Tricks?

If you’d like to learn more Azure Tips and Tricks, then follow me on twitter or stay tuned to this blog! I’d also love to hear your tips and tricks for working in Azure, just leave a comment below.

Read the whole story
26 minutes ago
West Grove, PA
Share this story
Next Page of Stories