python 暗号化 複合化 テキスト 保存
これの延長。暗号化した文字列をテキストファイルに保存したいという謎の欲求により生まれたコード
import base64 from Crypto import Random from Crypto.Cipher import AES import string, random class AESCipher(object): def __init__(self, key, block_size=32): self.bs = block_size if len(key) >= len(str(block_size)): self.key = key[:block_size] else: self.key = self._pad(key) def encrypt(self, raw): raw = self._pad(raw) iv = Random.new().read(AES.block_size) cipher = AES.new(self.key, AES.MODE_CBC, iv) return base64.b64encode(iv + cipher.encrypt(raw)) def decrypt(self, enc): enc = base64.b64decode(enc) iv = enc[:AES.block_size] cipher = AES.new(self.key, AES.MODE_CBC, iv) return self._unpad(cipher.decrypt(enc[AES.block_size:])) def _pad(self, s): return s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs) def _unpad(self, s): return s[:-ord(s[len(s)-1:])] def writeEncrypted(inputtext, filename, key): cipher = AESCipher(key) encryptedtxt = cipher.encrypt(inputtext) f = open(filename, 'w') f.write(str(encryptedtxt).split("\'")[1]) f.close() def openDecypt(filename, key): cipher = AESCipher(key) f = open(filename) data = f.read() f.close() print(cipher.decrypt(data.encode('utf-8'))) if __name__ == '__main__': key = ''.join([random.choice(string.ascii_letters + string.digits) for i in range(50)]) print(key) writeEncrypted("hogehuga", "hogehuga.txt", key) openDecypt("hogehuga.txt", key)
特殊なことはしていないんだけど
byte->strするときに
b'aiueo'
みたくなるので暗号化した部分だけ取りだす
Chart.jsで以前描画したものが残る問題を解決する
var chart; //グローバル変数にする const display_graph = function(scores, labels, colors, date){ const doughnutData = { labels : labels, datasets : [{ fill:false, tension:0, label: date, backgroundColor: colors, data : scores }] } const ctx = document.getElementById("chart-area").getContext("2d"); ctx.canvas.width = 600; ctx.canvas.height = 400; if(chart){ chart.destroy(); //すでにグラフが存在すれば消す } chart = new Chart(ctx, { type:'doughnut', data:doughnutData, options: { legend: { labels: { fontSize: 24 } } } }); };
この二つをやればいい。
Flask fullchallender.js ajax クリックした日付に対応した情報をFlask側に送る
これも全然難しい話ではなかったのだが、凡ミスでつまずいた。
//callender.js const my_cal = function(){ $(document).ready(function() { $('#calender').fullCalendar({ dayClick: function(date, jsEvent, view) { const send_date = JSON.stringify(date.format('YYYY-MM-DD')); $.ajax({ type:'POST', url:'/fetchday', dataType:'json', data:send_date, contentType:'application/json', success:function(success_data){ console.log(success_data); }, error: function(error) { console.log("error"); console.log(error); } }); return false; } }); }); }
#app.py @app.route('/fetchday', methods=['POST']) def fetch_day_data(): get_json = request.json print(get_json) return_json = { "hello":"world" } return Response(json.dumps(return_json))
これで動くかな。ところどころ端折ってい待っているので動かないかも。
Flaskでlist状のdictをhtml上に展開する。
やってみれば簡単なんだけど
やりたいこと:
長さの同じ配列が二つある。一つの値をoptionのvalueに、もう一つを表示される値に使いたい。
@app.route('/action', methods=['POST']) def arrange_form_nums(): title = "yeah!" option_value = [0, 1] option_text = ["option1", "hya"] options = [{"value":v, "text":t} for (v, t) in zip(option_value, option_text)] print(options) return render_template('forms.html', title=title, options=options)
<select name="test-select"> {% for o in options %} <option value="{{o.value}}">{{o.text}}</option> {% endfor %} </select>
form作成できるやつ使った方が楽な気がしてきた。
python osc openframeworks keyboardinput pythonでoscを受信しながらキーボード入力を受け付ける。
openframeworksからキーボード入力を送れば解決なのでは?という声が聞こえてきそう…。
import argparse import math import re import threading import sys from pythonosc import dispatcher from pythonosc import osc_server import config import osc def keys(): while True: input_word = input(">") if input_word == "s": sys.exit() def osc_loop(): parser = argparse.ArgumentParser() parser.add_argument("--ip", default="localhost", help="The ip to listen on") parser.add_argument("--port", type=int, default=1111, help="The port to listen on") args = parser.parse_args() _dispatcher = dispatcher.Dispatcher() _dispatcher.map("/found", osc.set_found) _dispatcher.map("/raw", osc.print_raws) server = osc_server.ThreadingOSCUDPServer( (args.ip, args.port), _dispatcher) print("Serving on {}".format(server.server_address)) server.serve_forever() dual_loop = threading.Thread(target=osc_loop,name="dual_loop",args=()) dual_loop.setDaemon(True) dual_loop.start() if __name__ == "__main__": keys()
threadingのtargetを逆にすると正しく動作しない。これで本当に正しく動いているのだろうか。
dispatcher = dispatcher.Dispatcher()
とするとうまく動かないので注意。_から始めるべきでないのはわかっている。
Openframeworks windows ofxfacetracker ofxcv
いろいろつまった。けど、思ったよりはスムーズにできたかな。
最初から動くはずのないwindows x ofxfacetracker
でもちゃんと読めばできた。
- windows10
- visual studio 2015
- openframeworks 0.9.8
要約すると
- ofxCvはoFのバージョンに対応するものを入れる
- オブジェクトファイル名のパスを変更する
- モデルをいれる
まずはまったのは
ofxCv
github.com
exampleを動かせど動かず。
それも当然。なにも読まずにmasterを入れていたからだ。ちゃんと読めば書いてある。
OF stable (0.9.8): use ofxCv/stable
さて、それでは動かしましょう、と思っても動かない。
taka-say.hateblo.jp
エラー内容は違えど、やってみるか!と思ってやってみる。
動かない。
最後はほんとばかばかしくて
Then, you need to make a copy of the /libs/FaceTracker/model/ directory in bin/data/model/ of each example. You can do this by hand, or python copy-model.py will take care of this for you.
要はモデルをコピーしてない、と。そりゃ動かないわけです。
というわけで
flask, python, fullcalendar.jsでflaskから送った特定の日付の背景色を変える。
あんまりスマートじゃない気がするんだけど、とりあえずできたので忘備録的に記載しておく
dates = ["2017-06-15", "2017-06-16", "2017-06-18"] reasons = ["", "ppo", "pupp"] cal_data = { "date_answer" : [dates, reasons] } #dictにする必要はないんだけど、今後使うので return render_template("test.html", CalSet=json.dumps(cal_data))
<canvas id="chart2"></canvas> <div id="calender"></div> <script src="{{ url_for('static', filename='js/test.js') }}"></script> <script> my_cal({{ CalSet|tojson }}) </script>
const my_cal = function(data){ const d = JSON.parse(data); const d_a = d.date_answer $(document).ready(function() { $('#calender').fullCalendar({ dayClick: function(date, jsEvent, view) { $(this).css('background-color', 'red'); }, dayRender: function (date, cell) { for(var i = 0; i < d_a[1].length; i++){ if(d_a[0][i] == date.format('YYYY-MM-DD')){ cell.css("background-color", "yellow"); } } } }); }); }
ポイントは下で
date.format('YYYY-MM-DD')
これをしないとstringでこの形にならないらしい。
ちなみにforで回しているけど汚い気がしてならない。
さらに言うと
`isSame("2017-06-18")`
みたく動く関数があるみたいなんだけど、使えませんでした。
Fullcalendar event cell background color - Stack Overflow
これを参考にした。