日々ブログ (original) (raw)
プログラミングをしているとコードを作成するだけでなく、思った通りに動く環境を作るのも大事になってくるんですよね。
とくにスクレイピングだと自動で勝手に取得してくれるだけでかなり手間が減ります。
今回は、Linuxのsysmtemdを使ってpythonスクリプトを自動で実行してみたいと思います。
systemd の役割
systemdに登録することで、マシンの電源を点灯するだけでプログラムを自動で実行することができます。
いわゆるdamon化ってやつです。 そのほか、プログラムが何等かの異常で終了していたりしたときにログをの越してくれたり、自動で復旧したりするようにしてくれます。
systemdに登録する
今回は、pythonで記述したプログラムを題材にsystemdで登録します。
題材は、以前紹介したFXの価格を取得するプログラムを使います。
これを利用することで、起動するだけでプログラムが実行されるようになるので、たとえば、持て余しているラズベリーパイを価格の取得マシンするといったことができます。
上記のプログラムをopt以下に配置します。
厳密にはどこでもよいのですが、Linuxのお作法として、opt以下に配置するのが良いみたいです。
mkdir /opt/get-currency sudo cp -r src/common/gmo/get_currency.py /opt/get-currency/ sudo cp -r venv/ /opt/get-currency/
systemd に登録する際に必要な設定ファイルを作ります。
実行プログラムの場所とこのプログラムと他のプログラムの依存関係を記述しています。
基本的には、WorkingDirectoryとExecStartを変えてやれば他のプログラム大抵動くはず。
[Unit] Description=get gmo currency After=network.target
[Service] Type=simple WorkingDirectory=/opt/get-currency/ ExecStart=/opt/get-currency/venv/bin/python /opt/get-currency/get_currency.py
[Install] WantedBy=multi-user.target
設定ファイルをsystemdへ登録する際には下記のコマンドを実行します。
sudo cp ./config/get-currency-gmo.service /etc/systemd/system/ sudo chmod 755 get-currency-gmo.service sudo systemctl enable get-currency-gmo.service
これで登録は完了です。
一度やり方を覚えてしまうと簡単です。
登録が完了しているかどうかは次のコマンドで確認できます。
systemctl status get-currency-gmo.service
active(running)となっているので無事登録されています。
楽天の株主優待が届きました。
今年は楽天モバイルの1年間利用優待でした。
単純計算(36000円=3000円×12ヶ月)でも株主優待で50%に相当するのでかなりお得です。
今回は、株主優待の利用感についてまとめたいと思います。
株主優待の内容
楽天グループの株主優待の内容は、1年間毎月30GB使用できるeSIMの提供です。 eSIMはダウンロードすれば使えるSIMカードで、今回の優待でもURLにアクセスすれば使えるものでした。 正直言って、今年の株主優待は特殊で去年ならば楽天キャッシュがもらえたり優待金がもらえたりしていたので、楽天モバイル1点だけの株主優待というのは寂しい気もします。
メインで使用していたスマホのモバイル通信は停止して節約
メインはiphone SE3ですでに楽天モバイルを契約してました。
なので、優待と合わせて使うとお得感が薄れちゃうんですよね。
なので、メインのスマホはモバイル通信を停止させました。
設定画面からワンタップで設定できるので楽ですね。
同じ楽天モバイルなのでこちらに紐づけても良いんですけど、電話番号が変わってしまうし、1年間しか使えないので、メインで使うのは正直微妙。
正直なところ、スマホを1台しか持ってない人からすると今回の株主優待は微妙なんじゃないかな。
サブのスマホがあったので利用開始
もともと、楽天モバイル利用者だったので、2台目のスマホに紐づけました。
google pixel 7aです。
スマホはandroidとiOSの両方を持ちたい派なので、廉価版モデルを2つ持ってます。
テザリングでメイン端末の通信を確保
楽天モバイルの料金は、使用した通信量によって変わるので、メイン端末の通信はオフにしました。
この状態で使えば月あたり1000円ってところですかね。
通常が月3000円ほどかかっていたので、年間で考えると24000円の節約。
株の購入代金が6万円くらいだったので優待率は40%。
これだけ考えるとめちゃくちゃオトクな優待ですね。
エリア範囲は問題ない
メインも楽天モバイルなので分かってたことですが、今のところ通信エリアには文句無いです。
都市部なら基本的につながるし、ドラクエウォークか音楽にしか使わないので速度も文句は無いです。
ただ、移動していると一瞬だけ切れるといったことはあるので、その辺りを気にする人は他のキャリアの方がやっぱり良いのかも。
ドラクエウォークで使用しているとたまに通信エラーが出るんですよね。
もしからしたらアプリ側の問題かもしれませんが。
楽天モバイルの株主優待の所感
お得ではあるんですけど、フル活用できる人は少数というのが正直なところです。
1年間しか使えないので使い勝手が悪いです。
来年以降も使えるということであれば、「買い」一択なので惜しい優待です。
通年通りの配当金とか楽天キャッシュの方が万人受けで使いやすいので正直戻ってほしいですね。
スマートウォッチを3年間使い続けた正直な感想をまとめたいと思います。
自分が使用していたのは、garminのスマートウォッチであるvenu2 plus です。
装着して寝てるときの違和感は無くなる
腕時計しながら寝るのに抵抗が最初はありました。 購入したのが夏で蒸れやすい時期で最初は正直寝苦しかったんですが、3ヶ月もすれば身体が慣れてきて気にならなくなりました。 むしろ、装着しないと睡眠計測ができないというのが嫌で、率先して着けるようになりましたね。むしろ、無いと違和感に感じるというくらいには生活の一部になりました。
就寝時間がめちゃくちゃ遅いですが、装着してくれるだけで計測してくれるので楽です。
1年分だとこんな感じです。
平均睡眠時間が6時間に届いていない..。
週末にたっぷり寝てると安心しがちなんですが、フタを開けると思ったより寝ていないことがわかります。
震えるアラームは嫌でも目が覚めるし周りに迷惑をかけない
スマートウォッチを使ってて一番役立ってるのは、バイブレーションアラームですね。 震えて起こしてくれるやつです。
音の目覚ましは自分には割と効かないことが多く、30分くらい平気で鳴らしていることも多いのですが、流石に腕が震えると目が覚めます。
音も小さいので周りにも迷惑をかけにくいのもいいですね。
文字盤のデザインは変えなくなる
文字盤のデザインを変えることもなくなりました。
スタイリッシュな文字盤のデザインがそれこそ100種類くらいあってしかもどんどん追加されるんですが、それらを頑張って試すことなくなります。
結局多くのデータを一度に見れる表示だけしか使わなくなりました。
デザイン重視だと正直スマートウォッチじゃなくて、アナログの文字盤の方が好きなんですよね。
高機能なアプリも使わない
もともと私が求めていたものではないのもありますが、高機能なアプリはほとんど使いません。
時間が見れて、今何歩あるいたかが見れれば個人的には十分です。
ほとんど、G-Shockみたいな使い方してる。
高機能なアプリを使うとバッテリーの消費が大きいですし、そもそも高機能なアプリはスマホで事足りますからね。
音楽は聞かない
Venu 2Sの押しポイントであった音楽も結局聞かなくなりました。
スマホなしで聞けるのは良いんですが、接続が切れたりすることがあったり、GPSで計測しながら使ったりすると突如アプリが停止することがありました。
不具合なんですかね。
これで停止すると計測中のデータも残っていないこととかもあったので残念です。
加えて、イヤホンの接続が面倒でワイヤレスイヤホンと接続するのにスマートウォッチ側で操作が必要なんですよね。
スマホだと、イヤホンをケースから取り出したら自動で接続するのでこれが結構ストレスでした。
結局、音楽を聞くときはスマホを持ち歩くようにしています。
結局バッテリーが命
使ってて一番気になるのは、バッテリーが1週間程度しか持たないことでした。
それでもスマートウォッチとしては長い方なんですが、充電するのって結構手間なんですよね。
手間をかけずに通知やら睡眠計測をしたいからスマートウォッチを着けているのに、却って充電するという作業があるのが正直わずらわしい。
加えて、 使いたいと思ったときに、充電するのを忘れてしまってバッテリーが少なかったり、充電ケーブルの接触がイマイチで充電できなかったりといったこともあって、 とくに本体に付属していた充電ケーブルはすぐにだめになったので買い替えました。
充電が死ぬほど面倒でGshockの偉大さを感じる
結局自分にとって大事なのは、バッテリーの寿命なんだな~とスマートウォッチを使うと痛感します。
中学生のときに使っていたGshockが本当に偉大だったんだなと。
Gshockも最近は心拍数とかヘルスケアモニタリング機能が付いているようですね。
ただ、バッテリーが少なくなると時刻表示だけというのがいただけない。
この点は、garminのinstinctシリーズが軍配上がりそうですね。
大学生時代に学んでから、また最近使うことがあったので、復習代わりに記述していこうと思います。
無線工学とか電波工学とかで使用する式です。
レーダー方程式とは
レーダーで受信する電力を計算するための式です。
電磁気の理論を用いて導出できて分かりやすいので非常に重要な式です。
レーダーがどの距離にあるターゲットを検出できるのかや、逆にターゲットを決めたうえでアンテナ形状を決めるために使う式です。
受信電力が、送信電力・アンテナ形状()・距離・ターゲットの形状の掛け算で決まるというめちゃくちゃシンプルな式ですね。
波の振る舞いを表した式では無い
よくある間違いとして、電磁波の振る舞い(伝搬)について記述したものでは無いので、途中の電力は計算できないので注意が必要です。
こうした電力を求めたい場合は、波の振る舞いについて考慮する必要があるので、モーメント法とかレイトレーシングを用いて簡易的に計算しましょう。
厳密に言えば、マクスウェルの方程式から電磁波の伝搬式を解かなければならないのです。
途中の電波が伝搬する仕組みはどうでもいいから、送信した電力がどれだけの大きさで返ってくるかだけに注目することで得られる式というわけです。
導出してみる
導出するためのモデル図は下のような感じです。
アンテナから距離Rに物体がある状況ですね。
導出前に下の条件が成り立つとします。
- ターゲットは点とみなすことができ、形状は考えなくてよい
- ターゲットによって電波が吸収されることはないこと
まず、 電磁波をどの方向にも球面上に広がって放射する等方性アンテナについて考える。 このとき、ターゲットに入射する電力の大きさは、球面上に広がるので、送信電力を球の面積で割ることで求まり、下式で与えられる。
で入射した電波のうち、ターゲットによって反射する電力の大きさは、散乱断面積との積で表され、下式で与えられる
反射波を距離Rだけ離れた受信アンテナに受信する電力は、電磁波は入射時と同じく球面上に広がるので下式で与えられる。
受信アンテナに到達する電力のうち、受信できる電力は有効開口面積との積で決まるので、受信電力は
実際には、等方性アンテナではなく、特定の方向に電波を送信するアンテナを使用するのでその利得を考慮すると、
となる。
仮定の意味
ターゲットの形状
まずは、ターゲットの形状についての仮定です。
電波が反射する瞬間、ターゲットの表面では波の位相が揃います。
高校生などで習うホイヘンスの原理ですね。
物体の形状を考えると、位相が揃う面っていうのは物体の一部だけになって、反射が複雑になるので散乱断面積では表現しきれなくなります。
たとえば、同じ物体であっても近いと一部からしか反射しませんし、遠くにあると全体から反射します。
物体との距離によって物体の反射特性が変わり、求めるには複雑な計算が必要となります。
(散乱断面積は形状を考えなくて十分遠い位置で物体の形状を考えたときの値となります) なので、計算を簡単化するための仮定です。
電波の吸収
次に、電波の吸収です。
電波が物体に当たって反射するとき、表面で反射するわけではなく物体に一旦吸収されてから、大部分が入射した方向と同じ方向に返ります。
下記のページが参考になりました。
実際にはこの吸収の際に、電波の電気エネルギーが熱エネルギーなどに変わるのでその分反射するエネルギーが減ります。
吸収率は室温などでも変わるので、計算できないので考えないことにしたわけですね。
なぜ2Rで距離の2乗では無いのか
私も最初は不思議だったのですが、電波が往復すると考えて2Rと考えるのは誤りのようです。行きと帰りで電波は同じことが起きると考えるのが正解ですね。
レーダー方程式では、電波は物体に反射するとき、表面でそのまま跳ね返るのではなく、一旦電波は物体に吸収されてから、吸収したエネルギーを全方向に再放射すると考えます。
(全方向では無く、入ってきた電力がどの程度入射方向と同じ方向に返すかを示したものが散乱断面積です。)
仕組みとしてはアンテナと同じように電力が入力されてそれに応じて電波が放射されるのと同じですね。 なので、行きがなので、帰りもとして、それらの積である距離の4乗に反比例することとなります。
先日訪れたガンダムベースでMGEXのストライクフリーダムガンダムを手に入れることができました。
ガンダムSEEDフリーダムの映画を見に行った帰りに、あったので非常に幸運でした。
今も品切れが続いていますもんね。
Amazonの転売価格は収まるところを知らない。
普段作るのがHGシリーズなので
とりあえず中身を確認
とりあえず中身を広げてみました。
ガンプラは値段とパーツ数が比較してるから良いですよね。
値段が安いものは早く組めるし、ネアンが高いものは組むのに時間がかかる。
加えて、値段が高いと組み上げたときのクオリティが高いのが良い。
ランナー立てが付属している
簡易ではありますが、ランナー立てが付属しています。
MGはランナーの種類が多いので、これがあるだけで作業効率がかなり上がります。
複数のランナーを出したりしまったりするだけで結構時間食いますから。
立てられる本数は4つなので少ないですがかなり役立ちました。
種類の異なる金色が好き
早速組み立てに入りましたが、金色のパーツが3種類あってこだわりを感じます。
左から、ゴールド・ピングゴールド・ホワイトゴールドですね。
他のガンプラだとゴールドはせいぜい1種類ですから、これだけでも豪華さが伝わる。
脚のあたりがこれら3つが折り重なっていて楽しみながら作れました。
シンプルなゴールドがやっぱり光かがやいてきれいですね。
豊富な金属パーツ
プラモデルなので、金属は基本無いのですが、 金属の光沢を持たせたステンレスシールが散りばめられます。
外装は無いけどこれだけで満足
商品パッケージにもよく採用されている外装をつけていない骨格だけの状態。
初めて見た人からすると、もはやガンダムなのかどうかすらわからないですが、メカメカしい感じが良い。
メダロットのティンペットみたいな感じで、ロボット好きとしてはたまらない。
説明書どおりに作ると、骨格だけの状態を作れるのでこれが魅力の一つなんでしょうね。
写真撮りながら不思議だったのが、どういうわけか手の甲にあるプラスチックパーツはつけたままなんですよね。
公式サイトとか取り扱い説明書の写真を見ても付いているですよね。
外装をつける
内装が出来上がったので外装をつけていきます。
上半身だけ外装をつけました。
外装を少しずつ組み上げていくので、ガンダムがどんどん組み上がっていくのが他のガンプラを組み立てるのとは違いました。
シールを貼り付けるのが厄介
組み立てる中で一番難しかったのがシールですね。
ペンチの刃先と同じくらいの大きさのシールを10箇所くらい貼らないとだめなんですよね。
手先は正直言って不器用な部類なのでめちゃくちゃ苦戦しました。
小さすぎて2つほど紛失しました。
ありがたいことにシール自体に余裕があったので救われました。
たぶん、失くす前提なんでしょうね。
完成
ようやく完成しました。
金属感は正直失われてしまいましたが、ガンダムとしてはこちらの方がやっぱり格好いい。
MGEXというだけあってやっぱり組むのは相当時間かかりますね。
合計すると20時間くらい費やしたかな。
ストライクフリーダムといえば、やっぱりオープニングのポーズこのポーズですね。
神戸の三ノ宮に行ったときによくいくラーメン屋さんです。 値段もリーズナブルで通いやすいです、
場所は東門街の路地
場所は東門の脇に入ったところにあります。
目印はこの看板です。
飲み屋街のすぐ近くなので、飲み会帰りにも行きやすい立地です。
看板に〆とあるのでまさしくって感じですね。
朝まで営業
営業は夜だけの営業で夕方から朝の5時まで営業してます。
私は、8時頃にお邪魔しましたが、比較的席も空いていました。
おすすめは1杯500円の豚骨ラーメン
全体的に安いですが、豚骨ラーメンがとくに安い。
ワンコインで食べれるところって本当に希少!
しっかりとした豚骨ラーメンだと800円から1000円するところ多いですからね。
昨今、値上げラッシュが続いているので非常にありがたい。
出てきたのがこちら!
しっかりとした豚骨って感じです!
美味しくいただきました。
コロナ禍開けてから新店舗
過去に、viteでelectronを使用していたときに困ったので、メモ代わりに記載しておきます。
viteではbufferをインポートできない
javascript上では、import と書いてあるのですが、requireをサポートしていないというエラーが出ています。requireがbufferの内部で使われていることによるエラーですね。
webpackではインポートできる
歴史の古いwebpackでは問題なくインポートできます。
このあたりは、さすが成熟したフレームワークって感じですね。
viteの方は書き方について厳格ということでしょうか。
性能を重視したviteがwebpackより汎用性が低いのはある程度仕方が無いことでしょうか。
拡張プラグインをインストールすることでimport エラーが解消する
vite-plugin-node-polyfillsをインストールすることで解決しました。
npm install -D vite-plugin-node-polyfills
上のプラグインをviteの設定ファイルに記述します。
上記を追加したあと無事に画面が映るようになりました。
下記の記事を参考にしました。
失敗事例:browserlifyをかける
node.js専用に実装されたjavascriptをブラウザでも動く方法としてbrowserlifyがあります。
簡単に言うと、node.js固有のライブラリや書き方をブラウザで動くように自動で置き換えてくれる仕組みですね。
こちらを試して見たのですが結論から言うと駄目でした。
どうも、webpack向けの書き方に変換するようで、viteでは禁止されている構文が含まれてしまってインポートエラーが起きます。
メモ:browserlifyの使い方
せっかく、調べたので個人用のメモとしてbrowserifyの使い方をメモしておきます。 まずは、グローバル領域にインストール
npm install -g browserify
対象のスクリプトファイルを第一引数に-oのあとに生成後のファイルパスを入力します。
browserify target.js -o result.js