sagantaf-佐賀んタフ-

なんでも自分の思ったこと、経験したことを書いて生きます。

virtualenvでPython3 環境構築メモ

virtualenvをインストール
$ pip install virtualenv
 
環境を作りたいディレクトリに移動
$ cd 作業ディレクト
 
環境を構築
$ virtualenv 環境名
 
環境名のディレクトリが作成されるので、そこに移動
$ cd 環境名
 
仮想環境を起動
$ source bin/activate
 
pythonのバージョンを確認
$ python -V
 
Python3.6をインストール
$ pyenv install 3.6.1
 
python3に切り替え
$ pyenv global 3.6.1
 
PATHを設定
$ vi ~/.bash_profile
(.bash_profile に export PATH="$HOME/.pyenv/shims:$PATH” を追記)
 
PATHを有効化
$ source ~/.bash_profile
 
python のバージョンを確認
$ python -V
 
3.6.1と表示されるはず!

Pythonいろいろメモ

 
Jupyter notebookでmatplotlib のグラフを表示させる方法

コードの先頭に

%matplotlib inline

を記述する。

 

 

標準入力の取得方法

入力データが以下のとき

-------

3

1

2

5

--------

 

input()を使って入力値を読み込む。

first = input()

print(first)

# 3

seconde = input()

print(second)

# 1

input()を呼ぶごとに、1行の入力を取得する。

 

 

絶対値の計算方法

abs()を使う。

x = -20

print(abs(x))

# 20

 

 

OSモジュールを使う

使うにはosライブラリをimportする。

import os

 

カレントディレクトリの表示は以下。 

os.getcwd()

 

ディレクトリの移動は以下。

os.chdir("C:\\Users\\ozspade\\Documents\\PythonScripts")

 

 

datetimeまとめ

以下のページにまとまっている。

qiita.com

 

ループ文は2通りの書き方がある

 

ループ文は2通りの書き方がある

 

例えば、aとbの値を入力させ、bがaよりも小さかったら、「aよりも大きな値を入力してください。」と表示させ、もう一度bを入力させるプログラムを書くとする。

 

Javaでコーディングすると以下のような形になる。

 

import java.util.Scanner;
class exercise1{
public static void main(String args){
System.out.print("Please input a number:");
Scanner stdIn = new Scanner(System.in);
int a = stdIn.nextInt();
int b = 0;
long start = 0;

do{
System.out.print("Please input second number:");
b = stdIn.nextInt();
start = System.nanoTime();
if ( b < a ){
System.out.println("aより大きい値を入力");
}
} while(b < a);

int res = b - a ;
System.out.println(res);
long end = System.nanoTime();
System.out.println((end - start) + "ms");
}
}

 

class exercise2{
public static void main(String args){
System.out.print("Please input a number:");
Scanner stdIn = new Scanner(System.in);
int a = stdIn.nextInt();
int b = 0;
long start = 0;

while(true){
System.out.print("Please input second number:");
b = stdIn.nextInt();
start = System.nanoTime();
if (b >= a) break;
}

int res = b - a ;
System.out.println(res);
long end = System.nanoTime();
System.out.println((end - start) + "ms");
}
}

 

exercise1とexercise2の2種類書いたが、これは、

 do while 文でループを継続させる判定をするか、

 if文でループを終了させる判定をするか、

の違いがある。

 

このようにどんな条件判定でも2種類で表せる。


 ①whileやdo whileで「継続するか?」を判定して、ループする
 ②if文で「終了するか?」を判定して、breakする

 

速い方を取る、より直感で理解できる方を取る、などその時々で選択してコーディングすることになる。

ちなみにSystem.nanoTime()を使って測定すると、exercise2の方が少し速いことがわかる。

【サーバ運用】運用保守のために必要な管理資料やマニュアルとは何か

 
サーバを運用保守していくにあたり、どのような管理資料・マニュアルが必要になるのだろうか?
 
この点について自分の担当範囲である基盤システムを対象に考えてまとめてみた。
 
 
以下の項目に分けて書いている。
 ①なぜ管理資料やマニュアルが必要か
 ②どのような管理資料やマニュアルが必要か
 ③管理資料やマニュアルを運用する上でのポイント
 
 
 
 
①なぜ管理資料やマニュアルが必要か
 
システムの管理は一人がやるものではなく、複数の担当者が実施することがほとんどであり、またシステム運用期間ずっと同じ担当者というわけでもなく、異動や退職によって変わるものである。
(もし、管理対象範囲を最初から最後まで自分ひとりで実施する場合は、管理資料やマニュアルの要不要は自分で決めれば良い)
 
そしてその担当者間で、運用に対する認識を合わせて、いつでも誰でも同じ対応ができるようにしないと、
対応品質がバラバラになり、システム利用者(=顧客)からクレームが来ることになる。
 
あの人はここまで丁寧にやってくれたのに、この人は対応が雑だ、という具合に…
 
そのため、担当者間で認識を統一し、誰でも同じように対応するために明確な管理基準(機器管理資料やマニュアル)が必要になる。
 
 
 
②どのような管理資料やマニュアルが必要か
 
管理基準は対象がデータセンター全体なのか、システム全体なのか、複数のサーバなのか等によって異なるため、ここではシステムを対象にして、必要となる管理資料やマニュアルについて挙げていく。
 
更新頻度の高い資料としては、
 ・課題管理表:運用する上での課題ややっておいた方が良いことなどを起票し、解決するために使う
 ・依頼管理表:システムを利用する人からの依頼や問い合わせを起票し、対応するために使う
 ・障害管理表:発生した障害について起票し、対応を進めていくために使う
 ・全体スケジュール表:課題・依頼・障害対応のスケジュールを全て書いておく
などが挙げられる。
 
更新頻度の低い資料としては、
 ・各種定型作業手順書:よくある依頼対応や障害対応について、すぐにいつもと同じ対応(実績のある対応)をするために手順化しておく
 ・各種設計書:課題対応や障害対応によってシステムの構成を変更したときに、変更内容を記録しておく
 ・マニュアル:システムの利用者向けにシステムにてできることや使い方、申請の方法を記載しておく
 ・虎の巻:運用担当者向けに基本情報と障害対応に必要になる情報を記載しておき、迅速な対応ができるようにしておく
 
虎の巻について補足すると、
 基本情報とは、対象システムの概要・構成図(システムの目的、サーバ台数・構成、環境など)やハード/ソフト構成、設計書・管理資料・手順書の場所、関係者の連絡先などを記載する。
 障害対応に必要になる情報とは、本番機ログインの方法、監視設定、ログ・スクリプトの場所、よくある障害とその対応方法などを記載する。
 これだけの情報をまとめておけば、ちょろっと気になることを確認したい時に役立つし、迅速な障害対応をすることにも繋がる。
 
 
 
③管理資料やマニュアルを運用する上でのポイント
 
ポイントは二つある。
 
一つ目は、管理資料の目的・記載方法・更新すべきタイミングは必ず書く、ということ。
なぜなら、時間が経ったり担当者が変わった場合にこれらの情報は忘れられやすく、管理資料が形骸化していく可能性が高いためである。
 
二つ目は、システム稼動にとって重要な部分は特に明確にルールを制定しておかないと、システムが安定稼働せず会社の業績が下がる可能性がある、ということ。
たとえば、全体スケジュール表は、きちんとメンテナンスされ、正確に記載しないと、対応の遅れやスケジュールのボトルネックに気づかず、障害状態が長引いたり、システム利用者の依頼に影響が出てしまう。
また、本番アクセスにかかる部分やデータの扱いにかかる部分なども、注意が必要。誰でも自由に本番アクセスできる状態であっては、システムを壊してしまう可能性があるし、後で誰がやったか分からない。また誰でも自由にデータにアクセスしダウンロードできる状態であっては、重要な情報(顧客や法人、社外秘の情報)が改ざんされたり外部に漏れたりしてしまう。
このような点はあらかじめしっかりとルールを決めておき、またそれに従うしかない制限を加えてしまえば良い(本番アクセス時のログ取得を強制したり、データダウンロードはできない設定にする、など)。
 
 
最後に
 
以上、サーバの運用保守にはどんな管理資料・マニュアルが必要か? についてまとめた。
 
管理資料やマニュアルを増やすと、それ自体を書いたり読んだりすることに時間がかかり肝心な業務が進まなくなる可能性もある。
しかし、全く無いと管理の統制が取れず、担当者その人にしか運用できない属人化したシステムになってしまう。これは組織としては非常に痛い状態。
 
そのため、業務のオーバーヘッドが大きくならないように、かつ属人化しすぎないように、バランスよく管理基準を用意し、利用することが必要になる。
 
が、実はこの点が一番重要かつ困難なことだったりして…
 

データサイエンティストの役割とは?

 

データサイエンティストって何をする職種?なんだろう、と思い調べた。

 

データサイエンティストの役割とは?
 × データに隠された「情報」を発見すること
  その情報に基づいたビジネスをするための判断を行うこと

 

 

データに隠された「情報」を発見することは誰だってできる。
難しいのは、その「情報」をどうやって儲けにつなげるか。

 

データサイエンティストは機械学習によって導き出された「情報」を使ってビジネスの判断を行い、利益を上げる役割を担う。
ビジネスの領域までが担当範囲。

 

また、その判断をするには、機械学習の結果がどのように出てきたかを理解している必要がある。

どんな事実からどんな情報がでてきたか?というアルゴリズムを理解していないと、応用を効かせた未来の予測ができないからである。

 

 

 

つまり、データサイエンティストには

 「対象となるビジネスの深い理解」と「機械学習の深い理解」

が必要になる。

 


「対象となるビジネスの深い理解」が必要ということは、いくつかのビジネスに特化することになる。


「いくつものビジネスを深く理解しているので、どこでもデータサイエンティストになれます!」なんて言えないのである、一般人なら。(スーパーマンならあるいは…)

 

 

だから、データサイエンティストになりたいのなら、まずはどんな業界のビジネスに詳しいか、もしくは詳しくなりたいか、を考える。

 

機械学習ディープラーニングが面白そうだから、といってデータサイエンティストになっても、ビジネスの理解がなければ、単なる技術好きのビジネスに貢献できない(=仕事ができない)やつになっちゃうだけってことだ。

 

 

宇宙データを扱うデータサイエンティストなんて一番楽しそうだなあ、と思ってしまう。。。

 

 

働く時に必要なことは、気楽に会話できる環境と適度な緊張感だと思うんです。

 

様々な部署やチームで仕事する経験が増えると、同じ社内でも、所属するチームによっては働きやすさや気持ちが全然変わるんだな、ということがわかる。

 

一緒に働く人たちが、とても話しやすく、しっかりと自分の仕事に責任感をもって取り組んでいれば、自分もとても働きやすかった。

 

逆に、一緒に働いている人たちが、暗くてあまり話さなかったり、文句ばっかり言って自分の仕事をおろそかにしていたら、自分のモチベーションも下がり、働きにくかった。

 

 

だから、働く時に大切なのは、「気楽に会話できる環境」「適度な緊張感、責任感」なんだな、と思ったんです。

 

誰でもずっと同じ、現状のままはつまらないと感じる。そんな時、「気楽に会話できる環境」があれば、自然と、"改善したい部分"や"新しく取り組みたいこと"が出てくる。イノベーションに繋がるし、何より仕事が楽しくなる。

 

また、「適度な緊張感、責任感」をみんなが持って仕事をすることで、いい加減に仕事をしたりロボットのように機械的に仕事をすることはなくなる。

社内の雰囲気が緩すぎると、いい加減な仕事をしたり、ミスをしたりすることになる。

逆に、厳しすぎるとみんなが緊張して本来の実力を発揮できず、機械的な仕事をしてしまう。

緩すぎず、厳しすぎず、要所要所で締めていく環境であれば、ミスをすることなく、それぞれが最高の実力を発揮して、仕事に取り組める。

 

「気楽に会話できる環境」「適度な緊張感、責任感」

 

この二つをどんな現場でも実現するには、やはり自分から動いて周りに「こういう職場にしたい」と説いていかないとなかなか難しい。

 

この二つを兼ね備えた現場に出会えたらラッキー、気合いをいれて仕事をする。

逆にどちらもない現場だったら、自分がこの環境を変える!と意気込んで周りに説いていく。

 

こんなことを考えて自分から動かないと、いつまでも同じ現場で働くとは限らないし、最悪な環境だった時に自分も周りとともに落ちて言ってしまうからな〜…

 

社会人5年目のいつも意識しておくべき仕事の進め方

 

社会人になり5年も経つと、様々な業務・仕事を経験している人が大半なはず。 

 

5年もたつと新人の頃のようにガムシャラに仕事をする、というよりも、今までの経験を元に、この後の将来について考え始める時期でもある。

 

そんな中、これを意識して仕事をすることで、仕事が格段にしやすくなる上、周りからも評価・信頼を得ることができる、といういくつかの"仕事術"がある。

 

"仕事術"と書くと安っぽく聞こえるが、具体的な内容まで理解して実践する仕事術はとても強い武器になる。

 

ではその"仕事術"とは何か。

 

大きく分けると、

  

「仕事をスムーズに進めるための仕事術」

「質の高い成果を出すための仕事術」

 

 

の二つある。

 

 

 

今回はこのうち、一つ目の「仕事をスムーズに進める方法」について書き残しておく。

 

 

仕事をスムーズに進めるための仕事術

 

具体的には次の5つある。

 

  1. 上段の目線を持つ
  2. 組織を優先する
  3. 会話系を先に進める
  4. 話を分ける
  5. ストーリーを立てる

 

 

 

1. 上段の目線を持つ

 

これは、仕事で人と会話する時に、相手の一つ上・奥・先の人を意識するということ。

 

たとえば、相手が上司ならその上司を意識する。

相手が顧客ならその顧客の上司、もしくはその顧客の顧客を意識する。(小売業界を相手にしているIT企業であれば、買い物をする客、など) 

 

この一つ上を意識した会話、つまり上段の目線を持った会話を心がけることで、スムーズに仕事が進むようになる。

 

 

担当者同士、悪く言うと下っ端同士で会話を進めていた場合、意図した内容が伝わっていなかったりして、仕事のやり直しや修正が必要になる時がある。

 

たとえば、顧客からある依頼を受けたとする。こちらは特に気にすることなく、依頼されたことを実施し、返答した。ところが、その後依頼する内容が間違っていたことが分かり、もう一度作業を依頼されてしまった。理由を聞くと、その顧客自身も上司から依頼を受けた話であって、こちらに依頼を出したが、実は顧客同士での認識齟齬があり、依頼する作業が間違ってしまったんだとか。

 

これは明らかに時間の無駄である。

このようにならないためにも、相手はなぜ依頼をしてきたのか、何かその背景には上司や別の人の思惑があるのではないか、といった意図を事前に確認することが大切になってくる。

 

 

また、逆も然りである。

契約しているベンダーの担当者に、ある質問を出し、回答を得ていたとする。その回答がベンダー内部の共通認識としてこちらは認識していた。しかし、後日別の担当者と会話している時にその回答が間違っていることが判明。実は回答した担当者がひとりで考えて回答してきたのであった。やむなくもう一度、丁寧に質問することになってしまい、時間をロスしてしまった。

 

これも同じく時間がもったいない。

このようにならないためにも、こちらの意図は相手に正確に伝わったか、相手の周りにいる人の共通認識なのか、を確認することが大切。

 

 

何を確認すればよいのか、何を依頼すればよいのか、この点を考えて会話することで、後々に面倒なことにならず、スムーズに仕事を進めることができる。

また、先の人を見据えた依頼や会話をすることは、相手もスムーズに仕事ができるようになるのである。

こうなると「信頼」を勝ち得たも同然だ。

 

 

 

2. 組織を優先する

 

若いうちは自分の仕事を精一杯やろうとする。

頑張って仕事をして、きっちり終わらせることでそれなりに周りから高評価を受ける。

 

しかし年を追うごとに、それでは済まなくなる。むしろ逆効果にもなりうる。

 

どういうことかと言うと、会社は組織であるから多数の人が絡んでいる。組織として目標に向かって日々動いているのである。

そんな中、自分ひとり、自分の仕事を終わらせることだけに集中して頑張っていても、組織としては嬉しくないのである。

 

例えば、部として新規事業に取り組んで、新たな顧客を開拓していこう!となっている時に、既存の顧客の相手ばかりして仕事を終わらせた気になっている人がいたりする。

それで自分が楽になったとしても、部としての目標(この場合、新たな顧客を開拓すること)には向かっていないので、周りから白い目で見られるし、評価にも繋がらない。

 

そんなヤツにならないためにも、

 

 部署外 → チーム外 → チーム → 自分 という優先順位で仕事を進め、

 自分のいまの立場と組織が向かう方向に注意を注ぐ。

 

このような態度で仕事をし、組織を優先することで、「誰が何をしているのか」「何を考えているのか」をキャッチアップできるようになり、広い範囲が見える。

 

広い範囲を認識しているからこそ、自分の行動や言葉に説得力が生まれ、周りから「あいつは組織として仕事をしている」「信用できる」といった評価を得ることができるのである。 

 

 

 

3. 会話系を先に進める

(来週中に加筆する!)

 

 

 

 

 

 

4. 話を分ける

(来週中に加筆する!)

 

 

 

5. ストーリーを立てる

(来週中に加筆する!)