タグ

ggkuronのブックマーク (1,906)

  • 継続モナドで立ち向かうローンパターンとEither地獄 - 星にゃーんのブログ

    Haskellでファイルなどのリソースの解放を保証するテクニックとして、ローンパターン(Loan Pattern)がある。withFile :: FilePath -> IOMode -> (Handle -> IO r) -> IO rなどがその例だ。 ローンパターンによる関数を複数使ったプログラムは、無名関数のネストが深くなる。 main = do withFile "src.txt" ReadMode \src -> withFile "dst.txt" WriteMode \dst -> ... この問題には、継続モナドContTを使ったきれいな解決策が知られている。 main = evalContT do src <- ContT $ withFile "src.txt" ReadMode dst <- ContT $ withFile "dst.txt" WriteMode .

    継続モナドで立ち向かうローンパターンとEither地獄 - 星にゃーんのブログ
  • Reactを使ってプロダクト開発している開発者だけでなく、マネージャにも読んでほしい「Fluent React」 - ROUTE06 Tech Blog

    チームでReactを使って開発していると、コードレビューをする際に、「この書き方はしない方がいいが、それを説明するには800文字くらい必要。図も描きたい。でもそれらを準備する時間はない。」ということが度々ありました。 また、フレームワークやライブラリの技術選定をする際、マネージャに「どうして技術選定が必要なのか」を説明する必要がありました。ROUTE06のマネージャはエンジニアリングへの造詣が深い方が多いので、対立構造になることはありませんが、説明するためには1000文字くらい必要で、やはり図も描きたい。時間はない。と同じ気持ちになることがありました。 参考情報として紹介できる情報がないか探してみると、「とりあえずこうすればOK」というベストプラクティスについては検索エンジンやSNSですぐに見つかります。ただ、どうしてその方法がベストプラクティスなのか、仕組みや原理を説明している情報は少な

    Reactを使ってプロダクト開発している開発者だけでなく、マネージャにも読んでほしい「Fluent React」 - ROUTE06 Tech Blog
  • Monomer という Haskell のハイレベル GUI ライブラリ - Qiita

    Windows で動作する GUI アプリケーションを作りたくて、でも Windows では開発したくないのでクロスプラットフォームな GUI ライブラリを模索し、Monomer にたどり着きました。 結果、このライブラリでは要件を満たしていないため使わないことにしましたが、備忘録です。 Monomer とは 内部的に SDL2 を利用していて、その低レベルっぷりを隠蔽し、Elm アーキテクチャに昇華させている良いライブラリだと思いました。 以下のコードで以下のようなアプリが起動できます。 {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} module Main where import Debug.Trace import Control.Lens import Data.Maybe import Da

    Monomer という Haskell のハイレベル GUI ライブラリ - Qiita
    ggkuron
    ggkuron 2023/12/31
  • 長くなりがちだったコードレビューを改善した話 - 弁護士ドットコム株式会社 Creators’ blog

    弁護士ドットコム クラウドサイン事業部でエンジニアをしている山田です。 主にフロントエンドを担当しています。 普段の業務でフロントエンド開発のコードレビューをすることが多く、今回は長い時間がかかりがちだったコードレビューを以下の施策で改善した話をします。 タスクへの認識合わせを拡充 タスクを小さく分割 類似するタスクのレビュー内容は共有 必要に応じて同期的にレビュー 達成されないスプリントゴール スプリントゴールが達成できない原因 コードレビューが長くなる要因 レビュアーのレビュー期間が長い タスク担当による対応期間が長い 対応策 タスクについての認識合わせの時間を設ける タスクをなるべく小さくする 類似する複数のタスクはレビュー内容を共有 必要に応じてオンラインミーティングなどで画面共有し会話しながら同期的にレビューする スプリントゴールも達成できるように まとめ 達成されないスプリン

    長くなりがちだったコードレビューを改善した話 - 弁護士ドットコム株式会社 Creators’ blog
    ggkuron
    ggkuron 2023/12/31
  • 都市を滅ぼす方法

    2005年8月に大型ハリケーン「カトリーナ」がアメリカ南東部を襲った。ルイジアナ州ニューオーリンズ市では防災インフラの不備等により陸地の大半が水没に遭い、2000人以上の死者が出た。市はこれを好機としてカトリーナ到来前から構想していたまちづくりに着手し、現在はすっかり起業家の都市として生まれ変わった。ニューオーリンズ市はどのような手法で「都市の再生」を果たしたのだろうか。[日語版編集部](仏語版2018年12月号より) ジェントリフィケーションのターゲットにされた地区において、これまで全く特色のなかった場所が突如として、人々の関心を集める場所、さらには抵抗の拠点とみなされることがある。ニューオーリンズ市のフレレット・ストリートでは、ある小さな理容室がこうした役割を担うことになる。このデニス・バーバー・ショップは1974年、白人訪問者がこの通りに迷い込もうものなら一目散に逃げだしたくなるよ

    都市を滅ぼす方法
    ggkuron
    ggkuron 2023/12/31
  • WSLでWindowsのEXEが実行できなくなったときの対処 - ぶていのログでぶログ

    前の記事でUbuntu 23.04 on WSLにしても問題は起こっていない!っと書いた直後に、WindowsのEXEが実行できないことに気がついた…しょぼーん。 EXEを実行すると以下のようなエラーを吐く。 ❯ wslview . grep: /proc/sys/fs/binfmt_misc/WSLInterop: No such file or directory WSL Interopability is disabled. Please enable it before using WSL. grep: /proc/sys/fs/binfmt_misc/WSLInterop: No such file or directory [error] WSL Interoperability is disabled. Please enable it before using WSL. /

    WSLでWindowsのEXEが実行できなくなったときの対処 - ぶていのログでぶログ
    ggkuron
    ggkuron 2023/12/31
  • 何故、日本人は縦乗りなのか ─── 縦乗りを克服しようシリーズその1 (oka01-qioaafwfeykuqiuj)

    どん、どん、どん、どどんがどん。 どっどんがどんの、どんどんどん。 日人は何故たてのりなのでしょうか。ロックやってもたてのり。クラシックやってもたてのり。ジャズやってもたてのり。バンドやってもたてのり。手拍子打ってもたてのり。ステップ踏んでもたてのり。かっこよくダンスしたつもりでたてのり。歩いてもたてのり。走ってもたてのり。 何をやってもたてのり。─── 日人は、どうやってもたてのりから脱出できません。 縦乗りからの脱出。 これは日人にとって永遠のテーマです。日のミュージシャン達は激しくスイングする物のグルーヴを求め、滝に打たれたり、長期間断して生死の縁をさまよったり、燃え盛る炎を裸足で渡ったりします。しかしそんな命がけの努力も虚しく、依然として縦乗りから脱出することはできません。 しかしもうリズムを精神論で考える必要はありません ─── 日人が何故縦乗りになるのか。これまで

    何故、日本人は縦乗りなのか ─── 縦乗りを克服しようシリーズその1 (oka01-qioaafwfeykuqiuj)
    ggkuron
    ggkuron 2023/12/31
  • React Server Components: the Good, the Bad, and the Ugly

    React Server Components bring server-exclusive capabilities to React. I've been using this new paradigm within Next.js 13 and 14, and what follows is my honest assessment of it[1]. I debated not publishing this post because of the way the React community has historically handled criticism. It is only recently that I decided it is important to share my thoughts, especially after seeing that much of

  • useEffectEvent フックを使って useEffect ともっと上手く付き合おう

    useEffectEvent という react フックをご存知ですか? まだ experimental なので、知らない方も多いと思います。しかし、このフックは 「なんで今までなかったんだろう?」と思ってしまうほど革新的 です。今回はその使い方の紹介などをします。 概要: useEffectEvent は useEffect とともに使うフック まず概要ですが、useEffectEvent は イベントリスナーを設定する useEffect とセットで使うフック です。 useEffectEvent を使うと、エフェクトとイベントリスナーを分離できます。そして、イベントリスナーの deps の変化時にエフェクトを再実行せずに済みます。 …とまあ、抽象的な説明だけでは分かりづらい と思うので、以降では useEffectEvent がどういう課題を解決するのか、また具体的にどういうケースで

    useEffectEvent フックを使って useEffect ともっと上手く付き合おう
    ggkuron
    ggkuron 2023/12/29
  • React Server Components と GraphQL のアナロジー

    Next.js の App Router が安定版となり、React Server Components (以下 RSC) を実際に試す環境が整ってきた。 実際、今年はやれどこそこのプロダクトが Next.js を採用しただのやっぱり捨てだのといった話題が尽きなかったように思う。 かくいう自分自身も、今年は App Router の案件に取り組んで RSC と格闘する日々を送っていた。 その過程で、こんなようなことを考えるようになったので、今回はこの辺りの話を書き残しておこうと思う(何回か X に同じ旨の POST は上げていたけど、一回もちゃんとまとめてなかったので)。 RSC がない頃の、別の言い方をすると getServerSideProps を使っていた頃の、Next.js におけるアプリケーションの設計は、トラディショナルな MVC にかなり近しい。 ここでいう MVC は、Sp

    React Server Components と GraphQL のアナロジー
    ggkuron
    ggkuron 2023/12/26
  • Vite は使ってないけど Jest を Vitest に移行する

    上記以外で特筆すべき点として、他の開発者(≒チームメンバー)にとっては、変更の影響をほとんど受けずに、ノーコストで上記恩恵を受けられる点があります。 これは Vitest の Jest に対する高い互換性のおかげでテストコードの書き方に大きな変更がなかったことと、テスト実行コマンドを npm-scripts によって隠蔽していたことによるもので、移行したことに気づきさえしない可能性もあります。 Vite を使ってないのに Vitest 使ってええんか? 今回 Jest から Vitest への移行を行ったプロジェクトは、開発サーバーやプロダクションビルドには Webpack を使用しており、Vite は一切使用していませんでした。 そういったプロジェクトにおいても、Vite をベースとしたテストフレームワークである Vitest は使用して良いものでしょうか? これについては Vitest

    Vite は使ってないけど Jest を Vitest に移行する
    ggkuron
    ggkuron 2023/12/13
  • stackを使ってお洒落にxmonad.hsを管理する

  • WSL2 での DISPLAY 設定 - Qiita

    WSL2 では、YOUR_HOSTNAME.mshome.net のように、mshome.net をドメイン名としたホスト名が割り当てられています。 これを用いて、

    WSL2 での DISPLAY 設定 - Qiita
    ggkuron
    ggkuron 2023/12/08
  • フロントエンドの書くべきだったテスト、書かなくてよかったテスト

    https://offers.connpass.com/event/299909/ 登壇資料

    フロントエンドの書くべきだったテスト、書かなくてよかったテスト
    ggkuron
    ggkuron 2023/11/18
  • ブラウザでリロードしながらキャッシュの挙動を確認してる全ての開発者へ | blog.jxck.io

    Intro こういうタイトルを付けるのはあまり好きではないが、あえてこのようにした。 「ブラウザでキャッシュがヒットしない」 以下は、 Web における Caching の FAQ だ。 サーバで Cache-Control を付与したのにキャッシュがヒットしない サーバで ETag を付与したのに If-None-Match が送られない サーバで Last-Modified-Since を付与したのに If-Modified-Since が送られない 先日も、筆者が書いた MDN の Cache セクションで「記述が間違っているのでは?」と同様の質問を受けた。 Issue about the Age response header and the term "Reload" · Issue #29294 · mdn/content https://github.com/mdn/cont

    ブラウザでリロードしながらキャッシュの挙動を確認してる全ての開発者へ | blog.jxck.io
    ggkuron
    ggkuron 2023/11/07
  • Covariance and Contravariance - FP Complete

    Typeclasses such as Bifunctor are often expressed in terms of whether they are covariant or contravariant. While these terms may appear intimidating to the unfamiliar, they are a precise language for discussing these concepts, and once explained are relatively easy to understand. Furthermore, the related topics of positive and negative position can greatly simplify how you think about complex data

    Covariance and Contravariance - FP Complete
    ggkuron
    ggkuron 2023/10/29
  • daxはいいぞ

    Deno Advent Calendar 2022の16日目の記事です! Denoでこんな感じのコードを書いていました。内容的には大量(2000個以上)のSVGファイルをゴリゴリとTSXファイルに変換していくなんてことをやっています。 変換部分の体はsvgrというライブラリを使っています。内容的にはよくわかっていませんが、babelでパースしてastでどうのみたいな感じのようです。 SVGファイルをバッチ的にTSXに変換していくんですが、最後に deno fmt は手作業でかけなければならずそれが微妙でした。ここはDeno.Commandの出番かな〜とも思ったんですが、前から作者に激推しされていたdaxを使うことにしてみました。 利用方法 というわけでdaxをimportしてきます。

    daxはいいぞ
    ggkuron
    ggkuron 2023/10/29
  • ファンクタであそぼう - 指圧記

    この記事はHaskell Advent Calendar 2013の3日目の記事です。 目次 どうして? ファンクタを拡張しよう おさらい 引数をふたつ取ろう 逆転の発想 共変・反変・自由変・固定変 データ型の整理 正の位置と負の位置 自由変と固定変 ファンクタ類を自動生成しよう まとめ おまけ Thornについて CPLであそぼう どうして? ファンクタはHaskellに欠かせないものですが、ファンクタを一般化して見るという見方は意外に広まっていないように感じます。分かってしまえば単純な話だけにもったいないと思ってこの記事を書くことにしました。 また、僕は最近Thornというライブラリを作りました。これは、さまざまなデータ型から関手や畳み込み・展開をTemplate Haskellを使って自動生成するライブラリです。このライブラリを作るなかで気づいたことも合わせて書いていこうと思います。

    ファンクタであそぼう - 指圧記
    ggkuron
    ggkuron 2023/10/12
  • JavaScriptでScalaのFutureを表現する

    はじめに Scala.jsというプロジェクトがあります。 Scalaで書いたプログラムをJavaScriptに変換する、とてもクールなツールです。 ただ、もちろん言語自体が違うため、完全なマッピングが可能な訳ではありません。ベストエフォートでセマンティクスを維持したままJavaScriptに変換しますが、いくつか対応付けが困難なケースがあります。 その中でも特にScalaの Future をJavaScript上でどのように表現するか? という点に関しては、JavaScriptの深みを知れるとても良い題材だと思ったので、まとめてみようと思います。 ※ 一応Scala.jsをネタに出してますが、Scalaを知らなくても理解できるように書いたつもりです。 ScalaのFuture Scalaには並列処理を行うためのデータ型として Future があります。 Future は、ある時点において利

    JavaScriptでScalaのFutureを表現する
    ggkuron
    ggkuron 2023/10/07
  • MySQLのインデックスですが、B-treeではなくB+treeを使用するのはどうしてなのでしょうか? | mond

    MySQLのインデックスですが、B-treeではなくB+treeを使用するのはどうしてなのでしょうか? 端的に言うと性能が良いからです。 これを理解するにはバッファプールへの理解が必要です。ディスク指向のデータベースの上では有限のメモリを最大限活用することでメモリに入り切らない巨大なデータ群に対して良好な参照性能を出す必要があります。バッファプールとはディスク上のデータの羅列を固定サイズのページ(InnoDBの場合16KB)の羅列であるとして読み書きに必要な分だけをメモリに移し取り複数の書き込みをできる限りメモリ内で受け止めて後でまとめてディスクに書き戻すという、ライトバック型のキャッシュのような機構です。 この中においてバッファプールは有限のサイズしか無いので適宜プール内のデータを書き戻して入れ替えながら上手くやっていく必要があります。 さてB+treeとB-treeの最大の違いは木のリ

    MySQLのインデックスですが、B-treeではなくB+treeを使用するのはどうしてなのでしょうか? | mond
    ggkuron
    ggkuron 2023/10/02