2017年10月22日日曜日

DragonFly BSD 5.0がリリース

DragonFly BSD 5.0がリリースされました。

新しいファイルシステム「HAMMER 2」を試験的にサポートしたほか、ファイアウォールツール「ipfw」が強化される


参考サイト
「DragonFly BSD 5.0.0」リリース(Think IT)

2017年10月21日土曜日

Wi-FiのWPA2認証に脆弱性「KRACK」

Wi-FiのWPA2認証に脆弱性「KRACK」が発見されたとのこと。これだけWi-Fi機器が溢れる中で、全てにパッチを適用するのは非常に困難でしょう。影響が大きすぎますよねぇ。

ユーザーのデバイスがWi-Fiネットワークとの接続を確立する際に用いる4ウェイ・ハンドシェイクという手順に存在する脆弱性を突くことで、ネットワーク上を流れる暗号化されたデータを復号できるようにするというものだ。


参考サイト
Wi-FiのWPA2脆弱性「KRACK」、今ユーザーにできる対処法(ZDNet Japan)
Wi-Fiを脅かす脆弱性「KRACK」、各社の対応状況は--MS、アップル、グーグルなど(CNET Japan)

2017年10月20日金曜日

PHPでオブジェクトのメンバ変数に名前を指定した変数でアクセス

PHPでオブジェクトのメンバ変数に名前を指定した変数でのアクセスです。言葉で説明するよりも、例を見てもらったほうがわかりやすいでしょう。こんなこともできるというお話です。使えることはわかりましたが、ちょっと躊躇してしまいますね(笑)。

$var = 'name' ;
$object_name = $object->$var ;

define('VAR', 'name'); 
$object_name = $object->{VAR} ;

参考サイト
PHP Object Variable variables name?(Stack Overflow)
クラスとオブジェクト(PHP Manual)

2017年10月19日木曜日

Laravel5.5で、SQLクエリログを記録するミドルウェア

Laravel5.5で、SQLクエリログを記録するミドルウェアです。 enableQueryLog()getQueryLog()メソッドの応用ですね。atuwebさんのブログを参考にさせてもらいました。ミドルウェアの動きもよく理解できます。素晴らしい。

/app/Http/Middleware/QueryLog.php(非常に簡易的なもの)
namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\DB;

class QueryLog
{
  /**
   * Handle an incoming request.
   *
   * @param  \Illuminate\Http\Request  $request
   * @param  \Closure  $next
   * @return mixed
   */
  public function handle($request, Closure $next)
  {
    $this->readyOutputSqlLog();

    $response = $next($request);

    $this->outputSqlLog();

    return $response;
  }

  private function readyOutputSqlLog()
  {
    DB::enableQueryLog();
  }

  private function outputSqlLog()
  {
    $query = DB::getQueryLog();

    print "<pre>" ;
    print_r($query) ;
    print "</pre>" ;
  }
}


参考サイト
[Laravel]SQLをログ出力するミドルウェアつくったった(atuwebさん)
LaravelでSQL実行ログを出力するミドルウェア(GitHub)
Laravel5.5で、EloquentのSQLを確認するtoSql()とgetBindings()のメソッド
Laravel5.5で、EloquentのSQLを確認する(その2)

2017年10月18日水曜日

Laravel5.5で、EloquentのSQLを確認する(その2)

Laravel5.5で、EloquentのSQLを確認する(その2)です。DB::enableQueryLog()で、ログ取得の準備。DB::getQueryLog()で、ログを取得すれば良いらしい。こちらの方が、時間も表示されるので良いかもしれません。

// ログ取得の準備
DB::enableQueryLog();

// Eloquent
$blog = Blog::published()->get();

// ログ取得&出力
$query = DB::getQueryLog();
dd($query);

実際に出力されるSQLとバインド変数の数値
array:1 [
  0 => array:3 [
    "query" => "select * from `blogs` where `blogs`.`published` = ?"
    "bindings" => array:1 [
      0 => 1
    ]
    "time" => 12.34
  ]
]

参考サイト
How to get last executed query in Larave 5?(itsolutionstuff)
php Laravelで実行されたSQLを取得する方法(プログラマーの雑記さん)
Laravel5.5で、EloquentのSQLを確認するtoSql()とgetBindings()のメソッド

2017年10月17日火曜日

Laravel5.5で、EloquentのSQLを確認するtoSql()とgetBindings()のメソッド

Laravel5.5で、EloquentのSQLを確認するtoSql()getBindings()のメソッドです。toSql()で、SQLが確認できて、getBindings()で、バインド変数の実際の数値が確認できます。

// Eloquent
$blog = Blog::where('category', '=', 5)
            ->where('published_at', '>=', '2017-10-01');

// 出力
dd($blog->toSql(), $blog->getBindings());
実際に出力されるSQLとバインド変数の数値
"select * from `blogs` where `category` = ? and `published_at` >= ?"

array:2 [▼
  0 => 5
  1 => "2017-10-01"
]

参考サイト
Does Laravel's toSql() method mask ids? (column value being replaced by question mark)(Stack Overflow)
Laravel5でSQLを確認する(お手軽版)(Qiita)

2017年10月16日月曜日

Laravel 5.4から、Laravel 5.5 にアップグレード

Laravel 5.4から、Laravel 5.5 にアップグレードしてみました。特に躓くことなく、無事アップグレードできました。静かすぎて怖い(笑)。早速、デバック用のエラー画面が変わりましたね。Whoopsというエラー処理のフレームワークだそうです。エラーの発生場所がわかりやすくなっていますので、これは歓迎です。

composer.json
"scripts": {
  ...
  "post-autoload-dump": [
    "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
    "@php artisan package:discover"
  ],
}

参考サイト
Upgrade Guide(Laravel)
アップグレードガイド 5.5 (Laravel)

2017年9月3日日曜日

Nginxがアクセス数の多いサイトでシェア1位獲得

Nginxがアクセス数の多いサイトでシェア1位獲得したとのこと。特に驚くニュースではないかもしれませんが、気になったのは「Google Web Server」のシェア。トップサイトでのシェアがものすごい。

トップ100万サイトにおけるWebサーバ・ソフトのシェアはNginxは41.5%、Apacheは41.4%となっている。


参考サイト
Nginx、トップ100万サイトでシェア1位へ(マイナビニュース)

2017年9月2日土曜日

Laravel 5.5がリリース

Laravel 5.5がリリースされました。Laravel 5.5は長期サポート(LTS)版です(前回は5.1)。 長期サポート(LTS)版には2年間のバグ修正と3年間のセキュリティ修正が含まれています。一方、一般的なマイナーリリース版には、6ヶ月のバグ修正と1年間のセキュリティ修正が含まれています。



参考サイト
Laravel 5.5 LTS is Now Released(Laravel News)
Upgrade Guide(Laravel)

2017年8月30日水曜日

Laravel5.4で、blade内でURLセグメントを取得

Laravel5.4で、blade内でURLセグメントを取得です。「Request::segment」で、URLのセグメントを順に取得できます。

http://example.com/aaa/bbb/ccc

aaa を表示させるには、{{ Request::segment(1) }}
bbb を表示させるには、{{ Request::segment(2) }}
ccc を表示させるには、{{ Request::segment(3) }}

参考サイト
How to access URL segment(s) in blade in Laravel 5?(Stack Overflow)

2017年8月29日火曜日

Laravel5.4で、複数条件のユニークバリデーション

Laravel5.4で、複数条件のユニークバリデーションです。 商品(items)テーブルのサイズ(size)と色(color)、商品コード(code)をユニークにする入力チェックの例です。使いこなすまでに時間がかかりましたが、便利で強力なこと、この上なし。実装のコツは、デバックバーのSQLをチェックしながら、ああでもない、こうでもないと、試行錯誤を延々と繰り返すことです(笑)。

$validator[] = Validator::make($input, [
  'code' => 'required|alpha_num|unique:items,code,NULL,items,size,'.$input['size'].',color,'.$input['color'],
]);

参考サイト
Laravel5のバリデーションで複合カラムのユニークを実現(中小企業に勤めるITエンジニアの徒然日記さん)
composite-unique-key-validation - laravel(Stack Overflow)
Laravel5.3で更新の「unique」バリデーション
Laravel5.3でデバック用ツールバー「Laravel Debugbar」

2017年8月28日月曜日

MySQLで「Specified key was too long; max key length is 767 bytes」のエラー

MySQLで「Specified key was too long; max key length is 767 bytes」のエラーです。文字コードの「utf8mb4」がいけないのかと思い、「utf8」に変更してデータベースを作り直しても改善せず。次に「varchar(255)」のフィールドがキーになっていることが原因だろうと思い、「varchar(20)」「varchar(50)」「varchar(100)」など、可能な限り切り詰めたら、うまくデータベースを作成、復元できました。

Laravel5 でマイグレーションする場合は、サイズを指定すると良いと思います。
$table->string('name', 50);
$table->string('email', 100)->unique();

参考サイト
MySQLのUNIQUEなINDEXには長さ767byteまでしか使えない件と対策((tanamonの日記さん)
Mysqlでユニーク制約をつけたvarcharは767byteまでしか入らない話(Qiita)
Laravel 5.4: Specified key was too long error(Laravel News)

2017年8月27日日曜日

フロントエンドアプリ用JavaScriptライブラリ「Hyperapp」

フロントエンドアプリ用JavaScriptライブラリ「Hyperapp」 なんとか追いついていかないとというわけで、メモです。

HyperAppはインタラクティブなWebアプリケーションを構築するツールで、一方向のデータフローやJSX、バーチャルDOMなど、Reactで有名になった多くの概念を踏襲しています。Elmアーキテクチャーに基づいており、アプリケーション設計はElmやReact、Reduxと似ています。


参考サイト
超軽量で学習コストが低い最新JSライブラリー「HyperApp」とは何か(WPJ)
hyperapp – 1kbのビューライブラリ(Qiita)
hyperapp/hyperapp(GitHub)

2017年8月26日土曜日

スマートフォンでも10年使えるOSを目指す「postmarketOS」

スマートフォンでも10年使えるOSを目指す「postmarketOS」 なかなか面白い切り口だなと思いました。実際、インストールして利用するとなると、敷居が高そうな気がしないでもないですが、ニーズはあると思いますので、要チェックでしょう。



参考サイト
スマートフォン端末などを10年使えるようにすることを目指すOS開発プロジェクト「postmarketOS」(エキサイトニュース)

2017年8月25日金曜日

Laravel5.4で、コントローラーの共通関数

Laravel5.4で、コントローラーの共通関数です。CommonControllerを作成して、コントローラー内から、スタティックに呼び出せば良いらしい。スタティックに呼び出すのが気が進まないという場合は、CommonController自体を継承すれば良いのかな? 善し悪しは別として、とにかく、便利に使えます。

/app/Http/Controller/CommonController.php(共通関数)
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class CommonController extends Controller
{
  public static function total($x, $y)
  {
    return $x + $y ;
  }
}


/app/Http/Controller/CartController.php(コントローラーで共通関数を呼び出す)
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\CommonController as Common;

class CartController extends Controller
{
  public function index(Request $request)
  {
    $itemA = 100 ;
    $itemB = 200 ;
    $totalPrice = Common::total($itemA, $itemB);
  }
}

参考サイト
Laravel 5 - Where to define functions and call them in views & controllers(Stack Overflow)
How to add custom class in Laravel 5(Arjunさん)

2017年8月24日木曜日

Laravel5.4で、Artisanコマンド一行で、モデル、マイグレーション、コントローラーを一気に作成

Laravel5.4で、Artisanコマンド一行で、モデル、マイグレーション、コントローラーを一気に作成です。php artisan make:modelで「-crm」オプションを付ければ良いらしい。カッコイイ! 高速開発に寄与してくれること間違い無し(笑)。

$ php artisan make:model Blog -crm
Model created successfully.
Created Migration: 2017_08_25_000000_create_blogs_table
Controller created successfully.

参考サイト
Laravel Create Controller, Model and migration in one Artisan Command(Arjunさん)

2017年8月23日水曜日

PHPで、文章の最初の一行を抜き出す「strtok」

PHPで、文章の最初の一行を抜き出すコードです。strtokなんて文字列関数があるんですね。力技で挑めば、いろいろな方法があると思いますが、これ以上シンプルなコードは見つからないでしょう。気品さえ漂います(笑)。

$first_line = strtok($test, "\n");

参考サイト
Obtain first line of a string in PHP(Stack Overflow)

2017年8月22日火曜日

PHPで、16進数で指定された表示色を暗くしたり、明るくしたりする

PHPで、16進数で指定された表示色を暗くしたり、明るくしたりする関数です。見事に動いてくれるので、感動です。

function color_luminance( $hex, $percent ) {

  // 16進数色のチェック
  $hex = preg_replace( '/[^0-9a-f]/i', '', $hex );
  $new_hex = '#';
  if ( strlen( $hex ) < 6 ) {
    $hex = $hex[0] + $hex[0] + $hex[1] + $hex[1] + $hex[2] + $hex[2];
  }

  // 小数に変換して明るさを変更する
  for ($i = 0; $i < 3; $i++) {
    $dec = hexdec( substr( $hex, $i*2, 2 ) );
    $dec = min( max( 0, $dec + $dec * $percent ), 255 ); 
    $new_hex .= str_pad( dechex( $dec ) , 2, 0, STR_PAD_LEFT );
  }    

  return $new_hex;
}
// 元の色
$hex = "#fff68f" ;

// 10%明るく
$light_color = color_luminance( $hex, 0.1 ) ;

// 10%暗く
$dark_color = color_luminance( $hex, -0.1 ) ;

参考サイト
Lighten or darken a given colour(GitHub)
hexdec(PHP)
dechex(PHP)

2017年8月21日月曜日

Laravel5.4で、ユーザーの登録(/register)を無効にする

Laravel5.4で、ユーザーの登録(/register)を無効にする設定です。RegisterController.phpで、showRegistrationForm()をオーバーライドすれば良いらしい。

/app/Http/Controller/Auth/RegisterController.php(その1)
  public function showRegistrationForm()
  {
    abort(404);
  }

ミドルウェアを「auth」に変更すると、ログイン画面にリダイレクトされます。
これでも良いと思います。

/app/Http/Controller/Auth/RegisterController.php(その2)
  public function __construct()
  {
    $this->middleware('auth');
  }

参考サイト
How to disable registration new user in Laravel 5(Stack Overflow)
isable registration in built-in registration Laravel 5.3(Laracasts)

2017年8月20日日曜日

QRコードで決済「Origami Pay」

QRコードで決済「Origami Pay」 スマートフォンに専用アプリをインストールして、QRコードを読み取るだけで、決済できるというもの。面白いアイディアですね。今後注目のサービスだと思います。



参考サイト
QRコード買い物サービス拡大 スマホで読み取るだけで支払い(NHKニュース)
ドコモが「QR決済」導入 買い物代、毎月の携帯料金に合算 今年度、ローソンなどで(ITmedia エグゼクティブ)

2017年8月19日土曜日

オープンソースの情報共有化ツール「Pleasanter」

オープンソースの情報共有化ツール「Pleasanter」 C#で書かれています。ちょっと試させてもらいましたが、かなり高機能です。かなりの業務をウェブ上で共有できるようになるのではないでしょうか。素晴らしい。





参考サイト
プリザンター(GitHub)

2017年8月18日金曜日

PHPのSplFileObjectでCSVファイルを読み込み

PHPのSplFileObjectでCSVファイルを読み込みです。ファイルオープンして、fgetcsvでもいいですが、こちらの方がスマートかな? とにかく、気に入りました。

$filepath = 'sample.csv' ;
$file = new \SplFileObject($filepath) ; 
$file->setFlags(\SplFileObject::READ_CSV) ; 
foreach ($file as $line) {
  if (!empty($line[0])) {
    $data = [
      'id' => $line[0],
      'name' => $line[1],
      'price' => $line[2],
      'created_at' => $line[3],
    ] ;
  }
}

参考サイト
【PHP】CSVファイルの読み込み(Qiita)
SplFileObjectでオブジェクト指向らしいファイル操作をしてみる(Qiita)

2017年8月17日木曜日

Laravel5.4で、コントロラー内のミドルウェア

Laravel5.4で、コントロラー(Controller)内のミドルウェア(Middleware)です。 middleware('auth') は、よく使うとして、特定のメソッドにのみミドルウェアを適用することもできるんですね。ようやく、ミドルウェア(Middleware)の使い方がわかったかもしれません(笑)。

class UserController extends Controller
{
  public function __construct()
  {
    $this->middleware('auth');

    $this->middleware('aaa', ['only' => [
      'index',
      'show',
    ]]);

    $this->middleware('bbb', ['except' => [
      'edit',
      'update',
      'destroy',
    ]]);
  }
}

参考サイト
Controllers(Laravel)
Laravel 5.* multiple middleware whole controller(Stack Overflow)

2017年8月16日水曜日

Laravel5.4で、フォームをタイムアウトさせない「laravel-caffeine」

Laravel5.4で、フォームをタイムアウトさせない「laravel-caffeine」 タイムアウトを防ぐため、定期的にリクエスト(カフェインドリップ?)を送っているとのこと。 「_token」フィールドを持つページでのみで実装されていて、他のページは通常どおりタイムアウトするそうです。試していませんが、こだわりたい場合は便利かなと思いますのでメモ。



参考サイト
Laravel5.4で、CSRFのエラー処理「TokenMismatchException」

2017年8月15日火曜日

Laravel5.4で、CSRFのエラー処理「TokenMismatchException」

Laravel5.4で、CSRFのエラー処理「TokenMismatchException」です。ディフォルトだと、Symfonyのエラー画面が表示される(?)ようなので、例外処理でエラーを拾って処理すると、エレガントな振る舞いになるように思います。

/app/Exceptions/Handler.php
use Illuminate\Session\TokenMismatchException;

  /**
   * Render an exception into an HTTP response.
   *
   * @param  \Illuminate\Http\Request  $request
   * @param  \Exception  $exception
   * @return \Illuminate\Http\Response
   */
  public function render($request, Exception $exception)
  {
    if ($exception instanceof TokenMismatchException){
      return redirect('/csrf_error') ;
    }

    return parent::render($request, $exception);
  }

参考サイト
Laravel catch TokenMismatchException(Stack Overflow)

2017年8月14日月曜日

2017年8月13日日曜日

即座に数値データをインタラクティブに可視化してくれる「Tableau」

即座に数値データをインタラクティブに可視化してくれる「Tableau」 データベースに直結で、数値データを高度に分析してくれます。日々思うことですが、プログラマーは全くもって必要なくなりますね(笑)。





2017年8月12日土曜日

JavaScriptの日付ユーティリティライブラリ「date-fns」

JavaScriptの日付ユーティリティライブラリ「date-fns」 便利そうだったのでメモ。CDNも用意されています。

<script src="http://cdn.date-fns.org/v1.9.0/date_fns.min.js"></script>
<script>
  dateFns.isToday(new Date())
  //=> true
</script>



参考サイト
面倒なJavaScriptの日付の処理は「date-fns」でラクに片付けよう(ASCII.jp)
date-fns(GitHub)

2017年8月11日金曜日

一度にPOSTできる変数の数の上限「max_input_vars」

一度にPOSTできる変数の数の上限「max_input_vars」 こんな設定があったんですね。なんでデータを取得できないのか、しばらく悩んでしまいました。

php.ini
; How many GET/POST/COOKIE input variables may be accepted
; max_input_vars = 1000
max_input_vars = 3000

参考サイト
PHP5.3以降で一度にPOSTできる上限数(max_input_vars)を変更する(PHP工房さん)
PHP 5.3 max_input_vars and big forms(The eternal fight between admins and computersさん)

2017年8月10日木曜日

Laravel5.4で、セッションのタイムアウト時間設定

Laravel5.4で、セッションのタイムアウト時間設定です。設定ファイルのsession.phpで、変更が可能。lifetimeで、セッションの時間(分)を変更できます。expire_on_closeをtrueにすると、ブラウザを閉じると、セッションが切れます。ディフォルトでは、ブラウザを閉じてもセッションは保たれる設定らしい。

/app/config/session.php
/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option.
|
*/

// 'lifetime' => 120,
'lifetime' => 60,

// 'expire_on_close' => false,
'expire_on_close' => true,

参考サイト
Laravel Inactivity time setting(Stack Overflow)

2017年6月5日月曜日

Laravel5.4で、Eloquent Modelデータをランダムに取得

Laravel5.4で、Eloquent Modelデータをランダムに取得です。inRandomOrder()メソッドで、良い具合に処理してくれます。5.4から追加されたらしい(?)。

$blogs = Blog::published()
      ->inRandomOrder()
      ->take(10)
      ->get();

参考サイト
eloquent - how get random row laravel-5(Stack Overflow)
inRandomOrder(Laravel API)

2017年5月20日土曜日

IoT市場を狙うLinuxベースOSの「Tizen」

IoT市場を狙うLinuxベースOSの「Tizen」 Tizenオペレーティングシステムは、異なる業界要件を満たすために複数のプロファイルで提供され、現在のTizenのプロファイルは、車載用、モバイル、テレビ、ウェアラブルなどがあるとのこと。





参考サイト
LinuxベースOS「Tizen 4.0」登場(マイナビニュース)

2017年5月14日日曜日

Microsoftのクラウド型分散NoSQLデータベース「Azure Cosmos DB」

Microsoftのクラウド型分散NoSQLデータベース「Azure Cosmos DB」  ユーザーがどこにいてもデータを透過的に拡大縮小し複製することで、任意のAzure地域にわたるグローバルな配信を提供します。 世界中のスループットとストレージを弾力的に拡張し、必要なスループットとストレージ分だけを支払う価格体系になります。 Azure Cosmos DBは、世界中どこでも99パーセントで1桁ミリ秒未満の処理を保証しますとのこと。



参考サイト
米MS、「惑星規模」でスケールする「Azure Cosmos DB」を発表(ITpro)

2017年5月13日土曜日

クラウド型のオープンソース分散SQLデータベース「CockroachDB」

クラウド型のオープンソース分散SQLデータベース「CockroachDB」SQLの豊富な機能とNoSQL製品に共通する水平スケーラビリティを組み合わせ、エンタープライズレベルの災害復旧を実現しますとのこと。

分散SQLによって完全に分散されたACIDトランザクションを提供できるという。また、スキーマ変更のダウンタイムはゼロで、セカンダリインデックスと外部キーもサポートする。


参考サイト
オープンソースの拡張性のあるSQLデータベース「CockroachDB 1.0」が公開(OSDN Magazine)

2017年5月12日金曜日

Laravel5.4で、本番環境とテスト環境の判定

Laravel5.4で、本番環境とテスト環境の判定です。

use Config;

$environment = env('APP_ENV');

if ($environment == 'production') {

}
if ($environment == 'staging') {

}
if ($environment == 'testing') {

}
if ($environment == 'local') {

}

参考サイト
[Laravel5]本番環境とテスト環境( or ローカル環境)で条件分岐させる方法(Qiita)
Configuration(Laravel)
Laravel5の「PHP dotenv」

2017年5月11日木曜日

Laravel5.4の、バリデーションリクエストで、データの新規登録時と更新時でチェックする内容を変える

Laravel5.4の、バリデーションリクエストで、データの新規登録時と更新時でチェックする内容を変える設定です。$this->method() で、リクエストタイプが取得できるので、それで場合分けすれば良いらしい。

  public function rules()
  {
    switch ($this->method()) {
      case 'POST':
        $rules = [
          'publiched_at' => 'required|date|after:now',
        ];
        break;
      case 'PATCH':
        $rules = [
          'publiched_at' => 'required|date',
        ];
        break;
      default:
        $rules = [
          'publiched_at' => 'required|date',
        ];
    }

    return $rules;
  }

参考サイト
Laravel 5 Validation Request, how to handle validation on update?(Laracasts)
Form Request Validation(Laravel)

2017年5月10日水曜日

Laravel5.4のcomposer updateでエラー「Could not scan for classes inside "app/tests/TestCase.php" which does not appear to be a file nor a folder」

Laravel5.4のcomposer updateでエラー「Could not scan for classes inside "app/tests/TestCase.php" which does not appear to be a file nor a folder」です。確かに、よく見ると、composer.json に指定があります。使ってないだろうと思って安易に削除すると、往往にして、こういうオチが待っています。

composer.json
"autoload-dev": {
  "classmap": [
    "tests/TestCase.php"
  ]
},

参考サイト
RuntimeException - Could not scan for classes inside app/tests/TestCase.php(Stack Overflow)

2017年5月9日火曜日

Laravel5.4では、ルートのRoute::resource()にmiddleware()は設定できない

Laravel5.4では、ルートのRoute::resource()にmiddleware()は設定できないらしいです。「Call to a member function middleware() on null」というエラーが出て、うまく機能しませんでした。というわけで、ミドルウェアを設定する場合は、面倒でも、一つ一つのルートを設定する必要があるようです。

// ☓ 使えない
// Route::resource('blog', 'BlogController')->middleware('middleware_name');

// ○ 面倒でも、一つ一つ設定する必要がある
Route::get('blog', 'BlogController@index')->name('blog.index')->middleware('middleware_name');

参考サイト
Middleware(Laravel)
Call to a member function middleware() on null(Stack Overflow)

2017年5月8日月曜日

Laravel5.4のbladeで、old()のデータにデフォルト値を設定

Laravel5.4のbladeで、old()のデータにデフォルト値を設定です。データを更新する際など、簡潔に書けると思います。今まで、ものすごい回り道をしていたように思います(笑)。

{{ old('name', 'デフォルト値') }}"

参考サイト
Old Input(Laravel)
Laravel blade "old input or default variable"?(Stack Overflow)

2017年5月7日日曜日

XMLHttpRequestの置き換え?「Fetch API」

XMLHttpRequestの置き換え?「Fetch API」 高度な処理がなされているらしいですが、インターフェースは単純で、リクエストとレスポンスがあり、ネットワーク上のリソースを取得するものと理解しました。

XMLHttpRequest と似たものではありますが、より強力で柔軟な操作が可能です。Fetch では Request と Response が一般的な形で定義されています。またネットワークリクエストに関連する様々なものも定義されています。これらは service worker や Cache API といったリクエストとレスポンスを扱う API や、独自のレスポンスを発生させる場面でも利用できるようになるでしょう。


参考サイト
Fetch API(MDN)
jQuery.ajax()の代替としてFetch APIをざっくり使ってみる(tacamy.blogさん)
Fetch API 解説、または Web において "Fetch する" とは何か?(Block Rockin’ Codesさん)
Fetch APIを使ってjQuery.ajaxみたいにデータをpostする(Qiita)
github/fetch(GitHub)

2017年5月6日土曜日

sshでリモートサーバーのファイルシステムをマウント「sshfs」

sshでリモートサーバーのファイルシステムをマウント「sshfs」 リモートシステム上にあるディレクトリやファイルをローカルマシン上にあるかのごとく操作できるという優れものです。発想が現代的ですねぇ。



参考サイト
sshでリモートサーバーをマウント、便利にsshfs(UNIX的なアレさん)

2017年5月5日金曜日

セキュアなDNSサービス「OpenDNS」

セキュアなDNSサービス「OpenDNS」を設定してみました。とりあえず、自分のサイトに問題なくアクセスできましたので、合格なのかな(笑)? しばらく使ってみることにしましょう。





参考サイト
高度なフィルタリングが無料で使えるDNSサービス「OpenDNS」(ウェブコンテンツさん)

2017年5月4日木曜日

Ubuntu16にPowerShellをインストール

Ubuntu16.04にPowerShellをインストールしてみました。結構簡単に導入できます。

$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list
$ sudo apt-get update
$ sudo apt-get install -y powershell
$ powershell

PS /> dir
PS /> Get-Help *

参考サイト
PowerShell(GitHub)
Microsoftが「PowerShell」をオープンソース化

2017年5月3日水曜日

リクルートがAI「A3RT」を無料公開

リクルートがAI「A3RT」を無料公開したとのこと。複数のAPIが用意されています。日常会話レベルでの応答が可能な「Talk API」なんてのもありますね。試してはいませんが、面白そうなのでメモです。



参考サイト
リクルートがAIをまさかの無料公開。さっそくすべてのAPIを試しまくってみた(BITA デジマラボさん)

2017年5月1日月曜日

Laravel5.4で、ユーザーIDのみでログイン

Laravel5.4で、ユーザーIDのみでログインです。ユーザーIDだけでログインできるので、前段の認証部分を色々カスタマイズできると思います。

Auth::loginUsingId(1);

// ログインしたままに
Auth::loginUsingId(1, true);

参考サイト
Authentication(Laravel)
ユーザーのIDを利用してログインする(Laravel Recipesさん)

2017年4月30日日曜日

LinuxでAndroidアプリを実行するためのコンテナ「Anbox」

LinuxでAndroidアプリを実行するためのコンテナ「Anbox」 コンテナ技術を利用しているところが、新しい切り口ですね。

AnboxはAndroidオペレーティングシステムをコンテナに置き、ハードウェアアクセスを抽象化し、コアシステムサービスをLinuxに統合します。 すべてのAndroidアプリケーションは、他のネイティブアプリケーションと同様に、オペレーティングシステムと統合されます。





参考サイト
LinuxでAndroidアプリを実行するためのアプリ「Anbox」(マイナビニュース)

2017年4月29日土曜日

高速、超軽量コンテナOS「RancherOS」

高速、超軽量コンテナOSで、Dockerコンテナに特化した「RancherOS」がリリースされたとのこと。

システムサービスはDocker Composeによって定義され、cloud-initを使用して自動的に設定され、管理上の負担を軽減します。 不必要なライブラリとサービスが排除され、コンテナホストオペレーティングシステムの更新、パッチ適用、および保守の手間が最小限に抑えられます。





参考サイト
Dockerコンテナに特化した「RancherOS」リリース(Think IT)

2017年4月22日土曜日

Ubuntuで「fish」シェル

Ubuntuで「fish」シェルです。お遊びで、ちょっと試そうと思い、インストールしてみたのですが、気に入りました(笑)。コマンドの補完が、最高に素晴らしいです。しばらく使ってみることにします。

インストール
$ sudo apt-add-repository ppa:fish-shell/release-2
$ sudo apt-get update
$ sudo apt-get install fish



参考サイト
にわか管理者のためのLinux運用入門 [70] 便利シェル「fish」を使う(IT Search)

2017年4月21日金曜日

Laravel5.4で、CSVダウンロード

Laravel5.4で、CSVダウンロードです。ストリームのレスポンスを返すようにすると良いらしい。書き方が洗練されている感じがします(笑)。

return response()->stream($callback, 200, $headers);

  public function csvDownload()
  {
    $headers = array(
      "Content-type" => "text/csv",
      "Content-Disposition" => "attachment; filename=file.csv",
      "Pragma" => "no-cache",
      "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
      "Expires" => "0"
    );

    $callback = function() {
      $handle = fopen('php://output', 'w');

      $columns = [
        'id',
        'name',
        'email',
      ] ;
      mb_convert_variables('SJIS-win', 'UTF-8', $columns);

      fputcsv($handle, $columns);

      $users = User::all();
      foreach ($users as $user) {
        $csv = [
          $user->id,
          $user->name,
          $user->email,
        ] ;
        mb_convert_variables('SJIS-win', 'UTF-8', $csv);
        fputcsv($handle, $csv);
      }

      fclose($handle);
    };

    return response()->stream($callback, 200, $headers);
  }

参考サイト
laravel5.3 CSVダウンロードを実装する(あしたからがんばるさん)
CSV export in laravel 5 controller(Stack Overflow)
Laravel 5.2 Response::stream alternative(LARACASTS)
HTTP Responses(Laravel)

2017年4月17日月曜日

MySQLで「IN()」句でデータを取り出した際、指定した通りにORDER BYで並べ替える

MySQLで「IN()」句でデータを取り出した際、指定した通りにORDER BYで並べ替える方法です。FIELD関数を利用すると、うまく取得できます。FIELD関数は、文字列に利用するものと思われがちですが、数値に対しても有効らしい。今まで、苦労して並べ替えてましたよ(笑)。

SELECT * FROM blogs 
WHERE id IN (10, 9, 8, 7, 6, 5) 
ORDER BY FIELD (blogs.id, 10, 9, 8, 7, 6, 5)

参考サイト
MySQL ORDER BY IN()(Stack Overflow)

2017年4月16日日曜日

Twitterの次は「Mastodon」?

Twitterの次は「Mastodon」かもしれない? 分散型のネットワークで、500字まで書き込み可能とのこと。とりあえず登録してみましたが、使い方がよくわからない(笑)。



参考サイト
Twitterのライバル? 実は、新しい「マストドン」(Mastodon)とは!(プログラミング+)

2017年4月15日土曜日

Ubuntu 17.04がリリース

Ubuntu 17.04がリリースされました。独自GUIの「Unity」が採用される最後のバージョンだそうです。

カーネル4.10では仮想マシンがネットワークインタフェースを直接制御する機能を取り込んだ。
これまでパーティションとして自動構成されていたスワップ領域を、17.04からはファイルとして用意する。ユーザーは必要に応じてスワップ機能をオン/オフできる。


参考サイト
Ubuntu最新版「17.04」登場、スワップや印刷などを改善(ITpro)

2017年4月14日金曜日

Laravel5.4で、ログインイベントを取得して、ユーザーのログイン時刻を記録

Laravel5.4で、ログインイベントを取得して、ユーザーのログイン時刻を記録してみました。Laravelは、認証処理で様々なイベントを発生させてくれるので、 EventServiceProviderで、これらのイベントを取得することができるとのこと。

/app/Providers/EventServiceProvider.php
class EventServiceProvider extends ServiceProvider
{
  protected $listen = [
    'Illuminate\Auth\Events\Login' => [
      'App\Listeners\LogSuccessfulLogin',
    ],
  ];
}
その他の取得可能なイベント
protected $listen = [
  'Illuminate\Auth\Events\Registered' => [
    'App\Listeners\LogRegisteredUser',
  ],

  'Illuminate\Auth\Events\Attempting' => [
    'App\Listeners\LogAuthenticationAttempt',
  ],

  'Illuminate\Auth\Events\Authenticated' => [
    'App\Listeners\LogAuthenticated',
  ],

  'Illuminate\Auth\Events\Login' => [
    'App\Listeners\LogSuccessfulLogin',
  ],

  'Illuminate\Auth\Events\Failed' => [
    'App\Listeners\LogFailedLogin',
  ],

  'Illuminate\Auth\Events\Logout' => [
    'App\Listeners\LogSuccessfulLogout',
  ],

  'Illuminate\Auth\Events\Lockout' => [
    'App\Listeners\LogLockout',
  ],
];
$ php artisan event:generate
/app/Listeners/LogSuccessfulLogin.php
use Carbon\Carbon;
use Auth;

class LogSuccessfulLogin
{
  public function handle(Login $event)
  {
    $user = Auth::user();
    $user->last_login_at = Carbon::now();
    $user->save();
  }
}

参考サイト
Recording last login information using Laravel events(Steven Westmorelandさん)
Authentication(Laravel)

2017年4月13日木曜日

Laravel5.4で、「updated_at」の日時を変更せずにデータを更新

Laravel5.4で、「updated_at」の日時を変更せずにデータを更新する方法です。更新日時を記録したくない時もありますよね。

/app/Http/Controllers/BlogController.php
$blog = Blog::find(1);
$blog->timestamps = false;
$blog->title = 'ブログのタイトルをこっそりと更新';
$blog->save();

参考サイト
Update without touching timestamps (Laravel) - (Stack Overflow)
Eloquent: Relationships(Laravel)

2017年4月9日日曜日

Ubuntu 18.04のデスクトップがGNOMEに変更、スマホ開発も中止

Ubuntu 18.04のデスクトップがGNOMEに変更、スマホ開発も中止するそうです。英断と言えるのではないでしょうか。これでまた、デスクトップ市場でも、Ubuntuが席巻するようになるのかもしれません。



参考サイト
Ubuntu、UnityからGNOMEへ戻る - スマホ向け開発は中止(マイナビニュース)

2017年4月8日土曜日

Djangoフレームワーク 1.11がリリース

Djangoフレームワーク 1.11がリリースされました。長期サポート版(LTS)で、セキュリティ、およびデータ損失の修正が、少なくとも今後3年間適用されるとのこと。



参考サイト
Django 1.11がリリースされましたね(偏った言語信者の垂れ流しさん)

2017年4月7日金曜日

Laravel5.4で、ログインURLを変更

Laravel5.4で、ログインURLを変更してみました。認証されていないユーザーを処理するメソッド「unauthenticated()」が、/app/Exceptions/Handler.php にあるので、ここを変更すれば良いらしい。

/app/Exceptions/Handler.php
  protected function unauthenticated($request, AuthenticationException $exception)
  {
    if ($request->expectsJson()) {
      return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    // return redirect()->guest('login');
    return redirect()->guest('signin');
  }

参考サイト
How to change default redirect URL of Laravel 5 Auth filter?(Stack Overflow)

2017年4月5日水曜日

Laravel5.4で、MySQLのVARCHAR型、TEXT型カラムへのバリデーションには、面倒でも「max:(数値)」を設定すべき?

Laravel5.4で、MySQLのVARCHAR型、TEXT型カラムへのバリデーションには、面倒でも「max:(数値)」を設定すべきかもしれません。バリデーションをすり抜けてエラーになりました。MySQL自体は、入力が長すぎる場合は、適当にちょん切ってくれるような気がしましたが、違いましたかね?

/app/Http/Requests/StoreBlogPost.php
public function rules()
{
  return [
    'title' => 'required|max:100',
    'body' => 'required|max:1000',
  ];
}

参考サイト
Validation(Laravel)

2017年4月1日土曜日

ブロックチェーン版のLinux「Hyperledger」

ブロックチェーン版のLinux「Hyperledger」 Hyperledgerは、クロスインダストリーのブロックチェーン技術を推進するために作成されたオープンソース。 Linux Foundationが主催するグローバルなコラボレーション組織です。



参考サイト
「ブロックチェーン版Linux v1.0」は世界を変えられるか(ITpro)
オープンソースのブロックチェーン Hyperledger Fabric を試してみる(Qiita)
hyperledger/fabric(GitHub)

2017年3月31日金曜日

Laravel5.4で、ファイルの削除

Laravel5.4で、ファイルの削除です。無事、削除できました。

/app/Http/Controllers/UserController.php
use Illuminate\Support\Facades\Storage;

If (Storage::disk('profile')->exists($user->id.'/'.$user->pic)) {
  Storage::disk('profile')->delete($user->id.'/'.$user->pic);
}

参考サイト
Filesystem / Cloud Storage(Laravel)

2017年3月30日木曜日

Laravel5.4で、複数ファイルのアップロード

Laravel5.4で、複数ファイルのアップロードです。下の例で言うと、「$files = $request->file('pic');」という具合に、最初にまとめてアップロードファイルを取得して、それから、いろいろと操作するのがミソらしい。

/resources/views/user/upload.blade.php
{!! Form::open(['url' => ['upload', $user->id], 'files' => true]) !!}
  {!! Form::file('pic[]', ['multiple'=>true]) !!}
  {!! Form::submit('アップロード') !!}
{!! Form::close() !!}
/app/Http/Controllers/UserController.php
use Illuminate\Support\Facades\Storage;

if ($request->hasFile('pic')) 
{
  $files = $request->file('pic');
  foreach ($files as $file) {
    $savePath = $file->store($user->id, 'profile');
  }
}

参考サイト
Filesystem / Cloud Storage(Laravel)
Upload multiple files in laravel 5(Tutsnareさん)
Laravel 5.3 multiple file uploads(Stack Overflow)

2017年3月29日水曜日

Laravel5.4で、ajaxリクエストの送信

Laravel5.4で、ajaxリクエストの送信です。 CSRFトークン「csrf_token()」も送信するところがミソなのでしょう。

  $.ajax({
    type: "POST",
    url: url,
    data: { name:"名前", title:"タイトル", _token:"{{ csrf_token() }}" },
    cache: false,
    success: function(data, textStatus){

    },
    error: function(xhr, textStatus, errorThrown){

    }
  });

参考サイト
Sending ajax request in laravel 5(Stack Overflow)
Post data using ajax in laravel 5(Tutsnareさん)

2017年3月28日火曜日

Laravel5.4で、ストレージパス(Storage Path)の変更

Laravel5.4で、ストレージパス(Storage Path)の変更です。useStoragePath() で変更できますが、ログファイルの保存場所なども、全部変わってしまうので、注意が必要だと思います。

/app/Providers/AppServiceProvider.php
  public function register() {
    $this->app->useStoragePath('/path/to/storage');
  }

参考サイト
Filesystem / Cloud Storage(Laravel)
Change the storage path in Laravel 5(Stack Overflow)
laravel5.2のスタートアッププラクティス(Qiita)

2017年3月27日月曜日

Laravel5.4で、リクエストごとにバリデーションメッセージをカスタマイズ

Laravel5.4で、リクエストごとにバリデーションメッセージをカスタマイズです。 messages()関数でエラーメッセージを上書きできるので、かなり自由になる感じ。

/app/Http/Requests/StoreBlogPost.php
  public function messages()
  {
    return [
      'title.required' => 'ブログのタイトルを入力してください。',
      'title.min' => 'ブログのタイトルは10文字以上で入力してください。',
      'title.max' => 'ブログのタイトルは100文字以下で入力してください。',
    ];
  }

参考サイト
Laravel 5, custom error messages.(Laracasts)

2017年3月25日土曜日

オープンソースのネットワークバックアップソフト「Bacula」

オープンソースのネットワークバックアップソフト「Bacula」 ネットワーク上のデータのバックアップ、リカバリ、および検証を管理できるオープンソースプログラムです。 紛失したファイルや破損したファイルを簡単に見つけて復元する高度なストレージ管理機能も提供。試してないですが、要チェックです。



参考サイト
オープンソースソフトウェア「Bacula」で安心・安全なバックアップシステムを構築しよう(gihyo.jp)

2017年3月24日金曜日

PHPでORM的(?)なCSVファイルの読み書き「parseCSV」

PHPでORM的(?)なCSVファイルの読み書きができる「parseCSV」を設定してみました。CSVのファイル操作は面倒な事が多いですが、これを使うと、実に快適。



参考サイト
parsecsv/parsecsv-for-php(GitHub)

2017年3月23日木曜日

Laravel5.4のバリデーションで、値が配列の中に含まれているか

Laravel5.4のバリデーションで、値が配列の中に含まれているか否かです。表示されるエラーメッセージを見ると、意味もなく微笑ましい(笑)。

/app/Http/Requests/QuestionRequest.php
  public function rules()
  {
    return [
      'answer' => 'required|in:はい,いいえ,ノーコメント',
    ];
  }

参考サイト
Laravel validation - input must be one of items in array(Stack Overflow)
Validation(Laravel)

2017年3月22日水曜日

Laravel5.4で、「page」以外のパラメーターを引き継いでページ送り

Laravel5.4で、「page」以外のパラメーターを引き継いでページ送りです。Request::except('page') で、「page」以外の様々な検索パラメータの配列を取得できるので、これをページネーションのappendsメソッドに設定してあげれば、ページ送りリンクのクエリ文字列に追加されます。実に便利だ。

/resources/views/blog/index.blade.php
{{ $blogs->appends(Request::except('page'))->links() }}

参考サイト
Request::getQueryString() without some parameters(Stack Overflow)
Pagination(Laravel)

2017年3月21日火曜日

Laravel5.4で、ログアウト後のリダイレクト先を変更

Laravel5.4で、ログアウト後のリダイレクト先を変更です。LoginController.php の use AuthenticatesUsers; の部分を書き換えて、logoutメソッドを定義します。ちょっとわかりにくいですね。素直に、ディフォルトのまま使っていたほうが良いかもしれません。

/app/Http/Controllers/Auth/LoginController.php
  // use AuthenticatesUsers;
  use AuthenticatesUsers {
    logout as performLogout;
  }

  public function logout(Request $request)
  {
    $this->performLogout($request);
    return redirect()->route('bye');
  }

参考サイト
How to set laravel 5.3 logout redirect path?(Stack Overflow)

2017年3月20日月曜日

Googleが、どこまでもスケールするリレーショナルデータベース「Cloud Spanner」

Googleが、どこまでもスケールするリレーショナルデータベース「Cloud Spanner」を発表しました。「データベースの究極」と言ってしまって良いのではないでしょうか?! すごい時代です。





参考サイト
Googleがグローバルな分散データベースCloud Spannerをローンチ、SQLとNoSQLの良いとこ取りを実装(TechCrunch Japan)

2017年3月19日日曜日

日本語プログラミング言語「なでしこ」

日本語プログラミング言語「なでしこ」 読みやすいこと、この上なし。素晴らしいです。

天気は「晴れ」

天気で条件分岐
  「晴れ」ならば
      「遠足へ行く」と表示
  「雨」ならば
      「遠足中止」と表示
  違えば
      「遠足と授業の用意を持って集合」と表示。


参考サイト
日本語プログラミング言語「なでしこ」JS版の開発スタート、ベータ版が公開(ニフティニュース)
なでしこ リファレンス

2017年3月18日土曜日

スケーラブルな大規模分散ファイルシステム「GlusterFS」

スケーラブルな大規模分散ファイルシステム「GlusterFS」 オープンソースで、メディアストリーミング、データ解析、その他、帯域幅を大量に消費するタスク用途にも利用可能とのこと。



参考サイト
ファイルシステム「Gluster 3.10」リリース(Think IT)
GlusterFSを使ってみた(ngの日記さん)

2017年3月17日金曜日

Laravel5.4のグローバルヘルパー「tap()」

Laravel5.4のグローバルヘルパー「tap()」です。ドキュメントには書かれていませんが、Laravel5.3から追加されたそうです。RubyLodashにはある関数で、ソースコードを右から左へ解釈するような使い方をするものだそうです。意味を理解しようとしましたが、なかなか難しいですねぇ。

function tap($value, $callback)
{
  $callback($value);
  return $value;
}

参考サイト
Laravel tap()(Derek MacDonaldさん)
framework/helpers.php(Laravel)

2017年3月16日木曜日

Laravel5.4で、AJAXリクエストか否かの判定

Laravel5.4で、AJAXリクエストか否かの判定です。$request->ajax() で取得できます。簡単、便利。

public function is_ajax(Request $request)
{
  if( $request->ajax() ){

  }
}

参考サイト
Laravel - check if Ajax request(Stack Overflow)
HTTP Requests(Laravel)

2017年3月15日水曜日

Laravel5.4で、データベースマイグレーション(Database Migrations)のSQLクエリ確認

Laravel5.4で、データベースマイグレーション(Database Migrations)のSQLクエリ確認です。 php artisan migrate --pretendで、実際のSQLクエリ「create table...」を確認できます。こんなコマンドがあったのね(笑)。

$ php artisan migrate --pretend
$ php artisan migrate:rollback --pretend
実際のSQLクエリ
create table `blogs` ...
alter table `blogs` add constraint ...
alter table `blogs` add index ...

参考サイト
How to convert Laravel migrations to raw SQL scripts?(Stack Overflow)

2017年3月14日火曜日

Laravel5.4で、Eloquent ORMで得た値を「id」列をキーとした配列にする

Laravel5.4で、Eloquent ORMで得た値を「id」列をキーとした配列にする方法です。コレクション(Collections)のkeyBy()メソッドを利用すると、簡単に実現できます。もちろん、keyBy('○○')の指定を変えれば、指定した列をキーにした配列になります。実に、エレガント!

$blogs = Blog::where('active', 1)
      ->orderBy('published_at', 'desc')
      ->get()
      ->keyBy('id')
      ->toArray();

参考サイト
Eloquent column list by key with array as values?(Stack Overflow)

2017年3月13日月曜日

Apacheで特定ファイルのキャッシュを無効にする.htaccess

Apacheで特定ファイルのキャッシュを無効にする.htaccessファイルの設定です。何でもかんでもキャッシュされてしまう場合には、試してみるといいかもしれません。

index.phpのみ
<Files index.php>
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</Files>

拡張子が.html、.htm、.phpのファイル
<filesMatch "\.(html|htm|php)$">
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</filesMatch>

参考サイト
Turn OFF Cache for specific file with Apache(Stack Overflow)

2017年3月12日日曜日

NASAが数多くのオープンソースソフトを公開

NASAが数多くのオープンソースソフトを公開したとのこと。試してみようとユーザー登録してみましたが、利用申請する必要があるのでしょうか? よくわからない(笑)。

一般企業でも役に立ちそうな「sysytem testing」「operations」「design and integrations」「data ang image processing」などの15のカテゴリー別にソフトウェアが公開されている。


参考サイト
NASA、大量のオープンソース・ソフトウェアを公開(マイナビニュース)

2017年3月11日土曜日

Google App Engineで、Java、Ruby、Go、Python 、C#、PHP、Node.jsがサポート

Google App Engineで、Java、Ruby、Go、Python 、C#、PHP、Node.jsがサポートされるようになったとのこと。

新しいApp Engineを使えば、もしGoogle Cloud Platformを離れたくなった場合には、アプリケーションのDockerイメージを取得して、必要に応じてそれをどこにでも移動することができる。


参考サイト
新しいGoogle App Engineは、お好みの言語で開発が可能(TechCrunch Japan)

2017年3月10日金曜日

Linuxコマンドの前に「\」でエイリアスが無効になる

Linuxコマンドの前に「\」でエイリアスが無効になるというわけで、早速試してみました。快適です。十分注意して利用する必要はあるでしょうが、非常に便利。

上書き確認せずに、コピーする例。
$ \cp -Rpv /path/to/aaa /path/to/bbb
多くのファイルをコピーする場合など、威力を発揮してくれます。

参考サイト
Linux の cp コマンドで強制上書き(まだプログラマーですが何か?さん)
(Linux)cp -f としても上書き確認が出てしまう(3流プログラマのメモ書きさん)

2017年3月9日木曜日

Linuxで重複したファイルを探し出す「fdupes」をソースからインストール

Linuxで重複したファイルを探し出す「fdupes」をソースからインストールしてみました。簡単にインストールできました。ありがたい。

$ make fdupes
$ su root
# make install


参考サイト
adrianlopezroche/fdupes(GitHub)
Linuxで重複したファイルを探し出す「fdupes」

2017年3月8日水曜日

Laravel5.4で、Bladeテンプレート拡張(Extends)のIf条件分岐

Laravel5.4で、Bladeテンプレート拡張(Extends)のIf条件分岐です。うまくいかずに、いろいろ試行錯誤しましたが、1行に書くのがミソなんですね。目から鱗が落ちました。

@extends(Auth::user() ? 'layouts/member' : 'layouts/guest');

参考サイト
Blade IF ELSE and Extends(Laravel.io)

2017年3月7日火曜日

Laravel5.4に各種設定値を確認できる「Laration」を設定

Laravel5.4に、各種設定値を確認できる「Laration」を設定してみました。こんなもの必要あるのかなと、疑いの目を持って設定してみたのですが、これはこれで意外と便利です(笑)。こんな設定項目もあるのかと、勉強にもなります。

/app/Console/Kernel.php
protected $commands = [
    \Marabesi\Laration::class,
];
$ php artisan laration:list



参考サイト
marabesi/laration(GitHub)

2017年3月6日月曜日

Laravel5.4で、モデルデータの複製(replicate)

Laravel5.4で、モデルデータの複製(replicate)です。replicateを利用しなくてもコピーできると思いますが、知っていると便利かも?

/app/Http/Controllers/BlogsController.php
$blog = Blog::find(1);

// 「slug」以外をコピー
$newBlog = $blog->replicate(['slug']);
$newBlog->save();

// 「slug」を改めて設定
$newBlog->slug = $blog->slug.'-'.$newBlog->id;
$newBlog->save();

参考サイト
Illuminate\Database\Eloquent\Model(Laravel API)
Laravel 5 replicate() handle columns that have unique attribute(Stack Overflow)

2017年3月5日日曜日

量子コンピュータを超えるDNAコンピュータ?

量子コンピュータを超えるDNAコンピュータの実現可能性についての記事です。あと10年もすると、量子コンピュータさえも陳腐化しているのかもしれません(笑)。
DNAは複製や転写が可能であると同時に、生物の遺伝情報が数十億年に渡り事実上変化していないことが示す通り、相補的な塩基対の構造により配列の信頼性も高い。加えて、DNAを用いたコンピューティングは低消費電力なことや、理論的には1bitあたり1立方nmで記録できる情報の記録密度の高さから注目されている。


参考サイト
英大学、量子コンピュータを超える「非決定性万能チューリングマシン」の実現可能性を指摘(PC Watch)

2017年3月4日土曜日

「Google Home」と「Amazon Echo」の比較ビデオ

Google Home」と「Amazon Echo」の比較ビデオです。未来を感じますねぇ。日本語でも同じようなことが実現できるんでしょうか?!







参考サイト
Google Home vs. Amazon Echo: Alexa takes round 1(CNET)

2017年3月3日金曜日

Laravel5.4で、新規モデルデータ作成で「Field '○○' doesn't have a default value」

Laravel5.4で、新規モデルデータ作成の際、Nullを許可していないカラムに、空のデータを登録しようとすると「Field '○○' doesn't have a default value」と出ますが、MySQLの場合、設定を変えることで、エラーを出さずに登録させることもできるらしいです。/config/database.php で「'strict' => false」にすると、たしかに、エラーが出ず、登録できてしまいます。

/config/database.php
  'mysql' => [
    'strict' => false,
  ],

参考サイト
Laravel 5.3 Creating Models Returns "Field doesn't have a default value"(Stack Overflow)

2017年3月2日木曜日

Laravel5のサービスプロバイダ(ServiceProvider)ではセッションが使えない

Laravel5のサービスプロバイダ(ServiceProvider)ではセッションが使えないらしいので、ミドルウェア(Middleware)に登録して利用する必要があるようです。これでセッションの値をグローバル変数的に、どこからでも参照できます。

/app/Http/Middleware/StartSession.php
  public function handle($request, Closure $next)
  {
    $request->session()->put('key', 'value');
    return $next($request);
  }

/app/Http/Kernel.php
  protected $middlewareGroups = [
    'web' => [
      \App\Http\Middleware\StartSession::class,
    ],
  ];

参考サイト
Laravel - Session variable is null in Service Provider(Stack Overflow)

2017年3月1日水曜日

Laravel5.4で、ログイン後に元いたページに戻る

Laravel5.4で、ログイン後に元いたページに戻る設定です。Laravel5.3以降では、Auth Guardのチェック時に元いたページのルートを自動的に保存するため、redirect()->intended('/') という具合に、設定できるらしいです。賢い。

/app/Http/Middleware/RedirectIfAuthenticated.php
  public function handle($request, Closure $next, $guard = null)
  {
    if (Auth::guard($guard)->check()) {
      return redirect()->intended('/');
    }
    return $next($request);
  }

参考サイト
Laravel redirect back to original destination after login(Stack Overflow)

2017年2月28日火曜日

2017年2月27日月曜日

Linuxで重複したファイルを探し出す「fdupes」

Linuxで重複したファイルを探し出す「fdupes」をインストールしてみました。

Ubuntuでのインストール
$ sudo apt-get install fdupes
使い方
Usage: fdupes [options] DIRECTORY...

 -r --recurse           for every directory given follow subdirectories
                        encountered within
 -R --recurse:          for each directory given after this option follow
                        subdirectories encountered within
 -s --symlinks          follow symlinks
 -H --hardlinks         normally, when two or more files point to the same
                        disk area they are treated as non-duplicates; this
                        option will change this behavior
 -n --noempty           exclude zero-length files from consideration
 -f --omitfirst         omit the first file in each set of matches
 -1 --sameline          list each set of matches on a single line
 -S --size              show size of duplicate files
 -m --summarize         summarize dupe information
 -q --quiet             hide progress indicator
 -d --delete            prompt user for files to preserve and delete all
                        others; important: under particular circumstances,
                        data may be lost when using this option together
                        with -s or --symlinks, or when specifying a
                        particular directory more than once; refer to the
                        fdupes documentation for additional information
 -N --noprompt          together with --delete, preserve the first file in
                        each set of duplicates and delete the rest without
                        prompting the user
 -p --permissions       don't consider files with different owner/group or permission bits as duplicates
 -v --version           display fdupes version
 -h --help              display this help message
コマンド例
$ fdupes -r /path/to/dir
$ fdupes -rf /path/to/dir | sort | uniq | grep -v '^$' > fdupes.txt

参考サイト
違うファイル名なのに中身が同じ、重複したファイルを一括で整理する(Divide et imperaさん)
Linux上で重複したファイルを探して削除する(Scribbleさん)

2017年2月25日土曜日

JavaとPythonにFTPインジェクションの脆弱性

JavaとPythonにFTPインジェクションの脆弱性が見つかったそうです「JavaとPythonに脆弱性、ファイアウォールを迂回できる恐れ」。こんなことがあるんですねという、ちょっとビックリするニュースです。

脆弱性の原因は、JavaがFTPプロトコルのユーザー名の構文を適切に検証していないことにある。 FTPでは認証がサポートされているが、JavaのXML eXternal Entity(XXE)は、ユーザー名中のキャリッジリターン(CR)とラインフィード(LF)の有無を検証していないという。


参考サイト
JavaとPythonに脆弱性、ファイアウォールを迂回できる恐れ--研究者ら報告(ZDNet Japan)

2017年2月24日金曜日

Composerで「the requested PHP extension curl is missing from your system」のエラー

Composerで「the requested PHP extension curl is missing from your system」のエラーが出たので、対処です。環境はUbuntu 16.04。php-curlが入っていないために出ているエラーらしい。というわけで、インストールです。

$ sudo apt-get install php7.0-curl
# あるいは、
$ sudo apt-get install php5-curl

参考サイト
Composer install error - requires ext_curl when it's actualy enabled(Stack Overflow)

2017年2月23日木曜日

Laravel5.4でDropboxにバックアップ

Laravel5.4で、Dropboxにバックアップです。Tim Lelandさんのブログに書かれている通りに試してみました。見事にDropbox上に、バックアップが保存されています。感動であります!

まずは、Dropbox APIのAppを作成。OAuth用のアクセストークンを取得する。

.env(「Access Token」は「App key」とは違うので注意)
DROPBOX_ACCESS_TOKEN=abcdefghijklmn1234567890
DROPBOX_APP_SECRET=abcdefghijklmn

Dropbox用のファイルシステムアダプター「league/flysystem-dropbox」を追加。

サービスプロバイダを作成
$ php artisan make:provider DropboxFilesystemServiceProvider

/app/Providers/DropboxFilesystemServiceProvider.php
namespace App\Providers;

use Storage;
use League\Flysystem\Filesystem;
use Dropbox\Client as DropboxClient;
use League\Flysystem\Dropbox\DropboxAdapter;
use Illuminate\Support\ServiceProvider;

class DropboxFilesystemServiceProvider extends ServiceProvider
{
  public function boot()
  {
    Storage::extend('dropbox', function ($app, $config) {
      $client = new DropboxClient($config['accessToken'], $config['appSecret']);

      return new Filesystem(new DropboxAdapter($client));
    });
  }
}

/config/app.php(サービスプロバイダを登録)
  'providers' => [
    App\Providers\DropboxFilesystemServiceProvider::class,
  ],

/config/filesystems.php(ファイルシステムの設定に「dropbox」を追加)
  'disks' => [
    'dropbox' => [
      'driver' => 'dropbox',
      'accessToken' => env('DROPBOX_ACCESS_TOKEN'),
      'appSecret' => env('DROPBOX_APP_SECRET'),
    ]
  ],

/config/laravel-backup.php(laravel-backupの保存先を「dropbox」に変更)
  'destination' => [
    'disks' => [
      'dropbox',
    ],
  ],

あとは、こちらの要領でバックアップ



参考サイト
Backup your Laravel 5 App to Dropbox(Tim Lelandさん)
thephpleague/flysystem-dropbox: Flysystem Adapter for Dropbox(GitHub)
Laravel5.4でバックアップ「spatie/laravel-backup」

2017年2月22日水曜日

Laravel5.4でバックアップ「spatie/laravel-backup」

Laravel5.4で、バックアップ「spatie/laravel-backup」を設定してみました。データベース、プログラムファイル、その他諸々、まとめてバックアップできます。

/config/app.php
  'providers' => [
    Spatie\Backup\BackupServiceProvider::class,
  ],
/config/laravel-backup.php を作成する
$ php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"

/config/laravel-backup.php が出来上がるので、適当に編集。

コマンド確認
$ php artisan list

 backup
  backup:clean         Remove all backups older than specified number of days in config.
  backup:list          Display a list of all backups.
  backup:monitor       Monitor the health of all backups.
  backup:run           Run the backup.
バックアップ実行
$ php artisan backup:run

/config/laravel-backup.php の設定で保存先の「disks」が「local」のままだと、

/storage/app/

ディレクトリの中に、データベースからプログラムファイルから、その他諸々、ごっそりzipファイルでバックアップされます。素晴らしい。



参考サイト
Installation and setup(Laravel Backup Docs)

2017年2月21日火曜日

Laravel5.4でパスワード再設定メールテンプレートをカスタマイズ

Laravel5.4で、パスワード再設定メールテンプレートをカスタマイズです。HTMLメールではなく、テキストメールで送信するように設定してみたかったのですが、挫折しました。たぶん、テキストでは送れないような気がします(?)

$ php artisan make:notification TextPasswordReset
/app/User.php
use App\Notifications\TextPasswordReset;

class User extends Authenticatable
{
  // sendPasswordResetNotificationをオーバーライド
  public function sendPasswordResetNotification($token)
  {
    $this->notify(new TextPasswordReset($token));
  }
}
/app/Notifications/TextPasswordReset.php
use Illuminate\Auth\Notifications\ResetPassword; 

class TextPasswordReset extends ResetPassword
{
  use Queueable;

  public $token;

  public function __construct($token)
  {
    $this->token = $token;
  }

  public function via($notifiable)
  {
    return ['mail'];
  }

  public function toMail($notifiable)
  {
    return (new MailMessage)
      ->subject('パスワード再設定') 
      ->view('emails.reset') 
   // ->markdown('emails.reset') これは、HTMLメールになってしまう。
      ->action('再設定', url('/password/reset', $this->token));
  }
}
/resources/views/emails/reset.blade.php(結局、改行などはHTMLタグを使うしかない。)
下記URLをクリックして、パスワードを再設定してください。<br>
<br>
{{ $actionUrl }}

参考サイト
Laravel5.3でパスワードリセットメールをテキスト形式で送りたいのですがどうすればできますか。(teratail)
Laravel 5.3 Redefine reset email blade template(Stack Overflow)
Illuminate\Notifications\Messages\MailMessage(Laravel API)

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)