2017年2月20日月曜日

Laravel5.4でDateTime()がエラーになる

Laravel5.4で、DateTime()がエラーになるのは、名前空間(namespace)にDateTimeクラスを見つけられないかららしい。「use DateTime;」、あるいは「use Carbon\Carbon;」などとインポートステートメントを追加すれば解決します。

/app/Http/Controllers/BlogsController.php
use DateTime;
use Carbon\Carbon;

  public function test()
  {
    $now = new DateTime();
    $now = Carbon::now();
  }

参考サイト
how to use php DateTime() function in Laravel 5(Stack Overflow)

2017年2月19日日曜日

MariaDBやMySQLで利用できる大規模システム用分散ストレージエンジン「Spider」

MariaDBやMySQLで利用できる大規模システム用分散ストレージエンジン「Spider」 その機能に感動しました。これ最高に素晴らしいです!!

  • Spiderは、MySQLの既存のアーキテクチャーを更新して改善するストレージデータベースとリモートデータベースにアクセスする際の最初のステップです。
  • Spiderはデータベーストランザクションをサポートします。
  • Spiderは無制限のユーザーがMySQLデータベースにすばやくアクセスできるようにします。
  • SpiderはMySQLのパーティショニングをサポートしています。
  • Spiderは、無制限の並列処理をサポートする単一のシステムとして機能します。
  • 分散トランザクションとテーブル分割自体をサポートするために、Spiderもデータベースシャーディング用に作成されています。




参考サイト
ストレージエンジン「Spider」が目指す世界(エンタープライズジン)
Spiderストレージエンジンのご紹介
快適スケールアウト生活への第一歩。SPIDERストレージエンジンを使ってみよう!(漢(オトコ)のコンピュータ道さん)

2017年2月18日土曜日

セキュリティに特化した組み込み独自OS「KasperskyOS」

セキュリティに特化した組み込み独自OS「KasperskyOS」 IoTの時代を感じさせますねぇ。

OS自体にセキュリティ機能を備え、通信機器のサイバーリスクを低減し、IoT機器に適したセキュリティポリシーを備える。


ロシア語の解説。全くわからない。

参考サイト
カスペルスキー、セキュリティ特化の組み込み向け独自OS「KasperskyOS」(マイナビニュース)

2017年2月17日金曜日

Laravel5.4でデータベーストランザクション(Database Transactions)

Laravel5.4で、データベーストランザクション(Database Transactions)です。DBファサードのトランザクションメソッドを使用することで、クエリビルダーとEloquent ORMのトランザクションも制御できるとのこと。

/app/Http/Controllers/BlogsController.php
use Illuminate\Support\Facades\DB;

  public function destroy($id)
  {
    DB::beginTransaction();
    try {
      $blog = Blog::find($id);
      $blog->comments()->detach();
      $blog->delete();
      DB::commit();
      $success = true;
    } catch (\Exception $e) {
      $success = false;
      DB::rollback();
    }

    if ($success) {
      // 成功した場合の処理

    }
  }

参考サイト
Database Transactions(Laravel)
Transaction with Eloquent Laravel 5(Stack Overflow)

2017年2月16日木曜日

Laravel5.4でグローバル変数

Laravel5.4で、グローバル変数です。サービスプロバイダ内で、Config::set()で値を設定すると、各コントローラーからは、Config::get()で値を参照できるようになります。

/app/Providers/AppServiceProvider.php
use Config;

  public function boot()
  {
    Config::set(['user' => ['name' => 'John']]);
  }
/app/Http/Controllers/BlogsController.php
use Config;

  public function test()
  {
    $user_name = Config::get('user.name') ;
  }

参考サイト
Laravel 5 - Share variables in Service Providers(Stack Overflow)
Laravel5.3で、すべてのビューでデータを共有

2017年2月15日水曜日

Laravel5.4でリアルタイムエラートラッキングの「Sentry」

Laravel5.4に、リアルタイムエラートラッキングの「Sentrysentry-laravel)」を設定してみました。わざとエラーを起こしてみても、何も起こらないので、設定が間違っているのかも。信じて、しばらく様子を見ることにします(?)。

/config/app.php
  'providers' => [
    Sentry\SentryLaravel\SentryLaravelServiceProvider::class,
  ],

  'aliases' => [
    'Sentry' => Sentry\SentryLaravel\SentryFacade::class,
  ],
/app/Exceptions/Handler.php
  public function report(Exception $exception)
  {
    if ($this->shouldReport($exception)) {
        app('sentry')->captureException($exception);
    }
    parent::report($exception);
  }
/config/sentry.php(設定ファイルの作成)
$ php artisan vendor:publish --provider="Sentry\SentryLaravel\SentryLaravelServiceProvider"
/config/sentry.php
return array(
  'dsn' => env('SENTRY_DSN'),
  'breadcrumbs.sql_bindings' => true,
);

参考サイト
The Exception Handler(Laravel)
sentry-laravel(GitHub)
イベントログ収集ツールの Sentry が凄そう(Memoさん)

2017年2月14日火曜日

Laravel5.4で配列のバリデーション

Laravel5.4で、配列のバリデーションです。ショッピングカートなどで、商品数が増減し、すべての商品に入力チェックをかけたい場合などに有効です。最初はなんだかよくわかりませんでしたが、ちょっと慣れると、どんなものでもチェックできそうな気になります(笑)。

フォームのリクエストクラスを作成
$ php artisan make:request OrderRequest
/app/Http/Requests/OrderRequest.php
use App\Http\Requests\Request;

  public function rules()
  {
    // 名前とメールアドレスのチェック
    $rules = [
      'name' => 'required',
      'email' => 'required|email',
    ];

    // 選択された商品の入力チェック
    foreach($this->reitem->get('item') as $key => $val)
    {
      $rules['item_quantity.'.$key] = 'required';
      $rules['item_size.'.$key] = 'required';
      $rules['item_color.'.$key] = 'required';
    }
    return $rules;
  }

  // エラーメッセージの設定
  public function messages()
  {
    $messages = [];
    foreach($this->reitem->get('item') as $key => $val)
    {
      $messages['item_quantity.'.$key.'.required'] = '商品'.$key.'の数を入力してください';
      $messages['item_size.'.$key.'.required'] = '商品'.$key.'のサイズを選択してください';
      $messages['item_color.'.$key.'.required'] = '商品'.$key.'の色を選択してください';
    }
    return $messages;
  }

参考サイト
Validation(Laravel)
Validate an array of form fields with Laravel(Eric L. Barnesさん)

2017年2月13日月曜日

Laravel5.4の「array_has」は「array_key_exists」的な振る舞い

Laravel5.4の「array_has」は「array_key_exists」的な振る舞いなんですね。

PHPのいわゆる「in_array」的な動作なのかと思いこんでいたので、ハマりました。

確かに、ドキュメントを読むと、そのとおりなのですが、ちょっとわかりにくい気がしました。

bladeテンプレートで利用したい場合は、自前でヘルパーを用意する必要があるのかなと思います。

参考サイト
Helper Functions(Laravel)
Laravel array helpers if array has a value(Stack Overflow)
support/Arr.php(GitHub)
Laravel5.3でカスタムヘルパー(Custom Helpers)

2017年2月12日日曜日

Android版Chromeが「WebVR」に正式対応

Android版Chromeが「WebVR」に正式対応したそうです。WebVRはバーチャルリアリティデバイスへのアクセスを提供する実験的なJavaScript APIです。

WebVRの利点はインストールが不要なだけでなく、リンクアドレスを通して別のコンテンツを手軽に行き来できることにもあります。


参考サイト
アプリではなくブラウザでVR Android版Chromeが「WebVR」に正式対応(Mogura VR)
WebVRを触ってみる(Qiita)

2017年2月11日土曜日

Wine 2.0がリリース

仮想マシンなどを使わずにWindowsアプリを実行できるソフト「Wine」の最新版「Wine 2.0」がリリースされました。

WineのようにAPIをオペレーティングシステムがサポートしているシステムコールなどに置き換えることでバイナリを実行する方式は、仮想マシンを使う方法と比較して実行速度が速くなると言われている。


参考サイト
Mac/LinuxでWindowsアプリを動かす「Wine 2.0」が公開、「Microsoft Office 2013」対応など(窓の杜)
Wine 2.0登場、Microsoft Office 2013に対応(マイナビニュース)

2017年2月10日金曜日

Laravel5.4で静的ファイルのコンパイル(Laravel Mix)

Laravel5.4静的ファイルのコンパイル(Laravel Mix)です。Laravel5.3から、またガラッと変わりましたね。

$ node -v
$ npm -v
$ npm install
$ npm run dev
$ npm run production
$ npm run watch
webpack.mix.js
mix.js('resources/assets/js/app.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css')
   .version();

指定している下記2つのファイルを、いろいろ変更して試してみると、どういうことなのかよくわかります。

resources/assets/js/app.js
resources/assets/sass/app.scss

参考サイト
Compiling Assets (Laravel Mix)(Laravel)
Laravel5.3で静的ファイルのコンパイル(Laravel Elixir)

2017年2月9日木曜日

Laravel5.3から5.4へのアップグレードでエラー「Call to undefined method Illuminate\Database\MySqlConnection::setFetchMode()」

Laravel5.3から5.4へのアップグレードでエラー「Call to undefined method Illuminate\Database\MySqlConnection::setFetchMode()」が出ました。

悩んだ挙句、

bootstrap/cache/compiled.php

を削除したら、うまく動きました。 コンパイル済みサービスファイルは使用されなくなったらしい(?)。ドキュメントは、よく読むべし。

参考サイト
Upgrading To 5.4.0 From 5.3(Laravel)

2017年2月8日水曜日

Laravel5.4でページ送りViewのカスタマイズ

Laravel5.4ページ送りViewのカスタマイズです。やってみるまで面倒だなと思い、及び腰でしたが、意外と簡単です。

artisanコマンドで雛形を作成
$ php artisan vendor:publish --tag=laravel-pagination

出来上がった

/resources/views/vendor/pagination/default.blade.php
/resources/views/vendor/pagination/simple-default.blade.php

を、

/resources/views/paginate.blade.php

などにコピーして利用できます。

/resources/views/blog/index.blade.php
{{ $blogs->links('paginate') }}

参考サイト
Customizing The Pagination View(Laravel)

2017年2月7日火曜日

Laravel5.4で、整数から短いユニークIDを生成する「Laravel Hashids」

Laravel5.4に、整数から短いユニークIDを生成する「Laravel Hashids」を組み込んでみました。なんでこんなに短い文字列で識別できてしまうのでしょうか(笑)?! とにかく素晴らしい。

/config/app.php
  'providers' => [
    Vinkla\Hashids\HashidsServiceProvider::class,
  ],

  'aliases' => [
    'Hashids' => Vinkla\Hashids\Facades\Hashids::class,
  ],
/config/hashids.php を生成。
$ php artisan vendor:publish
/config/hashids.php
  'connections' => [
    'main' => [
      'salt' => 'your-salt-string',
      'length' => 6,
      'alphabet' => 'abcedfghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPAQRSTUVWXYZ1234567890',
    ],
  ]
/app/Http/Controllers/BlogsController.php
use Vinkla\Hashids\Facades\Hashids;

  public function hashids()
  {
    $encode_id = Hashids::encode(123456789);
    $decode_id = Hashids::decode($encode_id);
  }



参考サイト
Hashids
Hashidsから、短いユニークID(UUID)を作る(Qiita)
Introduction to Laravel Hashids(My Blogさん)

2017年2月6日月曜日

Laravel5.4のコンソールでプログレスバー(Progress Bars)

Laravel5.4コンソールでプログレスバー(Progress Bars)です。これ面白い。プロフェッショナルな仕上がりになります(笑)。

実際に表示されるプログレスバー(Progress Bars)
 28/200 [===>------------------------]  14% 3 secs/21 secs 10.0 MiB
155/200 [=====================>------]  77% 16 secs/21 secs 10.0 MiB
200/200 [============================] 100% 20 secs/20 secs 10.0 MiB
/app/Console/Commands/MyTestCommand.php
  public function handle()
  {
    $users = User::all(['name', 'email'])->toArray();

    // プログレスバー
    $bar = $this->output->createProgressBar(count($users));

    // プログレスバーのフォーマット
    $bar->setFormat(' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%');

    // 処理前の表示
    $bar->setEmptyBarCharacter('-');

    // 処理後の表示
    $bar->setBarCharacter('=');

    // 処理中の表示
    $bar->setProgressCharacter(">");

    // テーブルのヘッダ
    $headers = ['Name', 'Email'];

    foreach ($users as $user) {
      usleep(10000);
      // 実際の処理
      // $this->performTask($user);
      $bar->advance();
    }

    print "\n" ;

    // テーブル描画
    $this->table($headers, $users);

    $bar->finish();
    print "\n" ;

  }

参考サイト
Artisan Console(Laravel)
Progress Bar (Symfony)
Laravelでコマンドラインアプリケーションを作成する(Qiita)
Fun with Symfony's Console Component(KnpUniversityさん)
Laravel5.4でコマンド作成(Writing Commands)

2017年2月5日日曜日

オンライン機械学習向け分散処理フレームワーク「Jubatus(ユバタス)」

オンライン機械学習向け分散処理フレームワーク「Jubatus(ユバタス)」 まあ、よくわかりませんが、とにかくメモです。

Jubatusの特徴
  • オンライン機械学習ライブラリ: 多値分類、線形回帰、推薦(近傍探索)、グラフマイニング、異常検知、クラスタリング
  • 特徴ベクトル変換器 (fv_converter): データの前処理と特徴抽出
  • フォルトトレラントな分散機械学習のためのフレームワーク



参考サイト
AIがネットワーク障害の原因究明

2017年2月4日土曜日

AIがネットワーク障害の原因究明

AIがネットワーク障害の原因を究明する技術が開発されたそうです。こんなところでもAIが活躍するんですね。

障害時にネットワーク装置等から発せられるアラーム等のイベントから、その障害に特有のイベントの組み合わせを抽出することで、障害原因とイベントのルールを導き出すアルゴリズムです。さらには、保守者の日々の運用ノウハウを学習することでルールの精度を向上することができます。


参考サイト
NTTグループのAI技術「corevo™」としてネットワーク分野のAI技術を開発(NTT)
AIがネットワーク障害の原因を推測(ASCII.jp)

2017年2月3日金曜日

Laravel5.4でRedis

Laravel5.4Redisです。Redisにはデータ型が無く、文字列しか保存されないようなので、配列を保存したい場合などは、JSONでエンコードするのがコツのようです。

/app/Http/Controllers/BlogsController.php
use Illuminate\Support\Facades\Redis;

  public function redis()
  {
    // データを配列で用意
    $blogs = Blog::orderBy('created_at','desc')->take(10)->get()->toArray() ;

    // JSONでエンコード
    $json = json_encode($blogs);

    // Redisに保存
    Redis::set('blogs', $json);

    // Redisから読み込む
    $blogs = Redis::get('blogs') ;

    // JSONデコード
    $blogs = json_decode($blogs, true) ;
  }

参考サイト
Redis(Laravel)
Storing an array of data using Redis (from Laravel)(Stack Overflow)
phpで、json_encodeした配列に、json_decodeするとオブジェクトで返って来てしまう(カサヒラボさん)
メモリ内データストアの「Redis」をUbuntuにインストール

2017年2月2日木曜日

メモリ内データストアの「Redis」をUbuntuにインストール

メモリ内データストアの「Redis」をUbuntu16にインストールしてみました。

$ sudo apt-get install redis-server
$ sudo systemctl start redis
$ redis-cli ping
$ redis-cli

127.0.0.1:6379> keys *
1) "test"
127.0.0.1:6379> set aaa 'bbb'
OK
127.0.0.1:6379> keys *
1) "aaa"
2) "test"
127.0.0.1:6379> get aaa
"bbb"



参考サイト
Ubuntu環境に、Redisをインストールして、使ってみる(Qiita)
UbuntuにRedisをインストールしてCLIで基本的なコマンドを実行する(WEBサービス創造記さん)
Redis Quick Start(Redis)

2017年2月1日水曜日

Laravel5の「APP_KEY」は暗号化用のもので、パスワードハッシュには関係ない

Laravel5の「APP_KEY」は暗号化用のもので、パスワードハッシュには関係ないようです。「APP_KEY」が変わるとログインできなくなってしまうのではと不安になり、変更して試してみましたが、「APP_KEY」を変えてもログインはできました。暗号化したデータは、「APP_KEY」を変更すると、確かに、復号化できなくなりました。

$ php artisan key:generate
アプリケーションキー「APP_KEY」は、Illuminate暗号化サービスで使用され、32文字のランダムな文字列を設定する必要があります。 正しく設定しないと、暗号化された文字列は安全ではありません。 アプリケーションキー「APP_KEY」は、セッションなどのすべての暗号化されたデータに使用されます。

参考サイト
App Key?(Laracasts)
Encryption(Laravel)
Laravel5.3で暗号化(Encryption)