タグ

ブックマーク / labs.unoh.net (25)

  • ウノウラボ Unoh Labs: MySQL5からのインデックス結合で1テーブル複数インデックスを使う

    komagataです。 Webアプリケーションのパフォーマンスの大半はデータベース、特にインデックスの使われ方にかかっている気がします。 仕事でもMySQLをよく使いますが、MySQLでは1テーブルに付き1インデックスしか使われません。PostgreSQLなどと比べてそのことが気になってMySQLでのパフォーマンスチューニングに全く自信が持てませんでした。 オライリーの実践ハイパフォーマンスMySQLには下記のように書かれています。 実際、UNIONを除き、MySQLでは、1つのクエリを実行するとき、1つのテーブルに付き1つのインデックスしか使用できない。この事実は、繰り返し述べるに値するほど重要である。「MySQLでは、1つのクエリを実行するとき、1つのテーブルにつき1つのインデックスしか使用できないのである。」 また、その制約を考えたクエリの書き方として下記の様に書いてあります。 my

  • ウノウラボ Unoh Labs: PHPとMecabでキーワード自動リンクを実装する

    こんにちは、山下です。 今年もどうぞよろしくお願い致します。 Webサービスを開発していると、特定のキーワードを自動でURLリンクにする処理が必要になることがあると思います。今回は、このキーワード自動リンク機能を形態素解析ツールMecabを使ってPHPで実装する方法を紹介したいと思います。 説明に入る前に少し補足しておくと、Trieの実装であるDouble-Array処理だけ利用したいのであれば、MecabからDouble-Array処理の部分を切り出したDartsというライブラリがあります。しかし、なぜMecabを使うかというと、PerlだとDartsのバインディングが公開されているのですが、現時点でPHP版はありません。また、最近のLinuxディストリビューションでは、Mecabのパッケージが最初から用意されているため、より簡単に利用できると思ったからです。 それでは、順を追って説明

  • ウノウラボ Unoh Labs: gdbの使い方

    今年の2月にマカーになったbokkoです。どうも僕の使っているフォントがほかの人には見づらいらしく、「そのフォントはねぇよw」と言われたり、外付けのキーボードを使っているせいか、「MacBookの意味なし!」と社内で言われてたりしています。 今日はgdbのお話です。gdbは非常に広く使われているデバッガで、特にC、C++のプログラムをデバッグするのによく使われています。 デバッガの使い方 プログラムをデバッグする際、例えば以下の方法が挙げられます。 1. ソースコードを読む 2. ソースコードに出力関数を仕込む(例えばprintf) 3. ソースコードを書き換えて実行してみる これで十分な場合もありますが、そうでない場合もあります。これらの方法ではプログラムを実行している最中にこちらからソースコードレベルでのアクションを起こすことが難しいので、例えば、プログラムをある時点で止めて変数の

  • ウノウラボ Unoh Labs: IPアドレス帯をチェックする

    こんにちは。新入社員の ryosuke です。 ウノウに入社してから携帯サイトに関わっているのですが、これまで格的に携帯サイトを構築した事が個人的に無く、ノウハウが足りず周囲に助けて貰ったりしながら楽しくやってます。という訳で携帯のノウハウをご紹介という訳にはいきませんが、その周辺知識に絡んで今回はIPアドレス周りの処理について書かせてもらおうと思います。 携帯専用サイトでは携帯端末以外からのアクセスを制御(アク禁)したい場合があると思います(なんといっても携帯専用ですから)。 USER_AGENT等は簡単に変更できてしまうので、携帯キャリアのゲートウェイ経由で接続しているかどうかをチェックする事になります。ゲートウェイのIPアドレス帯は各キャリアのWEBサイトで公開されているのですが、69.208.0.0/24のようなIPアドレスの範囲を表現できるCIDR表記で公開されており、クライア

  • ウノウラボ Unoh Labs: Q4Mを触ってみる

    yukiです。そろそろクリスマスですね。みんな浮かれていればいいと思います!最近急に目が悪くなって、ツリーの赤色電球と居酒屋の赤提灯の色が判別出来なくなってきました。嘘です。 今回は、みんな大好きメッセージキュー、Q4Mを触ってみた感想を今更ながらレポートします。 公式ページはこちらhttp://q4m.31tools.com/ Q4Mはサイボウズラボの奥 一穂氏が開発されており、MySQLの5.1以上でストレージエンジンとして利用できるメッセージキューで、MySQLプラグインとしてGPLライセンスで配布されております。 特長 MySQLのストレージエンジンとして利用できるので、テーブル作成時にストレージエンジンを指定するだけで利用できます。 CREATE TABLE hoge ( ... ) ENGINE = QUEUE キューの作成(enqueue)は通常のレコード操作と同様にINSE

  • ウノウラボ Unoh Labs: RDBで階層構造を扱うには?

    yukiです。ダイエットを始めて3kg減ったと思ったら、風邪を引いて見事に1kg増量。 運動しないと駄目ですね。あと残り20kg、道のりは遠いです。 さて今回は、「RDBで階層構造を扱うには?」です。 あるサイトを構築中に階層構造をもったカテゴリ構造にすることになり、どのようにDBで扱うか悩みました。 DBMySQLを採用していたので、この時点でぱっと頭に浮かんだ選択肢は以下のようなものでした。 XML-DBを利用する 親カテゴリレコードのプライマリIDを子カテゴリレコードに持たせる 親を含めた『絶対パス』を名称として扱い、取り出した後にパース ファイルシステムに同様のディレクトリ構造を作り、毎回パースする (1)のXMLDBはオープンソースのeXistやXindice、Yggdrasillなど様々な選択肢がありましたが、カテゴリのみの利用な割にメンテナンスコストが高すぎるので見送りま

  • ウノウラボ Unoh Labs: Varnishの使用例とか

    一部の人に鳥の人として認識されているyamaokaです。 フォト蔵では最近Varnishをコンテンツキャッシュに利用しています。 具体的には、写真のサムネイルなどの静的なコンテンツをキャッシュするために使っていたりします。 Varnishはコンテンツキャッシュ機能を備えたHTTPアクセラレータです。 同じような目的に使われるプロダクトとしてSquidがありますが、 それよりも高速に効率よく動作することを売りにしています。 サーバーへのインストールについてはCentOSなどRed Hat系のLinuxであれば EPELからrpmを入手するか、 ソースを展開するとredhatディレクトリにspecファイルが用意されているので そちらを利用すれば最新版のrpmが作成可能です。 以下、rpmを使ってインストールしたものとして話を進めます。 起動設定は/etc/sysconfig/varnishです

  • ウノウラボ Unoh Labs: PHP5.3の新機能まとめ

    先日から「GnuCash」使って家計簿を付け始めたyukiです。 だいぶ長いこと複式簿記に触れていなかったので、思い出すのに一苦労でした。家計簿で「損益計算書」や「貸借対照表」、「キャッシュフロー」を見てみると新たな発見があっていいですね。是非オススメです。 さて今回は、先日の社内勉強会で行った「いまさらPHP5.3をあらためて見てみる」をレポートします。機能をサンプルコード交えてざっとチェックしていっただけですが、参考になれば幸いです。 参考:PHP 5.2.x から PHP 5.3.x への移行 新機能からチェックしていきます。まずは話題になっていた名前空間などから。 名前空間 # global.php namespace { class MyProject { public function getName() { return 'global'; } } } # unoh.php

    yuhei_kagaya
    yuhei_kagaya 2011/01/25
    namespace
  • ウノウラボ Unoh Labs: PHPによるテキストファイルへのロギング

    yamaokaです。 PHPでwebアプリケーションを作成するとき、 皆さんはロギング(ログの出力)をどうされているでしょうか。 今回は、テキストファイルへロギングする方法をいくつか紹介したいと思います。 error_log関数 syslog関数 PEAR::Log log4php Zend_Log error_log関数 PHPでは、標準の関数として error_log関数が用意されています。 使い方はとてもシンプルです。2番目の引数に「3」を指定することで、 テキストファイルにログを出力することができます。 error_log('message', 3, '/var/tmp/app.log'); syslog関数 また、syslog関数も 標準で用意されている関数です。syslog経由でテキストファイルにログを出力することができます。Windowsの場合は、イベントログでエミュレートさ

  • ウノウラボ Unoh Labs: 意外と身近なphar - PHp ARchive

    こんにちは。shimookaです。 今回は意外と古くて身近、でも意外と知られていないphar(PHp ARchive)を取り上げてみました。 pharとは? pharとはPHp ARchiveの略で、その名の通りPHPスクリプトのアーカイブです。含まれる内容はPHPスクリプトである必要はなく、複数のファイルを含めることができます。Javaの世界で言うjarに近いもので、拡張子は「.phar」となることが一般的です。 pharの特徴としては、以下のものが上げられます。 アーカイブするファイルの圧縮をサポート(gzip・bz2) 署名のサポート(md5・sha1) phar拡張モジュールを使用することで、アーカイブを展開することなく透過的に利用可能 pharの中身と使い道 pharファイルは大まかには、データとスタブ、マニフェスト(アーカイブの情報を格納したバイナリデータ)で構成されます。前述

  • ウノウラボ Unoh Labs: MySQL オペミスでデータが破損してしまった場合の復旧方法

    こんにちは satoです。 オペミスで update に where句を付け忘れたり、プログラムのバグでデータが破損してしまったりした場合でも、バイナリログには更新SQLがすべて書き込まれるので、バックアップデータからオペミスが起こるまでの全てのSQLを流し込めれば、元の状態に戻すことは可能です。 •バイナリログを取っている •オンラインバックアップをとっている(mysqldumpMySQLを止めた状態でのcpによるバックアップとバイナリログ) •バックアップ時点でのバイナリログの書き込み位置を保存している 以上のような状態でデータが壊れた時の復旧手順をまとめてみました。シナリオとして •ある1カラム email をupdateしようとしたら、間違ってwhere 句を付け忘れ 全レコードをupdateしてしまった •気がついたのが半日後 というオペミスが発生したとします 1) データベー

  • ウノウラボ Unoh Labs: Vim: ちょこっと設定、ちょこっとプラグイン。

    ども。6月入社のjhoshinaです。 まだ入社したてのつもりだったのに、ラボブログ執筆がまわってきてあたふたしています。 何を書こうか迷ったのですが、環境も新しくなったことですし、設定しなおしたVimの設定・プラグインなどをちょこっと見ていこうかと思います。phpとsymfony関係を中心に見ていきます。 雑多な設定 特に変わったところもないのですが一応。 ~/.vimrc set nocompatible set showmatch showmode showcmd set laststatus=2 set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P syntax on filetype on filetype indent on filetype plugin on ~

  • ウノウラボ Unoh Labs: SoftBank絵文字の対処法

    こんにちは。harukです。 今回はSoftBankの絵文字の対処法の基礎的な部分についてです。 絵文字コードは以下のようになっています。 0x1B 0x24($) 【 ? 】 【 X 】… 0x0F 【 ? 】 = G / E / F / O / P / Q 【 X 】 = 0x21~0x7E 【 X 】の部分には、[ < ]や[ ' ]や[ \ ]などが含まれているので多少やっかいです。 入力された絵文字を含む文字列を表示する際などには HTMLエンコード(実体参照化)してあげなければいけませんが、 絵文字の中もエンコードされてしまいます。 (例) こんにちは(0x1B)(0x24)G>(0x0F) ↓ こんにちは(0x1B)(0x24)G>(0x0F) となってしまい、4文字の別の絵文字になってしまいます。 対応するにはPHPでは以下のように行います。 function SB_ht

  • ウノウラボ Unoh Labs: 国産MySQLストレージエンジン「Spider」の作者、斯波健徳氏に聞く

    こんにちは。中村です。 MySQLにはMyISAM、InnoDBCSVなどのいくつかストレージエンジンがありますが、皆さんはSpiderというストレージエンジンを聞いたことはありますでしょうか。Spider Storage Engineは斯波健徳さんにより作成されたDatabase Shardingを可能にするストレージエンジンでMySQL 5.1で利用可能です。 先日、某集まりで斯波さんとお会いしたときにSpiderを作っているということを教えてもらったので、早速詳しい内容を教えてもらうことにしました。 ※Spiderについての説明資料はMySQLカンファレンス 2009にて斯波さんが発表されたときのスライドがあります。スライドの直リンク(zip) Spider Storage Engine について posted by (C)フォト蔵 Spider Storage Engineとは?

  • ウノウラボ Unoh Labs: 快適なsshクライアント生活

    はじめまして、HIROKIです。 大規模コンテンツの開発に携わっていると数多くのサーバにsshでログインすることになります。その手間を軽減するために $HOME/.ssh/config を設定してみます。 sshコマンドを簡略化 例えば dev01.labs.unoh.netというサーバにsshでログインするのであれば、 $ ssh -i ~/.ssh/id_rsa.unoh hiroki@dev01.labs.unoh.net という感じのコマンドでログインしているかと思います。 これを $ ssh dev01 でログインできるように設定してみましょう。 Host dev01 User hiroki HostName dev01.labs.unoh.net IdentityFile ~/.ssh/id_rsa.unoh 秘密鍵を複数使いわけている人はIdentityFileを指定すると便

  • ウノウラボ Unoh Labs: PEAR package 作成と公開までの手順

    こんにちは,ttsuruoka です. PEAR package の作成と公開までの手順について, (たまにしかやらないことは忘れてもいいように)ここにメモしておきます. 例として Services_Delicious のパッケージ作成・公開手順: 0. テスト まずはテストが正常に通る状態であることを確認. Services_Delicious では .phpt 形式のテストを用意してあるので,これを実行します. $ cd /path/to/tests # テストのあるディレクトリに移動 $ pear run-tests Running 3 tests PASS Services_Delicious:bug#8528[bug8528.phpt] PASS Services_Delicious:Req#7293[req7293.phpt] PASS Services_Delicious

  • ウノウラボ Unoh Labs: サーバのネットワーク速度の調査/測定方法

    こんにちは。kyagi です。先日データセンタ内のサーバ群のうち、なぜか特定の1台だけネットワークの速度が極端に遅いという問題がありました。今回はサーバマシンのネットワーク速度の測定方法と原因についてお話しします。同様のトラブルが発生している方のお役に立てば幸いです。問題解決までの手順としては以下になります。 1. 現在の状態を調べる 2. ハード/ソフト含めて考えられる原因をいくつか挙げる 3. 原因について改善されるまでひとつひとつ検証していく まず現在の NIC の HW 情報とドライバを lspci で調査します。ここでは Broadcom の NetXtreme BCM5722 という NIC を使用していることがわかります。 # lspci -vvv | grep Ether 01:00.0 Ethernet controller: Broadcom Corporation

  • ウノウラボ Unoh Labs: ゼロからはじめる携帯サイト構築。

    こんにちは、日を妙に楽しみにしていたわりには見ようともしなかった ryosuke です。曇りで残念でした。曇りでも日と分かるぐらい暗くなったら嬉しかったのですが、東京ではそんな事は全然ありませんでしたね。 さてさて、そんな私ですが入社後半年が経過したところで、入社当初より携わって来た携帯サイト構築に関して得た知識(失敗談)をまとめてみようと思います。 初ラボブログ記事でも触れた様にそもそも格的な携帯サイト構築は経験に乏しく、バッドノウハウの塊の様な面倒な思いこみが先行しがちだったわけですが(実際バッドノウハウの塊ですが)、端末の機能や表現力が豊かになるのと同時に開発環境的なツールやライブラリの充実、ノウハウの蓄積と情報公開により随分すんなり入って行けた様に思います。 結局はキャリア感の差異を知り吸収する事がすべて いきなりですが、PCサイトと携帯サイトの違いで最も厄介な所はこれにつき

  • ウノウラボ Unoh Labs: 正方形なサムネイルを簡単に出す

    Keitaです。 バレンタインデーも近づいてきた今日この頃皆様どうお過ごしでしょうか。 例年、僕はとても憂なのですですが、今年は、ImageMagickがあるのでとてもハッピーになれそうです。 そんなどうでもいいことはおいておいて、たまに、Webサービスで正方形でサムネイルを出しているサイトがあると思います。 具体的にいうとこんな感じの画像が sample posted by (C)フォト蔵 こんな感じの画像になるイメージです。 sample_imagick posted by (C)フォト蔵 こういう画像をPHPで作る場合には、imagickを使うと簡単に作れます。 <?php $width = 200; $height = 200; //Imagick $image = new imagick(); $image->readImage('sample.jpg');

  • ウノウラボ Unoh Labs: PHPで書かれたwebサービスを高速化する

    尾藤正人です。 アクセス数の多いコンシューマ向けの web サービスは、処理速度がかなり重要になってきます。 応答速度が遅いと使用しているユーザにとってストレスになりますし、 処理に時間がかかればサーバに対する負荷も高くなります(厳密に言うと違う)。 そこでウノウではいろいろな工夫をして処理速度の高速化を行っています。 一口に高速化といってもいろいろな要素がありますが、大きく分けて3つの段階があります。 ・ハードウェアによる高速化 ・ソフトウェアによる高速化 ・プログラムの工夫による高速化 しかし、これら3つは独立ではなく、互いに影響しあっているので完全に分けて考えることはできません。 それぞれがどのような部分に影響を与えているのか、ちゃんと理解してチューニングすることが大事です。 ただし、高速化するときに忘れていけないのが、高可用性です。 いくら高速に動作しても安定して動作し