某CADビューワーでの不具合発生

某CADビューワーでファイルドラッグだと開くがダブルクリックだと開かないという状況が発生した。

>assoc .mdg
.mdg=MdrafWin.Document

>ftype MdrafWin.Document
MdrafWin.Document=C:\Program Files\Mutoh\M-Draf Viewer 2020\PROGRAM\MDVIEWER64.EXE /dde
となっていた。

マイナーソフトで情報が少ないので、とりあえず
>ftype MdrafWin.Document=C:\Program Files\Mutoh\M-Draf Viewer 2020\PROGRAM\MDVIEWER64.EXE %1
とした。

Kernel-Power41発生

ここ数日Kernel-Powerが発生。

起動すると数回に一度、スタートアップの途中でフリーズ。

指摘されることが多い電源関連の設定はすべて対策してあったし、CMOSバッテリーは数週間前に変更済み、ドライバー類もすべて最新だった。

ちょうどKernel-Powerが発生し始めた頃に降ってきたWindowsアップデートを削除してみると、ほとんど発生しなくなった。

エラーの中の1つにsvchost.exe_MapsBrokerとあるので、MapsBroker(Downloaded Maps Manager)を止めてみる。もう1つ起動タイミング的に怪しいSQLServerを止めてみることにする。

SSDの故障なども考えられるし、タイミングがランダムなので原因がはっきりしない。

TypeScript 初期設定

・node.jsをインストール

以下、Visual Studio Codeのターミナルで実行。

・インストール
npm install -g typescript

・利用方法

<script src=”script.js”></script>
のように指定し、
script.ts
という名前でファイルを作成し
tsc script.ts
とトランスパイルする。

・ウォッチ

監視したいフォルダに移動し、
tsc –init
を実行する。

tsconfig.json
が作成されたら、
Ctrl + Shift + B
でウォッチを指定する。

・フォーマット

Alt + Shift + F

ASP.NET Core + Entity Framework + SQLiteのはじめ方

・NuGet

EntityFrameworkCore.sqlite

・SQLite

ファイルを作成する。(DB Browser for SQLiteを利用)

テーブル名:Hello
カラム:ID int primary, Name text
として作成。

・サーバーエクスプローラ

SQLiteはサーバーエクスプローラ非対応だが、他のDBなら接続文字列はサーバーエクスプローラのプロパティから確認できる。

・モデルを作成する。今回はHelloクラス。

・スキャフォールディング実施

Controllersの上(そうしないとHelloesController.csが最上層でできる)
コンテキストメニュー>追加>新規スキャフォールディングアイテム>Entity Frameworkを使用したビューがあるMVCコントローラー

Controllersフォルダの中にHelloesController.cs
Views/Helloesフォルダの中に*.cshtmlができる。

・SQLiteに切り替え

Startup.cs>ConfigureServices()
の中で
options.UseSqlite (Configuration.GetConnectionString(“Default”)));
のように変更する。

appsettings.json
の中に以下を追加

“ConnectionStrings”: {
“Default”: “Data Source=db.sqlite”
}

ここのDefaultの文字は自由

上記の指定だとプロジェクトフォルダと同じ階層にDBファイルを設置する。

DB無し+スキャフォールディングを使わない場合

・Modelsフォルダの中にクラスを作成。

・Views/Hogeフォルダの中にcshtmlを作成。jsが必要ならsectionで追加。

・Controllersフォルダの中にクラスを作成。

Migrationを使う場合

・NuGet

EntityFrameworkCore.sqlite
EntityFrameworkCore.Tools

・モデル作る(Modelsの中)

・コンテキスト作る(Dataの中)

・Startup

using Microsoft.EntityFrameworkCore;

追加する。

・Startup.cs>ConfigureServices

services.AddDbContext<Data.TestContext>(options =>
options.UseSqlite(Configuration.GetConnectionString(“DefaultConnection”)));

追加する。

・appsettings.json

“ConnectionStrings”: {
“DefaultConnection”: “Filename=./sample.db”
},

追加する。

・パッケージマネージャコンソール

PM> Add-Migration Ini
(Iniはクラス名になる)

Migrations>日付_InitialModels.cs
が作成される。

PM> Update-Database

DB更新の場合、Iniの部分に変更内容。

EmEditorを使う理由+外部ツールメモ

テキストエディタは有料のソフトを使わなくても、無料で高機能なソフトが多数存在しているのに、どうしてわざわざEmEditorを使っているのか少し説明したいと思います。

・指定パスをルートにしたエクスプローラの表示
・指定記号によるアウトラインの表示
・インクリメンタルサーチ(正規表現)の強調表示

この3つがEmEditorを使い続ける理由です。今まで色々試してみてどれか一つなら対応しているソフトもあったように思いますが、3つとも対応しているソフトはありませんでした。

左側にはメモ用のテキストファイルが入ったフォルダをルートにしてエクスプローラを表示させてあります。そうすることで頻繁に使うテキストファイルを即座に開くことができます。

右側には「●」を1段目「・・」を2段目として設定したアウトラインを表示させてあります。自分で管理しやすい記号を設定することができます。

3つの中でも絶対に外せないのが検索の機能です。

検索ボックスの検索文字列(正規表現)が変化すると、都度グリーンの強調表示(検索にマッチした部分)が変化していきます。強調表示はそのまま置換することも削除することもできます。

検索を実行したら検索文字列(正規表現)にマッチした部分が強調表示されることは珍しくないのですが、EmEditorはインクリメンタルサーチで強調されます。

私がデータの加工や分析をしなければならないとき(中小企業でのことなので数千や多くても数万程度のデータですが)、エクセルシートの機能、VBA、SQLなどと一緒にEmEditorの正規表現の置換も使っており、無くてはならないソフトです。

外部ツールの登録

これは自分用のメモです

ツール>外部ツール>外部ツールの設定>新規作成にて
タイトル:cmd
コマンド:C:\Windows\System32\cmd.exe
初期ディレクトリ:$(Dir)
アイコンパス:C:\Windows\System32\cmd.exe

このような感じで登録できる。

 

C# ショートコードプログラミング・Effective C#

C# ショートコードプログラミングをサラっと読んでみて気になった部分のみメモしておく。

・使っていない引数を削除する。

・少ない利用ならusing宣言を削除する。

・不要な改行を削除し1行にまとめる。

・メソッドを式化する。

・オーバーロードを引数のデフォルト値で置き換える。

・TryParseと三項演算子
int.TryParse(“a”, out int result) ? result : 99)

・null合体演算子を複数使う。
a ?? b ?? c ?? d

・null合体演算子
左辺がnullでない場合は左辺を返す。
左辺がnullである場合は右辺を返す。
??

・null条件演算子
左辺がnullである場合はnullを返す。
左辺がnullでない場合は右辺を評価する。
?.
?[]

・null合体演算子と条件演算子
string n = user?.Name ?? “名無し”

・型判定と型変換を同時に行う。パターンマッチング。
キャストが可能か判断し可能なら右辺の変数に代入される。
if(x is int y){}
switch(x) {case int i}

・配列の縮小・拡大
Where().ToArray()
Concat().ToArray()
Append().ToArray()
Prepend().ToArray()

・コレクションの間に挿入
x.Take().Append().Concat(x.Skip())

・例外フィルタ
try{} catch() when(){}

・名前が必要ない型はタプル

・string.Formatから文字列補完式
$”{}”

Effective C#の第一章(C#言語イディオム)を読んで一言。

・ローカル変数でvarを利用

・constよりreadonlyを利用

・キャストは()よりisかasを利用

・string.Format()より補完文字列を利用

・シンボルの文字列リテラルはnameofで取得

・クラス間のやりとりにデリゲートを利用

・null条件演算子を利用

・ボックス化、ボックス化解除を避ける。値型>参照型(ボックス化)

・継承したメソッドを再定義しない

C# Linqメモ

定番なものだけ

 

LINE WORKSインストール

有料版と無料版で同じプログラムなのか不明だが、手抜きなのか?と思うほど不安定。直近でPC数台にインストールして発生した問題。

・連絡先から新規トーク送信時(トークルーム作成時)によく落ちる。ほんと頻繁に落ちる。クラッシュレポートを呼んでストンと落ちて固まったりしないからいいんだけど。

・連絡先から新規トーク送信時に出てくる新しいウィンドウと本体のウィンドウのサイズが違う。まぁ、サイズの違いはいいとしても…本体をデスクトップの下側に置いておくと新しいウィンドウがデスクトップからはみ出る。新しいウィンドウが画面からはみ出るのはどうかと。

・インストール完了後、起動しない。エラーレポートを見るとig75icd32.dllが原因と出てるので、Intelグラフィックドライバーをメーカーサイトから落として更新すると起動できた。この程度軽量のアプリでドライバーの影響で落ちるのはどうなんだろう。

・インストール時にパスを選べるがアンインストールは選んだパスでアンインストールの処理をしないっぽい。それにインストールのパスを変えると、全ての文字が化けて動作がおかしくなる。

最後の2つはライブラリの影響かと思うけど、ビジネスユースでこのクオリティは酷い。導入実績がすごい数あるけど、絶対問題出ているだろうと思う。

・追記(数カ月後)

PC版の更新が来て、落ちることはほぼなくなった。

iOS/Androidスマホ、Androidタブレットにも数台インストールしてみた。

・スマホは特に大きな問題は発生していない。

・Androidタブレットは酷い。トークが届くまで遅い。忘れたころに届く。最悪届かない…こりゃ酷い。

・同じアカウントの、PC、スマホ、タブレットのトークがしっかり同期しない。アプリで更新のボタンをおしたり、端末を再起動しても同期しない。

何というか、全体的に不安定。同期しないとか届かないとか。導入実績がすごい数あるんだから、絶対クオリティについて把握してると思うんだけど、まぁアプリのコメントを読んでみると問題がないという評価は多いけど、一定数通知が出ないとか不安定という評価があるし、現時点でも放置ということは対応するつもりがないんだろうな。

現状オススメできないかな。こういうサービスは一度導入すると他への移行も大変だし止めたほうがいい。

・追記(一年近く使って)

PCは安定しているが、どうもAndroidのタブレットはダメっぽい。届くのが遅いというの部分は、結局解決しなかった。

数台のPC(スマホやタブレットの利用はなし)で実際の業務に利用していて、利用者からはわりと好評。ビジネス向けのチャットサービスはいくつかあるけどUIが慣れたLINEというのがいいのだろう。

情シスがない規模の中小企業で、まだメールがメインって状況なら入れてもいいかもしれない。

通常のLINEと同じようなUIなのでPCに詳しくない人でも使いやすい。

MariaDB(Arch Linux on VirtualBox)

・先ずソースから挑戦

入ってなければ
pacman -S cmake
pacman -S ncurses

ソースをダウロードして解凍
tar zxvf mariadb-10.3.12.tar.gz
cd mariadb-10.3.12

cmake . -DCMAKE_INSTALL_PREFIX=/root/share/mariadb -DCMAKE_PREFIX_PATH=/var/lib/pacman/local/ncurses-6.1-6/ -DPLUGIN_TOKUDB=NO

(.はソースディレクトリでCMakeLists.txtが必要)
(DCMAKE_INSTALL_PREFIXはmake installしたときの配置先)

make -j 1
make -j install

パッと調べるとこんな感じのようだかエラーが出るので要調査。

・パッケージにて

pacman -S mariadb
mysql_install_db –user=mysql –basedir=/usr –datadir=/var/lib/mysql

カーネルのコンパイル(Arch Linux on VirtualBox)

・カーネルバージョン確認

uname -r

・カーネルソース保存

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.99.tar.gz

・シンボリックリンク

ln -s linux-4.9.99 linux

・コンフィグ作成

make clean && make mrproper
今までconfigで設定した内容の消去を行う。初期化。

Archのデフォルト設定を利用する場合。
zcat /proc/config.gz > .config

あるいは、

make localmodconfig
ゲストOS内で現在ロードされているカーネルモジュール情報から
カーネルに読みこまれていないmoduleを無効にした設定をおこなう。

・その他コンフィグ

必要な場合。

make oldconfig
今あるconfig使って、新しい設定だけを問い合わせてくるというものがある。

make config
対話型のコンフィギュレータ

make menuconfig
メニューベースのコンフィギュレータ

make xconfig
Xベースのコンフィギュレータ

・コンパイル

make

今回はbcが無いとエラーがでた。

pacman -S bc

makeは時間がかかる。

・カーネルモジュールのコンパイル

make modules_install

以下にコピーされる。

/lib/modules/xxx

・bootディレクトリにカーネルをコピー

名前の前にvmlinuz-をつけるのは必須。
cp -v /usr/src/linux-4.9.99/arch/x86_64/boot/bzImage /boot/vmlinuz-linux49

・initramfs生成

mkinitcpioを利用。

mkinitcpio -k 4.9.99 -g /boot/initramfs-linux49.img

/lib/modules/xxxのソースディレクトリ名を使う。

・ブートローダーの設定

/boot/grub/grub.cfg

linux /vmlinuz-linux …
initrd /initramfs-linux.img
この部分を変更。

これで完了。

・カーネルモジュール

一覧
lsmod

内容確認
modinfo

ロード
insmod

アンロード
rmmod

ロード・アンロードの依存関係を自分で処理。
(lsmodのUsed byにて分かる)

依存関係を自動で処理する場合のロード・アンロード
modprobe xxx
modprobe -r xxx