【Django REST framework】viewの中で使用するserializerを変更する
ModelViewSetなんかを使用していると、それぞれのアクション毎にserializerを変更したいことが多々あると思います。
日本語情報が少なくてベストプラクティスなのかどうかは疑わしいですが、クラスベースviewの中でserializerを変更する方法をとりあえずメモしておきます。
環境
Python 3.5.2
Django 1.9.7
djangorestframework 3.4.0
方法
get_serializer_class
メソッドをオーバーライドし、アクション毎に異なるserializerを返却するようにします。
以下にlist
とretrieve
で返却するフィールドを変えたserializers.py
とviews.py
の簡単なコード例を示します。
serializers.py
class HogeSerializer(serializers.ModelSerializer): class Meta: model = Hoge fields = ('id', 'name') class HogeRetrieveSerializer(serializers.ModelSerializer): class Meta: model = Hoge fields = '__all__'
views.py
from .serializers import HogeSerializer, HogeRetrieveSerializer class HogeView(viewsets.ModelViewSet): queryset = Hoge.objects.all() def get_serializer_class(self): if self.action == 'retrieve': return HogeRetrieveSerializer return HogeSerializer
上記の例ですと、list
の時はidとnameカラムのみが返却され、retrieve
の時には、モデルの全てのフィールドが返却されます。
このように、get_serializer_class
メソッドをオーバーライドすることで、アクションに応じたserializerを設定することができます。
今回はlist
とretrieve
の例でしたが、他のアクションも同様にして、serializerを分けることが可能です。
参考
Generic views - Django REST framework
Django rest framework, use different serializers in the same ModelViewSet-open source projects tomchristie/django-rest-framework
Google グループ
【MySQL】一時的に外部キー制約を無効にする
下記のコマンドで無効化し、
SET FOREIGN_KEY_CHECKS=0;
必要な処理が終了したら、
SET FOREIGN_KEY_CHECKS=1;
これで元に戻す。
【MySQL】外部キー制約を削除する
制約の設定をしたものの、テストデータの投入段階でinsertを阻止してくる邪魔なforeign keyに悩まされたので、一時的に参照整合性の制約を削除します。
環境
MySQL 5.6
手順
まずは、テーブルに設定されている参照制約を確認しましょう。
mysql> SHOW CREATE TABLE something\G *************************** 1. row *************************** Table: something Create Table: CREATE TABLE `something` ( `id` int(11) NOT NULL AUTO_INCREMENT, `another_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `somedb_something_a08cee2d` (`another_id`), CONSTRAINT `somedb_another_id_3a4999a1_fk_somedb_another_id` FOREIGN KEY (`another_id`) REFERENCES `another_table` (`id`) ) ENGINE=InnoDB CHARSET=utf8mb4 1 row in set (0.00 sec)
上記の結果を見ると、something
テーブルの外部キーanother_id
が、another_table
のid
に外部キーとして制約が設定されています。
これを削除するには、CONSTRAINT
の次に書いてある文字列を指定して下記のコマンドを実行します。
mysql> ALTER TABLE something DROP FOREIGN KEY `somedb_another_id_3a4999a1_fk_somedb_another_id`;
もう一度SHOW CREATE TABLE
を実行すると、外部キー制約の項がなくなっていることが確認できます。
参照
【Python3】文字列変数をraw文字列で出力する
変数の中身のエスケープシーケンスは自動的に解釈されてしまいます。
例えば下記のようになります。
>>> s = '1\n2\n3\n' >>> print(s) 1 2 3
変数に対してPythonのraw string記法は使用できません。
そこでrepr
を使用すると、
>>> print(repr(s)) '1\n2\n3\n'
このようになります。
参考
6ヵ月間Netflixを契約した結果を残しておく
明日が更新日だから解約しなきゃ……
そう思いつつも、毎度解約を忘れてしまい、無駄にお金を払った結果を残しておこうと思います。
俺、不労所得者になったらまた契約するんだ……。
オススメのドラマシリーズ
ハウス・オブ・カード
恐らくNetflix契約中に見た作品で一番気に入った作品。 Netflixオリジナル。
現在シーズン5まで公開中で、続編は制作中。
ホワイトハウス入りを目指す男の復讐心と野心を描いた力作。
ネット配信で公開されたドラマシリーズで初めてエミー賞を受賞したとか。
フランシスから視聴者への語りかけが段々とツボになってくる。
NARCOS
実在の麻薬王パブロ・エスコバルと麻薬取締官の戦いを描いた作品。 Netflixオリジナル。
現在シーズン1が公開されており、シーズン2も制作進行中である。
独特のテンポが好きだったシリーズ。
麻薬戦争の激しさを体感できる。
Breaking Bad
ガンで余命宣告された化学教師のドラッグ売買物語。
シーズン4の6話まで視聴。
歯車が狂っていく様が面白い。
オススメの映画作品
WINTER ON FIRE
ウクライナ国民のデモから発展した革命運動を追ったドキュメンタリー作品。Netflixオリジナル。
生々しい運動の様を見て取れる。
この映像を見て色々と考えることもあるように思われる。
ビューティフル・マインド
実在のノーベル賞受賞数学者であるジョン・ナッシュを描いた作品。
前情報なしで見たほうが恐らく楽しめるだろう。
インターネットの申し子 天才アーロン・シュウォルツの軌跡
インターネットの時代に生きた天才を追ったドキュメンタリー作品。
エンジニアはもちろん、それ以外の人たちが見ても楽しめると思う。
思考への良い刺激を体感するだろう。
フルメタル・ジャケット / プライベート・ライアン / ローン・サバイバー
ミリタリー系作品のオススメ群。
フルメタル・ジャケット、プライベート・ライアンはやはり定番だし、比較的新しめのローン・サバイバーの映像も素晴らしい。
キャッチ・ミー・イフ・ユー・キャン
実在人物の自伝を基に制作された作品。
「天才詐欺師」とそれを追うFBI捜査官の物語である。。
ヒトラー ~最期の12日間~
おっぱいぷるんぷる〜んで有名なあの映画。
ヒトラー役の鬼気迫る演技はやはり見所。
その他見た作品
- NAVY SEALS
- ネイビーシールズ:チーム6
- U・ボート
- レッドバロン
- グレート・ディベーター
- ゼロ・ダーク・サーティ
- ボウリング・フォー・コロンバイン
- 僕らの戦争はまだ終わっていない
- アイバーソン:偉大なるNBAプレイヤーの軌跡
- トロフィーキッズ
割とドキュメンタリー系を多く見ていたことに書き出して気付いた。
この中だとグレート・ディベーターがオススメ。
- アタリ:ゲームオーバー
- STEVE JOBS 1995
- スティーブ・ジョブズ(2013)
- ソーシャル・ネットワーク
STEVE JOBS 1995の中では、日本という言葉がジョブズから出てくるシーンもあるため必見。
キス我慢選手権は少しユーモアが足りない感じがした。
見ようと思ってた作品
- ウォーキング・デッド
- STEVE JOBS The Billion Dollar Happy
- フープ・ドリームス
- アノニマス ~"ハッカー"たちの生態~
- MAKING A MURDERER
- ナチスが最も恐れた男
- フライボーイズ
- 終戦のエンペラー
- タイガーランド
- フォレスト・ガンプ
- 英雄の条件
- チェ 28歳の革命
- チェ 39歳別れの手紙
- ビッグバン★セオリー
- フライト
- ディープウェブ
- フランス特殊部隊GIGN
- 戦場のピアニスト
- 永遠の0
- 映画 立川談志
- デアデビル
時間の関係で見られなかった種々の映像作品たち。
ドキュメンタリーとミリタリーが多めか。
まとめ
意外とたくさん見ていたような気もするし、大した数を見なかったような気もする。
映像作品を見るのは楽しいけど、やはり読書なんかと比べると時間あたりに得られるものが少ない。
趣味としてある程度はいいけど、見放題を無尽蔵に、という楽しみ方はやはりいけないなと感じた6ヵ月間でした。
余談
後から気が付いたけど、先に解約申し込んでおいても、契約終了日まで動画閲覧できるような……。
黒い家と青の炎を読んだ
久しぶりに小説を読了し、余韻に浸っている。
無性に気分を述べたくなったので殴り書き。
そもそものきっかけは、ゴールデンウィーク中にKindleで開催されていた角川フェアであった。 50%引き+20%のポイント付与ということで、何か面白い本は無いだろうかと探していた。
齋藤孝著の大人のための読書の全技術をはじめとして、反応しない練習 あらゆる悩みが消えていくブッダの超・合理的な「考え方」やペンタゴン式 ハードワークでも折れない心のつくり方といった、興味の惹かれる書籍をいくつか購入した。
そんな折、セール一覧の中に、貴志祐介の著作がかなりの数含まれていることに気付いた。
貴志祐介といえば、近年(というほど近年ではないが)アニメ化した新世界よりの著者という印象が強かった。
それと同時に、人伝に聞いたクリムゾンの迷宮の印象があり、一度読んでみたいと思っていた作家だった。
ようするに、Kindleセールで貴志祐介の作品が売られているというのは、私にとって幸運であった。
どのタイトルを購入するかで少し悩んだものの、結局黒い家と青の炎を選択した。 特筆する理由は無かったが、これらの本を読めば、貴志祐介の作品を感じられそうだと考えたからだ。
結果からいうと、この選択は成功だったように思う。まあ、どの作品を選んでも成功だった可能性は極めて高いように思われるが。
はじめに、黒い家を読んだ。
読書感想文などというものに熱心に取り組んだことがない経験上、的確な感想を述べることは難しい。
ただ、一言で表すなら、面白い、それに尽きる。
自分のイメージの中で暴れまわる登場人物の姿に、自分自身でハラハラするという現象に、我ながら胸躍った。
作中で恵が述べる、
問題は、あの人たちが共通して持っている病的なペシミズムなの。人生や世界に対して抱いている、底知れぬ絶望よ。彼らは、自分たちの見るものすべてに、その暗い絶望を投影するの。人間の善意や向上心が世の中を良くするなんていう可能性は、決して認めようとしないの。(中略)社会に大きな害毒を流しているのは、わかりやすい人格障害を持った人よりも、むしろ、そうした一見普通の人間なんだと思うわ
という箇所が特に印象に残った。
なんというか、ペシミズムという単語が頭に残る終わり方であった。
次に、青の炎を読んだ。
黒い家とは打って変わって、高校生が主人公の、少し甘酸っぱさを覚える作品である。
途中、思わず読み進めることが困難になる程に、主人公秀一の視点に同調してしまった。
西欧が『罪の文化』で日本が『恥の文化』を持っているとすれば、日本では、露見しない犯罪は、犯罪ではないことになるではないか。つまり、日本人は、民族的に、世界で最も完全犯罪に向いているのかもしれない。
という秀一の考えは、一見すると説得力がある。
しかし最終的には、単なる事実という重責に押しつぶされることとなる。
秀一がパラレルワールドの可能性を考えている時、私もまたその可能性を強く願ってしまった。
他人事とは思えない、切迫した感情の揺れ動きを感じた作品であった。
紀子かわいい。
個人的に好きな文章は以下。
良い曾根隆司とは、死んだ曾根隆司だけだが、今週のように、ほとんど意識を失った状態の曾根隆司も、ましな部類だとは言えた。
秀一が想像した未来。
回避するために選んだ道。
最期まで、ある種秀一らしさが一貫していた幕引きであったように思う。
どちらの作品にも共通して夢やロードバイクが頻繁に出てくる点は、連続で読んだこともあってか、印象深かった。
長々とあまり内容のないことを書き連ねてしまったが、難しいことは抜きにして、この週末を愉快なものにしてくれた二つの作品とその著者に感謝の意を表したい。
情景の想像がこんなに胸躍る行為になるとは。
映像作品では味わえない充足感に浸りながら、今夜は休むとする。
【Python】日本語Wikipediaのダンプデータから本文を抽出する
日本語Wikipediaのダンプデータ中の本文を利用したい。
ただ、単純にパースするだけではWiki記法の記号等が邪魔である。
というわけでWikipedia Extractorを利用して本文だけテキストとして抽出します。
Wikipedia Extractorの他にもパースするためのライブラリはいくつかあるようなので、用途によっては別のライブラリを使用したほうが良さそう。
Alternative parsers - MediaWiki
環境
Mac OSX Yosemite
Python v2.7.11
Wikipedia Extractor v2.4
20GB程度のディスク空き容量
出力結果例
抽出処理後に生成されるXMLファイルは下記のようなdoc
要素の集まりになります。
<doc>...</doc> <doc>...</doc> ... <doc>...</doc>
具体的な例としては下記のようになります。
<doc id="20612" url="https://ja.wikipedia.org/wiki?curid=20612" title="カブ"> カブ カブ(蕪)はアブラナ科アブラナ属の越年草。代表的な野菜(根菜類)の一つで、別名はカブラ、カブナ、カブラナ、スズナ(鈴菜、菘)など数多い。 「カブ」の語源は諸説あり、頭を意味する「かぶり」、根を意味する「株」、またはカブラの女房詞である「オカブ」からとされている。 江戸時代は漢語で蕪菁(ブセイ、wuqing)、蔓菁(マンセイ、manqing)、扁蘿蔔(ヘンラフク、bianluobo)などと呼ばれていた。 かった。 (中略) ロシアでは『おおきなかぶ』のように民話の題材になるほど馴染みのある野菜である。 一方、カブがあまり好まれないフランスでは、大根役者に相当する「カブ役者」という言い回しがある。 </doc>
ここで、doc
要素の属性idおよびurlは、
- id:ユニークシリアルナンバー
- url:オリジナルのWikipediaページURL
となります。
準備
日本語Wikipediaダンプデータ
まずは日本語Wikipediaのダンプデータを下記から入手します。
jawiki-latest-pages-articles.xml.bz2が記事本文を含むダンプデータですね。
当然ですがファイルサイズが大きいので注意。
Wikipedia Extractor
下記サイト内のDownloadsからWikipedia ExtractorのPythonスクリプトを直接ダウンロードします。
Wikipedia Extractor - Medialab
抽出作業
WikiExtractor.py
とjawiki-latest-pages-articles.xml.bz2
を同一ディレクトリに置き、下記のコマンドを実行するのみで基本的には終了です。
WikiExtractor.py -b 500K -o extracted jawiki-latest-pages-articles.xml.bz2
これで、extractedディレクトリ下に、500KB毎に区切られた抽出後ファイルが生成されていきます。
公式では-c
オプションを設定して圧縮していました。
私はとりあえずそのままで構わないので、このオプションは外しました。
次に、このままではファイルが分割状態で使用が面倒なため、一つのファイルにまとめます。
find extracted -name 'wiki*' -exec cat {} \; > text.xml
これで全ての本文データがtext.xml
ファイル内に格納されました。
私の試行時では、およそ2.5GBくらいのファイルになりました。
まとめ
というわけで、無事日本語Wikipediaのダンプデータから本文のパースおよび抽出が完了しました。
偉大なライブラリ製作者に感謝。
参考
GitHub - attardi/wikiextractor: A tool for extracting plain text from Wikipedia dumps
実行時のオプション等はこちらから。
【Python】matplotlib.pyplotインポート時にPython is not installed as a frameworkのRuntimeError
実践機械学習システムで手を動かしていたところ、import matplotlib.pyplot
実行時に下記のようなエラーに遭遇したため解決策のメモ。
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are Working with Matplotlib in a virtual enviroment see 'Working with Matplotlib in Virtual environments' in the Matplotlib FAQ
環境
Python 2.7.11
matplotlib 1.5.1
解決策
~/.matplotlib
下にmatplotlibrc
を作成し、
backend : TkAgg
と書き込んで保存。
対話環境を再起動してmatplotlib.pyplot
を読みこめば上手くいくはず。
cdでひとつ前の作業ディレクトリに戻る
間違えてcdしてしまった時用に。
$ cd -
pushdとpopdは使ったことなし。
USキーボードの配列を英語用に切り替え
USキーボードをPCに接続すると、英語用の配列(101/104)ではなく、JIS用の配列(106/109)で認識されてしまいます。
このままではUSキーボードの意味がないので、きちんと英語用配列として認識するようにします。
注意
レジストリを編集するため、全ての作業は自己責任で行ってください。
環境
方法
はじめに、[スタート]-[コントロールパネル]-[デバイスマネージャー]から接続中のキーボードデバイスを探し、該当キーボードの[プロパティ]-[詳細タブ]から[ハードウェアID]を選び、ハードウェアのIDを確認します。
次に、[スタートメニュー]-[プログラムとファイル検索ボックス]にregedit
と入力し、レジストリエディターを実行します。
レジストリエディター上でHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID
まで展開し、その中から先ほど確認したハードウェアIDを探します。
該当するディレクトリを発見したら、Device Parameters
のあるディレクトリまで展開し、Device Parameters
に新しく下記のDWORDを追加します。
値の名前 | 値 |
---|---|
KeyboardTypeOverride | 4 |
KeyboardSubtypeOverride | 0 |
自分の場合は既に上記二つのパラメータがあったので、値の修正のみ行いました。
変更後、PCを再起動すれば英語配列になっていることが確認できるかと思います。
以上で配列の変更は完了です。
ちなみに、英語配列での日本語入力切り替えはAlt + `
となります。
非常に切り替えづらいため、変更することをオススメします。
参考
配列の異なるキーボードを同時に使う方法 - forPCActionGamer Wiki*
WindowsでBTキーボードだけをUS配列で使う - るびゅ備忘録
Windows 8.1にBluetooth英語キーボードの設定 | netanote.com