2021年05月16日

欧州ではAI顔認識カメラが街中に張り巡らされている

欧州連合(EU)が“裏システム”の存在を公式に認めました。

(前略)欧州連合(EU)欧州委員会は(四月)二十一日、人工知能(AI)利用を巡るEU初の規制案を発表した。(中略)公の場での顔認証システムも厳しく規制し、捜査当局によるリアルタイムの利用を原則禁止した。(中略)顔認証など遠隔での生体認証システムの捜査利用は「行方不明の子供の捜索」「特定の差し迫ったテロの阻止」などを禁止の例外とした。(後略)

〈東京新聞 4月23日 朝刊 7面〉

人権や民主主義に配慮して「公の場での顔認証システム」の
規制をするフリをしながら、シレッと“裏システム”の合法
化を忍び込ませて来ました。

「行方不明の子供の捜索」や「特定の差し迫ったテロの阻止」
が出来ると言う事は、捜査当局に接続されたAI顔認識カメラ
(=遠隔での生体認証システム)が街中に張り巡らされている
と言う事です。この事実を欧州市民は知っていて、なおかつ
市民権を得ていると言う事なのでしょうか。

日本と欧州では犯罪の発生状況等、市民が置かれている状況
が異なり、日本人の感覚と欧州市民の感覚がまったく同じで
あるとは言えない状況があるのかも知れません。

それにしても、遠隔での生体認証システムが街中に張り巡ら
されている事は、欧州市民が望んだ事だったのでしょうか。

 
続きを読む...

posted by miraclestar at 02:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月08日

隠蔽された独裁権力

国会は「国権の最高機関」であると、憲法に謳われています。

では、与野党の国会議員が、ある議題について意見の一致が
あり、超党派の議連をつくったとするならば、それが内政の
課題である限り、動かせない事は何一つ無い、はずです。

在日韓国人元BC級戦犯の李鶴来(イハンネ)さんが先月(三月)、九十六年の生涯を閉じた。日本軍の捕虜監視員に動員されて戦犯として裁かれたうえ、戦後は「外国人」扱いされて援護の対象外に。(中略)

(四月)一日、東京・永田町の衆院第二議員会館で開かれた集会。李さんが会長を務めた在日韓国・朝鮮人元BC級戦犯関係者でつくる「同進会」の副会長で、父親が戦犯だった朴来洪(パクネホン)さん(六五)が哀悼の言葉を述べた。同進会の元戦犯で最後の一人だった李さんは先月(三月)(中略)二十八日に帰らぬ人となった。集会は同進会結成六十六年を記念し、元戦犯の問題解決を進める救済法制定のために企画されたが、急逝した李さんの追悼会のようになった。(中略)

李さん(は)(中略)日本支配下の朝鮮半島で生まれ、一九四二年、十七歳のときに日本軍の捕虜監視員としてタイに渡った。当時の日本総督府は朝鮮や台湾の青年を動員し、約三千人がアジアの戦場に送られた。泰緬鉄道の建設現場に配属された李さんは英国や豪州の捕虜を監視したが、二年の契約が過ぎても帰らせてもらえず、終戦を迎えた。

待っていたのは連合国による戦犯法廷。捕虜虐待の罪で死刑判決を言い渡された。約八カ月、シンガポールの刑務所で死刑囚として過ごした後に減刑され、五一年に東京の巣鴨プリズンに移された。翌五二年、サンフランシスコ平和条約の発効で、李さんら朝鮮半島出身者らは日本国籍を失った。

日本人として戦争の罪を裁かれながら、「外国人」とみなされて日本政府の援護から排除される―。(中略)差別的な扱いを許せず、五五年、仲間と「韓国出身戦犯者・同進会」を設立。(中略)

生前、李さんは「日本人戦犯の場合は自分の国のために死んでいくんだとまだ思えるのだろうが、韓国人の場合はそういう気持ちさえ持てなかった。だれのために、何のために死ななければならなかったのか」と語っていた。(中略)

(超党派の議連)は特別給付金を支給する法案をまとめたが、成立していない。(後略)


〈東京新聞 4月2日 朝刊 20面〉

記事にはありませんが、件の集会には与野党の有名どころが
一通り参加していた様です。与野党の国会議員が、この議題
について意見の一致があり、超党派の議連をつくったのにも
かかわらず、事態は動かず、当事者の死を迎えると言う結末
に至ってしまったのです。これは明らかに内政の課題である
にもかかわらず、事態は動かなかったのです。

国会は「国権の最高機関」である、との謳い文句は嘘であり、
茶番なのです。では、国会が「国権の最高機関」ではないと
するならば、国会の上に君臨する「隠蔽された独裁権力」は
どこで生まれ、どの様にして受け継がれて来たのでしょうか。

 
posted by miraclestar at 20:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月07日

謎の動画、一本2500万円(最大)也

最近、動画投稿サイトで、目的が分からない謎の動画が投稿
されているのを数多く見かけるようになりました。その多く
は五分強の長さで、五分を切るものは無い様です。タイトル
にある共通の文字列が含まれているのが特徴です。文字列は
アルファベット1文字と7文字の組み合わせで、有りそうな英
単語を当てはめてみると「ライブ・オン・デマンドのライブ」
であるかのように納得させられてしまいそうになります。

しかしながら、これこそ巧妙に練られた戦略が狙った通りの
誤認と言えるでしょう。これ、何だかご存知ですか。

動画の説明欄には、目的の説明等無く、ある共通の文字列が
何を意味するのか理解出来るWebサイトへのリンクも見当たり
ません。動画に関連するWebサイトを一通り見まわしてみても
遂に説明が見当たらなかった為、意を決して、件の文字列を
検索にかけてみたところ、驚きの事実が分かりました。

この動画を投稿すると、何と国から最大2500万円の給付金が
貰えると言うのです。ある共通の文字列はこの給付金制度の
名称でした。いわゆる新型コロナウイルス関連の給付金です。

その250分の1の支援さえ充分に届かない者がいる中、天と地
程の格差がある世界が広がっていた様です。しかも一見した
だけではそれと分からない様な名称迄考えられていた様です。

いまのところ情報が不足している為、この制度の善し悪しに
ついて直接言及する事は控えますが、実態としてこの給付金
を誰がどれだけ受け取っているのか、制度が始まって充分な
時間も経ち、統計を出す事が出来るだけの実績が、公開情報
として積み上がっているのではないでしょうか。

 
続きを読む...

posted by miraclestar at 21:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月05日

「こども庁」が出来たら何が起きるのか

自民党が新たな利権の創出に向けて早くも次の動きを始めて
いる様です。もちろん、推進者として役割を演じている議員
にとっては、それなりの意義を感じて取り組んでいる事なの
かも知れませんが、これを機会と捉えて動向を見守っている
利権共同体の構成員達は違う事を考えているでしょう。

自民党が目論む「こども庁」は、新たな自民党の利権となる
事は間違いありません。大義名分は後付けでしかありません。

ところで、ここ迄は、自民党がこれ迄行ってきた行動の前例
から、容易に類推出来る事だと思うのですが、断言出来る人
はあまり多くないのではないかと思います。「こども庁」が
出来たとして、様々な政策が実行に移されたとして、実行を
担う民間人や民間企業の参加があったとして、しばらくして
から、実行を担う民間人や民間企業が利権共同体の構成員で
ある事が明らかとなり、何かしらの告発で癒着が裏付けられ
「やっぱり自民党の利権だったね」と言う事が確認出来る様
になる、と言う流れになるのではないでしょうか。ここ迄の
結果を事前に断言出来る様になるには、どの様にしてこれが
自民党の利権になるのか、その仕組みを理解し説明出来る様
になる必要があると思います。

では、「こども庁」が一体どう言う仕組みで自民党の利権と
なるのでしょうか。「こども庁」が出来たら何が起きるのか、
想像を膨らませてみましょう。

 
続きを読む...

posted by miraclestar at 23:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月01日

10万円ではじめるプログラミング講座 8

全ての国民に10万円が行きわたると言う事で、様々な事情の
方がいらっしゃるかと思いますが、それが出来る人に向けて、
Excelを活用したプログラミング講座を執筆する事にしました。
「ゲームをやった時間を記録して集計出来るプログラム」を
自分で作れるようになる事を目標にしています。

前回8月9日の更新から随分時間が経ってしまいました。当時、
AI顔認識カメラと赤外線カメラの増加速度が頂点に向かって
上昇し続けており、更新作業を中断せざるを得ませんでした。

状況の変化が多少あった事と、GW期間中に巣籠りをしている
皆様に少しでも暇つぶしを提供出来ればと思い、続きを更新
する事に決めました。

前回の作業内容を忘れてしまったと言う方は、復習を兼ねて、
前回の作業を最初からやり直してみると良いかも知れません。
講座は、前回の作業内容の続きから始まります。

前回つくったプログラムが何だったか、お分かり頂けました
でしょうか。誰もが知っている“あれ”です。ところでもし、
ご自身が“あれ”をお持ちでしたら、“あれ”を取り出して、
前回つくったプログラムと、比べてみてください。

何か違いは見当たりますか。

前回つくったプログラムは、計算して答えを出した後、その
答えを使って、続きの計算をする事が出来ない事に気付くの
ではないかと思います。

例えば、"1" "+" "1" "="と入力して 2 が表示された後に"+"
"1" "="を入力して 3 を計算させる事が出来ません。改めて
"2" "+" "1" "="と入力しなければならないのです。

また、いつも使い慣れている“あれ”ならば"1" "+" "2" "="
と入力して 3 が表示された後に"="を押せば、"3+2="の結果
を計算させる事が出来るのに、前回つくったプログラムには
その機能がありません。

機種によって違いがある様ですが、“あれ”には"1" "+" "2"
"="と入力して 3 が表示された後に"4" "="を押せば、"4+2="
の結果を計算させる機能があるのに、これもありません。

前回つくったプログラムを開きます。ファイル名は
「den-dentaku.xlsm / den-dentaku.xls」として
保存したと思います。

ファイルを開くと、まっさらなExcelブックに「セキュリティ
の警告 マクロが無効にされました。」と言う表示(表現は
バージョンによって違うかも知れません)が出現している事
が確認出来ると思います。忘れずマクロを有効に設定します。

プログラムの改造を始める前に、前回つくった内容を消して
しまう事のない様、ファイル名を変えておきましょう。

ツールバー等にある「名前を付けて保存」をクリックします。

ファイル名は「den-dentaku2.xlsm / den-dentaku2.xls」等
が良いでしょう。

ファイルを開いた状態で、「Alt+F11」を押します。
「Microsoft Visual Basic」の画面が出て来ると思います。
そのまま「F7」を押して、「コード」画面を開きます。

書き換えが必要なのは、ExecuteCalc関数とその関連部分です。

enmEnzanHoの定義を書き換えます。

「コード」の先頭にカーソルを持っていき(コンボボックス
から (General)(Declarations) を選ぶ操作でも良い)、以下
のコードを探します。

Enum enmEnzanHo
enzNoTouch = 0 'NoTouch 何もしない
enzN1eqN1opN2 = 1 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
enzKeqN1opN2 = 2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
End Enum

これを次の様に書き換えます。

Enum enmEnzanHo
enzNoTouch = 0 'NoTouch 何もしない
enzN1eqN1opN2 = 1 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
enzKeqN1opN2 = 2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
enzKeqKopN2 = 3 'Kekka = Kekka (+-*/) Nyuryoku2
enzN1eqK = 4 'Nyuryoku1 = Kekka
End Enum

enzKeqN1opN2 と enzN1eqK が新たに書き加えられた定義です。

ExecuteCalc関数を書き換えます。

以下に、前回の講座でも示したExecuteCalc関数の骨格を示し
ます。コードは同じですが、コメントが若干異なります。

Private Function ExecuteCalc(intEnzanshi As Integer) As Boolean

Dim EnzanHo As enmEnzanHo

If cmJoutai <= cmAllClear Then '☆1
ExecuteCalc = False
Exit Function
End If

If strNyuryoku = "" Then
ExecuteCalc = False
Exit Function
End If

'strEnzanshi 数値の前に押した演算子を記憶(+-*/)
'intEnzanshi 今回の呼出で押した演算子キー(+-*/=)

'Joutai strEnz intEnz EnzHo
'cmN1 "" "=" Exit 1◆ △ ×無効操作
'cmN1 "" "+-*/" NoTouch  1◆ ▽ ○通常操作
'cmN1 "+-*/" "=" K =N1opN2 1◇ △ △=の後AC押さずに数値入力、続いて= ☆8
'cmN1 "+-*/" "+-*/" NoTouch 1◇ ▽ △=の後AC押さずに数値入力、続いて+-*/
'cmN2 "" 2◆   ―有り得ない
'cmN2 "+-*/" "=" K =N1opN2 2◇ △ ○通常操作
'cmN2 "+-*/" "+-*/" N1=N1opN2 2◇ ▽ ○通常操作
'cmK "" 3◆   ―有り得ない
'cmK "+-*/" "=" K =K opN2 3◇ △ △=の後すぐに= ☆8
'cmK "+-*/" "+-*/" N1=K 3◇ ▽ △=の後すぐに+-*/ ☆8

ExecuteCalc = True '☆2
strError = ""
EnzanHo = enzNoTouch

Select Case cmJoutai
Case cmNyuryoku1 '演算子の左の数字を入力
'☆3
Case cmNyuryoku2 '演算子の右の数字を入力
'☆4
Case cmKekka '計算結果が表示されている
'☆5
End Select

Select Case EnzanHo
Case enzNoTouch 'NoTouch 何もしない

Case enzN1eqN1opN2, enzKeqN1opN2
'☆6

End Select

If ExecuteCalc Then '☆7
Select Case intEnzanshi
Case Asc("+"), Asc("-"), Asc("*"), Asc("/") '+-*/
strEnzanshi = Chr(intEnzanshi) '数値の前に押した演算子を記憶(+-*/)
Case Asc("="), vbKeyReturn '=

End Select
End If
End Function

☆8が書き換えられたコメントです。

ExecuteCalc 関数内、☆1〜☆7について説明します。

☆1、☆2、☆7は、前回の講座で示した解説と同じです。

☆3には、以下のコードを書き加えます。

If strEnzanshi = "" Then
'1◆

If intEnzanshi = Asc("=") Then
'1◆ △ ×無効操作
ExecuteCalc = False
Exit Function
End If
Else
'1◇
If intEnzanshi = Asc("=") Then
'1◇ △ =の後AC押さずに数値入力、続いて=
EnzanHo = enzKeqN1opN2
Else
'1◇ ▽ =の後AC押さずに数値入力
'EnzanHo = enzNoTouch
'数値入力をして"+-*/"押した
'⇒AC押した事にして動作継続
End If
End If

dblNyuryoku1 = ConvertNyuryoku()

太字が今回追加したコードです。

cmAllClearからcmNyuryoku1に遷移した場合、strEnzanshiは
空("")です。cmKekkaから遷移した場合は、strEnzanshiには
演算子("+-*/")が代入されています。前回の講座では、二者
の場合分けをコードに反映しませんでしたが、今回は、後者
について処理するコードを追加しました。

cmKekkaからcmNyuryoku1に遷移した場合、演算子の右の数字
は、dblNyuryoku2に記憶されている状態です。この状態で"="
を押す操作があった場合は、dblNyuryoku1に入力した数値を
記憶して、dblKekkaにdblNyuryoku1と「dblNyuryoku2に記憶
されている数値」を使って演算した結果を代入します。一方、
演算子キー("+-*/")を押す操作があった場合はdblNyuryoku1
に入力した数値を記憶して処理を続行可能にします。

☆4には、以下のコードを書き加えます。

dblNyuryoku2 = ConvertNyuryoku()
If strEnzanshi = "" Then
'2◆

Else
'2◇

If intEnzanshi = Asc("=") Then
'2◇ △ ○通常操作
EnzanHo = enzKeqN1opN2
Else
'2◇ ▽ ○通常操作
EnzanHo = enzN1eqN1opN2
End If
End If

太字が今回追加したコードです。

ここでstrEnzanshiについて、確認して頂きたい事があります。

strEnzanshiを選択状態にしてから、「Ctrl+F」キーを押して
みてください。「検索」ウインドウを表示されると思います。
このウインドウを使って、コード内でstrEnzanshiが使われて
いる場所を確認する事が出来ます。

strEnzanshiに値を代入するコードは、ふたつしか無いと言う
事が分かるのではないかと思います。ひとつは、ExecuteCalc
関数の末端部、そしてもうひとつは、ProcessKeyPress関数の
"A", "a"キーを押したときに実行されるコードだと思います。

この事から、strEnzanshiが空("")となるのは、cmAllClearに
遷移したときに限られる事が分かります。

続いてcmNyuryoku2について、確認して頂きたい事があります。

cmNyuryoku2を選択状態にしてから、「Ctrl+F」キーを押して
みてください。「検索」ウインドウを表示されると思います。

cmJoutaiにcmNyuryoku2を代入するコードは、ひとつしか無い
と言う事が分かるのではないかと思います。

これらの事から、cmNyuryoku2に遷移する前にはExecuteCalc
関数がintEnzanshiに"+-*/"のうちどれかが代入された状態で
実行されており、しかも必ず処理が成功している事が分かり
ます。この事からcmNyuryoku2に遷移したとき、strEnzanshi
には、必ず演算子("+-*/")が代入されている事が分かります。

前回の講座では、分量が多かった事もあり、strEnzanshiが空
("")となる事は有り得ないとして、strEnzanshiの場合分けを
コードに反映しませんでしたが、今回追加しました。

例えば、将来の改造で前提が崩れる事は十分有り得る事です。

☆5には、以下のコードを書き加えます。

If strEnzanshi = "" Then
'3◆

Else
'3◇
If intEnzanshi = Asc("=") Then
'3◇ △ =の後すぐに=
EnzanHo = enzKeqKopN2
Else
'3◇ ▽ =の後すぐに+-*/
EnzanHo = enzN1eqK
End If
End If


☆6には、以下のコードを書き加えます。

If strEnzanshi = "/" Then
If dblNyuryoku2 = 0 Then
ExecuteCalc = False
strError = "0で除算できません"
Exit Function
End If
End If

Select Case strEnzanshi
Case "" '◆
'EnzanHo = enzNoTouch となり、ここのコードは実行されない

Case "+" '◇+ △▽
Select Case EnzanHo
Case enzN1eqN1opN2 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
dblNyuryoku1 = dblNyuryoku1 + dblNyuryoku2
Case enzKeqN1opN2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
dblKekka = dblNyuryoku1 + dblNyuryoku2
Case enzKeqKopN2 'Kekka = Kekka (+-*/) Nyuryoku2
dblKekka = dblKekka + dblNyuryoku2

End Select

Case "-" '◇- △▽
Select Case EnzanHo
Case enzN1eqN1opN2 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
dblNyuryoku1 = dblNyuryoku1 - dblNyuryoku2
Case enzKeqN1opN2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
dblKekka = dblNyuryoku1 - dblNyuryoku2
Case enzKeqKopN2 'Kekka = Kekka (+-*/) Nyuryoku2
dblKekka = dblKekka - dblNyuryoku2

End Select

Case "*" '◇* △▽
Select Case EnzanHo
Case enzN1eqN1opN2 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
dblNyuryoku1 = dblNyuryoku1 * dblNyuryoku2
Case enzKeqN1opN2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
dblKekka = dblNyuryoku1 * dblNyuryoku2
Case enzKeqKopN2 'Kekka = Kekka (+-*/) Nyuryoku2
dblKekka = dblKekka * dblNyuryoku2

End Select

Case "/" '◇/ △▽
Select Case EnzanHo
Case enzN1eqN1opN2 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
dblNyuryoku1 = dblNyuryoku1 / dblNyuryoku2
Case enzKeqN1opN2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
dblKekka = dblNyuryoku1 / dblNyuryoku2
Case enzKeqKopN2 'Kekka = Kekka (+-*/) Nyuryoku2
dblKekka = dblKekka / dblNyuryoku2

End Select

End Select

Case enzN1eqK 'Nyuryoku1 = Kekka
dblNyuryoku1 = dblKekka


太字が今回追加したコードです。

「F5」キーを押して動作確認してみましょう。



動かない、ですね。

忘れないうちに、ここまでつくって来たプログラムを保存し
ましょう。ツールバー等にある「保存」をクリックします。

ここで一息つきましょう。ここから先は少し長くなります。



今回追加したコードが、正しく実行されているか、確かめて
みましょう。☆3で追加したコードを確認します。

If strEnzanshi = "" Then
'1◆

If intEnzanshi = Asc("=") Then
'1◆ △ ×無効操作
ExecuteCalc = False
Exit Function
End If
Else
'1◇
● If intEnzanshi = Asc("=") Then
'1◇ △ =の後AC押さずに数値入力、続いて=
EnzanHo = enzKeqN1opN2
Else
'1◇ ▽ =の後AC押さずに数値入力
'EnzanHo = enzNoTouch
'数値入力をして"+-*/"押した
'⇒AC押した事にして動作継続
End If
End If

dblNyuryoku1 = ConvertNyuryoku()

●で示した行にカーソルをもっていき「F9」キーを押します。
行全体が赤く反転された状態に変化すると思います。

「F5」キーを押します。

"1" "+" "2" "="キーを順番に押します。3 が表示されました
か。そのまま続いて"4" "="キーを順番に押します。この操作
では、"4+2="の結果が表示されれば正しく実行されていると
言えます。

突然画面が切り替わり、コード画面が表示されたのではない
かと思います。先程赤く反転された行にカーソルがあり黄色
い矢印と一部黄色く反転された範囲が確認出来ると思います。

これは、実行中のコードを一時中断して、一行一行、動作を
追う事が出来る様にする機能です。

intEnzanshiにマウスポインタを合わせてみてください。する
と、ツールチップが表示されて、「intEnzanshi = ○」等と
intEnzanshiに代入されている値が確認出来ると思います。

intEnzanshiには「今回の呼出で押した演算子キー("+-*/=")」
が代入されているはずです。ところでここで表示されるのは、
コンピュータの内部処理でキーを示すものとして付けられて
いる数値です。今回の呼出では"="キーを押しているので"="
キーを示すものとして付けられている数値が代入されている
はずです。Asc関数は、コンピュータの内部処理でキーを示す
ものとして付けられている数値を得る関数で、Asc("=")関数
が返す値は"="キーを示すものとして付けられている数値です。

そうなると、正しく実行されているか確かめる為にAsc("=")
関数が返す値が知りたくなりますが、マウスポインタを合わ
せても、Asc("=")を選択状態にしても、Asc("=")関数が返す
値は表示されません。

これを表示するには、「イミディエイト」ウィンドウを使い
ます。コード画面で「Ctrl+G」キーを押すと、表示されます。

「イミディエイト」ウィンドウで「print Asc("=")」と入力
し「Enter」キーを押してください。Asc("=")関数が返す値が
表示されます。「print Asc("=")」の代わりに「? Asc("=")」
や「?Asc("=")」と入力しても同じ結果が表示されます。

表示された数値はintEnzanshiと一致しましたか。

続いて「F8」キーを押します。「F8」キーを押すとコードを
一行だけ実行して再び実行を中断します。正しく実行されて
いればIf内の1行目に黄色い矢印が移動するはずです。

先程と同様にして、マウスポインタをEnzanHoとenzKeqN1opN2
に合わせるとそれぞれの値が表示されると思います。

再び「F8」キーを押します。再びマウスポインタを合わせて
それぞれの値を確認します。値は変化しましたか。

どうやら正しく実行されている様だと言う事が確認出来たら
「F5」キーを押して実行を再開します。

次に、"a" "1" "+" "2" "="キーを順番に押します。そのまま
続いて"4" "+"キーを順番に押します。この操作では、"4+"の
演算子の右の数字の入力待ち状態になれば正しく実行されて
いると言えます。

どうやら正しく実行されている様だと言う事が確認出来たら
「F5」キーを押して実行を再開します。

続いて"5" "="キーを順番に押します。この操作では、"4+5="
の結果が表示されれば正しく実行されていると言えます。

「ESC」キーを押してプログラムを一旦終了します。



☆5で追加したコードを確認します。

If strEnzanshi = "" Then
'3◆

Else
'3◇
● If intEnzanshi = Asc("=") Then
'3◇ △ =の後すぐに=
EnzanHo = enzKeqKopN2
Else
'3◇ ▽ =の後すぐに+-*/
EnzanHo = enzN1eqK
End If
End If


●で示した行にカーソルをもっていき「F9」キーを押します。
行全体が赤く反転された状態に変化すると思います。

「F5」キーを押します。

"1" "+" "2" "="キーを順番に押します。3 が表示されました
か。そのまま続いて"="キーを押します。この操作では、"3+
2="の結果が表示されれば正しく実行されていると言えます。

次に、"a" "1" "+" "2" "="キーを順番に押します。3 が表示
されましたか。そのまま続いて"+"キーを押します。この操作
では、"3+"の演算子の右の数字の入力待ち状態になれば正し
く実行されていると言えます。

続いて"4" "="キーを順番に押します。この操作では、"3+4="
の結果が表示されれば正しく実行されていると言えます。

突然画面が切り替わり、コード画面が表示されたのではない
かと思います。先程赤く反転された行にカーソルがあり黄色
い矢印と一部黄色く反転された範囲が確認出来ると思います。

ところで、何か様子がおかしくありませんか。☆3で追加した
赤●の行に黄色い矢印がついているのではないかと思います。

☆5で追加した赤●の行には一度も止まらなかったと思います。

おかしいですね。

「ESC」キーを押してプログラムを一旦終了します。



原因追究の為、ProcessKeyPressの"="キーを処理するコード
を確認します。

Case Asc("="), vbKeyReturn '=
● If ExecuteCalc(Asc("=")) Then
strNyuryoku = ""
cmJoutai = cmKekka
'★→cmK: "="押したとき、正常であればcmK

Call Senmonkakaigi(dblKekka, True)

ElseIf strError <> "" Then
cmJoutai = cmJoutai * -1
'★→cmE: エラーが発生したときcmE
End If
UpdateDisplay

●で示した行にカーソルをもっていき「F9」キーを押します。
行全体が赤く反転された状態に変化すると思います。

「F5」キーを押します。

"1" "+" "2" "="キーを順番に押します。

突然画面が切り替わり、コード画面が表示されたのではない
かと思います。先程赤く反転された行にカーソルがあり黄色
い矢印と一部黄色く反転された範囲が確認出来ると思います。

ここから先の処理は追究対象外なので「F5」キーを押します。

3 が表示されましたか。そのまま続いて"="キーを押します。

突然画面が切り替わり、コード画面が表示されたのではない
かと思います。先程赤く反転された行にカーソルがあり黄色
い矢印と一部黄色く反転された範囲が確認出来ると思います。

「F8」キーを押すとExecuteCalc関数内の1行目に黄色い矢印
が移動するはずです。

「F8」キーを二回押します。☆1からの4行は、問題無く実行
されるのではないかと思います。

続いて「F8」キーを押すと、そこでExecuteCalc関数が処理を
中断して終了してしまう事が分かると思います。strNyuryoku
が空("")である為です。

☆1からの4行に続く4行は、演算子キー("+-*/")や"="キーを
連続して押す操作を、無効として処理を中断する為に設けた
コードでした。例えば、演算子キー("+-*/")を押した後連続
して演算子キー("+-*/")を押すとか、演算子キー("+-*/")を
押した後数字を入力せずに"="キーを押すとかの操作をすると、
strNyuryokuが空("")である為、処理を中断する様になって
いるのです。

しかしながら、実際のところ、この4行がなくともプログラム
は異常を来す事無く動きます。strNyuryokuが空("")のとき、
ConvertNyuryoku()関数は0を返すので、その後の処理を続け
ても、0で演算する事を試みるだけだからです。

この4行が追加された経緯を言うと、実は今回の講座でつくる
プログラムの正しく動作する版が先にあって、そこから不要
不急のコードを削る事で前回の講座でつくるプログラムをつ
くった経緯があり、☆5のコードを削った結果、ExecuteCalc
関数で、演算子キー("+-*/")や"="キーを連続して押す操作に
反応する必要が無くなった為、後から追加したコードでした。

前回の講座でつくったプログラムでは、この4行が追加された
事によって、演算子キー("+-*/")を押した後連続して演算子
キー("+-*/")を押すとか、演算子キー("+-*/")を押した後数
字を入力せずに"="キーを押すとかの操作をした場合に、0で
演算する事を試みる無駄を省く効果がありました。



ここで、前回の講座で導入した、ある特定の条件下で数値が
「中抜き」されていくプログラムについて、「中抜き」され
た数値が分かる様に改造しようと思います。

ProcessKeyPressの Select Case KeyAscii と End Selectの
間のCase Asc("="), vbKeyReturnの内容を、以下の様に書き
換えます。

Case Asc("="), vbKeyReturn '=
If ExecuteCalc(Asc("=")) Then
strNyuryoku = ""
cmJoutai = cmKekka
'★→cmK: "="押したとき、正常であればcmK

Dim dblKekkaKaigimae As Double
dblKekkaKaigimae = dblKekka


Call Senmonkakaigi(dblKekka, True)

If dblKekkaKaigimae - dblKekka > 0 Then
strError = dblKekkaKaigimae - dblKekka
strError = strError + "億円中抜きされました(Press C key.)"

cmJoutai = cmError3
End If


ElseIf strError <> "" Then
cmJoutai = cmJoutai * -1
'★→cmE: エラーが発生したときcmE
End If
UpdateDisplay

太字が今回追加したコードです。

忘れないうちに、ここまでつくって来たプログラムを保存し
ましょう。ツールバー等にある「保存」をクリックします。

 
続きを読む...

posted by miraclestar at 05:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする