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)

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)

2017年1月31日火曜日

Laravel5.4でコマンド作成(Writing Commands)

Laravel5.4コマンドを作成(Writing Commands)してみました。意味のないコマンドですが、動いてくれています(笑)。

make:commandで、マンド作成
$ php artisan make:command MyTestCommand

/app/Console/Commands/MyTestCommand.php
class MyTestCommand extends Command
{
  protected $signature = 'command:test123';

  protected $description = 'Command no setsumei desu.';

  public function handle()
  {
    print date("Y-m-d H:i:s")."\n" ;
  }
}

/app/Console/Kernel.php(コマンド登録)
  protected $commands = [
    Commands\MyTestCommand::class
  ];

実行してみる
$ php artisan list

 command
  command:test123      Command no setsumei desu.

$ php artisan command:test123

2017-01-31 12:34:56

参考サイト
Writing Commands(Laravel)

2017年1月30日月曜日

Laravel5.4でタスクスケジュール(Task Scheduling)

Laravel5.4タスクスケジュール(Task Scheduling)です。コマンド(command)に「inspire」を指定すると、「php artisan inspire」を実行してくれます。というわけで、artisanコマンドの「command:○○」を準備すれば、利用できるはず。

/app/Console/Kernel.php
  protected function schedule(Schedule $schedule)
  {
    // ログファイル
    $filePath = storage_path()."/logs/test.txt";
    $schedule->command('inspire')->everyTenMinutes()->appendOutputTo($filePath);
  }

参考サイト
Task Scheduling(Laravel)

2017年1月29日日曜日

オープンソースの時系列データベース「InfluxDB」

オープンソースの時系列データベース「InfluxDB」 イベントの記録や分析に有益とのこと。SQLライクなクエリを利用することができ、ほぼリアルタイムで結果が得られるそうです。




参考サイト
InfluxDB をちょっとさわってみた((ひ)メモさん)

2017年1月27日金曜日

Laravel 5.4がリリース、早速5.3から5.4へアップグレード

Laravel 5.4がリリースされています。早速Laravel 5.3からLaravel 5.4へアップグレードしてみました。アップグレードガイドはこちら。使えないブログシステムを作成して遊んでいただけですので、アップグレードしても問題ないです(笑)。tinkerが使えなくなっていたので、必要な場合は、明示的に組み込む必要があるようです。

composer.json
  "require": {
    "php": ">=5.6.4",
    "laravel/framework": "5.4.*",
    "laravelcollective/html":"5.4.*",
    "laracasts/flash":"*",
    "laravel/tinker": "*"
  },

/config/app.php(コンフィギュレーションファイルにtinkerを追加)
  'providers' => [
    Laravel\Tinker\TinkerServiceProvider::class,
  ],

キャッシュのクリア
$ php artisan view:clear
$ php artisan route:clear
$ php artisan cache:clear



参考サイト
Laravel 5.4 変更点のメモ(Qiita)
Upgrade Guide(Laravel)

2017年1月26日木曜日

Laravel5.3でカスタムヘルパー(Custom Helpers)

Laravel5.3カスタムヘルパー(Custom Helpers)です。作法はともかく、ヘルパーとして利用できました。

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

/app/Providers/HelperServiceProvider.php(サービスプロバイダーでヘルパーを読み込む)
  public function register()
  {
    foreach (glob(app_path().'/Helpers/*.php') as $filename){
      require_once($filename);
    }
  }

/app/Helpers/Text.php(ヘルパー本体)
namespace App\Helpers;

class Text {
  // 「全角カタカナ」を「全角ひらがな」に
  public static function convert_hiragana($string)
  {
    return mb_convert_kana($string, "c");
  }
}

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

  'aliases' => [
    'Text' => App\Helpers\Text::class,
  ],

/resources/views/blog/show.blade.php(ブレード内で利用)
{{ Text::convert_hiragana($blog->title) }}

参考サイト
Add Your Custom Helpers in Laravel 5(Slickさん)
Service Providers(Laravel)

2017年1月25日水曜日

Laravel5.3で画像アップロードのバリデーション

Laravel5.3画像アップロードのバリデーションです。マイムタイプや画像のサイズ、縦横の比率などもチェックしてくれます。至れり尽くせり。

  • image
  • mimes
  • dimensions

/app/Http/Requests/UploadImageRequest.php
  public function rules()
  {
    return [
      'pic' => 'required|image|mimes:jpeg,jpg|dimensions:min_width=100,min_height=200,max_width=300,max_height=400',
    ];
  }

参考サイト
Available Validation Rules(Laravel)

2017年1月24日火曜日

Laravel5.3でファイルのアップロード(File Uploads)

Laravel5.3ファイルのアップロード(File Uploads)です。バリデーションを設定していませんが、ものすごく簡単。あっけなく、そして、素晴らしい。

/resources/views/blog/upload.blade.php
{!! Form::open(['url' => ['blog/upload', $blog->id], 'files' => true]) !!}
{!! Form::file('pic',null) !!}
{!! Form::submit('アップロード') !!}
{!! Form::close() !!}
/app/Http/Controllers/BlogsController.php
  public function upload(Request $request, $id)
  {
    // /storage/app/pics にアップロードされる
    $path = $request->file('pic')->store('pics');

    // /storage/app/public/pics にアップロードされる
    $path = $request->file('pic')->store('pics', 'public');

    // $path には、生成されたファイル名が入る。
    return $path;
  }

参考サイト
Storing Files(Laravel)
Laravel5.3でファイルシステム(Filesystem)

2017年1月23日月曜日

Laravel5.3でファイルシステム(Filesystem)

Laravel5.3ファイルシステム(Filesystem)です。クラウド向けの機能だと思いますが、local環境だと、ディフォルトで「/storage/app/」フォルダにファイルが保存さるらしい。/config/filesystems.php の設定を変えることで、ローカルファイルのごとく、クラウドストレージが利用できるようになるという優れモノでしょう(?)。

$ php artisan storage:link
# /public/storage シンボリックリンクができる。

$ php artisan tinker

>>> echo asset('storage/file.txt');
http://localhost/storage/file.txt
=> null

>>> Storage::disk('local')->put('file.txt', 'Hello world!');
=> true
# /storage/app/file.txt に保存される。

>>> Storage::disk('public')->put('file.txt', 'Hello world!');
=> true
# /storage/app/public/file.txt に保存される。
# http://localhost/storage/file.txt でアクセスできる。

参考サイト
Filesystem(Laravel)

2017年1月22日日曜日

PJAXを組み込める軽量JavaScriptライブラリ「Barba.js」

PJAXを組み込める軽量JavaScriptライブラリ「Barba.js」 CDNも用意されていて、導入しやすい。

<script src="https://cdnjs.cloudflare.com/ajax/libs/barba.js/0.0.10/barba.min.js" type="text/javascript"></script>



参考サイト
luruke/barba.js(GitHub)

2017年1月21日土曜日

PJAXとは何?

PJAXとは何? ということで、調べてみました。

AJAXでページを更新するとアドレスバーのアドレスも更新され、戻るボタンをクリックすると前のページに戻ることができる。

非同期通信でデータ量を減らすことができ、なおかつSEO的にも優れているということだと思います。



参考サイト
pjaxできれいなURL+非同期画面遷移!(Headwaters Tech Noteさん)
はじめての「pjax」(RakSul Tech Blogさん)
pjaxのtips(Qiita)
falsandtru/pjax-api(GitHub)
defunkt/jquery-pjax(GitHub)

2017年1月20日金曜日

Laravel5.3でメール送信(Mail)

Laravel5.3メール送信(Mail)です。Gmailから送信してみました。送信処理が切り離されているので、システムデザイン的には良いのでしょうが、回りくどい(笑)。PHPの古き良き「気楽さ」的なものは無いですね。

.env(設定)
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=sampleuser@gmail.com
MAIL_PASSWORD=samplepassword
MAIL_ENCRYPTION=tls
コマンドで、Mailableクラスを作成
$ php artisan make:mail BlogPosted
/app/Mail/BlogPosted.php
use App\Blog;

class BlogPosted extends Mailable
{
  use Queueable, SerializesModels;

  public $blog;

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

  public function build()
  {
    return $this->subject('ブログ記事です')
      ->view('emails.blog')
      ->text('emails.blog_plain');
  }
}
/resources/views/emails/blog.blade.php(HTMLメール)
<h1>{{ $blog->title }}</h1>
<br>
<p>{{ $blog->contents }}</p>
<br>
<p>{{ $blog->created_at }}</p>
/resources/views/emails/blog_plain.blade.php(テキストメール)
{{ $blog->title }}

{{ $blog->contents }}

{{ $blog->created_at }}
/app/Http/Controllers/BlogsController.php(コントローラーから送信)
use App\Blog;
use App\Mail\BlogPosted;
use Illuminate\Support\Facades\Mail;

    public function mail($id)
    {
        $blog = Blog::findOrFail($id) ;
        Mail::to("receiversample@example.com")->send(new BlogPosted($blog));
        return $blog;
    }

参考サイト
Mail(Laravel)
Laravel5.3でメール送信の実装(Laravel Roomさん)

2017年1月19日木曜日

Laravel5.3で暗号化(Encryption)

Laravel5.3暗号化(Encryption)です。暗号化したものを元に戻せているからOKでしょう。

/app/Http/Controllers/BlogsController.php
use Illuminate\Contracts\Encryption\DecryptException;

  $str = "Hello world テスト中!!" ;
  print_r($str) ;
  print "<br>" ;

  // 暗号化
  $str = encrypt($str) ;
  print_r($str) ;
  print "<br>" ;

  // 復号化
  try {
    $str = decrypt($str) ;
    print_r($str) ;
  } catch (DecryptException $e) {
    print_r($e) ;
  }

参考サイト
Encryption(Laravel)

2017年1月18日水曜日

Laravel5.3でシードデータ(seeding)

Laravel5.3シードデータ(seeding)です。テスト用のダミーデータを入れるのに、ディフォルトで「fzaninotto/faker」が組み込まれているので、利用してみました。これまた、簡単、便利。

$ php artisan make:seeder BlogsTableSeeder
$ php artisan db:seed --class=BlogsTableSeeder
/database/seeds/BlogsTableSeeder.php
use Faker\Factory as Faker;
use App\Blog;

  public function run()
  {
    $faker = Faker::create('ja_JP');

    $blog = new Blog;
    $blog->title = $faker->name;
    $blog->contents = $faker->paragraph;
    $blog->save();
  }

参考サイト
Database: Seeding(Laravel)
Faker@PHPでダミーデータを作る(Qiita)
fzaninotto/Faker(GitHub)

2017年1月17日火曜日

Laravel5.3でページ送り(Pagination)

Laravel5.3ページ送り(Pagination)を設定してみました。ものすごく簡単に実現できます。素晴らしい。

/app/Http/Controllers/BlogsController.php
  public function index()
  {
    $blogs = Blog::orderBy('publiched_at','desc')->paginate(10) ;
    return view('blog.index', compact('blogs'));
  }
/resources/views/blog/index.blade.php
  <p>{{ $blogs->links() }}</p>

  @foreach ($blogs as $blog)
    <p><a href="{{ url('/blog', $blog->id) }}">{{ $blog->title }}</a></p>
  @endforeach

  <p>{{ $blogs->links() }}</p>

参考サイト
Pagination(Laravel)

2017年1月16日月曜日

Laravel5.3でフラッシュメッセージ「laracasts/flash」

Laravel5.3でフラッシュメッセージの「laracasts/flash」を設定してみました。Laracastsのなすがままに。

/config/app.php
  'providers' => [
    Laracasts\Flash\FlashServiceProvider::class,
  ],

  'aliases' => [
    'flash' => Laracasts\Flash\Facade::class,
  ],
/app/Http/Controllers/BlogsController.php
  public function store()
  {
    flash('登録されました。', 'success')->important();
    return redirect('blog') ;
  }



参考サイト
HTTP Session(Laravel)
Laravel 5 Fundamentals: Flash Messaging(Laracasts)