ブックマーク / zenn.dev/mattn (7)

  • Nostr の面白さをエンジニア目線で解説してみる

    はじめに 今年は、SNS でありプロトコルでもある Nostr に出会いました。2023年2月の参加でしたがもう、どういった経緯で Nostr を見付けて参加したのかすら思い出せなくなってしまいました。ここ数年、X/TwitterAPI という物を開発者に触らせなくなってしまいました。僕は X/Twitter が大きくなった理由の1つが、API をオープンにした事で数多くの bot やサービスがが登場した事だと思っていて、API が自由で無くなった X/Twitter をとても残念に感じています。次第に SNS に関連する何かを作るモチベーションはさっぱり無くなってしまっていました。 そんな中で見付けた Nostrエンジニアのオアシスとでも言える SNS だと感じました。 Nostr の思想 X/Twitter は中央集権型の SNS であり、以下の様な問題を持っています。 障害

    Nostr の面白さをエンジニア目線で解説してみる
    t_f_m
    t_f_m 2023/12/17
  • nostr と Bluesky に7つ bot を作り k8s で稼働させた

    俳句bot (nostr) nostr の日リレーを監視し、投稿を 575 または 57577 判定し、引用でお知らせする。狙った俳句ではなく、天然物の俳句がマッチするとウケが良い。 Go で実装。内部では go-haiku を使って俳句を判定。監視は日語の投稿が流れる日のリレーをお借りしている。普通の Go アプリなので golan:1.20-alpine でビルドして scratch でイメージ作成。 # syntax=docker/dockerfile:1.4 FROM golang:1.20-alpine AS build-dev WORKDIR /go/src/app COPY --link go.mod go.sum ./ RUN apk add --no-cache upx || \ go version && \ go mod download COPY --link

    nostr と Bluesky に7つ bot を作り k8s で稼働させた
    t_f_m
    t_f_m 2023/05/05
  • Sleep FizzBuzz

    Twitter で散歩していたら、昨日こんなツイートを見付けました。 コードはこんな感じ。(ツイート主がメンションで修正している内容を反映済み) use std::{ thread::{self, sleep}, time::Duration, }; fn main() { thread::spawn(|| { sleep(Duration::from_millis(2100)); loop { print!("Fizz\x1b[K"); sleep(Duration::from_secs(3)); } }); thread::spawn(|| { sleep(Duration::from_millis(4200)); loop { print!("Buzz\x1b[K"); sleep(Duration::from_secs(5)); } }); for i in 1.. { print

    Sleep FizzBuzz
    t_f_m
    t_f_m 2022/02/10
    \r でカーソルを行頭に、 \x1b[K でカーソルから行末までを削除(つまり数値部分を削除)
  • bash スクリプトの実行中上書き動作について

    を設定してから再度試した所 bar が表示された。backupcopy は編集中のファイルによって自動で判別する auto がデフォルトになっている為、試す際には明示的に yes に設定しないといけない。 bash の実装確認 evalstring.c の parse_and_execute でコマンドが処理されており、input.c の with_input_from_buffered_stream で読み込みの準備が行われている。バッファの読み込みの体は y.tab.c つまりパーサから直接呼ばれており、このパーサは fgets(3) で読み込まれつつ実行される為、一括でファイルが読み込まれている訳ではない。 while/do でループ実行した際に、ファイルを書き換えられたら戻り先はどうなるか、についてはスクリプトはバッファ付きで読み込まれており、そのバッファがファイルシステムから読

    bash スクリプトの実行中上書き動作について
    t_f_m
    t_f_m 2021/12/29
  • ls -l はなぜ事故を起こすのか

    はじめに この記事は以下の記事で事故がなぜ起きたかを技術的に理解し筆者のtipsを共有しようと思い書きました。あくまで筆者のtipsですので、これが正しいとは限りません。 やはり、下記のコマンドが原因でした。 [root@foo script]# ls -l | sh 事故そのものは ls コマンドに -l を付けて実行してしまった事で、ls コマンドが出力したシンボリックリンクが以下の様になってしまったという話です。

    ls -l はなぜ事故を起こすのか
    t_f_m
    t_f_m 2021/04/07
  • 4/1に間に合わなかったけどSQLite3にPLEASE句を追加するパッチを書きました

    はじめに 4/1 に MySQL に please 句を入れるのが流行っていた様です。 そして各 RDBMS も追従して please 句を入れる祭が開催されていた様です。 まずは PostgreSQL そして Oracle 完全にノリ遅れてしまいました。大失態です。 気付いたのは 4/4 の昨日です。 これは乗るしかない 既に 4/5 の午前 0 時なのですが、SQLite3 に please 句を入れるパッチを書きました。 diff --git a/src/parse.y b/src/parse.y index b748e1917..782199fb7 100644 --- a/src/parse.y +++ b/src/parse.y @@ -151,6 +151,12 @@ ecmd ::= explain cmdx SEMI. {NEVER-REDUCE} explain ::=

    4/1に間に合わなかったけどSQLite3にPLEASE句を追加するパッチを書きました
    t_f_m
    t_f_m 2021/04/05
  • grep の「バイナリファイル (標準入力) に一致しました」が出る条件を調べていたらそれは長い旅路の始まりだった。

    はじめに 昨今では1行につき、1つの JSON を出力する様なログファイル形式も珍しくはありません。 grep しやすい データベース化しやすい これらの理由で各所で多く使われています。僕も仕事で普通に使っているのですが、ある日突然そのログファイルを集計するスクリプトで以下の様なエラーが出始めました。

    grep の「バイナリファイル (標準入力) に一致しました」が出る条件を調べていたらそれは長い旅路の始まりだった。
    t_f_m
    t_f_m 2020/10/06
  • 1