サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
hori-uchi.com
FlipClipがリニューアルしました。 詳しい内容はこちら http://blog.flipclip.net/2009/03/post_57.html 今回のリニューアルで体感できるほど、サイトのレスポンスが上がったと思います。 今までサービス全体のレスポンスを下げていた、全レコードに対する検索を見直すことで、DBの負荷が50〜100分の1になりました。 レコードの検索に対して、様々な場面を想定して、柔軟に条件を指定検索できるような実装をしてしまっていたのが、DBのレスポンスを悪くして、サイトを重くしていた主な原因であり、反省する点です。 今回の件で、「なんでもできる」ものは「なんにもできない」のと同じだってことを痛感しました。 リーンな開発を心がけようと心に誓いました。 Technorati TAG
ユーザーから動画が見れなくなったという問い合わせが来たので確認すると、自分達の環境では普通に見れる。原因がよくわからない。 詳しく聞いてみるとどうやらIE7 ProというIE 7のAdd-onを入れてから見れなくなったらしい。ということでそれを入れてみたところ見事に動画が再生されなくなった。 さらに詳しく調べていくと、IE7 ProのFlash広告をブロックする機能が、プレイヤーが取得しようとする動画を広告とみなしてブロックしてしまい、動画を取得できないため再生できないことがわかった。 ブロックされていた動画のURLがこれ。 http://www.flipclip.net/ads/logo_animation_a.flv この広告ブロック、広告かどうかの判定をURLにテキストマッチをかける形で行っていて、「/ads/」という部分が判定にひっかかていたみたい。 原因がわかれば対応は簡単! 動
動画共有サイトを作ってみたいという方向けの書籍「FFmpegで作る動画共有サイト」が1/29にに毎日コミュニケーションズさんから発売されます! FFmpegとはというところから始まり、インストールから各言語でのFFmpegの使いかた、実際にサイトを構築するところまで入ったてんこ盛りな書籍です。 僕も4章のPerlでFFmpegを使うという部分を書きました。 僕が書いた部分ですが、まずはシンプルにsystem関数を使ってPerlからffmpegを実行する方法をサンプルスクリプトを使って紹介し、そのスクリプトをffmpegコマンドの実行結果を取得したり、タイムアウト処理をすることができるように拡張していくという内容になっています。 拡張していくにあたって、誰でも簡単に試せるよう、CPANモジュールは使わず、標準モジュールと組み込み関数のみを使うようにしました。 ただ、CPANモジュールの便利さ
Template::Toolkitのテンプレート内で割り算の商を取得したくて、 [% c = int (a / b) %] などと直感的に書いてみたんですが、やっぱり構文エラーになってしまいました。しょうがなくマニュアルを眺めていると、以下のような記述が。 Template Toolkit Manual: Directives The 'div' operator returns the integer result of division. Both '%' and 'mod' return the modulus (i.e. remainder) of division. 'mod' is provided as an alias for '%' for backwards compatibility with version 1. [% 15 / 6 %] # 2.5 [% 15
最近どこもかしこもAPI公開なご時勢ですが、FlipClipもクリップ検索用のフィードをAPI第1段として公開しました。 FlipClip開発者向け情報のページ http://www.flipclip.net/developer/ フィードと言うよりAPIといったほうが世間の受けはよさそうな気がしますが、フィードはフィードなんで、フィードという名前にしときました。 今のところ、以下のクリップを取得できます。 一般公開クリップ 特定ユーザーのクリップ 特定ユーザーの友だちのクリップ 特定ユーザーのお気に入りクリップ フィードのフォーマットはAtomフィード、JSONフィード、RSS2.0を用意しました。 フォーマットの指定はクエリパラメータでできるんですが、別の方法として、Acceptヘッダを使った指定ができるようにしてあります。 リソースを取得するためのURLがあって、そのURLに対してこ
たとえばこのサーバにインストールされているCGI.pmのバージョンを確認したいなんて時は perl -MCGI -e 'print $CGI::VERSION' なんてコマンドを打ってやれば確認できますが、これをいちいち打つのはめんどくさいので、簡単なスクリプトを書いてみました。 #!/usr/bin/env perl use strict; use File::Basename; use Getopt::Std; getopts('v', \my %opt); die "Usage: ". basename $0. "[-v] [ ...]\n" if @ARGV == 0; no strict 'refs'; for (@ARGV) { (my $path = $_) =~ s{::}{/}; eval {require "$path.pm"}; if ( $@ ) { print
Template::Toolkitのテンプレート内の文字列の連結は'_'(アンダースコア)を使う。忘れるのでメモ。 Template Toolkit Manual You can concatenate strings together using the ' _ ' operator. In Perl 5, the '.' is used for string concatenation, but in Perl 6, as in the Template Toolkit, the '.' will be used as the method calling operator and ' _ ' will be used for string concatenation. Note that the operator must be specified with surrounding
ローカルの開発環境で使っていたMySQLなんですが、何も考えずデフォルトの設定で使っていたら、mysqldumpした際に、データが文字化けして、ちょっとは待ったのでメモ。 MySQLのバージョンは4.1.20。 文字化けする原因は、mysqldumpがデフォルトでは、文字コードをUTF-8で出力するようになっていて、フィールドの型がUTF-8でない場合は、自動でUTF-8に変換するためのようです。 僕が使っていたDBは文字コードについて特に何も設定していなかったので、デフォルトの文字コードであるlatin1になっていました。 なので、これもmysqldumpするとlain1 -> UTF-8な変換が自動で行われ文字化けしたということのようです。納得。 この自動変換を行わないようにすれば解決するはず。ということで調べてみると、--default-character-setというオプションを使
mod_perlで動作するアプリケーションを開発する場合、更新されたモジュールをリロードしてくれるApache::Reloadのようなモジュールを利用するのが一般的だと思いますが、Apache::Reloadが有効になっている状態でClass::DBIを継承したモジュールを更新すると以下のようなエラーメッセージをはいてInternal Server Errorになるという現象に悩んでました。 [Sun Dec 26 20:06:02 2004] [error] Can't use an undefined value as a HASH reference at /usr/local/perl-5.8.5/lib/site_perl/5.8.5/Class/DBI/Relationship/HasMany.pm line 51.\n Compilation failed in requir
今日参加した第9回XML開発者の日の川村さんによる「Ruby on RailsにみるRESTfulアプリケーションの方向性」の話を聞いて、SledgeでもRESTfulなコードを簡単に書きたいと思いたち、ちょっとパッチを書いてみました。 --- Sledge/Pages/Base.pm.orig 2006-11-25 00:40:59.000000000 +0900 +++ Sledge/Pages/Base.pm 2006-11-25 09:27:50.000000000 +0900 @@ -8,6 +8,9 @@ use strict; use base qw(Class::Accessor Class::Data::Inheritable); +use vars qw($MethodQueryKey); +$MethodQueryKey = '_method'; + __PACKAG
iモード向けサイトでリダイレクト使う際は最後の/に注意 今日iモード向けのコンテンツで、QVGA端末かQQVGA端末かを判別して各端末用のページにリダイレクトするというスクリプトを書いたんですが、リダイレクトする際に必ず「ページが移動しました」のようなメッセージがでてしまうという現象に出くわしました。 今まで同じようなスクリプトを書いたときにはこんな現象が起きたことがなかったので、一瞬とまどいましたが、原因はなんてことなく、Locationで指定した飛び先のURLの最後に/(スラッシュ)がついていなかったからでした。 たとえば、http://hori-uchi.com/qvga/index.htmlにリダイレクトさせたくて、 print "Location: http://hori-uchi.com/qvga"; print "\n\n"; と記述すると、携帯のブラウザではまずhori-u
IPAに脆弱性として提出されていた、ミクシィにアップロードされた画像がURLを直接たたけばログインしていなくても閲覧できる件が技術的には改修せず、ヘルプにその旨を記載することで決着したという話題について、その理由のひとつに画像の配信は一部、CDN(akamai)を使っているため、そこに認証をかけるのが難しいのではというものを見かけました。 このakamaiなのですが、実は、僕が開発運用している動画共有サイトFlipClipでも、日ごとに増え続けるサーバへの負荷、トラフィックに対応すべく、動画の配信にこれを使えないかと検討してまして、先日akamaiの人にきていただいて話を聞いてみました。 このとき一番聞きたかったのがまさに今回のミクシィの件で話にでてきた「認証のかかったコンテンツをakamaiで配信できるのか?」という点でした。 というのもFlipClipでは動画・サムネールの配信はすべて
これ知りませんでした。「選択した部分のソースを表示」しても、普通にその部分の生のソースが出てくるだけかと思い込んでました。 最近はJemplateなんかを使って動的にHTMLを生成するというのをやることが多いんですが、これ、HTMLのメンテがしづらいとデザイナーさんからはすこぶる評判がわるかったんです。 これで少しはメンテが楽になるかなー。 via: subtechグループ - マングローブ - JavaScriptなんかでいじられた後の現在のソースを表示 Technorati TAG firefox,
FlipClipでクリップを見ていると、再生の途中で画面内のリンクをクリックして他のページに移動しようとしても、なかなか移動できなくてイライラすることがあったので、これを回避する方法がないものかと考えていたのですが、今日試した方法が有効だったので紹介します。 この現象は、再生している動画のサイズが大きい場合によく起こる現象で、リンクをクリックしてもブラウザはこの大きな動画の再生に忙しいのか、なかなか画面を切り替えてくれません。 そこで考えたのが、クリックした時に、再生している動画をけしてしまうという方法です。 試した方法は簡単で、リンクなどをクリックしてページが切り替わるタイミングで、再生中のフレームを含むdiv要素のinnnerHTMLを空にしてしまうというものです。 コードのイメージはこんな感じです。 <script type="text/javascript"><:!-- Event
今までapacheでアクセス制限かけるときはIP制限ならIP制限だけ、標準認証なら標準認証だけしか設定したことがなかったし、それで事足りていたのでなにも困ることはなかったんですが、社内のネットワークやサーバ間で通信する相手からのアクセスは無制限に行いたいけど、その他のネットワークからのアクセスはパスワードで制限したいという状況になったので、ちょっと調べてみたら、結構簡単にできました。 Require valid-user Allow from 192.168.1 Satisfy Any Apacheのドキュメントに普通に書いてありました。マニュアルはちゃんとよんどかないとだめですね。 それにしてもSatisfy Anyってわかりやすい書き方ですね。どっちか満たせばOKって、覚えやすい。 Technorati TAG
MTのエントリが多くなりすぎて、再構築ができなくなったと友達から連絡をもらい、確認したところ、DBにBerkeleyDBを使っていたので、それを改善すべくDBをBerkeleyDBからPostgreSQLに移行してみました。 その際、MTのマニュアルにしたがってやってみたところ、そのままではうまくいかなかったので、行った作業をメモ的に残しておきます。 * PostgreSQLの設定 まず、マニュアルをみてPostgreSQLの設定をしました。 基本マニュアルどおりに進めて、mt-config.cgiの設定を変更し、 データベースの作成をおこないました。 DBの文字コードはUTF-8だったので、DB作成の際、文字コードを指定しました。 createdb -E UNICODE --owner xxxxx * 移行スクリプトを実行 次にマニュアルどおりMT付属の移行スクリプトを実行したところ、D
naoyaさんのバイト募集に便乗して、弊社の社員募集を出してみます。 弊社はFlipClipという動画共有サービスを運営している会社です。 http://www.flipclip.net/ 動画共有サービスというとYouTubeがまっさきに思いつくと思いますが、 YouTubeをイメージしてもらって、そこからEvilさを引いて、かわいらしさをプラスするとFlipClipのイメージに近くなるかなーと思います。 ただ、YouTubeの真似をして、日本版YouTubeを作る気はありません。 ブログによって、誰でも自分の意見を世界に発信できるようになったように、 FlipClipを使うと、誰でも動画を簡単に世界に発信できるようになるといわれるようなサービスに したいと思っています。そのために動画を公開する人が使いやすかったり、便利だったりする機能を どんどん強化していきたいと考えています。 フリッ
クッキーとアンダースコアを含むホスト名 あるWebアプリケーションを作っている際に、クッキーをどうしても保存できないというトラブルに遭遇ししました。調べていくと、全く同じスクリプトを別ホストに設置すると正常に保存できることが確認できたので、どうもホスト名に問題がありそうです。ということで正常にクッキーを保存できるホスト名とできないホスト名を眺めていると、ある違いに気づきました。そう、クッキーを保存できないホスト名には"_"(アンダースコア)が含まれていたんです。。アンダースコアってRFCが定めるホスト名のガイドラインに違反している文字列なんですね。そういえば、このサイトのドメインを取得する際、「hori-uchi.com」にしようか、「hori_uchi.com」にしようか悩んだんですが、「hori_uchi.com」はドメイン登録できなかったような記憶がうっすらあります。。 話をクッキー
naoyaさんのエントリーnaoyaのはてなダイアリー - MyISAM vs InnoDBに反応して、久々にエントリを書いてみます。 FlipClipは、すべてMyISAMで運用しているんですが、理由はあんまりなくて、デフォルトでMyISAMだからってのが大きいのと、スナップショットを取るのにmysqlsnapshotに手を加えたものを使っているので、InnoDBにするとそれを使えなくなるというのが主な理由です。それにまだDBがボトルネックだうはーってな状態になったことがないってのもあります。 それでも少し前にサーバのチューニングをそろそろ考えたほうがいいかなーということを考えたことがありまして、 その時にチューニングの候補に考えたものの一つが、Sledgeのセッション用のテーブルをMyISAMからInnoDBに替えてみるということでした。 セッションテーブルはスナップショットを取る必要
またちょっと古いねたですが、WEB+DB PRESS vol.33でnipotanさんが書いてたコネクションプーリング都市伝説を読んだ時、ほんとのところどっちが速いのかってのをabでベンチマークをとってみました。 ベンチマークとったときにエントリを書こうと思ってたんですが、モチベーションがあがらず今になっちゃいました。。 以下がベンチマークの結果です。 プーリングを有効にした場合 Server Hostname: rakuda.localhost Server Port: 80 Document Path: / Document Length: 12323 bytes Concurrency Level: 20 Time taken for tests: 107.840 seconds Complete requests: 1000 Failed requests: 0 Broken pi
タグを頻繁に切るようなプロジェクトでのsvkの使い方。これでいいのか? ここ最近はsvkを使ってバージョン管理をしているんですが、svk help introで見ることができるイントロで紹介されているように 、 # リポジトリをミラー svk mirror svn://svn.example.com/project_x //mirror/project_x # リポジトリを同期 svk sync //mirror/project_x # ローカルリポジトリを作成 svk copy //mirror/project_x //project_x として、同期したproject_xのリポジトリをそのままローカルリポジトリにするという方法でしばらく使っていました。最初はこれで問題ないように思えたんですが、元のリポジトリでブランチやタグを切った後、svk pull //project_xして、リポジ
mod_perl使用時はMaxClientsの値に気をつけましょう 導入するだけで既存のCGIスクリプトがお手軽に10~200倍高速になるmod_perlですが、mod_perl自体がサイズがでかいのと、高速化のため、モジュールをキャッシュするため、apacheのプロセスサイズが結構大きくなってしまいます。経験的にはだいたい1プロセスあたり20~30MByte位にはなります。このような性質上、mod_perlを使う場合はメモリの使用量を考えなくてはいけません。 ところで、Apacheのデフォルトの設定ではMaxClientsの値は150に設定されています。これは同時に最大150のリクエストをさばく、つまり最大150まで子プロセスを同時に生成するということです。仮に150個の子プロセスを生成するとすると、mod_perlを利用時の1プロセスのサイズをおよそ20Mbyteとすれば20×150=
会社のネットワークセキュリティが厳しくて、ローカルのPostfixからメールを外部に送信できないので、メールのやりとりもローカルで完結するよう、ローカルにIMAPサーバをたてることにしました。 以前にIMAPサーバをたてた時はcourier-imapを使ったんですが、ググってみると、Dovecotというのがよさげだったので、そちらをいれてみることにしました。 構築はMac mini/3.メールサーバを参考に行ないました。というかほとんどここに書いてあるとおり実行しただけです。 インストールはDarwinPortsにパッケージがあるのでそれをいれました。簡単! sudo port install dovecot インストールが完了すると自動起動するには以下のコマンドを実行しろというようなメッセージがでてきたので実行しました。 sudo launchctl load -w /Library/L
Ajaxる時のサーバとのデータ交換フォーマットとして、JSONを使う時、perlでサーバ側を実装する際にはJSONとかJSON::Syckというモジュールを使うとperlのデータ構造をJSONフォーマットに変換してくれるので便利です。 昨日これを使って、サーバからデータを取得し、textareaに取得したデータを入れるということをしたところ、改行を含んだテキストだと、改行の後にスペースが2個入ってしまうという現象に遭遇しました。 要はこうなってほしいところが、 foo bar baz こうなってしまうんです。 foo bar baz 調べてみると、クライアントで受け取ったJSONデータをevalした段階ですでにスペースを含んでいたので、サーバ側でJSONデータを作成するところに問題がありそうだということがわかりました。 そこで以下のようなスクリプトを書いて、JSON,JSON::Syckが
OOなJavaScriptの勉強がてら、ボタンの2度押し禁止機能を簡単に実現するライブラリを作ってみました ちょっと時代に乗り遅れている気もしますが、最近prototype.jsをつかったOOなJavaScriptを書くのにはまっています。 今日はbindとbindAsEbentListenerの勉強がてら、これまたかなり昔話題になった「2度押し禁止ボタン」を実現するコードを書いてみました。 input.js 使い方はこんな感じです。 // prototype.jsとinput.jsをロードします。 <script type="text/javascript" src="/path/to/prototype.js"></script> <script type="text/javascript" src="/path/to/input.js"></script> <script type=
最近会社ではにわかにPHPブームが巻き起こってまして、Perlプログラマーな僕としては少々肩身が狭い思いをしたりしなかったりな状況なのです。というわけで何とか社内でのPerlの地位を守りたいのですが(笑)、僕はPHPには全くふれたことがないので、Perlの方がPHPより優れている点をぱぱっとあげることができません(汗)。そういうときのGoogle頼み、ということで「Perl PHP 比較」というキーワードでぐぐってみました、すると河合さんの河馬屋におもしろい記事を発見しました。 PHPの方が軽くて速いは本当? PerlよりPHPの方が軽くて速いは本当?(CGI編) JavaはPerlよりも比較にならないほど速い? そういえば、かなり前にこのページを見た記憶があるんですが、そのときはDBIって何?ってなレベルだったので、この記事の内容がよくわからなかったことを思い出しました。しかし、改めて読
ここ最近AtomPPを使ったサービスを作っているんですが、そのためにXML::Atomをインストールしたら、LWPを使って10MBくらいの大きいファイルをアップロードすると異常に時間がかかるようになってしまいました。 アップロード時のサーバの様子を見ているとメモリとCPUをやたらと消費しているようです。 LWPのドキュメントを読んでいるとHTTP::Request::Commonのドキュメントに$DYNAMIC_FILE_UPLOADをTRUEにセットすれば大きなファイルをメモリをあまり使わずにアップロードできるよと書いてあったので、これをTRUEにしたところ、劇的にアップロードの時間が短縮されました。 めでたしめでたし。 Technorati TAG perl, LWP,
Sledge::Plugin::FormValidator::Simple - Sledgeのバリデータ Sledge用のバリデータを作ろうと決めてから結構たってしまいましたが、ようやくそれっぽいものができました。 Sledge::Plugin::FormValidator::Simple-0.01 今のところFormValidator::Simple::Extensionが必要です。 Sledge::Plugin::FormValidator::Simpleを使う場合にはあらかじめこれをインストールしておく必要があります。 このバリデータの特徴は以下のとおりです。 プロファイルをYAMLで定義できる 1つのYAMLファイルにすべてのプロファイルを記述でき、バリデーション時には自動で選択される 使用するプロファイルを手動で選択することも可能 エラー時の挙動も定義可能 エラーメッセージもYA
内部エンコーディングをFlagged UTF-8にしたところ、テンプレート内の日本語を含んだURLにuriフィルタを適用すると、空になるという現象が発生してしまいました。 uriフィルタをハックして、、とも思いましたが、テンプレート内でEncodeモジュールが使えたら便利かなと思い、プラグインを書いてみました。 Template::Plugin::Encode-0.01 使い方はこんな感じ。メソッドの実装は、Template::Plugin::Jcodeを参考に、virtual methodとして扱えるようにしてみました。 [% USE Encode %] # encode <a href="/foo/bar?jword=[% ja_str.encode.encode('utf-8')|html|uri %]">click here</a> # decode [% foo.encode.
次のページ
このページを最初にブックマークしてみませんか?
『出不精夫婦が暮らすように旅するブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く