2013 05 21

数が気になる

横浜市は、保育園の待機児童ゼロを達成したのだそうだ。

テレビのニュースでもやっていたのだが、その中でちょっとびっくりしたのが、親はまず近場の保育園に連れて行き、そこから遠くの保育園まで今度は保育園側がバスで移動させるって方法だった。 これだと確かに親の負担は少ないだろうし、人が減っている地域と増えている地域とでの調整もやり易いだろう。

子供が保育園で急に病気になったときにどうするかが課題かなと一瞬思ったが、考えてみれば、子供の病気に対して親が近くにいられるかどうかなんて、気分の問題でしかないんだよな。 病気の対応は医者がするんだし、親よりも病院が近くにあることの方が大切だろう。

ところで、これって正攻法のみで100%解消したんだろうか。 役所がこうした数字を発表するときって、都合の悪いものをこっそり除外したりするからね。 待機児童の定義を変えたりしてないか、ちょっと気になるところだな。

+

いつの間にかディスクの残り容量が減っていて、何がディスクを食っているのかを調べたい時がある。 それがWindows環境だとサイズを指定して検索となるのだが、何故かちょくちょく失敗して、大きなファイルがあるのに検索結果としてヒットしないことがある。 いや、ファイルのサイズに関係無く、そこにあるファイルがヒットしないことがある。 インデックスの再構築を定期的にやっていて、最終更新に間に合わなかったファイルが無視されているのだろうか。 もっとしっかりして欲しいものだが。

と、Windowsの不甲斐無さを嘆いていてもしょうがないし、調査は急がなければいけないし、ということでフォルダのサイズ(=フォルダの中にあるファイルサイズの合計)を一覧出力するスクリプトをWSH用に作ったことがある。 確か一昨年だったかな。 その時は急いでいたのと、調査の範囲がはっきりしていたこととで、調査対象のフォルダをソースファイルの中に直接書いていた。

さっき、そのときのスクリプトを発掘して、さすがにこの仕様は無いとちょっと反省。 ファイルや出力形式をいちいちソースを書き換えなくても指定できるようにしてみた。

FolderSizeList.hta

<!DOCTYPE html> <html> <head lang="ja"> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=10" /> <meta http-equiv="MSThemeCompatible" content="yes" /> <title>フォルダーサイズ一覧出力</title> <style type="text/css"> * { margin : 0; padding : 0; font-family : sans-serif; font-size : 14px; } table { margin : 2em auto; } td { padding : 0.3em 0.5em; } input { font-family : monospace; padding : 0.2em; } </style> <script type="text/javascript"> function selectFolder() { var shell = new ActiveXObject( "Shell.Application" ); var folder = shell.BrowseForFolder( 0, "サイズ一覧の取得元となるフォルダ", 1 ); if ( folder ) { document.getElementById( "folder" ).value = folder.Items().Item().Path; } } function getFolder() { var folder = document.getElementById( "folder" ).value; if ( folder ) return folder; throw "ERROR : フォルダは必須"; } function getDepth() { var depth = document.getElementById( "depth" ).value; if ( depth.match( /^\d+$/ ) && depth > 0 ) return depth; throw "ERROR : 階層は数値で1以上"; } function isFullPath() { return document.getElementById( "fullPath" ).checked; } function getLogFileName() { var date = new Date(); return "folderSizeList_" + date.getFullYear() + to00( date.getMonth() + 1 ) + to00( date.getDay() ) + to00( date.getHours() ) + to00( date.getMinutes() ) + to00( date.getSeconds() ) + ".txt"; function to00( no ) { return no < 10 ? "0" + no : no; } } function getWriter( fso ) { var log = fso.CreateTextFile( getLogFileName() ); return { close : function () { log.Close(); }, write : isFullPath() ? function ( folder, depth ) { log.WriteLine( folder.Path + "\t" + getSize( folder ) ); } : function ( folder, depth ) { log.WriteLine( getIndent( depth ) + folder.Name + "\t" + getSize( folder ) ); } }; function getSize( folder ) { try { return folder.Size; } catch ( e ) { return "forbidden"; } } function getIndent( depth ) { return ( new Array( depth + 1 ) ).join( " " ); } } function output() { try { var fso = new ActiveXObject( "Scripting.FileSystemObject" ); var writer = getWriter( fso ); listup( fso.GetFolder( getFolder() ), 0, getDepth(), writer ); writer.close(); alert( "fin" ); } catch ( e ) { alert( e ); } function listup( folder, depth, maxDepth, writer ) { writer.write( folder, depth ); if ( depth < maxDepth ) { for ( var folders = new Enumerator( folder.SubFolders ); !folders.atEnd(); folders.moveNext() ) { listup( folders.item(), depth + 1, maxDepth, writer ); } delete folders; } } } </script> </head> <body> <table> <tbody> <tr> <td> <input type="text" id="folder" size="70" maxlength="256" ondblclick="selectFolder()" placeholder="調査対象フォルダ(ダブルクリックすれば選択ダイアログを表示)" /> <label>以下を</label> </td> </tr> <tr> <td> <input type="text" id="depth" size="2" maxlength="2" value="3" /> <label for="depth">階層まで</label> </td> </tr> <tr> <td> <input type="checkbox" id="fullPath" /> <label for="fullPath">フルパスで</label> </td> </tr> <tr> <td> <input type="button" value="出力" onclick="output()" /> </td> </tr> </tbody> </table> </body> </html>

実行すると、自分と同じ場所にファイル folderSizeList_実行日時.txt を作って結果を出力する。

一部のフォルダは何故かサイズの取得が許可されないので、その場合はサイズの替わりに forbidden という文字列を返している。 一つ下に行って、フォルダーとファイルのサイズを合計して、と強引にやっても良かったのだが、最後までサイズ取得が禁止されてる場合を想像して虚しくなって止めた。

しかし、なんでまたサイズの取得だけを禁止するんだろう。 サイズよりももっと他に隠すべき情報がありそうなものだが。 この機能の開発者が、職場のパソコンにこっそりエロ動画でも溜め込んでたんだろうか。

UIはhta。 htaってあんまり流行ってないけど、GUIがHTMLで簡単に実装できるのは便利だよな。 IEに縛られるのが欠点だけど、IE9か10がインストールされていればそっちをエンジンとして指定することもできるし、今時そう問題にはならないだろう。 HTML5 への対応はもっと進んで欲しいけど、この辺りは、まあ Microsoft だし、ねえ。