17 Aug 2014, 03:46

2014 WordPress テーマを 賢威 6.2 にバージョンアップしました

1 年ぶりにサイトデザインを変更しました.

このブログをはじめて 2 年経ち, 2 度目のテーマ変更です.

ScreenShot

Futurismo

Futurismo wiki

Motivations

1 年前のテーマはやりっぱなしテーマ

一年前に, ブログカスタマイズを熱心にやっていた.

賢威 6.2 を導入

このブログは, 開設当初から 賢威テーマを採用している.

この賢威テーマは有料なのだけれども, いいところは毎年無料でバージョン アップができるところ. 賢威 6.0 は一年半前のテーマなので, やや古さを 感じてきた.現在は, 6.2 なので, バージョンアップしたかった.

ダークなテーマに変更したかった

自分の普段の PC 環境が, 黒系を中心にまとめるようになった.

よって, ブログもまるで Emacs の Dark Themes のような色にしたかった.

もちろん, その色は SEO 的には悪い気がする.暗くジメジメしたようなイ メージをあたえかねない.

しかし, 自分のブログなど, 深海 5000m に潜む深海魚のような存在でいい んだ! 深海魚だって, ひとにみられていなくたって, 驚くような進化を遂 げているのだ!

テーマカスタマイズ

賢威テーマは毎年バージョンアップをするために, そのたびごとにテーマ をカスタマイズしていたら, 面倒だ. そのため今回は, 今後のメンテナン スがしやすいような工夫をした.

Docker 導入

簡単に ローカルでの WordPress カスタマイズ環境を手に入れるために, Docker を利用した.

以前は, Windows 上で カスタマイズしていたけれども,これに比べればものすごく簡単だった.

git で版数管理

版数管理をしながら PHP ファイルや HTML ファイルを編集した.

移行前と移行後の差分を git を利用して見ることで, 修正部分がとても分か りやすくなった.

まとめ

ブログのカスタマイズを毎年することが恒例行事になってきた.

そして, 年を重ねるごとに自分のスキルが上がっていることに気づく.1 年 前では考えつかなかった方法で, カスタマイズをしようとする.こういう発 見を重ねることは楽しいことだ.

また, まとめといいつつ, ブログのテーマ移行はまだ半分くらいしか終わっ ていない. このまま中途半端で 1 年が過ぎる可能性がある. ここでおわっ てしまっては, 完全にレベルダウンだ. . :(

15 Aug 2014, 12:33

WordPress ローカル環境が 5 分で構築できるか? Docker の都市伝説を検証してみた

はじめに

WordPress のテーマをカスタマイズするローカル環境が欲しかった.

Docker を利用すれば, お気楽お手軽に実現できるという都市伝説を聞い た.Docker はもともと試してみたかったし, 以前 Docker Hub のアカウント も取得したのだけれども, 利用していなかった.

これを機に, Docker の勉強も兼ねて, 以下の都市伝説を検証してみた.

“WordPress ローカル環境が 3 分で構築できるか?”

Docker とは

Docker とは, OSS の Linux コンテナエンジン.

特徴

  • Go でかかれている.
  • Linux カーネルにのみ依存.
  • デプロイの作業が自動化できる.
    • github, bitbucket とも連携.
  • Docerfile によってインフラをコードとして扱える.
  • ゲスト OS がなくカーネルを共有しているのでオーバヘッドが非常に少ない
    • ディスク使用量は少ない.
    • インスタンス作成やインスタンス起動は速い
    • 性能劣化がほとんどない
  • Linux コンテナ上ならば同じ環境が再現できる (Java と同じ考え)
  • クライアント・サーバ型のアーキテクチャ

Linux コンテナとは

いくつかのユーザプロセスをまとめて閉じ込めたユーザ空間. コンテナ内で動くプロセスは通常のプロセスと同じもの.

ハイパーバイザとの比較

From: コラム - クラウド時代のオープンソース実践活用 | 第 41 回 Linux コンテナ (LXC) の基礎をまとめ直す|CTC 教育サービス 研修/ トレーニング

  • コンテナ
    • 1 つの OS.
    • カーネル空間共有, ユーザ空間が別々
  • ハイパーバイザ
    • 独立した複数 OS
    • カーネル空間, ユーザ空間が別々

Dockerfile とは

OS のスクラッチイメージからアプリが動くまでを書いたコード.

Bookmarks

Docker で Hello World

インストールから Hello, World まで.

Install

ArchLinux

  • Docker (日本語) - ArchWiki

    # インストール
    $ sudo pacman -S docker
    # サービス登録. Docker は OS のサービスとして動作する.
    $ sudo systemctl start docker
    # 動作確認 docker がクライアントコマンド
    $ dockker info
    # 一般ユーザを sudo なしで docker をつかえるようにする
    $ sudo gpasswd -a tsu-nera docker
    

使ってみる

Hello, World

まずは, 定番の Hello World をしてみる. コマンドラインから,

$ sudo docker run ubuntu /bin/echo 'Hello World'

これを叩くと, ローカルに docker のイメージがない場合は, Docker Hub か ら勝手にダウンロードしてくれる.

docker は image からコンテナを生成する. (クラスからインスタンスを生成するように)

% sudo docker run ubuntu /bin/echo 'Hello World'
Unable to find image 'ubuntu' locally
Pulling repository ubuntu
c4ff7513909d: Download complete 
er.io/v1/ 9d: Pulling image (latest) from ubuntu 
511136ea3c5a: Download complete 
1c9383292a8f: Download complete 
9942dd43ff21: Download complete 
d92c3c92fa73: Download complete 
0ea0d582fd90: Download complete 
Hello World

bash を起動

bash を起動して, インタラクティブに操作

$ sudo docker run -t -i ubuntu /bin/bash

イメージとコンテナ

現在保持している image は docker images で確認できる.

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               c4ff7513909d        3 days ago          213 MB
ubuntu              latest              c4ff7513909d        3 days ago          213 MB

また, 過去に生成したコンテナも含めて一覧を確認するコマンドは docker ps -a.

 % docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                      PORTS               NAMES
78941163261a        ubuntu:14.04        /bin/bash              12 minutes ago      Exited (0) 11 minutes ago                       clever_perlman       
894d649c27d4        ubuntu:14.04        /bin/echo 'Hello Wor   13 minutes ago      Exited (0) 13 minutes ago                       stupefied_rosalind   
9d34b4889593        ubuntu:14.04        /bin/echo 'Hello Wor   14 minutes ago      Exited (0) 14 minutes ago                       romantic_bohr        
a986cb096871        ubuntu:14.04        /bin/echo 'Hello Wor   15 minutes ago      Exited (0) 15 minutes ago                       tender_sinoussi      
cbbca1119327        ubuntu:14.04        /bin/echo 'Hello Wor   15 minutes ago      Exited (0) 15 minutes ago                       mad_babbage          
c6824e447da7        ubuntu:14.04        /bin/echo 'Hello Wor   17 minutes ago      Exited (0) 17 minutes ago                       sleepy_bardeen       

とりあえず, すべてを一旦削除したい.コンテナをすべて削除.

$ sudo docker rm $(sudo docker ps -a -q)

続いて, イメージもすべて削除.

$ sudo docker rmi $(sudo docker images -q)

秀逸なガイダンス.

Docker Architecture.

Docker で WordPress 環境を構築

さて, 本題.

wordpress image を取得

もちろん, Docker Hub に wordpress のイメージがあった. tutum/wordpress というリポジトリが導入が導入が簡単だとの評判.

ローカル環境に落として実行.

$ sudo docker run -d -p 80:80 tutum/wordpress

まつこと数分・・・ http://localhost にアクセスしてみると・・・

インストール完了!! 都市伝説は本当だった!

ssh でもやっぱりアクセスしたい

しばらく喜んでたけど, なんだか ssh でコンテナにアクセスしたくなって きたので, 設定.

まずは, コンテナの中に入る.

$ sudo docker run -t -i tutum/wordpress /bin/bash

コンテナの中で openssh-server を立ち上げ.パスワードを設定.

apt-get install openssh-server
mkdir /var/run/sshd
/usr/sbin/sshd
passwd root
exit

root でアクセスできるように設定変更.

vi /etc/ssh/sshd_config
PermitRootLogin  yes

run.sh に sshd が勝手に起動するように修正.

vi run.sh

# 追加
/usr/sbin/sshd -D &

ここまでの作業を commit.

docker commit ${ID} tsune/wordpress

自分で作成したイメージを起動. -p 20 で ssh 用のポートを別のものに割り 当てる.

docker run -d -p 22 -p 80:80 tsune/wordpress

最後に, ifconfig で docker0 に割り当てられている ip と, docker ps で 22 に割当たっているポートナンバをしらべて, ssh.

$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 172.17.42.1  netmask 255.255.0.0  broadcast 0.0.0.0

$ docker ps
0.0.0.0:49157->22/tcp

$ ssh root@172.17.42.1 -p 49157

Docker 関連技術まとめ

Docker Hub

Docker コンテナをクラウドサービス上で共有できる.

Boot2Docker

Boot2Docker を利用すると, Windows 上で Docker を動かすことが可能となる. Very Cool Feature.

- Microsoft Windows - Docker Documentation

Panamax

Docker コンテナを GUI で利用することができる.Very Cool Feature.

おわりに

本当に, あっという間に WordPress の環境が手に入った. しかし, この記事を書くのに, 2 時間かかった!

プロセスは通常時のものとほぼ同等リソースを食わないというところが, VirtualBox よりも気に入った. VM 環境は重くてリソースを喰うのが嫌い.

普段 Linux を利用している自分としては, 発想次第でいろいろ応用できそうだ.

15 Aug 2014, 05:37

Dokuwiki の SEO カスタマイズ作業メモ

はじめに

以前, 高らかに Futurismo Wiki の立ち上げを宣言しました.

宣言しただけで, ちっともカスタマイズしていなかったので, カスタマイズ してみました.本記事は, その作業メモ.

とくに, SEO に関する情報についてまとめてみました.

SEO 対策

SEO Tips

<div class="outline-text-3" id="text-2-1">
  <p>
    SEO につよい設定方法は以下にある.これはすごい.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://en.seowiki.info/best_practices/seo_optimized_dokuwiki/basic_configuration">SEO Optimized DokuWiki: Basic Configuration</a>
    </li>
  </ul>

  <p>
    簡単なメモ.
  </p>

  <ul class="org-ul">
    <li>
      <p>
        URL 上の名前空間の区切りにスラッシュを使用 -> On
      </p>

      <ul class="org-ul">
        <li>
          ページのランクをさらに高める?
        </li>
      </ul>
    </li>

    <li>
      <p>
        canonical URL (正準 URL) を使用 -> On
      </p>
    </li>

    <li>
      <p>
        文書が存在しないページに&#8221;HTTP404/Page Not Found&#8221;を使用 -> On
      </p>
    </li>
  </ul>
</div>

Google にインデックスの許可

<div class="outline-text-3" id="text-2-2">
  <p>
    管理者メニュー > サイト設定から
  </p>

  <ul class="org-ul">
    <li>
      <p>
        rel=&#8221;nofollow&#8221;を付加 -> Off に
      </p>
    </li>

    <li>
      <p>
        インデックスを許可 (何秒後) -> 0 に
      </p>

      <ul class="org-ul">
        <li>
          <a href="http://hain.jp/index.php/tech-j/2007/11/12/p191">dokuwiki が検索エンジンに載りにくい理由 &#8211; ぎじゅっやさん</a>
        </li>
      </ul>
    </li>
  </ul>
</div>

Google ウェブマスターツール

<div class="outline-text-3" id="text-2-3">
  <p>
    default では, サイトマップが作成されないので設定する.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://www.dokuwiki.org/ja:sitemap">ja:sitemap </a>
    </li>
  </ul>

  <p>
    管理者メニュー > サイト設定から
  </p>

  <ul class="org-ul">
    <li>
      Google サイトマップ作成頻度 (日数) -> 1
    </li>
  </ul>

  <p>
    これで, サイトマップが作成されるようになった. doku.php?do=sitemap に アクセスすると, サイトマップが取得できる.
  </p>

  <p>
    Google ウェブマスターツールにサイトを登録して, サイトマップの URL で doku.php?do=sitemap を指定して, 登録完了.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://www.google.com/webmasters/tools/home?hl=ja">https://www.google.com/webmasters/tools/home?hl=ja</a>
    </li>
  </ul>
</div>

Google Analytics for DokuWiki

<div class="outline-text-3" id="text-2-4">
  <p>
    Google Analytics でアクセス解析.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://en.seowiki.info/best_practices/seo_optimized_dokuwiki/integration/google_analytics">SEO Optimized DokuWiki: Google Analytics Integration</a>
    </li>
  </ul>

  <p>
    まずは, Google Analytics でトラッキング ID 取得.
  </p>
</div>

<div id="outline-container-sec-2-4-1" class="outline-4">
  <h4 id="sec-2-4-1">
    DokuWiki の設定
  </h4>

  <div class="outline-text-4" id="text-2-4-1">
    <ul class="org-ul">
      <li>
        <p>
          Google Analytics DokuWiki Plugin をインストール
        </p>

        <ul class="org-ul">
          <li>
            <a href="https://www.dokuwiki.org/plugin:googleanalytics">plugin:googleanalytics</a>
          </li>
        </ul>
      </li>

      <li>
        <p>
          サイト設定画面で,
        </p>

        <ul class="org-ul">
          <li>
            [Google Analytics ID]:にトラッキング ID を入力
          </li>
          <li>
            [Don&#8217;t count admin/superuser]:チェック
          </li>
          <li>
            [Don&#8217;t count logged in users]:チェック
          </li>
        </ul>
      </li>
    </ul>
  </div>
</div>

Google Adsense

<div class="outline-text-3" id="text-2-5">
  <p>
    アドセンスもテーマに挿入出きるみたい.ただ, Wiki のデザインを大切にし たいので, この Wiki には広告はいれないことにした.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://tsuyushiga.hatenablog.jp/entry/2014/03/02/000748">【その他】 Dokuwiki に GoogleAdSense の広告を表示する &#8211; tsuyushiga&#8217;s blog</a>
    </li>
  </ul>
</div>

おわりに

なにもしないと, Google 検索にまったくひっかからないんだということを 今更ながら知りました orz.

14 Aug 2014, 13:51

英語力を向上させたいのでまずは Emacs からはじめた

英語の Writing/Speaking 力を鍛えるためには?

英語で自分の考えを自由に表現できない

<div class="outline-text-3" id="text-1-1">
  <p>
    最近英語で話す機会が多いのだが, 自分の考えをうまく表現できずにくやしく思うことが多い.
  </p>

  <p>
    MOOC のおかげで, Listening 力はバリバリに向上を感じるのだが, 次に鍛えるべきところは, 自分の考えを不自由なく表現する力だと感じる.
  </p>

  <p>
    すなわち, 以下だ.
  </p>

  <ul class="org-ul">
    <li>
      Writening
    </li>
    <li>
      Speaking
    </li>
  </ul>

  <p>
    英単語がわからなくても, 簡単な言葉に言い直せば表現できる. しかし, スラスラと表現することが難しい.
  </p>
</div>

もっとも効果的な手段は?

<div class="outline-text-3" id="text-1-2">
  <p>
    もっとも効果的な手段はなんだろうか?
  </p>

  <p>
    間違っていてもいいので, とにかく日常のなかで英語で表現する機会を増やすことだと思った.
  </p>

  <p>
    自分の日常のほとんどはパソコンをいじっている. パソコンでする作業のほとんどで, Emacs を利用している. つまりは,
  </p>

  <p>
    Emacs の英語学習環境を整える
  </p>

  <p>
    これが, もっとも英語上達に効果的な方法なのではとおもう.
  </p>

  <p>
    というわけで, ペテンな前置きが長くなったが, 英語学習に役立ちそうな EmacsLisp を集めてみる.
  </p>
</div>

前提条件

環境

<div class="outline-text-3" id="text-2-1">
  <ul class="org-ul">
    <li>
      Arch Linux
    </li>
    <li>
      Emacs 24.4
    </li>
  </ul>
</div>

強化するモード

<div class="outline-text-3" id="text-2-2">
  <p>
    今考えている英語強化法は,
  </p>

  <ul class="org-ul">
    <li>
      英語の日記を書く
    </li>
    <li>
      英語で twitter でつぶやく
    </li>
  </ul>

  <p>
    なので, org-mode と twitter-edit-mode を対象にしようと思う.
  </p>
</div>

英語力をあげる Emacs Lisp

WEB 検索

<div class="outline-text-3" id="text-3-1">
</div>

<div id="outline-container-sec-3-1-1" class="outline-4">
  <h4 id="sec-3-1-1">
    google-translate.el
  </h4>

  <div class="outline-text-4" id="text-3-1-1">
    <p>
      ご存知, Google 翻訳.これはめっちゃいいや!!
    </p>

    <ul class="org-ul">
      <li>
        <a href="https://github.com/manzyuk/google-translate">https://github.com/manzyuk/google-translate</a>
      </li>
    </ul>

    <p>
      設定はこのページを参考にしました. どうもありがとうございます.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://qiita.com/catatsuy/items/ae9875706769d4f02317">卒論を英語で書けと言われしまったあなたにおすすめの Emacs の設 定 &#8211; Qiita</a>
      </li>
    </ul>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (require &#8216;google-translate)
    </p>

    <p>
      (global-set-key "\C-xt" &#8216;google-translate-at-point)<br /> (global-set-key "\C-xT" &#8216;google-translate-query-translate)
    </p>

    <p>
      ;; 翻訳のデフォルト値を設定 (ja -> en) (無効化は C-u する)<br /> (custom-set-variables<br /> &#8216;(google-translate-default-source-language "ja")<br /> &#8216;(google-translate-default-target-language "en"))
    </p>

    <p>
      ;; google-translate.el の翻訳バッファをポップアップで表示させる<br /> (push &#8216;("*Google Translate*") popwin:special-display-config)<br /> [/sourcecode]
    </p>
  </div>
</div>

<div id="outline-container-sec-3-1-2" class="outline-4">
  <h4 id="sec-3-1-2">
    google-this
  </h4>

  <div class="outline-text-4" id="text-3-1-2">
    <p>
      Google 検索.おまけで翻訳機能もついている.
    </p>

    <p>
      google-translate があればいらないか? とりあえずいれとく.
    </p>

    <ul class="org-ul">
      <li>
        <a href="https://github.com/Bruce-Connor/emacs-google-this">Bruce-Connor/emacs-google-this</a>
      </li>
    </ul>

    <p>
      代表的な使用方法.
    </p>

    <ul class="org-ul">
      <li>
        C-c / g (RET) でその場のキーワード検索.
      </li>
      <li>
        C-c / w でその場のワードを検索
      </li>
      <li>
        C-c / l でその行を検索
      </li>
      <li>
        C-c / c Google 翻訳
      </li>
    </ul>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (require &#8216;google-this)<br /> (google-this-mode 1)<br /> [/sourcecode]
    </p>
  </div>
</div>

<div id="outline-container-sec-3-1-3" class="outline-4">
  <h4 id="sec-3-1-3">
    search-web.el
  </h4>

  <div class="outline-text-4" id="text-3-1-3">
    <p>
      無料でオンラインの英辞郎 on the WEB をサクッと利用する.
    </p>

    <ul class="org-ul">
      <li>
        <a href="https://github.com/tomoya/search-web.el/tree/master">tomoya/search-web.el</a>
      </li>
      <li>
        <a href="http://qiita.com/akisute3@github/items/8deb54b75b48e8b04cb0">Emacs 使用中に素早く検索する &#8211; Qiita</a>
      </li>
      <li>
        <a href="http://d.hatena.ne.jp/tomoya/20090703/1246610432">Emacs ですぐに単語の検索をしたい欲望を叶える Elisp. &#8211; 日々, とん は語る. </a>
      </li>
    </ul>

    <p>
      キーバインドはつけていない.
    </p>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (require &#8216;search-web)<br /> [/sourcecode]
    </p>
  </div>
</div>

<div id="outline-container-sec-3-1-4" class="outline-4">
  <h4 id="sec-3-1-4">
    codic.el
  </h4>

  <div class="outline-text-4" id="text-3-1-4">
    <p>
      エンジニアのためのネーミング辞書.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://codic.jp/">codic &#8211; デベロッパーのためのネーミング辞書</a>
      </li>
      <li>
        <a href="https://github.com/syohex/emacs-codic">syohex/emacs-codic</a>
      </li>
    </ul>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (require &#8216;codic)<br /> [/sourcecode]
    </p>
  </div>
</div>

文法チェック系

<div class="outline-text-3" id="text-3-2">
</div>

<div id="outline-container-sec-3-2-1" class="outline-4">
  <h4 id="sec-3-2-1">
    fly-spell.el
  </h4>

  <div class="outline-text-4" id="text-3-2-1">
    <p>
      リアルタイム, スペルチェック..これは, 大変重宝している.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.gfd-dennou.org/member/uwabami/cc-env/emacs/flyspell_config.html">Youhei SASAKI&#8217;s official site: flyspell-mode の設定</a>
      </li>
    </ul>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (require &#8216;flyspell)<br /> [/sourcecode]
    </p>

    <ul class="org-ul">
      <li>
        <p>
          <a href="http://d.hatena.ne.jp/mooz/20100423/p1">flyspell-mode の修正候補表示を popup.el で &#8211; mooz deceives you</a>
        </p>

        <p>
          キーバインドを設定.
        </p>
      </li>
    </ul>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (global-set-key (kbd "C-c <f8>") &#8216;flyspell-mode)<br /> (global-set-key (kbd "C-c <f9>") &#8216;ispell-word)<br /> (global-set-key (kbd "C-c <f10>") &#8216;flyspell-buffer)<br /> [/sourcecode]
    </p>

    <p>
      どうも flyspell と ac-complete は相性が悪い?
    </p>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (ac-flyspell-workaround)<br /> [/sourcecode]
    </p>

    <p>
      あるモードのみ flysell を起動させる.
    </p>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> ;; コメント領域のところだけ有効.<br /> (mapc<br /> (lambda (hook)<br /> (add-hook hook &#8216;flyspell-prog-mode))<br /> &#8216;(<br /> c-mode-common-hook<br /> ruby-mode-hook<br /> emacs-lisp-mode-hook<br /> ))<br /> [/sourcecode]
    </p>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (mapc<br /> (lambda (hook)<br /> (add-hook hook<br /> &#8216;(lambda () (flyspell-mode 1))))<br /> &#8216;(<br /> text-mode-hook<br /> org-mode-hook<br /> wl-draft-mode-hook<br /> twittering-edit-mode<br /> ))<br /> [/sourcecode]
    </p>
  </div>
</div>

<div id="outline-container-sec-3-2-2" class="outline-4">
  <h4 id="sec-3-2-2">
    helm-flyspell
  </h4>

  <div class="outline-text-4" id="text-3-2-2">
    <p>
      helm-flyspell は flyspell をさらに便利にしてくれる.
    </p>

    <ul class="org-ul">
      <li>
        <a href="https://gist.github.com/cofi/3013327">https://gist.github.com/cofi/3013327</a>
      </li>
    </ul>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (global-set-key (kbd "C-x g i") &#8216;helm-flyspell-correct)<br /> [/sourcecode]
    </p>
  </div>
</div>

<div id="outline-container-sec-3-2-3" class="outline-4">
  <h4 id="sec-3-2-3">
    ispell-buffer.el
  </h4>

  <div class="outline-text-4" id="text-3-2-3">
    <p>
      これも文法チェックだけど, 自分は fly-spell で満足したので,試していない.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://qiita.com/catatsuy/items/ae9875706769d4f02317">卒論を英語で書けと言われしまったあなたにおすすめの Emacs の設定 &#8211; Qiita</a>
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-3-2-4" class="outline-4">
  <h4 id="sec-3-2-4">
    grammer.el
  </h4>

  <div class="outline-text-4" id="text-3-2-4">
    <p>
      英語の文法をチェックしてくれる.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.emacswiki.org/emacs/BaoqiuCui">EmacsWiki: Baoqiu Cui</a>
      </li>
      <li>
        <a href="http://sleepboy-zzz.blogspot.jp/2013/10/emacsgrammarel_639.html">memo: Emacs で英語の文章書くのに便利な grammar.el を導入した</a>
      </li>
    </ul>

    <p>
      常に動かすとウザいので, 必要に応じて C-M-g で文法チェック発動.
    </p>

    <p>
      インストールは以下.
    </p>

    <ul class="org-ul">
      <li>
        link-grammar をインストール.
      </li>
      <li>
        <i>usr/include/link-grammar</i> にファイルが配置される.
      </li>
      <li>
        svn co <a href="http://bcui-emacs.googlecode.com/svn/trunk/grammar">http://bcui-emacs.googlecode.com/svn/trunk/grammar</a>
      </li>
      <li>
        INCDIRS = -I. -I/usr/include/link-grammar に Makefile を修正.
      </li>
    </ul>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (require &#8216;grammar)<br /> (setq grammar-program-name "~/.emacs.d/elisp/grammar/grammar")<br /> ;; 黒背景用の色変更<br /> (set-face-attribute &#8216;grammar-error-face nil<br /> :background "#Ff6347"<br /> :foreground "#000000")<br /> (add-hook &#8216;twittering-edit-mode-hook &#8216;grammar-mode)<br /> [/sourcecode]
    </p>
  </div>
</div>

入力系

<div class="outline-text-3" id="text-3-3">
</div>

<div id="outline-container-sec-3-3-1" class="outline-4">
  <h4 id="sec-3-3-1">
    auto-capitalize.el
  </h4>

  <div class="outline-text-4" id="text-3-3-1">
    <p>
      文字を大文字に直す.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://sleepboy-zzz.blogspot.jp/2013/09/auto-capitalizeel-aspell.html">memo: 英語環境で文字を大文字にキャピタライズする拡張 auto-capitalize.el を導入し た & aspell の個人辞書からもキャピタ ライズするようにした</a>
      </li>
    </ul>

    <p>
      自動で大文字に変換する.
    </p>

    <ul class="org-ul">
      <li>
        <a href="https://github.com/yuutayamada/auto-capitalize-el">https://github.com/yuutayamada/auto-capitalize-el</a>
      </li>
      <li>
        <a href="http://sleepboy-zzz.blogspot.jp/2013/09/auto-capitalizeel-aspell.html">memo: 英語環境で文字を大文字にキャピタライズする拡張 auto-capitalize.el を導入した</a>
      </li>
    </ul>

    <p>
      You can use by M-x
    </p>

    <ul class="org-ul">
      <li>
        turn-on-auto-capitalize-mode
      </li>
      <li>
        auto-capitalize-mode.
      </li>
    </ul>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> ;; This code is from README<br /> (require &#8216;auto-capitalize)
    </p>

    <p>
      ;; Enable auto-capitalize-mode<br /> (add-hook &#8216;twittering-edit-mode-hook<br /> &#8216;(lambda ()<br /> (turn-on-auto-capitalize-mode)))<br /> [/sourcecode]
    </p>
  </div>
</div>

辞書系

<div class="outline-text-3" id="text-3-4">
  <p>
    辞書系は, どれもうまく動かすことができませんでした. . . とりあえすメモとして手順を書いておく.
  </p>
</div>

<div id="outline-container-sec-3-4-1" class="outline-4">
  <h4 id="sec-3-4-1">
    sdic.el
  </h4>

  <div class="outline-text-4" id="text-3-4-1">
    <p>
      Emacs から辞書が引けるインタフェース.フリー辞書を試す.
    </p>

    <ul class="org-ul">
      <li>
        <p>
          GENE95 英和辞書
        </p>

        <ul class="org-ul">
          <li>
            <a href="http://www.namazu.org/~tsuchiya/sdic/data/gene.html">http://www.namazu.org/~tsuchiya/sdic/data/gene.html</a>
          </li>
          <li>
            gene95.tar.gz
          </li>
        </ul>
      </li>

      <li>
        <p>
          EDICT 和英辞書
        </p>

        <ul class="org-ul">
          <li>
            <a href="ftp://ftp.u-aizu.ac.jp/pub/SciEng/nihongo/ftp.cc.monash.edu.au/">ftp://ftp.u-aizu.ac.jp/pub/SciEng/nihongo/ftp.cc.monash.edu.au/</a>
          </li>
        </ul>
      </li>
    </ul>

    <p>
      <a href="http://www.edrdg.org/jmdict/edict.html"> &#8211; The EDICT Dictionary File</a>
    </p>

    <ul class="org-ul">
      <li>
        edict2.gz
      </li>
    </ul>

    <p>
      github repository.
    </p>

    <ul class="org-ul">
      <li>
        <a href="https://github.com/emacsattic/sdic">emacsattic/sdic</a>
      </li>
    </ul>

    <p>
      その他, 参考リンク.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://emacs.tsutomuonoda.com/emacs-sdic-install-setting/">Emacs 上で英和和英辞書を引くためのソフト SDIC をインストール・設定する | Emacs の elisp インストール・設定・使い方</a>
      </li>
      <li>
        <a href="http://ubulog.blogspot.jp/2007/08/emacs.html">ubulog: Emacs で快適な翻訳環境を</a>
      </li>
    </ul>

    <p>
      自分の環境では, うまく動作させることができなかった. いつか試す.
    </p>
  </div>
</div>

<div id="outline-container-sec-3-4-2" class="outline-4">
  <h4 id="sec-3-4-2">
    sdic-inline.el
  </h4>

  <div class="outline-text-4" id="text-3-4-2">
    <p>
      sdic-inline-mode がオンであると, ポイント下にある単語を辞書で自動 でひき, 結果をミニバッファに表示.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://d.hatena.ne.jp/khiker/20100303/sdic_inline">sdic-inline / ポイント下の単語の意味をミニバッファに表示する &#8211; とりあえず暇だったし何となく始めたブログ</a>
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-3-4-3" class="outline-4">
  <h4 id="sec-3-4-3">
    lookup.el
  </h4>

  <div class="outline-text-4" id="text-3-4-3">
    <p>
      オフラインの辞書 (EPWING 形式) を検索できるツール.辞書は有料なので, 試していない. かなり便利そうだ. いつか試す言う意味でブックマーク.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://openlab.jp/edict/lookup/index.html.ja">Lookup</a>
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-3-4-4" class="outline-4">
  <h4 id="sec-3-4-4">
    look.el
  </h4>

  <div class="outline-text-4" id="text-3-4-4">
    <p>
      うろおぼえな英単語の綴りを検索することができる. 詳しくは以下のリンクを参照.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs21/english.html">english & japanese</a>
      </li>
    </ul>

    <p>
      Unix の look というコマンドを Emacs から利用する.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://linuxjm.sourceforge.jp/html/util-linux/man1/look.1.html">Man page of LOOK</a>
      </li>
    </ul>

    <p>
      ArchLinux だと, 辞書が入ってなかったので入れた.
    </p>

    <p>
      [sourcecode language=&#8221;sh&#8221; title=&#8221;&#8221;]<br /> $ sudo pacman -S words<br /> $ wget http://www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs21/look.el<br /> [/sourcecode]
    </p>

    <p>
      wget で取得した, elisp に (provide &#8216;look) を末尾に追加して, 以下を追記.
    </p>

    <p>
      [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (require look)<br /> (global-set-key "\M-L" &#8216;look-here)<br /> [/sourcecode]
    </p>

    <p>
      これは, helm-flyspell と比べると, 利便性では劣る気がする.
    </p>
  </div>
</div>

まとめ

さてこれで, TOEIC の点数が 150 点アップだ.

あっ, しまった, TOEIC では Emacs が使えない!!

25 Jul 2014, 13:54

Emacs で pdf-tools をうごかすのにいろいろハマったメモ

はじめに

Emacs で pdf-tools を動かすのにいろいろハマったので, 解決するまでのメモです.

Environment

  • ArchLinux
  • Emacs 24.3.1

苦難の道

さて, コンパイルが通らない!

15/01/03 追記 この問題は最新版ではでない

今は, ArchLinux をつかっているが, 以前は Linux Mint を利用してた.

その環境ではなんの問題もなくインストールできたのだが, 環境か ArchLinux に変わったらコンパイルが通らなくなっちゃた.

fork して, いろいろいじくって, 強引にコンパイルを通した.

./configure & make
make install

doc-view-mode が動かん!

まず, doc-view-mode で PDF が見れない!

どうも, GhostScript というものを入れる必要があるようだ.

ということで, インストール.

sudo pacman -S ghostscript

それでも PDF みれない!

それでも, PDF が見れない.

どうも, no windows モードで閲覧しようとしたことが原因.

emacsclient -nw

フレームを作成するモードで立ち上げる.

emacsclient -c

やっと, Emacs で PDF 見れた!!

めっちゃおそい!

閲覧には成功したけれども, 閲覧していると Emacs がものすごく重い!

これは, ストレスを通り越して, 使えないレベルだ. . いろいろ調べると, linum-mode が悪さをしていることが判明.

どうも, doc-view-mode がめちゃくちゃ遅い!linum-mode が有効なことが原因. 以下のページを参考に, major-mode が

  • doc-view-mode
  • pdf-view-mode

のときは, linum-mode は disable に.

pdf-info-epdfinfo-program error がでる.

pdf-info-epdfinfo-program の変数が設定されていないとのエラー.

リポジトリの src/epdfinfo のパスを設定.

(setq pdf-info-epdfinfo-program "/path/to/pdf-tools/src/epdfinfo")

おわりに

ついに PDF が見れるようになった~~!!

というわけで, めちゃくちゃ茨の道だったものの, 何とか PDF が快適に Emacs で閲覧できるようになりました. わーい \^\^

Special Thanks

pdf-tools 自体のつかいかたは, この記事がとても参考になりました. pdf-occur とか, pdf-isearch とか, 便利.

21 Jul 2014, 13:27

アセンブリ言語の中心でHello, Worldを叫ぶ

はじめに

世界の中心で愛を叫ぼうとしたが、そもそも世界の中心がどこかわからなかった。 ということで、アセンブリ言語の中心で愛を叫ぶことにした。

Environment

  • ArchLinux 64bit.
  • intel corei7 x86-64 ISA

C言語の世界

以下のコードが対象。test.c

#include <stdio.h>

int main() {
  printf("Hello, World!!");
  return 0;
}

デバッグ情報つきでコンパイル。

gcc -g test.c

a.outができる。

アセンブリ言語の世界へ

次に、アセンブラファイルを生成。test.sができる。

gcc -S test.c
    .file   "test.c"
    .section    .rodata
.LC0:
    .string "Hello, World!!"
    .text
    .globl  main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    $.LC0, %edi
    movl    $0, %eax
    call    printf
    movl    $0, %eax
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (GNU) 4.9.0 20140604 (prerelease)"
    .section    .note.GNU-stack,"",@progbits

objdump -d a.outでディスアセンブルすると詳細なアセンブリ情報を得られる。

それでは自力で書いてみる

カンペ情報がいろいろ手に入ったので、自力で書いてみる。

    .globl  main # mainからはじまる
main:
    pushq   %rbp # ベースレジスタ退避
    movq    %rsp, %rbp # ベースレジスタにスタックポインタ設定
    movl    $.LC0, %edi # $ediレジスタに文字列格納
    movl    $0, %eax   # $eaxに戻り値が入るので0初期化
    call    printf     # printfをcall  
    movl    $0, %eax   # 戻り値を除去
    popq    %rbp # ベースレジスタ取り出し
    ret     # 終了
.LC0:
    .string "Hello, World!!"

gcc test2.sでコンパイルして、a.outができた。

gdbで解読

gdbで解読。自分が書いたアセンブリコードと違う!どういうことだ??

(gdb) b main
(gdb) disas
Dump of assembler code for function main:
   0x0000000000400506 <+0>: push   %rbp
   0x0000000000400507 <+1>: mov    %rsp,%rbp
   0x000000000040050a <+4>: mov    $0x400520,%edi
   0x000000000040050f <+9>: mov    $0x0,%eax
   0x0000000000400514 <+14>:    callq  0x4003e0 <printf@plt>
   0x0000000000400519 <+19>:    mov    $0x0,%eax
   0x000000000040051e <+24>:    pop    %rbp
   0x000000000040051f <+25>:    retq   
   0x0000000000400520 <+26>:    rex.W
   0x0000000000400521 <+27>:    gs
   0x0000000000400522 <+28>:    insb   (%dx),%es:(%rdi)
   0x0000000000400523 <+29>:    insb   (%dx),%es:(%rdi)
   0x0000000000400524 <+30>:    outsl  %ds:(%rsi),(%dx)
   0x0000000000400525 <+31>:    sub    $0x20,%al
   0x0000000000400527 <+33>:    push   %rdi
   0x0000000000400528 <+34>:    outsl  %ds:(%rsi),(%dx)
   0x0000000000400529 <+35>:    jb     0x400597
   0x000000000040052b <+37>:    and    %esp,%fs:(%rcx)
   0x000000000040052e <+40>:    or     (%rax),%al
End of assembler dump.

(gdb) x /s 0x400520
0x400520 <main+26>: "Hello, World!!\n"

(gdb) info register
rax            0x400506 4195590
rbx            0x0  0
rcx            0x0  0
rdx            0x7fffffffe858   140737488349272
rsi            0x7fffffffe848   140737488349256
rdi            0x1  1
rbp            0x7fffffffe760   0x7fffffffe760
rsp            0x7fffffffe760   0x7fffffffe760
r8             0x7ffff7dd7e50   140737351876176
r9             0x7ffff7deb470   140737351955568
r10            0x7fffffffe600   140737488348672
r11            0x7ffff7a4df10   140737348165392
r12            0x400410 4195344
r13            0x7fffffffe840   140737488349248
r14            0x0  0
r15            0x0  0
rip            0x40050a 0x40050a <main+4>
eflags         0x246    [ PF ZF IF ]
cs             0x33 51
ss             0x2b 43
ds             0x0  0
es             0x0  0
fs             0x0  0
gs             0x0  0

20 Jul 2014, 09:37

SDNの最新動向を体系的に学ぶ!Courseraで学ぶSoftware Defined Networking

Courseraで、Software Defined Networkingを学びました。

[toc]

Software-Definedとはなにかを知るために

5月頃に Software-Definedという言葉を知り、調べてみた。

そんなおりに、courseraでSDNに関する講座が開かれるということで、 好奇心が盛り上がっている今には最適なタイミングだと思い、受けてみた。

自分はNetworkについてはほとんど知識がなかった。 Networkというよりは、Sofware-Definedという考え方に興味があった。 ネットの情報をかき集めて学んでもいいけれども、 Software-Definedという考え方、アーキテクチャを体系的に学びたかった。

よくわからなかった・・・

最新技術が無料で体系的に学べるMOOCは素晴らしい

SDNに関するホットな技術を体系的に学ぶことができる。

  • Module 1: History and evolution of SDN
  • Module 2: Control and data plane separation
  • Module 3: Control Plane
  • Module 4: Network Virtualization
  • Module 5: Data Plane
  • Module 6: Programming SDNs
  • Module 7: Verification and Debugging
  • Module 8: Use Cases and Looking Forward

また、内容は毎年更新されていく。 さらには、その分野で輝いている人へのインタビュー動画が毎週配信される。

最新技術を無料で学ぶことができるなんて、MOOCは素晴らしいと改めて思う。

正直・・・too dificult for me..

講義のスライドはとても論理的にできている。 課題、解決策、効果の順番で、SDNを導入することによるメリットを述べている。

  • 現状の課題
  • SDNによる解決策の提示
  • SDNによる効果

Nick FeamsterさんのYoutubeチャンネルで、動画の一部が公開されていた。

しかし、難しくてよくわからなかった。 Networkについての前提知識がないので、用語が理解できない。

また、AssignmentはPythonなので、Pythonが分からずに挫折。。。orz

とりあえず講義だけをきいた

じゃあなにをやったの?というと、 講義をきいて、毎週のQuizに答え、講義の内容をテキストにメモしたりした。

この講義は、非エンジニアも楽しめるようにできていて、 Pythonかけなくても、ビデオ見てクイズに答えればいいよと、 冒頭のガイダンスで言われたので、その通りにした。

これで、毎週3時間くらい。

講座はNetworkingに関わる話題しか扱わない。 しかし、自分はSoftware-Defined という考え方を知りたかった。 なので、解説されている内容からNetwork以外にも当てはまりそうなことを 推測しながら聞いていた。

学習メモ

Software Defined Networkingに関する学習メモ。

定義

  • 広義:「従来システムのネットワーク要素を抽象化し分割する、コンピュータ ネットワークを構築するアプローチ」(wiki より)
  • 狭義:「(広義のアプローチを具体化するために)ネットワーク機器のコントロールプレーン、

データ プレーンを分離し、集中化されたソフトウェアからコントロールして、 もっと効率的なこと、便利なことをする!!」

A new networking paradigm whereby the behavior of a network is controlled by a single high-level software program. The general term for network architectures whereby the control plane (software that controls network behavior) and the data plane (the devices that forward traffic) are separate from one another.

SDN allows network administrators to manage network services through abstraction of lower level functionality.

ネットワーク全体で一つのOSとして見え、 ソフトウェアから見れば個々のネットワーク機器が隠ぺいされています。 こうすることで、ソフトウェアを開発さえすれば 自由にネットワークを制御することが可能になります。

SDNの歴史と基盤技術

Active networks

A collection of network architecture projects in the 1990s that shared many of the same goals as software-defined networking.

Network virtualization

ネットワーク仮想化。物理ネットワーク上に複数の論理ネットワークを構築すること。

The notion of instantiating many distinct logical networks on top of a single, shared physical network infrastructure.

「ネットワーク仮想化」とも呼ばれ、厳密にはSDNの応用の一つであり、 また、SDNによらず別の技術によって実現する手法もあるため、 ネットワーク仮想化とSDNそのものとは区別する必要がある。

構成要素

Control Plane

The functions in the network that control the behavior of the network (e.g., network paths, forwarding behavior). Typically, the control plane is instantiated as a single, high-level software controller.

Data Plane

フォワーディング・プレーン, Forwarding planeともいう。

The functions in the network that are responsible for forwarding (or not forwarding) traffic. Typically, the data plane is instantiated as forwarding tables in routers, switches, firewalls , and middleboxes.

Data plane design goals. 技術革新に素早く対応できること。

  • Flexible(柔軟性)
  • Extensible(拡張性)
  • Clean interfaces (整理されたインタフェース)
  1. Programmable Hardware

    標準化された、プログラミング可能なハードウェア。 もうすぐ、高級言語での記述もできるようになるはず。

    • FPGA
    • Click
  2. Flowの構成要素

    • ヘッダフィールド(マッチングルール)
    • アクション
      • Forwarding
      • Enqueue
      • Drop
    • 統計情報

    OpenFlowのアーキテクチャと仕様・機能 | Think IT(シンクイット)

NorthBound API

Programming interface that allows applications and norchestration systems to program the network .Uses for Northbound API ,

  • Path computation
  • Loop avoidance
  • Routing
  • Security

Northbound APIは、アプリケーションからSDNコントローラを制御できるAPIだ。

Northbound API can help,

  • Sophisticated events
  • Composition of policies
  • Event handling

SouthBound API

Control Planeと Data PlaneをつなぐAPI.

SDNのアーキテクチャ

                        ---
Controller Applications  |
======================   |
   NorthBound API        | Control Plane
======================   |  
  Controller Platform   ---
======================   |  
   SouthBound API        | Data Plane
======================   |
  OpenFlow Switches      |  
                        ---

Composition

シーケンシャルな制御方法とパラレルな制御方法。

  • Sequential composition :Perform one operation, then the next.
  • Parallel composition :Perform both operations simultaneously.

Event-Driven SDN

ネットワーク構成のほとんどは、イベント駆動の処理。 ネットワークのポリシーをEvent-Basedで表現という考えが Event-Based Network Control.

  • Event Plane

    • user
      • time
      • history
    • Dinamic Event Handler -> State Transition signal to Control Plane.
    • Control Plane -> finite state machineで制御される。
      • State

    ドメインの状態(value)の集合。 - Events

    ステートマシンにしたがって状態遷移を発生させるトリガ - Data Plane

他の用語との違いについて整理

OpenFlow

Software-Defined Network (SDN)は、コンセプト、アーキテクチャ。 それを実現する技術の一つがOpenFlow。

OpenFlowは、スタンフォード大学が中心となっている 「OpenFlowスイッチングコンソーシアム」が提唱するネットワーク制御技術.

SDNを実現するための代表的なフレームワーク。

OpenStack

OpenStackはクラウドをOSSで管理するためのソフトウェア群の総称。 OpenStackのネットワーク仮想化にあたる部分がSDNの思想と重なる。

これからどうするの?

もちろん、これを仕事に生かしたい。

Networkの分野はバブル景気?

社内の噂できいたところによると、Networkをやっている部署は残業し放題らしい。

世の中はどうだかわからないが、 身の回りではNetworkのビジネスがものすごい勢いで成長しているのを感じる。 お金もどんどん投資されるし、人材もどんどんネットワークに集められていく。 かくいう自分も、8月から半年間くらい、WANに関する仕事をすることになった。

その盛り上がりの理由のひとつは、SDNとそれから派生したOpenStackだろう。

今回の講座を通じて、SDNについて興味は深まり、上っ面の知識が身についた。 しかし、Assignmentをサボったために、 コーディングレベルの知識が身につかなかったことが、残念だ。 これだけの知識だと、役に立たない。業務に入っていくには、もう少し深い知識が必要だ。

手をあげられるようなチャンスができたら、 上っ面な知識だけれども手をあげて飛び込んでいきたい。

新世代を創るSoftware-Defined Storageの未来を思い描く

自分は、ストレージのエンジニアとしてこれまで働いてきた。 これからも、ストレージ分野で仕事をしていれば、 SDSは避けて通れない知識だろう。

今回の講義を通じて、Software-Definedのアーキテチャについて学ぶことができた。 Control Plane, Data Plane, Event-Driven Archなどなど。 こういう前提知識をもとに、このSoftware-Definedという考え方が Storageの世界でどうやって適応できるかを考えていきたい。

Networkの分野では、まずはじめに解決するべきNetwork上の課題があり、 それに応じて必要な技術があり、その一つがSDNなのだ。 SDNとSDSは解決するべき課題がまったく異なるので、 SDNを学んだからってSDSにそのまま応用できるわけではない。

そのストレージ固有の問題についてSDNで得た考え方をもとに考えていきたい。

または、SDNもSDSも、Software-Defined Data Centorの構成要素なので、 それぞれを組み合わせた一段上の視点を身につけたい。

20 Jul 2014, 06:42

オブジェクト指向設計と並列プログラミングをAndoirdで学ぶ!Pattern-Oriented Software Architecturesを受けた

Courseraで Pattern-Oriented Software Architecturesを学びました。

[toc]

なぜPOSAを学んだか?

POSAを学んだ目的は、自分のオブジェクト指向設計能力を向上させるためだ。

デザインパターンを身につける

今年の目標の一つが、デザインパターンを身につけること。

去年はRubyやC++を学ぶことで、オブジェクト指向を身につけた。

そして今年は更なる成長のために、 デザインパターンを身につけることを本年度の目標にしたのだった。

アーキテクチャ・パターンという新しい考え方を身につける

今回学んだPOSAというものは、デザインパターンとは違う。 デザインパターンの上位に位置する、アーキテクチャ・パターンというものだ。

デザイン・パターンはクラス間の関係を示すのに対して、 アーキテチャ・パターンは、システムやモジュール同士の関係を示す。 アーキテクャ・パターンのなかに、デザインパターンが現れる。

あまりメジャーではないけれども、だからこそ人より抜きん出るためには、 デザインパターンとともに、アーキテクチャパターンをみにつけたいと思った。

並列プログラミングを身につける

これは棚からぼたもちだったのだけれども、 このCourseraのコースは平行プログラミングについても一通り説明されている。

今まで、平行プログラミングを真面目に学んだことがなかったため、 網羅的に学べるとてもよい機会だった。

Androidと平行プログラミング、そしてパターン

パターンだけが、学習の対象ではなかった。以下のことが学べた。

  • Android
  • 平行プログラミング
  • パターン

Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects

Douglas Schmidt先生は、以下の本の著者の一人。Schmidt先生、渾身の著作!

Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects

講義はこの本に書いてある内容、すなわち、

平行プログラミングに関するアーキテチャ・パターン

が中心的な話題となっている。

また、その学習のためのプラットフォームとしてAndroidOSが 採用されているという内容。 パターンが体系的に、順番に、解説されていくものを想定していたため、 このような進め方は予想外だった。

詳しく解説されたGofのパターンは以下。軽く触れたものはもう少しある。

  • Factory Method
  • Bridge
  • Command
  • Strategy
  • Template Method

また、POSAについては以下。

  • Half-Sync/Harf-Async
  • Active Object
  • Monitor Object
  • Producer-Consumer

とても熱い講義

Schmidt先生は、教えることにたいしてとても熱心に感じた。 やや早口だが、とても生き生きとはなしいている。 また、掲示板にしょっちゅう出没してコメントを精力的に書き込んでいるのにも驚く。

Douglas Schmidtさん本人のYoutubeチャンネルから、実際の動画を見ることができる。

そして、なぞのPDF群。いろいろなパターンに関する覚え書きがたくさんある。貴重な資料。

Assignmentは簡単

Assignmentは、とても簡単な内容。 githubから課題を落として、TODOとなっている場所を10箇所くらい修正する。

スケジュールの前半は、JavaのConcurrencyに関する話題が課題。

  • RentrantLock
  • ReadWriteLock
  • Semaphore
  • ConditionObject
  • CountdownLatch

Ping-Poigというプログラミングを作成した。

スケジュールの後半になって、ようやくAndroidの話題がでる。 Androidのライブラリを利用した並列処理について学ぶ。

  • HaMeR framework
  • AsyncTask framework

中級・上級を目指してガチにAndroidを極める人のための講義

ServiceやIntentがどういう思想のもとに設計されているかが、 パターンという観点から整理されて解説される。

並列プログラミングを題材にして、パターンが解説されていく。 実例を通して学べるところがよい。

市場にでているAndroidの参考書は、技術的な詳細よりも、 動くアプリを作成することに重点が置かれてかかれている。

この講義は、フレームワークの仕組みをJavaや設計の観点から詳しく解説しているので、 世の中の参考書にはない、貴重な学習材料だ。

中級・上級を目指して本気でにAndroidを学ぼうとする人に最適だと思う。

POSAをどう生かすか?

実例にそってパターンを学ぶ

正直、この講義だけではPOSAが分からない。Gofも部分的にしか紹介されない。

Androidと平行プログラミング、そしてパターン、いろいろ覚えることが多く、 頭の中で整理できないでいる。

思ったことは、パターンはパターンそのものとして学習するのではなくて、 コードや実例を通じて学んだ方がわかりやすいということだ。 そういう意味では、Androidが題材にされいてるところはよかった。

パターンは、折にふれてリファレンスを参照して、 繰り返し慣れ親しむことで覚えていくのがよいだろう。 普段のコードリーディングで、『これってパターンかも』と思ったら、 その度ごとにGoogleで調べるように心がけたい。

オブジェクト指向設計をもっく詳しく

パターンというのは、課題があってその解決策として導かれるもの。 GofやPOSAは、オブジェクト指向を大前提にしている。 オブジェクト指向の課題から、必然的に導かれたものがパターンとなる。

なので、パターンの本質を身につけるためには、 もっと深くオブジェクト指向設計を学ぶ必要を感じる。 オブジェクト指向設計の解説書として定評のある以下の本を買った。 これで、オブジェクト指向の本質的な部分を学びたい。

あと、POSA2の日本語訳、出版されないかな。

13 Jul 2014, 11:58

ソフトウェア・パターンへの情熱を現実生活へ注ぎ込めないか?

はじめに

ビジネスの世界でのフレームワークが、 ソフトウェアのパターンに近いことに気がついた。

自宅の本棚に勝間和代のフレームワークに関する本を見つけたので、読み返してみた。

ソフトウェア・パターンとビジネス・フレームワーク

この本では、フレームワークを以下のように定義している。

なにかの概念や考え方を自分なりに整理して、
考えやすくするもの、覚えやすくするもの。

このような定義は、ソフトウェアにおけるパターンと同じ考え方のように思う。 共通して現れる概念がカタログ化されて名前をつけられていることで、 より記憶に止めやすくなる。

フレームワークをたくさんもつということは、
頭の中でさまざまな情報を処理し、判断し、意思決定を行う際に、
その場に応じて最適な道具を使えるということ。

デザインパターンを身につければ、ソフトウェアの構造の理解が速くなる。 デザインパターンは思考のための道具だ。

問題解決フレームワークについてのまとめ

問題解決思考のフレームワーク、パターンについて、 読みながら調べたことを覚え書きとして書く。

問題解決の手法として、以下ががあげられている。

  • MECE
  • ピラミッドストラクチャ
  • 仮説思考

MECE

<div class="outline-text-3" id="text-3-1">
  <p>
    Mutually Exclusive and Collectively Exhaustive. (相互に排他的な項目」による「完全な全体集合」)
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://ja.wikipedia.org/wiki/MECE">MECE &#8211; Wikipedia</a>
    </li>
  </ul>

  <p>
    情報や分析対象をグループ分けする際に、 「重複なく・漏れなく」行うべきであるということを示した指針。
  </p>

  <ul class="org-ul">
    <li>
      最低限 2 x 2 のマトリックスで考える
    </li>
    <li>
      既存のMICE用フレームワークで考える
    </li>
  </ul>
</div>

ピラミッドストラクチャ

<div class="outline-text-3" id="text-3-2">
  <p>
    結論と根拠を多段に組み立てることによって作られる構造で、 ドキュメントの骨子全体の構造を表現するものとされる。
  </p>
</div>

<div id="outline-container-sec-3-2-1" class="outline-4">
  <h4 id="sec-3-2-1">
    ロジックツリー
  </h4>

  <div class="outline-text-4" id="text-3-2-1">
    <p>
      問題の分析や、課題の整理の結果をツリー構造として表現したものであり、 目的によって様々な種類がある。
    </p>

    <ul class="org-ul">
      <li>
        結果-原因(why)
      </li>
      <li>
        目的-手段(how)
      </li>
      <li>
        全体-部分(what)
      </li>
    </ul>

    <p>
      といった推論を繰り返して論理展開を行う場合、 その概念・事象間の論理的なつながりをツリー状に図示すること.
    </p>

    <p>
      問題解決などに使う場合には、上位概念から下位概念への分岐を2~3程度、 多くても5つぐらいまでにするのがよいとされる。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.itmedia.co.jp/im/articles/0609/01/news133.html">情報マネジメント用語辞典:ロジックツリー(ろじっくつりー)</a>
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-3-2-2" class="outline-4">
  <h4 id="sec-3-2-2">
    MECEとロジックツリーの違い
  </h4>

  <div class="outline-text-4" id="text-3-2-2">
    <p>
      MICEは「もれなく、だぶりなく」数え上げるという考え方. ロジックツリーはMECEを実行するためのツール(フレームワーク)の一つ。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://oshiete.goo.ne.jp/qa/3869287.html">MECEとロジックツリーの違いとは? &#8211; 教えて!goo</a>
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-3-2-3" class="outline-4">
  <h4 id="sec-3-2-3">
    ロジックツリーとピラミッドストラクチャーの違い
  </h4>

  <div class="outline-text-4" id="text-3-2-3">
    <p>
      以下のサイトでロジックツリーとピラミッドストラクチャーの違いが紹介されている。
    </p>

    <p>
      <a href="http://d.hatena.ne.jp/ohshi004/20080803/1217755608">ロジックツリーとピラミッドストラクチャー &#8211; Thinking Room で何想ふ。</a>
    </p>

    <ul class="org-ul">
      <li>
        ロジックツリー
      </li>
    </ul>

    <p>
      MECEを意識して、上位概念を下位の概念にトップダウン式に分解していく形式。 帰納的。
    </p>

    <ul class="org-ul">
      <li>
        ピラミッドストラクチャー
      </li>
    </ul>

    <p>
      具体的な情報や観察事項から上位の概念としてのメッセージを ボトムアップに抽出していく形式。演繹的。
    </p>
  </div>
</div>

仮説思考

<div class="outline-text-3" id="text-3-3">
  <p>
    仮説思考とは、何かに取り組む際に、 その時点で考えられる仮説(仮の結論)を置いて考える思考方法.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.nsspirit-cashf.com/logical/kasetsu_shikou.html">N&#8217;s spirit 仮説思考 仮説とは 仮説の立て方</a>
    </li>
  </ul>

  <p>
    仮説とはその時点で「こうすれば、こうなる」という結論をその理由とともに 設定すること。 一般的な「原因解明」次に「行動決定」の流れではなく、 「行動決定」次に「検証」の逆の順に進める。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://fk-plaza.jp/Solution/solu_kasetsu.htm">問題解決手法>仮説思考法</a>
    </li>
  </ul>

  <p>
    仮説は事実かどうか検証する。まちがっているかもしれないので。
  </p>

  <ul class="org-ul">
    <li>
      統計データやグラフ(定量的)
    </li>
    <li>
      ヒヤリング(定性的)
    </li>
  </ul>
</div>

現実問題をパターンで解き明かし、パターンを作り出す

フレームワークの活用方法について、以下のように言及されている。

大事なことは、自分でさまざまなフレームワークをさまざまな経験や
学びのなかから一つでも多く見つけだし、頭の中で整理して、
さらに新しいフレームワークを自分ででつくっていくこと。

フレームワークは思考を活発化し、助けるために存在するものであって、
思考をサボるためにあるのではない。

これも、ソフトウェア開発でも参考になる。 つまり、パターンをソフトウェアの構造から読み取り分類して整理する。 そこからはみでるものを、新しい構造のパターンとして記憶に止めていく。

パターンへの情熱を現実生活へ注ぎ込めないか

自分は、デザインパターンを熱心に学んでいる。 それは、デザインパターンを身につけることが、 自分の思考を加速させ、成長を促すと信じているからだ。 成長したい、ソフトウェアをはより速く、深く理解したいという動機が裏にある。

パターンへの情熱を現実生活へ注ぎ込めないか?

つまり、プログラミングと同じような情熱と好奇心をもって、 自分の生活に起こる様々な問題を解き明かせないか?

論理的な思考のフレームワークをみにつけることで、 目の前のことをより速く、深く理解することができる。

これは、ソフトウェア・パターンを身につけることよりも、魅力的に感じる。

というわけで、ロジカル・シンキングについて、もう少し学んで見ようと思う。

13 Jul 2014, 00:46

マイスターになるためには、型をにつけ、型を破る!パターン、Wiki、XP,を読んだ読書メモ

はじめに

ソフトウェアのパターンを集中的に学んでいる。また、以前Wikiを立ち上げた。

そんななか、パターンとWikiの概念の関係性を教えてくれる、興味深い本を手に取った。

内容

題名のとおり、以下の3つの関係性を時系列にそって書いている。

それぞれの概念をつくった3人の人物に注目して話が進んでいく。

時系列に歴史をかたり、各章のおわりで他の概念との関係を示す。 歴史は横のつながりで再解釈すると面白い。東洋と西洋、イスラムとキリスト、などなど。 そんなように、歴史的な縦軸のなかで横のつながりを示されると知的好奇心を心地よく刺激する。

パターンとWiki、XPというものがすべてアレクサンダーの思想から生まれたことに驚く。 それは、キリスト教とイスラム教が同じ旧約聖書を起源としているような驚き。

あとがきが大事

本のほとんどは史実を書くことに割かれている。 あとがきとして筆者の意見を垣間見る。とてもいいことをいっているので抜粋。

プログラマがプログラミングするさいに、
自分のプログラムにどのようなパターンが見出されるかを
自分自身で考えながらプログラミングすることが、
本当の意味でパターンをつかいこなす道なのです。

XPのプラクティスを入り口として、
自分たちの開発プロセスを改善する方法を自分たち自身で考えつづけ、
そこから得た経験をまたプラクティスとして抽出するようにする、
そのようなプロセスを続けることによってはじめてXPのプラクティスが有効に働くようになる。

パターンにとって、型にはまって考えることが大事なように考えられがち。 しかし、本当に大事なことは、型をみにつけ、型を破るという、こと。 古くから芸能の世界でいわれていることだ。

以下、簡単な読書メモです。

パターン

パターン

<div class="outline-text-3" id="text-4-1">
  <p>
    建築環境に繰り返し現れる課題を解決に導く具体的な方策を記述したもの。
  </p>
</div>

<div id="outline-container-sec-4-1-1" class="outline-4">
  <h4 id="sec-4-1-1">
    アレクサンダーのパターン形式
  </h4>

  <div class="outline-text-4" id="text-4-1-1">
    <ul class="org-ul">
      <li>
        パターン名
      </li>
      <li>
        写真
      </li>
      <li>
        上位パターンへのつながり
      </li>
      <li>
        本文
      </li>
      <li>
        下位パターンへのつながり
      </li>
    </ul>
  </div>
</div>

パターンランゲージ

<div class="outline-text-3" id="text-4-2">
  <p>
    建築において繰り返し現れる構造を再利用しやすい形式でまとめたもの。 あるいは、パターンを集めて一つの体系としてまとぬあげたもの。
  </p>

  <p>
    建築家クリストファーアレクサンダーが考えた建築手法。
  </p>
</div>

時を超える建築の道

<div class="outline-text-3" id="text-4-3">
  <p>
    パターンランゲージを記した建築理論。本の題名。
  </p>

  <div class='amazlink-box' style='text-align:left;padding-bottom:20px;font-size:small;/zoom: 1;overflow: hidden;'>
    <div class='amazlink-list' style='clear: both;'>
      <div class='amazlink-image' style='float:left;margin:0px 12px 1px 0px;'>
        <a href='http://www.amazon.co.jp/%E6%99%82%E3%82%92%E8%B6%85%E3%81%88%E3%81%9F%E5%BB%BA%E8%A8%AD%E3%81%AE%E9%81%93-%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%83%BC-%E3%82%A2%E3%83%AC%E3%82%B0%E3%82%B6%E3%83%B3%E3%83%80%E3%83%BC/dp/4306043061%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4306043061' target='_blank' rel='nofollow'><img src='http://ecx.images-amazon.com/images/I/51VWYgOr6IL._SL160_.jpg' style='border: none;' /></a>
      </div>

      <div class='amazlink-info' style='height:160; margin-bottom: 10px'>
        <div class='amazlink-name' style='margin-bottom:10px;line-height:120%'>
          <a href='http://www.amazon.co.jp/%E6%99%82%E3%82%92%E8%B6%85%E3%81%88%E3%81%9F%E5%BB%BA%E8%A8%AD%E3%81%AE%E9%81%93-%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%83%BC-%E3%82%A2%E3%83%AC%E3%82%B0%E3%82%B6%E3%83%B3%E3%83%80%E3%83%BC/dp/4306043061%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4306043061' rel='nofollow' target='_blank'>時を超えた建設の道</a>
        </div>

        <div class='amazlink-powered' style='font-size:80%;margin-top:5px;line-height:120%'>
          posted with <a href='http://amazlink.keizoku.com/' title='アマゾンアフィリエイトリンク作成ツール' target='_blank'>amazlink</a> at 14.07.13
        </div>

        <div class='amazlink-detail'>
          クリストファー アレグザンダー
        </div>

        <div class='amazlink-sub-info' style='float: left;'>
          <div class='amazlink-link' style='margin-top: 5px'>
            <img src='http://amazlink.fuyu.gs/icon_amazon.png' width='18' /><a href='http://www.amazon.co.jp/%E6%99%82%E3%82%92%E8%B6%85%E3%81%88%E3%81%9F%E5%BB%BA%E8%A8%AD%E3%81%AE%E9%81%93-%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%83%BC-%E3%82%A2%E3%83%AC%E3%82%B0%E3%82%B6%E3%83%B3%E3%83%80%E3%83%BC/dp/4306043061%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4306043061' rel='nofollow' target='_blank'>Amazon</a> <img src='http://amazlink.fuyu.gs/icon_rakuten.gif' width='18' /><a href='http://hb.afl.rakuten.co.jp/hgc/g00q0724.n763w947.g00q0724.n763x2b4/archives/c=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F616798%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Frms%2Fmsv%2FItem%3Fn%3D616798%26surl%3Dbook' rel='nofollow' target='_blank'>楽天</a>
          </div>
        </div>
      </div>
    </div>
  </div>

  <p>
    角谷信太郎さんのおもしろいはなしのyoutube動画も見つけた。
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://www.youtube.com/watch?v=SctvxjoKDGA">https://www.youtube.com/watch?v=SctvxjoKDGA</a>
    </li>
  </ul>
</div>

<div id="outline-container-sec-4-3-1" class="outline-4">
  <h4 id="sec-4-3-1">
    無名の質
  </h4>

  <div class="outline-text-4" id="text-4-3-1">
    <p>
      生き生きとした建築や街が備えている特性。古い街並みに潜む住みやすさや美しさ。
    </p>
  </div>
</div>

Wiki

ウォード・カンニガムがプログラムに関する、 パターンを記述して閲覧するためにはじめたのが起源。 WikiWikiWebというパターンブラウザ。

ブログとwikiの根本的な違い

<div class="outline-text-3" id="text-5-1">
  <p>
    ブログとwikiの根本的な違いは、以下。
  </p>

  <ul class="org-ul">
    <li>
      ブログは情報を日付で管理するシステム
    </li>
    <li>
      wikiはページ名で情報を管理するシステム
    </li>
  </ul>
</div>

XP

ケント・ベックがパターンの考えをソフトウェア開発のプラクティスに応用した。 プロセスのベストプラクティスをカタログ化したもの。プロセスへパターンを適用したもの。

アレクサンダー6つの原理とXPプラクティス

<div class="outline-text-3" id="text-6-1">
  <ul class="org-ul">
    <li>
      有機的秩序の原則 ・・・ フィーチャーに注目した開発
    </li>
    <li>
      参加の原則 ・・・ 顧客との対話を重視
    </li>
    <li>
      漸近的成長の原則 ・・・ インクリメンタルな開発
    </li>
    <li>
      パターンの原則 ・・・ UML, XPプラクティス
    </li>
    <li>
      診断の原則 ・・・ TDD, CI
    </li>
    <li>
      調整の原則 ・・・ PDCA
    </li>
  </ul>

  <p>
    その他、関係ないかもしれないけど、暗黙知と形式知についてのメモ。
  </p>
</div>

暗黙知と形式知

暗黙知

<div class="outline-text-3" id="text-7-1">
  <p>
    知識というものがあるとすると、 その背後には必ず暗黙の次元の「知る」という動作がある」ということを示した概念。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://ja.wikipedia.org/wiki/%E6%9A%97%E9%BB%99%E7%9F%A5">暗黙知 &#8211; Wikipedia</a>
    </li>
  </ul>
</div>

形式知

<div class="outline-text-3" id="text-7-2">
  <p>
    形式知(けいしきち)は知識の分類の一つであり、 主に文章・図表・数式などによって説明・表現できる知識を指す。暗黙知に対する概念。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://ja.wikipedia.org/wiki/%E5%BD%A2%E5%BC%8F%E7%9F%A5">形式知 &#8211; Wikipedia</a>
    </li>
    <li>
      <a href="http://ja.wikipedia.org/wiki/%E8%A6%8B%E3%81%88%E3%82%8B%E5%8C%96">見える化 &#8211; Wikipedia</a>
    </li>
  </ul>
</div>

これからどうするか

今は型を学ぶとき

<div class="outline-text-3" id="text-8-1">
  <p>
    パターンに興味をもった動機は、プログラマとして成長したいからだった。
  </p>

  <p>
    プログラミングを身につけるということは、芸を身につけることだと思っている。 成長するためには、洗練された型を身につけることが近道だ。
  </p>

  <p>
    今は、型を身につけるとき。自分はまだまだ未熟なので、定石を身体に叩き込む時。 しかし、いつかは型を破らなければならないときもくるだろう。 そんなとき、この本を見直したい。
  </p>
</div>

いろんな分野のパターンを収集する

<div class="outline-text-3" id="text-8-2">
  <p>
    パターンは、建築とソフトウェア開発に限るものではない。
  </p>

  <p>
    どんなものにだってパターンが存在する。 そのような言語化されていないもやもやしたものを、 wikiとして拾い上げ、整理して、分類する。 そうすることは、他の分野にも応用できるとおもう。
  </p>

  <p>
    自分もWikiにいろいろな考えを書き溜めて、そのつどごとに整理していこうとおもう。
  </p>
</div>