27 March 2024

AI is tasting your beer for you

In a study in Nature  the taste of a potential recipe for a Belgian beer is being predicted by Machine Learning based on its chemical components at KUL (Catholic University Leuven).

One of the primary goals of the study is brewing better tasting alcohol free beers.

The techniques used are also interesting for being tested on other types of food.

Replacing Jest for TypeScript testing

 In an earlier post we explained how we moved from ts-node to tsx.

For testing we were using Jest. Unfortunatly Jest relies on ts-node for reading typescript configuration files. We used ts-jest for the configuration and even then we needed quite some configuration in jest.config.ts to work with ESM:

import type { JestConfigWithTsJest } from 'ts-jest'

const jestConfig: JestConfigWithTsJest = {
// [...]
preset: 'ts-jest/presets/js-with-ts-esm', // or other ESM presets
moduleNameMapper: {
'^(\\.{1,2}/.*)\\.js$': '$1',
},
transform: {
// '^.+\\.[tj]sx?$' to process js/ts with `ts-jest`
// '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest`
'^.+\\.tsx?$': [
'ts-jest',
{
useESM: true,
},
],
},
}

export default jestConfig
With the compatibility problem with Node.js 20 we looked for some alternatives:
  • vitest
  • node builtin testing 

vitest 

Vitest is built by the Vue community, who also made the vite build tool. As the name suggest, vitest's natural habitat is vite (which we are not currently using), but it runs without vite.

Like tsx it is a modern tool, built with support for typescript and ES modules builtin, and setup was a breeze. 

Just like tsx, it has a builtin watch mode. This mode is even the default: you run your test, then you correct our code and the test automatically reruns.

We adapted the test scripts to our package.json:

"scripts": {
"start": "tsx watch server.ts",
"debug": "tsx watch --inspect-brk server.ts",
"build": "tsc",
"test": "vitest",
"coverage" :
"vitest run --coverage "
}

Vitest's testing API is heavily inspired on, and compatible with Jest, easing migration. The only things we had to change, were some imports.

Node.js builtin Test Runner

The new Node builtin TestRrunner (node:test module), that is present in the Node.js 20 LTS, does not require you to add testing packages to your project. 
It does not have the same level of testing support as a specialised testing package like vitest, but it's feature set is surprisingly complete, but test coverage is still under an experimental flag. Here's a comparison.
Unfortunatly the test runner does not find *.ts files when looking for tests. You can work around this and they are also working on easier support for this in Node.js 21.

Conclusion: replace Jest with vitest

We'll certainly gives this another look when the next Node LTS is released, but as for now vitest is the way to go and we are happy with our tsx/vitest setup.

Firefox (124) adds in-browser PDF editing

 

1 March 2024

Stackoverflow to charge for AI usage of its Q&A data

Stackoverflow will charge AI companies for usage of its data and will require attribution back when its answers are used.

More info...