2016年4月30日土曜日

Linux Mintがデスクトップ環境「Cinnamon 3.0」をリリース

Linux Mintがデスクトップ環境「Cinnamon 3.0」をリリースしました。ぱっと見た感じでは、大きな変更はないような感じ(?)がします。特に、Windowsユーザーは、違和感なく、すぐに使いこなせるでしょう。下の映像にもありますが、Ubuntuで使うのもアリだなと思いました。



Ubuntu 16.04 上での Cinnamon 3.0 動作サンプル


参考サイト
Linux Mint、デスクトップ環境「Cinnamon 3.0」をリリース(OSDN Magazine)

2016年4月28日木曜日

PHPフレームワークMakoで、AND+OR検索

PHPフレームワークMako(4.5.10)で、AND+OR検索です。泣けました。where句の「'AND ('」とorWhereRaw句の「"'%" . $value . "%')"」にある、カッコ「(」「)」の2つがミソです。なんとか動きました。

// $keywords は、検索キーワードの配列
$blogs = Blog::where('blogs.publish', '=', 1);
if (count($keywords) > 0) {
  foreach ($keywords as $key => $value) {
    $blogs = $blogs->where('blogs.title', 'LIKE', '%' . $value . '%', 'AND (')
      ->orWhereRaw('blogs.contents', 'LIKE', "'%" . $value . "%')");
  }
}
$blogs = $blogs->orderBy('blogs.createat', 'desc')
  ->limit($limit)
  ->offset($offset)
  ->all();
実際に設定してみたサイトがこちら

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

2016年4月27日水曜日

PHPフレームワークMakoで、ユーザーパスワードの変更

PHPフレームワークMako(4.5.10)で、ユーザーパスワードの変更です。ものすごく進みが遅いですが、とにかく前に(笑)。

use mako\security\Password;
use \app\models\User;

$password = Password::hash($password);

$user = $this->gatekeeper->getUser();
if ($user) {
  $user = User::get($id);
  $user->password = $password;
  $user->save();
}
実際に設定してみたサイトがこちら

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

2016年4月26日火曜日

PHPフレームワークMakoで、フィルター(Route filters)

PHPフレームワークMako(4.5.10)で、フィルター(Route filters)です。beforeフィルターでログインチェックしている例です。

/app/routing/filters.php
$filters->register('login_check', 'app\routing\filters\LoginCheck');

/app/routing/routes.php
$routes->get('/member', 'Members::mypage', 'mypage')->before('login_check');

/app/routing/filters/LoginCheck.php
namespace app\routing\filters;

use mako\http\Request;
use mako\http\Response;
use mako\auth\Gatekeeper;

class LoginCheck
{
  protected $request;
  protected $response;
  protected $gatekeeper;

  public function __construct(Request $request, Response $response, Gatekeeper $gatekeeper)
  {
    $this->request = $request;
    $this->response = $response;
    $this->gatekeeper = $gatekeeper;
  }

  public function filter()
  {
    $isGuest = $this->gatekeeper->isGuest();
    if ($isGuest) {
      return $this->response->redirect("/login");
    }
  }
}

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

参考サイト
Route filters(Mako Framework Documentation)

2016年4月25日月曜日

PHPフレームワークMakoで、メールアドレス認証

PHPフレームワークMako(4.5.10)で、メールアドレス認証です。

一通りドキュメントを読み終えて、Mako(4.5.10)については、おおまかに、どんなものかわかったので、この辺で止めても良いのですが、もうちょっと形になるまで、悪あがきをしようと思います。繰り返しになる部分もあると思いますが、ぐだぐだと続けます(笑)。

// $tokenは、$user->action_token
$activated = $this->gatekeeper->activateUser($token);
実際に設定してみたサイトがこちら

メールの認証機能ができて、自己満足(笑)。

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

2016年4月24日日曜日

法事などに僧侶を手配するサービス「お坊さん便」

法事などに僧侶を手配するサービス「お坊さん便」 ニュースで見て、初めて知ったのですが、こんなサービスがあるんですね。いろいろな意見があるとは思いますが、消費者にとっては選択肢が広がって良いのではないでしょうか。



参考サイト
アマゾン「お坊さん便」中止要請に回答 事実上の拒否か(朝日新聞デジタル)
お坊さん便

2016年4月23日土曜日

ITの力を借りて海外に安く送金するサービス「TransferWise」

ITの力を借りて海外に安く送金するサービス「TransferWise」 これは賢いサービスだと思います。海外送金は手数料が高いので、需要は大きいでしょう。急拡大間違いなしといったところでしょうか。





参考サイト
国際送金を変える「トランスファーワイズ」 日本でも始動(Forbes JAPAN)

2016年4月22日金曜日

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

PHPフレームワークMako(4.5.10)で、Smartyです。 MartyというSmartyのラッパーパッケージがありましたので、組み込んでみました。Makoのディフォルトのテンプレートエンジンも良いのですが、やはり、Smartyの方が、いろいろ細かい操作ができるので便利な気がします。

/app/config/application.php
return [
  'packages' => [
    // …
    'web' => [
      'marty\MartyPackage',
    ],
  ],
];


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

参考サイト
bertptrs/marty(GitHub)

2016年4月21日木曜日

PHPフレームワークMakoで、エラーハンドリング(Error handling)

PHPフレームワークMako(4.5.10)で、エラーハンドリング(Error handling)です。

/app/bootstrap.php
$errorHandler = $container->get('errorHandler');

// 404 NotFoundException エラー
$errorHandler->handle('mako\http\exceptions\NotFoundException', function($exception)
{
  $response = makoContainer()->get('response');
  $urlBuilder = makoContainer()->get('urlBuilder');
  $view = makoContainer()->get('view');
  $view->assign('exception', $exception);
  $response->body($view->create('notfound'))->status(404)->send();
  exit;
});

function makoApp()
{
  return mako\application\Application::instance();
}

function makoContainer()
{
  return mako\application\Application::instance()->getContainer();
}

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

参考サイト
Error handling(Mako Framework Documentation)
Errorhandling(Mako Discussions Forum)

2016年4月20日水曜日

PHPフレームワークMakoで、入力チェックのバリデーション(Validation)

PHPフレームワークMako(4.5.10)で、入力チェックのバリデーション(Validation)です。Laravelに似ている感じ(?)です。

エラーメッセージの日本語化は、こちらのファイル。
/app/resources/i18n/ja_JP/strings/validate.php

// バリデーション
$rules =
[
  'email'    => ['required', 'email'],
  'password' => ['required', 'min_length:8', 'max_length:20'],
  'password_confirm' => ['required', 'min_length:8', 'max_length:20', 'match:"password"'],
];

$validator = $this->validator->create($this->request->post(), $rules);

if($validator->isValid())
{
  // OK

} else {
  // NG
  $errors = $validator->getErrors();
}

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

参考サイト
Validation(Mako Framework Documentation)

2016年4月19日火曜日

PHPフレームワークMakoで、UUID(UUID helper)

PHPフレームワークMako(4.5.10)で、UUID(UUID helper)です。単純にランダムな一意のユニーク値を得たい場合は、v4を使うのが良いのでしょう。v3とv5は、使い方がよくわかりませんでした。UUIDは、実は奥が深いです。

// :v3 MD5でハッシュ化された128bitの一意なユニーク値
$uuid = UUID::v3(UUID::OID, 'foobar');

// :v4 ランダムな128bitの一意なユニーク値
$uuid = UUID::v4();

// :v5 SHA1でハッシュ化された128bitの一意なユニーク値
$uuid = UUID::v5(UUID::OID, 'foobar');

参考サイト
UUID helper(Mako Framework Documentation)
UUIDはなぜ、分散環境で好き勝手に生成しても衝突しないのか。RFC4122規格とUUIDの性質。(三度の飯とエレクトロンさん)
UUID と Perl について(daily dayflowerさん)
Generating v5 UUID. What is name and namespace?(Stack Overflow)

2016年4月18日月曜日

PHPフレームワークMakoで、URLビルダー(URL builder)

PHPフレームワークMako(4.5.10)で、URLビルダー(URL builder)です。名前付きURLのtoRoute は、URLが存在していないとエラーが出ますが、to は、URLが存在していなくてもエラーにならずに、URLだけ作成してくれます。

// 指定URL
$url = $this->urlBuilder->to('/blog', ['q' => $keyword]);

// 名前付きURL
$url = $this->urlBuilder->toRoute('home');

// ホーム
$url = $this->urlBuilder->base();

// 現在のURL
$url = $this->urlBuilder->current();

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

2016年4月17日日曜日

「Microsoft Bot Framework」のプログラミング例を説明したビデオ

Microsoft Bot Framework」のプログラミング例を説明したビデオです。いやー、未来を感じますね。プログラミングはもちろん、日本語のスキルも問われそうな気がします(笑)。







参考サイト
Microsoft、Skype向け人工知能ボットのプレビュー版と開発フレームワークを発表(INTERNET Watch)

2016年4月16日土曜日

クライアントサイドで、JavaScriptでウェブサイトを生成する「CMS.js」

クライアントサイドで、JavaScriptでウェブサイトを生成する「CMS.js」 HTML、CSS、JavaScriptのみで、サーバーサイドの力は借りないとのこと。Rubyで言うところの「Jekyll」を目指しているそうです。実際に使うかどうかは別として、試みは面白いと思います。



参考サイト
Jekyll

2016年4月15日金曜日

PHPフレームワークMakoで、文字列操作(String helper)

PHPフレームワークMako(4.5.10)で、文字列操作(String helper)です。

use mako\utility\Str;

// ランダムな文字列(英数字)
$str = Str::random(Str::ALNUM);

// ランダムな文字列(英字)
$str = Str::random(Str::ALPHA);

// ランダムな文字列(数字)
$str = Str::random(Str::NUMERIC);

// 改行表示
$blog_text = Str::br2nl($blog_text);

// 文字列短縮
$blog_text = Str::limitChars($blog_text, 100);

// 自動リンク
$blog_text = Str::autolink($blog_text);

// アンダースコアに変更
$str = Str::camel2underscored('HelloWorld');

// キャメルケースに変更
$str = Str::underscored2camel('hello_world');

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

参考サイト
String helper(Mako Framework Documentation)

2016年4月14日木曜日

PHPフレームワークMakoで、セッション(Sessions)

PHPフレームワークMako(4.5.10)で、セッション(Sessions)です。

// セッション設定
$this->session->put('user', $user);

// セッション取得
$user = null ;
if ($this->session->has('user')) {
  $user = $this->session->get('user');
}

// セッション削除
$this->session->remove('user');

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

参考サイト
Sessions(Mako Framework Documentation)

2016年4月13日水曜日

PHPフレームワークMakoで、ページ送り(Pagination)

PHPフレームワークMako(4.5.10)で、ページ送り(Pagination)です。複雑すぎず、簡素すぎず、扱いやすいと思います。

/config/pagination.php
<?php
return
[
  /**
   * ---------------------------------------------------------
   * Key
   * ---------------------------------------------------------
   *
   * $_GET array key used for pagination.
   */

  'page_key' => 'page',

  /**
   * ---------------------------------------------------------
   * Max page link
   * ---------------------------------------------------------
   *
   * Maximum number of pagination links to display.
   */

  'max_page_links' => 5,

  /**
   * ---------------------------------------------------------
   * Items per page
   * ---------------------------------------------------------
   *
   * Number of items to show per page.
   */

  'items_per_page' => 20,
];
use \app\models\Blog;

// データの総数を渡して、ページネーションのインスタンスを作成
$pagination = $this->pagination->create(
  Blog::where('status', '=', 1)->count()
);

$limit = $pagination->limit() ;

$offset = $pagination->offset() ;

$blogs = Blog::where('status', '=', 1)
  ->limit($limit)
  ->offset($offset)
  ->all();

$paginationLinks = $pagination->render('pagination');

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

参考サイト
Pagination(Mako Framework Documentation)

2016年4月12日火曜日

PHPフレームワークMakoで、イメージ操作(Image manipulation)

PHPフレームワークMako(4.5.10)で、イメージ操作(Image manipulation)です。 これは便利ですね。使えます。

use mako\pixl\Image;
use mako\pixl\processors\GD;

$image = new Image('sample.jpg', new GD);

// 高さ
$height = $image->getHeight();

// 幅
$width = $image->getWidth();

// 高さ[height]と幅[width]の配列
$dimensions = $image->getDimensions();

// サイズ変更
$image->resize(300, 300, Image::RESIZE_AUTO);

// 明るさ
$image->brightness(10);

// 白黒に
$image->greyscale();

// フォーマット変更
$image->getImageBlob('png');

// 保存
$image->save('sample.png');

参考サイト
Image manipulation(Mako Framework Documentation)

2016年4月11日月曜日

PHPフレームワークMakoで、単位を読みやすくする(Humanizer)

PHPフレームワークMako(4.5.10)で、単位を読みやすくする(Humanizer)です。ディフォルトでは、日本語のランゲージパックがないので、追加する必要があります。

以下、エラーメッセージ
/app/resources/i18n/ja_JP/strings/humanizer.php 
language file does not exist in the [ ja_JP ] language pack.
追加したランゲージパック
/app/resources/i18n/ja_JP/strings/humanizer.php
<?php
//---------------------------------------------
// Language file used by mako\utility\Humanizer
//---------------------------------------------
return
[
  'yesterday'   => '昨日',
  'today'       => '今日',
  'tomorrow'    => '明日',
  'minute_ago'  => '1分前',
  'minutes_ago' => '%u分前',
  'in_minute'   => '1分後',
  'in_minutes'  => '%u分後',
];

$fileSize = $this->humanizer->fileSize(1024, false); 

$now = $this->humanizer->day(Time::now()); 

$rewind = $this->humanizer->day(Time::now()->rewind(60*60*24)); 

$forward = $this->humanizer->day(Time::now()->forward(60*60*24));

$now2 = $this->humanizer->time(Time::now()); 

$rewind2 = $this->humanizer->time(Time::now()->rewind(60*4)); 

$rewind3 = $this->humanizer->time(Time::now()->rewind(60*60)); 

$rewind4 = $this->humanizer->time(Time::now()->rewind(60*60*24)); 

$forward2 = $this->humanizer->time(Time::now()->forward(60*4)); 

$forward3 = $this->humanizer->time(Time::now()->forward(60*60)); 

$forward4 = $this->humanizer->time(Time::now()->forward(60*60*24));

参考サイト
Humanizer(Mako Framework Documentation)

2016年4月10日日曜日

LiteSpeedがNginxより高速なベンチマーク結果を公開

LiteSpeedがNginxより高速なベンチマーク結果を公開したとのこと。ウェブサーバーの世界も、より競争が激しくなってきましたね。
OpenLiteSpeed 1.4.15と比較して、小さなサイズのスタティックなファイルを対象としたベンチマーク試験で2倍から3倍の高速性を実現している。1コアから8コアまで動作速度が比較されており、NginxはOpenLiteSpeed 1.4.15とOpenLiteSpeed 1.4.16の間の性能を示している。


参考サイト
LiteSpeed、Nginxより高速なベンチマーク結果公開(マイナビニュース)

2016年4月9日土曜日

JavaScriptの非同期通信だけなら「SuperAgent」

JavaScriptの非同期通信だけなら「SuperAgent」 試してないんですが、良さそうなのでメモです。非同期通信のためだけに、jQueryを読み込むのは避けたいという場合の選択肢として良いかもしれません。

request
  .post('/api/pet')
  .send({ name: 'Manny', species: 'cat' })
  .set('X-API-Key', 'foobar')
  .set('Accept', 'application/json')
  .end(function(err, res){
  if (err || !res.ok) {
    alert('Error');
  } else {
    alert('Success ' + JSON.stringify(res.body));
  }
});


参考サイト
jQuery.ajaxの代わりにSuperAgentを使う(Qiita)
visionmedia/superagent(GitHub)

2016年4月8日金曜日

PHPフレームワークMakoで、HTMLヘルパー(helper)

PHPフレームワークMako(4.5.10)で、HTMLヘルパー(helper)です。 コントローラー内で使うもので、テンプレートのビューで利用するものではないようです。

use mako\utility\HTML;

$html = new HTML;

// <br>
echo $html->tag('br');

// <span>
echo $html->tag('span', ['id' => '123', 'class' => 'badge'], 'NEW');

// <audio>
echo $html->audio('http://example.org/file.mp3');

// <video>
echo $html->video('http://example.org/file.mp4');

// <ul>
$items = ['aaa', 'bbb', 'ccc'];
echo $html->ul($items);

参考サイト
HTML helper(Mako Framework Documentation)

2016年4月7日木曜日

PHPフレームワークMakoで、ファイルシステム(File system)

PHPフレームワークMako(4.5.10)で、ファイルシステム(File system)です。 使い方は、わかりやすいと思います。

// 存在チェック
$exists = $this->fileSystem->exists('/logs/2016-04-01.log');

// ファイルか否か
$isFile = $this->fileSystem->isFile('/logs/2016-04-01.log');

// ディレクトリか否か
$isDirectory = $this->fileSystem->isDirectory('/logs/');

// 読み込み可能か否か
$isReadable = $this->fileSystem->isReadable('/logs/2016-04-01.log');

// 書き込み可能か否か
$isWritable = $this->fileSystem->isWritable('/logs/2016-04-01.log');

// 最終更新日時
$lastModified = $this->fileSystem->lastModified('/logs/2016-04-01.log');

// サイズ
$size = $this->fileSystem->size('/logs/2016-04-01.log');

// ファイル拡張子
$extension = $this->fileSystem->extension('/logs/2016-04-01.log');

// MIMEタイプ
$mime = $this->fileSystem->mime('/logs/2016-04-01.log');

// ファイル一覧
$paths = $this->fileSystem->glob('/logs/*.log');

// ファイル読み込み
$contents = $this->fileSystem->getContents('/logs/2016-04-01.log');

参考サイト
File system(Mako Framework Documentation)

2016年4月6日水曜日

PHPフレームワークMakoで、日付と時間を扱うクラス(Date and time)

PHPフレームワークMako(4.5.10)で、日付と時間を扱うクラス(Date and time)です。基本的なものしか用意されていませんが、十分かもしれません。

use mako\chrono\Time;
use mako\chrono\TimeZone;

// 基本
$time = new Time();

// タイムゾーン指定
$time = new Time('now', 'Europe/Paris');

// 現在時刻
$time = Time::now();

// フォーマットを指定して日時を取得
$time = Time::createFromFormat('Y-m-d', '2016-04-01');

// 1時間進める
$time->forward(3600);

// 該当月の日数
$daysInMonth = $time->daysInMonth();

参考サイト
Date and time(Mako Framework Documentation)

2016年4月5日火曜日

PHPフレームワークMakoで、キャッシュ(Caching)

PHPフレームワークMako(4.5.10)で、キャッシュ(Caching)です。インスタンスには、APCMemcacheRedisなど、いろいろ設定できるようですが、ディフォルトは、ファイルキャッシュです。

// インスタンス
$cache = $this->cache->instance();

// キャッシュキーが存在すれば
if($cache->has('my_array'))
{
  // キャッシュデータを取得
  $cached = $cache->get('my_array');
} else {
  $cached = [1, 2, 3, 4] ;
  // キャッシュを設定
  $cache->put('my_array', $cached, 3600);
}

参考サイト
Caching(Mako Framework Documentation)

2016年4月4日月曜日

PHPフレームワークMakoで、配列ヘルパー(Array helper)

PHPフレームワークMako(4.5.10)で、配列ヘルパー(Array helper)です。ドット「.」でアクセスできて便利に使えます。

use mako\utility\Arr;

$cars = ["car" => ["Toyota" => ["stock"=>20, "sold"=>15]]];

// 値を取得
$carstock = Arr::get($cars, 'car.Toyota.stock');

// 値を設定
Arr::set($cars, 'car.Toyota.stock', 25);

// 値を削除
Arr::delete($cars, 'car.Toyota.sold');

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

2016年4月3日日曜日

Googleが写真編集プラグイン「Nik Collection」を無料化

Googleが写真編集プラグイン「Nik Collection」を無料化したとのこと。使いこなすには、ある程度のスキルが必要かもしれません。ちょっと使ってみましたが、その真価がよくわかりませんでした(笑)。とにかく、要チェックです。



参考サイト
Google、写真編集プラグイン集「Nik Collection」を無料化(ITmedia ニュース)
Nik Collection by Google(YouTube)

2016年4月2日土曜日

ブラウザ表示を3割高速化するJavaScriptフレームワーク「Polaris」

ブラウザ表示を3割高速化するJavaScriptフレームワーク「Polaris」 ウェブの世界も、まだまだ進化の途中と言ったところでしょうか。
MITが新しく開発した「Polaris」は、ブラウザーからのHTTP要求に応じたHTMLページと、あらかじめ生成しておいたページ構成要素の依存ツリーを記す「Scout」と呼ばれる情報を添付し、さらにJavaScript製のスケジューラーモジュールを返すという仕組みです。


参考サイト
MITがブラウザの表示を34%高速化するJavaScriptフレームワークを開発(ギズモード・ジャパン)

2016年4月1日金曜日

PHPフレームワークMakoで、暗号化(Encryption)

PHPフレームワークMako(4.5.10)で、暗号化(Encryption)です。 Mcrypt、またはOpenSSLで暗号化されます。

// 暗号化インスタンス
$encrypter = $this->crypto->instance();
$encrypter = $this->crypto->instance('openssl');

// 暗号化
$encrypted = $encrypter->encrypt('Hello, world!');

// 復号化
$decrypted = $encrypter->decrypt($encrypted);

参考サイト
Encryption and signing(Mako Framework Documentation)