タグ

ブックマーク / 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に書き直しました! - プログラムモグモグ
    mitukiii
    mitukiii 2020/03/03
  • 開発環境構築スクリプトのCIをGitHub Actionsで回す - プログラムモグモグ

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

    開発環境構築スクリプトのCIをGitHub Actionsで回す - プログラムモグモグ
    mitukiii
    mitukiii 2019/11/18
  • jqのGo実装 gojq を作りました! ― スタックマシン型インタープリタによるイテレータセマンティクスの実装 - プログラムモグモグ

    jqはとても便利なコマンドです。 JSONを返すAPIを実装するときや、SaaSのAPIから特定の情報を抜き出してシェル変数に代入するときなど、web開発や運用には欠かせないツールとなっています。 しかし、私にとってjqのクエリを一発で書くのは容易ではなく、思い通りの出力が得られないことがよくありました。 難しいエラーメッセージに悩まされて、jqで書くのを諦めて別の言語で書き直すこともありました。 jqの十八番と思える場面で使いこなせないのは、なかなか悔しいものがあります。 ツールを使うのが難しいなら、同じものを作ってしまえばよいのです。 jqの全ての機能を実装する jqを言語としてきちんと書けるようになる jqを完全に理解する jqの全ての機能を自分で実装してしまえば、jqがどういうものか、クエリがどのように処理されるのか、詳しくなれるはずです。 jqを得意な言語と言えるようになって、ク

    jqのGo実装 gojq を作りました! ― スタックマシン型インタープリタによるイテレータセマンティクスの実装 - プログラムモグモグ
    mitukiii
    mitukiii 2019/08/26
  • コマンドラインがさらに便利になるfillinコマンドを作りました! - プログラムモグモグ

    fillinというコマンドラインツールを作成しました。 コマンドの一部を変数化して、別の履歴に保存しておけるツールです。 ステージング環境と番環境のように、同じコマンドで複数の環境を切り替えるのに便利です。 zshの (エッセンシャルソフトウェアガイドブック) 作者:広瀬 雄二発売日: 2009/06/17メディア: 単行(ソフトカバー) どうして作ったの コマンド履歴って便利ですよね。 私はよくコマンド履歴からコマンドを選んで実行しています。 シェルに付属しているデフォルトの履歴を使っている方もおられるでしょうし、fzfやpecoのようなインタラクティブな絞り込みを行なっている方もいるでしょう。 私が一番困っていたのが、認証キーの扱いです。 webアプリを作っていてcurlで素早く確認するときに、認証キーやアクセストークンを打つことがあります。 アクセストークンのようなランダムな英

    コマンドラインがさらに便利になるfillinコマンドを作りました! - プログラムモグモグ
    mitukiii
    mitukiii 2017/06/12
  • 二週間で簡単なインタープリタ言語を実装してみた (日記) - プログラムモグモグ

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

    二週間で簡単なインタープリタ言語を実装してみた (日記) - プログラムモグモグ
    mitukiii
    mitukiii 2017/01/23
  • 珍しいSHA1ハッシュを追い求めて - プログラムモグモグ

    「SHA1ハッシュってあるだろう?」 放課後、いつものように情報処理室に行くと、高山先輩が嬉しそうな顔でそう言った。 「ええ、SHA1、ありますね」 「SHA1って何桁か覚えているかい?」 「えっと…」 一年下の後輩、岡村が口を開いた。 「50桁くらいはありましたっけ…?」 先輩はパソコンに向かって何かを打ちはじめた。 現在、情報部の部員は三人しかいない。部長の高山先輩と、二年の自分と、後輩の岡村だ。いや、正確に言うと、先輩の学年にはもう少しいたのだが、もうほとんど部室に来ることはなくなってしまった。無理もない、この季節になると先輩たちは受験勉強で忙しくなる。 「例えば、こういうふうに… 適当なSHA1の長さを…」 echo -n | openssl sha1 | awk '{print length}' 部長だけは今も部活に来てこうやって色々なことを教えてくれている。人曰く、普通に勉強

    珍しいSHA1ハッシュを追い求めて - プログラムモグモグ
    mitukiii
    mitukiii 2016/12/05
  • Haskellで書かれたおもしろいFizzBuzz ― Haskellで読めないコードに遭遇した時に解読する方法を徹底解説! - プログラムモグモグ

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

    Haskellで書かれたおもしろいFizzBuzz ― Haskellで読めないコードに遭遇した時に解読する方法を徹底解説! - プログラムモグモグ
    mitukiii
    mitukiii 2016/01/07
  • 汎用的なコードの依存関係の抽出ツール rexdep を作りました! ― 正規表現で依存関係を大雑把に抽出しよう! - プログラムモグモグ

    あらすじ ソフトウェアの中の依存関係について 正規表現で抽出できることとその限界 コードの依存関係を抽出するツール rexdep を作りました ソフトウェアの構造を概観するには あなたは、大きなソフトウェアを目にした時、何をしますか? ファイルが何十、何百もある時、どこから読みますか? ソフトウェアが巨大になると、そのコードの構造を把握するのは難しくなります。 特にプロジェクトに入りたての人にとって巨大なコードベースを一目で理解することは難しく、細かなタスクをこなしていく中で徐々に「どこに何が書いてあるか」を理解していくしかありません。 ソフトウェアによってはモデルとコントローラ、データベースとビューと言った具合にコードが分かれており、これくらいの分類はディレクトリ名を見れば理解できるかもしれません。 しかしそのようなざっくりとしたコードの分類が分かったところで、ソフトウェアの構造を理解し

    汎用的なコードの依存関係の抽出ツール rexdep を作りました! ― 正規表現で依存関係を大雑把に抽出しよう! - プログラムモグモグ
    mitukiii
    mitukiii 2015/11/19
  • Makefileで遊ぼう 〜 階乗, フィボナッチ数, Brainfuck処理系まで - プログラムモグモグ

    しばしば見落とされがちですが, Makefileは立派な(=チューリング完全な)プログラミング言語です. GNU Make, 3rd Edition([1], 以降makeと記します)をパラパラしながら読み終わりました. 最後の最後で, Makefileの中で「数字の計算をする方法」が書いてあり, あ, こりゃ, 僕がやるしか無いな, と思ってこのエントリーを書きました. GNU Make 第3版 作者:Robert Mecklenburg発売日: 2005/12/01メディア: 大型事項 Makefileの基事項です. と言っても, 暗黙のルールとかマニアックな特殊ターゲットとかは今の僕にはあまり興味が無いです. まず, Makefileをビシビシ書くにあたって, デバッグのために簡単に出力する方法を知って置かなければなりません. warning関数を使います. make1

    Makefileで遊ぼう 〜 階乗, フィボナッチ数, Brainfuck処理系まで - プログラムモグモグ
    mitukiii
    mitukiii 2015/06/04
  • zshのalias -s (suffix alias)が神な件 - プログラムモグモグ

    まず, 他のシェルをお使いの人にはごめんなさい. aliasコマンドの-sが使えるのは zsh 4.2.x- で, 他のシェルでは実装されていないと思います. あと, もう既に alias -s 知ってるよーって人は読まなくていいです. alias -s って何? 打ったコマンドの後ろ(suffix)を見て, 適当に宜しくやってくれるやつです. 次の例を見て下さい. ~$ echo "print ('hello, world')" > hello.py ~$ python hello.py hello, world ~$ alias -s py=python py=python ~$ ./hello.py hello, world ~$ Pythonのコードは python hello.py で実行出来ますが, お尻が py なら python を使います, とaliasしておけば, ./

    zshのalias -s (suffix alias)が神な件 - プログラムモグモグ
    mitukiii
    mitukiii 2013/02/28
    神事例とのこと
  • createObjectURLがすごい件 - プログラムモグモグ

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

    createObjectURLがすごい件 - プログラムモグモグ
  • JavaScriptで配列の結合を"+"で書きたい. - プログラムモグモグ

    やりたいことはタイトルのとおり. 要はオーバーロードしたいお... ※※※※ こういう願いは既出であること間違いないっ, ※※※※ よってここに書いてること, あるいは ※※※※ さらにエレガントな事がどっかに書かれてるかもしれないっ!!! とりあえずECMA-262を読んでみる. [p.74] 11.6.1 The Addition operator(+) 読むのがめんどくさいが, 要はReturn the String that hogehogeか, ToNumber(左辺)とToNumber(右辺)の和を返すことしかできない. オーバーロードとかできねーーーー (配列を返せない) んじゃ, 汚いけど, String介してやればいいか...??? > Array.prototype.toString = function(){return this.join(',') + ','} [

    JavaScriptで配列の結合を"+"で書きたい. - プログラムモグモグ
    mitukiii
    mitukiii 2011/03/17
    メソッド作るしかないか。
  • 1