タグ

ブックマーク / motemen.hatenablog.com (49)

  • Gitでマージ済みのブランチを一括削除する - 詩と創作・思索のひろば

    こうしてます。 git for-each-ref --merged HEAD --no-contains HEAD 'refs/heads/**' --format '%(refname)' \ | while read s; do echo "$s $(git rev-parse "$s")"; git update-ref -d "$s"; done git branch を使ったやり方が一般的なようだが(Google調べ)、配管(Plumbing)コマンドを使って厳密にやるならこうでしょう。 git for-each-ref はリポジトリのrefを一覧するコマンド。refs/heads/** はいわゆるローカルブランチにマッチするパターン。--merged HEAD で現在のブランチであるHEADにマージ済みのブランチを、--no-contains HEAD でそのうちHEADを除い

    Gitでマージ済みのブランチを一括削除する - 詩と創作・思索のひろば
    honeybe
    honeybe 2023/10/20
  • Goのテーブル駆動テストではテストケースの定義位置を知りたいのでライブラリを書いた - 詩と創作・思索のひろば

    Go言語でテストを書く際のベストプラクティスとして、テーブル駆動テスト(Table dirven tests) というのが推奨されている。ようはデータとふるまいを分離しましょうという話で、正直わざわざ名前をつけるようなものでもなかろうという気持ちもないではないが、まあ話がはやくていいね。 けどみんなほんとにこれで満足してるの? と疑問に思うところはある。テストが落ちたときに表示される行番号がテストケースによらず一定で、どのテストが落ちたのかを探すのに一手間かかってしまう。 たとえば以下のコードをテストする際、 package eg import "testing" func TestExample(t *testing.T) { testcases := []struct { name string a, b int sum int }{ {"1+1", 1, 1, 99}, {"2+2"

    Goのテーブル駆動テストではテストケースの定義位置を知りたいのでライブラリを書いた - 詩と創作・思索のひろば
    honeybe
    honeybe 2023/10/12
  • リーダーシップについて - 詩と創作・思索のひろば

    リーダーシップというと、カリスマ的な魅力をそなえた人物が輝かしいビジョンを指し示し、大衆を率いていく……というドラマチックな光景を思い描いてしまうものだが、実地で求められるリーダーシップとはそういうもの(だけ)ではない。というか、そうであってほしい。 ここでは英雄的資質を持って生まれなかった多くの人間が、どうやってリーダーシップを獲得していけるのか、を考えていく。 定義 リーダーシップを定義するために語られていることを、いくつかのから引用してみる。 リーダーシップとは、集団に目標達成を促すよう影響を与える能力である(スティーブン P. ロビンス『組織行動のマネジメント』) リーダーシップとは、理由の如何にかかわりなく、[何かしらの目標をめざして]他人や集団の行動に影響を与える試みそのもののことである。(ハーシィ・ポール他『入門から応用へ 行動科学の展開』) 「絵を描いてめざす方向を示し、

    リーダーシップについて - 詩と創作・思索のひろば
    honeybe
    honeybe 2023/05/31
  • 自作したRISC-V向けCコンパイラでセルフホストまでこぎつけた - 詩と創作・思索のひろば

    低レイヤを知りたい人のためのCコンパイラ作成入門 まさに低レイヤのことが分かっておらず、以前から気になっていたこの。取り掛かってみたところ思いのほかスイスイ進められて、勢いに乗ってセルフホスト(自分が書いたコンパイラで自分自身をコンパイルするところ)までいけたので記念に書いておく。正確には C コンパイラのサブセットです。 GitHub - motemen/mocc 全体的な進め方は、 上記のの通りに進めていく。 それ以降は自作の 8queen が普通に書けるように機能を強化。 それ以降はセルフホストを目標に進める。 プリプロセッサやリンカは作らず、C からアセンブリまで。 という感じ。自分は手を動かさないと進んでる気がしないので、まずは書いてみつつわからない所があれば調べる、というスタンスでいく。 あと、せっかくなので RISC-V の勉強もしたかったのでこれ向けに書く。なので実行は

    自作したRISC-V向けCコンパイラでセルフホストまでこぎつけた - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/11/21
  • 今年の進捗プログレスバーSVG - 詩と創作・思索のひろば

    個人的に一年の様子を Scrapbox に書いているのだけど、今年もけっこう終わりに近づいたなってことを視覚的に知りたいので SVG でプログレスバーを提供することにした( /daiiz/今日 のような感じ )。以下のような感じで今年の進捗が見えてくる。@year_progress リスペクトです。 Year Progress SVG 絵心はたいへん低いほうなのでどうやって作るか困っていたが、JS+SVGで液晶画面風の表示をつくる | tech - 氾濫原 を見て Inkscape を使ってみた。これでシャッと描いたあと ブラウザ上でSVGをJSXに変換するWebアプリを作った - wadackel.me で JSX に変換し、preact で XML 化している。この程度の SVG 生成に preact は too much だという向きもあろうけど雑に作り上げるならこのくらいでいい。

    honeybe
    honeybe 2022/11/07
  • Baba Is You をクリアした - 詩と創作・思索のひろば

    追加レベルパックはまだですが……。ルール改変型倉庫番パズルの Baba Is You の全ステージをクリアした。一晩やっても進捗がでない日もある、非常に難しいパズルだった。買ってからいちおうのエンディング(スタッフロールを見る)まで休み休み1年、そこからコンプリートまで9ヶ月ということで長く楽しめた。最初にやったステージは解法を忘れてるのでもう一周しても遊べそうだ。 長い戦いだったがやりきれたのは id:akiym が最後までやるべきとオススメしてくれたからだ……ありがとうございます! プレイ時間は70時間ほどだったらしいけど、ゲーム外で考えていた時間が長いのでもっともっと費やしている。 Baba Is You|オンラインコード版 HempuliAmazon 自分がやったのは Switch 版。時間をとらないのでアクセスしやすいスマホ版がオススメかもしれない。 下の方にややゲームの内容に触

    Baba Is You をクリアした - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/10/19
  • コードレビューのときに見ているところ - 詩と創作・思索のひろば

    あるときコードレビューするときにどういうところ見てるんですか? と訊かれてたしかに自分でもあまり言語化したことはなかったな、と気づいたので簡単に書いておく。 変更意図が要求に沿っているか そもそも実現しようとしていることが、ユーザやプロダクトオーナーの要求に沿っているか。モデリングや実装のコンテキストを自分でも把握しておく。 関連する別の変更やイシューなど、自分が知っていて相手が知らない有意義な情報があったらコメントする。 モデリングが妥当か モデルによって意図が表現できているか。仕事が適切な粒度で明確に切り分けられているか。意図のない共通化がなされていないか。 わかりやすい名前がつけられているか。ここが混乱していると何かがよくないサイン。既存のコードがすでに……ということもある。そういう場合は改善できそうな道筋について議論できるとベター。 仕事にあったインタフェースになっているか。テスト

    コードレビューのときに見ているところ - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/10/10
  • graph-gophers/dataloaderはv7でgenericsに対応している - 詩と創作・思索のひろば

    GraphQL における N+1 問題の解決の機構として Dataloder と呼ばれるものがあるが、Go でこれを行うときは gqlgen + graph-gophers/dataloader という組み合わせがよく使われるようだ。後者は gqlgen の公式ドキュメントからも参照されているので、gqlgen を使っていれば自然とそうなりそう。 このへんの話は 【GraphQL × Go】 N+1問題を解決するgqlgen + dataloaderの実装方法とCacheの実装オプション - LayerX エンジニアブログ などに詳しい。 さて、この dataloaders ってのを普通に使ってコードを書いてみるとわかるのだけど、ロードのためのキーとして string を、ロードされた結果として interface{} を返すような実装になっている。つまり実際にデータベースにアクセスするよ

    graph-gophers/dataloaderはv7でgenericsに対応している - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/09/20
  • Domain Modeling Made Functional を読んだ - 詩と創作・思索のひろば

    最近フロントエンドに限らず TypeScript を書くことが多くなって、これでそれなりの規模のサーバサイドアプリケーションを書くときどうなるんだろう、と気になって読んでみた。いわゆる普通のオブジェクト指向ではなく関数指向な書き方でいきたいとき、どうするのが好ましいのか、というような観点。 名前的にそのものずばり、というがあったので購入した。日のウェブを検索してみてもいくらか言及があるので価値はありそうだという判断で、大人なので円安でも強行する。 Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# (English Edition) 作者:Wlaschin, ScottPragmatic BookshelfAmazon 自分は PDF で読みたかったので

    Domain Modeling Made Functional を読んだ - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/09/12
  • Bubble Tea でリッチなターミナルアプリケーションを作る #Go - 詩と創作・思索のひろば

    近年、普段の作業をマウスでやりたくない気持ちが高まっている(デスク周りが散らかってきたせいだという説が有力です)。メールは結局ターミナルでメールを読むことにしたため問題なく過ごせているが、その他のタスクをキーボードだけでやるには、ターミナル動くアプリケーションを作れる必要がある。それもリッチなやつだ。見た目は派手な方がいい。 この記事は Kyoto.go remote #32 LT会 で発表した 入門 Bubble Tea の増補版です。 Bubble Tea とは GitHub - charmbracelet/bubbletea: A powerful little TUI framework 🏗 Bubble Tea とは、Go でリッチなターミナルアプリケーション(TUI)を作るためのフレームワーク。Charm というプロジェクトの一部のようで、ホームページを見てもらったら分かると

    Bubble Tea でリッチなターミナルアプリケーションを作る #Go - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/06/17
  • OAuth2 のよくあるフローを何回も書きたくない #Go - 詩と創作・思索のひろば

    よくあるフローってのは GoogleAPI ドキュメントを読んでたらよくでてくるやつ(Calendar API の例)。つまり: 前回のアクセストークンが保存されていたらそれを使い、なかったら localhost にサーバを立て、redirect_uri をそこに設定した認可のための URL をユーザに提示し、 code を受け取ったらアクセストークンと交換し、 トークンを保存する。 みたいな一連の流れ。これまでどの部分を抽象化したらいいのかあまり感覚がわからなくて手を出してなかったんだけど、いいかげん面倒なので書いてみた次第。 oauth2util package - github.com/motemen/go-nuts/oauth2util - pkg.go.dev 使い方は簡単で import "github.com/motemen/go-nuts/oauth2util" ..

    OAuth2 のよくあるフローを何回も書きたくない #Go - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/06/06
  • コマンドラインでメールの内容に基づいた処理をするツールを書いた: letterknife - 詩と創作・思索のひろば

    メールに対する jq みたいなやつ……というと強力すぎるけど、そういう感じにメールを入力に受け取って何かしらの処理をした上で出力してくれるツールです。ここでいうメールとは MIME 形式のメール全体。Gmail なら "Show original" で見られるようなもの。 結局ターミナルでメールを読むことにした に書いたとおり最近はターミナルでメールを読むようになりそこそこ快適なんだけど、メールとの接し方がプログラマブルになったからには楽をしたい。だいたい通知のメールのこの部分をクリックするだけ(そして承認したりコメントしたりする)、みたいなパターンが決まってるものには DWIM(do what I mean)的にキー入力一発で対応したいわけです。それをやるためのツールとして書いた。珍しく名前を気に入ってる。 GitHub - motemen/letterknife 使い方 $ cat <

    コマンドラインでメールの内容に基づいた処理をするツールを書いた: letterknife - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/05/20
  • Makefileの代わりにnpm scripts+zxを使う - 詩と創作・思索のひろば

    そこそこの規模があるプロジェクトで実行すべきタスクを定義するとき、初手として Makefile を使いがち。 Pros make は事実上どんな環境にもあることを期待してよい シェルで実行されるコマンドをそのまま書ける タスクの依存関係が明示できる Cons make では positional arguments が使えない 少し複雑なことをしようとすると Makefile 専用の文法を覚える必要がある 現代では、ファイルベースのタスクの依存関係は make が発明されたころほどは必要ではない Docker とか Go とか Webpack がよしなにしてくれることが多い 例: docker compose のラッパー ちょっとしたコマンドのラッパーを書きたいことがある。Makefile を書きはじめたらすべてのエントリポイントを make にしたい。ということで、以下のような Make

    Makefileの代わりにnpm scripts+zxを使う - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/04/19
  • DevTools上でesbuildするChrome拡張を書いた - 詩と創作・思索のひろば

    社内ではドキュメントの共有に Scrapbox が活発に使われており、するといきおい UserCSS や UserScript もさかんである。具体的には、/customize という共有のプロジェクトがあってみんなの自慢の装飾やカスタマイズが共有されている。これを個々人で import して使うんである。 こんな感じ。 自分の場合は /motemen/UserCSS/common に常に適用したいスタイルを書いておいて各プロジェクトから読み込んでいる。このページからさらに、共有プロジェクトや他人の個人プロジェクトページからよさそうな設定を import している次第。 つまりは多段インポート。こういうことを続けていると、だんだんと読み込みの遅さが気になってくる。こういうのはバンドルすればいいのだけど、巷のツールを普通に使うことはできない。インポートしてるリソースに認証がかかっているからだ

    DevTools上でesbuildするChrome拡張を書いた - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/03/01
  • SlackやGoogle Docsにページへのリンクを共有するなら圧倒的にcocopyが楽 - 詩と創作・思索のひろば

    Scrapbox のような Wiki 的なツールでは URL にページ名が入ることが多く、URL を見るだけでどんな内容なのか想像がついてよい一方で、こういう URL を SlackGoogle Docs のような別の場所に共有するとパーセントエンコーディングされた URL になってしまい意味がわからなくなる。日語を書いていることだけが分かる状態。 マルチバイトしかないと当にわからないね Slack がアクセスできない URL だと、プレビューも展開してくれないしね。かといってデコードした状態の URL を貼っても、変なところで途切れたりする。 ・(中黒)でリンクが途切れている 文字は難しい……。URL の解釈はものによって異なってくるのもまた困る。これはプレーンな文字列を渡しているのでこういう困難が出てくるのであって、最近はクリップボードでリッチなコンテンツを受け渡しすることが

    SlackやGoogle Docsにページへのリンクを共有するなら圧倒的にcocopyが楽 - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/02/22
  • Alfredの代替としてRaycastを使っている - 詩と創作・思索のひろば

    新春ツール入れ替えシリーズです。macOS における Spotlight 的なランチャーツールとして Alfred を長いこと使ってきたが、最近 Raycast を使ってみてこれがよかったので、以来ずっと使い続けている。 Raycast - Supercharged productivity 開発者のための便利ツールという売り文句のようで、そういう点がまさに気に入った。 カレンダーの次の予定が表示される まずこれがいい。これだけで十分使える。ランチャーを起動したときにカレンダーの次の予定を表示してくれる。Enter でそのまま Meet や Zoom を開いてくれるのでキーボードから手を離す必要がない。 もともとカレンダーの確認には Dato を使っていたし今も使ってるが、これでミーティングへのアクセスがかなりよくなった。 コミュニティベースの Store で機能を追加できる https:

    Alfredの代替としてRaycastを使っている - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/02/01
  • 2022年、タスク管理をTickTickで行う - 詩と創作・思索のひろば

    TikTok じゃないよ。 TickTick: Todo list, checklist and task manager app for Android, iPhone and Web チームのタスクマネジメントに Asana を使っていたのでそれに合わせて個人タスクもそこに積んでいたのだけど、Asana も積極的に使いたいわけではなかったし、年末から別のものを探していた。新しく選ぶなら一番重視したいのはやはり、カレンダーの予定の隙間にタスクを挿入できること。前にも自前で実装したことがある(カレンダーでタスクを管理することとその実装 - 詩と創作・思索のひろば)けど、こういうのはちゃんとビジネスとしてやってる人びとに任せたほうが改善もメンテもされるしいいのは当然。 いくつか見てみたところ、TickTick というのがよかったのでこれを使ってみている。いわゆる普通のタスク管理ツールという感

    2022年、タスク管理をTickTickで行う - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/01/17
  • 「半年早く動く」を目標にして半年が経った - 詩と創作・思索のひろば

    社内に「来年の今年の目標は『半年早く動く』です」というエントリを書いて半年が経った。 こういう目標を立てたきっかけは、自分が変化のタイミングとして会社の会計年度(半期)を考えるようになっていたことに気づいたことだった。 同じ会社でマネージャも長いこと続けていると、部下や同僚の退職を見送る経験も多い。これは一般的に言っても、あまり楽しい体験ではない。辞める理由は人それぞれで、ひと括りにすることはできないものであるし、こう考えるのはおこがましい感じもするが、立場的には、自分が何かアクションを起こすことでまだこの会社で活躍してもらえていたんじゃないかと思うのも常だ。そして実際、そのための、たとえば環境を変えるといったことを考えて、準備もしていた場合も多かった。来期まで待っててくれればな……、という具合。 けれど、自分が制度や組織の設計を仕事の手段としてるのでそう考えていたとしても、ひとの人生はそ

    「半年早く動く」を目標にして半年が経った - 詩と創作・思索のひろば
    honeybe
    honeybe 2022/01/11
  • Goでプライベートネットワークへのアクセスを制限する - 詩と創作・思索のひろば

    Go において、いわゆる SSRF (Server Side Request Forgery) を防ぐような目的で、内部 IP アドレスにアクセスしない HTTP クライアントを作るには hakobe/paranoidhttp が便利だった。ただ、近年ではこれが作られて以降の Go 側のアップデートとして、net.Dialer.Control の登場がある(Go 1.11 より)。 type Dialer struct { ... // If Control is not nil, it is called after creating the network // connection but before actually dialing. // // Network and address parameters passed to Control method are not //

    Goでプライベートネットワークへのアクセスを制限する - 詩と創作・思索のひろば
    honeybe
    honeybe 2021/06/23
  • Goのswitch文を生成するツール - 詩と創作・思索のひろば

    GitHub - motemen/go-switchgen 昔作ったソフトウェアをちょっとメンテしたシリーズ。Goswitch 文を自動生成したいよーってときに使えるやつです。 case 文が exhaustive になるようにいちいち書いてくのが面倒なので、機械にやらせる。 こんなやつ欲しいんだが……ってなったときに、オレならこういう名前のツールを作る! って思った名前で過去の自分が作ってることに一貫性を感じる。まあ世の中にすでに3つくらい実装のありそうなやつではある。 % go install github.com/motemen/go-switchgen/cmd/goswitchgen@latest 使い方 fully-qualified な型を指定すると、その型を持つ値に対する switch 文を生成します。case に挙げられるのは、同じパッケージに定義されている値や型。

    Goのswitch文を生成するツール - 詩と創作・思索のひろば
    honeybe
    honeybe 2021/04/21