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)