タグ

ブックマーク / syohex.hatenablog.com (24)

  • zipパーサに関するメモ - Shohei Yoshida's Diary

    仕事zipファイルを展開せずバイナリのまま構造解析する可能性があったため, zipの仕様を調べていました. 仕様については Wikipedia(日語版は今ひとつわからなかったところがあったので英語版をメインで見た方がよいと思います)等を参照してください. で, パース方法を調べると初めにファイル末尾にある End of central directory record(以下 EOCD)を探して, そこから Central directory file headerを探してごにょごにょするとあったのですが, EOCDには可変長なコメントフィールド(最大 0xffffバイト)があり, それを考慮した上で正しくパースするにはどうすればいいのだろうと思って, 各種言語の zipライブラリを調べてみました. これはそのメモです. 記事は zip64の内容は含みません. ご注意ください zip

    zipパーサに関するメモ - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2019/04/10
  • 退職しました - Shohei Yoshida's Diary

    日付で 8年と 3ヶ月勤務した組込み系の会社を退職しました. 退職理由 しんどかった 今のままではこの先やっていけないと思った 一番大きな理由はしんどくて自分のための自由な時間が確保しづらかったこと. 経営的な問題から少人数で多くの仕事をやらざるを得ない状況になってしまって, ほとんどの人は 2つ以上の仕事を掛け持ちだったんですがそれが辛かった. ひどい時は午前中と昼は Aの仕事して, そこから夕方まで Bの仕事して, そこから終電まで Cの仕事してとかそんな感じで数カ月間働いていました. そうなると体力的な面もそうなんですけど, 勉強もできなくなってしまい(土日など時間があるといえばあるけど限界まで働くと休日でもやる気が出ない), 精神面でもどんどん疲弊するようになってしまいました. 仕事自体は楽しかったし, やりがいもありましたけど, そちらよりも辛いという方が大きくなってしまいまし

    退職しました - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2016/06/30
    あれ、お約束のwi○hlis○が
  • Release Mouse v2.4.4 - Shohei Yoshida's Diary

    https://metacpan.org/release/SYOHEX/Mouse-v2.4.4 Mouse with threads did not work on Perl 5.22.0 or higher version. This makes Text::Xslate test failure for a long time. This version fixed the issue and works with threads. Please upgrade for newer perl users. Example We expects $foo->syntax is "Kolon" but $foo->syntax is undef with older Mouse on Perl 5.22.0 or higher. This test is passed with Mous

    Release Mouse v2.4.4 - Shohei Yoshida's Diary
  • 標準入力が pipeかどうかの判定 - Shohei Yoshida's Diary

    the silver searcherは stdinが ttyに関連付けられていないと 標準入力が pipeと判定しているんですが、そのせいで単純に エディタから agコマンドを叩くと標準入力待ちになってしまいます。 問題となる部分は src/options.cの以下の部分です /* stdin isn't a tty. something's probably being piped to ag */ if (!isatty(fileno(stdin))) { opts.search_stream = 1; } 一応確かめてみます。 #include <stdio.h> #include <unistd.h> int main (void) { if (isatty(STDIN_FILENO)) { printf("stdin is tty\n"); } else { printf("s

    標準入力が pipeかどうかの判定 - Shohei Yoshida's Diary
  • websocket.el + Amon2でリアルタイム Markdown Viewer - Shohei Yoshida's Diary

    WebSocketがなんなのか全然わかっていませんが、サンプルを参考に リアルタイム Markdown Viewerを作成してみました。日語を書くとエラーになるとか、 効率を全く考えていないとか、繰り返しやってるとエラーが出るとか 問題はまだ多数ありますが、いろいろ楽しいことができそうな予感はしました。 デモ動画 初めの 10秒ぐらい戸惑っています。 必要なもの Emacsは 23以降がいいっぽいです。試したのは 24.1です。 websocket.el Amon2 3.5以降 サーバ側 Amon2付属の chat.psgiをちょっと直した程度です。 use strict; use warnings; use utf8; use Amon2::Lite; use Digest::MD5 (); use Text::MultiMarkdown qw/markdown/; get '/' =

    websocket.el + Amon2でリアルタイム Markdown Viewer - Shohei Yoshida's Diary
  • Accept-Encoding gzipを指定したときの LWP::UserAgentと Furlの挙動に関するメモ - Shohei Yoshida's Diary

    挙動の違いがあったのでメモ. サーバプログラム use strict; use warnings; use Plack::Builder; builder { enable 'Deflater'; # Don't use version 0.10 sub { [200, [], ["hello world\n"]]} } LWP::UserAgent レスポンスオブジェクトの contentメソッドでは圧縮されたデータ、 decode_contentメソッドでは伸長されたデータ(文字コードも decodeされる)が 返ります. use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new(); $ua->default_header('Accept-Encoding' => 'gzip'); my $r

    Accept-Encoding gzipを指定したときの LWP::UserAgentと Furlの挙動に関するメモ - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2013/08/08
  • Go版 Feed::Findを書いてみました - Shohei Yoshida's Diary

    Goの勉強のため以前書いた RSS収集スクリプトを Goで置き換えているのですが、 その中で Perlの Feed::Findが使われていたので、Go版のそれを書いてみました。 リポジトリ https://github.com/syohex/go-feedfind インストール % go get -u github.com/syohex/go-feedfind サンプル Find関数に URL(文字列)を渡すと feedの URLが stringのスライスとして 返ってきます. package main import "fmt" import "github.com/syohex/go-feedfind" func main () { mattnFeeds, _ := feedfind.Find("http://mattn.kaoriya.net/"); fmt.Println(mattn

    Go版 Feed::Findを書いてみました - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2013/08/06
  • go-eldocを書きました - Shohei Yoshida's Diary

    go-autocompleteでは一瞬だけ関数のシグネチャが表示されるのですが、 カーソルを動かすと消えてしまうの、どうにかならないかと考えたのですが、 どうせなら eldoc対応してみた方がいいかなってことでしてみました。 まだ作ったばっかりなので問題があるかもしれません。 問題があれば githubの issuesまで報告いただけると助かります。 リポジトリ https://github.com/syohex/emacs-go-eldoc 依存パッケージ go-mode go-autocomplete スクリーンショット カーソルが消えてしまっていますが、現在の引数の位置をハイライトします カッコを使った少々複雑なケースでも一応対応しています。 おわりに おそらく複雑なケースでは対応しきれていないと思いますので、 これからの課題にしたいと思います。問題がありましたら、githubの i

    go-eldocを書きました - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2013/07/04
  • perl-5.18で splitの挙動が変わっていた - Shohei Yoshida's Diary

    http://perldoc.jp/docs/perl/5.18.0/perl5180delta.pod#splits32first32argument32is32more32consistently32interpreted 知らなかったのでメモ。Templateのテストが Perl 5.18でこけていたのは これが原因のようです。なおリリースはされていないようですが、すでに修正は マージされているようです. Fix split for Perl 5.18.0 by jonjensen · Pull Request #19 · abw/Template2 · GitHub 変更点 splitの第一引数に空白一つの文字列リテラルを与えたときと 空白一つが代入された変数を指定したときの挙動が今まで違って いたのが同じになったようです。 #!perl use strict; use warni

    perl-5.18で splitの挙動が変わっていた - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2013/06/13
  • Minillaの zsh補完関数を作りました - Shohei Yoshida's Diary

    Minillaの minilコマンドの zsh補完関数を作ってみました。 リポジトリ https://github.com/syohex/zsh-perl-completions 最新版はこちらで管理しています。問題があれば上記のリポジトリの issuesを 利用してください 使い方 下記のコードを _minilとして適当なディレクトリにほ置き、そこに fpathを通します。 (ここでは ~/.zsh/mycompに置いたこととします). .zshrcに下記を 追加します。 fpath=(~/.zsh/mycomp $fpath)そして zshのキャッシュファイルを削除します % rm ~/.zcompdump コード gist版はこちら #compdef minil typeset -A opt_args local context state line local -a _minil_

    Minillaの zsh補完関数を作りました - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2013/04/16
  • Parse::RecDescentを使って .iniファイルのパーサを書く - Shohei Yoshida's Diary

    Parse::RecDescentを一回ぐらい使っておこうかなということで使ってみた。 書いてみたのは .iniファイルのパーサです。たくさんモジュールがあるし、 実際に使う気があるわけでもなく、ただ練習ということで。 iniの仕様 書くにあたってわかったのですが、.iniファイルって厳格な仕様があると いうわけではないんですね。なんで、Config::INIの PODに書いてある BNFを参考に、若干簡略化したものになってます。文字列の正規表現はいい加減です。 コード #!/usr/bin/env perl use strict; use warnings; use Config::INI; use Parse::RecDescent; ## for debug #$::RD_HINT = 1; #$::RD_TRACE = 1; my $grammer =<<'__GRAMMER__'

    Parse::RecDescentを使って .iniファイルのパーサを書く - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2013/04/08
  • コンテキストスイッチの回数を調べる - Shohei Yoshida's Diary

    Starletのヘッダとボディを合わせて出力する閾値を変更してみる - Hateburo: kazeburo hatenablog この手の記事の話でコンテキストスイッチについて出てくることが あるけど、あまり数値が併記されているものがないように思えます。 その手のプロの人が言っているので、確かな情報だと思うのですが、 やはり数字を一緒に載せていただけるとより真実味が増すと思います。 プロセスのコンテキストスイッチ回数の確認方法(Linux) procfsから確認することができます % cat /proc/{目的のプロセスのPID}/status | grep ctxt voluntary_ctxt_switches: 145031 nonvoluntary_ctxt_switches: 13452自発的(voluntary)なコンテキストスイッチは、sched_yieldを呼び出した場合

    コンテキストスイッチの回数を調べる - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2013/03/15
  • Capture::Tinyを使う - Shohei Yoshida's Diary

    標準出力、標準エラー出力への書き込みを別々に 取得したい場合に便利に使えます。 ソース #!/usr/bin/env perl use strict; use warnings; use Capture::Tiny qw(capture); my ($stdout, $stderr) = capture { warn "message to STDERR"; print "message to STDOUT"; }; print "STDOUT: $stdout\n"; print "STDERR: $stderr\n"; ($stdout, $stderr) = capture { my @cmd; @cmd = ('ls', '-F', $ENV{HOME} . "/.emacs"); system @cmd; @cmd = qw{ls no_such_file}; system @c

    Capture::Tinyを使う - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2013/02/22
  • httpstatus コマンドで、HTTP のステータスコード(以下略 - Shohei Yoshida's Diary

    一般的な Web Programmer ならば、HTTP Status code はすべて暗記していると聞きました。 しかし、僕は初心者なので、なかなか覚えきれていないので、HTTPのステータスコードを さがすのに便利なツールを用意しました。helm-httpstatusです。以下をコピペしてください。 (defvar helm-httpstatus-source '((name . "HTTP STATUS") (candidates . (("100 Continue") ("101 Switching Protocols") ("102 Processing") ("200 OK") ("201 Created") ("202 Accepted") ("203 Non-Authoritative Information") ("204 No Content") ("205 Reset

    httpstatus コマンドで、HTTP のステータスコード(以下略 - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2013/02/21
    emacs版もいました
  • LTSVパーサの Emacs Lisp実装 - Shohei Yoshida's Diary

    Labeled Tab-separated Values (LTSV) 流行りに便乗しました リポジトリ https://github.com/syohex/emacs-ltsv インタフェース ltsv:parse-lineは LTSVな文字列を解析し、alistを返します。 PerlText::LTSV同様 want, ignoreなキーを指定することが可能です。 (ltsv:parse-line "hoge:foo\tbar:baz\ttime:20:30:58\n") ;; => (("hoge" . "foo") ("bar" . "baz") ("time" . "20:30:58")) (ltsv:parse-line "hoge:foo\tbar:baz\ttime:20:30:58\n" :want '("time")) ;; => (("time" . "20:30

    LTSVパーサの Emacs Lisp実装 - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2013/02/08
  • Gvizを Perlに移植しました - Shohei Yoshida's Diary

    Yet Another Ruby Graphviz Interfaceを作ったからみんなで大量のグラフを作って遊ぼうよ! DSLで DOTファイルが生成できるのがいいなぁと思ったのと、 Rubyの勉強を兼ねて移植してみました。 リポジトリ Graph-Gvizじゃ目的がわからないという意見をいただいたので モジュール名を変更しました。 https://github.com/syohex/p5-Graph-Gviz syohex/p5-Graphviz-DSL · GitHub CPANにアップするかどうかは類似モジュールの調査後に します。少し調べた限りは DSLで書けるのがなさそうだったし、 依存モジュールがひたすら多そうなのばっかりなので、 アップする意義はあるかもと思っています。 サンプルコード #!perl use strict; use warnings; use Graph::

    Gvizを Perlに移植しました - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2012/10/18
  • tora-mode進捗 2012/SEP/10 - Shohei Yoshida's Diary

    ちびちびと実装してます。 リポジトリ syohex/emacs-tora-mode · GitHub ビルド時の修正 手元の Ubuntu 12.04の環境では、boostのバージョンのためか リンクエラーが出たのでパッチを当てる。 build tora language implementation · GitHub REPL Emacsのcomintを使って実装。M-x run-toraで REPLが起動します。 機能としては send-regionしかありません。 最近 REPLを搭載している言語って多いけど、エディタとうまく 連携できているものはあまりない気がする。まあそうする必要が あるかはものによりますけど。Pythonは今のファイルの情報を 全部 REPLに送って、そこから補完の情報が取れるのでそれは 良いかなと思ってます。JSXの補完もそんな感じでできれば いくらか早くでき

    tora-mode進捗 2012/SEP/10 - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2012/09/10
  • Emacsは衰退しました(WIP) - Shohei Yoshida's Diary

    nyan-modeあたりを参考に suitai-modeなるものを書いてみたけど、 レベルが低かった。精進します。 現状余裕がなくなってきたので、作業を進めるかは不明です。

    Emacsは衰退しました(WIP) - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2012/08/10
  • Simple Scheme interpreter in Perl - Shohei Yoshida's Diary

    昨日 Brainfuckを書いてみたので、今日は Scheme(Lisp)の処理系を書いてみました。 当然格的なものではなく、簡単なものです。 Lispy: Scheme Interpreter in PythonPerl版になります。 kidd/hascheme · GitHub に lis.pyにインスパイアされて書いたという Scheme in Perlがあったの ですが、格的な感じだし、いろいろモジュール使いまくっていたので、 とりあえず元のものに忠実に作ってみました。 コード 実行 ファイルを標準入力にリダイレクトした場合、元の式と結果を表示するように してみました。Schemeとは若干挙動が違うものがあるようにも思えますが、 lis.pyと同じように動作していると思われます。 % perl lis.pl < test.txt 12345678 => 12345678

    Simple Scheme interpreter in Perl - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2011/11/18
  • 日本Perl改造計画 とほほの Perl編 その1 - Shohei Yoshida's Diary

    みなさんは Perlを勉強し始めた人のブログエントリーを見てこんなことを 思ったことはないでしょうか ? 「なんでこんな古臭いコードを書いているんだ」 私は結構有ります。3引数の openでなかったり、ベアワードが大量に 使われていたり、myが使われていなかったり。なんでそういうコードを 書くのかはその人達に聞いてみないとわからないですが、以下のことが 考えられます。 古い書籍を見ている 古い内容のサイトを見て書いている 1については時間が解決してくれるかもしれないですが、そのようなを すべて抹消するというのは現実的ではない。なんで 2をなんとかできないか 考えてみました。 google.co.jpで「perl」でググった結果(2011年11月11日現在) Perl - Wikipedia とほほのperl入門 The Perl Programming Language - www.pe

    日本Perl改造計画 とほほの Perl編 その1 - Shohei Yoshida's Diary
    hiroyukim
    hiroyukim 2011/11/11
    どの言語もまともな情報が引っかからないという意味では似たような状況だとはおもいますが、敷居が低くて鉄板な入門書が広まるといいんだけどむずかしいだろうなぁ