rustでのクロージャとの上手い付き合い方

Javascript(Typescript)をはじめとして、関数型言語のエッセンスを取り入れた多くのプログラミング言語では「クロージャ」を利用できる。実際に自分もTypescriptを書く際にはクロージャのおかげで疎結合を保った実装ができたり、大変便利なテクニックだと気…

rustのwebフレームワークgothamがtokio1.0対応したので使ってみた

せっかく読んでくれる方を落胆させないよう予め期待値調整をしておきたい。 自分自身はrustを書き始めたのはつい一ヶ月前ほどで、正月に自転車本を読んで勉強した程度の知識しかない。 最近うれしいことに、HTTPインタフェースをもったサービスをrustで構築…

k3sでGitHub Container Registryにおいたプライベートなコンテナイメージをつかう

内容を整理していて気づいたが、本記事には (A) k3sでprivateなコンテナレジストリを使う (B) Github Package Registry (GPR)からGithub Container Registry (GHCR *1 )へ移行する という2つのトピックが混ざっていることに気が付いた。備忘録も兼ねて先に…

Minikube 1.16.0 (Kubernetes 1.20.0) にアップグレードしたらReadinessProbeがfailした

背景と問題 Minikube 1.12.3をデフォルト設定 (Kubernetes v1.18.3)で利用していた Readiness Probeとしてexecフィールドに内製スクリプトを指定していた(スクリプトの実行にかかる時間は約2秒) 先日、Minikube 1.16.0にアップグレードした途端にReadiness…

システムの目的を忘れないこと

これは30日チャレンジの17日目(2019/09/25)に書かれた文章です あらゆるシステムにおいて、ユーザが入力可能な値が増えるほどシステムの複雑性が高まる。 こうして見るとあえて文字に起こすほどのことでもないが、新規のシステムや機能を検討している段階…

リファクタリングをしたいエンジニア

これは30日チャレンジの16日目(2019/09/24)に書かれた文章です 新規事業においては、プロダクトの方向性が変わったり、当初は想定していなかった機能が増えたり、What―何を創るのかという点の不確実性が大きい。 結果として、コンポーネントの責務範囲が曖…

所属判定問題を解くBloomFilter

これは30日チャレンジの15日目(2019/09/23)に書かれた文章です 「ある要素が集合に含まれているか否かを判定する」問題(以下、所属判定問題)が与えられたとき、どのような実装を考えるだろうか。 素朴な方法として「集合に含まれる要素を走査して判定す…

進化可能なGraphQL Schema設計

これは30日チャレンジの13日目(2019/09/21)に書かれた文章です GraphQLのスキーマ設計において進化可能なデザインを実践するためにxuorig氏が記事を残している。 本文はxuorig氏の記事の要約である。 blog.apollographql.com GraphQLではAPIクライアント側…

読み書き禁止ファイルを変更できてしまう謎

これは30日チャレンジの9日目(2019/09/17)に書かれた文章です Linuxで開発したことがあるエンジニアならpasswdコマンドを知っているだろう。 コマンド名が示すとおり、ログインパスワードを変更するコマンドだ。 ではパスワードを記したファイルは一体どこ…

あいまい検索とLocality Sensitive Hashing

これは30日チャレンジの6日目(2019/09/14)に書かれた文章です 「あいまい検索」と聞いて何を思い浮かべるだろうか。 例えばGoogleもあいまい検索機能を提供している。 試しに「あいまい検索」と検索してみてほしい。おそらく「曖昧検索」にヒットしたペー…

RDBにおける木構造の表現方法

これは30日チャレンジの3日目(2019/09/11)に書かれた文章です 我々が住む世界には木構造をもつ事象が多く見られる。例えば住所は根(国)から節(県)に分かれ、やがて葉(番地)に到達する木構造として表現できる。 このような木構造を伴う情報を永続化し…

Nullableフィールドの使い方

これは30日チャレンジの1日目(2019/09/09)に書かれた文章です Nullableという単語を聞いてどのような印象を持つだろうか。 筆者は「選択肢を減らし、意思決定を遅延させる機能」のような印象を持っていた。 Nullableという単語事態ははAPIやデータベースス…

30日間アウトプットチャレンジ

これは30日チャレンジの最終日(2019/10/09)に書かれた文章です エンジニアたるもの常にアウトプットを心がけること。 たとえどれだけ小さかろうが常に世の中に価値を生み出し続けること。 ソフトウェアエンジニアとして働きはじめ、身の回りにいる猛者たち…

トランザクション分離レベルの理解を言語化した

ソフトウェアエンジニアであれば一度はトランザクション処理という言葉を聞いたことがあるだろう。 トランザクション処理とは、互いに依存関係を持つある一連の操作が、すべて完了される、あるいはすべて破棄(アボード)されることを保証する処理を指す。 …

gRPC server (Ruby) でinterceptorを用いたSentryインテグレーション実装

サービスの運用・保守にあたり、 Run-timeのエラーログ収集はとても重要なタスクです。 ログ全体からエラー発生部分を抽出し監視することもできますが、エラーログの収集に特化したサービスとしてSentryが便利です。 Web画面からスタックトレースを確認し、…

ブログ再開宣言から一年が経ちました

久しぶりにブログを書こうと思いたち、確認したところ、ちょうど一年前にブログ再開宣言記事を書いていたことが判明した。 我が事ながら再開宣言をしていたこと自体を完全に忘れており、無論、一本も書けないままあっという間に一年が経過してしまった。 こ…

golangでLSystemを実装した

会社で有志が集まり毎週木曜の就業後にgolangのハッカソンが行われている。 僕も数週間前からジョインした。 今からキャッチアップするには遅すぎる感も否めないのだけど。。 型があって、多機能で、並列化も簡単に実現できちゃうgolangは十分に興味をそそる…

ブログ再開します

ブログを書こうと決心するのは何度目だろう…。 学生の頃はロボコンや研究に近い内容を書いていて、社会人になって意識が高まりポエムをいくつか書いて… 今度は何を書こうかな。

与えること、まずはそれから。

与えることは、自分と世界との接点をつくる大切な営みです。 与えることによって、自分で自分自身の存在を感じることができます。 目まぐるしく過ぎて行く日常の中で、我々はときとして自分と世界との境界を見誤ってしまいます。 「どうしてあなたは○○しない…

そのモノサシは誰のもの?社会的証明という諸刃の剣

あなたは米国首相の入国規制令に賛成ですか? 人がある物事に対して肯定的(否定的)な態度をとるとき、その理由としては以下の2つが挙げられます。 ①自らが肯定的(否定的)な印象・考えを持っている場合 ②社会通念として否定的(肯定的)な態度をとらない…

孤独と感性と理性

どのような瞬間に孤独を感じますか? あなたが今感じている孤独は、ほんとうは自分の中に生じた感情を蔑ろにしているだけなのではないですか? 孤独を感じるとき 忙しくて苦しい、あるいは何かを失って悲しいなど、人は不幸な感情に晒されたときにふと強い孤…

正論を語る、強くて弱い人たち

平気な顔で正論を語る人がいる。 しかし、やがてその正論は自らに牙を向けることになる。 「きみは〜をしたから、〜されて当然だ」 「〜できないのなら、〜するべきではない」 「〜こそが正義であって、〜よりも優先されるべきだ」 ここでいう正論とは、ある…

人生は何かを為すには短すぎるのでしょうか。

先日、26歳の誕生日を迎えました。 100歳まで生きると仮定して、僕はすでに人生の25%以上を消費してしまったわけです。 気づけば2017年も20日間が過ぎました。これは20/365≒5.4%が経過したことになります。 こうして数値化すると、人の一生はほんとうに限ら…

Dockerに頼らずにCentOS7でElixir開発環境を整備した話

はじめに windowsであればバイナリが配布されているし、 macやubuntuであればおもむろにbrew(apt-get)を打つだけで簡単にElixir開発環境が構築できる。 さらにFedora17以降ならばyumで同様に一発構築が可能。 しかしCentOS7では、リポジトリが登録されておら…

ある日突然gitが使えなくなりました -> Xcode/iOSライセンスに同意したら直りました

いつもどおり,朝一番にgit fetchしようとしたら怒られました. Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo. 原因はXcode/iOSのライセンスに同意していないせいでした.きっと自動アップデートでも走っ…

特定の文字列を含んだファイルを格納したディレクトリをユニークに抽出するシェルスクリプト

found_dirs=()for filepath in `find foobar -follow -type f`do result=`grep ${filepath} -e hogehoge -l` if [ ${#result} -gt 0 ] && [ -f ${result} ]; then found_dirs+=(`dirname ${result}`) fidoneecho "${found_dirs[@]}" | tr ' ' '\n' | sort -u…

Homebrewからrbenvの導入を試みたらrubyのインストールが上手くいかなかった

ことの発端は,とあるプログラムがruby依存だったことにあります. ライトウェイト言語である以上,rubyでもバージョン管理が大変ですね. pythonにおけるvirtualenvと同じ位置づけとして, rubyではrbenvというものがあります. Ruby - Homebrewのインスト…

powerpointで作成した図をeps(ベクター形式)で保存する方法 (Mac版)

パワポで好きなように図を作る 1つの図に対して1枚スライドを対応させる (次のpsファイルとして書き出す際に,スライドごとにpsファイルが作成される) psファイルとして書き出す [powepoint メニュー] -> [ファイル] -> [プリント] ps2epsコマンドでpsファイ…

完備辞書を実装した(デバッグした

以前に実装したものがバグだらけ…というか勉強不足でブロックサイズなどなどがめちゃくちゃでした.ということで改めて実装しなおしました. 2**16 = 65535ビットまでならコードをいじらずにそのまま使えます.それ以上にビットを管理したいのであればソース…

コマンドラインから.pngを.epsへ変換

tex周りをmakefileで一発コンパイルしようとしたところ,画像配置のにpng -> eps変換が必要になったもちろんxbbを使う方法もある… 前提: Imagemagickおよびxpdfがインストール済み(いずれもbrewでインストールできます) アウトライン:png -> pdf -> eps 変換…