2024年12月31日火曜日

三択問題Drillの問題作成・編集サイト

 以前、使っていた三択問題ドリル 問題作成・編集サイトを公開します。

raspiサーバでbottleで動かしています。

https://rasp.cld9.work/mondai

以下、ドリル本体とバックエンドのコードです。フロントエンドは、うまくtextareaに
入れられませんでした。(フロントエンドは上記リンクでソース確認できますので)

C#のSeleniumでリンクリストから違うページに遷移して、再度リンクから遷移を繰り返したいとき

ChatGPTで、解決方法を聞いてみたら、いい方法があることを知った。
   
IList<IWebElement> Iwels = FindElementsWithWait(mainDriver, By.XPath("//*[@id=\"sr\"]/ul/li"), 20);
    
  foreach (IWebElement iel in Iwels)
  {
       IWebDriver  tmpDriver = mainDriver;  
      try
      {           
          IWebElement link_question = iel.FindElement(By.XPath("./h3/a"));
          link_question.Click();           
  
          IWebElement i_question = SeleniumHelper.FindElementWithWait(
              tmpDriver,
              By.XPath("//*[@id=\"leftColumn\"]/article[1]"),
              10
          );
        //ここでi_questionを使い相対パスで目的データを取得       
      }
      catch (Exception ex)
      {         
      }            
  }
 ChatGPTに質問「このようなコードだと、エラーが発生します。おそらく、foreachしている間にwedDriverが最初のものとかわってしまうことが原因だと思います。最初のページからスクレイピングできないのが原因だと思います。何かいい方法あるのでしょうか?」
foreach (IWebElement iel in Iwels)
{    
    try
    {
        IWebElement link_question = iel.FindElement(By.XPath("./h3/a"));
        string questionUrl = link_question.GetAttribute("href");
        ((IJavaScriptExecutor)mainDriver).ExecuteScript($"window.open('{questionUrl}', '_blank');");
        mainDriver.SwitchTo().Window(mainDriver.WindowHandles.Last()); 
        IWebElement i_question = SeleniumHelper.FindElementWithWait(
            mainDriver,
            By.XPath("//*[@id=\"leftColumn\"]/article[1]"),
            10
        );
        //ここでi_questionを使い相対パスで目的データを取得  

        mainDriver.Close();
        mainDriver.SwitchTo().Window(mainDriver.WindowHandles.First());
    }
    catch (Exception ex)
    {
       
    }
}

2024年12月24日火曜日

ブルーレイプレーヤのボタンスイッチをタッチセンサに改造

  ブルーレイの本体のイジェクトボタンが壊れてしまったので、ついでにすべてのボタンをタッチセンサスイッチにしてみた。

 タッチセンサはTPP223ですが、ブルーレイの中の電圧に合わせて今回は3.3vで動作させました。最初は、試しにスイッチにタッチセンサの出力をつないでみましたが安定せずだめでした。やはり、トランジスタでスイッチ制御したほうがいいようでした(上図のように、基板の配線をおおまかに決めてからハンダ付け開始。TPP223の出力を2SC1815のベース側に、コレクタをブルーレイのボタンスイッチへとつなぎます。)。押す必要がなく、触れるだけなので、これまでより、快適にスイッチ操作(イジェクト、再生、停止、OnOff)ができるようになりました。

追記:ちなみに、Youtubeで見たら、ベースへの抵抗の求め方が出ていました。想定したコレクタ電流Icからベース電流IbをIc=hfe×Ibで、hfeは100~200程度、Ibを求め、ベースとアースで0.6vの電圧降下があるので、5v-0.6v=4.4v Rb=4.4/Ibで求まるということのようです。
 エミッターベース間の抵抗は、ノイズ防止とのこと。数KΩ程度とのこと。(今回の20Kは少し大きかったかもしれませんが) 今回、ブルーレイ本体のスイッチに流れる電流をきちんと計ってないので、Icが不明のまま適当な値だったのですが、特に問題なく動いているようです。2023/1/4

2024年12月23日月曜日

電熱ズボンの修理

  裏起毛の電熱ズボンなので、これまで電熱はあまり使わずに間に合っていたが、今日はかなり冷え込んでいて、大学図書館もさすがに足元が冷え込んできた。しかし、肝心のときに電熱が故障してしまった。

 帰宅してからしっかり修理した。身に着けるものなので、電源ケーブルも細くて切れやすい設計のようだ。スイッチ基板につながっている部分が簡単にとれたので多分ここらへんが原因らしい。また、テスターで確認したところ、線の途中にも断線あった?ようだ。少し太めの線(そのほうが、途中の電圧降下も防げそうなので)で頑丈にハンダ付けしてみた。これで少しは長持ちしてくれるといいのだけれど。+-の端子がかなり近い位置にあるので、ショートしないように、はんだ付けも苦労したが、なんとか完成。絶縁対策の熱収縮チューブをたっぷり使い、最後に念のためボンドで固めた。

2024年12月22日日曜日

PIC16F84Aの書き込みについて(備忘録)

 PIC16F84Aをヤフオクで入手できたので、書き込みテストをしてみた。しかし、なかなかうまくいかない。Kit3.5が合わないのかと思い、調べると対応表ではNGとなっていたので、だめかといったん諦めた。が、多少回路を追加してやると書き込みできるという情報もネットにあったので、その情報を参考に試行錯誤してみた。


 ブレッドボードで簡単なコードで動作確認してから、ユニバーサル基板に回路を作りました。
<注意点>
PICkit3.5 の電力プロパティを調整 5V供給にチェック入れる。(ただし、なぜか、外部電源を追加したときはチェックを外したほうがいい場合もあった?このへんの動作で若干不明なところもある。)
・PICも古いのでコンパイラは念のため古いバージョン 1.45を使用した。
・電源落としてから、コネクタをつないだり、離したりする。電源入っている途中ではずすのはデバイスやKitの破損の原因になるらしい。
・外部電源として安定化電源から5V供給。
・今回、Programmer-To-Goという機能を知りました。リセットのつもりで、Kitにあるボタンを押すことで、変な動作になってしまい、困りました。このモードに入るかどうか聞いてくるので、Yesにしてしまったためでした。このボタンは使うことは、たくさん書き込むとき(PCなしで)とか以外は通常は使うことはないようです。
・Set Configuration Bits から生成したコードを追加し、以下のようなコードにしました。(和文モールスです。)

※1回でうまくいかなかった原因は、電源が不足していたこと、配線ミスだったことと、コードにstdio.hやXTALの周波数指定が不足していたことなど だったようです。
※今回は試しにモールス表示にしてみたが、スイッチ制御とかいろいろ活用できるかもしれません。(残念ながらUARTは使えないPICなので、制限はありますが。)
おおまかな部品配置を決めてから、極力コンパクトな形に基板にまとめました。
※上記、書き込み装置なしの基盤も作ったが、最初うまく動作しなかった。パスコンやMCLRのプルアップ抵抗を入れたら動作するようになった。
※Produciotn>Set configration bitsというところで、configをgenerateしたものをコードの最初に張り付けないとうまくコンパイルできなかった。これはPICの種類により微妙に違うようなので、PICが違うとそれに合わせて必要になるようだ。
PIC16F628Aも試したが、残念ながらUARTは発振子を外付けしないと実用にはならない感じがした。ネットでこのPICのUARTをあまり見かけないのもそのためかもしれない。かえって、ピン数の少ないPIC12Fあたりに、UART向けに周波数が安定しているタイプがあるようなので、そちらを使うといいようだ。
※その後、PIC16F84AもPickKIT3.5で使えることが判明。単純に接続の説明の読み取りミスだった。自分でこのブログで備忘録をとっていたので、それを確認して判明。DIP8/14 DIP18/20と裏面に表示してあったが、その意味をすっかり忘れていた。(DIP 8~14 18~20ならOkという意味らしい。となりに16F57と表示されていて、てっきり16Fはそちらだと勘違いしていた。)2025/1/16

2024年12月10日火曜日

暖房費も高め

 このところ、灯油や電気も高くなってきて、暖房が欲しい時期になってくると暖房費も気になってくる。ファンヒーターやエアコンで、1時間当たり、数十円は使っているだろうか。冷房より暖房のほうがお金はかかるようだ。

 ということで、寒い時期はなるべく弁当持参で図書館を活用することにした。往復徒歩で、健康にもよく、節約なり、勉強にも集中できて一石三鳥。近くの大学の図書館だけれど、休憩室で軽食もとれるのでとても助かっている。

2024年12月9日月曜日

logicool unifying 不具合

  めずらしく、ワイヤレスキーボードが不具合。OSの更新が、半端だったためか、突然キーボードが反応しなくなる。Windows Updateしてもだめで、Unifyingのツールで接続確認しても接続はしていると表示されているが、反応しない。

 が、数分したら、なぜか接続できた。デバイスソフトの更新に時間がかかっていたのか、それともハードが不安定になってきたのか。ひょっとしてキーロガーかと、気になり検索したけれど、今のところそういう情報はないようです。原因はわからないけれど、しばらく様子を見るしかないようだ。


2024年12月4日水曜日

ベータ関数もとにグラフ表示

 ルベーグ積分 理論と計算手法 を少しずつ読んでいるが、途中P132問題6.16の証明で、気になる積分があったので、表示してみた。ネットで探したが見つからないので、C#で任意の関数を積分するコードを、chatGPTの助けを借りて作ってみた。

  Ψ(x)=∫(0,x)  y^r*(1-y)^r λ(dy)/B(r+1,r+1)  Cr級関数の例
    上記の関数は0<=x<=1の場合で、それ以外はx<0で0、x>1で1の値

c#でoxyPlotを使ってみた。確かめる方法がないので、どの程度正しいかどうかわからないですが。今後、いろいろな関数のグラフや、積分のグラフを表示するときに役立つこともあるかと思い、作ってみた。https://github.com/gh6141/WindowsFormsApp1_betaFunc.git


r=2
r=6
続いて Φn(x)=Ψ(n(x-0))Ψ(n(1-x))がどうなるか見てみた。(a=0,b=1の場合)
n=10
n=1000

室内アンテナで韓国局とコンタクト

18MHzが、久しぶりに室内アンテナ(ワイヤーMLA)でも FT8が聞こえていたので、5wで呼んでみたら、つながった。お隣の韓国の局長さんでした。コンディションがいいと、簡易アンテナのQRPでもつながる。


 ハンガーに取り付けたワイヤーMLA 下方にあるのが、アルミ線ラジアルをつけた144/430モービルホイップ。