エンジニアの卵の成長日記

ふわっちで配信してますhttps://whowatch.tv/profile/w:kurowasi2525

VMwareを使ってCentOS7でインターネット接続までの環境構築

今回の記事は、ちょっと前に大学の大きなサーバに仮想環境を構築したよって話


なぜ構築することになった?
背景として、僕が所属している研究室だけ大学のサーバに仮想環境を構築することが許されている
(先生がサーバ担当者だから僕たちのために許可をもらってくれたらしい)
だが、僕は一年生の時に研究室でCentOS6.5のしょぼいWebサーバを構築したので、勉強するだけならそれで十分だった

最近Googleカレンダーの内容をSlackにつぶやくシステムを作った
qiita.com


自分で作っといてなんだが、以外と便利
このシステムとwena wristの組み合わせはとても最高


話を戻すと、常時動かしている自作PC1号機には余計な仕事をさせたくなかったので、
このシステムは自作PC2号機(メイン)で動かしていた

このシステムのためだけにメイン機を常時起動は嫌だったので、
大学のサーバで動かしてもらうことを決意した



環境構築

まずはContOS7のインストール

f:id:kurowasi2525:20170428014028p:plain
f:id:kurowasi2525:20170428014043p:plain
f:id:kurowasi2525:20170428014052p:plain
f:id:kurowasi2525:20170428014059p:plain
f:id:kurowasi2525:20170428014103p:plain

今回はこんな感じ

一番驚いたのは2階にある大学のサーバが4階の研究室のPCに入っているISOファイルを使ってインストールできること
ほとんどの人が普通だろ!って思うんでしょうが、僕は不思議な気持ちになりました

f:id:kurowasi2525:20170428014108p:plain
f:id:kurowasi2525:20170428014112p:plain


インストール完了!

Proxy設定
/etc/yum.conf を修正

#Distroverpkegの1行下に追加
proxy=http://000.11.222.33:80

CentOS7からネットワークの設定方法が変わったみたい
CentOS7からの推奨ネットワークマネージャー TUIを使用

$ nmtui
Edit a connection 
 ↳ens192

IPv4CONFIGURATIONに変更
Addressを『000.111.222/24』に設定
 ※末尾のビット数は初期で32に設定されているため24へ変更
Gatewayを『000.111.22.333』に設定
DNS serversを『000.111.22.33』を追加
Require IPv4~~~~を有効にする
IPv6に変更
Automatically connectを有効化する

Automatically connectを有効にすることでNICが自動で有効になってくれる
NIC(Network Interface Card):ざっくり言うとLAN(俗に言うインターネット)に接続する際に
必要なカード(基盤のようなもの)


これで終了!
以下はシステムを動かすときに入れたものや、他の時にいれたやつを記載

MySQL関係

$ yum install -y http://dev.mysql.com/get/mysql-community-release-17-5.noarh.rpm
$ yum install -y mysql-community-server

PHP関係

$ yum install -y php

Apache関係

$ yum instal -y httpd
$ firewall-cmd --permanent --add-service=http
$ systemctl enable httpd

Git関係

$ yum install git
$ git config --global http.proxy http://000.11.222.33:80
$ git config --global https.proxy http://000.11.222.33:80
$ git config --global http.sslVerify false

NVM関係

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.26.1/install.sh | bash
$ source ~/.bashrc


以上!
作成してから2週間くらいたったが、今のところ何の問題もなく動いてくれています

【第一話】社会人になっても使えそうなエンジニア経験談

今日バイト先で褒められた内容を書いていこうと思う
気をつける点を記録することで、また正解を選ぶことができると思うからである

今回学んだことは2点

  • 送られてくる情報に無駄な情報はない
  • 自分の先の工程を想像する

とても当たり前なことですが、重要だと再認識しました。
新社会人には基礎が大事だと思うのでメモメモ

今回の仕事は『システムの画像が古かったり、ダサいものをExcelにまとめて提出して』でした。

自分に仕事が来るまでの経緯はこんな感じ

f:id:kurowasi2525:20170419225525p:plain


上記の経緯が把握できたのは開発部のCさんが送ってくださったメールからである
内容はこんな感じ

高木徹さん。

システムを触って古い画像などを見つけてExcelにまとめてください。

今日一日で終わらせるのを目標にしてください。
午前中は会社にいます。

開発部 C

>>開発部 Bさん
>>
>>わかりました。
>>バイトの日程を確認しときます
>>
>>開発部 C
>>
>>
>>>>開発部 Cさん
>>>>
>>>>いつも通りDさんに修正してもらって
>>>>
>>>>画像の洗い出しはバイトでもいいのでExcelにまとめて
>>>>レビューは私がします。
>>>>
>>>>開発部 B
>>>>
>>>>
>>>>>>開発部 Bさん
>>>>>>
>>>>>>システムの画像をどうにかしてくれませんか?
>>>>>>・○○の画像(画像が荒い)
>>>>>>・○○の画像(画像が古臭い)
>>>>>>など
>>>>>>
>>>>>>営業部 A


Excelのフォーマットは自由だったので、全部の画像を保存し、『変更が必要なもの』『自分では判断できないもの』『絶対に大丈夫なもの』の3シートに分けてCさんに提出した

Cさん曰く、シートは多いと確認が面倒とのこと
当たり前だが、1つのシートにまとめすぎるのはよくないが、綺麗にまとめることが可能であればシートは少ない方が確認しやすいみたい
(当たり前と言えば当たり前か。。。 クラス図の設計と同じ感じかな?(笑)
一つのシートに表現することに。。。


自分なりにフォーマットを考えた結果

  • 元の画像の列

    理由を言わなくてもわかりますよね笑

  • 変更が必要か『○』『△』『×』で表現する列

    これなら変更が必要なものかわかりやすいかなと思い
    (最初は変更が必要な画像だけをまとめたExcelファイルを提出ということだったので、
     変更が必要ないものを貼るのは見づらくするだけだと思ったのですが、
     自分の判断だけでシステムの出来が変わるのが嫌だったので、
     上の人にも判断してもらえるように、全ての画像を貼りました。
     ダメだという指摘を受けなかったので、今回は正解かな?)

  • ダメな理由を書く列

    DさんもこのExcelファイルを見ると思ったので、
    直すべき理由(画像がダサい、画質が悪いなど)が書いてあれば、
    修正すべき点を考えたり、経緯を理解したり、誰かに聞いたりしなくても済むと思った

  • Dさんが作成してくれた画像を貼る列

    開発の人がどこの画像をどの画像に変更すれば良いかわかりやすくなると思ったのと、
    比較しやすければBさんがレビューしたやすいと思い、この形にした



社会人の人からしたら当たり前だわって感じだと思います。
ですが、学校では1言われたことを10やってくる方法をあまり教えてくれないと思う(教えてくれてるのかも。。。)

今回、1言われたことを10やろうと思って、-10になったりしなかったのはよかった
午前中には終わらせたかったが、午前には終わらせることができなかったが、
昼休憩後にはOKをもらえたのはよかった

今日中に終わらせてねって言われたものを80%くらいのクオリティーで〆切の半分くらいで出した
100%のものを〆切付近で渡すより
80%のものを〆切の半分で提出したほうがいいのかも


そんな試行錯誤を繰り返すバイトの日々です

SQL文でのINDEX句、CONSTRAINT句について

バイトで開発環境を構築している際に、DBのテーブルがうまく作成されていないことに気づき、SQL文を見てみるとみたことないのが。。。
DBの勉強は本当の基礎しかやってこなかったので、皆さんは知っている内容だと思う

INDEX
データの検索速度を向上させるために、どの行がどこにあるかを示す索引のことらしい
目的のデータが見つかるまですべての行を1行ずつ調べるよりも、
f:id:kurowasi2525:20170418223851p:plain

索引を利用して目的の行の場所を見つけてから、そのデータを読み取ったほうが効率的だよねって感じらしい

f:id:kurowasi2525:20170418223853p:plain

テーブルが大きいほど、効果が大きくなるみたい

基本構文

CREATE INDEX インデックス名 ON テーブル名(列名 ASC); ※指定しなくてもASC

重複を許さない

CREATE UNIQUE INDEX インデックス名 ON テーブル名(列名 ASC);

降順

CREATE INDEX インデックス名 ON テーブル名(列名 DESC);

インデックスの削除

DROP INDEX インデックス名;


インデックスの利用
 パフォーマンスの向上
  表の結合条件に使用される列に対してインデックスを作成するとパフォーマンスが向上
  値の分布が大きな(異なる値が多い)列に対してインデックスを作成するとパフォーマンスが向上
 パフォーマンス低下
  値の分布が小さな列に対してインデックスを作成するとパフォーマンスが低下
  テーブルを更新すると、インデックスも更新される。よって、更新頻度が高い場合にインデックスを利用するとパフォーマンス低下



CONSTRAINT
英語で『強制、圧迫、束縛、制約するもの、窮屈な感じ』という意味らしい

CONSTRAINT句はインデックスに似ているらしく、違う点としては、他のテーブルとのリレーションシップも設定できる
MySQLは、関連データのテーブルにまたがる相互参照を可能にする外部キーと、この分散したデータの整合性を維持するために役立つ外部キー制約をサポートする

基本構文

CONSTRAINT 制約の名前 制約

記述例

  CONSTRAINT `制約の名前`
    FOREIGN KEY (`このテーブルの列名を外部キーに設定`)
    REFERENCES `データベース名`.`テーブル名` (`カラム名`)
    ON DELETE NO ACTION ←親テーブルの削除時何もしない
    ON UPDATE NO ACTION ←親テーブルの更新時何もしない

MAMP3.5.1 Apache couldn't be started.

今日のバイトで新しいプロジェクトの開発環境構築を行うことになり、MAMPPHPのバージョンを変えたら以下のエラーを吐くように

エラー
Apache couldn't be started.
Please check your MAMP installation and configuration.


最初に結論を書く
僕の解決法はMAMPのバージョンを最新にする


MAMPのバージョンが古いことにより、PDOなどが古くて新しいPHPに対応してなかったのかと思う(適当)


僕の最初の環境はMAMP3.5.1 PHP5.5.9 この条件だとサーバの起動はできた
しかし、MAMP3.5.1 PHP5.5.38にすると冒頭に書いたエラーが発生


MAMP3系のエラーで既にバイト仲間が苦しんでいて、4系に再インストールすることで解決させていたことを知っていたので、僕もバージョンアップさせる
bin/php/を見てみるとPHP5.5.38が最初から入っている!!!


MAMP4.1.1 PHP5.5.38で起動
勝ち確だと思っていたら冒頭のエラーが発生
その後

MySQLデータベースをアップグレートしてください
MySQLデータベースのアップグレードが必要です。
速やかにアップグレードを実行してください。
メニューの「ツール」>「MySQLデータベースをアップグレード」からアップグレード可能です。

PHPMySQLの問題なのかなと思い
DBのバックアップをとり、指示通りにMySQLをアップグレード

起動してみるが、やっぱり冒頭のエラー


アップデートした際に/conf/apache/httpd.confを昔のプロジェクトのに変えてたので、
4.1.1をインストールした際に作成されたhttpd.confに変更したら起動に成功した

MAMPをアップデートしてからもエラーが発生したのはhttpd.confファイルが古かったからか、昔の案件のhttpd.confファイルがおかしかったのが原因だと思う



※2017/4/25(火) 追記
今日バイトでプロジェクトが変わり、PHP5.5.9に変えたところ冒頭のエラーがまた出た
MAMPのバージョンが古いことによるエラーだと思っていたが、どうやらそうではないらしい
MAMPにはバージョンごとに使えるPHPが限られているっぽい
MAMP4.1.1の場合はこんな感じ?
f:id:kurowasi2525:20170425163958p:plain


今回もどっかで調べてきた内容ではないので、確定情報ではないです。

Additional PHP versions
for MAMP PRO 4.1.1 (Mac OS X)

って書いてあるし、多分そうだと思われる

【Node.js】GoogleAPIのOAuth2の認証が1時間で切れてしまう問題

https://developers.google.com/google-apps/calendar/quickstart/nodejsのサンプルでは
.credentials/calendar-nodejs-quickstart.json

{
    "access_token": "アクセストークン",
    "refresh_token": "アクセストークンを更新するためのトークン",
    "token_type": "Bearer",
    "expiry_date": アクセストークンが使えなくなる期限
}

を作成し、このファイルを更新せずに認証に使っている
この認証は1時間で使えないようになってしまう


ニコ生で放送中に優秀なエンジニアさんが来てくださり、その方に助けてもらいながら解決することができました
本当にありがとうございました!

live.nicovideo.jp


解決策としてはrefreshAccessToken()メソッドを利用する
stackoverflow.com
authorize()メソッドの中を修正する

fs.readFile(TOKEN_PATH, function(err, token) {
    if (err) {
        getNewToken(oauth2Client, callback);
    } else {
        oauth2Client.credentials = JSON.parse(token);
        oauth2Client.refreshAccessToken(function(err, tokens) {
            if (err) {
                console.log(err);
                return;
            }
            oauth2Client.credentials = tokens;
            storeToken(tokens);
        });
        callback(oauth2Client);
    }
});


これで解決!のはず。。。

tomcatプロジェクトのコンテキスト定義を更新の操作が失敗しました

昨日のバイト先で長時間積んだことがありました
それはeclipsetomcatプロジェクトでコンテキスト定義を更新した際に、以下のメッセージが出てきました

操作が失敗しました
Path must include project and resource name: \パス名

社員さんに聞いても、同じバイト仲間に聞いてもわからず
調べても記事が少なく、解決策がない


結局自分の環境で成功した解決策はeclipseの展開フォルダの場所を変えるでした
バイト仲間はCドラ直下に展開しても大丈夫でした
ですが、僕はCドラ直下でダメでしたが、/User/ユーザ名/に再展開したら解決しました

結局権限の問題だったのかな?
バイト仲間も同じような環境のPCのはずなので、ちゃんとした原因はよくわかりませんでした

Windows環境でApache+PHP+MySQL環境を整える

前回の記事でも書いたがSlack Botを利用した鍵管理システムの開発を行っている
kurowasi2525.hatenablog.com

今まではMacで行っていたのですが、メイン機でもやりたいと思いGitからCloneしてから気づいた。。。
そう。Windowsメイン機にPHPApacheが入っていないことを
今までPHPApache環境系の開発はMacでやっていたことを


と、いうことで僕の嫌いな環境構築を行っていきたいと思います
Windowsということでかなり躓きました

続きを読む