secretbase.log

.NET/C#/Pythonなど

Windows 10 のライフサイクル

Windows 10 の Fall Creators Update がリリースされました。 過去の更新プログラムのサポート終了を調べましたのでメモします。

更新プログラムと Service Pack

デスクトップ オペレーティング システム 提供日 サポート終了
Windows Vista SP1 2008年2月4日 2011年7月12日
Windows Vista SP2 2009年5月26日 2017年4月11日
Windows 7 SP1 2011年2月22日 2020年1月14日
Windows 8.1 2013年10月18日 N/A
Windows 10 Version 1507 (初期バージョン) 2015年7月29日 2017年5月9日
Windows 10 Version 1511 (November Update) 2015年11月10日 2017年10月10日
Windows 10 Version 1607 (Anniversary Update) 2016年8月2日 2018年3月(仮)
Windows 10 Version 1703 (Creators Update) 2017年4月5日 2018年9月(仮)
Windows 10 Version 1709 (Fall Creators Update) 2017年10月17日 2019年3月(仮)

Windows 10 サポートのロードマップ

f:id:cointoss1973:20171019111231p:plain

Anniversary Update は最近出たような気がしていましたが、来年3月にはサポート終了します。

nginx を Windows サービスとしてインストールする

はじめに

常時動作しているWindowsマシンがあり、 nginx と Webアプリケーション(nodejsまたはGoやPythonで記述)の組み合わせて提供することができそうで環境構築をしたのでメモします。

nginx は Windows の場合コマンドラインアプリケーションとして動作させることができます。しかしサービス化は、将来の予定にはあるようですが、現時点ではまだ提供されていません。

winswを使って実現しているblogがいくつかありましたので、最新のバージョンの手順です。

  • nginx 1.11.10 (現時点のmainlineバージョン)
  • winsw 2.0.2.0 (現時点の最新)

f:id:cointoss1973:20170306124538p:plain

nginx のインストールと動作確認

まずは、単体アプリケーションとして起動を確認します。

  1. 公式サイトから zip をダウンロードして、C:\nginx に展開します
  2. コマンドプロンプトを開きます。
  3. start nginx にて起動します
  4. Windows セキュリティの重要な警告 ダイアログが表示されますので「アクセスを許可する(A)」を選択します

f:id:cointoss1973:20170306123939p:plain

  1. http://localhost をブラウザで開いてWelcome to nginx! ページが表示されることを確認します

f:id:cointoss1973:20170306123923p:plain

正しくインストールされていることを確認できました。

Windowsサービス化

次に、Windowsサービス化をします。

サービス化には、任意のプロセスをサービス化することができる winsw を利用します。

  1. WinSW をダウンロードします

    • WinSW 2.x系は、.NET Framework 2系(~3.5) と、 .NET Framework 4系が提供されています
    • 現時点では、 V2.0.2 が 最新です
  2. ダウンロードした WinSW.exe を nginxsvc.exe にリネームします。(この名前は好きな名前で良いです)

  3. exe と同じ名前の xml を作成します (ここでは nginxsvc.xml を作成します)

<service>
  <id>nginx</id>
  <name>nginx</name>
  <description>nginx</description>
  <executable>c:\nginx\nginx.exe</executable>
  <logpath>c:\nginx\</logpath>
  <logmode>roll</logmode>
  <depend></depend>
  <startargument>-p c:\nginx</startargument>
  <stopargument>-p c:\nginx -s stop</stopargument>
</service>
  1. 管理者のコマンドプロンプトを開きます

  2. C:\nginx\nginxsvc.exe install を実行します

起動

f:id:cointoss1973:20170306123956p:plain

  • nginx がサービスとして登録されていますので右クリックして起動します

エラー

あれ、エラーになりました。

nginxsvc.err.log にエラーが出力されていますので、中身を確認します。

nginx: [alert] could not open error log file: CreateFile() " c:\nginx/logs/error.log" failed (123: The filename, directory name, or volume label syntax is incorrect)
2017/03/06 09:35:40 [emerg] 10528#10192: CreateFile() " c:\nginx/conf/nginx.conf" failed (123: The filename, directory name, or volume label syntax is incorrect)

ファイル、ディレクトリ名が不正のようです。

起動オプションの修正

nginxsvc.xml の定義にて、nginx を起動時の引数として -p オプションで指定しているのですが、このあたりが影響してそうです。 削除して試してみます。

C:\nginx\nginxsvc.exe uninstall にて、一度アンインストールします。

<service>
  <id>nginx</id>
  <name>nginx</name>
  <description>nginx (powered by WinSW)</description>
  <executable>c:\nginx\nginx.exe</executable>
  <logpath>c:\nginx\</logpath>
  <logmode>roll</logmode>
  <depend></depend>
  <startarguments></startarguments>
  <stoparguments>-s stop</stoparguments>
</service>

xmlファイル修正 【2017/3/6 15時追記】

  • startarguments 、 stoparguments (複数形にする)必要があります
    • これにしておかないと Windowsサービスが停止できない状況が発生します

実行

C:/nginx/nginxsvc.exe install を再度実行します。

うまく起動しました。 ブラウザで http://localhost を開いてみます。

logs\access.log にもアクセス記録が追記されていますので、 conf フォルダや logs フォルダにもアクセスできています。

参考

nginx

winsw

Windows 10 と Windows 8.1 を判定する

動作しているOSのバージョンを取得して判定する必要があり、 Environment.OSVersion を用いて Major と Minorで判定するようにサンプルコードを動作させてみました。

しかし、Windows 10 でも Windows 8.1 でも Major が 6 のまま。

Windows 10 では majorは 10 のはず...。

サンプル

static void Main(string[] args)
{
    var os = Environment.OSVersion;

    Console.WriteLine("Version Information:");
    Console.WriteLine("   Major: {0}", os.Version.Major);
    Console.WriteLine("   Minor: {0}", os.Version.Minor);
}

解決策

過去の互換性を保つために、OSVersionはWindows8のバージョンを返す仕様のようです。

マニフェストファイルでサポートOSを明示することで回避できます。

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- このアプリケーションがテストされ、協働するようテストされた Windows バージョンの
           一覧。適切な要素をコメント解除すると、最も互換性のある環境を Windows が
           自動的に選択します。-->

      <!-- Windows Vista -->
      <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->

      <!-- Windows 7 -->
      <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->

      <!-- Windows 8 -->
      <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->

      <!-- Windows 8.1 -->
      <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->

      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
    
    </application>
  </compatibility>

実行結果

Version Information:
   Major: 10
   Minor: 0

参考

C#逆引きレシピ

C#逆引きレシピ

Julia Studio で始める Julia 入門

f:id:cointoss1973:20140102212844p:plain

julia とは

ハイレベルでハイパフォーマンスの動的プログラミング言語です。文法は他の言語と似ているようです。
去年くらいからたまに話題にならないレベルで、周りでも話にも聞かないレベルですが、将棋の電王戦のあるプログラムが juliaで実装されているという話を聞いて興味を持ちました。

R は新しいExcel。 Python は新しいR。julialang は新しい Python とかいうつぶやきもあり、あまり話題に上がらないけど、ベンチマークとかみると非常に優秀なので気になっていた julialangを少し触ってみることにしましょう。*1

Julia Studio

インストール

Julia Studio をダウンロードして入れましょう。Qtで実装されているようなので、Windows, Mac, Linux があります。ここでは Windows で進めますね。

f:id:cointoss1973:20140102211904p:plain
f:id:cointoss1973:20140102211909p:plain
f:id:cointoss1973:20140102211914p:plain
f:id:cointoss1973:20140102211918p:plain
f:id:cointoss1973:20140102211922p:plain
f:id:cointoss1973:20140102211930p:plain
Finish。これといって問題なし。

julia studio を入れると、julia 自体も下記インストールされるようなので、これ一本でとりあえず julia を始めることができます。
インタプリタの設定もできますので、別に入れた julia のバイナリを指定することもできます。
現時点の 0.4.3 を入れると、julia の 0.2.0 (最新)が入ったのでひとまずこれでOK。

起動

では、Julia Studio を起動してみましょう。
ふむ、Packages とかいろいろあるようですねぇ。
f:id:cointoss1973:20140102212019p:plain
Githubからメタパッケージらしきものをひっぱってきて、どうやらパッケージリストを作成してくれるみたいです。これはJulialangとしてサポートしている機能なんだろうか、それとも Studioの機能なんだろうか... いきなりIDEから入る弊害ですね。あとで調べてることにして先にいきます。

チュートリアル

julia studio に チュートリアルのページ があるので実行してみる。

Hello World

println("Hello, World!")

をhello.jl というファイルで新規作成すればOK。 console (いわゆる REPL)があるので、そちらに入力してもOKですが、まぁチュートリアルに従ってみます。
f:id:cointoss1973:20140102212033p:plain
F5 を押すと実行されます。F5 で Run って個人的に身体に馴染んでいていい感じです。

fizzbuzz

さて、チュートリアルは続きますが英語を読むのも飽きますね。
ということで、文法もよくわからぬまま、fizzbuzz を実装してみます。
Julia Documentation — Julia Language 0.2.0 documentation この辺に、ドキュメントがあります*2

関数定義は、function で始まり、 end までのようですね。
条件分岐は、if else elseif end ですね。
演算子 は、だいたいPythonと一緒ですね

さくさくとエディタに書いてみます。
もっともベタな実装で、こんな感じですね。

f:id:cointoss1973:20140102212231p:plain
インデントは 8 タブなんだけど、これが標準なんだろうか。ちょっときもい*3

なかなか手軽で性能が良いのであれば良さそうですね。
Pythonなみのコミュニティやライブラリが充実するような流れになれば主流になるかもしれませんね*4

環境

  • Windows 7 64-bit
  • Julia Studio Version 0.4.3 (Julia 0.2.0)

*1:2014年も始まり、なにか新しいことをやってみたいですよね

*2:お、Sphinxで記述されているようですね

*3:Python の 4スペースがいいなぁ

*4:卵ニワトリのような関係かもしれませんね

Windows 7 / Python 2.7.6 にて ez_setup.py にて UnicodeDecodeError が出て困ったけど解決した件

追記 (2014/6/3)

Python ML にて報告がされていました。

Python 2.7.7 にて下記不具合として修正されていますので、2.7.7を使いましょう。

続きを読む

Windows上でソースコードから開発版TortoiseHg をビルドしてみる

Mercurial & TortoiseHg Advent Calendar 2013 - connpass の 8日目のエントリです*1

TortoiseHg を 使っているとちょっと改良してみたいなぁと感じることもありますが、Windows上のビルド環境構築はけっこう面倒だったりしますね。Windows 上で環境をスクラッチでソースコードからビルドしてみましたのでご紹介します。

f:id:cointoss1973:20131224133445p:plain

環境構築の概要

Windows 上での TortoiseHg のビルドは、 thg-winbuild リポジトリを用います。*2

手順は、TortoiseHg の thg-winbuild リポジトリの README に記載されている内容を参考にしています。
https://bitbucket.org/tortoisehg/thg-winbuild/src

ここでは Windows 7 の 32-bit および 64-bit を準備します。

ビルド環境


それでは、はじめましょう。

Mercurial ビルドに必要なもの

まずは、Mercurial をビルドするために必要な環境を準備しましょう。

Python 2.7.6

Windows用のインストーラーからインストールします。ここでは 2.x系の最新である 2.7.6 をインストールします。

32-bit http://www.python.org/ftp/python/2.7.6/python-2.7.6.msi
64-bit http://www.python.org/ftp/python/2.7.6/python-2.7.6.amd64.msi

  • インストール先

C:\Python27
C:\Python27-x64


C++ Compiler

Visual Studio 2008 Express Edition を入れましょう

  • Visual Studio 2008 Express Edition CD(DVD)イメージ版のダウンロード

http://go.microsoft.com/?LinkId=9348306

Visual Studio 2008 は Python 2.7 の場合の組み合わせです。(MinGW/MSYS は使わないほうが良いです)

gettext

下記からセットアッププログラムを最新版をダウンロードします
http://gnuwin32.sourceforge.net/packages/gettext.htm

gettext-0.14.4.exe が最新。


py2exe

http://sourceforge.net/projects/py2exe/
http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/

32-bit py2exe-0.6.9.win32-py2.7.exe
64-bit py2exe-0.6.9.win64-py2.7.amd64.exe

上記 exe を実行してインストール。

Windows Installer XML

WiX の最新安定板を用いてよいでしょう。
ちなみに WiX38.exe が現時点の最新ですのでこれを入れます。*4
http://wix.codeplex.com/releases/view/115492


setuptools

こちらも PyPI で提供されているパッケージになります。
http://pypi.python.org/pypi/setuptools

Windows の場合は、下記手順でインストール可能です。
https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py

python ez_setup.py を実行しましょう。

C:\Python27\python.exe ez_setup.py
C:\Python27-x64\python.exe ez_setup.py

docutils

PyPIで提供されている Pythonパッケージ のひとつです。
そして easy_install docutils を実行すればOK。

C:\Python27\Scripts\easy_install.exe docutils

Sphinx (docutils, jinja2, pygments, etc)

こちらも PyPIで提供されているPythonパッケージ。
sphinxをインストールします。

C:\Python27\Scripts\easy_install.exe sphinx
C:\Python27-x64\Scripts\easy_install.exe sphinx

ドキュメントのビルドに必要な環境準備

MiKTeX (to build PDF docs)

setup-2.8.3553.exe をダウンロードし実行したところ、2.8はもうサポートが切れているといったメッセージが出て入らない。最新2.9 インストーラーをダウンロードしインストール。

HTML Help Workshop (to build CHM docs)

htmlhelp.exe をインストール。


TortoiseHgのビルド・インストーラーに必要なソフトウェア

PyQt 4.8 or later

http://www.riverbankcomputing.co.uk/software/pyqt/download
Pythonのバージョンとあわせたバイナリをダウンロード。
PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x32.exe

SVN

TortoiseSVN http://tortoisesvn.net/downloads.html
TortoiseSVNインストール時に、 svn のコマンドライン版を選択しインストールしておく。

comtypes (no longer optional)

  • 32-bit

http://sourceforge.net/projects/comtypes/files/comtypes/0.6.2/
http://sourceforge.net/projects/comtypes/files/comtypes/0.6.2/comtypes-0.6.2.win32.exe/download

  • 64-bit

http://sourceforge.net/projects/comtypes/files/comtypes/0.6.2/comtypes-0.6.2.zip/download
http://sourceforge.net/tracker/?func=detail&aid=3036368&group_id=115265&atid=692940

64-bitの場合は、ソースコードからインストールしましょう。
上記パッチは trunk に取り入れられているので、svnのtrunkからインストールします。

svn checkout https://svn.code.sf.net/p/comtypes/code/trunk comtypes-trunk
cd comtypes-trunk
C:\Python27-x64\python.exe setup.py install

Subversion Python bindings (no longer optional)

https://bitbucket.org/tortoisehg/thg-winbuild/downloads/svn_1.7.5_py27_x86.zip
https://bitbucket.org/tortoisehg/thg-winbuild/downloads/svn_1.7.5_py27_x64.zip
zip を解凍し、 svn と libsvn フォルダを site-packages 以下にコピーする

C:\Python27\Lib\site-packages
C:\Python27-x64\Lib\site-packages

以上で必要なビルドに必要なソフトウェアの準備が完了しました。


ビルド手順

ソースコード取得

コマンドプロンプトで下記コマンドを実行。

hg clone https://bitbucket.org/tortoisehg/thg-build
cd thg-build
python setup.py 

ビルドに必要なリポジトリソースコードをcloneします。けっこう時間がかかるのでコーヒーでも飲みましょう。

スクリプト調整

thg-build/winbuild/setup.py の下記 try_paths の引数に 2.9 のパスを追加しておきます。

    if not pdflatex:
        found = try_paths([r'\MiKTeX 2.7\miktex\bin\Pdflatex.exe',
                           r'\MiKTeX 2.8\miktex\bin\Pdflatex.exe',
                           r'\MiKTeX 2.9\miktex\bin\Pdflatex.exe'])

ビルド

set LANGUAGE=en
cd winbuild
"C:\Python27\python.exe setup.py --thg-dev" → x86用のmsiパッケージがビルド
"C:\Python27-x64\python.exe setup.py --thg-dev" → x64用のmsiパッケージがビルド

※もし プロキシ設定(http_proxy)などビルドコンフィグレーションが必要な場合は、build.ini ファイルにセクションを追加してください。

最終成果物(msi)は、 thg-build\output 以下に msi ファイルが生成されます。

その他

もし mercurial など tortoisehg でビルド対象のパッケージがすでにインストールされていたら該当パッケージを別名にするか削除するかしておきましょう。

参考

最新TortoiseHg の各ソフトウェアバージョン TortoiseHg 2.10.1 時点
記バージョンですが、ここでは最新開発版をビルドしました。


入門TortoiseHg + Mercurial

入門TortoiseHg + Mercurial

*1:大遅刻><

*2:このリポジトリから setup.py にて内部的に必要なリポジトリを clone しますので他のリポジトリは意識する必要はありません。

*3:Windows 8 は未確認です

*4:最近 WiX 3.8がリリースされました

.NET Framework のバージョンを確認する

調べたらバッチファイルで確認する方法 があるので、Windows8 で試してみました。

実行結果

f:id:cointoss1973:20130227095819p:plain

Windows 8 は、.NET Framework 4.5 が同梱されていますが、その下位バージョンもインストールされていることがわかりました。