【時間の無駄】Youtubeの見るのを止めたい時

あることに気が付いた。
Youtubeって完全に時間の無駄じゃね? 

現実逃避にはいいんだけど、なんと言ったらいいのかわからいんだけど、なんか価値観や思考を奪われる感じがするんだよね。思考の影響を受けやすい、というか。だから、できるだけ見ないようにしようと思ってるんだけど、ついつい見てしまう。そして、殆ど無駄だとわかってるんだけど、たまに役立つような情報もあるからたちが悪い。

で、しばらく考えたんだが、閲覧ブロックするアプリをインストールして、強制的に見れないようにすることにした。

1.アプリの設定を無効化する
設定->アプリと通知->アプリ->Youtube

2.BlockSiteをインストールして閲覧ブロックする

あれ、何気に、大事なことしたような気がする。

Laravel5.7 バリデーションのエラーメッセージをカスタマイズ

Laravel5.7 バリデーションのエラーメッセージをカスタマイズしたいと思います。
複雑なことやってんのかな? いえ、こんなに奇怪なことはやってません。

まず、app/Http/Requests 配下にフォームリクエストのCompanyRequest.phpがあります。

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CompanyRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'company_name' => 'required',
            'agent_name' => 'required',
        ];
    }
}

この状態だと、fieldの値がnullだと、「The ${value} field is required.」とアラートメッセージが表示されます。

公式ドキュメントバリデーション(https://readouble.com/laravel/5.7/ja/validation.html)のページ中段にあるエラーメッセージのカスタマイズを実装します。
public function rulesの下、overrideするメッセージを書きます。
適当に日本語で、「会社名を入力してください」「代理店名を入力してください」としておきましょう。

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CompanyRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'company_name' => 'required',
            'agent_name' => 'required',
        ];
    }
    public function messages()
    {
        return [
            'company_name.required' => '会社名を入力してください',
            'agent_name.required' => '代理店名を入力してください',
        ];
    }
}

日本語で表示されるようになりました。

おお、割と簡単だった。

特殊文字とはなにか?

プログラマーって、みんな文字や文字コードの知識が詳しいな。まいるぜ。

wikipediaを参考にします。
特殊文字の定義
特殊文字(とくしゅもじ、special character)とは、情報処理において文字集合に含まれる文字(図形文字)として扱われるもののうち、伝統的な言語学でいう「文字」(表音文字や表意文字)に入らないものであって、しばしば通常の文字とは異なる特殊な扱いをされるものをいう。

なんだそれは? 

伝統的な言語学で扱われてきた約物(句読点や:/;/”/?/!等)のほか、数学記号などの学術記号、単位記号、通貨記号、国際音声記号、といったさまざまな記号類、矢印や罫線素片、ハートやダイヤなどのトランプのマーク、絵文字といったものも含まれる。

絵文字も特殊文字なのか。ややこしいな。

エンジニアと英語

仕事で英語は使っているか?
=> Yes(コミュニケーション/ドキュメント両方)

英語は必要だと思うか?
=> Yes、ドキュメントの読み込みは英語ができないとかなりキツイ。

エンジニアとして、どういう英語の勉強をしたか、しているか?
=> udacityの講座は全部やった。

英会話スクールなどに行った方がいいか?
=> No。高校生の頃、30万位払ってECCに通ったが、全く上達しなかった。英会話はエンジニアには金の無駄。

英語のプログラミング関係の本を買って勉強するのはどうか?
=> No。まず、売ってる本の種類が少ない。Amazonで買おうとすると、海外取り寄せになる場合が多い。すると、到着するのに1週間以上かかったりするので、そのころにはマインドが変わっている。

おすすめの勉強方法は?
=> 英語のサイト/アプリケーションを構築すると勉強になると思う。

文字のバイト数とは?

システムによって、バイト数の制限があることがあります。
よくある例としては、画像ファイルは〇M byteまで など。

まず、言葉の定義から。
1バイトとは
0か1かを表すビットという単位が8つ並んで構成される。2の8乗で256通りのデータ

1KB、1MB、1GB
1キロバイト=1024バイト、1メガバイト=1024キロバイト、1ギガバイト=1024メガバイト
※1000バイト単位でないので注意が必要

半角のアルファベットと数字、1文字のデータ量は1バイト
– 日本語は漢字が数千あり、256種類では表現しきれないので、2バイト(16ビット)で1文字を表現する。いわゆる全角文字。2バイト(2^16)は65536種類の情報を表現できる。

500バイトだと250文字
WordのA4でフォントサイズ10.5で40文字程度

アルファベットは7ビットで表現
つまり1バイト?

PHPでバイト数を図ってみましょう。
strlen()でバイト数を計測

$single = "a";
$multi = "あ";
var_dump(strlen($single), strlen($multi));

あれ、”あ”が3byteになってる。何故だ!?

phpのマニュアルを見てみる。
http://php.net/manual/ja/function.strlen.php
うーん、やっぱりバイトだ。 あ、マルチバイト文字列はmb_strlen()でカウントするらしい。なるほど。つまり、”あ”は3バイトで表現されているってことか。

Mysqlのテーブルの文字コードを変更する

まずmysql のtableの文字コードを確認します。
show create table table_name
mysql> show create table items;
+——-+———————————————————————————————————————————————————————————–+
| Table | Create Table |
+——-+———————————————————————————————————————————————————————————–+
| items | CREATE TABLE `items` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
`name` text,
`price` int(11) DEFAULT NULL,
PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+——-+———————————————————————————————————————————————————————————–+
1 row in set (0.06 sec)


utf-8なのがわかります。

[vagrant@localhost ~]$ cd /usr/share/mysql/charsets/
[vagrant@localhost charsets]$ ls
Index.xml cp1251.xml cp866.xml hp8.xml latin2.xml swe7.xml
README cp1256.xml dec8.xml keybcs2.xml latin5.xml
armscii8.xml cp1257.xml geostd8.xml koi8r.xml latin7.xml
ascii.xml cp850.xml greek.xml koi8u.xml macce.xml
cp1250.xml cp852.xml hebrew.xml latin1.xml macroman.xml
ん? なんだこれは?

とりあえず、テーブルの文字コードを変更します。
alter table table_name default character set utf8mb4;
mysql> alter table items default character set utf8mb4;
Query OK, 0 rows affected (0.16 sec)
Records: 0 Duplicates: 0 Warnings: 0

utf8mb4に変更されているのがわかります。
mysql> show create table items;
+——-+———————————————————————————————————————————————————————————————————+
| Table | Create Table |
+——-+———————————————————————————————————————————————————————————————————+
| items | CREATE TABLE `items` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
`name` text CHARACTER SET utf8,
`price` int(11) DEFAULT NULL,
PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+——-+———————————————————————————————————————————————————————————————————+
1 row in set (0.00 sec)

こちらは変更ありません。
mysql> show variables like “chara%”;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)

mysql> describe items;
+———+———+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———+———+——+—–+———+—————-+
| item_id | int(11) | NO | PRI | NULL | auto_increment |
| name | text | YES | | NULL | |
| price | int(11) | YES | | NULL | |
+———+———+——+—–+———+—————-+
3 rows in set (0.09 sec)

mysql> select * from items;
Empty set (0.07 sec)

mysql> insert into items (name) values (‘\U+1F363’);
Query OK, 1 row affected (0.06 sec)

mysql> select * from items;
+———+———+——-+
| item_id | name | price |
+———+———+——-+
| 1 | U+1F363 | NULL |
+———+———+——-+
1 row in set (0.00 sec)

あれ、なんか違くねー???

MySQLで文字コードを確認

メェー 今日は異常に疲れたぞ。。。無駄に気を張った。。明日が山場。終われば、今年もホボ終わりでござる。

ということで、MySQLで文字コードを確認したい。vagrantからmysqlにログインします。

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 5.6.41 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

show variables like ‘%char%’と打つ
mysql> show variables like ‘%char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.52 sec)

character_set_client:クライアントがサーバにクエリを送信
character_set_connection:クライアントが送ったクエリをサーバが解析する際に使用
character_set_database:サーバのデフォルト
character_set_server:サービス起動時のデフォルト
character_set_system:ファイル名のcharset
character_sets_dir: charsetsのディレクトリ

う、限界だ。。

システム開発工程における注意点

システム開発における注意点!?
チームで開発するなら、気を付けておきたい箇所は一杯ありますよね。

– 要件定義
 – 仕様
  — 関係者で合意が取れているか
 – システム要件
  — 本当に必要な機能か
  — 運用負担とならないか
  — 運用が回るか

- 基本設計
 – 文字コードの配慮(UTF-8,ShiftJIS)
— データ長
 – AWSメンテナンスやサービスダウンを前提とした可用性/自動リトライなど
 – 運用フローを作成し、合意をとる

– リリース
 – お知らせ告知
— 外部システムへの配慮
 – 切り戻し
— 連絡体制

Larave5.7フォームリクエストのメッセージ設定

フォームリクエストとはなにか?公式のフォームリクエスト作成を見てみましょう。
https://readouble.com/laravel/5.7/ja/validation.html
フォームリクエストはバリデーションロジックを含んだカスタムリクエストクラス。フォームリクエストクラスを作成するには、make:request Artisan CLIコマンドを使用する。
生成されたクラスは、app/Http/Request ディレクトリへ設置される。

ふーん

とりあえず、やってみましょう。

1. make:requestでフォームリクエストクラスを作成
CompanyRequestを作ってみたいと思います。

[vagrant@localhost zeus]$ php artisan make:request CompanyRequest
Request created successfully.

app/Http のディレクトリに、Reqeust/CompanyReqeust.phpが生成されているのがわかります。

ファイルの中身を見てみると、authorizeとrulesメソッドが作られています。

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CompanyRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            //
        ];
    }
}

2.生成されたクラス内のrules()の中身を編集
バリデーションを記述します。

public function rules()
    {
        return [
            'company_name' => 'required',
            'agent_name' => 'required',
        ];
    }

3.コントローラーでフォームリクエストを呼び込む
use App\Http\Requests\CompanyRequest; を追加
public function confirm(Request $request) を、public function confirm(CompanyRequest $request)に変更する

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Company;
use App\Agent_mst;
use App\Http\Requests\CompanyRequest;

class CompanyConfirmController extends Controller
{
    public function confirm(CompanyRequest $request){
    	// $validatedData = $request->validate([
     //        'company_name' => 'required',
     //        'agent_name' => 'required',
     //    ]);
    	$confirm = new Company($request->all());

    	return view('companyconfirm', compact('confirm'));
    }
}

フォームリクエスト側でバリデーションができるようになりました。

やったーーーー^^