古いシステムを動かしてみた。けっこう大変だった。
・JavaのバージョンをJava8にしないとだめだった。Tomcat9は使えたが。
・Mysqlの仕様変更があり、SSH上では、rootが作成できず、適当なユーザー名を作って、それに権限を与えることでなんとか動かせた。
やはり、一筋縄ではいなかようだが、時間かければなんとかなるということ。
古いシステムを動かしてみた。けっこう大変だった。
・JavaのバージョンをJava8にしないとだめだった。Tomcat9は使えたが。
・Mysqlの仕様変更があり、SSH上では、rootが作成できず、適当なユーザー名を作って、それに権限を与えることでなんとか動かせた。
やはり、一筋縄ではいなかようだが、時間かければなんとかなるということ。
鍵生成をいろいろな方法で試してみたり(ユーザー名、鍵の形式、GCEの権限内容等々)
いろいろ試行錯誤してだめだった。困っていたところ、
こちらの情報によると、インスタンス内のOSがSSHに厳しくなっているのが原因らしい。サイトの情報をもとに設定したら、使えるようになった。
GCEのインスタンスにファイルを転送するためWinSCPを使えるようにしてみた。秘密鍵、公開鍵の扱いに不慣れなので、いろいろ勉強になった。
Herokuクラウドの無料枠もなくなったので、まだ無料枠が残っているGCEを使ってみた。
インスタンスの使い方がわからず、とまどったが、ネット上の情報に助けられる。まず、プロジェクトを作成する必要がある。ここで、適当に北米など選んでしまい、あとで、東京もあることに気づき、やり直すことに。ドメインは、すでに持っていたものを使い、DNSの設定なども必要に、TXT,Aレコードなどを追加していった。これに、今後はさらに、SSL化のために、証明書の発行なども必要になってきたり、Tomcatを使う予定なので、ポートの変換など、いろいろ手間がかかりそうだ。
プロジェクトのあとは、インスタンスを作成、これがDockerのような仮想サーバなのだろう。OSや、CPUも選べるし、柔軟なカスタマイズができそう。そのぶん、設定項目が多くなってしまうが。
つぎに、ターミナルがブラウザで表示なるので、てっきりここで、インスタンスの中を覗けるものだとだと勘違いしていた。何度か、SSHやApacheの設定を挑戦しても、外からアクセスできなかったので、おかしいなと、ルータのパケットフィルターやら、サーバのファイアーウオールやら、Apacheのポート変更やら、試行錯誤繰り返した。それでもうまくいかない。
それもそのはず、インスタンスは、すぐ下のターミナルで操作するのでなく、「SSL」という小さなボタンをクリックすることで、それぞれのインスタンスの中をSSLで覗くことになるのだった。これに気づくまで、だいぶ時間がかかってしまう。ようやく、外からHTTPにアクセスできるようになる。
arduinoのスケッチ
}
Arduino Unoだと、上手く制御できそうなことは、わかったが、実際の組み上げにはいくつか、注意が必要だった。IOTの慣例?みたいなものがあるかも。知っている人にとってはどうということないことなのかもしれないが。
・電源は、Unoを経由せず、5v電源に繋がないと、安定しなかった。
・USB経由のserial通信は、pcと繋がないなら不要なので、コードから削除した。
・Delay関数で、dfplayerとの、通信は、立ち上げ後、1secしてから、開始させてみた。
・Net上のライブラリを使ったが、フォルダとmp3ファイルどちらも、0を先頭につけ桁数を揃える必要がある。(フォルダ、ファイル指定して再生する場合)
シリアルだと、2つのボタン押しに機能を持たせたり、カスタマイズの幅が広がり、なかなかいい。
・コントロールパネルの出し方は、スタートボタンから検索Boxにconなどと入力すると出てくる。このへんは、Linuxっぽくなってきた感じがする。
・スタートボタンは、左クリックのメニューもよく使う。コンピュータの管理、ディスクの管理。結局、Winxpや7のときから使っていたようなものの場所が、win10,win11と変わるたびに変更されていくので、そのたびに、メニューをさがすのに時間がかかるようになってしまい、非効率。なんらかの法則的なものがあるとか、メニューの新たな探し方を追加で入れてもらうにはいいのだけど、変更は、やはりきつい。できれば、あまり変えないでほしいというのが、素直な感想。
・Linuxなども、ネットワークの設定コマンドがバージョンにより変わってきたりもするが、基本的なCUIコマンドが変わることはほとんどない。CUIも覚えるのは大変だが、いったん覚えれば、いつまでも使えるので、WinとLinuxそれぞれ一長一短があるといったところか。
以前から思っていたのですが、グループセッションの回覧機能に返信機能があるといいなと考え、Jqueryなど使い実装してみた。けっこう時間はかかったが、なんとか完成した。コンパイルせず、JSPだけでなんとかできた。
ただし、ユーザーIDの扱い方がよくわからず、全角の氏名を使ってデータを扱うことにした。簡易的な方法なので、同じ職場にまったく同じ漢字の氏名の人がいると使えません。なんらかの形で文字を微妙に調整するとかする必要があります。
でも、よく考えたら、同一漢字のままでグループウエアを運用することはないでしょう、おそらく運用上は部署名をつけるとかすると思うので、あまり関係ないかもしれませんが。
https://stackoverflow.com/questions/47933278/django-project-namespace-admin-isnt-unique を参考にさせていただきました。
path('admin/', admin.site.urls)を重複して、urls.pyに指定していたのが原因だった。Top階層のurls.pyのみに指定すると、解決。
※View内のenviroment切り替えは、environment=request.site.sitedetail.production_sandbox
Follow the steps to open the Developer Dashboard, but this time choose Production mode and copy the production application ID and access token.手順に従って開発者ダッシュボードを開きますが、今回は本番モードを選択し、本番アプリケーション ID とアクセス トークンをコピーします。
Update the domain string in the JavaScript reference from sandbox.web.squarecdn.com/v1/square.js to web.squarecdn.com/v1/square.js.JavaScript リファレンスのドメイン文字列を sandbox.web.squarecdn.com/v1/square.jsからweb.squarecdn.com/v1/square.js に更新します
The Web Payments SDK requires a valid application ID to return a payment token. Update the code by providing your production application ID.Web Payments SDK では、支払いトークンを返すために有効なアプリケーション ID が必要です。本番アプリケーション ID を指定してコードを更新します。
In the "Configure the backend with your access token" section, you provided a Sandbox access token. Replace it with the production access token.「アクセス トークンを使用してバックエンドを構成する」セクションで、サンドボックス アクセス トークンを指定しました。これを本番アクセス トークンに置き換えます。
If you want to test the application in a production environment (squareup.com), you must use an actual payment card. Note that Square actually charges payment cards in production. Therefore, if you must test in production, charge minimum amounts.本番環境でアプリケーションをテストする場合 ( squareup.com)、実際の支払いカードを使用する必要があります。Square は実際に本番環境で支払いカードに課金することに注意してください。したがって、本番環境でテストする必要がある場合は、最小限の料金を請求してください。
スクエアのサブスクリプションのリストには、カスタマーIDが表示されるが、これをアプリ内のユーザー名と紐づけする方法を考えてみた。簡単そうだが、意外にはまってしまった。結果的には、以下のようにすることで解決できたが、ここに至るまでは、試行錯誤が必要だった。
<View側>
usertmpl3=list(map(lambda ob:{'customerid':ob.customerid,'username':ob.username},User.objects.all()) )
srclst=list(filter( lambda ob: ob.get('canceled_date',"")=="",list(result.body['subscriptions'])))
subscriptions=list(map( lambda ob : {'subsc':ob , 'cid':next( filter(lambda ob2: ob2['customerid'].strip() == ob['customer_id'].strip() ,usertmpl3),{'customerid':"",'username':"削除"})['username'] } ,srclst ))
注意点:usrtmpl3、srclstいずれも最後にlistを適用してある。こうしないと、うまく動作しない。(filter()関数の戻り値はgeneratorオブジェクトという記述がネット内にある。)
まわりくどい式になってしまった。もっとスマートな方法がありそうだが。値が存在しないときに「削除」という表示にしたかったので、nextを使ってみた。
https://president.jp/articles/-/61331?page=4
高血圧の基準は年々きびしくなっている。なぜだろう?と思うことがあったが。何が本当なのか、よくわからない。高すぎても、低すぎてもよくないということは、確かかもしれない。
10万kmはもつといわれているイグニッションコイルだが、なぜか、14万kmで2回目の交換。今回は寿命がくるのがはやい。プラグもまだなんとかなるはずなんだけれど。とりあえず、交換したら快調になった。あまりケチらず、少し高いイグニッションコイルを購入した。
スクエアを利用してみる。
pip install squareup
APIの説明が膨大。和訳して読みこなす。
Ajaxで、サーバを動作させて(Viewに記述)なんとかできそうだ。
様々なIDが必要でかなり手間はかかるし、いろいろ工夫も必要なようだ。