放浪猫

主にガジェットとかの雑記

Image magick で複数の画像ファイルを一括リサイズする

AI学習ファイルのファイルサイズを拡大したり揃えたいときに、

一括でリサイズする方法があるので備忘録として書き留めます。

 

1. Image magickをインストールする

imagemagick.org

 

2. 画像があるフォルダでコマンドプロンプト起動

 

3. 以下のコマンドを実行。

(例:.jpgファイルを重心を中心に512x512にリサイズする)

magick mogrify -gravity center -resize 512x512 -extent 512x512 *.jpg

 

以上です。

 

【追記】

縦横比の異なる大きな画像は余白を白で埋めて512x512に縮小されます。サイズが既定未満の画像は拡大されます。

機械学習目的であれば、画素が粗くなるのはできるだけ避けた方がいいため、トリミング(crop)や手動での調整も検討してください。

mogrifyコマンドのオプションについては下記サイトの説明が分かりやすいです。(ブラウザで翻訳して読んでね)

ImageMagick Image Transforming Utility (tohoku.ac.jp)

Windowsでアプリケーションが突然死した時にエラーログやダンプファイルを取得する方法


動かしていた.exeが突然死したよ、なんで?
そんな時にログとかダンプファイルとか欲しくなるよね?え?ならない?
今回はそんな状況別に応じて少し知見を書き溜める。

 

 

■そもそもダンプってなに

Windowsには、プロセスのクラッシュ発生時のメモリの状態をダンプファイル (.dmp)として自動保存できる機能がある。
ダンプを取得・解析することでプロセスが実行していた処理などの詳細を確認でき、
クラッシュの原因調査を行うことができる。
デフォルトでは無効になっている機能のため、レジストリを変更し、有効化する必要がある。


■「アプリケーションは応答していません」ポップアップが出たまま画面が固まっている時

 ラッキーだ。プロセスを終了する前に、
 タスクマネージャのプロセス一覧から選択して右クリックすれば「ダンプファイルを作成」ができる。
 出力先を指定して(.dmp)を取得する。


■突然死してタスクマネージャにプロセスがいない

 ログとダンプファイルを採取しよう。

 

① EventLog(.evtx) と Windows Error Reporting(.wer)の採取

 プロセスクラッシュ発生時には、アプリケーションのイベントログに、
 レベル:エラー、ソース:Application Error、イベントID:1000 でイベントが記録される。

 1.Windowsキー + Rキー から eventvwr でレジストリエディタ起動する。
 2.画面左メニューの[Windowsログ] - [Application] からエラーを探す。
 3.エラーを右クリックして .evtx ファイルとして保存する。
 4.ダンプファイル出力が設定されていれば、
   エラーの次のイベントに、Windows Error Reporting(.wer)の出力先パスが一緒に出ている。パスを参照して取得する。


② ダンプファイル(.dmp)の採取 - ダンプが出ている時

  %LOCALAPPDATA%\CrashDumps にある。
 ※C:\Users\{ユーザ名}\AppData\Local\CrashDumps
  環境によってパスが異なる。後述④のレジストリパスを確認しよう。

 

③ ダンプファイル(.dmp)の採取 - ダンプが出ていなくて手元で再現できる時

 管理者でコマンドプロンプト実行。

 gflags でページヒープを有効にして、アプリケーションを動作させてクラッシュさせるとDumpがでる。(例:Application.exe)
 C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
 gflags.exe /p /enable Application.exe /full 

 ※問題が解決したら以下のコマンドで無効化するのを忘れないようにしよう
  gflags.exe /p /disable Application.exe


④ ダンプファイル(.dmp)の採取 - ダンプが出ていなくて手元で再現できない時

 ぶっちゃけどうしようもない。
 ダンプファイルを出力するように設定して再現報告を待とう。
 これはレジストリで機能を有効化する。

 1.Windowsキー + Rキー から regedit でレジストリエディタ起動する。

 2.「 コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting 」
   を右クリックして [新規] - [キー] から LocalDumps を作成する。

 3.LocalDumps を右クリック - [新規] - [展開可能な文字列値] を選択し、[DumpFolder] の値を作成する。
   値のデータをダンプファイル保存先のパスに設定する。
   ※アプリケーションによってはDumpFolderが登録されているものもある

 4.LocalDumps を右クリックして [新規] - [DWORD] を選択、[DumpType] を作成し、値を [2] に修正する。
   ※2 はフルダンプを意味する。

 5. LocalDumps を右クリックして [新規] - [DWORD] を選択、[DumpCount] を作成し、値を [10] に修正する。
   ※保存するダンプファイルの最大数。

上記の設定により、クラッシュが発生した場合、指定したパスにダンプファイルが生成されるようになる。
なお、本設定後の再起動は不要である。なお、作成したレジストリを削除することで、出力設定も解除できる。

Windows Explorerで使用できるコマンド

Windows Explorerのアドレスバー、便利ですよね。
適当なパスで「cmd」入れて叩けばそのフォルダでコマンドプロンプトを起動してくれますし。
ということでよく忘れる環境変数のショートカット一覧です。

 

  • %USERPROFILE%:現在のユーザーのプロファイルフォルダのパスを表示します。
  • %SYSTEMROOT%:Windows OSフォルダのパスを表示します。
  • %TEMP%:一時ファイルが格納される場所のパスを表示します。
  • %PROGRAMFILES%:アプリケーションがインストールされる場所のパスを表示します。
  • %PUBLIC%:共有フォルダのパスを表示します。
  • %HOMEPATH%:ユーザーのホームフォルダのパスを表示します。
  • %LOCALAPPDATA%:ローカルアプリケーションデータのパスを表示します。
  • %USERDOMAIN%:現在のコンピューターのユーザードメイン名を表示します。(Edgeが起動する)

 

最近はChatGPTがすごすぎて、ミニTipsのような記事を書く必要性がないような気もしていますが、
これまで通り、思い出した時に気の向くままに書き溜めます。

それでは。

Windows10以降で.exeや.dllの依存関係を調べる方法( Dependencies )

お久しぶりです、ゆきしろです。

他人が開発した.exe起動すると●●●●.dllがないって怒られたよ。ふぁっきゅー。

ちょっと前まで●●●●.dllがなくても動いていたよ。

.exeのプロジェクトには何の変更もないよ。

ははーん!さては.exeが参照している他の.dllの参照先が増えやがったなコンチクショウ!一体何の.dllに依存してやがるんだ!!

 

というわけで今回は.dllの依存関係調査ツールについて。

昔は Dependency Walker(depends.exe)とか使えたんですが、これWindows10で実行すると固まるのでイマイチなんですよね。

というわけで後継の Dependenciesについて。

Dependencies
https://github.com/lucasg/Dependencies

これはDependency WalkerをC#で書き直してOSSにしたやつらしい。

以下手順

---

1.Visual C ++再頒布可能パッケージをインストールする

support.microsoft.com

 

2.DependenciesGui.exeを起動する(GUI版)

※Dependencies.exeはCUI版。

 

3.メニュー > File > Openからエラー吐いてる.exeを指定して実行する。

・砂時計アイコン:後からロードされるライブラリ。気にしなくていい。

・赤いアイコン:Windows上では実装されていない関数がある。関数画面で任意の赤いアイコンをクリックすると、それぞれのDLLに対応するはずの関数が欠落しているのがわかる。

・?アイコン:検索先に見つからなかった。
  対処:メニュー > Options > customize search folders から検索先の設定を変更。もしくはモジュール追加する。

 

簡単!

 

以下余談。

git bashから lddコマンド叩けば一応依存ファイル追いかけることはできるけど、不明な参照は ??? -> ??? みたいな1ミリも情報が得られないから、参照エラーがあるときはお勧めしない。

逆に、dllや参照ファイルが明確に足りていて、何に依存しているか確認したい時はコマンドの方が早いかも。

 

IPアドレスからマシン名を特定する(同一NICのサブIP含む)

前提

 調べたいIPアドレスpingが通る。

 

1つのNICに1つのIPのみの場合 ( 例: 192.168.1.101 )

IPを対象としてnbtstatコマンドを叩く。

nbtstat -A 192.168.1.101

結果にマシン名が出てくる。以上。

 

1つのNICに複数のIPが割り当てられていて、サブIPからマシン名を特定したい場合。

例: メインIPが192.168.1.101 で、サブIPが192.168.1.102 の場合。

 

1.arpコマンド でネットワークのMACアドレス全リストを取得する

arp -a

実行結果からサブIPのNICMACアドレス(物理アドレス)を特定する。

Internet Address      Physical Address      Type

192.168.1.102          1c-d9-8f-64-3b-12     dynamic

   

2.特定したサブIPのMACアドレスと同一のMACアドレスのIP(メインIP)を目視で探す。

Internet Address      Physical Address      Type

192.168.1.101          1c-d9-8f-64-3b-12     dynamic

 

3.メインIPを対象としてnbtstatコマンドを叩く

nbtstat -A 192.168.1.101

結果にマシン名が出てくる。以上。

 

Excel 土日祝だけ背景の色を変えた日付リストを作る

Excelめんどくさくなった時のチートシート

土日祝だけ背景の色を変えたExcel日付リスト作るよ!

f:id:yukishir0:20220106152000p:plain

こういうやつ

良いところ

・土日祝日だけ休みってわかる

・文字コピペしても背景の色が変わらない

 

悪いところ

Excel めんどくさい

 

作り方

f:id:yukishir0:20220106151203p:plain

土日祝だけ色を変えたExcelリストの作り方

コピペ用

曜日

  =TEXT(WEEKDAY(A3,1),"aaa")

背景色

 =IF(OR(OR(WEEKDAY($A3)=1,WEEKDAY($A3)=7),COUNTIF($I$3:$I$100,$A3)=1),1,0)

 

 

みんなのお仕事が平和になりますように。

女児向けアーケードリズムゲーム・ワッチャプリマジの話

※この記事は「目黒ワンニャンパーク Advent Calendar 2021」11日目の記事です。

adventar.org

 

こんにちは、ゆきしろです。

2021年もあと残すところ2週間少々となってきましたね。

さて本日は、昨今の女児向け音ゲー事情、ワッチャプリマジについて、クソデカ感情で語りたいと思います。

 

ワッチャプリマジとは何か

タカラトミーアーツシンソフィアの共同開発により日本で2021年10月1日から稼働中のアーケードゲーム。また、このゲームを原作として同年10月3日から放送中のテレビアニメ。(Wikipediaより)

 

雑に説明すると、ゲームセンターに置いてある女児向けの音ゲーです。

お金を入れてリズムゲームをすると、ランダムに洋服が印刷されたカードが1枚排出されます。

リズムゲームは既存のキャラクターの他、アバターパーツを組み合わせたオリジナルのマイキャラを作成して遊ぶこともできます。

 

女児向け音ゲー筐体の雑な歴史

これを語らないと後々説明が面倒なので雑に歴史を解説します。

 

時は2007年頃。当時、低年齢向けのアーケード筐体ゲームは、男の子が「甲虫王者ムシキング」、女の子は同じ筐体をベースに作られた「オシャレ魔女ラブandベリー」で遊ぶのが全盛期でした。

 

「オシャレ魔女ラブandベリー」は、1プレイ100円。

コイン投入後、「オシャレ魔法カード」が1枚排出されました。
キャラクターを選択後、髪型・服・靴のカードをスキャンして着せ替えを行い、ダンスのリズムゲームでCPUとバトルをする。セガが作り上げたこのゲームスタイルが、現在の女児向け音ゲー基盤を作り上げました。

 

オシャレ魔女ラブandベリーの稼働からその数年後、2010年。

タカラトミーアーツシンソフィアが共同開発した女児向け音ゲーが「プリティーリズム」シリーズでした。プリティーシリーズの歴史はここから始まります。

 

筐体としてのプリティーリズムは2014年の6期まで続きました(ミニスカート、オーロラドリーム、ディアマイフューチャー、レインボーライブ、レインボーライブディオ、オールスターレジェンドコーデ)。

お金を入れてリズムゲームをプレイすると、カードではなく、洋服のデータが含まれるハートの形のきらきらして可愛い小さな石(プリズムストーン)が筐体から排出されました。

プリティーリズムでは恋愛要素や嫉妬などの思春期あるあるな感情要素が多くあり、中学生~高校生くらいの女の子が対象でした。

アイススケート×ダンス×リズムゲーム×ファッションというキラキラした要素が盛りだくさんで、育成要素もアリ、ユーザーはスタァになることができました。

ライバル筐体であるバンダイナムコゲームズが提供する「アイカツ!~アイドル活動~」もこの時期に出てきましたが、こちらも語ると長いので今回は割愛します。

 

その後、対象年齢を大きく引き下げ、小学生向けにプリパラが始まりました。

アップデートの弾が細かくなり、1年目シリーズ、、2年目シリーズ、神アイドルシリーズ、主人公が交代してアイドルタイムプリパラシリーズ、オールアイドルシリーズ。

プリティーリズムから大きく筐体を変更し、プリズムストーンはプリチケという印刷タイプのカードに姿を変えました。

入力インタフェースは赤青緑のボタンが左手と右手の位置にそれぞれ配置され、ユーザーはスタァからアイドルへと進化していきました。

みんな友達、みんなアイドル。まさにユートピアでスタイリッシュでタフでジャスティス。優勝間違いなしでした。

 

その後、筐体にキラッとボタンが増設され、モデルCGやベース筐体を共通とした「キラッとプリ☆チャン」が始まりました。Youtubeの流行を受け、動画配信をテーマに、ユーザーはアイドルのようなライブをすることで配信者になることができました。

フォロワーを稼ぎコーデを集めてライブをしてレベルを上げる。ハイ可愛い。

プリチケは、コーデカードへ。トモチケはフォロチケへ。弾を重ねるごとにアップデートされ、わちゃわちゃ会(フォロチケを使ったユーザーのマイキャラ紹介)の追加や、パシャリングステーション(写真撮影を楽しむモード)はとてもエモかった。プリたま弾でのカード購入時のルーレット演出の追加などもありました。

 

そして2021年10月。筐体を刷新し、1プレイ200円に値上げして、ゲームと排出カードの品質をウルトラ向上させて、満を持してタッチパネルを搭載して登場したのがワッチャプリマジでした。ライバルのアイカツはもう数世代前からタッチパネルでしたから。。。

 

ワッチャプリマジのいいところ

以下、この記事の本題です。

 

・マイキャラが可愛い

すごく可愛い。プレイし始めたばかりのころはアバターパーツが少ないので選択肢はあまり多くない。それでも可愛い。声も可愛いしパーツの種類が増えた。ネイルも選べる。どう作っても可愛くなるようにできている。すごい。 プリパラ・プリチャンではターゲットが小学生女児であったためか、等身がやや低めに作成されていた。プリマジでは等身が高くなったため、中学~高校生っぽい服がとても似合うし、ライブステージの動きが大きくなる分迫力が出る。よさしかない。

 

・プロフカードに手描きサインができる

プロフカードとは筐体にログインするためのIDカードである。アイドルのマイキャラを作成したらサインは付き物である。これまでサインを手描きできる筐体は存在しなかった。これはすごいことである。しかもプロフカードはコーデを変えて量産することができ、予備も作れる。

 

リズムゲームの難易度が下がった

物理ボタンが左右の赤青緑の合計6ボタンから、左右1ボタンずつの合計2ボタンになった。タッチパネルを使うのはあくまでミニゲーム。これによりリズムゲームの難易度が下がり、適当にタカタカ叩いてもそこそこ楽しいゲーム体験ができる。リズムゲームの精度、すなわち、当たり判定も少々緩いようで、カスタネットを叩くよりもパーフェクトをとるのは簡単である。

 

・無料体験チケットの配布

1プレイ200円だが、この無料体験チケットのQRコードがあればステージは限られるが、何度でも無料で遊べる。主人公のコーデを変えることもできた。カードはいらないが、ゲームだけしたい人に向いている。リズムゲームの練習を無料体験チケットで行ってからマイキャラで課金して遊ぶと女児と親御さんのお財布には優しいと思われる。

 

・ゲーミングPCのようなイルミネーション

すごい光る。プリパラ・プリチャンではスポットライトのようなライトが搭載されていたが、プリマジは一味違う。グラデーションで光る。外観が光るので、ぱっと見、確変が起きたパチンコ台のようである。脳汁が出る。

 

・光る割にパチンコ要素(射幸心を煽る)演出が減った

プリチャンでは「くっる!くるくるくるくる!!るーれっと!!!いぇい!!!」と煽られたあと、追加購入の際には「もう一回!もう一回!」と100円を追加するように煽られて、少々下品な要素がありストレスだったが、露骨な煽り方をしなくなった。たぶん。プリマジでの連打ミニゲームが終わった直後にステージ中で100円追加するようになったのは忙しいだけで煽りではないと信じたい。

 

・印刷時間短縮の工夫

プリチャンでは最後にまとめて印刷されていたため、長時間の印刷待ち時間がきつかった。ミニゲームで時間を潰すにも限りがあり、ただひたすらスマホをいじる時間になっていた。それがプリマジではリズムゲーム中に並行して印刷をするため、かなりの時間が短縮されてストレスが減った。素晴らしい。

 

・再起動画面

筐体ゲームといえどもソフトウェア不具合は起こるし、印刷用紙が切れればエラーを吐いて管理者(店員)を呼ぶ。ユーザーは再起動時のチェック画面を操作することなく、店員の対処をじっと見守るしかないのだが、その再起動画面が素晴らしい。アイカツや他のゲームと異なり、きちんと再起動画面が作りこまれている。

コマンドプロンプトのような味気ないコンソール画面ではない。しかも店員は物理ボタンワンクリックで再起動を実施できる。このユーザーフレンドリーな設計は本当に見習いたい。

 

・持っているカード情報を保持しており、購入前に持っているかどうか教えてくれる。

いちいちデータベース参照して音声パターン替えるとか、めんどくさいから誰もやりたがらないことをやってくれる。本当にすごい。すごく助かる。カード集めと課金が捗る。

 

・WEBのマイページが充実

ライブのコーデでアルバム画像を保存してくれるの本当に嬉しい。ツイッターが捗る。思い出にもなる。良さしかない。ありがとう。

 

改善要望

ここで書きなぐったところでどうこうなるとは思っていませんが、誰かの目に留まってなんとなく運営に伝わるといいなという気持ちを込めて。

 

・アクセカードの読み込み時のスキャン精度が悪いです。。。

・プリマジフロートタイムの連打が2ボタンのみでつらい。3ボタンのほうが楽でした。

ミニゲームで画面の高い位置のコーデメイツタッチするときの腕がつらい

です。期間限定コーデの排出率が悪いためずっとそのステージを周回する羽目になるので飽きます。

・ファンブック店頭探すとどこにも売ってないので増刷して欲しいです。

・手描きサイン用のタッチペン欲しいです。安いやつでいいのでつけられませんか。

・手描きサイン保存しておいてほしいです。指じゃ同じサインを二度もかけないです。

・使ったコーデを持ってるコーデとしてカウントして欲しいです。マイキャラ使用しないでゲストで排出したコーデは「持っていない」とみなされるのが辛い。。。コーデブック埋まらないよ。。。

 

ワッチャプリマジの沼

女児向けと言いながら、最低金額は1プレイ200円。

しかも追加でカードショップモードで4枚購入後、リズムゲーム中に煽られながら3枚購入することが可能で、収集し始めると1プレイ900円というなかなか恐ろしい金額を吸い込んでいく。その様子はまるで底なし沼の如く。毎週限定コーデがあるため、収集家には継続的な課金が求められる。

 

しかしその品質は非常に高く、ユーザはとても素敵な体験をすることができる。

リズムゲーム楽しい。マイキャラ可愛い。ミニゲームも楽しい。WEBのマイページの機能が充実している。ゲーム内の期間限定イベントもある。季節感がある。報酬として必ずカードが出てくる。

パチンコよりも、精神的にも肉体的にも健康にいいのである。ただし財布の健康には悪いので注意が必要である。

 

終わりに

思うままに書いていたらなんだか少し長くなってしまいました。

ここまで読んで頂きありがとうございました。

Powershell スクリプトのあれこれ

記憶喪失になったときのための備忘録、powershell編です。

適宜更新されます。

 

日付の取得(年月日_時分秒)

$today = Get-Date -Format "yyyyMMdd_HHmmss"

echo $today

一時停止コマンドPauseの実装

# 関数定義

 function Pause
{
    if ($psISE) {
        $null = Read-Host 'Press Enter Key...'
    }
    else {
        Write-Host "Press Any Key..."
        (Get-Host).UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | Out-Null
    }
}

# 呼び出し例

echo "Error."

Pause

return

 

ファイルパスからフォルダ名の切り出し

$dir_name = Split-Path -Leaf $FilePath
echo $dir_name

 

スクリプトのあるディレクトリパスの取得方法(Powershell2.0対応版)

# for PowerShell v3
if( $PSVersionTable.PSVersion.Major -ge 3 ){
    $ScriptDir = $PSScriptRoot
}
# for PowerShell v2
else{
    $ScriptDir = Split-Path $PSCommandPath -Parent
}

echo $ScriptDir

 

 

 

 

Windows の bat あれこれ

記憶喪失になったときのための備忘録・Windows のbat編です。

適宜更新されます。たぶん下に行くほどめんどくさい処理です。

 

実行ファイルが置かれている場所へ移動します

cd /d %~dp0 

 

%の意味

(例) hoge.bat aaa bbb

%0:D:\foo\bar\hoge.bat

%1:第1引数aaa

%2:第2引数 bbb

 

%~d0  :ドライブ文字のみ
%~p0  :パス名のみ
%~n0  :ファイル名のみ
%~x0  :ファイル拡張子のみ
%~dp0  :ドライブ文字+パス
%~nx0  :ファイル名+拡張子

%~dp0 :ドライブ文字+パス
%~nxI0 :ファイル名+拡張子
%~fs0  :完全パス+短い名前

 

標準出力・標準エラー出力のリダイレクト

コマンド > ファイルパス : 標準出力をファイルへ上書き出力

コマンド >> ファイルパス : 標準出力をファイルへ追記出力

コマンド 2> ファイルパス : 標準エラー出力をファイルへ上書き出力

コマンド 2>> ファイルパス : 標準エラー出力をファイルへ追記出力

コマンド > ファイルパス 2>&1 : 標準出力と標準エラー出力をファイルへ上書き出力

コマンド >> ファイルパス 2>&1 : 標準出力と標準エラー出力をファイルへ追記出力

 

コマンドを標準出力しない

@echo off

 

コメントアウト

rem

 

日時を表示

echo %DATE%:%TIME%

→ 2021/07/08:15:32:26.64

 

for /f "usebackq" %t in (`echo %TIME: =0%`) do @set TIMEZERO=%t & echo %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%_%TIMEZERO:~0,2%%TIMEZERO:~3,2%

→ 20210708_0905

解説:%TIME%は1桁時間だと空白が入るため0埋めして、一旦%TIMEZERO%に格納し、表示された文字の文字数で切り出している。文字数の切り出しは他言語のOS環境によって07/08/2021とかになるため日本語環境のみで使用してね。他言語ならpowershell使って。

 

ユーザに入力を求める

set /p ANSWER="よろしいですか (y/n)?"
if /i {%ANSWER%}=={y} (goto :yes)
if /i {%ANSWER%}=={yes} (goto :yes)

echo キャンセルしました。

pause
exit

rem ---------------------------

:yes

echo 処理をします。

(何か処理)

pause

exit

IPアドレスからコンピュータ名を取得する

nbtstat -a 192.168.1.1

※192.168.1.1のコンピュータ名を知りたい場合

同一ネットワーク上で相手が存在するかを確認する

arp -a

MACアドレスが出る

ネットワークの接続状態を確認する

netstat -a

実行ファイルのパス (末尾に'\'あり)

set filepath=%~dp0 

echo %filepath%

 

実行ファイルのパス (末尾の'\'なし)

パターン1 移動して末尾取るパターン

pushd %~dp0
set filepath=%CD%
popd

echo %filepath%

パターン2 末尾の1文字を削り取るパターン

set tmppath=%~dp0

set filepath=%tmp:~0,-1%

echo %filepath%

 

Logフォルダがなかったら作る

 if not exist Log\ mkdir Log\ 

 

5秒経ったらタイムアウトして次の処理へ

timeout /t 5

 

実行引数がない時はエラーにする

if "%~1"=="" goto :error

 

CSVファイルを1行ずつ読み込む(複数ファイル対応版)

for %%a in ( *.csv ) do (
    for /f "eol=; tokens=1-3 delims=," %%i in ( %%a ) do (

        echo csvfile : %%a 
        echo column1: %%i column2: %%j column3: %%k

    )
)

 

robocopy処理

robocopy %from_path% %to_path% %file_name% /s /e /r:1 /w:5 /fp /np /njh /tee /LOG+:%file_name%.log

if errorlevel 8 echo Copy FAILED. & goto end

rem ※Ctrl+Cなど割り込みで死ぬときはエラー値が0未満の値になる。

よく使うオプション

  • /s サブフォルダ含める
  • /e 空フォルダ含める
  • /r:1 /w:5 リトライ1回、Wait5秒
  • /move ファイルとディレクトリを移動 (コピー後にコピー元から削除)
  • /sj /sl ジャンクションやシンボリックリンクを作る(リンク先を追跡コピーしない)
  • /fp フルパスで表示する
  • /np コピー完了率を表示しない
  • /njh /njs 忍者ヘッダ、忍者Summary(大嘘)。ヘッダやサマリを表示しない。
  • /tee /LOG+:Logfile.txt 標準出力しながらログ追記出力する(bashとかのtee)
  • /xd フォルダを除外する

 

powershell併用)同階層の.txtを読み込んで行をソートして重複行削除してshift-jisでoutputフォルダ下に出力する

if not exist output\ mkdir output\

for %%a in ( *.txt ) do (
    powershell -Command "Get-Content -Path %%a | sort -Unique | Out-File .\output\%%a -Encoding default"
)

 

powershellスクリプトなんだけどダブルクリック実行できるようにbatファイルに擬態するための最初のワンライナー

 @setlocal enabledelayedexpansion&set a=%*&(if defined a set a=!a:"=\"!&set a=!a:'=''!)&powershell/c $i=$input;iex ('$i^|^&{$PSCommandPath=\"%~f0\";$PSScriptRoot=\"%~dp0";#'+(${%~f0}^|Out-String)+'} '+('!a!'-replace'[$(),;@`{}]','`$0'))&exit/b

# ----------------------------------
# ここから PowerShell Script
# ----------------------------------

hogehoge

 

 

任意の文字列に特定の文字列が含まれるか検索

echo %TEXT% | find "AAA"
if errorlevel 1 goto :Error

 

圧縮ファイルの展開

.7z形式の場合(7zipを要ダウンロード)

7za.exe x aaa.7z -oC:\hoge\ -y

.zip形式の場合(powershellコマンドを使用)

powershell Expand-Archive -Path aaa.zip -DestinationPath C:\Users\aaa

 

レジストリの値を参照する(例:OneDrive無効化グループポリシーの設定状態を参照する)

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\OneDrive\ /v DisableFileSyncNGSC

 

batからpowershell経由(Unrestrictedに一時的に昇格)して管理者権限でコマンドを実行する。(例:レジストリを操作してOneDrive無効化グループポリシー設定値を1から0に変更する)

@powershell -NoProfile -ExecutionPolicy Unrestricted -command start-process 'cmd.exe' '/c reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\OneDrive\ /v DisableFileSyncNGSC /t REG_DWORD /d 0 /f' -Verb runas -Wait

 

powershel経由で.exeを実行する(例:OneDriveを起動する)

@powershell -NoProfile -ExecutionPolicy Unrestricted -command "Start-Process %USERPROFILE%\AppData\Local\Microsoft\OneDrive\OneDrive.exe"

 

ジャンクションを作成する

mklink /J %LogPath% %JunctionPath%

 

サービスを再起動する(例:ICS「SharedAccess」の再起動)

net stop SharedAccess

net start SharedAccess

 

 

新規ローカルユーザを作成する(一般ユーザ)

net user ユーザ名 パスワード /add

補足:

  • net user → 現在のユーザ一覧参照
  • net user ユーザ名 /random →ランダムなパスワード生成

 

一般ユーザを管理者グループに所属させる

net localgroup administrators ユーザ名 /add

 

コマンドの結果を変数に格納する

for /f "tokens=3 usebackq" %%i in (`find /v /c "" hoge.txt`) do SET RESULT=%%i

補足:usebackq

  • for /f "usebackq" in (`dir`) → 実行コマンドのdirとして解釈される
  • for /f "usebackq" in ('dir') → dirという文字列として解釈される
  • for /f "usebackq" in ("dir") → dirというファイル名として解釈される

ダミーファイルを作成する

空ファイル作成

type nul > dummy.txt

 

容量を指定してダミーファイルを作成(1GBの例)

fsutil file createnew dummy.dat 1073741824

 

Powershell経由で容量を指定してダミーファイルを作成(1GBの例)

@powershell -NoProfile -ExecutionPolicy Unrestricted -command "fsutil file createnew hoge.dat (1GB)"

 

カレント以下にある要素数0の空フォルダに .gitkeepファイルを作成する 。

@echo off
for /d /r %%d in (*) do (
    for /f "usebackq" %%c in (`dir %%d /b/s ^| find /v /c ""`) do (
        if %%c==0 echo created : %%d\.gitkeep && type nul > %%d\.gitkeep
    )
)

WindowsとHyper-Vの仮想マシン(Linux系)で共有フォルダを設定する

たまにやり方わすれるのでメモです。

 

■前提条件

cifs-utilsがインストールされていること

sudo apt-get install cifs-utils 

 

■一時的に張る方法

まず【Windows側】

1. 共有したいフォルダ作成(例 linux_share)
2. 右クリックしてpropertiesのSharingタブからAdvanced Shareingを開く
3. Share this folderにチェックを入れる。Share nameをわかりやすい名前に入力。(例 linux_share)
4. PermissionsをクリックしてEveryoneでFull ControlにチェックしてApply。OKして画面を閉じる。

(※エクスプローラで \\localhost を開いて表示されれば共有できている) 

 

次に【Linux側】

1. マウントポイントになるフォルダを作成

mkdir /mnt/windows_share

2. フォルダにマウントする

mount -t cifs -o username=ユーザ名,password=パスワード //{Windows側のIP}/linux_share /mnt/windows_share

※rootではなく一般ユーザuser1に権限つける場合

sudo mount -t cifs //{Windows側のIP}/linux_share /mnt/linux_share -o username=user1,uid=1000,gid=1000

 

Linux起動時に自動的にマウントさせる方法

上記「一時的に張る方法」を実行後に /etc/fstab にviとかで以下の設定を追記する。

//{Windows側のIP}/linux_share /mnt/windows_share cifs username=ユーザ名,password=パスワード,uid=1000,gid=1000 0 0

 

■マウントの解除

Linux側】

umount /mnt/windows_share

Windows側】 

共有中のフォルダを右クリックしてpropertiesのSharingタブからAdvanced Shareingを開きShare this folderのチェックをOFFにする。 

 

 

マウントフォルダ /mnt 下以外にマウントすると人間性が疑われるので気を付けましょう。

Synology NAS 918+ に Linux用ソフト をインストールしようとして失敗したのでメモ

追記:

「結論として yum 入れてください」

※以下の本記事は完全に個人のメモです。yum入れる手順は別途書きます。ここでは記載しません。あとでリンク張ります。

 

---

 

CDをbin+cue形式でNASに入れたのはいいけど、wavとかmp3に変換するの忘れてた。

一旦ローカルにダウンロードして作成して上げなおすのもいいんだけど、どうせならNAS上で完結させてしまいたい。

wavができればどうにかなる気がする。

というわけで bchunk を導入しようとしたところ、パッケージ管理のapt-getもyumもないことに気づいた(とてもめんどくさい)

 

そもそもこいつは何者だ?ということでWindowsteratermからSSHでログインしてコマンド確認。

 

# uname -a

"Linux YukishiroDS918 4.4.59+ #24922 SMP PREEMPT Mon Aug 19 12:13:37 CST 2019 x86_64 GNU/Linux synology_apollolake_918+"

 

DSMのベースはLinuxらしい。まぁSSHログインできたあたりでなんとなく察してる。yum入れたいけど時間かかりそうなので、今回は -割愛- 。 →結論:yum入れる必要がある

 

以下、読まなくていい --------------------------------------------------------

 

wgetは使えるっぽいのでとりあえずbchunk をインストール。

 

# wget -c "http://he.fi/bchunk/bchunk-1.2.0.tar.gz"

# tar xf bchunk-1.2.0.tar.gz (ダウンロードした圧縮ファイル解凍して)
# cd bchunk-1.2.0 (解凍先に移動して)

# gcc -Wall -Wstrict-prototypes -O2 -c bchunk.c (ソースコードGCCでビルドして)

NAS「(コンパイラ?そんなものはない旨のメッセージ)」

僕「…」

 

GCCがないので配布元 https://gcc.gnu.org/mirrors.html からURLを確認して取得します。つくばのサーバにお世話になります。

 

# wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-9.2.0/gcc-9.2.0.tar.gz (こっから最新のGCC取得してきて)

# tar xf gcc-9.2.0.tar.gz(ダウンロードした圧縮ファイル解凍して)

NAS「100MB超えてるからちょっと時間かかるぞい。そいや。gcc-9.2.0フォルダ作った」

 

本当はここで 「vim .bashrc」とかで.bashrcを作成して「export PATH=hogehoge」とか書き込んでPATHを通すのがいいんでしょうけど、今回は単発なので割愛します。

依存パッケージインストール(シンボリックリンクが張られる)。

 

# cd gcc-9.2.0 (解凍先に移動して)
# ./contrib/download_prerequisites (依存パッケージにシンボリックリンク張って)

 

ビルド用ディレクトリを作成し、 configure, make, make install を行う。今回は C, C++をインストールする。
(/volume1/work/build下で作業していますが 普通は/usr/local下に読み替えてね。)

 

# cd ..
# mkdir build
# cd build
# ../gcc-9.2.0/configure --prefix=/volume1/work/build/gcc-9.2.0 --enable-languages=c,c++ --disable-multilib --disable-bootstrap

configure: error: in `/volume1/work/build':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details

 

コンパイラのインストールがしたいのに、コンパイラが無いとはこれいかに。。。いやまぁ、まっさらな状態だからそりゃそうか。。。

調べましたが、結局yumを使える状態にしてgccyum からインストールする必要があるようです。。。

以下、コンパイラを最新にする更新のための環境変数の登録。。。

 

環境変数の登録
# export LD_LIBRARY_PATH=/volume1/work/gcc-9.2.0/lib:$LD_LIBRARY_PATH
# export LIBRARY_PATH=/volume1/work/lib/x86_64-linux-gnu
# export C_INCLUDE_PATH=/volume1/work/include/x86_64-linux-gnu
# export CPLUS_INCLUDE_PATH=/volume1/work/include/x86_64-linux-gnu

環境変数の登録確認
# printenv

メイクファイル作成してビルド

# make
# make install

 

本来はこれでgccが最新に更新されて


# download_prerequisites
# ./gcc -Wall -Wstrict-prototypes -O2 -c ../bchunk/bchunk.c

 

あたりでbchunkがビルドされてバイナリができて、

それを指定したシェル作って、

任意のタイミングで実行しておしまーいっていう流れだったのですが、

あとでリベンジします。。。

 

Office365 をインストールしたら OneNote が異常終了するようになった話

こんにちは、ゆきしろです。

Office365入れたらOneNoteが異常終了するようになりました。

f:id:yukishir0:20190809183533p:plain

ちなみにWEBオンライン版とMicrosoft Teamsからの編集はできていたので、あまり影響はなかったのですが、こういうの本当に気持ち悪いですよね。

調べたところ、どうやらMicrosoft Storeアプリ利用制限と競合していたようでしたので解決までの備忘録です。

 

■関連する現象

Office365をインストールするとOneNote 2016が起動しなくなる

https://support.office.com/ja-jp/article/office-2019-%E3%81%BE%E3%81%9F%E3%81%AF-office-365-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9F%E5%BE%8C%E3%80%81onenote-2016-%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84-1844ba87-7248-4bd8-a735-66a52f98e6e5

 

■原因

Office365により「OneNote(Microsoft Storeアプリ版)」がインストールされる

※ストアアプリ版のアイコン

f:id:yukishir0:20190809183507p:plain

Microsoft Storeへのアクセスは上位のネットワーク管理者(会社の管理部門など)によって制限されている。

OneNote(Storeアプリ版)は起動するたびにストア経由で更新情報をとってこようとする

Storeアプリへのアクセスが制限されてOneNoteが死ぬ

 

■対策

1.OneNote(Storeアプリ版)をアンインストールする

1-1.WindowsキーおしてメニューのWindowsマークを右クリック

1-2.「アプリと機能」から「このリストを検索」欄に「OneNote」を入力

1-3.OneNoteをアンインストールする

f:id:yukishir0:20190809182943p:plain

2.OneNote 2016(デスクトップアプリ版)をインストールする

2-1. 以下の公式サイトからダウンロードする

https://support.office.com/ja-jp/article/office-2019-%E3%81%BE%E3%81%9F%E3%81%AF-office-365-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9F%E5%BE%8C%E3%80%81onenote-2016-%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84-1844ba87-7248-4bd8-a735-66a52f98e6e5

  ・32ビットOS版:setuponenotefreeretail.x86.ja-jp_.exe

  ・64ビットOS版:setuponenotefreeretail.x64.ja-jp_.exe

 

2-2. ダウンロードしたexeを実行。「OneNote 2016」がインストールされます。

f:id:yukishir0:20190809182908p:plain

 

あとは通常通り実行されるようになります。

以上です。

Bitbucket Server の更新通知を Microsoft Teams に飛ばす(管理者向け)

こんにちは、ゆきしろです。暑い日が続きますね。

GitのプルリクエストがTeamsに飛んでくるとか、かっこよくね?

ということで、今日はOffice365にくっついてきたMicrosoft版SlackでおなじみのTeamsと、Git管理しているBitbucketリポジトリを連携させる話を書きます。

Bitbucket Server ユーザ向けです。
Bitbucket Cloud だともう少し楽かもしれませんが、まぁ、大人の事情です。

 

■前提
以下の条件を全て満たしている。
1.BitbucketServer環境があり、管理者権限がある。
2.BitbucketServer上に任意のリポジトリがある。
3.Office365を契約していて、Microsoft Teamsを使うことができる。
4.Microsoft Teams上に任意の作成済みチームがあり、そのチームの所有者権限がある。

 

■手順
1.Microsoft Teamsを起動する。
 左メニューの「チーム」タブから任意のチームを選択し、
 更新通知を流すチャネル「Bitbucket」を作成する。
 ※既存のチャネルでもいい。

2.Microsoft Teamsの左メニューの「…」から「その他のアプリ」を選択してアプリ画面を開く。
 アプリ画面の「すべてのチャットを検索」から「Bitbucket Server」を検索してインストールする。
 通知先となるチームとチャネルを選択し、WebhookのURLを発行。
 URLはコピーするなりメモするなりして退避しておく。

3.BitbuckerServerへプラグインのインストールが必須となる。
 BitbucketServerのバージョンが異なるとアトラシアンのマーケットプレイスからは取得できないので以下からダウンロードする。

 以下からOffice 365 Connectorを取得する。

Office 365 Connector | Atlassian Marketplace

 「Get it now」ボタンからローカル環境に「office-365-connector-3.0.jar」プラグインファイルをダウンロードする。
 (末尾の番号は異なる可能性がある)

4.管理しているBitbucketのプロジェクトサイトにログインする。
 https://{管理しているドメイン}/projects/{リポジトリ}
 トップ画面右上の歯車アイコン「管理」を開く。
 管理画面の左メニューの「アドオン」欄から「Manage add-ons」画面を開く。
 画面右上の「Upload add-on」ボタンを押し、ダウンロードした.jarファイルをアップロードしてプラグインをインストールする。

f:id:yukishir0:20190808113940p:plain

5.更新通知の飛ばし元となるリポジトリ画面を開く。
 https://{管理しているドメイン}/projects/{リポジトリ}

 リポジトリ > 設定 > Office365コネクタ > 上記で発行したWebhookを追加する。

 ※停止させたい時はここからWebhookを削除する。


 以降、リポジトリに何かあればTeamsの指定チャネルに通知が飛ぶようになる。

f:id:yukishir0:20190808113855p:plain


お疲れ様でした。

Windows PC に保存された WiFi のパスワードを確認する方法

こんにちは、ゆきしろです。

新しいスマートフォンや端末を買った時とか、OS再インストールした時とか、使っていたWiFiのパスワード忘れちゃいますよね。

WiFiに繋いだことのあるパソコンがあればコマンドで簡単に確認できるので、備忘録として方法を書きます。

忘れないようにするのは無駄な努力なので放棄しました。

 

■WindowsPCに保存されたWiFiパスワードを確認する
1. Windowsキー+Rキー押して「cmd」を入力しコマンドプロンプトを開く。
2.「netsh wlan show profiles」で接続したことのあるWiFiのアクセスポイント一覧が表示される。パスワードを確認したいアクセスポイント名をコピーする。
3.「netsh wlan show profile name="{アクセスポイント名}" key=clear | findstr 主要なコンテンツ」で表示される。

 

以上です。

Gmail Webクライアントを使って Outlook の Office365 アカウントからメールを送受信する方法

こんばんは、ゆきしろです。

Outlookを使いたくないけどOffice365を使わざるを得ないときってありませんか?

ありますよね。

Gmailでちまちまラベルを作って振り分けていたので、Outlook使えとか言われてもエクストリームめんどくさいの極みです。というわけでGmailで送受信するぞ。

 

■送信

  • 1. 右上歯車アイコン > 設定 > 「アカウント」タブ > 名前 :「他のメールアドレスを追加」
    • 名前
    • メールアドレス
    • (/) エイリアスとして扱います
    • 次のステップ
  • 2.サーバ設定
    • SMTPサーバー: outlook.office365.com
    • TLS を使用したポート 587
    • ユーザID:Office365のメールアドレス
    • パスワード:Office365のパスワード
    • 次のステップ
  • 3. 設定したメールアドレスに認証メールが飛ぶので「確認」をクリック
  • 4. 右上歯車アイコン > 設定 > 「アカウント」タブ > 名前 に追加されていればOK(デフォルトにすると便利)

■受信

  • 1. 右上歯車アイコン > 設定 > 「アカウント」タブ > 他のアカウントでメールを確認 :「メールアカウントを追加する」
    • 名前
    • メールアドレス
    • (/) エイリアスとして扱います
    • 次のステップ
  • 2.サーバ設定
    • ユーザ名:Office365のメールアドレス
    • パスワード:Office365のパスワード
    • POPサーバー: outlook.office365.com ポート:995
    • (/) 取得したメッセージのコピーをサーバに残す
    • (/) メールの取得にセキュリティで保護された接続(SSL)を使用する
    • 次のステップ
  • 3. 右上歯車アイコン > 設定 > 「アカウント」タブ > 追加されていればOK

 

めでたしめでたし。

 

余談:上記の設定をすると、場合によってはセキュリティ管理者にメール通知が飛ぶようです。ダメって言われたら諦めましょう。