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

6月の梅雨明け

関東甲信梅雨明け

関東甲信の梅雨明けが発表されました。6月中の梅雨明けは例を見ないことです。関西、東海地方がまだなのに気の早いことです。一方で、少雨で農作物への悪影響が心配です。

いつも言ってますが、平均的に万遍無く降ってほしいとの願いむなしく、九州北部から土砂崩れなどのニュースが流れてきます。

夏真っ盛り

今日は6月の末日で2018年前半の最後の日でもあり、平成30年もあと半年を残すのみとなります。歳月、人を待たずは意味の深い言葉です。自分に都合のいいように解釈したいです。

これからは灼熱の猛暑がやってきます。寒さや暑さは生きとし生けるものにインパクト、ショックを与えます。一方、ぬるま湯は怠惰に流れます。暑さに対抗するというよりも暑さを楽しむのが一番です。

逆療法

うだるような暑さが続くと食欲が減退します。かき氷、ところてん、冷やし中華、そうめんなどに目が行きがちです。熱めの風呂に入り、焼肉や唐辛子たっぷりのあつあつラーメンなども夏を楽しむ一つの手です。

キャンプ村や自然塾でバーベキューパーティーなど、楽しい企画が満載です。

仕事の多忙さにかこつけて折角のチャンスを逃すのはもったいないです。大きな組織との調整をはかるのは大切です。

ですがいつも期待を裏切っていては器量・度量の問題です。家族や周りに尽くす力が不足しているとそしりを受けても仕方ないことでしょう。

長い人生からすると子育ての時間は短いです。会社は大勢の人から成り立っています。俺がいなければ…とうぬぼれないで小さな、大切なことから始めましょう。

今が旬

生き物には時間がつきまとい、食べ物には旬があり、人間にも年齢に応じた行動が期待されます。

それを放棄してただひらすら大義に尽くし、その代償として広大な屋敷に住んだとしても、一生を平穏に過ごせるとは限りません。贈収賄事件などに巻き込まれて、晩年を畳2枚ほどの独房生活を送らざるを得ないということになったらつまらないです。

行き詰ったり、他人の出世をうらやましく思ったときは、野原を駆け花を愛でるのがよいのでは。

いつも思うのですが、廻りを蹴散らして権力闘争の覇者になったのならば、ずっと覇王でいて欲しいと願っていても、よどんだ水は濁り腐って自らこけてしまうのです。

高校野球地方大会の決勝戦の勝者は、『負けた多くの高校の分まで甲子園では全力で戦ってきます』と語りますが、その気持ちは大人には通用しないようです。

あと半年もある

2018年はまだ、たっぷりと残っています。先ずは『隗より始めよ』でしょうか。不遇な家に生まれた、上司に恵まれなかったなどグダグダ言いつのるのはいかがなものでしょう。

若い時には周りを呪いがちですが、たとえ恵まれた環境でも成功者になっていたかはわかりません。その人の器量・資質に依存する確率がもっとも高いと言われています。

あと半年はあります。無為に過ごして、9回裏、ツーアウトで逆転はさらに難しくなります。

 

クッキー具体例

入力を省略する例

クッキーを利用することにより、いつも入力する項目を省略することができます。ある組織の中で掃除当番や発表者をくじ引きで決めることがあります。

あみだくじゲームで決める場合は参加人数を指定する必要があり、この人数は一定していることが多く、前回の値を記憶しておけば、入力を省略することができます。

前回の参加人数をクッキーに保存し、次回に利用する例を挙げます。

動作例

アプリを動作させると、ここでは参加人数の初期値は10に設定されます。あみだくじ参加人数を設定し、再び、起動すると前回の参加人数に初期値が切り替わります。その人数でよければ、オレンジの確定ボタンをクリックすると、参加人数の設定を省略することができます。

クッキー具体例 ©TacM, 2018 Ver0.01

 参加人数(3~16)
「あみだくじ参加人数を設定中」

 

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

あみだくじの作り方についてはあみだくじの資料を参照してください。

サンプルコード

<!doctype html>								<!-- participants.html, 2018-06-26 -->
<html>
<body>
<p style="font-size:32px; color:royalblue;">クッキー具体例<span style="font-size:12px; color:magenta;">&emsp;&copy;TacM, 2018 Ver0.01</span></p>
<input id='sp' type="number" id="step2" min="3" max="16" step="1" value="10" style="width:50px; font-size:20px; font-weigt:bold; color:navy;">
<a onclick='numberSet()'><span style="text-decoration:underline; color:orange; font-size:20px;">&nbsp;参加人数(3~16)</span></a>
<div id="guide" style="font-size:28px; color:green;">「あみだくじ参加人数を設定中」</div>
<script type="text/javascript" charset="Shift_JIS">
const keyName = "numberOfParticipants";		//2018-06-24-20:25
const maxAge=24;							//保存期間、24時間
var speed = 10;								//参加人数初期値

if (!navigator.cookieEnabled) alert("cookieを使用可能にしてください。");	//cookieを使用できるようにする
	var velocity = GetCookie(keyName);		//参加人数を取得
	console.log("VELOCITY=",velocity,speed);
	if(velocity != speed)	document.getElementById('sp').value = velocity;	//参加人数を更新する

function numberSet(){						//参加人数を設定
	var w = document.getElementById('sp').value;
	console.log("numberSet", w);
	SetCookie(keyName, w);					//クッキー保存
	document.getElementById('guide').innerHTML = "参加人数を"+w+"人に決定しました。";
}
function GetCookie( name ){					//クッキーを取得
	var cookieName = name + '=';
	var allcookies = document.cookie;		//クッキー全体
	var position = allcookies.indexOf( cookieName );	//キーで指定された項目の位置
	var score = speed;						//未登録時の暗黙値
	console.log("GetCookie, allcookies="+allcookies+" position="+position);
	if( position != -1 ){					//登録されている
		var startIndex = position + cookieName.length;
		var endIndex = allcookies.indexOf( ';', startIndex );
		if( endIndex == -1 ){				//単数、複数の処理
			endIndex = allcookies.length;	//終わりの位置
		}
		score = decodeURIComponent(allcookies.substring(startIndex, endIndex));	//指定キーのデータを抽出
	}
	return score;
}
function SetCookie( name, data){			//クッキー保存
	var expire = new Date();
	expire.setTime( expire.getTime() + 1000 * 3600 * maxAge );				//保存期間
	var newData = name + '=' + data + ';expires=' + expire.toUTCString();
	console.log("SetCookie", name, data, newData);
	document.cookie = newData;				//cookieを更新する
}
</script>
</body>
</html>

余禄

JavaScriptなどのオブジェクト指向言語は、コードの記述量が少なくて済み開発工数の削減につながります。

かつては表(テーブル)をコード化する際、9999や-1、文字データならば//などを最後の項目に定義して、柔軟性のあるプログラミングをしていましたが、機能豊かな言語では、rows.lengthのようにテーブルの属性を指定すると項目数が得られるようになっています。

一方、テレビのチャンネル番号のように、最後に利用した番号を記憶する方式は利便性が高いです。

あみだくじ参加人数は一定の場合が多く、クッキーを使って前回の参加人数を暗黙値として指定することができ、具体例を示しました。

クッキーの扱い方

クッキーを使ってみました

ネット上を検索する場合、好むと好まざるとにかかわらずクッキーとかかわりを持つことになります。セキュリティを心配するあまり、クッキーの利用を禁止している人を見かけることがありますが、現実的ではありません。

クッキーとは一般的には小麦を主原料にした焼き菓子のことですが、IT用語としての意味はWebサイトの提供者がブラウザを通じて閲覧者の端末(スマホやパソコンの記憶装置)に一時的にデータを書き込んで利便性を高める仕組みのことです。

 

クッキーの利用は使わないときよりも危険性が増しますが、正しい利用で快適なウェブライフを体感することができます。飛行機利用や車の運転における危険性と利便性の兼ね合いに似ています。

多くのウェブサイトはクッキーの利用を前提に作られています。オンラインショッピングで商品を買い物かごに入れたとき、暫定的に注文数などがクッキーに記憶されます。個人情報なども記録されることがあり、しっかりしたセキュリティ対策を講じなければなりません。

今回、ウェブ上のゲームを断続的に行うに当たり、クッキーを用いる通算成績の管理例を取り上げました。

サンプルの題材

短時間で勝敗が決着するウェブ上のゲームを小刻みに利用し、通算成績を管理するために、勝ち数、負け数、引き分け数をクッキーに登録して記憶します。

本格的なゲームは才能のあるデザイナーにお任せすることにし、勝ち、負け、分けのボタンをクリックした回数でスコアがカウントされます。

光と影

クッキーの利用で単純な繰り返し操作から解放されたり、サクサク感のあるネット生活が送れるようになりました。

光が差せば影も差します。油断はできません。セキュリティソフトの設定は必須です。いつも自分の情報がどのように扱われているかに気を配ることが大切です。

ここでは勝ち数、負け数、引き分け数をひとくくりにして簡便化しているため、それぞれ999を超えた値では誤動作します。

また、Webサーバーに上げる前はローカル環境で動作を確認しますが、ブラウザChromeなどではローカル環境でのクッキー利用をサポートしていません。ブラウザfirefoxで動作確認しました。

動作サンプル

ゲーム中に急用が発生し、シャットダウンして1時間後に再開した時、過去の成績は通算されて表示されます。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※




感想

クッキーには寿命があり、指定した保存期間が過ぎれば消滅します。こうして、クッキーが際限なく膨張しないように、また適度なセキュリティの保全に貢献しています。

詳しくは解明できていませんが、クッキーはブラウザ単位で制御されるようです。ブラウザAを使ってゲームを起動し、中断後にブラウザBで再開しても直前情報が引き継がれません。

ブラウザが異なったために利用者に付随する情報が継続されないことが不便になることもあり、今後の課題として議論に上がりそうです。

サンプルコード

<!DOCTYPE html>								<!-- controlCookie.html, 2018-06-23 -->
<html>
<body>
<div id="rslt" style="float:left; width:400px; height:30px; font-size:25px; color:sienna; border:0px solid blue;"></div>
<div id="brows" style="float:left;color:magenta;font-weight:bold;"></div>
<Div style="clear:both; width:102px; height:74px; border:0px solid gold; text-align:right;">
<input id="inpt" style="width:100px; height:37px; font-size:14px; background-color:cyan; color:navy;" type="button" onClick="match(0);" value="〇&nbsp;勝ち"/>
<input id="endp" style="width:100px; height:37px; font-size:14px; background-color:lime; color:blue;" type="button" onClick="match(1);" value="&#x2B24;&nbsp;負け"/>
<input id="endp" style="width:100px; height:37px; font-size:14px; background-color:pink; color:blue;" type="button" onClick="match(2);" value="▲&nbsp;分け"/>
</Div><BR><BR><BR>
<script src="https://aidesign.lolipop.jp/wp-content/uploads/2017/11/DevelopingTools2.js" charset="UTF-8"></script>
<script type="text/javascript" charset="Shift_JIS">
const maxAge=2;								//保存期間、2時間
var result=[0, 0, 0];						//2**32/2 -> 2147483648
var bName = getBrowser();
var theName = "c201806221448";				//2018-06-22-14:48

if (!navigator.cookieEnabled) console.log("cookieを使用可能にしてください。");//cookieが使用可能にする
	document.getElementById("brows").innerHTML = "browser: "+BrowsN[bName]+"&emsp;&copy;TacM, 2018 Ver0.01";
	var d = GetCookie( theName );
	if(d==null){							//wwwlllddd
		d = 0;
	}
											//d=1002003;
	result[2] = d % 1000;					//分け数 ddd
	var w = Math.floor(d / 1000);			//wwwlll
	result[1] = w % 1000;					//負け数 lll
	result[0] = Math.floor(w / 1000);		//勝ち数 www
	console.log("GetData", d, result[0], result[1], result[2]);
	document.getElementById("rslt").innerHTML = makeResult();				//〇勝〇敗〇分

function SetCookie( name, data){			//クッキー保存
	var expire = new Date();
	expire.setTime( expire.getTime() + 1000 * 3600 * maxAge );				//2時間
	var newData = name + '=' + data + ';expires=' + expire.toUTCString();
	console.log("SetCookie", name, data, newData);
	document.cookie = newData;
}
function GetCookie( name ){					//クッキーを取得
    var score = null;
    var cookieName = name + '=';
    var allcookies = document.cookie;
    var position = allcookies.indexOf( cookieName );
	console.log("GetCookie, allcookies="+allcookies+" position="+position);
    if( position != -1 ){					//登録されている
        var startIndex = position + cookieName.length;
        var endIndex = allcookies.indexOf( ';', startIndex );
        if( endIndex == -1 )				//単数、複数の処理
        {
            endIndex = allcookies.length;
        }
        score = decodeURIComponent(allcookies.substring(startIndex, endIndex));
    }
	console.log("GetCookie", score);
    return score;
}
function match(n){							//試合のスコアを記録する
	++result[n];							//指定された状態をカウントアップ
	var v = result[0]*1000000 + result[1]*1000 + result[2];	//3個の小データを1つに合成する
	SetCookie(theName, v);
	v = makeResult();						//〇勝〇敗〇分
	document.getElementById("rslt").innerHTML = v;
	console.log("MATCH", v);
}
function makeResult(){						//合成データを3つに分離して表示
	var r = result[0]+'勝'+result[1]+'敗'+result[2]+'分'+' 保存期間'+maxAge+'時間';//〇勝〇敗〇分
	return r;
}
</script>
</body>
</html>

 

画像部分表示3

画像トリミング3

画像部分表示の第3弾です。少しずつ、高級化を図れるようになりました。これまで述べた正常動作条件が必ずしもすべて正しいとは限らないようです。

あとの記事がより信憑性が高いといえます。サイズ不ぞろいの集合画像から必要なものだけ抽出して表示する例を示します。

今回はJavaScriptコードに頼らず、HTMLコードだけで実現しています。


HTMLコード

<html>
<img src="https://aidesign.lolipop.jp/wp-content/uploads/2016/08/0727.png" width="600" height="400">
<hr width="600px" align="left" style="border:0;border-top:4px solid green;">
<DIV style="position:relative; width:600px; height:135px; height:135px; border:1px orange solid; overflow:hidden;">
<img src="https://aidesign.lolipop.jp/wp-content/uploads/2016/08/0727.png" width="600" height="400" style="float:left; position:absolute; left:-496px; top:-169px; clip:rect(169px 586px 303px 496px);">
<img src="https://aidesign.lolipop.jp/wp-content/uploads/2016/08/0727.png" width="600" height="400" style="float:left; position:absolute; left:-50px; top:-320px; clip:rect(320px 230px 390px 140px);">
<img src="https://aidesign.lolipop.jp/wp-content/uploads/2016/08/0727.png" width="600" height="400" style="float:left; position:absolute; left:-235px; top:-125px; clip:rect(125px 510px 180px 415px);">
</DIV>
</html>

杞憂

HTMLコードを見ていただくと、同一画像イメージを4ヶ所で指定しています。恐らく、言語処理系はすでに読み込んだ画像イメージがあれば、重ねて読み込みが行われないように最適化していると信じたいです。もしそうでなければ、このサンプルコードは最悪の見本となるでしょう。その節は反面教師にして決して参考にしないでください。



資源を有効利用するにはJavascriptにおいて var img4=new image();のように読み込んだデータを確保しておいて、他の3ヶ所でも再利用して描画したいものです。

 

雨と詩人

粋なセリフ

雨はほどよく万遍なく降ってくれれば最高の恵みとなりますが、近ごろは温暖化の影響か激しく集中的に降り、土砂崩れや堤防決壊などの災害になることがあります。

雨音はショパンの調べと古人はしゃれたコピーを考えてくれました。雨の降る様は多くの人にとって非日常であり、誰をも詩人にしてくれます。

「雨音はショパンの調べ」の原曲は1980年代、イタリアを含むヨーロッパの国々でヒットチャートの上位に輝き、松任谷由実、小林麻実のコンビによる日本語曲も人気を博しました。

雨にまつわる著作権保護期間終了の童謡:野口雨情作詞・中山晋平作曲《雨降りお月さん》をスクロール画像とともに描画し、雨を楽しむ試みをしました。

縦書きサポートh2vR.CSSとスクロールをサービスするMarquee with CSS二つのプラグインを使用しています。

下の▶開始ボタンをクリックしてください。野口雨情のふるさと情景が左にスクロールします。

動作例

 

画像部分表示2

画像トリミング第2弾

画像の部分表示第2弾です。10枚の動物の画像を2行5列に並べたイメージがあります。これを順に1秒間隔で描画します。

 

作り方は前回、説明してありますがその肝は、親要素にposition:relativeや画像描画サイズとはみ出し部分の表示法を設定し、イメージ画像は孫要素に入れ、子要素のstyle属性にはposition:absoluteで切り抜く画像位置を指定し、widthとheightで幅と高さを設定することです。

動作サンプルコード

<html>
<body>
<img id="uenozoo" src="https://aidesign.lolipop.jp/wp-content/uploads/2018/06/animals10.png" width="385px" height="160px"><BR><BR>
Ver0.01&emsp;<button onclick="if(v==0)setClip();">開始</button> <span id="num" style="color:red">&#x277c;whale</span>
<DIV style="position:relative; width: 150px; height: 150px; overflow:hidden; border:0px solid green;">
<div id="sample" style="position:absolute; left:-300px; top:-150px; width:750px; height:300px;">
<img id="animal" src="https://aidesign.lolipop.jp/wp-content/uploads/2015/08/animal10.png">
</div>
</DIV>
<script type="text/javascript" charset="Shift_JIS">
const animal_10=['squirrel', 'bear', 'racoon-dog', 'lion', 'fox', 'giraffe', 'elephant', 'whale', 'koala', 'hippopotamus'];
var v=0;
function setClip(){																//animal10.png  original-size : 750*300
 document.getElementById( "sample" ).style.left = (-v % 5 * 150) + 'px';
 document.getElementById( "sample" ).style.top = (-Math.floor(v / 5) * 150) + 'px';
 document.getElementById("num").innerHTML="\u24ff\u2776\u2777\u2778\u2779\u277a\u277b\u277c\u277d\u277e".substr(v, 1) + animal_10[v];
 if(++v < 10) setTimeout(setClip, 1000);
 else v = 0;
}
</script>
</body>
</html>

動作例



Ver0.01  ❼whale

 

画像の部分表示

画像トリミング

動物の毛を手入れする人のことをトリマーと言いますが、画像の周囲や映像の前後の不要部分を切り取って、必要な部分だけを抜き出すことをトリミング(trimming)と呼んでいます。

下に示した画像のように、ひとつひとつをパーツとみなし、集合写真のように一枚の画像に納め一括して管理すると画像の枚数を少なくすることができます。

個々の画像はサイズが一定でも異なっていても単独画像のように扱うことができます。よって、ここでは必要な部分だけを切り抜くテクニックについて語ります。

部分表示

大きな画像の一部を切り取って表示するには、CanvasのdrawImage関数が便利です。原画像の一部を拡大・縮小して描画できます。モダンブラウザならばCanvasサポートは万全です。その他にスタイルシート(CSS)のclip機能を使って画像を部分表示することができます。

 

Clipの使い方でHTMLコードをローカル環境ではいい感じの動作が得られたので、公開サーバーにアップロードしてみると毎回、期待を裏切られていました。よくあることですが今回はじっくり腰を据えて調査し、一定の結論が得られたので記録に残すことにしました。

動作環境を特定する

切り抜きをするとき、clip:rectを使うに当たりposition:relativeとposition:absoluteをセットで使います。このpositionプロパティの使い方に問題がありました。今回、部分表示するにはclip:rectを使わずに実現できました。失敗の核心と改良点を示します。

部分表示するとき、親要素にposition:relativeを、子要素にposition:absoluteを指定します。親要素でDIVにより領域を確定し、子要素にIMGで画像を指定した時に誤動作が起きることを突き止めました。

上左図の画像はサイズ100*100の画像を4つ集合したサイズ400*100の画像です。

1つの画像を切り抜いて表示するには親要素に100*100の領域を指定し、子要素に400*100を重ね合わせ、はみ出した3画像ぶん(黄色の背景)をoverflow:hiddenにすれば、1つの画像(ピンクの背景)を切り取ることができます。

重ね合わせると上右図のように子要素の画像が親要素のサイズに合わされてしまうことが誤動作の原因でした。これは試したモダンブラウザに共通して起きました。

子要素でwidthによりサイズを指定しても改善しません。ネット上のサンプルは子要素に画像ではなくテキストを表示する例がほとんどで、画像でない場合、期待した動作になります。


上の図で左のTEST6は誤動作例です。div要素でラップして画像要素を隠蔽すれば正常動作になると考え改訂した例を次に示します。

改良した内容と表示内容

子要素にはdiv要素で領域を確保し、画像は孫要素にしました。そして、absoluteによる働きかけは子要素にしたところ期待した動作が得られました。

たとえば、2番目の画像を切り抜くには、親要素の真上にくるようにleft属性により調整します。そして、overflow:hiddenによりはみ出し部を隠す指定を忘れずに設定します。

 

表示例は1週間の曜日画像を上図のように1つにし、日曜日から順に土曜日までを部分表示するものです。

動作コード

以下のコードで7行目のimg要素を6と8行目のDivにてposition:absoluteが有効に働くようにします。

<!DOCTYPE html> <!-- ※※※※※※※※ TEST7 ※※※※※※※※ -->
<html>
<body>
<button onClick="if(myDay==0)ImageGuide();">開始、ここをクリック</button>  &copy;TacM,2018 Ver0.03<BR>
<DIV style="position:relative; width:120px; height:120px; overflow:hidden; border:0px solid pink;">
<Div id='week0' style="position:absolute; left:0px; top:0px; width:840px; weight:120px;">
<img id='week7' src="https://aidesign.lolipop.jp/wp-content/uploads/2018/06/positionRelative.png">
</Div>
</DIV>
<div id="imagemessage" style="margin-left:130px; margin-top:-110px; font-size:80px; color:green">準備中…</div>
<script type="text/javascript" charset="Shift_JIS">
var myDay=0;
function ImageGuide() {
	document.getElementById('week7').src = "https://aidesign.lolipop.jp/wp-content/uploads/2015/06/week8A.png";
	document.getElementById('week0').style.left = (-myDay*120) + "px";
	document.getElementById('imagemessage').innerHTML = '曜日(' + myDay + ')';
	if(myDay++ < 6)	setTimeout('ImageGuide()', 1000);
	else			myDay=0;
}
</script>
</body>
</html>

 

動作例

  ©TacM,2018 Ver0.03
準備中…

 

さいごに

スタイルシートでpositionを指定するとき、仕様書に沿った使い方をしても期待した動作になりませんでした。試行錯誤の結果、一ひねりして新しいことを追加して動作に漕ぎつけました。

clip:rectを使わずにoverflow:hiddenにより部分表示を実現できたことは大きな発見です。clip:rectを用いて思うように画像トリミングができない場合、当記事が参考になれば幸いです。

 

今日という日

繰り返し行動

6月10日は時の記念日であり、時にまつわる話になります。

人々の生活は繰り返し行動がほとんどです。3度の食事や通学や通勤は7日めぐりです。頭を洗うのは2日おき即ち3日に一度、ガソリンの補充は10日ごとなど等間隔で繰り返すことが多いです。

5日ごとに繰り返す場合は五十日(ごとおび)でおおむね、問題ありませんが2月の場合は2月25日から3月5日までは8日間、うるう年で9日間あり、正確さを欠きます。

こういう場合、元日からの通算日(0~364あるいは365)を求め、その値を5で割り、その剰余が4の場合を該当日にすれば、厳密に5日の繰り返しとすることができます。

割り算では被除数を除数で割って商を求めることが多いが、商よりも剰余が欲しいことがあります。C言語やJavaScriptでは剰余演算子が用意され%で記述されます。

剰余演算子の具体例を示します。10 % 3 → 結果1を返します。

通算日を算出

6日ごとに機械に油をささなければならない場合、カレンダーに〇を付けるときれいに斜めの列ができます。

パソコンやスマホを使いこなせる場合は、元日からの通算日を求め、繰り返し日数で除し剰余を求めれば、正確な繰り返し状況が明らかになります。

算出と利用例

以下に3~6日ごとに繰り返す算出結果を示します。2は通算日が奇数・偶数かで容易にわかり、7は曜日に関連付けることができるので省略しました。

6日ごとに油をさす場合、繰り返し間隔6の下に表示された識別数が0の日に実行します。3個の帽子を持っていて毎日被る帽子を順に変える場合、識別数0~2を帽子A~Cに置き換えます。

《今日という日》©TacM,2018 Ver0.03
準備中 今日は 曜日です 通算日を計算中 繰り返し間隔 3 4 5 6 🚿 🏃 🚮 ⛽ 識別数 2 3 4 5

余談

四つある識別数がすべて0になることがあります。通算日が3, 4, 5, 6の最小公倍数の整数倍(0, 60, 120, 180, 240, 300, 360)になる日です。

年に7回、発生しすでに3回は体験したのであと、4回残っています。次は6月30日です。

それまで毎日、当ページにアクセスしてください。曜日ごとに表示色が変わることがわかります。

メーカーへのお願い

卓上デジタル時計は手ごろな値段で求めることができます。

そこには時刻、日付、曜日、温度、湿度などが表示されますが、これからは元日からの通算日を入れて欲しいものです。

見栄えのいいもの、売れるものもいいけれど、役立つものを作ってください。どんぶり勘定でやり過ごせる時代は終わりました。S社、C社などのメーカーさん、ぜひお願いします。

 

梅雨の季節が到来

梅雨入り2018

6日、気象庁は近畿、東海、関東甲信地方の梅雨入りを発表しました。ほぼ全国的な梅雨の季節がやってきました。雨はほどよく降ってくれたら動植物には最高の恵みです。

いけいけどんどんから離れ、静かに思いめぐらすよい時期です。このあとには、ギトギト、ギラギラの猛暑が待っているのだから!

参照音楽:H/MIX GALLERYから「Breeze2」
【現代語訳】
雨が降ってうっとうしい日に
ただひとり山辺にいると、
気分がふさぎこんでくるよ。
ひさかたの
 あめを ただひと
山辺やまべにをれば
 いぶせかりけり
 万葉集 巻四-七六九 大伴おおとも家持やかもち
©TacM,2018 Ver0.01