<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Home on Michael Homer</title>
		<link>https://michael.homer.nz</link>
		<description>Recent content in Home on Michael Homer</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Tue, 14 Oct 2025 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://michael.homer.nz/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Grace</title>
				<link>https://michael.homer.nz/Projects/Grace</link>
				<pubDate>Tue, 11 Sep 2018 14:54:10 +1200</pubDate>
				<guid>https://michael.homer.nz/Projects/Grace</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://gracelang.org/&#34;&gt;Grace&lt;/a&gt; is an object-oriented programming language intended for use in education. It uses gradual structural typing and a pure OO approach.&lt;/p&gt;&#xA;&lt;p&gt;I built three implementations of Grace, and worked on the design of some language features using the language.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/mwh/minigrace&#34;&gt;Minigrace&lt;/a&gt; is a self-hosted Grace compiler that generates C to run as native code and JavaScript to &lt;a href=&#34;http://ecs.vuw.ac.nz/~mwh/minigrace/js/&#34;&gt;run in the browser&lt;/a&gt;. The design goal of Minigrace was to behave correctly on correct input&lt;/p&gt;</description>
			</item>
			<item>
				<title>Tiled Grace</title>
				<link>https://michael.homer.nz/Projects/TiledGrace</link>
				<pubDate>Tue, 11 Sep 2018 15:10:37 +1200</pubDate>
				<guid>https://michael.homer.nz/Projects/TiledGrace</guid>
				<description>&lt;p&gt;Tiled Grace is a drag-and-drop combined visual and textual editor for &lt;a href=&#34;https://michael.homer.nz/Projects/Grace&#34;&gt;Grace&lt;/a&gt; using the Minigrace compiler as a backend. The visual editor is similar to Scratch, but the user can switch to editable textual code by pressing a button, and switch back at will later on.&lt;/p&gt;&#xA;&lt;p&gt;Tiled Grace &lt;a href=&#34;http://ecs.vuw.ac.nz/~mwh/minigrace/tiled/&#34;&gt;can be used online&lt;/a&gt; and its &lt;a href=&#34;https://github.com/mwh/tiledgrace&#34;&gt;source code is available&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Fast &amp; Easy ASTs for Flexible Embedded Interpreters</title>
				<link>https://michael.homer.nz/Publications/MPLR2025</link>
				<pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/MPLR2025</guid>
				<description>&lt;p&gt;Self-hosted software language systems need to bootstrap core&#xA;components such as data structure libraries, parsers, type checkers,&#xA;or even compilers. Bytecode interpreters can load byte code files,&#xA;while image-based systems can load in images of entire&#xA;systems &amp;mdash; Emacs, for example, does both.  Bootstrapping is more of a&#xA;problem, however, for traditional AST-based systems, especially when&#xA;they must be portable across multiple host systems and languages.&lt;/p&gt;&#xA;&lt;p&gt;In this short paper, we demonstrate how abstract syntax trees can&#xA;quickly and easily be incorporated into the source code of an embedded&#xA;interpreter. Our key insight is that a carefully engineered format&#xA;enables textually identical ASTs to be valid across a wide spectrum&#xA;of contemporary programming languages.  This means languages can be&#xA;self-hosted with very little  bootstrapping&#xA;infrastructure: only the host interpreter or compiler and a&#xA;minimal default library, while the rest of the system is imported&#xA;as ASTs.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Exploring the Design Space for Runtime Enforcement of Dynamic Capabilities</title>
				<link>https://michael.homer.nz/Publications/Onward2025</link>
				<pubDate>Wed, 18 Sep 2024 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/Onward2025</guid>
				<description>&lt;p&gt;Dala is an ``as simple as possible&amp;rsquo;&amp;rsquo; concurrent object-oriented&#xA;language designed to avoid data races.&#xA;Dala objects come in three safe flavours: immutable, isolated, and&#xA;local, plus a fourth unsafe flavour.&#xA;The objects are organised into an hierarchy so that e.g. immutable&#xA;objects can be accessed from anywhere but never mutated,&#xA;while thread local objects can be mutated but cannot be accessed&#xA;outside their containing thread.&lt;/p&gt;&#xA;&lt;p&gt;Dala&amp;rsquo;s flavours are intended  to be enforced at&#xA;runtime:&#xA;unfortunately it is not clear when and how best to undertake that&#xA;enforcement.&lt;/p&gt;</description>
			</item>
			<item>
				<title>JDala - A Simple Capability System for Java</title>
				<link>https://michael.homer.nz/Publications/ICSME2025JD</link>
				<pubDate>Sun, 07 Sep 2025 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/ICSME2025JD</guid>
				<description>&lt;p&gt;Dala is a novel capability-based programming model that ensures data-race freedom while also supporting efficient inter-thread communication. While Dala has been designed to inform the design of future programming languages, the question arises whether existing languages can be retrofitted with Dala capabilities. We report such a design called JDala. In JDala, Dala capabilities are added to Java using annotations and interpreted using bytecode instrumentation. With some examples we demonstrate that by adding three simple annotations to the language, we can avoid concurrency bugs like deadlocks and unexpected program behaviour resulting from shallow immutability of Java standard library APIs.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Syntest-ACR: Automated Crash Reproduction for JavaScript</title>
				<link>https://michael.homer.nz/Publications/ICSME2025</link>
				<pubDate>Sun, 07 Sep 2025 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/ICSME2025</guid>
				<description>&lt;p&gt;Automated Crash Reproduction (ACR) is an area of software testing research that aims to reproduce software crashes to improve developers&amp;rsquo; ability to debug programs. There has been little progress in applying ACR techniques to JavaScript, as the highly dynamic nature of JavaScript poses challenges for program analysis and synthesis. We present SynTest-ACR, the first tool for ACR in JavaScript, applying artificial intelligence techniques to evolve suitable reproduction cases. We have evaluated SynTest-ACR against the CrashJS dataset consisting of 453 crashes. As a baseline, we ported the state-of-the-art search-guiding fitness function from EvoCrash for Java, finding that it performs much worse when applied to JavaScript programs, and through comprehensively designing and evaluating alternative fitness functions more suitable for JS ACR we obtain an 18.9% increase in reproduction rate over this baseline for Syntest-ACR.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Reclaiming the Unexplored in Hybrid Visual Programming</title>
				<link>https://michael.homer.nz/Publications/Onward2024</link>
				<pubDate>Wed, 18 Sep 2024 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/Onward2024</guid>
				<description>&lt;p&gt;Programming languages have been trapped in a world of&#xA;linear textual representations fundamentally unchanged for&#xA;half a century. Even systems pushing beyond these forms —&#xA;visual languages, projectional language workbenches, and&#xA;end-user programming tools — largely ape the strictures&#xA;of stream-of-bytes compilers and confine themselves to the&#xA;popular paradigms of conventional textual systems.&#xA;Instead of recreating what succeeded in textual paradigms,&#xA;new programming systems should also be exploring what did&#xA;not—the confounding, confusing, convoluted approaches&#xA;that fell by the wayside—with the sorts of direct manipulation,&#xA;spatial connection, and change over time that textual&#xA;languages could never match; and they should use their&#xA;control of presentation to let the user choose the right&#xA;representation for a piece of code in the moment—and change&#xA;it. We argue that these two points unlock new frontiers for&#xA;programming systems, and present preliminary explorations&#xA;to highlight how multiple-representation environments can&#xA;lower the pressure on more speculative visual paradigms, to&#xA;encourage more investigation of this underexamined space.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Dafny vs. Dala: Experience with Mechanising Language Design</title>
				<link>https://michael.homer.nz/Publications/FTfJP2024</link>
				<pubDate>Thu, 01 Aug 2024 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/FTfJP2024</guid>
				<description>&lt;p&gt;Dala is a design for a concurrent dynamic object-oriented language. A key goal of Dala&amp;rsquo;s design is to avoid data races, by ensuring threads do not share mutable state.&#xA;In this paper we discuss our experience using the program verification tool Dafny to validate Dala&amp;rsquo;s design.&#xA;We explain how we modelled salient features of Dala in Dafny, and how Dafny did (or did not) assist our confidence in Dala&amp;rsquo;s design.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Designing Collaborative ScratchJr for Multi-touch Tabletops</title>
				<link>https://michael.homer.nz/Publications/SIEE2024</link>
				<pubDate>Wed, 19 Jun 2024 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/SIEE2024</guid>
				<description>&lt;p&gt;Teaching fundamental aspects of computer science&#xA;at pre-university levels has been a relevant topic for several&#xA;years. Visual programming environments based on block-based&#xA;languages, such as Scratch, have gained prominence due to their&#xA;ability to simplify entry into the complex field of programming.&#xA;This work focuses on ScratchJr, a user-friendly environment&#xA;specifically designed for early childhood and primary education.&lt;/p&gt;&#xA;&lt;p&gt;Collaborative learning is one of the most effective and widely&#xA;used methodologies in classrooms. With this in mind, our research&#xA;centers on designing a collaborative interface that enables group&#xA;work among multiple students within a shared workspace. This&#xA;workspace will be deployed on a multitouch table, leveraging the&#xA;advantages provided by such devices. These advantages include&#xA;enhanced collaboration and the need for hands-on experiences&#xA;for young learners.&lt;/p&gt;</description>
			</item>
			<item>
				<title>CrashJS: A NodeJS Benchmark for Automated Crash Reproduction</title>
				<link>https://michael.homer.nz/Publications/MSR2024</link>
				<pubDate>Thu, 15 Feb 2024 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/MSR2024</guid>
				<description>&lt;p&gt;Software bugs often lead to software crashes, which cost US&#xA;companies upwards of $2.08 trillion annually.  Automated&#xA;Crash Reproduction (ACR) aims to generate unit tests that&#xA;successfully reproduce a crash.  The goal of ACR is to aid&#xA;developers with debugging, providing them with another tool&#xA;to locate where a bug is in a program.  The main approach&#xA;ACR currently takes is to replicate a stack trace from an&#xA;error thrown within a program.  Currently, ACR has been&#xA;developed for C, Java, and Python, but there are no tools&#xA;targeting JavaScript programs.  To aid the development of&#xA;JavaScript ACR tools, we propose CrashJS: a benchmark&#xA;dataset of 453 Node.js crashes from several sources.&#xA;CrashJS includes a mix of real-world and synthesised tests,&#xA;multiple projects, and different levels of complexity for&#xA;both crashes and target programs.&lt;/p&gt;</description>
			</item>
			<item>
				<title>In-line Compositional Visual Programming</title>
				<link>https://michael.homer.nz/Publications/PX2024</link>
				<pubDate>Mon, 11 Mar 2024 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/PX2024</guid>
				<description>&lt;p&gt;Concatenative programming inherently expresses composition of&#xA;sub-tasks of a pipeline, but one uncommonly seen model of this&#xA;paradigm includes all data values inline within the program.&#xA;A visual environment for editing and evaluating programs in&#xA;this model would inherently display state in place, and allow&#xA;for easy tracing of data flow through the program by watching&#xA;the values literally move as evaluation steps took place.&#xA;We propose a visual approach for programming in this style,&#xA;with function calls and data values interleaved on a single&#xA;“track”, with specific concrete arguments always adjacent&#xA;when a function term is evaluated and various affordances for&#xA;editing, evaluating, and debugging.&#xA;We then show how extensions to this model to multiple tracks can&#xA;ease programming in the model and even make available&#xA;some more inscrutable programming-language features, such as&#xA;concurrency and effect systems, in a more&#xA;accessible way.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Branching Compositional Data Transformations in jq, Visually</title>
				<link>https://michael.homer.nz/Publications/PAINT2023</link>
				<pubDate>Sat, 30 Sep 2023 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/PAINT2023</guid>
				<description>&lt;p&gt;jq is a widely-used command-line tool for filtering and transforming JSON&#xA;data, in the vein of sed and awk, including a bespoke programming language&#xA;for writing the filters.&#xA;The paradigm of that language is unusual:&#xA;while its appearance is somewhere between a shell pipeline and JavaScript,&#xA;the language is pure-functional and essentially concatenative,&#xA;the pipelines branch and interleave data invisibly,&#xA;implicit output flattening obscures all these effects,&#xA;and most users are unaware of any of its&#xA;semantics,&#xA;leading to confusion when encountering any of these latent&#xA;elements and difficulty in constructing appropriate non-trivial filters,&#xA;all the while common debugging techniques are also obstructed by&#xA;the paradigm.&#xA;These confusions can be eliminated by visually demonstrating the recursively&#xA;forking nature of evaluation on actual data,&#xA;and allowing manipulations of the program or data to be reflected live,&#xA;but no such tool exists for jq or any similar approaches.&#xA;We present a visualisation of jq&amp;rsquo;s execution model that makes the branching&#xA;nature manifest, illustrating its effects on concrete values provided by the&#xA;user, and editing affordances that allow manipulating the program with&#xA;reference to real data.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Multiple-Representation Visual Compositional Dataflow Programming</title>
				<link>https://michael.homer.nz/Publications/PX2023</link>
				<pubDate>Mon, 13 Mar 2023 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/PX2023</guid>
				<description>&lt;p&gt;Many tasks that end users want to accomplish with a computer program&#xA;are fundamentally data-flow transformations, and both visual and textual&#xA;programming systems have been created to fill this need,&#xA;but these are often inflexible, unapproachable, or cumbersome, satisfying&#xA;a niche at one stage of the process but limited at others.&#xA;An approach that suits one part of the program, or one time in its&#xA;development, may be confounding at another, but the user is stuck with&#xA;both the constructive and obstructive aspects of a tool&amp;rsquo;s chosen paradigm&#xA;throughout.&#xA;Much of this difficulty can be removed by enabling the cohabitation&#xA;of multiple editing paradigms in a single program for the user to choose&#xA;how to tackle the current point in the process - and change their mind.&#xA;We present a new data-flow programming environment where the&#xA;same program, or parts of the same program, can be viewed and edited&#xA;as linear text, a node-and-wire graph representation, or a&#xA;two-dimensional grid layout, and the correspondence between these&#xA;representations is made clear through a continuous visual identity&#xA;for each part of the program.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Interleaved 2D Notation for Concatenative Programming</title>
				<link>https://michael.homer.nz/Publications/PAINT2022</link>
				<pubDate>Thu, 20 Oct 2022 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/PAINT2022</guid>
				<description>&lt;p&gt;Concatenative languages use implicit argument passing to provide a concise expression of programs comprising many composed transformation functions. However, they are sometimes regarded as &amp;ldquo;write-only&amp;rdquo; languages because understanding code requires mentally simulating the manipulations of the argument stack to identify where values are produced and consumed.  All of this difficulty can be avoided with a notation that presents both the functions and their operands simultaneously, which can also ease editing by making available values and functions directly apparent.  This paper presents a two-dimensional notation for these programs, comprising alternating rows of functions and operands with arguments and return values indicated by physical layout, and a tool for interactive live editing of programs in this notation.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Domain-Specific Visual Language for Data Engineering Quality</title>
				<link>https://michael.homer.nz/Publications/PAINT2022DEQ</link>
				<pubDate>Thu, 20 Oct 2022 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/PAINT2022DEQ</guid>
				<description>&lt;p&gt;Data engineering pipelines process large amounts of information, and ensuring that the quality and integrity of the data is maintained throughout is critical for technical, business, and social reasons.  Conventional data quality assurance approaches require a large amount of fine-grained testing code, which is laborious, easy to get out of sync, and inscrutable to non-technical stakeholders.  An executable higher-level visual approach to expressing quality requirements can serve as a shared representation of these constraints and their implications for all parties, eliminating repetition while increasing accessibility and maintainability.  We present a visual programming language for expressing data quality requirements within a pipeline declaratively, structured as a diagram of compositional data flow, transformation, and validation steps.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Blocks, Blocks, and More Blocks-Based Programming</title>
				<link>https://michael.homer.nz/Publications/PAINT2022BBP</link>
				<pubDate>Thu, 20 Oct 2022 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/PAINT2022BBP</guid>
				<description>&lt;p&gt;Blocks-based programming is a common way to teach novices how to program. However, there are many block-based languages to choose from. This paper reviews Block-Based Programming Languages (BBPLs), takes a detailed look at a number of existing BBPLs including their features and comparing and contrasting these languages. Finally, through a number of research questions, this paper evaluates the current state of the art and points out areas for potential further research.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Live 2D Compositional Programming</title>
				<link>https://michael.homer.nz/Publications/LIVE2022</link>
				<pubDate>Thu, 20 Oct 2022 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/LIVE2022</guid>
				<description>&lt;p&gt;This system started out as an experiment in making an obtuse programming paradigm more approachable. Sometimes regarded as &amp;ldquo;write-only languages&amp;rdquo;, stack-based concatenative languages rely on implicit argument passing and return values, with programs often just a bare sequence of function names, but they provide a very concise expression of pipelines.&lt;/p&gt;&#xA;&lt;p&gt;A two-dimensional layout showing both the functions and the corresponding values on the stack could help to make clear where values are coming from and going. Having built it, though, it turned out to naturally express programs outside of that paradigm as well—and perhaps more usefully. In fact, artificial restrictions were necessary to ensure that programs did remain concatenative, while the non-concatenative constructions had clear meaning.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Swipe-and-Tap Functional Programming</title>
				<link>https://michael.homer.nz/Publications/ISS2022</link>
				<pubDate>Thu, 20 Oct 2022 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/ISS2022</guid>
				<description>&lt;p&gt;Programming on touch-screen devices is notoriously difficult,&#xA;with conventional programming affordances typically&#xA;unavailable or unhelpful.&#xA;Here we present a novel touch-screen programming environment&#xA;for a style of functional programming that more closely&#xA;matches typical touch-screen needs, where all editing&#xA;operations are driven by concrete data values and selected&#xA;by swipe and tap gestures.&#xA;The environment provides live editing and supports exploratory&#xA;programming, with direct display of all calculation values&#xA;and earlier phases of development always available to edit&#xA;in-place.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using Functional Reactive Programming to Define Safe Actor Systems</title>
				<link>https://michael.homer.nz/Publications/FTfJP2022</link>
				<pubDate>Tue, 07 Jun 2022 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/FTfJP2022</guid>
				<description>&lt;p&gt;Functional Reactive Programming (FRP) is a powerful abstraction for building deterministic concurrent systems. However, some programmers prefer a more imperative approach for certain tasks, and that approach is required to implement some imperative algorithms. The Actor Model provides an abstraction for building concurrent systems in a more imperative way without as much of the chaos typical of traditional shared-memory imperative concurrent programming. While the Actor Model offers more structure than other imperative approaches, it still suffers from nondeterminism due to message-ordering and processing times. That makes actor systems hard to reason about, limiting their effectiveness for critical tasks. We formally define an elegant multi-paradigm unification of event-driven FRP constructs and the Actor Model. Our unification enables an intuitive form of declarative programming that can integrate imperative and declarative code within each other. We use reference and object capabilities to tame imperative features: reference capabilities track aliasing and mutability, and object capabilities track I/O. Notably, in our system expressions with deeply immutable input behave deterministically. Additionally, capabilities provide a boundary to allow nondeterministic code to intermingle safely with deterministic code.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Calling Cards: Concrete Visual End-User Programming</title>
				<link>https://michael.homer.nz/Publications/PX2022</link>
				<pubDate>Wed, 16 Mar 2022 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/PX2022</guid>
				<description>&lt;p&gt;Creating a program that performs even a simple task and shows&#xA;the result is unapproachable to most people, and even trained&#xA;programmers face a burden to create a new program. In this paper, we&#xA;introduce a prototype system and model for live visual dataflow&#xA;programming where intermediate steps are visible and all&#xA;components are tangible and manifest. Our system aims to allow a user&#xA;to dive in and immediately have a working program that can be&#xA;incrementally extended.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Dala: A Simple Capability-Based Dynamic Language Design For Data-Race Freedom</title>
				<link>https://michael.homer.nz/Publications/Onward2021</link>
				<pubDate>Sat, 18 Sep 2021 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/Onward2021</guid>
				<description>&lt;p&gt;Dynamic languages like Erlang, Clojure, JavaScript, and E&#xA;adopted data-race freedom by design. To enforce data-race&#xA;freedom, these languages either deep copy objects during actor&#xA;(thread) communication or proxy back to their owning thread. We&#xA;present Dala, a simple programming model that ensures data-race&#xA;freedom while supporting efficient inter-thread communication.&#xA;Dala is a dynamic, concurrent, capability-based language that&#xA;relies on three core capabilities: immutable values can be&#xA;shared freely; isolated mutable objects can be transferred&#xA;between threads but not aliased; local objects can be aliased&#xA;within their owning thread but not dereferenced by other&#xA;threads. Objects with capabilities can co-exist with unsafe&#xA;objects, that are unchecked and may suffer data races, without&#xA;compromising the safety of safe objects. We present a formal&#xA;model of Dala, prove data race-freedom and state and prove a&#xA;dynamic gradual guarantee. These theorems guarantee data&#xA;race-freedom when using safe capabilities and show that the&#xA;addition of capabilities is semantics preserving modulo&#xA;permission and cast errors.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A Partial Reproduction of A Guided Genetic Algorithm for Automated Crash Reproduction</title>
				<link>https://michael.homer.nz/Publications/ROSE2021</link>
				<pubDate>Sat, 18 Sep 2021 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/ROSE2021</guid>
				<description>&lt;p&gt;This paper is a partial reproduction of work by Soltani et al. which presented EvoCrash, a tool for replicating software failures in Java by reproducing stack traces.&#xA;EvoCrash uses a guided genetic algorithm to generate JUnit test cases capable of reproducing failures more reliably than existing coverage-based solutions.&#xA;In this paper, we present the findings of our reproduction of the initial study exploring the effectiveness of EvoCrash and comparison to three existing solutions: STAR, JCHARMING, and MuCrash.&#xA;We further explored the capabilities of EvoCrash on different programs to check for selection bias.&#xA;We found that we can reproduce the crashes covered by EvoCrash in the original study while reproducing two additional crashes not reported as reproduced.&#xA;We also find that EvoCrash was unsuccessful in reproducing several crashes from the JCHARMING paper, which were excluded from the original study.&#xA;Both EvoCrash and JCHARMING could reproduce 73 percent of the crashes from the JCHARMING paper.&#xA;We found that there was potentially some selection bias in the dataset for EvoCrash.&#xA;We also found that some crashes had been reported as non-reproducible even when EvoCrash could reproduce them.&#xA;We suggest this may be due to EvoCrash becoming stuck in a local optimum.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Naïve Transient Cast Insertion Isn&#39;t (That) Bad</title>
				<link>https://michael.homer.nz/Publications/ICOOOLPS2021</link>
				<pubDate>Wed, 23 Jun 2021 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/ICOOOLPS2021</guid>
				<description>&lt;p&gt;Transient gradual type systems often depend on type-based cast insertion to&#xA;achieve good performance: casts are inserted whenever the static&#xA;checker detects that a dynamically-typed value may flow into a&#xA;statically-typed context.&#xA;Transient gradually typed programs are then often executed using&#xA;just-in-time compilation, and contemporary just-in-time compilers are&#xA;very good at removing redundant computations.&lt;/p&gt;&#xA;&lt;p&gt;In this paper we present work-in-progress to measure the ability of&#xA;just-in-time compilers to remove redundant type checks.  We&#xA;investigate worst-case performance and so take a naïve approach,&#xA;annotating every subexpression to insert every plausible dynamic&#xA;cast.  Our results indicate that the Moth VM still manages to&#xA;eliminate much of the overhead, by relying on the state-of-the-art&#xA;SOMns substrate and Graal just-in-time compiler.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Research areas</title>
				<link>https://michael.homer.nz/Research</link>
				<pubDate>Wed, 10 Feb 2021 10:18:27 +1300</pubDate>
				<guid>https://michael.homer.nz/Research</guid>
				<description>&lt;h2 id=&#34;hybrid-and-visual-programming-interfaces&#34;&gt;Hybrid and visual programming interfaces&lt;/h2&gt;&#xA;&lt;p&gt;I created &lt;a href=&#34;https://michael.homer.nz/Projects/TiledGrace&#34;&gt;Tiled Grace&lt;/a&gt;, the first dual-mode&#xA;block-based/textual hybrid programming system, and continue to explore further&#xA;interfaces for programming beyond the conventional lines-of-text editor. I&#xA;have a particular focus on multiple-representation programming systems,&#xA;and approaches to support non-programmers and novices.&#xA;My work with Deacon McIntyre on &lt;a href=&#34;https://michael.homer.nz/Publications/VLHCC2020&#34;&gt;a graph-based system for&#xA;creating cellular automata&lt;/a&gt; won an award at VL/HCC.&lt;/p&gt;&#xA;&lt;p&gt;Some of the publications in this area include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/Publications/VISSOFT2013&#34;&gt;A Tile-based Editor for a Textual Programming Language&lt;/a&gt; in VISSOFT 2013&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/Publications/VLHCC2019&#34;&gt;Co-located Collaborative Block-Based Programming&lt;/a&gt; in VL/HCC 2019&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/Publications/VLHCC2020&#34;&gt;A Visual Programming Language for Cellular Automata&lt;/a&gt; in VL/HCC 2020&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/Publications/VISSOFT2014&#34;&gt;Combining Tiled and Textual Views of Code&lt;/a&gt; in VISSOFT 2014&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/Publications/PX2022&#34;&gt;Calling Cards: Concrete Visual End-user Programming&lt;/a&gt; in PX 2022&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/Publications/PAINT2022&#34;&gt;Interleaved 2D Notation for Concatenative Programming&lt;/a&gt; in PAINT 2022&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/Publications/PX2023&#34;&gt;Multiple-Representation Visual Compositional Dataflow Programming&lt;/a&gt; in PX 2023&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/Publications/Onward2024&#34;&gt;Reclaiming the Unexplored in Hybrid Visual Programming&lt;/a&gt; in Onward! 2024&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;object-oriented-programming-language-features&#34;&gt;Object-oriented programming language features&lt;/h2&gt;&#xA;&lt;p&gt;I work particularly on enabling features within languages, ones that open up&#xA;significant new areas of functionality without major changes in the language.&#xA;Some of my work on the &lt;a href=&#34;https://michael.homer.nz/Projects/Grace&#34;&gt;Grace&lt;/a&gt; language grew pattern-matching&#xA;and typing functionality out of standard object-oriented features with minimal&#xA;intrusion on the rest of the language, which was influential on other&#xA;languages. Similarly, my work with Timothy Jones on &lt;a href=&#34;https://michael.homer.nz/Publications/ECOOP2016&#34;&gt;models&#xA;of object-based inheritance&lt;/a&gt; explored several styles&#xA;of code reuse from multiple angles, investigating trade-offs and which&#xA;existing functionality supported which paradigms.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Poster: A Visual Programming Language for Cellular Automata</title>
				<link>https://michael.homer.nz/Publications/VLHCC2020</link>
				<pubDate>Thu, 16 Jul 2020 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/VLHCC2020</guid>
				<description>&lt;p&gt;Cellular automata are simulations of cells interacting with each other&#xA;based on simple rules. Despite the simplicity, they can exhibit complex&#xA;behaviour, and have a number of applications in fields such as medicine,&#xA;biology, mathematics, and more. As a result, people from a variety of&#xA;different backgrounds and skill-sets may find cellular automata useful&#xA;to their work or research. There exist tools to explore well-known&#xA;automata, but many require some form of textual programming ability, or&#xA;do not offer easy and approachable ways to customise automata. Our&#xA;software aims to be more accessible for those without backgrounds in&#xA;programming or cellular automata, to allow users to more easily explore&#xA;and modify automata. To achieve this, we have developed a visual&#xA;programming language, where users can connect components to create their&#xA;own automata from scratch, without any textual programming.&lt;/p&gt;</description>
			</item>
			<item>
				<title>domejs</title>
				<link>https://michael.homer.nz/Software/domejs</link>
				<pubDate>Thu, 23 Jan 2020 14:50:21 +1200</pubDate>
				<guid>https://michael.homer.nz/Software/domejs</guid>
				<description>&lt;p&gt;domejs is a minimal proxying shortcut DOM library. It provides a single function, called &lt;code&gt;$&lt;/code&gt; or &lt;code&gt;dome&lt;/code&gt;, that wraps up the repetitive parts of writing DOM code while still looking essentially like standard DOM API usage.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;$&lt;/code&gt; function has two uses: creating new elements (&lt;code&gt;new $(&#39;li.important&#39;)&lt;/code&gt;), and retrieving existing elements to manipulate together (&lt;code&gt;$(&#39;input[type=text].search&#39;).value = &#39;&#39;&lt;/code&gt;). &lt;a href=&#34;https://github.com/mwh/domejs&#34;&gt;Obtain the code&lt;/a&gt; and load the function with &lt;code&gt;import $ from &#39;./dome.js&#39;&lt;/code&gt;, or &lt;a href=&#34;#try-domejs&#34;&gt;try it out below&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Taxonomy of Package Management in Programming Languages and Operating Systems</title>
				<link>https://michael.homer.nz/Publications/PLOS2019</link>
				<pubDate>Tue, 01 Oct 2019 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/PLOS2019</guid>
				<description>&lt;p&gt;Package management is instrumental for programming languages and&#xA;operating systems, and yet it is neglected by both areas as an&#xA;implementation detail. For this reason, it lacks the same kind of&#xA;conceptual organization: we lack terminology to classify them or to&#xA;reason about their design trade-offs. In this paper, we share our&#xA;experience in both OS and language-specific package manager development,&#xA;categorizing families of package managers and discussing their design&#xA;implications beyond particular implementations. We also identify&#xA;possibilities in the still largely unexplored area of package manager&#xA;interoperability.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Which of My Transient Type Checks Are Not (Almost) Free?</title>
				<link>https://michael.homer.nz/Publications/VMIL2019</link>
				<pubDate>Sun, 01 Sep 2019 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/VMIL2019</guid>
				<description>&lt;p&gt;One form of type checking used in gradually typed language is&#xA;&lt;em&gt;transient type checking&lt;/em&gt;: whenever an object &amp;ldquo;flows&amp;rdquo; through code&#xA;with a type annotation, the object is dynamically checked to ensure&#xA;it has the methods required by the annotation.  Just-in-time&#xA;compilation and optimisation in virtual machines can eliminate much&#xA;of the overhead of run-time transient type checks.  Unfortunately&#xA;this optimisation is not uniform: some type checks will&#xA;significantly decrease, or even increase, a program&amp;rsquo;s performance.&lt;/p&gt;</description>
			</item>
			<item>
				<title>First-Class Dynamic Types</title>
				<link>https://michael.homer.nz/Publications/DLS2019</link>
				<pubDate>Sun, 01 Sep 2019 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/DLS2019</guid>
				<description>&lt;p&gt;Since LISP, dynamic languages have supported dynamically-checked type&#xA;annotations. Even in dynamic languages, these annotations are typically&#xA;static: tests are restricted to checking low-level features of objects and&#xA;values, such as primitive types or membership of an explicit&#xA;programmer-defined class.&lt;/p&gt;&#xA;&lt;p&gt;We propose much more dynamic types for dynamic languages — first-class&#xA;objects that programmers can customise, that can be composed with other&#xA;types and depend on computed values — and to use these first-class&#xA;type-like values &lt;em&gt;as&lt;/em&gt; types. In this way programs can define their own&#xA;conceptual models of types, extending both the kinds of tests programs can&#xA;make via types, and the guarantees those tests can provide. Building on a&#xA;comprehensive pattern-matching system and leveraging standard language syntax&#xA;lets these types be created, composed, applied, and reused straightforwardly,&#xA;so programmers can use these truly dynamic first-class types to make their&#xA;programs easier to read, understand, and debug.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Co-located Collaborative Block-Based Programming</title>
				<link>https://michael.homer.nz/Publications/VLHCC2019</link>
				<pubDate>Sat, 31 Aug 2019 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/VLHCC2019</guid>
				<description>&lt;p&gt;With the increasing need to teach programming to novices using&#xA;collaborative methods like pair programming, it is important to&#xA;understand how different input devices can help support collaborative&#xA;learning. In this paper we present Multi-Device Grace, the first&#xA;application to explore block-based programming in a cross-device&#xA;environment consisting of digital tabletops, mobile tablets, and&#xA;laptops. We conducted a user study (n = 18) to explore how cross-device&#xA;environments can support co-located collaborative block-based&#xA;programming. The study used Tiled Grace, an existing block-based&#xA;programming language,  and  our extensions:  Tabletop  Grace  (designed&#xA;for tabletops) and Mobile Grace (designed for tablets). Our results show&#xA;that the majority of participants felt they were able to collaborate&#xA;quickly and easily, and the cross device interaction would be&#xA;particularly beneficial in an education setting.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Transient Typechecks are (Almost) Free</title>
				<link>https://michael.homer.nz/Publications/ECOOP2019</link>
				<pubDate>Sat, 01 Jun 2019 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/ECOOP2019</guid>
				<description>&lt;p&gt;Transient gradual typing imposes run-time type tests that typically&#xA;cause a linear slowdown. This performance impact discourages the use of&#xA;type annotations because adding types to a program makes the program&#xA;slower. A virtual machine can employ standard just-in-time optimizations&#xA;to reduce the overhead of transient checks to near zero. These&#xA;optimizations can give gradually-typed languages performance comparable&#xA;to state-of-the-art dynamic languages, so programmers can add types to&#xA;their code without aﬀecting their programs’ performance.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Practice of a Compositional Functional Programming Language</title>
				<link>https://michael.homer.nz/Publications/APLAS2018</link>
				<pubDate>Sat, 01 Sep 2018 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/APLAS2018</guid>
				<description>&lt;p&gt;Function composition is a very natural operation, but most&#xA;language paradigms provide poor support for it. Without linguistic&#xA;support programmers must work around or manually implement what&#xA;would be simple compositions. The Kihi language uses only&#xA;composition, makes all state visible, and reduces to just six core&#xA;operations. Kihi programs are easily stepped by textual reduction&#xA;but provide a foundation for compositional design and analysis.&lt;/p&gt;</description>
			</item>
			<item>
				<title>GoboLinux</title>
				<link>https://michael.homer.nz/Projects/GoboLinux</link>
				<pubDate>Tue, 11 Sep 2018 16:16:41 +1200</pubDate>
				<guid>https://michael.homer.nz/Projects/GoboLinux</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.gobolinux.org/&#34;&gt;GoboLinux&lt;/a&gt; is a Linux distribution with an alternative filesystem hierarchy, where &amp;ldquo;the filesystem is the package manager&amp;rdquo;. My work with GoboLinux has primarily been in package management, including the design of its use-flags system, the Freshen automatic-update tool, and various work on the Scripts and Compile tools along with recipe maintenance and web tooling.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kihi</title>
				<link>https://michael.homer.nz/Projects/Kihi</link>
				<pubDate>Tue, 11 Sep 2018 14:50:21 +1200</pubDate>
				<guid>https://michael.homer.nz/Projects/Kihi</guid>
				<description>&lt;p&gt;Kihi is a concatenative, compositional, functional programming language with a minimal core of only six operations.&lt;/p&gt;&#xA;&lt;p&gt;Kihi can be &lt;a href=&#34;https://homepages.ecs.vuw.ac.nz/~mwh/kihi-eval/&#34;&gt;tried online&lt;/a&gt; and&#xA;&lt;a href=&#34;https://github.com/zmthy/kihi&#34;&gt;in PLT Redex&lt;/a&gt;. Both include a variety of sample&#xA;programs and the ability to visualise the execution stepwise.&lt;/p&gt;&#xA;&lt;p&gt;Every function in Kihi takes zero or more inputs and produces zero or more&#xA;outputs, and functions automatically compose with each other in an&#xA;arity-neutral way. A Kihi program has no hidden state and can be serialised at&#xA;any point during execution.&lt;/p&gt;</description>
			</item>
			<item>
				<title>An Agile Conversion Masters Degree Programme in Software Development</title>
				<link>https://michael.homer.nz/Publications/SIGCSE2018</link>
				<pubDate>Wed, 21 Feb 2018 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/SIGCSE2018</guid>
				<description>&lt;p&gt;The Information and Communications Technology (ICT) industry in New Zealand is growing rapidly. The traditional university courses are preparing an insufficient number of graduates to sustain the growth. Many of the traditional graduate students lack key soft skills that are important in team based software development. This paper reports on the development of a conversion Master of Software Development degree. The students are all graduates with little or no computer science degrees, are taught key programming skills, with a focus on agile development. The programme begins by focusing on individual programming skills through solving problems. Later industrial partners are engaged by providing industrial problems to agile teams of students. The industrial partners are active partners in the agile teams as product owners. By solving the problems, the students develop both technical and non-technical skills while utilizing the skills obtained from previous studies. The results from the first year of the programme are encouraging. A key result is that a high number of students found work in paid IT positions before graduating.  The main issue of the first year was introducing too many topics at the same time, over-assessment, not enough communication and contact time, little opportunity for the students to make their own experiences, and learning by making mistakes. The programme has been changed for the next year&amp;rsquo;s cohort to introduce less topics at once, provide time and space for learning, and a redesign of scheduling assessments.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Committees</title>
				<link>https://michael.homer.nz/Committees</link>
				<pubDate>Sat, 10 Feb 2018 13:44:11 +1300</pubDate>
				<guid>https://michael.homer.nz/Committees</guid>
				<description>&lt;p&gt;Programme and Artifact Evaluation Committees I have been or am a member of:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Onward! Papers 2026&lt;/li&gt;&#xA;&lt;li&gt;Review committee of The Art, Science, and Engineering of Programming for 2026&lt;/li&gt;&#xA;&lt;li&gt;LIVE 2026&lt;/li&gt;&#xA;&lt;li&gt;PLOS 2026&lt;/li&gt;&#xA;&lt;li&gt;LIVE 2025&lt;/li&gt;&#xA;&lt;li&gt;MPLR 2024&lt;/li&gt;&#xA;&lt;li&gt;Onward! Papers 2024&lt;/li&gt;&#xA;&lt;li&gt;Onward! Essays 2024&lt;/li&gt;&#xA;&lt;li&gt;PX 2024&lt;/li&gt;&#xA;&lt;li&gt;PAINT 2023&lt;/li&gt;&#xA;&lt;li&gt;PLOS 2023&lt;/li&gt;&#xA;&lt;li&gt;PX 2023&lt;/li&gt;&#xA;&lt;li&gt;MPLR 2022&lt;/li&gt;&#xA;&lt;li&gt;PLOS 2021&lt;/li&gt;&#xA;&lt;li&gt;DLS 2020&lt;/li&gt;&#xA;&lt;li&gt;SPLASH-E 2019&lt;/li&gt;&#xA;&lt;li&gt;SLE 2018&lt;/li&gt;&#xA;&lt;li&gt;SPLASH-E 2017&lt;/li&gt;&#xA;&lt;li&gt;SLE 2017&lt;/li&gt;&#xA;&lt;li&gt;Blocks &amp;amp; Beyond 2017&lt;/li&gt;&#xA;&lt;li&gt;ECOOP Artifacts 2016&lt;/li&gt;&#xA;&lt;li&gt;SLE 2016&lt;/li&gt;&#xA;&lt;li&gt;VISSOFT NIER 2015&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Organising committees I have been or am a member of:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Other Reviews</title>
				<link>https://michael.homer.nz/OtherReviews</link>
				<pubDate>Sat, 10 Feb 2018 13:44:11 +1300</pubDate>
				<guid>https://michael.homer.nz/OtherReviews</guid>
				<description>&lt;p&gt;Journals I have undertaken reviews for in this PBRF cycle:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Journal of Computer Languages (2025)&lt;/li&gt;&#xA;&lt;li&gt;SoftwareX (2022)&lt;/li&gt;&#xA;&lt;li&gt;Journal of Computer Languages (2022)&lt;/li&gt;&#xA;&lt;li&gt;Journal of Computer Languages (2019)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Grant and other reviews&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Invited referee for Netherlands Resarch Office (NWO) Vidi programme grant (2022)&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Honours Report</title>
				<link>https://michael.homer.nz/HonoursReport</link>
				<pubDate>Sat, 10 Feb 2018 13:36:08 +1300</pubDate>
				<guid>https://michael.homer.nz/HonoursReport</guid>
				<description>&lt;img alt=&#34;&#34; class=&#34;page-preview&#34; srcset=&#34;https://michael.homer.nz/HonoursReport/LivelyJavaScript/0-small.png 160w, https://michael.homer.nz/HonoursReport/LivelyJavaScript/0.png&#34; sizes=&#34;(max-width: 480px) 160px, 850px&#34; style=&#34;max-width: 160px; float: right;&#34; /&gt;&#xA;&#xA;&#xA;&lt;p&gt;My Honours report was completed in 2010, titled &lt;a href=&#34;HonoursReport/LivelyJavaScript.pdf&#34;&gt;Lively JavaScript&lt;/a&gt;, and&#xA;supervised by James Noble.&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In this project we evaluate the use of JavaScript as a general-purpose&#xA;programming language, using the Lively framework. We implemented several&#xA;applications within the Lively system to seek insights into both the language&#xA;and the programming environment, exploring claims and techniques found in the&#xA;literature. We examine the prototype-based paradigm and the benefits and&#xA;draw-backs of interactive programming for application development.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Grace: an open-source educational programming language @ linux.conf.au 2015</title>
				<link>https://michael.homer.nz/Talks/LCA2015</link>
				<pubDate>Sat, 10 Feb 2018 13:29:16 +1300</pubDate>
				<guid>https://michael.homer.nz/Talks/LCA2015</guid>
				<description>&lt;p&gt;&lt;a href=&#34;slides.pdf&#34;&gt;Slide deck&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;All of the various tools, links, and data mentioned in the talk are below.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;https://www.youtube.com/watch?v=g3Z8Nw_KK7k&#34;&gt;video of the talk is available on YouTube&lt;/a&gt;. A WebM-format video is available from your local Linux Australia mirror: &lt;a href=&#34;http://mirror.linux.org.au/linux.conf.au/2015/OGGB4/Friday/Grace_an_opensource_educational_programming_language.webm&#34;&gt;AU&lt;/a&gt; / &lt;a href=&#34;http://mirror.slingshot.co.nz/pub/linux.conf.au/2015/OGGB4/Friday/Grace_an_opensource_educational_programming_language.webm&#34;&gt;NZ&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;minigrace&#34;&gt;Minigrace&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mwh/minigrace&#34;&gt;Source code (in Grace)&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;To bootstrap this code, run &lt;code&gt;tools/tarball-bootstrap -a&lt;/code&gt; to download, build, and install one of the tarballs from below.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://ecs.vuw.ac.nz/~mwh/minigrace/dist/&#34;&gt;Tarballs of generated C&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;These work on any POSIX-compatible system&lt;/li&gt;&#xA;&lt;li&gt;They &lt;strong&gt;do&lt;/strong&gt; work under Cygwin, but dialects do not&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://ecs.vuw.ac.nz/~mwh/minigrace/js/&#34;&gt;Client-side web-based interface&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;hopper&#34;&gt;Hopper&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/zmthy/hopper&#34;&gt;Source code (in JavaScript)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://linux.conf.au/schedule/30200/view_talk&#34;&gt;Talk at LCA2015&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Available with &lt;code&gt;npm install hopper&lt;/code&gt; – run &lt;code&gt;hopper&lt;/code&gt; executable&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://ecs.vuw.ac.nz/~tim/grace/editor/experimental/&#34;&gt;Client-side web-based interface&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=KEkWorxEU_k&#34;&gt;Presentation at LCA2015&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;tiled-grace&#34;&gt;Tiled Grace&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mwh/tiledgrace&#34;&gt;Source code&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This requires a &lt;code&gt;minigrace.js&lt;/code&gt; file generated from the Minigrace source with &lt;code&gt;make es&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://ecs.vuw.ac.nz/~mwh/minigrace/tiled/&#34;&gt;Online interface&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Works best in recent Chrome or Firefox; most of it works in the latest Internet Explorer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;experiment.pdf&#34;&gt;Experimental writeup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://researcharchive.vuw.ac.nz/bitstream/handle/10063/3654/tiled-grace-experiment.tar.bz2?sequence=12&#34;&gt;Experimental data&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://lca2015.linux.org.au/schedule/30248/view_talk?day=friday&#34;&gt;At linux.conf.au&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Towards collaborative block-based programming on digital tabletops</title>
				<link>https://michael.homer.nz/Publications/BAB2017</link>
				<pubDate>Mon, 09 Oct 2017 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/BAB2017</guid>
				<description>&lt;p&gt;Block-based programming environments are typically designed for desktop machines or mobile devices. Desktops and mobiles are generally designed for single users to interact with, which makes it hard for multiple users to collaborate effectively. In this paper we explore the possibilities of digital multi-touch tabletops to foster collaborative programming in a block-based paradigm. We note both the different challenges afforded in this new interaction model and the potential benefits unique to collaborative programming with tabletops.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A goodput distribution model for planning IEEE 802.11 WBNs in built environments</title>
				<link>https://michael.homer.nz/Publications/JNCA2017</link>
				<pubDate>Sat, 07 Oct 2017 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/JNCA2017</guid>
				<description>&lt;p&gt;IEEE 802.11 wireless backhaul networks (WBNs) have emerged as a practical solution for bridging access points and backbone networks with low cost and ease of installation. However, the IEEE 802.11 protocol operates in the unlicensed spectrum and experiences unregulated interference, making it difficult to guarantee quality of service (QoS). With newer and farther reaching applications being densely deployed in built environments, such as small cell cellular networks and smart grids, users are increasingly expecting high QoS and fair access. This increased expectation for high QoS motivates the study of goodput models for planning IEEE 802.11 WBNs in built environments. In this paper, we design a goodput distribution model with consideration of structured placement of WBN nodes in built environments and validate our goodput model through simulations. The results show that our model provides an accurate prediction of goodput distribution in IEEE 802.11 WBNs under different traffic demands and radio propagation conditions. Such a goodput model is useful for node placement and optimising routing and channel assignment algorithms in IEEE 802.11 WBNs.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Optimising Channel Assignment To Prevent Flow Starvation and Improve Fairness For Planning Single Radio WMNs In Built Environments</title>
				<link>https://michael.homer.nz/Publications/COMNET2017</link>
				<pubDate>Fri, 29 Sep 2017 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/COMNET2017</guid>
				<description>&lt;p&gt;Wireless  mesh  networks  (WMNs)  have  many  attractive  characteristics,  such&#xA;as  auto-configuration,  self-management,  and  self-healing.   With  newer  and&#xA;farther reaching applications being developed in built environments, such as&#xA;smart grids and intelligent transportation systems, users expect high quality&#xA;of service and thus fairness is an important issue to be addressed.   Channel&#xA;assignment (CA) is the mechanism for allocating radio resources to the nodes&#xA;and  therefore  plays  a  key  role  in  managing  fairness  in  WMNs.   Fairness  in&#xA;WMNs depends on how wireless resources are allocated among the nodes. We&#xA;examine interference models used in existing CA algorithms and find that CA&#xA;algorithms  using  these  models  yield  poor  fairness  because  they  only  reflect&#xA;local interference between a link and its interfering links.  However, flow star-&#xA;vation is due to network wide interference (i.e.  global) involving border links&#xA;and middle links.  We propose a novel anti-starvation channel assignment al-&#xA;gorithm (ASCA) for planning single radio WMN. Such ASCA algorithm lever-&#xA;ages a new interference model that takes into account both local and global&#xA;interference.  Simulation results show the ASCA algorithm effectively allevi-&#xA;ates flow starvation and improves fairness up to 62% compared with the best&#xA;result from clique-based CA benchmarks.  To the best of our knowledge, the&#xA;proposed ASCA is the first one to optimise CA algorithms with consideration&#xA;of both local and global interference.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lessons in Combining Block-Based and Textual Programming</title>
				<link>https://michael.homer.nz/Publications/VLSS2017</link>
				<pubDate>Mon, 03 Jul 2017 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/VLSS2017</guid>
				<description>&lt;p&gt;Tiled Grace is a block-based programming system backed&#xA;by a conventional textual language that allows switching back and&#xA;forth between block-based and textual editing of the same code at&#xA;any time. We discuss the design choices of Tiled Grace in light of&#xA;existing research and a user experiment conducted with it. We also&#xA;examine the sorts of task preferred in each mode by users who had&#xA;the choice of editing either as blocks or as text, and find both positive&#xA;and cautionary notes for block-based programming in the results.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Toward Virtual Machine Adaption Rather than Reimplementation</title>
				<link>https://michael.homer.nz/Publications/MoreVMs2017</link>
				<pubDate>Mon, 03 Apr 2017 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/MoreVMs2017</guid>
				<description>&lt;p&gt;We adapt SOMns, a Truffle-based interpreter for Newspeak,&#xA;to the Grace programming language. We highlight differences&#xA;between the semantics of these languages and offer&#xA;preliminary results showing that adaption is possible while&#xA;retaining performance. The similarities between the languages&#xA;promote the potential for adaption and code sharing&#xA;between implementations. Through experimentation&#xA;we intend to explore how the design of the tailored implementation;&#xA;the flexibility of the underlying framework; and&#xA;similarities between languages affect adaptability, and by&#xA;doing so hope to realize a set of mechanisms that can be&#xA;easily extended to create optimized virtual machines for&#xA;object-orientated languages.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Grace&#39;s Inheritance</title>
				<link>https://michael.homer.nz/Publications/JOT2017</link>
				<pubDate>Sun, 02 Apr 2017 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/JOT2017</guid>
				<description>&lt;p&gt;This article is an apologia for the design of inheritance in the Grace&#xA;educational programming language: it explains how the design of Grace’s&#xA;inheritance draws from inheritance mechanisms in predecessor languages, and&#xA;defends that design as the best of the available alternatives. For simplicity,&#xA;Grace objects are generated from object constructors, like those of Emerald,&#xA;Lua, and Javascript; for familiarity, the language also provides classes and&#xA;inheritance, like Simula, Smalltalk and Java. The design question we address is&#xA;whether or not object constructors can provide an inheritance semantics similar&#xA;to classes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Left Hand of Equals</title>
				<link>https://michael.homer.nz/Publications/Onward2016</link>
				<pubDate>Thu, 03 Nov 2016 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/Onward2016</guid>
				<description>&lt;p&gt;When is one object equal to another object? While object&#xA;&lt;em&gt;identity&lt;/em&gt; is fundamental to object-oriented systems, object&#xA;&lt;em&gt;equality&lt;/em&gt;, although tightly intertwined with identity, is harder&#xA;to pin down. The distinction between identity and equality&#xA;is reflected in object-oriented languages, almost all of which&#xA;provide two variants of “equality”, while some provide many&#xA;more. Programmers can usually override at least one of these&#xA;forms of equality, and can always define their own methods&#xA;to distinguish their own objects.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Object Inheritance Without Classes</title>
				<link>https://michael.homer.nz/Publications/ECOOP2016</link>
				<pubDate>Thu, 21 Jul 2016 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/ECOOP2016</guid>
				<description>&lt;p&gt;Which comes first: the object or the class? Language designers enjoy the conceptual simplicity of object-based languages (such as Emerald or Self) while many programmers prefer the pragmatic utility of classical inheritance (such as Simula and Java). Programmers in object-based languages have a tendency to build libraries to support traditional inheritance, and language implementations are often contorted to the same end. In this paper, we revisit the relationship between classes and objects. We model various kinds of inheritance in the context of an object-oriented language whose objects are not defined by classes, and explain why class inheritance and initialisation cannot be modelled purely by delegation.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Beyond Types: Extending the Gradual Guarantee</title>
				<link>https://michael.homer.nz/Publications/STOP2016</link>
				<pubDate>Sun, 17 Jul 2016 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/STOP2016</guid>
				<description>&lt;p&gt;The gradual guarantee lets us understand gradual typing: a system&#xA;is gradually typed if removing a type annotation cannot change the&#xA;semantics of a correct program. We extend the gradual guarantee&#xA;beyond  types:  privacy  annotations  or  inheritance  restrictions,  for&#xA;example,  may  be  gradual  if  changing  them  does  not  change  the&#xA;semantics of a correct program.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Gradual typing is morally incorrect; we&#39;re all monsters now</title>
				<link>https://michael.homer.nz/Publications/NOOL2015</link>
				<pubDate>Tue, 27 Oct 2015 14:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/NOOL2015</guid>
				<description>&lt;p&gt;The aspiration of gradual typing — that typed and untyped code can coexist&#xA;happily, with errors reported at runtime when the types are found to be wrong —&#xA;has led many languages, including our own, to adopt the paradigm. The practice&#xA;is different; even the term itself has been refined short of this aspiration,&#xA;and languages abdicate their responsibilities as soon as they become too&#xA;onerous: when an object reënters dynamically-typed code, in the presence of&#xA;aliasing, or with regard to secure object identity.&lt;/p&gt;</description>
			</item>
			<item>
				<title>From APIs to Languages: Generalising Method Names</title>
				<link>https://michael.homer.nz/Publications/DLS2015</link>
				<pubDate>Tue, 27 Oct 2015 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/DLS2015</guid>
				<description>&lt;p&gt;Method names with multiple separate parts are a feature of many&#xA;dynamic languages derived from Smalltalk.  Generalising the syntax&#xA;of method names to allow parts to be repeated, optional, or&#xA;alternatives, means a single definition can respond to a whole family&#xA;of method requests. We show how generalising method names can support&#xA;flexible APIs for domain-specific&#xA;languages, complex initialisation tasks, and control structures&#xA;defined in libraries.&#xA;We describe how we have extended Grace to&#xA;support generalised method names, and prove that such an extension can be&#xA;integrated into a gradually-typed language while preserving type&#xA;soundness.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Brand Objects for Nominal Typing</title>
				<link>https://michael.homer.nz/Publications/ECOOP2015</link>
				<pubDate>Sun, 05 Jul 2015 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/ECOOP2015</guid>
				<description>&lt;p&gt;Combinations of structural and nominal object typing in systems such as Scala,&#xA;Whiteoak, and Unity have focused on extending existing nominal, class-based&#xA;systems with structural subtyping. The typical rules of nominal typing do not&#xA;lend themselves to such an extension, resulting in major modifications. Adding&#xA;object branding to an existing structural system integrates nominal and&#xA;structural typing without excessively complicating the type system. We have&#xA;implemented &lt;em&gt;brand objects&lt;/em&gt; to explicitly type objects, using existing&#xA;features of the structurally typed language Grace, along with a static type&#xA;checker which treats the brands as nominal types. We demonstrate that the brands&#xA;are useful in an existing implementation of Grace, and provide a formal model of&#xA;the extension to the language.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Simple Rules for Identifying Students on the Edge</title>
				<link>https://michael.homer.nz/Publications/TALE2014</link>
				<pubDate>Mon, 08 Dec 2014 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/TALE2014</guid>
				<description>&lt;p&gt;Students seeking enrolment into the bachelor of engineering at Victoria&#xA;University of Wellington are required to gain a B average across their first&#xA;year engineering papers in order to gain entry into second year. We explore&#xA;longitudinal historical data in order to predict student progress using their&#xA;grades from the end of the first trimester. We find that a simple classifier&#xA;based on the number of A grades a student receives in the first trimester can&#xA;predict which students are likely to gain entry, be near the borderline, or&#xA;fall short.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Combining Tiled and Textual Views of Code</title>
				<link>https://michael.homer.nz/Publications/VISSOFT2014</link>
				<pubDate>Mon, 29 Sep 2014 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/VISSOFT2014</guid>
				<description>&lt;p&gt;&amp;ldquo;Jigsaw puzzle&amp;rdquo; programming environments manipulate programs primarily by&#xA;drag-and-drop. Generally these environments are based on their own&#xA;special-purpose languages, meaning students must move on to another language as&#xA;their programs grow. Tiled Grace is a tile-based editor for Grace, an&#xA;educational programming language with a conventional textual syntax. Using&#xA;Tiled Grace, programmers can move seamlessly between visualising their programs&#xA;as tiles or source code, editing their programs via tiles or text, and continue&#xA;on to traditional textual environments, all within the same programming&#xA;language.  We conducted a user experiment with Tiled Grace, and present the&#xA;results of that experiment showing that users find dual views helpful.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Graceful Dialects</title>
				<link>https://michael.homer.nz/Publications/ECOOP2014</link>
				<pubDate>Mon, 28 Jul 2014 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/ECOOP2014</guid>
				<description>&lt;p&gt;Programming languages are enormously diverse, both in their essential concepts&#xA;and in their accidental aspects. This creates a problem when teaching&#xA;programming. To let students experience the diversity of essential concepts,&#xA;the students must also be exposed to an overwhelming variety of accidental and&#xA;irrelevant detail: the accidental differences between the languages are likely&#xA;to obscure the teaching point.  The dialect system of the Grace programming&#xA;language allows instructors to tailor and vary the language to suit their&#xA;courses, while staying within the same stylistic, syntactic and semantic&#xA;framework, as well as permitting authors to define advanced internal&#xA;domain-specific languages. The dialect system achieves this power though a&#xA;combination of well-known language features: lexical nesting, lambda&#xA;expressions, multi-part method names, optional typing, and plug gable checkers.&#xA;Grace&amp;rsquo;s approach to dialects is validated by a series of case studies,&#xA;including both extensions and restrictions of the base language.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A Tile-based Editor for a Textual Programming Language</title>
				<link>https://michael.homer.nz/Publications/VISSOFT2013</link>
				<pubDate>Fri, 27 Sep 2013 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/VISSOFT2013</guid>
				<description>&lt;p&gt;&amp;ldquo;Jigsaw puzzle&amp;rdquo; programming environments manipulate programs primarily by&#xA;drag-and-drop. Generally these environments are based on their own&#xA;special-purpose languages, meaning students must move on to another language as&#xA;their programs grow. Tiled Grace is a tile-based editor for Grace, an&#xA;educational programming language with a conventional textual syntax. Using&#xA;Tiled Grace, programmers can move seamlessly between visualising their programs&#xA;as tiles or source code, editing their programs via tiles or text, and&#xA;continuing on to traditional textual environments, all within the same&#xA;programming language.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Object Creation in Grace</title>
				<link>https://michael.homer.nz/Publications/EuroPLoP2013</link>
				<pubDate>Mon, 08 Jul 2013 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/EuroPLoP2013</guid>
				<description>&lt;p&gt;We are engaged in the design of Grace, a new object-oriented open source&#xA;programming language aimed at instructors and students in introductory&#xA;programming courses. Grace aims to include features that have been found useful&#xA;in software practice, while allowing multiple different teaching approaches&#xA;without requiring that concepts be introduced to students before they are&#xA;ready. While many aspects of Grace&amp;rsquo;s design will be familiar to most&#xA;object-oriented programmers, Grace cleanly separates the concepts of &amp;ldquo;object&amp;rdquo;,&#xA;&amp;ldquo;class&amp;rdquo;, and &amp;ldquo;type&amp;rdquo;, and so Grace offers more options for creating objects than&#xA;most other languages. We have written these patterns to explain how Grace&#xA;programmers should go about creating objects.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Modules as Gradually-Typed Objects</title>
				<link>https://michael.homer.nz/Publications/DYLA2013</link>
				<pubDate>Mon, 01 Jul 2013 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/DYLA2013</guid>
				<description>&lt;p&gt;Grace is a gradually typed, object-oriented language for use in education.&#xA;Grace needs a module system for several reasons: to teach students about&#xA;modular program design, to organise large programs, especially its self-hosted&#xA;implementation, and to provide access to resources defined in other languages.&#xA;Grace uses its basic organising construct, objects, to provide modules, and is&#xA;then able to use its gradual structural typing to obtain a number of&#xA;interesting features without any additional mechanisms.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Designing Grace: Can an Introductory Programming Language Support the Teaching of Software Engineering?</title>
				<link>https://michael.homer.nz/Publications/CSEET2013</link>
				<pubDate>Sun, 19 May 2013 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/CSEET2013</guid>
				<description>&lt;p&gt;Many programming language constructs that support software engineering in the&#xA;large — explicit variable declarations, explicit external dependencies, static&#xA;types, information hiding, invariants — provide little benefit to the small&#xA;programs written by novice programmers, where every extra syntactic token has&#xA;to be explained and understood before novices can succeed in running even the&#xA;simplest program. We are designing Grace, a new educational object-oriented&#xA;language that we hope will prove useful for teaching both programming and&#xA;software engineering. This paper describes some of the tradeoffs between&#xA;teaching programming and teaching software engineering that we faced while&#xA;designing Grace, and our attempts to address those tradeoffs.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Seeking Grace: A New Object-Oriented Language for Novices</title>
				<link>https://michael.homer.nz/Publications/SIGCSE2013</link>
				<pubDate>Wed, 06 Mar 2013 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/SIGCSE2013</guid>
				<description>&lt;p&gt;Grace is a new object-oriented language that supports a variety of approaches&#xA;to teaching programming. It integrates accepted new ideas in programming&#xA;languages into a simple language that allows students and teachers to focus on&#xA;the essential complexities of programming rather than the accidental&#xA;complexities of the language. We motivate Grace, review its design, and&#xA;evaluate it against Kölling&amp;rsquo;s criteria.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Patterns as Objects in Grace</title>
				<link>https://michael.homer.nz/Publications/DLS2012</link>
				<pubDate>Mon, 22 Oct 2012 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/DLS2012</guid>
				<description>&lt;p&gt;Object orientation and pattern matching are often seen as conflicting&#xA;approaches to program design. Object-oriented programs place type-dependent&#xA;behavior inside objects and invoke it via dynamic dispatch, while&#xA;pattern-matching programs place type-dependent behavior outside data structures&#xA;and invoke it via multiway conditionals (case statements).  Grace is a new,&#xA;dynamic, object-oriented language designed to support teaching: to this end,&#xA;Grace needs to support both styles. We explain how this conflict can be&#xA;resolved grace- fully: by modelling patterns and cases as partial functions,&#xA;reifying those functions as objects, and then building up complex patterns from&#xA;simpler ones using pattern combinators.  We describe the implementation of this&#xA;design as an object-oriented framework, and a case study of its effectiveness.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Grace: the Absence of (Inessential) Difficulty</title>
				<link>https://michael.homer.nz/Publications/Onward2012</link>
				<pubDate>Sat, 20 Oct 2012 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/Onward2012</guid>
				<description>&lt;p&gt;We are engaged in the design of a small, simple programming language for&#xA;teaching novices object-oriented programming. This turns out to be far from a&#xA;small, simple task. We focus on three of the problems that we encountered, and&#xA;how we believe we have solved them. The problems are (1) gracefully combining&#xA;object initialization, inheritance, and immutable objects, (2) reconciling&#xA;apparently irreconcilable views on type-checking, and (3) providing a family of&#xA;languages, each suitable for students at different levels of mastery, while&#xA;ensuring conceptual integrity of their designs. In each case our solutions are&#xA;based on existing research; our contribution is, by design, consolidation&#xA;rather than innovation.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Graceful Patterns for Patterns in Grace</title>
				<link>https://michael.homer.nz/Publications/PLoP2012</link>
				<pubDate>Fri, 19 Oct 2012 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Publications/PLoP2012</guid>
				<description>&lt;p&gt;Grace is a new object-oriented programming language aimed at education. Here we&#xA;describe patterns relating to pattern-matching in this language.&lt;/p&gt;</description>
			</item>
			<item>
				<title>My reference page</title>
				<link>https://michael.homer.nz/my</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/my</guid>
				<description>&lt;p&gt;This page collects links I need to use.&lt;/p&gt;&#xA;&lt;p&gt;Internal:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/Committees&#34;&gt;Committees&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/OtherReviews&#34;&gt;OtherReviews&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/corerank&#34;&gt;CORE rankings of papers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://michael.homer.nz/tags&#34;&gt;Tags&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;External:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ecs.victoria.ac.nz/Main/MichaelHomer&#34;&gt;My ECS page&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Statistics:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1762&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Thesis: Graceful Language Extensions and Interfaces</title>
				<link>https://michael.homer.nz/Thesis</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://michael.homer.nz/Thesis</guid>
				<description>&lt;img alt=&#34;&#34; class=&#34;page-preview&#34; srcset=&#34;https://michael.homer.nz/Thesis/thesis/0-small.png 160w, https://michael.homer.nz/Thesis/thesis/0.png&#34; sizes=&#34;(max-width: 480px) 160px, 850px&#34; style=&#34;max-width: 160px; float: right;&#34; /&gt;&#xA;&#xA;&#xA;&lt;p&gt;My thesis, &lt;a href=&#34;https://michael.homer.nz/Thesis/thesis.pdf&#34;&gt;Graceful Language Extensions and Interfaces&lt;/a&gt;, was completed at Victoria University of&#xA;Wellington in 2014, supervised by James Noble and David Pearce.&lt;/p&gt;&#xA;&lt;p&gt;It is available in the university library, or for &lt;a href=&#34;https://michael.homer.nz/Thesis/thesis.pdf&#34;&gt;download&lt;/a&gt; here&#xA;or from &lt;a href=&#34;http://researcharchive.vuw.ac.nz/handle/10063/3654&#34;&gt;the university&amp;rsquo;s research archive&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Grace is a programming language under development aimed at education. Grace&#xA;is object-oriented, imperative, and block-structured, and intended for use in&#xA;first- and second-year object-oriented programming courses. We present a&#xA;number of language features we have designed for Grace and implemented in our&#xA;self-hosted compiler. We describe the design of a pattern-matching system&#xA;with object-oriented structure and minimal extension to the language. We give&#xA;a design for an object-based module system, which we use to build dialects, a&#xA;means of extending and restricting the language available to the programmer,&#xA;and of implementing domain-specific languages. We show a visual programming&#xA;interface that melds visual editing (à la Scratch) with textual editing, and&#xA;that uses our dialect system, and we give the results of a user experiment we&#xA;performed to evaluate the usability of our interface.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
