In earlier articles, we have implemented a tokenizer, parser, and transformer to convert WAT syntax to a Wasm AST, and got started on the code generation. In this part, we’ll finally wrap up code generation and be able to compile our hello world sample into something that wasmtime can run. I hope.| Dusty Phillips Codes
In earlier articles, we have implemented a tokenizer, parser, and transformer to convert WAT syntax to a Wasm AST, and got a good portion of the code generation step in place. Unless there are any unexpected detours, this part will cover more code generation and take us through a messy refactor that Roc helpfully makes not so messy!| Dusty Phillips Codes
In earlier articles, we have implemented a tokenizer, parser, and transformer to convert WAT syntax to a Wasm AST and got started on the code generation. This part will continue with code generation. We’ll start with the import section because it has a couple interesting complications that we need to take into account. The Import Section Consider this wat import statement: (module (import "wasi_snapshot_preview1" "fd_write" ( func $fd_write (param i32 i32 i32 i32) (result i32)) ) ) If we lo...| Dusty Phillips Codes
In earlier articles, we have implemented a tokenizer, parser, and transformer to convert WAT syntax to a Wasm AST, and started building a code generator to create bytes from that AST. The structure of the code generator is in place already, so our remaining task is to generate all the other sections of our input module. Data section The next section I want to implement is the data section, which is described in the Wasm spec here.| Dusty Phillips Codes
In earlier articles, we have implemented a tokenizer, parser, and transformer to convert the Web Assembly Text Format to an Abstract Syntax Tree that can hopefully easily compile to Wasm. Truthfully, the next step should be validation. Validation is the process of statically analyzing the syntax tree to catch as many errors as possible. This is where things like type checking and borrow checking happen, for example. The wasm spec has an in-depth description of what validation should look like...| Dusty Phillips Codes
In earlier articles, we implemented a tokenizer and parser to convert Wasm’s WAT syntax into an S-expression abstract syntax tree and started to implement a transformer to convert that AST into one more suitable for generating Wasm bytecode. This article continues where we left off, building the last piece of the transformer. This piece needs to represent arbitrary instructions inside a function body, so it’s going to take a bit of massaging.| Dusty Phillips Codes
In earlier articles, we implemented a tokenizer and parser to convert Wasm’s WAT syntax into an S-expression abstract syntax tree and started to implement a transformer to convert that AST into one more suitable for generating Wasm bytecode. Now that the boilerplate is in place, this article will continue to implement recursive transformer functions, getting into some of the more complicated expressions in the “hello world” WAT example. I should mention that the code in this article get...| Dusty Phillips Codes
In earlier articles, we implemented a tokenizer and parser to convert Wasm’s WAT syntax into an S-expression abstract syntax tree, and started to implement a transformer to convert that AST into one more suitable for generating Wasm bytecode. This article continues where part 8 left off, as we try to expand the parser to something more than an empty WAT (module). Reminder: You are reading content that took a great deal of effort to craft, compose, and debug.| Dusty Phillips Codes
In earlier articles, we implemented a tokenizer for the Wasm text syntax (WAT) and started on a parser to convert those tokes to a S-expression AST. In this part, we’ll start to create a transformer to convert that AST to a new one that better matches the WASM output we will be crafting. Don’t ask me how many parts that’s going to take! Reminder: You are reading content that took a great deal of effort to craft, compose, and debug.| Dusty Phillips Codes
It’s been a while since I published the last chapter of LazyVim for Ambitious Developers on the website, but I was waiting for the print edition to be available to share it widely. And that required waiting (twice) for proofs to be mailed to me. But it’s finally here! For a direct link to purchase the print edition, click here. I’m proud of the book contents. I’m pretty confident that even seasoned Vim power users would pick up one or two tricks they didn’t already know.| Dusty Phillips Codes
In earlier articles, we implemented a tokenizer for the Wasm text syntax (WAT). In part 6, we started building a parser. We ended that part on a bit of a down note when I realized we were in for yet another refactor. I’m in a better mood today and it’s looking like it won’t be so bad, after all! Reminder: You are reading content that took a great deal of effort to craft, compose, and debug.| Dusty Phillips Codes
In earlier articles, I introduced this “WAT to Wasm compiler in Roc” project, wrote some Roc code to load an input file, and implemented a tokenizer for a “hello world” of Wat to Wasm compilation. It was… more work than I expected. Four blog posts more work, to be precise! I have no idea where it’s going to end. But I do know what’s next! Parsing. Reminder: You are reading content that took a great deal of effort to craft, compose, and debug.| Dusty Phillips Codes
In earlier articles, I introduced this compiler project, wrote some Roc code to load an input file, and started implementing a tokenizer with error handling. I think I need to admit that I have absolutely no clue how to estimate how long a blog article is going to be. I thought “build a compiler” would be one article. And then I thought “build a tokenizer” would be one article. sigh I swear we’ll be done with tokenizing at the end of this post. But first we’ll take a detour to hav...| Dusty Phillips Codes
In earlier articles, I introduced the project, wrote some Roc code to load an input file, and started implementing a Tokenizer. This part takes a bit of a detour with a refactor to support rudimentary error reporting. Reminder: You are reading content that took a great deal of effort to craft, compose, and debug. If you appreciate this work, consider supporting me on Patreon or GitHub. Handling Errors during Tokenizing Before we start adding more tokens to tokenize the Hello World module, I w...| Dusty Phillips Codes
In part 1 and part 2 of this series, I introduced the project and we wrote some Roc code to load an input file and save the compiled result to a different file. Note: Other articles in this series are collected here. However, we are a long ways from actually having that compiled result available! This article introduces the phases involved in writing a compiler and focus on implementing the first phase, known as lexical analysis or tokenizing.| Dusty Phillips Codes
My latest hair-brained project is a WAT-to-Wasm compiler written in the Roc programming language. I explained my (ir)rationale for the project in Part 1 of this series, which also included an introduction to the technologies we’ll be using. Note: Other articles in this series are collected here. In this article, we’ll get started writing some Roc code. We won’t get to the point where we are doing anything with WAT or Wasm, yet, but we will be able to load an input file and parse some co...| Dusty Phillips Codes
I’ve been curious about the Roc programming language for a while now, but I haven’t had/taken the time to really dig into it. I’ve read through the tutorial several times, but only yesterday did I actually sit down and install Roc and implement the tutorial. Today, I woke up with the ridiculous idea to build a compiler in the language. A simple compiler, to be clear.| Dusty Phillips Codes
I’m working on a new book! This one will be published online with plenty of begging for support on my Patreon. If there is sufficient interest, I’m planning physical and ebook editions later this year. LazyVim for Ambitious developers is a book for the modal-editor-curious out there. Vim and Neovim have a reputation for being hard to learn and configure. LazyVim really negates that reputation, but its documentation still assumes that you have a lot of prior knowledge with Vim and Neovim.| Dusty Phillips Codes
Dexie Cloud was released publicly today, and I love this product so much that I want to lend my voice to the marketing effort. Dexie.js is an incredible library for interacting with IndexedDB in the browser. It wraps the sometimes-obtuse (and oft-buggy) IndexedDB APIs with much more developer-friendly interfaces. And it is fully reactive; if you change something in the database, your React, Svelte, Vue, Angular, or Solid.js (Solid support is weak) app will live update all by itself! It’s a ...| Dusty Phillips Codes
My wife and I have been working on Fablehenge—a writing app for novelists—for several years. It had been a free time project where we’d push hard over a few weekends, then let it sit idle for a couple months perhaps tinkering in the evenings when we had a bit of time. At the beginning of this year, I decided to take a sabbatical, which was supposed to involve cutting new hiking trails and woodworking. While it has done that, I found I’ve also been working on Fablehenge (more or less) ...| Dusty Phillips Codes
In my last article on Inko, I implemented several data structures to demonstrate how Inko’s single ownership model works. In this article, I will expose a big lie in that article and also dive into how Inko safely handles concurrency. Why Concurrency is Hard Truth be told, concurrency is hard for a lot of reasons, but the one that comes up most often is concurrent memory access. If you have two threads of execution running at the same time, and they both read from and/or write to a variable...| Dusty Phillips Codes
I briefly described Inko’s unique memory management model in my previous article. In this one, I want to go into a little more detail on single ownership and move semantics by implementing a few linked lists, and a couple graphs. This is a tutorial about Inko and not about data structures, so I am assuming that you have a passing knowledge of the data structures in question (or know how to use a search engine to get that passing knowledge).| Dusty Phillips Codes
I’ve spent much of my free time (if there is such a thing) over the past few years researching various esoteric programming languages for no reason whatsoever. Some of my favourites include Rescript and Gleam, which target the Javascript and Erlang ecosystems, respectively. But I’ve really been looking for something a little more native. It seems to me that there is a big gap on the language spectrum, somewhere between Rust and Go:| Dusty Phillips Codes
UPDATE: I’ve updated the Inko Formula on Homebrew to 0.11.0, so you may just want to use brew install inko instead. That said, There are a few bugfixes on Inko that didn’t make it to the 0.11.0 release, so you may want to build off the main branch instead. I have a blog article in progress about why I’m super excited about the Inko Programming Language. It’s nowhere near completion, however, and I wanted to share how I got the latest version Inko running on MacOS (Ventura).| Dusty Phillips Codes
Throughout my career, I’ve at least tried most of the available programming editors. More than two decades ago, I heard about the vi-vs-emacs debate, and made a pact with myself to use both for at least a year before deciding which I preferred. I started with vim, switched to emacs after a year, and decided I preferred vim. I joined the sublime-text bandwagon for a year or two in the early 2010s, switched back to vim in the middle of the decade, and eventually did the big switch to vscode.| Dusty Phillips Codes
Introduction This is the sixth in a series of articles exploring the Gleam programming language. In this one, I’m setting aside my little password cracking project to look at gleam for frontend development. I love Rescript for frontend development, it’s a very practical functional programming language, and I’ve written a lot on the topic. So this article will also be a bit of a comparison of Gleam and Rescript. This isn’t really a fair comparison as Rescript is a mature language, and ...| Dusty Phillips Codes
Introduction This is the fifth in a series of articles exploring the Gleam programming language. In the most recent article, we started exploring how Gleam interfaces with ERLang’s powerful OTP concurrency framework to brute force some passwords. However, it was suboptimal, partially because I didn’t know what I was doing, and partially because I didn’t have time to go into some of the deeper details. I also had a super valuable tip from the Gleam discussion group that I wanted to go into.| Dusty Phillips Codes
Introduction This is the fourth in a series of articles exploring the Gleam programming language. The first article explored some of the most basic features of Gleam; just enough to say hello. The second discussed looping constructs, namely that gleam doesn’t have them. The third was supposed to be about parallel programming and OTP, but it ended up being more about looping and recursion. So this one is about parallel programming and OTP.| Dusty Phillips Codes
I’ve started a tutorial-style series on the Gleam programming language and wanted to collect them together here. Part 1: Hello World Part 2: Looping Without Loops Part 3: Tail Recursion Part 4: Parallel with OTP Part 5: Better Parallel Processes| Dusty Phillips Codes
Introduction This is the third in a series of articles exploring the Gleam programming language. The first article explored some of the most basic features of Gleam; just enough to say hello. The second discussed looping constructs, namely that gleam doesn’t have them. This one was supposed to investigate how Gleam integrates with Erlang’s famous OTP library for concurrency and fault tolerance. But I got sidetracked and ended up doing a second article on recursion and tail recursion instead.| Dusty Phillips Codes
(Original published September 30, 2021. Updated May 7, 2022) Introduction Most of my Rescript series so far has been about combining Rescript with React using create-react-app. Now that I understand Rescript better, I’m not so sure create-react-app is a good fit for it. Mostly because it’s slow. Rescript compiles JSX natively, so we shouldn’t need slow and hard-to-configure webpack. Most of create-react-app is about hiding the configuration of webpack from the end-user.| Dusty Phillips Codes
Introduction This is the second in a series of articles exploring the Gleam programming language. The first article explored some of the most basic features of Gleam; just enough to say hello. Hello is basically the first thing we learn in any language (whether human or programming). This article explores looping in Gleam. More specifically, it explores the fact that Gleam doesn’t have any looping constructs. That’s right: none. Patreon If you find my content valuable, please do consider ...| Dusty Phillips Codes
Introduction Gleam is a newish programming language that I recently stumbled upon. It is so little-known that there aren’t really any tutorials available on it (even on the official documentation), so I decided to write my own. Gleam transpiles to Javascript and Erlang. I’ll be focusing my attention on the Erlang side of things, as it is more mature. And to be honest, I don’t feel any reason to replace Rescript, my go-to transpires-to-Javascript language.| Dusty Phillips Codes
Introduction I was basically flat with an illness (yes, that one) on my back for two weeks in March. I could do little more than read articles on my tablet, and for reasons I cannot explain, I began chainsmoking the documentation for as many little-known languages as I could find. I honestly don’t know why. In the fog of illness, it just seemled a fun thing to do. I’m weird.| Dusty Phillips Codes
Introduction I’ve been writing plenty about Rescript this year, although I’ve taken a bit of a hiatus to focus on developing a couple (Rescript) open source libraries. I wanted to get back into blogging to answer one of the most confusing questions in the Rescript community: What is ReasonML and how does it relate to Rescript? However, it has grown into something quite a bit bigger. Instead, we’ll be talking about the relationships between a collection of several interrelated languages,...| Dusty Phillips Codes
As hinted in some of my recent articles on Rescript, I’ve been working on bindings to the wonderful Dexie interface to IndexedDB. It’s finally ready to announce to the world (in a fairly beta format)! rescript-dexie depends on a recent version of Rescript and the rescript-promise library. It’s still fairly beta and I haven’t covered all the features Dexie packs in yet, but the basics are working well. It feels intuitive and gives the right mix of sound type safety and easy call sites.| Dusty Phillips Codes
Introduction (Note: There is a more recent version of this article) Most of my Rescript series so far has been about combining Rescript with React using create-react-app. Now that I understand Rescript better, I’m not so sure create-react-app is a good fit for it. Mostly because it’s slow. Rescript compiles JSX natively, so we shouldn’t need slow and hard-to-configure webpack. Most of create-react-app is about hiding the configuration of webpack from the end-user.| Dusty Phillips Codes
Introduction For basic syntax, functional programming does not feel that different from other paradigms. Sure, data and behaviour are separate, so you don’t have classes or objects or inheritance, but it feels relatively the same. This is especially true in Rescript, with the pipe-first syntax almost looking like a method lookup (comparable to the self object in Python). But if you go deeply into a study of functional languages, you start encountering bizarre words such as “monad” and ...| Dusty Phillips Codes
Introduction Polymorphic variants in Rescript are strange beasts. They aren’t generally that useful in pure Rescript programming, but are frequently necessary in binding to Javascript. Polymorphic variants are extremely flexible (too flexible), but one of the most common uses is to represent a list of constant strings that a JS binding can accept. For example, the ubiquitous on function used for event handlers typically takes a string as its first parameter, as in on("click".| Dusty Phillips Codes
Parsing dynamic content such as JSON in a statically typed language can be rather daunting. This article voices some opinions about schemaless design and migrates some of the messy json parsing code from the standard library to the excellent jzon library.| Dusty Phillips Codes
In a recent article I introduced rescript-zora, a library I wrote for unit testing Rescript code with lightning fast responses. One drawback of zora is that it’s very minimal. In this article, I explore some design principles and go on a bit of a rant about the definition of the word “unit”.| Dusty Phillips Codes
I wrote Rescript bindings to the zora test framework and wanted to write about how to actually use them.| Dusty Phillips Codes
Continuing my explorations of RxDB and Rescript, this article hooks up mutations to allow RxDB to automatically sync its offline-enabled changes to the graphql server.| Dusty Phillips Codes
I’ve become quite comfortable in Rescript over the course of the past few months. So far in this long-running series, I’ve implemented an RxDB powered offline-enabled application in Rescript. I’ve also written a graphql server using express. In this article, we’ll connect the two so that the RxDB frontend can sync with the graphql database.| Dusty Phillips Codes
In the previous article we implemented the sync read endpoints between our graphql server and our RXDB client. In this one, we’ll hook up the mutations.| Dusty Phillips Codes
Now that our Rescript client and server have the same data model, we can hook up the graphql endpoints to sync the offline rxdb database with the graphql server.| Dusty Phillips Codes
My publisher recently unveiled the fourth edition of Python Object-oriented Programming. This one has a new twist: I didn’t write it!| Dusty Phillips Codes
Continuing my ongoing series on the Rescript programming language, I discovered I needed to refactor my backend to better suit the graphql queries the frontend has to make to it.| Dusty Phillips Codes
Rescript is a delightful programming language pulling in the best elements of Javascript and functional languages without the worst bits of either. In this article, we create a graphql server in Rescript.| Dusty Phillips Codes
Instead of writing a new article on Rescript this weekend, I ended up writing an entire project in Rescript! rescript-zora provides Rescript bindings to the lightning-fast zora unit testing framework. I chose zora because it has excellent SEO for “fastest javascript test framework”, and it deserves it.| Dusty Phillips Codes
Now that our RxDB models are complete, we can hook it up to a react app for a complete offline experience.| Dusty Phillips Codes
Extending the JS bindings I’ve modelled in previous articles, in this add bindings for subscribing to queries, and hook those up to Application state.| Dusty Phillips Codes
In an earlier article, I started modelling RxDB calls from rescript with the intent of building an offline-enabled Rescript app. This article continues from that base, modelling collections and queries.| Dusty Phillips Codes
I wanted to explore progressive web apps, and I took the opportunity to learn about binding Rescript to existing Javascript libraries.| Dusty Phillips Codes
As part of my ongoing experiments with Rescript, I decided to implement a Node app with express.| Dusty Phillips Codes
In this article, we complete the Recipes single page app we’ve been developing in Rescript by styling it with Emotion, a popular framework for styling in React systems.| Dusty Phillips Codes
Continuing my series on Rescript, this article covers React forms with managed state and dispatching useReducer actions when our state changes.| Dusty Phillips Codes
Continuing my series on Rescript, I add a couple React components to the ongoing app I’ve been developing.| Dusty Phillips Codes
When I first encountered the Internet my peers and I thought it was great fun to share our dev setups. We were always optimizing and always looking for new ways to optimize. Not to mention showing off. I lost interest in this practice because I settled into a system that was sufficient for my needs. Also, I didn’t have time! But I’ve recently made a ton of changes to my workflow that some might be interested in, and I happen to have some time as I’m between jobs.| Dusty Phillips Codes
As a functional language, Rescript maps beautifully to redux-style state management, without all the boilerplate| Dusty Phillips Codes
Continuing my journey to learn Rescript using a real-world react-app. In this article, we create some new components.| Dusty Phillips Codes
I recently discovered the Rescript programming language and am really excited about it. I haven’t found many tutorials on the subject, so I’m documenting my steps as I go.| Dusty Phillips Codes
2020 has been one of my best years ever. I know, right? Ten years ago, I spent the Christmas season at “5 North”; Medicine Hat’s psychiatric ward. The stay started with placing my signature on a piece of paper asserting that I would not try to kill myself for 24 hours. They asked for three days. I couldn’t promise that much time. As near as I can figure, I had been suicidal since I was eight years old.| Dusty Phillips Codes
A friend suffering from perfectionism has caused difficult interference in their life. I developed a technique that might be useful to others who have to deal with the negative aspects of perfectionism.| Dusty Phillips Codes
I am trying a new blogging format hoping that I can post interesting content more often. Looking for feedback on the format.| Dusty Phillips Codes
(contains amazon affiliate links) I have had repetitive stress injury (RSI) flareups on and off for many years. I’ve kept them under control mostly through use of a Kinesis Advantage ergonomic keyboard that I’ve had for fifteen years. However, several months ago, I was diagnosed with carpal tunnel syndrome and instructed to avoid typing if at all possible. I make my living programming and writing. My hobbies are programming and writing.| Dusty Phillips Codes
I’ve been wondering what to do with this blog for a while. I haven’t had time to do the technical deep dives I used to do. But I’ve also been reluctant to pivot into different kinds of articles. I’ll write more about that in the future (the summary is that I’ve been writing fiction instead of code in my free time). For now, however, I’ve decided to publish a non-technical shallow dive on something I do not understand very well: stock markets and economics.| Dusty Phillips Codes
I am not a productivity coach. I don’t even like the concept of a productivity coach. I’m also not a mental health coach, although I am successfully managing mental illness, and I assure anyone dealing with depression, mania, or anxiety right now, that you matter. Things can and will get better. I haven’t written much about mental health since I rebooted my blog. Today, I want to talk about how goals affect our state of mind.| Dusty Phillips Codes
I’m about halfway into writing my first novel. Though I have plenty of writing experience, this is my first real attempt at fiction. I’ve been surprised at the difficulty! Some of my skills transfer over; I still know the basic structure of the English language and I put commas in the right places more often than not, for example. But many other things are much different. The hardest change I’ve had to make is the order I present information.| Dusty Phillips Codes
Parts in this series An Order to Learn to Program, Part 1 An Order to Learn to Program, Part 2 An Order to Learn to Program, Part 3 An Order to Learn to Program, Part 4 An Order to Learn to Program, Part 5 An Order to Learn to Program, Part 6 Part 6: Local Development This is part 6 in my series on the order to study topics related to programming.| Dusty Phillips Codes
Python 3 Object-oriented Programming 3rd Edition My publisher unveiled the third edition of Python 3 Object-oriented Programming today! This has been the culmination of several months of work. Editing and updating the second edition was a pleasure. It was gratifying to discover that the content has aged well. This was not the case with the first edition; I did extensive restructuring and rewriting before I was satisfied with the second.| Dusty Phillips Codes
One of many things I love about Python is how whitespace is an integral part of the language. Python was the first popular programming language designed with the idea that “code is read much more often than it is written.” Forcing authors to indent code in a maintainable fashion seemed a brilliant idea when I first encountered Python fifteen years ago. The lack of braces scattered throughout the code made for easier reading.| Dusty Phillips Codes
Parts in this series An Order to Learn to Program, Part 1 An Order to Learn to Program, Part 2 An Order to Learn to Program, Part 3 An Order to Learn to Program, Part 4 An Order to Learn to Program, Part 5 An Order to Learn to Program, Part 6 Part 5: Beginner programming, dynamically typed This is part 5 in my series on the order to study topics related to programming.| Dusty Phillips Codes
The venerable RSA public key encryption algorithm is very elegant. It requires a basic understanding of modular arithmetic, which may sound scary if you haven’t studied it. It reduces to taking the remainder after integer long division. The RSA Wikipedia article describes five simple steps to generate the keys. Encryption and decryption are a matter of basic exponentiation. There’s no advanced math, and it’s easy to understand their example of working with small numbers.| Dusty Phillips Codes
Parts in this series An Order to Learn to Program, Part 1 An Order to Learn to Program, Part 2 An Order to Learn to Program, Part 3 An Order to Learn to Program, Part 4 An Order to Learn to Program, Part 5 An Order to Learn to Program, Part 6 Part 4: Binary, bits, and bytes This is part 4 of my series on the order to study topics related to programming.| Dusty Phillips Codes
Whenever I start a new hobby web project, I just want to jump in and start coding. Instead, I spend many many hours trying to get authentication to work. I’ve got half a dozen half-finished “boilerplate” projects lying around that were supposed to satisfy the desire of, “next time, I can use this boilerplate and authentication will just work.” It never does. One thing I know I don’t want to do is manage my own auth database anymore.| Dusty Phillips Codes
Parts in this series An Order to Learn to Program, Part 1 An Order to Learn to Program, Part 2 An Order to Learn to Program, Part 3 An Order to Learn to Program, Part 4 An Order to Learn to Program, Part 5 An Order to Learn to Program, Part 6 Part 3: SQL Basics It’s not common to see SQL as the next language taught after HTML.| Dusty Phillips Codes
My wife and I both have a tendency to leave the garage door open. You’re in and out, grabbing garden tools or supplies, and at the end of the day you enter the house through the back door and forget to check the garage. Luckily, we live in rural Canada, surrounded by wonderful people, where the door could sit open for days without anything “disappearing”. But it still makes me feel nervous to discover it’s been forgotten, if only because it is a waste of heat in the winter (not to men...| Dusty Phillips Codes
I really appreciate Python’s pathlib module for managing filesystem stuff. While I don’t love the argparse module for command line parsing, I don’t think it’s worse than other available options. I usually choose it for my CLI scripts, since nothing else is good enough to overcome the inertia of using a third party library. Not many people seem to be aware that the two can very easily be combined such that argparse will return Path objects instead of strings that need to be adapted aft...| Dusty Phillips Codes
Parts in this series An Order to Learn to Program, Part 1 An Order to Learn to Program, Part 2 An Order to Learn to Program, Part 3 An Order to Learn to Program, Part 4 An Order to Learn to Program, Part 5 An Order to Learn to Program, Part 6 Part 2: HTML This is the second in a series on the order to study topics related to programming.| Dusty Phillips Codes
I accidentally started working on a new personal project for budgeting that I think others might be interested in. I haven’t open sourced any projects in quite a few years now, but if I actually finish an iteration of this project, I think I’ll probably share it under an open licence. While I’ll be running the service locally, it is implemented entirely in Javascript React, and could easily be deployed as a SAAS.| Dusty Phillips Codes
Parts in this series An Order to Learn to Program, Part 1 An Order to Learn to Program, Part 2 An Order to Learn to Program, Part 3 An Order to Learn to Program, Part 4 An Order to Learn to Program, Part 5 An Order to Learn to Program, Part 6 Part 1 Learning to program is hard. There are a few reasons this is the case:| Dusty Phillips Codes
Back in 2012, I wrote a book called Hacking Happy. It was my first self-published work, and I was actually surprised by how well it did without a publisher or marketing behind it. I had plenty of positive feedback including more than one hopefully exaggerated, “This book saved my life.” Most of the feedback was a bit more sedate, but I received a lot of private messages thanking me for writing it.| Dusty Phillips Codes
Hi there, I’m Dusty. Welcome to my resurrected blog. I started a tech blog in 2007 that I maintained with regular posts for several years. While it was well-regarded at the time, I took it down in late 2016 for several reasons. First and most obviously, I became extremely busy, and simply did not have time to keep up the schedule and quality of my writing. That reduced availability coincided with my taking on a new role with Facebook in late 2013.| Dusty Phillips Codes
I’ve written a few books over the years: table#books, table#books tr, table#books td { border-width: 0; padding: 20px; } LazyVim for Ambitious Developers Introduces the excellent LazyVim distribution to developers new to modal editing. Published online for free with print and ebook editions also available. Python Object Oriented-Oriented Programming launched my career, both as a programmer and as a writer.| Dusty Phillips Codes
My most popular series is my ongoing list of Rescript articles. It’s gotten so long now that I’m tired of updating the table of contents on every article each time I add a new one! So I’ve extracted it here so you can find everything in order in one place: Setting up a Rescript Create-react-app from scratch Rescript With React: Routing and Navigation Actions and Reducers in Rescript A Couple React Components in Rescript Firing Actions from Rescript React Components Styling in Rescript w...| Dusty Phillips Codes
Dusty Phillips is a Canadian software developer and author. He’s been developing software for well over half his life. He spent most of his career writing Python in a wide variety of contexts: freelance consultant, first engineer at a 2 person startup, director of engineering at a startup, engineer at Facebook, a stint with the United Nations to name a few. He’s written a few books along the way with more to come.| Dusty Phillips Codes
I love coding. I love writing. I love writing about coding, as evidenced by the archives of this blog and the multiple tech books I have written. I’ve always prided myself on being able to explain things clearly. I have a unique ability to identify the order in which to teach concepts. I have enough five star reviews on my books to know that there are plenty of readers out there who agree with me.| Dusty Phillips Codes