2023年振り返り

2023年の振り返りとしてやったことをまとめる。 目標管理 例年通り、四半期ごとの見直し、月次の進捗確認で運用をした。 1,4,7,10月に目標の見直しを行い次四半期の目標を立て、2,3,5,6,8,9,11,12月は進捗を確認する運用。ただし今年は目標管理のモチベーシ…

2022年振り返り

2022年の振り返りとしてやったことをまとめる。 目標管理 例年通り、四半期ごとの見直し、月次の進捗確認で運用をした。 1,4,7,10月に目標の見直しを行い次四半期の目標を立て、2,3,5,6,8,9,11,12月は進捗を確認する運用。 大項目として以下4つを設け、それ…

dbtを使い始めて数ヶ月が経った雑感

この記事は dbt Advent Calendar 2022 の25日目の記事です。dbtを使い始めて数ヶ月ほど経過したので、これまでの所感を書きます。 はじめに dbt (data build tool) はデータ処理変換を担うフレームワークです[1]。データエンジニアリングにおいて重要なデー…

2021年振り返り

2021年の振り返りとしてやったことをまとめる。 目標管理 昨年に引き続き、四半期ごとの見直し、月次の進捗確認で運用をした。 1,4,7,10月に目標の見直しを行い次四半期の目標を立て、2,3,5,6,8,9,11,12月は進捗を確認する運用。 大項目として以下5つを設け…

2020年振り返り

2020年の振り返りとしてやったことをまとめる。 目標管理 四半期ごとの見直し、月次の進捗確認で運用をした。 1,4,7,10月に目標の見直しを行い、次四半期の目標を立てる。 2,3,5,6,8,9,11,12月は進捗を確認する運用だった。 大項目として以下5つを設け、四半…

【Go】Sodiumで認証付き公開鍵暗号

この記事は Go 2 Advent Calendar 2020 の23日目の記事です。 Sodiumとは Sodium[1]は使いやすさを目的に開発された暗号学ライブラリです。 暗号の誤用に関する研究分野では、誤りの検出や復元のため技術とそれに伴う影響が議論されています。 一方で誤用そ…

Rustの可変長引数関数とHListの話

この記事は Rust Advent Calendar 2020 の5日目の記事です。 背景 RFCs#2137にあるようにRustでは、可変長引数関数を直接的に書くことはできません。とはいえ全くできないわけではありません。C言語から可変長引数関数呼び出しを実現するため、stub関数を記…

【git】開発とレビューのバランスを求めて 〜commitマージ編〜

以下記事の続き。 cipepser.hatenablog.com 「commitをまとめたい」を見ていく。 やりたいこと 開発中は細かくcommitし、レビュワーに依頼する際にcommitをまとめたい。 やり方 git rebase -iを使う (準備)commit用のファイルを用意する 前回記事からc.txt…

【git】開発とレビューのバランスを求めて 〜ブランチ分割編〜

開発時、どの粒度でcommitするか考えながらコードを書きたくない。 特に、開発中は試行錯誤しながら実装を進めているので、最初から設計しきれていない場合も多い。怠慢と言われてしまうと弱いが、開発スピードも考慮すると、試行錯誤するのが早い。 確かに…

2019年読んで良かった本、記事

2019年に読んだ本と読んで良かった記事のリスト。自分用。 リストは、必ずしも今年に発表されたものではなく、自分が読んだタイミングが今年。 以前は年度ごとに振り返っていたが、ここ2年ほどやらなくなってしまったので再開(年末のほうが他の方に触発され…

【Rust】mapとand_thenの違い

この記事は Rust Advent Calendar 2019 の9日目の記事です。 最近、すごいHaskellを読み終わりました。 HaskellやってからRustに戻ってくるとmapとand_thenの違いがわかってよいな— さいぺ (@cipepser) 2019年10月15日 Rustに戻ってきたので、改めてmapとand…

GoでCount-min sketchを実装する

この記事は Go Advent Calendar 2019 の2日目の記事です。 こんにちは!さいぺです。 サムネのGopherくんは最近趣味で描いたものを、せっかくなので載せました。 オリジナルのThe Go gopher(Gopherくん)は、Renée Frenchによってデザインされました。 さて…

Go1.13のError wrappingを触ってみる

2019年9月3日にGo 1.13がリリースされました。 リリースノートを見ていて、Error wrappingが気になったので触ってみます。 何はともあれ、ドキュメントを見てみます。 errorsのドキュメントを確認すると、以下4つの関数が存在します。 func As(err error, ta…

Rustでprotobufのゼロ値がどうやって実現されているか

以前、以下の記事たちを書きました。 cipepser.hatenablog.com cipepser.hatenablog.com Rustで0byteを読み込むとどうなるのか(Option型になるのか)気になったので検証してみます。 0byteをrust-protobufで読み込む protobufを読み込むコードは、Golangで…

実践Rust入門を読んだ

実践Rust入門 言語仕様から開発手法まで, κeen, 河野達也, 小松礼人を読みました。本書の特徴は以下の3つでしょう。 2018 Editionに対応している FFIについて日本語で書かれた書籍 実践 を意識した内容になっている 本記事では、特に3つ目の実践的という観点…

Rustでsliceをシャッフルする

メモ書きです。 O'Reilly Japan - プログラミングRustを読んでいたら rand::Rng - Rustでsliceのシャッフルができるとあったので試したところrand::Rng::shuffleがdeprecatedになっていました。 SliceRandom::shuffleを使った例を残します。 Cargo.tomlは以…

メモリをダンプしてRustのsliceとVecを理解する

タイトルの通りなんですが、RustのsliceやVecがしっくり来ていないので、メモリ上でどのように表現されているのかという観点で理解を深めようと思います。 環境 ❯ cargo version cargo 1.32.0 ❯ rustc --version rustc 1.33.0 また今回の環境ではusizeは8バ…

BLS署名について

以下を書いたので、BLS署名についてもまとめておく。 cipepser.hatenablog.com なお、本内容はブロックチェーン系プロジェクトで着目される暗号技術 のP.22に書かれているBLS署名について自分なりに理解するためのメモである。1 BLS署名はその名の通り、署名…

BLS署名における双線形性(ペアリング)について

ブロックチェーン系プロジェクトで着目される暗号技術のP.21-22を理解するために双線形性(ペアリング)について調べた。自分が理解するに至った軌跡をメモベースで残す。 余談だが、調べる過程で双線形写像(Bilinear maps)とペアリングの違いが気になった…

Raspberry Pi 3 Model b+でビットコインフルノードを構築する

背景 フルノードの重要性とLightning NetworkやProof of Stakeがノード運営インセンティブに与える影響 - YouTube やフルノードの重要性とフルノードが広がった世界について改めて考える - ビットコインダンジョン2.0 を読んで(見て)、ビットコインフルノ…

【Raspberry Pi】マウントするファイルシステムを間違えて起動できなくなった

ラズパイを買ったので RaspberryPi 3 にUSBの外付けHDD(NTFSフォーマット)を接続する - min117の日記を参考に、外付けHDDをマウントしたところ、ntfs-3gをインストール後rebootしたらラズパイの起動ができなくなりました。 ファイルシステムに明るくないた…

haskell-ide-engineで ld: symbol(s) not found for architecture x86_64 のエラーが出る

vscode と haskell-ide-engine で Haskell 開発環境を構築する - Qiita をもとに環境構築を進めていたところ以下のエラーが出て、haskell-ide-engineをmakeすることができませんでした。 ❯ make hie-8.6.3 (中略) cabal-install-2.4.1.0: configure Complete…

Writing A Compiler In Goを読んだ

Writing A Compiler In Goを読みました。 本書は、Writing An Interpreter In Go(邦訳:Go言語でつくるインタプリタ)の続編で、前作で開発したプログラミング言語MonkeyのコンパイラとVirtual Machine(以下、VM)を実装する内容となっています。 本書を読む…

165行で実装するProtocol Buffersデコーダ(ミニマム版)

この記事は Go2 Advent Calendar 2018の11日目の記事です。 今年の後半くらいに Protocol Buffers の仕様を読み始めたら、とてもシンプルかつコンパクトな仕様なのにcompatibilityへの考慮が凄まじくて、2018年後半に書いた記事の大半がProtocol Buffersに関…

Rustでマルチインターフェースパケットキャプチャを実装する

この記事は Rust Advent Calendar 2018 の3日目の記事です。 本記事では、タイトルの通り、Rustでマルチインターフェースパケットキャプチャを実装します。 今回の記事で達成したい目標は以下2点です。 Rustでネットワークプログラミングをしたい マルチイン…

【GAS】「SpreadsheetApp.create を呼び出す権限がありません」を解決する

表題の通りです。 タイトルのエラーメッセージでググったところ、トリガーを設定し、解決されている方が多いようです。 しかし、当方の要件としては、トリガーで定期的に実行させる必要はなく、エラーメッセージは権限の問題なのでスコープを設定したかった…

clasp runがローカルで実行されない

背景 Google Apps Scriptをローカルで開発するために、 Google製のCLIツールclaspを導入しました。 Google Drive上のプロジェクトとclasp pushやclasp pullで同期できてとても便利なのですが、 以下事象でハマったので記事に残します。 事象 ローカルでコー…

protobufのNon-varintの互換性について

以前、Varintを64bitから32bitに変更したときの挙動を検証しました。 cipepser.hatenablog.com 上記記事の通りVarintは、下位32-bitを残して切り詰める結果でした。 今回は、Non-varintの互換性を検証します。 例によって、Language Guideを見てみると fixed…

protobufで0 byteをデコードする

Language Guideに以下のようにフィールドに値がセットされていない場合はdefault valueが使われることが書かれています。 When a message is parsed, if the encoded message does not contain a particular singular element, the corresponding field in t…

Golangで出力したprotobufバイナリをRustで読み込む

ここ三回くらいprotobufの記事を書いてきましたが、Goばかりだったので、Rustで読み込んでみました。 事前準備:Goでバイナリを出力する user.protoを以下のように定義します。 syntax = "proto3"; package user; message User { string name = 1; int32 age…