[Django]アプリケーション内にurls.py新規作成

プロジェクト内のurls.pyではなく、アプリケーション内にurls.pyを新規作成しルーティングを書いていくのが一般的

### urls.pyの新規作成
helloフォルダ内にurls.pyを作成する

from django.urls import path
from . import views

urlpatterns = [   # path 関数で値を記述していく
	path('', views.index, name='index'), # 第一引数がアドレス、第二引数がviewsの実行関数、第三引数が実行
]

### django/urls.pyの新規作成
hello内のurls.pyを読み込むように修正

from django.contrib import admin
from django.urls import path, include # includeは引数に指定したモジュールを読み込む

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', include('hello.urls')), # path(アドレス、呼び出す処理)
]

表示が変わらないことを確認します
djangoにはプロジェクトとアプリケーションという概念があるようです

[Django]viewの作成方法

### アプリケーションを作成
$ python manage.py startapp hello

– migrationフォルダ: データベース関連の機能
– __initi__.py : アプリケーションの初期化処理を行うスクリプトファイル
– admin.py : 管理者ツールのため
– apps.py : アプリケーション本体の処理
– models.py : モデルに関する処理を記述
– tests.py : プログラムのテストに関するもの
– views.py : 画面表示

### views.py
/hello/view.py

from django.shortcuts import render
from django.http import HttpResponse # HttpResponseクラスをimport

def index(request): # requestはHttpResponseクラスのインスタンス
	return HttpResponse("Hello Django!!")

# Create your views here.

urlpatternsに登録した情報を元にどのアドレスにアクセスしたらどの処理が呼び出されるか決まる

### urls.py
/django_app/urls.py

from django.contrib import admin
from django.urls import path
import hello.views as hello

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', hello.index), # path(アドレス、呼び出す処理)
]

$ python manage.py runserver 192.168.33.10:8000

第一印象としては、Laravelは直感的ですが、Djangoはより関数的な書き方のように感じます。

Djangoプロジェクトの中身とサーバ起動

### プロジェクトフォルダ
– __initi__.py : 初期化処理を行うスクリプトファイル
– asgi.py : ASGIという非同期Webアプリケーションの為のプログラム
– settings.py : プロジェクトの設定情報
– urls.py : URLを管理するファイル
– wsgi.py : 一般的なWebアプリケーションプログラム
– manage.py : 機能に関するファイル

### サーバー起動
$ python manage.py runserver
-> このサイトにアクセスできません

ん? vagrantだから、http://127.0.0.1:8000/ は通ってない?

公式tutorial01/を見ると、ipとポートを指定できるみたい。
再度実行
$ python manage.py runserver 192.168.33.10:8000

あれ?
DisallowedHost at / … が表示される。
settings.pyのALLOWED_HOSTS = []を変更する

ALLOWED_HOSTS = ['192.168.33.10']

$ python manage.py runserver 192.168.33.10:8000

OK^^

Djangoを始めよう

$ python -V
Python 3.8.0
$ sudo apt install python-pip
$ pip install Django==3.0.4
Traceback (most recent call last):
File “/usr/bin/pip”, line 9, in
from pip import main
ModuleNotFoundError: No module named ‘pip’

ん?
$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py

再度インストール
$ pip install Django==3.0.4

### make Django project
$ mkdir django
$ cd django
$ django-admin startproject django_app

おおおおおお、ファイル少ないな
テンション上がってきました

ubuntuでデフォルトのpathをpython3.8にしたい

### python3.8インストール
$ sudo apt install -y python3.8

### 入っているpython
$ python -V
Python 2.7.17
$ python3 -V
Python 3.6.9
$ python3.8 -V
Python 3.8.0

$ ll /usr/bin/python*
lrwxrwxrwx 1 root root 9 Apr 16 2018 /usr/bin/python -> python2.7*
lrwxrwxrwx 1 root root 9 Apr 16 2018 /usr/bin/python2 -> python2.7*
-rwxr-xr-x 1 root root 3637096 Apr 15 17:20 /usr/bin/python2.7*
lrwxrwxrwx 1 root root 9 Oct 25 2018 /usr/bin/python3 -> python3.6*
-rwxr-xr-x 1 root root 1018 Oct 28 2017 /usr/bin/python3-jsondiff*
-rwxr-xr-x 1 root root 3661 Oct 28 2017 /usr/bin/python3-jsonpatch*
-rwxr-xr-x 1 root root 1342 May 1 2016 /usr/bin/python3-jsonpointer*
-rwxr-xr-x 1 root root 398 Nov 15 2017 /usr/bin/python3-jsonschema*
-rwxr-xr-x 2 root root 4526456 Apr 18 01:56 /usr/bin/python3.6*
-rwxr-xr-x 2 root root 4526456 Apr 18 01:56 /usr/bin/python3.6m*
-rwxr-xr-x 1 root root 5203488 Oct 28 2019 /usr/bin/python3.8*
lrwxrwxrwx 1 root root 10 Oct 25 2018 /usr/bin/python3m -> python3.6m*

$ cd /usr/bin
$ sudo rm python
$ sudo ln -s python3.8* python
$ python -V
Python 3.8.0

グラフィックボードの構造とGPU

### グラフィックボードの構造
– グラフィックボード基板
– GPUチップ
– ビデオメモリ
– 冷却装置
– 電源端子
– 出力端子(DVI, HDMI, DisplayPort)

GPUの周りにあるのがビデオメモリ
それらを冷却するためにヒートシンク、パイプ、ファンがある
基本的にPCI-Expressバスから電力を供給するが、消費電力が大きいグラフィックボードは補助電源の為のコネクタがある

## GPU
– モデルビュー変換(モデルの回転・移動をしたりカメラから見た時の座標を求める)
– 射影変換(カメラから見た時の座標(3次元)から,画面に映せる座標(2次元))
– クリッピング・カリング(描画する必要のない座標にあったり,裏から見えていたりする三角形を弾く)
– ビューポート変換
– ラスタライズ

やっぱり集積回路を自由に扱えるようになりたいなー

NVIDIAのCUDA10とcuDNNをUbuntu18.04にインストール

### NVIDIAのパッケージレポジトリを追加
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
$ sudo apt-key adv –fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo apt-get update
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt-get update

### NVIDIAのドライバーをインストールして再起動
$ apt install ubuntu-drivers-common
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:04.0 ==
modalias : pci:v000080EEd0000CAFEsv00000000sd00000000bc08sc80i00
vendor : InnoTek Systemberatung GmbH
model : VirtualBox Guest Service
manual_install: True
driver : virtualbox-guest-dkms – distro non-free
driver : virtualbox-guest-dkms-hwe – distro non-free

== /sys/devices/pci0000:00/0000:00:02.0 ==
modalias : pci:v000080EEd0000BEEFsv00000000sd00000000bc03sc00i00
vendor : InnoTek Systemberatung GmbH
model : VirtualBox Graphics Adapter
driver : virtualbox-guest-x11 – distro non-free

$ sudo ubuntu-drivers autoinstall
Reading package lists… Done
Building dependency tree
Reading state information… Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
virtualbox-guest-dkms-hwe : Conflicts: virtualbox-guest-dkms
E: Unable to correct problems, you have held broken packages.

なんでや、vagrant環境だからか??

グラフィックカードの仕組み

グラフィックカードはGPUが搭載されたボード
3DCGの場合、縦、横、高さ、奥行きなどの位置情報から計算して映像を作り出しており、スムーズに描画するには高性能なグラフィックス機能が必要になってくる
L ゲームは勿論のこと、CADなど3Dソフトにも有効
最近では動画エンコードにグラフィックチップスが使われている
GPGPUとは3D描画以外の用途にGPUを利用する事(物理シミュレーション、デジタル画像処理、ビデオ変換処理、データベース処理などの高速化)
GPUは数十〜数百のコアを内蔵している

### 主流のメーカー
NVIDIA(Geforce)、AMD(Radeon)
MSI, ASUSなどが上記2社からOEMで作っている

### CUDA(Compute Unified Device Architecture)
NVIDIAが開発・提供しているGPU向け汎用並列コンピューティングプラットフォーム
C/C++コンパイラ nvccやライブラリなどが提供されている

マザーボードの配置と仕組み

### 基礎
マザーボードの外形寸法はATXやmicroATXといった規格が定められている、更に小さいMini-ITX
ハードディスク、光学ドライブ(CD, DVD, BlueRay)、バッテリー、CPUファンなどを配置する
BIOSはOSよりも早く起動するソフトウェアで、パソコンに接続された周辺機器を制御する
マザーボードの電源はbiosに電源を供給する
メモリースロット、拡張スロット(グラフィックカード、ネットワークカード、サウンドカードなど)、SATAポート(IDEの次に登場した新規格)など拡張性を備えている
 L グラフィックカードのメーカーはZOTAC、EVGA、NVIDIA、ASUS、MSIなど
 L コンピュータネットワーク内でコンピュータ間の通信を行うために使用される
 L サウンドカードは音響信号の入出力機能を付加または強化する拡張用の回路基板
チップセットは以前はノースブリッジ(グラッフィックカード、メインメモリ)とサウスブリッジ(HDD、USB、光学ドライブ)があったが、ノースブリッジはCPUが担当するため、現在はサウスブリッジのみ
チップセットは集積回路の集まり、CPUの外部バスとメモリや周辺機器を接続する標準バスとのバスブリッジなどの機能を集積

### 各部品
– CPUソケット: LGA1155、LGA1150、LGA1151など
– メモリースロット
– チップセット
– 拡張スロット: PCI-E×1、PCI-E×16、PCIスロット
– SATAコネクタ
– メイン電源
– CPU電源
– BIOS電源
– CMOSクリアピン
– フロントパネルコネクタ
– USBコネクタ
– スピーカー端子
– CPUファンコネクタ
– ケースファンコネクタ
– SATA IIIポート
– USB3.0コネクター
– 外部コネクタ: LANポート、USB2.0ポート、オーディオコネクタ
– アナログRGB、VGA
– ディスプレイ端子: VGA, DVI, HDMI、DisplayPort
– 8チャンネルオーディオポート
– M.2スロット
– I/Oパネル

### メーカー
ASRock、SuperMicro、Intel、GIGABYTE、ASUS、Tyan

マザーボード作ってる会社って、接続機器の仕組み・機能を全て理解してるって事か。。。
どうなってんだこれ、尋常じゃなく凄すぎんだろ。

DDR4 DDR3 DDR2の違い

– DDR4メモリはランダムアクセスメモリの最新世代
L メモリは各世代ごとに速度と周波数が向上している
L メモリの各世代によって電気パラメーターが異なる
– DDR2(1.8V)はXP,Vista, DDR3(1.5V)はWindows 7、DDR4(1.2V)はWindows 10
– ダブルデータレートメモリは、クロック信号の上昇端と下降端の両方でプロセッサーにデータを転送する
– クロック信号は、ダウンビートとアップビートの両方で構成される
– ダブルデータレートメモリの速度はデータ転送に単一端のみを使用するシングルデータレートメモリに比べ大幅に高速
– メモリーに取り付けられている金属製のものをヒートスプレッダという

### DRAMメーカー
Samsung(約45%シェア), SK Hynix(韓国 約28%), Micron(約23% Crucialシリーズ), Nanya(台湾), Winbond(台湾), Powerchip(台湾)

### 設計
– DDR4-2400、DDR4-2666などを チップ規格、PC4-19200やPC4-21300などを モジュール規格
– メモリ基盤にメモリチップを半田付けする
L メモリチップは集積回路であり、各チップ上にはさまざまなトランジスタ、抵抗、およびコンデンサが形成されている

メモリチップもCPUのように論理回路を設計してシリコンから作られているのか。。
つまり、メモリ、CPU、マザーボードにしろ、何やるにしろ集積回路、回路設計の知識が必須と言う事か。。
Godem

電気回路: 正弦波(サイン波)交流に対する回路素子の振る舞い、インピーダンスという概念理解
制御工学: 任意の入力(例えばステップ波形など)に対する回路の応答を解析
アナログ電子回路: トランジスタの構造や特徴を理解、信号増幅の原理の理解や小信号解析といった手法

やればやるほど勉強しなきゃいけない事多すぎんな