ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

2015年、今年も皆さんお疲れ様でした&ありがとうございました。

今年も一年お疲れ様でした

今年一年関わって下さった皆さんへ、ご苦労様でした、お疲れ様でした、そして本当にありがとうございました。この言葉は、自分自身に対しても掛けてあげたい。普段から自分に甘いところがあるが、年の瀬も甘やかしてやろうお疲れさん。笑
今年は開始から半年ほどは何事もなく、凡々と過ごすことができたが、後半から良いこともそうでないことも多少あり、「犬も歩けば棒に当たる」とはよく言ったものだと思った。
良くないことは仕事もプライベートのことも済んだことなので、あまり振り返ろうとは思わない。次に活かそうと、キッチリ反省した、つもり。

嬉かったこと。

今年一番嬉しかったことは、弟が結婚して、その奥さんに子供ができたという報告を聞けたことだ。僕は男三人兄弟の長男なので、まず初めて妹ができた。また、数カ月後には自分が伯父になる。
もちろん一番喜んでいたのは僕の両親だった。
僕は、結婚した三男の5つも年上で28歳になるのだが、その報告を聞いた時「キィーッ!!先を越したわね!!」となる前に、純粋に嬉しく思ってしまった。
僕も両親に負けず劣らず喜んだ。
その報告を聞いて以来、秋月電子通商でパーツを探している時も、
「そうか、伯父になるのか」
秋月から届いたユニバーサル基板にヘッダピンをハンダ付けしている時にも、
「来年の4月にはもう生まれるのか」
と、もう生まれる前から甥or姪に夢中である。
三男とは5つも離れており、僕は17〜24歳くらいまで家を離れていたので、思春期真っ盛りの彼をあまり見ていない。三男が小さい時の思い出は結構あって、僕の机の下に潜り込んでは、戦隊モノのヒーローと怪獣の人形を両手に握って、一人で戦わせていたり、アニメやNHK教育を見て一人で笑いながら話していた。次男は年子だったので、僕が同級生と遊ぶときなどは結構一緒に過ごしたのだが、三男はほとんど面倒をみてやれなかった。
その分、両親から手厚く育ててもらったようで、今ではなかなか生意気な弟である。
そういった経緯があって、あまり接触する機会が多くなかったこともあり、正直なところ、三男が結婚&懐妊報告してくるまでは、一人前の大人としての接し方があまりできていなかったように思う。自分の意識の中でまだ、小さい時の三男の印象が強く残っていたのだった。
それが今では、身長においてもいつの間にか僕を超え、兄より先に一家の大黒柱となった。
今は自分を卑下することをやめ、ただただ、弟を賞賛してあげたい。
来年の抱負というかなんというか、これから三男とは、恥ずかしがらず一人の男として接するようにしたい。
僕達は、そんなにドラマチックな出来事がたくさんあるような家族ではなかった。
ごく普通の家庭だったのだが、それが今すごく幸せである。

年末の休みでホッとして少しノスタルジィになってしまった。でもやはり振り返ることもときには良いものだ。三男の喜ばしい出来事がやはり自分のなかではかなり大きかったのだ、と更に実感した。
よし再決意、弟とはちゃんと恥ずかしがらず接するようにしよう。

さて来年は

過去記事にもあるように、来年からはついに社内SEとして働くことになる。余談だが、社内SEは一般的なSEとは位置づけが異なると思う。詳細は来年までのお楽しみだ。
今までは作業員として工場勤務だったので、車で工業地帯へ出勤していたのだが、これからは電車で、しかもそこそこの都会に出勤である。
電車通勤もIT業務も初めてではないものの、都会で働くことは初めてである。その近隣の都会は年に3回行くか行かないかで、しかも自ら望んで行くことはまずなかった。不安である。
しかし実は、それにも増して楽しみが隠せない。今までとはまた全く違う生活を送ることになるし、全く異なる人たちと接することになる。社内SEとしての仕事内容、作業内容そのものも楽しみではあるが、仕事はやはり「人も含めた」環境が最重要だと思う。前に勤めていた会社は思い出すだに地獄なのだが、次は更なる地獄でないことを祈る。
働く場所や内容が変われば、一日のルーティンや見る景色、生活する時間帯、食事や飲み物、出会う人やその人との接し方、受け答えする言葉やそれに対するレスポンスもガラっと変わる。全く違う業種からだと特にそうなると思う。あくまで仕事なので、楽しいことばかりでないことを念頭に置き、五月病に注意して日々を送るようにしたい。

具体的な目標を…

とまぁダラダラと私事を書かせていただいた。後々、少し恥ずかしい思いをするかもしれないが、それもまた一興である。
当ブログは、「ソフトウェアとハードウェアの境界」などと仰々しい看板を掲げているので、それらしい内容も書いておかなければ。
箇条書きしておこう。

おそらく来年一年ですべてをこなすことはできない。まぁ今後の抱負と考えるのがしっくりくる。それだけ楽しみがある。嬉しい限りだ。
秋葉原に行くことに関しては、お金と時間さえあればいつでも叶えられよう。しかし、関西圏に住む僕にとっては、なかなかの冒険なのである。
当ブログは、上記の目標と言うか勉強内容をみてもわかるように、すでにネット上にたくさん情報があるが、あくまで自分のつまずいたところや見解を書くようにして、「誰得」かもしれないけど、その数少ない誰かのために情報を発信していくことを重視している。ご理解いただきますようお願いします。
その数少ない読者の方々ありがとうございます。
僕が拝読させてもらってるブロガー様、これからも面白い記事期待しています。
今年も一年ありがとうございました。
来年もよろしくお願いします。

以上、ウルトラ私事記事でした。

SL811HSのドライバ on KOZOS (未完) 2nd

(余談)電子工作楽しい

今のところセンサーやLEDなど、ブレッドボードで多少動作確認しただけで、外部機器を全く実装していない状態ではあるが、なんか楽しい。
f:id:tokixy56:20151223155058j:plain
僕はピンアサインをよく忘れるので、シリアルケーブルにはピンの名称を「手書き」で書いて貼り付けてある。アナログとデジタルのインタラクティブな関係を象徴しているかのようだ(意味不明)。
Raspberry Pi(以下RPi)をいじって遊んでいると、新発見をした。以前のブログに書いたように、RPiとシリアル通信をしていた時のことだ。
tokixy56.hatenablog.com
上記の画像に写っているのはRPi B+なので、過去記事で紹介したRPi B('+'なし)と多少ピン配置が違う。とはいってもシリアル通信用のピンは同じなのだが。
http://data.designspark.info/uploads/images/53bc258dc6c0425cb44870b50ab30621
[Rapsberry Pi B+ ピン配置]
過去記事で紹介したUSBシリアル変換ケーブルは、4本のピンが出ているのだが、それぞれ以下のような信号線になっている。

  • 緑 - TxD
  • 白 - RxD
  • 黒 - GND
  • 赤 - VCC(5V)

赤が、電源になるらしい。なんとなしに、赤をRPiの④に刺してみた。
電源無しで動いてくれた。
組込み機器をよく知る人からすると、当たり前のことなのかもしれないが、新たな発見だ、と思って嬉しくなった。

  • 赤→④
  • 黒→⑥
  • 白→⑧
  • 緑→⑩

と接続すれば、RPiはPCとの接続だけで正常に通信することができる。いつでもどこでもRPiが開発できちゃう☆ RPiは推奨電流が2Aということで、PCからの電源供給では不足する可能性があるので、その辺はあしからず。
また、動作させたOSはMINIBIANである。
minibianpi.wordpress.com

USBドライバ難しい

KOZOS学習用に選定したボード、H8-3069F-USBボードに搭載されているUSB機器である、SL811のドライバを書こうとしているのだが、やっぱり難しい…(ちなみにこの学習用ボードもブレッドボードを介してUSBシリアル変換ケーブルから電源を取るようにした。)
このボードを買った時についてきたUSBホストのソースを元に、CQ出版の本を買って参考にしながらコーディングしてるんだけど、元のソースがもともと実用品でなく、ディスクリプタを取得するだけのものなので、USBマスストレージからデータを取ったり、みたいなこともできておらず、その後になかなか進まない。


もちろんドキュメントをしっかり読んで、仕様をきっちり理解しながら作っていくのが一番いいんだろうけど、初学者の僕としてはハードルが高過ぎる(敷居が高い、が誤用だったなんて)と思った。
sl811のデータシートは英語だし、もちろんUSBのスペシフィケーションもすべて英語だ。あの膨大な情報量のドキュメントからどのようにして必要なものを取得すれば良いのか。あのドキュメントとの接し方がわからないよ。
そこで、ウェブページでサンプルコードはないかといろいろ探した結果、次に紹介するOSのドライバを参考にさせていただこうと決めた。
www.interq.or.jp
ライセンスがGPL2なので、その辺も考慮しながら、必要な部分だけいただこうと思う。楽しみにしている諸君、私のこの偉業が完了するまでしばし待たれよ。
github.com

gvimでコンパイル時、error、warning箇所にジャンプできない

gvimのmakeとquickfix

gvimのmakeコマンドはquickfixと組み合わせると、errorやwarning箇所にすぐにジャンプすることができてとても便利だ。
コーディングがあらかた終わって、errorとwarningを取る作業をしている時など、なくてはならない存在だ。
現在僕は、KOZOSでsl811のドライバとUSBライブラリを作成(と言うか改修)しようとしているのだが、まぁwarningもerrorも多数出る。
いつもの如くquickfixを開き、エラー箇所にジャンプしようとするとこんなことになった。
f:id:tokixy56:20151222001607p:plain
ぶらんく(´・ω・`)
何やらパスの部分に「In file included from...」みたいなことが挟まれてる。h8300-elf-gccから出力されるパスがおかしいのか、gvimの解釈の仕方がおかしいのか、とぼんやり考えた。いろいろ考えた結果、コンパイラwindowsでのパスで表示するか、unix系のパスで表示するかちょっと変な感じになってて、ジャンプできないんじゃないかという結論に達した。そう思い違ったのが最大の失敗で、ここから地獄のGNU Toolchainコンパイル作業が始まった。

H8用gccコンパイラWindows上でソースから作成する(失敗)

前回の記事にも少し書いたのだが、これは非常にうまく行かなかった。まさか自分でgccbinutilsソースコードを修正する(実際には.texiなどのtexinfo系)とは思ってもいなかった。が、結果としてできなかったので、あえてその詳細は伏せておこう…。
いや、やっぱりちょっと書く。笑
コンパイルした環境としては、cygwinとmingw32の2つ。cygwinでは--hostと--buildを指定しないパターンと、--host=i686-w64-mingw32のパターンの2種類で実行したので、最終的には3パターンで作業した。結果としてはすべて惨敗。
最終的に頓挫した原因はnewlibであった。newlibのコンパイルで失敗する。「…ar: ../stdlib/lib.a: No such file or…」みたいなのが複数出る。なんでlib.aが作成されてないのかわからない。もう流石に開始から3週間ほど経っていたので諦めた…結果としてbinutilsとcコンパイラはできたので、それだけでよしとするか。KPITのインストーラでインストールしたものでh8300-elf-gcc -vして詳細を見たら、linuxmingwで作成した模様。windowsではそもそもできないのか??KPITはどうやってコンパイルしたんだろう。しかもzlib.dllやその他のdllも必要としない.exeである。この偉業に脱帽。
この作業をしていた時に参照させて頂いたのが以下のページだった。
イッチョカマーの徒然草: ARM用クロスコンパイラのビルド(Windows8+Cygwin)
OSDev.org • View topic - GCC for x86_64 + newlib problems
H8用コンパイラ GCC(Cygwin)
CygwinでH8のクロスコンパイル環境を作る » NezBlog
新たな挑戦者の登場と良い結果報告に期待する。

gvimの問題

こちらが本題だ。
結局、KPITのインストーラからインストールしたh8300-elfコンパイラを使用することにしたのだが、そもそも、ジャンプできない原因はコンパイラにあるのか?という疑問がふとよぎった、いや、1週間経ったあたりからその方向は見ないようにしてた。だって1週間が無駄になっちゃうじゃない。
そして3週間が過ぎて「この愚か者!!」と自分を罵った。
どうやら、コンパイラのバグではないようだ。gvimの問題と、なおかつmakefileの作りがまずいと起こるらしい。
そもそも僕は、過去記事にも書いたように、NERDTreeを使ってプロジェクトっぽくして使用してる。
tokixy56.hatenablog.com
プロジェクトパスとして設定しているディレクトリにcdして、そこのmakefileを実行する、という形をとっている。
ちなみに、現在の僕のKOZOSプロジェクトはGithubに登録してある。
github.com
また、ジャンプできなかった当時のmakefileは、ヘッダファイルの参照パスを指定するオプション-Iで、-I../commonのように、相対パスを指定していた。
加えて、以下の原因もあった。
stackoverflow.com
つまり、ジャンプできない原因は以下の2点である。

  • 相対パス指定のため、gvimのカレントディレクトリから見たパスにジャンプするため、必要なディレクトリが省かれ、ファイルが見つからない。
  • 「In file included ...」もファイル名であると解釈される。

ということであった。
上記を参考に、.vimrcとmakefileを修正しよう。

.vimrc
"makeコマンドのパスを指定
set makeprg=C:/Users/tokixy56/Work/cygwin/bin/make.exe
"バックスラッシュやめてっていう設定
set shellslash
"In file includeで区切る設定
set errorformat^=%-GIn\ file\ included\ from\ %f:%l:%c:,%-GIn\ file\ included\ from\ %f:%l:%c\\,,%-GIn\ file\ included\ from\ %f:%l:%c,%-GIn\ file\ included\ from\ %f:%l
makefile
...
###cygwinじゃない場合、$(realpath ..)だけでいい
HEADPATH = $(shell cygpath -m $(realpath ..))
########## コンパイルオプション(Compile Flags)
...
CFLAGS  += -I.#             ヘッダファイルの検索先を指定する
#CFLAGS    += -I../include     相対パスの指定をやめる
#CFLAGS    += -I../daemon      上に同じ
CFLAGS  += -I$(HEADPATH)/include
CFLAGS  += -I$(HEADPATH)/daemon

cygwinのmakeコマンドで普通にmakeすると、Unix形式のパスで表示されてしまい、これもまたgvimでジャンプすることができない。$(shell cygpath -m ...)で囲んであげることで、windows形式に変換することができる。cygpathの使い方はググろう。
絶対パスにしておけば、どこにエラーがあっても間違えることなくジャンプすることができる。
基本的にはgvimからコンパイルするより、シェルから実行する方が良いのだろうが、もしできる環境にあるのならば試してみてはいかがだろうか。
しかし、linuxwindowsの環境のことを考えてmakefileも書き換えないといけないなぁ…

windowsでUnixライク環境

Windowsのシステム環境変数PATH

windowsで開発していると、いろんなツールを使う事になると思う。
IDE一本の人はいいのだが、僕はコンパイラコンパイラ(他ツールを通して)、エディタはエディタ(つーかvim)、シェルはシェルと、多数のウィンドウを移動する(あくまでもハッカーっぽい感じを演出したいが為)。 僕はUnix大好きなので、Unixライクな環境を提供してくれるツール群は欠かせない。僕は特にCygwinを多用している。
Cygwinをどの範囲まで使用するか、ということに関しては賛否両論あるだろうが、僕はもうどっぷり浸かっている状態と言っていい。ちなみに僕はzsherである。bashでもいいんだけど、ただただ補完機能がいい、ということだけでzshを使おうと決めた。笑
以前までは、DOS窓が軽量だったので、システム環境変数PATHにCygwinのbinとかを通して使用していたのだが、途中でカオスっていることに気づいた。
僕は、H8用のコンパイラや、他にもMinGWとかも使用していた(いや、とりあえずインストールしただけ)。そうなると、MinGWでシェルを使うと、どのgccやmakeを使っているかわからない、みたいな状態になった。
ということで、それぞれの環境できっちりとPATHを使い分けてみよう。

PATHの設定

以下の3つのツールのPATHを設定する。

  • Cygwin
    Cygwinに関しては、環境変数PATHの設定と共に、.zshenv、.zshrcも掲載しておきたい。また、fstabでWindowsC:/Users/{ユーザ}/ディレクトリをCygwinでの/home/{ユーザ}/ディレクトリとして設定する。加えて、Cygwin起動時、zshが起動するようにする。
  • MinGW(MSYS)
    bashなので、.bashrcでPATHを追加する。
  • gvim
    当たり前のことだが、.zshenvや.bashrcにPATHを通したからといって、gvimはその情報を知ることはできない。gvimgrepgcc、makeコマンドを使用できるのは、Windowsのシステム環境変数PATHにCygwinのbinなど通っているからだ。システム環境変数PATHに設定しないのであれば、そのままではgvimgrepやmakeができない。この場合、gvimは.vimrcでPATHを通すようにする。

CygwinのPATH設定

インストールやツール群のインストールは他の記事に譲る。
僕は、以前はかなりCygwinを敬遠していた。何が嫌だったのかというと、Cygwinの起動が異様に遅いこと。
これは、 nukino.github.io
こちらの記事が非常にわかりやすく書いてらっしゃる。
結論としては、bash_completionを使用しなければ起動は多少早くなる。
僕は余計なプロファイルの読み込みを避けるため、Cygwin起動ショートカットのプロパティを開き、[リンク先]の末尾についてある「-」をDelした。
zsherにbash_completionなど無用の長物だ。
余談はさておき、Cygwinの設定を。

[Cygwin]/etc/passwd
#自分のユーザ名を探して、末尾のbashをzshに変更
ユーザ名:*:??????:??????:U-MacWin\ユーザ名,S-1-5-21-??????????-??????????-??????????-1001:/home/ユーザ名:/bin/zsh

上記で、Cygwinの起動シェルがzshに設定される。

[Cygwin]/etc/fstab
#もともとある/cygdriveの設定をコメントアウト
#none /cygdrive cygdrive binary,posix=0,user 0 0
c:/ /c/ /cygdrive/c/ binary,posix=0,user 0 0
C:/Users/ /home/ ntfs  override,binary,auto 0 0
C:/Users/ユーザ名 /home/ユーザ名 ntfs  override,binary,auto 0 0

上記の設定で、/cygdrive/c/...としてCドライブ以下のパスを指定していたのが、/c/として指定できる。
また、C:/Users/homeに対応し、C:/Users/ユーザ名/home/ユーザ名、つまりWindowsのユーザのホームディレクトリに対応する。
こうすると、どうしてもホームディレクトリにUnix系OSのように、いろんな設定ファイルが出来上がってしまうので、嫌な人は設定しないでおこう。
この設定をすると、.bashrcや、.zshenv、.zshrcはホームディレクトリに配置することになる。

[Cygwin]~/.zshenv
#重複パス除去設定
typeset -U path
#この書き方はcsh系らしいです。
#shなら、export $path=foobar:$path
path=(
   /usr/*/bin/(N-/)
   /bin/(N-/)
   /usr/local/*/bin(N-/)
   /var/*/bin(N-/)
   /usr/sbin(N-/)
   $HOME/bin(N-/)
   $HOME/Work/cmd(N-/)
   $HOME/Work/cmd/h8300-elf/h8300-elf/bin(N-/)
   $HOME/Work/cmd/rpi-gcc/bin(N-/)
   $path
)
[Cygwin]~/.zshrc
#ヒストリの設定
HISTSIZE=20000
HISTFILE=~/.zhistory
SAVEHIST=20000
#プロンプトの設定
PROMPT='tmain %% '
RPROMPT='{`cygpath -m \`pwd\``}'

#なんの設定か忘れた
setopt auto_cd auto_remove_slash auto_name_dirs
setopt extended_history hist_ignore_dups hist_ignore_space prompt_subst
setopt extended_glob list_types no_beep always_last_prompt
setopt cdable_vars sh_word_split auto_param_keys pushd_ignore_dups
#setpot auto_menu correct rm_star_silent sun_keyboard_hack
#setopt share_history inc_append_history

#これもヒストリ系かなぁ??
h () {history $* | less}
mdcd () {mkdir -p "$@" && cd "$*[-1]"}
mdpu () {mkdir -p "$@" && pushd "$*[-1]"}

alias -s pdf=acroread dvi=xdvi
alias -s {odt,ods,odp,doc,xls,ppt}=soffice
alias -s {tgz,lzh,zip,arc}=file-roller

#viライクなキーボード操作が可能
bindkey -v

#これがzshのcompletionの設定
zstyle ':completion:*' format '%BCompleting %d%b'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' menu select=1
autoload -U compinit && compinit

随分前に「zshの本」を買って、いろいろと設定したのだが、いい具合に忘れてる。笑

zshの本 (エッセンシャルソフトウェアガイドブック)

zshの本 (エッセンシャルソフトウェアガイドブック)


ご一読されたし。

MinGWのPATH設定

またもや余談だが、H8用のコンパイラは以下から入手できる。
KPIT GNU Tools
僕は、KPITのtoolchainのソースを、Windows上でコンパイルして作成してみよう、という試みに出た。
それはまさに地獄の始まりであった…(´;ω;`)
Cygwinでは、gccコンパイラ複数あって、i686-pc-cygwini686-pc-mingw32、i686-w64-mingw32、x86_64...などなどある。
とりあえずCygwin環境でH8用のコンパイラが使えればええわと思って、configureで特に--hostとか--buildとか設定せずコンパイルしていったのだが、なかなかできない。
gmp、mpfr、mpcなどのライブラリは用意したし、いろんな情報を参照しながらやったけど、結局ダメで、MinGWでも無理かなぁ??と思ってこっちでやったけど、やっぱり無理で気がつけば3週間ほど経っていたので、まさにteratailのウェブ広告のような状態だった。笑
https://s-media-cache-ak0.pinimg.com/736x/d3/01/a8/d301a87d37e512ecc42156f02a980f6a.jpg
きちっとWindows環境でtoolchainが作成できればブログ書こうと思ってたのに、予想を遥かに超えてうまくいかなかった。今はもう諦めてKPITのインストーラからインストールして使用させて頂いている…
.bashrcはサラッと終わらせよう。

[MSYS]~/.bashrc
PATH="${HOME}/bin:${PATH}"
PATH="/c/Users/ユーザ名/Work/cmd/MinGW/bin:${PATH}"
PATH="${HOME}/kpit/chain/bin:${PATH}"

上記のPATH="/c/foo/bar:${PATH}"ように設定すれば、PATHを追加できる。MinGWはあまり使用しないので、必要以上に設定を変更しないようにしている。

gvimのPATH設定

gvimにPATHを通すには、.vimrcに以下のような記述を追加する。

[gvim].vimrc
let $path=$path.';'.$HOME."\\Work\\cmd;"
let $path=$path.$HOME."\\Work\\cygwin\\bin;"
let $path=$path.$HOME."\\Work\\cmd\\h8300-elf\\h8300-elf\\bin;"
let $path=$path.$HOME."\\Work\\cmd\\rpi-gcc\\bin;"
let $path=$path.$HOME."\\Work\\gvim;"

つまり、let $path=でシステム環境変数PATHの設定が可能ということだ。
そう、もともとインストーラでインストールしたH8用のコンパイラに、なんの不満もなかったのだが、KOZOSのソースをgvim上でコンパイルして、エラー箇所に飛ぼうとして飛べない、ということがgccソースコンパイルをしようと思ったきっかけだった。
しかし原因は他にあり…
次回の記事にきっちり書かせてもらおう。
今回も誰得記事、しっかり書かせていただいた。

近況。2015-12-21

転職。そしてやはりIT業界へ。

最近まで僕は、しがないローカル工場で働いていたのだが、その会社に勤めながら、虎視眈々と転職の機会をうかがっていた。
僕は一度プログラマを経験してから、趣味と仕事は完全に分けたほうがいい、と思い込んでいて、ソフト屋と退職してから全然違うジャンルの会社に勤めようと思った。
けれど、全然好きでないこと、全く好きになれそうにないものを一日8時間以上毎日続けるとなると、苦痛以外の何物でもなくなる。
当たり前のことだが…。
来年からは晴れてSEだ☆
厳密には自分の趣味とは異なる範囲の仕事だが、ジャンルとしては近い。
良い相乗効果になることを期待して、よし、今後は趣味も仕事もがんばるぞー♫

ウェブは都市を形成した

インフォメーション・テクノロジーの世界

近年のメディア接触時間がすごい。

www.garbagenews.net

僕はあまりテレビは見ないが、その代わりスマートフォンとPCとの接触時間がエグいくらい長い。 用途はいろいろあるが、青空文庫はてなブログFacebookとブラウザでいろいろ調べるのとAmazonで欲しいもの探すのと…きりがない。
でも、使い方をきっちり決めれば、こんなに便利は道具はない。しかし、その使い方が難しい、よくわからないモノ、というのも多々ある。

ブログの行方

ブログを書き始めて、人のブログをよく読むようになったのだが、僕はブログの使い方を少々間違えているのだろうか??と思う時がたまにある。 最近はsshサーバ構築手順なんかを掲載していて、今後はWebサーバの手順を書こうと思ってたけど、もうWebサーバ立て終わってしまって、書く気になりましぇん。 僕がよく読むブロガーさんは、関数型言語に対する熱い熱い想いを書いていたり、苦慮の末、海外で技術者やろうと闘ってたり、親方に空からドラえもんが…したりする人がいて、「思いの丈」を書いている人が多く、読んでいてすごく面白い。気持ちが伝わる。もちろん、開発手順なんかを書いてる人もいるけれど、もしかして自分はちょっとずれてるかも、と思い始めた。
やはり僕はブログの使い方を間違えているのだろうか??
技術的な一連の作業なんかは、ホームページ作って掲載すべき??
プログラミングツールのTipsなんかはQiitaに投稿すべきだろうか??

ということで今回は、現在、有象無象に存在するウェブサービスは一体どういう目的で使うべきなのかまとめてみようと思う。
そうすると、僕のブログの行方も定まるのではなかろうか。

ウェブサービス convert 現実世界

ジャンルは問わず、とにかくよく目にするウェブサービスクラウドなんかをピックアップしていく。
それを、「現実世界ならこれは何に置き換えられるか」を考えてみたい。

ブログ(Web log) = 公開日記、公開ノート

f:id:tokixy56:20151027203132p:plain
言わずと知れたサービス。
今はAmebaブログ、Seesaaはてなブログlivedoorブログ、FC2ブログココログなんかが有名だろう。
意味を「日記」だけに限定するとちょっと違う気がするので、自分の記録を公開している、というイメージでノートの役割も果たしているといえそう。

メール = お手紙

f:id:tokixy56:20151027214126j:plain
言葉を大事にするときには、メールを利用しよう。
もちろん、最たる大事な言葉は手書きで手紙を書くのが一番だ。
僕はできうる限り言葉を大事に扱いたい。
なので、次のサービスはあんまり…

LINE = 井戸端会議

f:id:tokixy56:20151027214343p:plain
めちゃめちゃ使ってるけどね。
使ってるんだけどね。
グループなんかでやってるとめちゃおもろい時もあるけどね。
大事なのは、LINEとメールの使い分け!!
大事な言葉はあくまで「メール」が良いと思うよ!!
ただ、やっぱり複数人でやり取りをする場合には、LINEはすごく使いやすい。
使っていると、LINE利用者数がメール利用者を上回る理由がよく分かる。
日常的な「会話」はLINEなんだな。

Twitter = (ちょっと周りに聞こえて欲しい)本気の独り言、街の雑音

f:id:tokixy56:20151027203757p:plain
語ることなし。
もう「つぶやき」そのままの意味だと思う。
「ささやき」とも考えられる。
現実世界に例えるならば、都会の雑音、騒音…もちろん、中には気になる声もあって。
気になるあの人が思考垂れ流してるの見れるのは、今の時代ならではだと思うし、斬新なサービスだ。
時折クレイジーが混ざってるけど、気にしない気にしない。

Facebook = 学校、職場

f:id:tokixy56:20151027203809p:plain
友達の友達、くらいまで繋がる学校とか職場のコミュニティのようなものだと思う。
「ここ行ってきたよ☆」とか「こんなことしたんだ♬」って見せる場だな。
僕もよく「見て見て!!」って動画とか写真とかアップしたりする。
友達の近況とか見れて面白い。

2チャンネル = 掲示板、街なか・トイレの落書き

f:id:tokixy56:20151027204950j:plain
ここまでのこのブログは、ご覧の種々のサービスを肯定的に捉えています。(ご覧のスポンサーの提供でお送りします的な)
2ちゃんねるを否定するわけではない。
まるで表現の自由の魔城の様なサービスだ。
様々なネットスラングもここを介して創生される。
ただ、トイレの落書きを彷彿とさせるくらい、表現があまりにも下劣な場合があるので、使用の際は注意しよう。
ぬるぽ」「ガッ」

検索エンジン = 街の案内所

f:id:tokixy56:20151027210217j:plain
基本的にユーザがインターネットに繋がっていると意識するのは、ブラウザを使ってワードを検索している時が多んじゃないだろうか。
そう、聞いた場所(アドレス)を答えてくれる、検索エンジンは街の案内所だ。
では、これは??

ブラウザ = 自動車の窓 どこでも窓!!

f:id:tokixy56:20151027205753p:plainf:id:tokixy56:20151027205757j:plain
街の案内ドライブスルーで場所を聞いて、自動車で目的地へひとっ飛び!!
ADSLの時代はそうだった。
しかし今は光の時代。
通信速度が速すぎて、家の窓を開けると案内所、開き直すと目的地、みたいな。

DropboxGoogleドライブ、OneDrive、SugarSync = 貸し倉庫? バイオハザードの道具箱?

f:id:tokixy56:20151027211355j:plain
僕はDropbox大好きです。
どこでも貸し倉庫だこれは。
スマートフォンでもWindowsでもMacでもLinuxでも!!
って考えると、バイオハザードの道具箱の考え方は素晴らしいよなぁ。

ホームページ = 我が家、店舗、ショッピングモール

f:id:tokixy56:20151027212749p:plain
トリオの言わせない方じゃなくて、しっかり紹介したいものを言わせる方。
どんな商売でも、看板、店構えが大事で、ウェブを介して商品を売買する企業にとっては、もろに顔といえるし、企業にとっては本当に商品展示場所の様な作りにもなる。
もちろん、その部屋から商品閲覧、買い物カゴ、レジへと繋がるのならば、その作りは非常に大事だ。
Amazon、ロハコ、ヤフオク楽天などは、「大型ショッピングモール」の域である。

Skype = ほぼリアル対話

f:id:tokixy56:20151027213205p:plain
もう、ここまでしたらほぼリアル遭遇だよね。
遠い外国で働く愛しい人。
片道20時間が今やリアルタイムで会うことができる。
うーん、でも余計「マジ会い」したくなるだろうな!!ww

まだまだまだまだ、いろんなサービスがあるけれど、もうこんなもんにしとこうか。

行きたい時に、行きたい所へ on ウェブ

僕の好きな作家さんはいう。
「誰かに会いたいと思う気持ちが、そのままその人との距離となる」
ネットワークを介することで人々はいろんな場所へ行ける、人に会える。
人と接触する、と言うのは物理的なものでなく、精神的なものであるべきだ、ということも示唆してくれる。
ウェブ上に形成された都市は、経路を持たない。
通る道、道路などないのだ。
行きたい所へ直接接続される都市。
君が今 すぐに会いたい 人は誰?

そして、僕のブログは。

すぐに僕に会いたいと思っている人が多数いるだろうと思う。
そんな人がいつでも楽しみにして来れるようなブログを書きたいと思います☆

答えになってないけれど、要するに、
自分が書きたいものをなんでも良いから書けるだけ書く
ようにしていきますので、読者の方々これからもよろしくご指導お願いします。

Raspberry Pi でサーバ構築③(ssh公開鍵編)

公開鍵の理論

sshでシステムにログインする場合、アカウントの認証のために、公開鍵暗号を利用することが一般的である。
理由はもちろんセキュリティ上の問題で、悪意のある第三者が不正にログインすることを防ぐためである。
また、単純にファイルの転送などを行う場合にも、そのファイルに暗号をかけて送受信したりする場合もある。
暗号鍵には、基本的な概念として、以下の2つの暗号方式がある。

  • 共通鍵暗号方式
    暗号をかける方と暗号を解く方が同じ鍵を利用する。
  • 公開鍵暗号方式
    暗号をかける方と暗号を解く方が異なる鍵を利用する。

共通鍵暗号方式と、その問題点

共通鍵暗号方式では、暗号をかける側、あるいは解く側が、暗号に利用する鍵を1つ用意する。
その鍵を「どうにかして」鍵作成者から利用者へ送り届ける。
そして、暗号をかける人と解く人が同じ鍵を利用して暗号のかけられた文書を転送し合う。

共通鍵暗号方式

f:id:tokixy56:20151012175749j:plain ここで問題となるのは、①の「鍵の届け方」である。
例えば、鍵をそのままの形でメールなどで送ってしまえば、鍵データを盗まれてしまう可能性がある。
もちろん物理的に手書きのものを渡すこともできるかもしれないが、何キロも離れた人物に渡すのは現実的ではない。
公開鍵暗号方式は、その「鍵の転送問題」を解決するため誕生した。

公開鍵暗号方式 (RSA)

その理論は、非常に難解であった。笑

公開鍵暗号方式(RSA) 公開鍵の作成

f:id:tokixy56:20151012180716j:plain
充分に大きな素数とモジュラー算術が要となっている。
この公開鍵を、サーバ上などに公開する。

公開鍵暗号方式(RSA) 秘密鍵の生成

f:id:tokixy56:20151012181934j:plain
このとき、(p-1)(q-1)は、他者に知られないようにする。
これが秘密鍵の要となる。
したがって、この鍵はネットワークなどを通じて転送するべきではない。

公開鍵暗号方式(RSA) 復号

f:id:tokixy56:20151012181947j:plain

また、この公開鍵暗号方式は、モジュラー算術における指数演算が、一方向関数であり、逆向きに計算して復号するのは極めて困難である、ということを根拠にして利用されている。
したがって、公開鍵がわかったからといって、元のメッセージは簡単に計算できない。

公開鍵暗号方式(RSA) 例

f:id:tokixy56:20151012184651j:plain 上記の例では、素数を11、17としているが、実際にはもっと大きな素数とする。
秘密鍵の生成は簡単にはいかないが、ユークリッドの互除法を用いれば比較的簡単に求めることができる、らしい。
非常に難解ではあるが、詳しく知りたい人は、暗号文の歴史とともに、この本を読んでみると良いかもしれない。

www.amazon.co.jp

ssh公開鍵の設定

と、本題に入ろう。
実際にsshサーバに公開鍵を設定する場合、公開鍵の理論など全く知る必要がない。
我々は、それも知らずにありがたく利用させてもらおうではないか。笑

ssh公開鍵の作成

今回はTeratermSSH公開鍵の生成機能を利用する。
クライアント側がLinuxなどのUnix環境、あるいは、Cygwinなど利用できる環境である場合、ssh-keygenコマンドを利用すれば、公開鍵、秘密鍵を作成することができる。

Teraterm ssh公開鍵の作成

Teratermを起動し、メニューの[設定]→[SSH鍵生成...]を選択。
f:id:tokixy56:20151012210642p:plain
下記の画面が表示され、RSAが選択されていることを確認したら、生成ボタンをクリック。
f:id:tokixy56:20151012211054p:plain
一度生成ボタンをクリックすると、下記のように、パスフレーズ入力テキストボックスに入力できるようになるので、どちらのテキストボックスも同じパスフレーズ(パスワード)を入力する。
コメントは「メインPCで作成」とか入力しとけばよし。
パスフレーズ(パスワード)入力後、もう一度生成をクリック。
f:id:tokixy56:20151012211344p:plain
[公開鍵を保存]、[秘密鍵を保存]でそれぞれの鍵を保存する。
ここで保存した公開鍵、id_rsa.pubを、RPiへ転送する。

RPi(サーバ)側の設定

前回の記事では、Sambaの設定をした。
tokixy56.hatenablog.com
※ちなみに、ちょっとまずい部分があったので、前回の記事も修正している…汗
Windowsの[ネットワーク]から、RPiのディレクトリを探して、id_rsa.pubファイルを転送しておこう。
転送が終わったら、sshでRPiに接続する。
ファイルを転送したディレクトリに移動し、以下のようにする。

RPi 公開鍵の設定f:id:tokixy56:20151012225942p:plain
$ mkdir ~/.ssh
$ sudo mv id_rsa.pub ~/.ssh/authorized_keys

次に、sshd設定ファイルを編集する。

sshd設定ファイルの編集 /etc/ssh/sshd_config
#...33行目あたり...
#以下のコメントを外す
AuthorizedKeysFile %h/.ssh/authorized_keys
#以下の行を追加
PasswordAuthentication no

上記の編集が完了したら、sshデーモンをrestartする。

$ sudo /etc/init.d/ssh restart

これで、RPiに接続する際には、id_rsa秘密鍵を使用して接続しなければなくなった。

RPi 公開鍵(秘密鍵)を使用したssh接続

これもTeratermを利用する。
Unix系、Cygwin等であれば、以下のコマンドで接続できるであろう。

$ ssh ユーザ名@192.168.x.xxx -i id_rsa

あとは、パスフレーズ(パスワード)を入力すればいい。

Teratermでは以下のように接続する。

Teraterm 秘密鍵ssh接続

f:id:tokixy56:20151012225833p:plain
IPアドレス(今回は例として192.168.0.150を使用)を入力し、接続。
下記のようなウィンドウが表示される。
f:id:tokixy56:20151012225942p:plain
ユーザ名、ssh公開鍵を作成した時と同じパスフレーズを入力し、[RSA/DSA/ECDSA/ED25519鍵を使う]にチェックを入れ、[秘密鍵]ボタンをクリックすると、ファイル選択ダイアログボックスが表示されるので、先ほど作成した秘密鍵を選択する。
設定完了後、[OK]ボタンをクリックすると、接続完了だ。

次回予告

Apacheの設定でもしたいなと思う。
gitサーバを立ち上げることは今のところあまり考えていない…
github使うのがやっぱり良いですよね。
CGIRuby on Railsでやってみたいなぁと思う。
Pythonも興味あるけど、やっぱりまつもと氏リスペクトです。