月別アーカイブ: 2017年6月

マチンの公式で円周率

近似式

円周率を求める式の研究は古来から盛んです。今からでも遅くはなく、収束が速い簡潔な式を見つければ、歴史に名を留めるかも知れません。今回は、今でも円周率の計算に使われるマチンの公式を使ってみます。

収束が速い

マチンの公式はとにかく、収束の速い式です。プログラミングは「マチンの公式」ウィキペデア《マチンの公式による計算》を参考にさせて頂きました。arctan(1/5)とarctan(1/239)において、両者の偏角値に開きがあり、計算する項数を調整しています。

小数点以下、14桁まで、多くの算出法と同じ値が得られました。ひところ、算出桁数を競った時期があり、2016年に22.4兆桁の記録があります。

サンプルコード

<div id="pic0" style="width:580px; height:265px;">
<img src="http://aidesign.lolipop.jp/wp-content/uploads/2017/06/MachinFormula.png"></div>
<script type="text/javascript" charset="Shift_JIS">
const c5_239 = [0.2, 1/239];
const multiple = [16, 4];
  var s = "マチンの公式を用いて円周率を算出<BR>"
  document.write(s);
  for(var j=0; j<=9; ++j){
    var u = arctan(j, 0) - arctan(j, 1);
    s = "m="+j+" 項数="+("0"+(4*j+4)).slice(-2)+" PI="+u+"<BR>";
    document.write(s);   /* 円周率を計算・出力 */
  }
function arctan(m, num){    // 逆正接を求める
  var v = 0;
  var s = 1;
  var w = num * 4;          // 0, 1 ---> 0, 4
  c = c5_239[num];
  for(var n=1; n<=(6-w)*m+5-w; n+=2){    // 0:6*m+5, 1:2*m+1
    var g = Math.pow(c, n);
    v += s * g / n;
    s = -s;
    //console.log("N="+n+" V="+v+" G="+g);
  }
  v *= multiple[num];
  return v;
}
</script>
</html>

実行結果

余談

document.write()の引数に式を指定すると文法エラーになり困りました。直前に変数に代入し、その変数を引数にすればエラーになりません。

 

ライプニッツ公式による

ライプニッツの公式により円周率を算出

前回、乱数を用いて円周率を求めました。精度の高い円周率を求める方法は乱数を用いません。「乱数を用いて円周率を求められますよ」ということを図を使って解説してあります。

一様にばらつく乱数を使うことが基本で、偏った乱数では実態に即した円周率は求まりません。一般に乱数関数は言語処理系が持っているので精度の高い円周率を求めるには他力本願にならざるを得ません。

自力本願による解決

円周率を求める無限級数の近似式はたくさんあります。近似式は規則性があり、繰り返し処理で算出可能です。小さい繰り返し回数で精度の高い値を求めることを収束が速い算出法と表現します。収束が速くはありませんが、式がシンプルで有名なライプニッツの公式があります。

総和記号の式を大きく明示すると以下の図のようになります。

今回はこれを使って円周率を求めてみます。古くはFORTRAN、BASIC、Cなどで取り上げられていますのでJavaScriptで記述したプログラミングコードを解説します。

プログラミングコード

<html>
<script type="text/javascript" charset="Shift_JIS">
// ライプニッツの公式を用いて円周率を算出する
const MAX = 50000;              //繰り返し回数
const DIFFERENCE = (0.0001/4);  //差分による収束判定値
var pi4 = 0;                    //円周率格納変数
var previous = 0;               //直前の計算値
var delta;                      //差分

for(var n=1; n<MAX; n+=2){      //1, 3, 5, 7, 9, 11, 13
  pi4 -= (n % 4 - 2) / n;       //
  delta = previous - pi4;
  //console.log("N="+n+" PI="+(pi4*4)+" deleta="+delta);    /* 円周率を計算・出力(解析用) */
  if(Math.abs(delta) < DIFFERENCE) break;                   /* 収束 */
  previous = pi4;
}
  document.write("N="+n+" PI="+(pi4*4)+" delta="+delta);   /* 円周率を計算・出力 */
</script>
</html>

上の図に示した公式をJavaScriptでプログラミングしています。

ライプニッツの公式を凝視すると、各項の分子は1でその符号は正、負が交互に現れます。分母は初期値が1で、等差2の等差数列であることが分かります。このことからすると、繰り返しインデックスは1から始まり、増加値が2であることが望ましいと言えます。

11: pi4 -= (n % 4 – 2) / n; //pi4+= (2-(n % 4)) / n;

上の式は総和記号を実現させる式の肝部分です。総和記号を厳密に解釈すると右のような表現になるが、演算順序を変えると左のように少し単純化できます。

10行目のfor文で制御変数の初期値を1に、増分を2にしてあります。14行目であらかじめ設定した収束値になったかどうかを判断しています。

動作結果から

収束の速い近似式による収束のありさまを下図に示します。200回ほどの繰り返し回数で精度の良い円周率が求まっています。

今回の動作結果から判断すると、仮に設定した収束値が得られるまで20000回かかりました。やはり、収束が遅いことが明らかになりました。

3.1416まで算出するにはかなりの繰り返しが必要になります。



ライプニッツの公式は単純な規則性があり、サンプルとして取り上げられますが、円周率算出の本命とは言い難く、その席はマチンの公式などに譲ることになります。

乱数を用いて円周率算出

ゆとり教育

戦後の詰め込み教育を反省して、ゆとり教育が叫ばれた時期がありました。そのとき、小数演算は難しいので円周と直径の比率は3.14…のところ、3で計算してもよいという通達があったと聞きました。

これでは誤差が大きいのではと気をもんでいましたが、ゆとり教育そのものがとん挫したようです。

乱数を用いて円周率を算出

乱数を用いて円周率を算出する資料は、山のように溢れていますが、仕組みを解説している記事は多くありません。今回、図を描いて丁寧に説明をします。

乱数の種類

乱数には、自然乱数、一様乱数、正規乱数などがありますが、ここではある有限の区間を区切って、その区間内で全ての実数が同じ確率(濃度)で現れるような乱数である一様乱数を採用します。

今回、JavaScriptを使ってプログラミングしますが、一様乱数はMath.random関数が用意されています。

算出の仕組み

一様乱数は0~1(0 <= r < 1)の区間で、同じ確率で発生します。一辺が1の正方形の中に2つの乱数を発生させ、xとyに割り振るとP点が求まります。

そのP点が1/4円の中に入る確率は正方形と1/4円の面積比であるπ/4になります。算出した確率を4倍すれば円周率が求まる仕掛けです。

P点が1/4円の中にあるかどうかは、xとyから半径zを求め、その値が1以下ならば円内にあると判断します。

正方形の面積:1、1/4円の面積:π/4

正しくはx、yの二乗和の平方根の値を求めておく必要があるが、

a、bがともに正で、a<bならば√a<√b
の式が成り立つので平方根を求める必要はありません。

検証

正確な円周率に近づけるにはMAXの値を大きくしますが、この方法で精度の高い円周率を求めることはできません。精度の高い円周率を算出するにはマクロリーン級数による近似値計算などがあります。

サンプルコード

<html>
<script type="text/javascript" charset="Shift_JIS">
// 乱数を用いて円周率を算出する
const MAX = 1000000;
var count = 0;

for(var i=0; i<MAX; ++i){
	var x = Math.random();
	var y = Math.random();
	var z = x * x + y * y;
	if(z < 1) ++count;
}
  /* 円周率を計算・出力 */
  var pi = count / MAX * 4;
  alert("PI="+pi);
</script>
</html>

動作結果

さいごに

乱数を用いて円周率を算出してみました。紀元前2000年ころには古代バビロニアで22/7=3.142857が使われていたといいます。なんぼなんでもπ≒3は暴挙としか思えません。

 

都道府県を知ろう

1都1道2府43県

また、古い話で恐縮です。かつては車や新幹線などの交通機関が充実してないので、世界地図、日本地図への親しみが強かったように思います。

名曲「コンドルは飛んで行く」にあるように狭い大地に縛られることなく、自由に飛んでいきたいという欲求は誰にでもあります。郷愁をそそる名曲は『コンドルは飛んでいく』、『El Condor Pasa』で検索してお聞きください。

江戸時代のお伊勢参りのような無銭旅行もままならず、交通機関が充実しても即、自由に国内旅行を楽しむことは少なく、遠方への旅行ができるようになったのは、経済力が付いた後のことであり、そんなに時間は経っておりません。

今では、地図による予備知識の吸収に重きが置かれなくなったせいもあり、県の位置を正確に把握している人は昔より少ないように感じられます。そのぶん、生きた情報に触れる機会が多くなっています。

そこで、インターネットを利用して、県の位置、県名、県庁所在地名を始め、詳細な関連情報を取得するツールをJavaScriptで作ってみました。

使い方

小学生の地理の勉強に、47都道府県の場所と県名と県庁所在地名を覚えるには、地図上をクリックします。クリックする前に考えていたものと同じかどうかを確認します。県名の前に表示される2桁の番号は沖縄を0とし、北海道を46とする整理番号です。

同一箇所をさらにクリックすると県庁所在地名が表示され、もう一度クリックすると『〇〇県の詳細情報を表示するページにジャンプしますか?』という画面に切り替わります。OKの入力で別ページにジャンプし、戻るボタンをクリックすれば、当該ページに戻ってくることができます。

切り替えボタンをクリックすると47都道府県の県名が一斉に表示・非表示になります。

締めくくりの前に

因みに、県名と県庁所在地名が異なる県は、北海道と東京都を含めると19都道県になります。埼玉県はさいたま市が県庁所在地ですが、漢字とひらがなであり異なるものとしてカウントされています。

北国の人々は西国の地理に明るくなく、同様に西国の人々には北国の地理に暗いとされています。ゲーム感覚で地理や歴史、風土などについて調べてみましょう。

ソースコードは別の機会に、JavaScriptプログラミングの開発を解説する形で他も含めて一気に公開する予定です。

ちょっぴり高度な処理へ

2020年から小学校において、プログラミング教育が本格化します。

子供向けプログラミング言語としてScratch(スクラッチ)、Viscuit(ビスケット)があり、それらを使って県の特長や特産物の絵を表示するプログラムを小学2年生女子生徒が開発しています。頼もしいことです。

簡易言語では指定された県から詳細情報を引き出すことには難儀します。プログラミングを先導する先生にはJavaScriptのエッセンスは理解していただきたいものです。

動作例

 

 

 

JavaScript無名関数の文法

困った体験

最近、JavaScriptで無名関数を使い、思わぬ落とし穴にはまりそうになった体験談についてまとめます。古くからある言語は行単位で記述する習わしでした。

文の終わりは行末であるから、セミコロンのような文の終わりを明示しなくてもよかったのです。

新しい言語は行ではなく、ブロックという考え方に変わり、文の終わりにはセミコロンで区切るようになっています。

その名残りなのか、セミコロンを省略しても文法エラーとして扱わない温情ゆたかなブラウザが多いです。

4つの例題で確認

4つの例題を1つのファイルのまとめました。それぞれの特徴を記します。check0は無名関数の文法に則った記述です。check1は無名関数の終わりを示す’}’の後のセミコロンを省略したもの。check2は’}’の後の2つの改行コードを削除したもの。最後のcheck3は’}’の後にセミコロンを挿入したものです。

<!DOCTYPE html check0.html>
<html>
<script>
calc = function (a, b) {//結果を求め、戻り値を返す
	return a + b;
};						//<==== セミコロン
						//<<< 無名関数の動作確認 >>>
alert(calc(1, 2));		//3が出力される
alert(calc(10, 20));	//30が出力される
</script>
</html>
//----------------------------------------------------
<!DOCTYPE html check1.html>
<html>
<script>
calc = function (a, b) {//結果を求め、戻り値を返す
	return a + b;
}						//<==== セミコロン忘れ

alert(calc(1, 2));		//3が出力される
alert(calc(10, 20));	//30が出力される
</script>
</html>
//----------------------------------------------------
<!DOCTYPE html check2.html>
<html>
<script>
calc = function (a, b) {//結果を求め、戻り値を返す
	return a + b;
}alert(calc(1, 2));		//3が出力される(この行でエラー)
alert(calc(10, 20));	//30が出力される
</script>
</html>
//----------------------------------------------------
<!DOCTYPE html check3.html>
<html>
<script>
calc = function (a, b) {//結果を求め、戻り値を返す
	return a + b;
};alert(calc(1, 2));	//3が出力される(エラーは起きない)
alert(calc(10, 20));	//30が出力される
</script>
</html>

動作結果

check0 文法エラーなし
check1 文法エラーなし。18行の}の後、行末まで有効なコードがないのでセミコロンを自動補完
strict版check1 文法エラー発生
check2 文法エラー発生。30行、}の後に有効なコードがあるのでセミコロンは自動挿入されない
check3 文法エラーなし

厳密な文法チェック法

check1において、厳密な文法チェックをするには、”use strict”指定にします。すると「Uncaught ReferenceError: calc is not defined at check1.html:5」のエラーが出力されるようになります。以下に改訂されたcheck1を示します。

<!DOCTYPE html check1.html>
<html>
<script>
"use strict";
calc = function (a, b) {//結果を求め、戻り値を返す
	return a + b;
}

alert(calc(1, 2));		//3が出力される
alert(calc(10, 20));	//30が出力される
</script>
</html>

さいごに

曖昧なプログラミングでも文法エラーにしないで、期待通りに実行できることはありがたいことですが、check2のように冗長度をなくした時に、突然、エラーが検出されることがあります。

改行コードを削除して、ソースコードの解析されにくさをねらったときに、エラーが起きた場合には、厳格さを欠いたプログラミングを疑ってみましょう。

無名関数の定義は代入文と同等です。「代入文はセミコロンで締めくくる」と覚えておけば、セミコロンを忘れることが少なくなりそうです。

曖昧さを放っておくとセキュリティホールの原因になることがあります。できれば、曖昧な表現をなくしましょう。

 

バランス感覚

万能型は稀

それぞれの分野ごとに専門家がいたり、大が小を兼ねないことがあったり、万能はなかなか存在するものではありません。いつも他人を攻め続けている人は、攻められるともろくも崩れることがあります。

空母機動部隊を防御するイージス艦がコンテナ貨物船と衝突しました。

最新兵器による遠くからの攻撃には鉄壁の防御システムが働いても、近くの船舶の航行を避け切れないことにはちぐはぐさを感じます。

2000億円もする精密機器搭載のイージス艦も横からの不意打ちには手も足も出なかったようです。

将棋になぞらえると

将棋の飛車は攻めゴマの最高峰ですが、攻められると弱い一面を持っています。飛車、角、香車の利きは遠くから有効であり飛び道具として使うと効き目があります。

敵の王将、金、銀などの利きは長くない(自分の周り1マスぶん全部か一部)ので遠くにある飛び道具側は安全ですが、やむなく近くから攻めざるを得ないときに弱点が露呈することがあります。

詰将棋

上図のような持ち駒のない王将を飛車と銀によって攻め続けて打ち取る場合を想定します。

攻めには飛車で5二飛と玉から離して打ち下ろします。5二でなく6二と近づけると失敗します。王将側には合い駒(相手の攻め駒の利きを遮る駒)がないので王手を避けるには、9一玉、8一玉、7一玉の3応手がありますがそれぞれ、即詰みです。手順は以下の通りです。尚、慣例で王将は玉(たま、ぎょく)と表示します。

5ニ飛 9一玉 9二銀            
5ニ飛 8一玉 8二銀 9二玉 7一銀不成 9一玉 8二飛成    
5ニ飛 7一玉 7二銀 8二玉 6三銀成 9一玉 9二歩 8一玉 7二飛成

この他にも5一飛成として竜を作って詰める手順もあります。この手順は強さと弱さが同居している話から遠ざかるのでカットします。

不詰め

2番目のような駒の配置では玉側に5二の桂馬があるので、6二飛と攻めることになります。7一玉と応手されるとその後の攻めが続かないので、不詰めとなります。

将棋の格言に《大ゴマ(飛車と角)は近づけて受けよ》があります。

これは飛車や角は攻められると弱いコマだからです。斜めに利きがないためです。敵陣に侵入し飛成すなわちになれば最強のコマになるのですが、強さと弱さを兼ね備えているとドラマのようです。

さいごに

兵器の最高傑作ともいえるイージス艦の事故にシステムの安全性やバランスについて考えてみました。遠くを照らす灯台において、近くの足元は暗く万能を望むのは無理な注文なのでしょうか。

今では、個人が所有する車にも自動ブレーキが備わっているものがあり、数千億円もする高価なシステムでは、ニアミスへの警告音発声は小予算でできそうです。また、GPSによる位置検出の制度が6㎝に突入しており、衝突しそうになったら自動監視システムが起動して両船の航行を修正できそうに思います。

ルネッサンス期の芸術家にレオナルドダビンチがおり、「万能の人」、「完人」と言われました。芸術方面だけでなくあらゆる分野に精通されたと言われています。最後に、その肖像画を掲げて終わりにします。

追加

今年は、ヘリコプターや小型飛行機の墜落事故が多いようです。経験豊富なベテラン機長の場合で起きています。科学の応用で山に衝突は避けられるのではないでしょうか。車などにおいて、乗り心地の追求が先で、事故への対応がおろそかになっていたように感じられます。人命尊重の機運の高まりを切望します。

おまけ

ちぐはぐさに怒りがこみ上げてくることがあります。Yシャツにスペアボタンがつくようになったのはいつからでしょう。たった数千円の商品にも大事を考えて突発事故に備えています。バランスを考慮した設計をお願いします。

持続的な発展

地方と中央の格差

わが国では民主国家といえども、中央集権主権的な風土が強い傾向にあると言えるでしょう。江戸時代、地方で行き詰って江戸に出るという話は聞きました。

富と権力が集まっている中央でひと肌上げようと飛び出した人々は大勢いたことでしょう。人手不足の時はコネや経歴よりもやる気だったことでしょう。

未発達状態では中央と地方の格差が激しく、ここ50年前まではかなりの大差であったことでしょう。かつて、中央から遠い地方は後進県発展途上県などと一時、呼ばれていました。

プロ野球は主要都市にしか存在せず、ナイター設備のある地方球場は皆無でした。今では北海道、東北地方にも球団が存在しています。

Jリーグのサッカーチームは結構、あちらこちらにあるのに対して、プロ野球チームはまだ、中央寄りです。北陸、山陰、四国地方辺りにプロ野球の球団がないのはさみしいです。

地方の追い上げと限界

発展している地方都市に出かけるとセブンイレブン、ドン・キホーテ、イオンなどの店が目白押しで似たような景色に出会い今、どこにいるのかわからない時があります。

人が集まり購買力があるからこそ、出店が続いているのでしょう。中に入ると店の雰囲気がどこも変わっていないことに気づきます。中央の仕組みがそっくり乗り移っているかのようです。

地方都市では周辺人口を飲み込むかのように人が集まっているようです。その一部では限界集落が増えていることでしょう。また、公共施設や商業施設の建築ラッシュでにぎわっていても、成熟した数十年先の青写真が明確になっているのでしょうか。膨れ上がった風船はいつか破裂します。

石油に頼っているある中東国では、やがて石油が枯渇した時を見越して資源小国の日本に学ぼうと先刻、役人が大挙して来日しました。

登りつめた先に、古くなった公共施設の維持もできなくなって廃墟都市にならないとも限りません。将来に負の遺産を残して見かけ上の発展には気を付けましょう。持続可能な発展(Sustainable development)が望まれます。

多目的時計

平準化政策

我が国の製品は品質が高止まりに安定傾向にあると言われています。あるとき、100円均一ショップでサインペンを買ったところ、新品なのに、さんざん書き古したごとく書けないことがありました。made in CXXの輸入品でした。店員はよくあるのか、丁重にお詫びの後、他のものと交換してくれました。

日本では、人件費が高いせいか大量生産品が出回っています。半完成品やキット商品はほとんどありません。貧しかったころから国のリーダーが長年、人並みの生活を目指し国民を鼓舞してきた政策の表れとも言えるでしょう。

手編みのセーター

文化が爛熟期に近くなるほど、ありふれた大量品に飽き飽きするのが普通のように感じますが、我が国ではなかなか、そのような兆しがありません。

それでもクリスマスのプレゼントに手編みのセーターを贈る乙女がいると信じたいです。それと同じ趣旨で、世界に二つとない多目的時計を作って、憧れのマドンナにプレゼントしませんか。そのサンプルを示します。

笑福ちゃん時計の概要

この時計は日頃、思い切ったメッセージを伝えられずにいる人への記念日のプレゼントを想定して作ったものです。例えば、誕生日とか入試合格祝いに贈るものです。市販品は恐らく出回ってなく、正当な見積もりにより算定すると数十万円にもなろうというレアものと言えます。

誕生日や合格祝いの期日が近づくとイベントを盛り上げるために、カウントダウンが始まります。そして定刻になったら、ショパン作曲の「小犬のワルツ」が流れるなか、思いっきりメッセージを伝えます。

その後、3種の記念写真がフェードインしながら描画されます。サプライズの儀式が終わって、この後、一時間ごとに世界遺産や名所旧跡の写真が表示され、デジタル・アナログのハイブリッド多目的時計に戻ります。

左上の円がcoral(サンゴ)色からcornsilk(トウモロコシ)色に変わっていれば、時計中央の背景画像を変更することができます。クリックするたびに更新され、12回で一巡します。

手作りの薦め

文化は模倣から始まり、進化・発展しながらオリジナルなものに進むと言われています。

ビトンやグッチの高級カバンに執着して身に着ける人も多いですが、ハリウッドスターは日本のカバン職人に数百万円もの大枚を用意して、特注品を注文するという話を聞きました。

多目的時計をプレゼントしてもどの程度、評価されるかは保証の限りではありません。その責任は一切、負えません。見向きもされなかったら、生まれてくるのが早かったとか民度が思ったほど高くないからなどと嘆いて自負心を満足させましょう。

再読み込みボタンをクリックし、先頭から再実行してください。ブラウザGoogle ChromeとOperaで動作します。3分間、閲覧し続ければ、必ずサプライズが起きます。

動作例

箸立てに入れる箸の向き

標準と共通

生まれた環境が違う者同士が一緒の生活をすると戸惑ったり、衝突することがあります。昔は似たような生活をしてきたもの男女同士が共同生活に入れば万事うまくいくと言われました。

それでも呼び名ひとつをとっても「おにぎり」でなく「おむすび」だと主張してケンカになることもあります。

標準というのもいい加減なもので、時代により変わったりします。だから、こだっわり、執着するのはいかがなものか。礼儀知らずなどと決めつけるのは良くないです。祝儀や見舞いの袋に入った札の新旧や裏表よりも、金額の多さをすなおに喜ぶべきです。

仏壇に供え物をするのに仏壇から見て字が読みやすいようにと逆向きに置く地方もあると聞きます。故人は字を読むこともないのだが、故人を尊重して供え方で気持ちを表現していることはわかりますが、それを扱うのは残された人々ですから、そこをないがしろにしているとの意見にはどのように反論するのでしょうか。

ご先祖を敬うのは良いことだが、もっと根本的な優れた言い伝えを反故にして、本質から外れた形式的なことがらにこだわっているようでは日進月歩の競争社会には置いてけぼりにされそうです。しかし、宗派によってそれぞれあるようで、正解は一つだけではありません。

箸立てと箸の向き

箸立ては箸を一時、収納しておき、容易に取り出せる容器です。大衆食堂では割り箸を立てておいて利用者が取り出せるようになっています。割り箸が袋入りでなければ、箸先が下になっていることが多いようです。

家庭では箸立てに入れる前に洗った箸を水切りにいったん入れ、乾いてから箸立てにいれます。そのとき、箸先を上にするか下にするか2方式あり、その割合は拮抗しています。上派、下派それぞれにもっともな理由があり、ローレンツの刷り込みではないが、幼年期から何も不思議がらずにしていた行為が標準と考えていることでしょう。

箸先を上にしておく最大の理由は、箸立ての底にはゴミがたまりやすく不衛生だからです。また、下にする最大の理由は、食卓に置くとき、口に触れる部分を手で触ることへの抵抗です。

ある篤志家が投票で決めようとして、投票者を募ったら上派:29票、下派:44票という結果を報告されていました。投票者が73名では何とも言いようがありません。

面白いことにスプーンやホークの場合は上図の右のように、押しなべて手にする柄の方を下にしています。これは不衛生かどうかは棚上げし、料理を盛り付ける方は形が大きいので箸立てに入れにくく、扱いやすさを考慮したものと思われます。

一般的なのはどれ

一般的とは一概に語れませんが、昔は夏場にハエがいることは極く当たり前で、そのため、下向きに入れておいたように感じます。今はハエがいることは少なく、手洗いが励行されるし、使い捨てビニール手袋をはめて食事の準備をすることもあり、上向きに入れることが多くなったことでしょう。

箸立ての改良

箸立ての底が不衛生と感じる人には、乾燥剤&消毒剤を中に敷くやり方はどうでしょうか。また、日光消毒ができるように組み立て式の箸立てを購入してはいかがでしょう。

売ってなければ、開発・製造して100均で売り出したら儲かるのでは。亀の子たわしで財を成した方がおられるようです。行動は結果を生みます。