夜の歌

プログラミング、音楽、本について緩く書いていきます。

『生命科学者たちのむこうみずな日常と華麗なる研究 』 仲野徹

文庫版のおまけとして、『「超二流」研究者の自叙伝』と銘打って仲野先生の話も書かれている。最初の研究室での話、ドイツ留学、本庶佑研究室での研究など詳しく書かれていて面白い。

どうやら、本庶佑研究室での研究は、大変なストレスの中で行われたようだ。生命科学の三大誌に筆頭著者での論文掲載経験がなければ、廊下の真ん中を歩いてはいけない雰囲気。しかも、中途採用で知り合いが一人もいない厳しい状況。いくら、仲野先生が自己肯定感が高いとはいえ、ストレス感じそう。

【PHP】strposのfalseチェックについて

strposで検索対象文字列に検索文字列がない場合、falseが返ってくる。では、falseチェックはどうするか。個人的には、厳密な比較演算子を使うのがベターだと思う。

<? php
$result = strpos('test', 'niku');
if($result === FALSE){
    echo 'FALSEです。';
    exit();
}


他のPHPの関数を使った場合の挙動はどうなるか。 例えば、emptyを使ってstrposの結果が入った変数をチェックした場合。strposは、検索文字列が検索対象文字列の最初にあった場合には0を返すので、emptyのチェック結果はtrueになる。

<? php
// $resultに0は入り、emptyの結果はtrueになる
$result = strpos('test', 't');
if(empty($result)){
    echo 'FALSEです。';
    exit();
}

ちなみに、PHP マニュアルにも似たようなことが書かれている。 PHP: strpos - Manual

『発酵野郎! 世界一のビールを野生酵母』鈴木成宗

発酵野郎!: 世界一のビールを野生酵母でつくる

発酵野郎!: 世界一のビールを野生酵母でつくる

伊勢角屋麦酒のビールを、最初に飲んだのはいつだったか。飲んだのは、確かペールエール。初めて飲んだ当時、ビールが好きじゃなくて、どうかなと思って飲んだ。これが美味しくて、あれからビールが好きになってしまった。ビール最高。

本書を読むまで、鈴木さんはビールが好きで、事業を始めたんだろうなと思っていた。だけど、本当の目的は酵母と戯れることだったらしい。。どいうこと!酵母と遊びたくて事業を始めるって、すごい勇気。怖くなかったのかな。これで上手くいくの?って思ったけど、やっぱり上手くはいってなかった。90年代末、ビール事業の影響で鈴木さんは無給だったらしい。

結構衝撃だったのは、鈴木さんはある時期まで、お客様が何を求めているかを考えていなかったらしい。マジか。本書に明確な時期は書かれていなかったけど、考え始めたのが2003年の世界大会で金賞を取った後。ということは、1997年にクラフトビール市場に参入後、結構な期間ということになる。そこから、この成功。凄いな。

本書を読んだ後、クラフトビールが飲みたくなった。スマホで良さそうなお店を見つけて、出発。なんと伺ったお店に、伊勢角屋麦酒のヒメホワイトがあったので早速注文。本書にも書かれてるけど、ヒメホワイトは伊勢の酵母で作られたビール。美味しかったなぁ。また、飲もう。

【Laravel】updateメソッドで保存する時にハマった

データの更新をする際に、updateメソッドを使って実行。そして、ハマった。そのコードは、下記。

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Model\Book;

class BookController extends Controller
{
    public function index(Request $request)
    {
        $book = Book::where('page', 100)->get(['page'])->first();
        $book->page = 5;
        $book->update();
    }
}

ログに実行したsqlを出力しているので、確認してみる。

[2019-08-31 15:52:22] local.INFO: Query Time:11.06s] select `page` from `book` where `page` = ?  
[2019-08-31 15:52:22] local.INFO: Query Time:1.53s] update `book` set `page` = ?, `updated_at` = ? where `id` is null

2行目でupdate文のsql。コード上では、「wehre is null」は使っていない。恐らく、updateメソッド内で実装しているのかな。

それで、下記のようにgetの指定カラムにidを追加したら想定通りの動作になった。

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Model\Book;

class BookController extends Controller
{
    public function index(Request $request)
    {
        $book = Book::where('page', 100)->get(['id', 'page'])->first();
        $book->page = 5;
        $book->update();
    }
}

ログも確認

[2019-08-31 16:07:58] local.INFO: Query Time:17.51s] select `page`, `id` from `book` where `page` = ?  
[2019-08-31 16:07:58] local.INFO: Query Time:4.01s] update `book` set `page` = ?, `updated_at` = ? where `id` = ?

where句でidを使って絞り込みをかけるようになっていた。なるほど、面白い。updateメソッドの処理の確認をしてみよう。

Laravelで処理途中でDBの変更をしたい

Laravelで処理途中でDBの変更をしたい。どうすればいいのか。答えは、config/database.phpのconnections.mysql.databaseの値を変更する。下記、コードで変更できる。

\Config::set('database.connections.mysql.database', 'test_db');


ただ、一度DBに対してアクセス後に上記コードを実行しても、connections.mysql.databaseの値自体を変更できるが、アクセス先のDBは変更はできない。うーむ、何故。

恐らく、1度DBにアクセスした後にアクセス先のDBをキャッシュしているのかな。調査する。

【Laravel】任意のルートパラメーターの挙動について

任意のルートパラメーターが設定されている時、されていない時の挙動を確認した。サンプルコードを含め確認した内容を記す。

まずは、wbe.php

// web.php
<?php
Route::get('okinawa/{urasoe?}', 'OkinawaController@index');


続いて、サンプルで作ったOkinawaController。ルーティングに設定した任意のルートパラメーターurasoeを取得する処理が実装されている。

// OkinawaController.php
<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class OkinawaController extends Controller
{
    public function index(Request $request)
    {
        var_dump($request->urasoe);
        exit();
    }
}


任意のルートパラメーターが設定されているパターン
・実行URL

http://localhost/okinawa/urasoe

・結果

string(6) "urasoe"


任意のルートパラメーターが設定されていないパターン
・実行URL

http://localhost/okinawa

・結果

NULL


任意のルートパラメーターの値は$requestオブジェクトのプロパティから取得できる。任意のルートパラメーターが設定されている場合、string型の値が取得できた。また、ルートパラメーターが設定されていない場合にはNULLを取得。

ふと思ったけど、string型の数値をrequestオブジェクトのプロパティから取得した場合には、どのような型になるのか。ちょっと、気になる。

※参考 readouble.com

本屋に行って本を探したが。

今日、『仲野教授の そろそろ大阪の話をしよう』を買いに本屋さんへ。ただ、探しても見つからないので店員さんを探す。しかし、店員さんも見つからない。やっと、見つけて探してもらったけど置いてないとのこと。残念。。

ちょっと思ったけど、スマホで店内の本を探せるサービスがあったらいいな。お客さんにアプリをインストールさせるのは難しいからWebで。そのWebサービスQRコードが表示されている紙を店内に貼れば、お客さんは使ってくれるんじゃないかな。どうだろう。

いや、どうかな。

Laradockのphp.iniの修正について

Laradockのphp.iniを変更する必要があったので調査。php-fpm配下のphp7.2.iniを修正し、下記コマンドを実行したら修正内容が反映された。

// サービスの停止
docker-compose stop

// サービスをバックグランドで起動
docker-compose up -d nginx mysql phpmyadmin redis workspace


恐らくコンテナ起動時に、php.iniの再読み込みが行われているはず。その処理については、Dockerfileに書かれているのか。調べるか。

『1本5000円のレンコンがバカ売れする理由』 野口 憲一

1本5000円のレンコンがバカ売れする理由 (新潮新書)

1本5000円のレンコンがバカ売れする理由 (新潮新書)

honzのレビューを読んで購入。レンコン農家に生まれた著者が、レンコンを1本5000円で売ろうと試行錯誤する姿が書かれた一冊。試行錯誤する姿が面白い。父親に凄く反対されるが折れないし、なかなかレンコンが売れない中イベントに参加したり販路を探す。そんな中、総合食品商社の方から話を持ちかけられ、徐々に光が見えてくる。

意外だったのが、レンコン購入業者の目線で商品を作ることを否定していること。例えば、業者からレンコンを真空パックにできないかとの要望が結構あるらしい。ただ、著者はその申し出を断っている。技術的にレンコンを真空パックにするのは可能らしいが、真空パックにするにしてもコストがかかる。そのコスト分を吸収する利益が出るかといったら、疑問があるらしい。

どんな仕事でも、買う側からの要望は結構あると思う。その中で、やるやらないの判断を下すのは結構難しい。目の前の売り上げって大事だしね。

とりあえず、レンコン買いたいなぁ。

honz.jp