【読書感想】神・時間術

普段仕事をしている中で、時間の使い方が下手なのではないか、とか、

もっといい時間の使い方があるのでは、とかとか思い、

そのヒントを見つけるべく『神・時間術』を読んでみました。

 

この本を読んでいて、1番ゾッとしたのが、

「朝の30分=夜の2時間」という事でした。

脳にとってのゴールデンタイムは、起きた後の2-3時間で、

そこから時間が経つにつれて、脳の動きは落ちていく一方だそうです。

 

私はいつも出社してから、はじめにニュースをざっと読み、

タイピングの練習したり、技術書読んだりと、

自分にとってやりたくないルーティンをやっていましたが、

それより、脳が1番元気な午前中に、実装や設計に時間を割いた方が賢明だと思いました。

 

 

「15・45・90の法則」

人間が深い集中力を保てるのが15分、

15分を1単位として、集中力を保てるのが45分、

人間の中に90分の体内時計があり、90分は脳が動いて、その後の20は眠気が訪れるというサイクルがあるそうです。

 

何か仕事をするときは、この法則を意識しながら、時間を区切って仕事を進めていきたいですね。

 

 

「頭の中でふとしたことでも気になったらメモしておく」

『自分の頭で考えて動く部下の育て方』を読んだ時も、メモしておけば、自分の中で客観的に整理できたり、

アイディア出しの手助けになったりすると書いてありましたが、

今回は、何が物事を進める上で、無駄な雑念を排除して、そのことに集中するために、

気になったことはメモしておき、頭に浮かんだその雑念を一旦置いておくことができるとのこと。

メモするっていろんな役に立ちますねぇ。

 

 

あと細かいところで地味に使えるなと思ったのは、

何かの決断を先延ばしにするときは、「◯日の◯時〜◯時に決める」

というように、日付だけではなく時間まで決めておき、スケジュールに組み込むことで、

あ、やべあれ決めなきゃいけなかったじゃん…という現象改善になるなと思いました。

【技術勉強】アルゴリズム図鑑

データ構造

スタック

後かから入れたものを、先に出す
LIFO(Last In First Out)

キュー

先に入れたものを、先に出す
FIFO(First In First Out)

ハッシュ関数

ヒープ

f:id:naaaaaaa-tooo:20190612204632j:plain

各「ノード」は、最大2つの子データをもつ
子データは、親データより大きなもの

「プライオリティキュー」=自由に追加でき、小さいものから取り出す
最小値を頻繁に出すときに使える

二分探索木

https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Binary_search_tree.svg/300px-Binary_search_tree.svg.png

各「ノード」は、最大2つの子データをもつ
全てのノードは、そのノードの左部分木に含まれるどの数よりも大きくなる
全てのノードは、そのノードの右部分木に含まれるどの数よりも小さくなる



ソート

バブルソート

右から左に向かって、隣り合う2つの数字を比較して入れ替える
それを終わるまで繰り返す

選択ソート

数列の中から最小値を探し出し、左端の数字と入れ替える

ヒープソート

マージソート

https://camo.qiitausercontent.com/51561df3442f3cdd7d2ab40caab47964bf2eb0cb/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3138323936332f62616665663162332d373139632d626337332d633937362d3932326566636332613331662e6a706567

ソートする数列をほぼ同じ長さの2つの数列に分割していって、分割できないところまで行ったら、グループ同士をマージしていっていく

クイックソート

https://slidesplayer.net/slide/11273690/61/images/20/%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%BD%E3%83%BC%E3%83%88%E3%81%AE%E5%8E%9F%E7%90%86+%E3%82%BD%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E7%AF%84%E5%9B%B2%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8B%E3%82%89%E9%81%A9%E5%BD%93%E3%81%AA%E8%BB%B8%E8%A6%81%E7%B4%A0%28%E6%9E%A2%E8%BB%B8%E3%80%81pivot%29+X%E3%82%92%E9%81%B8%E3%81%B6%E3%80%82.jpg

数列の中から、基準となる数字を取り出して、それより大きいか、小さいか振り分けていく



配列の探索

線形探索

二分探索

https://www.codereading.com/algo_and_ds/algo/images/binary-search.png



グラフ探索

幅優先探索

https://image.itmedia.co.jp/enterprise/articles/1001/16/tnfig1.jpg

深さ優先探索

https://camo.qiitausercontent.com/b30f025fc244e9706faa04e1c254a59aac357aa4/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3134303330342f64343138303762322d396238642d333833642d376463662d3161613537613837396133362e706e67



セキュリティ

ハッシュ関数

特徴

  1. 出力する値のデータ長が変わらない

  2. 同じ入力は必ず同じ出力になる

  3. 似た入力でも1ビット違えば、出力は大きく異なる

  4. 全く別の入力をしても、同じハッシュ値になる可能性がある =「ハッシュ値の衝突」

  5. ハッシュ値から元のデータを逆算することができない

パスワードをデータベースに保存するときとかに使われる。

共通鍵暗号方式

暗号と復号に同じ鍵を用いる方式
問題点:共通鍵を相手に送る場合、盗聴される危険性がある

公開鍵暗号方式

暗号化と復号で異なる鍵を使う方式
暗号化に使う鍵を「公開鍵」
復号に使う鍵を「秘密鍵

公開鍵を相手に渡して暗号化してもらえば、
三者に公開鍵を盗聴されていても、公開鍵ではデータを復号できないため、
共通鍵暗号方式より安全性がある

しかし、もらった公開鍵は、果たして公開鍵をくれた本当の人物かどうかわからない点や、
暗号化の処理速度が遅いという問題点がある

ハイブリッド暗号方式

共通鍵暗号方式と公開鍵暗号方式を組み合わせたもの

AからBにデータを送ろうとする場合

  1. Aが処理速度の早い共通鍵暗号方式でデータを暗号化する

  2. Bが公開鍵と秘密鍵を作成する

  3. BがAに公開鍵を送信

  4. Aはその公開鍵を使って、共通鍵暗号方式に使う鍵を暗号化する

  5. AからBに暗号化した鍵を送信する

  6. Bは秘密鍵を使って、鍵を復号する

  7. AからBに暗号化したデータを送り、それをBが復号した共通鍵を使って復号する

SSLでこの方式が使われている



その他

ユークリッドの互除法

MySQLを起動しようとしたら、間違ったIPアドレスを見に行っていた問題

問題

mysqlを起動させようとしても、なぜか途中で起動が終わってしまう。

$ ps -ef | grep mysql
centos   27647 27403  0 11:55 pts/1    00:00:00 grep --color=auto mysql

mysqlが起動してないな。

$ sudo mysqld_safe
190611 11:54:28 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
190611 11:54:29 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

あれ、起動が途中で終わっちゃう、、



状況確認

// エラーログファイルがどこにあるか確認
$ cat /etc/my.cnf
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
skip-character-set-client-handshake
character-set-server=utf8
character-set-client=utf8
init-connect = SET NAMES utf8
default_time_zone = '+0:00'

bind-address = 127.0.0.1
bind-address = 10.x.x.xxx

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log  //←ココ
pid-file=/var/run/mariadb/mariadb.pid
timezone = UTC

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

// エラーログを確認
$ sudo cat /var/log/mariadb/mariadb.log
190611 11:28:43 [Note] Plugin 'FEEDBACK' is disabled.
190611 11:28:43 [Note] Server socket created on IP: '10.x.x.xxx'.
190611 11:28:43 [ERROR] Can't start server: Bind on TCP/IP port. Got error: 99: Cannot assign requested address
190611 11:28:43 [ERROR] Do you already have another mysqld server running on port: 3306 ?
190611 11:28:43 [ERROR] Aborting

3306のポートがすでに使われてるのか?

// 使っているポート確認
$ netstat -tanp
[client]
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      -
tcp6       0      0 :::111                  :::*                    LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:25                  :::*                    LISTEN      -

特に3306は使ってなさげ、、

あれ、繋げてるIPアドレスがローカルじゃないぞ?

190611 11:28:43 [Note] Server socket created on IP: '10.x.x.xxx'. 

もう一度、my.cnfを確認

$ cat /etc/my.cnf
bind-address = 127.0.0.1
bind-address = 10.x.x.xxx

bind-adressが2つ存在してる。

調べてみたところ、bind-adressは複数設定できない。
複数行書くと、最後の行が使われるらしい。



解決

$ sudo vim /etc/my.cnf
bind-address = 127.0.0.1
# bind-address = 10.x.x.xxx //コメントアウトしておく

$ sudo mysqld_safe &
190611 11:54:28 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
190611 11:54:29 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

$ ps -ef | grep mysql
root     27052  1951  0 11:54 pts/0    00:00:00 sudo mysqld_safe
root     27053 27052  0 11:54 pts/0    00:00:00 /bin/sh /bin/mysqld_safe
mysql    27293 27053  1 11:54 pts/0    00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
centos   27647 27403  0 11:55 pts/1    00:00:00 grep --color=auto mysql

やっとこさ起動できました。

【読書感想】自分の頭で考えて動く部下の育て方

先日、社長に自分に対してどのようなことを期待しているのか聞いたところ、

自ら動いて仕事をこなしていくこと、自主性を持つことと言われました。

「仕事に対する自主性」ってどうすれば身につくの?と思い、

別に部下がいるわけではない(むしろ新卒1年目)ですが、

後輩の育て方という観点から、「自主性」「上の人が求めるもの」を探るために読んでみました。

 

まず大切なのは、本のタイトルにもあるように「自ら考える」癖を身につけなければいけないことです。

「考える」癖を身につけるためには、自分がやる仕事の意味・目的を考えてみる。その仕事の後に、次はどんな仕事をすべきかを考えてみる。

こうすることで、能動的に仕事をすることができるようになるし、自ら考えて次の仕事を取りに行くことができるようになるようです。

これは私自身入社してすぐの頃に、社長からにも「目的思考で仕事をしていくべし」と言われました。

 

具体的にどう自主的に行動していけばいいのかというと、

仮説的思考(観察→推論→仮説→検証→考察)を繰り返して、「知らない」ことを「知っている」ことに変えることを繰り返していく必要があるそうです。

仮説的思考をする=自主的な思考、行動につながるということでしょうか。

またもやこれも社長から言われたことがあります。考えてみて、調べて、考えて、仮説を立てる、これを繰り返すのがビジネスだと。

 

まず、やる仕事の「目的」を考えてから、仕事に取り組むべきだと思いました。

その癖を第一歩に身につけるべきだと。

そして、査定をクリアするためには、仮説的思考を身につけないといけませんね。

 

そしてそして、社長すごい。

【読書感想】アウトプット大全

私はアウトプットすることに対して苦手意識がありました。

何かアウトプットしなければと思って、ブログを書こうとしても、文章を書くのが苦手で、時間がかかるし、

書き終えたとしてもそれに満足してしまって、身になっているのかわかりませんでした。

 

『アウトプット大全』を読んだことで、

1. アウトプットのために書くブログは、書く時間をあらかじめ決めておくことで、短い時間で終わらせ、かつブログを書くことを続けやすくなる

 

2. アウトプットをしても、身になっていない人は、フィードバック(見直し・修正)をしていない

 

3. 以前からTwitterには読んだ本の内容をつぶやいていたけど、それらはただのコピペになっていた

 

ということに気がつきました。

 

これからは、

1. ブログを書く時間を短めに設定する

 

2. ブログ,twitterを書いた時は、その次の日以降に見直して、修正する

これから読書感想文をこのブログに書く

 

3. Twitterで呟くときは、本から得たものに対して自分がどう思ったかも付け足す

 

4. Twitterだけではなく、このブログにも読書感想文を書く

 

この四つのことをやりたいと思いました。

【勉強まとめ】システム設計のセオリー

1.データ設計

概念データモデル

ビジネスの視点から、ビジネス全体を把握できるデータのまとまり

サブジェクトエリア

ビジネスの観点から、一括りにまとめたり、分割する範囲を決めること

理論データモデル

概念データモデルに対して属性を付け加えていく

データ属性

項目 エンティティに付け加える項目のこと

物理データモデル



2.業務プロセス

プロセスモデル

ビジネスの動的側面を表したもの
対義:データモデル(静的側面)

業務プロセス

経営の目的を達成するための活動

業務プロセスの概要

5W2Hで定義していく
特にWhyの部分が重要



3.機能の概要定義

理論CRUD

エンティティとプロセス、エンティティを機能の更新領域を見える化する
データのライフサイクルの把握が可能になる
C:生成
R:参照
U:更新
D:削除



4.ユーザビリティ

ユーザビリティ

便利さ、使い勝手の良さ

アクセシビリティ

マルチディバイスへの対応