A Fediverse app built on Solid
I wrote a Solid app to post to the Fediverse. It worked, but…
My name is Vincent Tunru, and this is where I write about things that interest me as a front-end engineer.
I wrote a Solid app to post to the Fediverse. It worked, but…
React's main benefit used to be that it was easy to reason about. Is it still though?
It appears that Tailwind is somewhat contentious: it’s either the best thing since sliced bread or literally provides no value . While such extremes might make for interesting reading, the proper way to evaluate technologies is to attempt to understand the problems they solve, and then determine whether those are problems you actually have. So let me try to help with that. In a nutshell, Tailwind…
The concept of Semantic Versioning sounds simple enough, but it's been the source of untold lost hours of confusion and disagreements. A small change in perspective can help settle such issues once and for all.
In my time, I've done a number of side projects — some serious, some decidedly less so. My latest side project is quite definitely in the latter category: trying to win a game show on national television.
I describe a number of measures that help me to regularly deploy to production without fear of my code breaking.
Do you need Babel when you use TypeScript, or vice versa? Does it make sense to combine the two?
Migrating from create-react-app-typescript to mainline Create React App was surpisingly easy. Here's how to do it.
I just implemented a little change that I think will greatly improve the quality of bug reports I receive: I created a minimal boilerplate repo for my project. The best bug reports are minimal, complete, and verifable . In other words: The maintainer should not be distracted by things not relevant to the bug. All info relevant to the bug should be included. The maintainer should be able to observe…
When it comes to unit testing, there are three schools of thought that I’m aware of: We don’t do unit testing, since they are overrated/too hard/take too much time/whatever. We only test critical/error-prone parts of our code, and bugs that have been fixed. We want a significant part of our code to be covered by tests. I’m usually in the latter camp: I think that automated tests are one of the…
Version control systems like Git are widely appreciated for their ability to provide a centralised location for source code, for helping people work together on the same code base, and for allowing you to scrap the crap you just wrote and get your code back to the state it was in before you started your misguided refactoring. However, there’s one thing it can do for you that is overlooked too…
This post is a summary of a talk I gave today, in which I made the case for Functional Reactive Programming in Javascript using libraries such as RxJS . Bugs, bugs, bugs If debugging is the process of removing bugs, then programming must be the process of putting them in. —Edsger W. Dijkstra All else being equal, software with fewer bugs is better than software with more bugs. To minimise the…
There’s a lot of excitement about reactive programming in the front-end community: Angular ships RxJS with Angular 2 There’s a draft proposal to add an Observable to Javascript proper There’s a framework built entirely around the Observable React is most commonly used in a reactive application structure together with Redux …and if not with Redux, then with the Observables of MobX Reactive…
Here’s a short public service announcement for those who write their tests using Jasmine or Protractor : avoid the toBeTruthy() and toBeFalsy() matchers and use toBe(true) and toBe(false) instead. (Off topic: I’ve also seen people confuse Jasmine and Karma . Karma fires up a browser to run tests in, but the actual tests are written using a testing library such as Jasmine.) What’s the problem? I’ve…
Previously, I took a look at the current state of Javascript frameworks . Today, I will take a look at what I think will be the next frontier of front-end programming: functional reactive programming. (Functional) Reactive Programming Reactive Programming revolves around the use of a data structure representing asynchronous data, called observables or streams . You could compare them to Promises .…
Javascript frameworks come and go — by the time you have finished reading this post, three new frameworks will have been released. While it may sometimes look like they’re just introducing more syntax to learn, the ones that actually get popular often introduce new paradigms that allow us to build features more quickly and with fewer bugs. We can learn a lot by taking a step back: where did we…
André Staltz recently argued that all Javascript libraries should be authored in TypeScript — which turned out to be rather controversial on reddit . I think that a lot of the resistance originates in the expectation that TypeScript is a completely new language that compiles to Javascript, comparable to the likes of CoffeeScript. In this post I’ll try to clear up this misconception. It’s not a…
One of the reasons I created A Grip on Git was that there were some things with which I wanted to play. One of those things was Redux , a library that greatly simplifies state management in your Javascript applications. It helps you to be more explicit about possible changes in your application state by defining all possible state transformations as ( pure ) functions (referred to as reducers in…
Git is one of the most important tools in software development right now. It doesn’t matter what sector your company is active in, what programming language you use or whether you do waterfall, scrum, kanban or what not; the most common denominator is going to be version control. And most of the time, you’ll be using Git to do it. Unfortunately, knowledge of Git is often limited to memorising a…
This post is for people running into the following error when running a Protractor test for their Angular apps: Error: Error while waiting for Protractor to sync with the page: {} Many search results on the internet tell you that you can solve it by adding browser.ignoreSynchronization = true; to your code, with a remark like : the key is to browser.sleep(3000) to have each page wait until…