タグ

ブックマーク / cloned.hatenablog.com (10)

  • ガチャみたいに設定した確率で抽選を行うPHPライブラリを作った - cloned.log

    くじ引きやガチャガチャのように、あるものはよく出る、あるものはあまり出ない、というように確率に差がある上で一つ抽出する、というプログラムをたまに書くことがあるので、その部分だけを行うPHPライブラリを作った。 GitHub cloned/luckybox インストール Composerを使う場合は、composer.jsonのrequireに "cloned/luckybox": "$VERSION"を追加。$VERSIONに入れられるバージョンはPackagistを参照。今のところは 0.9.* としておくと良いでしょう。 Composer推奨だけど、Composerを使わない場合はGitHubからソースコードをダウンロードしてrequire_onceしてもOK。 使い方 コインは60%、キノコは35%、スターは5%、という設定で1回くじを引いてみる例はこんな感じ。 <?php use

    ガチャみたいに設定した確率で抽選を行うPHPライブラリを作った - cloned.log
  • これはすごい「Linux-DB システム構築/運用入門」を読んだ - cloned.log

    Linux-DB システム構築/運用入門 (DB Magazine SELECTION) 作者: 松信嘉範出版社/メーカー: 翔泳社発売日: 2009/09/17メディア: 単行(ソフトカバー)購入: 55人 クリック: 3,402回この商品を含むブログ (32件) を見る読み始めた瞬間からこれは良いだと思って一気に読んだ技術書はEffective Java 第2版 (The Java Series)以来かもしれない。Effective Javaを読んだときは既にJava業ではなくなっていたけれど、このLinux-DBは今自分がもっとも知るべき内容だったことも大きいかもしれない。 自分が是非購入しようと思ったきっかけは奥さんの「Linux-DBシステム構築/運用入門」がすごい - あなたのシステム、ガラパゴス化していませんか?というエントリ。特に次の文に興味を持った。 なぜそうな

    これはすごい「Linux-DB システム構築/運用入門」を読んだ - cloned.log
  • ページングするためだけにSELECT COUNT(*)しない - cloned.log

    件数の多い一覧にはページングが必要になるのだけど、ずっと前からこのページングのリンク(前へ | 次へ、とか)を表示するためだけに、レコードの総件数をカウントするのが無駄だなぁと思っていた。一般的なRDBを使っている場合には、一覧取得のSQLと同じWHERE句のCOUNT問い合わせを行わなければならず、コーディング上も面倒だし、DBに対するクエリが増えるのもいただけない。総件数を表示するのであれば仕方がないけれども、そうでない場合にはなんとかしたい。 いつも不満に思っていたおかげで、最近やっと「前へ | 次へ」のような単純なページングの場合にはCOUNT問い合わせをしなくてもよいことに気がついた。とても今更すぎるけれども。 例えば、20件ずつの一覧であればLIMITを21にして取得したレコードが21件あれば「次へ」を表示するだけでよかった。「前へ」はオフセットが0でなければ表示すればよいので

    ページングするためだけにSELECT COUNT(*)しない - cloned.log
    aki77
    aki77 2009/11/25
    『20件ずつの一覧であればLIMITを21にして取得したレコードが21件あれば「次へ」を表示するだけでよかった。「前へ」はオフセットが0でなければ表示すればよい』
  • 参照と更新が頻繁に発生するテーブルでMyISAMとInnoDBを比較 - cloned.log

    [追記 2012/09/29] 最近でもこの記事を参照してくださる方がいるので追記します。下記エントリを書いた時点では非常に局所的なケースで重い現象に悩まされていたことを前提に調査しており、その延長線上で「一律InnoDBというのは言い過ぎな印象を受けるパフォーマンス差に感じる」ということを書いてしまっていますが、その後色々と勉強した結果、特定箇所のニッチなベンチマークではなく一般的な運用上の負荷を焦点にした場合はInnoDBは適切に設定しておれば十分にパフォーマンスがある(もしくはInnoDBの方が有利)というのが現在の意見です。 「MyISAM InnoDB」で検索するとあちらこちらであるように、今時は理由がなければInnoDB、ということでMyISAMのテーブルをいくつかInnoDBに変更したところ、かなりパフォーマンスが落ちるケースがあった。 InnoDBにしたら軒並み遅くなったと

    参照と更新が頻繁に発生するテーブルでMyISAMとInnoDBを比較 - cloned.log
  • MySQLのパーティショニングで必要そうな工夫 - cloned.log

    MySQL 5.1のパーティショニングを試してみた。マニュアルはMySQL :: MySQL 5.1 リファレンスマニュアル :: 15 パーティショニングを参照のこと。試してみた環境は、MacのParallels Desktop上のCentOS 5。 まずはMySQL 5.1をソースからインストール。マニュアルには次のように書かれている。 ソースからコンパイルする場合には、--with-ndbcluster、--with-partitionオプションとともにconfigureを実行して下さい。 MySQL :: MySQL 5.1 リファレンスマニュアル :: 15 パーティショニング この通りにすると、ここの記載のように非推奨オプションだと言われてしまうので、--with-pluginsを使って指定するようにした。今回の味見configureオプションは次の通り。 ./configur

    MySQLのパーティショニングで必要そうな工夫 - cloned.log
    aki77
    aki77 2009/05/08
    5.1
  • 携帯GPSの基礎知識たち - cloned.log

    最近、モバイルサイトの位置情報登録を実装をしなくてはならなかったので、Webで調べたり同僚に質問したりして分かったこととかをメモ。 GPS グローバル・ポジショニング・システム - Wikipediaを読むと面白い。モバイルサイトの場合、簡単に言えば、緯度・経度といった位置情報をGPS衛星を使って測定した上で、その値をパラメータに付けて指定したURLにリダイレクしてくれる。パラメータとして受け取った値を使って地名に紐付けるなどして利用することができる。 測地系(datum) 緯度・経度の測定基準点をどうするのかという違いがあって、モバイルだと、世界測地系(WGS84)と日測地系(Tokyo)と日測地系2000(JGD2000)を知っておくと良い。 緯度・経度(latitude, longitude) 緯度・経度はどのように表記されるのか。ISO 6709 - Wikipediaにある一

    携帯GPSの基礎知識たち - cloned.log
  • Firefoxでz-indexを使うとフォームのカーソルが描画されなくなる問題 - cloned.log

    <html> <head> <style type="text/css"> #back { position: absolute; top: 20; left: 20; width: 500px; height: 500px; overflow: auto; z-index: 50; } #front { position: absolute; top: 20; left: 20; z-index: 100; } </style> </head> <body> <div id="back"></div> <div id="front"> <input type="text" value="Hello"> </div> </body> </html> z-indexを使うときの問題。上のHTMLコードをFirefoxで見る(再現HTMLはこちらで)とわかるけれど、テキストフィールドのカーソル

    Firefoxでz-indexを使うとフォームのカーソルが描画されなくなる問題 - cloned.log
  • PHPでGeoIPを使えるようにする(インストール手順など) - cloned.log

    PECL :: Package :: geoip IPアドレスから国や地域を取得するのに利用できるPECLのGeoIP関数がstableになった。 以前にも使っていた時期があったけれども、かなり放置していたので、もう一度最初から入れなおしてみた。ということで、インストール手順などをメモ。 詳しくは、PHP: GeoIP 関数 - Manualを参考に。 GeoIP C ライブラリ $ cd ~/download $ wget http://www.maxmind.com/download/geoip/api/c/GeoIP-1.4.2.tar.gz $ cp GeoIP-1.4.2.tar.gz /usr/local/src/ $ cd /usr/local/src $ tar zxvf GeoIP-1.4.2.tar.gz $ cd GeoIP-1.4.2 $ ./configure $

    PHPでGeoIPを使えるようにする(インストール手順など) - cloned.log
    aki77
    aki77 2007/08/21
    「IPアドレスから国や地域を取得するのに利用できるPECLのGeoIP関数」
  • PHPのelseifとelse ifの違い - cloned.log

    2018/12/28追記 この記事は2007年に書いたものです。現在は PSR-2: Coding Style Guide - PHP-FIG に従うことが多く elseif を利用するのが一般的だと思います。 Javaの次にPHPを学んだせいというか、最近PHPのソースを見たときにelseifがあって違和感に感じることがあった。 PHPでは、(単語二つで)'else if'と書くこともできます。 動作は(一単語の) 'elseif'と同じです。文法的な意味はやや異なっています。 (あなたが C 言語に詳しいとすると、C 言語のそれと同じ動作です。) しかし、最終的な両者の動作は全く同じです。 PHP: elseif - Manual となっているようにどちらでもちゃんと動く。挙動は同じと書いてあるので疑うことはないにしても「文法的な意味はやや異なっています」と言われると気になる。 そもそ

    PHPのelseifとelse ifの違い - cloned.log
    aki77
    aki77 2007/05/21
  • prototype.jsのbindを理解する - cloned.log

    prototype.js使っていてうれしいことの一つにbindが使えるというのがある。$()とかAjaxのクロスブラウザ対策とかもいいけれど、thisをbindできるのは大きなメリットだと思う。bindがないとどういう時に苦労するかというと、以下のような場面。 var Foo = function(name) { this.name = name; } Foo.prototype.talk = function(message) { alert(this.name + ": " + message); } function inScope() { var foo = new Foo("foo"); setTimeout('foo.talk("Hello World!")', 0); } inScope(); これは実行できない。なぜかというとsetTimeoutに渡しているfooという変数

    prototype.jsのbindを理解する - cloned.log
  • 1