手から出たゴミ

食って、寝て、糞をする合間で作り出されたゴミ

$table->timestamps()について

$table->increments('id');
$table->string('name');
$table->date('created_at');
$table->timestamps();

Larabelで

php artisan migrateをすると

created_atのカラムが既にあるとエラーが‥

$table->timestamps()

は、NULL値可能なcreated_atとupdated_atカラム追加なのでエラーが出た

参考記事

データベース:マイグレーション 5.5 Laravel

Laravel bootstrap CDNの設定まで

フォルダー構造

LunchBox/resources/views
tree
.
├── layouts
│   └── share.blade.php
├── lunchbox
│   └── index.blade.php
└── welcome.blade.php

コード

share.blade.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
        <title>
            @yield('title')
        </title>
    </head>
    <body>
        @yield('body')
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
    </body>
</html>
index.blade.php


@extends('layouts.share')

@section('title', 'LunchBox')

@section('body')
<ul class="nav justify-content-center">
  <li class="nav-item">
    <a class="nav-link active" href="#">Active</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled" href="#">Disabled</a>
  </li>
</ul>
@endsection

@extendsでlayout/share.blade.phpを読み込み

routes/web.php


Route::get('/', function () {
    return view('lunchbox/index');
});

参考文献

bootstrap公式 (laravel公式)https://readouble.com/laravel/5.5/ja/blade.html

php artisan migrateで詰まった件

Laravelを勉強時、mysqlを使ったら詰まったのでメモ

php artisan migrate
>>>
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = homestead and table_name = migrations)  

SQLSTATE[HY000] [2002] Connection refused

といるエラーが出た

.env

DB_HOST=localhost:3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=pass

の値を変更すれば良いらしい

しかし、初心者過ぎてどのような値を設定すればよいか、不明だった

解決方法

mysql -u root

mysql> create database crud(DB_DATABASEの名前)

mysql> grant all on crud.* to crud@localhost identified by 'DB_PASSWORDで設定する任意のパスワード';

crud@localhostの@より前のcrudがDB_USERNAME

結果

php artisan migrate
>>>
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table
Migrating: 2017_12_04_165347_create_crud_table
Migrated:  2017_12_04_165347_create_crud_table

錯覚で遊んでみた

錯覚とは

感覚器に異常がないのにもかかわらず、実際とは異なる知覚を得てしまう現象

人間の脳は結構適当なので、すべての情報を取得せずある程度予測して判断するため 起こるみたいです。

一定時間ごとに動く四角を縦、横で隠すと 動いている方向が変わって見えるという錯覚を実装した

<!DOCTYPE html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<style>
canvas {
    background-color: transparent;
    position: absolute;
}
#illusion{
    z-index: 1;
}
#show {
    z-index: 0;
}
</style>
<script type="text/javascript">
function draw(){
    var canvas = document.getElementById('illusion');
    var width = canvas.width;
    var height = canvas.height;
    var x_up = 0
    var x_down = 375;
    var tmp;
    if (canvas.getContext){
        var ctx = canvas.getContext('2d');
        ctx.fillStyle = "blue";
        ctx.fillRect(x_up, 0, 25, 25);
        ctx.fillRect(x_down, 375, 25, 25);
    }
    
    function redraw(){
        ctx.clearRect(0, 0, width, height);
        tmp = x_up;
        x_up = x_down;
        x_down = tmp;
        ctx.fillRect(x_up, 0, 25, 25);
        ctx.fillRect(x_down, 375, 25, 25);
    }
    setInterval(redraw, 1000);
}
function show(type){
    var canvas_show = document.getElementById('show');
    var ctx_show = canvas_show.getContext('2d');
    ctx_show.fillStyle = "blue";
    var width_show = canvas_show.width;
    var height_show = canvas_show.height;
    if(type == "yoko"){
        ctx_show.clearRect(0,0,width_show,height_show);
        ctx_show.fillRect(0, 0, 400,200);
    }
    else if(type == "tate"){
        ctx_show.clearRect(0,0,width_show,height_show);
        ctx_show.fillRect(0, 0, 200,400);
    }
    else if(type == "none"){
        ctx_show.clearRect(0,0,width_show,height_show);
    }
}
</script>

<body onload="draw();">
    <div>
        <h2>操作</h2>
        <p onClick="show('yoko');">横</p>
        <p onClick="show('tate');">縦</p>
        <p onClick="show('none');">非表示</p>
    </div>
    <div id="viewpoint" style="position:relative;">
        <canvas id="illusion" width="400" height="400"></canvas>
        <canvas id="show" width="400" height="400"></canvas>
    </div>
</body>

感想

同じcanvasで実装しようとするとclearRec()でつまずいた

positionを使い、重なりを作ることで隠す処理を実装した

実装できたが、全く錯覚が起こらない。 おそらく、速度や横、縦幅を調整しないといけないのかな

人間の脳って面白いですね

お酒と一緒に学ぶオブジェクト指向vol2

もっと良いお酒を

前回は、クラスAlcoholでお酒を生成しました

今回は、引数とコンストラクタの使いもっと楽しいお酒を飲めるようにしていきます

引数

メソッドには、引数を指定できます

class Alcohol{
    public function water($amount){
        $this->degree /= $amount;
    }
}

コンストラクタ

newでオブジェクトを生成した時に、自動的に実行されるメソッド

class Alcohol{
    public function __construct(){
        echo '乾杯';
    }
}

$Shochu = new Alcohol();
$beer = new Alcohol();

引数とコンストラクタの動きのチェック

<?php
// クラスの宣言
class Alcohol{
    public $name;
    public $degree;
    public function water($amount){
        $this->degree /= $amount;
    }
    public function __construct(){
        echo '乾杯';
    }
}

// インスタンスの作成
$Shochu = new Alcohol();

$Shochu->name = '赤霧島 ';
$Shochu->degree = 25;

echo $Shochu->degree;
$amount = 5;
$Shochu->water($amount);
echo '<br>' . $Shochu->degree;
?>

お酒と一緒に学ぶオブジェクト指向vol1

はじめに

PHPで開発したことは、あるんですが ライブラリ、保守性とか考えずにクソコードを書いていたので 社会的な評価(就活)に対して危機感がありました

最近、良サイトを見つけたので 色々勉強中です

今回は、オブジェクト指向を一通り学んだので忘れないうちに まとめておきます。

そもそもオブジェクト指向とは

オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方

簡単にいうと、もの(オブジェクト)の関係を意識した考え方

クラス

クラスとは、設計図である。

さあ、お酒を作っていきましょう

// クラスの宣言
class Alcohol{
}

インスタンス

クラスを使って実際に生成されたもの

焼酎というお酒をAlcoholというクラスから生成しました

class Alcohol{
}
// インスタンスの生成
$Shochu = new Alcohol();

プロパティ

クラス内の定数、変数のこと

Alcoholクラスに名前とアルコール度数というプロパティを定義しました

class Alcohol{
    public $name;  // プロパティ
    public $degree; // プロパティ
}

メソッド

クラス内の関数のこと

class Alcohol{
    public $degree;
    public function water(){
        $this->degree /= 2;
    }
}

$thisは同クラス内のメソッドやプロパティにアクセスする場合に利用される

ここで、$this->degreeはAlcoholのプロパティ$degreeのことである

プロパティ、メソッドへのアクセス

静的でないプロパティ、メソッドにアクセスするには

-> (オブジェクト演算子)

を使う

class Alcohol{
    public $name;
    public $degree;

    public function water(){
        $this->degree /= 2;
    }
}

$Shochu = new Alcohol();

$Shochu->name = '赤霧島 ';
$Shochu->degree = 25;
$Shochu->water();

プロパティ、メソッドの動きのチェック

<?php
// クラスの宣言
class Alcohol{
    public $name;
    public $degree;

    public function water(){
        $this->degree /= 2;
    }
}

// インスタンスの作成
$Shochu = new Alcohol();

echo $Shochu->name; // 表示されない
// $beer->nameのチェック
var_dump($Shochu->name);

// インスタンスbeerの中身を定義
$Shochu->name = '赤霧島 ';
$Shochu->degree = 25;

echo $Shochu->name;
var_dump($Shochu->name);

echo $Shochu->degree;
$Shochu->water();
echo '<br>' . $Shochu->degree;
?>

感想

最近、酒が飲めてないのでコードの中だけでも酔った気分になりたい

vol2はこちら

Python基礎の基礎

目次

  • 環境設定(Anaconda)

  • pythonの基礎

    • 文字列と数値
    • 変数
    • 条件分岐
    • ループ
  • 課題

  • 解答

Anacondaのインストール

f:id:techimaharu:20171016153527p:plainf:id:techimaharu:20171016153533p:plainf:id:techimaharu:20171016153536p:plainf:id:techimaharu:20171016153550p:plainf:id:techimaharu:20171016153553p:plainf:id:techimaharu:20171016153557p:plain

  • 動作確認

Windowsは、コマンドプロンプトを起動後

python --version

Python 3.6.2 :: Anaconda,Inc (結果)
python

>>> print("Hello")
Hello (Helloが出れば動作確認終わり)
>>> exit()

f:id:techimaharu:20171016153601p:plain
print("Hello")の実行結果

pythonの基礎

文字列と数値

  • print()で文字列や数字を出力できます

文字列の出力

print("Hello world")

数値の出力

print(9)

print(9 + 2)

print(9 - 2)

print(9 * 2)

print(9 / 2)

print(9 % 2)

* は掛け算 / は割り算 % はmod計算を行う
練習問題

5 + 2

5 x 2

5 % 2

を出力するプログラムを書け

変数

  • 変数とは、扱うデータを一時的に保存しておけるようにデータに対して名前をつけたもの
one = 1 # oneという変数に1を格納
print(one)
練習問題

my_nameという変数に自分の名前を格納し、出力しなさい

条件分岐

  • if

条件分岐文

my_os = "windows"

if my_os == "windows" : 
    print("www")

条件文を記述し、" : "をつけて改行

"=="について

演算子 記述例 意味
== a == b aとbは等しい
!= a != b aとbは等しくない
> a > b aはbより大きい
>= a >= b aはb以上
< a < b aはb未満
<= a <= b aはb以下
  • elif

if以外の条件分岐を増やす

my_os = "mac"

if my_os == "windows" :
    print("www")

elif my_os == "mac" :
    print("That's good")
  • else

ifとelif以外全て

my_os = "hehehe"

if my_os == "windows" :
    print("www")

elif my_os == "mac" :
    print("That's good")

else :
    print("Unix?")
練習問題

変数 xが10の時には"a"をそれ以外の時は"b"を出力せよ

ループ

  • for

print(0) ~ print(9)を出力せよ

for i in range(10) :
    print(i)

課題

  • 1から100までの数を出力するプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と出力せよ

ヒント forの中でiをif文で制御

発展課題

  • 初心者と経験者の数を入力。各参加者の名前を初心者と経験者で別リストの中に格納。その後、自分の名前を入力して初心者か経験者のどちらであるかを出力せよ

変数名は、"beginner"、"beginners"、"experienced"、"experienceds"、"my_name"とする

ヒント1

  • 変数"beginner"、"experienced"にキーボードから数値を入力するプログラムを書け

検索キーワード python、入力、変数

ヒント2

  • 課題1の変数を用いて、「初心者は2人で、経験者は3人です」と出力されるプログラム一行で書け(printを一回のみ使用)

検索キーワード 変数、出力

ヒント3

  • 空リストを2つ確保し、リスト内に初心者と経験者を格納せよ

検索キーワード リスト、追加

解答例

解答例1

beginner = int(input("初心者の人数を入力してください"))
experienced = int(input("経験者の人数を入力してください"))

beginners = []
experienceds = []
for i in range(beginner):
    beginners.append(str(input("初心者の名前:")))

for i in range(experienced):
    experienceds.append(str(input("経験者の名前:")))

my_name = input("あなたの名前はなんですか?")


for i in range(max(beginner,experienced)) :
    if i < len(beginners):
        if beginners[i] == my_name :
            print(my_name + "は初心者です")
            break
    if i < len(experienceds):
        if experienceds[i] == my_name :
            print(my_name + "は経験者です")
            break
    if i == (max(beginner,experienced) - 1 ):
        print("そんな人はいないです")

解答例 2

print("beginner nummber '")
beginner = raw_input()
print("experienced nummber '")
experienced = raw_input()

print("beginner: {0}, experienced: {1}".format(beginner, experienced))

beginners = []
experienceds = []

for i in range(int(beginner)):
    print("beginners name")
    b = raw_input()
    beginners.append(b)
for i in range(int(experienced)):
    print("experienceds name")
    e = raw_input()
    experienceds.append(e)

print("Are you name?")
my_name = raw_input()
if my_name in beginners:
    print("beginner")
elif my_name in experienceds:
    print("experienced")

解答例 3

beginners = input("初心者の人数を入力してください:")
experienceds = input("経験者の人数を入力してください:")
print("初心者は" + str(beginners) + "人、経験者は" + str(experienceds) + "人です。")

b = []
e = []

for i in range(int(beginners)) :
    beginner = input("初心者の名前を入力してください:")
    b.append([beginner])
for j in range(int(experienceds)) :
    experienced = input("経験者の名前を入力してください:")
    e.append([experienced])

my_name = input("あなたの名前は何ですか?")

for p in range(int(beginners)):
    if my_name in b[p] :
        print("初心者です。")
        break
    else : 
        for q in range(int(experienceds)):
            if my_name in e[q] :
                print("経験者です。")
                break
            else :
                print("見当たりません。")