/var/log/study

つまり雑記

((Pythonで) 書く(Lisp) インタプリンタ) というやつをpython3でとりあえず動かす

タイトルの通り. やってみたら以外とあっさりPython3対応できた

元ネタは以下の記事

((Pythonで) 書く (Lisp) インタプリタ)

Python3対応自体も既出のネタかもしれないが、書いてしまったので公開する

環境準備

適当にPyhton3のインタプリンタを持ってくる.

自分はDockerを使って、python3.6.0 の環境を入手した

下準備

lis.py がpython2のインタプリンタでは走るようになっていると思う.

まず、おもむろに

以下を先頭に

#! /usr/bin/env python

以下を最後尾に

if __name__ == "__main__":
    repl()

そして、lis.py に実行権限をつける

# chmod +x lis.py

手順

基本的にはpython2からpython3で変更されているものを対応をしたら良い

./lis.py

で、最初にエラーが出るのは、

if val is not None: print to_string(val)

python3では、printがステートメントから関数に変わっているエラーなので、 print() に直す

それを直すと,

AttributeError: module ‘operator’ has no attribute ‘div’

がでてくる。 divtruedivfloatdiv にわかれたらしい。 どちらが正しいとか本来はあると思うが、 ひとまず truediv を選ぶ

最後が

NameError: name ‘raw_input’ is not defined

というエラーで、標準入力を待ち受ける関数名が input に変わったとのことなので、そちらに変更する。

以上の3つのエラー対応でとりあえず再び動き始める

本来は必要な残りの作業

テストコードがあれば良いのだが、今回の元ネタにはテストコードがないので、暇があれば実装してPython3対応が正しく完了しているかを確かめたい。

DigitalOceanをざっと眺めて気になった点

クラウド事業を展開しているところに従事している都合上、他社サービスがどんな風になっているかきになるお年頃なのです。

先日、DigitalOceanを触り始めたのでそのメモ

コンパネ

  • 白を基調に水色で綺麗
  • 何が動作するのかは分かりやすい
    • ただしわかりづらいところは、本当によく分からない(後述する)
  • 料金が明示的ではないので、お金のかかり方がよく分からない

インスタンス

メモ

  • 基本10個まで
    • 上限解放できそう
  • OS
  • リージョン
    • いろいろあるが日本リージョンは無い
    • 地理的な話だと一番近いのがシンガポール
  • オプション
    • プライベートネットワーキング
      • これが本当によく分からない
      • 同じリージョン, ゾーンに属すインスタンスをつなげると書いてあったがよく分からない
      • 割り振られたプライベートIPが/16なので、リージョン間でどのVMとも共有されるIPをつけることが可能な機能?
      • コンパネをざっと眺めているだけだと、プライベートネットワークを止める方法が分からない
    • バックアップ
    • IPv6
    • User data ?
    • 監視
価格 cpu(vCPU) メモリ(GB) ディスク(GB) ネットワーク流量(TB)
5 1 512MB 20 1000GB
10 1 1 30 2
20 2 2 40 3
40 2 4 60 4
80 4 8 80 5
160 8 16 160 6
320 12 32 320 7
480 16 48 480 8
640 20 64 640 9

雑感

インスタンスの設定とローカルディスクのサイズが関連してしまっているので, 中サイズのインスタンスを後に, 小さいインスタンスにすることができなさそう.

なので「インスタンスのサイズを下げてコストを抑える」とかのクラウド的な基本テクが使いづらい.

日本リージョンが無いのは割と残念.

$10でまともなVMが借りることができるのは本当にすごい.

ネットワーキング

  • ドメイン
  • PTR
  • LB
    • 月20ドルから
    • 性能は未調査
  • フローティングIP

    • AWSで言うところのElastic IP
    • VMについてるIPをフローティングIPに昇格させる
  • ファイアーウォールが無い

    • iptablesとかFirewalldとかやらなきゃいけなくてダルい

雑感

  • LBが安いと思う

触っていないもの

  • volume
  • API
  • Image

最後に

DigitalOcean: Cloud computing designed for developers

あなたがdocker-ceをcentos7にansibleでインストールしたい時に読むべき記事

タイトルの通り。

あと2017/03/03に書かれている記事なので注意

dockerがリリースサイクルを変えて、多分リポジトリの情報の配布方法も変更した模様。

具体的に言うと、 yum-config-manager ってやつを使うようになった。

ansibleでyum-config-managerコマンドを扱ってくれるモジュールは現状なさそう。

yum_repositoryモジュールはrpmで配布するやつを扱うので今回のケースではうまくいかない?っぽいのでワークアラウンドを書く。

ワークアラウンドだと思うし、本当にyum-config-managerを扱うモジュールがいないのか?は疑問なところだが、それは後日もう少し調べる。 

以下はplaybook

- name: install yum-utils
  yum: name=yum-utils state=present
- name: add docker repo
  shell: "yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo"
  args:
    chdir: "/etc/yum.repos.d"
    creates: docker-ce.repo
- name: install docker-ce
  yum: name=docker-ce state=present
- name: restart docker
  systemd:
    name: docker.service
    state: restarted
    daemon_reload: yes
    enabled: yes

shell moduleでなんとかする方向でやってあげると良さそう?

ちなみに、この記事を書いてる時点でインストールされるdockerのバージョンは以下

# docker --version
Docker version 17.03.0-ce, build 3a232c8

Emacsでドキュメントを読む

2017年、何としてもemacsを捨てたい気持ちと、emacsの使い方を学んでしまいより快適な環境が手に入ることによる喜びで葛藤が生まれています。

そんなことはさて置き、emacsで諸々のドキュメントを読む方法を軽く纏めます。

man

標準パッケージの woman を使えば良い

M-x woman の後に適当に知りたいコマンドを叩く

python

helmを使う前提になってしまうが、以下を参考に、helm-pydoc.elを使う

syohex.hatenablog.com

golang

github.com

go-modeから引ける

M-x godoc の後に、適当にパッケージ名を入れる

ansible

以下を使う

yaml-modeと連携するので、yaml-modeを先にインストールしておくのがベター

github.com


以下は軽く調べて無かったもの

  • Dockerfileのためのドキュメントを見る.el
  • docker-compose.ymlのためのドキュメントを見る.el

2015年以降に増えたgTLDにご注意を

仕事でネームサーバーを扱うことになるかもしれなくて、DNSとはどのような働きをするかを調べてるうちに、 ふと思い立って、 .cloud ドメインがあるかないかを調べてみた。

結果としてはあったのだが、それはさて置き、それ以外も調べた結果、現在所属している会社的に取られたらまずそうなドメインを2こほど抑える結果となった。

調べた過程で分かったこととして、 fujitsu.cloudntt.cloud あたりは全然関係のない外国の方が抑えている

なにやら2015年あたりに増えたgTLDあたりが割とノーマークになっている様子

現在のTLDのリストは以下で観れる

厄介なのは、 .コム (xn--tckwe) などの文字列に対してaliasが貼ってあるドメイン。政府などがあるが、読みを見るに中国のドメインっぽい。「グーグル」なんてドメインもあるらしい。

真面目に調べたら、これ抑えられていなくて良いのか?というやつが山ほどある気がするので、転売目的の方などに取られて不要なお金を支払う羽目になる前に各自ご注意を.

メンテナンス用データを生成するツールについて僕の思う事

結論

bin/rake db:migrate

機械的に 実行されるような環境が最強だって事に気がついた.

不要な中間形式もなく、誤ったデータを使う可能性もかなり減らせる.

良いと思う所

手動で bin/rake db:migrte すると考慮すべきパターンが増えるため, 機械的に が超重要. 考慮すべき間違いが減る. おそらくは, 間違ったデータを挿入しないか否かだけを考慮すべき状態になる.

また上記のコマンドは暗黙的に、gitできちんとワークフローを回していれば、productionやstagingに取り入れられて問題ないとされるデータしか入ってこないはずなのも良い点である.

但し書き

bin/rake db:migrate

でokなのは、ActiveRecordを使ったプログラミングがみんな出来る前提なので、そこら辺だけ要考慮

BSD系のコマンドを読む下準備

TypeScriptのブログを書くと言っていたけど, そんな暇もなさそう.

業務で色々なプロトコルに触れて(OSIで言うところのデータリンク層~アプリケーション層まで), わからないことだらけで困っているのが現状です.ただ分からないと嘆くだけでは前進できないので, せめてwebシステム開発の出身なんだから, HTTPサーバーを切り口に色々と勉強しよう!と思ったわけです.web上の人達もサラッとhttpサーバー書きました!みたいなノリなので.

まぁ結果としては、C言語を殆ど触ってこなかった自分としてはムズい.

もう少しレベルを下げて, まずC言語を取得しよう!というところに焦点を当てて勉強をしようと思った際に見つけた記事が以下

lsコマンドをハックしてみよう - Yahoo! JAPAN Tech Blog

なるほど. 過去の(現在でも?)yahooでは新人にBSD系のコマンドを読んで学習することを推奨しているのか.ならば自分も取り組めるのではないか?というところで, 本日はその下準備.

必要なもの

前提

普段は CentOS + zsh + tmux + emacs で作業をしているので, それっぽい環境に近づけたい

準備

  1. VMに対してisoでFreeBSDをインストール
    1. tuiに乗せられて適当にエンターを押していけば問題なし
    2. その過程で適当にユーザーを作る
    3. 作ったユーザーを wheel グループに属させる
    4. pkg install sudo
    5. visudowheel ユーザーに sudo する権限を与える
  2. 適当に作ったユーザーでsshし、zsh tmux emacs git あたりをインストール
    • 手軽にzsh環境を整える為に、oh-my-zshを導入
    • emacsの環境を整えるのに、Cask を使っているので、それをインストールする為に, curl python を導入
  3. GitHub - freebsd/freebsd: FreeBSD src tree (read-only mirror) から git clone してくる

詰まったこと

  • yahooブログには適当にファイルを揃えろって書いてあったし, 適当にlsディレクトリ配下をコピペして持ってきたけど動かなかった.
    • 執筆当時はそれで良かったのかもしれない
  • BSDの初期環境はCentOSと違いすぎて色々と戸惑った.
    • sudo 無い
    • ココらへんは無いものだらけだって事が分かったら後はスムーズに作業出来た