Posted on 2010/03/08, 22:32, by sasakima-nao, under
Windows.
久々に Windows 7 を使っております。
ところで Opera を 10.50 に上書きしたらステータスバーが何か変だった。
って表示倍率とか画像表示とか以前あったカスタムボタンは消してくれないのね!
2 つもいらないよ、右クリックメニューから「標準の状態に戻す」をやって正常に戻す。
それとキャッシュの位置なんだが

おいおい、いつのまにかサブディレクトリを作るようになったんかい!
しかも tmp といういらない拡張子まで付いていやがる。
ぱぇぽぃ2 ? Blog Archive ? Windows 7 FLV and MP4 From Opera Cache
コレをやるには書き換える必要があるな、ついでに .tmp を取っ払うように。
5#-*- coding:utf-8 -*-
"""
opera_youtube.py
flv and mp4 Copy from Opera Cache
for Opera 10.50
"""
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 Directrys
dirs = Directory.GetDirectories(cache_dir)
for dirc in dirs:
files = Directory.GetFiles(dirc)
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)[:-4])
File.Copy(f, newfile)
# MPEG-4 Check
fs.Seek(4, SeekOrigin.Begin)
barray2 = Array.CreateInstance(Byte, 8)
fs.Read(barray2, 0, 8)
#if FLV.Equals(barray) is no!
if array_equals(MP41, barray2) or array_equals(MP42, barray2):
newfile = "%s\\%s.mp4" % (copy_dir, Path.GetFileName(f)[:-4])
File.Copy(f, newfile)
fs.Close()
よしよしコレなら上手くいく。
でもそういえばキャッシュからの移動って今年から違法になったんだっけ?
著作権違反でも何でもないではない可愛いヌコの動画とかでも関係あるんかいな…
というかよくよく使ってみたら 10.50 ってアホみたくレンダリングが早いわ。
Linux でも地味に Snapshot 版を使っているけど早く日本語入力に対応してくれい!
最近の Linux で GNOME ならばデフォルトで C# のコンパイルが可能。
Mono が入っている環境であれば必ず gmcs があるからである。
と以前書いたけど実は Windows 7 も可能だったりします。
C:\Windows\Microsoft.NET\Framework64\v2.0.50727
を Explorer で開いてみて、32bit の人は 64 を外してください。

csc.exe という C# コンパイラがあるのが解ります。
つまりコンパイルするファイルが一つであればこうやればいいわけです。
C# コードは BOM 付き UTF-8 で保存してくださいね。

フルパスを打ち込むのが面倒であればパスを通しておきましょう。
これで csc と打ち込むだけでパス指定しなくてもコンパイルが可能になる。

コマンドラインオプションのサンプルは MSDN にあります。
csc.exe を使用したコマンド ラインからのビルド
又、MSBuild を利用したコンパイルも普通に可能です。
幸い私は SeeMe をオープンソースにしているのでコイツで実験してみます。
SeeMe は現在 .NET Framework 3.5 でビルドしているので v3.5 の MSBuild.exe を使う。
コレに SeeMe4.sln というファイルを渡します。

なんかエラー?が出るけどしばらく待っていると SeeMe4.exe が出来上がってしまった。
SDK なんかインストールしないでもビルドできちゃうんですね、自分で驚いたよマジで。
MSDN に細かい解説が日本語であるけど手書きは少々辛いかも。
MSBuild
無償版 VC# が存在する今だけどこんな方法で何もインストールしないで遊べるよ。
開発環境をインストールだけやってプログラマー気取りの人を笑ってあげましょう。
実は .NET Framework 3.5 導入済みなら Windows 7 である必要は無いんですけど…
Vista より前てか XP では .NET が遅すぎて使わないだろうしやはり 7 を進めておくよ。
たった 1.2GB の CULV ノートでも快適に .NET が動きますので。
Posted on 2010/01/11, 22:22, by sasakima-nao, under
Windows.
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」が公開
Aspire AS1410 をもっと便利に使いたい。
以前書いたが CULV ノート用に Bluetooth マウスを買った。
せっかくこのマシンには Bluetooth が標準装備なのでということで。
私は今まで Logicool 製マウスしか使ったことが無いので迷わずコレに決めた。
価格.com には再起動で Bluetooth 接続を認識しないとか見かけたがそんなことはなかった。
しかし正直買った直後このマウスを選んだのは失敗だと思った。
なんかやたらマウスカーソルの移動速度が早い、調節するとタッチパッドが逆に遅すぎる。
高速スクロール機能のせいでホイールクリックが使えない、今までと操作感が違う。
その高速スクロールのおかげでスクロールがやたら使いにくい。
せっかく買ったんだからなんとかしたい。
ということで今まで単に Bluetooth 認識させただけだったけどドライバーを入れてみた。
外付け CD-ROM はまだ手に入れていないので公式からダウンロードする。
Bluetooth® Mouse M555b
の「サポート」をクリック、Opera では中ボタンクリックしか認識しない…
するとダウンロードページへのリンクが見つかった。

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

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

おぉマウスのポインタスピードが別個で調節できるようになった。
タッチパッドは以前の速度に戻してと、それだけで一気に使いやすくなった。
他 SetPoint でマウス電池の残量も確認できる、高速スクロールの量も調節できる。
今更だがこういうドライバ統合ユーティリティは入れておくべきだ本当に。
ところで高速スクロールの件だが…
マウスホイールを強くクリックすればノッチ動作と切り替えできると今更知った。
Bluetooth® Mouse M555b
書いていないんですけど…
切り替えしてみたらホイールの不満はアッサリ解決、今まで何をやっていたのだ?
つまり普段はノッチ動作で使う、イザ高速に動かしたい時は切り替えすればいい。
なんだよ、そっちのほうが断然イイジャン!
ホイールクリックについては改めて考えるとそのほうが不自然だと今更思う。
デスクトップの Linux で使っているマウスもこのタイプに変えようかな?
つかマウスポインタ速度を遅くするとなんだか画面が広く感じるようになった。
やっぱり 11.6 型は画面が狭いなぁと思っていたけどそれはマウスのせいだった。
人間の感覚って我ながら本当にいいかげんです。
Windows 7 を Linux の GNOME のように便利に使いたい、その2。
Windows でスクリプトを使うのに Linux に比べ何が不便なのか。
書くまでも無い、実行パーミッションという概念が無いこと。
すべてが拡張子による関連付けで決まってしまうこと。
特に普通の Python はインストールで *.py に関連付けられるので悲惨。
ファイルをうっかり W クリックすると無意味に cmd.exe コンソールが出る。
ま、インストールする気は無いけど、Windows では何の約にも立たない。
Windows 版 Python はその辺りを考えてか Pythonw という exe が同根されている。
コンソール不要なら拡張子を *.pyw にすればいい、だけどそれだけだ。
何より Windows ではコンソールなんてほとんどの人が使わない。
IronPython にも同様に ipyw(64) という exe が同根されている。

しかしよく考えてみれば私の Y901x や SeeMe も実行パーミッションは付けていない。
同根のシェルスクリプトからメインファイルを Python に引渡しているだけ。
ならば ipyw64.exe を利用して同じようにすればいいんでないの?
ということで考えた。
*.py をテキストエディタに関連付け
*.pyw を ipyw64.exe に関連付け(私の Windows 7 が 64bit なので)
というくだらない方法だがこれで Linux で Python を使っている時と同様に使える。
実行はシェルスクリプトの変わりに ipyw64.exe にやってもらおうという考え。
main_window.py
# -*- coding: UTF-8 -*-
import clr
clr.AddReferenceByPartialName("PresentationCore")
clr.AddReferenceByPartialName("PresentationFramework")
clr.AddReferenceByPartialName("WindowsBase")
from System import *
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Media.Imaging import *
class PicViewWindow(Window):
def __init__(self):
self.Title = "PicView"
self.Drop += self.on_drop
self.AllowDrop = True
self.Width = 300
self.Height = 300
self.image = Image()
self.Content = self.image
def on_drop(self, sender, e):
filename = e.Data.GetData(DataFormats.FileDrop)[0].ToString()
self.image.Source = BitmapImage(Uri(filename))
def main():
Application().Run(PicViewWindow())
if __name__ == "__main__":
main()
picview.pyw
import main_window
main_window.main()
という2つのファイルを用意し上記関連付けを行っておく。
picview.pyw を W クリックしてみる。

ということができる。
main() という関数を用意するのがミソ。
debug 時は EmEditor 等テキストエディタの機能で以下のように実行できるから。
ぱぇぽぃ2 ? Blog Archive ? EmEditor を Gedit 風にカスタマイズ
これでコードを編集したい時は *.py 実行時は *.pyw を W クリックという環境完成。
アイコンが違うので解りやすいしこのほうがコード分割も行いやすい。
ただ OS デフォルト動作では無いので配布に関してはどうするかだ…