月別アーカイブ: 2015年1月

小説執筆支援ソフト

徒然草最近、時代小説を読む機会が多くなっています。戦国時代、元禄、幕末などとテーマを決めずに作者ごとに読んでいます。

出版業界は冬の時代らしく冷え込んでいても、時代小説は根強い人気があるように見受けられます。シリーズもので5冊、10冊と長編ものも多くたまに30冊ほどの文庫本セットも用意されています。

歴史上の人物を題材にした作品は親しみがわき高い人気があります。

mitsuyaseizaemon時間の経過とともに物語が進行する内容ですと新規性を失うことが少ないのですが、1冊完結でシリーズものという形は、いつも同じ登場人物で面白味が薄いです。

勧善懲悪はけっこうながら新鮮味に欠ける4人ほどの仲間で悪人が変わるだけの内容はつまらないです。

池波正太郎、司馬遼太郎、藤沢周平氏らの作品は一つ一つ飽きがこない内容のものが多いです。

小説作成支援ソフトというものが出回っていて、登場人物や立場などを原稿用紙入力すればおおまかなあらすじを作成してくれるソフトウェアがあるそうですが、果たして読者の感動を引きつけるでしょうか。

木で言えば主要な幹を作ってくれて枝葉を作者が付けていく手順で創造的で感動を得る作品が出来上がるでしょうか。こういう助けを借りた小説がベストセラーになる世の中は殺伐としているように感じられます。

図書館には昔ながらの小さな文字サイズの書籍もかなりあり、読むのに難渋しています。しみのついた本や文字サイズの小さい本は今流のサイズの大きい本に切り替わることを願っています。

教育投資と修行

修行と辛抱

土俵にはブームに乗って我も我もと進出することは決して悪いことではありません。行動力のある強者に向いています。過当競争で共倒れもあるでしょうが、自然淘汰という言葉がありますのでそのうち落ち着くでしょう。

最近は長くかかる修行や確実な成功が保証されない教育投資は敬遠される傾向にあります。

海外留学や大学院への進学などもひところほどの熱はないようですが、他の追随を許さない専門知識技能は洋の東西、今昔の時間を超越して高い評価という認識は定着しているものと考えられます。

手に職をつける

手に職親は子女に対し《手に職をつけなさい》といいます。手に職をつけるとは一生の生計を立てるための専門的な技能や知識を習得するということでしょう。

単純な手伝い作業よりも熟練した技能や高度な知識を持つことにより安定した収入を得やすい状況に身を置くということです。

教育投資

はえ縄漁ものを施したり援助することがあります。「食料の乏しい人に一匹の魚を与えれば一日の食とすることができるが、その人に魚を捕る技術を教えれば、一生を通して食べる事が出来る」ということわざがあります。

直接的・短絡的な援助よりも恒久的な支援が大切と諭しています。

いまではいろいろな話題がネット上に飛び交っていますが、上のことわざを初めて知ったのは、Matt pietrek著『Windows95システムプログラミング』を読んだときでした。

米百俵福祉行政が従来型直接支援から自助努力型間接支援へと変わってきたり、長岡藩の支藩三根山藩から百俵の米が贈られとき、長岡藩の大参事小林虎三郎による「百俵の米も、食えばたちまちなくなるが、教育にあてれば明日の一万、百万俵となる」との政策《米百表》が小泉内閣のとき話題になりました。Library

おわりに

図書館の設置が経済に波及するには長い年月がかかります。教育投資の実効はすぐには現れません。当ブログも完成ソフトウェアよりも仕組み作り方に力点を置いています。

そのようなわけで横綱先代若乃花とプロ野球監督鶴岡一人氏の名言の説明は省略させていただきました。

1000人あみだくじ

1000人あみだくじの概要

前回の多人数あみだくじを改良し参加人数を1000人まで増やし再表示機能を追加しました。多人数のくじ結果表示は見にくくなるので、エルドラドの迷路のような表示はされません。一画面に20名ずつ表示させ20名を超える場合は表示をいったん停止して表示されます。

1000人あみだくじの使い方

1000人あみだくじ

スピンボタンを操作してあみだくじ参加人数を3~1000人の範囲で入力し、表示ボタンをクリックします。
②次に《くじ引き結果表示》のメッセージ出力後、OKを指定して順番号=引き当て番号:逆リンク先番号を最大20名ぶん表示させます。
③20名を越す場合は、すべての参加者が表示されるまでOKを指定し続けます。
④同一結果をもう一度表示するには再表示ボタンをクリックし②項から繰り返します。
⑤シャッフルをやり直したり、参加人数を変更するなど異なる条件で新たなあみだくじを作成するには、表示ボタンを押し「処理は終了しています。シャッフルして実行しますか?」の問い合わせにOKを指定します。

用途例

このあみだくじは大勢の人数の順番を決めるときなどに利用されます。50人を10人ずつ5チームに分ける場合にも便利に使えます。まず、50人に0~49のID番号を割り振ります。この行為は必須です。出席順や参加名簿の順番などを用います。

くじを引いてID番号(i)を引き当て番号(n)に変換し、先頭から10名ずつ5チームに分けます。引き当て番号を10で割り、少数点以下を切り捨てると0~4の値(c)が求まります。この値で5チームに分けられます。

c = n / 10;部屋割り表

数学的には除算して余りを求める剰余演算(CやJavaでは%演算子)をするのが一般的ですが、割り算結果の商の値が親しみやすいです。

次の例は20人を4人ずつ2部屋、6人ずつ2部屋に振り分ける例を示します。上から順に4,4,6,6と線引きして部屋決めしています。ID番号13,0,18,5の参加者が部屋番号5010に宿泊するように決定した例です。

注意事項

ビジュアルテキスト①サンプル動作にはHTMLコードを埋め込みますが、編集作業の最終段階で、テキストモードにして挿入しこのモードでファイルを更新します。ビジュアルモードではHTMLのタグコードが自動で付加され、正しい動作にならないことがありました。

②1000人のあみだくじを引く処理はHTML5+canvasを用いているので新しいブラウザを利用してください。

③力量不足とあいまって謎めいた動作になることがありました。ブラウザごとに動作が異なり難解です。canvasをサポートするブラウザは開発途上のこともあり、すべてのブラウザで期待した結果を得ることは至難です。パワーの小さい機種ほど、動作が跳ぶ体験をしました。徐々に解決に向かうことでしょう。

④アラートのメッセージボックス、□このページでこれ以上ダイアログボックスを生成しないの□にチェックマークを入れないでください。

⑤20名以下のあみだくじ結果は表示画面をコピーしてプリントすれば掲示板に貼り付けることができます。せっかくの多人数くじ引きを効果的にするには、くじ引き結果をファイル化したり結果を印刷する機能強化が望ましいです。

サンプルコード

<html>
<body onLoad="init();">
<canvas id="tutorial" width="385" height="405"  style="background-color:lightyellow;"></canvas><BR>&nbsp;&nbsp;
<input type="number" id="spepper" name="spepper" min="3" max="1000" value="20"/>&nbsp;&nbsp;<input type="button" onClick="saveValue('spepper');" value="表示"/>&nbsp;&nbsp;<input type="button" onClick="MouseDown2();" value="再表示"/><BR>
</body>
<head>
<script type="text/javascript">
var p = q = 0;
var NUMBER=0;
var count=0;
var canvas=0;
var ctx;
var img2;
var img3;
var StringColor = ["lightyellow", "blue"];
var person = [];                          // +---------------+--------------+
var member = [];                          // |生成した乱数値 | ID番号      |
                                          // +---------------+--------------+
function init(){                          // when onload, init-top
  img2 = new Image();                     // 新規画像オブジェクト,早めにロードしておく
  img2.src = "http://aidesign.lolipop.jp/wp-content/uploads/2014/09/happy-1.png";
  img3 = new Image();                     // 新規画像オブジェクト,早めにロードしておく
  img3.src = "http://aidesign.lolipop.jp/wp-content/uploads/2014/09/chusenkai.png";
}                                         // when click, init-bottom
function saveValue(target){               // value="表示", 参加人数を設定
  if(NUMBER){
    if(confirm("処理は終了しています。シャッフルして実行しますか?")==true){
       count = 0;
       ResultOut(p, q, 0);
       NUMBER = document.getElementById(target).value;  // onClickの設定値を取り出す
    }
    else return false;
  }
  else NUMBER = document.getElementById(target).value;  // onClickの設定値を取り出す
    canvas = document.getElementById('tutorial');
    ctx = canvas.getContext('2d');
    ctx.fillStyle = "black";              // 参加者の名前を表示
    ctx.font = "normal 14px arial black";
    ctx.fillText("2015,copyright Aidesign", 155, 40);// Version
    ctx.font = "normal 20px arial black";
    ctx.fillText("1000人あみだくじ,V0.49", 155, 20);// Version
    ctx.drawImage(img2, 170,  50, 180, 150);// <<<<< 抽選箱を描画 >>>>>
    ctx.drawImage(img3, 160, 215, 210, 150);// <<<<< うちわを描画 >>>>>
    for(var i=0; i<NUMBER; i++){            // +---------------+--------------+
      w = Math.floor(Math.random() * 65536);// 0~65535までの乱数を発生させる
      person[i] = w * 65536 + i;          // 生成した乱数値とID番号を合成する
    }
    person.length = NUMBER;               // 配列の再利用対策
    person.sort();                        // 小さい順に並び替える
    for(i=0; i<NUMBER; ++i){              // 移動先を把握する
      x = person[i] % 65536;
      member[x] = i;
    }
    report();                             // くじ引き結果を描画する
}
function fmt(n){                          // 右寄せで表示する
  return ("000"+n).slice(-3);
}
function ResultOut(a, b, color){
  for(i=a; i<b; ++i){                     // 並び替えられた結果を表示する
    x = person[i] % 65536;
    v = "=" + fmt(x);
    s = ":" + fmt(member[i]);
    ctx.fillStyle = StringColor[color];   // 参加者の名前を表示
    x = i % 20;
    ctx.fillText(fmt(i)+v+s, 1, 20+20*x); // result
  }
}
function report(){
    alert("《くじ引き結果》\n20名ずつ区切って表示します。");
    while(w = count * 20, w < NUMBER){
      if(q != 0) ResultOut(p, q, 0);
      p = w;
      q = (++count) * 20;
      if(q > NUMBER) q = NUMBER;
      ResultOut(p, q, 1);
      alert(p+" ~ "+(q-1)+" を表示しました。");
    }
}
function MouseDown2(){                    // value="再表示"
  if(NUMBER==0) alert("参加人数が設定されておりません。");
  else{
    count = 0;
    report();                             // くじ引き結果を描画する
  }
}
</script>
</head>
</html>

サンプル動作


       


多人数あみだくじ

多人数あみだくじの仕組み

以前に3~16人のあみだくじを《あみだくじを引く》で発表しました。紙にくじを書いて線をなぞって引き当て先を決定する様子を描画する方式でした。今回は99人までの多人数であり、多対多の対応づけを決定し表示します。記述言語はJavaScriptで、参加人数ぶんのID番号に、乱数による固有値を対応づけ小さい順に並べ替えて人為的な操作と再現性を排除しています。

2次元配列とsort

トランプをシャッフルしたり、福引きの抽選玉をかき混ぜる処理をコンピュータで行うとき、乱数を使うことがあります。オリジナルデータに乱数で発生させた固有値を付加し多次元配列を形成します。

配列は2次元の場合が多いが並べ替える場合は工夫が必要です。2次元配列の並べ替えには《多次元配列を特定の深さにある要素でsortしたい》が参考になります。1次元配列でも可能であり以下に例を示します。

JavaScript変数は32ビットや64ビットであることが多く、1つの変数で2つの用途に使うことも可能です。ホテルの部屋番号を5012のように名づけ、先頭の5は階数を、次の012でその階の通算部屋番号を意味することに似ています。

多人数あみだくじから少し脱線しますが、このような部屋番号のコード化は1階から最上階まで一律に番号を割り振るよりも利便性が高いといえます。

上図のように生成した乱数値を上位16ビットに、ID番号を下位16ビットにすると並べ替えがperson.sort();のようにたった1行のコードで済みます。驚くべき簡便さです。

並べ替えはsort()関数に引数を省略しているので文字型として比較されます。ID番号を取り出すには65536の剰余を求めることによって得られます。

乱数を付加する場合、大小関係を持たせるためにID番号の先頭に付加することが肝要です。

サンプルコード

<html>
<body>
  <input type="number" id="stepper1" name="stepper1" min="3" max="99" value="20"/>
  <input type="button" onClick="saveValue('stepper1')" value="参加人数を設定し、このボタンをクリックする" />
</body>
<head>
<script type="text/javascript">
function saveValue(target){               // 多人数あみだくじ-OK3.html
  var NUMBER = document.getElementById(target).value;  // onClickの設定値を取り出す
  alert("《多人数あみだくじ》Version0.96\n参加人数="+NUMBER);
  var person = [];                        // +---------------+--------------+
  var member = [];                        // |生成した乱数値 | ID番号      |
  for(var i=0; i<NUMBER; i++){            // +---------------+--------------+
    w = Math.floor(Math.random()*65536);  // 0~65535までの乱数を発生させる
    person[i] = w * 65536 + i;            // 生成した乱数値とID番号を合成する
  }
  person.sort();                          // 小さい順に並び替える
  for(i=0; i<NUMBER; ++i){                // 移動先を把握する
    x = person[i] % 65536;
    member[x] = i;
  }
  for(i=0; i<NUMBER; ++i){                // 並び替えられた結果を表示する
    x = person[i] % 65536;
    v = "="+fmt(x);
    s = ":"+fmt(member[i]);
    document.write(fmt(i)+v+s+"<BR>");
  }
}
function fmt(n){                          // 右寄せで表示する
  return ("00"+n).slice(-2);
}
</script>
</head>
</html>

サンプルコードの解説

①11~12行で配列を定義する。
②13~16で乱数固有値とID番号を求める。
③17行で小さい順に並べ替える。
④18~21行で元のID番号の移動先を求め、逆リンクでたどれるように。
⑤22~27行であみだくじの結果を表示する。
⑥29~31行は右寄せで表示する関数。

雑感

くじの参加人数は3~99ですが、もっと多人数も可能ですのでサンプルコードを変更してください。ポイントは乱数の発生と並べ替えです。プログラミングの初心者には、今回のプログラムコードでホテルの部屋番号のように複数用途の使い方が参考になることでしょう。

使い方と表示結果の説明

直接、キー入力あるいは上下ボタンで参加人数を設定しスタートボタンをクリックします。表示結果で最初の番号は順番号で次は引き当てられた番号、最後の番号は元の番号の移動先です。

サンプル動作



クリエイティブなこと

クリエイティブ(Creative)とは創造性、創造的、独創性、独創的という意味と考えます。

邪馬台国民族を農耕民族と狩猟民族と大きな括りで考えることがあります。

農耕民族狩猟民族に較べ独創性は低いのでしょうか。「隣が種を蒔けば自分も蒔く」などと自虐的な言い方があるので、創造性が低いように感じることがあります。農業は土壌改良や気候に左右されない作物品種の発見など高度な知識が必要な面があるので決してそのような分類はできないでしょう。

培養土農耕民族・狩猟民族と固定化するのでなく、定住することなく狩猟や採集を続け、食料の減少とともに移動するのが狩猟民族で、文化が進化し田畑を耕し牧畜を進め定住化を図り、計画的に魚類や動物を食料とする次の段階の民族が農耕民族と言えるのではないだろうか。

つぎに民族性に絡め独創性について考えれば、異なる考えを持つ者の逃げ場所の少ない島国は独創性を育むには不利のようです。国土が広ければ様々な規制に押さえつけられることも少ないでしょう。わが国では車検制度保険制度が確立され、自作の車で公道を走ることはできないが広大な私有地ならば問題ないでしょう。

外国には山手線の内側ほどの土地所有者は大勢います。そこでは通販で手に入れたヘリコプターを自分で組み立てて操縦することも可能です。たき火禁止

近年、わが国ではダイオキシン発生を考慮して多くの自治体でたき火禁止条例が発布されタキビもままならない現状です。やることなすこと窮屈なことばかりです。

かつてステレオセットなどの自作ブームがありましたが、今では買った方がはるかに安い場合が多いです。自作するのはまた別の楽しみがあるのです。

創造的ものづくり和歌が好きで万葉集、勅撰和歌集、古今和歌集に親しむ方もおれば、自分で花鳥風月を詠んでみたいという創作意欲を持つ方もいます。

それと同様に、ものづくりで独創的な作品を残したいという創作熱に駆られる人も出てきます。

ものづくり筆耕は既存システムには飽き飽きした人々への語りかけです。よりよい生活の実現に創造性を活用したいと考えます。

万葉集から冬の歌

真弓1

 真弓

弓束まゆみ《檀・真弓》を謳った歌。ニシキギ(錦木)科の落葉小高木。この木で弓を作ったので真弓と名づけられました。

弓束(ゆつか、ゆづか)は弓を射るときに持つところです。ここに桜の樹皮や革を巻きつけて握りやすくして弓が仕上がります。

少女から乙女そして大人の女性になるまでは他人には知られず自分の想いだけであるようにと願っているようです。

いつの世も壇(まゆみ、だん)は美しさの象徴です。映画・武士の一分のヒロイン役、壇れいさんの清楚な姿が思い起こされます。

 

 

 

 

調和のある生活

帽子や洋服が超高級でおしゃれでも靴や下着がぼろぼろだったり不潔では不釣合いです。訪問先の玄関がピカピカでもトイレが汚れていてはイマイチです。

yamasato似た言葉として調和のある生活、バランス感覚、足るを知る、分相応、晴耕雨読、自然との共生、持続可能な発展、サスティナブル、ゆとりある生活などがあります。2015年の成人の日まぢかに少し考えてみました。

時代の変化に対応できず旧態依然のありさまはいたるところで見受けられます。技術の進歩、法律改正等についていかないと奇妙なことになります。無駄遣いだったり我慢を強いられたりしています。そのような例を以下に示します。

ecotech①電力のアンペア契約、かつては大家族であった。それぞれに独立して一人暮らしになったが大アンペア契約のままで割高な料金体系になっている。

②法律改正で賃貸の黒電話に代わり市販の電話機を使っているのに機器使用料を払い続けている。

③インターネットの始まり時に1階、2階で有線LANを使い始め、回線使用料を払い続けている。外からすぐに一か所の電話線引き込みならば回線使用料は発生しないはLANず。そこにルータを置き4台ほどの家庭内無線LANの構築は基本設定で可能。

古い冷蔵庫を使い続けるよりも省エネタイプに買い替えたほうが得策に似ています。

④大家族と小家族で町内会費の負担が同じは不公平。一人暮らしや高齢者だけの家族の費用免除を考慮する要あり。掃除当番の免除は多い。

一人暮らしの高齢者が高級なハンカチを持っていたが冠婚葬祭のお返しものでした。

⑤町内会への参加、脱会は自由ながら街灯電気代の町内会だけの負担は不公平。極く少額ながら応分の負担は当然。

Yubinkyoku⑥車社会の中、駐車場スペースを持たない郵便局が多すぎる。特定郵便局から引き継がれた郵便局でこの傾向が強く、かつての経営者の車が置いてあるのに利用者スペースは貧弱なことが多い。

⑦ほとんど使われないか稼働率の低い公共施設があまりにも多い。

歩ける範囲で総合健康福祉センター、市立体育館、生活改善センター、集落センター、生涯学習センター、交流センター、農民センター、集落田園都市センター、市立図書館があります。

logo2文化的に恵まれているといえばかっこいいが固定資産税、ガス・電気・水道代の支払いに四苦八苦しているところも多い。集落センターは車社会になる前のかつての役所施設の一部であり駐車場スペースがないので、集会、講習、投票所にも利用可能なのにほとんど利用されていません。持ち回り当番として掃除に参加したのみです。

⑧自然塾・ふれあいセンターも稼働率が高いとは言えない。

⑨町はずれながら2面ほどの広さの野球場、サッカー場が使われた形跡がない。

⑩パソコンの減少、スマホ・タブレットの右肩上がりの中、CD、DVDによる画像配布は時代遅れ。

クラウドにアップロードすればディスクドライブがなくてもPC、スマホ、タブレットで見られます。アップロードは無料だからDVDメディア代、長時間かかるDVDに焼く時間の節約になります。メールによる閲覧先アドレスの一斉送信で郵送の手間が省けることが大きな改善です。

LED-LIGHT

図書館の5つの蛍光灯は2つ間引かれ3つになったりして予算減に対応していますが、為政者の定数削減は微々たるものです。

変化する外界の状況に大胆に対応しないと臍を噛むことになりそうです。

稼働率の低い施設は他の施設に併合するなどの改善策があってもよいでしょう。このままでは故障中のエアコン、動いてない時計、割れたガラス窓、水の出ないトイレなどが増えそうです。

障子の補修

かつて傘や靴の修繕店がスーパーの片隅にありましたが高度成長とともに消え去りました。割れたガラス、破れた障子を補修して使っていた時代もありました。

人口、予算が減少し、多様化する人々の好みに対応するには高度な知恵が要求され英知の結集が望まれます。

電子式福引き管理ソフト改2

ご挨拶

新春のお祝いを申し上げます。未4

ひつじ年の幕開け作品は新春福引セールを型どったシナリオの原型をお届けします。

福引きの概要

福引きは、当たり玉を入れたガラガラと呼ばれる抽選器を回し、出てきた玉の色で識別される当たり等賞の景品を配って商店街の販売促進の一環としたり祭りの出し物として、くじ引きを楽しみ催し物を盛り上げる遊び心満載の遊戯的な行為です。

作品の概要

この作品は電子式抽選器の作り方の一例です。ガラガラ抽選器は手回ししてころあいを見て回転を止め当たり玉を取り出します。このふくびきモードのほか、当たり玉の数を決めたCHUSENKIり残量を表示する設定モード、操作が20秒間途切れたときにキャンペーンメッセージを表示する案内モードの3つが存在します。

ガラガラを回転させ中の玉をシャッフルし公平を期する行為は乱数を発生させて玉の並びをランダム化します。ガラガラの回転、当たりくじの決定、ファンファーレの鳴動などはコンピュータが処理するので電子式と呼称されます。

操作は方向キー、マウス、タッチに対応しています。ほとんどのパソコン、スマホ、タブレット端末で動作します。ブラウザはGoogle Chrome、FireFox、IEの順に相性がいいようです。

取扱い方法

福引きを動作させるには、等賞ごとの当たり数を決め、玉をガラガラに入れる操作として設定処理をしますが、ここでは特賞から4等まですでに準備されています。詳しくは電子式福引き管理ソフト封切をご覧ください。

がらがらこの記事をロードするとふくびきモードになっています。→キーを押せばガラガラは回転し、再び→キーを押すとガラガラは停止し、当たり玉が飛び出してきます。ふくびきモードで20秒間、なんの操作もないときには案内モードになり、営業案内が展開されます。案内モードは→キーの押下で終了し、ふくびきモードに戻ります。

4つの方向キーのうち、→キーは開始・停止のために使用されますが、設定モードを起動するには↓←↑キーが使われます。便宜的に方向キーを→:0,↓:1,←:2,↑:3と名付けます。

設定モードに移行するには、ガラガラが停止している状態で123132(↓←↑↓↑←)と押下します。設定モードを終了させふくびきモードに戻すには→キーを押下します。このほかにも困った時には→キーを押しましょう。

雑感

オンラインアプリは複雑な操作に素早く対応することが求められます。ガラガラの回転を止めるに際し、絵柄が常に上向きになるように止めなければなりませんが、ストップ指示を受け付けたことをすぐに音で知らせ、所定の位置に回転したときに停止させる処理に労力を注ぎました。

まとめ

BigDataこのWebアプリは電子式で福引きを実現させるひとつの例です。ビッグデータと呼ばれる情報がさまざまに利用されようとしています。訪問時間はシステムから、おおまかな年齢と性別はカメラから入手可能です。

電子式福引き管理ソフトは既存のシステムでは実現できない大きな可能性を秘めています。次世代のマーケッティングのヒントになれば幸いです。

WordPressをカスタマイズし、特定記事名の場合はウィジェット欄への表示を抑止しましたがまだ有効利用にはなっていません。これからの課題です。

サンプル動作

ElectronicLottery

→(右方向キー)の押下で開始・停止します。[KY-2H4版]