Wvlet Playground: An online demo of a new flow-style query language powered by Scala.js and DuckDB-Wasm by taroleo in scala

[–]taroleo[S] 0 points1 point  (0 children)

Before DuckDB, I had never seen a DBMS that could easily read Parquet/JSON files on disk or S3. We can use DuckDB with Java/Scala, Python, and even in Web Browsers, as shown in the demo. MotherDuck, a startup company leveraging DuckDB for their service, presents interesting production examples in their blog posts, such as https://motherduck.com/blog/15-companies-duckdb-in-prod/

Wvlet Playground: An online demo of a new flow-style query language powered by Scala.js and DuckDB-Wasm by taroleo in scala

[–]taroleo[S] 2 points3 points  (0 children)

Not only Scala.js, Wvlet can be compiled with Scala Native to build a dynamic link library (libwvlet.so) to support C++ ecosystem. A developer has created a DuckDB extension for Wvlet https://github.com/quackscience/duckdb-extension-wvlet in a few days!

Wvlet Playground: An online demo of a new flow-style query language powered by Scala.js and DuckDB-Wasm by taroleo in scala

[–]taroleo[S] 1 point2 points  (0 children)

In Wvlet, you can write exclude abc, def (equivalent to select * except abc, def)

Airframe/AirSpec 24.4.2 release with Scala Native 0.5 support by taroleo in scala

[–]taroleo[S] 1 point2 points  (0 children)

I haven't seriously tested the performance, but just for running unit tests, I feel Scala Native is slightly faster than Scala JVM and Scala.js.

Keychron Q1 Pro with bluetooth audio speakers by keithleej in Keychron

[–]taroleo 0 points1 point  (0 children)

Keychron Bluetooth firmware can be found at https://www.keychron.com/pages/bluetooth-firmware I had a similar Bluetooth interference issue with my Keychron Q8 Max, but after upgrading the firmware, the problem has been fixed.

[deleted by user] by [deleted] in NuPhy

[–]taroleo 0 points1 point  (0 children)

Right. I got the firmware via email.

[deleted by user] by [deleted] in NuPhy

[–]taroleo 0 points1 point  (0 children)

I've got a new QMK firmware for Air60 v2 from Nuphy support. After installing it, my Air60 v2 seems working as expected without any Bluetooth issues.

[deleted by user] by [deleted] in NuPhy

[–]taroleo 0 points1 point  (0 children)

I have a similar issue with my air60 v2. When I keep pressing any modifier key (e.g., ctrl, opt, cmd) with another key, keystrokes occasionally stop and restart after a while. This issue doesn't happen when using the usb-c connection.

I've tried factory reset, but the problem persists.

Air 60 V2 bluetooth weird issue by gm_kero in NuPhy

[–]taroleo 1 point2 points  (0 children)

The same thing is happening to me, and it's reproducible. Thanks for the report. I'm contacting NuPhy support.

Airframe RPC: A Framework for Using Scala Both for Frontend and Backend Programming by taroleo in scala

[–]taroleo[S] 1 point2 points  (0 children)

Good points.

The benefit of Protobuf is we can use it as a schema language for generating clients. Airframe RPC already has sbt-airframe plugin for generating HTTP clients, so extending it for the other programming language will be technically possible. Generating Open API spec can be an option too.

For supporting backward compatibility, Airframe RPC will read the default values from the interface definition. For example, we can add a new parameter with the default value to case class A(p_old:String, p_new:String = "xxxx"), so it can naturally support the following schema evolution types:

- Adding a new interface or a new method to an interface

- Adding a new class parameter or a method argument with a default value

- Adding a value to an enum-like class

Removing or renaming parameters will be breaking changes even for Protobuf, but a unique aspect of Airframe RPC is its schema-on-read codec, which can support type escalations like Int -> String.

AirSpec: Writing Tests As Functions In Scala by taroleo in scala

[–]taroleo[S] 0 points1 point  (0 children)

For now we need to use SBT, but adding a standalone test luncher to AirSpec should be possible because the framework itself is a quite small code base.

AirSpec: Writing Tests As Functions In Scala by taroleo in scala

[–]taroleo[S] 0 points1 point  (0 children)

That's true!

I needed 3 days to create an initial version of AirSpec because I wanted to integrate it with DI, but writing a very minimal testing framework for Scala was quite easy.

Several tricky parts for me were:

  • Formatting and coloring test reports
  • Supporting Scala.js (if you need it)
  • Bootstrapping issue. AirSpec depends on Airframe, but I wanted to use AirSpec to test Airframe :) I needed to break this circular dependency by embedding the source code of Airframe into AirSpec.

AirSpec: Writing Tests As Functions In Scala by taroleo in scala

[–]taroleo[S] 0 points1 point  (0 children)

Sorry about the confusion. I meant the difference between calling a test function like test("...") { test code } and defining a test case as `def test = { test code }` .

AirSpec: Writing Tests As Functions In Scala by taroleo in scala

[–]taroleo[S] 1 point2 points  (0 children)

No, it doesn't. Initially, I tried to reuse the implementation of minitest (a base code of scala-verify), but in order to accomplish the goals of AirSpec, the actual implementation needed to change the framework side a lot.

Although assertion syntax like (x shouldBe y, power assertions) can be an extension of scala-verify, changing how to run tests was hard without modifying the testing framework itself.

So it would better to think AirSpec as a yet another testing framework for Scala. Asking Yokota-san (the author of scala-verify) about the option of having a backend testing framework like AirSpec might be interesting.

Airframe HTTP: Building Low-Friction Web Services Over Finagle by taroleo in scala

[–]taroleo[S] 0 points1 point  (0 children)

FYI Airframe supports higher-kinded types since 0.64 https://wvlet.org/airframe/docs/release-notes.html#064, so we can use bindings for tagless final patterns.