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)