DI(Dependency Injection)について理解する

DI(Dependency Injection)とはよく「依存性の注入」と訳される。 しかし、自分の中では「依存性」も「注入」もいまいちピンときていないので詳しく調べた。

下記ブログの記事がとてもわかり易かった。 nekogata.hatenablog.com

DI(Dependency Injection)とは

英語版のWikipediaではDIの説明として、以下のようにある。

In software engineering, dependency injection is a technique whereby one object (or static method) supplies the dependencies of another object.
Dependency injection - Wikipedia

他のオブジェクトに依存しているオブジェクトのことのようだ。

依存が高いと

参考

DI (依存性の注入)っていったいなんだ? - Qiita

Dependency Injectionを「依存性の注入」と訳すのは非常に悪い誤訳 - little hands' lab

猿でも分かる! Dependency Injection: 依存性の注入 - Qiita

Pythonの基本メモ

Pythonで使える演算子

演算子 意味 結果
x // y xをyで割った商の小数点以下切り捨て 10//3 3
x % y xをyで割った商のあまり 10 % 3 1
x ** y xのy乗 3 ** 3 27
abs(x) xの絶対値 abs(-3) 3
int(x) xを整数に変換 int(3.16) 3
float(x) xを浮動小数点数に変換 float(3) 3.0
round(x[,n]) xをn桁に丸める round(3.6) 4

メソッド

format()メソッド
  • 文字列を名前付きで埋め込む
man = 10
woman =10
room = "男が{0}人、女が{1}人".format(man , woman )

#文字列を名前付きで埋め込む
print("部屋に男は{man}人いる。").format(man = 10)

fmt = "部屋に男は{man}人、女が{woman}人いる。"
s = fmt.format(man = 10, woman = 10)

range()メソッド

range()の使い方

  1. range(回数)
  2. range(開始値, 終了値 + 1)
  3. range(開始値, 終了値 + 1, ステップ値)

条件分岐

ifの「pass」文

真の処理を空にして、偽だった時の処理だけを書きために「pass」を使う。

n = 5
if n = 3:
  pass
else:
  print(n)

繰り返し処理

繰り返し中止と継続

breakで繰り返しの処理を中止し、continueで1つの処理を中止し継続して実行を続ける。

for i in range(10):
  print(i)
  if i == 3: break
  #結果 0, 1, 2. 3

for i in range(5):
  print(i)
  if i >= 3:continue
    print("hello")
  #実行結果 0, hello, 1, hello, 2 , hello, 3, 4, 5

リスト・タプル・集合型

種類 特徴 生成方法
リスト(list) 複数の値を持つことができる [0, 1, 2]
タプル(tuple) 要素を変更できないタプル (0, 1, 2)
集合型(set) 要素を重複できないリスト {0, 1, 2}

リスト

リストを使うことで複数の値を1つの変数で管理できる。

points = [80, 75, 81, 65, 57]

points[1]    # 結果 80

#要素数を調べる
points.len()    #結果 5

# リストの値の合計
sum(points)    #結果 358

# 削除
del points[2]   #結果 [80, 75, 65, 57]
del points[2:4]    #結果 [80, 75, 57]

スライス スライスをすることでリストの一部を取り出すことができる。

リスト[ 開始 : 終了- 1 ]
リスト[ 開始 : 終了 - 1 : ステップ ]

# スライス
points[1:3]    #結果 [75, 81]
pints[:3]    #結果 [80, 75, 81]
points[::2]    #結果 [80, 81, 57]
メソッド 意味 結果(list = ["A", "C", "B"])
append(x) xをリストの末尾に追加する list.append("D") ["A", "C", "B", "D"]
extend(L) 異なるリストLを末尾に追加する list.expend("D", "E") ["A", "C", "B", "D", "E"]
insert(i, x) インデックスiの位置にxを代入する list.inser(1, "D") ["A","D", "C", "B"]
remove(x) リストの中にあるxを削除(最初の要素のみ) list.remove("B") ["A", "C"]
pop() リストの末尾にある要素を取り出し、リストから削除する list.pop()
list = pop(1)
["A","C"], ["A","B"]
clear() リストの全要素を削除(del a[:]と同じ) list.clear()
index(x) リストからxを探してその位置を返す list.index("B") 2
count(x) リストの中にxがいくつあるかカウントする list.count("C") 1
sort(key, reverse) リストを昇順に並び替える(reverse = Trueで降順) list.sort() ["A", "B", "C"]
reverse() リストの要素を逆順にする list.reverse ["B", "C", "A"]

データ構造についての公式リファレンス

タプル

タプルはリストと違い要素を変更することができない。間違って要素を削除したくない場合に使う。

a = (10, 20, 30)

# スライス
a[2]    #結果 30
a[:2]    #結果 (10, 20)

a[1] = 50    #-->エラーになる
変換
タプルからリストに変換 list(タプル)
リストからタプルに変換 tuple(リスト)

 集合型(set)

特徴 * 重複する値を持たせることができない * 順序を付けられない * 演算を行える(結合・交差・差分・対象差) * 生成方法は波括弧{...}かset()関数 * 空集合を作成するためには 波括弧{} ではなくset()関数 を使用しなければならない * 複数の集合型の結合は「 | 」 * 2つの集合型に共通する値だけを取り出したい場合には「 & 」 * inを用いて、要素が集合に含まれているかを調べる

color = {"red", "green", "white"}    

e = set()    #空集合を作成はset()関数を使わなければいけない
color2 = set({"red", "white"})

#差分
color - color2    #結果 {'green'}

#inを用いて、要素が集合に含まれているかを調べる
"red" in color2    #結果 True

#結合
color | color2    # 結果  {"red", "green", "white"}

#共通項
color & color2    # 結果  {"red", "white"}

辞書型

リストはインデックス番号で値を参照するのに対し、辞書型は任意のキー文字列で値を参照する。 

# データの作成(順番は保持されない)
ages = {'Nick':22, 'Jack':53, 'Paulo':18}

print(ages['Nick'])    #結果 22
# データの更新
ages['Nick'] = 23    

# inを用いて、要素が集合に含まれているかを調べる
'Nick' in ages   #結果 True

# for文との組み合わせ
for name, num in ages.items():
    s = "{0}は{1}歳".format(name, num)
    print(s)    #結果 Nickは22歳 Jackは53歳 Pauloは18歳
メソッド 意味 結果
d.keys キーの列挙 ages.keys() dict_keys(['Nick', 'Jack', 'Paulo'])
list(d.keys()) キーの一覧をリストで得る list(ages.keys()) ['Nick':22, 'Jack':53, 'Paulo':18]
sorted(d.keys()) キーの一覧をソート済みのリストで得る sorted(ages.keys()) ['Jack', 'Nick', 'Paulo']
d.values() 値の一覧を得る ages.values() dict_values([22, 53, 18])
list(d.items()) (キー, 値)のタプルのリストで一覧を得る list(ages.items()) [('Nick', 22), ('Jack', 53), ('Paulo', 18)]

Pythonでの文字列の操作

注意の一覧

基本操作

# 文字列の生成
a = "123"
b = '456'
c = """長文はトリプルクォート”””

# 数値からの変換
num = 789
d = str(num)

# 文字の連結
s = a + b
s    # 結果 ’123456’

# 文字の抽出
s[0]    # 結果 '1'

# 文字のスライス
s[1:4]    # 結果 '234'

文字の分割--split()

  • 'str.split(区切り文字, maxsplit = 回数)'で区切る
  • 文字列を分割したらリストになる
s = "This is a pen."
s.split()    # 結果    ['This', 'is', 'a', 'pen.']
s.split(maxsplit= 2)    # 結果    ['This', 'is', 'a pen.']

分割した文字列の結合-- join()

  • ”連結文字”.join(リスト)でリストを結合して文字列
s = "This is a pen."
"-".join(s)    # 結果(注意!!)    't-h-i-s- -i-s- -a- -p-e-n-.' 

t = s.split()
"-".join(t)   # 結果 'This-is-a-pen.'

文字列の置換-- replace()

  • str.replace(旧, 新, [, 回数])で文字列を置換する
  • 値を変更するわけではない
s = "This is a pen."

# "pen"を"book"に置換
s.replace("pen", "book")    # 結果 "This is a book."

s    # 結果 "This is a pen."    # sの値が変わったわけではない

書式化して埋め込む-- format()

  • 文字列を名前付きで埋め込む
man = 10
woman =10
room = "男が{0}人、女が{1}人".format(man , woman )

#文字列を名前付きで埋め込む
print("部屋に男は{man}人いる。").format(man = 10)

fmt = "部屋に男は{man}人、女が{woman}人いる。"
s = fmt.format(man = 10, woman = 10)

大文字・小文字-- upper(), lower()

  • 大文字はstr.upper()
  • 小文字はstr.lower()
s = "This is a pen."
s.upper()    # 結果 'THIS IS A PEN.'
s.lower()    # 結果 "this is a pen."

文字列の検索-- find()

  • str.find(検索文字列, [, 開始位置 [, 終了位置]])で検索する。ない場合は-1を返す
s = "This is a pen."
s.find('i')     # 結果 2 --indexが2(3文字目にiがある)
s.find('i', 3)     # 結果 5 -- indexが2(6文字目にiがある)

GoogleとTwitterの検索方法と検索オプションまとめ

GoogleTwitterでよく検索方法や検索オプションを調べることが多いので一通り調べてみた。使いかたはいろんなサイトにわかりやすく書いてあったのでそちらをみるべきです。

Google, Twitter共通の検索方法と検索オプション

「-」を使う除外検索は様々なオプションと複合して使いやすいので絶対抑えておくべき。

キャッチコピー 使用方法 意味
キーワード検索 “A” “A”をフレーズで検索
除外検索 A-B AのB以外を検索
OR検索 A OR B AかBのどちらか(両方)を含めたキーワードをすべて検索
OR・AND複合検索 (A OR B) C AかBのどちらか(両方)、かつCを含めたキーワードをすべて検索

Googleの検索方法と検索オプション

頻繁に使えそうな検索方法

キャッチコピー 使用方法 意味
サイト内検索 site:URL A URL内でAを検索する
拡張子検索 filetype:pdf(doc,xls,ppt) A Aに関するPDF(Word, Excel, パワポ)を検索
タイトル検索 intitle:A タイトルにAを含むものを検索
タイトル複数検索 intitle:A B タイトルにA,Bを含むものを検索
URLキーワード検索 inurl:A URL内にキーワードを含むものを検索
URL複数キーワード検索 allinurl:A URL内に複数のキーワードを含むものを検索
サイト内本文検索 intext:A サイト内の本文の中からAが含まれるサイトを検索
サイト内複数本文検索 intext:A B サイト内の本文の中からA, Bが含まれるサイトを検索

www.suzukikenichi.com

あまり使わないであろう検索方法

キャッチコピー 使用方法 意味
ワイルドカード検索 A*B フレーズの一部分を「」で補い検索(お前は死んでいる)
URL検索 related:URL URLに似たサイトを検索する
キャッシュ検索 cache:URL 指定されたURLをGoogleのキャッシュから表示
被リンク検索 link:URL URLへリンクが張られているページを検索
リンクキーワード検索 inanchor:A Aのリンクを含むものを検索
リンク複数キーワード検索 allinanchor:A B A, Bのリンクを含むものを検索
ページ情報検索 info:URL URLのWebサイトの情報を表示

Twitterの検索方法

頻繁に使えそうな検索方法

キャッチコピー 使用方法 意味
From検索 from:ID IDの投稿したツイートを検索
疑問ツイート検索 キーワード ? キーワードの疑問ツイート検索
Since検索 キーワード since:20xx-xx-xx 20xx年xx月xx日からのキーワードを検索
Until検索 キーワード until:20xx-xx-xx 20xx年xx月xx日までのキーワードを検索
メディア検索 キーワード filter:media 画像, 動画を含んだキーワードのツイートを検索
画像検索 キーワード filter:images 画像を含んだキーワードのツイートを検索
動画検索 キーワード filter:videos 動画を含んだキーワードのツイートを検索
認証アカウント検索 キーワード filter:verified 認証アカウントのツイートを検索
リツイート検索 min_retweets:数字 リツイート数が数字以上の投稿を検索
お気に入り検索 min_faves:数字 お気に入り数が数字以上の投稿を検索
リプライ検索 min_replies:数字 リプライ数が数字以上の投稿を検索
To検索 to:@ID IDあての投稿を検索
@検索 @ID 特定のユーザーに関するツイート全表示

あまり使わないであろうTwitter検索方法

キャッチコピー 使用方法 意味
タグ検索 # タグ タグ付けされた投稿を検索
ポジティブ検索 キーワード :) ポジティブなツイートを検索
ネガティブ検索 キーワード :( ネガティブなツイートを検索
Near検索 near: 場所 場所付近の投稿を検索
Within検索 near: 場所 within: xkm 場所から半径xkm内の投稿を検索
リンク検索 キーワード filter:links リンクを含んだキーワードのツイートを検索
言語指定検索 lang:ja(en, ko, zh, fr, es) 言語を指定して検索(英語, 韓国語, 中国語, フランス語, スペイン語)

パソコンや周辺機器の寿命を調べてみる。

以前、パソコンが急に動かなくなって壊れてしまった。

※リンク

そのときの原因がHDDの寿命だった。 買ってちょうど五年で寿命通り壊れてしまった。 壊れたHDDだけ交換して現在は使っているが、ふと他の部品も寿命が近いんじゃないかと思い調べてみた。

パソコンのHDDが壊れたのでSSDにしてUbuntu18.04LTSをインストールした

パソコンが動かなくなった

先日、急にパソコンが動かなくなって、それからずっとブルースクリーン状態になってました。 f:id:mongpa:20180615183617j:plain

自分の力じゃなにもできなかったので、泣く泣くノートパソコンの診断へ。。。 パソコン工房の500円診断に行ってみました。

pc-support.unitcom.co.jp

診断結果

店員さんに症状を教えて店内散策をしてたら、5分とかからずにカウンターに呼ばれ結果を伝えられました。
ちなみにパソコンチェッカーで調べてくれたみたいです。

結果はHDDの破損だろうということ。。

データは全部消えてしまったみたいです。。ある程度クラウドにはおいてあるけど、写真が消えてしまったのだけがとてもつらい。。

しょうがないし、確実に自分が悪いと反省しました。

今度からはバックアップはしっかりとっておかなければならないとつくづく感じました。

HDDやPCの寿命は5年というのを見つけたので、またそう遠くない未来に壊れるというのを念頭に置いておきます。。

パソコンを修理してみる

店員さんが言うにはHDDを交換すれば使えるようになるが、OS(Windows)のインストールとか諸々はメーカーじゃないとできないので、それをするために大体4万くらいかかるとのこと。

少し古いパソコンなのもあって4万はきついと思い、それは断念。

そこでもともと少し興味があり、最近新しいバージョンも出たということでubuntuを入れてみることにしました!

まずはハードディスクの交換をしなければならないので、店内を見回してみたところ思ったほど高くないことを知りました。 これくらいの値段でPCが使える可能性が買えるのであれば上等かな。。。

f:id:mongpa:20180615164001j:plain

(HDDは500GBとか1TBで6000円位)

f:id:mongpa:20180615163915j:plain

(SSDは240GBで8000円位)

この際なので、SSDにしてみました! 買ったのはAmazonで安くて評価も高かったものです。

パソコンを解体してHDDと交換していくわけですが、これは「自分のPCの型番 + 分解」等を検索すると過去に誰かが分解したブログがあったので、参考にさせて頂きました!

【ノートPC分解】富士通 LIFEBOOK AH77/J(FMVA77J)【HDD取り出し】 | 俺の塩。の無駄ブログ

akiba-neo.com

本当にありがとうございました。

動画でも色々あったので検索してもらえればイメージはつきやすいかと思います。


ノートパソコン SSD換装(交換)の仕方(ハード編)

パソコンは精密機械なので分解するときに静電気防止手袋が必要なのです。
自分は100均とかホームセンターに売っていると勝手に思い込んでいましたが全然なく、結局パソコン工房で600円位で買ったのでAmazonとかで買っておけばよかったと後悔しました。

分解の手順としては

  1. バッテリーをはずして数分間放置
  2. 壁とかに触って体の静電気を抜く
  3. 分解
  4. HDDを交換できたらもとに戻す
  5. 完成

初めてであまり勝手がわからなかったので部品を外すごとに壁を触っていました。笑

Ubuntuのインストール

USBとかを作るのが面倒ならこちらがいいと思います。
日本語RemixのインストールDVDが入っているので間違いないし、Ubuntuの使い方やラズベリーパイのこととかも書いてあるので買う価値はあると思います。

日経Linux 2018年 7 月号

日経Linux 2018年 7 月号

私は自分でLiveUSB(オペレーティングシステム 全体を格納していて、そこからブート可能なUSB)を作ってみたかったので、自作しました!
用意するもの一覧

LiveUSBの作り方は以下のサイトを真似させていただきました。

linuxfan.info

LiveUSBができたので、SSDにしたPCに差し込んで電源を立ち上げます。

立ち上げるときにUSBを先に起動させないといけないので、BIOS設定からUSBの順番を1番上に設定します。

自分のパソコンはFujituなので、電源を入れてF2ボタンを押すとBIOS設定の画面に入りました。

www.fmworld.net

動画でわかりやすいので下記ブログ参考にしてください! do-you-linux.com

結果、、、

上手くインストールすることができました!
18.04はまだ出たばかりで不具合もあるみたいなのですが、個人的にまだ困ったことはありません。

linuxfan.info

Ubuntuはとても使いやすくて、見やすいし、起動も早いし何不自由しないことに驚いています。
起動が早いのはSSDに変えたのも大いにあると思うので一概には言えませんが、こんないいものが無料で使えるのはすごいなと心から思いました。