タグ

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

  • バイナリエディタを作りました! - プログラムモグモグ

    バイナリエディタを作りました。 インストールはHomebrew brew install itchyny/tap/bed または以下のコマンドでできます。 go get github.com/itchyny/bed/cmd/bed なぜ作ったのか 私は昔からファイルフォーマットに興味があり、画像ファイルやPDFファイルのフォーマットを調べるのが好きでした。 最近も圧縮ファイルのフォーマットを趣味で調べたりしています。 コンパイラ技術にも興味があり、ゆくゆくは実行ファイルを生成したりしたいなという思いもあります。 バイナリファイルをエディットするにはバイナリエディタが必要となるわけですが、自分の手に馴染むUIを持つエディタがありませんでした。 私は実はVimというエディタが好きなので、Vimのようなインターフェースを持ち、ターミナルの中で動くエディタを探したのですが、なかなかありません。 b

    バイナリエディタを作りました! - プログラムモグモグ
    labunix
    labunix 2018/04/10
  • Go言語のsyscall.Sysctlは最後のNULを落とす - プログラムモグモグ

    カーネルのパラメータを引いたり設定したりする時に便利なのが sysctl コマンドです。 $ sysctl kern.ostype kern.ostype: Darwin このコマンドのシステムコールをGo言語から叩いて、OSの種類を引いてみましょう。 func main() { ret, _ := syscall.Sysctl("kern.ostype") fmt.Printf("%s\n", ret) } Darwin 問題ないですね。 数字を返すものを叩いてみましょう。 $ sysctl machdep.cpu.feature_bits machdep.cpu.feature_bits: 9221959987971750911 func main() { ret, _ := syscall.Sysctl("machdep.cpu.feature_bits") val := *(*ui

    Go言語のsyscall.Sysctlは最後のNULを落とす - プログラムモグモグ
    labunix
    labunix 2017/12/15
  • ptraceシステムコール入門 ― プロセスの出力を覗き見してみよう! - プログラムモグモグ

    他のプロセスを中断せずに、その出力をミラーリングして新しくパイプで繋ぐ、そんなことはできるのでしょうか。 straceやgdbといったコマンドは一体どういう仕組みで動いているのでしょうか。 ptraceシステムコールを使い、プロセスが呼ぶシステムコールを調べて出力を覗き見するコマンドを実装してみたいと思います。 ptraceシステムコール Linuxを触っていると、いかにプロセスを組み合わせるか、組み合わせる方法をどれだけ知っているかが重要になってきます。 パイプやリダイレクトを使ってプロセスの出力結果を制御したり、コードの中からコマンドを実行して、終了ステータスを取得したりします。 プロセスツリーやプロセスグループを理解し、シグナルやnohupコマンドを使ったりします。 プロセスの扱いに慣れると疑問に持つのがstraceやgdbの仕組みです。 プロセスの実行しているシステムコールを出力し

    ptraceシステムコール入門 ― プロセスの出力を覗き見してみよう! - プログラムモグモグ
    labunix
    labunix 2017/07/31
  • コマンドラインがさらに便利になるfillinコマンドを作りました! - プログラムモグモグ

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

    コマンドラインがさらに便利になるfillinコマンドを作りました! - プログラムモグモグ
    labunix
    labunix 2017/06/13
  • 珍しいSHA1ハッシュを追い求めて - プログラムモグモグ

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

    珍しいSHA1ハッシュを追い求めて - プログラムモグモグ
    labunix
    labunix 2016/12/04
  • Vim 8.0 リリース! - プログラムモグモグ

    Vim 8.0 released! Vim 8.0が先ほどリリースされました。10年ぶりのVimのメジャーバージョンアップです。 Vimのバージョンをcronで毎日上げ続け、最新のパッチを確認し続ける日々を送ってきました。そして、今日も夜11時のcronでバージョンが上がりました。新しいメジャーバージョン、8.0でした。 ここ一年はVimにとって様々な重要な機能が入りました。JSONエンコーダーとパーサー、パッケージ機構、channelとjob、タイマー、ラムダ式など、プラグイン製作者にとって大事な機能ばかりです。今後、より高度なプラグインがでてくることでしょう。これらの機能に対する日人の貢献は素晴らしいものです。 リポジトリをGoogle codeからGithubに移動するという重要な決定も行われました。この決定の過程にも、vim-jpの皆さんが深く関わっています。私は傍から応援するこ

    Vim 8.0 リリース! - プログラムモグモグ
    labunix
    labunix 2016/09/14
  • 汎用的なコードの依存関係の抽出ツール rexdep を作りました! ― 正規表現で依存関係を大雑把に抽出しよう! - プログラムモグモグ

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

    汎用的なコードの依存関係の抽出ツール rexdep を作りました! ― 正規表現で依存関係を大雑把に抽出しよう! - プログラムモグモグ
    labunix
    labunix 2015/11/19
  • 詳細PDF入門 ー 実装して学ぼう!PDFファイルの構造とその書き方読み方 - プログラムモグモグ

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

    詳細PDF入門 ー 実装して学ぼう!PDFファイルの構造とその書き方読み方 - プログラムモグモグ
    labunix
    labunix 2015/09/17
  • シンプルでかつ最高のJavaScriptプロファイラ sjsp を作りました! ― Webアプリケーションが複雑化する中でプロファイラに求められるものとは何か - プログラムモグモグ

    あらすじ Web技術が複雑になる中で、JavaScriptのプロファイリングをとる方法とは。 プロファイリングを取るためのコードを手で書いてみましょう。 とてもシンプルで、かつ最高のJavaScriptプロファイラ sjsp を作りました。 当にあった怖い話 上司 「とにかくJavaScriptのコードを速くしてくれ」 私 「分かりました、速くします」 (次の日) 私 「いいプロファイラがないなら作ればいいじゃない」 同じチームの人 「えっ?」 私 「最高のJavaScriptプロファイラ作ったよ」 同じチームの人 「「えっえっ???」」 私 「早速使ってみたらこことここが遅いって分かったよ」 同じチームの人 「「「この子は一体…」」」 JavaScriptのプロファイリングの難しさ 近年、Webブラウザーの処理速度は著しく向上し、その可用性の高さから、アプリケーションのプラットフォーム

    シンプルでかつ最高のJavaScriptプロファイラ sjsp を作りました! ― Webアプリケーションが複雑化する中でプロファイラに求められるものとは何か - プログラムモグモグ
    labunix
    labunix 2015/07/01
  • 個人的に便利だと思うVimの基本設定のランキングを発表します! - プログラムモグモグ

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

    labunix
    labunix 2014/12/26
  • 円周率を1億桁計算しました! ― その試行錯誤の詳しい経緯と結果 ー - プログラムモグモグ

    春休み暇ですし, 円周率を計算してみることにしました. エントリーが長くなりましたがお付き合いください. はじめにお断り 私は円周率計算に関しては全くの素人です. もっとスケーラブルなコードの書き方があると思いますので, あまりここばかりあてにしないでください. 時間がないせっかちな人へ コード書く試行錯誤をだらだら書いたので, 割とエントリーが長くなっちゃってます. 結論をここに書きます. 当初の目標は円周率1000万桁を計算することでした. 結局のところは, 後に上げる参考文献を実装しただけです. 計算アルゴリズムは, Chudnovskyアルゴリズムです. 最近の円周率計算の記録はこのアルゴリズムに基づいています. Gauss AGMというアルゴリズムを用いている他のソフトウェアと実行時間を比較することで, Chudnovskyアルゴリズムがいかに速いかを示しました. 円周率の小数点

    円周率を1億桁計算しました! ― その試行錯誤の詳しい経緯と結果 ー - プログラムモグモグ
    labunix
    labunix 2013/05/20
  • Vim scriptを取り巻く問題について - プログラムモグモグ

    Vimの設定ファイル.vimrc, そしてVimのプラグインには, スクリプト言語Vim scriptが使用されます. 昨今の巨大なプラグイン製作者によるこの言語への不満が募り, 最近はVim scriptについて激しい議論が交わされています. どんな言語か 静的型付け言語で, 命令形です. while, if等基的な制御文に加え, 関数もサポートされています. 変数の取り扱いが特徴的です. オブジェクトがあるので, 苦し紛れにオブジェクト指向っぽく書くこともできます. vim-jpで何が起こっているのか Vim scriptを今後どうするかが話題になっています. https://github.com/vim-jp/issues/issues/48 https://github.com/vim-jp/issues/issues/340 巨大なプラグインを書いていらっしゃる方々が, Vim

    Vim scriptを取り巻く問題について - プログラムモグモグ
    labunix
    labunix 2013/04/02
  • 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)が神な件 - プログラムモグモグ
    labunix
    labunix 2013/02/28
  • Haskellで見る双子素数, いとこ素数, セクシー素数 - プログラムモグモグ

    素数, primes. 数学者を魅了してやまない数たち. その中でも, 特徴のある素数たちがいます. 双子素数, 三つ子素数, 四つ子素数, いとこ素数, セクシー素数,.... 何がセクシーなんでしょうか? 気になります!!! 順番に計算しつつ見ていきましょう. 今回もHaskellのprimesパッケージ*1を用いてみます. 自分で実装するのより高速であろうことを期待して. Prelude> :m Data.Numbers.Primes Prelude Data.Numbers.Primes> 素数の数 素数は, 無限個あります. もしそうでなければ, これほどの魅力はなかったことでしょう. 素数が無限個あることの証明は, あのユークリッドの証明が有名ですが, 次のような証明もあります. リーマンゼータ関数は, となっています. ところでは無理数でです. 仮に素数が有限個しかなければは

    labunix
    labunix 2012/07/01
  • TeXでとある魔術のロゴ作成 - プログラムモグモグ

    これも昔やってたお遊びの一つ. 二年前位に作って, ニコ動に動画で投稿したけど, あまりに酷くて(動画の編集技術が無かった. あの失敗から, ニコ技にうpするには動画編集の力がいるんだなぁと痛感したものです. )直ぐに消した. ソースコードが出てきたので貼っておきます. \documentclass{article} \usepackage[dvipdfm]{graphicx} \usepackage[usenames]{color} \pagestyle{empty} \makeatletter \def\toaru{\@ifnextchar[{\@toaru}{\@toaru[black]}} \def\@toaru[#1]#2#3#4#5#6#7#8{\leavevmode\kern-0.0em\lower-0.5em\hbox{% \kern-0.00em\lower-0.00em

    TeXでとある魔術のロゴ作成 - プログラムモグモグ
    labunix
    labunix 2012/04/02
  • 1