2017年9月23日土曜日

jwt(JSON Web Token) を tornado json で

jwtを活用するときに
・クライアント:vue+axios
・APIサーバ:tornado json(Python)
の構成での連携するときの話。

先ず、「tornado json」 を使っている人は少ないかもしれませんが
これがなかなか使い易い。

[index.py]
import tornado.ioloop
from tornado_json.routes import get_routes
from tornado_json.application import Application


def main():

    import hoge

    routes = get_routes(hoge)

    application = Application(routes=routes, settings={}, generate_docs=True)

    application.listen(8088)

    tornado.ioloop.IOLoop.instance().start()


if __name__ == '__main__':
    main()

APIサーバとしてはこの10行程度で動きます。

そして下記の様にクラスを追加するだけで自動でルーティングしてくれるのが便利。
(クラス名を基にしてpathを自動生成)

[hoge/api.py]
from tornado_json.requesthandlers import APIHandler
from tornado_json import schema


class Greeting(APIHandler):

    @schema.validate(
        output_schema={"type": "string"},
        output_example="Greetings, Named Person!"
    )
    def get(self, fname, lname):
        return "Greetings, {} {}!".format(fname, lname)


上記の例では http://~~~/api/greeting/Taro/Suzuki/
みたいな感じでGETアクセスできます。
ここの「Taro」はfname、「Suzuki」はlnameに入りますので
後はよしなにしていくという次第。

実際のWEBサーバとしてはnginxと組み合わせて調整していかなければなりませんが
処理が早くて開発し易い環境の一つだと思います。

尚、jwtの取り出しは単純にaxiosから送られてきた通信ヘッダから
「Authorization」を取り出すだけ。

auth = self.request.headers.get("Authorization", None)

しかしここには「Bearer ****(token)***」のように入いっているので
auth.split() をしなければならない。(なんかダサい)

取り出したjwtは下記の様にしてデコードします。

import jwt

algorithms = 'HS256'

try:
    user = jwt.decode(token, self.secret, algorithms=self.algorithms)

except jwt.ExpiredSignatureError:
    # Signature has expired
    return self.error_object("Signature has expired")



ちなみに このTornadoサーバは元Google社員が立ち上げたFriendFeedによって開発されたのですが、現在はFacebook に吸収されてオープンソース化されています。
そして、このjson tornado関連の有志は5人と少なく、気長にアップデートしている感じです。



2017年5月12日金曜日

JanScore 2

麻雀成績共有アプリ「JanScore v2」
約3年ぶりに大幅アップデートしました(汗) 

以前のバージョンではAndroidのネイティブコンポーネントに色々と不具合があったことと、WebViewがChrome化したことを鑑みて、今回は完全ブラウザアプリにしてみました。


https://play.google.com/store/apps/details?id=com.janscore


しかし、最新のWebViewでもやっぱり駄目でしたね。
もっさり感が否めない。

Chrome Custom Tabs にでもしようかと思いましたが、
アドレスバーが見えるのは違和感があったので不採用。

ただただ開発が楽になっただけで、使い勝手はいまいちな仕上がりに。

がっつりネイティブの機能を使って再開発しないといけないんですね..

構想的にはLINE感覚でコミュニティの管理が出来れば良いな、と思っています。実装が面倒ですが、push通知とかあったり。

iOSにも対応しないといけませんね、、

アカウント管理も本気で作るべきか、、

次回の大幅アップデートを乞うご期待ください(苦笑)

2015年5月1日金曜日

Vivaldi(ブラウザ)

(※)vivaldi とはOpera Softwareの創設者Tetzchner氏が起ち上げた新しいブラウザのことです。

思えばOpera(ブラウザ)は、ver.4.0くらいから、一時期はIEやFirefox、Sleipnir、Lunascapeなど色々と寄り道をしながらも、10年以上使わせて頂いております。

そんな私には(今さら書く事でもないのですが)今までのOpera開発方針が変わり、コモディティ化したよくあるブラウザに変貌してしまったのが大変残念でなりません。

特にショックだったのはメーラーの分離。

今やWEBメールしか使わないといった方たちもおられますが、
メールはブラウザ上で使えるのが一番便利だと思います。

それもあって今もver12を使い続けている今日この頃です。


さて、
先日、ノルウェーのVivaldi Technologies ASから「vivaldi」Technical Preview 3が公開されました。
(今回追加されたのは「タブスタックを並べて表示する」機能ですが、詳細はここでは割愛します)

Vivaldiが目指すのは、ユーザーを第一に考え、高速かつ多機能、柔軟性に優れた「私たちと友達のためのWebブラウザ」とのことで、ここで言う「私たち」というのは、毎日 大量の時間をブラウザに向き合っているヘビーユーザーのことを指しますが、その「私たち」が使いやすいように改良していくという方針は、Tetzchner氏率いるチームの「ユーザー視点」への熱い想いが込められている様に感じられます。

Opera12をこよなく愛するいちユーザーとして、
本プロジェクトを引き続き、応援していきたい。

製品版がリリースされれば、もちろんメインブラウザとして使わせて頂きます。


余談:「Microsoft Edge」が発表されましたが、どうなんでしょうか。。





TONY(トニーさん)
https://vivaldi.com

2014年8月31日日曜日

秘密の国のアリス(新版暗号技術入門)

先日、面白そうでしたので購入してみました。

新版暗号技術入門-秘密の国のアリス-結城-浩

内容は、アマゾンのレビューにもありますが、
共通鍵暗号、XOR、mod 、PKI、DES、トリプルDES、Diffie-Hellman、Rijndael、RSA、ElGamal、Eabin方式、楕円曲線暗号、ハッシュ関数、認証コード、デジタル署名、PGP、SSL/TLS、量子暗号や量子コンピュータなど、数学的知識を専門にもたない我々に対して解り易くまとめておられます。

約400ページほどありますが、気づけば全部読んでいたというくらい夢中にさせてくれる大変良い書籍です。
多々、良い書籍と思える箇所はありますが、特に、

専門的な知識の解説にあたっては、作り手目線ではなく、企業などで使う人の立場(ユーザー目線)になって書かれており、解説を読んでいて疑問に思ったことが良いタイミングで補足されている点が非常に素晴らしく、著者の頭の良さが窺えました。

→ この手の書籍は淡々と技術紹介をするだけであまり面白みがないのすが、本書では、こんな場合どうなるの?こういう理解でOKなのか?こっちの方が良くないか?など読み手の様々な疑問に対して、クイズ形式やQAを用いて丁寧に解説してくれています。




久々に良い読み応えのある良い書籍に会えました。

2014年7月7日月曜日

フェデラー v ジョコビッチ @2014Wimbledon

4時間に及ぶウィンブルドン決勝、
両者の技術と思いがぶつかりあい、力の限りを尽くした素晴らしい試合でした。

個人的には同じ年のフェデラーに勝って欲しかったのですが、
巻き返してフルセットの後、もう一歩のところで敗れてしまいました・・・。



片手打ちのバックハンドがきまったときはしびれます。

また、今回、サービスAの数はジョコビッチの倍以上ありましたが、ラリーやダッシュ時にほぼほぼポイントを取られてしまい、残念なことに。

一球毎にハラハラする試合でした。














来年も是非、8度目V目指して頑張って頂きたい。

2014年4月3日木曜日

曖昧な指示のメリット

何かを指示する事、それは指示した者が「責任を負うこと」になるのは言うまでもない。

だが、世の中には曖昧な指示をされる方もいらっしゃる。


大雑把な(曖昧な)指示をする、  ということは、即ち、

 = 具体的な指示をしない、  ということは、

 = 受け手に指示の解釈を任せる、  ということは、

 = 受け手の実行責任範囲を広げる、  ということは、

 = 自分の責任範囲が狭くなる(そんなことは無いのだが)、  ということは、

結果、
失敗すれば受け手が勝手な行動をしたので失敗した、として受け手の責任にしやすく、
成功すれば自分の指示が的確だったので成功した、として自分の功労にしやすい。

これは、指示者がどちらに転んでも悪者にならない構図として、
細かく指示して失敗した時のための予防策には最適です。

全てが自己責任という社会ではあるが、
そんなことを続けているようでは、指示者への信頼は生まれないので注意は必要かと。





2014年2月20日木曜日

Drag and Drop ListView with CheckBox

ドラッグアンドドロップ操作で並び替えのできるリストビューに、チェックボックス機能を加えたものが必要になったので、入念に探してはみましたが、やむなく作ることに...

一番近かった?のが、「CWAC TouchListView」でしたので、さっそく改造。

ポイントとしては、

 ・グラバーアイコンをドラッグして並び順の変更ができる

 ・ラベル(もしくは、チェックボックス)をタップして、チェック/非チェックの選択ができる

 ・Preference不要(必要であれば自前)

 ・出来るだけ簡素にする

くらいでしょうか。


移動前
移動中






























[編集箇所]











































・・・もっと簡単にしたいところです.


ソースはこちらから(CheckDragListView.zip)