がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

外掛けフィルターに物理濾過ギミック

うちの水槽が基本的に「生物ろ過特化型」に寄せて作ってあるので、もうちょっと物理ろ過を強化したいなぁ、と思っておりました。

 

水槽1(30cmキューブ):外掛けフィルター+底面フィルター(吸い込み式)

水槽2(30cmキューブ):外部フィルター+底面フィルター(吹き上げ式) and 外掛けフィルター(バイオビーズ突っ込んで生態濾過特化)

水槽3(20cmキューブ):外掛けフィルター(バイオビーズ突っ込んで生態濾過特化)

 

ふと「出水の所で物理ろ過したらどうなるんだべ?」と思って実験したら思ったよりも汚れがキャッチできたので、ちょいと面白いかなぁ、と思いまして。

 

使っているのは「ダイソーのろ過ウール」。
がっつり使い捨てでつかっております。

 

1.

f:id:gallu:20200929211838j:plain

外掛けフィルターの出水口でございます。水の通り道の黒いのは「試行錯誤した結果不要になったもの」なので気にしないw

 

2.

f:id:gallu:20200929211824j:plain

元々付属で付いていたストレーナー用スポンジを、ハサミで縦に切って「水受けのところに挟まる」ようにします。そんなにがっつり固定しなくても、割と取れません。

 

3.

f:id:gallu:20200929213302j:plain

そこにろ過ウールをうっすらと横一文字に置きます。
指で適当に押して、ちゃんと水に浸るくらいがよいです。

 

4.

f:id:gallu:20200929213337j:plain

小さくちぎった塊を2つ用意して、両脇にはります。
こうすると「水が割と真ん中に集中する」ので、汚れのキャッチ率がよいんじゃなかろうか? と思っています。

 

5.

f:id:gallu:20200929211748j:plain

一日経過後。これくらい汚れるので、つまりそれくらい汚れをキャッチしています。
再利用とか多分難しいと思うので「とっとと捨てる」でよいかと思います。
それでも100円で買ったろ過ウール、多分、一月くらいもちますしねぇ。

 

なんとなくすでにやられている技法のような気もしたのですが、とりあえず自力でたどり着けたので、面白かったのでナレッジの共有を。

オートミール茶漬け

相方さんじゃなくて当人がそろそろ糖尿病仲間入りっぽいので色々と試行錯誤しているのですが。
オートミール茶漬けが思いのほかよかったので、レシピ込みでmemo。

オートミール粥、ってのがあるのですが、若干、風味が「人による」感じ(おいちゃん的にはいけるけど)。
一方で、そこに「お茶漬けの素」をいれると、途端に「結構普通に万人受けするんぢゃね?」くらいの感じになるので、かなりお勧めでございます。
おかずに「鶏ハム」とか使うと「蛋白質たっぷり、糖質低め、繊維質多め」で、大変によろしかと。

オートミール100gあたりの炭水化物量は、大体69g前後(食物繊維込み。単糖当量だと63gくらい)と、決して低い数値ではない、のですが。
オートミール粥とかにすると、一食で使うのが30~40gくらいなので、炭水化物量は20g弱~25g程度。
トータルとして「低めの炭水化物量」にする事ができるのが便利でございます。

30gで「ちょっと軽めだけど普通くらい」から、40gだと「結構がっつり」くらいの量になるので、適宜加減してみてくださいませ。
おいちゃんは「永谷園のお茶づけ海苔」で食ってます((「味わい茶漬け 4種」でも食った)。美味でございました。
他の商品はわからんですが、多分、普通にいけるんじゃないかなぁ、と。

個人的には「もみ海苔追加、ワサビ追加」が、大体、デフォ。この辺はお好みで。

レシピは

もっちり
オートミール: 30g / 水:180ml / レンチン時間: 1分40秒
オートミール: 35g / 水:210ml / レンチン時間: 2分
オートミール: 40g / 水:240ml / レンチン時間: 2分半

しゃばしゃば
オートミール: 30g / 水:200ml / レンチン時間: 2分
オートミール: 35g / 水:235ml / レンチン時間: 2分20秒
オートミール: 40g / 水:265ml / レンチン時間: 2分40秒

こんな分量で、あとは「レンチンして終わり」。
お手軽なんで、是非。

privateやprotectdのメソッドのテストをどうやる? って話の備忘録

PHPでprivateなメソッドを外から叩く時ってどうやるんだっけ?」で、リフレクションって単語をしょっちゅう忘れるから「それの備忘録用」って見方をしないように*1
さっきもまぁ「リダイレクト……リファラー……り……り……」で、そこそこ悩んでたのは秘密だ。

おいといて。

protectedだと割と本当に色々あって、一番雑なのが
・テスト用に継承クラス作る
ってやりかた。

<?php
declare(strict_types=1);

// テスト対象のクラス
class TestTarget {
    protected function t()
    {
        return mt_rand(1, 10);
    }
}

// テスト用クラス
class Test extends TestTarget
{
    public function h() {
        return $this->t();
    }
}

//
$obj = new Test();
var_dump( $obj->h() );

PHP7の無名クラス使うなら

<?php
declare(strict_types=1);

// テスト対象のクラス
class TestTarget {
    protected function t()
    {
        return mt_rand(1, 10);
    }
}

// テスト用クラス
$obj = new class extends TestTarget {
    public function h() {
        return $this->t();
    }
};

var_dump( $obj->h() );

これでもOK。

この辺りだと、staticなメソッドでも自由自在。
継承クラス書いてもよいし、無名クラス使うんなら

<?php
declare(strict_types=1);

// テスト対象のクラス
class TestTarget {
    protected static function t()
    {
        return mt_rand(1, 10);
    }
}

// テスト用クラス
$obj = new class extends TestTarget {
    public function h() {
        return static::t();
    }
};

var_dump( $obj->h() );

とも書ける。

……で片付けたいので、正直「メソッドはprivateにすんな面倒だ」って、色々な角度から思う。
んだけど、まぁ「時すでに遅し」なケースもあろうかと思うので、少しだけ考察。

普通のメソッドなら、ReflectionMethodのsetAccessible()が手っ取り早いっつか綺麗だとは思う。

<?php
declare(strict_types=1);

// テスト対象のクラス
class TestTarget {
    private function t()
    {
        return mt_rand(1, 10);
    }
}

//
$m = new ReflectionMethod('TestTarget', 't');
$m->setAccessible(true);

var_dump( $m->invoke(new TestTarget) );

なお実はstaticも普通にいける。

<?php
declare(strict_types=1);

// テスト対象のクラス
class TestTarget {
    private static function t()
    {
        return mt_rand(1, 10);
    }
}

//
$m = new ReflectionMethod('TestTarget', 't');
$m->setAccessible(true);

var_dump( $m->invoke(new TestTarget) );

プロパティをダイレクトにやりとりする事は基本やらないので、メソッドベースだとこの辺があれば「とりあえず」かなぁ、的な。

*1:事実だが

「文字コードを変換しつつCSVファイルを読み込む」時の書き方

なんか、毎回
・「書ける」のは覚えてる
・書式を忘れる
のループに陥ってるので、備忘録(苦笑

// CSVの読み込み
$file_name = ファイル名;
$file_name = 'php://filter/read=convert.iconv.SJIS-win%2FUTF-8/resource=' . $file_name;
$file_obj = new SplFileObject($file_name);
$file_obj->setFlags(SplFileObject::DROP_NEW_LINE); // 最後の改行は消す
//
while(false === $file_obj->eof()) {
    $row = $file_obj->fgetcsv();
    // 以下、処理
}

大雑把に、こんな書き方をすると
SJISCSVUTF-8に変換しながら読み込み
が出来るので、CSV処理の時には重宝するんじゃないかなぁ、と思われます。

CSVを「作る(書き出す)」時は
・一気にCSV文字列を作る
・mb_convert_encoding()
なのでまぁ、思案するほどでもないかなぁ、と。

Slim4のRequestインスタンスの作られ方

ほぼメモ。

Slim\Factory\ServerRequestCreatorFactory::create();
	Slim\Factory\Psr17\ServerRequestCreator ->createServerRequestFromGlobals()
		Slim\Psr7\Factory\ServerRequestFactory ->createFromGlobals
			$request = new Request($method, $uri, $headers, $cookies, $_SERVER, $body, $uploadedFiles);

大体、こんな流れでRequestが作られるっぽい。

………せめて new Request のクラス名が変数かなんかで外に出ててくれれば orz
ちょっと時間がないから、追々、なんか考えていきませう(getParamメソッドが復活してほしい orz)

PHP7.4系のコンパイル

いやまぁ

sh ./configure -h

でチェックしろ、って話しではあるのですが。

PHP7.3系とPHP7.4系で、configure のオプションがちょいと変わっております。……ちょろっとべっくらこいたよおいちゃん。
おいちゃん、PHPは自力コンパイルする事が多くて、もうちょっと正確には
・周辺のライブラリは、差し障りがないかぎり yum*1で入れる:勿論、 -devel でね(はぁと)
PHP自体は、php.netのダウンロードのページからwgetしてきてコンパイル
って方法をとる事が多いです。

んで。まぁ

 --enable-pcntl \
 --enable-sysvsem \
 --enable-sysvshm \
 --enable-sysvmsg \

とかいう「普段書くコードの趣味丸わかり」なオプションはともかくとして。ちょいと引っかかった2つがあって、微妙に手間取ったので、備忘録兼ねて。

いち。
PHP7.4を入れる時に、どうも「oniguruma」「sqlite」が必須のようでございまっする。
なので、とりあえず

sudo yum install oniguruma-devel sqlite-devel 

で、コンパイル前にinstallしておきましょう。 -y オプションは、なんとなし、割と使わない事が多いです。いやまぁどうせYesと答えはするのですが、えぇ。

に。
ここがハマった。ちと案件でGDを使ってるのがあったのですが、PHP7.3までの

 --with-gd \
 --with-jpeg-dir=/usr/lib \
 --with-zlib-dir=/usr/lib \

が、通らない orz

調べたところ、上述は

 --enable-gd \
 --with-jpeg \
 --with-zlib \

に変わっている模様。
あと、地味にハマったのが
・一端「 --enable-gd」だけでコンパイルしたらjpegが有効になってない
・ので「--with-jpeg」を加えたらライブラリが足らん

sudo yum install libjpeg-devel

・で、「--with-jpeg」付けて再度コンパイルしたんだけど有効にならん orz

答えは簡単で「まず先に make clean してから」。
おそらく「一端gdのエクステンション自体はコンパイルされちゃった」から、そいつ消さないと有効にならない orz
コンパイル2回分くらいハマりました orz

なので、configureするまえに「make clean」するとよかとかと思われます。

なんか、英語でも「jpegが有効にならねぇ」的なのがちらほらと散見されたので、ナレッジ残しておくとよいかなぁ、とか思いつつ、めも。

*1:もうdnfのほうがよいんだろうなぁ……

アクアリウム覚え書き

貰った水草

ミクロソリウム プテロプス
エキノドルス オパクス(子株)
オレンジミリフィラム

ミクロソリウム プテロプスは溶岩石に巻き付いて、活着を試みる。
エキノドルス オパクスは前景に植える。「肥料結構喰う」らしいので、固形含めて肥料多めに。
オレンジミリフィラムは「重しで沈めてもいいし溶岩砂に植えてもいいし」との事なので、両方を試みてみる。