Unix domain socket on Dart

Photo by israel palacio on Unsplash Dart で Unix domain socket やっていきます. Support making HTTP requests through unix sockets 環境 2.17.0–94.0.dev 以上であれば動くはず. $ dart --version Dart SDK version: 2.17.6 (stable) (Tue Jul 12 12:54:37 2022 +0200) on "linux_x64" Get import 'dart:convert'; import 'dart:io';void main(List<String> arguments) async { HttpClient client = HttpClient() ..connectionFactory = (Uri uri, String? proxyHost, int? proxyPort) { assert(proxyHost == null); assert(proxyPort == null); var address = InternetAddress("/var/run/docker.sock", type: InternetAddressType.unix); return Socket.startConnect(address, 0); } ..findProxy = (Uri uri) => 'DIRECT';final response = await client.getUrl(Uri.parse('http://localhost/_ping')).then((request) { return request.close(); }); print(response.statusCode); final responseText = await response .transform(utf8.decoder) .fold('', (String x, String y) => x + y); print(responseText); client.close(); } 実行結果

Work Angular Dart as single binary

Photo by Caspar Camille Rubin on Unsplash テンプレートをさくっと作成. $ dart create -t server-shelf foo $ cd foo $ ngdart create web とりあえず shelf を動かしてみるとこんな感じ. $ dart bin/server.dart Server listening on port 8080 2022-03-27T09:27:03.905499 0:00:00.014259 GET [200] / 2022-03-27T09:27:09.375476 0:00:00.005037 GET [200] /echo/foo--- $ curl http://localhost:8080/ Hello, World! $ curl http://localhost:8080/echo/foo foo 次に Angular Dart の方を build して動かしてみます.

Release tabler for displaying ASCII table format in Dart

Photo by Abel Y Costa on Unsplash go-lang の tablewriter 的な ASCII テーブルで表示するやつが欲しかったの作りました. tabler | Dart Package example のとおりですが,こんな感じで使えます. void main() { var t = Tabler(); t.add(['a', 'b', 'c']); t.add([1, 22, 333]); print(t); // +---+----+-----+ // | a | b | c | // | 1 | 22 | 333 | // +---+----+-----+ } Dart は dart2native あるし,null safety だし Flutter が無かったとしても結構好きなんですが,こんな基本的と言えるライブラリが無いとは. それだけ Flutter でしか使われてないんだろうなぁ.

I tried Dart frontend using shelf

backend はこちら. I tried Dart backend Flutter Web とか AngularDart などあるんですけどちょっと雑にやりたいという場合です. コードは下記の通り. const index = '''<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous"> <title>Hello, world!</title> </head> <body> <main role="role"> <div class="container"> <h1 class="mt-5">{{ title }}</h1> </div> </main> </body> </html>''';void main(List<String> args) async { var handler = const shelf.Pipeline() .addMiddleware(shelf.logRequests()) .addHandler(_echoRequest); var server = await io.serve(handler, _hostname, port); print('Serving at http://${server.address.host}:${server.port}'); }Future<shelf.Response> _echoRequest(shelf.Request request) async { var template = Template(index); var output = template.renderString({'title': 'hoge'}); var headers = {'content-type': 'text/html'} return shelf.Response.ok(output, headers: headers); } index.html を静的ファイルで用意するのが普通だと思うんですが,dart compile して動かしてみたかったので dart ファイルに収めました. go-bindata などのように executable に静的ファイルを include するような仕組みが Dart にもあるといいですね. 気が向いたら作りたい.

Migrating to null safety on Dart

Photo by Jamie Davies on Unsplash いよいよ Dart の null safety が stable となりました. これまで何回か紹介しているライブラリ ipaddr を null safety にしていく過程をメモしておきます. 参考までに pullrq は下記です.

I tried Dart backend

Photo by Goran Ivos on Unsplash Flutter には盛り上がりがみられる Dart でバックエンドもやってみました. この時気になるのがフレームワークどうするか問題ですね. メジャーどころは下記の 2 つです.

Testing out sembast

Photo by fabio on Unsplash Flutter でモバイルだけでなくデスクトップや Web などマルチプラットフォームに対応している NoSQL データベースライブラリ sembast を使ってみたのでメモ.

I created a Dart library that simplifies working with IP addresses

Photo by Alexandru Acea on Unsplash Dart で ipaddress をいい感じにするライブラリを作りました. yuzumone/ipaddr ipaddr | Dart Package モチベーション 生活していると「あーこのアドレスがこのセグメント内かどうか調べたいわー」となることが多いと思います. これまでは Python でやることが多かったのですが,Dart でやりたい欲がふつふつと湧いてきました. 軽く見た感じ Python の ipaddress 相当のものがなさそうだったので作りました.