python3系とherokuでdjango channelsのデプロイ

django channelsのdeployingを見れば載ってる。

""" myproject/asgi.py """
import os
import django
from channels.routing import get_default_application


os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
django.setup()
application = get_default_application()

まずはasgi.py。

Procfileは以下のように。

web: daphne -b 0.0.0.0 -p $PORT myproject.asgi:application -v2

たまたまネットサーフィンしてたらworkerつけなくても大丈夫だよって書いてあったのでこれで実行できた。 daphneだけ実行でオッケーっぽい。

あと、早くするならuvicornっていうのを使うといいらしいのでやってみたいと思う。軽量なasgiサーバーらしい。 アドオンはredisを入れ忘れないように。

djangoのpythonコード内で時間のフォーマットを取得する

djangoローカライズされたフォーマットで時間の文字列を取得したい時は、

from django.utils.formats import date_format

をDateTimeFieldとかDateFieldと"DATETIME_FORMAT"を渡したりすれば文字列が返ってくるけど、時間があってない(l10nされてない)。 そんなときは、諦めてテンプレートがレンダーした結果を返してもらえばいい。

from django.template import Context, Template

def get_datestr(datetime):
    t = Template("{{ date }}")
    c = Context({"date": datetime})
    return t.render(c)

こうすれば、ローカライズされて時間も日本のだし、フォーマットも日本のになる。まぁローカライズの設定がちゃんとしていたらだけど。

ちなみにローカライズのフォーマットは

django.conf.locale.ja.formats

にある。 ちなみにちなみにこのフォーマットは普通のフォーマットじゃないみたい。 websocketやるとTemplateをconsumers内で使った方がいいんじゃないかとふと思った。 あと数日以内に完成するかなぁ

verilogを書くことになりそうなので。

CPU作るぞ〜っていうことでverilogを読むことになりそうなので、書いてみた(は?w)

使用したツール群

チュートリアル

インストールは省略

/* AndNand.v */
module ANDNAND(a, b, o1, o2);

input a,b;
output o1,o2;

and AndInstance(o1, a, b);
assign o2 = ~(a&b);

endmodule

o1 にand、o2 にnand。 assignとプリミティブモジュール?を使ってみたパターン。 バス幅とかは軽くみただけだからまだ何も言えないかなぁ。

/ * AndNandTb.v */
module ANDNANDTB;

reg a, b;
wire o1, o2;

ANDNAND mod (a, b, o1, o2);

initial begin
    $dumpfile("andnandtb.vcd");
    $dumpvars(0, ANDNANDTB);
    $monitor("%t: a = %b, b = %b, o1 = %b, o2 = %b", $time, a, b, o1, o2);
        a = 0; b = 0;
    #10 a = 1;
    #10 a = 0; b = 1;
    #10 a = 1;
    #10 a = 0; b = 0;
    #10 $finish;
end
endmodule

コンパイルのコマンド

% iverilog -d AndNandTb -s ANDNANDTB AndNand.v AndNandTb.v

gtkwaveがうまく入っていれば、openでシミュレーションがみれる。f:id:b1u3:20190125235951p:plain

% open andnandtb.vcd

30日でできるOS自作入門をやり終わった

感想

30日でできるOS自作入門をやり終わった。
自分で書いて、ふむふむっていいながら書き進んだ。
あとは細かいところとかを調べて実装したりしてみたいと思った。
ハードとソフトのインターフェースの部分の実装がすこしでもわかったのはよかった。
後半数日が駆け足になってしまったので、また読み直したい。
30日でできるOS自作入門は、NASMみたいなアセンブラでやってるんだけど、NASMでやったときのコマンドとかがどうなるのかが気になってる。
コード面ではアセンブラインテル記法)、C、gnu makeとかを掘り下げていけるといいかもしれない。
やっぱりGASで書きたいなと思っているので、またOSdevのところを見たいと思ってる。
あとlinuxカーネルのコードもみてみたい。
ブートストラップローダとかどう読み込んでいるのかとかを参考にしたい。そこはGRUBの範疇か。
linux用のノートパソコン欲しいなぁ。仮想上で動かすの気持ち悪いんですよね。かといってデュアルブートはなぁっていう感じで。
最初はos x上ですすめようかなと思ってたんだけど、マルチタスクの実装あたりでqemuがおかしくなったのでwindowsに移行させました。
os自作入門はwindowsでやるもんだったなw
あと、windowsでやるときはMakefileのコマンドをcmd.exe経由で実行しないといけないので注意した方がいい。
この手の低層のやつは動かないと致命的なものが多いけどすんなりいったのはかなり好感持てると思う。
あととってもわかりやすいし。この本のきついところは、コードの整理する部分だったかな。
まぁここらへんで。
追記
x86のセグメント管理がすごくわかりやすかった。x86もっと知りたいと思えた。
これが言いたかったのに書き忘れてた。

どんな人におすすめできるか

  • 特にやることがないけどでかいプログラムを作ってみたい人
  • 長期間かけてプログラミングしてみたい人
  • 情報系の大学で授業でOSの概念だけやったひと
  • 低層のプログラミングに興味がある人

django channelsで複数アプリのルーティング

django channelsのチュートリアルだと一つのアプリで複数アプリのルーティングが書いてなかったので。

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import chat.routing
import anime_log.routing
from django.urls import path, include


application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter([
            path('ws/chat/', URLRouter(chat.routing.urlpatterns)),
            path('ws/anime_log/', URLRouter(anime_log.routing.urlpatterns)),
        ])
    ),
})

pathでURLRouterをネストさせる。 includeだとURLRouterをネストしろって出るので。

EaseUS Todo BackupのOSクローン失敗事例

家のwindows機のssdを256から500に買えようと思ったんだけど普通に失敗した

OSの入ったドライブはGPTになってる。

新しいドライブをGPTでフォーマットして、システムクローンを行ってみた。

移し替えた後もOSは起動できた。今まで通りと思っていた。

chrome開いたらERR_CERT_AUTHORITY_INVALIDが出た。どのTLS/SSLが効いてる(https)サイトも観れなかった。googleすら。応急措置というかこれでいけるかなって思ってとりあえずほかのパソコンから有名どころの証明書をダウンロードしてUSBメモリ経由でインストールしていくつかのサイトは見れるようになった。

エラー表示が出た際のERR_CERT_AUTHORITY_INVALIDの文字列をクリックすると、証明書の中身を見ることができて、ISSUERってのが出るので、ISSUERの文字列+certificate downloadを検索すると大体の証明書はダウンロードできてインストールできる。ここらへんはセキュリティ的にシビアな部分なので自己責任で。

別の方法で試したのが、firefoxのインストール。別のパソコンからインストーラーを持ってきて試した。firefoxはシステムの証明書を使っていないっぽくて、どのサイトも閲覧できた。firefoxいいわね。

あらかた証明書をインストールしても、microsoft officeなんかの認証機能がまともに使えなくなっていたので、ここらへんでギブアップした。

あとあとeaseUSの情報探してたらGPTはアプリからやると失敗するらしいwwww 次はwinPEからやってみよう

年末年始は三ツ星カラーズハイスコアガール読んでそれ以外は親戚のうちでも家でも本読んでプログラミングしてました。楽しかったです。冬休みカムバック。

golangで作るインタープリター読み終わった

golangで作るインタープリター読み終わりました!!!!!!!! 率直な感想はとても面白かったです。 あんまり言語処理系詳しくないんですけど、ソースコードがめちゃめちゃ綺麗でテスト駆動方針なので、非常に読みやすいです。

読む前に知っておいて良かったこと

golangの文法に慣れるのにあったほうがすぐ覚えられる

https://golang.org/doc/code.html

ここに載ってる。たまたま見たことあったけど知ってて良かった。

インタープリターまでなので、中間言語生成からの機械語の最適化とかまでは知らなくても問題なかった あくまでレキサーとかパーサーとか。本書にも軽く載ってる

上記のことはないならないで刺激的な情報が得られるんじゃないかな

学んだこと

今ぱっと思いついたものを書いて見た。多分他にもあるじゃないかな...あってほしいな...

所感

真面目に書いて 1 ヶ月くらいで読み終わった golangの構文すごい刺激的だった。type assertionは少し戸惑った。このインタープリターなら他の言語に移植するの難しくなさそうだなって思った。いわゆるコンパイラのフロントエンドと呼ばれる部分の実装だけど、あんまりでかいプログラムを書くことが少ないので、とてもいい経験になったと思う。 個人的にはやっぱり低層の技術が好きなので(だからwebアプリとかモバイルアプリが苦手)コンパイラもちゃんと勉強したいなと思っていて、ASTからの機械語生成の部分を1 から 作ってみたい。本書でも出てきたけど、ガベージコレクタはgolangに依存するので、ここも自分で作れないかなぁと少し思った。 golangは静的な言語でネイティブな機械語を出力できるわけだけど、osが作れないのはここら辺に理由があるのかなぁと考えたりした。

夢が広がる本だなぁ。

https://www.amazon.co.jp/dp/4873118220/ref=cm_sw_em_r_mt_dp_U_gyJlCb1HVVQM2