djangoチュートリアル その3、その4
その3は正直言うことない。
ただurls.pyにnamespacceを追加して逆引きでURLを指定するときに'namespace: name'ってコロンで区切るのを忘れることが多いのでモジュールのインポートと同じように . で区切ればよかったんじゃないだろうか。
その4
汎用ビューが難しい。
def detail(request, question_id): question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/detail.html', {'question': question}) class DetailView(generic.DetailView): model = Question template_name = 'polls/detail.html'
detail関数とDetailView.as_view()は同じ働きをする。クラスビューはデフォルトの動作が細かく設定されていて、それを上書きすることで使う感じ。DetailViewが指定してないのに{'question':question}って変数を使ってテンプレートをレンダリングできるのはそれがデフォルトの動作だから。これを変えるにはcontext_object_name='hoge'と上書きすればいい。
GETとPOSTで動作を変えることもできる。
class MyView(View): def get(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
って書けば
if request.method == 'GET' .....
とやっていたのを省略できる。
1ページで複数のオブジェクトの内容を表示したい(例えば作家一覧と、その作家が書いた小説一覧など)のに汎用ビューじゃ1つしかmodelを設定できないじゃないかと思った人もいるかもしれない。そんなときはget_context_dataメソッドを上書きすればいい。
def get_context_data(self, **kwargs): # Call the base implementation first to get a context context = super().get_context_data(**kwargs) # Add in a QuerySet of all the books context['book_list'] = Book.objects.all() return context
この例ではmodel = Fuga と指定したのに加えて他の変数(book_list)を指定してる。
django2.xになってチュートリアルが変わって、フォームの章がないのと、今後はあんまり関係なさそうなのでいったんここで終了します。
「新しいLinuxの教科書」を読んだ
PCを自作して、OS代をケチってubuntuにしたはいいがわからないこと多すぎるのと、プログラミングするんだったらやっておいて損はないだろうってことでlinuxを勉強した。
内容はちゃんと初心者向けで、分量、内容ともにちょうど良かったと思う。ほんとに教科書。まぁこの本に書いてあること以外知らんけど。技術書は「入門」と書いてあっても入門できなかったりするがこれはちゃんとできた。
個人的にはvimの使い方とか、基本的なコマンドとか、bashの操作とか、gitの復習とかできてためになった。Qiitaよんでて#!/bin/bashってなんだよとか憤ってたのがなくなるのは嬉しい。
文字列処理の方法が色々紹介されていたけどsedとかawkとかつかうならpython使うかなーと思ってあんま真面目に読んでない。まぁpythonも使えないんですが。
色々やっては挫折した身としては最初からこれ読んどきゃよかったという思いが強い。「入門サイトで十分でしょ」とか思ってたけどやっぱ本とサイトじゃ違うわ。色々やって途中で挫折してたからこそこの本快適に読めたってのはあるかもしれない。
タイトルにもあるとおり一通り読んだだけなので「これやって〜」とか言われてもできない。プログラミングあるあるの、読めるけど書けない状態と一緒。でもまぁ俺の目的は書けることじゃなくて文献を読めることだからOK。linux読めないと本題にすらたどり着けないことが多々あったので。
これからはずっと停滞していたdjangoの勉強を再開したい。はやく自分で一つプロダクト作りてぇよ。あ、blenderもやりたい。
パソコンを自作した。
いい加減今まで使っていたノートPC(x202e)のスペックが低すぎてストレスしか感じなくなってきた*1のでパソコンを自作することにした。
希望としては以下
- ubuntuの使い勝手がかなりいいのでwindowsはいらない。
- 将来グラボつける余地を残したいので電源はいいやつ。
- グラボつけてゲームするときのことを考えてcpuはケチらないでi5-8400
- ATXはでかすぎるのでmicro-ATX
- もちろんSSD。あわよくばNVMe
という感じで決めて秋葉原に行った。
cpuはryzen5 2400Gと迷ったけど、2400Gの性能じゃ大型タイトルするには力不足だし、GPUつけるとしてもCPUが貧弱。ってことでi5にした。ほんとはソケットバンバン変えるintelなんて使いたくなかったけどまぁしょうがない。
事前に価格.comで軽く見積もって行ったところ、5.7万円くらいだった。が、初心者が知識ないのに通販で買うのは不安なので、多少高くなってもいいから経験者に教えてもらおうと思ってアキバまで行ってきた。
アキバでPCパーツ売ってるところはだいたい自作PCの見積もりもやってくれるので何店かで見積もってもらうのが吉。
俺は ドスパラ×1店・ツクモ×2店で見積もってもらったんだけど、構成と値段に納得できたツクモで買うことにした。諸々の保証込みでお値段6.3万円
構成は
- cpu: i5-8400 2万
- メモリ: curucial 8GB 1万
- 電源: Antec 550W Gold 6500円
- SSD: 960 EVO 9300円
- マザー: gigabyteのH370M D3H 9000円
- ケース: 安いやつthermaltake H18 3500円
- +消費税と電源・マザーの保証
なんか電源が特価やってて550WでGoldなのに6500円だった。あと960EVOが型落ちってことでやすかった(らしい)。価格.comと比べたらちょっと割高だけど保証の内容も充実してるし、経験者に選んでもらってるから間違いがないので全然払う価値はあると思う。
パソコンの組み立ては初めてだし、ここで壊したらまた金と時間がかかる・・・と思ってビクビクやってた。
このサイトを見ながらやった。
組み立ててるときにめっちや困ったのが、ケースのフロントパネルから出てるコネクタが色々複雑だったこと。
まず極性のあるピンなのにケーブルに色がついてないからどっちが+極なのかわからない。よく見たら▲印がついてたのでggると▲がある方が+だと判明。ほんとに合ってるか不安だったけどあってたらしい。
あとLEDってシールが貼ってあるでかいコネクタがあったんだけどどう見てもマザボにさすところはないので放置した。なんとかなった。
で、組み上げたのはいいがキーボードがbluetoothしかないってことで翌日USBキーボードを買ってきた。
緊張しながら電源つけるとbiosが起動。めっちゃ嬉しかった。
ubuntuのインストールも簡単で、ドライバがない!とかで詰まることもなかった。やっぱubuntu使いやすいわ。
システムモニタを見てみるとちゃんと6コアあるし、メモリも8GBある。いやーいいね。
youtubeをみてみたりしてみたけどまったくのストレスフリー。買ってよかった。
ちなみにminecraft 32チャンクで最低30fpsでてた。場面によっては60fps。
あとSSDの速度だけど、ubuntuだとcrystaldiskがないので
fio -filename=/tmp/test2g -direct=1 -rw=read -bs=4k -size=2G -numjobs=64 -runtime=10 -group_reporting -name=file1
で簡単に計測したところ1850MB/sだった。なんか公称値の3000MB/sより遅いけど十分早いし治すのもめんどくさいしこのままでいいや。
djangoチュートリアル その2
先生!migrateとmakemigrationsの違いがわかりません。
それはそれとして
ForeignKey & ManyToManyFieldの使い方
class Tag(models.Model): tag_name = models.CharField(max_length=128) class Article(models.Model): tag = models.ManyToManyField(Tag) title = models.TextField(default='タイトルを入力して下さい') body = models.TextField() class Comment(models.Model): article = models.ForeignKey(Article, on_delete=models.CASCADE) comment = models.TextField()
こういうmodelがあったとする。
article = Artiicle.objects.get(pk=1) comment = Comment.objects.get(pk=1) tag = Tag.objects.get(pk=1) #articleにひも付けされたtag を取得 article.tag.all() #なんかドキュメントを見る限りだとtagsにする必要があるけどtagでできる。なぜ? #逆にtagからarticleを取得 tag.article_set.all() #articlにつけられたcommentを取得 article.comment_set.all() #逆にcommentからarticleを取得 comment.article
django チュートリアル その1
確認したらdjangoのバージョンが古かったのでpipでアップデートできないかなと
色々いじってみたけど俺の知識じゃ綺麗に解決できなかったので公式ドキュメントかどっかにあった再インストールする方法でアップデートした
$ pip uninstall django $ pip install django
今思ったけど
pip install django -U
で行けたかもしれん。あとmezzanineはdjango2.0をサポートしてるのかどうか不安。
djangは2.0になってurl関数がpath関数に置き換わったようで
url(r'^(?P<変数名>正規表現)', ......)
とやっていたのが
path('<変数型:変数名>')
になったらしい。正規表現でできたような文字数指定とかはできないっぽい?よくわからん。re_path関数がdjango1.xでのurl関数と同じ働きをするみたいなので、詳細にurlを指定したかったらこっちを使えってことかな?。
変数型で使えるのが以下
Path converters
The following path converters are available by default:
str - Matches any non-empty string, excluding the path separator, '/'. This is the default if a converter isn't included in the expression.
int - Matches zero or any positive integer. Returns an int.
slug - Matches any slug string consisting of ASCII letters or numbers, plus the hyphen and underscore characters. For example, building-your-1st-django-site.
uuid - Matches a formatted UUID. To prevent multiple URLs from mapping to the same page, dashes must be included and letters must be lowercase. For example, 075194d3-6885-417e-a8a8-6c931e272f00. Returns a UUID instance.
path - Matches any non-empty string, including the path separator, '/'. This allows you to match against a complete URL path rather than just a segment of a URL path as with str.
簡単に翻訳すると
str - 空でないすべての文字列にマッチ。ただし「 / 」を除く。
int - 0 か自然数にマッチ。
slug - ASCIIの文字と数字, ハイフン, アンダースコアからなる文字列にマッチ。例:building-your-1st-django-site
uuid - uuidにマッチする。複数のURLが同じページを指定しないようにdashを含み、小文字でなければならない。*1
例:075194d3-6885-417e-a8a8-6c931e272f00
UUIDインスタンスを返す。
path - 「/」を含んだ空でない文字列にマッチする。strを使った区切りがあるURL指定ではなく完全に自分でURLを指定できる。
strとslugの違いがわかんね。slugのほうが制約がきつい?まぁとりあえずstrとint使っとけばいいと思います。あと自分でintとかslugみたいな変数型(path converterというらしい)を作ることもできるっぽい。詳しくは以下
参照
github_学習記録
これからやったことちょこちょこまとめていこうと思う。
絶対わかる!github入門みたいなのは全然情報がなかったので下のサイトがとても参考になった。
今日からはじめるGitHub 〜 初心者がGitをインストールして、プルリクできるようになるまでを解説 - エンジニアHub|若手Webエンジニアのキャリアを考える!
githubを勉強した。けどまだ良くわかってない
$git push origin master
のoriginってなんだよ
地味に困ったのがvimで、escキーでコマンドを受け付けるようになるのが最初はわかんなかった。
伊藤計劃トリビュート の感想
伊藤計劃ファンとしてはかなり満足度高かった。
公正的戦闘規範
通勤電車でスマホで書いた小説を電子書籍で自己出版したところ人気作家になった藤井さんの短編。やっぱり中国出てきた。ミリタリSFはアメリカ、次点でヨーロッパが主役になってるような感じがするがこれは中国が舞台。ディストピア萌としては中国の人権を放り捨てて、マイノリティをどんどん弾圧していく政策はなかなかにツボ。伊藤計劃はテクノロジーと人間の意識の関係を主に描いていたので、この短編集も意識を主題にしたものが多いのだが、これはもっぱら戦争のテクノロジーに焦点を当てている。虐殺器官について、「SF的なイコンを出来る限り排除して、現在の延長にあり得る未来」を書いたと伊藤計劃氏はどこか(ソラリスのインタビューだったかな?)で語っていたと思うけど、そういう意味でとても伊藤計劃っぽい。しっかしよくこんな設定思いつくよなと。ドローンを戦争に活用という話はいろいろ聞くが、まだ発展途上で方向性がよく定まっていない中、こういう話を考えられたのは本当に尊敬する。オチはとても好み。すべてを知った主人公が現実を受け入れて達観した感じ(これを表すいい単語ってないのだろうか。ニヒル?)で行動するのっていいよね。
仮想の在り処
これはとても哲学的。ひたすら演算によって作られた人格と現実(あるいは主人公)との関係を描いている。バイナリ計算によってレスポンスを変化させるAIと、同じく脳のイオン伝達によって出力された人格に違いはないのかもしれなくて、そこになにか違いを求めようとすると(多分boy's surfaceでこんなような言い回しがあったと思うが)「意識を司る天使の召命」にいきつくのかもしれない。
士郎正宗が義肢を拡張して義体を生み出したように、綾野八音はこの作品では意識までも機械に置き換えた新しい存在として描かれている。どこまで置き換えたら(置き換えなかったら)人間なのかというもはや問い続けられすぎてみんな答えなんてないことが薄々わかっている問いをまたもや掘り起こしてくれる。このあたりが主題になっている小説はみんな答えが欲しいんじゃなくて思考遊びを楽しんでるんだろうと思うし、その点で言えばこの短編はかなり面白い。
この短編を貫くどこか悲しげな雰囲気を生み出しているのは生きている姉を再現(再ではないが)しているはずの仮想人格がそのまま姉の墓標となっていることで、更に言えば主人公を含めた家族全員がそれを意識していつつ直視していないことだと思う。
南十字星
正直これはあまり好きじゃなかった。なんかラノベっぽいんだよなー。多分この短編が三人称だということが一因なんだと思うが、どうにも好きになれない。あと設定もあんまり合わない。自己相がどことなく中世ファンタジーの魔法っぽいというか。せっかく民族が消滅した世界っていうおもしろそうな設定なんだからもっと(それこそ仮想の在り処のように)民族について考察してくれてたら俺好みだったかも知れない。
未明の晩餐
これは異色。まさか「伊藤計劃」トリビュートでグルメ小説がでてくるとは思わなかった。舞台の、拡大の末荒廃した東京駅というのはなんだか「横浜駅SF」っぽいなと思ったり。グルメ小説で伊藤計劃をトリビュートするってどうなんだと最初は疑わしかったがちゃんとトリビュートできてて感心した。ただ自分は料理なんて全然できないので調理の描写が全然実感できなかった。
にんげんのくに
えーこれはよくわからん。オチっぽいオチもなかったし。実在した民族を元に書いたということだが、一読した限りじゃあまり小説にする意義もわからなかったので普通にノンフィクションのドキュメンタリーでいいのではと思った。
ノット・ワンダフル・ワールズ
ネタバレ注意
いいね。とても良い。トリビュートというか計劃ファンへのサービスとしてはこれが一番出来てたと思う。
「この都市が、我々の生が、死者へのトリビュートだ」
テールは物語を遺した。計画を遺した。今の世界は、彼の遺した計画。
ココらへんなんかはあからさまだけどちょっとニヤッとしてしまう。
テーマは進化。結構前に「利己的な遺伝子」を読んだんだけど、この短編のように、その知識が色んなところで出てくるのでびっくりしている。進化とは自由になることで、進化の目的とは「一人勝ちすること」だとこの短編では言っているが、生物多様性が環境を混沌にしてるんじゃなくて、逆に多様性がなければ、つまりその環境を構成している種が少なければ、その環境は崩壊してしまう。っていうのをどっかで読んだ気がする。
eニューロはSFチックなガジェットとして描かれているけど、現代でもスマホとかが同じような役割を果たしつつあると思う。今はまだスマホは取り出さないと見られないからやたらと選択肢を提示したりはしてこないけど、ウェアラブルデバイスが普及したらeニューロのように生活に入り込んでくるのかなー。
オチはまさかの二段構えで、驚かされたし面白かった。AIが意識を持ったという設定だが実際問題どこまでの複雑性を獲得したらコンピュータが意識を持つようになるのだろうか。「意識を持っている」か否かを判定するには意識の定義がはっきりしていないといけないわけだがこんなのはできないので「コンピュータは意識をもつのか」という問いに応えることはできないことになる。
フランケンシュタイン三原則
これは「屍者の帝国に真っ向から喧嘩を売ってる」ってどっかで読んだけどまさにそう。俺だったらこんだけ面白いものをかけるんだぞ、という主張に見えるぐらいおもしろい。ハーモニーの影をちらちら見せているせいで妄想が膨らんで仕方ない。これはハーモニーの後、アポカリプスが起こった世界なのか・・・とかね。
あとこの短編では言及されてないけど、沖田総司は女体化されたりイケメン化されたり可哀想だと思う。なぜみんな沖田総司の顔をそんなに変えたがるんだ!別に剣豪がイケメンでも美女でもなくたっていいだろうが!そんなに改変ばっかするのは沖田総司への侮辱だぞ!
話をもどして、屍者の帝国では屍者技術がサイエンスではなくファンタジーのような雰囲気で扱われていて、あまりしっくりこないなぁと思ったけど、この短編では屍者技術という生命への冒涜(この言い方があまり好みじゃないのは同意してもらえると思う)を人間の尊厳である魂にうまく結びつけていてとてもおもしろいと思った。
この中で訴えられている「人類は永遠の反復と模倣の中で生きている」という主張はSFということを抜きにしてもとても重大な意味を持ったセリフだとおもう。未知に囲まれて精一杯生きていた幼少期と現在とを比べると、生活に占める「反復」の割合がどんどん増えていっているのではないか。
ちょっと笑ってしまったのが
「いつからこの国の公僕は無辜の市民に銃を向けるようになったんだ」
「わかっとるだろ、建国以来さ。」
ってとこ。
あと終わり方なんかいいよね。まぁ最後の一文はあんまり意味分かんないんだけどかっこいいからおk。そういえば著者名の伴名練というのはハンナ・アーレントからとったのだろうか。
怠惰の大罪
これも面白い。でもせめて終わらせてくれ・・・。公正的戦闘規範と同じように、科学技術が戦争に与える影響を主に描いていて、また歴史改変SFとしても楽しめた。キューバなんて全く縁がないし、ここで登場するキューバは架空の国だけど、あるいはこういう国もあったかも知れないと思うと興味深かった。
疲れてきたのでこの辺で終わる。今回の記事はポエム感強かったかも知れない。
ubuntuでus配列のワイヤレスキーボードを使う時の備忘録
これ
入力メソッドタブの上下は変えても良い
内、既存のキーボードレイアウトは両者とも既定でも日本語でも英語でもいいが記号の位置が変わるっぽい?。けど全角の時は。、「」ぐらいしか記号打たないのでいい感じのを選ぶ。
全体の設定=>入力メソッドのオンオフのZenkakuhannkakuはsuper+spaceでも変わんなかった。
とにかくトライ&エラーでやったので仕組みはよくわからん
親指シフトはどうすればいいんだ!!!!!
PyQを一通りやったのでその感想
遠い遠い昔「PyQ」をやるといいつつなんの進捗も書いてなかったんですが、実はやってました。
progateとか他のオンライン教材もあるらしいですけど、やったことないんでそこら辺との比較はできません。でもprogateをちらっと見たところ、pyqの方がnumpy, pandas, 機械学習, webサービスなどなどかなり実務的で、深いところまで扱ってる印象でした。progateはその代わり色々な言語があるのでpyq終わったらやってみようと思います。
感想としてはとにかく楽でした。自分で何やるか考えなくて良いのがすごく楽。問題集みたいに次々やること提示してくれるのでただ勉強すればいいというのがよろしい。あと、書籍だと本とにらめっこしながらポチポチコードを打ち込むと思うんですが、pyqだと同じ画面上にあるので写経がはかどります。
特に嬉しかったのが、演習問題が充実していること。普通自分でやってると演習やろうとしても問題をつくるのがめんどくさくてなかなかやろうとしないと思うんですが、pyqは問題つくってあるので演習をやるだけで済みます。準備も後片付けも不要。いいね!
勉強履歴とかも向こうで管理してくれてるので今週やってないなーとか頑張ったなーとか振り返れてモチベ上がります。
俺はやっと基本コース(といってもかなりボリュームあるけど)終わったので、次のコースやってみようと思います。