godanism さん プロフィール

  •  
godanismさん: 明滅するプログラマの思索
ハンドル名godanism さん
ブログタイトル明滅するプログラマの思索
ブログURLhttp://lab.loose-leaf.com
サイト紹介文日々の気づきをまとめます
参加カテゴリー
更新頻度(1年)情報提供35回 / 126日(平均1.9回/週) - 参加 2017/07/19 16:43

godanism さんのブログ記事

  • PHPでゲームのフラグを管理する1つの手法
  • ゲーム開発をすると、様々なフラグを管理しなくてはいけない場面が出てきます。特定のイベントをクリアしているかどうか、イベントアイテムを持っているかどうか、特定の操作を行っているか…、さまざまな条件を用意し、スイッチを切り替えることでダイナミックな進行を表現できるようになるのです。フラグの管理はどのようにするのが良いでしょうか。RDBを利用して、正規化されたフラグを1つ1つ丁寧に格納するのも方法ではあるで [続きを読む]
  • Console CommandLine を使って汎用的なコマンドを作る
  • PHP の PEAR にはConsole_CommandLineというライブラリが公開されています。Console_CommandLineはPHPでコマンドライン型のアプリケーションを作成するためのライブラリで、引数やオプションを手軽に利用したり、出力時の強調機能、ヘルプ出力機能などを含んでいます。今回は、Console_CommandLineを利用して、引数により処理を切り替えられる汎用的なコマンドの実装を行ってみます。目標としては、以下のような状況を考えます。コ [続きを読む]
  • コマンドラインでPHPを実行した際の error_log() の挙動
  • PHPにはerror_log()という関数があります。error_log() は、エラー時のメッセージを明示的に出力するための関数です。error_log("エラーが発生しました");上記のように使用します。error_log() コール時、WEBサーバ経由でPHPを実行していれば、WEBサーバに設定したエラーログファイルに追記されます。では、コマンドラインからPHPを実行した場合、error_log() はどこにエラーメッセージを出力するでしょうか。php.ini に設定されて [続きを読む]
  • logwatch のファイル出力が実行されない場合の対処
  • CentOS7 で logwatch を使用し、結果をファイルに出力する場合、手動では以下のコマンドを実行することになります。logwatch --output file --filename CentOS6 までは以下の書き方でした。logwatch --save 正直、CentOS6 までのコマンドのほうが簡潔で好きですが、--output stdout(標準出力)に対応するため、仕方のない変更だったのでしょう。なお、ファイル出力を crond で実行する場合、/etc/logwatch/conf/logwatch.confの記述 [続きを読む]
  • composer を使おう
  • composer とは、PHPのライブラリを依存パッケージごと管理するツールです。これまでにも PHP のライブラリツールとしては PEAR がありましたが、現在では composer でインストール可能なものはこちらで管理する流れが出来上がっています。今回は今更ですが composer を導入するための手順についてまとめます。導入環境 ソフトウェア バージョン CentOS 7.3 PHP 5.6 composer のインストールcomposer の本体をインストールする [続きを読む]
  • PHP で Yahoo!ID連携v2 の認証を行う
  • Yahoo!ID連携は現在 v2 と呼ばれるバージョンで OpenId 認証が可能です。それまで使用されていた v1 は今年の3月以降、新規の登録が不可能となりました。Yahoo!ID連携v1 は、PHPのSDKが用意されており、実装が楽になっていますが、v2 では Javascript SDK があるのみで、その他の言語の SDK は用意されていません。ただ、OpenId Connect 準拠となっていることから、サードパーティの認証ロジックをほぼ変更することなく実装が可能 [続きを読む]
  • PHPのMediaInfoパッケージを利用してHLS用に動画分割する
  • HTTP Live Streaming を実装する際、もともとの動画ファイルを分割し、プレイリストファイル(m3u8)を作成する必要があります。HLS(HTTP Live Streaming) を構築する - 明滅するプログラマの思索で分割する流れをまとめてありますが、今回はこれをPHPで自動化します。導入環境 ソフトウェア バージョン CentOS 6.8 PHP 5.6 MediaInfo インストールまずはさまざまなメディアファイルの情報を取得できるツールmediainfoをインス [続きを読む]
  • Google Cloud Platform の負荷分散に Let's Encrypt のSSL証明書を設定する
  • Google Cloud Platform(以下 GCP)で利用可能なロードバランサでフロントをSSLにするために Let’s Encrypt を利用することができます。この件については、以下の参照先が大変参考になります。qiita.comここでは、参照先の内容を踏まえて気を付けるべき点と、自動化するための設定をまとめます。気を付ける点フロントエンドのIPはエフェメラルにしてはいけない参照先でも触れられていますが、フロントエンドのIPはエフェメラル [続きを読む]
  • Apache ユーザに別のユーザとして処理を実行させる
  • Apacheで立てた Web サーバにリクエストを送り、それをトリガとしてサーバ上で操作を行う場合、その実行ユーザはデフォルトでは apache ユーザとなります。これだと、そのファイルのユーザ・権限によっては、アクセス権がなく実行に失敗してしまうことが考えられます。もちろんアクセス権を事前に変更しておき、apache ユーザでも処理を行うことができるようにする、というのも1つの方法ではありますが、そういった処理をしたくな [続きを読む]
  • Postfix を利用して外部の qmail サーバからメールを送信する
  • Google Compute Engine は、Google の制約によりメール送信が行えません。すなわち、SMTP(25番ポート)・SMTPS(465番ポート)・Submission(587番ポート)が閉じられています。メールを送信する場合、サードパーティのメール送信ツール SendGrid を利用するよう推奨されています。ここでは SendGrid を使わずに、自分で別のサーバにメールサーバ qmail を立て、そこを経由してメール送信を行えるようにしてみます。導入環境GCE側 ソフ [続きを読む]
  • Nginx のリバースプロキシを利用し PHP 処理を Apache で行う
  • Nginx のシェアが堅調に伸びているようです。Apache と違い、静的なコンテンツを大量にさばくのに適した Web サーバですが、サーバサイドスクリプトを実行する場合はちょっとしたテクニックが必要となります。PHP の場合、php-fpm を起動し UNIXドメインソケット経由で実行させる方法があります。この方法の場合、ファイルベースでセッションを管理しようとすると、格納先(デフォルトだと /var/lib/php/session)のアクセス権をフル [続きを読む]
  • jQuery で画面を暗転させる
  • 画面の遷移やなんらかの効果を実装する際、いったん画面を暗転させて処理を施したいとします。その場合、jQuery では以下のようなコードで実現できます。暗転・明転html>head>head>body>div id="blackout">div>body>html>まず、暗転用の div 要素を用意します。CSS で画面いっぱいに広げ、非表示としておきます。div#blackout { display:none; position:absolute; top:0; left:0; width:100%; height:100%; o [続きを読む]
  • ps ax|grep コマンドで自分自身を除く
  • ps コマンドと grep コマンドを使って、実行中のプロセスを確認するとき、結果にその実行コマンドも含まれてしまいます。たとえば、httpd プロセスを確認するとき、以下のように書きますが、$ ps ax|grep httpd 1468 ? Sl 1:11 /usr/sbin/httpd 1469 ? Sl 1:05 /usr/sbin/httpd 1470 ? Sl 1:13 /usr/sbin/httpd 1471 ? Sl 1:05 /usr/sbin/httpd 1472 ? Sl 1:06 /usr/sbin/ [続きを読む]
  • HLS(HTTP Live Streaming) を構築する
  • HLS とはApple が開発した動画ストリーミングのためのロジックです。主にSmartphone向け、iPhone / Android3.0 以上で動作します。PCではデフォルトでは再生できませんが、Javascriptベースの再生可能なプレイヤーは開発されています。特別なサーバを必要とせず、Webサーバがあれば実装可能です。要はお手軽なストリーミングサーバ!導入環境 ソフトウェア バージョン CentOS 6.8 Apache 2.2.15 導入にあたって必要なものは、 [続きを読む]
  • ディレクトリ内のファイルを一覧表示する
  • PHPを利用して、サーバ上の特定ディレクトリ内のファイルを一覧表示するスクリプトを書いてみます。実装条件 ソフトウェア バージョン PHP 5.6.30 // 特定ディレクトリを定義define('DIR', '');$files = [];$dir_handle = opendir(DIR);while(false !== ($entry = readdir($dir_handle))) { if ($entry == "." || $entry == "..") { continue; } if (is_dir(DIR.$entry)) { continue; } $files[] = $entry;}foreach [続きを読む]
  • jQuery における context の役割
  • jQuery には context という名のプロパティ、オプションがあります。今回はこれの役割についてまとめてみます。context とは日本語にすると「文脈」とか「前後関係」なんて訳されます。jQuery の中では、「関連付け」というような意味の役割を持っています。.context$() などで生成された jQuery オブジェクトが、範囲対象として保持している DOM ノードを参照します。$('#hoge').context.nodeName;上記のコードでは、$('#hoge') [続きを読む]
  • クラス内 static プロパティについてまとめ
  • PHP のクラスが持つプロパティ(メンバ変数)には、static 修飾子を付けることができます。class A{ public static $HOGE = 'hoge';}static 修飾子をつけたプロパティとそうでないプロパティは、何が違うのでしょうか。実装条件 ソフトウェア バージョン PHP 5.6.30 プロパティはインスタンスごとに初期化される通常、クラスが持つプロパティはインスタンスごとにメモリが割り当てられます。同じクラスから複数のインスタンス [続きを読む]
  • 画像をHTMLに直接埋め込む方法
  • HTMLで画像を表示する場合、タグを使用します。このとき、画像のバイナリデータが取得できるな
    ら、以下のように書くことができます。$mime_type = 'image/jpeg';$image_data = base64_encode(file_get_con
    tents("request-t.jpg"));$img_tag = EOFimg src="data:$mime_type;base64,$image_data" />EOF;画像の MIME TY
    PE を $mime_type、バイナリデータを格納している変数 $image_data を base64_encode() 関数でエンコーディ
    ングし [続きを読む]
  • PHPで require_once / require を使わずにクラスをロードする
  • PHP でファイルを読み込む際 require_once や require を使うことになりますが、読み込むファイルが膨大になると大量の require_once / require を記述しなくてはいけなくなります。spl_autoload_register() を使うと、読み込まれていないクラスをコールした際にこちらに登録されているメソッドが呼ばれるので、救済的なロジックを記述することができます。さらに名前空間を最適に運用することで、少ない労力でクラスファイルのオ [続きを読む]
  • 確率による重みづけをしてn個のものを取り出す
  • X種類のフルーツ中からランダムにn種類取り出す場合、PHPなら mt_rand() などの関数を使えばすぐに
    実装可能です。実装条件 ソフトウェア バージョン PHP 5.6.30 $X = [ 'orange', 'apple',
    'banana', 'melon', 'pear', 'pineapple'];$n = 3; // 3種類取り出す場合$result =
    [];for ($i = 0; $i $n; $i++) { $key = mt_rand(0, count($X) - 1); $result[] = $X[$key]; array_splice($X, $key, 1);}print_r($re
    sult);fo [続きを読む]
  • 親ウィンドウのhtml要素・関数を操作する
  • Javascript の window.open() 関数を利用して開いた子ウィンドウ上で、親ウィンドウ上の html要素を操作する方法です。Javascript での記述Javascript では次のように記述すれば可能です。script>// 親ウィンドウの id=hoge 要素の value 属性を変更するobj = window.opener.document.getElementById('hoge');obj.value = '変更する';script>jQuery での記述jQuery ではどのようにすればよいかというと、やはり同じですね。script> [続きを読む]
  • data属性で JSON データを管理する
  • Javascript では JSON データを簡単に扱うことができます。今回の記事では、ページ内の一時的な情報を JSON オブジェクトとしてキャッシュし、それを HTML5 の data 属性で管理してみます。実装条件 ソフトウェア バージョン jQuery 2.2.4 Browser Chrome コードhtml lang="en">head> meta charset="UTF-8"> title> JSON データを data属性で管理するtitle> script src="http://code.jquery.com/jquery-2.2.4.min.js">scrip [続きを読む]