サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
夏の料理
matsubara0507.github.io
仕事では Bazel を使ってビルドすることが多くなり,自分でも Bazel ルールを自作するようになったので,実験も兼ねて趣味の Haskell Stack プロジェクトを Bazel を使ってビルドしてみることにしました. 本記事はそのメモ書きです. あとこれは Haskell Advent Calendar 2020 の2日目の記事です. Bazel Bazel は Google のエンジニアが中心になって開発している OSS のビルドツールだ. 以下のような特徴がある: 必要なコマンドのインストール・バイナリのビルド・コマンドの実行などを記述できる それらは全て専用のサンドボックス内で実行されるため再現性が高い Starlark という Python 風な独自言語で記述する キャッシュなどが工夫されており二度目以降のビルドが高速になりやすい 依存関係を明確に記述する必要がある また
Go言語にジェネリクスを導入するために,その形式的な議論を研究した論文「Featherweight Go」が6月頭に発表されました. せっかくなので(久々に)全訳をしながら丁寧に読んでみたので,それを簡単にまとめることにします. 可能な限りGo言語に馴染みのない人や,プログラミング言語の形式的な議論に馴染みのない人でも理解できるようにしてみます. 注意 僕は英語がとても苦手です(DeepLを駆使しても3週間かかりました) 僕はGoでアプリケーションを少し書いていますがコアについては全く詳しくありません 僕は言語の形式的な議論を院生時代にやってましたが卒業して数年経ちます なので間違ってる可能性も十分に考慮してください. TL;DR Goにジェネリクスを導入する新しいデザインを提案: インターフェースと型アサーションを駆使する方法 新デザインを形式的に議論するために FG と FGG を定義
本記事は「Haskell Advent Calendar 2019」の2日目の記事です. 2019/11/13 に GA された GitHub Actions を使って,Haskell プロジェクト,とりわけ Haskell Stack を使ったプロジェクトを CI/CD します. ちなみに,試すために導入した PR はこれです: 自動ビルドを追加 by matsubara0507 · Pull Request #1 · matsubara0507/octbook これは適当な設定ファイルから GitHub の Organization や Organization の Team 機能にユーザーを招待したりキックしたりするための CLI ツールです. Cabal の場合 はわりかし簡単. Haskell のセットアップは公式がすでに用意してくれてるのでこれを使えば良い: actions/s
Ruby 2.7 で導入予定で,すでに Ruby リポジトリの trunk (いわゆる master ブランチのこと) にマージ済みの「パターンマッチング」機能を試してみたので,そのメモ書きです. 特に包括的に検証したわけではないので注意してください. パターンマッチング (わざわざ解説することでもないけど) パターンマッチングは if 文や case 文のようなプログラムの分岐に使うプログラミング機能. if 文が真偽値を返す条件式 (e.g. a > 0 && x == 'hoge') の結果により分岐し,case 文が指定した変数の値によって分岐するのに対し,パターンマッチングは指定した変数のデータ構造によって分岐する. 例えば Ruby に導入されたパターンマッチングだと次のようになる: case var # var のデータ構造により分岐 in [] puts "var is e
最近はよく rio + extensible で Haskell アプリケーションを書きます(趣味の). 前々から何となくパターン化できそうだなぁと思っていたのが,それをついにパターン化し mix パッケージとして形にしましたというお話です. ちなみに,それぞれのパッケージを軽く説明すると: rio : Haskell のビルドツール Stack を開発しているチームが作っている Reader パターンをベースにした Alt. Prelude extensible : 拡張可能レコードを始めとして様々な拡張可能なデータ構造を同一の形式で利用できるようになるパッケージ mix パッケージ リポジトリはこれ: mix パッケージの目的は rio パッケージの RIO env a モナドの env の部分を extensible パッケージを用いて簡単に構築することであり,env をプラグインと
(どうでも良いですが,モノリポにした方良かったと思う... Marpit で更新があると全てのリポジトリで PR を出して更新する必要があるので...) ちなみに,旧 Marp のリポジトリの Issue ラベルに Marp Next や Supports in Marp Next というのができている. 旧 Marp の Issue には,かなり要望っぽい Issue がたくさんあり,その中でも Marp Next では対応する予定のものには Support in Marp Next を付けたようだ. 旧 Marp との非互換な機能 これらは旧 Marp ユーザーしか意味ないが,適当に書き連ねていおく: ==AAA== というハイライト機能がない(辛い) 打ち消し線記法 ~~AAA~~ もない 画像の拡縮ルール (Marpit) より細かいルールができて書きやすくなった しかし前のは記法
本記事は Haskell (その2) Advent Calendar 2018 の18日目の記事です. 空いていたのでついでに埋めました. 12/7 の10-17時半ぐらいに IIJ-II で GHC8 系のバージョンアップを追う会的なイベントが企画されました. このイベントは IIJ-II の Haskell チームで発案・企画し,Haskell-jp の Slack で募集をかけていました. 定員12人かつ,平日昼間でしたが,面白そうなので有給とって行ってきた(僕は IIJ-II では無いので). 多少クローズドな会ということもあり,せっかくなので色々と議論したことを記事に起こしておきます. 正確な情報は GHC のドキュメントを呼んでください. 進め方 GHCにはこんな感じのリリースノートがある. 当日は8系のリリースノートのハイライトを追っていくという感じだった. 事前に一人一つぐ
本記事は Elm Advent Calendar 2018 の11日目の記事です. elm-jp の Discord で突如無茶振りされたので頑張ります. elm/url elm/url は Elm 0.19 で刷新されたパッケージ群にしれっと混ざってきた URL に関するパッケージ. Browser.application でも使われているのでみなさんも頑張って使えるようになりましょう. ちなみに本記事では ver1.0.0 の elm/url を想定している. Url の型 こんな風に定義されている: type alias Url = { protocol : Protocol , host : String , port_ : Maybe Int , path : String , query : Maybe String , fragment : Maybe String } ty
本稿は Haskell Advent Calendar 2018 5日目の記事です. Haskell Day 2018 の発表をきっかけに,兼ねてから気になっていた Dhall を試した. いくつかツールが欲しくなったので作りましたっていう話です. 作ったものはこれ: matsubara0507/yaml-to-dhall - GitHub matsubara0507/dhall-ex - GitHub ちなみに,今回作ったツールは現状の stack の stable resolver にある v1.5.1 を利用している. Dhall Dhall は静的型付けされた設定記述言語である. 多くの場合,プログラミング言語やアプリケーションに使われる設定ファイルには JSON や YAML が利用されている. プログラミング言語のビルドシステムのような設定ファイル一つ程度なら問題ないが,Kub
先日(6/16),Earlang & Elixir Fest 2018 に参加してきたので,そのメモ書きです. ちなみに,Elixir は普段たいして使ってないけど LT もしてきました. 追記(2018.06.21) 本稿公開後に公開してくださった発表スライドのリンクを追記しました. 今年で2回目らしく,去年は Elixir の作者の Jose Valim 氏を呼んで Keynote してもらい,全体のセッション内容としては Elixir を導入し始めた・挑戦中という話がメインだったようだ. 今年はどっちかっていうとプロダクトに実践導入・運用してみてどうだったかという話がメインだそうだ. また,並行してハンズオンがあったらしいが,行ってないのでそっちは良く分からない. ハンズオンの資料は GitHub に公開してあるので,いずれやってみたい(同期とかとハンズオンしてみてもいいかも). o
Elm から Elixir のトランスパイラ,Elchemy についてイロイロと調べたのでまとめていきます. 今回は README の意訳 Dockerイメージ作成 Tutorial その1をやってみた の3本立てです. ちなみに,現在のバージョンは 0.7.4 です. README 意訳 Elchemy は,Elixir の強力なエコシステムと Elm の型安全によって,より簡潔に高速に高品質で型安全なコードを記述するために作られた処理系です. Elchemy のオンライン環境リンクが死んでた Elchemy の公式ドキュメント Elchemy のチュートリアル (今のところ Part1 と Part2 がある) なにか質問がある場合は Q&A ラベルを付けて Issue を書いて,だそうだ. Features 型推論: 強力な型推論によって型注釈を付けることはめったにない. コンパイラ
現在 TaskPad という簡易的なタスク管理(編集)ツールを Haskell で作っていて,少し CLI を作るうえでのオレ的ノウハウが溜まったのでメモっとく. TaskPad 先に,何を作ってるかを書いておく. まだ完成していないが,気持ちは次のような Yaml ファイルを編集して自身のタスク管理をしようかなと考えている. memo: [] tasks: 1: done: true children: [] name: hello 2: done: false children: [] name: world date: '20180504' 現状できている CLI は次のような感じ $ taskpad --help taskpad - operate daily tasks Usage: taskpad [-v|--verbose] [-d|--date DATE] COMMAND
先日,alt. Prelude を目指している rio ライブラリの ver.0.1 がリリースされました. 自作している CLI ツールを試しに rio で置き換えようかとしてまして,自分の整理のためにまとめてみようと思います. ただし,rio 作者ではないし,全部をちゃんと追っていないので間違っているかも. 間違っている場合はこのリポジトリに Issue するか Reddit でコメントでもしてください m(_ _ )m README でひとめぐり もともとはビルドツール Stack を作成するために考えたデザインパターンをまとめたものっぽい. The RIO Monad rio ライブラリの README にはライブラリのゴール・目的の他に(彼らにとっての)ベストプラクティスが書いてある(rio 自体がそれに則って作られてる). ここには翻訳というより,README の各項目の要約を
この前の「『Haskellによる関数プログラミングの思考法』読書会」の後の懇親会(?)で 多相バリアント の話になりまして,その時に以下の記事が話題にあがった. 多相バリアントを使いこなそう(1) - osiire’s blog 多相バリアントを使いこなそう(2) - osiire’s blog 多相バリアントを使いこなそう(3) - osiire’s blog 多相バリアントを使いこなそう(4) - osiire’s blog これらの記事は OCaml で多相バリアントの紹介をしています. ということで,同様の議論を Haskell でもしてみた!というのが,この記事の内容です. (2018.04.13 追記アリ) Haskell と多相バリアント 悲しいことに,Haskell には組み込みで多相バリアントは無い(バリアントとは Haskell の代数的データ型における直和型と概ね一緒
「extensible パッケージの楽しみ その3」です. 拡張可能レコードやら Extensible Effect やら,Haskell の Extensible なものを全て統一された仕組みで提供する化け物パッケージ extensible について,割とドキュメントには無い(?)ネタを書いておくシリーズ第三弾です. ぼく自身は作者ではないし,間違っているかもなのでこの記事を完全には当てにしないでください. また,現在の最新バージョンは 0.4.7.1 です(そのバージョンでハナシをしてる). 前々回は拡張可能レコードの拡縮の話を,前回は拡張可能直和型(バリアント)を引数に取る関数の話を書きました. 今回は 拡張可能タングル で遊んでみます. 今回の Haskell コードは基本的にコレ. 拡張可能タングル 作者さんの拡張可能タングルについての記事があり,非常に分かりやすいです. 波打た
「extensible パッケージの楽しみ その2」です. 拡張可能レコードやら Extensible Effect やら,Haskell の Extensible なものを全て統一された仕組みで提供する化け物パッケージ extensible について,割とドキュメントには無い(?)ネタを書いておくシリーズ第二弾です. ぼく自身は作者ではないし,間違っているかもなのでこの記事を完全には当てにしないでください. また,現在の最新バージョンは 0.4.7.1 です(そのバージョンでハナシをしてる). 前回は拡張可能レコードの拡縮の話を書きました. その最後の方に,おまけとして拡張可能直和型の話を書きました. 実際に自分のプログラムで,この拡張可能直和型を使おうとしてみたんですが,パターンマッチが分からず分岐が出来なかったので調べました,ってのが今回のハナシ. 今回の Haskell コードは基
Electron Advent Calendar 2017 の22日目の記事です. Elm2 アドカレで 「Elm でマークダウンプレゼンテーションエディタを作るハナシ」を書いたのですが,長くなったので分けました. 前半はコチラ(前半は Electron 関係ないけどね). 今回はローカルファイルの読み書きをするために Electron を導入します(Elm もといブラウザでいい感じにする方法が分からなかった). 今回のコードは以下のリポジトリにあります. matsubara0507/elmdeck - GitHub Elm と Electron 結構いろんな人が挑戦してて,資料は豊富にある. ぼくは以下のリポジトリを参考にした. yasuyuky/elmtrn - GitHub アナログ時計を表示する Electron プログラムだったはず. つくる 少しずつ拡張していく. Electr
Haskell アドベントカレンダー 2017 (その3) の12日目の記事です. GHC 8.2 より新しく追加された Backpack というモジュールシステムを知ってますか? Backpack は個人的にすごい注目してる機能なんですけど,いかんせん日本語ドキュメントが皆無なんで,イロイロ調べたことを書いておこうと思います. ただ,英語雑魚勢なので勘違いしてる部分もあるかもしれないので,その時は指摘してください 人 基本的には matsubara0507/awesome-backpack リポジトリにまとめてます(コッチの方が新しいこと書いてあるかも). ちなみに,今回の記事は11月の頭に作った以下スライドをベースに書きます. 注意: 実は Backpack は2つある Backpack は何年も前から学術的に研究されていた機能で,その研究過程には少なくとも2段階ありました. Back
Haskell アドベントカレンダー (その1)の9日目の記事です. Backpack の話の予定でしたが,先にこっちが書けたのでその3のと入れ替えました. 複数とっておくとこういうことが出来るよね(いいの?). さて本題. タイトルからお察しの通り,以下の記事のオマージュです. モナドトランスフォーマー・ステップ・バイ・ステップ(Monad Transformers Step By Step) - りんごがでている いきさつ 最近アルバイトで,モナドトランスフォーマーの代わりにextensible パッケージの extensible effects でモナドスタックを作ってました. (理論的な部分は置いておいて)使い方の部分は概ね分かったので記事にしたいと思い,昔々にモナドトランスフォーマーでお世話になった上の記事を extensible effects で追ってみようと思ったわけです.
思い付きで作った,某社の18新卒アドベントカレンダーの1日目の記事です(いきなり重めの記事でゴメンナサイ). このアドベントカレンダーは,ネタを何でもありにしたかったので 〇iita では無く,ADVENTAR という Web サービスで作った. 残念なことに, ADVENTAR には 〇iita とは異なり RSS などの更新を通知機能が無い. なので,スクレイピングして更新を通知する LINE Bot を作った. 実は ADVENTAR が React.js で作られてるおかげで,スクレイピングも一筋縄ではいかず大変だったのだが,その話は後日別の記事で書く(別のアドベントカレンダーのせいで前後する...). この記事ではスクレイピングを除いた,LINE Bot まわりの話を書く. [追記] ADVENTAR にも RSS 機能があった(笑) URL の末尾に .rss を付ければ良いら
「extensible パッケージの楽しみ その1」です. 拡張可能レコードやら Extensible Effect やら,Haskell の Extensible なものを全て統一された仕組みで提供する化け物パッケージ extensible について,割とドキュメントには無い(?)ネタを書いておくシリーズ第一弾です. ぼく自身は作者ではないし,間違っているかもなのでこの記事を完全には当てにしないでください. ちなみに,作者様の有り難い日本語ドキュメントは以下の通り(古い順). ぼくのかんがえた最強の拡張可能レコード - モナドとわたしとコモナド 割とすぐに始められるextensibleチュートリアル(レコード編) - モナドとわたしとコモナド 波打たせるものの正体(エクステンシブル・タングル) - モナドとわたしとコモナド また,現在の最新バージョンは 0.4.6 です(そのバージョンで
本記事で紹介している Marp は今後メンテナンスしないと作者が明言しており,代わりに Marp Next というツールを作成しているようなので,そちらの紹介記事を書きました: Re: Marp のすゝめ - ひげメモ IGGG アドベントカレンダー 2016 14日目の記事です. 昨日は謎のC++使い castorb100 さんが mutex とおまけで Diffie-Hellman 鍵交換の話をしてくれてましたね. どちらの話も大学で聞いたよーな...(遠い目) どちらも聞くばかりで,自分で書いたことなかったなぁ,今度やってみるか. さて,今回は Marp というソフトウェアを紹介します. ちなみに,私が作ったものではないのであしからず. Marp とは Marp はマークダウン記法のファイルからスライドを生成してくれるソフトウェアです. 最近はやりの Electron で書かれている
7つの言語の処理系がインストールされた Docker コンテナを作った. お察しの通り,「7つの言語、7つの世界」の言語たちである. 言語オタク(仮)を自称してるくせに最近になってやっと読んだ. で,実行環境を Docker で用意してみようと思い立ったのである. 7つの言語 もちろん Ruby (rbenv を入れただけ) Io (v2015.11.11 を GitHubより) Prolog (1.3.0 の GNU Prolog) Scala (2.9.2, sbt もついでに) Erlang (8.3) Clojure (lein を入れた) Haskell (stack より最新のを入れられる) である. カッコの中は入れたバージョンとかの情報. 書籍に合わせても良いが,めんどくさかったので,apt-get で入るやつを適当に入れた. Docker コンテナをつくる 手作りは始めて
このページを最初にブックマークしてみませんか?
『matsubara0507.github.io』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く