godanism さん プロフィール

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

godanism さんのブログ記事

  • 過去の記事 …
  • 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 [続きを読む]
  • qmail で特定のメール送信に失敗する問題
  • 古いネタです。メールサーバとして qmail を利用している環境において、特定のメール送信に失敗することがあります。そのとき、クライアント側に帰ってくるエラーに451 See http://pobox.com/~djb/docs/smtplf.html.が含まれている場合、Bare LFs 問題と呼ばれる qmail のバグである可能性が高いです。現象Bare LFs 問題の特徴として以下が挙げられます。特定のメールの送信に失敗するほかのメールは送信に成功するMTA が qmailmai [続きを読む]
  • PHP でウィザード形式のページ遷移を実現する trait
  • Wizard とはウィザードとは、対話形式で遷移を踏みつつ処理を進めさせるためのユーザインターフェイスのことです。ウェブでは、複数ページにまたがるフォームなどで実装されています。ウィザードを実装するためには、遷移途中の入力データや今どのページを参照しているのかのステップ情報を保持しておいて、最終的にデータベースなどにコミットするような仕組みを用意する必要があります。今回はウィザードを簡単に実装するために [続きを読む]
  • 背景色に対する文字色を明度の差で動的に決定する
  • 背景色を動的に変更したい、そのうえで、文字も見えづらくならないように動的に変更したい、という場合があるとします。たとえば、とある表があって、各セルの背景色を任意に指定できる場合、文字色も併せて変更しないと、文字がつぶれて見えなくなってしまったりします。こういった場合に、背景色を基に文字色を決定できれば良いと考えます。明度W3C草案には、読みやすいHTMLを作成する指針として、背景色と文字色の明度の差は125 [続きを読む]
  • PC と Smartphone で共有のクリック時イベントを実装する
  • jQuery を使って、ある要素を したときのイベントを実装する場合、PC と Smartphone で同じ挙動を実装しようとすると、ちょっとした問題にぶつかります。それは、イベントハンドラを何にすればよいか?という問題です。PC 向けであれば click イベントを使用すれば問題ないでしょう。Smartphone 向けの場合 click はダブル の検出を行うため、平たく言えば画面から指を離した後に発火します。非常にもっさりとした動 [続きを読む]
  • Client aborts on SNI unrecognized_name warning の サーバ側での対処
  • 1つの Web サーバで複数の SSL サイトを運用する際、SNI(Server Name Indication)という拡張仕様を利用することが一般的になっています。名前ベースで SSL のバーチャルホストを管理するということなのですが Apache では2.2.12以降において設定が可能となりました。現在ではほとんどのクライアントが SNI 対応済みとなっています。Java1.7 以降で実装したクライアントにおいて、SNI の設定にミスがある Web サーバへリクエストを [続きを読む]
  • Client aborts on SNI unrecognized_name warning の サーバ側での対処
  • 1つの Web サーバで複数の SSL サイトを運用する際、SNI(Server Name Indication)という拡張仕様を利用することが一般的になっています。名前ベースで SSL のバーチャルホストを管理するということなのですが Apache では2.2.12以降において設定が可能となりました。現在ではほとんどのクライアントが SNI 対応済みとなっています。Java1.7 以降で実装したクライアントにおいて、SNI の設定にミスがある Web サーバへリクエストを [続きを読む]
  • ジェネレータを利用した MySQL データの抽出
  • DBテーブル上にレコードが大量にあり、これをプログラムでループさせながら処理したい、というケースは非常に多くあります。この場合、大量にあるレコードを配列に格納することで、よく問題になるのが使用メモリの肥大化です。PHP5.5以降で実装されたジェネレータを使えば、メモリを節約しつつ大きなレコードのDBテーブルに対し SELECT できるようになります。ジェネレータとはジェネレータは、ループ処理に必要なデータを配列で持 [続きを読む]
  • HTTPレスポンスを返した後も処理を続ける方法
  • HTTPリクエストを受け取ったWEBサーバは、そのプロセスで処理をすべて実行した後にレスポンスを返却します。この処理に時間がかかることが予想されるとき(たとえば30秒でタイムアウトするリクエストで40秒かかるとか)、プロセス内で別のプロセスを起動し、処理を委譲するよう実装することが多いです。PHPであれば、以下のような感じです。/* * 時間がかかる処理を別のプロセスで実行する */system("/usr/bin/php other_process.p [続きを読む]
  • クラスにメソッドを動的に追加する trait
  • 実装済みのクラスに、あとからメソッドを動的に追加することができるようにします。実装環境 ソフトウェア バージョン PHP 5.6.30 ※ ただし trait 自体は PHP5.4 以降で利用可能コードまずは処理の核となる trait を実装します。/** * クラスにメソッドを動的に追加できるようにする trait * * @property Closure[] * */trait DynamicMethod{ static private $methods = []; static public function addMethod($name, $f [続きを読む]
  • 過去の記事 …