Tag Archives: Windows

[Windows] ファイルサーバへの接続ユーザを変えよう

Pocket

Sambaサーバのセットアップをしているとき、動作確認のために、Windowsから接続することがある。
このとき、権限も確認するために、ユーザを変えて接続しようとする。
しかしWindowsは、ファイルサーバの認証を一回してしまうと、再起動するまで記憶する(たぶん)。
それはそれで便利なのだが、検証するとなると障害になる。

netコマンドを使えば、再起動なく認証をやり直すことができる。
コマンドなので、バッチ化も可能。
以下、使用例。

net useで現在、記憶している接続を表示

C:\> net use
新しい接続は記憶されます。

ステータス  ローカル名 リモート名                ネットワーク名

-------------------------------------------------------------------------------
切断                   \\192.168.0.200\share     Microsoft Windows Network
切断                   \\windowsShare\IPC$       Microsoft Windows Network
コマンドは正常に終了しました。

net use /deleteで接続を削除

C:\> net use /delete \\192.168.0.200\share
\\192.168.0.200\share が削除されました。

以下のようにすれば認証もできる。

C:\> net use \\192.168.0.200\share /user:administrator password
コマンドは正常に終了しました。

[メモ][Windows] VirtualBoxの仮想マシンからvagrantのboxを作る

Pocket

VirtualBox上の仮想マシンをvagrantのboxにする方法はありきたりだが、たいていはLinux、OS Xでの話で、Windowsでのメモはあまりない。そこでメモ。

packageの作成

VirtualBox上の仮想マシンをパッケージする。
vagrant packageの–baseオプションにVirtualBox上の仮想マシン名を与える。
なお、そのまえにUSB、サウンドは無効にしておいたほうがよい。

C:\Users\nobwak\vagrant>vagrant package --base centos64
==> centos64: Exporting VM...
==> centos64: Compressing package to: C:/Users/doe/vagrant/package.box

カレントディレクトリにpackage.boxができた。
この中に仮想マシンが入っている。
あとはこれをどこに移動してもよい。
うーん、ポータブル。
次にこの中の仮想マシンをvagrantから参照する方法。

package.boxをvagrantから参照する。

vagrant init <新規に作成する仮想マシンの名前> <package.boxの場所>と指定してvagrantfileを作る。
もちろんvagrant initと空撃ちして手で書き換えてもよい。後述。

package.boxはローカルに置いてあるので、場所の指定は「file://」に続けてパスを書く。
windowsの場合は「/C:/path/to/package.box」のように書く。
結果、「file:///C:/….」となる。
スラッシュが多くて不安になるけど、これでよい。
なお、windowsっぽく円マークあるいはバックスラッシュを使ってしまうとエスケープされてしまい、vagrantがpackage.boxを見つけられない。注意。

C:\Users\nobwak\vagrant>vagrant init centosTest file:///c:/Users/doe/vagrant/package.
box
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

C:\Users\nobwak\vagrant>

Vagrantfileが以下のようになっていること。
vagrant initを空撃ちした場合には、以下の二行を加えること。

  config.vm.box = "centosTest"
  config.vm.box_url = "file:///c:/Users/nobwak/vagrant/package.box"

あとはvagrant upでよい。

C:\Users\nobwak\vagrant>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'centos64' could not be found. Attempting to find and install..
<中略>
==> default: Booting VM...
<後略>

別の方法:box listに登録する。

package.boxをvagrantのbox listに登録しておけば、いちいちpackage.boxの場所を指定しなくてもいいようになる。

C:\Users\doe\vagrant>vagrant box add centosSkel package.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centosSkel' (v0) for provider:
    box: Unpacking necessary files from: file://C:/Users/nobwak/vagrant/package.box

    box: Progress: 100% (Rate: 9737k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'centosSkel' (v0) for 'virtualbox'!

あとは定石で。

C:\Users\nobwak\vagrant>vagrant init centosSkel
<略>
C:\Users\nobwak\vagrant>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centosSkel'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vagrant_default_1442498300953_28586
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...

atomのpackageをproxyの背後からインストールするには(Windows 7)

Pocket

atomのpackage管理をproxy越えで行う方法を示す。
atomは1.01、Windows 7である。

atomのpackage管理について

atomのpackageはapm(atom package manager)で管理される。
proxyの背後からapmを使うには、ちょっと面倒な作業が必要だ。

apmはそれ自体で独立しているCUIプログラムである。atomの中の機能ではない。
だから、proxyの設定をしようとしたら、atomの設定を変更するのではなく、apmの設定を変更しないといけない。
つまり、atomのシャレオツなインタフェース経由ではなく、apmをコマンド操作したり、テキストファイルを修正することが必要だ。

なお、apmも実はwrapperなのだが、proxyの設定に限れば無視して構わない。

 

apmはどこにある?

apmは以下の場所にインストールされている。

<インストールディレクトリ>\Atom\resources\app\apm\bin\apm.cmd

拡張子が.cmdで、中身を見ると、実体は同ディレクトリにあるnode.exeであることが分かるが、ここでは関係ない。

コマンド操作をするならパスを通さないといけないところだが、面倒くさい。
どうせ滅多に使わないので、<インストールディレクトリ>\Atom\resources\app\apm\bin\ で作業をする。

apm helpで使い方の説明が表示される。

C:\Atom\resources\app\apm\bin>apm help

apm - Atom Package Manager powered by https://atom.io

Usage: apm 

where  is one of:
    clean, config, dedupe, deinstall, delete, dev, develop, docs, erase,
    featured, home, init, install, link, linked, links, list, ln, lns, login,
    ls, open, outdated, publish, rebuild, rebuild-module-cache, remove, rm,
    search, show, star, starred, stars, test, uninstall, unlink, unpublish,
    unstar, update, upgrade, view.

Run `apm help ` to see the more details about a specific command.

Options:
  --color        Enable colored output [boolean] [default: true]
  -v, --version  Print the apm version
  -h, --help     Print this usage message

  Prefix an option with `no-` to set it to false such as --no-color to disable
  colored output.
C:\Atom\resources\app\apm\bin>

 

apmの設定方法は二通り

apmの設定方法には二つの方法がある。
一つは、apmをコマンド操作する方法
もう一つは、設定ファイルを直接書き換える方法

一つ目の、コマンド操作での設定方法だが、結局のところ言われた通りに設定ファイルの書き換えをしている「だけ」なので、実施的な違いはない。
もう少し踏み込んでいうと、仮にコマンド操作で設定をしても、設定値の妥当性はいっさい、してくれない。
仮に間違った設定値を指定しても、言われた通りに設定ファイルに加えるだけなので注意。

 

【参考】apm設定ファイルのひな形作成

apmの設定は、ユーザごとのテキストファイル.apmrcで変更する。
ところが、インストール直後には、(ユーザごとの).apmrcは存在しない。
自分で作っても良いのだが、以下のようにするとひな形が作られる。

C:\Atom\resources\app\apm\bin>apm config edit

上記コマンドを実行すると、メモ帳が開き、.apmrcの内容が表示される。

何もしないで閉じてもよいし、後述するように、後で同じファイルを開くので、今ここで書き換えてしまってもよい。
書き換える場合は開きっぱなしにしておく。

なお、ひな形を作ったとしても、コマンド経由で書き換えた場合、コメント行はバッサリ削られてしまうようだ。

;;;;
; npm userconfig file
; this is a simple ini-formatted file
; lines that start with semi-colons are comments.
; read `npm help config` for help on the various options
;;;;

;;;;
; all options with default values
;;;;
; access=null
; always-auth=false
; bin-links=true
(略)

 

apm設定ファイル.apmrcの保存場所

前章の手順に沿うと、以下の場所に.apmrcが生成される。
いわゆるホームディレクトリである。

C:\Users\<ユーザ名>\.atom\.apmrc

なお、以下にも同じようなファイルがある。
が、これはデフォルト設定(global config)なので触ってはいけない。

C:\Users\<ユーザ名>\.atom\.apm\.apmrc

 

apm設定ファイルでproxy設定する場合

設定ファイルを直接書き換える場合には、上記のファイルを開き、以下の行を書き込むだけ。

proxy=http://<ID>:<password>@<address>:<port>
https-proxy=http://<ID>:<password>@<address>:<port>

httpsの接続で問題の出る場合には、以下も追加する。

strict-ssl = false

 

コマンドで設定する場合

apmを実行できる状態で、以下のようにコマンドを叩く

C:\Atom\resources\app\apm\bin>apm config set https-proxy="http://<ID>:<password>@<address>:<port>"
C:\Atom\resources\app\apm\bin>apm config set proxy="http://<ID>:<password>@<address>:<port>"

apm config listで設定内容を確認できる。

C:\Atom\resources\app\apm\bin>apm config list
(略)
; userconfig C:\Users\avedakedavra\.atom\.apmrc
https-proxy = "http://<ID>:<password>@<address>:<port>"
proxy = "http://<ID>:<password>@<address>:<port>"

もし設定変数を間違えてしまった場合には、以下のようにすれば削除できる。
(https-proxyとすべきところ、https-proproxyしてしまったと仮定)

C:\Atom\resources\app\apm\bin>apm config del https-proproxy

 

設定変数名について(https-proxy、proxy)

設定変数名について、webを検索すると、proxyではなくhttp-proxyだったり、https-proxyではなくhttps_proxy(httpsとproxyの間がアンダースコア)になっている情報もある。
少なくとも1.0.3の時点では、それぞれproxy, https-proxyが正しい。
ソースから確認できる。

https://github.com/atom/apm

[Python] wxPythonで、タイトルバーにアイコンを表示するには

Pocket

Pythonからpy2exeなどでWindowsアプリケーションを作成したときに、アイコンを設定することができる。
しかし、作成したアプリケーションがGUI版の場合、GUIタイトルバーのアイコンを設定するには、ちょっとしたテクニックが必要である。
py2exe等でアイコン設定済み、かつGUIはwxPythonで作成している前提で、その方法を示す。

サンプル

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
	(略)
		if os.path.exists("myWxApp.exe"):
    		self.SetIcon(wx.Icon("myWxApp.exe",wx.BITMAP_TYPE_ICO))

Frameクラスの初期化defの中で、上記のような記載を加える。
もちろんmyWxApp.exeは最終的なファイル名。

説明

py2exe等でiconファイルを設定するというのは、つまり実行ファイルに埋め込むということ。
上記のようにSetIconで自分自身の実行ファイルを参照すると、埋め込んでおいたアイコンファイルを読み取ることができる。

元ネタ
How to use py2exe icon_resources in wxPython application?

【参考】wxPython

http://ja.wikipedia.org/wiki/WxPython
wxPythonは、「wxPythonはPythonで記述されたクロスプラットフォームなウィジェット・ツールキットである。」
要するにPythonをGUIで動かすツールキット。OSをまたがって使用できる。

sublimetext3でフォントを変えるには

Pocket

https://www.sublimetext.com/docs/3/font.html を参照。

Preferences > Settings – User と進み、表示されたファイルに設定を書き込む。
書式は以下の通り。

	"font_face": "Courier New",
	"font_size": 10

私の設定ファイルの例。

{
	"color_scheme": "Packages/User/SublimeLinter/Monokai (SL).tmTheme",
	"font_face": "VL ゴシック",
	"font_size": 11,
	"ignored_packages":
	[
		"Vintage"
	]
}

以上。

sublime textのpackaging controlをproxy越しで使うには

Pocket

proxy越しのpackage control(最初のインストール)

package controlインストール用のコードを修正する。
定石通り、以下からインストール用コードをコピー。

https://packagecontrol.io/installation

コードの中身をよく見ると、urllib.request.ProxyHandler() というのがあるはず。

以下は例(見やすいように改行、インデントを加えてあります)

(前略)
sublime.installed_packages_path();
urllib.request.install_opener(
	urllib.request.build_opener(
		urllib.request.ProxyHandler()
	) 
(後略)

このカッコのなかにdict型でproxyなどの設定を記述する。
書式は下記の通り。
http用、https用の二つを。

{"http": "http://<ユーザ名>:<パスワード>@<アドレス>:<ポート>",
 "https": "https://<ユーザ名>:<パスワード>@<アドレス>:<ポート>"}

(前略)
sublime.installed_packages_path();
urllib.request.install_opener(
	urllib.request.build_opener(
		urllib.request.ProxyHandler(
			{"http": "http://somebody:password@proxy.server:8000",
			"https": "https://somebody:password@proxy.server:8000"}
		)
	) 
(後略)

proxy越しのpackage control(packageインストール向け)

https://packagecontrol.io/docs/settings

以上の通り。

Preferences > Package Settings > Package Control > Settings – User と進み、表示されたファイルに設定を書き込む。
書式は以下の通り。

    "http_proxy": "http://[proxy_server]:[port]",
    "https_proxy": "https://[proxy_server]:[port]",
    "proxy_username": "username",
    "proxy_password": "password"

変更例は以下の通り。

{
	"http_proxy": "http://somebody:password@proxy.server:8000",
	"https_proxy": "https://somebody:password@proxy.server:8000",
	"proxy_username": "somebody",
	"proxy_password": "password",


	"in_process_packages":
	[
	],
	"installed_packages":
	[
		"Anaconda",
		"BracketHighlighter",
		"ConvertToUTF8",
		"IMESupport",
		"Insert Callback",
		"Package Control",
		"SideBarEnhancements",
		"SublimeLinter",
		"SublimeLinter-pep8",
		"Theme - Soda",
		"Theme - Spacegray"
	]
}

以上

[Python][Windows] Windows7への純正Pythonインストールメモ

Pocket

ActivePython入れたり純正Python入れたり訳わかんなくなるからメモ。

Pythonのインストール

https://www.python.org/ から2.xでも3.xでもダウンロード、インストール。
アップグレードの場合は、たぶん自分で古いバージョンをアンインストールした方がよい、と思う。
pythoninstallpathadd
インストール時設定は、pythonをpathに追加するところだけ変更した。

pipのインストール

不要ッ!
2.7.9以降、あるいは3.4以降なら最初っからインストールされている。
pip included with Python
実際、デフォルトの状態で以下の通り。

C:\Users\nobwak>python --version
Python 2.7.9

C:\Users\nobwak>pip list
pip (1.5.6)
setuptools (7.0)

ん?ちょっと古いような?

pip install -U pip

などとして最新版にした。

[メモ][Windows] フリーソフトで年賀状をつくる

Pocket

一年に一度しかやらないのでメモ。
とはいえ、いまどき年賀状なんぞどこかに頼んだ方が楽でなんであるが。

フォトレタッチ: paint.net

http://www.getpaint.net/index.html
フリーのフォトレタッチというとGIMP一択なんだが、高機能すぎて途方に暮れる。
その点paint.netはシンプルだから楽。
paintnet20141223

宛名印刷: Aprint

Aprint
webサイトには20世紀の残り香があるものの、ソフトは必要にして充分。
データはcsvで保存できるから取り回ししやすいし、複数宛先もできる。
フォントも選べるので、はんなり明朝とか、ちょっと変わったフォントを使ってもよい。
aprint20131223

以上

[Python] pyInstallerの遅さにがっかりしてpy2exeにしたら爆速で驚いた件

Pocket

自作PythonスクリプトをWindows実行バイナリに変換する場合、pyInstallerはとっても楽ちんなのであるが、問題もある。
実行ファイルがスタートされるまで、とても待たされることだ。

その遅さに耐えかねてpy2exeを試してみたところ、ビルドまでは面倒なものの、作成した実行ファイルはめっぽう速くて驚いた。
そういったわけで、py2exeでのWindows実行バイナリ作成方法について記す。

まず最初に、pyInstallerとpy2exeで果たしてどの程度差があるかを示す。

実行速度の違い

UNIX系だと、time; <実行ファイル> とすると所要時間を計測してくれるが、Windowsだとどのようにするのであろうか。
よく分からない。
あんまり興味もないのでWindowsにもあるtimeコマンドで大まかに測ってみた。

前提
・同じスクリプトを使用する
・バイナリは一つにまとめる
・バイナリの処理完了までを測る

結果
・pyInstallerだと5秒
・py2exeだと2秒

その差3秒。
たかだか3MBytesのプログラムでこの違いである。
ただ、py2exeを避けていたのには理由がある。

py2exeの制限

py2exeはバイナリ作成のために、別にsetup.pyを書かねばならない。
対するpyInstallerは、pyInstaller本体に自作スクリプトを引数として与えればいいだけ。こちらからすると面倒ではある。
また、pyInstallerを使っていた時には、特に意識しなかったMSVCR90.dllの考慮もしなければならない。
さらにさらに、エンコーディングにも注意が必要(後述)。

が、これだけの弱点を差し引いても起動時間の差は魅力。
くわえて、setup.pyは一度書いてしまえば使い回しもできるんである。
というわけで、py2exeに宗旨替えを決意した。

py2exe: インストール

http://www.py2exe.org/ から。
ActivePythonであれば、pypm install py2exeでインストールできる。

py2exe: MSVCR90.dllの準備

py2exeでのバイナリ作成、およびバイナリの実行にはMSVCR90.dllが必要。

MSVCR90.dllはファイル名が同じでも複数バージョンが存在する。
悪いことにpy2exeは特定のバージョンを要求する。
そのバージョンが9.0.21022.8。
VisualStudioであれば「SP1でない」2008、あるいはこちらも「SP1でない」Microsoft Visual C++ 2008 Redistributable Package に含まれている。

x86向け
http://www.microsoft.com/ja-JP/download/details.aspx?id=29
x64向け
http://www.microsoft.com/ja-JP/download/details.aspx?id=15336

以下はあくまで参考
x86向けSP1
http://www.microsoft.com/ja-JP/download/details.aspx?id=5582
x64向けSP1
http://www.microsoft.com/ja-JP/download/details.aspx?id=2092

MSVCR90.dll、Microsoft Visual C++ 2008 Redistributable Packageのインストーラ(vcredist_x86.exe)ともに、プロパティからバージョンを確認することができる。

バイナリ作成者がDLL再配布の権利を持っている場合、DLLも含めて自作プログラムを配布できる。
権利がなければ、ユーザには上記のMicrosoft Visual C++ 2008 Redistributable Packageをインストールしてもらうこと。

py2exe:setup.pyって何よ。

py2exeは、バイナリ化じたいの処理を、pythonスクリプトで書く。
自作スクリプトのほかに、setup.pyを書く必要があるのはそのため。

py2exe: setup.pyの書きかた

http://www.py2exe.org/index.cgi/Tutorial

上記チュートリアルに沿って進める。

以下の通りのsetup.pyを作る。
ひとまず自作スクリプトと同じディレクトリが良いでしょう。
もちろん、jisaku.pyは自作スクリプト名に変更。

from distutils.core import setup
import py2exe

setup(console=['jisaku.py'])

そうしたら、setup.py, 自作スクリプトのあるディレクトリで、以下のように実行するだけ。

python setup.py py2exe

そうすると、同じディレクトリにdistというディレクトリが作られ、その下に実行ファイルができあがる。
簡単である。

あとはこのsetup.pyをベースに、いろいろと加えていけばよい。
py2exeのオプションは以下を参照のこと。
http://www.py2exe.org/index.cgi/ListOfOptions

python setup.py py2exeとタイプするのが面倒

sys.argv.append(‘py2exe’)を加えてあげれば、それ以降”python setup.py”だけでよくなる。

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(console=['jisaku.py'])

 

実行ファイルを一つにまとめるには

http://www.py2exe.org/index.cgi/SingleFileExecutable

前章で作成したsetup.pyをベースに、といいつつガラッと変わる。
とはいえ、基本的な書式は変わっていない。

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
	options = {'py2exe': {'bundle_files':1}},
	zipfile = None,
	console = [{'script': "jisaku.py"}]
)

bundle_filesでファイルのまとめ方を指定する。
値は1でよい。
1は、とにかく一つにまとめる。
2だと、本体とPython.dllが分かれる。
zipfileもNoneでよい。
ここにファイル名を指定すると、各種DLLがそのファイル名でzipされる。
Noneであれば本体にマージされる。

本体を圧縮するには

速度でpy2exeを選択した私としては、あまり使おうという気にならないのだが。
手元の自作スクリプトから作成した5MBの実行バイナリが3.5MBになった。

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
	options = {'py2exe': {'bundle_files':1, 'compressed': True}},
	zipfile = None,
	console = [{'script': "jisaku.py"}]
)

 

アイコンを追加するには

icon_resourcesで指定する。
http://www.py2exe.org/index.cgi/CustomIcons

from distutils.core import setup
import py2exe, sys


sys.argv.append('py2exe')

setup(
	options = {'py2exe': {'bundle_files':1}},
	zipfile = None,
	console = [{
			'script': "jisaku.py",
			'icon_resources': [(1, "jisaku.ico")]
			,}]
)

 

実行時にコマンドプロンプトウインドウを開かないようにするには

consoleではなくwindowsにする。

from distutils.core import setup
import py2exe, sys


sys.argv.append('py2exe')

setup(
	options = {'py2exe': {'bundle_files':1}},
	zipfile = None,
	windows = [{
			'script': "tsuboneChecker.py",
			'icon_resources': [(1, "Artcore-Illustrations-Artcore-4-Terminal.ico")]
			,}]
)

 

py2exeでのエンコーディング

py2exeでホクホクしていたら、スクリプトの実行は問題ないのに、ひとたびpy2exeでバイナリにすると、途端にエンコーディングエラーが出る、という症状に悩まされた。
結論としては、以下を加えれば解決。

if hasattr(sys, 'setdefaultencoding'):
    import locale
    lang, enc = locale.getdefaultlocale()
    sys.setdefaultencoding(enc or 'cp932')
    del sys.setdefaultencoding

http://www.py2exe.org/index.cgi/EvenMoreEncodings
http://d.hatena.ne.jp/shive/20110626/1309061690

[メモ] Windows, OS X(Mac)でフォルダ/ファイルのパスをクリップボードにコピーする

Pocket

たとえば仕事上、共有サーバにあるフォルダのパスを知らせたい、ということがある。
こういう時のために、フォルダのパスを簡単にクリップボードへコピーする方法を示す。
Windows, OS Xの両方向け。大盤振る舞いである。
OS Xでは追加のツールも要らない方法です。

Windowsでの方法

こちらは簡単。
対象フォルダをSHIFT+右クリックして出てくるメニューからコピーを選べばよい。
ただの右クリックでは出てこないところが憎らしい。
ただ、ダブルクオーテーションで括られる点に注意。

pathcopywindows

OS X(Mac)での方法

Automatorを使う。
Launchpadの「その他」の下にある。

Automatorの設定方法

起動時の選択では「サービス」を選ぶ。

CopyPathToClipboardOSX
「アクション」では「クリップボードにコピー」を探す。
「クリップボード」あたりで検索するとよい。
「クリップボードにコピー」を、画面右側にドラッグ・アンド・ドロップ。
「サービスは、次の選択項目を受け取る」では「ファイルまたはフォルダ」を。
「検索対象」では「Finder」を選ぶ。
メニューバーの編集から保存で「Copy Path to Clipboard」とでも名前を付けて保存。

使いかた

Controlキーを押しながらフォルダをクリックでメニューが開く。
さっき追加した「Copy Path to Clipboard」があるはず。

OSXCopyPath

以上。