タグ

ブックマーク / itchyny.hatenablog.com (12)

  • HomebrewのインストーラーをRubyからBashに書き直しました! - プログラムモグモグ

    みなさんはHomebrewをお使いでしょうか。macOSをお使いの多くの開発者が使っていると思います。 HomebrewのインストーラーはRubyで書かれており、次のコマンドでインストールするようになっていました。 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" HomebrewがRubyに依存していることは良いのですが (formulaの書きやすさはRubyならでは)、インストーラーの話になると事情が変わってきます。HomebrewのインストールコマンドはmacOSの工場出荷状態でも動く必要があります。こういうものにRubyを使っているのはリスクがあります。 将来的にmacOSデフォルトにRubyPythonが含まれなくなる (参考リンク

    HomebrewのインストーラーをRubyからBashに書き直しました! - プログラムモグモグ
    aereal
    aereal 2020/03/03
    すご
  • 開発環境構築スクリプトのCIをGitHub Actionsで回す - プログラムモグモグ

    小ネタですが、開発環境の構築はスクリプト化して、CIを回そうという話です。 開発環境を構築することは年にそう何回もあるわけではないですが、スクリプトを一発叩いて必要なツールが揃うようにしておくと便利です。私は素朴にシェルスクリプトで書いています。好きな言語で書けばいいと思いますが、macOSは将来的にRubyPythonといったスクリプト言語を排除しようとしていて、不安ですね。Ansibleみたいなのを使ってもいいと思います。私はちょっと苦手で… あくまで私用のスクリプトなので使わないでください。 このスクリプトを叩いてしまえば、iTerm2やVim、tmux、自分のdotfilesの配置と言語処理系のインストール、Google ChromeSlackのインストールを行ってくれます。モダンなプロジェクトならdockerさえあればいいんでしょうが、なかなかそういうわけにはいかないですよね

    開発環境構築スクリプトのCIをGitHub Actionsで回す - プログラムモグモグ
    aereal
    aereal 2019/11/18
    賢い
  • zshの標準エラー出力の色を赤くする - プログラムモグモグ

    [追記]以下の方法は良くないようです。必ず、このエントリー最後の「stderredを使う」を参照してください[/追記] 最近stderrを赤くするように設定したら、コマンドの出力がかなり見やすくなりました。 設定はこんな感じに書いてます。 zmodload zsh/terminfo zsh/system color_stderr() { while sysread std_err_color; do syswrite -o 2 "${fg_bold[red]}${std_err_color}${terminfo[sgr0]}" done } exec 2> >(color_stderr) fg_bold[red] のところを fg[red] とかbg_bold[red] とかするとスタイルを変更できます。 古いzshでは動かないらしいので、古い環境も気にしたい場合は is-at-least

    zshの標準エラー出力の色を赤くする - プログラムモグモグ
    aereal
    aereal 2017/12/25
  • Go言語のHTTPリクエストのレスポンスボディーとEOF - プログラムモグモグ

    Reader interface の Read 関数は、どのタイミングで io.EOF を返すのでしょうか。 まずは strings.Reader で見てみましょう。 package main import ( "fmt" "strings" ) func main() { r := strings.NewReader("example\n") for { var b [1]byte n, err := r.Read(b[:]) fmt.Printf("%d %q %v\n", n, b, err) if err != nil { break } } } 結果 1 "e" <nil> 1 "x" <nil> 1 "a" <nil> 1 "m" <nil> 1 "p" <nil> 1 "l" <nil> 1 "e" <nil> 1 "\n" <nil> 0 "\x00" EOF Readの結

    Go言語のHTTPリクエストのレスポンスボディーとEOF - プログラムモグモグ
    aereal
    aereal 2017/12/12
  • 二週間で簡単なインタープリタ言語を実装してみた (日記) - プログラムモグモグ

    私は昔から言語処理系に興味があり、自分で言語を作ることを夢見てきました。 しかし、いざ言語を実装しようと思って言語処理系に関するを読んでも何から手を付けていいか分からず、アセンブラもまともに読めないまま、数年が経ってしまいました。 大学時代は情報系ではなかったため、コンパイラの実験がある情報系の学科のカリキュラムを羨ましく思い、情報系の授業の教科書を手にとって見ても読む気が起きず、自分に作れるのは所詮、構文木をちょこっといじって変換するレベルのもの (例えばsjspなど) にとどまっていました。 そんな中、去年のRebuild.fmで、とても感銘を受けた回がありました。 LLVMのlinkerであるLLDを開発されているrui314さんの回です。 rebuild.fm セルフコンパイルできるC言語のコンパイラを実装するという話のなかで、インクリメンタルに開発する重要性について話をされてい

    二週間で簡単なインタープリタ言語を実装してみた (日記) - プログラムモグモグ
    aereal
    aereal 2017/01/23
  • Vimのカラースキーム/シンタックスファイルは自作しよう - プログラムモグモグ

    私は, プラグインに同包されているシンタックスファイルが気に喰わないことが度々あった. 例えばunite.vimの選択色とvimfilerの選択色が異なったり, unite-lineの行番号がLineNrで色付けされてなかったり, vimshellでls -lの時間のあたりの色付けが滅茶苦茶だったり, vimfilerの一番上の現在のパスの色と, vimshellのpromptのパスの色が異なったりするわけだ. (Shougoさんばかりごめんなさい...) 思い返せば, vimshellのls -lの色(特に時間の辺り)が気に喰わないのがシンタックスファイルを書き始めたきっかけだった. そもそも, 自分の身に合うカラースキームを見つけるのは骨が折れる. 或いは, スクリーンショットは良さげでも, 使ってみたらなんだか違う, みたいな感想を持つことも多い. CUIのことを考えていないものもあ

    Vimのカラースキーム/シンタックスファイルは自作しよう - プログラムモグモグ
    aereal
    aereal 2016/02/27
  • Haskellで書かれたおもしろいFizzBuzz ― Haskellで読めないコードに遭遇した時に解読する方法を徹底解説! - プログラムモグモグ

    Haskellには抽象的な高階関数や演算子がいくつもあり、たまにそれらを巧妙に用いたコードがでてきて感心することがあります。 他の人が書いたHaskellのコードを読んでいると、なかなか面白いものと遭遇したりします。 巧妙に書かれたコードを解読していくと、実は型クラスのinstanceをうまく組み合わせて使っていて、とてもよい教材になることがあります。 実際にアプリケーションコードを書いていてここまで技巧的なコードを書くわけではありません。しかし、こういうコードを読み解くのは型クラスのいい練習になりますし、それまで知らなかったinstanceと遭遇したりしたときは、とても勉強になるのです。 このエントリーでは、とても技巧的なFizzBuzzを紹介し、それを読み解いていく方法を紹介します。 Haskellの初心者向けに、どういうふうに関数や型を調べて言ったらいいかを丁寧に書いています。 Ha

    Haskellで書かれたおもしろいFizzBuzz ― Haskellで読めないコードに遭遇した時に解読する方法を徹底解説! - プログラムモグモグ
    aereal
    aereal 2016/01/01
  • Haskellでハマった - runhaskellを使うとリストがメモ化されない?あるいはモジュールにすると-O3でもリストがメモ化されない? - プログラムモグモグ

    Haskellを書いていて、久しぶりに言語自体について不可解な挙動にぶち当たった。普段Haskellを書いていて、言語について「なんだこれ」と思うことはまずない。ところが、今回の疑問点は自分の理解を遥かに超える内容だった。最初はTwitterで質問してみたのだが、誰にも答えて頂けなかったので、stackoverflowで質問した。すると、見事に解決しまったので紹介する。 質問が長い。でも丁寧に書いたつもり。下の方に和訳も用意した。英語を読むのが面倒な人はそっちを読んでほしい。(自分が書いた英語を和訳するとか意味が分からんね。) http://stackoverflow.com/questions/25958007/ Why ghc changes the evaluation way due to the optimisation flag? Hello, I've encountered

    Haskellでハマった - runhaskellを使うとリストがメモ化されない?あるいはモジュールにすると-O3でもリストがメモ化されない? - プログラムモグモグ
    aereal
    aereal 2015/01/07
  • lightline.vim作りました - プラグインの直交性について - プログラムモグモグ

    lightline.vimというVimプラグインを作りました。statuslineをなんかかっこよくしてくれるやつです。 https://github.com/itchyny/lightline.vim からインストールできます。 デフォルト (powerlineと同じ配色) wombat solarized landscape どうしてこれを作ったのかということを話すには、vim-powerlineとの出会いまで遡らなくてはなりません。 vim-powerlineとの出会い vim-powerlineとの出会いは約一年前になります。それ以前から気になってはいましたが、フォントにパッチを当てるのが面倒でためらっていました。しかし、重い腰を上げてインストールしてみました。 vim-powerlineがすごい - プログラムモグモグ インストールしてすぐ感じたことは、配色が気に入らないことでし

    lightline.vim作りました - プラグインの直交性について - プログラムモグモグ
    aereal
    aereal 2013/08/25
  • 代数的データ型と準同型写像 - プログラムモグモグ

    最近考えていることを述べます. 代数的構造と準同型写像に関する考察です. 特に必要な知識は無いつもりですが, Haskellのコードを読めると嬉しいです. import Prelude hiding 以下のものを隠しておいて下さい. import Prelude hiding ((+), (++), length, True, False, Bool) 自然数とリストの定義 まず, 自然数(非負整数)とリストの定義からスタートします. data Nat = Zero | Succ Nat deriving (Show, Eq) 自然数はこんな感じです. ペアノの公理ですね. ここでは, 表示できるようにShowクラスのインスタンスとして自動導出しています. 更に, 同値であるか調べられる, という意味で, Eqクラスの自動導出もしています. ここで注意していただきたいのは, 名前が重要では

    代数的データ型と準同型写像 - プログラムモグモグ
    aereal
    aereal 2012/01/01
  • createObjectURLがすごい件 - プログラムモグモグ

    最近またLocal Player (Chrome Player)を実装しなおしています. 一応説明しておくと, Local Playerは, 完全にローカルで動作する音楽プレイヤーです. シンプルさを求め(実装がめんどくさいだけ), 操作しやすく(これは大事), 良い感じのプレイヤーです. 半年前に, ソースコードがスパゲッティになって, 開発を中断していましたが, 最近また書きなおし始めたのです. 音楽プレイヤーをブラウザー上で実装するのには, 音楽ファイルをJavaScriptで読み込まなければなりません. そこでHTML5ですよ!!! <audio src="url/to/musicfile.mp3" type="audio/mp3" /> みたいな感じで, 音楽を再生できます. 詳細は他のページに譲ります. さて, 音楽ファイルを再生するには, ローカルファイルからurlをaudi

    createObjectURLがすごい件 - プログラムモグモグ
  • JavaScriptで/.*/()とは何か. - プログラムモグモグ

    最初に, 皆さんにブラウザーのコンソールで/.*/()を試していただきたい. そして, 他のタブとか色々試して欲しい. どんな文字が返ってきましたか? 多分一意じゃないはず. バラバラ. ワケが分からないよ. そこで, このエントリーを思い出した. (前にも見たことあった...) typeof演算子から学ぶJavaScriptのデータ型の概念と関係する考察のまとめ(id:sandai) 「というわけでデフォルトでexecメソッドが呼び出されるようになっています。」 そうなのか...execなのか. ECMA-262のどこに書いてるのかは分からないけど(←あ...) まあいいや. /.*/.exec()ってなることは分かった. ....function is not a functionの解説はこのエントリーに任せるとして... .execに引数がない場合どうなるのか? 挙動から見てみて明ら

    JavaScriptで/.*/()とは何か. - プログラムモグモグ
    aereal
    aereal 2011/03/24
    ひょえー
  • 1