What is Open Source?
Open source software is software with source code that anyone can inspect, modify, and enhance. “Source code” is the part of software that most computer users don’t ever see; it’s the code computer programmers can manipulate to change how a piece of software—a “program” or “application”—works.
I participate in a number of free and open source software projects. You can find most of them listed on my GitHub account.
Perl
Most of my Perl projects can be found on The CPAN. They are also mirrored at https://cpan.toby.ink/, where signed checksums can be found.
Type::Tiny
Type::Tiny is a small Perl class for writing type constraints, inspired by Moose’s type constraint API and MooseX::Types. It has only one non-core dependency (and even that is simply a module that was previously distributed as part of Type::Tiny but has since been spun off), and can be used with Moose, Mouse, or Moo (or none of the above).
Type::Tiny is used by over 800 Perl distributions on the CPAN (Comprehensive Perl Archive Network) and can be considered a stable and mature framework for efficiently and reliably enforcing data types.
Type::Tiny is bundled with Type::Library a framework for organizing type constraints into collections. Also bundled is Types::Standard, a Moose-inspired library of useful type constraints. Type::Params is also provided, to allow very fast checking and coercion of function and method parameters.
Zydeco
Zydeco is a Perl module to jazz up your object-oriented programming. It fuses together:
- Classes, roles, and interfaces, including parameterizable classes and roles (a.k.a. class generators and role generators).
- Factories to help your objects make other objects.
- Powerful and concise attribute definitions.
- Methods with signatures, type constraints, and coercion.
- Method modifiers to easily wrap or override inherited methods.
- Multimethods.
- Powerful delegation features.
- True private methods and attributes.
- Syntactic sugar as sweet as pecan pie.
Zydeco is a Perl extension that adds cute syntax for object-oriented programming, and tries to steer you towards (what I consider) best practice design.
Other
Some highlights and recent projects:
-
match::simple
Simplified clone of smartmatch operator.
-
Newtype
Perl implementation of an approximation for Haskell’s newtype.
-
PerlX::Maybe
Return a pair only if they are both defined. Syntactic sugar for key-value lists.
-
results
Why throw exceptions when you can return them? Port of Rust’s error handling to Perl.
-
Test::Modern
Precision testing for modern Perl.
Rust
Tada
Tada is an opinionated command-line todo list manager. It offers commands to:
- Add and remove tasks to your todo list.
- Find the most important tasks on your list.
- Find the most urgent tasks on your list.
- Find the quickest tasks on your list.
- Find tasks by project or context.
- Mark tasks as done.
- Reschedule overdue items based on how tada thinks you should reschedule them.
It is a command-line tool as well as a programming library, so should be useful to Rustaceans and non-Rustaceans alike!
PHP
Most of my open source PHP code is WordPress plugins and themes. A selection can be found on GitHub.
-
Thyme
WordPress theme based on Roots Sage 10. (Some of its internals refer to “parsley” which was my theme based on Roots Sage 9.) It’s the theme I use for this site.
-
Mastodon-Friendly RSS Widget
Subclass of the built-in RSS Widget, but copes better with Mastodon feeds.
-
Cookie Kwan
A simple GDPR consent getting script.
-
Tobyink’s Contact Form
Very simple form-to-email contact form for WordPress, with ReCAPTCHA support.
-
WP Ctrl Semicolon
Adds a keyboard shortcut to WordPress, allowing admins to quickly edit any page.
Another PHP project is Tada Server — a web-based todo list, compatible with my Rust project, tada.
General Policies
Licencing
My preferred licence for new open source software projects is the GNU GPL, either version 2 or version 3. (Version 3 preferred for web and network related projects. Perl projects, I would typically also license under the Artistic Licence. Rust projects, I would typically also licence under the MIT Licence and the Apache Licence 2.0.
Source Code Management
I generally prefer to use Mercurial for version control, but will use Git if need be. The hg-git plugin also exists, which I use to mirror my Mercurial repositories on GitHub.
Contributing to My Projects
If you have any bug fixes or other improvements to my projects, the best way to contribute them is to submit a pull request on GitHub. For more information, see my guide on contributing to my free software projects.