人気ブログランキング | 話題のタグを見る

体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ
前回REPLACEが面白いコマンドだったので、面白いコマンドの音声認識TALKと組み合わせてメモを作る話だったが、プログラム中に書くとそこで処理が終了してしまうらしい。

REPLACEもSAVEと同じで、プログラムの終了を伴う。

なので、SQLコマンドというAndroidに標準装備されている機能を使ったコマンドがあるらしいので、こちらを使ってみることに。

とりあえず、サンプルプログラムを改造して、”日本語文字列”と”システム時間”の格納ができるか調査。

100 'Please delete 40 lines of create sentences after the second.
110 dim mm$(2,20) :'(Item,Record)
120 s$=str$(ex_time(date$,time$))
130 m$="醤油"
140 on error goto 220
150 ex_sql mm$,on :'SQL mode
160 open memo.db
170 create table memo(memo text, systime text)
180 'insert into memo values ('pencil',@s$ )
190 insert into memo values (@m$ ,@s$ )
200 'insert into table1 values (3,'Banana')
210 select * from memo
220 close
230 ex_sql ,off :'mode cancel
240 print mm$(0,0);" ";mm$(1,0) :'Item
250 print mm$(0,1);" ";mm$(1,1)
260 print mm$(0,2);" ";mm$(1,2)
270 print s$
280 print val(mm$(1,1))

ちょっとゴミが残っているが、このまま動作させると、
memo systime
醤油 1632472394634

1632472394634
1632472394634
と出る。

途中でエラーが出るのでon error gotoでクローズ処理を追加。
またDBが変になったら、sql closeと打ったり、?curdir$(2)としてDBのディレクトリを表示して次のように削除する。
kill "/data/user/0/and.bas/databases/memo.db"

最初システム時間を文字列ではなくdoubleで与えていたのだが、1兆を超える値がDBの扱える範囲外の数値だったらしく、格納しても1.632472+e1と有効桁数7桁に丸められてしまった。BASICでは格納できたが、DBのソートとかに使うには難しかったようだ。

さてこれでsql open~sql closeをワンセットで関数化し、パラメータを文字列で渡せばよいか。

DBなのでREPLACEの簡単さはないが、データの削除追加が簡単になった。

# by k1segawa | 2021-09-24 17:52 | BASIC | Comments(0)
前回(4)でREPLACEが強力だという話をして、メモプログラムの概要の話をした。

結局別の操作体系の方を実装してみる。
基本的なコマンドは、「メモ」「追加」「削除」「クリア」「音声」と「終了」の6つで、「種類」によるカテゴリー分け(階層化)はしない。

まずは基本構造。

100 w$=ex_recogn$(0)
110 select case w$
120 case "メモ":
130  restore
140  read a$
150  print a$
160 case "追加":
170  pause 1000
180  v$=ex_recogn$(0)
190  replace"メモ"+":","memo:"+v$
200 case "クリア":
210  restore
220  read a$
230  replace a$,"メモ"+":"
240 case "音声":
250  restore
260  read a$
270  talk a$
280 case "削除":
290  pause 1000
300  v$=ex_recogn$(0)
310  replace"memo"+":"+v$,"メモ"+":"
320 end select
330 end
340 data "メモ:"

***
(追加後)
340 data "memo:醤油"

DATA文1個のケースで「n番目」という複数データはまだ。
RESTOREで必ずDATA文の先頭に戻ってから読み込み。
PAUSE 1000(1秒)はGoogle音声認識サービス呼び出し後、すぐに音声認識を呼び出すと、Androidシステムへ戻ってBASICはタスク切り替えされてしまうため。

「追加」後、1秒後に続けて「醤油」と発声すると、"memo:醤油"と置き換えられる。
「削除」後、1秒後に続けて「醤油」と発声すると、"メモ:"と置き換えられる。
「クリア」はとりあえず暫定処理。
1回きりの処理でループはしない。

基本的にはこういう形。
追加機能は、
DATA文複数化
データに「n番目」追加
ループ処理+「終了」コマンド
UIデラックス化

さてこれを処理しつつ、追加時の末尾追加処理と削除時にDATA文の上詰め処理のアルゴリズムが必要になってくる。

それと、BASICプログラムの呼び出しは、
EX_EXECUTORコマンドで実行できることを確認した。
ショートカットなので、Taskerでも呼び出せる。例えばスマホをフリフリした時など。


# by k1segawa | 2021-09-20 14:54 | BASIC | Comments(0)
Facebookの「大人の電子工作」が面白い。

グループに参加はしてないが、よく見てて電子工作のネタ的にも幅が広い。

専門的すぎず、同じような事の繰り返しばかりでなく、詰まったときに見るとアイディアが浮かぶかも。
ある方の投稿:(20+) Facebook

上のある方の投稿をクリックしたら開く画面が下の写真。
右側に類似の投稿が並ぶので、ディスカッションタグを開いても見つからない興味深い投稿が探せて便利。
[Facebook] 大人の電子工作 グループ [電子回路] (9/18)_a0034780_12295705.jpg
そして複数のクラッカーのひもを引っ張るのに、1本のひもだけで出来てしまうというこの機構がとてもアイディアマンだと感心した。

# by k1segawa | 2021-09-18 12:37 | facebook | Comments(0)
(  警戒レベル4  になったので公開)
【!!これは自分の忘備録です!!】
警戒警報が自治体で警戒レベル1~5の範囲で発令される【!!以下は自分の忘備録ですので自治体のガイドラインを参照してください!!】
    ↓
高齢者は警戒レベル3以上で避難
/その他は警戒レベル4以上で避難
/警戒レベル5なら即時避難
    
では避難する場所だが、
自分の現在の地域がどの警戒区域なのかによって異なる
   
土砂災害警戒区域または家屋倒壊等氾濫想定区域なら近くの避難場所へ
つまり山の近くや川の近くなら避難所へ
    ↓
そうではなく、浸水被害が想定される区域なら高い場所か2階へ
つまり1階建てでない建物ならば2階へ
1階建てなら別の高い場所・高い建物の2階以上へ

●山・川のそばなら公共の避難場所へ(たとえそれが高い場所になくても土石流や洪水およびそれらによる家屋の倒壊が起きないと判断された場所なので)
浸水被害が予想される場所なら、建物の2階以上または高い場所へ

理由とそのさらに発展形を以下に示す

山・川のそばならその場にとどまって土石流や洪水に流される危険性の方が高いので、その場を移動する必要がある
しかし浸水被害なら身体の危険より建物への被害の方が大きいので、移動による危険性を考慮すると、2階建ての建物へ避難する方が有効
    ↓
ただし時間とともに浸水被害から洪水被害へ格上げすると予想される(そういう区域は過去の経験から自治体が判断する警戒区域のレベルが低かった事になるが)場合、公共の避難場所(もちろん高い場所や洪水が来ないと自治体が「予想」した場所)へ避難する
    ↓
さらに、避難場所自体が危ないと判断する要因がある(河川の氾濫場所が想定より増えるなど)場合のみ、自身の判断で高い場所へ避難する

台風14号 日本列島“横断”の見込み 今やっておきたい対策は? | 台風 | NHKニュース

[台風14号] <警戒レベル>と<警戒区域の種別>による“避難指示”発令時の判断 [警戒警報] (9/17)_a0034780_14192733.jpg

# by k1segawa | 2021-09-18 06:45 | Comments(0)
プログラムにデータを読み込ませるのに、別ファイルを作ってマージするか、ファイルオープンしてテキストファイルとして加工しBASICプログラムにしてセーブするか考えていたのだが、

まず、ファイルアクセスは
[編集・実行]-[SAVE]コマンドやDELETE、REPLACE、MERGEなどRUN,iだとプログラム内に記述することができるプログラム自身の編集コマンド(RUN,cやRUNだけではこのモードでは実行できないと出る)
[ファイルアクセス]-[OPEN]コマンドなどファイルを開いて編集するコマンド
[ファイル操作]-[KILL]コマンドやRENAME、COPYなどこちらもプログラム内に記述することができるファイル編集コマンド

がある。
REPLACE文が強力で、プログラム内の文字列を変更できるのにそれをプログラム内から呼び出せること。
プログラム自身書き換えて保存すれば、自己書き換えになる。
その時SAVEコマンドは実行するとプログラムが終了するので、行末に書く必要がある。

次のようにすると声で入力した文字列と一致すると、プログラムの変数の代入文字列はもちろん変数名すらも書き換えられるのだ。

100 s$=ex_recogn$(0)
110 print s$
120 a$=s$
130 print "テスト"
140 replace "s$","w$"
150 save "pged1.bas"

Run,i とすると、

100 w$=ex_recogn$(0)
110 print w$
120 a$=w$
130 print "テスト"
140 replace "w$","w$"
150 save "pged1.bas"

s$がw$になってセーブされた。

次に音声で置換させるのは、

100 w$=ex_recogn$(0)
110 print w$
120 a$=w$
130 print "テスト"
140 replace a$,"はい"
150 save "pged1.bas"

Run,i で
"テスト"と口頭で発声すると、

100 w$=ex_recogn$(0)
110 print w$
120 a$=w$
130 print "はい"
140 replace a$,"はい"
150 save "pged1.bas"

になるのだ。

もう、DATA文に直接メモを書き込めるな。
1000 DATA "メモ1"
1010 DATA "メモ2"

1000 DATA "memo1:醤油"
1010 DATA "memo2:石鹸"

に置換すればいいのだから。
メモ1をわざとmemo1にするのはメモ1に何も書き込まれていないことを知るためのフラグで、「メモ表示」時に区別するため。
表示はそのままでなくてもいいのだから先頭が「メモ」なら「1:」で空を表し、「memo」なら「1:××」でメモ内容を表示すればいい。
置換はプログラム全体を見るので、どこのDATA文か知らなくてもよいし、メモとメモ1は違うので判定に使う「メモ」という文字列は置換されない。
メモはDATA文の数に制限されるけど100ぐらいあればいいだろう。

メモコマンド
「メモを表示」「メモを追加」「メモnを削除」「メモをクリア」

これらの末尾が「を表示」「を削除」などかどうかでコマンド種別判定し、
その前部分から先頭の「メモ」を削除して文字列が""(ヌル)でないなら、それが半角数字1~100の場合(そうでなければエラー判定)メモn番目かを判定し、DATA文のメモやmemo文字列を置換する。

コマンド構造など
「メモ」+[1~100](半角数字) or 無し+「コマンド文字列」というコマンド構造になっていることが特徴で、コマンド判定後続けて音声入力するのは、「メモを追加」コマンドだけなので再度音声認識を行ってそれをDATA文のmemoの末尾またはメモ1に書き込む。

「メモnを削除」はDATA文memo nをメモnに置換し、n番目のDATA文以下のDATA文を前にコピーして詰める処理を行う。末尾処理もある。
「メモをクリア」はすべてのDATA文の「memo」+「xxxx」を「メモ」+[1~100]へ置換する。
「メモを表示」はすべてのDATA文の「memo」である部分を表示する。1つもなければ空で表示する。


「メモを挿入」「メモを並び替え」「メモを一括削除」「メモを移動」「メモを範囲表示」など、範囲などをその後に音声認識で入力するエンハンスコマンドがあってもいいかも。まあそこまで使い込まないと思うが。「メモを音声再生」はあってもいいか。

*****
別の操作体系
*****

4つのコマンドを覚えておかないといけないけど、コマンドの構造や操作体系(少なくとも2回の音声入力でコマンド+パラメータを指定する)を変えて、「メモ」で表示、「削除」「醤油」で該当するメモを削除、「追加」「歯ブラシ」でメモを追加などのオブジェクト指向的な操作体系もある。元のコマンドは手続き型かな。先頭に「メモ」が必須なのは「メモnを削除」という座標指定みたいなメモそのものを指定しない方式なため。
「メモ」「削除」+[メモ名]「追加」+[メモ名]「クリア」の4つでもメモ名というオブジェクトが後に来る方がわかりやすい?かも。
メモ名が長かったり間違った文字列、難しい文字列の場合に「削除」が難しい。その場合n番目の削除の方法もあった方がいいかな。
座標指定が難しいなら表示されたメモをタッチで削除したほうが簡単だな。それも追加かな。

メモコマンド
「メモ」「追加」「削除」「クリア」・・・さらにこれを任意の文字列にユーザカスタマイズ可能。
メモ・・・一覧表示。番号が付加されている。キャンセルも可能。
クリア・・・再確認後、全削除。短時間なのでキャンセル不可。
追加・・・続けてメモ名を音声入力。末尾に追加。キャンセルも可能。
削除・・・続けてメモ名を音声入力。該当するメモ名を削除。「n番目」で番号で削除(その代わりにn番目というメモが書けなくなる)。「メモ」で表示されているメモ名にタッチして削除。その後メモの空きを詰める。キャンセルも可能。音声による「キャンセル」「中止」を追加すると、キャンセルというメモが書けなくなる。

エンハンスコマンドとして「音声」と言うと音声で全メモを再生。「中止」または「キャンセル」、タッチで中止。
長い場合「一時停止」や「一時停止」後に1ページ毎に「次へ」「前へ」「一時停止解除」。一覧表示でも使用可能。
この辺までで「音声」「中止」「キャンセル」など3つ増えたコマンドや、
「一時停止」「次へ」「前へ」「一時停止解除」などもカスタマイズ可能。

「ヘルプ」も欲しくなるな。「音声ヘルプ」もか。

カテゴリー分け
「種類」「追加」「削除」「クリア」「(種類)」・・・「メモ」の代わりにメモをカテゴリー別にする「種類」をさらに追加。
「種類」の後に編集コマンド「追加」「削除」「クリア」がサブコマンド
幼稚園、小学校、スーパーなどと追加する。追加した種類自体がサブコマンドになる。
「種類」-「幼稚園」-「メモ」・・・幼稚園のメモが表示される
「種類」-「小学校」-「音声」・・・小学校のメモが音声再生される
「小学校」だけでも呼び出せる

起動直後に、「メモ」ならメモを表示、「種類」なら種類を表示、「小学校」なら小学校の「メモ」を表示、「音声」ならメモを音声再生する。

「ヘルプ」「音声ヘルプ」も起動直後に使用可能。

「メモ」「種類」「小学校」と発声後は「追加」「削除」「クリア」の編集コマンド、「種類」の後のみサブコマンドも追加使用可能。

起動直後に「メモ」を必須表示にするしないをカスタマイズ可能。

どんどん階層的になってくるが、階層は1段階だけ。「種類」も100まで。起動直後に最後に使用したサブコマンドを必須表示にするかしないかをカスタマイズ可能。

*****
全体の追加のデータ構造
*****

メモを追加した日時を保存して詳細オプションONで行末にそれも表示
保存日時でソート
指定日時で表示範囲限定

カテゴリー分けで保存日時、指定日時で表示可能

編集コマンド追加
「メモ」や「小学校」でメモ表示後 or「音声」でメモ発声直後、「編集」
「編集」と発声、続けて「醤油」と発声 or 「n番目」or タッチで「醤油」 を選択、修正文字列を「シャンプー」に口頭で修正 or タッチで手動で修正


# by k1segawa | 2021-09-18 03:38 | BASIC | Comments(0)

by k1segawa