2015年12月31日木曜日

2015年最も人気の記事ベスト3

今年、2015年に最もアクセスの多かった記事ベスト3です。

No.1 AngularJSで、if文「ng-if」

No.2 PHP ORMの「RedBeanPHP」

No.3 中国産OS「NeoKylin OS」がWindowsを追撃




AngularJSネタが1位に輝くとは、奇跡が起きました。アクセス数を見ると笑うしか無いのですが、それでも嬉しいものです(笑)。

当サイトのブログに少しでも目を通していただいた読者の方々、ありがとうございました。

良いお年をお迎え下さい!

2015年12月27日日曜日

リアルタイムOS(RTOS)とは?

リアルタイムOS(RTOS)とは? ということで調べてみました。
組み込みオペレーティングシステムに多く、必ず定められた時間内に処理が終わることを保障することに特化しているもの。
手を出すべきではないと思いますが、興味はそそられます(笑)。

FreeRTOS(オープンソースのリアルタイムオペレーティングシステム)


参考サイト
リアルタイムオペレーティングシステム(Wikipedia)
【第2回】リアルタイムOS(RTOS)とは(CodeZine)
フリーのリアルタイムOS活用法(マイコン徹底入門)
「組み込みOS無償提供」で変わるウインドリバーの戦略(MONOist)

2015年12月26日土曜日

年末年始に無料でパソコンを引き取ってくれるサービス「リネットジャパン」

年末年始に無料でパソコンを引き取ってくれるサービス「リネットジャパン」 「都市鉱山1億キロ発掘」プロジェクトというキャンペーンで、通常1箱880円の回収費用が無料となるそうです。大掃除の時期にありがたいサービスですね。





参考サイト
日本唯一の国認定の宅配回収 リネットジャパン「あんしん宅配回収」(産経ニュース)

2015年12月22日火曜日

CakePHP 3で、ラジオボタン(Radio Buttons)

CakePHP 3で、ラジオボタン(Radio Buttons)です。「'value'」を設定しておくだけで、チェックされているかどうかを勝手に判断してくれます。良い感じです。

src/Template/Users/edit.ctp
echo $this->Form->radio(
  'gender',
  [
    ['value' => '1', 'text' => '女性'],
    ['value' => '2', 'text' => '男性'],
    ['value' => '3', 'text' => 'その他'],
  ]
);

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

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

2015年12月21日月曜日

CakePHP 3で、CSRF対策

CakePHP 3で、CSRF対策です。CsrfComponentを利用することで簡単に導入できます。

src/Controller/UsersController.php
public function initialize()
{
  parent::initialize();
  $this->loadComponent('Csrf');
}
これだけで、勝手にテンプレート側では、CSRFトークンを挿入してくれます。非常に便利。

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

参考サイト
Cross Site Request Forgery (CakePHP Cookbook 3.x documentation)
CakePHP3でCSRF対策(EasyRambleさん)

2015年12月20日日曜日

無料で利用できるプッシュ通知サービス「LogPush」

無料で利用できるプッシュ通知サービス「LogPush」 これは素晴らしい。メモしなければなりません!
登録デバイスが500万を超えるまでならPush通知の配信数も無制限!
ABテストやセグメント、定期配信の機能も全て無料で使えます!


参考サイト
pLucky、スマホ向けプッシュ通知配信サービス「LogPush」にAPI連携(マイナビニュース)

2015年12月19日土曜日

2015年12月18日金曜日

CakePHP 3で、ログインセッションデータの取得

CakePHP 3で、ログインセッションデータの取得です。

src/Controller/UsersController.php
$session = $this->request->session();
$user_id = $session->read('Auth.User.id');
$user = $this->Users->get($user_id);

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

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

2015年12月17日木曜日

CakePHP 3で、Markdown

CakePHP 3で、Markdownです。CakePHP Markdownを組み込んでみました。

src/Controller/ArticlesController.php
class FooController extends AppController
{
  public $helpers = ['Tanuck/Markdown.Markdown'];
}
src/Template/Articles/view.ctp
<?php echo $this->Markdown->transform($article->body); ?>

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

参考サイト
tanuck/cakephp-markdown(GitHub)

2015年12月16日水曜日

CakePHP 3で、ちょっと複雑なLIKE文検索

CakePHP 3で、ちょっと複雑なLIKE文検索です。更に複雑な検索を実現したい場合は、プラグインを利用したほうが良いのかもしれません。

src/Controller/ArticlesController.php
// $arrayWordは、検索キーワードの配列
// $arrayWord = array('あ','い','う') ;
$query = $this->Articles->find()
  ->where(function ($exp, $q) use ($arrayWord) {
    if (is_array($arrayWord) && count($arrayWord) > 0) {
      foreach ($arrayWord as $key => $value) {
        $exp->like('title', '%'.$value.'%');
      }
    }
    return $exp;
  })
  ->orWhere(function ($exp, $q) use ($arrayWord) {
    if (is_array($arrayWord) && count($arrayWord) > 0) {
      foreach ($arrayWord as $key => $value) {
        $exp->like('body', '%'.$value.'%');
      }
    }
    return $exp;
  })
  ->andWhere(function ($exp, $q) {
    return $exp->gt('created', '2015-01-01');
  });

// 検索条件を保ったままページ送り
$articles = $this->paginate($query);

実際に発行されるSQL文
SELECT 
  Articles.id AS `Articles__id`, 
  Articles.title AS `Articles__title`, 
  Articles.body AS `Articles__body`, 
  Articles.created AS `Articles__created`, 
  Articles.modified AS `Articles__modified` 
FROM 
  articles Articles 
WHERE 
  (
    created > '2015-01-01' 
    AND (
      (
        body LIKE '%あ%' 
        AND body LIKE '%い%' 
        AND body LIKE '%う%'
      ) 
      OR (
        title LIKE '%あ%' 
        AND title LIKE '%い%' 
        AND title LIKE '%う%'
      )
    )
  ) 
ORDER BY 
  Articles.created desc 
LIMIT 
  10 OFFSET 20

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

参考サイト
Query Builder (CakePHP Cookbook 3.x documentation)

2015年12月15日火曜日

CakePHP 3で、LIKE文検索

CakePHP 3で、LIKE文検索です。where() orWhere() andWhere()を組み合わせることで、複雑な条件にも対応できます。

src/Controller/ArticlesController.php
$query = $this->Articles->find()
  ->where(['title  LIKE' => '%あいう%'])
  ->orWhere(['body  LIKE' => '%あいう%']);

// 検索条件を保ったままページ送り
$articles = $this->paginate($query);

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

参考サイト
Query Builder (CakePHP Cookbook 3.x documentation)

2015年12月14日月曜日

CakePHP 3で、ページ送りのページネーション(Pagination)

CakePHP 3で、ページ送りのページネーション(Pagination)です。Paginatorコンポーネントを読み込むと利用できるようになります。

src/Controller/ArticlesController.php
class ArticlesController extends AppController
{
  public $paginate = [
    'limit' => 10,
    'order' => [
      'Articles.created' => 'desc'
    ]
  ];

  public function initialize()
  {
    parent::initialize();
    $this->loadComponent('Paginator');
  }

  public function index()
  {
    $this->set('articles', $this->paginate());
  }
}

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

参考サイト
ページネーション (CakePHP Cookbook 3.x ドキュメント)

2015年12月13日日曜日

ウェブサイトを無料でHTTPS化するプロジェクト「Let's Encrypt」

まだデータ版ではありますが、ウェブサイトを無料で自動的にHTTPS化するプロジェクト「Let's Encrypt」を発見です! 素晴らしい。最近、SSL証明書は安くなってきていると思いますが、それでも高いですよね。是非、この分野に風穴を開けていただきたいです。楽しみに待ちましょう!



参考サイト
EFF、Webサイトを無料でHTTPS化するプロジェクト「Let's Encrypt」のパブリックβ公開(ITmedia ニュース)

2015年12月12日土曜日

PHPフレームワークのSymfony 3.0がリリース

PHPフレームワークのSymfony 3.0がリリースされました。
Symfony 3.0は2011年に登場したバージョン2.0以来のメジャーアップグレードとなる。メジャーバージョンではあるが新しい機能はなく、2.8から非推奨レイヤを除いたものとなる。対応するPHPのバージョンは5.5.9以降。


参考サイト
PHP向けのWebアプリケーションフレームワーク「Symfony 3.0」リリース(OSDN Magazine)

2015年12月11日金曜日

CakePHP 3で、共通関数のコンポーネント(Component)

CakePHP 3で、共通関数のコンポーネント(Component)です。Cake\Controller\Component を継承して作成することができます。

src/Controller/Component/MathComponent.php
namespace App\Controller\Component;

use Cake\Controller\Component;

class MathComponent extends Component
{
  public function doComplexOperation($amount1, $amount2)
  {
    return $amount1 + $amount2;
  }
}

src/Controller/ArticlesController.php
$calculation = $this->Math->doComplexOperation(10, 25) ;

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

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

2015年12月10日木曜日

CakePHP 3で、データの更新(Update)

CakePHP 3で、データの更新(Update)です。find()は使用しないで、Queryオブジェクトを使うべしと書かれています。

src/Controller/UsersController.php
use Cake\ORM\TableRegistry;

$user = TableRegistry::get('Users');
$query = $user->query();
$query->update()
  ->set(['active' => 1])
  ->where(['key' => $key])
  ->execute();

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

参考サイト
Query Builder (CakePHP Cookbook 3.x documentation)
Update only one field on Cakephp 3(Stack Overflow)

2015年12月9日水曜日

CakePHP 3で、単一データの取得

CakePHP 3で、単一データの取得です。ORMのQuery Builderを使うと良いらしい。

src/Controller/UsersController.php

正しい例
$user = $this->Users->find()
    ->where(['Users.key' => $key])
    ->first();
悪い例(動作しません)
$user = $this->Users
    ->where(['Users.key' => $key])
    ->find();
最初「->find()」句はどこに置いても関係ないだろうと思っていたのでハマりました。必ず、テーブルオブジェクトの後に位置していないといけません。その後に「->where()」句や「->order()」句などの条件が来ます。順序をまとめると、こんな感じ。

$user = $this->Users
    ->find()
    ->select()
    ->where()
    ->order();

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

参考サイト
Query Builder (CakePHP Cookbook 3.x documentation)

2015年12月8日火曜日

CakePHP 3で、グローバル定数(Configuration)

CakePHP 3で、グローバル定数(Configuration)です。

config/bootstrap.php(設定)
use Cake\Core\Configure;

Configure::write('Company.name','企業名');

src/Controller/UsersController.php(設定を取得)
use Cake\Core\Configure;

$company_name = Configure::read('Company.name');

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

参考サイト
Configuration (CakePHP Cookbook 3.x documentation)
How to have global parameters in cakephp 3?(Stack Overflow)

2015年12月7日月曜日

CakePHP 3で、セキュリティーのハッシュ(Hash)

CakePHP 3で、セキュリティーのハッシュ(Hash)です。パスワードには使うべからずと書かれています。パスワードには、bcryptを利用しているDefaultPasswordHasherが用意されています。

src/Controller/UsersController.php
use Cake\Utility\Security;

$hash = Security::hash(uniqid()) ;

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

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

2015年12月6日日曜日

デバイスとアプリの両方で使える共通基盤「Project Linking」

デバイスとアプリの両方で使える共通基盤「Project Linking」 NTTドコモなど10社が、インターネット関連機器とそれを活用するスマートフォン向けアプリを結びつける共通基盤を用意し、デバイス開発者とアプリ開発者に仕様を無償で公開したとのこと。要チェックでしょう。

機器を作れば全ての対応アプリですぐ使え、逆にアプリを作れば全ての対応機器をすぐ操作できる。そんな環境が開発者および利用者のハードルを下げる。


参考サイト
NTTドコモなど10社、IoTの普及促進でタッグ 共通基盤を無償公開(ITpro)

2015年12月5日土曜日

PHP 7.0が正式リリース

PHP 7.0が正式リリースされました。


いや~、長かった。待ちくたびれましたよね(笑)。何でも2004年に公開されたPHP 5以来、10年ぶりのメジャーアップデートだそうです。何かお祝いしたい気分(笑)。とにかく、楽しみです。

PHP 7の最大の特徴は実行速度だという。PHPNG(NextGen)と呼ばれる実行エンジンを搭載、PHP 5.6と比較して2倍高速になり、メモリ使用量も50%改善したという。


参考サイト
「PHP 7」、ついにリリース(OSDN Magazine)
「PHP 7」正式版リリース、11年ぶりのメジャーアップデート(クラウド Watch)

2015年12月4日金曜日

CakePHP 3で、バリデーション(validation)の前にデータのトリム(trim)

CakePHP 3で、バリデーション(validation)の前にデータのトリム(trim)です。Model.beforeMarshalイベントは、バリデーションの前に呼ばれるとのこと。これを設定しておかないと、半角スペースでもnotEmptyのバリデーションルールが通ってしまいます。

src/Model/Table/ArticlesTable.php
use Cake\Event\Event;
use ArrayObject;

class ArticlesTable extends Table
{
  // データのトリム
  public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options)
  {
    foreach ($data as $key => $value) {
      if (is_string($value)) {
        $data[$key] = trim($value);
      }
    }
  }
}

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

参考サイト
Saving Data (CakePHP Cookbook 3.x documentation)
How to use Trim() before validation NotEmpty?(Stack Overflow)

2015年12月3日木曜日

CakePHP 3モデルのbuildRulesでメッセージの日本語化

CakePHP 3モデルのbuildRulesでメッセージの日本語化です。

src/Model/Table/UsersTable.php
public function buildRules(RulesChecker $rules)
{
  $rules->add($rules->isUnique(['email'], 'すでに登録されています。'));
  return $rules;
}

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

参考サイト
How to change the message in buildRules [CakePHP 3]? (Stack Overflow)
Validating Data (CakePHP Cookbook 3.x documentation)

2015年12月2日水曜日

CakePHP 3で、ロケール(locale)の設定

CakePHP 3で、ロケール(locale)の設定です。エラーメッセージが英語になってしまうので、設定を変更してみたのですが、何も変わりません。また挫折。忍耐を試されるフレームワークです。ガックリ。

config/bootstrap.php
date_default_timezone_set('Asia/Tokyo');

ini_set('intl.default_locale', 'ja_JP');

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

参考サイト
Internationalization & Localization (CakePHP Cookbook 3.x documentation)

2015年12月1日火曜日

CakePHP 3で、テンプレートを利用したメール送信

CakePHP 3で、テンプレートを利用したメール送信です。HTMLメールを送信する例。

src/Controller/PagesController.php
$email = new Email();
$email->template('welcome', 'fancy')
    ->emailFormat('html')
    ->to('to@example.com')
    ->from('from@example.com')
    ->subject('歓迎です')
    ->viewVars(['value' => $value])
    ->send();
src/Template/Layout/Email/html/fancy.ctp(レイアウト)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
  <title><?= $this->fetch('title') ?></title>
</head>
<body>
  <?= $this->fetch('content') ?>
</body>
</html>
src/Template/Email/html/welcome.ctp
<?php
$this->assign('title', 'ようこそ');
?>

これが値「<b><?= $value ?></b>」です。

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

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

2015年11月30日月曜日

CakePHP 3で、メール送信(Email)

CakePHP 3で、メール送信(Email)です。Gmailからメール送信する例。

config/app.php
'EmailTransport' => [
  'default' => [
    'host' => 'ssl://smtp.gmail.com',
    'port' => 465,
    'username' => 'yourname@gmail.com',
    'password' => 'password',
    'className' => 'Smtp'
  ],
],
src/Controller/PagesController.php
$email = new Email('default');
$email->from(['yourname@gmail.com']' => 'サイト名')
  ->to('receiver@gmail.com')
  ->subject('件名')
  ->send('本文です。');

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

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

2015年11月29日日曜日

ホームページやブログが無料で簡単に立ち上げられる「Ameba Ownd」

ホームページやブログが無料で簡単に立ち上げられる「Ameba Ownd」 アメーバブログの後継になるサービスなのでしょうか。何が素晴らしいって、デザインが綺麗で良いです。スマホ対応ですし、使い勝手も洗練されていて、ヒットの予感?

2015年11月28日土曜日

PHP 7.0は、HHVM 3.10より高速

PHP 7.0は、HHVM 3.10より高速とのこと。今回試されたベンチマークの結果では、PHP 7.0が、すべての項目でHHVMの実行速度を上回っているそうです。リリース間近ということで、期待してしまいますね。



参考サイト
PHP 7.0、HHVM 3.10より高速(マイナビニュース)
PHP 7のパフォーマンスが高い理由(CodeZine)

2015年11月27日金曜日

CakePHP 3で、カスタムログイン

CakePHP 3で、カスタムログインです。scopeを利用したら、動いたような感じ? 追加したのは「'scope' => ['Users.active' => 1]」の部分。間違っているかもしれません。

利用しているのはCakePHP 3.1.3なので、finderオプションでいけるはずなんですが、設定しきれませんでした。

src/Controller/AppController.php
$this->loadComponent('Auth', [
  'authenticate' => [
    'Form' => [
      'fields' => [
        'username' => 'email',
        'password' => 'password'
      ],
      'scope' => ['Users.active' => 1]
    ]
  ],
  'loginAction' => [
    'controller' => 'Users',
    'action' => 'login'
  ]
]);

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

参考サイト
Authentication(CakePHP Cookbook 3.x documentation)
Class Cake\Auth\FormAuthenticate(CakePHP)

2015年11月26日木曜日

CakePHP 3で、カスタムログイン挫折

CakePHP 3で、カスタムログイン挫折です。 ダメ、なんだかわからない。 どこでデバックできるのかわからない。 CakePHPを使っていることが、苦痛になってきました。コピーしてるだけなのに、なんで動かないんだろう?

ストレス発散の、意味のないブログです。すみません。

src/Controller/AppController.php?
public function initialize()
{
  parent::initialize();
  $this->loadComponent('Auth', [
    'authenticate' => [
      'Form' => [
        'finder' => 'auth'
      ]
    ],
  ]);
}
src/Model/Table/UsersTable.php?
public function findAuth(\Cake\ORM\Query $query, array $options)
{
  $query
    ->select(['id', 'username', 'password'])
    ->where(['Users.active' => 1]);

  return $query;
}

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

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

2015年11月25日水曜日

CakePHP 3で、ビュー(View)のテンプレートでログイン情報を取得

CakePHP 3で、ビュー(View)のテンプレートでログイン情報を取得です。

$this->request->session()->read('Auth.User.id');

で、ユーザーのIDが取得できます。

src/Template/Layout/default.ctp
<?php if ($this->request->session()->read('Auth.User.id')): ?>
  <a href="/users/logout/">ログアウト</a>
<?php endif; ?>

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

参考サイト
CakePHP check if user is logged in inside a view(Stack Overflow)

2015年11月24日火曜日

CakePHP 3で、デバック(Debugger)

CakePHP 3で、デバック(Debugger)です。便利に使えます。

src/Controller/PagesController.php
use Cake\Error\Debugger;

Debugger::dump($data);

pr(Debugger::trace());

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

参考サイト
Debugging (CakePHP Cookbook 3.x documentation)
Class 'App\Controller\Debugger' not found error with cakephp ver3(Stack Overflow)

2015年11月23日月曜日

Nginx拡張の高速なWebアプリサーバ「OpenResty」

Nginx拡張の高速なWebアプリサーバ「OpenResty」 パフォーマンス重視のサーバーで利用しているのを見かけて、興味をそそられたのでメモ。
OpenRestyは、Nginxの優れた設計モジュールを利用することで、ウェブ開発者が、Luaのようなプログラミング言語のを使用して、効果的に、強力なウェブアプリケーションサーバーを構築することができます。


参考サイト
Lua
Nginx + Lua から MySQL を使う(昼メシ物語さん)
Nginx(OpenResty)でLuaを動かす+パフォーマンス(ついでにHHVMも) (ゆっくり備忘録さん)

2015年11月22日日曜日

コンビニのファミリーマートでSIMカード販売

コンビニのファミリーマートSIMカード販売とのこと。月額のSIMカードの販売はよくある(?)として、プリペイド形式でのサービス提供は、面白いなと思いました。気軽に利用できますし、いろいろなニーズが掘り起こされるのではないでしょうか。



参考サイト
えらべるSIMカード(FamilyMart)

2015年11月21日土曜日

無料のLinux講座(東京品川 2015年12月12日)

株式会社VSNさんの、無料のLinux講座を発見です! 2015年12月12日、場所は東京品川。かなり実践的な内容のようです。

CentOS7から実装されたSystemdや利用が推奨されたNetworkManagerというプログラムが提供している様々な機能を「サービス管理」、「ログ管理」と「ネットワーク管理」という3つの役割に分類し、それら一つひとつの役割を実機を用いながら前バージョンであるCentOS6と比較することで、CentOS7の3つの役割を理解しましょう。



参考サイト
Linux無料講座のご案内(株式会社VSN)

2015年11月20日金曜日

CakePHP 3でURLやメールの自動リンクと文字列切り取り

CakePHP 3でURLやメールの自動リンクと文字列切り取りです。その他、テキスト関連の処理がいろいろと用意されています。かなり高機能。便利です。

// 自動リンク
$this->Text->autoLink($myText);

// 段落、改行
$this->Text->autoParagraph($myText);

// 文字列切り取り
$this->Text->truncate($myText, 20,['ellipsis' => '...','exact' => false]);

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

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

2015年11月19日木曜日

CakePHP 3で数字のフォーマット

CakePHP 3数字のフォーマットです。CakePHPの機能を使わなくても実現できると思いますが、せっかくなので使ってみました。

echo $this->Number->currency(2980, "JPY");

echo $this->Number->precision(456.91873645, 2);

echo $this->Number->toReadableSize(0); // 0 Byte
echo $this->Number->toReadableSize(1024); // 1 KB
echo $this->Number->toReadableSize(1321205.76); // 1.26 MB
echo $this->Number->toReadableSize(5368709120); // 5 GB

echo $this->Number->format('123456.7890', [
  'places' => 2,
  'before' => '¥ ',
  'after' => ' !'
]);

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

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

2015年11月18日水曜日

CakePHP 3でログの設定

CakePHP 3ログの設定です。行き詰まったら、ログを確認してみると良いかもしれません。初歩的なミスが原因で悶々としていましたが、救われました(笑)。

config/app.php
'Log' => [
  'debug' => [
    'className' => 'Cake\Log\Engine\FileLog',
    'path' => LOGS,
    'file' => 'debug',
    'levels' => ['notice', 'info', 'debug'],
  ],
  'error' => [
    'className' => 'Cake\Log\Engine\FileLog',
    'path' => LOGS,
    'file' => 'error',
    'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
  ],
],
logs/debug.log
logs/error.log
にそれぞれ、記録されます。

他に、Monologなども利用することが可能です。

コントローラー内からログを出力する場合は、下記の通り。

src/Controller/PagesController.php
$this->log("Something didn't work!");
$this->log("This is a debug log!", "debug");

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

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

2015年11月17日火曜日

CakePHP 3でFormHelper

CakePHP 3FormHelperです。FormHelperのTemplatesを設定変更することで、class属性の出力などいろいろカスタマイズできるらしい。複雑過ぎです。

src/Template/Articles/add.ctp
<?php
  // テンプレート設定
  $this->Form->templates([
    'inputContainer' => '<div class="row"><div class="controls">{{content}}</div></div>',
    'inputContainerError' => '<div class="row"><div class="controls">{{content}}</div><div class="danger">{{error}}</div></div>',
  ]);

  // フォーム開始
  echo $this->Form->create($article, ['class' => 'form']);

  // タイトル
  echo $this->Form->input('title', [
  'label' => [
    'class' => 'label',
    'text' => 'タイトル'
  ],
  'placeholder'=>'タイトル',
  'class' => 'width-100']);

  // 本文
  echo $this->Form->input('body', ['cols' => '100', 'rows' => '10', 
  'label' => [
    'class' => 'label',
    'text' => '本文'
  ],
  'placeholder'=>'本文',
  'class' => 'width-100']);
?>
<div class="row">
<?php
  // 保存ボタン
  echo $this->Form->button(__('保存'), ['class' => 'button button-primary']);
?>
</div>
<?php
  // フォーム終了
  echo $this->Form->end();
?>

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

参考サイト
Form(CakePHP Cookbook 3.x documentation)
Customizing CakePHP 3 Form Helper(Chris Nizzardiniさん)

2015年11月16日月曜日

CakePHP 3でHtmlHelper

CakePHP 3HtmlHelperです。慣れれば、なんとかなるでしょう。

画像のリンク
<?= $this->Html->image('http://cakephp.org/img/cake-logo.png', [
  'alt' => 'cake-logo',
  'url' => ['controller' => 'Articles', 'action' => 'index']
]);?>
ループとリンク、日付のフォーマット
<? foreach ($articles as $key => $article) { ?>
 <h3><?= $this->Html->link($article->title, ['action' => 'view', $article->id]); ?></h3>
 <p><?= $article->created->format('Y-m-d H:i'); ?></p>
<? } ?>
リンクに「class」や「confirm」を追加
<?= $this->Html->link('編集', ['action' => 'edit', $article->id], ['class' => 'button']) ?>
<?= $this->Html->link('削除', ['action' => 'delete', $article->id], ['class' => 'button', 'confirm' => '本当に削除してよろしいですか?']) ?>

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

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

2015年11月15日日曜日

Unixのウェブサーバー「Hiawatha」

Unixのウェブサーバー「Hiawatha」 「advanced and secure webserver for Unix」と謳われています。Linuxでも利用できるようです。興味をそそられますね。とにかくメモ。



参考サイト
hiawatha Webサーバーを試してみた。 (Puppy Linux)(自宅サーバーWebRingさん)
Install Hiawatha Web Server with PHP-FPM and MySQL on Debian(Vultr.com)

2015年11月14日土曜日

Microsoft AzureでRed Hat Enterprise Linux(RHEL)が利用可能に

Microsoft AzureRed Hat Enterprise Linux(RHEL)が利用可能になるそうです。Linuxをサポートしているわけですから、当然の流れではあると思いますが、それでも驚きです。Microsoftの本気度を見た気がします。



参考サイト
米Microsoftと米Red Hatが提携、Azure上でRHELが利用可能に(ITpro)

2015年11月13日金曜日

CakePHP 3でフラッシュメッセージの表示

CakePHP 3でフラッシュメッセージの表示です。

src/Controller/PagesController.php
public function display()
{
  $this->Flash->success('いらっしゃい!');
  $this->Flash->default('ハロー');
  $this->Flash->error('ダメダメ');
}
src/Template/Layout/default.ctp
<?= $this->Flash->render() ?>
HTMLレイアウトは、
src/Template/Element/Flash/default.ctp
src/Template/Element/Flash/error.ctp
src/Template/Element/Flash/success.ctp
を編集すればOKらしい。

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

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

2015年11月12日木曜日

CakePHP 3でSmartyを設定するも、挫折

CakePHP 3Smartyを設定するも、挫折しました。使い方がよくわからない。ガックリ。CakePHPのビューテンプレートを利用して、また一から出直します。笑ってやってください。

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

振り出しに戻りました。無残な状態に。。。

2015年11月11日水曜日

CakePHP 3でデータの削除

CakePHP 3データの削除です。GETリクエストを使用して削除を許可すると、ウェブクローラが誤ってコンテンツを削除する可能性があるので、危険ですと説明されています。というわけで、allowMethodで、postを指定しています。getなどでアクセスされた場合は、MethodNotAllowedException が投げられます。

src/Controller/ArticlesController.php
public function delete($id)
{
  // POSTメソッドのみを許可
  $this->request->allowMethod(['post']);

  // $idからエンティティーを取得。データがなければ、NotFoundExceptionが投げられる。
  $article = $this->Articles->get($id);

  // 削除成功
  if ($this->Articles->delete($article)) {
    $this->Flash->success(__('削除されました。'));
    return $this->redirect(['action' => 'index']);
  }
}

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

参考サイト
Blog Tutorial - Part 2 CakePHP Cookbook 3.x documentation)

2015年11月10日火曜日

CakePHP 3でデータの更新

CakePHP 3でデータの更新です。新規作成(insert)と更新(update)の違いは、エンティティーの状態の違いによるもの。

新規作成(insert)
$article = $this->Articles->newEntity();

更新(update)
$article = $this->Articles->get($id);

src/Controller/ArticlesController.php
public function edit($id = null)
{
  // $idからエンティティーを取得。データがなければ、NotFoundExceptionが投げられる。
  $article = $this->Articles->get($id);

  // POSTメソッドでアクセスされた場合
  if ($this->request->is(['post'])) {

    // POSTされたリクエストデータを、バリデーションして、エンティティーにマージ
    $this->Articles->patchEntity($article, $this->request->data);

    // 保存成功
    if ($this->Articles->save($article)) {
      $this->Flash->success(__('変更されました。'));

      // リダイレクト
      return $this->redirect(['action' => 'index']);
    }
    // 保存失敗
    $this->Flash->error(__('変更できませんでした。'));
  }

  $this->set('article', $article);
}

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

参考サイト
Blog Tutorial - Part 2 CakePHP Cookbook 3.x documentation)

2015年11月9日月曜日

CakePHP 3でデータのバリデーション

CakePHP 3データのバリデーションです。save() メソッドが呼ばれると、validationDefault() が結果を返すらしい。

src/Model/Table/ArticlesTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class ArticlesTable extends Table
{
  public function initialize(array $config)
  {
    $this->addBehavior('Timestamp');
  }

  public function validationDefault(Validator $validator)
  {
    $validator
      ->notEmpty('title', '記入してください。')
      ->requirePresence('title')
      ->add('title', [
        'length' => [
          'rule' => ['minLength', 10],
          'message' => '10文字以上で記入してください。',
        ]
      ])
      ->notEmpty('body', '記入してください。')
      ->requirePresence('body')
      ->add('body', [
        'length' => [
          'rule' => ['minLength', 20],
          'message' => '20文字以上で記入してください。',
        ]
      ]);

    return $validator;
  }
}

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

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

2015年11月8日日曜日

新たな選択肢、Webブラウザーの「Vivaldi」

新たな選択肢、Webブラウザーの「Vivaldi」を試してみました。軽快な動作で、なかなかいいです。まだ、ベータ版ではありますが、日本語環境も充実していますし、よく出来ていると思います。気に入りました。



参考サイト
Webブラウザー「Vivaldi」、初めてのベータ版をリリース(窓の杜)

2015年11月7日土曜日

Fedora 23がリリース

Fedora 23がリリースされました。Workstation、Server、Cloudと3種類用意されています。



Workstationの操作性を紹介したビデオ


参考サイト
Fedora 23登場(マイナビニュース)

2015年11月6日金曜日

CakePHP 3でトップページへのルーティング

CakePHP 3トップページへのルーティングです。「'home'」の部分は名前付きルーティング (Named routes)かと思っていましたが、ビューのテンプレート名を指定しています。名前付きルーティングは、

['_name' => 'home']

という具合に設定するようです。

config/routes.php
use Cake\Core\Plugin;
use Cake\Routing\Router;
Router::defaultRouteClass('DashedRoute');
Router::scope('/', function ($routes) {
  // コントローラーがPagesController.php
  // アクションがdisplay()
  // ビューがhome.ctp
  $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home'], ['_name' => 'home']);
});

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

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

2015年11月5日木曜日

CakePHP 3でデータのインサート

CakePHP 3データのインサートです。保存はできるのですが、Smarty側でのエラーの拾い方がわからない。何もわかっちゃいないのに、調子の乗って設定するべきではなかったかも。

src/Controller/ArticlesController.php
namespace App\Controller;
use App\Controller\AppController;
class ArticlesController extends AppController
{
  public function add()
  {
    // エンティティーを生成
    $article = $this->Articles->newEntity();

    // POSTメソッドでアクセスされた場合
    if ($this->request->is('post')) {

      // POSTされたリクエストデータを、バリデーションして、エンティティーにマージ
      $article = $this->Articles->patchEntity($article, $this->request->data);

      // 保存成功
      if ($this->Articles->save($article)) {
        $this->Flash->success(__('保存されました。'));

        // リダイレクト
        return $this->redirect(['action' => 'index']);
      }

      // 保存失敗
      $this->Flash->error(__('保存できませんでした。'));
    }
    $this->set('article', $article);
  }
}

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

参考サイト
Saving Data (CakePHP Cookbook 3.x documentation)

2015年11月4日水曜日

CakePHP 3でエラーページのカスタマイズ

CakePHP 3エラーページのカスタマイズです。本当は、Smartyでエラー出力も制御したかったのですが、挫折しました。というわけで、下記の3つのテンプレートを変更すれば、エラーページのデザインは変更できます。

src/Template/Layout/default.ctp
src/Template/Error/error400.ctp
src/Template/Error/error500.ctp


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

参考サイト
Error & Exception Handling(CakePHP Cookbook 3.x documentation)

2015年11月3日火曜日

Node.js 5.0がリリース

Node.js 5.0がリリースさえたとのこと。長期サポート版のLTSではないため、安定性を求める場合は、Node.js v4.2.xへの移行が推奨されるそうです。



参考サイト
Node.js v5.0.0がリリース、サポート期間はv6がリリースされる2016年4月まで(CodeZine)

2015年11月2日月曜日

CakePHP 3のORMで、プライマリーキーによる単一エンティティーデータの取得「get()」

CakePHP 3のORMで、プライマリーキーによる単一エンティティーデータの取得「get()」です。データが見つからない場合、NotFoundExceptionが返るらしい。

get($id, $options =[])

オプションには、検索条件以外に、キャッシュなども設定できる模様。

src/Controller/ArticlesController.php
namespace App\Controller;
class ArticlesController extends AppController
{
  public function view($id = null)
  {
    $article = $this->Articles->get($id);
    $this->set(compact('article'));
  }
}

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

参考サイト
Retrieving Data & Results Sets(CakePHP Cookbook 3.x documentation)

2015年11月1日日曜日

JavaScriptフレームワーク「Vue.js 1.0」がリリース

JavaScriptフレームワーク「Vue.js 1.0」がリリースされました。ガイドに用意されている「他のフレームワークとの比較」を読むと、どんなものか理解しやすいかもしれません。

Vue.js は、API そして設計の両方の点から、Angular と比べて全体にとてもシンプルです。学習効率が非常に高いと言えます。



参考サイト
WebインターフェースのためのJavaScriptフレームワーク「Vue.js 1.0.0」がリリース(CodeZine)

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)

2015年9月30日水曜日

Silexでサービスの定義(Service definitions)

Silex(1.3)サービスの定義(Service definitions)です。あまり良くわかっていませんが、独自のサービスを作成して、簡単に組み込めるというものだと思います。

サービスを定義することはパラメーターを定義することとなんら違いはありません。 コンテナーに配列のキーでクロージャーを設定するだけです。 サービスを取得するときに初めてクロージャーは実行されます。 そのため、実際にサービスが必要とされるまでサービスの作成を遅延させることができます。

$app['some_service'] = function () {
  return new Service();
};

$app['some_service'] = function ($app) {
    return new Service($app['some_other_service'], $app['some_service.config']);
};

$service = $app['some_service'];

参考サイト
Services(Silex Documentation)
サービスの定義 (Service definitions)(Silexユーザーガイド)
Pimple 2.0がリリースされたのでPimpleについて復習してみる(iakioの日記さん)

2015年9月29日火曜日

Silexでログ(Monolog)

Silex(1.3)ログ(Monolog)です。MonologServiceProviderを登録すると、使えるようになります。

// MonologServiceProviderの登録
$app->register(new Silex\Provider\MonologServiceProvider(), array(
  'monolog.logfile' => __DIR__.'/log/development.log',
));

// ログ書き込み
$app['monolog']->addDebug('debug log');
$app['monolog']->addInfo('info log');
$app['monolog']->addWarning('warning log');
$app['monolog']->addError('error log');
実際に出力されるログ
[2015-09-29 00:01:01] myapp.INFO: Matched route "home". {"route_parameters":{"_controller":"[object] (Closure: {})","_route":"home"},"request_uri":"http://www.sample.com/"} []
[2015-09-29 00:02:02] myapp.INFO: > GET / [] []
[2015-09-29 00:03:03] myapp.DEBUG: debug log [] []
[2015-09-29 00:04:04] myapp.INFO: < 200 [] []

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

参考サイト
Silexを試してみた(5) - Logging(作業ノートさん)
MonologServiceProvider(Silex Documentation)
MonologServiceProvider(Silexユーザーガイド)
SilexとDBALを組み合わせたときに実行SQLをロギングする(Qiita)

2015年9月28日月曜日

Silexでキャッシュ(HttpCache)

Silex(1.3)キャッシュ(HttpCache)です。HttpCacheServiceProviderを登録すると、利用できるようになります。

use Symfony\Component\HttpFoundation\Response;

// キャッシュフォルダを設定
$app->register(new Silex\Provider\HttpCacheServiceProvider(), array(
  'http_cache.cache_dir' => __DIR__.'/cache/',
));

// レスポンスオブジェクトで、キャッシュのヘッダーを返す
$app->get('/', function() use($app) { 
  $body = $app['twig']->render('index.twig');
  return new Response($body, 200, array('Cache-Control' => 's-maxage=3600, public'));
});

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

参考サイト
Silex and the HTTP_CACHE(Nerdpress.orgさん)

2015年9月27日日曜日

Microsoftの機械学習を生かしたデータ分析を容易にするクラウドサービス「Azure Machine Learning」

Microsoftの機械学習を生かしたデータ分析を容易にするクラウドサービス「Azure Machine Learning」 データ分析の素人が、クラウド上のビッグデータを活用できるようになるというもの。気分は、アナリスト(笑)?





参考サイト
クラウドで機械学習を手近に、Azure Machine Learningの概要(ITpro)

2015年9月26日土曜日

nginx用スクリプト言語「nginxScript」が登場

nginx用スクリプト言語「nginxScript」が登場しました。JavaScriptのサブセットのような設計および実装になっており、nginxの設定ファイルにJavaScriptのようなコードを記述できるようになるとのこと。可能性を感じますね。



参考サイト
nginx用スクリプト言語「nginxScript」登場(マイナビニュース)

2015年9月25日金曜日

Silexでコントローラーの組織化

Silex(1.3)コントローラーの組織化です。システムが大きくなると、ソースが見難くなるので、グループ化して整理できます。

// blog用のコントローラー
$blog = $app['controllers_factory'];

// 各ルーティングコレクション
$blog->get('/', function () {
  return 'Blog home';
});
$blog->get('/show/{id}', function () {
  return 'Blog detail'.$id;
});
$blog->get('/edit/{id}', function () {
  return 'Blog edit '.$id;
});
$blog->get('/destroy/{id}', function () {
  return 'Blog delete'.$id;
});

// マウント
$app->mount('/blog', $blog);
それぞれ、

/blog/
/blog/show/123
/blog/edit/456
/blog/destroy/789

といった具合にアクセスできるようになります。

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

参考サイト
コントローラーの組織化 (Silex ユーザーガイド)
Organizing Controllers(Silex Documentation)

2015年9月24日木曜日

グリッドをセクシーに並べ替えてくれるjQueryプラグイン「Grid—A—Licious」

グリッドをセクシーに並べ替えてくれるjQueryプラグイン「Grid—A—Licious」 あまりの優雅な動きに見過ごすことが出来ませんでした。というわけで、我が実験サイトにも組み込んでしまいました(笑)。レスポンシブデザイン対応です。イメージ重視の写真を並べるようなサイトに良いと思います。



参考サイト
[JS]変更時のアニメーションが気持ちいい、レスポンシブ対応のかっこいいグリッドを生成するスクリプト -Grid—A—Licious(コリスさん)

2015年9月23日水曜日

中国産OS「NeoKylin OS」がWindowsを追撃

中国産OS「NeoKylin OS」がWindowsを追撃とのニュースを目にしました。Dellが中国で出荷するPCの42%には、Windowsではなく「NeoKylin OS」がプリインストールされているとのこと。
NeoKylinは10年に、中国国有のテクノロジー系複合企業、中国電子信息産業集団の子会社、中国標準軟件と、国防科学技術大学の提携によって誕生した。 NeoKylinは現在、政府機関や金融機関などで使用されている。


参考サイト
中国産OSがWindowsを追い落とす? 米メーカーも採用した「NeoKylin」(クラウド Watch)
デル、中国で国産OS搭載パソコンを販売(ウォール・ストリート・ジャーナル)
China’s Challenger to Apple iOS, Microsoft Windows(Wall Street Journal)
Kylin(Wikipedia)

2015年9月22日火曜日

クレジットカード決済を無料で導入できる「PAY.JP」

クレジットカード決済を無料で導入できる「PAY.JP」 初期費用導入費、月額費用、 その他固定費はすべて無料です。登録完了後、すぐにテスト環境を利用できるとのこと。Ruby、Python、PHP、JAVAなどのライブラリが用意されています。



参考サイト
クレカ決済を無料で導入できるPAY.JP 無料EC構築BASEが決済事業に新規参入(ASCII.jp)

2015年9月21日月曜日

マイクロソフトが独自のLinux「Azure Cloud Switch」

マイクロソフトが独自のLinux「Azure Cloud Switch」を開発しているそうです。ネットワーク機能をソフトウェア的に管理するためのもの(Software-Defined Network)ということではありますが、時代の流れでしょうか。



参考サイト
マイクロソフトが独自のLinuxを開発 Azure Cloud Switch(ACS)でSDNへ進出(ビジネス+IT)
Software-Defined Network(SDN)とは何か?(@IT)

2015年9月20日日曜日

QRコードはもう古い? 認識精度50倍の「カラーコード」

QRコードはもう古い? 認識精度50倍の「カラーコード」 QRコードに比べて約50倍の距離から認識が可能だそうです。また、角度が傾いている、ピントが合っていない、カラーコードが動いたままといった状態でも認識が可能です。

iPhoneに入れた専用アプリを起動し、本棚に沿って左右に動かしていくと、本の背表紙に張りつけてあるカラーコードが次々に読み取られていく。ピント合わせも認識待ちもなく、アプリの画面では認識完了を示す緑色の表示が並ぶ。棚一列、数十冊はあろうかという書籍の確認がわずか十数秒で完了した。


参考サイト
ICタグ、QRはもう古い 「カラフルなマス目」が脚光(日本経済新聞)
カラーコードに色めく企業 精度はQRコードの50倍(日本経済新聞)

2015年9月18日金曜日

Silexでベーシック認証とセッション

Silex(1.3)でベーシック認証とセッションです。SessionServiceProviderを登録して、非常に簡単に実現できます。

セッションの設定
$app['session']->set('user', array('username' => $username));

セッション情報の取得
$app['session']->get('user');

サンプルそのままです。
$app->register(new Silex\Provider\SessionServiceProvider());

$app->get('/login', function () use ($app) {
  $username = $app['request']->server->get('PHP_AUTH_USER', false);
  $password = $app['request']->server->get('PHP_AUTH_PW');

  if ($username === 'username' && $password === 'password') {
    // セッション設定
    $app['session']->set('user', array('username' => $username));
    return $app->redirect('/account');
  }

  $response = new Response();
  $response->headers->set('WWW-Authenticate', sprintf('Basic realm="%s"', 'Enter username and password'));
  $response->setStatusCode(401, 'Please sign in.');
  return $response;
});

$app->get('/account', function () use ($app) {
  // セッション情報取得
  if (null === $user = $app['session']->get('user')) {
    return $app->redirect('/login');
  }

  return "Welcome {$user['username']}!";
});

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

参考サイト
SessionServiceProvider(Silex Documentation)

2015年9月17日木曜日

Silexでバリデーションメッセージの日本語化

Silex(1.3)でバリデーションメッセージの日本語化です。TranslationServiceProviderを登録し、beforeフィルターで、翻訳ファイルを指定します。日本語の翻訳ファイル(validators.ja.xlf)は用意されているので、設定を加えるだけでOK。表示するメッセージを変えたい場合は、validators.ja.xlfファイルを編集すれば、良いと思います。

composer.json(symfonyのvalidator、translation、config、yamlが必要)
{
  "require": {
    "silex/silex": "~1.3",
    "twig/twig": "1.*",
    "symfony/twig-bridge": "~2.7",
    "symfony/validator": "~2.7",
    "symfony/translation": "~2.5",
    "symfony/config": "~2.7",
    "symfony/yaml": "~2.7",
    "doctrine/dbal": ">=2.5.0"
  }
}
PHP
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
  'locale' => 'ja',
  'translator.domains' => array(),
));

$app->before(function () use ($app) {
  $app['translator']->addLoader('xlf', new Symfony\Component\Translation\Loader\XliffFileLoader());
  $app['translator']->addResource('xlf', __DIR__.'/vendor/symfony/validator/Symfony/Component/Validator/Resources/translations/validators/validators.ja.xlf', 'ja', 'validators');
});

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

参考サイト
Translating Validation Messages(Silex Documentation)

2015年9月16日水曜日

Silexで入力データのバリデーション

Silex(1.3)で入力データのバリデーションです。まず、ValidatorServiceProviderを登録します。そうすると、

$errors = $app['validator']->validateValue(チェックするデータ, チェク規則);

という感じで、使えます。

PHP
$app->register(new Silex\Provider\ValidatorServiceProvider());

use Symfony\Component\Validator\Constraints as Assert;

$app->post('/login', function() use ($app){ 
  // POSTデータ
  $email = $app['request']->get('email');
  $password = $app['request']->get('password');

  // 入力データの配列
  $input = array(
    'email' => $email,
    'password' =>  $password,
  );

  // バリデーション規則の配列
  $constraint = new Assert\Collection(array(
    'email' => new Assert\Email(),
    'password' => new Assert\Length(array('min' => 10)),
  ));

  // エラーの取得
  $errors = $app['validator']->validateValue($input, $constraint);

  if (count($errors) > 0) {
  // バリデーションNG
    return $app['twig']->render('login.twig', array(
      'errors' => $errors,
    ));
  } else {
  // バリデーション成功後の処理
  }
});
Twig
{% for error in errors %}
  {{ error.propertypath }} {{ error.message }}
{% endfor %}
エラーメッセージが英語になりますが、どこかで日本語翻訳の設定ができるでしょう。それは、また後で。

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

参考サイト
ValidatorServiceProvider(Silex Documentation)
symfony/Validator(GitHub)

2015年9月15日火曜日

SilexでURLを生成するUrlGeneratorServiceProvider

Silex(1.3)でURLを生成するUrlGeneratorServiceProviderです。Twigを利用する場合は、twig-bridgeもインストールしておくと、更に便利に使えます。

PHP
$app->register(new Silex\Provider\UrlGeneratorServiceProvider());

$app['url_generator']->generate('hello', array('name' => 'Taro'));
Twig(pathとurlは、twig-bridgeをインストールする必要あり)
{{ app.url_generator.generate('hello', {name: 'Taro') }}

{{ path('hello', {name: 'Taro'}) }}
{{ url('hello', {name: 'Jiro'}) }}

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

参考サイト
UrlGeneratorServiceProvider(Silex Documentation)
Silexを試してみた(3) - URLを生成する(作業ノートさん)
Silexを試してみた(4) - Twig(作業ノートさん)

2015年9月14日月曜日

Silexで、Doctrine DBALを用いたDB接続

Silex(1.3)で、Doctrine DBALを用いたDB接続です。DBALは、PDOの上の抽象レイヤーで、PDOライクな記述になる模様。Doctrine ORMは、また別の設定に。

MySQLの例
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
  'db.options' => array(
    'driver'   => 'pdo_mysql',
    'host' => 'localhost',
    'dbname' => 'sampledb',
    'user' => 'userid',
    'password' => 'password',
    'charset'   => 'utf8',
  )
));

$app->get('/us-zip-code', function() use ($app){ 
  $sql = " SELECT * FROM zipcodes ";
  $zipcodes = $app['db']->fetchAll($sql);
  return $app['twig']->render('us-zip-code.twig', array(
    'zipcodes' => $zipcodes,
  ));
});

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

参考サイト
DoctrineServiceProvider(Silex Documentation)
Silexを試してみた(6) - Doctrine DBAL(作業ノートさん)

2015年9月13日日曜日

PHP 7が、WordPressを用いたベンチマークでHHVMよりも高速を達成(LiteSpeed)

PHP 7が、WordPressを用いたベンチマークでHHVMよりも高速を達成したとのこと(LiteSpeed)(PHP 7 vs HHVM Benchmark Series 3: How fast can WordPress go?)。

  • キャッシュなしではHHVMの方がPHP7よりも7%高速に動作
  • キャッシュあり(WP Super Cacheを使用)ではPHP7がHHVMよりも44%高速に、PHP5.6がHHVMよりも13%高速に動作
  • キャッシュなしではLiteSpeedとApacheがほぼ同じ性能を発揮
  • キャッシュありではLiteSpeedがApacheよりも89%高速に動作、NginxはApacheよりも26%高速に動作
  • キャッシュなしとキャッシュありでは最大で5700%の性能差

PHP5.6でも、キャッシュを利用すれば十分速いということでしょうか?!



参考サイト
PHP 7、WordPressベンチマークでHHVMよりも高速を達成(BIGLOBEニュース)
LiteSpeed Web Server
OpenLiteSpeed
HHVM
WordPress

2015年9月12日土曜日

「Oinker」チャットワークより高機能な知的生産性を向上してくれるウェブサービス

Oinkerチャットワークより高機能な知的生産性を向上してくれるウェブサービスです。友人のスーパープログラマーが制作したものなので、ちょっとお世辞も入っています(笑)。とにかく、非常に高機能で、よく出来ています。



基本的な機能は
  • チャット
  • チャットの発言を材料に情報を組み立てる
の2つ。


ただし、脳内のニューロンネットワークを構築するがごとく、データを系統立て並べ替え、整理できるので、以下の様なことが簡単に実現できます。
  • 個人的なメモを投稿、必要に応じて重要な部分をまとめる
  • 日常的にはチャットとして利用して、重要な情報だけは保存しておく
  • TODO管理(個人からチームまで)
  • ブレインストーミングからアイデアを組み立てる
  • プロジェクト管理

こちらが使い方のサンプルページ
ビジネス利用で鍛えられていますので、完成度が高いです。

チャットを試してみたい方は、私のユーザーIDがtalkativepgですので、遠慮無くどうぞ。デスクトップ通知にも対応しています。

使い方説明の動画


ファイルのアップロード


現在、キャンペーン中だそうで、2015年9月中に登録してくれた方は、ディスク容量1GBが、3GBにアップグレードされるそうです。希望する方は、こちらから、自己申告してください

ビジネス利用を検討してくれる方には、開発者本人が日本全国どこにでも営業、使い方説明に馳せ参じるそうです。

参考サイト
Oinkerブログ

2015年9月11日金曜日

SilexでGET、POSTデータをテンプレートエンジンのTwigで表示

Silex(1.3)でGET、POSTデータをテンプレートエンジンのTwigで表示です。ぷぎがぽぎさんのブログのrequest部分を参考にしました。

PHP(requestというグローバル変数にRequestオブジェクトを設定)
$app['twig'] = $app->share($app->extend('twig', function($twig, $app) {
  $twig->addGlobal('request', $app['request']);
  return $twig;
}));
Twig
<input type="text" name="username" value="{{request.get('username')}}" />
<input type="password" name="password" value="{{request.get('password')}}" />
{{request.getClientIp}}
{{request.getRequestUri}}
{{request.getQueryString}}

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

参考サイト
Silexを試してみた(ぷぎがぽぎさん)

2015年9月10日木曜日

SilexでGET、POSTデータの取得

Silex(1.3)GET、POSTデータの取得です。GETも、POSTも、$app['request']->get('パラメーター名');で取得できます。また、SymfonyのRequestオブジェクトからは、様々なデータにアクセスできる模様。

// GET
$id = $app['request']->get('id');

// POST
$username = $app['request']->get('username');
$password = $app['request']->get('password');

// その他のRequestオブジェクト
$ClientIp = $app['request']->getClientIp();
$RequestUri = $app['request']->getRequestUri();
$QueryString = $app['request']->getQueryString();

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

参考サイト
Usage(Silex Documentation)

2015年9月9日水曜日

Silexでリダイレクト(redirect)

Silex(1.3)でリダイレクト(redirect)です。

$app->get('/', function () use ($app) {
  return $app->redirect('http://talkativepg.byethost32.com/');
});

$app->get('/hello', function () use ($app) {
  return $app->redirect('/hi');
});

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

話は変わりますが、先日設定した「2FreeHosting.com」さんは重くて耐えられなくなったので、サーバーを引越ししました。今回お世話になるのは「byethost.com」さんです。同様に無料で、PHP、MySQLなどが利用できます。



参考サイト
使用方法 (Usage)(Silex ユーザーガイド)
Usage(Silex Documentation)