DjangoのClass-Based Viewsでcsvファイルのエクスポート

こんなことをしたかった

  • ListViewで作った一覧を、csvでエクスポートしたかった

DjangoにてWebシステムを作ったりしているのだけれども、csvファイルでエクスポートを行いたかった。

ちょっと調べれば出てくるには出てくるのだが、Function-Based Viewsのものばかりだったので、ListView内で処理したものをメモ代わりに書こうと思う。

こんな感じ

models.pyやらurls.pyは省略。 ※動かなかったらごめんなさい

*views.py

import csv
from django.http import HttpResponse
from django.views.generic import ListView
from .models import Model

class ListView(ListView):
    model = Model
    template_name = 'list.html'

    def get(self, request, *args, **kwargs):
        if "export" in request.GET:
            response = HttpResponse(content_type='text/csv')
            response['Content-Disposition'] = 'attachment; filename="export.csv"'
            writer = csv.writer(response)
            for model in Model.objects.all():
                writer.writerow([エクスポートしたい値])
            return response
        else:
            return super().get(self, request, *args, **kwargs)

*list.html

<form action="{% url "listviewのパス" %}" method="get">
     {% csrf_token %}
     <button type="submit" name="export" value="1">button</button>
</form>

ようするに、getをオーバーライドして、パラメータにexportがあればCSV出力、そうでなければsuper()のgetを呼び出し通常処理させる、といった実装。

実装してみて

ブログには記載していないが先日もGoogle Calendar APIをTemplateView内に組み込んだりもして、なんとかClass-Based Viewsでも色々できるようになってきた。

参考文献

Django、CSVのインポート・エクスポート - Narito Blog

Web会議用の設備を整えるのが大変だった

突然の準備は大変だった

今勤めている会社はIT系の小規模な会社なのだけれども、あまりWebでの会議は行わず、先方へ打ち合わせに向かうことが多かった。

更にいうと、先方の社内文化と打ち合わせに出るメンバーの好みによって、資料の共有方法も多種多様なのである。

(私は紙文化のクライアントがやや多いのと、一緒に行く上司が紙派だったこともあり、印刷することが多かった)

3月中旬ごろから、「これはまずい」と全社員テレワークの準備をすすめる傍ら、

打ち合わせのあるメンバーは出社して会議室をWeb会議でも利用できるように整えるのが至急の課題となった。

Web会議をすると言っても、うちは上記の理由から、設備が不十分だったので、Web会議用の設備を揃えることから始める形となった。

足りなかったもの

幸い70インチぐらいのモニタはあったため、それをモニタ兼スピーカーとして利用するものの、マイク・カメラがない。

各人にノートPCは支給しているため、カメラに関してはそれで賄っているが、マイク自体はどうしようもない。

ノートPCのマイクをONにすると、複数人で会議室にこもった場合はハウリングしてしまう。

ヘッドセットで対応することも考えたが、3月中旬〜下旬では到底手に入らず、社内からの反発もあったため、導入は断念。会議用のマイクに舵を切った。

マイクを選定したものの

私自身はYoutubeに動画を投稿するわけでもなく、特に音に関わる趣味も持たず、オンラインでゲームをするわけでもないため、マイクに関する知識は皆無。

準備が間に合っていないうちは、1台だけノートPCのマイクをONにして頑張って欲しい、という通達を出していたのだが、ある会議に出席していたメンバーから、

「ノートPCの真正面で喋らないと音が聞き取れないため、喋るメンバーが入れ代わり立ち代わりノートPCの前に移動しなければならない」といった話を聞いて「指向性」という言葉を知ったくらいだ。

とりあえず、上記の意見を参考に、「無指向性」の「Web会議用マイク」を探したところ、USB接続のマイク(SANWA SUPPLY)が見つかったので購入。

それでとりあえず会議は問題解決したかな、と思いきや・・・スピーカーをモニタ側から出していたため、スピーカーの音を拾ってしまうケースがあったようで、偉い人含む一部メンバーから苦情が上がったのであった。

マイク選定2回目

しょうがないので、もう一回マイクの選定を行うことにした。

モニタ側から音を出すのを継続するとなると、今度は指向性のあるマイクがあったほうがいいのでは?と思い調べ直す。

この段階でスピーカーフォンという手もなくはなかったが、品薄であり信頼性のない商品しか探せず。

私の取った手段は「コンデンサーマイク」+「リフレクションフィルター」という形となった。「指向性を持ち」「クリアに音が拾える」となると、意外と悪くない選択肢なのではなかろうか。

このジャンルになると意外とYoutuber界隈が情報を持っていたりもするので、Youtubeを見たりもしながら商品を選定(結局、Marantz MPM2000Uになった)し設置することに。

なんとか音質は改善し、クリアな会議ができるようになったみたいだが、この選択が正しかったのかは常に考えてしまう。

今回のドタバタの結論

結局音質などが最強なのはヘッドセットだと痛感。

ゲーミングでも何でもいいから、ヘッドセットはとにかく安定・安心。ただしBluetoothは・・・

こういったことが起こったときに、スムーズな対応ができるよういろいろな知識も持っておいたほうが良いと感じる出来事でした。

検討の中でこんなことも知りました

  • 3極・4極・USB どうもヘッドセット・マイクなどのオーディオデバイスに関しては、色々と制約があるらしい。

3極:ヘッドホンとマイクのプラグが分かれている。デスクトップPCなどは3極のジャックのものが多い。

4極:ヘッドホンとマイクのプラグが同一。ノートPCにはたいてい付いているので4極のヘッドセットなどを買うのが安定。3極との変換プラグも売ってる。

USB:どうやらオーディオデバイスのUSBは、2.0が主流だそうで、3.0とかのポートに挿してしまうとホワイトノイズなどが入り込むケースがあるらしい。

ので、諸々の条件を考えると、社用としては4極のヘッドセットを購入するのが安定。

うちの会社はノートPCの機種は特に決めていない(自分のテンションの上がる端末を選べ、とのお達し)ので、とりあえず第二波に備えていくつか買っておこうかと思う。

GROWIをメモ帳代わりにする話

GROWIをメモ帳代わりにすると便利

growi.org

GROWIというサービスがある。 オープンソースWikiなのであるが、以下のような特徴がある。 * MarkDownで記載可能(プレビュー付き) * Docker Composeでサクッと構築が可能 * Webブラウザベースで使用可能 * Bootstrapが使える(BootStrap3)

会社でも構築して社内Wikiとして使用しており、なかなか便利なので家にも導入している。 Dockerを使うので、Mac/Linuxは比較的楽に構築可能だけれども、WindowsはOSがHomeだと入れられなかったような。

どんな感じで使っているか

  • よく使うコマンド、たまに使うコマンドなど、忘れそうなものをとりあえず書いておく
  • ググった記事のリンクを貼っておく
  • パッケージなどの使い方のメモ(英語のドキュメントを読んで理解したものをメモっておく・・・など)
  • 簡易的な課題管理・Todo

↓このような形で編集や更新が可能。

f:id:ryori0925:20200521004507p:plain

Markdownを書くツールで使いやすいものは、公開することを前提としているものが多い(Qiita、はてななど)ので、完全にオンプレミスでこれだけリッチに書けるのは大変ありがたい。 あと、地味に表をサクッと書けるのは大きい。

特に必要がないのでまだやっていないが、同一ネットワーク内であればWebブラウザさえ使えれば参照・編集ができるので、LAN内公開をしてもよいかもしれない。

自作PCをつくる2

自作PCを作成したときの残課題の対応

livegram.hatenablog.com

自作PCを作ってしばらく使っており、大きな問題はなかったが、ケースファンが動かせなかった。 買ったマザーボードに3pinのファンを刺す場所がなかったためである。 そのため、ケースファンも別途購入し換装した。

* ケースファン:Cooler Master MasterFan MF120R f:id:ryori0925:20200520235848p:plain

こちらの取り付け自体は全く苦労せず。ネジを緩めてマザーボードとつなぐだけ。

f:id:ryori0925:20200521000038p:plain

回るし光るようになった。

作って、使ってみて

結局、自作PCは86,476円かかってしまった。

安く抑えることにはこだわってはなかったけれども、やはりほぼ同スペックのBTOパソコンよりは(OS分を考えなければ)少しだけ高い。 用途にはあってるし見た目もよき感じなのでこれ以上は今は求めないけれども。

f:id:ryori0925:20200521000221p:plain

OSはUbuntuを入れたが、特に問題なく使えている。デスクトップとしてはCentOSよりはるかに使いやすいし、DockerもVScodeもslackも使えて、MySQL Workbenchも使える。面倒な設定なしに。

いや嘘だ。DockerでMySQL立てたら繋ぐのに少し苦戦した…が、まぁググれば解消できる。

(※この記事はちょっと前に書いたものを再整理した記事です)

自作PCをつくる

思い立ったきっかけ

仮にも情シス部なのに各パーツのことをあまりよく知らなかったりするのはどうなの?という気持ちもあるし、一度は作ってみたかったし、linuxをデスクトップPCとして使ってみたかったので、自作PCを作ることとした。

用途は主にWebアプリ開発

パーツについて

以下のとおり。

  • CPU:Ryzen 5 3600
  • グラボ:RD-RX550-E2GB
  • マザーボード:MPG X570 GAMING EDGE WI-FI
  • メモリ:適当にDDR4-2666の8GB2枚
  • SSD:500GBくらいのm.2.SSD(intel)
  • HDD:1TBのHDD(Seagate)
  • 電源:NE650C
  • ケース:JONSBO U4S 合計で約85,000円程度。

f:id:ryori0925:20200520231313p:plain
pcparts

選定理由

RyzenのCPUを使ってみたい、そこそこにシンプルなケースを使いたい、細かいこと言わずにWifiをつなげるようにしたい、あたりが主な選定理由。マザボチップセットがX570なのは次世代のCPUに変えられるように。

逆にグラフィック系の作業はあまりする予定がないので、最低限のものを選定。

合計85000円くらい。

6コア12スレッド、メモリ16GBのスペックがlinux osに必要とは思えないが、virtualboxを使った場合も問題なくリソース振れるはずなのでヨシとする。

実際の組み立て

どれだけ時間がかかるかもわからなかったので、土曜日の朝から組み立てを実施。

マザーボード関連

まずはマザーボード開封

f:id:ryori0925:20200520232048p:plain

すでに組み上げられたものはよく見ていたけれども、まっさらのものは初めて。 正直どこに何をつければいいのかわからないが、まずは中央付近の四角い部分にCPUをつけるようだ。

f:id:ryori0925:20200520232233p:plain

CPUCPUと普段から言葉は聞いてるし、IT業界入って1年目に最低限は勉強したけど、実物を見るのは恥ずかしながら初めてだった。こんな小さいのね… で、取り付け。

f:id:ryori0925:20200520232306p:plain

思いの外ストンとはまった。拍子抜け。 そのあとはグリスを塗る。

f:id:ryori0925:20200520232538p:plain

グリスは量がよくわからない。危うく1本まるまる使うところだったがどうやら4〜5回くらいに分けて使うらしいので広げつつグリスを減らす。

 f:id:ryori0925:20200520232707p:plain

そのあとはクーラーを取り付け。クーラーも買うか迷ったのだが、後で良いかと思い今回は付属品で対応。この辺りからドライバーを使いねじ止めしていくから作ってる感が味わえテンションが上がる。

 f:id:ryori0925:20200520232808p:plain

メモリとSSDも設置。会社でふだんいじっているのは2.5インチのアレなので、m.2.SSDを試したくて。さくっと刺さって手軽。ちなみにこれは刺す場所を間違えてます(右上の部分のカバーを外して設置することに後々気づく)

ケースへの取り付け

ケースを開封。なんだかがらんとしているが、こんなものなのだろう。

f:id:ryori0925:20200520232909p:plain

f:id:ryori0925:20200520233003p:plain

ケースにマザーボードを取り付け。今回は慎重になりすぎてATXとミドルタワーの組み合わせだが、Micro ATXにチャレンジしてもよかったかもしれない。

f:id:ryori0925:20200520233138p:plain

f:id:ryori0925:20200520233201p:plain

f:id:ryori0925:20200520233257p:plain

マザーボード設置後は、GPUを取り付ける。この辺りから勘や勢いではわからなくなり始めた。会社のPCはGPU入ってないはず…だから全くの無からだった…。説明書に頼り設置。

f:id:ryori0925:20200520233336p:plain

f:id:ryori0925:20200520233354p:plain

最後に電源やHDDの設置と配線。ここはほんとによくわからなかった。電源は異様な数ケーブルでてるし…なんとか繋げたけれど、使わないケーブルが多いこと多いこと。一番苦労したかも…。

f:id:ryori0925:20200520233420p:plain

そんな甲斐もあってなんとか完成。 電源を入れたら問題なく動く!と思いきや、ケースファンが動いてない…一旦後回しに。

組み上げてみて

ちょっと戸惑ったところはあれど、大きな問題もなく組むことはできた。感覚としてはプラモデルに近い。

しかし、組み立てるだけとはいえ、自分で選定したパーツを使って作っただけあり、満足度はかなり高かった。また、大まかなイメージも掴めたので、会社PCのパーツ換装とかはより柔軟に対応できそうだ。

(※この記事はちょっと前に書いたものを再整理した記事です)