ネットワーク入門 - IPアドレスの導入 -
IPアドレスの導入
最近, 立場上ルータをいじりネットワーク管理をすることが多い.
そこで1からネットワークの勉強をし直すことにした.
その過程で得たことについて備忘録としてまとめる.
IPアドレスについて
一言にIPアドレスといっても実は2種類の働きがある.
- グローバルIPアドレス
- プライベートIPアドレス
実はこの2つのIPアドレスが存在する.
グローバルIPアドレス
インターネットと接続するためのIPアドレスである.
これは世界に1つしかないユニークなIPアドレスであり, 重複は存在しない.
グローバルIPアドレスはIANAという組織によって管理されており, 独自性を保っている.
例えば, 大学や我が家には1つのグローバルIPアドレスが与えられている.
大学のような教育機関には勝手に変化しない静的なグローバルIPアドレスが割り振られるのが一般的だ.
大学内にはサーバがあるため, IPアドレスがコロコロ変わってしまうと外部からアクセスできなくなるなど不都合が多い.
こういった問題を軽減するために静的なグローバルIPアドレスが割り当てられる.
我が家のように個人の家では基本的にプロバイダ(ISP)がグローバルIPアドレスを割り振る.
仕組みとしては, プロバイダが保有しているグローバルIPアドレスの中から1つを契約期間中リースするような形をとる.
静的IPアドレスにしてメリットが有る家庭は少ないため, IPアドレスは動的に割り振られる.
しかし, 1つ大きな疑問が残る.
インターネットに接続するためのグローバルIPアドレスが1つならば,
インターネットに接続することができる端末も1つに限定されるはずだ.
だが, 大学や我が家には端末が複数個あり, どれも問題なくインターネットに接続できる.
プライベートIPアドレス
グローバルIPアドレスが1つしかないなら, みんなでそれを共有して使い合えばいい.
そこで, プライベートIPアドレスが考えだされた.
プライベートIPアドレスは狭いエリアのネットワーク(LAN)内で使われるIPアドレスである.
つまり, LANの中だけで有効である. インターネットに接続する能力は持っていない.
インターネットに接続する場合は, プライベートIPアドレスからグローバルIPアドレスにアドレス変換し接続することが必要である.
これは次の記事に書くが, NAT(network adress translate)やIPマスカレードと呼ばれる.
192.168.0.\や172.16.0.\, 10.0.0.\などよく見るIPアドレスは全てプライベートIPアドレスである.
ちなみに, LAN内にある端末同士の通信を行う場合は, このプライベートIPアドレスで通信が可能である.
次回予告
では, このプライベートIPアドレスはどのように割り当てられるのか, これに関しては次の記事に書こうと思う.
その前にONUやルータ, APについて簡単に触れようと思う.
それではまた.
reveal.jsでシンタックスハイライトできない問題を解決(markdownに埋め込み)
この記事の目的
reveal.jsでsyntax highlightができなかったため, 有効にする.
以下の記事を参考にさせてもらった.
reveal.jsを新しくしたらハマった(後編)
上記記事では, markdownファイル内でのコード埋め込み方法について記述されていなかったため, ここを補足したい.
要点 htmlファイルに以下の1行を追加すれば動く.
<body> <!-- この1行を追加 --> <pre style="display:none"><code></code></pre> ... </body>
以下, 備忘録.
reveal.jsについて
markdown記法でプレゼンを作ることができるツール.
ブラウザ上で動作し, pptよりちょっとかっこよく見せれる.
html,cssで見た目を拡張可能である.
導入からindex.htmlの書き方などは下記のサイトを参考にした.
reveal.js, markdown,githubでスライドを作成する
※ページ中ほど, data-vertical
ではなくdata-separator-vertical
であることに注意.
syntax highlightについて
reveal.jsではmdファイルと同じくコードを埋め込むことができ, syntax highlightも可能である...
```ruby
ここにコードを書く
```
はずなのだが上手く動かないorz
少し調べるとこのような記事を発見.
reveal.jsを新しくしたらハマった(後編)
一部抜粋
<section> <pre><code class="ruby"> ここにコード </code></pre> </section>
がhtml fileの中に1つでも含まれていれば動作するよう.
そこで, これをそのままhtmlファイルに入力した.
しかし, コード表示領域が表示されてしまう問題が起きた.
じゃ, 非表示にしちゃえばいいじゃん, ということで<pre>
タグにオプションを追加.
<!-- pre>タグ内を非表示 --> <pre style="display:none"><code class="ruby"></code></pre>
あと, いじっていたらclass="ruby"
って部分も不要なことに気付いた.
<!-- class=""を削除 --> <pre style="display:none"><code></code></pre>
これが完成形.
vim-altercmdの設定にハマった
そもそもvim-altercmdとは
vim-altercmdとは, vimのExコマンドを独自のコマンドに置き換えることができるようになるプラグイン
長ったらしいコマンドを短縮したものに置換することができる(๑╹ڡ╹๑)べんりぃ〜
今回は, よく打つ上に長い:NeoBundleInstall
を例にしていく.
:NeoBundleInstall -> :ni " pluginのコマンドを短縮することができる
vim-altercmdは2つある
kana/vim-altercmdとtyru/vim-altercmdの2つがあり,
- kana : オリジナル
- tyru : kana/をforkし改良したもの
だそう.
僕が使ってるのはtyruさんの方です. 詳しくはこちら. オリジナルのkana版とtyru版の違い / tyruさんのblog
やりたかったこと
tyru/vim-altercmdを使って.vimrc内からコマンドを短縮する.
:NeoBundleInstallを
を :ni
に置換したい.
altercmdでガッツリはまった
様々なサイトを巡回して設定方法を調べると下のような例が出てきた.
.vimrc
NeoBundle 'tyru/vim-altercmd' call altercmd#load() # vim-altercmdを有効にする AlterCommand NeoBundleInstall ni # コマンドの設定
vimを再起動する.
line 63: E117: Unknown function: altercmd#load line 64: E492: Not an editor command: AlterCommand NeoBundleInstall ni
call altercmd#load()
なんて関数知らないと言われてしまう.
しかも, AlterCommand
はvimコマンドじゃねぇ って言われてる...orz
altercmd#load()
そもそも使えないんじゃないかと思って調べた結果, このサイトの方法で設定すると上手く行くことが判明.
最近導入したvimプラグインをまとめる
以下, 抜粋
.vimrc
" call altercmd#load() autocmd User Rails AlterCommand r R autocmd User Rails AlterCommand rc Rcontroller autocmd User Rails AlterCommand rm Rmodel autocmd User Rails AlterCommand rv Rview
autocmd User Rails
はrailsプロジェクトでのみ動作するよってこと.
altercmd#load()をコメントアウトすると,この設定はエラーもなく上手くいった.
どうやらautocmd
がミソらしい.
autocmd
についてはここを参考にした.
autocmd
は何らかのeventが起きた時にpat(正規表現)で指定されたファイル形式であれば自動でcmdを行うコマンドだそう.
:au[tocmd] [group] {event} {pat} [nested] {cmd} {pat} 正規表現に一致するファイル. {event}のときに自動的に実行するコマンドのリストに、{cmd} を加える. {cmd} は常に既存の自動コマンドの後に追加されるので、自動コマンドは指定された順に実行される. ## [group]と[nested]は使わないので省略. ##
今回は, 新しいfile / 既存fileが読み込まれた時{event:BufRead},どのようなファイル{pat:*.*}であってもコマンド{cmd}を有効にしたい.
そこで, 上記サイトを参考にしながら以下の設定を行った.
.vimrc
" call altercmd#load() エラーを吐くのでコメントアウト autocmd BufRead *.* AlterCommand ni NeoBundleInstall
保存後, vimを再起動.
これで, :NeoBundleInstall
が:ni
だけで実行できる.
もちろん, 他のコマンドでも適応できる. 半日くらいこれで飛んでしまった...
autocmdの勉強にもなったので時間の無駄ではなかったかな.
vimrcを拡張していくのは時間を忘れてしまうʕ̡̢̡ʘ̅͟͜͡ʘ̲̅ʔ̢̡̢
NDS40メモ
firefox OS 入門
簡単なfirefox osの構造説明
Gaia : HTML Gecko: レンダリングエンジン Gonk : Linuxカーネル, ハードウェア仮想化(Androidから流用)
アプリを開発してみよう
手順
- firefoxを起動 -> ツール -> 開発者ツール -> WebIDE
- 右上のランタイムからfirefox OS 2.0を起動
- アプリを開く-> 新しいアプリ -> Project -> Hello worldアプリを適当に保存
- 再生ボタンを押すとアプリ起動
firefox OS 開発者勉強会
仕事が捗るoffice & エディタ操作
GUIに頼らずにキーボードショートカットを利用しよう
Fn+ <- / -> でhome/endになる
正規表現を使おう
- ? : 任意の1文字
- : 任意の文字列
正規表現検索
- [(from)~(to)]
- . : 任意の1文字
繰り返し
- * : 0回以上の繰り返し
- + : 1回以上の繰り返し
シェルの基礎とSSH
boume shell系のお話
コマンドに対する各種展開
チルダ展開 echo ~
パラメータ展開 ${USER:--unknown}
コマンド展開 $(echo "echo foo")
算術式展開 echo $((1+1))
クォート除去 echo "foo bar baz"
変数
name = "hello world" echo $name //$で参照
{}を使うことで名前の範囲を明確に指定できる(パラメータ展開)
パイプとリダイレクション パイプ(|)はコマンドの標準出力とコマンドの標準入力を接続
ls | grep vim
リダイレクトは標準出力ではなくファイルに対し出力を行う
コマンド実行前に行われるため注意
ls -a >> out.txt 2>&1 //file, 標準エラー出力に表示
ヒアドキュメント
cat <<EOF > out.txt foo bar baz EOF
制御演算子 コマンド同士を ; で区切ることでコマンドを順番に実行
date ; pwd; ls
コマンド同士を&&で区切ると前のコマンドの終了ステータスが0(成功)だった場合に後のコマンドが実行される
ls && pwd
コマンド同士を||で区切ると前のコマンドの終了ステータスが0以外(失敗)だった場合に後のコマンドが実行される
ls || pwd
条件によって処理を分岐させる if
if[$(id =u) -eq 0] if> then if> echo "rootuser" if> else if> echo "guest"
for
for f in $(ls) //for eachで動く for> do for> cp $f $f.org //フォルダ内を全て.orgに変換 for> done
case, while
もある
コマンドのグループ化
コマンドを括弧でくくるとグループ化できる.出力をまとめることができる.
(echo hoge; echo fuga) | xargs
(echo hoge; echo fuga) > out.txt
この括弧でくくられたコマンドはサブシェルで実行され、シェルの環境に影響をあたえるような操作はコマンド終了時に影響を与えない. 下記コードはプロセスが変わるため変更が適応されない.
hoge = HOGE; (hoge =FUGA;) echo $hoge => HOGE //サブシェルでの変更は親シェルに適応されない
シェルスクリプト 1行目にシバンを記述し2行目以降にコマンドを記述します.
####!/bin/sh //シバン 環境によってbashとかに変更するべき set -eu if... ... fi
ssh Tips
踏み台 踏み台サーバーを経由してリモートホストに接続する場合あProxyCommandオプションを利用すると便利 コマンドラインオプション
ssh -o ProxyCommand "ssh -W %h $p USER@BASTION"
~/.ssh/config コンフィグに書けば流用可能
リモートホストのコマンド実行結果を手元で利用
例 リモートホストのログを手元にコピーしつつ検索
ssh REMOTE_HOST 'cat /var/log/httpd/access_log' | tee REMOTE_HOST .access_log | grep 404
手元のコマンド実行結果をリモートホストで利用
cat batch.sh | ssh REMOTE_HOST 'cat |/bin/sh'
操作ログを残す
scriptコマンドを利用して操作ログをファイルに残す 操作ログを残すのは運用上必要
script -q -c "ssh REMOTE_HOST" /path/to/log/file
困ったら
-hでヘルプを読みましょう
man COMMANDでマニュアルを読もう
「はじめてUNIXで仕事をする人が読む本」はshellやネットワークについてわかりやすく書かれているためおすすめ
プロセスはshellを使う上で避けて通れない. process-book で無料で勉強できる.
Java入門
特徴
- java ≠ javascript
- オブジェクト指向
- 静的型付け
- 仮想マシン上で動作する
- C/C++から多くの構文を比企通
- 言語処理系にはGCが組み込まれている
- 型はプリミティブ型と参照型(クラス)がある
- 共通のふるまいにはインタフェース
クラス
- 全クラスはobject型を継承
- 親クラスは1つしか継承できない(単一継承)
- 定義のみのメソッドを持つクラスを作成可能
インタフェース
Android再入門
ITの周期は3年. androidは7年目. 3年前の情報は古い.
昔のAndroid
Eclipse + ADT #公式Emulator UI以外のテストをJUnit3で動かす
今のAndroid
開発環境 Android stadio
ビルドツール Gradle
テスト
JUnit4
Espresso 2.0
Robolectric
ジェネレータ
Genymotion
Eclipse + ADT はもう古いから使うな by google
ビルドツールはGradle一択
Gradleの懸念点1
- AS1.1が出たばかり.
- 1.0未満の情報は危ない
- 2014年12月以降の情報を参考にしよう
Gradleの懸念点2
* ライブラリの自動ダウンロードが起こる
* キャッシュはあるものの今回は細かいダウンロードが多めに発生する
Emulato
実機を用意したほうが早い
テストツール
* 公式テストツール : androidTest
uiを使わないテストはこちら
* 非公式テストツール : Robolectric
Android Javaについて留意しておいたほうがいいこと
Android Java != Oracle Java
Javascript再入門
万能言語Javascript
- クライアントサイド
- サーバサイドでも使える(node.js)
サンプルコードの位置
コードはgistにある
sambaiz gistで検索
開発環境
jsbinでブラウザ上で実行
スコープの話
関数スコープはあれど, ブロックスコープはない
var -> letにするとブロックスコープがうまれる(使えないことがおおい)
ホスティング : 関数全体で変数を参照できる->宣言前でも参照できるため代入されるとおかしくなる
"=="と"==="の違い
"==" は型変換して比較
"==="は型も一致する場合にtrue
slide
slideshare : あなたとJavascript
code
gist : javascript再入門
プロジェクト・マネジメント
プロジェクト・マネジメントとは?
- プロジェクトを成功させるための活動
- 品質費用納期に加え, メンバの管理も行う
- PJのみでなく, メンバで協力する
EVM
earned value management
進捗やスケジューリングをお金で換算する管理手法
* pv planned value
* ev earned value
* ac actual cost
cpi = ev/ac
spi = ev/pv
cpi > 1 は効率が良い
spi > 1 はスケジュールより進んでいる
ことを表す
EVMの効果
- 数値的に進捗が見える
- 効率よく作業ができているか見える
- スケジュールを守れているかが見える
- ACの測定によってどれだけ時間をかけられているかを数値で見える
まとめ
プロジェクト・マネジメントはエンジニアなどメンバ全員が学び意識することが大事.
NDSミートアップ
2015/3/14に開催 ヘッドホンアンプを作ってみよう チップによる変化をみる 予算1000円
zshでrvm useがこけた時の対処
zshを使用してrvm use
を実行するとコケた.
どうやらRVMはbashをlogin shellと想定しているらしく, zshは一手間かける必要があった.
対処に時間がかかったのでメモ.
インストールしているrubyのバージョンは2.0.0-p598
$ rvm use 2.0.0 RVM is not a function, selecting rubies with 'rvm use ...' will not work. You need to change your terminal emulator preferences to allow login shell. Sometimes it is required to use `/bin/bash --login` as the command. Please visit https://rvm.io/integration/gnome-terminal/ for an example.
まずはstack over flowを参考に.zshrc
内でRVMのスクリプトファイルのパスを通した.
#RVMのスクリプトのパスを通す ##.zshrcの最後に記述すること## # export PATH="$PATH:$HOME/.rvm/bin" 15/2/23 追記 export PATH="$PATH:$HOME/.rvm/bin:$PATH" # Add RVM to PATH for scripting #rvmをshell内で有効にする [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
terminalで.zshrc
を再読み込み.
$source ~/.zshrc /Users/userhome/.rvm/scripts/cli:255: parse error near `-GF'
何故かsource .zshrc
の時点でエラーが通らなくなってしまう.
色々調べた結果, 公式サイトに対処が乗っていた.
RVMの公式サイトによると
RVM is not a function, selecting rubies with 'rvm use ...' will not work.
が出たら次のコマンドを試してみろ. とのこと.
$ rvm alias create default 2.0.0 Creating alias default for ruby-2.0.0-p598.... $ rvm use 2.0.0 Using /Users/userhome/.rvm/gems/ruby-2.0.0-p598
できたっぽい.