製麺会準備

■ 概要

十年来、手打ちうどんを趣味で作る会に参加してきたが、主催者の転勤に伴ってしばらく休止していた。しかし日々製麺欲が高まってきて抑えられなくなったので自分で主催することにし、会場・食材・機材の準備に着手。とりあえず数家族程度の小規模開催には差し支えなさそうな見通しが立った。見積費用は二万円。思ったより高かったが、実行に移したい。

ただ参加者に費用負担をお願いするからには、忘れ物防止のためチェックリストを作らないとダメそう。小物多すぎる。

■ 会場選び

自分と参加者の両方の都合から会場は都内に設定する。しかし都区内のレンタルキッチンは一回15000円とかが相場らしい(参考)。恐ろしい。食材価格に比べて桁で高く、話にならない。というかその値段だったらホテルの一室でやった方が安いのでは…。ほら製麺だけなら火を使わないし。

それはそれとして、行政管理の文化センターの類にある調理室を狙うことにする。区にもよるが、予約作業が繁雑(Webはもとより電話でも予約受付不可だったり…)な代わりに一回2000円程度で済むようだ。ひとまず全参加者に対する区内在住/在勤メンバの割合について厳しいルールのないところを絞り込んでおく。

【ざっくり見積:3000円】

■ 食材選び

うどんの基本は小麦粉と塩、水であって、他に必要なのは打ち粉だけである(参考:手打ちうどんの作り方)。

小麦粉はこれまでの主催者が用意してくださっていた中でも標準的な「金魚」を使うことにする。打ち粉と合わせて、発注先はこれまた前・主催者御用達の「岡坂商店」。香川まで買い出ししなくて済む世の中は大変便利である。あ、塩はその辺のスーパーで一番安いのを買う。

www.udon2ban.com

分量は参加予定者の数と自宅収納スペースとに鑑みて、小麦粉10kg+打ち粉4kgと仮定する。卵やネギなどのトッピングや、うどん醤油など調味料の類は後で考える。

【ざっくり見積:5000円】

■ 機材選び

まず製麺に直接必要な機材は以下の通り。

  • 製麺包丁(福井工作所の手切包丁が理想)
  • 麺打板(1m×1m×0.5cmくらいのベニヤ板)
  • 麺打棒(1m×2cmΦくらいの木の棒)
  • ビニール袋(破けないよう厚手の45リットル程度のサイズ)
  • 料理秤(2kgまで対応できること)

手切包丁を新品で買うと七万円くらいする。以前はもう少し安かった印象があるが…まあ需要と供給の大人の都合もあるのだろう、仕方ない。そこで大昔に当該包丁とともに活躍した先輩に声をかけて貸していただけないかご相談。ありがたいことに包丁・板・棒のセットを参加者として持って来ていただけそうとのお返事。これで一番の山を乗り越えられたといえよう。もっとも厚手のビニール袋は見つけにくいので地道に近所の店屋を回る必要はある。

 

次に製麺会に必要またはあると便利なのは以下の通り。

  • 運搬用台車・搬送用折りたたみコンテナ
  • ゴミ袋
  • 麺入れタッパー(屋台で多用されるような薄手のプラパックでも可)
  • キッチンタイマー
  • 打ち粉用粉ふるい・ちりとり・受け皿
  • 麺洗い用のザル(プラスチック製で受け皿とセットならベター)
  • 布巾
  • 滑り防止ゴムマット(ベニヤの麺打板が机の上で暴れないように)
  • 爪楊枝(生地に空気が入ったときに穴を開けて逃がす)
  • 輪ゴム
  • 鉄砲ザル
  • 寸胴と、それにあわせた長めの菜箸
  • 手洗い石けん・食器洗剤

とにかく安くあげることを重視するので、都区内の地の利を活かして、借りる料理室にありそうなものとか、その近くの店で買えそうなものは当日調達する作戦を採る。大体百均で揃えるとして、台車とコンテナさえあれば企画が当日全焼することもないだろう。都区内は車事情が厳しいことから、台車をはじめとした運搬用具には多少お金をかけても引き合うと睨んで品定めする(大物なので家族の承認待ち)。

しかし台車高いなあ…。使用頻度は低いので収納性さえ良ければ助かるのだが、そういう品はあまりないようだ。

【ざっくり見積:10000円】

■ どんぶり勘定

経費が8000円、設備が10000円で、切り上げて合計二万円。包丁のあてはあったものの、正直思ったより高くなった。

これで大人が10人参加するとして、参加費は二千円となる。経験によれば一桁高い。切りよく千円くらいに収めたい。というかこれまで参加してきた会は500円くらいだった。経費だけでも800円なのに、なんだあれ魔術か。

 

 

まだまだ修行が必要である。

PyAutoGuiを試す

■ 概要

本来やりたいことが行き詰まったのでGUI操作自動化の味見をした。

Windows7(32bit) + Python3.6.1とでPyAutoGuiを利用して、単純なマウス操作とキーボード操作ができることを確認し、おおむね満足した。

■ 参照記事

公式(多分) の最新ドキュメントと、下記blog記事を参照してさっくり試した。

whitecat-student.hatenablog.com

www.slideshare.net

 

■ 試行手順

インストールは"pip install pyautogui"で一発。

まずはインタラクティブシェルでマウスカーソルを画面左上に動かしてみる。

  >>> import pyautogui

  >>> pyautogui.moveTo(x=100, y=200)

うまく動いた。

画面サイズの最大値は"pyautogui.size()"で求まるので、後は適当に座標計算すればどこにでも飛べるはず(マルチディスプレイ環境でどうなるかは不明)。

 

キーボード操作も模擬できる。使えるキー名は"pyautogui.KEYBOARD_KEYS"を表示させることでわかる。というわけで試す。

  >>> pyautogui.press(["ctrl", "alt", "delete"])

  >>> pyautogui.hotkey("ctrl", "alt", "delete")

…どちらもうまくいかない…。特殊キー操作だからダメなのか?

  >>> pyautogui.press("a")

は当然のように期待通り動いた。

  >>> pyautogui.press("numlock")

も動くので、なんちゃってLチカもできる。

 

とりあえず初回の試行としては満足した。

ただ、他アプリ操作は自前環境なら起動時間待ちなど試行錯誤でどうにかなりそうだが、Win32API利用なしで一般化できるのかは今後の課題。 公式ドキュメントなどに記載があるように、バグって暴走するのも怖い。

また"pyautogui.locateOnScreen()"を使うと、与えた画像ファイルと一致する画面表示座標を返してくれるようだが、透過画像に対してはうまく行かないことがあるようだ。ブラウザ上の透過画像をファイル保存して与えてみたが、Noneが帰ってきてしまった。このあたりは割り切るべきなのかもしれない。

 

我が家に地球儀がやってきた

■ 概要

「リプルーグル 地球儀 クランブルック型 アンティーク 日本語版 31470」を入手した。大変楽しい。

f:id:Huck:20170820165130j:plain

■ 入手までの四方山話

子供の頃から地球儀は好きだった。できれば東京大学総合研究博物館にある直径数メートルの巨大地球儀を自室に置けたらどれほどかと思う。ただ自室に置くとすると、サイズ選定は将来の生活スタイル変更も織り込んで慎重に行う必要がある。

というわけで、形式選定。Webにはニッチな情報がなく、限界を感じる。とりあえず近所の丸善で地球儀フェアをしていたときに現物チェックし、判断の一助とする。

形式が決まっても、今度は英語版と日本語版の間で迷う。日本語版は古いのが実家にあるから英語版に挑戦してみたい反面、Web上の画像を比較する限りでは、可読性の点で日本語版の方が明らかに優れている。悩む。しかし悩み抜いた末、英語版がヤードポンド法準拠と知って切り捨てる。山の高さや海の深さがフィート表示って、メートル法で生活している人にとってそれはどうなんですかね。

 

■ 入手後のあれこれ

所望の品は、結局日本半周して我が家にやってきた。通販の定めとはいえ複雑なものを感じつつ開封の儀を執り行う。おお、なかなか良いではないか。設置性に一抹の不安を感じてはいたが、台座のサイズがさほどでもなかったので、結局問題なかった。

そうして世界中眺め回しているうちに、北極点にタイムスケールがあることに気づいた。このスケールを回して、現在地の時刻に合わせれば、各緯度の時間がわかるという原理的なスケールである。国や地方によって標準時は異なるが、これはこれでわかりやすいので良い。子供への教育の一助にもなるだろう。

 

ただ全てが素晴らしいわけではない。現在地から見た東西方向の感覚は、目の錯覚の関係か、どうも地球儀より正距方位図法の方がしっくりくるようだ。これは電波伝搬を考える上で 少々苦しい。十字シールを作って地球儀に貼れば良いという話題も目にしたが、率直に言って美しい解とは思えない。つまり、二次元平面の地図にも、地球儀にも、それぞれ見方として優れているところがあるのであって、地球儀があれば地図は不要と言うことにはならないわけで、まあ両方使い分けましょうというのが落としどころのようである。

 

ただそれでも私は地球儀が好き。

 

あ、地図は地図で大好きですよ。比べるのが野暮と言うことに今更気づいただけ。地球儀を眺めて、気になった土地をWeb地図や航空写真で見直してみると、新たな発見あるある。

地球儀をくるっと回してたまたま停まった土地、たとえばミクロネシアのサワタン島とかいかがでしょうか。Web上の写真を見ながら、そこにどうやって行けば良いのかとか考えはじめると…。

Pythonでデジタル地図に色々プロットするための準備 その2

■ 概要

 Basemap公式サイトのインストール手順に則らず、非公式パッケージを利用したらBasemap利用環境があっさり整った。ドキュメンテーションがしっかりしていない公式サイトは滅びるべきである。

■ はじめに

公式の説明書きにしたがってうまくいかなかった上にストレージ容量を無駄に食いつぶされたので、ひとまず余計なものを消しにかかる。

…と思ったら"OSGeo4W"のアンインストーラが見当たらない。スタートメニューにあるsetupプログラムからはインストールしかできない。かといってWindows標準の「プログラムのアンインストール」に項目があるわけでもない。酷い。今時のインストーラならもう少し気のきいた振る舞いをして欲しかった。しかし仕方ないので直接ファイルを削除。レジストリ環境変数は特に設定されていなかったのでそのまま。

 ■ 再出発

もう公式は信じられないので、下記サイトを参考に非公式wheelからのpyprojとBasemapのインストールを試みる。

blog.livedoor.jp

 

% pip install pyproj-1.9.5.1-cp36-cp36m-win32.whl

% pip install basemap-1.1.0-cp36-cp36m-win32.whl

 …両方とも特にエラー無く終了。昨日の苦労は一体…。

 

■ 備忘

"pip list"した結果は下記の通り。備忘のため記録。

basemap (1.1.0)
cx-Freeze (5.0.2)
cycler (0.10.0)
flake8 (3.3.0)
matplotlib (2.0.2)
mccabe (0.6.1)
numpy (1.13.1)
olefile (0.44)
Pillow (4.2.1)
pip (9.0.1)
pycodestyle (2.3.1)
pyflakes (1.5.0)
pyparsing (2.2.0)
pyproj (1.9.5.1)
pyshp (1.2.11)
python-dateutil (2.6.1)
pytz (2017.2)
pywin32 (221)
selenium (3.4.3)
setuptools (28.8.0)
six (1.10.0)
wxPython (4.0.0b1)

Pythonでデジタル地図に色々プロットするための準備 その1

■ 概要

 アーアアアアアアア!アーグブイ!アーグシー!

■ はじめに

ざっくり調べたところ、2017年7月現在、Pythonでデジタル地図を扱うには"basemap"パッケージが主流のようだ。他にはイギリス気象局がリリースしている"Cartopy"がある模様。ただ今回はまず初めての準備なので、主流に合わせていく。

興味をそそられる例を挙げていて、説明も必要十分そうに見えた下記サイトを参考に進めることにした。

qiita.com

qiita.com

basemapやcartopyで地図上でplot | mwSoft

 

 

■ 前座:各種パッケージインストールは多分成功

ほぼPython3.6.1(Windows7, 32bit)入れただけの環境から出発する。

インストール手順は公式を参照するのが最善という経験則から、この時点では日本語解説記事はまだ参考にしない。まずはグラフ描画ライブラリ"matplotlib"から。

% pip install matplotlib

で下記パッケージが一度に入った。

  • cycler-0.10.0
  • matplotlib-2.0.2
  • numpy-1.13.1
  • pyparsing-2.2.0
  • python-dateutil-2.6.1
  • pytz-2017.2

numpyは1.2.1より新しいものを入れろ、と公式には書いてあったが、1.13.1って新しいと見ていいのかな?小数点表記内の桁上がりでバージョン表記されるといつも迷う。

次に"PROJ4"と"GEOS"をインストールする。"pip search geos"とやると*geos* 0.2.1が入るだろうことがわかるが、最新のリリースは3.6.2なので罠だろう。こういうのやめてほしい。

Windowsインストール用バイナリを探すと、どちらも"OSGeo4W"の一部として配布されているようだ。これだと今使わないものまで一緒に入ってくる気がしたが、他に妙案も出なかったのでWeb install。カスタムインストールとして、ライブラリ名検索窓に"PROJ4", "GEOS"と入れてフィルタされたものだけチェックして実行。関連パッケージ含めてインストールには少々時間がかかった。というかPython本体とか色々入れられていたような…システムディスクのSSDがだいぶ圧迫されてきたぞ。

さておき、オプション扱いされていたが必要そうなので画像処理ライブラリ"Pillow"も入れておく。

% pip install pillow

これは簡単。

■ 本題:basemapインストールに失敗

いよいよbasemap本体のインストールに取りかかる。

公式の説明書きにはWindowsインストーラバイナリがあるかのように書かれているが見つからないので大人しくソースコードを入手してビルドする。GitHubのリポジトリから延々110MBダウンロードして、setup.pyにgeos_c.hの一つ上のディレクトリ階層を追記してから

% python setup.py install

を実行。

No module named 'numpy.distutils._msvccompiler' in numpy.distutils

(中略)
error: Command "cl.exe (中略) /Fobuild\temp.win32-3.6\Release\src/_geoslib.obj" failed with exit status 127

 

 "numpy-1.13.1+mkl-cp36-cp36m-win32"を代わりに使ってみても状況は変わらず。次回持ち越しとする。

■ 所感

最新のPythonで気軽に何かやってみたいと思ったとき、関連パッケージがpipで扱われていなかったらいったん立ち止まるべきなのかもしれない。pip偉大。

自宅Windows PCへのPython3.6セットアップ その2

■ 概要

wxPythonのインストール失敗は運の要素に左右されたが解決した。

wxPython 4.0.0b1のインストールに成功

昨日散々苦労して入らなかったwxPython、ちょうど同日に新しいバージョンがリリースされ、本日改めてpip install -U wxpythonしたら何の問題も無くインストールが完了した。なんということでしょう。

自宅Windows PCへのPython3.6セットアップ その1

■ 概要

Python3.6系にwxPythonを入れようとして苦労した。結局解決せずに次回持ち越し。

■ はじめに

どうも仕事でPythonを使って色々試してみるには大人の事情が邪魔することが多いので、自宅Windows PCにもPythonを入れてみることにした。というか前々から入れていたのだが真面目に使ってなかったので、この際最新版(Python3.6系)を試してみようと思ったのだ。

ついでにパソコン周りでどうにかする雑用を片付けやすくするため、あとかねてから手を出してみたいと思っていたGUI周りに近づくため、いくつかパッケージを追加することにした。具体的には"pywin32", "selenium", "wxPython"である。それから仕事場でどうしても期待通り動いてくれないでいる"cx_freeze"もいじってやろうと思う。 さらには"flake8"も。LINTは大事よね。

■ Python3.6.2を試す

 pywin32はあいかわらず.exe形式のインストーラを使わないとダメらしいので、素直に公式からダウンロードしてきて実行→成功。

seleniumはpip installであっさり入る。

しかしwxPythonはpipではうまく入らず、ソースコードからビルドしてやっても粗雑に進めたせいか、一見インストールされたように見えてimport wxでエラーとなる。

以前どこかでPython3.5系にはうまく入ったような記憶があるので、下手に最新版に手を出した代償かなー、と思いつつ、ちょっとだけWebで情報収集。

…30分くらい試行錯誤してたら子供がぐずりはじめたので中止。Python3.6.2は2017年7月リリース版である。ちょっと攻めすぎたかと思い、後戻りすることにした。

■ Python3.6.1を試す

./Python36/scripts/以下にpipがあるのだが、pip3(Python3系のためのpipだとか)の他にpip3.6とかいうのがある。WinmergeでDiffをとってみたら、全部同じだった。まぎらわしいが、過去のしがらみとかそういうのだろう。それはそれとして、Winmergeの.exe形式インストーラがzip圧縮されて頒布されているというのはどうなんだろうか。

 

しかるにwxPythonはどうなったかというと不成功。今更ながらエラーログの類をよく見てみたら、Windowsのユーザーフォルダの中にキャッシュを作ってあれこれしていたのでまずは下記のようにしてキャッシュを無効化してみた。

% pip --no-cache-dir install -I wxpython

…これでもNG。まあそんなに期待はしていなかったが…。

おそらく「Unable to find vcvarsall.bat」と指摘されているエラーが問題なのだろう。要するにWindows SDKを別途用意する必要があるようだ(関連記事)。

しかしPython3.6.1をビルドしたと思われるVisual C++ 2015のSDK単体をMS公式ですぐ見つけることができなかった。改めてVisual Studioをインストールするのもどうかと思い、いにしえのVisual Studio2005の場所を環境変数で指定して逃げられないか試してみる。つまり「VS140COMNTOOLS」に値「C:\Program Files\Microsoft Visual Studio 8\VC」を与えてみる…結局ダメ。

もう面倒なのでVisual Studio 2017 communityを最小構成で放り込むことにした。待ち時間が暇だったので、バックグラウンドでpip install cx_freezeしておいた。

 

さてwxPythonに戻ると、今度は「msvc9compiler.py」にて「raise ValueError(str(list(result.keys())))」。

 

そろそろ家族の目が冷たくなってきたので今日はここまでとする。