2023年8月24日木曜日

Django/PythonでのWebアプリ開発を更に勉強

 開発環境の構築は出来た(アプリの方はうまく動かなかった)ので、何か動くWEBアプリを一つ作って体験してみたいと、Right Codeのココを見ながらWeb日記アプリを作ってみました。 

これも、1から一つづつ追っかけて行き、丁寧に模倣したつもりでしたが、2位のところでエラーが出て起動できなくなってしまいました。 1日がかりで調べてみると、そもそも記事の中のコードに幾つかfrom .... が欠落していました。 例えば、views.pyは最終的には、

from djanog.view.generic import TemplateView, CreateView, ListView, DetailView, UpdateView, DeleteView

from django.urls import reverse_lazy

from .forms import DiaryForm

from .models import Diary

が、必要ですが、Webで提示されていたコードには幾つかが示されていませんで、ググったりして、この部分をエラーフリーにするために一日がかりでした。

で、作業中に気が付いたのですが、python manage.py runserverで動いていると、xx.pyのコードの書き換えは即座に反映されるので、書き換えにエラーがあれば、runserverを起動させた画面にエラーの詳細が表示されるので、作業を迅速に進めることが出来ます。

従って、開発に際し)

0)conosole x 2, emacs x 1, forefox x 1を立ち上げる。

取り敢えず起動している状態 
1)スケルトンで良いので起動できる物を起動させ、firefoxで表示を確認、起動画面でエラー表示が見えるようにしておく。 (左は、コンソール2画面、emacs、firefoxで上のコンソール画面でpython manage.py runserverして起動させている状態)

 

typoで起動画面でエラーとその場所が示される
 

2)emacs(エディター)で、必要なファイルの書き換えを行い、saveする。

 

 

 

修正すると起動画面でエラーが出なくなる
3)起動画面にエラーが出たら、エラー箇所の修正を行い、saveし、エラーが出ないことが確認できるまでこれを繰り返す。

 

 

 

4)エラーが出ずに、firefoxにも期待した物が表示されることを確認。

 これを完成するまで繰り返す。 但し、templateの修正エラーはこれでは捕捉できないようです。

また、このシリーズの第一回の所でのプロジェクトの作成の所では、プロジェクト用のフォルダーを自分で作り、其処へ移動してdjango-admin startproject config . となってます。 この方が、別の記事で書いてあった、django-admin startproject xprojectとして、xprojectというプロジェクトフォルダから作らせて、xprojectフォルダの中のxprojectというフォルダの名前をconfigに書き換え必要な修正を加えるより、手間が省けるし、間違いがありませんので、この方法ですすめる方が良いと思います。 (残念ながら、django-admin startproject config xxxxとしてxxxxというプロジェクトフォルダーを作らせて更にconfigというフォルダにする、という事は出来ませんでした。)

htmlに係るファイルを全て親フォルダ配下のtemplateに纏めて、ここでhtmlに係る作業をするとか、staticというフォルダにcssやjs、imgを集約するのは後々とても効率的に作業が出来そうです。 

apache24から仮想環境のpython/djangoにアクセスする方法は一応確認して、動くよう(但し、ファイル階層が正しく反映されるのか、まだ十分に確認できていない)なので、多分python/django環境に移行するのもそんなに難しくは無いように思います。

少し要領が分かってきたので、追々何か作ってみたいと思います。


 

 

2023年8月14日月曜日

Python webframework Djangoをお勉強してみる

最近の世の中の流行りに押されて、pythonを少々お勉強しています。「予測に生かす統計モデリングの基本」とか「Pythonによる統計学入門」「ベイズ統計入門」とかベイズ統計と一緒にpythonも復習と思ったのですが、ベイズ統計の方がムズくて頓挫。 

では、pythonでweb書いてみようとドキュメントに従って書いてみました。 (今、自宅近辺の温度湿度を表示させるweb appがphpなので、将来的にpythonにしようかな?と思い、その為の予習のつもりで勉強しています。 データのグラフ化のライブラリはpythonにも対応しているので、少しpythonで書き換えれば動くものが作れるはず!!)

pythonではDjangoってweb frameworkがあるようなので、このドキュメントに従って、サンプルアプリを作ってみました。 DjangoにはDBとしてsqlite3が付いていますが、将来実装する時の手間を考え、既に使用しているpostgresを使う事にしました。 

 0)Pythonの開発用仮想環境を構築する 

  取り敢えず、application_environmentというフォルダを作って、ここに開発環境をココできての説明に従い作ってみました。python -m venv application_environmentでapplication_environmentが出来、source ./bin/activateでこの環境を使った開発が出来るようになるみたいです。(python開発関連の165 directories, 1357 filesが出来ていました)

  このディレクトリで、 pip install djangoとして、djangoをインストール

    更に、django-admin startproject mysite でmysiteというフォルダを作りこのフォルダの中で作業をしました。 この作業でmysite配下に左のようなファイル構造が出来上がります。 これ以降はmanage.pyで色々な作業が出来るみたいです。


1)DjangoでPostgreSQLを使えるようにする。

  ここの説明に従いpostgreSQLにDjangouserを作成して、djangoからのアクセスが出来るようにしてみましたが、

    $python manage.py migrations;  python manage.py migrate


で失敗して、うまくdatabaseが作成できていませんでしたので、PgAdmin4 v7でpostgresqlの中を覗いて見た所djangouserに create database権限が与えられていないようなので、これを設定して無事djangoからpostgresqlに接続設定できるようになりました。

 

 

 

2)Django のtutorialに従い簡単なアプリを作成してみました。

  1~6までをまじめにフォローしながら、逐一実行、確認してゆきました。DBの作成がmodels.pyにDBの仕様を書き、python manage.py migrateで行うと、関連する テーブルが自動で作成されていますが、QuestionとChoiceの二つのテーブル作成に対して、全部で12のテーブルが作成されていました。(うーん、何に使うんだろう?) 

       夫々の詳細な内容はtutorialを参照してください。

  データベースが出来た所で、python manage.py shellでpythonのコマンド入力でデータベースの内容を参照したり、書き換えたりすることが出来るのは、とても面白い機能ですね。   

python manage.py runserver を適当な窓で実行してブラウザで当該ページにアクセスしてみると左の様にサーバログが表示され、テスト環境でのチェックがスムーズに出来そうです。 

また、on the flyでファイルを書き換えても、書き換えた内容が即座に反映されている(一部、そうでない場合があったような気がしますが、??)のと、書き換えたファイルにエラーがあるとログにエラー内容が表示されるので、小さな修正などが簡単に出来そうです。

 

右では、赤で囲った部分から、typoエラーが示されており、これを修正してファイルを上書きすると、そのままサーバがチェックしてくれて、今度は待ち受け状態になって起動しています。

 

また、作成されるファイルシステムの中にtests.pyがあり、ココに必要なソースを書いておけば、いつでも走らせて検証することが出来る(初めから検証プログラムが書かれることを前提としている)のは非常に優れている(というか、今様)な仕様だと思います。

ま、WEB Frameworkってどれも、ファイル構造が大きく、幾つも似たようんファイルが作られるので、鬱陶しいと思っていますが、djangoも同じですので、慣れるより仕方ないですね。

tutorialに従って作成したpollsの最終的なファイル構造は下の様になっていました。

このうち弄っているファイルは、

models.py, 

tests.py, 

urls.py, 

views.py,と 

static/polls/style.css, 

static/polls/images/xxx, 

templates/polls/(detail,index,results).html

です。

2023年7月31日月曜日

1A0C DX pedition

2015年の1月に運用があり、15mのCWとRTTYで交信していましたが、当時はChallengeにあまり興味が無かったので、それ以上は追いかけていませんでした。  

今回はChallenge稼ぎで、色々追い掛け回していますが、随分弱くて苦労しています。 あと残り2日位なので、12mと30mが出来れば御の字ですが、12mはJAが呼んでいるのは聞こえても、ご本尊が見えない状態が続いていて、、、、。  

今朝も20mのCWで聞こえていましたが、弱いのとWと多くやっていたので、メンドウだしスキップ。 12mで4U1UNのFT8が聞こえるかな?(ZLが呼んでいたので)と少しワッチしてみましたが、ダメでした。  あんまりコンディションが良くないですね~。 

ま、流石にオペレーションは抜群! CWの快適感は秀逸で、気持ちがいい! 全てのDXpeditionがこのレベル以上で行われてくれたら、幸せですね。

 

>あー、終わってしまった! で結局12mも30mも無し! この季節はコンディションが良くなくて、QSO出来る確率が低いですね。

 

2023年7月18日火曜日

自宅気象データの表示を少し改造

 自宅周りの気温湿度は、15分位毎に勝手に気温と湿度のデータをサーバに送りつけるようになっていますので、サーバから取り出せば必要な分析ができます。

データの受け渡しはWIFIでwebサーバに送り、php8でpostgreSQL(v 15.2)のDataBaseに送り、蓄積しておき、必要な時に必要なデータを取り出してweb上で表示するようにしています。

本来は、庭の花の開花時期などの予測に使う方法の実験の為に考えたものですが、日長、日照時間等いろいろの要素を考えなければならないし、そもそも、どの時点からの日照時間(日照量)で予測するのか、等考えなければならないことは多いので、表示方法については放置状態で、気温と湿度のデータは溜まるばかり。

ま、なんか役に立つような表示位は作っておこうと、以前にCanvas.jsで作成したものに、今回は、過去のデータとの比較が簡単に出来るような表示を加えてみました。 最下部にある平均気温、最高最低気温のLegendをクリックすることにより、表示のon/offが出来るので、ココでは、過去5年間の任意の年【2~5年)の間の比較が出来き、中々素晴らしいです。 Canvas.jsの機能には驚かされます。

 

 

 

 

> PHPで書いたアプリがtypo等でウンスンになることがありますが、debuggerがあるわけでは無いので、何時もあてずっぽうに、いくつかに分割して切り出して動かしてはバグを探っていてストレスでしたが、serverのhttpd-errorにアクセスできれば、下の様にバグを特定出来そうな情報が得られることに気が付きました。 これで、phpのアプリも、あまりストレスなく作成できそうです。 (今まで10年以上気が付かなかった! 情けない。)

ken@tyd3:~ % tail -f /var/log/httpd-error.log 

        :          :   :

[Tue Jul 18 09:57:15.513217 2023] [php:error] [pid 1256] [client 192.168.1.??:56089] PHP Parse error:  syntax error, unexpected identifier "Min", expecting "," or ";" in /usr/local/www/data/xxx.php on line 277
[Tue Jul 18 09:59:54.134108 2023] [php:error] [pid 1255] [client 192.168.1.??:56427] PHP Fatal error:  Uncaught Error: Undefined constant "Min" in /usr/local/www/data/xxx.php:277\nStack trace:\n#0 {main}\n  thrown in /usr/local/www/data/xxx.php on line 277

      :             :              :








2023年7月3日月曜日

太陽電池の耐候性?

太陽電池とLi電池の組み合わせでESP32使って定時的(10分)に気温と湿度をserverにあげるようにしていますが、庭の中央に置いておいたものが調子が悪いので、回収して太陽電池とLi電池の交換をしてみたところ、正常に動作するようになりました。 

で、太陽電池はPP(ポリプロピレン)製とあるので、やむを得ないのかもしれませんが、3年近く使用していて、表面が真っ白で、「これじゃ電圧出てないんじゃ?」って感じだったので、新品の物と部屋の窓辺に並べて電圧を測定してみましたが、5.07V(新品)vs. 4.88Vと発電電圧的にはあまり劣化はしていない様でした。

左:新品の電池、右:3年間雨ざらしの電池
 Li電池との接続に使っているTP4056を使った保護モジュールがどの位の電圧迄対応してくれるのか(4.2V?)?ですが、結構長いこと使えるのかも?  不調の原因は、曇天が続いてLi電池の電圧が低下した所為なのでしようが、根本の原因がLi電池の劣化なのか、太陽電池の劣化なのかが判然とせず、このままでは同じことが繰り返されるのかもしれません。

不調になったものから取り出したLi電池をUSBの5V電源で充電してみていますが、保護モジュールのランプが一向に青にならないので、Li電池がヘタッタのかもしれません。 あ~、少し時間が掛かりましたが、青になったので、Li電池が使えなくなったわけではなさそう、、、。

> 二、三日すると同様の症状がぶり返すので、再度室内で詳細にチェックしたところ、どうも3端子レギュレータ辺りがおかしいので、TA48033をJRCのNJU7223に取り換えて窓際に置き様子見。 2日ほど経ったが、今度は問題なく動いているようなので、明日にでも屋外に設置することにします。 3端子レギュレータだけでなく、ESPもUSBを接続すると、PCのマウスのポートを乗っ取っているのか、マウス制御ができなくなったり、様子が変なので、ESP32も予備のボードに取り換えました。 雨、熱か何かが原因? でも、全く同じものが、1年以上元気に動作しているので???  

この程度の単純なものでも、故障の原因が突き止められないのは情けない話ですが、一応問題なく動作しているようなので、「よし」とすることに、、、。



2023年6月29日木曜日

最近のDX雑感

  • 6mのコンディションが昨年、一昨年と比べてとっても残念。
  • 15/12/10mもSSNの割にはパッとしない(もう、夏枯れ?)
  • CO8LYが夕方の変な時間に強く聞こえている(10/12m?)けどそれ以外は聞こえない
  • 17mも夕方東の方が強く入っていることがある
  • 低い方は聞いていませ~ン 

ま、一応朝(5時位)から晩(10時位)まで、つけっぱなしでFT8+JTAlertで「それでも、一つ位はChallengeを!」と電気代をものともせずに運用中(といっても殆ど電波出していません)。

それでも昨夕は、久し振りのET3AA@17m FT8に8J1RL@10m FT8でChallenge 2up!  

Flexで同時に4バンド、尚且つJTAlertのお陰で片手間でワッチできる、というのは大きいですね。 その昔、ヘッドフォーンを耳に、ひたすらダイアルを廻して、上に行ったり下に行ったりして、ローカルと情報交換を頻繁にしていた頃とは隔世の感ですが、お陰でQSOの殆どがFT8になってしまったのは寂しいですね。

今朝もFP/KV1Jが12m FT8に出ていたみたい(ここからは聞こえませんでした)ですが、Raido Arcala のMy DX SummitにFY5KEが"Any human mode sometime ? ;-)"なんて書き込みしていましたね。 

FP/KV1Jは6m/12m FT8のアクティビティが載っていましたが、殆どW/VE/Euみたいなので、これからもっとAsiaにattensionしてくれることを期待しています。

Hakko FX-601

 購入日時や場所が判然としませんが、ずっとHakko FX-601を使い続けていて、最近ちょっと細いこて先が丸まってきたので、新しいこて先(T19-I)をAmazonで購入しました。 

あれ?「保護パイプに入らない?」 で、保護パイプの内径を測ってみると6.9φ、T19-Iの外径は8.1φ!??? どうなってんだろう? 色々調べてみるもよく分からないが、HakkoのHPを見ていたらFX-600とFX-601が保護パイプとこて先を交換すれば互換性があるようなことが書いてあったので、「ひょっとしたら、最初に買った「FX-601+こて先4本セット」はFX-600のこて先と保護パイプだったのでは? と思い、再度、保護パイプB3720とT19-B2をamazonで購入してみました。 購入後計測してみると保護パイプB3720の内径は8.1φでした。

で、結果は「ピンポーン!」 FX600は手元に無いので推測ですが、Hakkoの説明を見ても、どうも今までFX-601とFX600用の保護パイプとこて先を使っていたようです。 FX-601用のこて先の方がこて先の熱容量が大きい(胴が太い)ように見えるので、T19-C65のような太いこて先に有利な気がしますが、T19-B、T19-Iと細いこて先が新しい保護パイプで使用できるので、当面は細かい半田付けと、大きな面の半田付けで、保護パイプもふくめて付け替えて使用することとすることにしました。(でも、きっとT19-C65を追加で買っちゃうんだろうな~)。

というわけで、久し振りに道具の整備でひと騒動でした。 結果、3千円程の出費! でも、半田ごてを買い直すよりも安かったし、Hakkoの半田ごては実に経済的に出来ています。 感謝、感謝!

30-40-80m Dipoleがオカシイ(続)

RI1FJLの40mでの交信のときおかしくて、エレメントの修正をして問題なく終わったと思っていたら、ここ2週間の雨天で、またチューンイングが取れなくなってしまった。 何故か30mがオカシイ! よくよく考えてみると、7Mhz用のトラップを軽量化の為に銅線からアルミ線に変更した 注)...