ブログ

割とコンピュータよりの情報をお届けします。

2023年6月

.NET 6.0 WPFアプリにCefSharpをつけてWebブラウザ化

WebViewが古すぎた時代にWebView2が登場するまでの間、Webブラウザコントールを組み込むのに非常に役に立ったCefSharpだが、最近使用していなかった。
今一度見直すと、導入が楽になるように進化していた。

試しに.NET 6.0のWPFアプリケーションで使ってみた。

まず、Visual Studio 2022でWPF アプリケーションを新規に作る。.NET Frameworkではなく.NETの方である。
nugetパッケージ CefSharp.Wpf.NETCoreをインストールする。
xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"を追加
<wpf:ChromiumWebBrowser x:Name="Browser" Address="www.google.com"/>
を突っ込むだけ。
これだけ…
Quick Startにはいろいろなことが書いているけどAnyCPU対応も特に気にしなくてよいのかな。前に、AnyCPU対応するときに苦労していたのに比べるとCefSharp.Wpf.NETCoreパッケージは比較的スムーズに適用できる。

≫ 続きを読む

2023/06/24 コンピュータ   TakeMe
タグ:WPF

Ubuntu 20.04でのSambaの設定方法を忘れていた

久しくファイル共有サービスのSambaを使っていなかったため、使い方を忘れてしまった。

今一度再確認した。
もう5年近く使用していない。

sudo apt install samba
sudo smbpasswd -a takeme
sudo systemctl restart smbd.service

/etc/samba/smb.configの内容を編集して
sudo systemctl restart smbd.service
を実行する。

[homes]
   comment = Home Directories
   browseable = no
;   browseable = yes

# By default, the home directories are exported read-only. Change the
# next parameter to 'no' if you want to be able to write to them.
;   read only = yes
   read only = no

# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
;   create mask = 0700
   create mask = 0775

# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.
;   directory mask = 0700
   directory mask = 0700

# By default, \\server\username shares can be connected to by anyone
# with access to the samba server.
# Un-comment the following parameter to make sure that only "username"
# can connect to \\server\username
# This might need tweaking when using external authentication schemes
   valid users = %S

などなど

≫ 続きを読む

2023/06/22 コンピュータ   TakeMe

オープンソースのロータダイナミクス解析支援ROSS

ROSSを使うと、参考書片手に手間をかけて計算していた回転体の危険速度の計算などをほぼ実装されたまま利用させていただくことができる。

今まで、GNU OctaveやPythonでプログラムを作って行列計算などをしていたが、ROSSなるものが無料で配布されている
ただし参考ページ【ターボ機械シリーズ④】 オープンソースローターダイナミクス解析ソフトROSS)がページ内で参照しているTurboToolsのチュートリアルはross-rotordynamicsのVersion 1.0.0、Numpy 1.2.0以下用になっていてそのまま実行できない。
Numpyの方は軽微な修正でnumpy.complexがなくなったというものなので、complexに置き換えるだけでよい。結構有名なパッケージの仕様変更なので有名である。
ただし、ross-rotordynamicsの方は有名パッケージではないのでversion 1.0.1にバージョン指定をしてインストールした方が良い。GitHubの変更履歴を追ってみると、この後のバージョンで.kxx.plot()の定義がなくなる。

pip install ross-rotordynamics==1.0.1

もしかすると、使用する描画機能にplotlyの出力を抑制するように変化が起こっているかもしれない。
インストールしたrossの中で、numpy.complexを使用している部分を順次complexに置き換えていく作業が必要である。(結構面倒)チュートリアルに頼らないのであれば、このバージョン指定インストールは不要である。ただ、一回参考ページに従ってみたい場合には上のようにしないといけない。

≫ 続きを読む

2023/06/21 コンピュータ   TakeMe
タグ:Python

Pythonでsscanfのようなものはないか

「Python sscanf相当」で検索していると「ない」と検索されることが多いけど、parseライブラリにあるような気がする。

PythonにC言語のsscanf相当のものはないのかということを検索していると、「splitで代用する」ようなものが検索喧嘩の先頭にきていやだ。
標準では厳しいが、parseライブラリにこの辺りの処理の対応がある。
例えば次のような例で使える。

import parse
import numpy as np

if __name__ == '__main__':
    test_string = '2023-06-19T01:20:10.010';
    parsed = parse.parse('{}-{}-{}T{}:{}:{}', '2023-06-19T01:20:10.010');
    
    print(parsed);
    
    parsed = np.array(list(parsed), dtype=float);
    print(parsed);

≫ 続きを読む

2023/06/21 コンピュータ   TakeMe
タグ:Python

Pythonで3次元プロット と回転 matplotlib 3.7.1

matplotlibの2くらいから「パースペクティブ」の解除は一語に代わっていた。

matplotlibでパースペクティブの解除について、昔は少しコードを書かないといけなかった。
がそれは今は昔の話で、ax.set_proj_type('ortho');で一発となっていた。
まえに記事を書いてから5年近くたっているから当然かな。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


def rotX(X):
    theta = X / 180.0 * np.pi;
    Rx = np.array([[1,0,0,0],
                   [0,np.cos(theta),np.sin(theta),0],
                   [0,-np.sin(theta),np.cos(theta),0],
                   [0,0,0,1]]);
    return Rx;

def rotY(Y):
    theta = Y / 180.0 * np.pi;
    Ry = np.array([[np.cos(theta),0,-np.sin(theta),0],
                   [0,1,0,0],
                   [np.sin(theta),0,np.cos(theta),0],
                   [0,0,0,1]]);
    return Ry;

def rotZ(Z):
    theta = Z / 180.0 * np.pi;
    Rz = np.array([[np.cos(theta),np.sin(theta),0,0],
                   [-np.sin(theta),np.cos(theta),0,0],
                   [0,0,1,0],
                   [0,0,0,1]]);
    return Rz;

def trans(x):
    Tr = np.array([[1,0,0,x[0]],
                   [0,1,0,x[1]],
                   [0,0,1,x[2]],
                   [0,0,0,1]]);
    return Tr;

def main():

    r = 50.0;
    theta = np.arange(0.0, 360.0, 30.0);
    x = np.array([]);
    y = np.array([]);
    z = np.array([]);

    for i in range(10):
        x_ = r * np.cos(theta / 180.0 * np.pi);
        y_ = r * np.sin(theta / 180.0 * np.pi);
        z_ = 10.0 * i * np.ones(x_.shape[0]);
        
        x = np.append(x, x_);
        y = np.append(y, y_);
        z = np.append(z, z_);
    
    X = np.array([x, y, z, np.ones(x.shape[0])]);
    X = np.dot(rotX(45.0), X);
    X = np.dot(rotY(45.0), X);
    X = np.dot(rotZ(10.0), X);
    X = np.dot(trans([10, 10, -10]), X);
    
    fig = plt.figure()
    ax = fig.add_subplot(projection='3d')
    ax.set_proj_type('ortho');
    ax.scatter3D(X[0], X[1], X[2]);
    ax.set_aspect('equal')
    plt.grid()
    plt.savefig('plot201803.svg');
    plt.show();

if __name__ == '__main__':
    main()
    

しかも、バックエンドとしてWebAggを使用するとWebブラウザから3D図をグリグリ操作できる(tornadoパッケージも必要)。私はWebView2と組み合わせて.NETアプリとPythonアプリの組み合わせで使ってみようかと思っています。
(バックエンドをWebAggに切り替えただけでは、show()のところでWebブラウザが起動してしまうところが問題だがほかのアプリへの組み込み方があるらしい)

if __name__ == '__main__':
    plt.rcParams['webagg.open_in_browser'] = False;
    plt.rcParams['webagg.address'] = '0.0.0.0';
    plt.switch_backend('WebAgg');
    main()
    

≫ 続きを読む

2023/06/19 コンピュータ   TakeMe
タグ:Python

Ubuntu 22.04にMondo Rescueをインストール

Ubuntu 22.04にMondo Rescueをインストールしてみた。22.04用のレポジトリは使えない。20.04用のレポジトリをそのまま流用する。

基本的には、前の記事の通りなのでこちらを確認された方が良い。Ubuntu 22.04であってもUbuntu 20.04用レポジトリを使うことにする。mindi.confの設定内容を変更する必要がある。

http://www.mondorescue.org/ftp/ubuntu/20.04/mondorescue.pubkeyを/etc/apt/keyrings/mondorescue-key.ascにダウンロードして
/etc/apt/sources.list.d/mondorescue.sources.listを作成する。

sudo curl -fsSL http://www.mondorescue.org/ftp/ubuntu/20.04/mondorescue.pubkey -o /etc/apt/keyrings/mondorescue-key.asc

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/mondorescue-key.asc] http://www.mondorescue.org/ftp/ubuntu 20.04 contrib" | sudo tee /etc/apt/sources.list.d/mondorescue.sources.list > /dev/null
echo "deb-src [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/mondorescue-key.asc] http://www.mondorescue.org/ftp/ubuntu 20.04 contrib" | sudo tee -a /etc/apt/sources.list.d/mondorescue.sources.list > /dev/null
echo -e "\n" | sudo tee -a /etc/apt/sources.list.d/mondorescue.sources.list > /dev/null

さて以下の内容を実行してみる

sudo apt update
sudo apt install mondo
sudo apt install isolinux
sudo apt install xorriso

さらに、
sudo vim /etc/mindi/mindi.conf
として

EXTRA_SPACE=1524000
BOOT_SIZE=307200

BIOSレガシー起動のものであればこうだが、EXTRA_SPACEは20.04よりかなり大きくしないと使えなくなった。あまり大きくしすぎても失敗する。まだリストアに成功していないけど

sudo mondoarchive

を実行してみて。…

(2023.06.11 追記 apt-keyは廃止予定になっていたようで記述を変更しました)

UFEI環境では

sudo apt install syslinux-efi

を実行してさらに/usr/sbin/mindiの../libutil.c32のある行を編集する必要がある。

≫ 続きを読む

2023/06/10 コンピュータ   TakeMe

ConoHa VPS 512MBプランではUbuntu 22.04以降はサポートしない

最近話題(もう一年程前から)だが、ConohaやさくらVPSの512MBではUbuntu 22.04が起動しない。

Conoha でVPSをいくつか契約しているUbuntu 20.04である。
そろそろ来年以降どうしていくかを検討中である。
512 MBではUbuntu 22.04以降が起動しない。
あと1年待つと移行用のプランが用意されるのかそれとも今のうちに動き出すべきか。512MBプランの新規受付に制限がつけられていくのか。kernel-panicになっているため、swapを使っていても関係なく起動に失敗する。
今のところConoHaではイメージ保存でイメージを保存しておいて1GBプランに移すことができる。

≫ 続きを読む

2023/06/09 コンピュータ   TakeMe

Ubuntuのtarコマンドは除外の扱いが変わったのか?

古い記事を参考にtarコマンドを使用していたら除外がうまくいかないなど不都合に遭遇した。

古い記事を参考にTarコマンドの引数を扱ってはいけない。

えらい目にあった。
何ら新しいことはないだろうと思っていたtarコマンドでさえ仕様変更が起こっている。思ったように除外が効かなかった。
おおむねの作業の流れは非常にありがたい。


dir /home/takeme/backup
cd /
tar cvpzf "/home/takeme/backup/backup.tar.gz" --exclude="/proc" --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/home/takeme/backup /

今回は思ったところに除外が効いた。(ように見える)

≫ 続きを読む

2023/06/07 コンピュータ   TakeMe

PyScriptはすぐに使えるのか?

CMSと組み合わせてもPyScriptはすぐに使えるのか非常に疑問だった。
一応バージョン番号付けが1未満になっている意図は察しつつ…。

デモのhello worldを張り付けてみたら以下のようになる。最初はpyscriptのライブラリを見込む必要がある。結構ロードするファイルサイズがでかいことが分かったので公開を中止した。
改めてspimle clockの方をインラインフレームで作り直した。

意図通りにはならない。

HTMLではコード中の改行を気にしない仕組みだからでないかと思われる。それ用に作られているCMSのエディタでは改行を気にしない。Pythonは改行とインデントを気にする。(違うのかな)
少し検討が必要かもしれないが、サンプルではMatplotlibの使用例を含んでおり、データをお客に見せるときにこれでよいのであれば使えるかもしれない。
念のため確認だが、依然としてChrome系統のブラウザで動作確認をして活発に更新されているのでわずかな変化で動作に問題が生じる可能性がある。
デモページの3d表示のサンプルも直前まで動いていたような気がしたが、今日は動いていない

≫ 続きを読む

2023/06/06 コンピュータ   TakeMe
タグ:Python

Bodhi LinuxでAvalonia UIアプリの使用

最近 .NET 7.0 GUIアプリケーションがWindowsで開発できるようになってきている。割と便利だ。

GUIアプリケーションの作成にxamlを使用していると、最初は大変だったが慣れてくると割と便利だ。.NET Framework 4.5程度のときはMVVMの対応に割と時間がかかってイベントハンドラを記述するなんてやっていたが、最近はMVVMの対応が楽になった。
そして.NET MAUIやAvalonia UIやUno Platformはそれをマルチプラットフォームに拡張する。
例えば、Avaloinia UIのアプリケーションをUbuntu 20.04で実行してみた。

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install aspcorenet-runtime-7.0
LC_ALL=C dotnet AvaloniaApplication1.Desktop.dll

LC_ALL=Cが大事みたい。

ただ、.NET Framework 4.x世代の安定した互換性に比べて.NET 5.0 .NET 6.0 .NET 7.0の機能の追加・廃止の速さは少し怖い
(.NET Framework 4.xもWindows 7 の最後における.NET Framework 4.8のシステム破壊(WPFアプリがクラッシュする問題)はあったが)

≫ 続きを読む

2023/06/05 コンピュータ   TakeMe