2018年10月30日火曜日

Pythonanywhereにflaskrをデプロイ

Flaskのチュートリアルにflaskrというミニブログアプリの作り方があります。

これをpythonanywhereにデプロイしたのですが、けっこうハマってしまいました。ドキュメントをきちんと読むのが大事ですね。

https://help.pythonanywhere.com/pages/Flask/
デプロイ時のローカルとの違いが書いてあります。

https://www.pythonanywhere.com/forums/topic/12889/
デプロイ時のWSGI設定が書いてあります。

①WSGI... py の設定

sys.path に使いたいpathを追加。

project_home = u'/home/user/flaskr'
if project_home not in sys.path:
    sys.path = [project_home] + sys.path

②create_app()を追加

from flaskr import create_app
application = create_app()  # noqa
を同じWSGI...pyに入れる。

ということが嵌ったポイントでした。

create_appは__init__.pyの中にあります。

import os
from flask import Flask
app = Flask(__name__, instance_relative_config=True)
def create_app(test_config=None):
    """Create and configure an instance of the Flask application."""
    app.config.from_mapping(
        # a default secret that should be overridden by instance config
        SECRET_KEY='dev',
        # store the database in the instance folder
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )
    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.update(test_config)
    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass
    @app.route('/hello')
    def hello():
        return 'Hello, World!'
    # register the database commands
    from flaskr import db
    db.init_app(app)
    # apply the blueprints to the app
    from flaskr import auth, blog
    app.register_blueprint(auth.bp)
    app.register_blueprint(blog.bp)
    # make url_for('index') == url_for('blog.index')
    # in another app, you might define a separate main index here with
    # app.route, while giving the blog blueprint a url_prefix, but for
    # the tutorial the blog will be the main index
    app.add_url_rule('/', endpoint='index')
    return app
if __name__ == '__main__':
    app.run(debug=True)

Staticファイルの変更が反映されないとき

https://help.pythonanywhere.com/pages/DebuggingStaticFiles/
こちらにある通りで、キャッシュを消して再読み込みすると反映されます。ブラウザ側の問題なのに、アプリ側をあちこち調べてしまいました。

2018年10月26日金曜日

MongoDBで「コンピュータによって拒否されたため、接続できませんでした」エラー

初歩的な失敗なのですが、MongoDBで下記エラーが出ているとき、

ServerSelectionTimeoutError: localhost:27017: [WinErrno 10061]対象のコンピューターによって拒否されたため、接続できませんでした。

原因は「mongdが立ち上がっていないから」でした。

ターミナルを2つ使う必要があり、まず片方のターミナルで、

mongod --dbpath c:\MongoDB\Test

などと指定して立ち上げておく。

もう1つのターミナルで

mongo

と打てば開始できる。

2018年10月25日木曜日

C++でコード実行時間を測定する

#include <iostream>
#include <chrono>
#include <time.h>
using namespace std;
int N = 10000;
int arr[10000][10000];
void array(){
auto chrono_start = std::chrono::system_clock::now();
/*measure from*/
for (int i = 0; i < N; i++){
for (int j = 0; j < N; j++){
arr[i][j] = j;
}
}
/*measure to*/
auto chrono_end = std::chrono::system_clock::now();
cout << "Elapsed time:"<< (chrono_end-chrono_start).count() <<"[ms]"<< std::endl;
}

int main(void){
array();
} 

C++11 用です。

こういうエラーが出て、C++2011スタンダードが必要ですよとのこと。

In file included from /usr/include/c++/5/chrono:35:0,
                 from time_elapsed.cpp:2:
/usr/include/c++/5/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
 #error This file requires compiler and library support \

オプションでstdを入れて取り急ぎ解決。

g++ -std=c++11 -o time_elapsed time_elapsed.cpp

2018年10月16日火曜日

Ubuntuで音が出なくなったので直す

Ubuntu16.04で音が聞こえなくなりました。

下記コマンドをやってから再起動します。
(そのまま再起動しても大丈夫なのかもしれませんが・・・)

$ sudo alsa force-reload

サウンドドライバをアップロードしていると出力されます。

Unloading ALSA sound driver modules: snd-hda-intel snd-hda-codec snd-hda-core snd-hwdep snd-pcm snd-seq-midi snd-seq-midi-event snd-rawmidi snd-seq snd-seq-device snd-timer.
Loading ALSA sound driver modules: snd-hda-intel snd-hda-codec snd-hda-core snd-hwdep snd-pcm snd-seq-midi snd-seq-midi-event snd-rawmidi snd-seq snd-seq-device snd-timer.

このあと、再起動したら直りました。Soundのpropertyを見ると再起動前はDummyしかありませんでしたが、"Headphone"が現れています。




参考
https://itsfoss.com/fix-sound-ubuntu-1304-quick-tip/


これをやってもダメだったとき

pulseaudioを削除して再インストールします。

$ sudo apt-get remove --purge alsa-base pulseaudio
$ sudo apt-get install alsa-base pulseaudio

けっこう時間がかかって再起動のとき画面が出なかったりして焦りました。再度再起動すれば直りました。
https://ubuntuforums.org/showthread.php?t=2376586


2018年10月12日金曜日

Ubuntuの外付けHDDへのバックアップ

毎月程度でバックアップを取ろうと思うのですが、重いファイルVagrantとかだけ除いて、7.8GB分を外付けHDDに移すことに。

転送速度は10MB/sec程度なので、1分で600MB、10数分で7.8GBは転送が終わるということですね。


たまたま10.0MB/secの瞬間のスナップショットがとれました。

バックアップをとってからUbuntuのマイナアップデートをして、再起動することにします。


その後メモ

途中から速度が出なくなって、転送速度は3MB/sec程度になり、結局1時間近くかかりました。

保存するファイルを選んで減らしました。

trelloにEleganttを入れると変なJSONが入る件

trelloでタスク管理をしていますが、ガントチャートをかけるアプリEleganttを入れました。あまり上手く使えていませんが・・・それよりも気になることがあります。

以前に作っていたカードのDescription部分に日付等を表すElegantt側の表記が入っていることです。


[](Elegantt_data:dont_delete{"ignored":false,"autoPlanned":false,"ownerId":false,"dependencies":[],"ped":"2018-09-03T12:00:00+09:00"})

trelloのキャプチャ。JSONが入っています。

自分が使っている範囲では記述が追加されていて気持ち悪い、というレベルですが、勝手に4行消える、という報告もあったり。
https://community.atlassian.com/t5/Trello-questions/Any-thing-beyond-4-lines-of-text-gets-deleted-when-I-edit-the/qaq-p/709239

ガントチャートはそこまで使っていないので、Eleganttは消しました。



日誌2018年10月

2018/10/12

うっかりしていると今年が終わってしまいそうです。最近はpythonanywhereを触り始めました。無料で使えるホスティング、かつPythonが使えるということで便利かなと。

vimをしばらく使っていなかったらコマンドをことごとく忘れていて焦りました。たかだか1ヶ月で忘れるものだなぁ、、ということでうっかり忘れたときのためのリストとか作っておくとよいのかもしれません。使用頻度順に並べるとか、検索が超しやすいとか。検索のしやすさって結局のところは速さとあいまい検索の成功率なのかなとこの場合は思います。

2018/10/25

いつの間にかクリックポストが値上がりしていました。164円から185円へ。昔(2008年ごろかな)はクロネコヤマトメール便が80円だった時代があったんだよな・・・。それを言うと昭和初期の郵便はどーだこーだ、とかになってしまいますね。

最近ちょっとC++とGoをやろうとしています。ちょっとだけつまみ食い的な感じです。


2018/10/27

家の回線がフレッツ光の100Mなのですが、遅くてもっと速くならないかな〜と思い、1Gのプランにしようと思ったら自分のマンションではNTTの1Gプランがないということでした。auの1Gはあるけど評判がいまいち・・・(ネガキャンか?)。しかし速度を測っていると109Mの下りスピードが出ているとのこと(本当?)。ちょっと信じがたいのですが、実際のところそこまで困っているわけではないので放置しますか。自分のToDoに入っていたのでこれで終了。

Chrome ExtensionのWater Notificationで少し困っているのですが・・・。使えているんですが、通知が入ってくる場所を右上じゃなくて左上にしたいのですが・・・どうやってやるか分からない・・・。少し調べた限りでは、できないようです。chrome extensionのページを見ても特に記述ありません。
https://productforums.google.com/forum/#!topic/chrome-ja/akgmzuIktec
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12179051632

何故困っているかというと、最近デュアルディスプレイにして、主モニタが左にあって、通知が右にある副モニタに出てしまって気が付かない・・・ということです。


2018/10/28

Flaskで少し困り気味。チュートリアルでローカル環境ではできるのですが、デプロイできない。。一気にやるから難しくて、デプロイ環境でチュートリアルをやれば良いのでしょうか。それでは意味がないのでは、と思うのですが最初はそういうものなのかと・・・。英語の解説は読めるつもりなのですが、まだまだですね。

2018年10月10日水曜日

NTTフレッツのCLUB WESTのポイント交換が微妙

NTT西日本でフレッツ光回線を契約しており、契約や更新によってもらえるポイントがあります。

新規契約で3000ポイント、16ヶ月利用で3000ポイント、などですが・・・。
https://flets-w.com/user/support/guide/16.html

交換できるポイントで、Huluの1ヶ月無料チケットというのがあり、それが

1007ポイント

・・・この端数は?EVILでしかないと思いますけど〜。そこまでしてポイント使わせたくないのかな?と思いました。auに乗り換えかな・・・。


Ubuntuログイン画面でSwitch to greeterとなる件

環境はUbuntu16.04です(18.04も同様)。


対応を先に書くと、
1. ubuntuアップデートする(しなくてもよい場合あり)
2. ubuntu再起動する
です。
追記:アップデート関係ないようです。

症状


・ロック画面からログインしようとしたら、Switch to greeter という表示がパスワード入力画面に出る。

・そのパスワード入力部分をクリックすると通常画面に戻るが、数秒間黒い画面に変わって一行だけ表示が出る(読めませんでした。hmdi...?とか出ていたような)。

こちらによると、リブートせずにgreeterに戻るには、Ctrl+Alt+F1らしいです。

greeterはログイン画面のUIを提供している仕組みだそうです

対策


とりあえずログインはできるので放置しても良いのですが、、、

・ubuntuをアップデートする
・デュアルモニタに変更して2週間後にこの症状が出たのですが、デュアルモニタが原因なのでは?デュアルモニタで、ログイン入力画面がどちらのモニタに表示されるかは決まっていない(マウスカーソルの位置しだいでどちらにもなり得る)ようなのですが、ここらへんの切り替えでUIがおかしなことになっているのでは、と推測しています。
→デュアルモニタは関係なさそうです

その後:直った


・ubuntuのアップデートをして
・再起動

したら直りました。アップデートをサボってはいけませんね。

その後:また発生


・アップデートしたら直るのでしょう、と楽観的

その後: 再起動するだけでOKでした。

その後も同じ症状が出て再起動しなくていい方法を探した

強制的にログアウトするので、アプリケーションは保存しておきましょう。
$ sudo apt install --reinstall lightdm
$ sudo service lightdm restart
https://askubuntu.com/questions/1040159/authentication-failure-switch-to-greeter

2018年10月2日火曜日

Pythonanywhere review

This is my own review for 1 hour use of free trial.

- slow switching pages for other files or... (than local PC). Really frustrated, I need to get used to this.

- command of ubuntu  is useless (ps), it might be from different linux family

- I couldn't deploy "flaskr" tutorial web-app I made before ( in 1 hour. So need more time...)


I have never used other hosting service before for flask or web-app, so I can't compare to any others.