29 Aug 2014, 13:24

他人のコードに INCEPTION する!coursera で The Hardware/Software Interface を受けた

coursera で The Hardware/Software Interface を受けた感想です.

目的

組込みソフトの知識を身につけるため

私はいちおう組込みエンジニアなのだが, 組込みソフトの知識がない.

すごく, そのことに危機感を感じている. 組込みソフトの知識は, 実際に業務で取り組まないと身につける機会が少ない.

しかし, 仕事ではいつまで待っていても新しいプロジェクトには移動できな い.仕事を通して知識を身につけようなんて思っていたら, 10 年経っても身 につかない気がする.

メモリ管理・プロセス管理・アセンブラ言語などなど, このあたりの知識がほしい.

アセンブラ言語の知識を身につけるため

この講座では, アセンブラ言語についても学ぶことができる.

職場でも, アセンブラ言語を利用しているという話はたまにきくので, 学んでいれば, 新しい業務にもつながることを期待.

感想

C 言語のことをなにもボクは知らなかった

一番感じたことは, 自分は C 言語のことについて理解したつもりになってい たが, それはまだまだ不十分だったということだ.

たとえば, この講義では, malloc, free の原理について解説される. そして, malloc, free を自分で実装するような課題が出される.

ヒープ領域, スタック領域がどういう役割していて, それぞれどういうようにプログラムでは利用されているか, 自分は理解していなかった. それなのに, C 言語なんて全部わかったよ! なんて思っていた自分が恥ずかしい.

まるでそれはインセプション!

課題がどれも難しく, 毎週 10 時間以上かかった. しかし, 今まで受けてきた MOOC の課題の中ではもっともおもしろかった.

そのなかでもとくにおもしろかったのは, バッファオーバーフローについての課題.

与えられたプログラムのセキュリティホールに対して バッファオーバーフローアタックを仕掛けて, まったく関係ない関数を実行したり, さらにはセキュリティホールから自分で書いたアセンブラコードを注入し て実行させたりする.

それはまるで, 映画”インセプション” のような興奮だ!

映画では, ディカプリオが他人の夢の中に侵入して,思い通りの記憶を埋め込む. そして私は, 他人のプログラムのなかに侵入して, 思い通りのコードを埋め込む.

ハッカーはこの快感をもとめて悪さをするのだろう.

内容

シラバスからそのまま引用.

Topics:
    Number representation
    Assembly language
    Basics of C
    Memory management
    Operating-system process model
    High-level machine architecture
    Memory hierarchy
    Implementation of high-level languages

Number representation

ビット演算について学ぶ.

まず, 驚いたことは, if や while のような制御文は ビット演算でかけてしまうということだ.

C 言語なんて楽勝でしょと思っていたら, しょっぱなから出鼻を折られるという..

また, コンピュータは 0 と 1 の世界で, プログラミング言語はそれを置き換 えたものに過ぎないという, 基本的なことを気づかされる.

Assembly language

x86-64 アセンブリ言語の文法を学ぶ. 意外にネットや書籍での情報が多く, 参考になった.

昔のテレビゲームは, アセンブラ言語でかかれていたときく. こんな世界でガリガリコーディングをするなんて, すごいな.

Memory management

メモリがどのように利用されているかのお話.

プログラムがどうやって動いているのかをアセンブラレベルで理解して, 今までなにもわかっていなかったんだと自覚. とともに, 仕組みが分かって感動.

2^n-1
|---------------------|
| Stacks              | ローカル変数, プロシージャの内容
|                     |
| Dynamic Data (Heap) | new や malloc で獲得できる領域
| Static Data         | グローバル変数など.
| Literals            | 文字列
| Instructions        | プログラム. 関数
|---------------------|
0

Memory hierarchy

キャッシュアーキテクチャとその制御アルゴリズム, 仮想メモリについて. C 言語通じて, コンピュータアーキテクチャも学べる.

| registers          |             |
| L1 Cache           | SRAM        |
| L2 Cache           | SRAM        |
| Memory             | DRAM        |
| local 2nd storage  | local disks |
| remote 2nd storage | Web Servers |

私は, ストレージ屋だ. (そしてもうやめたい) キャッシュ技術を学ぶと, ストレージを支える技術というものは, かなりの部分がキャッシュが関わっているのだと思った.

  • Disk の性能をあげるためには?
  • ホスト I/O の性能をあげるためには?

とりあえず, 特許でこまったらキャッシュを思い出す. 講義でも, CS の世界での問題解決の常套手段が関節参照だ! と力説してた.

これから

今までセキュアコーディングなんてまったく意識したことがなかった. 無知のまま脆弱性をプログラムに仕込んでしまうことは恐ろしいと思った. もうすこし, セキュアコーディングについて学んでおこうと思った.

アセンブリ言語はこれ以上は深堀りしなくていいかな… なんとなくだけれども, プログラムの仕組みが理解できたし, あまりおもしろいものではないので.

20 Aug 2014, 14:25

感動駆動学習こそ最強の学習法だ! MOOC をはじめて 1 年たったまとめ.

20140821_study.jpg
photo credit: betta design via photopin cc

はじめに

MOOC をはじめてから だいたい 1 年くらいたったので, ここでまとめをしてみる.

受けた講座

かなりいろいろと平行して取り組んでいたので, どれも中途半端だったり, 途中で挫折したりした. そういうのもひっくるめて, 今まで受けたものを時系列にまとめてみる.

coursera: Algorithms Part 1

はじめて受けた講座.すべてが新鮮だった. 英語が聞き取れなかったり. そして, この講義と続編の Part2 が今まで受けたなかで, もっとも難しかった.

coursera: C++ For C Programmers

C 言語しか知らない自分にとっては理想的な内容.これで C++ を身につけたつもり. そして, ここでの知識は仕事にも直結した.

coursera: Algorithms Part 2

Algorithms Part1 の続編.最難関だった.

しかし, この講義をすべて終えたときの達成感はものすごかった. プログラミングの基礎のアルゴリズムをついに学びおえたのだなあと…感動.

coursera: Creative, Serious and Playful Science of Android Apps

ノンプログラマ用の内容だったので, 結構楽勝. Android タブレットを購入した. くだらないアプリも作成したが, こういうものづくりの感動も大事.

edX: Embedded Systems - Shape the World

エセ組み込みエンジニアの自分としては, 工学部で習うような知識をどこかで学びたいとずっと思っていた. そして MOOC で学べた. 念願が叶った! 感動.

この講義は途中で挫折してしまったけど, それでもとても有益だった. L チカ!

coursera: Programming Mobile Applications for Android Handheld Systems

前に受けた Android の講義は, 純粋にアプリ作成の楽しさを伝えるものだったが, この講義はガチで Android Architecture を解説していく. これはあまりおもしろくなかったな.

そしてこの講義は, Android 3 部作のスタートの講義. 3 つの講座が連携することで, Android 開発のすべてを徹底的に学べるとか.

coursera: Web Application Architectures

仕事で Ruby をつかいはじめたので, rails をいじってみたいがために受けた. Web アーキテクチャは自分とは畑違いなので, 知らないことが多いことに気づかされた.

edX: Paradigms of Computer Programming

もっとも, 感動した講義.プログラミングのパラダイムを学べる. これはすごい. こういう体験を待っていたのだ!

edX: Unlocking the Immunity to Change: A New Approach to Personal Improvement

唯一, CS 以外の講義.心理学だ.

この講義で使われている理論と, それがかかれた自己啓発本はもっとはやるべき. 自己啓発本のなかでは, かなり独創的に感じる.

coursera: Functional Programming Principles in Scala

Scala 作者じきじきの講義. すげえ. そして, 関数型言語をずっと学びたいと思っていた欲求を満たす講義.

Scala はまだこの講義を終えても身についたとは言えないが, これからもま なんでいきたいというモチベーションと, 関数型言語を学びたいというモ チベーションには火がついた.

coursera: Pattern-Oriented Software Architectures: Programming Mobile Services for Android Handheld Systems

Android 3 部作の 2 つ目. POSA2 の著者が登場.

ずっと, デザインパターンを学びたいなと思っていたのだが, POSA とともに, gof のデザインパターンもかなりでてきた.

POSA は日本ではあまりメジャーではないが, これももっとはやるべき.と いうか, POSA2 以降が訳されてほしいな.

coursera: Software Defined Networking

話題の Software Defined ちょめちょめを学ぶために受けた. ネットワークは専門外なので, よく分からなかった.

その他: 現在受講中

edX: Introduction to Linux

Linux Foundation が MOOC に進出して講座を開いたというもの. Introduction の動画が, Linus Torvalds 氏じきじきのお話なところがすごい. LPIC L1 対策に受けてる.

coursera: Programming Cloud Services for Android Handheld Systems

coursera: The Hardware/Software Interface

アセンブリ言語と C 言語を学ぶことで, 低レベルな高レベルのプログラ ミングを学ぶ. これはとてもおもしろい! そのうち感想を.

おもしろかった講義ベスト 3

  1. Paradigms of Computer Programming: おもしろいというよりも, 感動体験の連続.
  2. Algorithms: 1 番難しく, 1 番苦労した.しかし, Assignment がどれもおもしろかった.
  3. Pattern-Oriented Software Architectures: パターンにはある種の憧れがあり, それを学ぶことができた.

つかった言語

いろいろつかった.

  • Java
  • C++
  • Ruby
  • Oz
  • C
  • Assembly
  • Scala

そして, あたって砕ければとりあえずどんな言語もできる気がしてきた. それまでは, まともに使える言語が C しかなかった. この恐怖心と苦手意識 をを打ち破れた心の変化は大きい.

そして, どんな言語にも対応できる Emacs の偉大さを知った.

自分はどのようなときに感動を感じるか?

感動があれば, どんなに疲れて泣きたいときでも前に進める. モチベーションが湧き上がる.

どういうポイントで自分が感動するか, ピックアップしてみた.

作者直伝の講義に感動

Scala や POSA, Immunity to Change, Paradigms of Computer Programming の講義のように, その分野の権威が直々に登場することに感動する.

そういう人たちの講義は情熱的であり, 説得力があり, 震える瞬間がよくある.

こういう講義こそ, MOOC を利用して学習するメリットだと思う.

長年学びたいと思っていた講義に感動

C++ や Embedded Systems, POSA など, いつか学びたいと思っていたことを学ぶと感動する.

欲求不満が解消されることろに感動のポイントがあるのだと思う.

これは, MOOC に限ったことではないけど.

知識と知識がつながりあい, 新しい世界がみえる瞬間に感動

POSA や Scala,Paradigms of Computer Programming など, 新しい考えをしり, より深くプログラミングの世界が見えるようになると 感動する.

学生時代にかじったことを学ぶと感動する

自分は一応? 情報系の学部を卒業している. なので, それと関連する内容を学ぶと, 感動した. グラフ理論だったり,情報理論だったり.

自分はたいへん lazy な学生でほとんど勉強しないで後悔しているので, その罪悪感が軽減されたという, 負の感動もあるのだろう.

感動駆動学習こそ最強の学習法

MOOC の講義を次々と受けた理由は, *感動に駆動される*から.

感動しつつ, 学習し, 成長する

これが最高の学習スタイルではないだろうか?

書籍でも学習できる.しかし, MOOC を利用すれば, 最先端の技術や最高クラスの講義がいつでも, どこでも, だれでも, 無料で手に入る. 21 世紀の教育革命バンザイ! MOOC に幸あれ!

MOOC の講義も有限だし, そもそも自分の時間が有限. そして, 社会人をしながら MOOC をバリバリやるのは, かなりつらいときもある. この学習スタイルがいつまで続くかはわからない.

しかし, もう 1 年やってみようとおもう.具体的には, 機械学習と統計学を学びたい. そういうモチベーションと, それが叶ったとき, そしてそれを学ぶことによって見える新たな世界に, 来年もぼくは感動するだろう.

20 Aug 2014, 11:28

MOOC を利用してプログラミングの勉強をすることで英語を学んだ

photo credit: betta design via photopin cc

はじめに: TOEIC の点数があがった

今日結果が届いた TOEIC の点数がよかった. それは, 学生時代から数えて 7 年ぶりのハイスコア更新だった.長いスランプだった.

なぜ, 記録が更新できたか? それは,

プログラミングの勉強をすることで英語を学ぶ

という, 一年前の発想の転換にあったと思う. そんな今までの英語学習方法 を振り返ってみる.

今までの TOEIC の点数はうなぎ下がり

1000 時間ヒアリングマラソンで 150 点ダウン…

社会人になってから, TOEIC の点数はうなぎ下がりだった.

危機感を覚えて 1000 時間ヒアリングマラソンに挑戦したが, まさかの 150 点ダウンという, 金返せ的な結果となった.

※注意:これは自分が運が悪かっただけで,ヒヤリングマラソン自体はおもし いですとオススメしとく.

英語の NHK ラジオニュースを毎日きいて世の中がわからなくなる

英語の NHK ラジオニュースを毎日きくように心がけた.

毎日ラジオニュースをきいていれば, きっといつかは聞き取れるようにな るはず・・・

と思って,日本語のニュースをきくのをやめて, 英語ニュースだけをきく ようにした. それは意地に近いものがあった.そして, いつになって も英語ニュースを理解できなかった.結果的に, 日本の情勢について 2 年く らいまったく分からなかった.

English Journal を購読

ヒアリングマラソンは止めたものの, English Journal という雑誌がおもし ろいので, これは継続して購読していた.当時, iPad で English Journal が きけるという神アプリが存在した.

このアプリも手伝って, 通勤時間中はずっと English Journal をきいてい た.

現在は, このアプリでの English Journal の配信が終わり, それとともに自 分も English Journal の購読を止めた. このアプリの復活を切に願います.

m (._.) m

そして・・・

TOEIC の点数はちっともあがらない.

プログラミングが目的, 英語は手段

なぜ英語の勉強をするのか, 考えてみた. それは,

プログラマとして成長したいから

という大事なことに気づいた.

  • おもしろそうな OSS は大抵英語.
  • 最新の技術情報は海外からくる.
  • おもしろい洋書が日本語に訳されるのは 2,3 年たってから.
  • そもそもプログラミング言語が英語に近い.

今まで, 英語のために英語を勉強していた. しかし, 英語力の向上のさらに 上位にある目標はプログラミング力の向上ということに気づいた.

じゃあ, 英語を勉強するなんて回りくどいことをせずに, 直接プログラミン グを学んで, その過程で英語を学べばいいのでは? すなわち, 以下だ.

プログラミングの勉強をすることで英語をみにつける

そして MOOC をはじめた

そこで, プログラミングの勉強を英語ですることにした.

具体的な手段として, MOOC を利用して学習した.はじめに, coursera を,次 に edX をはじめた.

はじめはわからない, だんだんわかってきた

MOOC では, 講義の内容が動画で配信されて, Assignment も毎週だされる.も ちろん, すべて英語.

はじめはほとんど聞き取ることができなかった. オンライン学習のうれしい ところは, なんどでも, 動画を見ることができることなので, 何度も見直し た.

半年経ったくらいから, ようやく不自由なく聞き取れるようになってきた気 がした.そして, 時間がないという理由で 1.5 倍速再生を多用するようになっ た.早口もだんだん聞き取れるようになった.

MOOC はコンテンツがおもしろい

MOOC は, コンテンツ自体か非常におもしろい.なので, 少しくらい英語が わからなくたって, その他の好奇心でなんとかなった.

コンテンツ大事.この効果は, NHK の英語ニュースでは不可能だろう.いく らだって, 英語をシャワーのように浴びられるし, もっと欲する.

まとめ: 結局はモチベーションが大事

社会人になって, 点数が下がってしまった一番の原因は, モチベーションが あがらなかったからだと思う. 仕事をはじめても, 英語と接する機会がほとん どなかったから, 英語を勉強する必要性を感じなかった.

なんのために?

この問いから勉強方法を変えて, 結果的に強力なモチベーションを維持して 英語力の向上ができた. モチベーションを維持することが大事だと思った.

19 Aug 2014, 13:26

HTTP も知らないのぉ~? にカチンときたら読むべき! プロになるための Web 技術入門を読んだ.

毎晩お風呂の中でゆでダコになりながら, 『プロになるための Web 技術入門』を読みました.

目的: Web アプリケーション開発の基礎を身につけるために

現在, coursera を利用して web アプリケーションの仕組みを学んでいる.

コンテンツ的にも, 英語的にも, よくわからないので, 平易に Web の仕組み について書いてある本で基本を学びたいと思って, ゆでダコになった.

また, この本は, 3 ヶ月前に購入したまま積ん読になっていた.以前も, coursera で rails を利用した web archtectures を学んだはずなのだが, 身体 に知識がしみこんでいない.とても虚しく感じるので, 改めて学んでみた.

感想: 初心者にやさしい平易な入門書

この本は, Amazon の口コミでは分かりやすいと評判. また, 会社のできる社員のデスクにはこの本がなぜか置いてある.

うわさどおりの分かりやすい内容

そして, はたして, 分かりやすさは本物だった

  • 身近な比喩

比喩や例に合わせて, 概念が紹介されるので, わかりやすい.

  • 技術の必要なった背景からの解説

その技術が*なぜ*必要とされたのかが時系列にかかれているため, Web の発展の横軸のなかで概念を理解していくことができることも, 分かり やすさにつながる.

  • 平易

難しいことはかかれていない. 初心者をターゲットにしている.

HTTP も知らないのぉ~? にカチンときたら読むべき

自分は平均よりはそこそこ技術書を読んでいるほうだけれども, この本はお すすめである.

Web は普段当たり前のように利用しているが, それがどんな技術に支えられ ていているかを知ることは, 洋服の内側を覗き込むようなおもしろさがあ る.

自分のような, Web の仕事とは直接関わりがないひとで,HTTP の仕組みすら まともに理解していないことに恥じらいを感じている人は,

絶対に読むべき! 絶対に読むべき!

内容: シンプルかつ王道ではないですか?

Web 技術について, 歴史的な理由を含めて解説されている.

簡単にキーワードを抜き出すと以下の通り. これらの概念が順番に解説され ていく.シンプルかつ王道だ.

これらの概念をすらすらと説明できますか? ボクはできません (だめじゃん)

  • サーバ, クライアントモデル
  • HTTP プロトコル
    • IP アドレス
    • URL, URI
    • GET, POST
  • CGI
    • Cookie
    • Session
  • Web システム構成
    • WEB サーバ
    • DB サーバ
    • アプリケーションサーバ
  • Web アプリーション
    • JSP
    • サーブレット
    • フレームワーク
  • Web アーキテクチャ
    • MVC Pattern
    • layer Pattern

行動目標: CIFS プロトコルと HTTP プロトコルの比較

さて, 概念はなんとなく理解した.

次の目標はこういうものを実装するところだ.まず, 直近の目標としては, coursera の今受講している講座を完了させること.

また, 今は仕事で CIFS 関連の仕事をしている. なので, HTTP プロトコルについて はもう少し深くまなんで, CIFS プロトコルとの比較を行いたい.

さらには, ちょっと仕事で OpenStack もかじることになるかもしれない. た ぶんほんのちょっと. 個人的に注目している Software-Defined Storage も Web サービスであることを知った.この Web 知識をベースにして, そういう Restful な Web サービスをもっと理解したいところだ.

17 Aug 2014, 12:49

TCP/IP ソケットプログラミングの基礎を集中学習! Working with TCP sockets を読んでる

はじめに

これからネットワーク関係の業務が始まる.

ネットワークの知識をつけるためにソケットプログラミングの本を読み始めた.

本の内容

Ruby をつかって, ソケットプログラミングの内容が解説されている.この本 のよさは, まさに,

安い, はやい, うまい

である.

  • Amazon Kindle で購入できるから, 1000 円で即時に手に入る.
  • はじめのほうが丁寧にかかれているので, Ruby さえしっていれば, 短時間 でソケットプログラミングのエッセンスを速習できる.
  • たった 100p ちょいの厚さだけれども, 要点がまとまっていてる.

初めの 13 は基本のサーバ・クライアントプログラミング.C 言語にも通じ る内容を Ruby で解説している. わたしの業務ははじめは Ruby でプロトタイ ピングをして, そのあと Java で書く予定.なので, 言語に縛られない知識 が欲しい. そういう意味で, 基礎を学ぶことは有意義.

自分は以前, C で 軽くネットワークをかじったので, Ruby での簡潔さに驚 いた. いろいろメソッドが解説されるのだけれども, 最後に Ruby の糖衣構 文がでてきて, ほーら Ruby だとこんなに簡単にかけるんだよーといわれる.

中盤は, Non-Blocking I/O やマルチソケットプログラミングなど, やや専門 的なな内容を扱っている. 自分の仕事では利用するところとしないところ我 ありそうなので, つまみ食いしつつ読んでいる (今ここ)

驚いたのが終盤の章だ. ネットワーキングのアーキテクチャパターンが解説 されている. 結構マニアック.そして, coursera でここを学んだ, そしてま だ学んでいる自分としては, この参考資料はうれしい.

ソケットプログラミングの基礎メモ

以下, かんたんなメモ.

Socket

  • 実行中のプログラム間でデータの送受信を行うための標準的なプログラ ミングインターフェース (API) の一つ.
  • TCP/IP アプリケーションを作成するための抽象化されたインターフェース
  • ソケット (BSD) - Wikipedia

EndPoints

端末.一意に定まる通信先.

Socket は IP Address と PortNo.をつかって, 通信先のソケットを特定す る. ネットワークに接続されたパソコンや PDA, 携帯電話などのネットワーク 端末の総称.

エンドボイントに Socket がバインドされる.

Loopbacks

IP アドレスは必ずしもリモートホストと関連付けられている必要はない. 得に開発環境では, ローカルな IP アドレスが役に立つ.

自端末に対して通信することを LoopBack という. LoopBack で指定するアドレスを Loopback Address という.

  • ハードウェアと関係ない, 論理的なインタフェース.
  • Linux では, localhost と言われている. IP は 127.0.0.1

ループバックとは 〔 ローカルループバック 〕

Server Lifecycle

  1. create ソケットの生成
  2. bind
    • ソケットを利用する Port にバインド.
      • User でバインドする Port は 1025-48999
    • ソケットが通信を許可する IP を指定.
  • 0.0.0.0: すべて許可
  • 127.0.0.1: 自端末のみ許可
  • xxx.xxx.xxx.xxx: ある端末のみ許可
  1. listen 通信先ソケットからの通信をまつ
  2. accept 通信先ソケットからの通信を受け取り, 通信路 をそのつど生成 (connection)
  3. close 通信元ソケットの消滅.
# coding: utf-8
require 'socket'

# 1. create
server = Socket.new (:INET, :STREAM)

# 2. bind
addr = Socket.pack_sockaddr_in (4481, "0.0.0.0")
server.bind (addr)

# 3. listen 
server.listen (5)

# 4. accept
loop do
  connection, _ = server.accept

  ## send message from client.
  # ehco "Hello" | nc localhost 4481
  p connection

  # it should be closed each connection
  connection.close
end

# 5. close
server.close

TCPServer

Ruby では, 以下のような糖衣構文がある.

server = TCPServer.new (4481)
# => 
# server = Socket.new (:INET, :STREAM)
# addr = Socket.pack_sockaddr_in (4481, "0.0.0.0")
# server.bind (addr)
# server.listen (5)

Client LifeCycle

  1. create ソケットの生成

(2. bind )

  1. connect サーバと接続
  2. close ソケットの破棄
require 'socket'

# 1. create
socket = Socket.new (:INET, :STREAM)

# 3. connect
remote_addr = Socket.pack_sockaddr_in (80, 'google.com')
socket.connect (remote_addr)

# 4. close
socket.close

TCPSocket

Ruby では, 以下のような糖衣構文がある.

socket = TCPSocket.new ('google.com', 80)
# =>
# socket = Socket.new (:INET, :STREAM)
# remote_addr = Socket.pack_sockaddr_in (80, 'google.com')
# socket.connect (remote_addr)

Simple Read

以下の例では, 永遠にサーバは Read を待ち続けて, その先が進まない.

require 'socket'

Socket.tcp_server_loop (4481) do |connection|
  puts connection.read
  connection.close
end

Socket は指定されたデータ長のデータが到着するまで待ち続ける. デッドロックを回避するためには,

  • Client 側で データの最後で EOF を送信する.(EOF event)
  • Server 側で一度に読み込むデータ長を小さくする. (partial read)

Client のソケットが close メソッドを実行すると, その延長で EOF が通知 される.

最後に

来週からつかう知識だとだとおもうと, 知識を吸収しようという集中力が違 う.

それは, 不安だからでもある. 知識を求めるのは, 自分の無力感を感じたく ないから. 仕事が遅れて辛いおもいをしたくないから.

はたして, これからやってけるかな…

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 とか, 便利.