お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
投稿日:
言語::PythonOS::Linuxジャンル::ガジェット

Pythonでデーモンを作ったので、その手順のメモ

確認環境

Env Ver
OS 2020-05-27-raspios-buster-arm64
Python 3.7.3
python3-systemd 234-2+b1

やったこと

  1. python-systemdのインストール
    1. sudo apt-get install python-systemd python3-systemd
  2. ~/foo.pyを以下の内容で作成
from systemd import journal
journal.send('Hello world')
journal.send('Hello, again, world', FIELD2='Greetings!', FIELD3='Guten tag')
journal.send('Binary message', BINARY=b'\xde\xad\xbe\xef')
  1. 実行権限を付与する
    1. chmod 755 ~/foo.py
  2. systemdの定義ファイルを次の要領で作成
    1. sudo nano /etc/systemd/system/foo.serviceとして以下の内容を書く
[Unit]
Description = Foo

[Service]
ExecStart = python3 /home/pi/foo.py
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target
  1. デーモンを有効化する
    1. sudo systemctl enable foo.service
  2. デーモンを開始する
    1. sudo systemctl start foo.service
  3. ジャーナルを見る
    1. systemctl status roomenv.service
  4. なんかログが出てれば成功
    1. ExecStartsudoを書くと動かない(root権限で動作する模様)
投稿日:
ジャンル::ガジェット

Surface Pro 7

Surface Pro 7 PUV-00027、Core i5 1035G4 MEM 8GBモデルのお話です。

タブレットというよりノートPCとしてみた方が適切かなと言う印象です。まぁ中身は単なるWindows 10なので当然と言えばそうですね。

今の所の印象としてはラグジュアリーで長時間駆動可能なミドルエンド2in1ノートといったところです。

タブレットとして

開発機クラスの存在を持ち運べると言う意味では悪くありません。しかし敢えてSurfaceである必要があるのかと言うと今のところ明確な回答は出せないです。いわゆるタブレットととしてみるとどうしても微妙と言わざるを得ないという部分が率直な感想。

悪くはない解像度

2736 x 1824の解像度を持つディスプレイと言う事で、この点においては魅力的ですが、12.3インチしかないため初期設定のスケーリング200%で運用しています。

ちょっと大きすぎるかも

これは利点でもあるのですが、今のところ運用する上で最大のボトルネックになっているところです。

満員電車で使うのは割と憚れるサイズです。使えない事は無くはないとは思いますが後述する重量との兼ね合いで難易度は高いと感じました。

とにかく重い

重量が800g弱あるため垂直にしても水平にしても斜めにしてもどう持っても重いです。片手で持つのは辛く、両手で持つと横持ちは大きいため肩がこりました。縦持ちなら比較的マシという程度。

文字入力周りについて

ソフトウェアキーボード或いはタッチキーボードとでも呼ぶものでしょうか、要するに画面上で使うキーボードのことです。AndroidのGoogle日本語入力に慣れてると大変入力効率が悪く、取り敢えず入力が出来るレベルの代物にしか見えませんでした。

因みにタイプカバーを立って使うのはスペース的にも形状的にも難しいと思うので、あくまでタブレットとして使う場合、どうやってこのキーボードを使っていくかが鍵になりそうです。

特にIMEとキーボードが一体化している点が個人的に色々と難しいポインツで、これは知る限り切り離せません。まぁAndroidなんかもそうなので理解はできるのですが、利点かと思えばデメリットしかなく、大人しくMS-IMEを使おうとか言う内容になります。

Google 日本語入力

みんな大好きGoogle日本語入力はPCのときとよく似た振る舞いをしてくれるおかげで変換候補や入力中の文字が確認し辛い問題があります。

変換のしやすさ

変換候補が出てくる所がカーソルから離れていて見辛いです。

2020-02-19-2.png

キーボードの種類

二種類しかなく左右分割の英字キーボードか分割なしのキーボードだけです。フリック入力などありません。

2020-02-19-3.png

MS-IME

嫌われ者のIMEですが、こちらは入力方式に富んでいます。

まず入力中の文字や変換候補はキーボードの上側に表示されます。見やすくていいですね。

2020-02-19-4.png

キーボードの種類も多くフリック入力からフルキーボードまで選び放題です。但しフルキーボードは平置きにしないと使いづらいと思います。

2020-02-19-6.png

フリック入力

みんな大好きフリック入力!AndroidのGoogle日本語入力とはレイアウトが異なりますが、慣れれば十分使えそうな代物ではあります。

しかし英字モードをQWERTY方式に出来ないのは個人的にはマイナスです。

2020-02-19-7.png
2020-02-19-8.png

フルキーボード

ShiftやAltなどの制御キーがついており、コーディングなどで重宝しそうですが本体を持って使うには不向きに感じました。

2020-02-19-9.png

左右分割キーボード

最初に戻ってきましたが、結局のところこれが一番マシな選択肢に思えました。肩こりますけど。両手で持って両手で叩けます。肩こりについては慣れなのかなという気もしました。

2020-02-19-10.png

ノートPCとして

タイプカバーとマウスを使って開発をしていても8hくらいはバッテリーが持つため、ノートPCとしては優秀かなという気はします。

実業務とかにありがちな重くてまともに開発できないといったことはVSCode + MySQL + Laravelでは感じなかったです。それなりにサクサクという感じ。

Office一式が入っていることや、人によっては液タブとしても使える点とかを考慮すれば総合的なコスパはいいのかもしれませんが、ごく単純な開発機としてみた場合のコスパはあまり高くないような気もします。ぶっちゃけ開発しないならAndroidタブレットで十分でしょうし、開発するにしてもタイプカバーとマウスを含めれば1kgを超えるため余りお手軽に持ち運べる感はありません。

買って軽く数日使った程度では評価するのが難しいと悟ったので、また使い込めたらその頃になんか書きたいと思います。可能性はあるデバイスだと信じているので...。

確認環境

Windows

あらかじめgpgのパスをPATHに通しておくと良い
参考値:C:\Program Files (x86)\GnuPG\bin

Env Ver
Windows 10 Pro Build 19042.804
git 2.30.0.windows.1
VSCode 1.53.2
Kleopatra Gpg4win-3.1.15

Linux

Windows側からVSCodeのRemote - SSHで接続

Env Ver
Ubuntu Desktop 20.04.2
git 2.25.1
gpg 2.2.19

手順

Windows

  1. Kleopatoraを起動
  2. ファイル> New Pair Key
  3. 個人用のOpenPGP鍵ペアを生成
    1. 期限なし、パスフレーズは適当に
  4. Exportから -----BEGIN PGP PUBLIC KEY BLOCK----- の中身を全部GitHubの GPG keys/ Add new に貼り付ける
  5. 追加後にでてきた Key IDgit config --global user.signingkey KeyID として cmd に流す
  6. 以下を流す(gpg.program はなくても動くが、あったほうが問題が起きない)
    ```bat
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
    ```
  7. 管理者権限で cmd を起動し次のシンボリックリンクを作成
    1. mklink /D %USERPROFILE%.gnupg %AppData%\GnuPG
  8. VSCodeで適当なリポジトリを作成
  9. なんか適当にコミットする
  10. GitHubに投げる
  11. GitHubのコミット履歴にverified signatureがついてたら成功

Linux

  1. Windows側のKleopatoraから公開鍵と秘密鍵をエクスポートして持ってくる
  2. gpg --import FooBarpublic.asc で公開鍵をインポート
  3. gpg -k でインポートされていることを確認し、下記XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX相当の部分をコピペ
pub rsa3072 2021-01-17 [SC]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ 不明 ] Foo Bar <foobar@example.com>
sub rsa3072 2021-01-17 [E]
  1. gpg --edit-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  2. trust
  3. 5を選ぶ
  4. quit
  5. gpg -kで信用度が[ 究極 ]になっていることを確認
  6. gpg --import FooBarSECRET.ascで秘密鍵をインポート
    1. SSHで繋いでいる時でタイムアウトする場合、GUIプロンプトからの入力になっている可能性があるので、どうにかして入力
    2. XRDP経由ならpkill gnome-sessionを叩くと入れる
  7. Windowsの時と同様に次のコマンドを流す
    1. git config --global user.signingkey KeyID
    2. git config --global commit.gpgsign true
  8. VSCodeで適当なリポジトリを作成
  9. 何か適当にコミットする
    1. コミットがコケたらXRDPから入力する
  10. GitHubに投げる
  11. GitHubのコミット履歴にverified signatureがついてたら成功
CLIからやる場合でパスフレーズを何度も打ちたくないケース

以下の手順が参考になる

WSL2のUbuntuでGPGキーのパスフレーズを記憶させる

トラブルシュート

Key IDを確認したい

以下のコマンドで確認可能

gpg --list-signatures

GPGキーを消したい

GPGキーの消し方

ここ最近回線速度が異様に遅かったので早くなるかな?と思って申し込んでみました。結果としては早くなったと思います。

OCN は IPv6 標準対応

OCNは以下のプランではIPoEによるIPv6接続に標準対応しているとしています。

  • OCN光
  • OCN forドコモ光
  • OCN光withフレッツ

但し契約時期による条件あり

但し標準提供されるのは以下の条件に限られており、それ以外のユーザーは何かしらの手続きが必要である可能性があります。

  • 2017年7月25日以降にOCN光をご利用開始したお客さま
  • 2017年9月1日以降にOCN forドコモ光をご利用開始したお客さま
  • 2018年6月15日以降にOCN光withフレッツをご利用開始したお客さま

条件外のユーザー(ドコモ光)はどうすれば?

2017/08/31 以前に OCN for ドコモ光を利用開始したユーザーについて

OCN のお知らせ詳細なるページで「メールに記載のURLからフォームへアクセスしお手続きをお願いいたします。」と案内されていますが、2019/12/17現在このフォームは消滅しており利用することができません。

NTT 西ユーザーなら自分で NTT に申し込めば行ける?

OCN のお知らせ詳細では以下のような案内があるためNTT のサイトから申し込んでみることにしました。申込みから一時間ほどで利用できるようになります。書いてある通り無料です。

しかしこれだけではv6通信はできませんでした。やはりOCN側が対応している必要があるようですね。

IPoE 提供には NTT 西日本のフレッツ・v6 オプション(無料)が必要となるため、お客さまに代わり OCN が NTT 西日本へ代行申込をいたします。
サポートにメールをすると今でも申し込み手続きが可能

上述の通り、申し込みフォームは既にありません。何故なくなったのかは知りませんがきっとなにか深い大人の事情でもあるのでしょう。

しかし私はなんとしてでも無料で煩雑な手続きもせず追加機材も用意せずIPv6を使いたかったのでOCNのQ&Aを読み漁り、それっぽいワードでググりまくり、OCNメールを開き「【重要】OCN IPv6インターネット接続機能(IPoE)」の提供について」というメールを何度も読み返し「本件に関するお問い合わせ先」なるリンクに気がついたので、その先にあったお問い合わせフォームからメールに記載のフォームが使えないがIPoEによるIPv6接続を利用できないか?と問い合わせをしてみました。

サポートに問い合わせした結果、24hほどで以下のようなメールが届いたので適当に埋めて返信

そして IPv6 開通!

上記メールに返信をしてから48hほどで以下のようなメールが来たのでルーターを再起動したところ無事IPv6に繋がりました。やったー!

20220412031052.jpg

WSR-1166DHP4で利用できた!

IPv6対応ルーターも増えてきて値段もだいぶお手頃になってきたので、本当に繋がるかどうかもよくわからないまま買ったルーターでしたが、無事繋がりました。

上述のメールの案内に書かれている通りルーターを再起動したところネットが不通になり、ルーターのコンパネにアクセスしてみると回線識別画面になっていました。

20220412031136.jpg

ぼちぼち安くてそこそこ小さいのでおすすめです。アンテナ生えてないからコンパクト。

バッファロー11ac対応866+300Mbps無線LANルータ(親機単体)(ブラック) WSR-1166DHP4-BK

OCN バーチャルコネクト!

20220412031208.jpg
20220412031228.jpg

もしや…!と思ったらキタコレ!(漣風に

しかしコケる

ファッ!?

まぁネットワークにエラーはつきもの、リトライです。

20220412031148.jpg

IPv6接続成功!

リトライしたらフツーに行けました。良かった。

20220412031208.jpg
20220412031228.jpg

ちゃんとIPv6で繋げてます。因みにv4でも繋がります。v4のIPを振っている自宅サーバーにもv4環境からアクセスできました。出てるのはこのブログのIPなので隠す意味は特にないのですが、一応…w

20220412031242.jpg

契約情報もちゃんと更新されてます。

20220412031251.png

速度の変化

直近の測定値を見ると大分早くなったような気がします。劇的に早いというわけではないと思いますが、実用上は必要十分だと思います。流石に光で100Mbps切ってるのは問題なので…。(ADSLかよ

投稿日:
ソフトウェア::Excel

いつも使う時に忘れるので自分用の備忘録がてら。組み合わせることでGrep結果の集計とか、ある程度パターン化されているエクセル設計書の集計とかに使える

こんな地獄のような数式使わないに越したことはないと思うんですが、世の中それで済んだらExcelなんて要らないんですよね!

パターンで文字切り出し

A2<hoge>あいうえお</hoge>みたいな文字があるとして

D2<hoge>, E2</hoge>があるとする場合、B2辺りに以下の数式を入れると特定の文字列で囲まれた文字列を切り出せる

image-1656166615270.png

=MID(A2,FIND(D$2,A2)+LEN(D$2),(FIND(E$2,A2)-FIND(D$2,A2)-LEN(D$2)))

条件付き書式を複数列反映

D列の値を条件として同一行複数列に書式設定するものとする

条件式で$D1="HOGE"のように列名をロックした式を設定し、範囲をA:Gのようにすると、常にD列を参照した状態で範囲的に設定できる

最初に出現する行位置の特定

=MATCH("hoge",A:A,0)

ワイルドカード

アスタリスクを生やす

=MATCH("*hoge",A:A,0)

セクション行のグルーピング

Grepとかで抜き出した結果をエクセルに貼り付けてグルーピングする時に使えるやつ

これを

Title
C:\Hoge\Foo\Src\Hoge001.txt
100,1: aaaa
101,1: bbb
C:\Hoge\Foo\Src\Hoge002.txt
10,1: aaaa
11,1: bbb
18,8: cccc
...

こうしたい

Title Section
C:\Hoge\Foo\Src\Hoge001.txt Hoge001
100,1: aaaa Hoge001
101,1: bbb Hoge001
C:\Hoge\Foo\Src\Hoge002.txt Hoge002
10,1: aaaa Hoge002
11,1: bbb Hoge002
18,8: cccc Hoge002
... ...

手法

Sectionを抜く列を作る

B2だけは決め打ちで2を入れておき、B3以降に設定

=IF(ISERROR(FIND(E$2,A3)),B2,ROW())

image-1656166615270.png

Section名を抜く列を作る

C2以降に設定、タイトル行ならD2E2の値を元にA列の内容を切り出し、タイトル行でなければB列の値を行番号とし、C列の行を当てに行くロジック

=IF(ISERROR(FIND(D$2,A2)),INDIRECT("C"&B2),MID(A2,FIND(D$2,A2)+LEN(D$2),(FIND(E$2,A2)-FIND(D$2,A2)-LEN(D$2))))

image-1656166631186.png

複数条件でのCOUNTIF

COUNTIF()で複数条件を実現するには文字列結合した列を作る事があると思いますが、COUNTIFS()ならその必要はない

=COUNTIFS(条件列1, 条件1, 条件列2, 条件2, ...)

便利関数メモ

よく使うやつ

  • IF(), AND(), OR(), NOT()
    • 条件分岐でよく使う
  • SUM()
    • 集計用。SUMIFS()はあんま使ったことない
  • COUNTIF(), COUNTIFS()
    • 条件付き集計
  • COUNT(), COUNTA(), COUNTBLANK()
    • 個数カウント
  • VLOOKUP(), MATCH()
    • 検索用
  • ADDRESS(), INDIRECT(), INDEX()
    • MATCH()結果からセルを当てる時に有用
    • INDIRECT()はシート名を書いておくとシート名の変更時に追従しやすい(その際シート名管理用のセルをどっかに作っておく)
  • FIND(), LEN(),MID()
    • 文字列切り出しの鉄板

まれに使うやつ

  • DATEDIF()

    • DATEの差分がINTで取れる便利な子