エンジニアのサブルーチン

あまり注目されない組み込みのシステムエンジニアをやっています。エンジニア業界のこととか、勉強したこととかを不定期に更新していきます。

chat-space 進捗2

f:id:code_sugar:20190711001155p:plain

作業が進まないせいか、気合が足りないのか、全然更新できてない。すいません。

1日分の作業が全部飛んだせいで進むどころか全く進んでない。やばいよ!


学んだことまとめ

link_toメソッドはリンクを一度クリックするとテキストの色が紫色になっちゃう。それと、アンダーラインが引かれちゃう。それらを解消する方法

a{
        text-decoration: none;
        color: #ffffff;
 }

color: #指定した色; でテキストの色をかえられる。

text-decoration: 値; で値に応じたテキスト装飾をしてくれる。

  • none : 何も装飾しない
  • underline : アンダーラインを装飾
  • overline : オーバーラインを装飾
  • line-through : こんな感じ
  • underline dotted red: 赤破線のアンダーラインを装飾


それと、BEMの命名規則は守ることでscssのコーディングがすごい楽になる。
覚えておく。

chat-space進捗 1

f:id:code_sugar:20190707011257p:plain

今こんな感じ。サイドバーのコーディング中。 まだまだ程遠いな...

ここまでコーディングして思ったこと。

1つ目はそもそも指示書の見方がよくわからなかったということ。指示書見るのが初めてだったから仕方がないけど、実際の現場だともうちょいわかりやす買ったりするんかな?


2つ目はコーディングに思ったより時間がかかるということ。簡単な事は、調べずにパッと書いていかないと無駄に時間かかって作業が遅れる可能性があるっていうのが一番かな。


3つ目は基礎カリキュラムでエラー問題ひたすら解いてたのがすごい役に立ってると実感したこと。エラーが出てもエラー文見ればエラー内容にもよるけど、ほとんどの場合すぐ「ああ、ここがダメなのね」っていうのがわかるから、1分もかからずにエラーが解決する。これはほんとでかい。

...

それとコーディングしてて1つ問題があったんだけど、Font-awesome-railsのアイコンが□になっちゃって表示されなかったのよな。

調べるとgemがFont-awesome5にまだ対応してないから、アイコンを前バーションであるFont-awesome4の形式で指定しないとそうなるらしい。

%i.fas.fa-edit

ここのfas(fabやfarの時もある)を

%i.fa.fa-edit

faに変えてやると、Font-awesome4の形式になる。
難しいわっ


明日までに、サイドバーの実装は終わらせるぞ!

データベースの構造

Chat-spaceの初回コードレビューにて、テーブルの作成でボロクソに指摘受けたので、DBについて学んだことまとめる
...

3層スキーマ


スキーマとはデータベースの構造であり、3層スキーマとはスキーマ3つの階層にわけて定義する方式のこと。

外部スキーマ
  • ユーザ目線で見たデータベース。概念スキーマで定義された論理データから必要な情報を取り出したもの(アプリケーションのビューなど)
概念スキーマ
  • 開発者から見たデータベース。 DBの論理データやデータ同士の関係など定義する。(テーブル定義)
内部スキーマ

正規化

第一正規化

レコード内の繰り返しを避けたもの。同一カラム内にある複数の値をわけて一つのレコードにしたりする。

第三正規化

主キーに対して全ての属性が従属であり、かつ推移的関数従属(後述)も存在していないテーブル


例えば会社ID 社員ID 社員名 年齢 部署ID 部署名 で定義されたテーブルがあるとする。(アンダーラインは主キーを表す)



社員IDがわかれば部署IDがわかる。部署IDがわかれば部署名がわかる。これを従属しているという。
つまり社員IDがわかれば部署名もわかる。これを推移的関数従属といって、これを解消するのが第三正規化である。

ER図

テーブル同士の関係性を図にしたもの。

Django2.2でPyMySQLを使いたかった

原因不明のアレルギー性の蕁麻疹で更新どころじゃなかった。 治ったので再開します。

TECH::EXPERTの方の進捗も全然行けそうなので、やりたかったPythonいじりました。

PythonでWebサイトを作りたかったので、WebフレームワークであるDjango

qiita.com

この記事を利用して、勉強していた。


PyMySQLを使いたかったのでDjangoでPyMySQLを使うために、DjangoのDB関連の設定をPyMySQL用に変更した

setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'sample',  #作成したデータベースの名前を入力
        'USER': 'root',    #ローカルホストなのでユーザー名はroot
        'PASSWORD': '',    #以下はローカルホストなので空でOK
        'HOST': '',
        'PORT': ',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
        'TEST': {
            'NAME': 'test_sample'
        }
    }
}

manage.py

一番後ろに追記

import pymysql #pymysqlのモジュールをimport


pymysql.install_as_MySQLdb()

ちなみに本番環境でPyMySQLを使う場合にはさらにwsgi.pyにもmanage.pyと同様の記述を追加しなくてはならない。


これで準備OK ターミナルに以下を入力

python3 manage.py migrate


けどエラー吐きよった。

ImportError: No module named pymysql

どうやらpymysqlがちゃんとimportされてないらしい。

sysにpymysqlのパスを通してもダメだった。。。。


...

解決方法

Djangoのバージョンを下げる


いろいろ調べた結果、Django2.2ではまだPyMySQLは対応していないらしく、バージョンを2.1に下げることで、解決するらしい。アンインストールしてDjango2.1をインストールして再度migrateしてみた

python3 manage.py migrate


Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying sessions.0001_initial... OK

いけた....

このエラー解決するのにかなり時間かかってた。やっと先進める。

綺麗なコードについて学ぶ

コードを書く事がこの先もっと多くなりそうなので、早いうちに他の人がちゃんとすぐ分かるように綺麗なコードの書き方について、エンジニア先輩方のqiitaの記事から引用して学びます。

...


分かりやすい名前をつける

qiita.com

まず、一つの変数を宣言してみる

var n;

これだけでは「これは何を格納している変数なんだ?」ってなって、いちいち全コードを見返さなくてはならない。


(for(orderCount=0;orderCount<0;orderCount++){};のようにするより、
for(n=0;n<0;n++){}; の方が分かりやすい場合もある。)

例えばこれが本を格納する変数だとすると

var book;

とすると一発で本を格納する変数だと分かる。

さらにいうと、これがどういった本なのかわかればなお良い。

var readableBook;

これだとこの変数は読む事ができる本を格納するものだと分かる。


メソッドの場合
何かに何かをするメソッドだと、動詞と名前を絶対入れるようにすると良い。


また
分かりやすくしようと意識して長くなってしまったりするけど、長すぎてもだめ。

var reservationAvailableBook;

予約可能な本を格納する変数だと分かるが、変数名が読みづらいからイライラする。
他の人に見せるので、思いやりのあるネーミングを心がける。



よく使う単語や使わない方が良い単語は下記のサイトを見て学ぼう

qiita.com

...

短くブロックする。

qiita.com

あるメソッドにデータベースからある本を取得したいメソッドを書く場合

function getBook(data){
//DBから本を取得する処理
...
//取得した本の名前をターミナルに出力する処理
}

とすると「本を取得するメソッドなのにそれ以外になんか余計な事してやがる」ってなっちゃう。
なのでコーディングしなおすと

function getBook(data){
//DBから本を取得する処理
}

function outputBookName(data){
//取得した本をターミナルに出力する処理
}


とするのが良い。短くブロックすると仕様変更に強く書き換えやすい

...
他にもいろいろありすぎて一冊の分厚い本になりそうなので、ちゃんとまとめてくれてる記事を下記に貼っておく

新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 - Qiita


綺麗なコードは永遠の課題となりそう...がんばろ....