Windows7」タグアーカイブ

Windows 7 の PowerShell で遊んでみる

IronPython は楽しくて最高だけど Windows にデフォルトでは入っていない。
基本として OS デフォルト状態で動かせるアプリしか配布したくない私には少々問題だ。
アプリ配布で「まずコレを入れてくれ」ではアレほど馬鹿にしていた VB6 以前とカワンネ。

そうだ、Windows PowerShell という手があった。
Windows 7 ならデフォルトで入っているじゃないか。

地味に利用はしていたのだが、cd コマンドで移動して

rm *.zip

とかやって ZIP ファイルをまとめて削除したり kill コマンドを使ったりetc…
Linux と Windows を併用しているとソレが普通に、同じコマンド名が使えるところが嬉しい。
つか cmd.exe のコマンドなんてほとんど知らない…

しかし PowerShell はもっと強力で .NET がほぼフルで使えウインドウも造れるはず。
文法がイマイチ好きになれなかったけどもう少し突っ込んだ使い方をしてみよう。
検索すれば日本語での情報も IronPython よりは多い。

そういえば PowerShell では文字列のリダイレクトはどうなるのだろう?

echo あ > a.txt

は cmd.exe では当然のように Shift-JIS だが PowerShell では BOM 付き UTF-16LE に。

やっぱり文字列は UNICODE なのか、リダイレクトでは UTF-8 にはならないんだね。
リダイレクトするとUnicodeで出力されるとは… – もにっき
これだから内部と local が違う変態 OS は困る…

起動オプションは cmd.exe で以下を打ち込めば echo される。

powershell -?

ヘルプによると *.ps1 を読み込むにはフルパスか ./ 指定が必要。
まぁこれは bash でも同じなんだが、しかしやたら親切なエラー表示だなぁ。

PowerShell は通常 Multi Thread Apartment で起動する。
クリップボードとか STA(Single Thread Apartment) 属性が必要な場合は以下で起動。

powershell -sta

そうすると

[void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.Clipboard]::SetDataObject("ほげ")

等ができる、-sta 指定しないとエラーになる、つまり WPF の利用なんかでも必須。
Windows PowerShell ISE から利用すれば自動で STA になるけど…

beep 音を鳴らす方法は何故か日本語で見つからなかった。

[console]::Beep()

音がショボイ、コッチのほうがいいかも

[System.Media.SystemSounds]::Beep.Play()

ここまでやって気が付いたけど…
*.ps1 ファイルを作ってもコンソールを出さないで利用する方法が無いみたい。
GUI を使うには物凄く向いていない、IronPython の代わりに使うのは無理かと。
やはりコイツはサーバー管理者向けですわ、まぁ何か思いついたら利用するべ。

よさげなサイト
PowerShell FAQ

こんなのもあるんだよね。
窓の杜 – 【NEWS】「PowerShell」v2の機能を拡張するモジュールパック「PowerShell Pack」が公開

Logicool Bluetooth Mouth

Aspire AS1410 をもっと便利に使いたい。

以前書いたが CULV ノート用に Bluetooth マウスを買った。
せっかくこのマシンには Bluetooth が標準装備なのでということで。
私は今まで Logicool 製マウスしか使ったことが無いので迷わずコレに決めた。

価格.com には再起動で Bluetooth 接続を認識しないとか見かけたがそんなことはなかった。
しかし正直買った直後このマウスを選んだのは失敗だと思った。

なんかやたらマウスカーソルの移動速度が早い、調節するとタッチパッドが逆に遅すぎる。
高速スクロール機能のせいでホイールクリックが使えない、今までと操作感が違う。
その高速スクロールのおかげでスクロールがやたら使いにくい。

せっかく買ったんだからなんとかしたい。
ということで今まで単に Bluetooth 認識させただけだったけどドライバーを入れてみた。
外付け CD-ROM はまだ手に入れていないので公式からダウンロードする。

Bluetooth® Mouse M555b

の「サポート」をクリック、Opera では中ボタンクリックしか認識しない…
するとダウンロードページへのリンクが見つかった。

mouse_driver

Windows 7 用はまだ無いの?まぁ Vista 用でいいだろう。

setpoint64bit

しっかり 64bit 用もあるね、ドライバーについては WOW64 とはいかないわけで。
64bit 用を落としてインストール、「テストされていない OS 」とか出るけど無視。
んでお約束の再起動、Bluetooth 認識のやり直しを行う必要があった。
Vista 用で問題なく動くようである、やはり Windows 7 は只の Vista 改ですね。

mouse_speed

おぉマウスのポインタスピードが別個で調節できるようになった。
タッチパッドは以前の速度に戻してと、それだけで一気に使いやすくなった。

他 SetPoint でマウス電池の残量も確認できる、高速スクロールの量も調節できる。
今更だがこういうドライバ統合ユーティリティは入れておくべきだ本当に。

ところで高速スクロールの件だが…
マウスホイールを強くクリックすればノッチ動作と切り替えできると今更知った。

Bluetooth® Mouse M555b

書いていないんですけど…
切り替えしてみたらホイールの不満はアッサリ解決、今まで何をやっていたのだ?
つまり普段はノッチ動作で使う、イザ高速に動かしたい時は切り替えすればいい。
なんだよ、そっちのほうが断然イイジャン!

ホイールクリックについては改めて考えるとそのほうが不自然だと今更思う。
デスクトップの Linux で使っているマウスもこのタイプに変えようかな?

つかマウスポインタ速度を遅くするとなんだか画面が広く感じるようになった。
やっぱり 11.6 型は画面が狭いなぁと思っていたけどそれはマウスのせいだった。
人間の感覚って我ながら本当にいいかげんです。

Windows 7 の Explorer で FTP は快適

Windows 7 を Linux の GNOME のように便利に使いたい。

既に EmEditor を導入し Gedit 風にカスタマイズしている。
Tab キーでスニペットが挿入できるようになった v9 は本当にありがたい。

IronPython を導入し Python と PyGtk の代わりに使っている。
普通の Python じゃとにかく何をやるにも別個モジュールが必要になってアホクサイ。

Linux で Python が糞便利な理由は全てディストリビューションのおかげ。
必要になりそうなモジュールを最初からまとめて入れてくれているからである。
IronPython なら .NET Framework が使えるから別の何かが必要になる場合はほぼ無い。
もう少し DLR の初期化が早ければなぁ…

次は Explorer をなるべく Nautilus のように使いたい。
Nautilus も Dolphin も本当に便利だ、なにより FTP 接続が簡単である。
Explorer は…と思っていたけど調べてみたら実は超簡単だった。

ここ (sakura) であれば

ftp://ユーザー名@wwwサーバー番号.sakura.ne.jp/www

をアドレスバーに打ち込むだけ、実は Vista でも同じ。
パスワードを保存も可能だけどセキュリティ面でやらないほうがいいかと。

ftp_login

パスワードを打ち込んで Enter すれば普通に接続完了。
後はそのままローカルのファイルのようにドラッグアンドドロップ可能。
右クリックメニューのプロパティからパーミッションも変更できるようだ。

ftp_setting

最ログインが必要になったら「ファイル」メニューから「ログイン方法」を選択。

ftp_relogin

それだけでは毎回打ち込みが必要で不便なので「お気に入り」に追加する。
「お気に入り」を右クリックして簡単に登録できます。

ftp_explorer

サーバー番号と実ユーザー名は一応塗りつぶしました。
これが何故か Vista ではできない、コピー動作になる…
以後はお気に入りからクリックするだけで簡単 FTP クライアントに。

もう Windows 7 では
「君もしかして FTP ソフトなんか入れているの?ププッw」
になってしまいました。

他 Windows 7 日本語版の Explorer はデフォルトで LHA の解凍が可能になった。
でも作成はできない、つか個人的には tar.gz に対応してほしい…

ついでに。
このスクリーンショット加工に mspaint.exe を使っているんだが意外に使いやすい!
PrtSc で mspaint に Ctrl+V で普通にスクリーンショットの大きさな画像ができる。
実際 Gimp も一部加工程度でしか使わないのでペイントソフトはコレで十分かな。

個人製作オンラインソフトの廃れ具合は加速するばかり…

Visual Studio x64 build test

時間が掛かりすぎるので休日にしかできない仮想 Vista 構築の続き。

前回はただ OS のインストールだけで終わったので Vista に SP を当てないと。
Windows Update では自動で当ててくれないのが忌々しい。

sp1 を当てないと sp2 が当てられないのね、面倒すぎ。
4 時間使ってやっと両方が終わったところで IE8 への自動更新が出る。
一度にやってくれよ、何回再起動させればいいのやら…

やっと Visual Studio をインストールする環境が揃う。
インストール DVD を立ち上げ今回は忘れずに「すべて」を選択。

vs_all

やっぱり一時間半掛かって、んで一時間使って MSDN ヘルプを入れて…
そして sp1 にするのにまた一時間半と、更に Update が掛かって…
そして今回も丸々一日使うはめになったとさ。

あーもうなるべくコイツは使いたく無い、Visual Studio 専用 OS にしよう。
FTP ができないと困るがこれでやればイイや。

[IE]Internet Explorer で FTP サイトのパスワードを入力する方法

Explorer のエディット部にコレやればとりあえずファイル転送はできるのよね。
パーミッション変更とかはできるはずがない、それらはホストの Mandriva からやる。
パスワードに記号とか入れている人は URI 変換をお忘れなく。
でも何故か Windows 7 ミニノートからではできない…

とにかく minipoli のソースを落として実験だ。
Visual Studio 起動、初回は遅いけど二回目以降は起動が早いというより一瞬。
仮想 OS になっても Vista の SuperFetch は完璧である。
でなきゃ困る、だから XP も 7 も持っているのに Vista を使うんだから。
7 の SuperFetch は効きがイマイチなんだよなぁ…

select_x64

「すべて」を選択したので今回はしっかり x64 の選択肢があった。
ソースコードはまったく弄くらずに minipoli をビルド、何事もなくビルド完了。
ちょっと拍子抜け、本当に 64bit 用にビルドされたのかな?
実験で 32bit であるこの Vista で使ってみる。

minipoli64.zip

32bit_test

わーい 64bit ですってエラーになった!
次に x64 Windows 7 であるミニノートに持っていき試す。

64bit_test

あたりまえのように動く、マジでコードは一行も変更しないで済みそうだ。
後は 64bit 用インストーラを作成すれば minipoli の x64 化は完了。
それがやりたいだけの為に二回も休日を全部使ってしまった…
好きでやっているのだから別にイイのだが。

OSASK 公開停止か? – スラッシュドット・ジャパン

いやいや、皆が何を言いたいかよく解るなぁ。
開発者が望んでいるようなユーザーが一人でもいるなんて奇跡に等しい世界ですから。
情報公開もオープンソースも自己満足、それでいいじゃない。

Windows 7 FLV and MP4 From Opera Cache

Windows 7 は本当に Aspire Timeline 1410 で十二分に快適である。
すっかり気に入って Bluetooth のマウスまで買ってしまった。
Youtube 等の Flash アクセラレーションが効くのが Ubuntu 9.04 より素敵。

Ubuntu 9.10 リリース – スラッシュドット・ジャパン

9.10 は評判悪いな、512MB 超のファイルで破損する可能性って怖すぎる。
デスクトップの Linux は明後日以降にアレが出るまで放置てか様子見。

と思っていたけどやはり Linux ばかり使っていると Windows が少し不便だ。
端末操作がどうのは文化が違うのでどうとか言わない。
だけどスクリプトで定形作業を簡単に済ませるとかをやりたいじゃない。。

ぱぇぽぃ2 ? Blog Archive ? FLV and MP4 From Opera Cache

コレができないとか、Windows で GnomeVSF を呼び出せるはずが無いし。
よし、コレと同じことができる IronPython スクリプトを作ってみよう。
IronPython は Windows SDK 等をインストールせずに .NET が使えるから素晴らしい。

ちなみに 7 及び Vista での Opera10 キャッシュは以下にある。

C:\Users\(UserName)\AppData\Local\Opera\Opera\cache\

とりあえず GnomeVFS がどうやって FLV や MPEG-4 を見分けているか調べる。
ま、FLV は先頭バイナリ 3 バイトが FLV で始まっていると解っているけど。

/usr/share/mime

を開いて video/mp4 な Mime Types を探す。
nano から開けば普通にテキストとして確認できるようだ。

mpeg4bin

んーイマイチ解らないので GHex でも MPEG-4 ファイルを開いて確認。
とにかく 5 バイト目以降に ftypisom か ftypmp42 が続いていれば MPEG-4 ってことね。
それならこうしてみよう。

#-*- coding:utf-8 -*-

"""
    opera_youtube.py
    flv and mp4 Copy from Opera Cache
"""

from System import *
from System.IO import *

FLV  = Text.Encoding.UTF8.GetBytes("FLV")
MP41 = Text.Encoding.UTF8.GetBytes("ftypisom")
MP42 = Text.Encoding.UTF8.GetBytes("ftypmp42")

# Cache Directory Name
local_dir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
cache_dir = local_dir + r"\Opera\Opera\cache"

# Copy Directory is Other
copy_dir = r"C:\Users\sasakima-nao\Documents\_temp"

def array_equals(a, b):
    """
        System.Array valus Equals Check Function
    """
    result = True
    n = len(a)
    for i in range(n):
        if a[i] != b[i]:
            result = False
            break
    return result

# Get Opera Cache FileNames
files = Directory.GetFiles(cache_dir)
# roop
for f in files:
    fs = FileStream(f, FileMode.Open)
    # FLV Check
    barray = Array.CreateInstance(Byte, 3)
    fs.Read(barray, 0, 3)
    #if FLV.Equals(barray) is no!
    if array_equals(FLV, barray):
        newfile = "%s\\%s.flv" % (copy_dir, Path.GetFileName(f))
        File.Copy(f, newfile)
    # MPEG-4 Check
    fs.Seek(4, SeekOrigin.Begin)
    barray2 = Array.CreateInstance(Byte, 8)
    fs.Read(barray2, 0, 8)
    if array_equals(MP41, barray2) or array_equals(MP42, barray2):
        newfile = "%s\\%s.mp4" % (copy_dir, Path.GetFileName(f))
        File.Copy(f, newfile)
    fs.Close()

get_cache_file

たったこれだけのスクリプトで 6 時間も掛かった、やっぱり .NET は面倒くさい。
まず IronPython で System.Byte[] を作成する方法を見つけるのに苦労した。
それに System.Byte[] は内容を Equal で比較できない、かなり悩んだ。
Nautilus のように Explorer から呼び出しできれば更にイイんだが無理。

てか普通の Python で作ったほうが楽だったかな?

もっと効率が良いコードがありそうだけど動いたからいいや。
正規表現なんかを使って少し改造すれば色々と応用も効くかも。