Results for category "Windows"

Windowsとコマンドのみで戦う

1. OS標準で入っている知られざる便利コマンド

C:¥WINDOWS¥system32以下にあるexeやvbsを物色するとよい。

ただし、まともなアイコンがついているのはGUIツールなので使ってはならぬ。

加えて、まともなアイコンがついてないからCUIコマンドだろうと思ってコマンド+引数を叩くと、結果がGUIのダイアログで出たりする地雷が仕掛けられているので気をつけろ。

 

2. 古いWindows Serverの場合、超絶便利なオフィシャルツールが標準で入っていない。

OSのディスクを探すか、MSのダウンロードセンターでResource kitとかで検索するとよいだろう。

はじめっから入れとけよって話だ。

 

3. だから、はじめっから入れとけよって本気で思った Windows Sysinternals

どんだけ認知されてるのこれ?

 

4. パッケージマネージャがほしいか?

Chocolatey

 

5. ツールでできない事もいっぱいあるよな

reginiコマンドでレジストリを書き換えろ。

 

6. それでも無理ならばCUIプログラムを書け

ちなみにプログラム書くときにメモ帳とか秀丸とか使ったらあなたの負けだ。

Vimを入れろ

IIS5+レガシーASPでメモリを食いつぶす

IIS5+レガシーASPが稼動しているサーバで、SQL Serverをつついて結果を返すアプリが正常に表示できない障害が発生した。
原因は未だ不明だけど、以下のASPを動かすとDLLHOSTの実メモリ、仮想メモリを食いつぶした後、inetinfoが同様にメモリを食いつぶす事象が発生した。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%
On Error Resume Next
 
Dim file
Dim objFSO
Dim objTS
Dim line
 
file = "ここで存在しないファイルパスを指定する"
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile(file, 1 , True)
 
Do Until objTS.AtEndOfStream = True
    line = objTS.ReadLine
    Response.Write(line & "<br>")
Loop
 
objTS.Close
Set objTS = Nothing
Set objFSO = Nothing 
%>

ファイルの存在チェックを行ってループに入る前に終了させれば回避できるが、こういったASPがどっかに眠っているのだろうか。
IIS5のメモリリーク防止パッチを適用しても改善されなかった。

RoboCopyのGUI版「RichCopy」

かれこれ10年以上稼動しているWebサーバのファイルをバックアップするために、MediaKeeperというソフトを使っていた。

メモリ512MBの環境でミラーリング完了するのに17時間もかかっていたのに、MicrosoftのRobocopyにしてから10分に短縮され、全米が泣いたわけですが、そのGUI版「RichCopy」が出てた。

RoboCopyは多機能すぎてオプションが複雑だったけど、RichCopyはかなり分かりやすくてよいです。

[Perl]PerlからExcelのグラフを作る

サンプルグラフ

サンプルグラフ

アクセス解析の専用ソフトなんて高くて買ってもらえないので、Excelでやる夫。
Win32::OLEを使ってVBAをPerlに置き換えていく感じで作っていく。
ちなみにSJISでソース書かないと日本語化けます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
use strict;
use warnings;
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Excel';
use Win32::OLE::NLS qw(:DEFAULT :LANG :SUBLANG);
 
my $excel = Win32::OLE->new('Excel.Application');
$excel->{'Visible'} = 1;
my $workbook = $excel->Workbooks->Add();
my $worksheet = $workbook->Worksheets(1);
 
# 列名
$worksheet->Cells(1,1)->{Value} = 'URI';
$worksheet->Cells(1,2)->{Value} = 'PV';
 
# データをハッシュで作る
my %pageview = (
'index.html' => 100,
'foo.html' => 84,
'bar.html' => 20,
'hoge.html' => 55,
'fuga.html' => 75,
);
 
# 2行目からデータを入れていく
my $row = 2;
while (my ($uri, $pv) = each %pageview ) {
$worksheet->Cells($row,1)->{Value} = $uri;
$worksheet->Cells($row,2)->{Value} = $pv;
$row++;
}
 
# 範囲指定して
$worksheet->UsedRange->Select;
my $range = $worksheet->Range('B2');
 
# 降順ソート
$excel->Selection->Sort({
Key1 => $range,
Order1 => xlDescending,
});
 
# グラフの設定
my $chart = $excel->Charts->Add;
$chart->Activate;
$chart->{ChartType} = xlBarClustered;
$chart->{HasTitle} = 1;
$chart->ChartTitle->Font->{Size} = 14;
$chart->ChartTitle->{Text} = 'グラフのタイトル';
$chart->{Name} = "シート名";
 
# 外枠の色
$chart->ChartArea->Interior->{Color} = 0xFFFFFF;
 
# 内側の色
$chart-&gt;PlotArea-&gt;Interior-&gt;{Color} = 0xFFFFFF;
 
# 棒グラフの枠線
$chart->SeriesCollection(1)->Border->{LineStyle} = xlNone;
 
# グラフのラベルを表示する
$chart->SeriesCollection(1)->ApplyDataLabels({ ShowValue => 1});
 
# 横棒のスタイル
$chart->Axes(xlValue)->{MajorGridlines}->{Border}->{LineStyle} = xlDot;
 
# 凡例を表示しない
$chart->{Legend}->Delete;
 
# X軸を反転(降順で表示されるようにする)
$chart-&gt;Axes(xlCategory)-&gt;{ReversePlotOrder} = 1;
 
# X軸を1つずつ表示
$chart->Axes(xlCategory)->{TickLabelSpacing} = 1;
 
# 保存して終了する場合はコメント外す
# $chart->SaveAs('C:/pv.xls');
# $excel->Quit;

グラフの種類はグラフの種類を設定する(ChartTypeプロパティ)に情報があるので、$chart->{ChartType}に目的にあったグラフを選択するとよいでしょう。

実務ではMySQLからデータ取得してたり、分析資料作るのもかったるいのでWordにグラフ埋め込んだりするのもWin32::OLE経由でやってます。怠惰ですよ怠惰。