Apache Commons VFSでusername,passwordに利用禁止文字を使う方法
String hostName = "US456564" ; String username = "sftpuser@Location"; String password = "Test!@#$%^&*()[]:;"; String localFilePath = "home57556"; FileObject remoteFile = manager.resolveFile( createConnectionString(hostName, username, password, remoteFilePath, fileName), createDefaultOptions());
Apache Commons VFSを利用する際、usernameやpasswordに@等の文字を使うと以下のようなエラーが出てftpにアクセスすることができない。
Caused by: org.apache.commons.vfs2.FileSystemException: Invalid absolute URI "sftp://sftpuser@Location:***@US456564/home57556".
これは内部的には以下のようにアクセスしているためである。
manager.resolveFile("sftp://sftpuser@Location:Test!@#$%^&*()[]:;@US456564/home57556");
この時は、使用できない文字を%○○のようにエンコードしたものを入力するとアクセスができる。
manager.resolveFile("sftp://sftpuser%40Location:Test!%40%23%24%25%5E%26*%5B%5D%3A%3B@US456564/home57556");
eclipseで特定ファイルを除外してwarを作成する(antを利用)
warファイルを作成するにあたって、プロジェクト内のライブラリやgitのリポジトリも一緒にまとめてしまうので、必要以上にサイズが大きくなっていたのでapache-antを使って特定ファイルを除外してwarを作成する方法を調べた。
1.apache-antのインストール
http://ant.apache.org/にアクセスし、zip版をダウンロードする。
ダウンロードしたら任意のフォルダ(今回はProgram Files内)に展開する。
以下の環境変数を追加する。
ANT_HOME C:\Program Files\apache-ant-1.9.4
PATH C:\Program Files\apache-ant-1.9.4\bin
C:\> ant -version Apache Ant(TM) version 1.9.4 compiled on April 29 2014
上記のようになればインストール成功
2.build.xmlの作成
プロジェクト直下に以下の内容のbuild.xmlを作成する。
このとき、
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project basedir="." default="dist" name=""> <!-- warファイルの設定 --> <property name="war.home" value="." /> <property name="web-app.name" value="appName" /> <!-- jarタスクによってwarファイルを作成 --> <target name="dist" > <war destfile="${war.home}/${web-app.name}.war" webxml="${war.home}/WEB-INF/web.xml"> <fileset dir="${war.home}" excludes="**/web.xml,**/WEB-INF/lib/**,${web-app.name}.war" /> </war> </target> </project>
pythonでwebアプリ(pythonインストールからDB接続まで)
pythonでwebアプリを作れる環境を作りたくて、bottle、mysql-connector-pythonを試してみた。
フレームワークは他にも有力なのがあるようでまだbottleでいくかは未決定。
OS:windows8 64bit
- pythonのインストール
https://www.python.org/downloads/
最新版のpython3.4.1をダウンロードして実行。python2に対し後方互換性がないようだが、
どんどん対応するライブラリが増えており、使いたいライブラリはすべてpython3に対応しているようなので、python3で決定。
インストールが完了したらc:\python34とc:\python\Scriptsへのパスを通しておく。
- pipのインストール
使ったことがないので便利さがわからないのだが、いろんなところにpythonとセットで書いてあるのでとりあえずインストールする。
setuptoolsから(https://pypi.python.org/pypi/setuptools)
環境に応じたez_setup.pyをダウンロードする。
python ez_setup.py easy_install pip
これで完了。
...もっと簡単にpipを入れる方法もある模様
http://qiita.com/who_you_me/items/831d62f396e6d66dda66
- エディタのインストール
何でもよいのだが評判が良いのでPyCharm Community Editionをインストール
http://www.jetbrains.com/pycharm/download/
日本語化されてないのが難点
- bottleのインストールと実行
pip install bottle
インストールしたら公式のチュートリアルに従って実行してみる
http://bottlepy.org/docs/dev/tutorial.html
from bottle import route, run @route('/hello') def hello(): return "Hello World!" run(host='localhost', port=8080, debug=True)
とりあえずこれでサーバーが立つのでhttp://localhost:8080/helloへアクセスして確認する。
サーバーはgunicornを使うとよいとのこと
DBは既存のmysqlを使いたいのでドライバが必要。
ドライバはいろいろありすぎるよう(参考:http://www.sakito.com/2012/10/python-mysql.html)
これといった性能要件もないのでmysql-connecter-pythonを使ってみることにした。
インストール
pip install mysql-connector-python
もし、--allow-externalをつけなさい、というようなエラーが出たら
pip install --allow-external mysql-connector-python mysql-connector-python
DBの方にはあらかじめテーブルを用意しておく。
以下は、DB:testのtable:table1から全データを持ってきて表示するサンプル
import mysql.connector connect = mysql.connector.connect(db="test", host="localhost", port=3306, user="****", passwd="****") cur=connect.cursor() cur.execute('select * from table1') rows = cur.fetchall() for row in rows: print(row) cur.close() connect.close()
- まとめ
とりあえず最低限動かすための準備はできた。
残りはやりたいことに対して必要な機能(テンプレートとかlogとか)の確認と、
そもそものフレームワークの選定。
他の候補としては実績が多いDjangoかBottleと同じく軽量なFlaskあたりを見てみる予定。
javascript上での動作開始のパターン
javascriptを呼び出すにはonloadだったりonclickだったりあるが、いまいち頭に整理できていなかったのでよく使う実行パターンをタイミング別にまとめてみた。
参考:http://www.shurey.com/js/samples/0_bsc2.html
http://so-zou.jp/web-app/tech/programming/javascript/event/handler/onload.htm
1.読み込み時に実行
1-1.直接記述
<script type="text/javascript"> <!-- (ここにスクリプトを記述) //--> </script>
1-2.onload()で記述
複数読み込まれると後に読み込まれたものが優先される。
<script type="text/javascript"> window.onload = function(){ <!-- (ここにスクリプトを記述) //--> }; </script>
2.(ボタンorリンク)クリック時に実行
2-1.リンクをクリック(直接記述)
<a href="javascript:(ここにスクリプトを記述)">クリック</a>
2-2.リンクをクリック(呼出)
<a href="javascript:(ユーザー関数)">クリック</a> <script type="text/javascript"> <!-- function(ユーザー関数){ (ここにスクリプトを記述) } //--> </script>
2-3.ボタンをクリック
<form><input type="button" value="クリック" onClick="(ユーザー関数)"></form> <script type="text/javascript"> <!-- function(ユーザー関数){ (ここにスクリプトを記述) } //--> </script>
3.その他イベント時
WOL(Wake On Lan)で出先から自宅PCを起動 その1
たまに、出先でファイルだったりソフトだったり自宅PCの環境が必要になることがある。
今までは、常時起動しておいてリモート接続(teamViewer)で利用していた。
ただ、常時起動はなんかやだな(電気代+夏場の発熱)という気になってきて、Wake On Lanでのリモート起動をできるようにした。
ルータ再起動でグローバルIPが変更されてしまい、IP既知の時しか起動できないという課題は残っているが、
現状の構成・設定を以下に残しておく。
1.ネットワーク構成
ネットワーク構成は図のようになった。
①Wimaxルータ
既存のネットワーク環境。特に設定なし。グローバルIPが変更されるという課題がある。
②WOL用ルータ
今回のために購入。WOLをするのに必要。amazonで4000円くらいだった。
③起動するPC(windows8)
マザーボードがWOLに対応している必要がある。最近はほぼ対応しているらしいが、行う場合は事前に調べることが必要。
2.詳細
①Wimaxルータ
今回は特に設定の必要なし。ただしIPに関して注意が必要。
・起動のたびにグローバルIPが変更されてしまう。
2つ目について、niftyの提供するIPがグローバルIPなのプライベートIPなのかの記載がどこを探してもなかった。UQ wimaxなどは2013年6月の段階でプライベートIPへの順次移行を発表している。(http://www.uqwimax.jp/service/information/201305071.html)すぐに変わってしまうということはないかもしれないが、懸念事項としておかなければならなそう。
②WOL用ルータ
設定のポイントは2つ
・ブリッジモードにする。
WG300HPにはルータ機能を停止したブリッジモードが存在する。このモードにしないと、ルータがグローバルIPを取得できない。やり方は以下の公式マニュアル。
http://www.aterm.jp/function/wg300hp/guide/wireless/list/m01_m60.html
・WOLを行う設定。これはマニュアル通りでできた。
http://www.aterm.jp/function/wg300hp/guide/high/wol/m04_t.html
③起動するPC(windows8)
ここまで上手く設定ができているとWOLを行うと、ルータからmagic packetというものが送られる。これをPC側で認識し起動しなければならない。
・windowsの設定
http://www.atmarkit.co.jp/ait/articles/0602/25/news014.html
・biosの設定
今回のPCでは
- [ディープ パワーオフ モード] に移動し、[入力] を押して [無効] に設定。
- [LANポートで電源オン] に移動し、[入力] を押して [有効] に設定。
この2つで設定ができた。
3.残っている課題
Wimaxルータの時に挙げた、「起動のたびグローバルIPが変更」「グローバルIPがプライベートIPになる可能性」がある。
「起動のたびグローバルIPが変更」について、有償のDDNSを利用すれば間違いなくできそう。ただこれ以上コストをかけるつもりはないので、・フリーのDDNSを利用、・自動検知+メール通知のスクリプトを組む、のどちらかで対応しようと思う。
「グローバルIPがプライベートIPになる可能性」については、まだどうなるかが全く分からないので起こってから考える。そのころには別のネット環境にしたくなっているはず。