C# Task/CancellationTokenでキャンセル

 

Windows タスクスケジューラ

ファイル名を指定して実行
taskschd.msc
からも登録できる。

・バッチから登録する場合

schtasks /create
で登録できる。

・オプション

/ru:実行ユーザーアカウント
ユーザーがログオンしているかどうかにかかわらず実行
にしたい場合
system
とするが、その場合、対話はできないので注意。また、
administrators
のようにグループでも指定もできる。administratorsの場合は、
ユーザーがログオンしているときの実行する
になる。

/tn:タイトル
/tr:実行ファイルパス
/sc:スケジュール

/mo:スケジュール修飾

/st:開始時刻(24時間形式)
/rl:実行レベル

・サンプル

schtasks /create /tn “title” /tr “exepath” /sc daily /st 12:00 /rl highest
毎日12時に実行+管理者権限で実行

schtasks /create /tn “title” /tr “exepath” /sc hourly /mo 6 /st 06:00 /rl highest
今日の6時から開始し以後6時間ごとに実行+管理者権限で実行

schtasks /create /ru system /tn “title” /tr “exepath” /sc onlogon /rl highest
ログオン時に実行+管理者権限で実行+ログオンに関わらず

・削除
schtasks /delete /tn “title”

・無効
schtasks /change /tn “title” /disable

不要なタスク停止

Officeに関わるものを停止するとOfficeが立ち上がらないことがある。

 

C# TabPageの複写

TabPageを動的に追加する場合、細かい設定は面倒なので、デザイナーで作っておいて複写したい。

TabPage、中に入れるControlどちらも、インスタンスに対して必要なプロパティを直接指定(nPage.Text = oPage.Textのように)した方が楽だけど、今回は自動で渡してみた。

 

 

C# ファイル検索(インクリメンタルサーチ)

C# ファイル検索+指定秒数でサムネイル作成(FFmpeg)

以前からときどきfenrir(B@r09u3 Style Op.2)というフリーソフトを利用していたが、更新が止まっているようなので、自分用に同じようなソフトを作成した。もともとファイル検索だけできればいいので、機能も見た目も限定的。

 

C# Timer遅延処理

インクリメンタルサーチ系を作るとき、だいたいTextChangedにそのまま処理をくっつけてしまうのだけど、量が多いとカクついてしまうので、TextChangedが連続していた場合Timerで遅延処理をつけたほうがいい。

 

Javascript 要素をドラッグで移動

td要素の中にあるdiv要素をドラッグで別のtd要素の中に移動。div要素にはinputタグでデータを持たせクリック時に取得。

 

Javascript DOM関連 メモ

・DOM、Node、Element

DOMは基本的なインターフェースの提供とツリー構造を作っている。

DOMを構成する単位がNodeで、Nodeは文字列やコメントなども含まれる。Nodeの中でタグの部分がElementと呼ばれる。

Elementは、階層でElement、HTMLElement、HTML*Element
のように継承しそれぞれインターフェースを持っている。

・型の調べ方

・タグ、要素

要素=<開始タグ 属性>内容<終了タグ>

・要素取得

HTML*Element = document.getElementById(id)
idで要素を取得

HTMLCollection = document.getElementsByTagName(name)
タグ名で要素を取得

HTMLCollection = document.getElementsByClassName(name)
classで要素を取得

NodeList = document.getElementsByName(name)
name属性で要素を取得

HTML*Element = document.querySelector(selectors)
CSSセレクターで要素(最初の1つ)を取得

NodeList = document.querySelectorAll(selectors)
CSSセレクターで要素(複数)を取得

・NodeListとHTMLCollection

NodeList: 取得後更新しない。
HTMLCollection: 取得後更新する。

for … of で回す

・要素取得(親子関係)

HTML*Element = el.parentNode
親要素

HTML*Element = el.firstElementChild
最初の子要素

HTML*Element = el.lastElementChild
最後の子要素

HTMLCollection = el.children
子要素リスト

HTML*Element = el.previousElementSibling
1つ前の要素

HTML*Element = el.nextElementSibling
1つ後の要素

・要素操作

HTML*Element = document.createElement(タグ)
指定タグで要素を作成

parentNode.insertBefore(newNode, referenceNode)
referenceNodeの前にnewNodeを追加

parentNode.appendChild(newNode)
最後にnewNodeを追加

parentNode.removeChild(childNode)
childNodeを削除

・内容操作

string = el.innerHTML
タグが解析される。

string = el.textContent / el.innerText
タグが解析されない。取得するとタグはなくなり、設定するとタグは文字列になる。

textContentと、innerTextの違い。
textContentは改行コードなどは維持され、innerText変換されるなどいくつかある。

・属性操作

string = el.getAttribute(name)
属性を取得

el.setAttribute(name, value)
属性を設定

el.removeAttribute(name)
属性を削除

bool = el.hasAttribute(name)
属性を持っているかどうか

・classList

string = el.className
classの確認

el.classList.add(name)
classの追加

el.classList.remove(name)
classの削除

el.classList.toggle(name)
classのOn/Off

bool = el.classList.contains(name)
class有無

課題ベースでの業務支援ツール作成 メモ

・なぜ課題ベースなのか。

課題なので完了が設定できる。課題が解決すれば完了。

べき論で進めてしまうと、なかなか完了しない。そもそもべき論を言い出した人に判断する能力がないことも多い。

・作業者、マネージャに困っていること(課題)を出してもらう。

ツールに求める機能とは聞かない。

・課題の振り分け

経営・管理レベルでの課題、作業レベルの課題に分ける。課題サイズと考えてもいい。

例えば、経営・管理レベルの課題では、
ある経営指標を導入したい。
作業レベルの課題では、
ある帳票の作成を自動化したい
など。

・プロジェクト化

経営・管理レベルの課題をプロジェクトとして管理する。

ひたすら小さな課題を解決することで改善活動としていいが、評価のタイミングが必要な場合などプロジェクト化する。

・作業レベルの課題をプロジェクトへ

プロジェクトを解決する中で一緒に解決できる作業レベルの課題を取り込む。

例えば、Aというプロジェクトではaという帳票を作り直す必要があり、aという帳票では作業レベルの課題があるので、その作業レベルの課題もこのプロジェクトで解決するという感じ。

・課題の分割

経営・管理レベルの課題、作業レベルの課題まとめて、1ヶ月程度の作業サイズに分割する。

内容 / 解決方法 / 完了条件 / 期日 / 作業者

例えば、ある指標の導入で半年程度の作業サイズなら、先ず、指標作成に必要なデータもとを確認する/2週間/Aさん担当のような感じ。

・課題の解決方法

業務フローの見直し、Webサービスの利用や機器の購入など手段を限定しない。

ただ、業務フローに手を出すためには、業務知識+関わる人との信頼関係がないと難しい。

PHP Vue.js MySQLから取得(JSON)+更新

PHP復習のため、
・PHPでのログイン+ログアウト
・Vue.jp→PHP→MySQLでの取得(JSON)+更新
を作成してみた。

config.php

index.php

json.php

login.php

logout.php

 

PHP ログイン処理

PHPほぼ忘れてしまったので勉強中。