タグ

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

  • jqのGo実装 gojq を作りました! ― スタックマシン型インタープリタによるイテレータセマンティクスの実装 - プログラムモグモグ

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

    jqのGo実装 gojq を作りました! ― スタックマシン型インタープリタによるイテレータセマンティクスの実装 - プログラムモグモグ
    yasuharu519
    yasuharu519 2019/08/26
    全部理解して超えてくるの本当にすごい
  • CSVファイルをSQLのクエリで集計できるqコマンドをHaskellで実装してみました! - プログラムモグモグ

    先日、Twitterでqコマンドが話題になっていました。 github.com スターが3000を超えていてすごいですね。2014年から開発されているツールで、Pythonで書かれています。 これはGoで実装してみたいなーと思っていたところ、mattnさんが素早く実装されていました。 mattn.kaoriya.net取られたと思ったものの、よく読むとまだ標準入力しか対応していないようです。 いったいどういう仕組みなのか、何の実装が難しいところなのか、qコマンドが嬉しい場面はどういうケースなのか、自分も知りたくなったので1から実装してみました。 私が一番素早く書ける言語ということでHaskellを選びました。 qhs qコマンドのHaskell実装、ということでqhsと名づけました。 github.com stackが入っていればインストールは簡単です。 $ git clone ht

    CSVファイルをSQLのクエリで集計できるqコマンドをHaskellで実装してみました! - プログラムモグモグ
  • 端末の上で動かして遊べる!迷路コマンドをGo言語で書きました! - プログラムモグモグ

    迷路で遊びたくなったので作りました。Goで書いています。 github.com Homebrewをお使いの方は、次のコマンドでインストールしてください。 brew install itchyny/tap/maze そうでない方は、次のコマンドでビルドしてインストールするか、 go get github.com/itchyny/maze/cmd/maze あるいは https://github.com/itchyny/maze/releases よりバイナリーを落としてご利用ください。 mazeコマンドは、ランダムな迷路を出力します。 maze --interactive引数を渡すと、カーソルを動かして迷路を遊ぶことができます。 maze --interactive --format colorを渡すと迷路が綺麗に表示されます。--widthや--heightなどで迷路のサイズを制御すること

    端末の上で動かして遊べる!迷路コマンドをGo言語で書きました! - プログラムモグモグ
  • 最近の技術トピック・他近況報告 - プログラムモグモグ

    こんにちは。id:itchynyです。 自分の中で、ブログに書く価値のある内容どうかという基準がインフレしてしまって、最近は全くブログを書けていませんでした。 業務の中で学んだこと、家に帰ってから書いたコード、その他技術的に考えていることなど、ブログに書ける内容というのは色々とありますが、どれもこれも「このレベルの理解度では書いてもつまらないだろうなぁ」「技術的にはそんなに凄くないしなぁ」「まぁ当たり前のことか」みたいに考えてしまって、書けなくなってしまっていました。 ブログに掛けるコスト、その分野における記事のレベル、そして一般的なエンジニアに対するインパクトなど、あれもこれもと考えこんでしまってよくありませんでした。 実際、pdfの記事は一か月くらいは掛けていて自分が期待した以上のインパクトを与えることができたので、その記事を基準に物事を考えてしまってなにも書けなくなっていたのです。

    最近の技術トピック・他近況報告 - プログラムモグモグ
  • Vimの<C-f>でスクロールしていくと最後一行になってしまうのを直す設定 - プログラムモグモグ

    Vimの<C-f>を押していくと、最後に一行だけになってしまいます。 おっと行き過ぎたと言ってわざわざ戻っている方も多いのではないでしょうか。 この世の中にはたくさんスクロールのUIがありますが、普通はこうなっていません。 ウェブブラウザーのスクロールも、PDFビューワのスクロールも、lessコマンドのスクロールも、ページの一番下が画面の下に見えたら止まってくれます。 この挙動は、<C-f>を次のようにマッピングすると直ります。 noremap <expr> <C-f> max([winheight(0) - 2, 1]) . "\<C-d>" . (line('.') > line('$') - winheight(0) ? 'L' : 'H') バッファーの最後の行がウィンドウの一番下になったらきちんと止まってくれます。 <C-d>はウィンドウをスクリーンの半分スクロールするマッピング

    Vimの<C-f>でスクロールしていくと最後一行になってしまうのを直す設定 - プログラムモグモグ
  • Haskellで無限個の無限リストをソートされた形で結合する - プログラムモグモグ

    CodeforcesやProject Eulerの問題には、無限リストをうまく使うと綺麗に解くことができる問題がたくさんあります。 数列の性質から探索範囲の上界を決めて解を探索することが多いのですが、きちんとした根拠を持って上界を決めることができることは少なく、余裕を持って十分に広い範囲で計算して解を求める解法がよく取られます。 Haskellの特徴である遅延評価とその洗練された糖衣構文を用いると、無限リストを簡単に扱うことができます。 上界を適当に定める解法よりも、より宣言的で美しく、時に効率的なコードで同じ解を得ることができます。 しかし、無限リストをきちんと、それも無限個の無限リストをきちんと扱うとなると、意外と苦労します。 この記事では、無限個の無限リストをソートされた形で結合する方法について説明します。 一般的な無限リストではなく、条件はかなり絞っていてます (そうでないと原理的

    Haskellで無限個の無限リストをソートされた形で結合する - プログラムモグモグ
  • 2015年を振り返って - プログラムモグモグ

    今年は働き始めた年でした。環境が大きく変わりました。新しい環境は毎日刺激が多く、とても楽しく過ごしています。 入社してちょうど三か月した時、自分にとってとても大きなことが起こりました。ある仕事を与えられたのですが、その解決したい問題に対するアプローチを自ら考えて、自発的に編み出した解決法によって問題を解決したのです。入社してまだ間もないひよっこのような自分が、自らの能力を活かしてプロダクトに貢献できたことで、とても自信がつきましたし、この会社で自分が役に立っていけそうという安心感もありました。この成果によって社内の人からも評価していただき、とても嬉しく思いました。 今年はブログは28記事書きました。特に以下の記事は、多くの方々から反応をいただきとても感謝しています。 itchyny.hatenablog.com itchyny.hatenablog.com itchyny.hatenabl

    2015年を振り返って - プログラムモグモグ
  • 汎用的なコードの依存関係の抽出ツール rexdep を作りました! ― 正規表現で依存関係を大雑把に抽出しよう! - プログラムモグモグ

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

    汎用的なコードの依存関係の抽出ツール rexdep を作りました! ― 正規表現で依存関係を大雑把に抽出しよう! - プログラムモグモグ
    yasuharu519
    yasuharu519 2015/11/20
    便利っぽい
  • Vim用のHaskellインデントプラグインvim-haskell-indentを作りました - プログラムモグモグ

    Haskellはインデントが意味を持つ言語です。コーディングするときには、エディターがいかに心地よく空気を読んでインデントを入れてくれるかが重要になってきます。HaskellのVim用インデントプラグインはこれまでいくつかありましたが、それらはどれも機能が少なすぎて、普段からHaskellを書く私にとっては苛々するものばかりでした。とても心地よいインデントをサポートしてくれるインデントプラグインはありませんでした。 とにかくHaskellの最強のインデントプラグインが欲しいということで、作りました。 VimでHaskellを書いているよという方は、ぜひインストールしてお使いください。 今のところ以下のような構文に対応しています。 データ型のインデント derivingの後はインデントをやめる guardのインデント otherwiseの後はインデントをやめる whereのインデント mod

    Vim用のHaskellインデントプラグインvim-haskell-indentを作りました - プログラムモグモグ
  • 詳細PDF入門 ー 実装して学ぼう!PDFファイルの構造とその書き方読み方 - プログラムモグモグ

    PDFのファイル構造を理解すると、テキストエディタでも直接PDFファイルを作ることができるようになります。このエントリーではPDFファイルの基礎要素を説明し、簡単なPDFファイルを例にしてファイル構造を説明します。更に、テキストを渡すとPDFファイルを吐いてくれる簡単なプログラムや、PDFを読み込んで簡単な解析をするプログラムを書いてみます。 目次 目次 まえがき オブジェクト 間接参照 ファイル構造 Hello, world! ヘッダ トレーラ 相互参照テーブル PDFを生成するプログラム 日語の扱い方 日語を含むPDFを生成するプログラム グラフィックス PDFを読むプログラム あとがき まえがき 1990年代前半、アドビシステムズは、どのプラットフォームやデバイスでも文書を確実に表示・共有できることを目的としてPDFファイルフォーマットを開発しました。 PDFの表示ソフト

    詳細PDF入門 ー 実装して学ぼう!PDFファイルの構造とその書き方読み方 - プログラムモグモグ
    yasuharu519
    yasuharu519 2015/09/17
    すげえ...
  • YAPC::Asia Tokyo 2015に参加しました - プログラムモグモグ

    YAPC::Asia Tokyoに初めて参加しました。これまで存在自体はなんとなく知っていた気がしますが、あまり自分がweb業界に入ることは想像していなかったので、関心がありませんでした。いざ参加してみますと、YAPC::Asia Tokyoは想像していたよりも規模が大きくて、人々に活気や笑顔があふれていて、高度な議論が交わされていました。 大ホールの発表では、Larry Wallさん、まつもとゆきひろさん、Brad Fitzpatrickさんといった著名人を生で見ることが出来て、まるでアーティストのライブに来ている気分でした。一方で、各会議室での発表は、業務経験に基づいたコアな技術の共有や活発な議論を目の当たりにし、月並ですがいつかはあのように高いプレゼンスを発揮して技術の発信を行えるような立場になりたいと思いました。 Larry Wallさんの発表では、指輪物語に例えてPerl6のお話

    YAPC::Asia Tokyo 2015に参加しました - プログラムモグモグ
  • GitHubのヘッダーを改善する! Google Chrome用拡張 GitHub Better Headerを作りました - プログラムモグモグ

    最近、GitHubのヘッダーのデザインに変更があり、いくつかのリンクの位置が移動しました。Pull requestやIssuesのリンクはなかなか便利で、これはいい改善なのですが、元々あったリンクでよくクリックしていたものがドロップダウンの中に入ってしまい、使い勝手が悪くなってしまいました。 自分のページ (github.com/ユーザー名) へのリンクがメニューの中に入り、クリックしにくくなった。このページは頻繁に見ていた。 Explore がメニューの中に入り、クリックしにくくなった。わりと見ていた。 これをいい感じのヘッダーにするGoogle Chrome拡張を作りました。 GitHub Better Header めちゃくちゃ便利なので、ぜひ使ってみてください。Web Storeには上げていないので(アイコン作るのがめんどくさすぎて…)、git cloneして直接拡張ページからイン

    GitHubのヘッダーを改善する! Google Chrome用拡張 GitHub Better Headerを作りました - プログラムモグモグ
  • 個人的に便利だと思うVimの基本設定のランキングを発表します! - プログラムモグモグ

    この記事は Vim Advent Calendar 2014 の5日目の記事です。諸事情によりVim Advent Calendar 2014で穴が空いてしまった5日の記事を、遅ればせながら代打で投稿させていただきます。この投稿を以って、 Vim Advent Calendar 2014 は全ての日程が埋まる事になります。完走おめでとうございます。皆様、お疲れ様でした。 2014年もあと僅かとなり、年末の忙しさに追われている方もおられることでしょう。土日は家の大掃除という方も多いのではないでしょうか。 大掃除…大掃除と言えば、vimrcです!!! あなたはvimrcはたくさん書いていますか? Vimをもっと便利にしたくありませんか? 包丁は砥ぐことにより長く使えるのと同様に、普段あなたが使っているvimrcも定期的に見なおすことで、より愛着がわき、更にVimに対する理解も深まります。あなた

  • 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)が神な件 - プログラムモグモグ
    yasuharu519
    yasuharu519 2014/11/21
    suffix alias
  • 1