かべぎわブログ

ブログです

Macにgcloud(Cloud SDK)をインストールする

Google Cloudで利用するgcloudコマンドをローカルマシンのMacにインストールしてみます。

手順

ターミナル上で以下のコマンドを実行

途中でどこのディレクトリに保存するか?
本当にインストールしますか?
みたいなことを聞かれるので適当に回答すればOK

$ curl https://sdk.cloud.google.com | bash

シェルを再起動する

シェルを再起動させて設定を読み込ませる

$ exec -l ${SHELL}

環境を初期化する

以下コマンドを実行してgcloudの環境設定を行う

$ gcloud init

このコマンドを実行して対話型ですすんでいくと、許可設定しなきゃだめだよーみたいなことを言われてブラウザが開くので許可する
f:id:kabegiwakun:20181211125805p:plain

コンソールでgcloudの初期設定を行う

どのプロジェクトでgcloudを利用するかえらぶ

Pick cloud project to use:
 [1] articulate-ego-XXXXXX
 [2] Create a new project
Please enter numeric choice or text value (must exactly match list item): 1


どのリージョンとゾーンをデフォルトで利用するかえらぶ
ちなみに日本はasia-northeast-1 

Do you want to configure a default Compute Region and Zone? (Y/n)?  y

Which Google Compute Engine zone would you like to use as project
default?
If you do not specify a zone via a command line flag while working
with Compute Engine resources, the default is assumed.
 [1] us-east1-b
 [2] us-east1-c
 [3] us-east1-d
 [4] us-east4-c
〜〜〜省略〜〜〜
 [32] asia-northeast1-b
 [33] asia-northeast1-c
 [34] asia-northeast1-a
〜〜〜省略〜〜〜
Did not print [6] options.
Too many options [56]. Enter "list" at prompt to print choices fully.
Please enter numeric choice or text value (must exactly match list
item):  32

gcloudがインストールできる

できました!!!!!!

$ gcloud --version
Google Cloud SDK 227.0.0
bq 2.0.39
core 2018.11.30
gsutil 4.34

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

Pythonで70分とか25時とかそういうのを実現させる

概要

Pythonで70分を1時間10分にしたい。
Pythonで25時を翌日の1時にしたい。
そういうのを実現させる。

前提

前提として以下をやってあげています。

from datetime import datetime,time,timedelta

70分を1時間10分にしたい

1時間は60分なので60で除算してあげれば良い。
そのためにdivmodをつかってあげて商と余りを求めてあげる。
それをtime()で時刻形式にしてあげる。

動かしてみるとこんなかんじ

$ .hour.py
01:10:00

25時を翌日の1時にしたい

1日は24時間なので24で除算してあげれば良い。
そのためにdivmodをつかってあげて商と余りを求めてあげる。
それを現在時刻と加算してあげる。
加算するときはtimedelta()をつかってあげるとよい。

うごかしてみるとこんなかんじ

$ date
2018年 12月 8日 土曜日 22時11分01秒 JST

$./day.py
2018-12-09 23:11:04.832109


おわりに

なんだかんだ難しいことしようとしがち

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

Ansibleのモジュールを自作してみる

概要

Ansibleのモジュールを自分でつくってみて動かしてみたいと思います。

環境

Ansibleを動かす環境はこんなかんじ。
いたって普通の環境。
library/jisaku.pyが今回のキモの自作モジュール。

$ tree
.
├── inventories
│   └── hosts
├── jisaku.yml
└── library
    └── jisaku.py

自作モジュールについて

こんかいつくったモジュールはこんなかんじ。
パラメータでわたしたものにgood!ってつけてあげるだけのやつ。

実際に動かしてみる

playbookはこんなかんじ。
jisakuの箇所が自作モジュールになっている。

$ cat jisaku.yml
---
- hosts: localhost
  connection: local
  tasks:
    - jisaku:
        name: 'wawawa'

これをうごかすとこんなかんじになる
wawawa is good! となっていることがわかる。

$ ansible-playbook -i inventories/hosts  jisaku.yml -v
No config file found; using defaults

PLAY [localhost] ************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************
ok: [127.0.0.1]

TASK [jisaku] ***************************************************************************************************************************
ok: [127.0.0.1] => {"changed": false, "message": "wawawa is good!"}

PLAY RECAP ******************************************************************************************************************************
127.0.0.1                  : ok=2    changed=0    unreachable=0    failed=0

おわりに

公式のモジュールじゃあどうしてもできない場合はこうやって自分でつくるのもよさそう

Ansible実践ガイド 第2版 (impress top gear)

Ansible実践ガイド 第2版 (impress top gear)

Pythonで配列の要素の奇数番目と偶数番目を取得する

概要

Pythonで配列の奇数番目の要素と偶数番目の要素を取得してみたいと思います。

偶数番目の要素を取得する

たとえばこんなかんじの配列があるとする。

num_array = [0,1,2,3,4,5]


こんなかんじで指定してあげると偶数番目の要素を取得することができる。

>>> print(num_array[0::2])
[0, 2, 4]

なにをやっているかというと[0::2]の部分で要素の0番目からはじめて2つ刻みで表示している。

奇数番目の要素を取得する

たとえばこんなかんじの配列があるとする。

num_array = [0,1,2,3,4,5]


こんなかんじで指定してあげると奇数番目の要素を取得することができる。

>>> print(num_array[1::2])
[1, 3, 5]

なにをやっているかというと[1::2]の部分で要素の1番目からはじめて2つ刻みで表示している。



おわりに

意外とべんり

入門 Python 3

入門 Python 3

Pythonで時差を計算してみる

概要

Pythonで時差を計算してみます。

スクリプト例

こんなかんじでtimedeltaを利用することで時差を計算することができます。

ちょっとした解説

8行目からの

delta = timedelta(hours=時差)

として、datetimeオブジェクトと足し算引き算することができます。

実際に動かしてみる

スクリプトを動かしてみるとこんなかんじ。

$ ./jisa_keisan.py
20:00

たとえば5行目のtimeを21:00に変えてみるとこんなかんじになる。

$ ./jisa_keisan.py
06:00

30:00とかそういうわけわかんない時間にはならない。



f:id:kabegiwakun:20180115220028p:plain

CentOS7でLAMP環境を構築してみる

CentOS7にLAMP環境を構築してみようと思います。

そもそもLAMP環境とは?

以下の頭文字をとったもの。
Webアプリケーションの実行環境としてよくつかわれるらしい。

  • L - Linux
  • A - Apache
  • M - MySQL
  • P - PHP(perl,python)

LAMP環境を構築する

LAMP環境を構築してみます。

L - Linuxの構築

CentOS7 is Linux

$ uname
Linux

A - Apacheの構築

Apacheをインストールします。

$ sudo yum install httpd

Apache(httpd)を起動します。

$ sudo systemctl start httpd

M - MySQLの構築

まず、MySQLを含むようにパッケージマネージャを更新してあげます(場合によっては不要かも)

$ sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

MySQLをインストールします。

$ sudo yum install mysql-community-server

MySQLを起動します。

$ sudo systemctl start mysqld

P - PHPの構築

PHPをインストールします。

$ sudo yum install php

さらにPHPからMySQLに接続するためにphp-mysqlをインストールします。

$ sudo yum install php-mysql

これで構築は完了です!!!


LAMP環境の動作確認

構築が完了したので動作確認をしていきます。
MySQLになにかデータをいれてその内容をPHPで表示、ブラウザでアクセスして動作していることを確認してみます。

MySQLにデータを格納する

まずはMySQLにログインします。

$ mysql -u root

つづいて適当にデータベースををつくってみます。
wawawadbというデータベースをつくっています。

mysql> create database wawawadb;
Query OK, 1 row affected (0.00 sec)

作成したデータベースを選択して

mysql> use wawawadb
Database changed

適当にテーブルをつくります。

mysql> create table wawawa_table(rank integer, name varchar(20));
Query OK, 0 rows affected (0.01 sec)

つくったテーブルにてきとうにデータを格納します。

mysql> insert into wawawa_table values(1,'wawawa');
Query OK, 1 row affected (0.01 sec)

mysql> insert into wawawa_table values(2,'sasasa');
Query OK, 1 row affected (0.00 sec)

mysql> insert into wawawa_table values(3,'dadada');
Query OK, 1 row affected (0.00 sec)

MySQLにデータを格納することができました。

mysql> select * from wawawa_table;
+------+--------+
| rank | name   |
+------+--------+
|    1 | wawawa |
|    2 | sasasa |
|    3 | dadada |
+------+--------+
3 rows in set (0.00 sec)

phpのスクリプトをつくる

確認用のPHPのスクリプトを書いてみます。
さきほどのテーブルの中身を表示するようなかんじのものをつくってみます。

/var/www/html/index.phpに以下をコピーします
データベース名とテーブル名は自分の環境に合わせていいかんじに修正しておいてください。

ブラウザで実際に確認する

ブラウザでhttp://LAMP環境を構築したLinuxのアドレス/index.phpにアクセスします。
以下のようにテーブルの中身が表示されればOKです。
f:id:kabegiwakun:20181114001223p:plain



GCPでCentOS7を構築してssh接続してみる

概要

GCPでCentOS7のGCEインスタンスを構築して、sshで接続するところまでやってみようと思います。

Compute Engineを選択する

トップページのメニューからCompute Engineを選択します。
f:id:kabegiwakun:20181109171337p:plain

VMインスタンスを作成する

VMインスタンスの作成を選択します。
f:id:kabegiwakun:20181109171436p:plain

インスタンスの名前、リージョン、ブートディスクで起動したいOSを選んで、作成を選択します。 f:id:kabegiwakun:20181109171753p:plain

するとこんなかんじでインスタンスが構築されます。
f:id:kabegiwakun:20181109172113p:plain

ssh認証鍵を追加する

つづいてインスタンスのなかにはいるためにssh鍵の設定を行います。

「メタデータ」→「SSH認証鍵」→「SSH認証鍵を追加」を選択します。
f:id:kabegiwakun:20181109172254p:plain

そしてローカルマシンのssh公開鍵の情報をコピーして保存します。
f:id:kabegiwakun:20181109174143p:plain

ローカルマシンのssh公開鍵がない場合は以下コマンドを実行して作成します。

$ ssh-keygen -t rsa
$ chmod 400 ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub
# ここの内容をコピーしてGCPのウインドウにはりつける

ssh接続する

GCEのVMインスタンスの外部IPのアドレスにssh接続をします。
f:id:kabegiwakun:20181109175100p:plain

ローカルマシンで以下コマンドを実行します。

$ ssh 35.200.xxx.yyy
# アドレスは各自の外部IPのもの

ssh接続ができました!

[kabegiwa@centos7test ~]$ uname -a
Linux centos7test 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux



おわりに

AWSと混ざることが多々ある

Google Cloud Platform エンタープライズ設計ガイド

Google Cloud Platform エンタープライズ設計ガイド

GCPのアカウント登録のやりかた

概要

Google Cloud Platformをつかいはじめるまでの方法をご紹介します。

アカウント登録する

以下にアクセスして、GCP無料トライアルを選択します。

cloud.google.com

f:id:kabegiwakun:20181109170340p:plain

いろいろえらんで同意して実行します。

f:id:kabegiwakun:20181109170440p:plain

支払い方法等を選択して無料トライアルを開始します。
f:id:kabegiwakun:20181109170633p:plain

これで完了です!!!

f:id:kabegiwakun:20181109170809p:plain



Google Cloud Platform エンタープライズ設計ガイド

Google Cloud Platform エンタープライズ設計ガイド

Pythonで2次元配列をソートする

Pythonで2次元配列をソートする場合どのようにしたほうがいいのかをご紹介します。

単一のキーでソートする

たとえばこんなかんじの2次元配列があったとする。

wawawa_array = [[7,5,1],[2,4,9],[7,4,9]]

こんなかんじにすると各配列の1番目の値でソートできる

wawawa_array = sorted(wawawa_array,key=lambda x:(x[0]))

ソートされた結果はこんなかんじ

>>> print(wawawa_array)
[[2, 4, 9], [7, 5, 1], [7, 4, 9]]



複数のキーでソートする

たとえばこんなかんじの2次元配列があったとする。

wawawa_array = [[7,5,1],[2,4,9],[7,4,9]]

こんなかんじにすると各配列の1番目の値が同じ値だったときに2番めの値でソートできる

wawawa_array = sorted(wawawa_array,key=lambda x:(x[0],x[1]))

ソートされた結果はこんなかんじ

>>> print(wawawa_array)
[[2, 4, 9], [7, 4, 9], [7, 5, 1]]

  

Pythonで2次元配列を数値の2次元配列にしたり文字列の2次元配列にしたりする

Pythonで文字列の配列を数値の配列にしたり数値の配列を文字列の配列にしたりしなかったりします。

まえに書いたこの記事の2次元配列バージョンです。

www.kabegiwablog.com

文字列の配列を数値の配列にする

たとえばこんなかんじの配列があったとする

wawawa_array = [['7','4','3'],['2','4','9'],['7','5','1']]


こんなかんじで数値の2次元配列にすることができる。

for i in range(len(wawawa_array)):
    medals[i] = [int(j) for j in wawawa_array[i]]


printしてみると数値型になっていることがわかる。

>>> print(wawawa_array)
[[7, 4, 3], [2, 4, 9], [7, 5, 1]]



数値の配列を文字列の配列にする

たとえばこんなかんじの配列があったとする

wawawa_array = [['7','4','3'],['2','4','9'],['7','5','1']]


こんなかんじで文字列の2次元配列にすることができる。

for i in range(len(wawawa_array)):
    medals[i] = [str(j) for j in wawawa_array[i]]


printしてみると文字列型になっていることがわかる。

>>> print(wawawa_array)
[['7','4', '3'], ['2', '4', '9'], ['7', '5', '1']]



飲み会とクズ行為と

元職場の飲み会があった。
たのしかった。
f:id:kabegiwakun:20181102213302p:plain




後半は正直あまり覚えていないんだけれど飲みつぶれている人の写真がしっかり撮影してあってクズはなかなかなおらないなぁとおもった。

伊藤園 理想のトマト (紙パック)200ml×24本

伊藤園 理想のトマト (紙パック)200ml×24本

Pythonのsort()でNoneって返されてハマった

概要

Pythonで配列をソートしようとおもってsort()をつかっていたらNoneって返されてハマってしまった。
そのメモ。

ハマったこと

こんなかんじの配列を

>>> print(wawawa_array)
[3, 2, 4, 1, 5]


こうしてソートしようとした。

wawawa_array = wawawa_array.sort()


そうしたらこうなってしまった。

>>> print(wawawa_array)
None




解決策

単純にこうすればよい。

>>> wawawa_array.sort()
>>> print(wawawa_array)
[1, 2, 3, 4, 5]


sort()をつかうと元の配列がそのまま書き換えられる。
ので返り値がNoneってなっていた。



似たような記述方法がしたい場合はsorted()をつかうといい。

wawawa_array = sorted(wawawa_array)


この書き方だと新たな配列をつくってソートした結果を代入する。
なので以下のようなことも可能。

sasasa_array = sorted(wawawa_array)



エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

  • 作者: Michal Jaworski,TarekZiade,稲田直哉,芝田将,渋川よしき,清水川貴之,森本哲也
  • 出版社/メーカー: ドワンゴ
  • 発売日: 2018/02/26
  • メディア: Kindle版
  • この商品を含むブログを見る

Pythonで文字列の配列を数値の配列にしたり数値の配列を文字列の配列にしたりする

概要

Pythonで文字列の配列を数値の配列にしたり数値の配列を文字列の配列にしたりしなかったりします。
します。

文字列の配列を数値の配列にする

たとえばこんなかんじの配列があったとする

wawawa_array = [ '3','2','4','1','5']


これをこんなかんじで数値型に変換することができる。
リスト内包表記で実現できる。

wawawa_array = [int(i) for i in wawawa_array]


printすると数値になっていることが確認できる。

>>> print(wawawa_array)
[3, 2, 4, 1, 5]



数値の配列を文字列の配列にする

たとえばこんなかんじの配列があったとする。

wawawa_array = [3, 2, 4, 1, 5]


これをこんなかんじで数値型に変換することができる。
文字列から数値の変換と同じく、リスト内包表記で実現できる。

wawawa_array = [str(i) for i in wawawa_array]


printすると文字列になっていることが確認できる。

>>> print(wawawa_array)
['3', '2', '4', '1', '5']



いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで 「いちばんやさしい教本」シリーズ

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで 「いちばんやさしい教本」シリーズ

Pythonの辞書形式をvalueの値でソートする

概要

Pythonの辞書形式のvalueの値でソートしてみる。

前提

こんなかんじの辞書があったとする。

wawawa_dict = {'wawawa': 200, 'sasasa': 100, 'dadada': 300

valueで昇順にソート

こんなかんじでlambda式をつかってあげる必要がある。
ちょっとわかりにくいけどまるまるコピペでOK

for k,v in sorted(wawawa_dict.items(), key=lambda x: x[1]):
    print(k,v)


こんなかんじでソートされる。

sasasa 100
wawawa 200
dadada 300



valueで降順にソート

降順にする場合はx:-x[1]としてあげる。

for k,v in sorted(wawawa_dict.items(), key=lambda x: -x[1]):
    print(k,v)


こんなかんじでソートされる。

dadada 300
wawawa 200
sasasa 100

おわりに

辞書形式はつかいこなすと超便利



Pythonの空の2次元配列の宣言の仕方

概要

Pythonでの空の2次元配列の宣言の仕方ではまった。

はまったこと

こんなかんじでアスタリスクをつかって宣言していた。

wawawa_array = [['']*3]*3



それに値を代入したところこんなかんじになってしまった。

>>> wawawa_array[0][0] = 'wa'

>>> print(wawawa_array)
[['wa', '', ''], ['wa', '', ''], ['wa', '', '']]



この宣言の仕方だとむかしにこの記事でも似たようなことを書いたけれどもおなじ配列を3つ宣言しているだけになってしまうんだとおもう。

↓むかし書いた記事 www.kabegiwablog.com



解決方法

こんなかんじで内包表記をつかってあげる。

sasasa_array = [['' for i in range(3)] for j in range(3)]



そうすれば解決する。

>>> sasasa_array[0][0] = 'sa'

>>> print(sasasa_array)
[['sa', '', ''], ['', '', ''], ['', '', '']]



または冗長になるかもしれないけれど全部書いてしまうのも一つの手

>>> dadada_array = [['','',''],['','',''],['','','']]

>>> dadada_array[0][0] = 'da'

>>> print(dadada_array)
[['da', '', ''], ['', '', ''], ['', '', '']]

おわりに

こういうところでハマるとしんどい