自由帳

@_nibral の技術ブログ

RustでActivityPubサーバを書いていてハマったところ

ここ半年くらいMisskeyの某サーバに定住していて、裏で動いている仕組みが気になったので勉強がてらRustでActivityPubのサーバを書いた。といってもガチのアプリケーションではなく、複数のBOTユーザを抱えてフォロワーにノートを配信するだけの片方向な感じ…

日本語配列でBluetoothマルチペアリングができるキーボード「Sunrise70」を作った

日本語配列で複数台のPCにBluetooth接続できるキーボードが欲しくなったが、既にある製品や自作キットだと矢印キーが横並びになってたり分割前提だったりしてどれも微妙に納得いかない感じだったのでイチから作った。スイッチは軽くて静かなのが気に入ったの…

ECS + FargateでgRPCを動かす

gRPCでリクエストを受けるアプリをECS + Fargateで動かしつつ、ちゃんと負荷分散するために調べたことのメモ。 2021/2/22 追記 ALBがgRPCをサポートしたのでこの記事の内容は不要になった。 aws.amazon.com 先に結論 リバースプロキシとしてenvoyを走らせて…

Amazon Auroraで"Unknown MySQL error"が出る

DjangoのチュートリアルをDockerで動かしていて、DBにAmazon Aurora (MySQL 5.7)を使おうとしたらERROR 2000 (HY000): Unknown MySQL errorが出た話。 docs.djangoproject.com 先に結論 クエリキャッシュを無効にする (query_cache_type = 0) と解決する。 …

i3-9100Fで自宅PCを組んだ

メモリとSSDが安くなってたので勢いで。 構成 まず、いままで使っていたPCの構成がこちら。Netflixで映画を見たりETS2でヨーロッパを走り回る分には特に問題ないが、組んでから4年半が経過してるのでそろそろ入れ替え時。 パーツ 型番 CPU Intel Core i5-446…

オフィスにCisco Meraki MR33を導入してみた

NTTから貸し出されるホームゲートウェイ(RS-500KI)の無線LANがどうにも不安定なので、ちゃんとしたアクセスポイントを導入した話。 Cisco Merakiとは 数年前にCiscoが買収したプロダクトで、無線LANのアクセスポイントやスイッチ、ファイヤーウォールなどを…

AWS SAMでDefaultAuthorizerとCORSが共存できるようになった

半年ほど前に以下のような記事を書いたが、その後のアップデートでDefaultAuthorizerとCORSが問題なく共存できるようになった。 nibral.hateblo.jp 関係しそうなところ AWS::Serverless::ApiのAuthプロパティに「AddDefaultAuthorizerToCorsPreflight」が追…

AWS SAMでDefaultAuthorizerを設定するとCORSに失敗する

-------- 2019/10/17追記 -------- AWS SAMのアップデートでこの問題は解消した。 nibral.hateblo.jp -------- 追記ここまで -------- 問題 AWS SAMのAWS::Serverless::Apiでは、AuthプロパティのDefaultAuthorizerをセットすることですべてのエンドポイント…

Writing An Interpreter In Go その9(終)

その8はこちら この本に取り組み始めて1か月が経ってしまいそうだったので、日曜丸1日を使って残りを全部終わらせることにした。 4章では文字列型、配列、ハッシュの構文と、それに付随する組み込み関数をいくつか追加する。インタプリタの仕組みはすでに完…

Writing An Interpreter In Go その8

その7はこちら 3.10: 関数の定義と呼び出し 3.9: Implement function call · nibral/monkey_interpreter@f09f2fd · GitHub (コミットメッセージの章番号を間違えてた) 関数を定義する fn 構文と、定義した関数を呼び出す処理を実装する。本に従ってコード…

Writing An Interpreter In Go その7

その6はこちら 前回までの内容でREPLが電卓として使えるようになったので、if文とreturn文、それに変数の宣言と利用を追加して電卓からプログラミング言語にレベルアップさせる。 3.6: if文の評価 3.6: Evaluate if statements · nibral/monkey_interpreter@…

Writing An Interpreter In Go その6

その5はこちら Parserが構築した抽象構文木 (AST) を評価し、入力したソースコードの意味を取り出すEvaluatorの作成に入る。 3.4: オブジェクト表現を実装 3.4: Implement object representation · nibral/monkey_interpreter@ac2828d · GitHub Evaluatorで…

Writing An Interpreter In Go その5 (Parser完成)

その4はこちら 引き続き各種トークンの処理を追加し、Parserを完成させる。 この辺から一部のテストコードが省略されるようになってきて、実装してテストが通った後に著者のコードと比べて答え合わせをする作業が増えた。 2.8: boolean 2.8: Add boolean · n…

Writing An Interpreter In Go その4

その3はこちら Parserへ識別子と演算子をASTに追加する処理をつけていく。 演算子には「左から右へ」「掛け算は足し算より先に」という優先順位があるが、C言語のコンパイラにチャレンジしたときは生成規則からパーサを書こうとして左再帰で詰んだり、スタッ…

Writing An Interpreter In Go その3

その2はこちら Lexerが完成してソースコードをトークン列に分解できるようになったので、抽象構文木 (Abstract Syntax Tree, AST) を組み立てるParseの実装に入る。 バッカス・ナウア記法 (BNF) などで書かれた構文規則からParserを自動生成するParser Gener…

Writing An Interpreter In Go その2 (Lexer完成)

その1はこちら 1.4: '==' と '!=' の追加 1.4: Add '==' and '!=' · nibral/monkey_interpreter@0b77bb3 · GitHub lexer/lexer.go 演算子 == と != を追加した。2文字の演算子として処理させるのではなく、=/! の後に = が続くかどうか判定する処理を入れて …

Writing An Interpreter In Go その1

その0はこちら。 1.3: Lexer(字句解析器)の実装 1.3: Implement lexer · nibral/monkey_interpreter@66eb6e3 · GitHub lexer/lexer.go ソースコードを文字列として受け取って、一文字ずつ読み進めながらトークンの配列に変換する処理を作成。 1文字の識別…

Writing An Interpreter In Go その0

コンパイラの勉強がしたくなったので、Thorsten Ballの"Writing An Interpreter In Go"を読むことにした。オライリーから「Go言語でつくるインタプリタ」として日本語版の書籍も出ているが、著者のサイトから続編にあたる"Writing A Compiler In Go"とセット…

CircleCIでflutter testする

Qiitaからの移転記事です https://qiita.com/nibral/items/93e4052b41c2f477ae2a ポイント CircleCIが用意しているAndroidのdockerイメージを使う ロケールがC.UTF-8になっていてflutterコマンド実行時にエラーが出るのでen_US.UTF-8にしておく 設定例 versi…

Arch LinuxにChrome Remote Desktopをインストールする

Qiitaからの移転記事です https://qiita.com/nibral/items/ee82e244117f487a1032 Arch LinuxにChrome Remote Desktopを入れたときのメモ。 環境 デスクトップ環境はMATE、日本語入力はfcitx-mozc Google Chromeインストール済(yaourt -S google-chrome) Chro…

Amazon LightSailでお手軽にNode.jsを走らせてみた

Qiitaからの移転記事です https://qiita.com/drafts/6165498aa451bb8dc6a9/edit はじめに AWS re:Invent 2016でAmazon LightSailが発表された。 $5/monthからVPSが使えるとのことで、早速インスタンスを立ててNode.jsでHello,worldしてみた記録。 Let's get …

Amazon LightSailでお手軽にNode.jsを走らせてみた

Qiitaからの移転記事です https://qiita.com/drafts/6165498aa451bb8dc6a9 はじめに AWS re:Invent 2016でAmazon LightSailが発表された。 $5/monthからVPSが使えるとのことで、早速インスタンスを立ててNode.jsでHello,worldしてみた記録。 Let's get start…

CentOS 7にMaria DBとPHP 7.0を入れる

Qiitaからの移転記事です https://qiita.com/nibral/items/b3bd01672bcbfe80054f 環境 CentOS 7 MariaDB yumのリポジトリを追加 [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY…

Windows 10でHyper-Vを使ってVagrantを動かす

Qiitaからの移転記事です https://qiita.com/nibral/items/94de6b9787e2aface2aa VagrantをHyper-Vで動かそうとしたところいくつかハマったので、一通りの流れをメモ。 環境 ホストOS…Windows 10 Pro ゲストOS…CentOS 7 ターミナル…Git Bash Hyper-V インス…

Amazon Linuxに最新版のnginxをインストールする

amzn-mainリポジトリに登録されてるnginxが古いので、 yumにnginxのリポジトリを追加して最新版をインストールする。 注:インターネットからアクセスするためには、HTTP(80番ポート)の通信を許可するように セキュリティグループを作成してインスタンスに割…

Raspberry Pi 2をVPNサーバに仕立てる

はじめに 購入直後にひとしきり遊んで放置されていたRasberry Pi 2 Model Bを発見したので、 公衆無線LAN利用時のセキュリティ向上 自宅NASへのアクセス を目的としてVPNサーバを立てた。VPNソフトウェアはSoftEther VPN。 また、 接続するLANでDHCPが提供さ…

リーダブルコードを読んだ

気になった記述や考え方のメモ。 1章「理解しやすいコード」 読みやすさの基本定理…優れたコード=他人が理解するのに要する時間が最短のコード カッコいいコードを書こうとしてテクニックに走り、読みづらいコードにならないように。 2章「名前に情報を詰め…

Raspberry Pi 2 Model B + WDC-150SU2Mで無線LANに接続する

やるべきこと WDC-150SU2M(=Realtek 8188eu)のドライバをインストール dhcphdとwpa_suppcilantでネットワークに接続 ドライバのインストール WDC-150SU2M(=Realtek 8188eu)のドライバをインストールして、ネットワークに接続する。 Raspbian更新 sudo apt-ge…

CentOS7でSSHを使う

CentOS7になって、iptablesがfirewalldになったりsystemctl使うようになったりしたので、6.x系から変わったところを中心に。 ユーザ関連 インストール中に一般ユーザを作成し、かつそのユーザでsudoコマンドを使いたい場合、インストール完了後に当該ユーザ…

ffmpeg on CentOS

はじめに 公式のインストールガイドを参考に、余計なオプション入れてないffmpegをビルドしよう(x264とfdk_aac) Git yumのパッケージが古いので自分でビルドする git 依存関係の解決 sudo yum install curl-devel expat-devel gcc gettext-devel make openss…