布団が俺を呼んでいる

丘山大一のぶろぐ

ブログの移行のご案内

長らくご愛顧いただきました当ブログですが、この度移行することにいたしました。

移行先



なぜ移行するのか

このブログ、BlogEngine.NETを使っていたのですが、正直使いにくいところがありました。
ただ個人的な要件があり、それらを満たすものがコレくらいしか見つからなかったということもあり、なんだかんだ だましだまし使ってまいりました。
ですがさすがに限界が来ており、この度Github pagesを利用したブログを開設することにしました。

専用のブログサービスを使わず、Github pagesを使う理由ですが「手元のソースをプッシュして公開する」という形にしたかったからです。
ブログサービスに乗せてしまうと、どうしても記事や構成がサービスに依存してしまい、再度移行したいときに不便そうなのと、サービスの方針に振り回されてしまうのが怖いので、それを避けたいという理由があります。
まあそれはGithub pages を使っても同様なのですが、影響は最小限ですむかなーと考えております。


このブログの今後について

削除する予定は当面ありません。
というより、記事を出力できなかったので移行できない=>削除もできない の流れです。
がっでーむ。
時間が経てば考慮しますが、すくなくとも一年やそこらで削除するつもりはありません。


別ブログで、ということになりますが、今後ともよろしくお願いいたします。

PowerShell ディスクサイズの使用状態をログで吐き出したい

自分メモ。
ディスクサイズの使用状態を日時のログで吐き出す。
実際使う時はタスクスケジューラあたりで呼び出す。

Get-PSDrive -Name C | Select-Object @{Name='datetime'; Expression={Get-Date -Format('yyyy/MM/dd')} } , Used, Free | ConvertTo-Csv -NoTypeInformation |Select-Object -Skip 1 |Out-File -FilePath 'Drive_C.txt' -Append

もっと簡単なやり方があったはずだが、「Windows Server 2008R2で動く」という本来あってはならない要件があり、試行錯誤してた結果こんなんを書いていた。


SSMSで既定の言語を表示した結果とSQLで表示した時に結果が違うことがある

SSMSの表示が正しくないとき(時々あるよね)案件。


問題

SSMSでログインのプロパティを覗いていたら、既定の言語が「Arabic」になっているものがあった。


Arabicかー、珍しいなー、と思ったが引っかかったのでSQLを投げて確認。

select name, default_language_name from sys.server_principals


う~ん、ひとつだけ浮いている方がいますね。
一人だけ素のenglish。ハイ、これがArabicだったログインです。

そしてログインを作っているSQLの中身を見てみたら既定のデータベースを「english」で指定していました。
多分us_englishで指定すべきところをenglishで指定した結果、ログインは作成されたけど言語の一覧にないのでプロパティ画面のコンボボックスがセット処理が正しく走らず、一番上の「Arabic」になったと思われます。
https://docs.microsoft.com/ja-jp/sql/relational-databases/system-compatibility-views/sys-syslanguages-transact-sql?view=sql-server-ver15
※記事投稿時点ではリンク先の表示が崩れてます

ちなみに、他のログインは既定の言語を指定しなかったのでデータベースの規定値を引っ張ってきて正しく設定された模様。


似たようなバグもあったけど

最初、コレかな?と思ったSSMSのバグもあったけどタブン違う。
* https://docs.microsoft.com/ja-jp/sql/ssms/release-notes-ssms?view=sql-server-ver15
* https://feedback.azure.com/forums/908035/suggestions/38236363


教訓

経験上、既定のデータベースの表示がおかしくなることもあるよ!
SSMSは便利だけど、疑問解消・原因調査の際はSQLで!

VBAのプロシージャ呼び出しの括弧のまとめ

VBAでプロシージャ呼び出しの際、引数に括弧をつけるのかつけないのか・つけたらどうなるのかが異様に分かりづらかったので真面目に調べました。
というか自分の整理のためにまとめました。
参考にさせて頂いたのは 布団が俺を呼んでいる | Firebird のお勉強 FSQLの使い方

布団が俺を呼んでいる

丘山大一のぶろぐ

Firebird のお勉強 FSQLの使い方

前回はISQL で、今回はFSQL の使い方。

FSQLって?

こちらで公開されている、ISQLの亜種みたいなツールです。
バグが解消されていたり、機能強化があるらしいです。

CSVインポート

CSV読込ってできないのかなー、と探していたらFSQLを見つけました。
というわけで、FSQL上でのCSV読込の構文をば。
IMPORT CSV FILE 'C:\FB\data.csv' 'INSERT INTO TABLE1(KEYNO,NAME) VALUES(?,?)';
これだけで、CSVファイルの中身を突っ込んでくれます。こりゃ便利。


ISQL にもバルクインサートがあります。
構文はこんなん。
SQL>SET BULK_INSERT INTO TABLE1 VALUES(?,?);
BULK>(1,'aa');
BULK>(2,'bb');
BULK>(3,'cc');
BULK>
こんな感じで使うらしいんですが、自分で操作していた時は思うように使えなかったのでちょっと保留中。

そしていまだに↓を買っていない。買えばいいのに、自分。


Firebird 徹底入門

新品価格
¥4,104から
(2016/7/14 23:43時点)

コメントを書く

PowerShell 二行を一行にまとめる

自分メモ。
うまく言えないんですが、
aaa
bbb
ccc
ddd
というテキストを
aaa bbb
ccc ddd
に変換してファイル出力する感じ。


こんなん

$originalFilePath="hogehoge.txt"
$filePath = "fugafuga.txt"
[int]$count=0
Get-Content $originalFilePath | ForEach-Object {
  $count+=1
  If($count % 2 -eq 0){
    Write-Output($_) | Out-File -FilePath $filePath -Append -Encoding utf8
  }else{
    Write-Output($_ + "`t") | Out-File -FilePath $filePath -Append -NoNewline -Encoding utf8
  }
}

管理者ユーザなのにexeファイルのファイル操作できなくなる現象

exeファイルのプロパティのセキュリティにアクセスできなくなる現象とも。
実害が出るレベルではまりました。


現象

ファイルを削除しようとすると、
「このファイルを削除するには管理者の権限が必要です」→「続行」→
「この操作を実行するアクセス許可が必要です」→「再試行」→
以降ループするので「キャンセル」せざるをえなくなる

リネームしようとすると、
「このファイルの名前を変更するには管理者の権限が必要です」→「続行」→
「この操作を実行するアクセス許可が必要です」→「再試行」→
以降ループするので「キャンセル」せざるをえなくなる

実行しようとすると、
「指定されたデバイス、パス、またはファイルにアクセスできません。これらの項目にアクセスするための適切なアクセス許可がない可能性があります」
で、メッセージ内容から「セキュリティが変なのか……」と考えファイルのプロパティからセキュリティを
開くと、たしかに権限がふられていない。ファイルの所有者の所有者も見えない。
しかし、権限をふろうとしても権限をふれない。

どういうこっちゃねん。


原因

他のユーザがexeファイルをロードしている状態で、さらに別ユーザがexeファイルを削除していたため。


原因詳細

エクセルファイルなんかで「別のプログラムがファイルを開いているので操作を完了できません」を見ることがあった人も
多いと思いますが、その複雑版です。共有フォルダに配置した、複数のユーザがたたくexeファイルで起きました。
登場人物は下記。

  • Aユーザ:exeファイルを実行していた人
  • Bユーザ:exeファイルを先に削除した人
  • Cユーザ:管理者であり、exeファイルを削除したい人

Aユーザは、Cユーザのマシン内の共有フォルダに入ったexeファイルを実行しています。起動後なので、exeはロードが終わった状態です。
続いて Bユーザは、そのexeファイルを削除します。Aがexe実行中でもファイル削除できます(Bのエクスプローラからは消える)
最後にCユーザが共有フォルダに入ったexeファイルを削除を実施しますが上記「現象」にはまり何もできなくなります。
Cマシン内の共有フォルダにあるexeは、Bによって削除された亡霊みたいな状態。


対応

exeにアクセスしている人を強制的に全部切断すれば解消されます。
というか先に切断しておきましょう。


泣き言

これWindowsのバグでは、という気がしなくもない。けど何かしら事情があってこうなっている気もする。