F# FTP Sync library


I recently finished up a project for syncing a local folder with a ftp uri I worked on in my spare time.

You can find the library on github at https://github.com/AlexMcGilvray/FSharpFTPSync

The main reason I did this was so I could update my website over ftp and only upload the files that changed. I also wanted assurances the target location contents to reflect the source folder contents exactly so I couldn't rely on file timestamps to determine which files I need to upload when performing a sync.

However the biggest reason for writing this library was so I could have a project to help learn F# and functional programming. It was very slow going for the first couple months but eventually it started clicking as I worked more and more on this project.

Tags: fsharp

Designing a park installation for a rainy city


A while back I heard about a competition happening in Vancouver where people design park installations with a focus on both a rainy climate and those with social anxiety.

I thought this would be really fun as I'm originall from Vancouver and very much enjoy the rain. I love being able to go to a secluded area outdoors when it's raining and reading while listening to the rain on various surfaces. During the times I've lived outside of Canada I have memories of homesickness being cured by a rainstorm.

The project tooling consisted of :

  • SideFX Houdini (modeling)
  • Krita (texturing and graphic design)
  • Unreal engine (rendering, lighting, camera rig etc)

Here is ortho shot


Here is one of the perspective shots


To create this project I decided to take this opportunity to learn SideFX Houdini. I bought a 1 year license and started to get to work learning. The main DCC programs I've used in the past 15 years have mainly been Maya, 3dsmax and a little bit of XSI. The autodesk DCC products are servicable but I'm by no means loyal to them and was interested in going a non-autodesk route for my return to 3d modeling.

It just so happens at the time I entered this contest I worked at a company where I had a co-worker from the VFX field who absolutely loves Houdini. After a few months of hearing about its features I was finally convinced to take a dive and give it a try. I'm glad I did, not only is Houdini a fraction of the price of a Autodesk product, it's so much nicer to use once you get used to it. Especially if you have a programming and procedural generation background.


Finally here is the piece I wrote for the contest entry :

Sound Shelter is a modular mobile shelter with 3 key design goals

Maximize the sound of falling water

Some have can be soothed by the sound of falling water. This project explores a design built to exploit the sound of falling water.

The roof, central water collector and the 4 water collectors are intended to maximize the sound of falling water.

The roof in particular is intended to collect water and evenly distribute it around the center to create a rain wall waterfall. The water lands in the center of the structure and falls evenly into the center left and right planters.

Collect rain to be used for potted plants

The water collectors are intended to have slow release water spouts so that they can provide water to potted plants over time when there is no rainfall. The center two water collectors dispense water to the outer water collectors when the start to get full.

Modular and easy to assemble

The strucuture has been designed to break down into a series of flat panels which lock into each other.

The roof is intended to separate into 7 triangular parts. The floor is broken into 6 separate panels which also lock into each other. There are 12 identical support columns. The planters consist of 2 legs and a single planter section. Unfortunately due to time constraints I haven't been able to provide illustrations of the modular nature intended for this piece.


Tags: park_installation

Back after nearly 3 years


After almost 3 years the blog is back and I've ditched wordpress for a static site generation library which I authored. There are many reasons I chose to write my own generator rather than use an existing solution. Not good reasons but reasons! Here they are :

Solves my exact use case

Since the target user for this is me I get software that solves my exact use case. It's a rare case to be able to get software so custom tailored to your use case.


Managing a static website package doesn't sound nearly as fun as writing my own static site generator! I got a change to play with a lot of different .NET libraries.

I really had a great time using the Managed Extensibility Framework (MEF) for reasons I'll explain in the next section. I enjoyed using the Razor templating engine in ASP/MVC so I pulled it out rather than write my own. I used System.Reactive very lightly and for the problems it solved it was really interesting to play with.

Learning and practice

Besides being able to get better aqquainted with a lot of prominent .NET libraries I was able to learn a lot.

At work you usually have to take a fairly conservative approach to designing software but at home I'm free to try all sorts of crazy program designs and since I have no deadline I'm free to heavily refactor and restructure my code repeatedly.

MEF was really useful here. I basically used it as a way to reduce friction when heavily restructuring my program. When my dependencies change I just need to edit a classes importing constructor. I don't need to deal with all the tedium of fixing up constructor calls everywhere.

After working and creating a program I can also now see how I would pull out components of my program into a plugin system if I wanted to make this generator applicable to other websites I would like to make such as a level design blog or a recipe database. The way to design the plugin API is a lot more clear after writing the program. I imagine if I do take the time to write a plugin api it will be a lot stronger compared to if I had designed it before writing a static site generator.

Tags: static_razor