Ubuntu 16.04 Redis インストール

Ubuntu 16.04 Redis インストール

Redis を Ubuntu 16.04 LTS にインストールする手順

を参考にインストール

sudo apt show redis-server

を実行した結果

Version: 2:3.0.6-1ubuntu0.4
となり
Ubuntu 16.04 の公式リポジトリでは
2019年12月時点でも更新はなさそう

sudo add-apt-repository ppa:chris-lea/redis-server
sudo apt update

でリポジトリ追加と更新

再度

sudo apt show redis-server

を実行した結果
Version: 5:5.0.7-1chl1~xenial1
となったので
インストール

sudo apt install redis-server

インストールできたら

redis-cli --version

redis-server --version

でそれぞれのバージョンが表示できるかを確認

Redis の起動は

redis-server

クライアントの起動は

redis-cli 

をサーバ起動後に実行

クライアント終了は

 exit

クライアントから redis を停止するには

shutdown 

を使う
このときにデータが保存される

Windows10 仮想マシン設定

Windows10 仮想マシン設定

まず Guest Additions のインストール

デバイス >
Guest Addition CD イメージの挿入

自動で起動しない場合
エクスプローラーを開き
CD ドライブ VirtualBox Guest Addition
をクリック

VBoxWindowsAdditions をクリック

はい をクリック

Next をクリック

Nextをクリック

install をクリック

インストール をクリック

Finish をクリックすると再起動になり設定が反映される

次に Windows Update の停止がされているか確認
これは実験をするときセキュリティホールが埋まっていると実践できないため

スタートボタン > 設定で

更新とセキュリティをクリック

Windows Update をクリック

詳細オプションをクリック

これで更新などがオフになっていることを確認

次にPing を返すように設定
スタートメニューから
Windows システムツール > コントロールパネル

システムとセキュリティ

Windows Defender ファイアウォール

詳細設定

受信の規則

ファイルとプリンターの共有(エコー要求 ICJMPv4受信)
を2つ選び
右クリックして
規則の有効化をクリック

変更ができたら仮想マシンの設定を変えるため
一度シャットダウン

次に仮想マシンの設定を変更

一般の高度タブをクリックし
クリップボードの共有
ドラッグ&ドロップ
を無効から双方向へ変更

システムのマザーボードタブで
チップセットをPIIX3 から
ICH9 へ変更

次にプロセッサータブをクリックし
使用するCPUの数を緑色のバーの限界まで変更

次にディスプレイで
3Dアクセラレーションを有効化
2Dビデオアクセラレーションを有効化にチェックをいれる

ネットワークで
割り当てを
NATからブリッジアダプターへ変更

これらができたらOKをクリック

Firebase でサイト公開

Firebase でサイト公開

Firebase プロジェクトの設定ができると
firebase.json
というファイルが作成される

これは
firebase init で作成された設定用ファイルになる

また public フォルダ内に
404.html が作成される

これらを確認したら
次にサイトを公開するので
プロジェクトフォルダに移動し

firebase deploy

を実行するとアップロードされ
Hosting URL が発行される

あとはこのURLをブラウザで表示すればページが表示される

また、変更をして更新をするときには
再度

firebase deploy

を実行すれば更新できる

サイトの更新履歴については
Firebase にログインして
Hosting をクリックすれば更新履歴を確認できる

また、バージョン管理もされているので
ロールバック機能を使うことで過去の状態に戻すことも可能

firebase プロジェクトの設定

firebase プロジェクトの設定

公開するフォルダを
firebase 用に初期化する

まず public のあるディレクトリに移動

cd MyPortfolioProject

次に

firebase list

を実行

これで現在 firebase にあるプロジェクト一覧が表示される

必要になるのは
Project ID / Instance の値

今回は
myportfolioproject-5e36a
を使う

次に初期化

firebase  init --project=myportfolioproject-5e36a

実行するとどのサービスを使うかい聞かれるので

◯ Hosting: Configure and deploy Firebase Hosting sites

までカーソルを十字キーで移動して
スペースで決定してから
Enter

いくつか変更があったので
create-react-appで作ったアプリをFirebaseで公開する方法

を参考に実践

ここから少し変わっている

? Please select an option: 
❯ Use an existing project 
  Create a new project 
  Add Firebase to an existing Google Cloud Platform project 
  Don't set up a default project 

とでてくる

今回はすでに作成したプロジェクトを使うので
そのままEnter

What do you want to use as your public directory? (public) 

となり
どのフォルダを公開用にするかと聞かれるので
これも デフォルトの public でよいので
そのまま Enter

次に

Configure as a single-page app (rewrite all urls to /index.html)? (y/N)

と聞かれSPAとして設定するかきかれるけど
今回は No にしたいので
そのままEnter でOK

SPAは Single Page Application の意味

次に

File public/index.html already exists. Overwrite? (y/N) 

となり
public の中にある index.html を上書きするか聞かれる
No なので Enter でOK

これで
Firebase initialization complete!
と表示されれば初期化はOK

ubuntu 16.04 へ Firebase-tools のインストール

ubuntu 16.04 へ Firebase-tools のインストール

Firebase CLI リファレンス

を参考にインストール

Node.js を使うため
npm を使ったインストールにする

sudo npm install -g firebase-tools

でインストール

しかし

firebase -V

を実行しても

┌────────────────────────────────────────────────────────────┐
│             firebase-tools update check failed             │
│            Try running with sudo or get access             │
│            to the local update config store via            │
│ sudo chown -R $USER:$(id -gn $USER) /home/snowpool/.config │
└────────────────────────────────────────────────────────────┘
/usr/local/lib/node_modules/firebase-tools/node_modules/configstore/index.js:53
				throw err;
				^

Error: EACCES: permission denied, open '/home/snowpool/.config/configstore/firebase-tools.json'
You don't have access to this file.

    at Object.openSync (fs.js:443:3)
    at Object.readFileSync (fs.js:343:35)
    at Configstore.get (/usr/local/lib/node_modules/firebase-tools/node_modules/configstore/index.js:34:26)
    at new Configstore (/usr/local/lib/node_modules/firebase-tools/node_modules/configstore/index.js:27:45)
    at Object.<anonymous> (/usr/local/lib/node_modules/firebase-tools/lib/configstore.js:4:18)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)

となってしまう

このため

sudo chown -R $USER:$(id -gn $USER) /home/snowpool/.config

を実行

これで再度

firebase -V

を実行すると
少し時間がかかるけどバージョンが表示される

これで

firebase login

を実行すると

i  Firebase optionally collects CLI usage and error reporting information to help improve our products. Data is collected in accordance with Google's privacy policy (https://policies.google.com/privacy) and is not used to identify you.

? Allow Firebase to collect CLI usage and error reporting information? (Y/n) 

となり
利用状況のデータを送信しますかとでるので
Yes ならそのまま Enter でOK

するとブラウザが立ち上がるので
アカウントを選択

次の画面で許可をクリック

これで
Firebase CLI Login Successful
となればOK

Ubuntu16.04 へ Node.js のインストール

Ubuntu16.04 へ Node.js のインストール

ドットインストールでFirebase でウェブページを公開するにあたり
node.js のインストールが必要になったのでメモ

ubuntu16 node.js インストール
で検索

Ubuntu16.04にnodejsをインストール

を参考に実践

sudo apt install -y nodejs npm


node.js と npm をインストール

なお npm コマンドについては
npm よく使うコマンドまとめ


Node.js と npm 再入門(その4:便利コマンド)

を参考に

sudo npm cache clean

でキャッシュの削除

sudo npm install n -g


npmでnをインストール

これは
nで任意のバージョンのNode.jsをインストールするため

このあたりに関しては
Ubuntu 16.04 x64 に n を使用して Nodejs をインストールする

を参考に

sudo n 10.16.0

で ver 10.16 の node.js をインストール

sudo ln -sf /usr/local/bin/node /usr/bin/node

でシンボリックリンクを作成

ln コマンドのオプションについては
s シンボリックリンク作成
f 登録内容の上書き
となっている

詳しくは
lnコマンドについて詳しくまとめました 【Linuxコマンド集】

を参考に

これでインストールができたら

node -v

でバージョン確認

python おさらい その6

python おさらい その6

標準入力+1で出力

print(int(input())+1)

次にリストの中に重複した値があるか true false で判定

list =["HND","NRT","KIX","NGO","NGO"]
flag =len(list) != len(set(list))
if flag:
    print("true")
else:
    print("False")

Pythonでリスト(配列)に重複した要素があるか判定

を参考に

set() にリストを渡すと重複する値は無視されて
位置地な値のみになるので
これを len() で比較すれば重複した要素があるか判定できる

最後の判定は true で出力なので
そのまま処理結果を出すと True になる

python の set() について調べたいなら
Pythonのsetの基本的な使い方 : set()

も参考に

リストとの違いは要素に順番を持たず
重複した値は取り除かれるということ

次にリストの中から同じ要素のカウント


array = ["HND", "NRT", "KIX", "NGO", "NGO", "NGO", "NGO", "NGO"]
count = {}

for pattern in array:
    if pattern in count:
        count[pattern] += 1
    else:
        count[pattern] = 1

for (key, value) in count.items():
    if value != 1:
        print(value)

全体の要素数をカウントするなら len() を使う
各要素ごとの出現回数をカウントするなら count() を使う

今回は

count ={}

としておくことで key value 形式で格納できるようにしている

詳しくは
PythonのCounterでリストの各要素の出現個数をカウント

を参考に

items() はキーと値のペアを両方取り出す

for (key, value) in count.items():

なら
count の中のキーと値を取り出しながらループとなる

この使い方については
Pythonで辞書をforループするkeysメソッド・valuesメソッド・itemsメソッドの使い方

を参考に

次にリストのソートと表示

list =[1, 3, 5, 6, 3, 2, 5, 23, 2]
list.sort()

for item in list:
    print(item)

昇順でリストをソートするなら
sort() で行う
なお
sort(reverse=True)
とすると降順ソートになる

リスト関連は
Pythonのリストのソートまとめ|sort(), sorted(), reverse()
を参考に

python おさらい その5

python おさらい その5

文字列の長さを表示するには len() を使う

print(len(input()))

で標準入力で入力した文字数を表示できる

次に文字列のインデックスの表示

input_line = input()
print(input_line[0])

というように 0 からインデックスが振られるので
最初の入力文字を表示するなら0を指定する

次にリストのループ表示

list =["Nara", "Shiga", "Hokkaido", "Chiba"]
for item in list:
    print(item)

今回は標準入力ではなく
リストの中身の表示

for の構文がわかっていれば
あとはリストの中身を表示するだけでOK

解説としては
【Python入門】for文を使った繰り返し文の書き方

がわかりやすいかも

次に標準入力を1文字ずつ表示
とはいっても入力自体を1文字ずつなので
別に分割するとか考えなくてOK

string=input()

for item in string:
    print(item)

最初の string の中身がリストから標準入力になっただけ

次に2つの入力値があり
最初に文字列
次に文字を入力し
文字の出現回数を計算する


string = input()
char = input()
count = 0

for item in string:
    if item == char:
        count +=1
print(count)

最初に2つの input で文字列と文字を取得

あとは回数を格納する変数を用意して
for で文字列をループしながら単語に分解

その中で文字と一致したら
カウントを増やして最後に print() で出力

次に
標準入力の
文字列の n 文字目と n + 1 文字目
という場合

count = int(input())-1
string = input()

if count +1 < len(string):
    print(string[count]+" "+string[count+1])

インデックスはゼロから数えるので
入力の時点で -1 したほうが計算が楽

文字列の長さを超えることがあるので
if で判定しておく
文字列連結は + でできる
これは java とかもおなじ
php だと . で連結なのでわかりにくいかも

s が t の中で何回出現するかカウントして出力
の場合

pattern = input()
string = input()
result = 0

for i in range(len(string) - len(pattern) + 1):
    portion = string[i:i + len(pattern)]

    if portion == pattern:
        result += 1

print(result)

次に標準入力+1で出力する場合

num= int(input())+1
print(num)

int() で整数にして+1しておけばOK

次に
n m
というように空白区切りで入力して
n 個の整数を改行区切りで標準

num = int(input())

for i in range(num):
    print(input().split()[1])

最初の num で入力回数を取得
次に for で回数分ループ
split() で分けて インデックス1の部分なら
2番めに入力したものがでるのでこれでOK

次に標準入力したものをソートして出力

input()
string = input().split()
nums=[]

for num in string:
    nums.append(int(num))
nums.sort()

for i in nums:
    print(i)

となる

格納リストを用意し
ループで入力したものを代入
代入するときに整数に変換

ループ後に sort() でソート
あとはこれをループさせて
1つずつ表示

次に入力されるn個の組を整数の値で昇順にソートして
文字列を表示

num = int(input())
inputs = {}

for i in range(num):
    tmp = input().split()
    inputs[int(tmp[1])] = tmp[0]

inputs = sorted(inputs.items())

for i in inputs:
    print(i[1])

最初に入力数を受け取る

次に 配列格納変数inputs を用意
for で range の範囲を入力値にして
tmp に格納しながら標準入力したものをループでまわす

inputs[int(tmp[1])] = tmp[0]

の部分で key value 形式で格納

inputs = sorted(inputs.items())

の部分で
sorted() で昇順にソート

sort() と sorted() の違いについては
Pythonでリストをソートするsortとsortedの違い

を参考に

基本的に文字列をソートするなら sorted() を使う

items() はすべてのキーと値の組み合わせを取得

なお値だけなら values()
キーだけならkeys() を使う

これらの辞書関連メソッドについては
辞書に含まれるすべてのキーと値を取得する

を参考に

今回は inputs に key -value 形式で格納
あとは

for i in inputs:
    print(i[1])

で 値のみループで表示すればOK

python おさらい その4

python おさらい その4

文字列の分割

input_line = input()
for string in input_line.split():
    print(string)

というように
一度 input() で入力し
split() で分解した数だけループ処理

あとは print で表示

次に整数の足し算

a,b = map(int,input().split())
print(a+b)

で2つの数値を合計して出力

for で書くのなら


strings = input()
result =0
for num in strings.split():
    result +=int(num)
print(result)

というかんじ

次に文字列の長さ
長さは len() で取得できるので


input_line = input()
print(len(input_line))

とすればOK

次に配列のインデックス表示

input_line = input()
print(input_line[0])

というように変数にインデックスが割り当てられているので
0からカウントしていく

今回なら最初の文字列が0なので
最初の文字列を表示

次に大文字への変換
これは upper() を使う

メソッドについては
Python文字列操作マスター

を参考に

print(input().upper())

次に指定範囲の数値を表示

これは range() を使う
第2引数に+1しないとその1つ前の数値で処理が終了してしまう

input_line = list(map(int,input().split()))

for input in range(input_line[0], input_line[1]+1):
    print(input)

でOK
リストに格納したほうが int でキャストしなくていいので楽

書き方については
Python3の標準入力やり方まとめ

を参考に

次に指定した文字列だけ大文字変換する

nums= list(map(int,input().split()))
string = input()


print(string[0:nums[0] - 1], end='')
print(string[nums[0] - 1:nums[1]].upper(), end='')
print(string[nums[1]:])

print() で end=” を指定すると改行なしとなるので
処理したものを改行なしで表示できる

python おさらい その3

python おさらいその3

文字列の分割

input_line = input().split()
print(input_line[0])
print(input_line[1])

とすれば
標準入力を分割し、表示できる

std_in = input()

for string in std_in.split():
    print(string)

でも答えは同じ

次に標準入力で2つの値をいれて合計を出す

a,b= map(int,input().split())
print(a+b)

でも

std_in = input()
result = 0

for num in std_in.split():
    result += int(num)

print(result)

でも答えは同じ

次に文字列の長さを取得
これは len() で簡単にできる

input_line = input()
print(len(input_line))

もっと簡潔に書くなら

print(len(input()))

文字列の長さ(文字数)を取得する

を参考に

次に入力した1番めの文字列を取得

input_line = input()
print(input_line[0])

というように
格納した変数のインデックスで取得表示できる

文字列の指定したインデックスの文字(要素)を取得する

を参考に

次にスペース区切りの入力をすべて表示

nums = input().split()

for i in range(int(nums[0]), int(nums[1]) + 1):
    print(i)

というように range() に範囲指定して行う

split() を使うことで分割され
これはインデックスとして格納される

range() は
第1引数で開始位置
第2引数で範囲
を指定する

Pythonのrange()関数を使ったリスト作成や繰り返し処理の書き方

を参考に