サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ノーベル賞
ziguzagu.org
この記事は『トレタ Advent Calender 2016』 の9日目の記事です。開発メンバーの日々の試行錯誤がなんかいい感じにまとめられた記事が続く中、完全に箸休め感ある内容…。 今年もEmacs 4月にトレタに転職してから業務で主に使う言語をPerlからRubyにスイッチしたけど相変わらず Emacs 使い続けてる。 同僚が RubyMine つかってたのみてちょと挑戦したけどだいぶ脳内変えないといけなくていったん挫折…。 GUI な Emacs も挑戦してみたものの Emacs とターミナルとの行き来がどうにも手間でそちらも挫折…。 結局いままでどおり iTerm2 + tmux + (CUI) Emacs 使ってる状況で、これが加齢か…と感じずにはいられない…。 そんな感じで右往左往してた状況だったので、dotfiles 内にある Emacs 関係のファイルの今年のコミット数かぞ
Data::ObjectDriver 0.10 をリリースした。 SIXAPART/Data-ObjectDriver-0.10 テストとドキュメントの修正だけのバージョンだけど 0.09 から 4 年弱を経ての復活。 大人の事情で宙ぶらりんになっていた PAUSE の SIXAPART アカウントを復活しつつ、前メンテナの Yann から Github 上のリポジトリを transfer してもらい再び Six Apart としてメンテナンスすることに。 sixapart/data-objectdriver Pull Request もながらく放置されてしまっているけどなるだけ近いうちに対応する方向で。Movable Type をはじめその他のサービスでも使っているので、今後はそれなりにメンテナンスされていくことになるはず。 ご利用中の皆様におかれましては引き続きよろしくお願い致します。
前の記事をつぶやいたら、@kazeburo さんから、 @ziguzagu App::watcherで、watcher --dir . --signal HUP -- proclet だとどうかな — masahiro nagano (@kazeburo) June 24, 2013 というのを教えてもらった! 前の記事でははしょったけど、redis、nginx なんかもうごいててまぁ再起動しても一瞬なんだけど、もったいない感があったので、 @ziguzagu plackupは-r、workerはwatcher使うとか細かく設定すると良いかもね。ちょっと面倒だけど — masahiro nagano (@kazeburo) June 24, 2013 の通り、gearman worker は App::watcher で変更検知、plackup は -r とか -R で、というふうにしてみ
CPAN Module の変更点をサクッと調べる方法 というエントリーに反応してみるテスト。 僕は CPAN Module のバージョン間の diff をとるのに、search.cpan.org にある diff 機能を使う以下のようなやっつけスクリプトを使ってる。 #!/usr/bin/env perl use strict; use warnings; use LWP::Simple; my ($pkg, $from, $to) = @ARGV; $pkg =~ s/::/-/g; my $content = get("http://search.cpan.org/diff/${pkg}-${from}-${pkg}-${to}.-w.diff") or die "oops. no content. try again!\n"; print $content; たまに空のレスポンスが返
td-agent と fluent-gem コマンドでインストールした fluentd plugins、gem を管理するための Puppet モジュールつくってみた。 https://github.com/ziguzagu/puppet-module-tdagent package provider に “fluentgem” が追加されているので、 include td-agent package { 'fluent-plugin-datacounter': ensure => 'installed', provider => 'fluentgem', require => Package['td-agent'], } として、fluent plugin な gem などを追加することができるので、全部 /etc/td-agent/plugin にいれるとか、exec でほげほげしてふ
Perlbal で Server::Starter(start_server command) によるホットデプロイをサポートするためのプラグイン、Perlbal::Plugin::ServerStarter というのを作った(作っている)。 https://github.com/ziguzagu/Perlbal-Plugin-ServerStarter Perlbal の素敵な点の一つに、動的に設定変更できる(管理ポートに telnet, nc などでつないでコマンド送り込む)というのがあるけど、たぶんほとんどのプラグインでは設定の削除ができない。たとえば Vhosts プラグイン。 VHOST app.example.com = app VHOST admin.example.com = admin ## これがいらなくなっても動的に削除するコマンドはない VHOST www.exam
Varnish で ESI 使っていて、なぜか esi:include のタグが処理されず出力されたりする場合が小4時間ほどしらべた(長い!)。 原因は HTML コメントの書き方のせいで、Varnish 3.0.2 で調べる限りはちょっと厳し目のパースをしているっぽい(ソースコード読んだけど、まぁ、僕の C 言語ヂカラではよくわからなかった….)。 だめなのが HTML コメントとしては正しくないコメント開始タグ以降に “-” が複数個連続してあるパターン。
とあるサーバー間の疎通確認に、いつもどおりなにげなく traceroute コマンドを使った。ら、経路でてこない。ping もつながらないし ICMP 落としてるのかー、と思ったけど、mtr だと途中(該当サーバーの手前)まで出てくる。 え。なんで? 正解:traceroute コマンドはデフォルトでは UDP を使う。 traceroute (2.0.1) の man より抜粋。 -I Use ICMP ECHO for probes -T Use TCP SYN for probes -U Use UDP datagrams for probes (it is default). Only UDP method is allowed for unprivileged users.
オレオレじゃない本物の SSL 証明書を Perlbal で使うときの中間証明書の設定方法メモ。 SSL を使いたい reverse_proxy などで、 SET enable_ssl = on SET ssl_key_file = /etc/perlbal/cert/cbapp-key.pem SET ssl_cert_file = /etc/perlbal/cert/cbapp-crt.pem SET ssl_ca_path = /etc/perlbal/ca SET ssl_verify_mode = 1 SET ssl_cipher_list = ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL という感じで設定する。 オレオレ証明書使うときと違うのは、ssl_ca_path と ssl_verify_mode を設定する、というところ
Perlbal の web server に Apache の mod_expires と同じ代替期間指定構文ってやつで Expires を指定できるプラグイン、Perlball::Plugin::Expires というのを書いた。 https://github.com/ziguzagu/Perlbal-Plugin-Expires 使い方はこんなん。 LOAD Expires CREATE SERVICE web SET role = web_server SET listen = 127.0.0.1:8000 SET docroot = /path/to/docs SET plugins = Expires Expires default = access plus 1 day 12 hours Expires image/gif = access plus 10 years ENAB
YAPC::Asia 2010、今年も無事開催され、無事参加してきた。 トークセッションはこのへんを聴いた。 That Goes Without Saying (or Does It?) CloudForecastの紹介 モダンな Perl5 開発環境について DataPortability and SocialWeb Protocols Studying HTTP with Perl How Xslate Works O2 Web Framework Perl5 is Alive! let’s database testing! Perl6正規表現プログラミング楽土入門 省サーバ運用 LT(2日目) Keynote 合間に講堂前デッキのベンチでコードかいたり、アリンコや赤いダニみたいな虫と格闘したりした(きづくと Mac Book のディスプレイの縁をあるいている)。 しかしやっぱりあれ
は、機能的には全く同じ。なんだけど、plackup 使ったほうは ps コマンドでプロセスみるとコマンドラインから渡したパラメーターが見えなくなる。たとえば、worker の数調整して –daemonize したとする。 % plackup -s Starman --workers 2 --daemonize app.psgi % ps x | grep starman 18801 ?? Ss 0:00.01 starman master 18803 ?? S 0:00.00 starman worker 18804 ?? S 0:00.00 starman worker % starman --workers 2 --daemonize app.psgi % ps x | grep starman 18835 ?? Ss 0:00.01 starman master --workers
いまいちやる気がでないときはドットファイルをいじったりします。ということで、今日は .screenrc とか .emacs を少し。 .screenrc はどうでもいい設定とか削ったり、下記を参考に caption と hardstatus の違いを認識した上で設定しなおしたりした。 卜部昌平のあまりreblogしないtumblr - 俺の .screenrc が火を吹くぜ そして、Mac にスイッチしてからというもの iTerm 使っていたけど描画の遅さに辟易してきたので Terminal 使うことにした。そもそも iTerm 使ってた理由は、Terminal で 256 色表示できないからという理由だけ...。それを諦めれば全然 Terminal のほうが快適っていうのはわかっていたので今回ばっさりあきらめてみた。 BEFORE: (3年前くらい) AFTER: Emacs の色設
そういえば、以前のエントリーで悩みを綴っていた(その1、その2)、DirectoryIndexで指定したファイルをRewriteでマッチさせる方法が解決できてるのでメモしておく。 やりたかったことを簡単に説明。’/‘で終わるURLにアクセスされて、DirectoryIndexによって最終的に処理するファイルが/index.cgiになる。で、その/index.cgiをrewriteの対象(inputに入れる)にしたい、ということ。 DirectoryIndex index.cgi index.html RewriteCond %{LA-U:REQUEST_FILENAME} \.(cgi|pl)$ RewriteRule ^/(.*) http://localhost:8080/$1 [P] 「LA-U」という書式がミソ。変数(ここではREQUEST_FILENAME)の値をサブリクエスト(
2023年の振り返り。 健康 去年に続いて大きな心身の凹みもなく、概ね元気に過ごせた。 ただ、9月についに新型コロナに感染してしまった。子供が直前に溶連菌で発熱していたので、自分もついに溶連菌をもらってしまったか?と思ったが、なぜか自分はコロナだった…。症状的には39度くらいの発熱と猛烈な頭痛がまるっと1日ほど続き、熱が翌朝には熱だけは37度までさがったのでなんとか病院にいけたくらい。味覚障害が1週間ほどあって、水を飲むと鉄の味がするのと、食欲がわかないので食べていたフルーツゼリーは甘味がまったくわからなくてとても不味かった。とはいえこんくらいなので軽傷の部類だとは思う。 週2回のランニングは、週1になりつつあるけど引き続き継続できている。間違いなく自分の健康の基盤になってると思う。一方で上半身に関しては何にもトレーニングをしていないので明らかに衰えている感じがある。今日ランニング前に久し
先週末の YAPC::Asia 2009 のカンファレンスに引き続き、特別研修『Moose入門、モダーンなオブジェクト指向システム』に参加してきた。 研修の内容は、Moose とはなんぞやから始まり、以下(だいたい)7 部構成の入門講座。 Moose Concepts : コンセプト ざっと機能一通りみてみる なぜ Moose なのか Classes : Class の基礎から使い方 Moose::Object が何持ってるかとか BUIDLARGS, extends, override, super の使い方 Moose 使ったあとの後始末 (no Moose;) Role : Role の基礎から使いかた Role の持つ意味 使い方 alias で衝突回避 Basic Attributes : Attribute いろいろ required, default/builder, laz
YAPC::Asia 2009 に行ってきた。 聞いたセッションの中でやっぱり興味を引かれたのは非同期モノ x 3。 Asynchronous programming with AnyEvent : miyagawa さん Asynchronous Programming for (A)synchronous Communication : mala さん Concurrent DB access with Perl : tokhuirom さん 若干自分の理解にまだ不安があるものの、使えそうなところで使っていこう。 あと、この mala さんのセッションに加え、 PSGI / Plack (miyagawa さん、tokuhirom さん) Building a desktop app with HTTP::Engine, SQLite and jQuery : miyagawa さん
複数サーバーで同時実行される可能性のあるスクリプトの排他制御を実装するのに、DDLockd をつかってはどうかというアイデアをいただいたので、DDLockd について調べてみた(なんかロックするやつ、ぐらいのことしかしらなかった)。 DDLockd とは Danga Distributed Lock Daemon の略で、まさに今回やろうとしていた複数サーバーで実行されるアプリの排他制御を行うための仕組み、みたいなのを提供してくれる daemon。Perl で書かれている。Danga の名前が指し示すとおり LiveJournal で使われている(た?)。TypePad でもほんのりつかっていたり。 コードはこのあたりにおちていた。 http://code.sixapart.com/svn/ddlockd/ http://code.livejournal.org/svn/ddlockd/
JPA 主催のセミナー#1 に行ってきた。 はじめて秋葉原のUDXなるところにいったけど、すごくきれーなところで、会場もたっぷり広かった。 で、 まとめと感想。 第一部 「Better Perl Practices - 最新Perl開発手法のススメ」 スピリチュアル系ってわけではないけど、ナウでいけてるコードを書く・仕事をするための心がまえだったりの話。 習慣にするために、少しづつできるところからやる、考える、とか。 ユニークじゃなくてもいい。いろんな意味で CPAN に先人の苦労がつまってるのでありがたくつかおうぜ。 うんうんいいながら聞いてた。 Test::Class イイヨ 前から知ってるモジュールだけどそいえば使ったことない。使ってみる。 書くコード減らそう。つまるところ Moose 使おうぜ。 使おう。 第二部「Catalyst Guts - 高機能WebフレームワークCatal
XML::LibXML::parse_html_string で HTML の一部、たとえばブログ記事の本文のみとか、をパースしようとして無駄に苦戦してしまったのでメモ。 以下のような、DOCTYPE 宣言もなければ html/body 要素もないけど、ちゃんと(?)HTMLの一部ではあるものを XML::LibXML でパース、ごにょったあと出力したい。 #!/usr/bin/perl use strict; use warnings; use XML::LibXML; my $html =<<HTML; <div class="entry"> <p>test!!</p> </div> HTML my $parser = XML::LibXML->new; my $doc = $parser->parse_html_string($html); print $doc->toStringH
CentOS 4.4 (古い…) に daemontools (0.76) をインストールしようとしてエラった。 http://cr.yp.to/daemontools/install.html の手順どおりにすすむと、 ./load envdir unix.a byte.a envdir.o(.text+0xce): In function `main': : undefined reference to `errno' envdir.o(.text+0x1b4): In function `main': : undefined reference to `errno' envdir.o(.text+0x1ce): In function `main': : undefined reference to `errno' unix.a(openreadclose.o)(.text+0x3b
といったわけで、TypePad Connect がローンチ(べーた)されたようです。 僕のプロフィールページは、http://profile.typepad.com/ziguzagu です。 このブログのコメント管理も、既存のコメントも表示しつつ TypePad Connect に。 MT での設定方法なんかはこちらに。 http://www.movabletype.jp/documentation/typepadconnect/registration_settings_mt.html “TypePad Connect” についてはこちらとか。 http://www.sixapart.com/blog/2008/11/typepad-connect-profiles-and-comments-for-everyone.html http://www.movabletype.jp/blog
OpenSource プロジェクトが自ドメインも持ってないなんて ということでとりました、ドメイン。 http://typecast.jp/ TypeCast に関するもろもろの情報を出していくためにブログもはじめます。 http://typecast.jp/blog/ どうぞよろしくお願いします。 一人だけの軍隊 ランボー (ハヤカワ文庫) でもまだ一人。
先週の YAPC::Asia 2008 にあわせて公開した TypeCast ですが、インストール手順に問題があったのですこし修正しています。 新インストール手順 手順については、紹介ページと INSTALL ファイルにのってますが、こんな感じに。 make でもろもろやるようになりました(ダミーの DB はいまだ必要ですので、このあとつくってやってください)。すでに、一度インストールをお試しいただいてる方は svn up したあと、make をお願いします。 ちなみに、以前のは何が問題だったかというと、checkout した MTOS をビルドする手順がまるぬけだったのです!!どーん。。。 ということでその辺をやるようにしました。あと、Encode::JP::Mobile が Bundle にはいってなかったのでそれも追加しました。ほかにもこれ足りないんじゃね?というのがあれば、教えてく
YAPC::Asia 2008 行ってきました。 そして今年はしゃべってきました。スライドはこちらです。 スピーカーとしてこういった会に参加するのは初めてでしたが、無難にこなせたと思います。はい。 今回は、いろんな偶然がつながりつながってこういう機会にめぐまれて、なんかいろいろなものに感謝しないとなぁと、ひとりしんみり感じている祭りのあとです。 最初に就職したのが偶然 Mobile な部署、その後今の Six Apart に転職。しばらくすると Mobile な開発にひと盛り上がりやってきて、miyagawa さんがつくった TypeCast をその後いじるようになり、そのまま今回のオープンソース化プロジェクトをまかされ、YAPC でスピーカーにもなり。。 なんかいろいろめぐりめぐって機会に、人に恵まれたなぁと。 TypeCast を作った miyagawa さんに感謝。 僕自身にこれを1
HTML を指定の文字数で分割するための HTMLS::Split なるモジュールを CPAN に up しましたので、さっくり使い方なんかをつらつら。 なにするモジュール? 最初に書いたとおり、HTML を指定の文字数で分割するためのモジュールです。 携帯端末などで HTMLタグを含むテキストデータが 10KB 未満など、きびしい制限があるデバイス向けに HTML を出力する際には、PC ブラウザで見せている長文をそのまま出力するわけにはいきません(容量オーバーってことできれてしまう)。 そこで、HTML を分割する必要があるのですが、ただ、単純に HTML を分割といっても、 タグの途中できれたらどうしようもない A タグのテキストノードなんかが分割されるのはあんまりうれしくない。分割してもいいけど、次のページはどうやってはじめるのさ( なしに突然 がやってくる)? CSS を当てたい
違いは、文字列の比較を正規表現(ap_regexec)でやるか strcmp でやるかの差。Apache 2.2.4 の該当部分のソース、modules/mappers/mod_rewrite.c(の apply_rewrite_cond 関数)から抜粋。 case CONDPAT_STR_EQ: if (p->flags & CONDFLAG_NOCASE) { rc = !strcasecmp(input, p->pattern); } else { rc = !strcmp(input, p->pattern); } break; default: /* it is really a regexp pattern, so apply it */ rc = !ap_regexec(p->regexp, input, AP_MAX_REG_MATCH, regmatch, 0); /*
C:\cygwin\bin\perl.exe (268): *** unable to remap C:\cygwin\bin\cygfreetype-6.dll to same address as parent(0xE00000) != 0xE90000 というエラーが。Cygwin固有の問題らしく、これを解決するためにrebaseとrebaseallコマンドというのが用意されているとのことで早速インストーる(Utilsカテゴリに発見)。で、今度はrebaseallでDLLを別オフセットに移動してから、もう一度トライ。
というのを知らなかった…。 今までずっと、定義ごとに use constant してた…。う~ん、ダサい。 perldocはちゃんと読みましょう。あと、constant.pmはクロージャのよいサンプルでもあるのでソースも見ておきましょう。
次のページ
このページを最初にブックマークしてみませんか?
『ziguzagu.org』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く