2022年5月22日日曜日

ワンライナーのコマンドで日付期間の日数を算出する方法について

 あまプロではUbuntuを使ってコマンドを使う事があります。

ワンライナーのコマンドで日付期間の日数を求めたい時に使うコマンドです。

expr \( `date --date yyyymmdd +"%s"` - `date +"%s"` \) / 60 / 60 / 24
または
expr \( $(date --date yyyymmdd +"%s") - $(date +"%s") \) / 60 / 60 / 24

yyyymmddには年月日を入れます。例えば20220806とかです。

``と$()の違いは、入れ子(ネスト) にできるかできへんかの違いです。
バッククォート``は入れ子にできませんが、かっこ$()は入れ子にできます。
この場合は入れ子にしないので、違いはないです。
お好みで使い易い方を選んで下さい。

/ 60 / 60 / 24は秒を分に変換して、分を時に変換して、時を日に変換してます。
/ 86400でも同じ結果になります。
お好みで使い易い方を選んで下さい。

これで本日から何日後というのを一発で取得できます。 

任意の日付期間の日数を求めたい時には

expr \( `date --date yyyymmdd +"%s"` - `date --date yyyymmdd +"%s"` \) / 86400

でっす。

2022年5月6日金曜日

LibreOffice BasicでGridControl(テーブルコントロール)を作成する方法について

 あまプロではLibreOfficeを使ってマクロやアプリの開発を行う事が有ります。

先日LibreOffice Basicでグリッド(テーブル) コントロールを使った際にどはまりしたんで、あメログ。
ハマり過ぎて、Bugzillaにバグを起票してしまいました🦋

例えば、Calcでシートをデータベースとして、ダイアログ(フォームコントロール)をフロントエンドとするアプリを実装してみます。

新規で適当なodsファイルを作成します。

シートをデータベースとして使うので、適当なシート名と適当なデータを挿入します
一行目がヘッダ行です

 ツール > マクロ > マクロの管理 > Basic... を押下します

 マクロの起動先ツリーからosdファイルのStandardを選択して、管理ボタンを押下します
Basicマクロ管理画面が表示されるので、ダイアログタブを選択し、osdファイルのStandardを選択して、新規作成ボタンを押下します
新しいダイアログで、適当な名前を入力して、OKボタンを押下します

入力した名前のダイアログが作成され、ツリーに追加されます

ツリーを選択して、編集ボタンを押下します

LibreOffice Basic( IDE)が起動します

ダイアログにグリッド(テーブル)コントロールを追加します
何故かメニューのダイアログには無いので
ツールバーのテーブルコントロールを押下します

ドラッグアンドドロップで適当な大きさのテーブルコントロールを追加します

自動的に名前(GridControl1)が生成されます

ツール > マクロの管理 > Basic... を押下して、Basicマクロを表示します

ツリーのodsファイルのStandardを選択して、新規作成ボタンを押下します

新しいモジュールが表示されるので、適当な名前を入力して、OKボタンを押下します

モジュールが作成され、自動的にMainサブルーチンも生成されます

 Mainに以下のLibreOffice Basicを実装します

Sub Main
    'ライブラリをロードして、ダイアログを作成する お約束
    DialogLibraries.LoadLibrary( "Standard")
    Set oDialog = CreateUnoDialog( DialogLibraries.Standard.Dialog1)
    Dim GridControl1 As Object: Set GridControl1 = oDialog.getControl( "GridControl1")
    With ThisComponent.getSheets( ).getByName( "flowers")
        'ヘッダ行からカラム名を取得 列幅は50px
        col0 = GridControl1.Model.ColumnModel.createColumn()
        col0.Title = .getCellByPosition( 0, 0).String
        col0.MaxWidth = 50
        GridControl1.Model.ColumnModel.addColumn( col0)
        col1 = GridControl1.Model.ColumnModel.createColumn()
        col1.Title = .getCellByPosition( 1, 0).String
        col1.MaxWidth = 50
        GridControl1.Model.ColumnModel.addColumn( col1)
        col2 = GridControl1.Model.ColumnModel.createColumn()
        col2.Title = .getCellByPosition( 2, 0).String
        col2.MaxWidth = 50
        GridControl1.Model.ColumnModel.addColumn( col2)
       
        GridControl1.Model.GridDataModel.removeAllRows( )
        Dim i As Integer: i = 1
        Do While .getCellByPosition( 0, i).String <> ""
            'セルのデータを配列化してグリッドに行追加する
            GridControl1.Model.GridDataModel.addRow( 0, _
                Array( .getCellByPosition( 0, i).String, .getCellByPosition( 1, i).String, .getCellByPosition( 2, i).String))
            i = i + 1
        Loop
    End With
    oDialog.Execute()
End Sub
簡単に説明すると、シートのヘッダから列を生成して、データから行を追加してます。
GridControl1(のメンバのModel)にColumnModelとGridDataModelというメンバが有りまして、そこにaddColumnしたりaddRowしたりしなければならない為にこの様に実装します。
参考
UNO Grid Control
ColumnModelGridDataModel

 最後に、odsファイルを開いた際に、このMainを実行する様に設定します

Calcの ツール > マクロ > マクロの管理 > Basic... を押下します

実装したModule1のMainを選択して、割り当てボタンを押下します

カスタマイズが表示されるので、文書を開いた時を選択してマクロボタンを押下します

マクロセレクターが表示されるので、Module1のMainを選択して、OKボタンを押下します

 

マクロが割り当てられます

OKボタンを押下します

保存して、Calcを終了します。

odsファイルを開きます
設定によってセキュリティ警告が表示された場合は、マクロの有効化を押下します
グリッド(テーブル)コントロールにデータが表示されます

これを応用すれば、データを整理して表示する様なアプリに使えます。
非常に便利なんですが、ドキュメントが無かったので…載せておきます。

サンプルはこちらです グリッド.ods

試した環境はこちらです



2022年5月4日水曜日

Ubuntuでロジクールの無線マウスの使用について

 あまプロではパソコンにUbuntuを使っています。

先日、Ubuntuをアップグレードしたのですが、無線マウスが使えなくなってて、少し嵌ったんであメログ。

マウスはロジクールのM590です。クリック音がしないやつです。

私のパソコンはBluetoothがついてないので、USBの子機をつけて無線通信します。

Win/Macやと、USBを指すだけでドライバがインストールされ、直ぐ使える様になるらしいんですが、Linuxの場合はちょっと設定が要ります。

以前は使えてた筈なので記憶を辿りながら

 lsusb | grep Logitech
Bus 001 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver
うん、USBは認識されてるみたいね

sudo dmesg | grep Logitech
[  230.548381] usb 1-3: Manufacturer: Logitech
[  231.023507] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:046D:C52B.0001/input/input12
[  231.083834] hid-generic 0003:046D:C52B.0001: input,hidraw0: USB HID v1.11 Keyboard [Logitech USB Receiver] on usb-0000:00:14.0-3/input0
[  231.086533] input: Logitech USB Receiver Mouse as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.1/0003:046D:C52B.0002/input/input13
[  231.145750] input: Logitech USB Receiver Consumer Control as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.1/0003:046D:C52B.0002/input/input14
[  231.146636] input: Logitech USB Receiver System Control as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.1/0003:046D:C52B.0002/input/input15
[  231.150556] hid-generic 0003:046D:C52B.0002: input,hiddev0,hidraw1: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:00:14.0-3/input1
[  231.152184] hid-generic 0003:046D:C52B.0003: hiddev1,hidraw2: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:14.0-3/input2
[  231.383681] logitech-djreceiver 0003:046D:C52B.0003: hiddev0,hidraw0: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:14.0-3/input2
[  231.507071] input: Logitech Wireless Device PID:406b Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.2/0003:046D:C52B.0003/0003:046D:406B.0004/input/input17
[  231.508246] input: Logitech Wireless Device PID:406b Mouse as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.2/0003:046D:C52B.0003/0003:046D:406B.0004/input/input18
[  231.509199] hid-generic 0003:046D:406B.0004: input,hidraw1: USB HID v1.11 Keyboard [Logitech Wireless Device PID:406b] on usb-0000:00:14.0-3/input2:1
[  232.215712] input: Logitech M585/M590 as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.2/0003:046D:C52B.0003/0003:046D:406B.0004/input/input22
[  232.217873] logitech-hidpp-device 0003:046D:406B.0004: input,hidraw2: USB HID v1.11 Keyboard [Logitech M585/M590] on usb-0000:00:14.0-3/input2:1
[  394.013660] input: Logitech Wireless Mouse PID:406b as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.2/0003:046D:C52B.0003/0003:046D:406B.0005/input/input23
[  394.016039] logitech-hidpp-device 0003:046D:406B.0005: input,hidraw1: USB HID v1.11 Mouse [Logitech Wireless Mouse PID:406b] on usb-0000:00:14.0-3/input2:1
うん、エラーは出てへんね…

調べてみると、solaarという有志の方が作成したLogitechのアプリを入れなあかんそうな…。

昔はppaのリポジトリを追加せなあかんかったんですが、最近では以下のコマンドを実行するだけです。

$ sudo apt install solaar
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下のパッケージが新たにインストールされます:
  solaar
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 6 個。
237 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,219 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy/universe amd64 solaar all 1.1.1+dfsg-1 [237 kB]
237 kB を 0秒 で取得しました (477 kB/s)
パッケージを事前設定しています ...
以前に未選択のパッケージ solaar を選択しています。
(データベースを読み込んでいます ... 現在 195076 個のファイルとディレクトリがイン
ストールされています。)
.../solaar_1.1.1+dfsg-1_all.deb を展開する準備をしています ...
solaar (1.1.1+dfsg-1) を展開しています...
solaar (1.1.1+dfsg-1) を設定しています ...
desktop-file-utils (0.26-1ubuntu3) のトリガを処理しています ...
hicolor-icon-theme (0.17-2) のトリガを処理しています ...
gnome-menus (3.36.0-1ubuntu3) のトリガを処理しています ...
man-db (2.10.2-1) のトリガを処理しています ...
mailcap (3.70+nmu1ubuntu1) のトリガを処理しています ...

インストールが完了しましたら、アプリを起動します。

ちゃんと日本語表示されてます。
デバイスの追加を押下します

ペアリングが開始されます
上手くペアリングできへん時はマウスをオフ/オンします

ペアリングできました

マウスの情報が表示されます
ペアリング中は、Solaarのアイコン(右上)が変わる様です。

試した環境は以下の通りです。

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
$ uname -a
Linux Lenovo-G50-30 5.15.0-27-generic #28-Ubuntu SMP Thu Apr 14 04:55:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

Ubuntuのアップグレードについて

 あまプロでは教室用のパソコンのOSにUbuntuを使っています。

先日、アップグレードの通知が来たので、Ubuntuをアップグレードしました。

時間がかかるだけで、特に困った所も無かったんですが、久し振りにあメログ。

  1.  お知らせが届いたので、OKを押下します
  2. リリースノートが表示されるので、アップグレードを押下します
  3. アップグレードが開始されます
  4. 途中でサードパーティのリポジトリを使わないと表示されるので、閉じるを押下します

  5. アップグレードの準備を進めます
  6.  アップグレードの準備が完了すると、アップグレード開始の確認を求められますので、アップグレードの開始を押下します

  7. 途中でロック画面が無効になると表示されますので、閉じるを押下します
  8. アップグレードを進めます
  9. パッケージの取得が完了すると、アップグレードのインストールが開始されます

  10. サポートが中止されたパッケージ削除の確認が表示されますので、削除を押下します

  11. パッケージのインストールが完了すると、クリーンアップが開始されます

  12.  クリーンアップが完了すると、再起動の確認が表示されますので、再起動を押下します
  13. 再起動すると、無事にUbuntu22.04LTSが起動しました。
    所要時間は約三時間でした。HDDなんで、遅い方やと思います。
    壁紙とインターフェースが若干変わってますが、大きな違いはなさそうです。
    今の所、問題なく使えてます。

    あ、スクショの保存場所が ホーム/ピクチャ やったのが ホーム/ピクチャ/スクリーンショット に変わってました。