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)

2017年1月15日日曜日

マルチプラットフォーム対応のオープンソースビデオ変換ツール「HandBrake」

マルチプラットフォーム対応のオープンソースビデオ変換ツール「HandBrake」 動画を様々なワイル形式に変換することができるそうです。とにかくメモ。





参考サイト
HandBrake 1.0登場 - 13年で初のメジャーバージョン(マイナビニュース)

2017年1月14日土曜日

ChromeやSafariの自動入力でクレジットカード情報などが盗まれる危険性

ChromeやSafariの自動入力でクレジットカード情報などが盗まれる危険性があるそうです。単純な仕組みですが、なるほどなと思いました。自動入力を利用する際は、念のため、気をつけたほうがいいでしょう。



参考サイト
ChromeやSafariの自動入力でクレジットカードなどの個人情報が盗まれる危険性(PC Watch)
anttiviljami/browser-autofill-phishing(GitHub)

2017年1月13日金曜日

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

Laravel5.3静的ファイルのコンパイル(Laravel Elixir)を設定してみました。良い感じだ(笑)。

$ npm install --global gulp-cli
$ npm install laravel-elixir-browserify-official --save-dev
$ npm install
gulpfile.js
elixir(function(mix) {
    mix.sass('app.scss').browserify('app.js');
});
$ gulp
$ gulp watch
$ gulp --production

参考サイト
Compiling Assets (Laravel Elixir)(Laravel)
Setup Bootstrap Sass with Laravel Elixir(Laravel News)

2017年1月12日木曜日

Laravel5.3でルートのモデルバインディング(Route Model Binding)

Laravel5.3ルートのモデルバインディング(Route Model Binding)を設定してみました。エレガント!!

/app/Providers/RouteServiceProvider.php
  public function boot()
  {
    parent::boot();
    Route::model('blog', \App\Blog::class);
  }
/app/Http/Controllers/BlogsController.php
  // public function show($id)
  public function show(Blog $blog)
  {
    // $blog = Blog::findOrFail($id) ;
    return view('blog.show', compact('blog'));
  }

参考サイト
Route Model Binding(Laravel)

2017年1月11日水曜日

Laravel5.3でコントローラーに認証を追加

Laravel5.3コントローラーに認証を追加してみました。ミドルウェア(Middleware)の「auth」でログイン状態か否かをチェックすてくれます。

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

  public function __construct()
  {
    $this->middleware('auth', ['except' => ['index', 'show']]);
  }

参考サイト
Authentication(Laravel)
Middleware(Laravel)
Laravelのmiddleware authを理解したい(Qiita)
初めてのLaravel 5.1 : (30) Middleware(ララ帳さん)

2017年1月10日火曜日

Laravel5.3で認証

Laravel5.3認証です。よくわかっていませんが、コマンド一発で、HogeController.php が追加されて、ログイン機能が出来上がっていました。スゴイ!

$ php artisan make:auth
| GET|HEAD | home |App\Http\Controllers\HomeController@index 
| GET|HEAD | login |App\Http\Controllers\Auth\LoginController@showLoginForm
| POST | login |App\Http\Controllers\Auth\LoginController@login 
| POST | logout |App\Http\Controllers\Auth\LoginController@logout 
| POST | password/email |App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail 
| GET|HEAD | password/reset |App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm 
| POST | password/reset |App\Http\Controllers\Auth\ResetPasswordController@reset 
| GET|HEAD | password/reset/{token} |App\Http\Controllers\Auth\ResetPasswordController@showResetForm 
| GET|HEAD | register |App\Http\Controllers\Auth\RegisterController@showRegistrationForm 
| POST | register |App\Http\Controllers\Auth\RegisterController@register  

参考サイト
Authentication(Laravel)

2017年1月9日月曜日

FreeDOS 1.2がリリース

FreeDOS 1.2がリリースされたとのこと。DOSにもオープンソースの世界があるんですね。

FreeDOSはDOS互換のオペレーティングシステムを目的として開発が進められているソフトウェアで、依然としてDOSを必要としている環境において利用されている。


参考サイト
FreeDOS 1.2登場(マイナビニュース)

2017年1月8日日曜日

無料で今どきのデザインのホームページが作成できる「Webnode」

無料で今どきのデザインのホームページが作成できる「Webnode」 直感的な操作性で、シンプルに纏められていて使いやすい。コンテンツ制作に集中できて、良いと思います。ショッピングサイトなども運営可能です。


2017年1月7日土曜日

PythonコードをGo言語に変換して実行する「Grumpy」

Googleが、PythonコードをGo言語に変換して実行する「Grumpy」を発表したとのこと。
CPythonの制約によって複数の処理を同時並行で行うコンカレント処理をうまく実行するには限界があり、そうした処理に優れたGo言語で実行するために開発されたのがGrumpy。
GrumpyはPythonからGoへのソースコードトランスコンパイラとランタイムで、CPython 2.7代替を目指しています。 主な違いは、PythonソースコードをGoソースコードにコンパイルし、バイトコードではなくネイティブコードにコンパイルすることです。 これはGrumpyにVMがないことを意味します。



参考サイト
Google、PythonのコードをGo言語に変換して実行する「Grumpy」発表(ITmedia ニュース)

2017年1月6日金曜日

Laravel5.3で更新の「unique」バリデーション

Laravel5.3で更新の「unique」バリデーションです。データベースのに問い合わせし、該当のデータIDを除いてユニークか否かをチェックしてくれます。

/app/Http/Requests/StoreBlogPost.php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class StoreBlogPost extends FormRequest
{
  /**
   * Get the validation rules that apply to the request.
   *
   * @return array
   */
  public function rules()
  {
    // $this->segment(2) にはIDが入る。
    return [
      'title' => ['required',Rule::unique('blogs')->ignore($this->segment(2))],
      'contents' => 'required',
    ];
  }
}

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

2017年1月5日木曜日

Laravel5.3でモデルデータを自動でフォーマットできるミューテータ(Mutators)

Laravel5.3でモデルデータを自動でフォーマットできるミューテータ(Mutators)です。意味のないサンプルですが、挙動はよくわかります。

/app/Blog.php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Blog extends Model
{
  // データを取得する際、タイトル(title)の先頭に「test1-」をつける
  public function getTitleAttribute($value)
  {
    return 'test1-'.$value;
  }

  // データを登録する際、タイトル(title)の語尾に「-test2」をつける
  public function setTitleAttribute($value)
  {
    $this->attributes['title'] = $value.'-test2';
  }
}

参考サイト
Eloquent: Mutators(Laravel)

2017年1月4日水曜日

Laravel5.3でバリデーションエラーメッセージの日本語化

Laravel5.3でバリデーションエラーメッセージの日本語化です。日本語化されたファイル「Laravel 5.3 日本語バリデーションメッセージファイル」が公開されているので、ありがたく利用させていただきましょう。

Laravel 5.3 日本語バリデーションメッセージファイル

/config/app.php(locale変更)
'locale' => 'ja',

/resources/lang/ja/validation.php(日本語化)
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
... 
... それぞれ日本語にする。
... 

/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/

/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
// 入力変数を日本語化する。
'attributes' => [
    'title' => 'タイトル'
],

参考サイト
初めてのLaravel 5.1 : (19) エラーメッセージの日本語化(ララ帳さん)
Best way to work with custom messages & rules in L5. (Laravel.io)

2017年1月3日火曜日

グラフィカルなUIを実現できるプログラミング言語「Elm」

グラフィカルなUIを実現できるプログラミング言語「Elm」 JavaScriptにコンパイルされ、ブラウザ内で動作します。ちょっと調べてみましたが、難しい。プログラムソースを見ると目眩がします(笑)。ただ、実現できるUIはクオリティーの高いものになりますので、非常に魅力的ではあります。



参考サイト
関数型リアクティブプログラミング言語Elmに学ぶ フロントエンド開発の新しい形(CodeZine)

2017年1月2日月曜日

システムプログラミング言語の「Rust」

システムプログラミング言語の「Rust」 2017年に熱くなりそうだ(?)ということでメモ。Elixirなどと同じ関数型プログラミング言語ですね。

Rust(ラスト)は並列かつマルチパラダイムのプログラミング言語である。 Mozillaによって開発されている。 関数型プログラミング、並列アクターモデル、手続き型プログラミング、オブジェクト指向プログラミングをサポートする実用的な言語を目指している。
ネットワークを相手に動作する比較的大きな、サーバやクライアントプログラムを作成するのに都合が良い言語を目指したものである。結果として、安全性、メモリ管理、並列性が、この言語の目立った特徴となっている。


参考サイト
RustとDNSの1年(POSTDさん)
Rust (プログラミング言語)(Wikipedia)

2017年1月1日日曜日

初詣の混雑をビックデータで分析

初詣の混雑をビックデータで分析「位置情報ビッグデータで初詣の混雑を分析」 これを見ると、午前中、人出が少ないのは頷けるとして、元日より2日、2日より3日と増える傾向にあるのは、ちょっと意外な気がしました。みなさん、元日、2日はゆっくり過ごしているとこうことなんでしょうか(笑)。



参考サイト
位置情報ビッグデータで初詣の混雑を分析(株式会社インテージ)
初詣ビッグデータが示す、人出が比較的少なそうな時間帯と最寄り駅の混雑傾向(INTERNET Watch)