2020年12月26日土曜日

コロナとインフルの比較

新型コロナウイルスの致死率は、0.25%~4%程度、インフルエンザの致死率は0.1%程度。

でも、無症状率がコロナが最大60%、インフルが10%

無症状も多いけど、いったん悪化すると命にかかわる危険性がインフルの40倍ということのようです。

https://www.saiseikai.or.jp/feature/covid19/influenza/

※最近の情報では、無症状率はコロナで20%以下となっているようです。2021/1/5

    

2020年11月21日土曜日

OCRでレシート処理し、OFX変換

 C#でレシートをOCR処理してOFXに変換して、Moneyに読み込んで使ってきた。これまで、OCRはGoogleをネット経由で使ってきたが、通信を使うためいまひとつレスポンスがよくなかった。tesseractを試してみたら、速くて認識もそこそこ正確でよい。

https://gammasoft.jp/blog/tesseract-ocr-install-on-windows/#next-step

ELMで数の分解練習ドリル

  ELMで10までの数の分解ドリルをつくってみた。関数型の言語は、機能を追加するときに、どういう構造にするか少し考える必要はあるが、関数を使って統一的に作られているのですっきりしたものにできる(覚えるべきことが少ない)。ELMアーキテクチャも、データの変更の流れを把握しやすく、WEBアプリ作成にあっていると思う。また、コンパイルエラーメッセージが詳しいので、それを見ながら手直しがしやすい。

https://gh6141.github.io/gitdrill/src/Subunkai_Btn.html

車をクリックすると車種が変化するので、数の確認に使えるかと思います。

ソースは以下の通り。とりあえず動けばいいという感じで作ったので、まだまだ改善の余地はありそうですが。

2020年11月16日月曜日

久々に某大学の図書館に行ったが

 久々に、本を借りようと近くの大学の図書館に行ってみたが、コロナの影響で、学外の人には貸せないといわれてしまった。残念。別の大学等は、貸し出ししてるんだけど、、、。

実践scala入門を読んでみた

  実践scala入門を読んでみたが、要点がコンパクトにまとまっていて、読みやすい。コップ本も、説明が詳しく深く理解するにはいい部分もあるが、あまりに説明が長く難解なところもある。その点この本は、短期間に概要を理解するにはいい本だと思った。

2020年11月10日火曜日

シャワー取付台のねじゆるみ

 シャワー取付台のねじはゆるみやすい。壁側の穴が少しずつくずれて大きくなっていると思われる。これまで、場所を変えたりしてきたが、やはり何年かすると自然と緩んでくる。

 今回は、アンカーを使ってみた。しっかり固定できた。穴の径が大きいほうが、当然固定する力は大きくなるので、これでしばらく様子を見てみることにした。

2020年10月31日土曜日

石灰沈着性腱板炎

 数週間前から徐々に肩の痛みが出てきて、整形外科の診察を受ける。石灰沈着性の炎症らしい。どうやら、横になると痛みが増す。ゆっくり寝て早く治したいところだけど、痛みで眠れないとそうもいかなので、どうしたものかと。 以前、横になると咳が出やすくて苦労したことがあり、そのとき、寝床に若干の角度をつけるといいことがわかった。今回も、同じことを試してみたら、ズキズキ感が和らぎ、おかげで回復もはやくなったようです。

コップ本(Scala)の読み直し

 数年前読んだ、コップ本を再度読み直してみている。暗黙の変換、暗黙のパラメータのあたりまで読んだところで、暗黙のパラメータがいまいちわかりにくかったので、ネットでもわかりやすい説明ないか探してみる。以下の説明がわかりやすく助かりました。

    https://scala-text.github.io/scala_text/implicit.html

 https://qiita.com/fujisawaryohei/items/c47836beb5ea94e14103

2020年9月19日土曜日

supernote A6 4分割利用

  電子書籍は利用してないけれど、PDF文書の読みかきの機会は多い。以前は、PDFの読み書きは、PCやタブレットを使っていた。PCは文字が大きめにできる点ではいいけれど、手書きの書き込みが難しい。タブレットはバッテリーの充電が頻繁に必要で、手書きの精度もいまひとつ。そこで、Supernote A6を購入してみた。

 充電は1週間に1回程度でいいし、手書きの精度もほとんど、紙に書くのと変わらない。まだ、アプリのアップデートは続いているようなので、さらに使いやすくなることを期待したい。

 文字の大きさについては、見開き縦書き書籍などは2分割、見開き横書きであれば、4分割などして、見やすく加工すれば問題なく使える。文の境目で分割されることもあるので、-crop 50%%x52%% としました。

4分割のためのバッチファイル 例
magick.exeはimagemagickというフリーツールで利用できる。 pdftkもフリーツールです。

 2chika.exeはオリジナルツールで、白黒二値化を動的に行うためのものです。
以前掲載したソースの改良版。(argmentsを使えるようにした)

2020年9月18日金曜日

raspi sdカード交換

 やはり、raspiは、サーバーとして利用していると、1,2年程度でSDカードが破損するので、バックアップは必須といえる。システムイメージは、PCに保存し、データはGitでバックアップとるようにしている。
 今回、無料SSL Let's encryptの自動更新の設定をいろいろ試している間に、SDカードの破損が発覚。少し復旧に手間取ってしまったが、なんとか古いバックアップから構築しなおすことができてほっとする。
 壊れてから更新でなく、1年ごと定期的に更新すべきかもしれない。
  raspiはCloud9を入れて使っているが、とても便利である。ただ、使える言語はpython(bottle)等の軽めのものでないと難しいようだ。scala(play)なども考えたけど、やはり難しいようだ。

canvasに画像貼り付け

 javascriptでcanvasへ画像貼り付けできないか試してみた。

canvasで、右クリック貼り付けとしたかったのですが、うまくいかず。

とりあえず、div要素をクリック後、CTRL+Vで貼り付けしてみたらなんとか動作した。

HTMLには
<div id="paste">click here & paste(CTRL+V)</div>
<canvas id="cvs" width="950" height="800"></canvas>

http://blog.livedoor.jp/philipdayon/archives/1045591761.html を参考にさせていただきました。


2020年9月12日土曜日

ドコモ口座対策

 ドコモと契約してない関係ない人が被害にあうという。

素人考えかもしれないけれど、ドコモ口座と銀行が紐づいているかどうか、利用者が簡単に確認できるシステムさえあれば解決できそうな気もするのだけど。また、こちらで、口座を毎月チェックなどしなくても、銀行側でドコモ口座等へのチャージがあれば、メールで通知してくれる機能とか、いろいろ対策はありそうな気もするけれど。


2020年9月6日日曜日

FG201耕運機修理

  今年は耕運機がまったく動かず、素人ながらいろいろ修理をしてみたが、動力系は自分にとってはやはり難しい。電圧が低く、点火しないような気がして、イグナタを交換したが、そうではなかったようだ(車だとイグニッションコイルがだめになることはたまにあるが、耕運機はめったにないようだ)。キャブレーターをキャブレタクリーナとパーツクリーナーできれいにしたら。少し動きかけたが、すぐとまる。電圧が低いと勘違いして、イグナタの位置をマグネットに近づけすぎたのが原因だったよう。あまり近すぎても回転がスムーズにいかない。同様に、点火プラグの間隔もいじってしまったが、これもあまりよくなかったかもしれない。

 イグナタの位置調整でとりあえず、動くようになったが、なんとなく、不安定な感じがする。カタカタ金属音のような音も交じっている。このところ、広い畑を使っているわけでもないので、ここはあきらめて、下取りにでもまわして、プロに再生をおまかせといったところかも。

2020年8月28日金曜日

動的な二値化

 写真で文書をとると、照明の関係でどうしても、背景の明暗が影響して二値化がうまくいかない。これをうまく処理するために、opencvsharpライブラリを利用しC#で作ってみた。Nugetで、ライブラリを入手して作成。だいぶみやすくなる。

2020年8月21日金曜日

サピエンス全史

ユヴァル・ノア・ハラリ氏のサピエンス全史を読む。
虚構が協力を可能にした。
農耕がもたらした繁栄と悲劇。
 贅沢品は必需品になり、新たな義務を生じさせる。
文明は人間を幸福にしたか

2020年8月19日水曜日

JPGからPDFを一括で作成

 バッチファイルで、JPGからPDFを作成するコマンドを考えてみた。

必要なものとして、ImageMagickとpdftk。

処理したいJPGがあるフォルダの中に、以下のバッチファイルを置いて、実行します。できたPDFは一つ上のフォルダに作成されます。

for %%i in (*.JPG) do (magick.exe convert   %%i %%i.pdf)

pdftk *.pdf cat output ..\ketugo.pdf

del *.pdf

2020年8月12日水曜日

不要なものを捨てることで見えてきたこと

 場所だけ取って使わないものが増えてきた。自然界はほうっておけばエントロピーがつねに増大する(散らかる)。モノが増えると、肝心のときさがせず、結局また買ってしまうこともある。どれを使おうかと選択したり、掃除・整理したりすることに時間がかかる。壊れたら、修理を試すこともある。粗大ごみは捨てるのにもお金がかかる。意外に生活への影響が大きい。

 ここ1週間ほど持ち物の整理をしてみた。まだ十分でないが、以前に比べたらだいぶモノが減って、モノの管理は楽になってきた。今後ものを買う場合は、よく吟味して、せっかく減らしたものがまた増えないように気を付けたい。

 モノと同様、情報もありすぎると結局使わない。ハードディスクやSSDも安くなってきたけれど、あまり多くのデータがあっても、肝心のものを探すのに時間がかかる。ときどき、整理し、データを減らすことも必要だと感じる。

2020年8月7日金曜日

ディスプレイをラックに固定してみた

 せまい机なので、ディスプレイをスチールラックに固定したら、だいぶすっきりした。900mmのスチール板2本を購入しVESA用のねじとワッシャーでディスプレイを固定した。最初、M4 10mmのねじで試したが、深さが足りず、15mmに変更したらうまくいった。構造上VESAアームをつけられない机(しかもアマチュア無線用のラックもあり)なので、安くすますために、この方法をとってみた。
 ついでに、机左側と奥に、100mm幅の板を金具を取り付けることで、面積を拡張した。(壁との間にものが落ちるととりずらいので)


2020年7月19日日曜日

デフレを解消するには

目からウロコが落ちる奇跡の経済教室という本を読んでみた
 ・日本だけ成長しなくなったのは、デフレが原因
・合成の誤謬:個々は正しく行動しても、全体としては好ましくないこと。景気悪いので、支出切りつめ節約→需要の縮小→物が売れない
・デフレを解消するには、大きな政府、財政出動の拡大、減税、金融緩和、規制強化(産業保護、労働者保護)、重要産業の国有化、グローバル化の抑制
・貨幣には現金通貨と預金通貨がある。預金は銀行が貸し出しを行うと創造される。銀行は、保有する資金量の制約は受けないが、借り手の返済能力の制約は受ける。
 ・現代貨幣理論(MMT):通貨を納税手段に→結果的に通貨が国民に受け入れられ広く使用される。
 ・量的緩和では貨幣供給量は増えない。財政政策が必要。
・機能的財政論:財政赤字=民間貯蓄、自国通貨建て国債が返済不能となることは歴史上例がない。財政赤字の大きさは、財政危機とは無関係で、基準はインフレ率。税は、物価調整や所得再分配など経済全体を調整するための手段であり、財源確保の手段ではない。
金利上昇は、財政赤字の拡大ではなく、デフレ脱却が必要。
・国内民間部門の収支+国内政府部門の収支+海外部門の収支=0
・戦後日本の輸出依存度は10~15%程度で、内需大国で貿易立国ではない。自由貿易が経済成長をもたらすとは限らず、保護貿易の下で貿易が拡大することもある。
  MMTへの反論としては、いったん、インフレになると対応まで時間差がどうしてもできるので、対処が難しいのでないか、日本の人口構造からデフレはやむを得ないとかいう意見もあるようですが、本当のところはどうなんでしょう?

2020年7月10日金曜日

VBAマクロで任意のエクセルファイルから、必要データを抽出

共有上にあるエクセルファイルから別のエクセルファイルにデータを抽出したいときマクロ(設定シートにファイルパスなど入れておく)を利用すると便利

ファイルパスは、以下のようなマクロで取得
 
データのコピー処理は以下のようなマクロで

2020年7月5日日曜日

ルベーグ積分 要点と復習 問1.26

f=Σaj1Ej (1.5)
問1.26 ①{Ej}が互いに素ならば (1.5)のようにあらわされる関数fの地域は高々可算であることを示せ。また、②{Ej}が互いに素でないならば、値域は一般には、非可算であることを例によって示せ。
(∵)
①:{Ej}が互いに素とすると、 X∖ UjEj≠0ならば これを付けくわえることで  UjEj=Xとしてよい。 このとき ∀x∈Xは ちょうど 1つのEjに入るから
  fの値域は {aj}
②:{Ej}が互いに素でないとき (1.5)のfの地域が非可算になる例
 区間I=[0,1) 上の関数 f(x)=x の値域はIであり 非可算
  f(x)(=x)∈Iの2進展開は
     f(x)=Σ(1/2)^j・αj(x) =Σ(1/2)^j・1Ej(x) 
 ただし、 αj(x)は0または1であり それによって f(x)は [0,1)の中のいずれかの値をとる。
  イメージとしては
   xα= (1/2)^1・0+(1/2)^2・1+(1/2)^3・1+....+(1/2)^n・0 だとすると、 Ej={x∈I:αj(x)=1} と表せるが 上の例では E2でも、E3でもxαが該当

    

2020年6月28日日曜日

ルベーグ積分 要点と復習 問1.11

B(R={E∪F:E∈B(R)、F⊂{-∞、∞}}
(∵) 右辺=Bとする

  B(R)∪{-∞}∪{∞} ⊂ B ⊂ B(R
              ①   
①について確認:
   B(R)={{E1},{E2},,,,}とすれば
 B(R)∪{-∞}∪{∞}= {{E1},{E2},,,,{-∞},{∞}}
 B={{E1},{E2},,,,{-∞},{∞},{E1,±∞},,,{E2,∞},,{±∞},,,} というイメージ?

  B(RはB(R)U{∞}U{-∞}から生成したσ加法族  
 B(R)U{∞}U{-∞}を含むσ加法族の最小のものなので、Bがσ加法族なら、 B(R)と一致

 Bがσ加法族を示すとよい
(ⅰ) R =R∪{-∞、∞} ∈ B
(ⅱ) E∈B(R)、F⊂{-∞、∞}とすると
     R ∖(E∪F)=(R∖E)∪({-∞、∞}∖F) ∈ B
    ∵  E∪F∈B   R∖E∈B(R)  {-∞、∞}∖F ⊂{-∞、∞}
(ⅲ)En∈B(R)、Fn⊂{-∞、∞}とすると
     Un(EnUFn)=(UnEn)U(UnFn) ∈ B
    ∵ EnUFn ∈B    UnEn ∈B(R)   UnFn ∈{-∞、∞}

Lets Encrypt 更新

 SSLを無料で使えるLet'sEncryptですが、更新が3か月ごとということで、そのコマンドの手順が、システムが複雑だといろいろ大変。
 ファイヤーウオールで80ポートをどう通すかが、けっこうカギになるようだ。
raspiで運用しているが、1か月ごと自動で処理できないか、試してみる予定。
sudo pico /etc/crontabで設定
sudo certbot certificatesで 残り日数が確認できる
sudo certbot renew --dry-runでテストしてから、うまくいったら、--dry-runをはずして実行するとよいようだ。

2020年6月27日土曜日

ルベーグ積分 要点と復習 問1.10

可測空間(X,Bx)から可測空間(Y,By)への写像fがある。次の2条件は同値であることを示せ。
(ⅰ)引き戻しf-1(By)はBxに含まれる
(ⅱ)押し出しf(Bx)はByを含む

(∵) (ⅰ)は    f-1(By)={f-1(F):F∈By} ⊂ Bx
      包含関係から
      ∀f-1(F)∈f-1(By)ならば f-1(F)∈Bx   ①
       f-1(F)∈f-1(By) ⇔ F∈By なので
      ①は F∈Byならば f-1(F)∈Bx (②) と同値
       f-1(F)∈Bx ⇔ F∈f(Bx) なので
      ②は F∈Byならば F∈f(Bx) (③) と同値
      ③より包含関係は f(Bx)={F⊂Y:f-1(F)∈Bx}⊃By

2020年6月26日金曜日

ワンタッチでスマホからNASへファイル移動

 AndroidStudioを使って、スマホから撮った写真をNASに移動するアプリを作ってみた。AndroidStudioは使いやすい。
 ただ、古いスマホで動作するアプリにするため、ライブラリのバージョン合わせが大変だった。(javaの機能も古い非推奨のものしか使えないので)また、レイアウト設定方法も常に新しいものになっているので慣れるまで少し時間がかかる。
 以前、NASからスマホにデータ移動する非同期処理アプリを作っていたので、それに機能追加する形にしてみた。以前はなんか転送スピードが遅いと思っていたが、bufferがディフォルトで1024bytesというのが原因だった。1MBにしてみたら改善された。
 移動元、移動先パスは固定にした。USBケーブルをつなぐ必要もないし、データの宛先を指定したりする必要がないので、スマホカメラも便利に使える。デジカメなどは、その都度SDCARDを取り出したりという手間がかかるので、それに比べると手軽です。
ソースは以下にあります。
https://github.com/gh6141/SumahoCopy

追記2022.10:上記は、Andoroid 7ぐらいでは、動作確認できていますが、AndroidのOSが新しいと手直しが必要です。


2020年6月20日土曜日

i-5 NoteのSSD交換

 昨年、ハードオフで購入したi5の15インチノート(A573/G)は、メモリ8MBに増設し、中古SSDに交換して使っていました。さすがに、今年になってたまに、プチフリーズが目立つようになってきました。新品のインテルのSSDにしてみたところ、問題なく使えるようになりました。SSDは、あまりケチらないほうがいいようです。あとは、液晶がどの程度長持ちしてくれるかですが。 新品のノートでなくても、メモリ増設とSSDの利用でとくにストレスなく使えています。
 https://blog.goo.ne.jp/freedomeagle/e/8e1334748c627c8838e364f3c17b7dae
上記リンクが詳しいです。けっこうな作業量です。

CS-223CFR基板交換

 エアコンが調子悪くなってきたので、修理してみた。
 症状は、動作するまで何回かON OFFする必要がでてきたこと。いったん、動き出すと問題ないけれど。症状からおそらく、制御系の問題と推測。
https://panasonicbuhin.ocnk.net/product/1612
上記リンクから基板が入手できたので、1万円ちょっとで購入。(ナショナル(パナソニック)の場合は、基板の故障が多いという情報もあったので)

 電源コード抜いても数分は危険らしいので、作業前にあらかじめコンセントは抜いておいた。室外機の上面、前面カバーをはずしてから、基板につながるケーブルを外していきました。ほとんどのコネクタが違う型なのですが、一部、似たようなコネクタも2,3あります。念のため、外す前にコネクタの白い部分に取付位置を簡単にネームペンで記入しておきました。
 取り外した基板をよくみると、放熱板付近の色が少し変色していました。熱による不具合でしょうか。新しい基板に交換して試してみたら無事、正常運転できるようになりました。


2020年6月7日日曜日

物置の扉についている見慣れないもの


 久しぶり、草取りをしていたら、物置の扉に見慣れないものがくっついている。最初は、何かの種と思ったが、取るときに粘着性を感じる。ひょっとして何かの虫と思い、画像データで画像検索したら、どうやらミノムシらしい。絶滅危惧種になっているらしい。
 雄はガとして飛び回るけど、雌は蓑の中にとどまるらしい。幼虫のときは葉を食べるけれど、成虫になると口も退化して何もたべず、交尾後一生を終えるのだとか。不思議な生き物もいるものです。

2020年5月4日月曜日

繰り下げ年数

K=0.01*0.7*12
X:繰り下げ年齢
E:寿命
とすると (1+K(X-65))*(E-X)なので、微分して
X=-1/(2K)+(E+65)/2
E=-65+2*(X+1/(2K))
予測寿命に照らして、適切な繰り下げ年齢は


2020年5月2日土曜日

ELMで月の取得

日付の扱い(とくに月データ)については、ELMは複雑なようです。
import Timeだけではだめで
exposing (Month(..), Posix, Weekday(..), Zone)
をつけることで解決。

https://github.com/ababup1192/elm-firebase-chat/blob/master/src/Main.elm

2020年5月1日金曜日

ELMでのPost & 全角文字処理について

ELMでpostが必要になり、情報をさがしました。
https://nulab.com/ja/blog/nulab/elm-introduction-tutorial-2/
を 参考にさせていただきました。

Http.post
        { url = ”/path”
        , body =Http.stringBody "application/x-www-form-urlencoded"
                ("komoku1="
                    ++ komoku1
                    ++ "&komoku2="++komoku2
                )
        , expect=Http.expectString GotText
        }
のような感じで使えるようです。

bottleと組み合わせて、使っていましたが、bottleのrouteで、全角文字は使えないので、どうしようかと考えた結果、Postで全角データを渡すことで解決。

なお、Pythonでは
urllib.parse.unquoteを使えばデコードができる。
ajaxの送信側では、全角文字のエンコードは自動でやってくれるようだ。

ただ、それでも<img src=...>による画像表示の中に全角文字が入るとどうしようもない。そこで、画像ファイルについては、md5によるハッシュで変換することで解決した。
CybozuLabs.MD5.calcを使わせていただきました。
https://labs.cybozu.co.jp/blog/mitsunari/2007/07/md5js_1.html
なお、Python側でもmd5ハッシュを使おうとしましたが、javascript側での計算値と一致させる方法がわからず、javascript側から、ハッシュ値をpython側に送って使うようにして解決。Hashの基本的使い方がまだ勉強不足。


ELMで URL Encode

ELMで全角データをPostするため、Encodeが必要になりいろいろ調べた結果、percentEncodeを使うとよいことがわかる。Maybe Stringのままで変換する必要があるので、
import Url
urlEncode:Maybe String -> Maybe String
urlEncode ma =
    case ma of
     Nothing -> Just ""
     Just a -> Just (Url.percentEncode a)
このような関数を作って Maybe Stringに適用できるようしてみたら、うまくいく。

2020年4月26日日曜日

スマホ用メモアプリ

javascriptとbottleを組み合わせて、手書きできるスマホ用のかんたんなメモアプリをつくってみた。外でちょっとしたメモをしただけで、即、クラウドに保存されます。(スマホは、キー操作よりタッチ操作が便利なので)

ajax送信部分は
 

こちらがバックエンドになります。(bottle)


・スマホのイベントはマウスとは別にタッチイベントをつくる必要があります。微妙に座標の処理が違います。
・保存ボタン不要にするため、タッチが離れるたびにAjaxで画像をPostしてクラウド上に保存しました。
・javascriptソースをアップしようとしたのですが、ブログのセキュリティフィルター?のためか、うまくいかず、一部だけのせました。

heroku にbottle paste適用

herokuでのbottleは、あまりダウンすることもなく割と安定して動いてはいましたが、raspi2のbottleにpasteを入れたので、herokuにもpushしてみました。ところが、いろいろひっかかるところがあってうまく動作しません。

・ web.serve(app, host='0.0.0.0',  port=int(os.environ.get("PORT", 8888)),daemon_threads=False,threadpool_workers=25,use_threadpool=True)
というように、port=int(os.environ.get("PORT", 8888))を入れるといいようです。
https://qiita.com/sgigagaeru/items/d0bffd18d1644d292b3d
上記のリンクを参考にさせていただきました。こうすると、raspiでは8888で、herokuでは対応したポートに自動で切り替わるようです。

・requirements.txtに、必要なモジュールを追加しておく必要があるようです。
herokuでpip install pasteだけではだめで、このファイルに
Paste==3.4.0
を1行追加したらokでした。

この2つだけなのですが、いろいろ試行錯誤したり、ネットの情報集めで意外と時間がかかってしまいました。

2020年4月24日金曜日

bottleでstatic_fileを使う

javascriptを読み込むためにstatic_fileを使おうとしたが、最初使い方がよくわからなかった。こちらを参考させていただく。
jsファイルやJpgファイルなど区別して、mimetypeを指定してやるといいようです。

@app.route('/py/<fname:re:.*\.js>')
def static(fname):
    return static_file(fname,root='/home/pi/c9/bottle/python-getting-started/py',mimetype='application/javascript')
   
@app.route('/py/<fname:re:.*\.jpg>')
def staticjpg(fname):
    return static_file(fname,root='/home/pi/c9/bottle/python-getting-started/py',mimetype='image/jpg')


2020年4月22日水曜日

Raspi2でSSL化

http://itemy.net/?p=1052 あたりを参考にさせていただいた
ついでに、pythonのバージョンも3に変更した
https://qiita.com/Takumi_Kaibara/items/6aadf1ac2c1f6bea41a8

無料SSLはCertbotなどでググるとたくさん情報がある
Cerbot入門
エラーの処理なども説明してくださっているサイトも参考になります
https://blog.ijoru.com/?p=675

リバースプロキシを使うことにした
http://itdoc.hitachi.co.jp/manuals/link/cosmi_v0950/03Y1830D/EY180050.HTM
bottleを使うと、シングルスレッドなので、よく落ちます。それを改善するにはPasteを使うといいようです。
https://www.netmarvs.com/archives/895

RasPi2では、Cloud9とbottleの2つをポート番号を違えて動かしていたので
リバースプロキシからうまくつなげるのに、苦労した。

ネット上にも情報がないので、試行錯誤の結果、以下のようにしたらうまくいった。
default-ssl.confのProxyPassは
ProxyPass /abc  http://localhost:12080/abc
ProxyPass /def http://localhost:12080/def
....等々bottleのサーバを記述し
cloud9については、最後に
ProxyPass /  http://localhost:8080/
としてやるとうまくいった。




2020年4月18日土曜日

標準ツールでパケットキャプチャ

通信の不具合チェックに、いちいちWiresharkをインストールするのも気が引けるので、そういうときは標準ツールでキャプチャして、解析する方法があるようだ。
https://www.hi-song.jp/entry/2017/06/25/071031
を参考にさせていただく。
キャプチャの開始:netsh trace start capture=yes
キャプチャの終了:netsh trace stop
出力先や最大サイズも指定もできて
netsh trace start capture=yes traceFile=D:\YYYYMMDD-HHMMSS.etl maxSize=1000
などとするといいようだ。
https://troushoo.blog.fc2.com/blog-entry-416.html
で、etl2pcapngというツールを入手して、Wireshark用のファイルに変換します。
etl2pcapng 20200418-120600.etl dst.pcap というように。

ルータのファイヤーウオールの設定について

 久しぶりにファイヤーウオールの設定を変えてみた。機器の種類により微妙に設定方法が違うので、注意が必要。
 ある程度きびしめに、設定して必要に応じてポートを開けていくようにするようにしている。ただ、送信元と宛先のプロトコルとポートの組み合わせをよくチェックしながら設定しないとうっかりミスしやすいので注意が必要なようだ。
 ・ディフォルトの設定に加えて
  ①まずいったん、内部から外部へのすべてのアクセスを制限
  ②次に、内部から外部への必要なアクセスを許可していく(Web,メール,DNS等)
  ③外部から内部へのアクセス許可を必要に応じて許可していく
 ③の場合は、IPマスカレードの設定で、ポートにより外部からのアクセスの振り分け設定が必要。

2020年4月9日木曜日

groupsession 回覧の「確認」クリックせずに既読に

グループセッションは、機能も豊富で、便利に使わせていただいています。
また、ソースを公開してあるため、カスタマイズもできるようになっています。
今回、回覧機能で、確認ボタンをクリックしなくても、既読になるように
カスタマイズしてみました。Cir020Action.javaの2か所を変更します。

    private ActionForward __doInit(
        途中省略
        biz.setPrevNext(paramMdl, con,
                paramMdl.getCirViewAccount(), GSConstCircular.MODE_JUSIN, userSid);
        paramMdl.setFormData(form);
        con.setAutoCommit(false);

        //********************ここから
        RequestModel reqMdl = getRequestModel(req);
        MlCountMtController cntCon=null;
try {
cntCon = getCountMtController(req);
} catch (Exception e) {
e.printStackTrace();
}
        String appRootPath = getAppRootPath();
        paramMdl.setParam(form);
        try {
biz.doUpdate(
        paramMdl, con, reqMdl,
        paramMdl.getCirViewAccount(),
        userSid, cntCon, tempDir, appRootPath);
} catch (Exception e) {
e.printStackTrace();
}
        paramMdl.setFormData(form);
        //++++++++++++++++ここまで 追加

        return __doDsp(map, form, req, res, con, true);
    }

private ActionForward __doPrevNext(
     途中省略
            }
        } finally {
            con.setAutoCommit(false);
        }

     ********************ここから
        RequestModel reqMdl = getRequestModel(req);
        MlCountMtController cntCon=null;
try {
cntCon = getCountMtController(req);
} catch (Exception e) {
e.printStackTrace();
}
        String appRootPath = getAppRootPath();
        Cir020ParamModel paramMdl = new Cir020ParamModel();
        paramMdl.setParam(form);
        Cir020Biz biz = new Cir020Biz();
        try {
biz.doUpdate(
        paramMdl, con, reqMdl,
        paramMdl.getCirViewAccount(),
        userSid, cntCon, tempDir, appRootPath);
} catch (Exception e) {
e.printStackTrace();
}
        paramMdl.setFormData(form);
        //++++++++++++++++ここまで 追加

        return __doDsp(map, form, req, res, con, true);
    }

2020年3月29日日曜日

エクセルで他のエクセルファイルを汎用的にリンクするには

・エクセルで他のファイルをリンクするとき問題になるのが、リンク先の場所が変更なった場合ですが、そういった場合でも、対処できるように、パスを設定シートのセルに保存しておくようにするといいと思います。
・さらに、汎用性高めるため、ひとつのリンクセルの式をそのままコピペすることができるようにしておくと便利です。

 そこで、次のようなものを作成してみました。まず、設定シートに以下のようなパスをいれておきます。
 設定!B2セルに E:\Mydocuments\[Book3.xlsx]Sheet1


つぎに、これを読み取るセルは次のようになります。
 =INDIRECT("'"&INDIRECT("設定!$B$2")&"'!"&ADDRESS(ROW(),COLUMN()))
 このようにすることで、このセルを他の場所にコピペすることで、広い範囲のリンクを表示させることができます。
 ただし、リンク先のエクセルファイルは開いている状態になっている必要があります。

なお、この式をつくりながらきづいたのですが、INDIRECTとADRESS、ROW,COLUMNは組み合わせて使うと便利な場面がいろいろありそうです。
たとえば
=INDIRECT("Sheet2!"&ADDRESS(ROW(),COLUMN()))
なども、式のコピペが簡単にできますが、単に別シートの位置のデータのリンクを生成するだけです。ROWやCOLUMNは数値なので、2倍して足したり引いたりなどして、リンク先の任意の場所のデータを1行おきや1列おきに参照したりも可能になります。

PDFをC#で作成 フォントについて


https://gammasoft.jp/blog/pdf-japanese-font-by-csharp/
を参考にさせていただきました。PDFsharpを使いました。
フォントが問題なるようですが、上記のプログラムを参考にさせていただきました。
明朝体を使いたかったので、IPAからフォントを入手して使ってみました。

C#でフォントのプロパティでビルドアクションを埋め込みソースにします。
あとレゾルバーのソースに何行か追加しますが、最初
  private static readonly string IPAMJM_TTF =  "<プロジェクト名>.fonts.ipamjm.ttf";
の<プロジェクト名>.fontsの部分をうっかり入れ忘れて、気づくまでしばらくかかってしまいました。ここ以外は、他の行を参考にすれば、変更方法は類推できると思います。

2020年3月20日金曜日

eclipseのgitについて

https://www.gwtcenter.com/egit-first-step
などを参考に、使い方を確認した。

ただ、なぜかうまくいかない。コミットもうまくいかない。
なぜだろうといろいろ考えながら、フォルダの中を直接のぞいてみると
あちこちに.gitフォルダや.gitignoreのファイルが散らばっている。いろいろ試しいるうちに増えてしまい、それがそのまま残っていたのが原因のようだった。
これらのファイルをすべて削除したら、うまく動作した。

2020年3月7日土曜日

POIでセル結合ありのエクセルデータをHTMLに変換

エクセルデータをHTMLに変換する方法を考えてみた。
http://higehige0.blog.fc2.com/blog-entry-57.html
を参考にさせていただきました。

int cct,int yiがセルの列位置、行位置
List<CellRangeAddress> rangeLstは、上記リンクを参照

Javaも関数型プログラミングが使えるようになってきたので、早速使ってみました。
String LTdt=  rangeLst.stream().filter(x->x.getFirstRow()==yi&&x.getFirstColumn()==cct).map(x->cct+","+yi+","+x.getLastColumn()+","+x.getLastRow()).findAny().orElse("");
String LTdt2= rangeLst.stream().filter(
        x->x.getFirstRow()<yi && x.getLastRow()>=yi && x.getFirstColumn()<cct && x.getLastColumn()>=cct
           || x.getFirstRow()==yi && x.getFirstColumn()<cct && x.getLastColumn()>=cct
           || x.getFirstRow()<yi && x.getLastRow()>=yi && x.getFirstColumn()==cct
        ).map(x->"DEL").findAny().orElse("");

LTdt、LTdt2の文字があるかどうかで、3パターンに分類して処理するとOkでした。
分類部分は省略しますが、表示部分は以下のような感じです。
・cst="<td >"+cellValue+"</td>";
・String CrSt[]=LTdt.split(",");
 String tdst="";
 if(!CrSt[0].equals(CrSt[2])) {
tdst=" colspan=\""+  ( Integer.parseInt(CrSt[2])-Integer.parseInt(CrSt[0]) +1 )+"\"";        }
 if(!CrSt[1].equals(CrSt[3])) {
tdst=tdst+" rowspan=\""+  ( Integer.parseInt(CrSt[3])-Integer.parseInt(CrSt[1]) +1 )+"\"";        }
 cst="<td "+width+" align=left "+tdst+">"+cellValue+"</td>";
・cst="";

2020年3月5日木曜日

groupsessionをeclipseで動かす

groupsessionの最新版をeclipseのTomcatで動かしてみる。
マニュアルにしたがいJdk、Tomcat等のバージョンがうまく合わないと動かない。
・AdoptOpenJDK 11をインストール
 ウインドウ>設定>Java>インストール済みのJREで検索で、インストール先のjdk-云々のフォルダを指定、適用
・Tomcatバージョンは8
 ウインドウ>Tomcatでバージョンを8にして、Tomcatホームも8のフォルダに合わせる。
 ウインドウ>Tomcat>JVM設定で JREをjdk-11.0云々に合わせる。
 Tomcatをデバッグモードで起動しないにチェック
 JVMパラメータへの追加で、Tomcatで使うメモリサイズも指定できる


2020年2月25日火曜日

コロナ感染の地域差について

SarsではHLAの型により発症のしやすさがちがうという報告も。
今回のコロナもSarsに近いらしい。

2020年1月19日日曜日

ScanSnap S500のフィードローラ交換について

 数年前に、パッドユニットやピックローラを交換して、なんとか使ってきましたが、最近、紙送りがうまくいかないことが頻繁になりました。 よくみてみると、フィードローラーというのだそうですが、交換してないローラーが4つあることがわかりました。これが、べとべとに劣化しているのが原因ということがわかりました。
 https://p--q.blogspot.com/2019/07/scansnap-s500.html
 http://namba-reading.seesaa.net/article/463663914.html
上記のリンクを参考にさせていただき、ローラーをAliexpressで注文し交換してみました。安価な部品ですが、交換は、かなり難度が高く、4時間ぐらいはかかってしまいました。でも、交換後は、非常にスムーズでほぼ新品時のときのような動作です。
 苦労した点としては
・ローラーを軸に通すためにかなりの力が必要です。水で少しぬらすといいようでした。
・一部、コネクタから導線が抜けてしまいましたが、抜けた穴を予想してもどしたところなんとかなったようです。
・歯車にベルトをかけもどすのも、手間取ってしまいました。歯車を完全に固定してからベルトをかけるのはきつかったので、歯車にベルトをかけた状態で、軸に差し込むようにしたほうがよかったようです。
・片方の小さいコネクタ(白)で、ささなくていいものがあったようです。さし忘れたかとおもって、点検のため、時間がかかってしまいました。
 新品購入すれば、最低でも2~3万円はするスキャナなので、手間はかかるものの、その分のメリットはありそうです。

2020年1月6日月曜日

LSTMで時系列データの予想してみた

時系列データの場合、複数特徴量から予想するパターンはあまり見かけなかったので、試しに作ってみた。あまり、よい予想ができるというわけではなかった。

モデルの作成部分と結果表示の部分のみです。


2020年1月5日日曜日

詳解 ディープラーニング  で よくわからないところ

https://book.mynavi.jp/manatee/detail/id=76290

length_of_sequences = 2 * T # 全時系列の長さ
maxlen = 25 # 1 つの時系列データの長さ
data = []
target = []
for i in range(0, length_of_sequences - maxlen + 1): 
    data.append(f[i: i + maxlen])
    target.append(f[i + maxlen])

となっていますが、length_of_sequences - maxlen + 1のところは
length_of_sequences - maxlen かな??と 勘違いかもしれませんが。
length_of_sequencesが最後のインデックス値ならわかるのですが。
Lengthとなるとうまくいかないような、、、よくわかりません。

  i              data        target            maxl=2  L=4のとき data〇 target■ 
0            [0,maxl]        maxl               ⓪①■□
1            [1,1+maxl]     1+maxl      0①②■
2            [2,2+maxl]     2+maxl
3

L-maxl-1     [L-maxl-1,L-1]     L-1
L-maxl      [L-maxl,L]        L

ちなみに、直観DeepLearningでは
P177で
STEP=1
for i in range(0,len(text)-SEQLEN,STEP):
  input_chars.append(text[i:i+SEQLEN])
 label_chars.append(text[i+SEQLEN])

2020年1月1日水曜日

c#でOCR(Google)

googleのOCRも試してみました。
https://orizuru.io/blog/csharp/google-ocr/

Nugetで、Google.Cloud.Vision.V1 を入手
netcoreの最新版で、コンソールアプリとしてコンパイルしました。
googleでもAPIが使えるように登録が必要でした。秘密鍵はJSONファイルとしてダウンロードします。
対象の画像ファイルはカレントディレクトリに入れておく必要があるようでした。
(netcoreapp3.1のフォルダ内に入れておくといいようです。)

c#でPDFのOCR

認識率は、完全とはいえないですが、ほどほどに認識できるOCRが、C#でも使えるようです。NugetでIronOcr、Pdf.Ocr、IronOcr.Langueages.Japaneseを入手します。
      var Ocr = new IronOcr.AutoOcr();
                Ocr.Language = IronOcr.Languages.Japanese.OcrLanguagePack;
                var Results = Ocr.ReadPdf(@path);
                var Text = Results.Text;
                MessageBox.Show(Text);
https://ironsoftware.com/csharp/ocr/examples/pdf-ocr/