サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
punitan.hatenadiary.org
メモリが 512MB から 2GB に。ヤッター。OS は Debian 6 amd64 をさくっと入れておく。 他にもやっておいた方がよさそうなものがあったら教えて下さい。 ssh root@ip とりあえず foo で sudo 出来るように。 # apt-get update # apt-get upgrade # dpkg-reconfigure tzdata # apt-get install sudo # vi /etc/sudoers # diff -u /tmp/sudoers /etc/sudoers --- /tmp/sudoers 2012-05-04 05:20:48.000000000 +0900 +++ /etc/sudoers 2012-05-04 05:21:05.000000000 +0900 @@ -15,6 +15,7 @@ # User privil
最近考えていることを話す機会があったので文章にしてまとめてみる。 疎結合 昨今の複雑化するウェブアプリケーションを効率的に開発するにあたって、疎結合な設計にすることは開発/保守効率を上げるためには必須の条件となることは経験上嫌というほど皆が経験している。(このへんの感覚がわからない人は一度疎結合なアプリケーションを書いてみると良い) 疎結合な設計をすることで問題の切り分けが容易になり、自動化されたユニットテスト・コンポーネントテスト・ UAT が手元の MacBook で実行でき、高いカバレッジに助けられて臆すること無くコードに手を入れられる環境を入手でき、開発する上でストレスなく障害も少ないというメリットが享受できる。 話を戻して、疎結合な設計の例をみると、ウェブサーバとアプリケーションを分離することであるとか、 MVC であるとか、良質かつ単体で動く小さなモジュールを組み合わせて書くと
Plack::Test + HTTP::Request::Common 世の中には Plack::Test + HTTP::Request::Common という方法もあるが、この場合ブラウザを模したようなテストを書くと意外にも破綻しやすい。とりわけセッション周りの挙動が必須になると大変な手間になる。 LWP::UserAgent + LWP::Protocol::PSGI 最近は LWP::UserAgent + LWP::Protocol::PSGI で楽をするような方法で書くようにしている。ユーザー寄りのテスト(ログイン後の処理やCSRF対策用のトークンが必須等)をわりと楽に書ける点がメリット。 subtest と scope のメリットも享受できる /zento+/ 方式が見通し良く出来そう。*1 サンプル Some::Middleware::CSRFDefenderのテストを書く
jsdomとjQueryつかって富豪的にホクホクできるらしい。セレクタさえ丹念に集めれば Readability/Instapaper のようにコンテンツのテキストだけ抽出するようなこともさほど難しくないか。 var jsdom = require("jsdom"), fs = require("fs"); var jquery = fs.readFileSync("./jquery.js"); jsdom.env({ html : 'http://atnd.org/events/26373', src : [ jquery ], done : function (err, window) { var $ = window.$; $("ol.a-b > li").each(function () { console.log( $("a", this).text() ); }); } });
普段の設定 set tabstop=4 set expandtab set shiftwidth=4こんな設定でインデントをスペース4つとして書いると、LESS/JavaScript/CSS/HTML の場合は嫌でもインデントが深くなり、縦分割して作業すると悲惨なことになってしまう問題が起きる。 function を定義して autocmd で呼び出す function を定義して autocmd で呼び出すやり方で解決した。ftplugin/に書いても問題なさそうではあるが、vimrc 自体が小さいこともあり、見通しよくするために直書き(分量が増えたらあとでftpluginに移せば良い) 条件として この4つのファイルタイプの場合のみインデントをスペース2つとして設定する それ以外のファイルタイプでは影響が出ないようにする ~/.vimrc に直書き(大した量ではないので ftplugi
Ustream の配信は通知系が無いのでいつ始まっているのか把握困難。そこで開始を通知してくれる拡張を作ってた。ここ一年くらい動いてます。 Chrome拡張はちょろちょろ〜っと書けていいですね スクリーンショット ピロっと音が鳴って、こんなnotificationが出ます。クリックすれば配信ページに飛べるという寸法。 リポジトリ https://github.com/punytan/chrome.extension.ustreamalert ダウンロード https://github.com/downloads/punytan/chrome.extension.ustreamalert/ustalert.crx 既知の問題 長時間アラート表示を放置しておくとクリックしてもページを開かなくなる これは恐らくChrome側が悪いはず。patches welcome
CPAN形式で開発していると避けて通れないのが依存モジュールの炙り出しと Makefile.PL へ requires を書き出す作業。これは意外と面倒なのでもっと怠惰に楽をしたいところ。 たとえモジュールが要求するperlのバージョンを決めていたとしても「どれがコアモジュールでどれが違うのか」「parent.pm は 5.10.1 からコアモジュールになった」など、漏れなく抽出しないと新しい環境でインストールする時に悲しいことになってしまう。 こんな面倒事はコマンド叩くだけで済ませてしまいたい、というわけで GitHub - punytan/p5-App-ExtractUsed をでっち上げた。 使い方 extractused コマンドがインストールされるので、基本的にはこれを叩くだけで lib/ と t/ を走査して requires, test_requires が出力される感じ。
cat コマンドでネコを走らせる - hogehoge @teramako 面白い&&最近Nyancatが走るのを見つけたこともあって、全然違う猫だけどカジュアルに走る猫を書いてみた。 usage $ alias cat='perl <(curl -s https://raw.github.com/gist/1445161/c183b0f555cbe88a6530bb7da2eb607a62f75403/nyancat.pl)' $ catxtermなら動くはず。iTerm2で確認済み。nyancat.pl · GitHub ほぼ元ネタGitHub - klange/nyancat: Nyancat in your terminal, rendered through ANSI escape sequences. This is the source for the Debian pack
全国1億2000万人の意識の高いrebloggerの皆さんこんにちは。 私は最近、tumblrでreblogする簡単なお仕事をしています。このお仕事、実に楽しい訳でありますが、しかしこの作業はいかんせん単調で、作業内容はと言うと、Google Readerに流れてくる *.tumblr.com のお気に入りのpostにスターをつけ、ブラウザでまとめて開き、reblogし、スターを外すという流れ作業であるため、大量にスターを付けてしまった日には刺身にタンポポ状態で時間を無為に過ごしている感覚に襲われます。 意識の高いrebloggerとしては無為な時間を減らし、時間短縮をすることでさらに多くのreblogをすることが至上命題となるわけです。そこで、自動化しようと奮起していたところ、Google Readerにもtumblrにも幸いなことにAPIが提供されているようで、ルーチンワークを自動化し
use parent を使って継承した時に try-catch あたりを継承先に突っ込んだりできないものかと考え倦ねいたけど中途半端なところでギブアップした。Magoから呼ぶとcaller()のEXPRをインクリメントしないと動かない。このあたりは要ハック。 プラグマも適用できればと思ったりしたけれど普通にuseしてimport()でやった方が楽そう。とりあえずココまで。 Try::Tinyをこんな使い方して大丈夫なのかは知らない。 package Oya; use strict; use warnings; use Try::Tiny (); sub new { return {}, shift; } my $child = (caller(1))[0]; no strict 'refs'; *{"$child\::try"} = \&Try::Tiny::try; *{"$child\
YAPCから一週間が経ちましたが皆様いかがお過ごしでしょうか。 ブログを書くまでがYAPCということで "Post Your Blog Post About #yapcasia 2011" を立ち上げたところ、なんと157もの記事が集まりました。これも偏にポストしてくれた方のおかげです。(主に@lestrratさんという噂。 Twitter. It's what's happening.) 集計データ データはSQLiteで保存していたので Post Your Blog Post About #yapcasia 2011 · GitHub からSQLをダウンロードして $ sqlite3 database.db < feeds.sql $ sqlite3 database.dbとすればテーブルを作れるようになっています。 記事一覧 いま動いているアプリはRSSリーダーのクロールが確実に終わ
tr;dr ネイティブで書くのが一番良いと思う こんなの書いてみた p5-Config-PP/PP.pm at master · punytan/p5-Config-PP · GitHub (ドヤッ!) __END__ 設定ファイルフォーマット考察 YAMLがオワコンだと書いたらYAML便利派からツッコミ食らったので変遷過程を思い出してみた。 楽したいと考えた挙句に最近はどのフォーマットも使わずに config.pl 作って do してる感じですけれども…。 ここで言う設定ファイルとは凡そ pit やコマンドラインツールで使うように、 大した設定量がない ハードコーディングしたくない(ちょっと隠しておきたい) サッと作って済ませたい できればのちのち再利用したい ようなファイルのこと。 http://code.google.com/intl/ja/appengine/docs/python
YAPC楽しい 今年は芝生で餃子食べられた! トークが素晴らしいのはもちろんのこと、YAPCくらい大きなイベントになると普段会えない遠方の人たちと会えたり、面識のない人でも話ができるのでとてもいいイベントですね!(面識がないと言ってもTwitterのscreen nameで誰だかわかるので初対面だけど初対面じゃない、みたいな不思議な感じで話ができてよかった) やや後悔 ただ、今年は何か発表したいな、なんて思いつつ過ごしていたものの大きなネタもなく発表を見送ってしまった点はsugyanさんの心境に近いものが…。 やって良かったと思えたこと 今年はアプリが出なさそうだったので、モバイル向けのタイムテーブルを作った(YAPC::Asia 2011 用タイムテーブル(モバイル用)作った - punitan (a.k.a. punytan) のメモ)ところ、公式アカウント@yapcasiaをはじめ、
去年の反省(?)から、タイムテーブルはよく確認しておいたほうが良さそうだったので作っておいた。 http://linknode.net/yapcasia-timetable-2011/ 項目を(タップ|クリック)で詳細が見られるようになっております。
404 Blog Not Found:perl+javascript - なんちゃってマンガロイドをみてなかなか面白いなぁと思ったけれど、やっぱりAjaxだとキャッシュ(ページの先読み)が効かないのでページをめくるときにラグがあってなんだかイマイチ操作性悪いなぁと思ったのでスワイプで見られるようにManga Swipe作ってみた。 もっと作りこめば面白いこと出来そう。 工夫してみたことろ 画像を小さく iPhoneで快適に見られるサイズだとこれが限界のようで、デバイスの性能に引っ張られる形。Imagerで小さくした。 ページ先読み ページ先読み(の代替手段)として、display:none;な画像を事前にダウンロードさせる形式。 一度読み込みが完了すればリクエストは発生しないのでページめくりがスムーズにできる。 雑感 やっぱりモバイル用にコマ割りしてないとセリフが小さくて読みにくい。この問
Test::Continuous(autoprove)とは ファイルを監視して、変更があった場合に自動でテストを走らせる autoprove というコマンドラインツールを含む便利なモジュール インストール cpanm の --interactive オプションを使って Log::Dispatch::DesktopNotification をインストールしないようにする $ cpanm Test::Continuous --interactive ... [Graphical notifications] - Log::Dispatch::DesktopNotification ...missing. ==> Auto-install the 1 optional module(s) from CPAN? [y] n 原因 autoprove をGUIのないサーバに(cpanmのデフォルトオ
随分前から使っているSSHFSがなかなか便利。 SSHFSとは SSHFSはリモート(サーバ)のディレクトリをマウントしてひとつのボリュームとして扱えるようにするファイルシステムのことで、サーバ側ではsshdさえ設定してあればクライアントのセットアップだけで使えるようになる。 基本的にはDropboxからキャッシュ機能を引いたものと同じと考えても問題ないでしょう。Dropboxに見られると嫌な書類をおいておくのは気持ち悪い*1 / *2&容量面でMP3を置くのが躊躇われるので、そこそこ使い道はありそう。 使い道 最近は iTunes Media ディレクトリ ドキュメント類 をサーバに置いて、クライアントではそれをマウントする形で利用中。 セットアップ サーバ側はSSHの設定さえしてあれば何もする必要はない(必要に応じてディレクトリを作っておくくらい)なので、クライアント側をセットアップ。
static なサイトを作るにあたっては、「コミット + scp などでファイルを一気に転送」を繰り返すことがよくある方法だと思う。 github pages のように、 git push のみでできると楽なのでこの環境を構築してみた。 さくらレンタルサーバー以外でも使える方法なのでそこそこ応用が効きそう。 サーバに git 環境を構築する % cd $HOME % mkdir tmp; cd tmp; % wget http://kernel.org/pub/software/scm/git/git-1.7.6.tar.gz % tar xvf git-1.7.6.tar.gz % cd git-1.7.6 % ./configure --prefix=$HOME/local % gmake % gmake install % vi $HOME/.profile PATH に $HOME
前回エントリーに とコメント頂いたので App::cpanmigrate - migrate installed modules to new environment - metacpan.org として出しました。 まだbashしか対応していませんが、他の環境用の pull request いただければ merge で対応します。 「え、シェルスクリプトなの?」 実行される本体はシェルスクリプトを exec (正確には bash -c)しているだけ(参考:How can I use bash syntax in Perl's system()? - Stack Overflow)ですが、 とのこと。 http://search.cpan.org/dist/Text-CSV-UniqueColumns/lib/Text/CSV/UniqueColumns.pm たしかにコレは…!
perl のリリースサイクルが短くなったこの頃、みなさまいかがお過ごしでしょうか。 リリースサイクル短期化による影響 perlbrew を使ってリリース毎にバージョンを切り替えたりしていると、意外と面倒に感じるのがインストール済みのモジュール類を別バージョンに移行することではないでしょうか? さらに頻繁にリリースされるとなると、移行するのが面倒ですね。 移行時にやるべき事 移行時には、 既存のバージョンにインストールされているモジュール一覧の抽出 新バージョンのインストール 既存のバージョンにインストールされていたモジュールを新バージョンでインストール 結構手間がかかります。 そこで こんな bash script を ~/.bashrc などに追記しておくと楽に移行できる tips をお届けします。 ちなみに、最新の perlbrew 0.25 からはエラーが起きた際には exit 1;
一ヶ月くらい前に GitHub - punytan/Plack-Middleware-AccessControlAllowOrigin: Add Access-Control-Allow-Origin header を書きました 使い方 至って簡単ですね。ただ、AccessControlAllowOriginって名前が長すぎる builder { enable 'Plack::Middleware::AccessControlAllowOrigin', origin => '*'; $app; }; 補足 類似モジュールに Plack::Middleware::CrossOrigin なんてのがあるんですがこれはやってることが多すぎる。 Access-Control-Allow-Origin 付けたい時にはこれで需要の99.9%はカバーできるんじゃないかと思うので、こんな物を作ってみた次第
追記 perlbrew 最新版では修正済みです。 patchperl にパッチ投げておきました。 perlbrewも最新のpatchperl を使うようになったので、失敗する場合はもう一度perlbrew の最新版を再インストールしてください(perlbrew のバージョン番号は変わってないので注意) 追記終わり http://d.hatena.ne.jp/Itisango/20110504/1304487042 の原因。 原因 - Ubuntu の math ライブラリ諸々がディレクトリごと移動した Configure はデフォルトで /usr/local/lib /lib /usr/lib /usr/lib64を読みに行くところ、Ubuntu Natty からは libm などのライブラリが /lib/i386-linux-gnu /usr/lib/i386-linux-gnuなどに移
みんながhello worldばかりやっているのでちょっとしたアプリつくってみようということで作ったもの。 Docker Cloud - Build, Ship and Run any App, Anywhere Plack::Middleware::* なnamespaceを列挙して、モジュール名クリックでPODを読み込んでくれる超便利な仕上がりとなっております。 適当な頻度で更新されるはず。(うまく動いていれば) ソースはここにおいてあります GitHub - punytan/middleware.punytan.dotcloud.com: Source code of http://middleware.punytan.dotcloud.com/ dotcloudは簡単すぎでhello worldの解説は日本語でも大量にあるのでそれを読むとすぐに使えるようになってしまうのでそのあとの
これができると嬉しいこと サーバとクライアントがひとつのプロセスにまとまってクローラー的なプロセスが必要なくなり、監視せずに済むので地味に嬉しい 概要 言われてみれば何だ、という程度ではあるけれども、app.psgiで Twiggy::Server を使い、コネクションを AE::timer で監視し、AE::cv->recv; するという方法をつかえば Tatsumaki::MessageQueue も使えて万々歳。これがなかなか思いつかなかった… 思いつかなかった言い訳 Twitter の userstream は時々切れるので再接続の処理をする必要があった。今までずっとクローラーで while ループ回したりしてたけれども、 while を使って接続が切れるごとに ->recv してるとサーバと一緒に動かすことができなくて悶々とした日々を過ごすこと数ヶ月。 サーバでは builder
http://mt.endeworks.jp/d-6/2011/04/post-173.html や デイリーポータルZ:そうだ、肉を脂で煮ればいいんだ を見ていたら食べたくなったので作ってみた。 コンフィとは食材を油に浸してつくるフランスの保存食らしい。今回はオリーブオイルと鳥のモモ肉を使った。 皮はパリパリ、肉はジューシーに仕上がり、フォークだけで肉を簡単に崩せるほどやわらかくできる。 待ち時間さえあれば意外と簡単にできて美味しい。火を通した時間は弱火で2時間ほど。 今回使ったのは国産若鶏モモ肉661グラム581円。 二切れ入っていたので片方はあとで食べる。塩を振って下味をつける 国の定める基準をはるかに上回る高濃度食塩水に漬ける 半日漬けるのはちょっと面倒だったので濃度でカバー。直ちに健康に影響はない。 耐熱容器がなかったので大きめのフライパン+小さめの土鍋で湯煎する 油を温める温度
dot-files を git で管理してるとついつい vim プラグインも submodule 使って管理してしまいたくなるんですが、 submodule を使わないほうが楽なんじゃないかなと思って dot-files の整理と一緒にこんなシェルスクリプトを書いてみた。 整理した dot-files はこちら。 GitHub - punytan/dot-files: dot-files 使い方など .gitignore に vim/buldle/* を追加して、bundle以下は管理しないようにする 追加したいプラグインのリポジトリを install 部分に追加する bundleディレクトリは各自の環境に合わせて書き換えて プラグインのアップデートは upgrade を引数に実行するとまとめて git pull してくれる pathogen.vim 使ってください(って書けって言われた。
daemontools はめったに設定しないので毎回忘れる!とくにmultilogとか編集中にはダウンさせておくとか。 一連の流れをまとめたメモ。 インストール $ sudo apt-get install daemontools-run $ cd $ mkdir daemontools foo ディレクトリをつくり、スティッキービットをたてる $ cd ~/daemontools $ mkdir foo $ mkdir foo/log $ chmod +t foo シンボリックリンクを /etc/service 以下につくり、自動で supervise が起動するのでダウンさせておく $ cd /etc/service $ sudo ln -s /home/hoge/daemontools/foo foo $ sudo svc -d /etc/service/foo $ sudo svc
Growlしたい!というときは次のようにやってます。 概要 リモートでgrowl専用のログファイルを準備する。 ローカルからリモートにsshで接続し、tail -fでログファイルの監視する。 リモート側では、そのログファイルに対してGrowlさせたい内容をリダイレクトを使って追記する 追記された内容が出力されるので、その出力をローカルのLLで行ごとに読み込む。 読み込んだ行を growlnotify を起動して通知する これだけ。 growlnotify が必要なので、 GrowlのディスクイメージのExtrasフォルダから事前にインストールしておくこと。 手順 ステップ1 - リモートで $ echo 'foo' > $HOME/growler.log このように、ログファイル(通知させたい内容を追記するファイル)を作成しておく。 ステップ2 - ローカルで $ ssh example@
pjaxの前にpushStateとは AjaxとjQueryの説明は不要として、pushStateとはなんぞや。 pushStateを使ってブラウザの履歴に対する操作をし、HTMLの一部のみを書き換える動作でもブラウザの戻る/進む機能を実現できる方法のひとつ。Ajaxなページを再現し、かつURLを見慣れた方法で自然にpermalinkを表現できる。 有名なところではGitHubで使われてるアレ。 hash fragment (/#!/) ブラウザの履歴を機能させるため、URL の fragment (#) を使ってAjaxなページを実現する方法。一時期もてはやされた感があるが、さらなる「#!」URL批判 - karasuyamatenguの日記 など合理的な反論があり、これから導入するのはためらわれるところ。 有名なところではTwitterで使われているあの厄介者。 pjaxとは pjax
次のページ
このページを最初にブックマークしてみませんか?
『punitan (a.k.a. punytan) のメモ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く