takafumi blog

日々の勉強メモ

不安定度と求心性結合(依存性入力)と遠心性結合(依存性出力)について

最近 ソフトウェアアーキテクチャの基礎を読んでいるんですが、「不安定度」のところでやたらと引っかかったのでメモ。 まず求心性結合(依存性入力)、遠心性結合(依存性出力)について。 おそらく依存性入力、依存性出力と言い変えた方がわかりやすくはある。…

scala: jmhでreifnedのパフォーマンスを(適当に)調べてみる

環境 Scala 2.13.8 ちょっと気になってrefinedのPositiveなどに比べて、requireで契約的に正数を縛る場合、どのくらいのパフォーマンス差があるか調べてみた。 コードはだいぶ適当だが以下 package bench import cats.implicits._ import eu.timepit.refined…

github discussionのコメントをslackに投稿するaction

2022/07/24 現在、まだslack integrationが本家で対応していないのでざっくり書いてみた。 Get notifications of Discussions in slack (or equivalent) · Discussion #2844 · github-community/community · GitHub ただしインジェクション対応など適当なの…

scala3: Matchableとパターンマッチ

環境 Scala 3.1.2 scala3では Any と AnyVal & AnyRef の間に Matchable というタイプが追加された。 A First Look at Types | Scala 3 — Book | Scala Documentation scala3_class_hierarchy 理由はこちら The Matchable Trait 何が変わったのか? この変更…

Scala3で弱適合性(= Week Conformance)の削除で問題が発生するコードについて

環境 Scala 2.13.8 Scala 3.1.1 scala3で削除される機能の一つに「弱適合性(= Week Conformance)」というのがある。 docs.scala-lang.org しかし説明を読み、コードを書いてみても実際に何が問題になるのかが最初よく分からなかった。 ここではscala2からsca…

【Rust】数字の3桁区切りなど、文字列に区切り文字を追加する

環境 rust 1.57.0 rustで文字列操作難しい・・・もう少し綺麗な書き方ないだろうか? rustで3桁区切りなど、文字列に区切り文字を入れる

ポストモーテムとは

SRE

基本的にSRE本を自分で実施する際に理解しやすい形にまとめたもの。 前提 この文章はインシデント(障害や緊急対応など)発生時の対応関するポストモーテムに関して記述する。 プロジェクト終了時などその他のタイミングで行うポストモーテムとは異なる。 用語…

fluent-plugin-s3 設定と IAMロール アクションの関係と注意

環境 fluent-plugin-s3 1.6.0 関係性のまとめ アクション 関係ある設定 説明 s3:ListBucket check_bucket true trueであればfluent起動時にbucket存在をチェック。存在しなければ起動をリトライするfalseだと起動はするが書き込み時に失敗する s3:GetObject …

Scalaでもtry-catchを使う方がよい事もある

環境 Scala 2.13.6 Scalaだと例外を常にTryで処理しがちなので、反省メモ。 もちろん単純に例外出す可能性ある個所をTryで包むのは問題ない。 困るのはTry[Either[L, R]] みたいなネストを避けたい時。 refinedとかでよくある。 例えば以下は単純にStringをE…

ドメイン駆動開発(DDD)とCleanArchitectureのエンティティはどう違うか?

双方と共にビジネスモデル定義のためのオブジェクトという点では共通だが、実際には意味は大幅に異なる。 DDDでは 以下のように定義される 「エリック・エヴァンスのドメイン駆動開発 第5章」から 主として同一性によって定義されるオブジェクトはエンティテ…

aws sam (Serverless Application Model)に入門する

aws

Infrastructure as Code入門としてaws samでLambdaを作るところからはじめてみる aws-cliとaws-samはinstall済み sample templateから基本的なアプリケーションをビルト 仕組み的には以下のような順序で作成される ローカルでsamコマンドでアプリケーション…

awsデータストレージまとめ(インスタンスストア・EBS・EFS・S3)

aws

各ストレージ インスタンス ストア ブロックレベルストレージ インスタンスが停止・休止・終了、障害時にはデータは失われる インスタンスの再起動時はデータは維持される インスタンスの起動時のみストレージタイプ、ボリュームの変更が可能 インスタンスタ…

aws アクセスコントロール系モジュール概要

aws

どのモジュールがどの位置にあるのかを忘れがちなので簡易まとめ 概要図 クラウド単位 AWS Cloud ようはAWSの事だが、概要図ではAZの同意味で使われている リージョン 地理的に離れた領域 アベイラブルゾーン(AZ) リージョン内で複数の独立した場所、IDC。 A…

aws cliのMFA(多要素認証)によるAccessDeniedExceptionの対応

aws

どういう状態か 何のコマンドでも以下のようになる。 $ aws lambda list-functions An error occurred (AccessDeniedException) when calling the ListFunctions operation: User: arn:aws:iam::111111111111:mfa/username is not authorized to perform: la…

gpg: keyserver receive failed: Server indicated a failure

Ubuntu 20.04.2 LTS gpgが使うhkpプロトコルはport 11371 を使う。 なので gpg: keyserver receive failed: Server indicated a failure このエラーは大概portを変えれば解決することが多い(と思う) # github-cliのpgp鍵取得 # https://github.com/cli/cli/b…

Slackのチャネル作成+ユーザー(&グループ)複数をまとめて招待できるコマンドをGAS+typescriptで作った

typescript 4.2.3 Slackで新チャンネルを作るときに、ユーザーもまとめて招待できるコマンドを作成してみた。 チャンネル名はある程度固定で使う事を想定した。 また(だいぶ前から) claspがtypescriptをサポートしていたので書いてみた ・・・が割とコードが…

【Scala】giter8でプロジェクトのテンプレートを作る

環境 Scala 2.13.0 [1] giter8のテンプレートを用意 $ sbt new foundweekends/giter8.g8 [info] Loading settings for project global-plugins from metals.sbt ... [info] Loading global plugins from /home/takafumi/.sbt/1.0/plugins [info] Set current…

【Rust】【Vim】LSPの導入

環境 archlinux 5.0.9-arch1-1-ARCH rust 1.34.1 neovim 0.3.5 rust rls(Rust Language Server) https://github.com/rust-lang/rls rustup component add rls rustup component add rust-analysis rustup component add rust-src neovim dein + LanguageClie…

【Rust】導入覚書

環境 archlinux 5.0.9-arch1-1-ARCH rust 1.34.1 neovim 0.3.5 rust binary https://rustup.rs/ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh echo 'source $HOME/.cargo/env' >> ~/.zshrc rustc -V rustc 1.34.1 (fc50f328b 2019-04-24…

【Linux】 archでpptp接続

環境 archlinux 4.10.6-1-zen 今時pptp使うなという気持ちもあるが、使ってるところでは未だに使ってるので、設定ハマった事のメモ。 基本的にはマニュアル通り。 - PPTP クライアント - ArchWiki ハマったのは トラブルシューティング によるとgreはINPUTし…

【Bash】 スクリプト中のaliasコマンドが実行できない

環境 archlinux 4.14.4-1 非インタラクティブモードではaliasは展開されない。 非インタラクティブとは $ bash test.sh みたいに実行する事。 普通に実行すると以下のようになる $ cat ~/.bashrc alias ll='ls -la' $ bash test.sh test.sh: line 5: ll: com…

【Linux】 partedでパーティションの拡張

環境 archlinux 4.10.6-1-zen 既に作成済みのパーティション拡張。 ファイルシステムはext4。 archlinux以外でも対外似たような感じだと思う。 1. bootディスクを使ってシステムを起動。 この時はarchlinux-2017.04.01-x86_64.isoを使用。 2. paretedでパー…

【Docker】 docker toolboxでdockerとvagrantを共存

環境 Windows 10 VirtualBox 5.1.12 Vagrant 1.8.7 docker 1.13.1 壮絶に勘違いしていた事。 Windowsで現行Dockerはdocker for windowsしかないと思ってたorz 普通にdocker toolboxとかあるんですね。 docker for widows docker toolbox vagrant 仮想化方式 …

【Selenium】 【Node.js】独自なwait()条件を作る

環境 Ubuntu 16.04 Selenium Standalone Server 3.0.1 普通はwebdriver.until.*を条件に使う事が多いが、普通に独自の値や条件判定で設定する事もできる。 以下のように、webdriver.Conditionのインスタンスを返すようにすればいい。 Conditionインスタンス…

【Selenium】 エラーがでたらまずdriverを更新する

環境 Ubuntu 16.04 Selenium Standalone Server 3.0.1 $ mocha test.js // 略 WebDriverError: unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData":{"frameId":"16896.1","isDefault":true},"id":1,"name":"","origin":"://…

【Ubuntu】 サーバーイメージにX Window Systemインストール

環境 Ubuntu 16.04 サーバーイメージだとxorgがないのでインストール $ sudo apt-get -y install xorg xserver-xorg 起動 $ startx xeyesとかで確認してみる。 終了 $ exit

【Scala】【ScalikeJDBC】 Config設定方法

環境 Scala 2.11.8 ScalikeJDBC 2.5.0 基本的にはこの内容 Configuration - ScalikeJDBC scalikejdbc-conifg, application.confは設定方法によって必要 build.sbt libraryDependencies ++= Seq( "org.scalikejdbc" %% "scalikejdbc" % "2.5.0", "org.scalike…

【Scala】 sealedとパターンマッチ

環境 Scala 2.11.8 シールドクラス(トレイト)を継承したサブクラスは、すべて同一のソースファイルに定義される。 そしてシールドクラスをパターンマッチに使用されると、match式の網羅性をコンパイラがチェックできる。 sealedなし このときはcaseのパター…

【Scala】 sbt, activatorのproxy設定

環境 Scala 2.11.8 CentOS7.0 sbtやactivatorを実行してmoduleをダウンロードしてくるときに、proxyで引っかかる時の対策。 内部で実行されるjavaコマンドがproxyで引っかかってるので、起動スクリプトを編集する手もあるが、以下の環境変数を設定する事で解…

【Scala】 空Listの表記

環境 Scala 2.11.8 CentOS7.0 なんか忘れるのでメモ scala> val l1: List[Int] = Nil l1: List[Int] = List() scala> val l2 = Nil:List[Int] l2: List[Int] = List() scala> val l3 = List.empty[Int] l3: List[Int] = List() scala> val l4 = List[Int]() …