2015年10月31日土曜日

Ubuntu 15.10が リリース

Ubuntu 15.10が リリースされました。サーバーでは、OpenStack関連のサービスが充実した印象です。クラウド市場で、ますますシェアを伸ばしそうな気がします。



参考サイト
「Ubuntu 15.10 Wily Werewolf」をリリース--クラウドとサーバ関連の新機能は?(ZDNet Japan)

2015年10月30日金曜日

CakePHP 3のブログチュートリアル

CakePHP 3ブログチュートリアルを設定してみました。モデルの「$this->addBehavior('Timestamp');」は、DBのcreatedmodifiedの列に新規作成と編集時刻を記録してくれるものらしいです。

src/Model/Table/ArticlesTable.php(モデル)
namespace App\Model\Table;
use Cake\ORM\Table;
class ArticlesTable extends Table
{
  public function initialize(array $config)
  {
    $this->addBehavior('Timestamp');
  }
}
src/Controller/ArticlesController.php(コントローラー)
namespace App\Controller;
class ArticlesController extends AppController
{
  public function index()
  {
    $articles = $this->Articles->find('all');
    $this->set(compact('articles'));
  }
}
src/Template/Articles/index.tpl(Smartyのビュー)
{foreach from=$articles item=article} 
  <h3>{$article->title|escape}</h3>
  <p>{$article->body|escape}</p>
  <p>{$article->created|date_format:'%Y/%m/%d %H:%M'}</p>
{/foreach} 

実際に設定してみたサイトがこちら

参考サイト
Blog Tutorial(CakePHP Cookbook 3.x documentation)

2015年10月29日木曜日

CakePHP 3にSmartyを設定

CakePHP 3テンプレートエンジンのSmarty(3.1.27)を設定してみました。cakephp3-smartyviewを利用させてもらいました。快適です!

src/View/SmartyView.php(設定部分)
  $this->_smarty->compile_dir = TMP.'smarty'.DS.'compile'.DS;
  $this->_smarty->cache_dir = TMP.'smarty'.DS.'cache'.DS;
  $this->_smarty->error_reporting = 'E_ALL & ~E_NOTICE';
  $this->_smarty->debugging = false;
  $this->_smarty->caching = 0;
  $this->_smarty->clearCompiledTemplate();
src/Controller/AppController.php(SmartyViewを指定)
class AppController extends Controller {
  // viewClassにSmartyViewを指定
  public $viewClass = 'App\View\SmartyView';

}
src/Template/Layout/default.tpl(レイアウトに表示設定)
{$this->fetch('content')}


実際に設定してみたサイトがこちら

参考サイト
CakePHP3でSmartyを使う(Qiita)

2015年10月28日水曜日

CakePHP 3で、ログアウト(Logout)

CakePHP 3で、ログアウト(Logout)です。これは理解しやすいです。

src/Controller/UsersController.php
public function logout()
{
  $this->Flash->success('ログアウトしました。');
  return $this->redirect($this->Auth->logout());
}

実際に設定してみたサイトがこちら

参考サイト
Bookmarker Tutorial Part 2(CakePHP Cookbook 3.x documentation)

2015年10月27日火曜日

CakePHP 3で、ユーザー認証(Authenticate)

CakePHP 3で、ユーザー認証(Authenticate)です。コンポーネント(AuthComponent)として提供されているので、それをコントローラーのbeforeFilter()か、initialize()メソッドにロードすると、簡単に認証システムを組み込める模様。

src/Controller/AppController.php
    $this->loadComponent('Auth', [
      'authenticate' => [
        'Form' => [
          'fields' => [
            'username' => 'email',
            'password' => 'password'
          ]
        ]
      ],
      'loginAction' => [
        'controller' => 'Users',
        'action' => 'login'
      ]
    ]);
src/Controller/UsersController.php
public function login()
{
  if ($this->request->is('post')) {
    // ユーザー判定
    $user = $this->Auth->identify();
    if ($user) {
      // ユーザー情報を保存
      $this->Auth->setUser($user);
      return $this->redirect($this->Auth->redirectUrl());
    }
    $this->Flash->error('ログインに失敗しました。');
  }
}

実際に設定してみたサイトがこちら

参考サイト
クイックスタートガイド(CakePHP Cookbook 3.x ドキュメント)

2015年10月26日月曜日

CakePHP 3で、ビュー(View)の作成

CakePHP 3で、ビュー(View)の作成です。Htmlのヘルパーや、Textのヘルパーが用意されています。使いながら覚えていくしかなさそうです。

src/Template/Bookmarks/tags.ctp
<h1>
  Bookmarks tagged with
  <?= $this->Text->toList($tags) ?>
</h1>

<section>
<?php foreach ($bookmarks as $bookmark): ?>
  <article>
    <h4><?= $this->Html->link($bookmark->title, $bookmark->url) ?></h4>
    <small><?= h($bookmark->url) ?></small>
    <?= $this->Text->autoParagraph($bookmark->description) ?>
  </article>
<?php endforeach; ?>
</section>

$this->Text->toList($tags);

$this->Html->link($bookmark->title, $bookmark->url);

h($bookmark->url);

$this->Text->autoParagraph($bookmark->description);


実際に設定してみたサイトがこちら

参考サイト
クイックスタートガイド(CakePHP Cookbook 3.x ドキュメント)

2015年10月25日日曜日

文庫本サイズで、350グラムのデスクトップPC「Diginnos DG-M01IW」

文庫本サイズで、350グラムのデスクトップPC「Diginnos DG-M01IW」 その軽さがなんといっても魅力。スペックを見ると、若干非力かなとも思いますが、ディスプレイやキーボード、マウスといった付属品を現地調達できる環境であれば、賢い選択になるかもしれません。



参考サイト
ドスパラ Diginnos DG-M01IWの実機レビュー(the比較)

2015年10月24日土曜日

Webサイトの数が減少傾向

Webサイトの数が減少傾向にあるそうです(October 2015 Web Server Survey)。ちょっとびっくりするニュースですね。サイトの淘汰が進んでいるということなのでしょうか。

ウェブサーバーについては、シェアに大きな開きはあるものの、長期的に見てApacheMicrosoftが減少し、nginxが増加傾向。

また、アクセス数が多いサイトほどHTTP/2を積極的に活用しているそうです。



参考サイト
Webサイト数の減少続く - 10月Webサーバ調査(マイナビニュース)

2015年10月23日金曜日

CakePHP 3で、ファインダーメソッド(Finder Method)

CakePHP 3で、ファインダーメソッド(Finder Method)の作成です。Ruby on Railsで言うところの「Scope」のようなものでしょうか。モデルに記述することで、コントローラー自体をシンプルに保つことができます。

src/Model/Table/BookmarksTable.php(モデル)
// コントローラーで「find('tagged')」として利用できる 
public function findTagged(Query $query, array $options)
{
  return $this->find()
    ->distinct(['Bookmarks.id'])
    ->matching('Tags', function ($q) use ($options) {
      return $q->where(['Tags.title IN' => $options['tags']]);
    });
}
src/Controller/BookmarksController.php(コントローラー)
public function tags()
{
  // BookmarksTableの「findTagged()メソッド」.
  $bookmarks = $this->Bookmarks->find('tagged', [
    'tags' => $tags
  ]);
}

http://localhost:8765/bookmarks/tagged/aaa/bbb/ccc
のようなURLでデータを取得できます。

実際に設定してみたサイトがこちら

参考サイト
クイックスタートガイド(CakePHP Cookbook 3.x ドキュメント)

2015年10月22日木曜日

CakePHP 3で、ルーティング(Routing)

CakePHP 3で、ルーティング(Routing)です。早くも、わからなくなってきました(笑)。大まかには理解できるのですが、各設定の違いがよくわからない。

use Cake\Routing\Router;

Router::defaultRouteClass('DashedRoute');

Router::scope(
  '/bookmarks',
  ['controller' => 'Bookmarks'],
  function ($routes) {
    $routes->connect('/tagged/*', ['action' => 'tags']);
  }
);

Router::scope('/', function ($routes) {
  $routes->fallbacks('InflectedRoute');
});

DashedRoute(ダッシュ区切り?)

/my-plugin/my-controller/my-action
['plugin' => 'MyPlugin', 'controller' => 'MyController', 'action' => 'myAction']

InflectedRoute(アンダーバー区切り?)

/my_controller
['controller' => 'MyController']

Route(一般的なディフォルト?)

パラメーターマッピング? Router::connect() を使う?

ちなみに、「$routes->fallbacks('InflectedRoute');」の部分は、フォールバックメソッドのはず?

フォールバックメソッドはデフォルトルーティングをショートカットする簡単な方法です。 このメソッドは、定義されたルールのために渡されたルーティングクラスです。 もし、クラスが定義されていない場合、 Router::defaultRouteClass() で使われている設定が返ります。

実際に設定してみたサイトがこちら

参考サイト
ルーティング(CakePHP Cookbook 3.x ドキュメント)
Namespace Cake\Routing\Route(CakePHP)

2015年10月21日水曜日

CakePHP 3で、パスワードハッシュ(Password Hashing)

CakePHP 3で、パスワードハッシュ(Password Hashing)です。パスワード用のセッターとして指定されているので、ここだけ変えればOK。bcryptでハッシュ化されたパスワードが保存されます。エンティティー(Entity)が、いまいち、よくわかりませんが、そのうち慣れるでしょう?
エンティティーはそれらのデータにアクセスして操作するための継続的なプロパティーとメソッドを含みます。
src/Model/Entity/User.php
namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class User extends Entity
{
  protected function _setPassword($value)
  {
    $hasher = new DefaultPasswordHasher();
    return $hasher->hash($value);
  }
}

参考サイト
クイックスタートガイド(CakePHP Cookbook 3.x ドキュメント)

2015年10月20日火曜日

CakePHP 3で、スキャフォールド(scaffold)

CakePHP 3で、スキャフォールド(scaffold)です。公式サイトに「ブックマークチュートリアル(Bookmarker Tutorial)」が用意されているので、これに倣って進めていこうと思います。

スキャフォールド(scaffold)コマンド bake
$ bin/cake bake all users
$ bin/cake bake all bookmarks
$ bin/cake bake all tags
以下のように、必要なファイルを自動生成してくれます。
Welcome to CakePHP v3.1.1 Console
---------------------------------------------------------------
App : src
Path: /var/www/html/src/
PHP : 5.6
---------------------------------------------------------------
Bake All
---------------------------------------------------------------
One moment while associations are detected.

Baking table class for Users...

Creating file /var/www/html/src/Model/Table/UsersTable.php
Wrote `/var/www/html/src/Model/Table/UsersTable.php`
Deleted `/var/www/html/src/Model/Table/empty`

Baking entity class for User...

Creating file /var/www/html/src/Model/Entity/User.php
Wrote `/var/www/html/src/Model/Entity/User.php`
Deleted `/var/www/html/src/Model/Entity/empty`

Baking test fixture for Users...

Creating file /var/www/html/tests/Fixture/UsersFixture.php
Wrote `/var/www/html/tests/Fixture/UsersFixture.php`
Deleted `/var/www/html/tests/Fixture/empty`
Bake is detecting possible fixtures...

Baking test case for App\Model\Table\UsersTable ...

Creating file /var/www/html/tests/TestCase/Model/Table/UsersTableTest.php
Wrote `/var/www/html/tests/TestCase/Model/Table/UsersTableTest.php`

Baking controller class for Users...

Creating file /var/www/html/src/Controller/UsersController.php
Wrote `/var/www/html/src/Controller/UsersController.php`
Bake is detecting possible fixtures...

Baking test case for App\Controller\UsersController ...

Creating file /var/www/html/tests/TestCase/Controller/UsersControllerTest.php
Wrote `/var/www/html/tests/TestCase/Controller/UsersControllerTest.php`

Baking `index` view file...

Creating file /var/www/html/src/Template/Users/index.ctp
Wrote `/var/www/html/src/Template/Users/index.ctp`

Baking `view` view file...

Creating file /var/www/html/src/Template/Users/view.ctp
Wrote `/var/www/html/src/Template/Users/view.ctp`

Baking `add` view file...

Creating file /var/www/html/src/Template/Users/add.ctp
Wrote `/var/www/html/src/Template/Users/add.ctp`

Baking `edit` view file...

Creating file /var/www/html/src/Template/Users/edit.ctp
Wrote `/var/www/html/src/Template/Users/edit.ctp`
Bake All complete.

参考サイト
Bookmarker Tutorial(CakePHP Cookbook 3.x documentation)

2015年10月19日月曜日

CakePHP 3で、はじめの一歩「Hello world」

CakePHP 3で、はじめの一歩「Hello world」です。まずは、お約束の初歩の初歩。

開発サーバーの起動
$ bin/cake server -H 192.168.1.2 -p 8765
実際に設定してみたサイトがこちら。 かっ、カッコイイ!!(笑)。



参考サイト
クイックスタートガイド(CakePHP Cookbook 3.x ドキュメント)

2015年10月18日日曜日

Facebookがデータフレームワーク「Relay」をリリース

Facebookがデータフレームワーク「Relay」をリリースしたとのこと。データ駆動型Reactアプリケーションを構築するためのJavaScriptフレームワークと説明されています。GraphQLなる問い合わせ方式で、サーバーにリクエストを送り、応答は標準的なJSON形式で得られるそうです。まずは、Reactを勉強しないと、なんのことかわからないですね(笑)。



参考サイト
Facebookが「Relay」データフレームワークをリリース(InfoQ)
React

2015年10月17日土曜日

容量無制限のクラウドバックアップ「Acronis True Image Cloud」

容量無制限のクラウドバックアップ「Acronis True Image Cloud」 これぞクラウド時代のバックアップ方法という気がしますね。かなり魅力的。 

  • 容量無制限
  • Android、iPhone、iPadなど、モバイル端末にも対応
  • Web管理画面でまとめて管理



参考サイト
バックアップはHDDは不要に?Windowsもスマホも容量無制限のクラウドへバックアップ(窓の杜)

2015年10月16日金曜日

CakePHP 3.1.1をインストール

PHPのフレームワーク、CakePHP 3.1.1をインストールしてみました。PHP 5.4以上で、なおかつ、internationalisation moduleも必要です。インストールされたディレクトリ構造を見ると、複雑で、めまいがしそう(笑)。またお馬鹿実験サイトを展開しようかと思いましたが、引き気味です。

インストール自体は、Composerで簡単に行えます。
php composer.phar create-project --prefer-dist cakephp/app appname


参考サイト
クイックスタートガイド(CakePHP Cookbook 3.x ドキュメント)
cakePHP3にチャレンジ!(プログラミングの話さん)

2015年10月15日木曜日

SQL serverで、最後にINSERTしたIDの取得

SQL serverで、最後にINSERTしたIDの取得です。MySQLで言うところの「SELECT LAST_INSERT_ID()」。IDENTITYのカラムタイプの場合だけですが、MySQLと同様に、取得できます。

INSERT INTO tablename(..........) VALUES (..........)

SELECT SCOPE_IDENTITY()

参考サイト
Get the last inserted row ID (with SQL statement)(Stack Overflow)
Return SCOPE_IDENTITY() without using CreateParam(Stack Overflow)
You may receive incorrect values when using SCOPE_IDENTITY() and @@IDENTITY(Microsoft サポート)

2015年10月14日水曜日

Ubuntu server 15.04に、PHPのinternationalisation moduleをインストール

Ubuntu server 15.04に、PHPのinternationalisation moduleをインストールしてみました。インストールできるとphpinfo()に「intl(Internationalization support)」の項目が追加されます。

$ sudo apt-get install php5-intl
$ sudo /etc/init.d/apache2 restart


参考サイト
Can't get to install 'intl' extension for php on debian(Stack Overflow)

2015年10月13日火曜日

Ubuntu 14.10 serverを15.04にアップグレード

Ubuntu 14.10 serverを15.04にアップグレードしてみました。SSH経由でのアップグレードになりました。本来、推奨はされないとのことです。今回は、開発サーバーだったので、思い切って試してみました。

$ sudo do-release-upgrade

キャッシュを読み込み中

パッケージマネージャーをチェック中です

SSH経由で実行していますが、続けますか?

このセッションはSSH上で実行されているようです。アップグレードをSSH越しに行うことは推奨されません。アップグレードに失敗した時の復元が困難になるからです。

続行する場合、追加のSSHデーモンをポート '1022' で起動します。
本当に作業を進めてよろしいですか?

続行する[yN]
yをクリックすると、アップデートがスタートします。結構、時間がかかります。

参考サイト
Ubuntu LTSをアップグレード(それマグで!さん)
How to Upgrade from 14.10 to 15.04(Ask Ubuntu)
How to Upgrade Ubuntu 12.04 LTS to Ubuntu 14.04 LTS(DigitalOcean)

2015年10月12日月曜日

アジアにフォーカスした暗号通貨「Baysia Coin(ベイジアコイン)」

アジアにフォーカスした暗号通貨「Baysia Coin(ベイジアコイン)」 仮想通貨の世界は、よくわからないし、マウントゴックスの件もあって、怪しい雰囲気も漂いますが、簡単に国境をまたいで取引できるという意味では、避けるべきではないのでしょう。とにかく、要チェック。



参考サイト
暗号通貨で誰かを幸せにできるなら、僕はそれに挑戦したい(ハフィントンポスト)
ビットコイン(Wikipedi)

2015年10月11日日曜日

モバイルWeb高速化のオープンソースプロジェクト「AMP」

Googleが、モバイルWebページの高速表示を実現するためのプロジェクト「Accelerated Mobile Pages」(AMP)を発表したそうです。
AMPは、モバイルWebの性能を大幅に向上し、ビデオや画像などリッチなコンテンツを掲載するWebページが広告と連動しつつ、高速表示できるようにすることを目的とする。様々な異なるプラットフォームやデバイスでも、同一のコードでニュース記事などを瞬時に表示することを目指す。


参考サイト
Google、モバイルWeb高速化のオープンソースプロジェクト「AMP」を発表(ITpro)
AMP HTML(GitHub)

2015年10月10日土曜日

サーバサイドプログラム言語のシェアで、PHPが81.3%に

サーバサイドプログラム言語のシェアで、PHPが81.3%にも上っているとのこと。PHPは、ここ数年間 Webサーバ側のプログラミングシェアとして、80%以上のシェアを維持しているそうです。WordPressの影響も大きいのでしょうか?!



参考サイト
Web業界で最も仕事が多いPHP ~Webサーバ側のプログラム言語シェアが81.3%に~(CNET Japan)

2015年10月9日金曜日

Nginxがウェブサーバを10倍高速化するノウハウを公開

Nginxがウェブサーバを10倍高速化するノウハウ(10 Tips for 10x Application Performance)を公開しています。パフォーマンスを極めたい方、参考にどうぞ。

  1. リバースプロキシサーバーとセキュアなアプリケーション
  2. ロードバランサの追加
  3. 静的および動的コンテンツのキャッシュ
  4. データの圧縮
  5. SSL/TLSの最適化
  6. HTTP/2またはSPDYを実装
  7. ソフトウェアバージョンのアップデート
  8. Linuxのパフォーマンスチューニング
  9. ウェブサーバーのパフォーマンスチューニング
  10. ボトルネックを解決するための監視



参考サイト
Nginx、Webサーバを10倍高速化するノウハウを公開(マイナビニュース)

2015年10月8日木曜日

PHPでできた非同期処理ライブラリ「Icicle」

PHPでできた非同期処理ライブラリ「Icicle」なるものを見つけました。node.js対抗? よくわかりませんでしたが、面白そうなのでメモ。SitePointの記事では、PHP製の高速HTTPサーバーの設定が紹介されています。可能性を感じますね。



参考サイト
Build a Superfast PHP Server in Minutes with Icicle(SitePoint)

2015年10月7日水曜日

PHPの拡張ライブラリ「Hoa」

PHPの拡張ライブラリ「Hoa」です。実際に試すところまでは至っていないのですが、たまたま見かけて面白そうだったのでメモです。WebsocketとかWorkerなどの実践的なライブラリが準備されています。非常に興味深いです。

2015年10月6日火曜日

PHPで複雑な正規表現をわかりやすく構造化してくれる「regexpbuilderphp」

PHPで複雑な正規表現をわかりやすく構造化してくれる「regexpbuilderphp」 これ良いです。条件を幾重にも重ねていけるので、わかりやすいし、見やすいソースになります。作者に拍手を送りたいです(笑)!

$builder = new \Gherkins\RegExpBuilderPHP\RegExpBuilder();

$regExp = $builder
    ->startOfInput()
    ->exactly(4)->digits()
    ->then("_")
    ->exactly(2)->digits()
    ->then("_")
    ->min(3)->max(10)->letters()
    ->then(".")
    ->anyOf(array("png", "jpg", "gif"))
    ->endOfInput()
    ->getRegExp();

//true
print $regExp->matches("2020_10_hund.jpg");
print $regExp->matches("2030_11_katze.png");
print $regExp->matches("4000_99_maus.gif");

//false
print $regExp->matches("123_00_nein.gif");
print $regExp->matches("4000_0_nein.pdf");
print $regExp->matches("201505_nein.jpg");

2015年10月5日月曜日

Silexの実験サイトを一区切り

Silex実験サイトを一区切りです。実験サイト自体は、非常に中途半端な状態ですが、Silex DocumentationSilex ユーザーガイドを一通り読んで、実務に生かせる目処が付いたので、良しとしましょう。

今回使ってみた印象ですが、正直なところ、若干、古さと言うか無骨さと言うか、そんなものを感じる部分がないわけではありません。しかし、Symfony2コンポーネントを利用して堅実なサイト作りを目指しつつも、短期間で、見通しの良いシステムを完成させるには素晴らしいフレームワークだと思います。各部分が把握しやすく、全てを制御できているような(?)安心感が得られる気がします。

2015年10月4日日曜日

無料のリマインダーメールサービス「followupthen.com」

無料のリマインダーメールサービス「followupthen.com」 メールの宛先に設定を指定してメール送信すると、リマインダーが設定されるというものです。1月に50送信までは無料らしい。最初は慣れが必要でしょうが、慣れれば簡単に設定できるようになると思います。



2015年10月3日土曜日

Vagrantの後継ツール「Otto」がリリース

Vagrantの後継ツール「Otto」がリリースされたとのこと。「設定なしでプロジェクトの種類を判別し、自動的に開発環境を構築できる」とありますが、どういうことなのでしょうか?! 夢の様なツール(笑)?

Ottoは、環境構築ツール「Vagrant」の後継となるツールで、設定なしでプロジェクトの種類を判別し、自動的に開発環境を構築できる。また、デプロイが可能な状態になったら、インフラやサーバ、アプリケーションを含む本番環境の構築にも対応する。



参考サイト
Vagrantの後継ツールとして、開発環境だけでなく実際の動作環境も構築できる「Otto」がリリース(CodeZine)

2015年10月2日金曜日

Silexでマークダウン(Markdown)

Silex(1.3)でマークダウン(Markdown)の表示です。mheap/Silex-Markdownを利用しました。Twigのテンプレートで、そのまま利用できます。

PHP
$app->register(new SilexMarkdown\MarkdownExtension(), array(
  'markdown.class_path' => __DIR__ . '/../vendor/knplabs-markdown',
  'markdown.features'   => array(
    'header' => true,
    'list' => true,
    'horizontal_rule' => true,
    'table' => true,
    'foot_note' => true,
    'fenced_code_block' => true,
    'abbreviation' => true,
    'definition_list' => true,
    'inline_link' => true,
    'reference_link' => true,
    'shortcut_link' => true,
    'block_quote' => true,
    'code_block' => true,
    'html_block' => true,
    'auto_link' => true,
    'auto_mailto' => true,
    'entities' => false
  ),
));
Twig
{{ '
Hey
===
*Markdown support is working*
' | markdown }}

実際に設定してみたサイトがこちら

参考サイト
mheap/Silex-Markdown(GitHub)

2015年10月1日木曜日

SilexのDoctrine DBALで、insert、update、delete

Silex(1.3)Doctrine DBALで、insert、update、deleteです。selectはこちら

// insert
$app['db']->insert('blogs', array(
  'title' => $title,
  'text' => $text,
));

// update
$app['db']->update('blogs', array(
  'title' => $title,
  'text' => $text,
),array('id' => $id));

// delete
$app['db']->delete('blogs', array('id' => $id));

実際に設定してみたサイトがこちら

参考サイト
Silex: Using HttpFoundation and Doctrine DBAL in a Legacy PHP Application(PHP & Symfonyさん)
DoctrineServiceProvider(Silex Documentation)