2023年9月7日木曜日

Django/PythonでのWEBアプリ開発を更に勉強ーその3

 canvasjsのpython関連のサンプルソースで、簡単にDBの抽出データをserializers.serialize('jason', xxx.object.all())で渡していたので、ズボラにそのまま踏襲していたのが間違いでした。  

1)canvasjsのサンプルソースから、index.html(pythonに依存しない物)に直接データを埋め込んでpython manage.py runserver で実行してみると、まったく問題なく表示することが出来ました。

2) serializers.serialize('json',xxxx)でどのようなデータが作られるのか、python manage.py shellで手入力して確認してみました。(左図) うーん、これでは、無理ですよね。python manage.py shellはpython初心者にとっては、色々と試して見れるので極めて便利ですね。

if !flag:はダメでif flag=False:なんですね。 (何でもCっぽく理解しているのが悪いんですけど、、、)



3) 1)の場合の受け渡されるデータの形を確認すると、dictionary型のリスト?となっていたので、そのような形式でデータが送られるように、views.pyを改造することにしました。  夫々の、抽出データを加工して、dictionary型のリストを作り、これを渡してみましたところ、無事表示させることが出来ました。  


データの量が多いので、夫々のデータをcontextにdictionary型として入れ、htmlに送って動作することが確認できました。 (送出するデータの種類が増えても対応できるようにするため。)


   

 

ここまでは、無事に進んだのですが、対応するデータが存在しない時にエラーが発生するようなので、この対応を考えなくては、、、。  

 

 

更にhtmlでpythonで使用している変数を表示する方法が??

 


 

2023年9月5日火曜日

Django/PythonでのWEBアプリ開発を更に勉強ーその2

取り敢えず、動かして色々弄ってみるベンチが出来たいので、現在PHPで作って使用している、自宅の環境モニターの表示アプリ(定期的に何か所かの温度、湿度を自動的にサーバー


のDBにあげておき、必要に応じてDBから抽出、aggregationして時間毎、日毎、月毎のデータとしてグラフで表示させる)をDjangoに移行させてみました。  

 

1)DBのVIEWの扱い  DjangoではDB派のアクセスとしてORM(object-relational-mapping)が提供されていますが、これが今一使い難い。 例えば、夫々の地点から、温度、湿度、気圧を定期的に送っているので、データは、(場所、時間、温度、湿度、気圧)がひとまとまりのデータしてDBに存在しています。 従って、時間毎の最高、最低、平均等の所謂aggregationはDBのVIEWの様に一気に計算して欲しいのですが、ORMではこれはちょっと無理みたい。 なので、DBのVIEWでaggregationのビューを作って、これを参照するmodelを作る方法を取りました。 

class Meta: managed=FalseでDBのVIEWを参照できるみたいです。

>adminで表示されるこのテーブルの内容を弄るとどうなるのかは未確認

2)抽出したデータの表示 直近の場所毎の温度、湿度を表示するテーブルへのデータの送信は直近のデータを表示するDBのVIEW(Up2dateData.sql)を呼ぶclassでwxmonitor_testpage.htmlをtemplateに指定して、表示させてみました。 これは問題なくすんなりOK

models.py


3)aggregareデータのグラフ  取り敢えず、一日の時間毎の最高、最低、平均温度、平均湿度をDB VIEWのdailydatatoday.sqlから参照するclassをTodayData(models.Model)を作成。 これから、場所のフィルタを噛ませて、特定の場所のデータ(最高、最低、平均)を取得して、templateに送るviewを def dailydata(request)を作成

 wxmonitor_test.htmlで送られたデータをテーブルに表示することはできましたが、phpで使用しているcanvasjsで表示させようとすると、全く何も表示されずここで頓挫。

 

views.py  
 

 

 

canvasjsとdjangoの組み合わせでサンプルアプリをググって、ココやココなど見ながら、canvasjsでグラフが表示できるか確認してみますが、何故かどれもダメ。  現時点でDjangoとcanvasjsとの組み合わせをうまく動作させることが出来ずに、頭を抱えています。

因みに、index.htmlに適当なグラフのサンプルのソースをcanvasjsのページから持って来て表示させるとちゃんと表示してくれます。 例えば、JavaScript Dynamic / Live Multi Series Chart をindex.htmlにして、djangoで呼び出してやると問題なく表示されているので、ここら辺から、問題点を探し出してゆくことにしようと思います。

ちょっと長期戦の予感、、、、

 

 

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年以上元気に動作しているので???  

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



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

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