一時期、内臓の具合が悪くなって手の指に汗疱が出て、痒いのにかきづらく超大変だった。
そこで掻き方考えた。
髪ゴム紐等の長いゴム紐(輪ゴムの場合複数繋げる)を用意し、鬱血しない様に指先端から根元に向かってきつくぐるぐる巻きにする。さらに根元から先端へぐるぐる戻す。その後、指を何度か曲げ伸ばし。最後に先端付近の紐を強引に引っ張りほどく。
これで超スッキリ。虫刺されでも使える。ちなみに私の場合、汗疱は皮膚科で処方されたクラシエの補中益気湯で治った。市販もされてるし。
長ネギ栽培、白い部分を長くしたいが土被せたくはない。畑で猫がウンコしてるし。
遮光シート使ったネギパンツなるものも売られており類似の自作をする人もいるが、結構大げさで面倒そう。なので考えた。
細長い黒ビニール袋を被せりゃよくね?
なんかそういうのあったよな…。で、ちょっと調べたら発見。ポスター用。そういえばあったなこんなの。これなら遮光性も十分そう。
これを下部を弛ませた状態で被せ、上部をネギの葉の分かれ目に引っ掛かる様にホッチキス止め。そうすりゃ成長に合わせ勝手にシートが伸びて白い部分が最大75cmに!??
・・・今度買って実験しよう。
安い雨水タンクを見つけ、買うことにしたので、雨どいからの集水器(こういうの)をペットボトル2個+色々で自作。
要件は、
・雨どい内側面を伝って落ちてくる雨水を残さずゲット
・タンク満水後は下の雨どいへ流す
なので、↓こんな感じか。1.5Lペットボトル上部2個を重ね逆さにする。上段側には水槽ポンプ等についてた余りものパイプをバスボンド等で接着&側面にオーバーフロー穴。下段側にはパイプを通す穴を空けパイプ通し接着。あとはタンクの満水位置に合わせて雨どいをカットしこれを挟むだけ。
あと、永く使いたいならタンクは日影に置くべし。
それにしても、店はなぜタンク扱うのに集水器扱わん…。
#安い集水器見つけた。パイプ径合わせたり加工したり等面倒だから、この値段なら買った方がいい。
うちの庭池の循環システム。池部分はFRP工房福井の1-Bと12を組み合わせたもので、水量約1t。ポンプはRio+ 1400。濾過は落ち葉受けだけで、濾したり吸着させたり等消耗品使う様な処理はしてない。それでも日向にあるのに夏でも完全に透明。
秘密はUVバズーカ。一日2~3時間の点灯でこうなるんだからマジ凄い。
あと特筆すべきはオーバーフロー排水口。下図左の様に何もしないと浮いてるものをじゃんじゃん吸い込む。メッシュ等被せても、葉の数枚ですぐ詰まる。そこで下図右の様に、底部に空気穴開けたペットボトル下半分を逆さにして被せる。ゴミは大抵浮くか沈むかなので、中層から吸い込む様にすれば詰まりは激減する。
あと底には何も敷いてなかったが落ち葉等が積もっていってる。ヘドロ化が心配だったが、ドジョウとカメが随時かき回してるので大丈夫そう。そのまま「土」ってことで。
今の悩みは糸状藻。ミナミヌマエビじゃ効果ないので、日影増、富栄養化抑制が必要?
底部沈殿物と水を畑に移動し水少しずつ入れ替えたり、浮いた落ち葉の除去(網よりトングが便利)かな?
c#.netでのマルチスレッド云々の話。
ボタンのハンドラ内で、
Task task = Task.Delay(4000);
task.ContinueWith((t)=>{ textBox3.Text = "hoge"; }, TaskContinuationOptions.ExecuteSynchronously);
↑これだとスレッド跨いだUI操作で例外発生。(ただしDebugビルド時のみ。Releaseビルド時には出ない!)
Task.Delay()は別スレッドを返し、そのスレッドでContinueWith()するから?
task.ContinueWith((t) => { textBox3.Text = "hoge"; }, TaskScheduler.FromCurrentSynchronizationContext());
↑これなら通る。
強制的にUIスレッドでContinueWith()させてるから?
あるいは、
private async Task aaa()
{
await Task.Delay(4000);
}
private void button3_Click(object sender, EventArgs e)
{
Task task = aaa();
task.ContinueWith((t)=>{ textBox3.Text = "hoge"; }, TaskContinuationOptions.ExecuteSynchronously);
}
↑これも通る。
Task.Delay()が返す別スレッドはawaitで消化され、aaa()もContinueWith()もUIスレッドで実行されるから?
だから
await Task.Delay(4000).ConfigureAwait(false);
↑こうすると通らない。
await以降も別スレッド継続させ、その別スレッドでContinueWith()を実行させてるから?
だから
task.ContinueWith((t) => { textBox3.Text = "hoge"; }, TaskScheduler.FromCurrentSynchronizationContext());
↑こうすれば通る。
強制的にUIスレッドでContinueWith()させてるから?
なので、遡って、Task.Run()でaaa()自体を別スレッドにした場合、
private async Task aaa()
{
await Task.Delay(4000);
}
private void button3_Click(object sender, EventArgs e)
{
Task task = Task.Run(() => aaa());
//Task task = Task.Run(async () => await aaa()); //こっちでもほぼ同じ
task.ContinueWith((t)=>{ textBox3.Text = "hoge"; },
TaskContinuationOptions.ExecuteSynchronously //これは通らず
TaskScheduler.FromCurrentSynchronizationContext() //これは通る
);
}
こんな感じか。
スレッド遷移周りの理解が甘いなー。ヨクワカラン。
新築の注文住宅の、自分で設計したオリジナル全館空調の仕組み。自分で言うのもなんだが、業者も読むべき高レベルの記事。
●特徴
普通の家庭用エアコンを軸に、ほぼ全て汎用の機器・部品で構成。そしてほぼ全て通販で買い、設置のみ工務店に頼んだので、かなり激安。(融通利く工務店で良かった…)
しかも、一般の全館空調システム(エアコン室設置方式、全ダクト方式)と比べて、エアコン室不要、メンテナンス厄介なダクト少な目、換気扇の風量切り替えで各部屋毎の温度調整可能、猫トイレ排気付きとかなり満足できる出来栄え。
●詳細
まず建築確認は普通の第三種換気で通す。ただし、トイレの排気ファンは人感センサーシャッター付き換気扇(FY-08PFR9D)にして、居住後は自然給気口は閉じたまま、トイレファンは使用時のみ回るようにする。
1階は廊下に熱交換換気扇(FY-12VBD2SCL+VB-KB105M)、LDKに普通の壁掛けエアコンを設置。廊下から熱交換排気、猫トイレからバイパス排気しつつ、熱交換給気をエアコン吸気口上に行う。
洗面所と和室については、隣室だし特に和室はたまにしか使わないので、大仰なダクトなんて不要。壁設置の室間換気扇(V-08PFE)で必要なときのみ空気を送る。
2階も概ね同じ方針だが、こっちは廊下に1方向吹き出しの天井設置型エアコンと、その吹き出し口の隣に風量調整範囲の広い樹脂製(一応結露対策)換気扇(FY-32JD7)を設置。エアコンの吹き出しを換気扇が拾い、そこからのダクトで各部屋へ空気を送る仕組み。吹き出しグリルはオーケー器材のK-HV〇〇系のものが吹き出し方向を上下左右に調整できるのでお勧め。
さらに一工夫で、エアコンの吹き出し口から換気扇にかけて、下図のような風向制御ボックスを設置。これは2枚の板にプラ板をタッカーで打ち付けた程度の構造で、一般の全館空調システムにおけるエアコン室の役割を担ってる。換気扇が弱運転やオフの時の空気の逃げ道を忘れずに。
以上、間取りはかなり簡略化してるけど、大体説明完了。
●注意点
●数年住んだ後の補足・改善箇所
・リビング階段にし、玄関は全館空調範囲外にした方が節電になる。窓も多すぎないように。窓は断熱の弱点になる上、窓がある壁には棚等置けなくなる。ただし閉じ込められ事故想定しトイレ等にも小さい窓は必要。
・予想はしてたが室間換気扇(V-08PFE)の風力弱すぎ。
・各部屋ドアには大き目の通気口(ドア用ルーバー)が必要。2階は冷気が1階に逃げないようにドア上部、1階は暖気が2階に逃げないようにドア下部に付ける。
・温度がどうしても2階>1階になるので、1階は軒出し控え目、2階はがっちり(住友林業並みに)軒出しすべき。
・上下最大高低差(1階足元付近-2階天井付近)間の空気移動用ダクトも必要。階段のシーリングファン程度じゃ足りない。同容量の上げファンと下げファンを付けるのが理想。上げだけ、下げだけだと、微細な外壁隙間から外気吸ったり内気漏れたりしそう?
・天井設置型エアコンは主力商品じゃないからか、うるさいし高いし省エネ度も低いので、普通の壁掛け2台の方がいい。例えば1階リビングと、2階は廊下奥物置の上半分をエアコン室にしたり。
・エアコンは14畳2台体制が一番。理由はこういうところ参照。
・2階エアコンの室外機は2階に設置した方が配管が短くて済み省エネになる。
・夏より冬の方が電気代高い。ならば室外機は南側に設置し、夏は遮光し冬は日を当てた方が良さげ。
・最近のエアコンは換気機能も付いているので、熱交換換気扇は不要かも。やり過ぎ感あり。
・夏は北側窓に西日が結構入る。窓の上側西側に庇が有った方がいい。
・全館空調とは関係ないが、ゴミ箱やロボ掃除機等を置くスペースも考えておくこと。
非同期メソッドをTask.Run()で別スレッドで実行するとき、async/awaitを付けて呼び出すべきか否か迷ったので比較。
async Task<string> f()
{
Console.WriteLine("f1");
await Task.Delay(1000);
Console.WriteLine("f2");
return "完了";
}
void button3_Click(object sender, EventArgs e)
{
Console.WriteLine("btn3start");
using (var t = Task.Run(f))
{
Console.WriteLine("btn3running");
Console.WriteLine(t.Result);
Console.WriteLine("btn3end");
}
}
これのfの部分をラムダ式で呼ぶ場合下記どちらがいいか。
() => f()
async () => await f()
() => { var ret = f(); Console.WriteLine("この順番が変わる"); return ret; }
同期相当の↑これだと↓こうなる。varはTask<string>。
btn3start
btn3running
f1
この順番が変わる
f2
完了
btn3end
async () => { var ret = await f(); Console.WriteLine("この順番が変わる"); return ret; }
非同期相当の↑これだと↓こうなる。varはstring。
btn3start
btn3running
f1
f2
この順番が変わる
完了
btn3end
要するにラムダ内でアレコレしないならどっちでもほぼ変わらん。
追記:
と思ってたが、スレッドプールの枯渇云々で新Task立てるのが秒単位で遅れたり、HttpClientがTask外の別インスタンス含めて全部数十秒ブロックしたり深い所で致命的な影響あるっぽい。async/await付けるべき。
ThreadPool.SetMinThreads()で最低数増やしたら解消するなら、枯渇してる。
自分用メモ。
private async void btn_Click(object sender, EventArgs e)
{
Console.WriteLine("1");
bool a = await subasync();
Console.WriteLine("4");
}
private async Task<bool> subasync()
{
Console.WriteLine("2");
Console.WriteLine("一旦メッセージループへ戻り");
await Task.Delay(3000);
Console.WriteLine("3秒経ったら");
Console.WriteLine("3");
return true;
}
private void btn_Click(object sender, EventArgs e)
{
Console.WriteLine("1");
bool a = subasync().Result;
Console.WriteLine("4");
}
private async Task<bool> subasync()
{
Console.WriteLine("2");
Console.WriteLine("一旦固まり終了を待つ ConfigureAwait(false)が無ければフリーズ");
await Task.Delay(3000).ConfigureAwait(false);
Console.WriteLine("3秒経ったら");
Console.WriteLine("3");
return true;
}
Task<bool> tsk;
private void btn_Click(object sender, EventArgs e)
{
Console.WriteLine("1");
tsk = subasync();
Console.WriteLine("3秒待たずに");
Console.WriteLine("3");
Console.WriteLine("ここで待たずにreturnするならTask終了をContinueWithで受けるべき");
Console.WriteLine("一旦固まり終了を待つ ConfigureAwait(false)が無ければフリーズ");
//tsk.Wait();
bool rslt = tsk.Result;
Console.WriteLine("5");
Console.WriteLine("メッセージループに戻る");
}
private async Task<bool> subasync()
{
Console.WriteLine("2");
await Task.Delay(3000).ConfigureAwait(false);
Console.WriteLine("3秒経ったら");
Console.WriteLine("4");
return true;
}
エギは頭が引っ掛かることが多いらしい。
そこで、例によってペプシコーラ1.5Lペットボトルを使って、エギバンパーを作ってみた。見ての通り、切ったのを接着するだけ。
まずエギ先端付近が覆われそこに引っ掛かることは無くなる。もしバンパー先端が引っ掛かっても、バンパー先端がテコの支点となったり、バンパー全体が板バネとして機能したりで、すぐ外れる…はず。それに透明で目立たない…はず。
あとは動きへの影響だけど…それは各自で検証よろ。
ついでに下部にもフック用バンパー付けるのもありかも?
※バンパー先端側はV字カットじゃなくスナップ通せるくらいの穴開けるのも手。板バネの働き方変わるので要検証。