herokuに簡易web apをデプロイ
っていう話
結構止まったのでメモしておく。
はじめに
python3+bottleで作った簡易webサーバをデプロイしました。以下、手順。
(herokuのアカウント登録とか事前にイロイロやることあるけど省略します。)
gitのローカルリポジトリを作る
git init
git add .
git commit -m "comment"
herokuの準備
heroku create [app name]
git push heroku master
トラブル
herokuにpushするときにいっぱい怒られた。
herokuがアプリケーションを実行するために下記3ファイルをプロジェクトのルートに置いとく必要がある。
- runtime.txt
- requirement.txt
- Procfile
requirement.txt
アプリで使ってるライブラリを書く。
pip freeze > requirement.txt
で自動で作成される。
Procfile
herokuがアプリを実行するときに使うコマンドを記述する。
今回は以下の一行のみ。
web: python app.py
virtualboxで立てたゲストOSからホストOSにFTP転送したい
掲題の件がうまく行かない。
ゲストOSはUbuntu14.04
ホストOSはWindows8
ホスト側でIISマネージャーからFTPサイトを立て、ゲスト側からftpコマンドを叩いた。
ログインまでは上手くいくのだが、肝心のファイル転送時(putコマンド実行時)に下記エラーが発生する。
501-Server cannot accept argument.
Win32 error: The parameter is incorrect.
Error details: Client IP on the control channel didn't match the client IP on the data channel.
501 End
制御チャネルで使ってるクライアントのIPとデータ転送チャネルで使ってるクライアントのIPが違うらしい。
この二つをどこで設定してるのかわからんのでなんとも対処がわからん。はー困った。。。
networkxとd3.jsでグラフを描画するwebサービス
イントロ
こちらのサイトを見て、すごくいいなぁと思ったので似たようなのを作りました。
デザインや機能などは完全に劣化しています。でも楽しかったのでここにまとめようと思います。
使用言語:python、JavaScript
ライブラリ:networkx、d3.js、JQuery
フレームワーク:bottle
実物
芋いが許してくれ・・・
頂点数、グラフの種類を選択して[showGraph]ボタンを押すと
はいドーン。
コード
gitに置いてます。
参考:
d3.js関係(グラフ描画に関するコードはほぼこちらのコードを使わせて頂きました。)
D3.jsのForce Layout (力学モデルでグラフ描画するレイアウト)を動かしてみた - カタカタブログ
JQuery関係
http://dotinstall.com/lessons/basic_jquery_v2
bottle関係
Pythonの軽量WebサーバBottleの使い方 - MyEnigma
Pythonの軽量Webフレームワーク「Bottle」 - Symfoware
networkx
NetworkX documentation — NetworkX 2.0.dev20161010012513 documentation(公式)
d3.js勉強中。困っている。
ドットインストールでd3.jsの勉強している。
私の凡ミスなのかわからないが、この段階で詰まっていて途方に暮れている次第。
私が書いたのは以下の通り。レクチャーの通りに書いたと思っているのだが。。。
OSはwindows8, ブラウザはクローム。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Practice of JavaScript</title> </head> <body> <script src="https://d3js.org/d3.v4.min.js"></script> <script> var dataset = [11, 25, 45, 30, 33]; var w = 500; var h = 200; var svg = d3.select("body").append("svg").attr({width:w, height:h}); </script> </body> </html>
結果、svg要素がbodyに追加されているけどwidthとheightの設定がされてない。。。
なんでや。。。
変数使わないでやってみる。
var svg = d3.select("body").append("svg").attr({width:500, height:200});
結果は変わらず。
こうすればうまく行った。
var svg = d3.select("body").append("svg").attr("width",w).attr("height",h);
結果
なんか芋い。まぁ意図した結果にはなっているので我慢。attrをまとめるのはやめる。
ところがレッスンをtransitionの話まで進めたところでまた問題が。
durationの指定までは問題なくいったが・・・
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Practice of JavaScript</title> </head> <body> <script src="https://d3js.org/d3.v4.min.js"></script> <script> var dataset = [11, 25, 45, 30, 33]; var w = 500; var h = 200; var svg = d3.select("body") .append("svg") .attr("width",w) .attr("height",h); svg.selectAll("circle") .data(dataset) .enter() .append("circle") .attr("cx", function(d,i) { return 50 + (i * 100); }) .attr("cy", h / 2) .attr("r", 0) .attr("fill", "red") .transition() .duration(1000) .ease("in") .attr("r",function(d) { return d; }); </script> </body> </html>
こう書いたらeaseでUncaught error。次に進めない。。。
ドットインストールの動画を見ても、他のブログを見ても問題なさそうに見える。
環境的な問題なのか、はたまた私の凡ミスなのか。もう少し調べることにする。。。
追記:バージョン下げたらうまく行った。
変更前
<script src="https://d3js.org/d3.v4.min.js"></script>
変更後
<script src="https://d3js.org/d3.v3.min.js"></script>
d3.v4.min.js→d3.v3.min.jsとした。v4は使わないことにする。使わないことにする。
Tomcat上に置かれたWebアプリに外部ファイルを読ませる
外部ファイルの内容によって挙動が変わるスタブを作ってたのでこんなんが必要になった。
結構はまったけどやることは簡単。
java.net.URLをインポートする。
import java.net.URL;
んで以下のように。
URL resourceUrl = this.getClass().getClassLoader().getResource("hoge.xml"); String path = resourceUrl.toString();
1行目はwebapps/appname/WEB-INF/classes直下にあるhoge.xmlファイルを見る。
パスの取得はtoStringメソッドを使う。
他にもServletContextで取得する方法があったが、Servletクラスでしか使えなさそう。
最初はこればっかり出てきて「違うんや。。。そうじゃないんや。。。」ってなった。
Servletでの起動時外部ファイル読み込み方法 | 陸トトの忘れぬ為の備忘録
ファイルのパスの取得について - Java 解決済 | 教えて!goo
WEB-INF下のファイルの読み込み | ごった煮 - tips about programming and building a server
今まではeclipse上で動けば良かったからこういうのはちゃんと考えたことなくて結構新鮮だった。
スタブではあるけどwebサービスが一通り作れて楽しかった。
Tomcatのパスワード、ユーザーの設定方法
パスワードもユーザー名も設定した覚えがないのに突然聞かれてビックリした。
ペペッと設定できるみたい。
<tomcat-users> <user username="user" password="password" roles="admin,manager,manager-gui"/> </tomcat-users>
簡単ですが、以上。
ネットワークスペシャリストの勉強1
2ヶ月も放置してました。。。
会社で応用情報を取れって言われてるんですが、応用情報って広すぎて受ける気がしないので
ネットワークスペシャリストを受けることにしました。
そしたらすごい難しい資格らしく。ちょっと萎えてますが、とりあえず勉強したことをここに書こうと。
他にも結城浩さんの暗号技術入門を読んでいるので、そちらの内容も書いていこうと思います。
自分なりに噛み砕いたものをぺチぺチ書いていきます。
■外部ストレージの形態
ローカルのストレージだけでは要領に限界があるので、外部にストレージを用意したくなります。
このときの外部ストレージとの接続の仕方に種類がありますよって話。
DAS
サーバに直でストレージを繋ぐ。
SAN
ハードウェアやテープ装置とサーバを専用ネットワークで繋ぐ形態。
実態としてはネットワーク上にストレージを置いているが、
ローカルにストレージがあるっぽく見える。
■RAID
複数のHDを組み合わせて耐障害性のある一つのHDのように扱う仕組み。
組み方によって名前がある。
RAID0(ストライピング)
複数のHDにデータを分散させる。冗長性は持たせないのでHDが一つ死ぬと
そこに保存されていたデータも死ぬ。
RAID 0+1
RAID0構成したHD群を一つのHDと思ってRAID1構成にする。
RAID 1+0
RAID1構成したHD群をRAID0構成にする。
RAID3,RAID4
複数のHDにデータを分散させておき(RAID0構成にしておき)、それとは別に
データ復旧用のパリティHDを用意する。RAID3とRAID4の違いはパリティを計算するときの
データの単位の違い(RAID4が単位が大きい)で、本質的には変わらない。
下図のオレンジがパリティHD。P1は真上のA、Bから計算される。P2~P4についても同様である。
例えば、Aというデータが破損した場合、BとP1からAを復元する。
RAID5
パリティHDが分散されたもの。分散することによって高速になるらしいけどよくわかっていない。
ひとまずこんなところ。受かった人が勉強方法を細かく書いてくれているブログもあるので、
そちらを参考に勉強を続けていきたいと思います。