ド・モルガンの法則で条件文を分かりやすくしてみる

投稿日: 2017/03/30

コードレビューをしているときに以下のようなコードが現れて、

for ($i = 0; ! ($i > $limit || $i >= count($list)); $i++) {
	// $list[$i]; を使って何かする処理
}

このfor文の条件を理解するのに時間が少しかかりました。

要は、

  • 最大で$limit回
  • 最小で$listの要素数分

ループ中の処理が行われる

というものになるのですが、ぱっと見て分かりますか?自分は分からなさ過ぎて、自分で別途デバッグしてしまいましたorz

それにしても、なんでこんなに分かりづらいのかなぁ、僕がアホなだけなのかなぁと、小一時間考えてみたところ、

  • 条件が(複数)あってさらに否定がかまされている
    • 結局どっちやねんとなってしまう

という部分が分かりづらい要因なんじゃないかと自分は思ったわけです。
(自分がアホなだけという部分も否定しませんが)

では、上記のコードが以下だったらどうでしょうか。
続きを読んでみようかな…

インフルになった

投稿日: 2017/03/10

というわけでインフルになりました。
正確に事の流れを書くと、

  • 娘(4歳) インフル発症
  • 2日後、妻インフル発症
  • さらに2日後、自分インフル発症

というまさに負のスパイラルに陥ってしまいました。
(唯一、息子(6歳)だけはインフルに罹ることなく過ごしています)

自分も妻もインフルに罹ったことが無く(小さかった時はあったのかもしれないけれど記憶に無い)、家族4人中3人がインフルに罹るという状態もはじめての体験でかなりてんやわんやな日々を過ごしました。
中でも娘が熱性痙攣を起こして救急車を呼んだときは、大の大人二人が揃いに揃って慌てふためくという失態をおかしてしまい、少なくとも自分は冷静に対処すべきだったなと深く反省をしたのであります。
(よくある熱性痙攣で今回は事なきを得た)

冷静に今ふりかえると、お医者さんに言われたこととか、あのてんやわんやな日々の中でも忘れちゃいけないなーと思うことが何個かあったのでここに残しておこうと思います。
続きを読んでみようかな…

【Lumen】LINEの Messaging API を使って再度Botを作ったお話

投稿日: 2017/02/24

すっごい前にこんなメールがLINEからきました。

いつもLINEをご利用いただきありがとうございます。  
このメールは、LINE BOT API Trial Accountをご利用いただいている皆様へお送りしています。

〜 中略 〜  

つきましては、旧API トライアルアカウント「BOT API Trial Account」をお使いの皆さまには、
新しいトライアルアカウント「Developer Trial」のご利用をお願い致します。  
「Developer Trial」アカウントはLINE Business Centerからお申込みいただけます。  
LINE Business Center : https://business.line.me/  

〜 中略 〜  

なお、ただ今ご提供させていただいている「BOT API Trial Account」につきましては、
11月16日にアカウントの完全削除を予定しております。  

〜 中略 〜

ムムム、こ、これは僕のcoutry-botが削除されてしまう。
あの、僕と妻の2人しか友達のいないcoutry-botがぁっ!! … 今すぐ救済せねばぁぁ!!

と、思ったのは去年の話で既にcoutry-botは動かなくなっていました。
それでもいいかなぁなんて思っていたのですが、ちょっと腰を上げれば動かせる事が出来るのに、それをやらないのもアレじゃないですか。

というわけで、せっかく作ったbotなので新しく作り直してみることにしました。
※ ちなみに前作ったのは これ です

そして、前回と同じじゃつまらないということで以下を使って書きました。

続きを読んでみようかな…

Lumenでログを出力する(その2)

投稿日: 2017/02/23

現在、個人的にちょっとしたAPIをLumenで実装しています。

Lumenオシャンティ!! って感じで意気揚々とやっていたのですが、ログ周りに関して 前回 のやり方だと困った場面に遭遇しました。

そこで今回は、何に困ったのか、最終的にどうしたのかを綴ってみたいと思います。

※ Lumenのバージョンは前回と一緒です

何をしたかったのか

まず、前回何をしたかったのかというと

すべてのログを好きなHandler(Monolog)でコントロールしたかった

というものがありました。
※ 最初、ログの出し方すらつまずきましたが

そこで以下の方法を前回はとったわけです。
(前回は例として、NativeMailerHandler も使いましたが今回は省略します)

app/bootstrap.php を修正

<?php

require_once __DIR__.'/../vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Formatter\LineFormatter;

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    //
}

// ~ 略 ~

$app = new Laravel\Lumen\Application(
    realpath(__DIR__.'/../')
);

// $app->withFacades();

// $app->withEloquent();

/*
|--------------------------------------------------------------------------
| Register Container Bindings
|--------------------------------------------------------------------------
|
| Now we will register a few bindings in the service container. We will
| register the exception handler and the console kernel. You may add
| your own bindings here if you like or you can make another file.
|
*/

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

// これ
$app->singleton('log', function() {
    $handlers[] = (
        new RotatingFileHandler(
            storage_path("logs/app.log") // ログファイル名を変える
        )
    )->setFormatter(new LineFormatter(null, null, true, true));

    // ログのchannel名 を app にする
    return new Logger('app', $handlers);
});

// ~ 略 ~

return $app;

で、使う側はこんな感じにします。

$logger = app('log');
$logger->info('Hello Lumen!!');

こうすることによって任意の場所、好きなHandlerでログ(storage/logs/app-{Y-m-d}.log)を出すことが出来ました。

困ったこと

で、何に困ったかというと例外が発生した際です。
例外が発生した際にログを確認すると、見事にデフォルトの storage/logs/lumen.log が出力されているではあーりませんか。
storage/logs/app-{Y-m-d}.log にも書き出されていない

え、うそでしょ?マジで?誰がこのログ吐いているの?と、普通のエンジニアならそうなるわけで、えぇ、ソースを追ってみました。
※ 最初に追っとけよ
続きを読んでみようかな…

Lumenでログを出力する

投稿日: 2017/02/14

LumenでちょっとAPIを書いてみようと思い、とりあえずログにでも吐き出すかなぁとLog::info('Hello Lumen!!');と書いてみたら見事に怒られました。
まぁいちおう対応をしたわけですが、その際にLumenでログを吐き出すまでに行ったことをメモとして残しておきます。
(ちょっと素人の匂いが漂う内容かもしれません。。)

bootstrap/app.php$app->withFacades();を有効にするパターンと、コメントアウトのままログを吐き出すパターンを書いてみます。※Monologを直接使うパターンも

なお、Lumenのバージョンは

Lumen (5.3.2) (Laravel Components 5.3.*)

です。
続きを読んでみようかな…

スポンサーリンク