2017年10月29日日曜日

Jupyter Notebookをリモートで利用する方法

Jupyternotebookはブラウザアプリなので当然、リモートからアクセスすることができます。ただし、設定が必要です。本記事は、Pythonの環境が用意されているサーバ(Linuxを前提)にリモートログインして利用することを想定しています。

0.サーバにログイン
サーバのIPアドレスを確認し、そこにsshでログインします。サーバのIPアドレスが何なのかはネットワーク(サーバー)管理者に聞いておいて下さい。

1.設定ファイルの作成
デフォルトでは設定ファイルがないので、以下のコマンドを入力して設定ファイルを作成します。
  • jupyter notebook --generate-config
2.設定ファイルの編集

ホームディレクトリ下に、.jupyter/というディレクトリができています。その中に、「jupyter_notebook_config.py」というファイルが作成されていますのでそのファイルをエディターで開きます。そして、つぎの箇所を探してコメントアウトを外しかつ修正します。
  • c.NotebookApp.ip = '*' 
  • c.NotebookApp.port = 8889
  • c.NotebookApp.notebook_dir = '/home/ochi/python'  ←ここのフォルダは自分で決めて下さい。
port番号はデフォルトでは8888ですので、複数人でアクセスすることを考えると違う番号にすることを勧めます。ディレクトリは自分のお好みで。
※もしかすると、portも’*’にしてもいいのかなと思ったり(未確認)

3.上記で設定したフォルダを作成しておく
起動する前に、フォルダを作っておかないとエラーが出ます。

4.Jupyternotebookの起動
ログインしたサーバーでコマンド入力にて起動します。
5.ブラウザからアクセスhttp://[jupyter稼働マシンのIP]:9999



2017年10月19日木曜日

Spyderをアップデートする方法(Windows環境)

うちのゼミでは、Pythonの開発に SpyderというIDEを利用する輩が多いのですが(私も含めて)、アップデートしろというメッセージがよく出るのでそのメモ書き。

Windows環境だからアプリの管理画面等を操作すると思ったらそういうわけではなく、pythonの流儀に従って、コマンドラインで行います。
  1. anacondaのコンソールを起動
  2. conda update -all
    (場合によっては、conda update conda)
  3. conda update spyder
という感じでOKのようです。いきなり、spyderだけアプデートをかけるのはダメなようです。なお、allのオプションでspyderが変わるか思いきや、最新版にはならず、1つ手前のバージョンだったので、再度 spyderを指定して updateをかけました。


2017年10月15日日曜日

yum install php-mysqlで依存性エラーが出た場合に試したいこと

CentOS7にphp-mysqlドライバが入ってなかったので、
  • yum install php-mysql
を実行すると何やらエラーがたくさん出た後、
  • You could try using --skip-broken to work around the problem
とかいうメッセージが出てくる事象が発生。
そのオプションをつけるも解決することなく、どうやらバージョンの互換性が問題になっていることは推測できるものの、さてどうしたものか、、と試行錯誤したうえ
  • yum install  —enablerepo=remi-php71 php-mysqlnd
で解決。phpのバージョンが7.1だから7.1用のレポジトリを見にいくように指定しないといけなかったんですね。

あと、/etc/yum.repos.d/remi-php71.repoのファイルの中に、
  • priority = 1
を書いておいたほうが確実なようです。

2017年9月26日火曜日

Word2016にて表内の文字列が表示されないバグの対処方法

(期間限定ネタになります)
Wordで文書を開くと、表の中の一部のセルの文字がなくなっている現象が発生。どうやら、
  • Word 2016 対象の2017 年 9 月 5 日の更新プログラム (KB4011039)のバグ
  • 結合されたセルの中身が表示されない(プリントアウトしても出てこない)
ということらしいです。マイクロソフトのサイトでも取り上げられています。

解決策
いずれは、修正パッチがでるでしょうけど、とりあえずは、
  • [コントロールパネル]→[プログラムと機能]→[インストールされた更新プログラムを表示]を開いて、KB4011039をアンインストールする
というのが、今現在(2017/9/26)の解決策です。Windows10だとコントロールパネルはデフォで出てこないので、Cortana検索で「コントロールパネル」って入力して探してください。


2017年9月7日木曜日

Windows Defenderが更新できない場合の対処法(Proxy設定)

外部へのアクセスがProxy経由に限定されている場合、Windows Defenderの定義ファイルは更新することができません。当然、Proxy設定しておくべきなのですが、
  • Windows DefenderにはProxy設定画面がない
  • OSのProxy設定を参照しているわけではない
というトラップがあります。これを回避するには、下記のコマンドを入力して別途Proxyの設定(WinHTTPのプロキシー設定)をします。
netsh winhttp set proxy proxy.xxxxx.xxx.xx.xx:8080
ただし、このコマンドには管理者権限が必要なので、管理者権限でコマンドプロンプトかパワーシェルを立ち上げて下さい。また、上記サーバー名やポート番号は例ですので、適切な名前を番号に変更して下さい。



2017年8月31日木曜日

マシン管理:ログオン要求できるログオンサーバはありません

Windowsのアクティブディレクトリなどでドメイン管理している環境において、
  • ログオン要求できるログオンサーバはありません
という意味不明なメッセージが出た場合の対処法です。

原因はサーバーが死んでいるかネットワークの問題
エラーメッセージが示している通り、「サーバーがありません」ということはこのいずれかです。ネットにつながっているようで、実はLANケーブルが中途半端だったりした時は
  • ネットにもつながっている(ウェブブラウジングできる)のに?
  • 自分の
と見逃しがちなので注意。私がこのパターンでハマりました。LANの口を今一度確認してみてください。


TexLiveをインストールする方法(プロキシー設定編)

WindowsでTexするなら、とりあえずTexLiveをインストールしておきましょう。

1.ダウンロード
 TexWikiからダウンロードします。

2.解凍
 プロキシーを経由してネットワークインストールする場合は、まずは解凍だけします。インストールプロセスに進んではいけません。インストーラーを起動後、
  • Unpack Only
を選択して下さい。

3.Proxy設定
tlpkg\installer\wget に .wgetrc というファイルを作成します。.(ドット)で始まるファイルは標準のメモ帳だと作れない?かもしれませんので、その場合はatomエディター等、他のエディターを利用して下さい。で、そのファイルに下記のようにproxyサーバーの情報を記述します。
http_proxy=http://proxy.xxxx.xxx:8080 ftp_proxy=http://proxy.xxxx.xxxx:8080
use_proxy=on
 4.コマンドプロントから起動
インストーラのあるディレクトリに移動して、下記のコマンドを実行して下さい。
install-tl-windows.bat --no-persistent-downloads
これで正常にインストールプロセスが始まります。

5.リポジトリの変更を忘れずに
 なお、デフォルトだと国外のサーバからダウンロードを試みますから(たぶん)、国内のサーバーに変えておきましょう。インストーラーの途中で「規定リポジトリを変更」で指定できます。

2017年7月25日火曜日

C#:画像ファイルをいろいろ扱っていたらOutofMemoryエラー出る場合の対処法

100ページ超のマルチページTiffファイルを解析するプログラムを稼働させているとメモリ使用量がどんどん上がっていき、4つほどファイルを読んだらメモリオーバーで落ちてしまうという減少に随分前から悩まされてきました。その解決策がようやく判明。
GC.Collect();
GC.WaitForPendingFinalizers();  
GC.Collect();
というように、ガーベージコレクションを発動させるだけでなく、赤字の処理を追記したほうがいいらしいです。GC.Collect()で挟むと良いようです。いままでGC.Collect()しか記述してなかったです。ググると既知のTIPSのようですね。

プログラムでは、OpenCVSharpを使ったりしているので、そのあたりのバグかな~とか思ったりもしましたが違いましたね。おかげで、メモリ使用量が全く増えることなく稼働できています。

2017年7月18日火曜日

Python:マルチページTIFFを読み込んで1ページずつ処理する

PythonでマルチページTIFFを処理する方法。OpenCVでは未対応なようなので、PILを利用する。注意点は、
  • マルチページのページ数は n_frames で取得できる
というところ。ネットのサンプルはEOFエラーまでループを回すとか気持ち悪いことしてるので、n_frames +1 までループを回すのが美しいでしょう。

下記のコードを参照。

2017年5月20日土曜日

PythonでOpenCVを試してみた

ラボの開発言語も徐々にPythonへと移行の気配で、OpenCVもその餌食になりそうです。で、試してみました。

OpenCVのバージョンの確認
現在、OpenCVはバージョン3になっていますが、パッケージ名はcv2のままです。まず、自分のPythonの環境でOpenCV3がインストールされているのかを確認しておきましょう。pythonのコンソールにて、下記の2行を打ちこむとバージョンが出力されるはずです。でなかれば環境がおかしいです。
import cv2
cv2.__version__
Out[6]: '3.2.0-dev'  ← これが出力
サンプルを動かしてみる
下記の通りのサンプルを動かしてみましょう。これは、C#版の記事と同じ内容です。見比べてみたらわかりますが、表現が違っていたりします。そのキモですが、、、
  • OpenCVの関数を使うというより、numpyの関数を使っているということが多々ありそう。
ということ。例えば下記の例では、
  • Matのコピー
  • Matのトリミング
は、Matの処理というより、numpyの行列処理のようです。OpenCVの関数については、他の言語(C++,C#)とほぼ同じ感じですが、その切り分け方に注意ですね。


2017年5月16日火曜日

Python:Anacondaの環境でOpenCVをインストールする

Python初心者(私)が躓くところなので作業メモ。(Anacondaの環境が前提です)
Pythonで各種ライブラリをインストールするには、基本的にAnacondaのコマンドを利用します。OpenCVも同様です。

OpenCVのパッケージを収録しているあるレポジトリを探す
まず、パッケージを探します。
  • anaconda search -t conda opencv3
というコマンドを入力して、OpenCV3のライブラリを探します。するとリストの中で
     ver228/opencv3            |    3.2.0 | conda           | linux-64, osx-64, win-64
というのが見つかりました。唯一3.2.0に対応してるようなので(2017.5.16現在)これにします。まだ続きがあります。今度はこのパッケージがどのレポジトリにあるかを探します。
  • anaconda show  ver228/opencv3
とコマンドを打ちます。すると、

To install this package with conda run:
     conda install --channel https://conda.anaconda.org/ver228 opencv3

という出力が出ますので、ここに書いてあるとおり、
  • conda install --channel https://conda.anaconda.org/ver228 opencv3
と打てばインストールは成功です。





2017年3月31日金曜日

GAS: スプレッドシートに画像を埋め込む場合のノウハウ

Google App Script(GAS)にて画像を埋め込む際のノウハウです。GASには、SpreadSheetの画像埋め込みAPIとして、
  • sheet.insertImage(URL)
があります。これ自体は有効に機能するのですが、実はこのメソッドで埋め込まれた画像を削除する関数がありません。これはちょっと問題、、というときには、もっとスマートなやり方があります。それは、スプレッドシートの関数である
  • image(URL,[モード])関数
を式としてセルに代入することで同等の事ができます。削除はセルの書き換えか、クリアで行えます。注意点は、
  • 画像サイズはセルサイズと同じ
ということです。大きめの画像を貼り付けたい場合は、適切なサイズになるようにセルの結合(merge)をしておきましょう。

2017年3月25日土曜日

H28年度卒業生を送り出して


卒業・修了おめでとうございます。本年度は、学部7名、院生0名が巣立ちました。今年は大学院進学者が2名です。今年は、ゼミ生の吉村くんが、成績面を評価され、学科同窓会賞を受賞しました。おめでとうございます。

今年の4年生は、マイペース型。特に研究室に籠もることなく、提示帰宅するときが多かったですね。昨今、サラリーマンの過度な勤務時間超過が話題になっていますが、そういった点では今年はホワイト研究室でした。なにか物足りない気がしないまでもないんですが、研究成果的には例年と決して引けをとるようなことはなく、また終盤にドタバタするようなこともなく、計画的に進めてきた学年だったかなぁ。特にうちはプログラミングの時間が多いので、長時間コードを書けるわけでもないですし、長時間いることが必ずしも成果に結びつくとは限らないかな。。。と思いつつ、もっと良い成果が出来たのではないかと思いもあったり。。。

とりあえず今年も、授与式等であった学科長の式辞の内容をネタにしながら、個人的にアレンジした贈る言葉を書いてみようかと思います。

(1)想定外の対応せよ
昨年度も同じ話をされましたが、1年前よりもさらに世の中の動向は不透明になってきた気がします。そういうわけで、仕事のバリエーションを増やすというのは1つの戦略かと思います。多芸は無芸といったようにマイナスなイメージがあったりしますが、想定外のことに対応するには、様々なことを視野にいれて行動することが大切かもしれません。だから、どんな仕事の内容であっても、躊躇せず、とりあえずやってみる、、、という姿勢が大切で、それができるポテンシャルを持っているのが近大生の強みなのかもしれません。

(2)挑戦し続ける
守りに入らず、挑戦し続ける。。これは大切ですね。守りを完全否定するわけではないですが、移り変わる社会の動向に対応するのは、守りではなく攻めの姿勢でしょう。

(3)よい失敗をしてよい経験をする
若いうちはどんどん失敗してよいかと。もちろん、無責任な失敗は駄目ですが、信念を持った失敗には学びがあります。まあ、ホントは学生時代に(卒論で)どんどん失敗すべきなんですけどね。社会人になると、失敗は個人レベルではなく会社や他者に結びつくので、失敗推奨というわけにはいかないと思いますが、失敗を恐れると何もできないですから。

(4)健康第一
 学科長の話にはなかったですが、「健康第一」これは大切なことです。そのためには自分の限界を知っておきましょう。仕事をすすめる上で、残業等でアクセル全開の状態が続くことは少なからずあると思います。しかし、ずっと踏み続ける必要はありませんし、そうなればそれは異常な状態です。最初のうちはいいかもしれませんが、だんだんとおかしくなってきます。ちょっとこのままだと自分はパンクする、、とか、これは行き過ぎと感じたら、アクセルを緩めましょう。もちろん仕事は大切です。仕事は個人の問題ではありませんから、一人アクセルを緩めると皆の足並みが乱れるかもしれません。しかしそれは一時的なものであり、それをフォローできるのが会社という組織のはずです。人の命より価値のある大切な仕事というのもは存在しません。フォローできない会社、社員の命(健康、幸せ)を大切にしない会社であれば、そこにとどまる正当性はないのです。何事も体が資本です。

以上、みなさん、お元気で。卒業おめでとうございます。

2017年3月16日木曜日

Python:UnicodeDecodeError: 'cp932' codec can't decode byte 0x93: illegal multibyte sequence

Pythonにて表題のようなエラーが出てきた場合、読んでのとおり文字コードの違いが原因になっています。このエラーには、ファイルオープン時に文字コード指定の記述をすればOK。
open('sample_text.txt', 'r'')
→ open('sample_text.txt', 'r',encoding='UTF-8')
既存のコード(サンプルコード)を動かす時にこのエラーによく遭遇するので、環境の問題を疑う前に、コードも疑ってみて下さい。

2017年2月4日土曜日

OpenCVSharpでテンプレートマッチング処理(OpenCV3.0対応)

OpenCVSharpでテンプレートマッチング処理。OpenCV3.0対応の記述です。
前バージョンとは若干の記述(クラス)が違いますが、基本的には同じですね。



OpenCVSharp:Mat変数の渡し方に注意

ちょっと初歩的なところで躓いたのでメモ書き。OpenCVSharpのプログラムで、
Mat mat = new Mat()
methodA(mat);
methodB(mat);
みたいなことをしました。各メソッドはほぼ同じことしてます。が、後者のメソッドが思ったように動かないケースに遭遇し、ちょっと格闘しました。

Matは基本参照渡し
結論(解決策)は、Matは基本参照渡しだということ。つまり、methodA内で変数matを処理したら、呼び出し元でも反映されているということ。つまり、上記の例では、Aに渡されるmatとBに渡されるmatは別物です。
もし、同じmatを渡したいなら、closeメソッドでコピーを作ってそれを渡しましょう。

2017年2月3日金曜日

XAML の UI デバッグツールを無効にする


最近、やっとVisual Studio2015を使い始めたのですが、実行するとなにやら変な物が出ます。上の画像みたいな黒いやつです。これは、
  • 実行中の WPF アプリケーションのビジュアル ツリーやツリー内の任意の要素のプロパティを検査することができます(Visual Studio日本チームBLOGより
という優れものらしいですが、とりあえず今の私には不要なので、邪魔。。。

というわけで、消し方ですが、
  • デバッグ > オプション メニューより、デバッグ > 全般 > XAML のUI デバッグツールを有効にするのチェックを外す
で解決です。

ホントは、使いこなせたほうがいいんでしょうけど、とりあえず。



2017年1月28日土曜日

いつのまにかGWTもJava 8 対応になっていたようです

おちラボでは、現在でもGWTを使い続けていますが、GWTの最新リリースである2.8 では、Java8に対応していたようです。正確にいうとRC1の頃から対応していたようです。対応状況は、下記のリンクを参照のこと。
なお、現在の最新版はRCがとれています。RC1は昨年の7月下旬、RCが取れた正式版は10月にリリースされてますのでちょっとネタが古かったですかね。


2017年1月25日水曜日

Java:nekoHTMLParserを使っていてうまくパーズできない場合の対処メモ

JavaでのHTMLファイルをParseする時は、nekoHTMLParserを使っています。このパーザーはある意味柔軟なところがあり、使い勝手がいいんですが、エラーを全く吐かないまま、正しくParseできないことがあったので、メモ書きです。

【挙動】
  • aタグを検索して hrefの属性値をとってくるプログラムを実行
  • プログラムはエラーなく動作。しかし、hrefの値がとれていないところがところどころある(全てではなく、ところどころ、、というのが厄介)。
  • 正確に言えば、文書中のaタグは漏れなく見つけられているが、値のとれていない(値のない)aタグがところどころ存在する。
【原因と対処法対処法】
  • 文字コードが原因。今回のケースでは、諸事情によりHTMLファイルをコピペで取得し作成したため、文字はUTF-8、メタタグの指定がShift-JISという齟齬が発生していた
  • メタタグの指定をUTF-8に変更
エラーが出ないからうまく動いているだろう、、と気づきにくいところなので要注意です。


2017年1月19日木曜日

C#からPythonを呼ぶ(非同期処理)

先のC#からPythonを呼ぶサンプルコードは、一度実行したら終わりというケースです。実行中のPythonプログラムに標準入出力を利用してデータの授受をするのは、下記のコードがベターです。



2017年1月18日水曜日

C#からPythonを呼ぶ

C#からPythonを呼ぶサンプルコードです。実行結果(コンソール出力)を受け取れます。



TensorFlow for Windowsをインストールしてみた

TensorFlowはバージョン0.12からWindowsをサポートするようになりましたので、そのインストールのメモ書きです。ちなみに、個人的にPythonはよくわかってないレベルです。

Anacondaのインストール
TensorFlowを動かすには各種数値計算系のライブラリが必要になるのですが、Anacondaというライブラリ?を入れれば関係するライブラリが一括してインストールされるらしいので、これをインストールします。Pythonのバージョンは3.5で64bit版にしました。
Anaconda Promptを起動
コマンドプロンプトではなく、Anacondaプロンプトを起動して下さい(Anacondaのインストールで入ります)。以後、このプロンプトでの動作です。

pipでインストール
Pythonではpipというパッケージ管理システムがあります。TensorFlowもこれを利用します。
TensorFlowのインストールの前に、次のおまじないのコマンド2つ入力しておきましょう。pipとsetuptoolsのアップグレードをしているんだと思います。
python -m pip install --upgrade pip
pip install --upgrade -I setuptools
上のおまじないが終わったら、下記の通り入力しましょう。
C:\> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
インストールするバージョンやによってURLは変わってきますので注意です。ここの記述の詳細は、公式サイトの Pip installation on Windowsを確認して下さい。

動作確認
下記のコマンドでバージョンが表示されたらインストール成功です。
python -c "import tensorflow; print(tensorflow.__version__);"