valid,invalid

関心を持てる事柄について

GitHub Actions workflowが完了したらデスクトップ通知を出す

CI完了したら通知するやつ、macOSだと `gh run watch && osascript -e 'display notification "run is done!" with title "Terminal"'` みたいなのでデスクトップ通知出せて便利そう / “Work with GitHub Actions in your terminal with GitHub CLI - The Gi…

git commit message でハッシュ # から始まるメッセージを残す

git commit コマンドでメッセージを入力する際、デフォルトでは # から始まる行は commit message から取り除かれる。この挙動を変更し、commit message にハッシュ # から始まるメッセージを残す方法について。 結論 git config で設定可能な以下のいずれか…

StackOverflowを読める程度の英語力もとい問題解決能力

6年近く前の話だが「Quipperに入社して業務をこなすにはどの程度の英語力が必要か?」という問に対し、こんな回答を貰ったのを覚えている。 技術的な課題を解くためにググってStackOverflowが出てきたときになんとか読める程度の英語力、ないしは読もうとす…

Rack middlewareとスレッドセーフ

Rack Middleware で以下のようなイディオムを見かけることがあるが何のためにdupしているかを理解していなかったので調べてみた。 class MyMiddleware def call(env) dup._call(env) end def _call(env) # do whatever end end 結論 Rack middleware の inst…

React Adminの感想

marmelab.com A frontend Framework for building data-driven applications running in the browser on top of REST/GraphQL APIs, using ES6, React and Material Design. Previously named admin-on-rest. Open sourced and maintained by marmelab. Reac…

バックエンド Web API に管理画面/管理機能を追加するアーキテクチャパターン

プレゼンテーションレイヤ、いわゆるフロントエンドがクライアントサイドで実装・実行されるアーキテクチャ (注 1) において、管理画面/管理機能をあとから追加する際にどのような実装パターンがあるのかを整理してみます。 注 1: Presentation Domain Separ…

壊れたルーティングを検出する route_mechanic gem と、その内部実装の話

壊れたルーティングの検出、routing specを自動化するroute_mechanic gem を作って公開しました。この gem の紹介と内部実装の話を書きます。 rubygems.org 背景 Rails 開発者のうちの N% は、Rails application のルーティングを検証するために以下のような…

React AdminのExporter type definitionを修正した

React AdminにはExporterという機能がある。 Exporter feature https://marmelab.com/react-admin/doc/3.10/List.html#exporter にならってjsonexportのようなライブラリと組み合わせれば数行〜数十行のコードでリストをCSV等で出力できる。 // in PostList.…

5分で終わるPrisma 2 Tutorial

「名前をよく聞くが実態がよくわかっていないものリスト」にいたPrismaだが、official tutorialが5分で終わるというのでやってみた。 www.prisma.io "5分"!? と思ったがPrisma SchemaとPrisma Clientの説明が中心で、ORMの書き味を見てみる程度の内容なので…

Rubyでemojiとcodepointsの変換

emoji から codepoints に変換 "".unpack("U*") => [128077] "".codepoints => [128077] # Convert to hexadecimal "".each_codepoint.map {|n| n.to_s(16) } => ["1f44d"] codepoints から emoji に変換 [128077].pack("U*") => "" 0x1f44d.chr('UTF-8') =>…

rubocopのNaming/MethodParameterName, Naming/BlockParameterNameで警告の指摘箇所がずれているのを修正してみた

ActiveRecord Association Extensionとwith_optionsを併用するとrubocop-railsのRails/HasManyOrHasOneDependent警告が出るので修正してみた - valid,invalid でrubocopの中身に少し興味を持ったのでシュッと倒せそうなissueがないかを拙作の goofi で検索し…

ActiveRecord Association Extensionとwith_optionsを併用するとrubocop-railsのRails/HasManyOrHasOneDependent警告が出るので修正してみた

ActiveRecord Association extensionsでメソッドを追加する - valid,invalid で書いたActiveRecord Association Extensionだが、with_optionsと併用するとrubocop-railsのRails/HasManyOrHasOneDependent copに警告されることがわかった。 with_options depe…

GitHubのメール通知先をorganization単位で分ける

長年 GitHub の仕事関連の通知と個人の趣味でウォッチしている organization / repository / issue の通知を分けられないものかと思っていたが、あっさり解決した。 https://github.com/settings/notifications (Settings -> Notifications) の Custom routi…

My favorite dancers in 2020

『ワンダンス』の影響もあり、YouTubeでよくダンスバトルの動画を見ている ワンダンス(1) (アフタヌーンコミックス)作者:珈琲発売日: 2019/05/23メディア: Kindle版 あまり真剣なファンではないしシーンの現状もよくわかっていないのだけど、3年前に少し…

VSCodeのimport-cost extensionでimportするライブラリのサイズをチェックする

import / require文で読み込む3rd party libraryのコストを表示してくれるVSCode extension。3年も前からあったのにまったく知らなかったな〜 marketplace.visualstudio.com 完璧な分析ツールを目指しているわけではなく「開発中に明らかな問題に気づくため…

ActiveRecord Association extensionsでメソッドを追加する

has_many*1にblockを渡すとassociationにメソッドを追加することができる。 class User < ActiveRecord::Base has_many :posts do def stats group(:status).count # このcontextで`self`は`ActiveRecord::Associations::CollectionProxy` # `proxy_associat…

Rails ActiveRecord 1ファイルで 新機能試す デバグ バグレポート 便利

(追記: 2021-03-21) 本家が提供しているテンプレートがあった…!! rails/active_record_main.rb at main · rails/rails · GitHub いつもググったり思い出したりしながら書いているのでメモしておく。 新機能触ったりデバグしたりバグレポートしたりするときに…

pull requestをmergeした人の一覧を得る

git log --mergedでmerge commitを絞り込み、git log --prettyでAuthor情報を表示する。 # ~/.ghq/github.com/ohbarye/rails on git:master $ git log --merges upstream/master..v6.0.0 --pretty=format:%an | sort | uniq Eileen M. Uchitelle Guillermo I…

React Adminで開発しているSPAのReactを17.0へupgradeした

業務で扱っているSPAのReactバージョンを17.0にアップグレードした。 reactjs.org 対象のSPAの開発が始まったのが2020年内で元々16.13からスタートしていることもあり、production codeに関するブロッカーは1つもなかった。 ちなみにReact Admin 3.10.4を使…

2020年の健康と体重と運動

ohbarye Advent Calendar 2020の3日目の記事です。 体重推移 最大値: 69.0kg 最小値: 64.0kg "波形-バイオリズム-" 1~2月 週5で出社し、ランチはほぼ毎食外食していたので米をそれなりに摂取していた。 夕食はたいていサラダ。 通勤で歩いていたのと、オフィスで…

複数のDocker Compose YAMLをマージして1つにする

複数のdocker-compose.ymlをマージして1つのYAMLにする方法です。 複数のアプリケーションが協調して動くようなシステム*1を開発していて、各レポジトリにdocker-compose.ymlが存在している状況を想定します。 ローカルで複数アプリを協調して稼働させるには…

sentry-ravenでエラー通知するとrack envの中身が書き換わることがある

エラー検知・監視ツールであるところのSentryが提供するRubyのSDKにsentry-ravenというgemがあります。 このgemを利用するとごくわずかなコードの記述をするだけでSentryに対してイベントを送信することができます。イベントにはユーザーが定義したカスタム…

GitHub Actionsで特定のbranchでのworkflow失敗のみ通知する

GitHub ActionsでCI/CDを組んでいるとき、特定のbranchのみ失敗を通知させたいことがある。たとえば「develop / main branchだけworkflow上でのテストの失敗を通知したい」というようなケース。 結論 jobs.<job_id>.ifでその通りに条件を指定すればよい。 failure()</job_id>…

Airflow webserverのUIがなぜ2種類存在するのか

AirflowでDAG実行時にGUI, CLI, REST APIからパラメータを渡す - valid,invalid件の調査をしていて知ったのだが、Airflow webserverのUIには2種類のUIが存在する。 利用できる機能に差分があるうえに、Airflow本体のリリースフローも初見ではわからず、やや…

AirflowでDAG実行時にGUI, CLI, REST APIからパラメータを渡す

Airflow webserver GUIの ▶️ 再生アイコンからTrigger DAGをクリックすると事前にDAG定義の内容で[DAG]が実行される。 ただ、以下のようなユースケースのために、実行するDAG(以下、DAG Run)にパラメータを渡したいことがある。 バッチによってはパラメー…

Airflow 1.10.6ではweb serverのREST APIがデフォルトで全公開されている

問題 Airflow webserverはREST APIを公開しており、DAGの参照や作成などが可能となっている。 # 疎通確認 $ curl 'https://your.domain/api/experimental/test' {"status":"OK"} 1.10.6のデフォルトの設定では破壊的操作を含むAPIを認証なしで全公開するinse…

Sorbetのドキュメント読みつつ型付けの練習

仕事で利用しているライブラリがSorbetを使っており、sorbet-runtimeをupgradeするdependabotのpull requestsがバリバリ供給されてくるのでもう少し中身を知っておきたいと思って公式ドキュメントを拾い読みしたりしたメモと所感。 ドキュメントではStripe社…

最近買って良かった漫画(2020年7月〜9月)

2020年7月~9月あたりで買ってよかった漫画。 元々集めていて続刊が出ただけのやつは除いて、新しく見知った漫画に限定。 葬送のフリーレン 最終回の「数年後─────」みたいなやつに弱いんですよ。 物語としてのクライマックスを超えて"精神の浄化-カタルシス-…

ファーストシングルをリリースしました

昨年バンド活動を始めまして、先日ついにファーストシングルをリリースしました。今回のバンドでは作詞作曲は別メンバーが担当しており、自分は主にベースを弾いています。 release活動開始&初音源リリースです!はじめまして、ハレひらく です。私達の最初…

ISUCON10 予選敗退した

ISUCON10にソロチームBPM200で参加し、最終スコア770で予選敗退しました。通過スコアには大きく届きませんでした。 戦略 ソロなので時間は絶対に足りない、という前提のもと予めフォーカスするポイントはある程度決めておきました。 大方針としてはなるべく1…