FC2ブログ


タブレットの手書文字入力問題

   プログラミング [2019/10/10]


プログラミングとはちょっと違うけど、まあパソコン絡みということで。

タブレット用のアプリを作って、キーボードなし状態で、そのアプリ上に文字(文章)を入力するときの話。

音声認識を使って文字入力するような仕掛けも作ってはみたものの、
MSがタダで使わせてくれる音声認識の精度は決して高くありません。
訓練してあげれば、少しは良くなってるかもしれないけど、実感できるほどにはなかなかならない。

もう一つ、キーボードが苦手な方用に、手書き文字入力という方法がある。
ソフトキーボードの内のキーレイアウトというか、入力タイプの1つとして手書き文字入力パッドがある。
タスクバーの右側にキーボードのアイコンがあって、
20191010_2.jpg


それをタップすると画面上に出てくる。
通常は、キーボードなしの状態だと、文字入力フィールドにフォーカスを移動しただけで、画面上に表示される。

最初に表示されるのは、一般的なキーボードのレイアウトになっているかもしれないが、左上のキーボードマークをタップすると色んなキーボードから好みのものを選択できるようになっている。

その一つが、手書き文字入力パッド。
20191010_1.jpg


タブレットを購入してすぐのころは、サクサク動いて、結構汚い字で書いても認識してくれて、
ひらがなを入力したら、漢字候補も出してくれるし、どうも前の単語も認識して続く表現の候補も出してくれる。
なかなかよい。

ところが、しばらくぶりで、使ってみようと思って動かすと・・・
20191010_4.jpg

なんだか、線の書き出しの反応が遅れる・・・文字の入力が不完全になる。
なので、まともな文字として認識しない。ゆっくり書けばいいのだけど、折角メモ代わりに使おうと思っても、これじゃぜんぜんダメというレベル。

なぜ、遅くなったのだ?
色々調べて試したことをダラダラ書きます。
「結果を言えよ」と思われる方は、最後の方をご参照ください。



続きを読む

スポンサーサイト





’19秋キノコ採り:4回目(単独)

   山菜・きのこ採り [2019/10/09]
予報通り、土曜は雨模様。
いつものメンツとの山歩きは中止(お休み)にして、土曜は畑の様子を見に行って。

日曜、晴れました。
久々の単独キノコ採りに出かけました。

毎週、クマ、遭難のニュースが飛び交う田舎なので、余り単独であることは内緒で行先の目安を書置き。
朝7時過ぎに棲家を車で出発。

先週も行ったかなりの山奥。
8時過ぎに到着。奥地の駐車スペースは満杯。
そこに着くまでに30台余りの同業者の方の車を見かけた。
皆さん朝早い。

適当な広さのある場所に車を止めて、
こんな清流沿いの山道をテクテク15分くらい進みます。
20191009_1.jpg

まだ、紅葉するまでには至ってません。
20191009_2.jpg

上中下の下コースを選択。
※下コース:そんなにきつくはないが可能性は低い、ただし競争率も低い

こんなに車があるのだから、あまり他人が入らなそうなところがいいでしょう。

下コースは登り口から雑キノコの発生を確認しながら登れるところ。
早速、ブナハリタケを発見。
20191009_3.jpg
少し採取しました。

その後も尾根に登りきるまでに・・・

続きを読む



育てたら食べよう(1):エゴマ、シソ

   園芸 [2019/10/08]
せっかく育てた(植えっぱなし)んだから、食べないとね。

辛うじて、それなりになったエゴマは、
当初の目的どおり焼肉を巻いて食べました。
でもそれだけでは消費しきれません。
葉っぱはどんどん出るし、育ちすぎるとギシギシするし。

韓流狂いのさる2号が、通ってる韓国語教室の先生に食べ方を聞いてきたらしい。

漬けるらしい。
20191008_1.jpg
タレは、醤油、みりん、にんにく、しょうが、ごまあぶら、とうがらし だそうです。
分量は秘密だそうです。たぶん適当にやったんでしょう。

海苔みたいにご飯を巻いて食べるか、
20191008_2.jpg

少し細かく刻んでゴハンに乗せるか。
20191008_3.jpg

味が割と濃いので、ご飯のおかずですね。
美味いけど、えごまの匂いはちょっと歯磨き粉を感じさせるので・・・

シソは・・・

続きを読む



Eclipse-Perl環境でハマった件

   プログラミング [2019/10/07]
「VS2017-はじめの・・・」で説明してきた、Winタブレット向けのアプリの相方(サーバ側)の試作をしていたときの話です。
なにはともあれ、perlが大嫌いになりました。

事の起こりは、DBサーバからデータを抜き出して、加工して戻すという単純なプログラムを作ることだった。
サーバーにはApacheが組み込まれているという話だったので、少し慣れてるPHPでサーバスクリプトを書いた。

ところが、そもそも本番サーバにPHPは組み込まれていないらしい。
そこでPHPの追加を依頼したが、PHPと古いApacheのバージョンで不整合があって動かなかったそうだ。
(事前に有効バージョンを確認しなかったんですね・・・・ ^^;)
暗号化系の処理を行うためには、PHPの新めのバージョン(5.5以降)が必要なのだが、
「もう勘弁してくだせぇ。Perlでお願いします。」とのこと。
「コードをPerlで書き直す作業と、Apache環境にPHPを追加するのとどっちが効率いいですか?」
後者ですよねー。
かなり納得いかないが、まあしゃあない。やってあげようじゃありませんか。

手元のパソコンにはEclipseをインストールしてあり(その環境でデモ用PHPスクリプトを作った。)、
確かPerlも使えたはずと思って、コーディングを始めた。

ほぼ、はじめてのPerlです。
かなり、なじめねー。

・どこぞのサイトの説明も分かる人にはわかりやすいのかもしれないが、虫食い状態でしか説明を読まないど素人には殆ど歯が立たない。
・公式リファレンスのperldoc.jpの日本語訳が参照できるが、まったく十分な印象は受けない。何をどう指定したらいいのか、何を指定したらだめなのか・・・結局、要領を掴めなかった。

まあ、勉強する気も無いのが良くないんだけど。

Perlのわけわかんない文法もイライラしたが、そこはそれでも大したことはなかった。(ここまで3日くらい。)
※詳細は省略します。

なんとかかんとか、大雑把な動きの部分を一通りのコーディングを完了して、
じゃあちょっくら動かしてみましょう・・・

※以降、絵が小さいときは、クリックすると読める程度の絵が出ると思います。

続きを読む



’19秋キノコ採り:3回目

   山菜・きのこ採り [2019/10/01]
そろそろマイタケ・シーズンのピークではないかと。
いつもの3人組で。

今回は、若干いつもより遠く(奥)の方へ。
先週車を停めたところから、さらに車で20~30分。
(時速が30km/h以下じゃないと走れないような未舗装の道路です。)

土砂崩れで進めないところの近くの車を置くスペースへ。
でも、満車状態。

9時到着だったけど、我々の出足はこの業界一般には遅い方。
車を何とか置いて、そこから15分くらい林道を歩いてさらに奥に。

数年前までは、さるが一人でも来ていたマイエリア。修業した場所です。

現場、沢付近に到着。
選択肢は、
上:かなりキツイ登りだが収穫の可能性は高い
中:キツイが、割と登りきる前でも収穫の可能性があるが競争率が高い
下:そんなにきつくはないが可能性は低い、ただし競争率が低い

中を選択。
最近、あまり人が通った節がみあたらない。
よい傾向です。ちょっと遠回りだけどね。

続きを読む



Eclipse-PHP環境でちょっとハマった

   プログラミング [2019/09/30]
「VS2017-はじめの・・・」で説明してきた、Winタブレット向けのアプリの相方(サーバ側)の試作をしていたときの話です。
もう、半年以上前の話なので、ほとんど細かいことは覚えてないのですが、当時のメモがあったので、それを元にハマったことを書きます。

Eclipse上でPHPのサーバスクリプトを作ってデバッグするときの注意点になるかと思います。

Eclipseのバージョンは、Oxygen.2 Release (4.7.2)

◆初めて使うときに躓かないために
とは言っても結局は、あまり考えないで進めて、ハマってからしか詳細を調べないのが普通ですよね。

さるの場合、最初のワークスペース指定から、何も考えずに適当にやったら、Eclipse起動時、あるいはPHP実行時に「Post startup...中に内部エラーが発生しました。」、「ローカルホストのPHPビルトイン・サーバーに公開中・・・」などのエラーが出るようになった。テストできない状態になった。

原因は、適当にやりすぎたから。
でも、それを解消してやり直しを掛けるのに結構手間取った。

まずは、やらかしたときの手順を追って行きます。
長いです。
※以降、絵が小さいときは、クリックすると読める程度の絵が出ると思います。

続きを読む



嬉し恥ずかしお百姓一年生(9):秋野菜他状況

   園芸 [2019/09/29]
先週、小雨の中やっとこさハクサイの移植を終えたのだが、防虫対策が未完成です。

防虫ネットを被せたのは、全体の20%以下だろう。

残りはクスリを使ってしまおうと思った。
できれば、化学的なものは避けたいと思って、ネットでどんなのがあるか探した。

見つかったのは、「無農薬 不快害虫よけ 虫よらず」。
ホームセンターで探したが、同様の商品は置いてなかったので、通販で1.5kg 2袋セットで2690円を購入。
届いたのを見たら、予想したのよりなんか小さかった。

これでは、どうも足らないのではないかと思って、
ついに、近くのホームセンターでオルトランを購入した。こちらは、1.5kg 消費税込み2130円弱。

上記、2種類を携えて、実家の畑へ。
でも・・・

続きを読む



嬉し恥ずかしお百姓一年生(8):ハクサイ植替地獄

   園芸 [2019/09/26]
植えっぱなし、ほったらかし園芸は、さすがに何も上手くいかないことを実感し始めたころ。
ダイコンの芽すら虫か鳥に食われて、出だし失敗したので、
ハクサイはいくらかマシに育てたいと思って、いつもよりは下調べをした。

◆ハクサイ続き
まずは、タネ播きはトレーで行う。
畝の作り方。
トレーから畑へ移植。
間引き。
虫よけは必須っぽい。
追肥も必要。

トレー種まきを実施したら、予想以上に早く芽が出て少し慌てた。
外の半日陰っぽいところに置いたら、屋根からの雨水が直撃して、一列全滅した。
20190924_5.jpg

3週間前、ダイコンの植替えを優先して実施。
その後、枝豆を収穫し、その後に畝を作った。

ハクサイの植替えの全工程は、
1)雑草をホーで根っこ部分から掘り起こして片付けて
2)肥料を撒いてマメトラで再度耕して、
3)畝をつくって
4)肥料を入れながら、苗を移植する
5)水をやる
ですが、当日は30℃を超す残暑で、日陰で休んでいる時間が長くて、
枝豆もサヤもぎしないといけなし、3)の段階で時間切れ。

トレーのハクサイがひょろひょろ伸び始めたので、一部はポットに植え替えたが。

結局、トレーに一か月ほど居てもらった。

翌週、移植を開始。
今回は、虫よけ網を掛けてやるつもりで、買いに行ったが、結構するのね。
5mx1.8mで1500円弱。
さるのおこづかいは既に尽きてたので、3本だけ買ってきた。

前週作った畝に植替えを実施。

クマっぽい獣の足跡はあったけど。

続きを読む



嬉し恥ずかしお百姓一年生(7):性懲りもなく秋野菜

   園芸 [2019/09/24]
これまでの、なんちゃってな植えっぱなし園芸
性懲りもなくまだ続けています。

「8月に種まきする野菜」で検索すると、
ダイコン、ハクサイ、アスパラ菜、・・・と出ててきました。

タネを買ってきて・・・
まずは、ダイコンを植える先を作らなきゃ。

◆ダイコン
春に一度耕して、何も植えなかったところを
1)草刈り機で草を刈って
2)刈った草を集めて、寄せて
3)ホーで根っこ部分から掘り起こして片付けて
4)肥料を撒いてマメトラで再度耕して、
5)畝をつくって
6)肥料を入れて、タネを撒く
7)水をやる
ってやって、やっと種まき完成です。

例えば、4月くらいに種まきするのであれば、1)~3)は不要な作業です。
春より、大変じゃないかーい。

ともあれ、まだ残暑厳しいお盆のさなかに、ダイコンのタネマキを行いました。

ところが・・・・

続きを読む



’19秋キノコ採り:2回目

   山菜・きのこ採り [2019/09/22]
先週、マメ(マイタケの幼菌)を3つほど見つけて、残してきたので、
当然今週は、回収に行きました。

今回は、山友2も参戦。
20190922_1.jpg

400m以上の標高差をヒーコラ言いながら上り詰めて、
さあ、マイタケちゃん大きくなったかなー?

予想通り、居なーい。
やっぱね。
まさか、先週の日月(休日)だとまだ幼菌の状態だったはずなので、それを持って帰ったとは思えないから。
平日も動ける、プロの方ですよね。

ちっ。

めげない、めげない。
その後、1時間程探しまくりました。

でも、居なーい。

やっとこさ、別の小さいのを1つめっけた。
20190922_2.jpg

あーーやれやれ。坊主を免れた。

1つ見つけたので、俄然やる気を取り戻したのですが・・・

続きを読む



クマ・・・ですか2

   自然観察 [2019/09/21]
7月の初旬に、どうも実家山林にクマの出没形跡を見つけて以来、若干、神経過敏になっているさるです。

先々週、ハクサイを植えるため、その山林を通った先にある畑に行きました。
というか、毎週行っているんですけどね。

9月にしてはかなり暑い日で、作業は全く捗らず(日陰で休んでる時間が長いから)、
畑に畝(うね)をやっとこさ盛ったところで、作業を終了してきた。

先週、続きの作業をやろうと畑に行ってみると、盛った畝に何やらポツポツとけものの足跡が。

20190915_6.jpg

タヌキか?

20190915_5.jpg

なんか、大小あるような。

さらに、足跡を追うと・・・

続きを読む



’19秋キノコ採り:1回目

   山菜・きのこ採り [2019/09/20]
毎年、同じ話ばっかで。
目的は一緒だし、場所も大して変わらないし。

でも、取り敢えず載せちゃいます。

9月の第2週土曜。
昨年と同じ時期のスタートとなりました。

幸い前の週土日は、真夏のような暑さだったのですが、先週は過ごしやすい気温でした。
「猛暑の夏の年は、キノコが豊作になる」と亡くなった爺が申しておりました。
でも、昨年が豊作だったので2年連続となるとは、ちょっと期待し過ぎでしょう。

マイタケの下見を兼ねた雑キノコ採り、あるいは夏キノコの奥手を探しに山友と出かけました。
現場は、昨年マイタケがバカ採れした山奥。(結局マイタケ狙いみたいですね。)
20190914_1.jpg

20190914_2.jpg

ところが・・・

続きを読む



嬉し恥ずかしお百姓一年生(6):野望の赤ソバ

   園芸 [2019/09/19]
荒らしちゃった畑、一番広い区画で30aくらいはある。

柿の木が植わっているが、半分くらいは枯れていて、夏には、カヤ(ススキ)の混ざった草原になります。
7-8月中に一生懸命、1m以上の背丈の雑草を刈っても、9月中旬でこんな感じに戻ります。
20190915_1.jpg
(刈らなかった場合は、以下の写真の左側のようになる。)
20190915_2.jpg


今後徐々に畑化するにしても、こんな広さなので、手の掛かるものは大型機械も持ってないし、体力的に無理かなと思ってます。

以前、秋に観光で行った高原で、元は牧草地っぽいところで、ピンク色の花畑を見たことがあった。
帰って来て調べて、その花がソバであることが分かった。
普段、蕎麦屋で普通にでてくるのは、白い花が咲くいわゆるソバで、それとはちょっと品種が異なるらしい。

ソバは、最近田んぼの転作作物として、実家近辺でも割と盛んに栽培されている。
さっきの写真の草原の左側には別の家の田んぼがあって、100mくらい下流側の田んぼでもソバが栽培されてます。
でも、赤いのはない。

ソバは、割と痩せた土地でも育つっぽいイメージだし、雑草除けによさそう。
せっかくだし、すこし珍しいものを植えようと思って、ネットで赤ソバのタネを探した。

直ぐ見つかった。「高嶺ルビー」という品種?商品名?のタネが通販で購入できる。
ちょっと多め?で8袋(送料込みで2800円弱)買って見た。

1年で畑全体をピンクに染める程の量は、種の購入コストもそうだが、蒔くエリアの準備ができないので、
8袋分を元手にどんどん増やせないかなーと思っている。
さるの2つめの野望は、上の草原をピンクの絨毯の畑にすることです。

種袋先生によると、播き時が8月となっていた。

なのでこのエリアの草刈り作業の最終日(8月初旬)に、耕してあった一角に種を植えて見た。

続きを読む



嬉し恥ずかしお百姓一年生(5):オクラとブルーベリー苗木の状況

   園芸 [2019/09/18]
いずれは、荒らした畑を復活させて、ブルーベリー園にしてやろうじゃないの。
と、野望を大きく膨らまたのはこの春です。

今のなんでもかんでも植えて見て、失敗作のオンパレードも、
まずは、畑作りの大変さを身をもって体感してみるという目的(苦しい言い訳)でもあります。

さて、今回は全ての発端となったブルーベリーの状況と、忘れてたオクラの話です。

昨年挿し木したブルーベリーに新芽が出て俄然やる気になり、
そのためにボカシ肥を作ってみて、
荒らした畑状況を把握するために耕して、
ついでに、思い付きで野菜を植えている・・・
これが実情です。

さて、春のブルーベリーの苗木がこんなでした。
20190503_2.jpg

その後・・・

続きを読む



嬉し恥ずかしお百姓一年生(4):ニラ、コマツナ、ニンジン

   園芸 [2019/09/16]
7月の末、少し落ち着いて来たので、掘った畑に何か植えようと考えた。
「7月に種播きできる野菜」と検索して、その内ニラとコマツナのタネを買ってきて、撒いた。
ニンジンは、数年前のものがあったのでそれを使った。

タネの播き方は、タネの袋の裏にちーさい字で書いてある。
その他、育て方にい関する色んなことが書いてあります。

タネからの場合、さるのお百姓の先生は7割がたこのタネの袋の裏書です。
それを読んでも分からない場合はWeb。


で、7月の下旬に現場の畑に行ってみると、畑は草ボーボー。

雑草をネキリ(ホー)で排除して、もう一回マメトラで耕し、畝を盛って種播きを実施。
暑い時期だったので結構大変だった。
今後のことも考えて、畝も多めに作った。
(二か月近く経って、何も植えない内に草ボーボです。)

で、現状は・・・

続きを読む



VS2017-はじめの1/10歩(18):暗号化処理を取り込む

   プログラミング [2019/09/16]
「くりぷと」って聞いて・・・「元素にそんな名前のがあったよーな」と思ってしまうさるです。

Windows10タブレット向けのアプリを作ろうとしています。
VS2017を使うんだけど慣れてないからVS6でまずは作ってました。言わばWin32アプリです。
両方の環境(クロス環境)でコンパイルできるソースとして書いてます。
これまでの書き込みも含めると、

→ナレーション再生と音声認識を使う
  →そのため音声データの作り方(多言語対応)
  →ナレーション(.WAV)再生のサンプルコード
  →音声認識のサンプルコード
→VS6で作ったC/C++コードをVS2017に持って行って.cppレベルで共通にする方法
→ダイアログベースのプログラム
  →背景に画像(.BMP)を使う
  →ラベルを透かす
  →ボタンの色を変える
  →Windowsタブレット上でピンチイン/アウト:拡大縮小
  →タブレット画面の回転への対応
  →カスタムなチェックボックス作成
  →ボタンに画像を貼付ける
  →スクロールとスワイプ
→HTTPでファイルを送受信する
  →手法1:ブラウザ使って
  →手法2:Wininetを使う
暗号化処理を取り込む←今回

となってます。

世の中、データの暗号化は当たり前に使われる時代なんですよね。
ほぼ、そんなこと気にせず通信環境で動くアプリやサービスを使ってるけど。

例えば、LAN環境で使用するローカルなDBサーバシステムがあったとします。
そのサーバシステムに対して、LAN環境外でデータの更新がしたくなったとします。

つまり、持ち歩きのPCで加工したい部分を予め取り出して、どっか別の場所で加工して、戻す仕掛け。
そうすれば、DBとのデータの出し入れだけLAN環境のエリアで行えば、そのデータの加工はどこでへ行ってもできる。

「そんなの公衆回線を使ってDBアクセス環境を作っちゃえばいいじゃん。」と思われるでしょう。
今はほとんど通信料は定額だし、WiFi環境もそこいらに・・・・
ないんです。
さるの棲む田舎では、WiFiスポットを探すどころか、電波が届かないところも未だにざらにあるのですよ。

ちなみに、さるの実家でのポケットWiFiの可否としては
・Do*omo △ :スンゲー遅い。3G<->4G行ったり来たり。
・A*     × :通じません
・Softb* 不明:カバー域マップで見るとつながることになってる。

そんなところで外回りされる方のためには、データの部分的持ち歩きはあってもいい機能ではないかと。
定額と謂えども、その分の通信コストも削減できるはず。

ただし、ローカルなデータを持ち出すのだから、端末を落としたら大変です。
しかも今のところ持ち歩きデバイスはWindowsタブレットだし。
なのでファイル自体は「暗号化しておこう」と思ったのが、事の始まりです。

いつもながら、前置き長くてすいません。

そんなこんなで、「暗号化」についてちょっとだけ勉強することになった。

暗号化方式も色々あるらしが、「AES」というのがよさげらしい。

調べているうちに、「ローカル環境内の通信で、タブレットからDBアクセス時にハッキングされたら?」と思ってしまった。
(ローカルな環境でしかやれないことだし、そんなに心配するほどでもないのだけど。)

-ユーザ認証は必要でしょう。
-ってことは、ID/パスワードをサーバ側スクリプトに送り込むよな。
-裸で?
-せめてパスワードは分からないようにしようよ。
-どんなのがある?
-「PBKDF2」※という単語が出てきた。
-じゃそれ使って見よう。
-当然、データもダウンロード段階で暗号化。
-保存もそのままで、参照・編集時に復号ね。

と思ったのがウンのツキ。
この時点で「暗号化」についての知識はゼロです。
使われている言葉すら分かりません。

調べ始めたんだけど、色んな説明してくれてるサイトはあるんだけど、
Windows、VCで絞ると、割と無かった印象。
なので、結構時間が掛かりました。

それで・・・・

続きを読む



嬉し恥ずかしお百姓一年生(3):カボチャ、サトイモ、エダマメ

   園芸 [2019/09/14]
春先に草刈りの手間をいくらかでも省きたいがために、荒らした畑の一部をマメトラで耕して見た。
実家裏の段々畑で5aくらい、裏山向こうの畑10aくらい。
何か植えようかと思って、タネを播いて育て始めたものの、それだけでは耕した分全ては使えそうになかった。

特に裏山向こうの畑に関してはNo Plan。

「そういや、爺婆元気だったときは何を植えてたっけな~」と考えた。
たしか、カボチャとか長芋、サトイモなんかが植わってたな。

6月初めころ、ホームセンターでカボチャ2品種と里芋の苗を買って、即畑に植えた。
3か月経過して、現状は・・・

続きを読む



VS2017-はじめの1/10歩(17):HTTPでファイルを送受信する(2)

   プログラミング [2019/09/14]
VS2017を使うんだけど慣れてないからVS6でまずは作ってました。
さらに、言わばWin32アプリです。
両方の環境(クロス環境)でコンパイルできるソースとして書いてます。
これまでの書き込みも含めると、

→ナレーション再生と音声認識を使う
  →そのため音声データの作り方(多言語対応)
  →ナレーション(.WAV)再生のサンプルコード
  →音声認識のサンプルコード
→VS6で作ったC/C++コードをVS2017に持って行って.cppレベルで共通にする方法
→ダイアログベースのプログラム
  →背景に画像(.BMP)を使う
  →ラベルを透かす
  →ボタンの色を変える
  →Windowsタブレット上でピンチイン/アウト:拡大縮小
  →タブレット画面の回転への対応
  →カスタムなチェックボックス作成
  →ボタンに画像を貼付ける
  →スクロールとスワイプ
→HTTPでファイルを送受信する
  →手法1:ブラウザ使って
  →手法2:Wininetを使う←今回

前回、1週間くらい掛けて調べた挙句に、当初の前提をチャラにして、
ブラウザコントロールは使わずに必要な機能を再度作ることにしました。

つまり、サーバスクリプト側には、
 ・ダウンロード:欲しいデータをリクエストして、
          お返しにそのデータファイルをレスポンスしてもらう。
 ・アップロード:アップしたいデータを伝えて、一緒にファイルも送り込み、
          結果のステータスのみレスポンスしてもらう。

◆ファイルを単純にダウンロードするだけ
URLDownloadToFile()を使ったら、あっさりできた。
しかも、呼び出したプログラムのカレントフォルダに書き込んでくれる。
(前回の「IEイベント操作方法」捜索は、もっと早くにあきらめればよかった。)

ヘッダとかに以下が必要。
//----------------------------------------------
#include <urlmon.h> //URLDownload()
#pragma comment(lib, "urlmon.lib")
//----------------------------------------------


ダイアログとかにダウンロード用のボタンがあるものとして。
ウィンドウプロシジャ内で
//----------------------------------------------
case WM_COMMAND:
if (LOWORD(wParam) == IDC_BTDL1) {
//パターン1:URLDownloadToFile
HRESULT rs;
rs = URLDownloadToFile(g_pWB2, g_FileDLUrl, "tameshite.zip", 0, NULL);
if (rs == S_OK) {
OutputDebugString(_T("Download success!\n"));
}
else if (rs == E_ABORT) { //0x80004004
//URLDownloadToFile()の第3パラメタでパス指定するとアボートされる。
//→IEテンプレートフォルダ?(このプログラムのカレント)に書き込まれる。
OutputDebugString(_T("Download error!! E_ABORT\n"));
}
else {
OutputDebugString(_T("Download error!! unknown\n"));
int rt = GetLastError();
}
}

//----------------------------------------------


URLDownloadToFile()関数の先頭パラメタg_pWB2は、AtlAxGetControl()が使えましたが、NULLでも大丈夫そうです。
g_FileDLUrlは、ダウンロードするファイルのURL、あるいはスクリプトのURLを指定します。


◆ファイルを問答無用でサーバ側に送りつける
ダウンロードで、ブラウザが必要なHTMLのフォームを介してのダウンロードは断念したので、アップロードも問答無用としたい。
調べました。

https://www.experts-exchange.com/questions/21043473/Automating-Internet-Explorer-to-upload-files-with-VC.html ★
HTMLとしてブラウザ上に表示されているformを操作するような感じなのかな?
まずは、キープ。

http://frog.raindrop.jp/knowledge/archives/000287.html
MFCを使う方法の説明。MFCかー。

http://programing-memo.blogspot.com/2011/05/ccgi.html
サーバ側の処理をC++で・・・みたいなので違います。

http://sdlabo.org/index.php?C%E8%A8%80%E8%AA%9E%E3%81%A7POST%E3%81%97%E3%81%A6%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89 ★
WinSockを使う方法かと思います。シンプルで分かりやすい。
これもキープ。

https://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34969&forum=7 ▼
VBのWebClient.UploadFileをVCでやりたいけど、上手くいかないとのQ。
Aがない。
でも、WebClientってこれまでも出てきた気がする。
これしか、ないのか?

と、ここで「cURL」というワードが登場。
https://teratail.com/questions/100418
https://curl.haxx.se/libcurl/c/example.html
https://curl.haxx.se/download.html

wikiで説明を読むと、なんか自由に使ってよさげなフリーのライブラリらしく、Windows版もある。
使用方法を説明するサンプルコードもあって、見ると至ってシンプルだ。
ダウンロードもアップロードもある。
ぐっと来てますが、
あれもこれもを追加すると、今はいいけど先々の継続性に不安を抱えることになるわけで。
MS社提供環境に絞って仕方なく使っているのも、いくらかでもOS/VSのバージョンアップ時の「互換」を期待してのこと。
・・・もうちょっと調べよう。

これまで使ってきたヘッダやライブラリをベースにファイルのアップロードについて語っているところを探すために「COM」「IWebBrowser2」とかのキーワードをプラスして探しましたがなかなか、さるが理解できそうなところに当たらない。

飽きちゃって、ぼやっと検索されたサイトを見てたら、
あれ?「Wininet」ってあるのね。
要はブラウザじゃない、URLアクセスですよね。
なんだよ、ちゃんとあるんだね。

ダウンロードのサンプルはすぐ見つかりました。
https://blog.systemjp.net/entry/2016/08/10/110128
http://yamatyuu.net/computer/program/sdk/wininet/wgetbin/index.html

アップも?・・・ありました。
https://code.i-harness.com/ja-jp/q/7309e
https://stackoverflow.com/questions/10097216/c-wininet-file-upload-with-http-post
https://www.dinop.com/vc/wininet_post.html

またもや方針転換です。
URLDownLoad()を使うのは止めて、Wininet APIを使います。


まあともかく、動かせそうなレベルまでコードを書きました。(ほぼパクリですけどね。)

じゃあ、動かして見ましょー・・・

続きを読む



VS2017-はじめの1/10歩(16):HTTPでファイルを送受信する(1)

   プログラミング [2019/09/13]
VS2017を使うんだけど慣れてないからVS6でまずは作ってました。
さらに、言わばWin32アプリです。
両方の環境(クロス環境)でコンパイルできるソースとして書いてます。
これまでの書き込みも含めると、

→ナレーション再生と音声認識を使う
  →そのため音声データの作り方(多言語対応)
  →ナレーション(.WAV)再生のサンプルコード
  →音声認識のサンプルコード
→VS6で作ったC/C++コードをVS2017に持って行って.cppレベルで共通にする方法
→ダイアログベースのプログラム
  →背景に画像(.BMP)を使う
  →ラベルを透かす
  →ボタンの色を変える
  →Windowsタブレット上でピンチイン/アウト:拡大縮小
  →タブレット画面の回転への対応
  →カスタムなチェックボックス作成
  →ボタンに画像を貼付ける
  →スクロールとスワイプ
→HTTPでファイルを送受信する
  →手法1:ブラウザ使って←今回
  →手法2:Wininetを使う


以降、試行錯誤も含めて説明しているので、きっと「何言ってるかわかんない」ことが多いかと思います。
さる用の身勝手備忘録なのでご勘弁を。

やろうとしていることを簡単に説明すると
タブレット上のアプリでサーバ側のスクリプトをキックして、DB上のデータをtsvファイルの形で受け取ること。
当然tsvファイルは暗号化済みのもの。
当初は、サーバ側スクリプト(CGI)で取り出すデータを指定してやる手順を想定した。
以前だれかが作ったHTMLを吐き出す前提スクリプトが存在していて、それを「使えるなら使おう」と考えたから。
なので、タブレット側のアプリ内でブラウザを動かす方法から調べ始めた。


◆ダイアログ上でブラウザを動かす
まずは、上記のタイトル+「VC」でググりまくって、以下の参考サイトを見つけた。
http://www.nitoyon.com/vc/tips/ie_component.htm ★1
http://www.ne.jp/asahi/hishidama/home/tech/vcpp/webbrowser.html ★2
http://www14.big.or.jp/~ken1/tech/tech17.html
https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/controls/webbrowser-control-overview

上記の★サイトを参考に
1)リソース
以下はVS6で実施。
ダイアログを作成し、作ったダイアログ上で右クリックして表示されるプルダウンメニューから「ActiveXコントロ-ルの挿入」を選択し、表示されるダイログ上のリストから「Microsoft Web Browser」を選択する。
→なんか黒く塗り潰された矩形が表示されたので、多分追加できたのだろう。
 サイズだけダイアログ フルフルになるように調整。

2)ソースコード
共通ヘッダファイル(.h)とかに以下を追加
//----------------------------------------------
//WebBrowser(ActiveX)表示用
#include <atlbase.h> //ATL基本機能用
extern CComModule _Module; //ATL利用時必須。変数名は限定らしい。
#include <atlcom.h> //ATL COM共通用(VC6.0時には明示が必要)
#include <atlhost.h> //ATLコンテナ機能サポート用
//----------------------------------------------



WinMain()ソース(.cpp)のWinMain()内で
//----------------------------------------------
//メッセージループ前に
_Module.Init(0, g_hInst); //ATLモジュールを初期化
AtlAxWinInit(); //コンテナ機能の初期化

//メッセージループ後で、プログラム終了前に
_Module.Term(); //ATLモジュールの終了処理


//IEダイアログを呼び出したいところで
AtlAxDialogBox(g_hInst, MAKEINTRESOURCE(IDD_IE), hDlg, (DLGPROC) DlgBrowseProc, (LPARAM) szUrl);

//----------------------------------------------


IEダイアログ処理ソース(.cpp)内に以下追加
//----------------------------------------------
//グローバル変数
CComModule _Module; //CComModuleの実体定義
CComQIPtr<IWebBrowser2> g_pWB2; //IWebBrowser2へのスマートポインタ
//----------------------------------------------


IEダイアログのWM_INITDIALOGメッセージ処理で
//----------------------------------------------
CComPtr<IUnknown> punkIE;
g_pWB2 = (CComPtr<IUnknown>) NULL;
//ActiveXへのI/Fを要求する
if (AtlAxGetControl(GetDlgItem(hDlg, IDC_EXPLORER1), &punkIE) == S_OK) {
g_pWB2 = punkIE;
}
if (!g_pWB2) {
//エラー処理
EndDialog(hDlg, 0);
return TRUE;
}
CComVariant vEmpty, vUrl((PTCHAR) lParam);
g_pWB2->Navigate2( &vUrl,
&vEmpty, //Flags:BrowserNavConstants列挙体で定義されている値の組合せ?
&vEmpty, //TargetFrameName:フレーム名 <a ... target="xxxx" ...>で指定するような名前
&vEmpty, //PostData:POSTで送るデータ。指定しないとGET。
&vEmpty); //Headers:追加のHTMLヘッダ
//----------------------------------------------


あっさり表示されました。

「ラッキー!」とか思って、VS2017にそのコードを持っていって、実行させると、AtlAxDialogBox()でエラーで終わる。
ステップ実行で追っかけたりして、どうもコントロールのCreateWindowに問題がありそうなところまでは分かった。
VS2017のリソースエディタで、ActiveX(Microsoft Web Browser)を貼り付け直してみたが、ダメ。
OSを変えると、GUID/クラス名らしき部分の表現を変更するような例もあったので、まねっこしたが、ダメ。

一度VS6に戻って、

3)ソースコード再修正
AtlAxDialogBox()をDialogBox()に替えて
//----------------------------------------------
//AtlAxDialogBox(g_hInst, MAKEINTRESOURCE(IDD_IE), hDlg, (DLGPROC)DlgBrowseProc, (LPARAM)szUrl);
DialogBox(g_hInst, (LPCTSTR)IDD_IE, NULL, (DLGPROC)DlgBrowseProc);
//----------------------------------------------


AtlAxGetControl()前で、以下を追加
//----------------------------------------------
RECT rect;
HWND hwndie;
GetWindowRect(hDlg, &rect);
hwndie = CreateWindow("AtlAxWin",
"Shell.Explorer.2",
WS_CHILD | WS_VISIBLE,
0, 0, rect.right-rect.left, rect.bottom-rect.top,
hDlg, (HMENU)0, g_hInst, NULL);
//----------------------------------------------


AtlAxGetControl()自体は、以下に変更
//----------------------------------------------
//if (AtlAxGetControl(GetDlgItem(hDlg, IDC_EXPLORER1), &punkIE) == S_OK) {
if (AtlAxGetControl(hwndie, &punkIE) == S_OK) {
g_pWB2 = punkIE;
}
if (!g_pWB2) {
//エラー処理
EndDialog(hDlg, 0);
return TRUE;
}
//----------------------------------------------


VS6では、アッサリ動きました。
再度、VS2017に持って行ったら、やっぱりダメ。CreateWindow()でエラーになる。
リターンコードが、ERROR_CANNOT_FIND_WND_CLASS(1407)。

★1参考サイトに"AtlAxWin80"に変えみるとか、OSのバージョンに依存するらしいことが書かれてあったので、
"AtlAxWinXX"で、XX=70,71,80,81,100,120,170を全て試してみたけど・・全部ハズレでした。

「AtlAxWin」で検索しまくってたら
https://social.msdn.microsoft.com/Forums/en-US/88a981ea-8125-4917-a45e-87cfbc7fd1dd/createwindowatlaxwin-does-not-work-using-vs2003?forum=windowssdk★3
がひっかかった。

4)ソースコード再々修正
「ATLAXWIN_CLASS」というのがどっかに定義されてるっぽい記述。
「hwndie = CreateWindow(ATLAXWIN_CLASS,・・・」と指定したら、動いた。
なので、以下をヘッダとかに追加。
//----------------------------------------------
#ifndef ATLAXWIN_CLASS
#define ATLAXWIN_CLASS "AtlAxWin"
#endif
//----------------------------------------------


これで、VS2017でビルドしても動きます。

注意)AtlAxDialogBox()をDialogBox()に変えた影響で、最初に表示するURLをlParamで伝えられなくなったので、そこも別の方法にする必要あります。

さて、そこからが長かった。


続きを読む



嬉し恥ずかしお百姓一年生(2):変なブロッコリーとナス

   園芸 [2019/09/12]
荒らしてしまった畑を有効活用させようかと、今年から耕しはじめました。
実家の裏の段々畑と、歩いて裏山を超えて10分くらいの畑のほんの一部。

毎週日曜は、お百姓仕事の日と決めてます。
でも、そのほとんどは草刈りに明け暮れている感じ。

先々週、広い方の圃場(畑)と山林(栗林)の草刈りを終えたところ。
全体を一巡するのに、3か月くらい掛かってます。
1クールする間に2度目、3度目刈りしたところもある。

2度刈りしてないところは、既に元通りの原野状態です。

で、今回の失敗作は・・・

続きを読む



カレンダー
09 | 2019/10 | 11
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
プロフィール

さるもすなる

Author:さるもすなる
さるです。別HPサイト「さるもすなる」から侵食してきました。 山菜/きのこ、それとタイトルにしたPPバンド籠のことをメインに徒然に・・・・暇を持て余したさるの手仕事:男手芸のブログってことで。

最新記事
最新コメント
月別アーカイブ
カテゴリ
天気予報

-天気予報コム- -FC2-








本家のHPのトップ
山菜や茸の話です
PPバンドの籠作品と作り方です
投稿をお待ちしております



ブログランキング・にほんブログ村へ にほんブログ村 ハンドメイドブログへ



マニュアルのお申し込み



検索フォーム
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR