<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>はと学習帳</title>
    <description>東京・赤坂のシステム開発会社プラムザで働く、プログラマーの学習記録。</description>
    <link>https://procyon.iku4.com/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>PHP-5.6.9のコンパイル</title>
      <description>&lt;h2&gt;依存パッケージのインストール&lt;/h2&gt;
&lt;div class=&quot;example&quot;&gt;
&lt;pre&gt;$ sudo yum install \
    gcc.`uname -i` \
    libxml2-devel.`uname -i` \
    httpd-devel.`uname -i` \
    openssl-devel.`uname -i` \
    libjpeg-turbo-devel.`uname -i` \
    libcurl-devel.`uname -i` \
    libpng-devel.`uname -i` \
    libmcrypt-devel.`uname -i` \
    mysql-devel.`uname -i` \
    readline-devel.`uname -i`
&lt;/pre&gt;
&lt;/div&gt;
&lt;h2&gt;PHPのコンパイル&lt;/h2&gt;
&lt;div class=&quot;example&quot;&gt;
&lt;pre&gt;$ cd /usr/local/src
$ sudo curl -L http://jp1.php.net/get/php-5.6.9.tar.bz2/from/this/mirror -o php-5.6.9.tar.bz2
$ sudo tar xvjf php-5.6.9.tar.bz2
$ cd php-5.6.9
$ sudo ./configure \
    --with-apxs2             \
    --with-libdir=lib64      \
    --disable-cgi            \
    --with-openssl=shared    \
    --with-zlib=shared       \
    --with-curl=shared       \
    --enable-ftp=shared      \
    --with-gd=shared         \
    --with-jpeg-dir          \
    --with-png-dir           \
    --enable-gd-native-ttf   \
    --enable-mbstring=shared \
    --with-mcrypt=shared     \
    --with-mysql=shared      \
    --with-mysqli=shared     \
    --with-pdo-mysql=shared  \
    --with-pdo-sqlite=shared \
    --enable-zip \
    --with-readline

$ sudo make
$ sudo make test
$ sudo make install
&lt;/pre&gt;
&lt;/div&gt;
※PHP-5.4以降廃止されたオプション
&lt;div class=&quot;example&quot;&gt;
&lt;pre&gt;--enable-sqlite-utf8
--enable-zend-multibyte
&lt;/pre&gt;
&lt;/div&gt;
&lt;h2&gt;備考&lt;/h2&gt;
5.3系から5.4系にかけてオプションの廃止があったものの、それ以降主要なオプションの変更はなかった。&lt;br /&gt;
※その他の細かなモジュールのオプションについては未確認。&lt;br /&gt;
&lt;br /&gt;
PHPのコンパイルに必要なライブラリ類(yumのパッケージ)の名前が一部変更になっていた。
&lt;div class=&quot;example&quot;&gt;
&lt;pre&gt;libjpeg-devel -&amp;gt; libjpeg-turbo-devel
curl-devel -&amp;gt; libcurl-devel
&lt;/pre&gt;
&lt;/div&gt;</description> 
      <link>https://procyon.iku4.com/php/19_php-5.6.9</link> 
    </item>
    <item>
      <title>Laravel4.2 データベースのトランザクション</title>
      <description>Laravelでデータベースのトランザクションを使用する場合、二つやり方がある。
&lt;h2&gt;1. クロージャの中に処理を記述する。&lt;/h2&gt;
&lt;pre class=&quot;brush:php&quot;&gt;DB::transaction(function()
{
    $row = App::make('DbTable')-&amp;gt;find(1);
    $row-&amp;gt;value = 'hoge';
    $row-&amp;gt;save();
});
&lt;/pre&gt;
&lt;p&gt;良い点: なんとなく直感的。&lt;/p&gt;
&lt;p&gt;悪い点: クロージャーの中に値を渡すのが面倒。&lt;/p&gt;
&lt;i&gt;use($var) で渡す変数をオブジェクトなり、配列なりにして必要な値を全てまとめれば良いような気もする。そもそも、クロージャーの使い所がいまいち理解できていない。&lt;/i&gt;
&lt;h2&gt;2. トランザクションの開始と終了をメソッドで宣言する。&lt;/h2&gt;
&lt;h3&gt;トランザクションの開始&lt;/h3&gt;
&lt;pre class=&quot;brush:php&quot;&gt;DB::beginTransaction();
&lt;/pre&gt;
&lt;h3&gt;トランザクションをコミットする。&lt;/h3&gt;
&lt;pre class=&quot;brush:php&quot;&gt;DB::commit();
&lt;/pre&gt;
&lt;h3&gt;トランザクションをロールバックする。&lt;/h3&gt;
&lt;pre class=&quot;brush:php&quot;&gt;DB::rollback();
&lt;/pre&gt;
&lt;h3&gt;例)&lt;/h3&gt;
&lt;pre class=&quot;brush:php&quot;&gt;DB::beginTransaction();

try {
    $row = App::make('DbTable')-&amp;gt;find(1);
    $row-&amp;gt;value = 'hoge';
    $row-&amp;gt;save();
    DB::commit();
} catch (Exception $e) {
    Log::error($e);
    DB::rollback();
}
&lt;/pre&gt;
&lt;p&gt;良い点: 柔軟に記述できる。&lt;/p&gt;
&lt;p&gt;悪い点: 明示的に記述しなければいけないのが若干面倒。&lt;/p&gt;</description> 
      <link>https://procyon.iku4.com/laravel4/18</link> 
    </item>
    <item>
      <title>PHP5.4:無名関数をインラインで実行する方法</title>
      <description>jsでは次のように記述することで、インラインで無名関数を実行できる。 これと同じような事がPHPでもできるのか調べてみた。 PHPでもインラインで実行できるけれど、jsのような省略記法には対応していない事が分かった。
&lt;pre class=&quot;brush:plain&quot;&gt;(function() { /* ... */ })();
&lt;/pre&gt;
&lt;h2&gt;その1&lt;/h2&gt;
少しややこしい
&lt;pre class=&quot;brush:php&quot;&gt;current([function($var1, $var2) {
    var_dump($var1);
    var_dump($var2);
}])-&amp;gt;__invoke($a, $b);
&lt;/pre&gt;
&lt;h2&gt;その2&lt;/h2&gt;
一つ目のやり方よりもシンプル
&lt;pre class=&quot;brush:php&quot;&gt;call_user_func(function($var1, $var2) {
    var_dump($var1);
    var_dump($var2);
}, $a, $b);
&lt;/pre&gt;</description> 
      <link>https://procyon.iku4.com/php/17</link> 
    </item>
    <item>
      <title>Laravel4.2:セッションの設定</title>
      <description>&lt;span style=&quot;font-size: large;&quot;&gt;セッションの設定は app/config/session.php で行う。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 14px;&quot;&gt;他の設定ファイルと同様、連想配列が定義されている。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;strong&gt;lifetime&lt;/strong&gt;&lt;/span&gt; &lt;em&gt;(数値[分単位])&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
セッションの有効期限。デフォルトは &quot;120分&quot;&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;expire_on_close&lt;/span&gt;&lt;/strong&gt;&lt;em&gt;&lt;span style=&quot;font-size: large;&quot;&gt; (true/false)&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
ブラウザを閉じた時にセッション破棄するかどうか。デフォルトは &quot;false&quot;&lt;br /&gt;
基本はtrueに設定し、必要であればfalseにする。&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;files&lt;/span&gt;&lt;/strong&gt;&lt;em&gt;&lt;span style=&quot;font-size: large;&quot;&gt; (path/to/session_files)&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
セッションファイルを保存するパス。デフォルトは &quot;app/storage/sessions&quot;&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;secure&lt;/span&gt;&lt;/strong&gt;&lt;em&gt;&lt;span style=&quot;font-size: large;&quot;&gt; (true/false)&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
CookieにSecure属性を指定する。デフォルト値は &quot;false&quot;&lt;br /&gt;
&lt;br /&gt;
※環境ごとに設定を変える場合は、&lt;strong&gt;app/config/【環境ごとのフォルダ】/session.php&lt;/strong&gt; に個別の設定を記述する。</description> 
      <link>https://procyon.iku4.com/laravel4/16</link> 
    </item>
    <item>
      <title>年度の開始日を求めるメソッド・関数の命名をどうする？</title>
      <description>&lt;p style=&quot;font-weight: bold;&quot;&gt;「閲覧当日の時点で、特定の生徒が年度内に特定のコンテンツを複数回閲覧しているかどうか、閲覧履歴の作成日を見て判定する。&quot;年度内&quot;の判定は、直近の年度開始日以降（閲覧当日よりも前にある日付）の日付を計算して行う」&lt;/p&gt;
最近上記のような処理を実装する機会があった。実装当初は、次の２つの処理を一つのメソッドにまとめようとしていた。
&lt;div class=&quot;example&quot;&gt;&lt;ol style=&quot;font-weight: bold; padding: 10px;&quot;&gt;
&lt;li&gt;今日の日付から年度の開始日を算出する処理&lt;/li&gt;
&lt;li&gt;履歴が年度内かどうか判定する処理&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;p&gt;１つ目の処理については汎用的に使いまわす可能性があり、何よりもメソッド内が複雑になりそうだと感じ、処理を別の関数とメソッドに切り出す事にした。二つ目の処理はさておき、「今日の日付から年度の開始日を算出する処理」の関数の命名ではまった、というか悩んだ。&lt;/p&gt;
&lt;p&gt;次に年度の開始日を求めるメソッドをクラスに定義するにあたり、メソッド名をいくつか候補に挙げてみた。&lt;/p&gt;
&lt;div class=&quot;example&quot;&gt;isWatchedWithinStudentYear()&lt;br /&gt;
getNendStartDate()&lt;br /&gt;
getSchoolYearStartDate()&lt;br /&gt;
fetchSchoolYearStartDate()&lt;/div&gt;
&lt;p&gt;自身の英語力が貧弱という事もあり、しっくりくる名前が思い浮かばない。&lt;br /&gt;
&lt;br /&gt;
少し悩んでから、そもそも「年度内〜」という単語に意識が引きずられている事に気づいた。&lt;br /&gt;
期間を算出する処理なので、この処理自身が年度の概念を知っている必要はない。なので、「直近の過去で一番近くに「指定した月」に該当する年月」を取得する、とだけ考えると役割をシンプルに捉えられそうだと思い至った。それでも、ややこしい気がするけれども、「年度」という言葉を排除するだけでも随分印象はさっぱりする。&lt;br /&gt;
&lt;br /&gt;
最終的に、クラスには定義せず、&quot;findMostRecentDate()&quot; という関数を定義した。「最も直近の日付」といった意味になるだろう。おそらく。&lt;br /&gt;
本当は「前の」「過去の」といった意味合いも含めるべきかもしれないけれど、適切な表現が思い浮かばなかったので省略し、用例をコメントに含めて関数の挙動を説明することにした。&lt;/p&gt;
&lt;br /&gt;
以下に今回実装した関数を記しておく。
&lt;pre class=&quot;brush:php&quot;&gt;/**
 * 指定した日付($date)から過去に遡って、基準月($month_cond)が最初に登場する年月を返す
 * 例) findMostRecentDate('2014-05-11',  4) -&amp;gt; 2014-04-01
 *     findMostRecentDate('2014-03-01',  4) -&amp;gt; 2013-04-01
 *     findMostRecentDate('2017-11-24', 10) -&amp;gt; 2017-10-01
 *     findMostRecentDate('2015-01-01', 10) -&amp;gt; 2014-10-01
 *
 * @param string $date YYYY-MM-DD形式の日付
 * @param int $month_cond 基準月
 */
function findMostRecentDate($date, $month_cond)
{
    if (!$date || !$month_cond) return null;
    $ts = strtotime($date);
    $year = date('Y', $ts);
    $c = 3; //適当なところで抜ける
    while($c&amp;gt;0) {
        //    mktime(hour,  min,  sec,       month,day, year );
        $ts = mktime(null, null, null, $month_cond,  1, $year);
        $recent = date('Y-m-01', $ts);
        if ($recent &amp;lt; $date) return $recent;
        $year--;
        $c--;
    }
    return null;
}
&lt;/pre&gt;</description> 
      <link>https://procyon.iku4.com/php/15_find_most_recent_date</link> 
    </item>
    <item>
      <title>Laravel4.2: ストレージエンジンを指定しよう！</title>
      <description>DBにMySQL（テーブルごとにストレージエンジンを切り替えるDB全般？）を用いる場合、&lt;br /&gt;
カラムの定義だけでなくストレージエンジンの指定も行う必要があります。&lt;br /&gt;
ストレージエンジンの指定を行わない場合、テーブルがどのストレージエンジンで作成されるかどうかはサーバの環境（MySQLのバージョンや、MySQLのコンフィグ)に左右されてしまいます。&lt;br /&gt;
ストレージを指定するには次のように、Blueprintオブジェクトのプロパティにストレージを指定します。&lt;br /&gt;

&lt;pre class=&quot;brush:php&quot;&gt;Schema::create('t_action', function(Blueprint $table) {
     $table-&amp;gt;engine = 'InnoDB'; //もしくはMyISAM

	 //...その他カラム定義など
});
&lt;/pre&gt;
ストレージエンジンの設定をミスしていても割と気づかない事が多いので、&lt;br /&gt;
マイグレーションを実行する時点できちんと設定しておきたいですね。</description> 
      <link>https://procyon.iku4.com/laravel4/14</link> 
    </item>
    <item>
      <title>lastコマンド</title>
      <description>lastコマンドは、サーバ上のログイン履歴を新しい順に表示します。 &lt;br /&gt;
次に示す例では、最新10件分のログイン履歴を出力します。&lt;br /&gt;

&lt;pre class=&quot;brush:plain&quot;&gt;$ last -n 10
&lt;/pre&gt;
&lt;h3&gt;出力内容&lt;/h3&gt;
&lt;div class=&quot;example&quot;&gt;
&lt;pre&gt;ユーザ名  端末名  接続ホスト情報    日時              接続時間
user1     pts/27  192.168.0.81      Wed Dec 10 15:45  still logged in
user1     pts/26  192.168.0.81      Wed Dec 10 14:24  still logged in
user2     pts/25  192.168.0.16      Wed Dec 10 11:30  still logged in
user1     pts/24  192.168.0.81      Wed Dec 10 11:21  - 16:08 (04:46)
hato      pts/14  :pts/23:S.0       Wed Dec 10 11:02  still logged in
hato      pts/20  :pts/23:S.1       Wed Dec 10 11:02  still logged in
hato      pts/21  :pts/23:S.2       Wed Dec 10 11:02  still logged in
hato      pts/23  192.168.0.8       Wed Dec 10 11:02  still logged in
user3     pts/22  :pts/10:S.7       Wed Dec 10 10:41  still logged in
user3     pts/1   :pts/10:S.0       Wed Dec 10 10:41  still logged in

wtmp begins Thu Nov 13 04:00:13 2014
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;接続元ホスト情報が、&quot;hato pts/23&quot; となっている行はSSHログインセッションの情報です。&lt;br /&gt;
これにぶら下がる形で、 &quot;pts/14&quot; &quot;pts/20&quot; &quot;pts/21&quot; というセッションの記録があります。&lt;br /&gt;
(※pts/23としてログインした後、screenというコマンドで３つ別々の端末に接続しています)&lt;/p&gt;</description> 
      <link>https://procyon.iku4.com/linux/13</link> 
    </item>
    <item>
      <title>Laravel4.2: EloquentORMのチートシート(レコードのフェッチ)</title>
      <description>※Laravel4.2系で検証&lt;br /&gt;
&lt;br /&gt;
&quot;eloquent&quot;、とは流暢に話す・流暢な文章を書くといった様子を表す形容詞です。&lt;br /&gt;
文字通り直感的に操作できる、という印象があります。&lt;br /&gt;
EloquentORMを用いてDBを操作するには、モデルでEloquentクラスを継承します。&lt;br /&gt;
前置きはさておき、Eloquentのメソッドの基本的な使い方を以下に記します。&lt;br /&gt;

&lt;h3&gt;&lt;br /&gt;
レコードのフェッチ&lt;/h3&gt;
&lt;h4&gt;全件取得&lt;/h4&gt;
&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model = new Model();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;all();&lt;/div&gt;
&lt;h4&gt;プライマリキーでfetchする&lt;/h4&gt;
&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;find(1);&lt;/div&gt;
&lt;h4&gt;条件指定&lt;/h4&gt;
&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;where('column', '&amp;gt;=', 'value')-&amp;gt;get();&lt;/div&gt;
&lt;br /&gt;
第一引数にカラム名を指定&lt;br /&gt;
第二引数に式を指定「 = &amp;gt;= &amp;lt;= &amp;lt;&amp;gt; LIKE 」&lt;br /&gt;
第三引数に値を指定&lt;br /&gt;

&lt;h4&gt;WHEREのネスト&lt;/h4&gt;
個人的に良いなと思ったのがWHEREのネストです。記述方法はシンプルで、ネストしたい条件をwhereNestedメソッドにクロージャで渡すことで実現できます。&lt;br /&gt;
&lt;br /&gt;
例えば&lt;br /&gt;

&lt;div class=&quot;example&quot;&gt;deleted = 0 AND (description IS NOT NULL OR description IS NULL)&lt;/div&gt;
というクエリーは&lt;br /&gt;
&lt;br /&gt;

&lt;div class=&quot;example&quot;&gt;$model-&amp;gt;where('deleted', '=', 0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt;whereNested(function($query) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $query-&amp;gt;whereNotNull('description');&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $query-&amp;gt;whereNull('description');&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt;get();&lt;/div&gt;
&lt;br /&gt;
このように記述することができます。&lt;br /&gt;
&lt;br /&gt;

&lt;h4&gt;BETWEEN&lt;/h4&gt;
&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;whereBetween('column', array('from', 'to'));&lt;/div&gt;
&lt;br /&gt;

&lt;h4&gt;IS NULL/IS NOT NULL&lt;/h4&gt;
&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;whereNull('column')&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;whereNotNull('column')&lt;/div&gt;
&lt;h4&gt;IN/NOT IN&lt;/h4&gt;
&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;whereIn('column', $value);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;whereNotIn('column', $value);&lt;/div&gt;
&lt;h4&gt;ORDER BY&lt;/h4&gt;
昇順:&lt;br /&gt;
&lt;br /&gt;

&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;orderBy('column')&lt;/div&gt;
&lt;br /&gt;
降順:&lt;br /&gt;

&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;orderBy('column', 'DESC')&lt;/div&gt;
&lt;h4&gt;LIMIT&lt;/h4&gt;
limit:&lt;br /&gt;
&lt;br /&gt;

&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;take(limit_counts)&lt;/div&gt;
offset:&lt;br /&gt;
&lt;br /&gt;

&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $model-&amp;gt;skip(offset_counts)&lt;/div&gt;
&lt;h3&gt;毎回指定される条件を定義&lt;/h3&gt;
モデルクラスで、scopeで始まるメソッドを定義すると、独自の条件を追加するメソッドを、特別な設定をすることなく、メソッドチェーンの中で指定することができます。 &lt;br /&gt;

&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function scopeDefaultCondition($query)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $query-&amp;gt;where(...任意の条件);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;
&lt;br /&gt;
パラメータがある場合は第二引数に指定する(マニュアル未確認)&lt;br /&gt;
&lt;br /&gt;
これは:&lt;br /&gt;
&lt;br /&gt;

&lt;div class=&quot;example&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE column_name = 'hoge';&lt;/div&gt;
&lt;br /&gt;
と同じ。他のメソッド名と衝突するカラム名の場合は使用できないようです（ある意味当然？）</description> 
      <link>https://procyon.iku4.com/laravel4/12</link> 
    </item>
    <item>
      <title>CentOS7で変わった点</title>
      <description>CentOS7になって変わっている点についていくつかまとめました。&lt;br /&gt;
これからCentOS7を触ってみる、という方は参考にしていただければと思います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;

&lt;h2 style=&quot;border-bottom: 2px #633 solid;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;■1. yum標準リポジトリの変更&lt;/span&gt;&lt;/h2&gt;
&lt;h3&gt;1-1. Apacheのデフォルトバージョンが2.2.系から2.4系に変更された&lt;/h3&gt;
&lt;div&gt;2014/12/02時点では、2.4.6がインストール可能でした。&lt;/div&gt;
&lt;div&gt;これまで、Apache2.4系をインストールする場合はソースからコンパイルする必要がありました。&lt;/div&gt;
&lt;div&gt;CentOS7以降はyumでインストールできるので便利になりましたね。&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;1-2. MySQLに代わり、MariaDBが標準のパッケージとして採用された&lt;/h3&gt;
&lt;div&gt;標準リポジトリからMySQLが消えました。そのため、yumでMySQLをインストールする場合はMySQL公式のyumリポジトリを導入するか、ソースからのコンパイルをするかの２択となってしまいました。&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;1-3. PHPのデフォルトバージョンが5.4系に変更された&lt;/h3&gt;
&lt;div&gt;2014/12/02時点では、PHP5.4.16 となっていました。&lt;/div&gt;
&lt;br /&gt;

&lt;h2 style=&quot;border-bottom: 2px #633 solid;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;br /&gt;
■2. &lt;span style=&quot;font-family: monospace;&quot;&gt;サービス管理にsystemdが採用された&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div style=&quot;font-family: monospace;&quot;&gt;現状は旧来のSysVのコマンド(/etc/init.dや、service)でもサービスの設定が可能ですが、&lt;/div&gt;
&lt;div style=&quot;font-family: monospace;&quot;&gt;一部のプログラムではすでにSysV系のコマンドでは管理できなくなっているようです。&lt;/div&gt;
&lt;div style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;

&lt;h2 style=&quot;border-bottom: 2px #633 solid;&quot;&gt;&lt;span style=&quot;font-family: monospace; font-size: x-large;&quot;&gt;■3.ファイアウォール機能に firewalld が採用された&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;個人的に気になる点は、基本的なサービスについてデフォルトの設定が用意されている点です。&lt;/div&gt;
&lt;div&gt;実際に運用してみての所感などは後日記事としてあげていこうと思います。&lt;/div&gt;</description> 
      <link>https://procyon.iku4.com/centos7/11</link> 
    </item>
    <item>
      <title>Laravel4のバリデーションの学習</title>
      <description>ここ数日、Laravel4.2を触っています。&lt;br /&gt;
今回はバリデーションについて備忘も兼ねてブログに書いてみます。 &lt;br /&gt;
&lt;br /&gt;

&lt;h3&gt;バリデーションのルールと、カスタムエラーメッセージを設定&lt;/h3&gt;
対象をキーとして指定、値にルールを半角パイプ「|」で区切って記述します。&lt;br /&gt;
バリデーションのオプションを半角コロン「:」で区切って指定できます。&lt;br /&gt;

&lt;pre class=&quot;brush:php&quot;&gt;$rules = [
    'email' =&amp;gt; 'required|email|unique:users,email',
    'password' =&amp;gt; 'min:8',
];
&lt;/pre&gt;
デフォルトで英語のエラーメッセージが出力されます。&lt;br /&gt;
デフォルトのメッセージで都合が悪い場合は 次のように指定します。&lt;br /&gt;

&lt;pre class=&quot;brush:php&quot;&gt;$messages = [
    'required' =&amp;gt; ':attribute は必須項目です。',
    'unique' =&amp;gt; ':attribute に使用済みの値が指定されました。',
    'min' =&amp;gt; ':attribute は :min文字以上入力してください。',
];
&lt;/pre&gt;
&lt;br /&gt;

&lt;h3&gt;バリデーション実行&lt;/h3&gt;
&lt;pre class=&quot;brush:php&quot;&gt;//入力値を取得
$input_params = Input::all();
//バリデーション
$validator = Validator::make($user_inputs, $rules, $messages);
//バリデーションエラーの有無を確認
if ($validator-&amp;gt;fails()) {
    //エラーをフラッシュセッションにセットして、入力画面に戻る・・・・
    Redirect::to('path/to/input')-&amp;gt;withErrors($validator);
}
&lt;/pre&gt;
&lt;br /&gt;

&lt;h3&gt;エラーメッセージの表示&lt;/h3&gt;
リダイレクト先の画面のビューにエラー内容の配列が &quot;$errors&quot; という変数に自動でセットされます。&lt;br /&gt;
ビューでエラーを表示する場合は次のように記述しますす。項目ごとに個別に出すこともできますが、ここでは割愛します。
&lt;pre class=&quot;brush:php&quot;&gt;@foreach ($errors-&amp;gt;all() as $message)
{{{$message}}}
@endforeach
&lt;/pre&gt;
&lt;br /&gt;
バリデーションの優先順や、条件をAND・ORで分岐させる方法などは別の機会にまた改めて調べてみようと思います。</description> 
      <link>https://procyon.iku4.com/laravel4/9</link> 
    </item>

  </channel>
</rss>