ラベル javascript の投稿を表示しています。 すべての投稿を表示
ラベル javascript の投稿を表示しています。 すべての投稿を表示

2026年5月13日水曜日

畑管理GASについて

 畑資材の支出入をGASで管理していたものに、機能を少し追加した。これまで畑管理は、ノートに書き込んでいたが、さすがに中身が増えてくると、整理がつきにくくなったので、これもGASで管理してみることにした。

  オープンデータのAPIから天気、気温、降水量、風力など、自動で入力されるようにしました。畑日記のようなものです。

※textareaのみ全角を半角にする必要あります。
※検索機能追加しました。


2026年3月17日火曜日

ESP32にマイクとアンプは、負荷が高く断念

 esp32C3のハードの能力ではデジタルで音声処理は難しそうで、せっかくの部品購入ではありましたが、諦めて、別の方法に切り替えました。esp32はテキスト処理にとどめておいたほうがい無難なようです。目的は音声認識英英辞典だったので、GithubPagesに、Javascriptでこちらにサイトをつくってみました。スマホなどからアクセスすると便利に使えそうです。

最初からこの方法を思いついていれば、わざわざesp32で難しいことしなくても、実現できたのですが、、、。

2025年6月26日木曜日

GASではJSON.stringfyをつかったほうがいいようです

 畑の収穫記録をGASで管理(収穫の個数を記録しその都度、合計の確認)しようかと、ChatGPTにコード頼んでみたけど、なかなか一筋縄ではいかない。AIにより、だいぶコーディングは楽になっているが、やはり、ある程度やりとりしながら、人間側が修正してあげないと動かなかった。

 最初、ChatGPTはサーバ(GAS)からのレスポンスデータを単純にオブジェクトで渡すコードを提示してくれたけれど、それではうまくいかず、やはり、JSON.stringfyを使わないとだめだった。

※ MEMO欄を追加しました。2025/6/27

2024年11月19日火曜日

GAS版のHamlog作ってみた

 GoogleAppScriptでクラウド版のハムログを作ってみた。raspiサーバに構築も考えたが、ハードがいつまで持つか心配もあったので、とりあえずクラウドで試してみた。最近は、ChatGPTにも助けてもらっているので、比較的短時間でコーディングができるようになった。

 スプレッドシートやGASは無料で使える。その分、スピードが遅いが、個人で使う分には、問題ないと思う。

 移動運用の時などもその場で記録できて便利かもしれない。過去に交信しているかコールサインで検索できるようにした。jcc検索機能も追加した、ただし、シートに自分で作ったjcc番号と市郡名の対応表を用意する必要があった。ネットからの情報を加工した。

GAS と index.htmlは以下の通りです。
※追加情報:wsjt-xのログをADIFデータに変換するツールをc#でつくり(https://github.com/gh6141/adifCreate.git)、そのADIFをアップロードできるようにしてみた。FT8のログ記録がだいぶスムーズになった。QRZ.comやeQSLへのアップロードにも使えそうだ。
 wsjt-xにADIFで保存する機能もあったが、うっかり保存を忘れてしまうことが多かったので、ログからも日付・時刻を指定してそれ以降のデータを抽出できるようにツールを作ってみた。

2024年4月19日金曜日

reactを使ってみた

sudo npx create-react-app react-sample --template typescript

では、だめで、sudoなしだと、うまくいくようだった。

node関連のインストールを行うが、バージョンが合わないといろいろ設定に手間がかかるようだった。

なお、警告が出たので

npm WARN deprecated tar@2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.

npm install tar@6 -gtar としたら、解決


Next.jsのほうは、細かい変更もあるらしく書籍の情報だと動かなかったりする。

pagesフォルダがappフォルダに変わってルール違っていたりする。
現在進行形の技術なので、ネットの最新情報も大事なようだ。
  pages/sample.tsx  ではなく app/sample/page.tsx  で/sampleのURLに対応
それから、getStaticProps 相応のものは不要らしい。コンポーネントの中に直接書いてもOkになったらしい。

 また、動的ページの場合 localhost:3000/posts/**ここの部分**
ならばapp/posts/[id]/page.tsxの中身は
  export default function Test({ params }: { params: { id: string } }) {
  return (
    <div>
        <p>Test: {params.id}</p>
    </div>
  );
}としてやれば、**ここの部分**が、idに取り込まれ表示される。


  

2023年11月11日土曜日

和文モールス読み取り練習  HTML5で

 以前作ったHTML5によるCW練習ソフトを少し改良した。ランダム再生できるようにしてみた。

Mlearn.html ←公開しています。 <textarea></textarea>のタグは半角にする必要あります。

※その後、再度、ChatGPTに2~3回質問したところ、以下の修正で、文字数を動的に変えることができるようになった。

const promiseResolve = (rcs) => {
  const promises = rcs.map(rc => cwf(rc));
  promises.push(() => document.getElementById('texta').innerHTML += "
");

  promises.reduce((chain, promise) => chain.then(() => promise()), Promise.resolve());
}

※ver3で、設定保存できるように、また、単語練習もできるようにした。
※ver4で、WPMで設定できるようにした。
※その後、細々と変更追加(欧文にも対応しました。)まだ、リファクタリング必要なところはいろいろありそうですが。
※spaceキーで停止・再開可能にしました。

2022年12月22日木曜日

Gasで血圧記録

 gasで即席でつくってみた。値を選択式にすると、もう少し使いやすかも。

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
      <script src="https://code.jquery.com/jquery-3.6.1.slim.min.js"  integrity="sha256-w8CvhFs7iHNVUtnSP0YKEg00p9Ih13rlL9zGqvLdePA="  crossorigin="anonymous">
      </script>
  </head>
  <body>
    <div  style="font-size:large;">
    <input type="text" id="hiduke" value="" style="font-size:large;">
    <input type="text" id="jikoku" value="" style="font-size:large;">
    <br>High
    <input type="text" id="high" value="" style="font-size:large;"><br>
    Low
    <input type="text" id="low" value="" style="font-size:large;"><br>
    脈
    <input type="text" id="myaku" value="" style="font-size:large;">
    <button id='Enter' onclick="Enter()">保存</button>
    <div id="msg"></div>
    </div>
    <div><a href="https://docs.google.com/spreadsheets/d/シートID/edit#gid=0">シート</a></div>
  </body>
</html>
<script>
   window.onload =   function(){   
    let today=new Date();
$('#hiduke').val(formatDate_dateOnly(today));
$('#jikoku').val(formatDate_jikoku(today));
   }


function formatDate_jikoku(dt) {
  var y = dt.getFullYear();
  var h=('00' + dt.getHours()).slice(-2);
  var mi=('00' + dt.getMinutes()).slice(-2);
  return (h+':'+mi);
}

function formatDate_dateOnly(dt) {
  var y = dt.getFullYear();
  var m = ('00' + (dt.getMonth()+1)).slice(-2);
  var d = ('00' + dt.getDate()).slice(-2);  
  return (y + '/' + m + '/' + d);
}

function Enter() {
        let hiduke =$('#hiduke').val();
         let jikoku =$('#jikoku').val();
          let high =$('#high').val();
           let low =$('#low').val();
            let myaku =$('#myaku').val();
            google.script.run.withSuccessHandler(onSuccess).withFailureHandler(onFailure).Set(hiduke,jikoku,high,low,myaku); 
  }
  function onSuccess(res){
    $('#msg').text(res);
  }
  function onFailure(res){
     $('#msg').text(res);
  }

  </script>

*****************
function doGet(e) {
  return HtmlService.createTemplateFromFile("index").evaluate();
}


function Set(hiduke,jikoku,high,low,myaku) {

  let spreadSheet = SpreadsheetApp.openById(シ-トID);
   let sheet = spreadSheet.getSheetByName('シート1');

   let lastrow = sheet.getLastRow();

   sheet.getRange(lastrow+11).setValue(hiduke);
   sheet.getRange(lastrow+12).setValue(jikoku);
   sheet.getRange(lastrow+13).setValue(high);
   sheet.getRange(lastrow+14).setValue(low);
   sheet.getRange(lastrow+15).setValue(myaku);


   return "送信済み"
  }

2022年12月11日日曜日

GASによるグループウエア

 グループウエアをGASで作ってみた。

データベースが使えないので、いろいろ制限があり大変だった。無料だから仕方ないとは思う。

回覧メッセージの未読チェック機能をスプレッドシートで、宛先の選択の工夫をJqueryで、という具合に。

表示遅い分少しでも、和らぐようにSPAにしてみた。

エクセルは、PCのGdriveリンクを共有で使うようにして、エクセルからスプレッドシートへの変換は、トリガーで毎分変更をチェックしながら行っている。

その他、文字修飾可能にすること、メッセージを2週間分に制限するため、自動削除機能をつけたこと。削除までの日数は、投稿者が選択できるようにしたこと。メッセージは、必要に応じて、GmailにPDFで送って、自分で保管もできるようにしたこと。

 等々、いろいろ対処したおかげで、完成まで数か月かかった。あと少し調整が必要かも。残念ながら、OSのせいか、自分のPCでは、C#のツールチップによる未読お知らせ機能を入れようとしたが、なぜか反応しない。仕方ないので、画面はFormにして、透明度を時間とともに変えるような実装にした。また、GASで作ったサイトをWebAPIとして、C#から読み取ろうとしたが、非常に面倒なのであきらめた。Gdriveにユーザーごとのファイルを作成して、それを経由して未読情報を、Gdriveの共有から読み取るようにしてみたらなんとかうまくいった。力技という感じだが、そもそもGASという言語を使っているので、このぐらいは仕方ないのでないかと思う。

2022年11月3日木曜日

jquery 動的にイベント追加

 appnedした場合、動的なイベントの追加には、工夫がいるようだ。

$("親要素").on('click', '該当する要素', function(e){

  var tmp=e.target.id;

});

のように利用できる。

ちなみに、以下の方法はだめだった。

$("該当する要素").change(function(e) {

  var tmp=e.target.id;

 });

     

2022年10月22日土曜日

GAS使ってグループの名前リストを作成

 権限の関係でグループのEmaiアドレスは取得できても、名前が取得できないことがあるようだ。画面上では表示されているが、ダウンロードはEmaiのみ。ただし、Chromeで、「名前を付けて保存」>ファイルの種類を「ウエブページ、完全」 を選択して保存すると、UTF8で全角文字できちんと保存されるので、面倒だが、このデータをGdriveに持って行って、GASでパースすることにした。

GASは、データを保存したいスプレッドシートに、スクリプトを作成する。この場合、Parseというライブラリの追加が必要。2022.7現在、ライブラリのIDは

1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw

もっと簡単な方法がありそうだが、とりあえず、以下のスクリプトで、無事 Emailと名前のリストが取得できた。


function member_parse() {

var contents = DriveApp.getFolderById('ここにフォルダのID')
.getFilesByName('メンバーリスト.html')
.next()
.getBlob()
.getDataAsString("utf8");
//Logger.log(contents); let mList= new Array();
let eList= new Array(); names = Parser.data(contents).from('<div class="LnLepd">').to('</div>').iterate();
emails=Parser.data(contents).from('Sq3iG" href="mailto:').to('</a>').iterate(); for(nm of names){
mList.push(nm);
} var ci=0;
for(em of emails){
if (ci % 2 ==0){ eList.push(em.split('>')[1]);}
ci++;
}
//console.log(zip(eList,mList));
NameEmailList=zip(eList,mList); var sheet = SpreadsheetApp.openById('ここにスプレッドシートのID').getSheetByName('shokuin'); for (gyo of NameEmailList){
sheet.appendRow(gyo);
} } const zip = (...arrays) => {
const length = Math.min(...(arrays.map(arr => arr.length)))
return new Array(length).fill().map((_, i) => arrays.map(arr => arr[i]))

}


GASとスプレッドシートを組み合わせて、コードを書いていると、ちょうどエクセルのマクロを使っているような感覚になる。ちょっとした操作で、シートの動作が変わって、コードがうまく動かなくなることも。無料なので、手間はかかるのは仕方ない。半面、シートで実際のデータがどうなっているか、すぐ確認できるよさはある。

2022年1月10日月曜日

和文モールス受信練習

 Javascriptで参考になるサイトがあったので、参考にさせていただき

それをもとに、受信練習ソフトをつくってみた。

https://rasp.cld9.work/py/MLearn.html

文字数が多くなると、フリーズしてしまうようだったので、適当なところに以下の処理を入れたところ、連続して再生できるようになった。

openc=()=>{ audioContext.close(); audioContext = new window.AudioContext();}

2021年9月26日日曜日

WebRTC LAN用P2P

 WebRTCをシグナリングサーバを使い、P2P通信を試してみた。Node.jsを使用。

Websocketの使い方に慣れてないため、苦労した。JSON.parseなど、エンコード関係が大変。

https://moewe-net.com/webrtc/p2p-single

https://dangerous-animal141.hatenablog.com/entry/2013/03/27/002818

Herokuに、HTMLとNode.jsを置いて、どのローカルネットワークでも、使えるようにしてみた。ビデオスタート、通信開始などスムーズにいくように、サンプルに少し手を入れてみた。

StreamデータはLan内のP2Pなので、わりとスムーズに通信できている。

Chromeではうまくいったが、Safariでうまくいかない。そこで、WindowsでiOSのsafariをデバッグする方法があった(うまく動作させるまでけっこう手がかかりましたが)ので、デバッグしたところ、peer.addStreamが古いらしく、peer.addTrackにする必要があることが判明。修正したところ、うまく動作しました。

https://qiita.com/massie_g/items/e1ba90637acb060772bb