2016年3月31日木曜日

PHPフレームワークMakoで、パスワードハッシュ(Password hashing)

PHPフレームワークMako(4.5.10)パスワードハッシュ(Password hashing)です。bcryptアルゴリズムでハッシュ化されます。

use mako\security\Password;

// パスワードハッシュ
$hash = Password::hash('password');

// パスワードハッシュの検証
$valid = Password::validate('password', $hash);

参考サイト
Password hashing(Mako Framework Documentation)
mako\security\Password (Mako Framework API)

2016年3月30日水曜日

PHPフレームワークMakoで、ユーザーアカウントの有効化、無効化

PHPフレームワークMako(4.5.10)ユーザーアカウントの有効化、無効化です。

// ID($id)からユーザーオブジェクトを取得
$userProvider = $this->gatekeeper->getUserProvider();
$user = $userProvider->getById($id);

// 有効化(users テーブルの activated が 1 になり、ログイン可能に)
$user->activate();

// 無効化(users テーブルの activated が 0 になり、ログイン不可能に)
$user->deactivate();

// 利用禁止(users テーブルの banned が 1 になり、ログイン不可能に)
$user->ban();

// 利用可能に(users テーブルの banned が 0 になり、ログイン可能に)
$user->unban();

// 設定保存
$user->save();

参考サイト
Authentication(Mako Framework Documentation)
PHPフレームワークMakoで、ユーザー認証

2016年3月29日火曜日

PHPフレームワークMakoで、ログアウト(logout)

PHPフレームワークMako(4.5.10)ログアウト(logout)です。

$isLoggedIn = $this->gatekeeper->isLoggedIn();
if ( $isLoggedIn ) {
  $this->gatekeeper->logout();
}

参考サイト
Authentication(Mako Framework Documentation)

2016年3月28日月曜日

PHPフレームワークMakoで、ログイン判定(isLoggedIn)

PHPフレームワークMako(4.5.10)ログイン判定(isLoggedIn)です。gatekeeper ライブラリーの isLoggedIn メソッドで判定できます。ログインしていて、trueが返れば、getUser メソッドで、ユーザーオブジェクトを取得できます。

$isLoggedIn = $this->gatekeeper->isLoggedIn();
if ($isLoggedIn) {
  $user = $this->gatekeeper->getUser();
} else {
  $user = null;
}

参考サイト
Authentication(Mako Framework Documentation)

2016年3月27日日曜日

PostgreSQLベースの分散データベース「CitusDB」がオープンソースに

PostgreSQLベースの分散データベース「CitusDB」がオープンソースになったそうです。使いこなせたら、楽しいでしょうねぇ(笑)。
広域負荷分散(CDN)サービスのCloudFlareをはじめ、複数の企業がCitusDBを採用している。たとえばCloudFlareでは、400万以上の顧客のWebサイトからの100TB以上のデータに対してリアルタイム分析を行うのに利用しているという。


参考サイト
PostgreSQLベースの分散データベース「CitusDB」がオープンソースに(OSDN Magazine)

2016年3月26日土曜日

FreeBSDカーネルに置き換えたUbuntuBSDが登場

FreeBSDカーネルに置き換えたUbuntuBSDが登場したそうです。面白そうなのでメモ。
現在の構成はUbuntu 15.10 Wily WerewolfのカーネルをFreeBSD 10.1カーネルに置き換えたものが提供されています。
ブート領域はUFSですが,それ以外の領域にはZFSを選択することができます。デスクトップ環境としても利用できますが,サーバ構成でインストールしてサーバとして活用することもできるとされています。


参考サイト
ubuntuBSD登場(技術評論社)
ZFSがあればGitなんか要らない?(POSTD)

2016年3月25日金曜日

PHP(5.6.19)をソースからインストール

PHP(5.6.19)をソースからインストールしてみました。環境は、CentOS6.5、ApacheMySQLです。

libxml2-2.9.3
tar xzvf libxml2-2.9.3.tar.gz
cd libxml2-2.9.3
./configure --prefix=/opt/libxml2-2.9.3 --with-python=no
make
make install
libmcrypt-2.5.8
tar xzvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/opt/libmcrypt-2.5.8
make
make install
php-5.6.13
tar xzvf php-5.6.13.tar.gz
cd php-5.6.13
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-libxml-dir=/opt/libxml2-2.9.3  --with-mcrypt=/opt/libmcrypt-2.5.8 --prefix=/usr/bin/php --with-openssl --enable-mbstring --enable-mbregex --with-mysqli --with-pdo-mysql --with-mysql
make
make install

参考サイト
PHP5.6をソースからインストール(Qiita)
Linux – Building libxml2 on Red Hat Enterprise Linux(devsumo technotesさん)

2016年3月24日木曜日

Apache(2.4.18)をソースからインストール後、起動スクリプトの設定

Apache(2.4.18)をソースからインストール後、起動スクリプトの設定です。環境は、CentOS6.5です。

# スクリプトのコピー
cp httpd-2.4.18/build/rpm/httpd.init /etc/init.d/httpd
/etc/init.d/httpd(変更部分のみ)
60 httpd=${HTTPD-/usr/local/apache2/bin/httpd}
61 pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}
62 lockfile=${LOCKFILE-/usr/local/apache2/logs/${prog}}

66 check13 () {
67         CONFFILE=/usr/local/apache2/conf/httpd.conf
# 起動スクリプトを追加
chkconfig --add httpd

# 自動起動設定
chkconfig httpd on

# 確認
chkconfig --list httpd

# 設定確認
/etc/rc.d/init.d/httpd configtest

# 起動
/etc/rc.d/init.d/httpd start

# 停止
/etc/rc.d/init.d/httpd stop

参考サイト
Apache ソースインストール時の自動起動設定(Qiita)

2016年3月23日水曜日

Apache(2.4.18)をソースからインストール

Apache(2.4.18)をソースからインストールです。APR、APR-Util、PCREがそれぞれ必要らしいです。環境は、CentOS6.5です。

apr-1.5.2
tar zxvf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/opt/apr-1.5.2
make
make install
apr-util-1.5.4
tar zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/opt/apr-util-1.5.4 --with-apr=/opt/apr-1.5.2
make
make install
pcre-8.38
tar zxvf pcre-8.38.tar.gz
cd pcre-8.38
./configure --prefix=/opt/pcre-8.38
make
make install
httpd-2.4.18
tar httpd-2.4.18.tar.gz
cd httpd-2.4.18
./configure --enable-ssl --with-apr=/opt/apr-1.5.2 --with-apr-util=/opt/apr-util-1.5.4 --with-pcre=/opt/pcre-8.38 --with-ssl
make
make install

参考サイト
Apache2.4系をソースからインストール(Qiita)
Apache httpd 2.4 をソースからインストールする手順 (CentOS/RedHat)(WEB ARCH LABOさん)

2016年3月22日火曜日

yumでインストールの際に利用したrpmファイルを保存

yumでインストールの際に利用したrpmファイルを保存する方法です。yum.confkeepcache=1と設定すれば良いらしい。

/etc/yum.conf
[main]
keepcache=1
保存されたrpmファイル
/var/cache/yum/aaa.rpm
/var/cache/yum/bbb.rpm
/var/cache/yum/ccc.rpm

参考サイト
yumで使用したrpmファイルを保存する(kwyの日記さん)
yumでダウンロードしたrpmを残す(Linux Tipsさん)

2016年3月21日月曜日

C++やJavaScriptなどでゲーム開発できる「Atomic Game Engine」

C++やJavaScriptなどでゲーム開発できる「Atomic Game Engine」 充実した内容にビックリです。やる気があれば、人気ゲームソフトを生み出すのも、夢物語ではありません(笑)!
Atomic Game EngineはWindows、Mac OS X、Linux、Android、iOS、WebGLに対応するクロスプラットフォームのゲーム編集ソリューション。C++やJavaScript、TypeScriptでゲームやアプリケーションを作成できる。また、C#も初期サポートとして対応している。

ランタイム、高速な2Dレンダリングエンジンを含む2Dモジュール、OpenGL/Direct3D対応の3Dレンダリングエンジンを含む3Dモジュール、JavaScriptコードエディタを統合したシーンエディタなどのツールを含み、2D Physics Platformer、3D ToonTownなどのサンプルも備える。Chromiumを統合した2D/3D Web技術を用意しており、ソーシャルサービスのログイン、Eコマース、動画ストリーミング、WebRTC、アプリ内でのWebカメラ対応などにも容易に利用できる。


参考サイト
「Atomic Game Engine」がオープンソースに(OSDN Magazine)
AtomicGameEngine(GitHub)

2016年3月20日日曜日

Linuxの特殊なアクセス権、「スティッキービット(Sticky Bit)」とは?

Linuxの特殊なアクセス権、「スティッキービット(Sticky Bit)」とは、ということで、調べることに。
スティッキービット(Sticky Bit)が設定されたディレクトリでは、すべてのユーザーがファイル・ディレクトリを書き込めますが、所有者だけ(rootは除く)しか削除できなくなります。
drwxrwxrwt 5 root root 4096 Mar 20 /tmp/
確かに、tがついていました。知らずに利用していることが、多いなと、つくづく思いました。

日々精進あるのみです。

参考サイト
にわか管理者のためのLinux運用入門(IT Search +)
スティッキービット(Sticky Bit) - 特殊なアクセス権(kazmax Linuxで自宅サーバーさん)

2016年3月18日金曜日

PHPフレームワークMakoで、パスワード無しのログイン(forceLogin)

PHPフレームワークMako(4.5.10)パスワード無しのログイン(forceLogin)です。 パスワードを忘れた場合のリマインダーのような処理で利用できるでしょう。

$successful = $this->gatekeeper->forceLogin($email);

参考サイト
Authentication(Mako Framework Documentation)

2016年3月17日木曜日

PHPフレームワークMakoで、ユーザーのログイン(login)

PHPフレームワークMako(4.5.10)ユーザーのログイン(login)です。ログイン成功すると、$successfulに1の値が返ります。ログインに失敗すると、各種エラーコードが返ります。

Gatekeeper::LOGIN_BANNED = 100 ;
Gatekeeper::LOGIN_ACTIVATING = 101 ;
Gatekeeper::LOGIN_INCORRECT = 102 ;
Gatekeeper::LOGIN_LOCKED = 103 ;

また、ログインに失敗すると、usersテーブルのfailed_attemptsが1になり、last_fail_atに失敗した時の時刻が書き込まれます。

$username = 'sampleuser@example.org' ;
$password = 'password' ;
$successful = $this->gatekeeper->login($username, $password);

参考サイト
Authentication(Mako Framework Documentation)
framework/Gatekeeper.ph(GitHub)

2016年3月16日水曜日

PHPフレームワークMakoで、ユーザーのアクティブ化(activateUser)

PHPフレームワークMako(4.5.10)で、ユーザーのアクティブ化(activateUser)です。 usersテーブルのaction_tokenを参照して、ユーザーのアクティブ化をしています。 認証に成功すると、usersテーブルのactivatedが、0から1に変わります。

$token = 'abcdefg123456789' ;
$activated = $this->gatekeeper->activateUser($token);

参考サイト
Authentication(Mako Framework Documentation)
PHPフレームワークMakoで、ユーザー認証

2016年3月15日火曜日

PHPフレームワークMakoで、ユーザーとグループの作成

PHPフレームワークMako(4.5.10)ユーザーとグループの作成です。gatekeeper というライブラリーが用意されているので、これを利用すると簡単に認証機能が実現できそうです。

// ユーザー作成
$user = $this->gatekeeper->createUser('sampleuser@example.org', 'username', 'password');

// グループ作成
$group = $this->gatekeeper->createGroup('admin');

参考サイト
Authentication(Mako Framework Documentation)

2016年3月14日月曜日

PHPフレームワークMakoで、ユーザー認証

PHPフレームワークMako(4.5.10)で、ユーザー認証です。まずは、データベーススキーマから。テーブルを3つ準備します。

users
CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  `ip` varchar(255)  NOT NULL,
  `username` varchar(255)  NOT NULL,
  `email` varchar(255)  NOT NULL,
  `password` varchar(255)  NOT NULL,
  `action_token` char(64)  DEFAULT '',
  `access_token` char(64)  DEFAULT '',
  `activated` tinyint(1) NOT NULL DEFAULT 0,
  `banned` tinyint(1) NOT NULL DEFAULT 0,
  `failed_attempts` int(11) NOT NULL DEFAULT '0',
  `last_fail_at` datetime DEFAULT NULL,
  `locked_until` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
groups
CREATE TABLE `groups` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  `name` varchar(255)  NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
groups_users
CREATE TABLE `groups_users` (
  `group_id` int(11) unsigned NOT NULL,
  `user_id` int(11) unsigned NOT NULL,
  UNIQUE KEY `group_user` (`group_id`,`user_id`),
  KEY `group_id` (`group_id`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `groups`
    FOREIGN KEY (`group_id`)
    REFERENCES `groups` (`id`)
    ON DELETE CASCADE ON UPDATE NO ACTION,
  CONSTRAINT `users`
    FOREIGN KEY (`user_id`)
    REFERENCES `users` (`id`)
    ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

参考サイト
Database schema(Mako Framework Documentation)

2016年3月13日日曜日

ECサイト制作デザイン大賞2016

ECサイト制作デザイン大賞2016」を発見です! 
  • プラチナデザイン大賞 賞金10万円
  • ゴールドデザイン大賞 賞金5万円
2015年1月から2016年3月までに制作したECサイトが対象で、サイト全体で応募しても、商品1ページだけでもOKとのこと。



2016年3月12日土曜日

SQL ServerのLinux版が登場

SQL ServerのLinux版が登場するとのこと。2017年の半ばに一般提供される予定だそうです。これはビッグニュースですね。Microsoftの本気度がよくわかります。



参考サイト
Linux版「SQL Server」--マイクロソフトの狙いと残された疑問(ZDNet Japan)

2016年3月11日金曜日

PHPフレームワークMakoで、ORM

PHPフレームワークMako(4.5.10)ORMです。う、う、動いています。ちょっと感動。一山越えたかな(笑)?

app/models/Article.php
namespace app\models;

use mako\database\midgard\ORM;

class Article extends ORM
{
  protected $tableName = 'articles';
}
app/controllers/Blog.php
namespace app\controllers;

use mako\http\routing\Controller;
use mako\view\ViewFactory;
use \app\models\Article;

class Blog extends Controller
{
  public function read(ViewFactory $view, $id)
  {
    $article = Article::get($id);
    $view->assign('article', $article);
    return $view->create('blog/read');
  }
}

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

参考サイト
ORM(Mako Framework Documentation)

2016年3月10日木曜日

PHPフレームワークMakoで、クエリビルダ-(Query builder)

PHPフレームワークMako(4.5.10)クエリビルダ-(Query builder)です。

app/controllers/Blog.php
$connection = $this->database->connection();
$query = $connection->builder();
$blog = $query->table('blogs')->where('id', '=', $id)->first();
実際に設定してみたサイトがこちら

参考サイト
Query builder(Mako Framework Documentation)

2016年3月9日水曜日

PHPフレームワークMakoで、デバック用ツールバー(toolbar)

PHPフレームワークMako(4.5.10)デバック用ツールバー(toolbar)です。設定すると、ツールバー上で、セッションや変数情報、メモリ使用状況、表示スピード、SQLクエリなどが確認できるようになります。

app/config/application.php
'packages' =>
[
  'core' =>
  [

  ],
  'web' =>
  [
    'mako\toolbar\ToolbarPackage',
  ],
  'cli' =>
  [

  ]
],
app/bootstrap.php
$container->get('response')->filter(function($body) use ($container)
{
  $toolbar = $container->get('toolbar')->render();
  return str_replace('', $toolbar . '', $body);
});
/app/config/database.php
  'log_queries' => true,

画面下部に、このようなツールバーが現れます。


2016年3月8日火曜日

PHPフレームワークMakoで、データベース接続(Databases)

PHPフレームワークMako(4.5.10)データベース接続(Databases)です。うまく接続できました。嬉しい!

/app/config/database.php
'configurations' =>
[
  'test' =>
  [
    'dsn'         => 'mysql:dbname=sample;host=localhost;port=3306',
    'username'    => 'username',
    'password'    => 'password',
    'persistent'  => false,
    'log_queries' => false,
    'reconnect'   => false,
    'queries'     =>
    [
      "SET NAMES UTF8",
    ],
  ],

  'sqlite' =>
  [
    'dsn'         => 'sqlite:' . MAKO_APPLICATION_PATH . '/storage/database/test.sqlite',
    'log_queries' => false,
    'reconnect'   => false,
    'queries'     =>
    [
      "PRAGMA encoding = 'UTF-8'",
    ],
  ],
],
$id = 5;
$rows = $connection->all('SELECT * FROM `items` WHERE `id` >= ?', [$id]);
実際に設定してみたサイトがこちら

参考サイト
Databases(Mako Framework Documentation)

2016年3月7日月曜日

PHPフレームワークMakoで、コマンドライン(reactor)

PHPフレームワークMako(4.5.10)コマンドライン(reactor)です。予め用意されているコマンドもありますし、独自のコマンドを作成することも可能なようです。

$ php reactor app.routes

------------------------------------------------------------------------
| Route          | Allowed methods    | Action                         |
------------------------------------------------------------------------
| /              | GET, HEAD, OPTIONS | app\controllers\Index::welcome |
| /articles/{id} | GET, HEAD, OPTIONS | Closure                        |
| /blog/{id}     | GET, HEAD, OPTIONS | app\controllers\Blog::show     |
| /blog/create   | GET, POST          | app\controllers\Blog::create   |
------------------------------------------------------------------------
実際に設定してみたサイトがこちら

参考サイト
Command line(Mako Framework Documentation)

2016年3月6日日曜日

サーバーサイドのSwift「Perfect」

サーバーサイドのSwiftPerfect」 これはかなり面白い動きだなと思いますね。Swiftを勉強しようかな?
Appleが先日オープンソース化したSwiftを使ったPerfectは、OSXやLinux、Windows、iOS、Androidといった、複数のプラットフォームにまたがったクロスプラットフォーム開発のサポートを提供している。同社CEOのSean Stephens氏によると、Swiftをクライアントとサーバ両方で採用することによって、コードやロジックの再利用による開発プロセスの効率化が実現すると同時に、Swiftの持つ高レベルの安全性とセキュリティ、パフォーマンスを活用できる。


参考サイト
サーバでSwiftを使用可能にするPerfect(InfoQ)

2016年3月5日土曜日

独自のデスクトップ環境Budgieを持つLinux「Solus」

独自のデスクトップ環境Budgieを持つLinux「Solus」 インストールしてみたわけではないのですが、その操作性に目を奪われました。面白い存在になる予感がします(?)。





参考サイト
独自のデスクトップ環境「Budgle」を備えるLinuxデスクトップOS「Solus 1.1」(OSDN Magazine)

2016年3月4日金曜日

PHPフレームワークMakoで、クッキー(cookie)

PHPフレームワークMako(4.5.10)でクッキー(cookie)です。

// 設定(3600は、秒数)
$this->response->cookie('name', 'value', 3600);

// 読み込み
$name = $this->request->cookie('name');

// データの有無をチェック
$hasCookie = $this->response->hasCookie('name');

// 削除
$this->response->removeCookie('name');
実際に設定してみたサイトがこちら

参考サイト
Response(Mako Framework Documentation)

2016年3月3日木曜日

PHPフレームワークMakoで、リダイレクト(redirect)

PHPフレームワークMako(4.5.10)でリダイレクト(redirect)です。

return $this->response->redirect('/');

return $this->response->redirect('/hello')->status(301);
実際に設定してみたサイトがこちら

参考サイト
Response(Mako Framework Documentation)

2016年3月2日水曜日

PHPフレームワークMakoで、その他のリクエスト

PHPフレームワークMako(4.5.10)でその他のリクエストです。

$referer = $this->request->referer();

$ip = $this->request->ip();

$isAjax = $this->request->isAjax();

// HTTPSか否か
$isSecure = $this->request->isSecure();

$baseURL = $this->request->baseURL();

// GETやPOSTなど
$method = $this->request->method();
実際に設定してみたサイトがこちら

参考サイト
Request(Mako Framework Documentation)

2016年3月1日火曜日

PHPフレームワークMakoでサーバーデータ($_SERVER)の取得

PHPフレームワークMako(4.5.10)でサーバーデータ($_SERVER)の取得です。$this->request->server('○○') で取得可能です。

// すべて
$all = $this->request->server();

$REMOTE_ADDR = $this->request->server("REMOTE_ADDR");
$HTTP_REFERER = $this->request->server("HTTP_REFERER");
$HTTP_USER_AGENT = $this->request->server("HTTP_USER_AGENT");
$REQUEST_METHOD = $this->request->server("REQUEST_METHOD");
$REQUEST_URI = $this->request->server("REQUEST_URI");
実際に設定してみたサイトがこちら

参考サイト
Request(Mako Framework Documentation)