2017年2月15日水曜日

VB.NET:フォルダ優先で一覧を表示させる

ファイル・フォルダ一覧のパスがあるけどフォルダを優先して出したい。
深さ優先探索みたいなソートを再帰無しで書きたい。
そんなときに!

下のコードの表示先はListBox1だから気を付けてね。

やってることは簡単で、
符号の順序を利用してソートすれば、
再帰的なソートを必要とするモノでも再帰コード書かなくていいよ、速いよって事。

並び替えるモノを符号化してソートすると意外と簡単にできたりする。
もちろん一旦符号化しないといけないからその分の時間は掛かるけどね。

Dim folders As String() = System.IO.Directory.GetDirectories("C:\hogehoge\", "*", 1)
Dim files As String() = System.IO.Directory.GetFiles("C:\hogehoge", "*", 1)

'ソート
Array.Sort(folders)
Array.Sort(files)


'見つけたものを次々に符号化
Dim 符号リスト As New Hashtable
Dim パス As String
Dim ノードリスト As String()
Dim ノード As String
Dim インデックス As Int32 = 0
For Each パス In folders
  ノードリスト = パス.Split("\"c)
  For Each ノード In ノードリスト
If Not 符号リスト.ContainsKey(ノード) Then
  符号リスト(ノード) = "," & インデックス.ToString("D6")
  インデックス += 1
End If
  Next
Next
For Each パス In files
  Dim ファイルデータ = New System.IO.FileInfo(パス)
  ノードリスト = パス.Split("\"c)
  For Each ノード In ノードリスト
If ノード = ファイルデータ.Name Then
  符号リスト(ノード) = "-" & インデックス.ToString("D6")
  インデックス += 1
ElseIf Not 符号リスト.ContainsKey(ノード) Then
  符号リスト(ノード) = "," & インデックス.ToString("D6")
  インデックス += 1
End If
  Next
Next



'ソートリストを用意
Dim sss As New SortedList(Of String, String)
Dim aaa As New Text.StringBuilder



'Keyは符号化したやつ、
For Each パス In folders
  ノードリスト = パス.Split("\"c)
  aaa.Clear()
  For Each ノード In ノードリスト
aaa.Append(符号リスト(ノード))
  Next
  sss.Add(aaa.ToString, パス)
Next
For Each パス In files
  Dim ファイルデータ = New System.IO.FileInfo(パス)
  ノードリスト = パス.Split("\"c)
  aaa.Clear()
  For Each ノード In ノードリスト
aaa.Append(符号リスト(ノード))
  Next
  sss.Add(aaa.ToString, パス)
Next


For Each パス In sss.Values
  ListBox1.Items.Add(パス)
Next

2017年1月28日土曜日

SAI2で定期自動保存

ちなみにVBSの実行タスクはこれね。

タイトル通りです。
SAI2で謎落ちとか謎エラーとかで保存がああああああってなるので、正直結構辛いのでVBSでSAI2のファイルを定期的に自動保存するスクリプト書いてみた。

15分に1度、「sai2 (*)」という文字が入っているタイトルを探して、それをアクティブにしたのちCtrl+Sキーを押すというもの。よくある「sai2が先に立ち上がってないとだめ」という事はないので自由に叩きましょう。

ちなみに実行後、無限ループするから多重実行は気を付けてね。多重実行したときとか、要らないときはVBSはタスクからキルしてね。

あとVBSが何なのかとか、VBSの作り方とか、起動の仕方とか、ソースの環境依存の問題とかはググればなんとかなるよ。たぶんね。

以下ソース
'寝るミリ秒数
Dim SleepTime
SleepTime = 15*60*1000'15分間に1度動く
Dim strName
'strName= "PaintTool SAI"'前方一致(常に一定時間後保存を行う)
strName= "sai2 (*)"'後方一致(拡張子が.sai2のファイルを編集しているときのみ保存を行う)
'始まるよー
Main()

'メイン関数
Function Main()
  Dim objShell
  'シェルのオブジェクトを作成する
  Set objShell = CreateObject("WScript.Shell")

  On Error Resume Next
  Do
    If objShell.AppActivate(strName) Then objShell.SendKeys("^s")
    WScript.Sleep SleepTime'ここでスリープ
  Loop
  GetError()
  Err.Clear
  On Error Goto 0

  Set objShell = Nothing
End Function

'例外通知
Function GetError()
  GetError = True
  If Err.Number <> 0 Then
    MsgBox "例外:" & Err.Number & ":" & Err.Description
    Exit Function
  End If
  GetError = False
End Function

2017年1月21日土曜日

win10からメモリを100MBくらい開ける

win10のパソコン仕入れたけど全然全くメモリに余裕がないよ!って感じのまとめ。
その1
以下のフォルダにメモリが若干食われるコルタナちゃんとウィンシェルちゃんがいる。

C:\Windows\SystemApps\
Microsoft.Windows.Cortana_cw5n1h2txyewy
ShellExperienceHost_cw5n1h2txyewy

こいつらが地味にメモリ食うので止める。
・コルタナちゃん
30~60MB:止めるとwin内での検索ができなくなるけどそれくらいしかデメリット無い
・ウィンシェルちゃん
30MB:止めるとwinボタンが無効になる。デスクトップにシャットダウンとかのショートカット置くなりして対策するか緊急用としてじゃね。

その2
60MB近く食うwindows defenderなるものがいるけど、これは別のアンチウイルスソフト(Avastとか)入れれば消えてくれる。Avastちゃんは25MBくらいなのでまあまあまあ。

その3
「dwm.exe」というのが地味にメモリを食っていく。一応どっかの時計みたいに延々とメモリリークするわけではない。
溜まってたらキルして一旦メモリを吐き出して貰おう。コマンドプロンプトだと以下の感じ。
taskkill /F /IM "dwm.exe"


最後に
全部やると100MBくらい空いてくれる。
これとは別にちゃんとメモリークリーンもしようね。

2016年11月20日日曜日

WACOMのMobileStudioPro13And16の体験感想

もばぷろ13
もばぷろ16:通称「でかい神」
行ってきました、行ってきました、そこそこですけど楽しかったです。
1時間ほど体験しました。
その中で純粋にお絵かきしたり、
プロダクトとして4Kとか視差とかどんな感じなのかを見たりしました。

性能とか気にせず、お絵かき道具として扱った時。
感想としては、かなり自然にお絵かきできる、という印象を受けました。
今回はWACOM側の設定そのまま、
つまり、画面の拡大率を150%の状態で16を、拡大率125%の状態で13を触ってきました。
ソフトはAdobeの写真屋さん。裏にはクリスタが。
うん、前と変わらずSAI入れてこないのな(SAI信者)
まあそこは我慢して、写真屋でぺたぺたとイメージラフを描いていました。
ていうか写真屋は直感的なお絵かきには適さねえよ、あれか?モバプロに写真入ったSDカードぶっ刺して写真編集しろと?たぶん中にはそういうことをしそうな奴もいるような気がするけどそんなの予測的にも結果的にも少数で、大多数はお絵かきしに来てんだよ。そうでもなけりゃ性能チェックだよ。いい加減わかってよ体験版入れるだけでいいんだよSAIの体験版。
そして生まれてしまったのがしたの感じ
その1:不死性ちゃん
その2:下から角生えるちゃん
完全に趣味の領域で描けるかなーっていう感じですけどそれはおいときます。

色味に関してですが、
チェックしてません、分かりません。
まあーでも公式で
MSP16:AdobeRGB94%(実は13よりちょっと下)
MSP13:AdobeRGB96%
って言ってるので信じよう。

視差に関してですが、
13HDと比べると、目視でガラス厚さが1/2程度減ってました。これ定量。
そして、定性的な視差ですが、殆どありません。逆に、ほんのちょっとあります。
感覚的に言うとそんな感じです。
そんで、そのほんのちょっぴりある視差ですが、普通にお絵かきしにきた感じですと、
結構自然な感じです。正直、いつもの角度でお絵かきしている分に、ほんのちょっとしか
視差は感じられませんでした。すこしお絵かきに集中すれば全く気にならなくなりました。
ただ、真横からガラスの厚みを見るという意外な使い方をすると視差は気になりますね。うん。みんなもそんな使い方しないようにね。

筆圧に関してですが、
チェックしてません、分かりません。
ただ、筆圧チェッカーなるものがありました。私はごく普通にイメージラフの感覚でお絵かきし、
平均2400最高3200程度の値がでました。
他の人の平均は3500~4500で、最高は5000とか6000とか出てました。うわっ…私の筆圧 、低すぎ…??
この量の観点から申し上げますと、これを4分の1にすると、今までどおりの値となります。
私は600~800ですね。では、この間わずか200。正直、普通にやってちゃ気づかないと思いますが、
塗りに関してアナログ感を出す、本当に微妙な感じを出すには、この数値帯でアナログ感をだす演算を行う、
そういう感覚で足りるかというと、正直足りないですね。
思うにワコムちゃんは、技術的な視点から見ると微妙なこの数値帯を2倍の2倍に広げようとしたのではないかと、今妄想しました。
筆圧レベルの補正に関しても非線形に補正した時の数値のジャンプが低くなるようにしたかった?
それはおいといて、筆圧4倍になりましたが、正直体感できません。私的には1024で十分。

筆圧による画面のゆがみに関してですが、
圧倒的にゆがんできました。私が力入れて描いている時、液晶モニターのあの波紋がでてくるでてきます。
13HDのときじゃ相当力入れない限り出てこないのに、MSP16ちゃんは少し力入れて線引いただけで波紋がでてくる。
やはりガラスを薄くした弊害が!みたいな事を感じました。意外と視差問題は解決は難しいですね。
でかい面積にガラス張れば、中央付近は圧力に弱いので、ガラスを厚くしなくちゃいけないんですね。
スマホやタブレットみたいに面積が小さければ薄くしても圧力に対する耐性はある程度残るので、薄くできる。
そもそもおさわり禁止ならめいいっぱい薄くしてもいいわけですね。どうでもいいですね。

タッチ機能に関してですが、
手袋してください。今はもう各社で安くお絵かき用の手袋売ってるのでそれつけてください。
どうしても手袋買いたく無いならタッチ機能はoffにしてください。結構誤爆します。
私はいつも使っている手袋を持って行きましたのでキーボードが無いという超絶ヤバイ環境下でも
タッチ機能を駆使して拡大縮小、移動に回転やってしのぎを削っておりました。
結構便利です。ていうかワコムちゃん、エクスプレスキーリモート、どうしたんだい?何で無いんだい?


感想書いてから1.5h経過したので、
長くなるので今日はここまで。



おまけ

キーホルダー見てからめっちゃ思ってたんだけど、
本当にめっちゃ神姫サイズですよこれ!
キーホルダーは神姫にベストサイズ