DOUBLE BOGEY

かけだしITエンジニアの苦悩と歓喜をつづります

ログ調査について調べてみた!!

結論から言えば...?

ログを見るときはless -Fコマンドを使え!!

経緯

私は仕事で決済系のAPIを2つ保守しています。 そうなると、不具合の問い合わせがバンバンくるわけですが(一応言い訳しておくと弊社のシステムが原因の不具合は全体の1割に満たないです)、そのときのログ調査をもっと上手くできないかなーと思ったので、ログ閲覧のやり方を調べてみました。

閲覧方法

catコマンド

ファイル閲覧のコマンド。">"(リダイレクト)を利用することで別ファイルへの出力もできるが、ここでは割愛する。

$ cat file_name

-nオプション

行番号をつけて出力してくれるので便利。

$ cat -n file_name

複数ファイルの出力もイケる

複数のファイルを一度に出力することもできる。

短いファイルを一度に閲覧したいときに便利。

$ cat file_nameA file_name_B

catコマンドは指定したファイルを一度全て読み込んでから出力するため、莫大な行数のログを調査するときには不適切だそうな。

vi,vimコマンド

閲覧、編集ができるエディタを呼び出すコマンド。

操作方法が取っ付きにくいけど、慣れると最強なエディタらしいです。

$ vim file_name

編集ができてしまうと、ログに無駄な情報を追加してしまう可能性があるので不適切ですね。

じゃあ結局何を使えばいいの?

vimみたいな高機能な検索を使いたいですが、ログを壊してしまっては元も子もありません。何かいい方法はないでしょうか。。。

lessコマンド

vimの便利な機能が使えるけど、編集はできない。要は閲覧専用のvim的なコマンド。

$ less file_name

-Fオプション

ログを監視しながらデバッグするときは、リアルタイムにログ出力を待ち受けたいですよね。そんなときに活躍するのがこのオプション。

$ less -F file_name

lessの操作

前述したとおり、lessには操作に結構クセがあって慣れるまでは使いにくい。私自身、lessコマンドは知っていたけど使い方調べるのが面倒で使っていなかった。

ページ操作

  • k(↑キー) … 1行上に移動する
  • j(↓キー) … 1行下に移動する
  • XXk … XX行上に移動する
  • XXj … XX行上に移動する
  • f … 1ページ上に移動する
  • b … 1ページ下に移動する
  • g … 先頭に移動する
  • G … 末尾に移動する

検索

  • /key_word … キーワードを検索してハイライトする
  • (検索後に)n … 次の検索結果に移動する
  • (検索後に)N … 前の検索結果に移動する

ブログ収益化について調べてみた!!

ブログを収益化する

経緯

  • ちょっと本格的にブログをやってみたい & ブログを通して勉強したい
    • ブログを2週間ほどやってみて、案外面白かったりする
    • 現在、はてなブログを利用しているがもっと自由にカスタマイズしてみたい
    • ブログのカスタマイズを通して、CSSやデザインをかじりたい
  • おこづかいを稼ぎたい
    • MAKE MONNEYしてみたい
    • まずは月々のサーバ代を稼いでみたい
    • ゆくゆくは月に1回の飲み代くらいを稼いでみたい

以上、2つの理由とAWSを使ってみたいのでそのコンテンツにブログはちょうどいいかなと思った。 Ruby on Railsが好きなので、railsでブログ作ってみようかなぁと思っている。

収益化する方法を探る

コンテンツは今このブログで発信しているようなかけだしエンジニアの技術ネタ、勉強会を行うコミュニティの日記的プレスなどを想定しているのでネタは十分。

ということで、アフィリエイトとかそういう方法でブログから直結で収益化できる方法はないか探る。

  • クリック報酬型

    • GoogleAdSense

    Googleから配信される広告枠をブログに配置し、その広告のクリックに応じて収益が得られる。収益率が比較的高く、広告のネタも閲覧者に合わせて選んでくれるため使いやすそう。

  • 購入報酬型

    Amazonの商品の広告を掲載して、そこからの購入に応じて購入報酬を得られる。

    未経験エンジニア志望の方に力を貸したり、同レベルのかけだしエンジニアと情報共有をしたりという目的に沿って商品紹介をすれば、コンテンツ的にも読者的にも私のおこづかい的にも有用かなと思った。

  • 無料会員登録型

    teratailに無料会員登録してもらえれば500円の成果報酬が得られる。ブログのコンテンツ的に相性がよさそう。

後語り

無料会員登録型とか知らなかったし、他にも収益化の方法はありそう。

ゴリゴリの宣伝ブログとかはブログ作っていく上で逆にプレッシャーになりそうだから嫌だけど、今回調べた方法であればブログのコンテンツをリッチにしつつ、読者のエクスペリエンスの向上も図れるのではと思った。

railsでブログやってみるかー。

CentOS7にMYSQL5.6をインストールしてみた!

目的

  • vagrant + virtual boxで作ったcentOS7.2上にmysql5.6をインストールする。
  • インストールする環境は以前作ったpython3実行環境

mysqlのインストール

VMSSH

$ vagrant ssh
[vagrant@localhost ~]$

CentOS7標準搭載のmariadbを削除

$ sudo yum remove mariadb-libs
$ rm -rf /var/lib/mysql/

mysql公式のリポジトリをインストール

$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
~~略~~

Complete!    # yeah!

バージョン指定

デフォルトでmysql5.7がインストールされる(はず)のリポジトリをインストールしたので、5.6をインストールするように変更する。

また、今回はyum-config-managerを使わずに(というかインストールしていないため)バージョン指定をする。

$ sudo vi /etc/yum.repos.d/mysql-community.repo

[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
enabled=1    # 有効にする
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=0    # 無効にする
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

確認

$ yum repolist enabled | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community                  59
mysql-tools-community/x86_64      MySQL Tools Community                       65
mysql56-community/x86_64          MySQL 5.6 Community Server                 453    # great!

インストール

sudo yum install mysql-community-server

~~略~~

Complete!    # excellent!!!

確認

$ mysql -V
mysql  Ver 14.14 Distrib 5.6.41, for Linux (x86_64) using  EditLine wrapper

mysql初期設定

自動起動の設定

$ sudo chkconfig mysqld on
$ sudo service mysqld start
Starting mysqld (via systemctl):                           [  OK  ]    # OK!!

rootにパスワード設定

$ /usr/bin/mysqladmin -u root password 'password'
Warning: Using a password on the command line interface can be insecure.    # パスワードが簡単すぎると警告が出るので、本番環境では注意。

確認

$ mysql -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

$ mysql -uroot -ppassword
Warning: Using a password on the command line interface can be insecure.    # 開発環境なので気にしない。
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.6.41 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.    # 入れた!!

本来ならmysql_secure_installationも設定すべきだが、開発環境なので設定しない。

pyenv+anaconda python実行環境構築やってみた!

前段

参画しているプロジェクトでpythonを利用することになったので、環境構築の手順をメモしてみました。

目的

vagrant + virtual boxで作ったcentOS7.2上に+ pyenv + anacondaでpython実行環境を構築する。

VM作成

centOS7.2

box追加

$ vagrant box add centOS7.2 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box

VagrantFile初期化

$ vagrant init centOS7.2

起動!!

$ vagrant up

SSH接続

$ vagrant ssh
[vagrant@localhost ~]$    #ssh成功!!

gitインストール

$ sudo yum install git

~~略~~ # 途中インストールしてもいいか聞かれるのでyと答える。

Installed:
 git.x86_64 0:1.8.3.1-14.el7_5

~~略~~

Complete!      #wow!

VMpython環境構築

pyenv導入

pyenv本体

$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv

プラグイン

$ git clone https://github.com/yyuu/pyenv-pip-rehash.git ~/.pyenv/plugins/pyenv-pip-rehash

コマンドの位置を教える

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc

確認

$ pyenv    # コマンドのヘルプが出る。
pyenv 1.2.7-1-g7190216
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme

anacondaインストール

Anaconda(python3系)のバージョンを確認する。

$ pyenv install -l | grep anaconda3
  anaconda3-2.0.0
  anaconda3-2.0.1
  anaconda3-2.1.0
  anaconda3-2.2.0
  anaconda3-2.3.0
  anaconda3-2.4.0
  anaconda3-2.4.1
  anaconda3-2.5.0
  anaconda3-4.0.0
  anaconda3-4.1.0
  anaconda3-4.1.1
  anaconda3-4.2.0
  anaconda3-4.3.0
  anaconda3-4.3.1
  anaconda3-4.4.0
  anaconda3-5.0.0    # 今回はコイツをインストールする。
  anaconda3-5.0.1
  anaconda3-5.1.0
  anaconda3-5.2.0

Anaconda(5.0.0)インストール

$ pyenv install anaconda3-5.0.0    # 結構時間かかるので、コーヒーでも淹れて待つ。
Downloading Anaconda3-5.0.0.1-Linux-x86_64.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.0.0.1-Linux-x86_64.sh
Installing Anaconda3-5.0.0.1-Linux-x86_64...
Installed Anaconda3-5.0.0.1-Linux-x86_64 to /home/vagrant/.pyenv/versions/anaconda3-5.0.0    # yeah!!

デフォルト環境として設定する。

$ pyenv global anaconda3-5.0.0

コマンドの位置を教える。

$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-5.0.0/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

確認

$ python --version
Python 3.6.2 :: Anaconda, Inc.    # excellent!!!

後語り

意外とカンタン!

基本情報技術者試験【2日目】補数表現と固定小数点表示

主にやること

*補数の理解

*補数の計算

*補数の活用

補数

補数…負の数を表現する方法

補数とは、その名の通り「補う数」。ある数を決められた数にするために補う数ということ。

10進数で考えてみる。

10進数には9の補数と10の補数がある。

例えば、10進数3桁において123の9の補数は876、10の補数は877になる。

*123の9の補数

1→9にするには8

2→9にするには7

3→9にするには6

*123の10の補数

繰り上がりを考慮しながら計算すると…

1→10にするには8

2→10にするには7

3→10にするには7

上記のように、桁一つ一つに着目してある数にするための数を計算することにより補数を導くことができる。

一般化して考える

一般にN進数には「N-1の補数」と「Nの補数」がある。

このとき、ある数に「N-1の補数」を補うとある数の桁数の最大値となる。

また、ある数に「Nの補数」を補うと次の桁に繰り上がる。

補数に着目する

10進数877の補数→123

ここで、10進数3桁について考えると877+123の4桁目は無視される。 つまり、補数表現において

877 + 123 = 000 であるから

877 = -123

このように、補数を使えば負数を表現することができる。

2進数で考える

2進数も同じイメージで、1の補数と2の補数がある。

例えば2進数4ビットの数0101について考えると

*0101の1の補数 1→0

0→1

1→0

0→1

つまり、0101の1の補数は1010

*0101の2の補数

繰り上がりを考慮しながら計算すると…

1→1

0→1

1→0

0→1

つまり、0101の2の補数は1011

このとき、

2進数の1の補数はビットを反転させたもの

2進数の2の補数は1の補数に1を加えたもの

となることがわかる。

2の補数に着目する

2進数4ビットについて考えるとき、5ビット目は無視される。

つまり、補数表現において

0101 + 1011 = 0000

1011 = -0101

多くのコンピュータでは、演算回路を簡単にするため、2の補数を使って負数を表現することにより 減算を加算で処理している。

固定小数点表示

コンピュータ内部での数値表現方法には固定小数点表示と浮動小数点表示がある。

固定小数点表示…一連のビット列の特定の位置に小数点があることが約束されている。

最上位ビットを符号を表すビット、小数点位置が最下位ビットのすぐ右にあるとすれば、整数を表現できる。

基本情報技術者試験【1日目】情報の表現・基数変換

主にやること

  • 情報量の単位の整理

  • 2進数、8進数、16進数、10進数のお互いへの基数変換のやり方の整理

かかった時間

2時間半くらい

ノート

※最低限太字の部分だけ覚えとけばOK

コンピュータ内部では電気信号の「ON」,「OFF」の組み合わせですべての情報を表す。 →ON/OFFを2進数の0/1に対応させ、表現する。

情報量の単位

コンピュータで表す最小の単位をbitといい、2進数の1桁に相当する。

bitを8個集めたものをbyteといい、2進数8桁に相当する。

ON→ 1

OFF→0

↑これらが8個集まったものが情報の基本単位の1byte(1byteは8bit)

●接頭辞

byteは略してBと表される。

B×1000 → k(キロ) k×1000 → M(メガ) M×1000 → G(ギガ) G×1000 → T(テラ) …B×1012倍→T

B×1/1000 → m(ミリ) m×1/1000 → μ(マイクロ) μ×1/1000 → n(ナノ) n×1/1000 → p(ピコ) …B×1/1000-12→p

※コンピュータは処理速度が非常に速いので、時間を表すときによくm以下の単位が利用される。

●表現できる情報量

1bitで表現できる量 → 0,1の2通り 2bitで表現できる量 → 00,01,10,11の4通り 8bitで表現できる量 → 28で256通り nbitで表現できる量 → 2n通り

文字コード

文字1つ1つに特定の2進数が割り当てられておりその値から文字を割り出す仕組み。 文字化けはある文字コードと別の文字コードの間で同じ2進数の値に別の文字が割り当てられているためにおこる現象。

・代表的な文字コード

  • ASCII(アスキー)  英数字と特殊文字のみ。

  • SHIFT-JIS  ASCIIコードと漢字・かなが混在可能。

  • EUC  UNIX,LINUXなどで用いられる。漢字・かなが使える。

  • UNICODE  世界の文字の多くをこの規格で表現できる。UTF-8UNICODEの一つ。

基数変換

●基数と重み まずは10進数で考えてみる。 10進数の重みは 1桁目 100 = 1 2桁目 101 = 10 8桁目 107 = 10000000 n桁目 10n-1

例えば、以下のような数字があるとする。 32 1桁目 2×1("1"は重み) = 2 2桁目 3×10("10"は重み) = 30 つまり、2+30で32を表す。

・2進数の重みと2→10進数への変換 10進数に倣って2進数を考えてみる。 2進数の重みは 1桁目 20 = 1 2桁目 21 = 2 3桁目 22 = 4 n桁目 2n-1

例えば以下のような数字があるとする。これを10進数に対応させると 11 1桁目 1×1 = 1 2桁目 1×1 = 2 つまり、1+2で3を表す。

10 1桁目 0×1 = 0 2桁目 1×2 = 2 つまり、0+2で2を表す。

10111100 1桁目 0×1 2桁目 0×2 3桁目 1×4 4桁目 1×8 5桁目 1×16 6桁目 1×32 7桁目 0×64 8桁目 1×128 つまり、0+0+4+8+16+32+0+128で188を表す。

小数について考えると… まずは10進数で考えてみる。 10進数の重みは -1桁目 10-1 = 1/10 -2桁目 10-10 = 1/100 -3桁目 10-100 = 1/1000 -8桁目 1010000000 = 1/10000000 -n桁目 10^-(n-1)

例えば以下のような数字があるとする。 0.32 -1桁目 3×0.1 = 0.3 -2桁目 2×0.01 = 0.02 つまり、0.3+0,02で0.32を表す。

10進数に倣って2進数を考えてみる。 2進数の重みは -1桁目 2-1 = 1/2 -2桁目 2-2 = 1/4 -3桁目 2-4 = 1/8 -n桁目 2^-(n-1)

例えば以下のような数字があるとする。これを10進数に対応させると 0.11 -1桁目 1×1/2 = 1/2 -2桁目 1×1/4 = 1/4 つまり、1/2+1/4で3/4を表す。

0.10 1桁目 0×1/2 = 0 2桁目 1×1/4 = 1/4 つまり、0+1/4で1/4を表す。

10111100 1桁目 0×1/2 2桁目 0×1/4 3桁目 1×1/8 4桁目 1×1/16 5桁目 1×1/32 6桁目 1×1/64 7桁目 0×1/128 8桁目 1×1/256 つまり、0+0+1/8+1/16+1/32+1/64+0+1/256で61/256を表す。

・10→2進数への変換 重みから考える方法 一番重みの大きい桁が存在するか考える。 例えば、5.625という10進数の数字があるとする。 5.625 存在しうる2進数の最大の重みは10進数の4=2進数の100 これを取り除くと1.625

次に存在しうる2進数の最大の重みは10進数の1=2進数の1 これを取り除くと0.625

次に存在しうる2進数の最大の重みは10進数の05.=2進数の0.1 これを取り除くと0.125

次に存在しうる2進数の最大の重みは10進数の0.125.=2進数の0.001 これを取り除くと0

つまり、10進数の5.625は2進数では101.101に相当する。

割り算と掛け算で考える方法 まずは整数部と小数部に分ける。 整数部…基数で割った商を求め、その商を更に基数で割り、その最後の商と余りを下から並べていく 小数部…基数をかけた積を求め、その小数部を更に基数でかけ、その整数部を下から並べていく。 5.625 整数部 5/2=2…1 2/2=1…0 つまり、101

小数部 0.625×2=1.250 0.250×2=0.5 0.5×2=1.0 つまり、0.101

整数部と小数部を合わせて101.101

・2→8進数への変換 2進数の3桁は8進数の1桁に対応していることを利用し、 小数点を基準に3桁ずつ区切って、それぞれを8進数で表す。3桁にならない場合0を補う。 2進数1100.01を8進数に変換する 001 / 100 . 010 1 4 . 2

・2→16進数への変換 2進数の4桁は16進数の1桁に対応していることを利用し、 小数点を基準に4桁ずつ区切って、それぞれを16進数で表す。4桁にならない場合0を補う。 2進数1100.01を16進数に変換する 1100 . 0100 C . 4

※8→2進数、16→2進数への変換はこれらの逆を考える。

ブログ開設

せっかく憧れのIT企業でエンジニアになれたのに半年で既にフレッシュさがなくなってきているので新しいことを始めようと思って書いてみます。 23歳で大学を中退して、営業をやっていました。 1年くらいで営業を辞めて今年WEB系のエンジニアになりました。 高卒でも評価してもらえそう、というコンプレックス丸出しな理由で転職しましたが、 今思えば、そのときは自分でも言語化できていなかった理由が複数あったと思っています。

  • ITエンジニアは勉強すればするほどできることが増えていくことがいいと思ったこと。

  • 幼いころロックマンエグゼ攻殻機動隊みたいなインターネットが現実世界に飛び出してくるような世界観が好きで、 いつか自分もそんな世界の一員になりたいと思っていたのを思い出したこと。

  • 挑戦する機会がほぼ無限と言っていいほどに与えられること。

こんなことを思っていたし、初めのうちは意識高くやっていたハズなのに、今では毎日の業務で精一杯になってしまっています。 今の生活は、それなりにマシになったと思っていますが、不満はまぁまぁ多いです。 そんな不満を少しでも取り除いていくため、できることからやってみようと思ってブログを開設しました。