2024年2月29日木曜日

P97USI/P 北朝鮮が出てる?

ここ数日、10/12/40mのFT8,JTAlertがP97USI/Pなる局でワーニングを出して、キーボード入力が取られてしまうので、「おい、ほんとに北朝鮮? まさか、、、」と思いながら聞いていましたが、 近くのDXオタクも聞いているはずなのに呼んでいないので、WSJT-xのハッシュエラー?ではと、今朝JA1SJV局と調べてみました。 

池上氏はJTDXで私はWSJT-x 2.7.0 rc3なので、WSJT-Xのハッシュエラーならば、これでわかるはずです。  

すると、JTDXではdecodeできていないようなので、やはりWSJT-Xのハッシュエラーで、P4/WE9VがP97USI/Pになっていました。  WSJT-x2.7.0rc3でも下の様に、注意深く見ていると分かりますね。 

確か1月のDXPeditionの局でも同じことがあった記憶があるので、コールサインに"/"が入っていると要注意かもしれません。 根本的な改善が望まれますが、、、。

 

>5O2TEEというのが、40mにでていて、これも全く同じようにP4/WE9Vのデコードエラー! P4/WE9Vはソフト何を使っているんだろう?って話になってきますね~

あ、正常だったりもするので、ノイズなどの状況に脆弱なコードの所為であることは確かですね。



 

2024年2月18日日曜日

最近のDXCC(Challenge)状況

 昨年末に総括をし忘れたので、昨年末の状況は分からないが、2024年2月18日の時点で

LoTwで左の様になっていた。 最近は殆どLoTwで処理できるが、偶には紙QSLだったりOQRS(をしないとLoTwもして貰えない)が必要だったり、、、。 自分のExcelの取りまとめで見ると 紙QSLで7つ、未回収6ツとなっていました。 当面160mが無いのでChallenge2500を目指していますが、少々先は長そう、、、。

Clipperton, Juan Fernandes, Guyanaと今年に入って大きなDXpeditionが行われていますが、再開したころにChallengeは目標に無かったので、1Bnad/modeしかなかったりして、大慌てで穴を埋めています。

それにしても、40/80mはあまり聞こえない! アンテナそんなに良くなかったかな~ 。 

50年も昔の事なので、SunSpotが高い頃の80mってどうだったのか全く記憶にありませんが、なんか寂しいLowBand.

LoTwの2023/4/20(Challengeが2000達成時)と今日現在を比較してみると、6mでの昨年の梅雨時からのアクティビティの貢献度が大きいのと、10/12m等のSSNの上昇の貢献が読み取れる。 また、Digitalも結構貢献しているが、CWがやはり大きいのが分かります。












2023年10月7日土曜日

30-40-80m Inverted U

そろそろシーズンも始まるので、各バンドのVSWRを測って微調整、、、。

最新のエレメント長
とはじめたら、何故か80mのFT8で動作がおかしくなり、トラップのCが壊れた。 しようが無いので、過去のブログを見ながらエレメントの長さやCの容量を再度確認してみると、EZNECのデータの過去の記録と実測値がえらい違う。 最新のエレメント長やトラップの値と各バンドのVSWRの測定結果を再掲載(備忘録替わり)。

 EZNECに実測データを入れてVSWRを表示させてみると、下の様にVSWR最小値の周波数が少し高く出ています。

EZNECのVSWR
 

 

 



下はnanoVMAでシャックから測定した実測値で、5Mhz近辺に変なディップがあることは同じですが、VSWR最小値の周波数はかなり違うところにあります。

nanoVNAでのVSWR実測値
7Mhzのトラップの同軸Cが時々放電してトラブるのですが、ここに掛かる電圧の最大値を計算する方法がよく分からないので、ここ数年試行錯誤を繰り返しています。

で、今回は、半波長ダイポールの一般的な電圧・電流分布の図を見ていて、「ひょっとして、7Mhzのエレメントの短縮率を小さくすれば(エレメントの長さを1/4波長に近づければ)、電圧最大値になるエレメント端のトラップの頭と尻との電位差は小さくなるのでは」と7Mhzのエレメントを少し(1.1m程)伸ばしてみました。トラップのCを少し小さくして、チューニングは取れていますが、どうなるのか? 暫くは様子見。(ダメだったら、もっと長くしてフルサイズに近い値にして、トラップを小さくすることを考える必要があるかも、Lは80mに影響があるので、このLで出来るだけCを刻んでゆくか、、、)

40m
30m





80m

 

2023年9月8日金曜日

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

 この前のところで、大枠はcanvasjsによる表示が出来そうなところまで来て、最後に残った2つの問題について、検討(検索?)

1)djangoで使用している変数の値を表示される方法

  context[xxx]=abcとしてhtml に{{xxx}}とすれば表示が出来るとあったので、

  context= { 'year' : d.year(), 'month':d.month(),.....  (d=datetime.datetime.now())

としてみたら、TypeError: 'int' object is not callable と出てくるので、

  context={'date': d.date()......}としたら、正しく表示されるようになりました。

 なんで二重中括弧でくくるの?とか、型の取り扱い(数値、文字、リスト、辞書等)が今一よく分かっていませんが、 取り敢えずは、問題の一つは解決。

2)canvasjsでの空のデータを渡されたときの対応 (未解決)

  DBからのデータが無かった場合に、当該のobjectが生成されないために、以下のようなエラーが出る。 因みにlocal variable referenced before assignmentはググると結構出てくるので、嵌りやすい問題かも(C等と違い、variableを事前に宣言しないで使えちゃうので些かキモイ言語だと思っていますが、これは典型的なエラーですね)

  :         :          :           :         :

 File "/home/Users/ken/application_environment/mysite2/wxmonitor/views.py", line 240, in dailydata
    'MR2data': MR2tempdata,
UnboundLocalError: local variable 'MR2tempdata' referenced before assignment
[08/Sep/2023 11:35:45] "GET /dailydata/ HTTP/1.1" 500 66299

で、views.pyの中で、objectが出来ていなかった場合には空のリストを生成して渡すようにした。 これで、canvasjsも当該のデータの欠落を無視して表示されるようになった。 

<これって配列を使用する前に、空の配列を作ってから使用するようにすれば、条件のif文を一つ省略できるし、Argol系の使用する前に宣言と同じことなので、此方で行くことにしました。 これデコードが大分スッキリしました。


左は、改良後の表示のの状態(下が正常な状態で、上が欠落データがある状態)


 

 後学のために改良したviews.pyの一部を下に示しておきます

 

初めから空の辞書リストを宣言しておけば、シンプルに書けるので、そういうふうに書き直しました。

 

 

 

 


 

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環境に移行するのもそんなに難しくは無いように思います。

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


 

 

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

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