As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

POSIX1日1コマンド[part2]: alias

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

alias

alias

aliasを知る

ざっくりDESCRIPTION

エイリアス(別名)を定義するコマンド。また、定義されたエイリアスを標準出力に出力する。エイリアスは現在のシェルとサブシェルに影響を与える。

ざっくりOPTION

オプションは無い

ざっくりOPERANDS

$ alias alias-name

指定したalias-name別名の定義を標準出力に出力する

$ alias egrep
alias egrep='egrep --color=auto'
$ alias alias-name=string

指定したalias-nameに別名を定義する

$ alias hoge="echo 'hoge'"
$ hoge
hoge

ざっくりまとめ

エイリアスは一般的にもよく使われていますね。 継続1日目

さぁPOSIXを始めよう

こんにちはー

久しぶりの投稿になります..

たまにはてなブログのアクセス数を見たりしてましたが、記事を書くには至りませんでした。(何を言っても言い訳になりそう)

だいたい1日20〜30アクセスはあるようです。もっとPVを増やすとやる気も出てくるのでは??
と思い、seoあげてみるか!とか考えてました!!

が本日は逆行します。

本題

POSIXという言葉を聞いたことはあるでしょうか?

POSIX - Wikipedia

とりあえずウィキペディアのリンクを貼っておきます。

POSIX(ポシックス、ポジックス、英: Portable operating system interface)は、各種UNIXを始めとする異なるオペレーティングシステム (OS) 実装に共通のアプリケーションプログラミングインタフェース (API) を定め、移植性の高いアプリケーションソフトウェアの開発を容易にすることを目的としてIEEEが策定したAPI規格である。

超ハイパーざっくりとした僕の認識は

  • どこの環境でも動く

です。

以前に「恐怖!シェルショッカーのPOSIX原理主義 シェルスクリプト」というスライドを見たことがあって、受けた印象です。

www.slideshare.net

(是非見てみてください)

移植性が高いに越したことはないですよね。
名著の「UNIXという考え方-その設計思想と哲学」でも

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

「効率より移植性」

という定理が書かれています。
(是非読んでください)

#!/bin/sh

と書いていながら

lrwxrwxrwx.   1 root root         4 Oct 28 11:03 sh -> bash

こういうことありますよね。
ここでは動いているのに、僕の環境じゃ動かない!

というのをなるべく個人レベルでも無くしていきたいので、最近はPOSIX準拠したコマンドを使うようにしています。(配列とかもそうですね)

なるべくとかではなく、sh で動くものを作るようにしています。

POSIXコマンドチートシートをQitaで作成してしている方がいたので、こちらも参考にさせていただいています。

qiita.com

今後の取り組み

POSIX準拠かどうかを調べる方法はいくつかあります。 ですが、そもそもPOSXI準拠のコマンドを知っていないと、何かを作るときに遠回りになる可能性があります。

そこで、私は、1日1shコマンドを心がけて生活していきたいと思います!!

参考にするところはこちらのリンク

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html

ここに記載されているコマンドを1日一つできれば、それなりのPOSIX成長を見込めるのではないでしょうか。

1日一つコマンドを使ってみて、使い方を理解する、活用方法を考える。的な感じでできればと思っています。

まとめ

半年ぐらい記事更新をさぼっていたやつが1日1記事更新するのはおそらく無理なので、各コマンドについて記事を更新するかは闇の中ですが、
できるだけ!できるだけ!やっていこうと思います。

追記

当初は

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html

のページの上から行っていこうと思ったのですが、序盤の方は
Special Built-In Utilities(break, continue等)だったので、そっちの方は時間をじっくりやるべきだと思い、1日1回実行するのは
Utilitiesの方にすることにしました。

Utilities

アーカイブ

mokicks.hatenablog.com

mokicks.hatenablog.com

mokicks.hatenablog.com

mokicks.hatenablog.com

mokicks.hatenablog.com

mokicks.hatenablog.com

mokicks.hatenablog.com

mokicks.hatenablog.com

mokicks.hatenablog.com

mokicks.hatenablog.com

mokicks.hatenablog.com

PythonのTrue,False小メモ

Pythonの真偽値として使われるbool型に関するメモ

https://docs.python.jp/3/library/numbers.html#numbers.Integral

常識なのかもしれないが、bool型は整数型の派生型とのこと

boolクラスのインスタンスとしてしか考えたことがなかった

>>> True
True
>>> type(True)
<class 'bool'>

整数型の派生なので演算ができる

>>> True + 1
2
>>> True + True
2

おまけ

>>> True == True + True
False

真実に真実を加えると、真実じゃなくなる

pythonでランダムに日本語を作る

mokicks.hatenablog.com

せっかく配列作ったのでとりあえず使うだけです。

import random
import sys
jp = ["あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ","た","ち","つ","て","と","な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ","ま","み","む","め","も","や","ゆ","よ","ら","り","る","れ","ろ","わ","を","ん"]

def make_word(length,words):
    word = ""
    for i in range(length):
        word += words[random.randint(0,len(words)-1)]
    return word

def main():
    if len(sys.argv) < 2:
        print("引数を入力してください")
        return
    print(make_word(int(sys.argv[1]),jp))

if __name__ == "__main__":
    main()
python jp_cmd.py 2
よひ
i=1; while [ $i -le 10 ]; do python jp_cmd.py 3; i=$(expr $i + 1);done
ろめね
さゆへ
たふそ
めゆろ
かめる
をねき
えほめ
になあ
るゆを
りおあ

これで子供の名前つけます

pythonで50音の配列

メモレベルの内容です。

pythonで50音の配列を作りたかった。
python 50音 配列」で検索して配列の定義が出てくれば一瞬で解決したと思います。
ですので先に貼っておきます

jp = ["あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ","た","ち","つ","て","と","な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ","ま","み","む","め","も","や","ゆ","よ","ら","り","る","れ","ろ","わ","を","ん"]

きっとutf-8バイト型の50音からString型に変換するみたいなのを調べると出てくるはずです。
ちょっと調べると

b'\xe3\x81\x82'  #バイト型の「あ」
b'\xe3\x81\x84'  #バイト型の「い」
b'\xe3\x81\x83'  #バイト型の「ぃ」
>>> b'\xe3\x81\x82'.decode('utf-8')
'あ'
b'\xe3\x81\x84'.decode('utf-8')
'い'

ここまでわかったのできっとできるはずです。

でも今回は単純に変数を定義する方法。というか作業ログです。

vim jp

50音を検索しても文字一つ一つが連続しているものがなかったのでしかたなく手打ち

あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん

一文字ずつ" "で囲ってカンマをつける置換

:%s/\(.\)/"\1",/g 

中学生ぐらいの私なら一文字ずつ打ってその度に" "とカンマをつけていたでしょう。今ではこの通り割と早くできました。

作業効率向上のために中学校の必修科目にvimを設けるべきです。

根本的にもっと早い方法があるなら知りたい。

以上です。ご覧いただきありがとうございました。

nginx-unitのansible

ドキュメント見た方が早いかもしれない

NGINX Unit

対象はCentOS7
roleとして扱う

ディレクトリ構造

.
├── files
│   └── unit.repo
└── tasks
    └── main.yml

ファイル群

tasks/main.yml

---
- name: import unit repo
  copy:
    src: unit.repo
    dest: /etc/yum.repo.d/unit.repo

- name: install package
  yum:
    name: unit
    state: presen

files/unit.repo

[unit]
name=unit repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

軽い説明

unit.repoをコピーしてyum install

断念したこと

nginx unitは

curl -X PUT -d @example.json --unix-socket http://localhost

これで example.json で指定した内容でアプリケーションを起動することができる。
ということは
ansibleの uriモジュール を使えば起動もできるのではないかと考えた。ローカルでJSONを更新してデプロイもできるじゃないかと考えた。が、
uriモジュールでunix-socketを使う方法がわからなかった。

ので断念しました。いつか再チャレンジ

積読消化:サーバーレスシングルページアプリケーション:day2

別に毎日するとは宣言していないが、2日続けて投稿。

レビューみたいになるかもしれない。いや、読書感想文か

これまでに「こんなことができるアプリケーションがあるといいな、だれか作ってくれないかな」と思ったことがあるなら、良い知らせがあります。その「だれか」は「あなた」です。

この一文で始まる。いいこと言うぜ

N層アーキテクチャ

Web部分がクライアントとバックエンドのインターフェースになるようなシステム。 アプリケーションサーバ + 1つ以上のバックエンドが層を形成している

シングルページwebアプリケーションをつくることで、アプリケーション部分をブラウザに移せる。
ふむ。確かに。
ブラウザが直接必要なサービスに接続できる設計になる。
クラウド事業者が提供しているバックエンドサービスを部品として使うイメージ


継続大事