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>

11 Jul 2014, 01:14

pecoで実行コマンドを絞り込んで実行するpeco-M-x

今朝、Archlinuxのdmenuがうまく動かなくなった。

結果的には直ったのだけれども、 dmenuでやっているようなことをpecoでやってみたい。

やりたいこと

実行可能なコマンドを対話的コマンドで検索して、実行する.

Emacsのhelm-M-xのようなことをしたい。

実現方法

  1. 環境変数PATH配下にある実行可能コマンドを表示
  2. 表示結果をpecoで絞り込む。
  3. 検索結果を実行

Implement

シェルですべてかければよかったのだけれども、シェルが苦手なので途中でRubyに逃げた。

だれか、シェルで書き直してくれないかな。(他力本願)

06 Jul 2014, 10:40

最近ナウイpecoを試してみたメモ

最近、なにかとpecoというキーワードをきくようになった。

ナウいツールのようなので、流行に乗り遅れないように、僕も試してみた!

[toc]

pecoとは

pecoとは、コマンドラインからインタラクティブに情報源を検索するためのツール。

みんな大好き、Emacs helmのようなことが、コマンドラインから可能になる。

インストール

pecoはgo言語でかかれているよう。 まだ自分のPCにgoが入っていなかったので、まずはインストールした。

$ sudo pacman -S go
<p>
  パスの設定をする。.zshrcに追記。
</p>

<div class="org-src-container">
  <pre class="src src-language"># for go lang

if [ -x “which go” ]; then export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin fi

<p>
  次に、以下のコマンドでインストール。
</p>

<div class="org-src-container">
  <pre class="src src-sh">$ go get github.com/peco/peco/cmd/peco

<p>
  簡単 🙂
</p>

pecoをつかってみる

pecoにパイプで標準入力を渡す。

$ ls | peco
<p>
  lsのフィルタができた!やたー!!
</p>

pecoの設定

設定ファイルを用意

<div class="outline-text-3" id="text-4-1">
  <p>
    設定ファイルを用意します。$HOME/.peco/config.jsonを用意。
  </p>

  <p>
    なるべく、Emacsに合わせて、キーバインドを設定。
  </p>

  <div class="org-src-container">
    <pre class="src src-json">{
"Keymap": {
    "M-v": "peco.SelectPreviousPage",
    "C-v": "peco.SelectNextPage",
    "C-g": "peco.Cancel"
}

}

alias設定

<div class="outline-text-3" id="text-4-2">
  <p>
    aliasを設定して、もっと便利に。.zshrcに追記。
  </p>

  <div class="org-src-container">
    <pre class="src src-sh"><span style="color: #a6e22e;">alias</span> -g <span style="color: #fd971f;">P</span>=<span style="color: #e6db74;">'| peco'</span>

  <p>
    よく利用しそうな、top, ps, lsあたりにもaliasを切っておく。llあたりは置き換えてしまう。
  </p>

  <div class="org-src-container">
    <pre class="src src-sh"><span style="color: #f92672; font-weight: bold;">if</span> [ -x <span style="color: #e6db74;">"`which peco`"</span> ]; <span style="color: #f92672; font-weight: bold;">then</span>

alias ll=‘ls -la | peco’ alias tp=‘top | peco’ alias pp=‘ps aux | peco’ fi

いろいろとpecoする

コマンド履歴をpecoする

<div class="outline-text-3" id="text-5-1">
  <p>
    まずは、定番のコマンド履歴をフィルター。
  </p>

  <p>
    以下の記事を参考にして、.zshrcに関数を定義しました。Ctrl+rでフィルタがかかる。便利。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://qiita.com/uchiko/items/f6b1528d7362c9310da0">oh-my-zsh の環境で、peco-select-history が動かない &#8211; Qiita</a>
    </li>
  </ul>

  <div class="org-src-container">
    <pre class="src src-sh"><span style="color: #a9a9a9;"># </span><span style="color: #a9a9a9;">history filter</span>

# http://qiita.com/uchiko/items/f6b1528d7362c9310da0 function peco-select-history() { local tac if which tac > /dev/null; then tac=“tac” else tac=“tail -r” fi BUFFER=$(\history -n 1 | </span> eval $tac | </span> peco –query ”$LBUFFER”) CURSOR=$#BUFFER zle clear-screen } zle -N peco-select-history bindkey ’^[x’ peco-select-history # M-xに割り当て

ディレクトリ履歴をpecoする

<div class="outline-text-3" id="text-5-2">
  <p>
    cdrというコマンドを利用すると、最近訪れたディレクトリの一覧を見ることができる。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://keisanbutsuriya.blog.fc2.com/blog-entry-77.html">計算物理屋の研究備忘録 最近移動したディレクトリに一発で移動できるcdrを使う</a>
    </li>
  </ul>

  <div class="org-src-container">
    <pre class="src src-sh"><span style="color: #a6e22e;">autoload</span> -Uz is-at-least

if is-at-least 4.3.11 then autoload -Uz chpwd_recent_dirs cdr add-zsh-hook add-zsh-hook chpwd chpwd_recent_dirs zstyle ‘:chpwd: recent-dirs-max 5000 zstyle ‘:chpwd:‘ recent-dirs-default yes zstyle ‘:completion:*’ recent-dirs-insert both fi

  <p>
    このコマンドを利用して、cdrをpecoでフィルターする。以下を参考にしました。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://shibayu36.hatenablog.com/entry/2014/06/27/223538">pecoを使い始めた &#8211; $shibayu36->blog;</a>
    </li>
    <li>
      <a href="http://piyopiyoducky.net/blog/2013/08/17/cdr-with-percol/">Zshのcdrとpercolで最近移動したディレクトリにAnythingライクに移動する &#8211; PiyoPiyoDucky</a>
    </li>
  </ul>

  <div class="org-src-container">
    <pre class="src src-sh"><span style="color: #f92672; font-weight: bold;">function</span> <span style="color: #00ffff;">peco-cdr</span> () {
<span style="color: #a6e22e;">local</span> <span style="color: #fd971f;">selected_dir</span>=$(cdr -l | awk <span style="color: #e6db74;">'{ print $2 }'</span> | peco)
<span style="color: #f92672; font-weight: bold;">if</span> [ -n <span style="color: #e6db74;">"$selected_dir"</span> ]; <span style="color: #f92672; font-weight: bold;">then</span>
    <span style="color: #fd971f;">BUFFER</span>=<span style="color: #e6db74;">"cd ${selected_dir}"</span>
    zle accept-line
<span style="color: #f92672; font-weight: bold;">fi</span>
zle clear-screen

} zle -N peco-cdr bindkey ’^xr’ peco-cdr

クリップボード履歴をpecoする

<div class="outline-text-3" id="text-5-3">
  <p>
    Linuxでは、 anamnesisというツールを利用するとクリップボードの履歴管理ができる。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://anamnesis.sourceforge.net/">Anamnesis clipboard history manager</a>
    </li>
  </ul>

  <p>
    xclipもインストールする必要あり!
  </p>

  <p>
    以下のaliasを切る。
  </p>

  <div class="org-src-container">
    <pre class="src src-sh"><span style="color: #a6e22e;">alias</span> <span style="color: #fd971f;">ap</span>=<span style="color: #e6db74;">'anamnesis -l 200 | peco'</span>

  <p>
    本当はフィルタ結果をcutして再度クリップボードに挿入したい。それはまた今度。
  </p>
</div>

migemoでpecoする

<div class="outline-text-3" id="text-5-4">
  <p>
    CustomMatcherというものを利用すると、検索する際にフィルタをかけられる。 最近登場した、Go/Migemoもpecoに対応しているようなので、早速ためす。
  </p>

  <div class="org-src-container">
    <pre class="src src-sh">go get github.com/koron/gomigemo/cmd/gmigemo

go get github.com/koron/gomigemo/cmd/gmigemogrep

  <p>
    以下のように、.peco/config.jsonに追記した。
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/peco/peco/wiki/CustomMatcher#migemo">CustomMatcher · peco/peco Wiki · GitHub</a><a href="https://github.com/peco/peco/wiki/CustomMatcher#migemo">CustomMatcher · peco/peco Wiki · GitHub</a>
    </li>
  </ul>

  <p>
    JSONの記法を知らなかったので、CustomMatcherとKeymapの間に,をいれていなくてしばらく悩んでた。
  </p>

  <div class="org-src-container">
    <pre class="src src-json">{
"CustomMatcher": {
    "Migemo": [
        "/home/tsu-nera/go/bin/migemogrep",
        "$QUERY"
    ]
},
"Keymap": {
    "M-v": "peco.SelectPreviousPage",
    "C-v": "peco.SelectNextPage",
    "C-g": "peco.Cancel"
}

}

  <p>
    カスタムマッチャは、pecoの検索中に Ctrl + r を入力することで、トグルすることができる。 これで、Migemoを選択すると、gmigemoが利用できる。
  </p>
</div>

pecoからアプリを起動する

pecoでprocess killする

<div class="outline-text-3" id="text-6-1">
  <p>
    pecoでフィルタした内容をcut や xargsに渡すことで検索結果をさらに加工する。
  </p>

  <p>
    以下のコマンドで firefoxを killする。
  </p>

  <div class="org-src-container">
    <pre class="src src-language">ps -ef | peco | awk '{ print $2 }' | xargs kill

  <p>
    長いので、functionに。
  </p>

  <div class="org-src-container">
    <pre class="src src-sh"><span style="color: #f92672; font-weight: bold;">function</span> <span style="color: #00ffff;">peco-kill-process</span> () {
ps -ef | peco | awk <span style="color: #e6db74;">'{ print $2 }'</span> | xargs kill
zle clear-screen

} zle -N peco-kill-process bindkey ’^xk’ peco-kill-process # C-x k

ls で 検索したファイルを emacsでひらく

<div class="outline-text-3" id="text-6-2">
  <p>
    たとえば、ブログ記事記事なんかをサクッと検索して emacsclientで開きたい。
  </p>

  <div class="org-src-container">
    <pre class="src src-sh"><span style="color: #f92672; font-weight: bold;">function</span> <span style="color: #00ffff;">peco-find-file</span> () {
ls | peco | xargs emacsclient -nw
zle clear-screen

} zle -N peco-find-file bindkey ’^x^f’ peco-find-file # C-x C-f

ls で 検索したファイルを なにかで開く

<div class="outline-text-3" id="text-6-3">
  <p>
    linuxなので、 xdg-openを利用します。
  </p>

  <div class="org-src-container">
    <pre class="src src-sh"><span style="color: #f92672; font-weight: bold;">function</span> <span style="color: #00ffff;">peco-open-app</span> () {
ls | peco | xargs xdg-open
zle clear-screen

} zle -N peco-open-app bindkey ’^xo’ peco-open-app # C-x o

agで検索して、指定行をemacsでひらく

<div class="outline-text-3" id="text-6-4">
  <p>
    以下のような記事を見つけました。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://qiita.com/fmy/items/b92254d14049996f6ec3">ag(The Silver Searcher)で検索しpecoで更に絞り込みvimで該当行を開く &#8211; Qiita</a>
    </li>
  </ul>

  <p>
    emacsも負けてられないので、指定行をemacsで開くfunctionを作成。
  </p>

  <div class="org-src-container">
    <pre class="src src-sh"><span style="color: #f92672; font-weight: bold;">if</span> [ -x <span style="color: #e6db74;">"`which ag`"</span> ]; <span style="color: #f92672; font-weight: bold;">then</span>

function peco-ag () { ag $@ | peco –query ”$LBUFFER” | awk -F : ’{print “+” $2 “ ” $1}’ | xargs emacsclient -nw } fi

  <p>
    Unix哲学万歳.
  </p>
</div>

28 Jun 2014, 11:55

[Coursera]Scala作者直伝の講座!Functional Programming Principles in Scalaを受けた

Courseraを利用して、Scalaの勉強をしました。

[//www.youtube.com/embed/tSCNZvv7ti4]

講座の感想

Scala言語作者の、Martion Odersky直々の講義であるところがまずスゴい。

Scalaを通じて、関数型の考え方を学ぶという内容。

  • Week One: Programming paradigms; overview of functional programming and the Scala programming language.
  • Week Two: Defining and using functions, recursion and non-termination, working with functions as values, reasoning by reduction.
  • Week Three: Defining and using immutable objects, review of inheritance and dynamic binding.
  • Week Four: Types and Pattern Matching
  • Week Five: Working with Lists
  • Week Six: Collections and Combinatorial Search
  • Week Seven: Lazy Evaluation

ついこの前に受けた以下の講座とかぶる部分もたくさんあった。

Lectureの内容も適度な量で、Assignmentの量もそれほど多くはない印象。 すごく時間がかかるというわけではなかった。 ただし、Assignmentの締切りに毎回間に合わなくてすべて遅れて提出・・・これが無念。

また、考え方がなれていないので、概念の理解はすこし時間がかかった。 いわゆるコップ本と呼ばれている以下の参考書を片手にガンバッタ。

Scalaの感想

講義の内容をそのまま引用してしまうが、 以下のような関数型の概念は、OOPの世界にいる自分にとってはとっても新鮮だった。

Functional programming provides a coherent set of notations and

  • methods based on higher-order functions,(高階関数)
  • case classes and pattern matching,(パターンマッチング)
  • immutable collections, absence of mutable state(イミュータブル)
  • flexible evaluation strategies:strict/lazy/by name(遅延評価)

A useful toolkit for every programmer. A different way of thinking about programs.

仕事ではRubyをつかっているが、 講座を受ける中でRubyが関数型言語の特性をたくさんもっていることに気がついたりした。

関数型の考え方を身につければ、Rubyも饒舌になれる。

関数型の考え方をはやく身につけて、 プログラミングの表現の幅をもっともっと広げたいと思った。

Scalaは美しい

<div class="outline-text-3" id="text-2-1">
  <p>
    Scalaに触れて一番驚いたのは、表現の簡潔さだ。
  </p>

  <p>
    Scalaではワンラインで表現できてしまう場面がたくさんある。 あまりに一行に詰め込みすぎるのも読みづらいので、 適度にインデントすると5行くらいになる。
  </p>

  <p>
    たった、5行である!一般的にScalaのコード量はJavaの半分になると言われているらしい!
  </p>

  <p>
    はじめにこれを聞いたときは、懐疑的だったけれども、今となっては納得である。
  </p>
</div>

これからどうするか

Scalaはとても気に入った。

講座が終わってしまったが、Scalaはこれからも折に触れて触っていきたい。 正直なところ、2ヶ月の講座だけではまだScalaを身につけたといえる自信がない。 力を伸ばすためにも、いろいろな場面でScalaを書いていこうと思う。

スクリプト言語としてのScala

<div class="outline-text-3" id="text-3-1">
  <p>
    Scalaはスクリプトとしても実行できる。 まずは、簡単なスクリプトを書くときにScalaを選択しようと思う。
  </p>

  <p>
    Scalaをスクリプトとして利用する最大の問題点は、起動にかかる時間だ。 ScalaはJVM上で動作するので、JVMの起動に時間がかかる。
  </p>

  <p>
    しかし、今はそれを我慢してでもScala力をみにつけたい。
  </p>
</div>

ほかの関数型言語も

<div class="outline-text-3" id="text-3-2">
  <p>
    自分が次に挑戦しようと考えてことは、Emacs Lispを身につけること。
  </p>

  <p>
    どういうわけか、最近とてもEmacsが気に入っている。 自分でもEmacs Lispがかけたらいいなと思う。
  </p>

  <p>
    Lispということで、同じ関数型でもScalaとは毛色がまた違うのだが、 それも新しい価値観に触れるということで、いいことだ。
  </p>
</div>

25 Jun 2014, 22:41

デュアルディスプレイヤーのためのEmacs Tips

会社でトリプルディスプレイにした結果、 生産性が効率が下がったように感じる今日この頃。

生産性をあげるために、 マルチディスプレイ環境におけるEmacsの使い方について調べてみた。

フレーム間操作

マルチディスプレイでは、別フレームを利用するのがよさそう。

# 別フレームを生成
C-x 5 2 

# ファイルを探して別フレームで開く
C-x 5 f

# バッファを別フレームで開く
C-x 5 b
<p>
  別フレームへは以下のコマンドで移動。
</p>

<div class="org-src-container">
  <pre class="src src-language">other-frame or C-x 5 o

next-multiframe-window

ace-jump-mode

もっとベターなのがこの方法。ace-jump-modeを利用する。

これを利用すると、フレームを越えて移動したい場所に3ステップでジャンプできる。

このLispのスゴさは、Emacs Rocksの動画を見るのがよい。

赤い文字でターゲットを絞って、ジャンプできる。すげぇ!

Emacs is Awesome.

21 Jun 2014, 06:13

[Edx] ライフハックでは人間は変われない!Unlocking the Immunity to Changeで早寝早起きに挑戦した

Edxで Unlocking the Immunity to Changeという講座を受講した記録です。

[//www.youtube.com/embed/lPiWUjbtQvk]

[toc]

感想について

課題を通じて自己変革

<div class="outline-text-3" id="text-1-1">
  <p>
    この講座は、目標達成のための理論が紹介される。
  </p>

  <p>
    受講者は、はじめに自分の達成したい目標を決める。 そして、毎週課題に取り組むことで自分自身の変革を目指す。
  </p>

  <p>
    毎週課題に取り組むというスタイルがよかった。 自己啓発本を読んではその都度挫折してきたこんな自分でも、 継続して自己変革に取り込むことができた。
  </p>

  <p>
    成果も着実にでているので、この講座は大変に満足している。
  </p>
</div>

もっと評価されるべき Immunity to Change

<div class="outline-text-3" id="text-1-2">
  <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/%E3%81%AA%E3%81%9C%E4%BA%BA%E3%81%A8%E7%B5%84%E7%B9%94%E3%81%AF%E5%A4%89%E3%82%8F%E3%82%8C%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B%E2%80%95%E2%80%95%E3%83%8F%E3%83%BC%E3%83%90%E3%83%BC%E3%83%89%E6%B5%81-%E8%87%AA%E5%B7%B1%E5%A4%89%E9%9D%A9%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%B7%B5-%E3%83%AD%E3%83%90%E3%83%BC%E3%83%88%E3%83%BB%E3%82%AD%E3%83%BC%E3%82%AC%E3%83%B3/dp/4862761542%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4862761542' target='_blank' rel='nofollow'><img src='http://ecx.images-amazon.com/images/I/41H8nvJbCML._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/%E3%81%AA%E3%81%9C%E4%BA%BA%E3%81%A8%E7%B5%84%E7%B9%94%E3%81%AF%E5%A4%89%E3%82%8F%E3%82%8C%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B%E2%80%95%E2%80%95%E3%83%8F%E3%83%BC%E3%83%90%E3%83%BC%E3%83%89%E6%B5%81-%E8%87%AA%E5%B7%B1%E5%A4%89%E9%9D%A9%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%B7%B5-%E3%83%AD%E3%83%90%E3%83%BC%E3%83%88%E3%83%BB%E3%82%AD%E3%83%BC%E3%82%AC%E3%83%B3/dp/4862761542%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4862761542' 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.06.21
        </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/%E3%81%AA%E3%81%9C%E4%BA%BA%E3%81%A8%E7%B5%84%E7%B9%94%E3%81%AF%E5%A4%89%E3%82%8F%E3%82%8C%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B%E2%80%95%E2%80%95%E3%83%8F%E3%83%BC%E3%83%90%E3%83%BC%E3%83%89%E6%B5%81-%E8%87%AA%E5%B7%B1%E5%A4%89%E9%9D%A9%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%B7%B5-%E3%83%AD%E3%83%90%E3%83%BC%E3%83%88%E3%83%BB%E3%82%AD%E3%83%BC%E3%82%AC%E3%83%B3/dp/4862761542%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4862761542' 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%2F12523496%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Frms%2Fmsv%2FItem%3Fn%3D12523496%26surl%3Dbook' rel='nofollow' target='_blank'>楽天</a>
          </div>
        </div>
      </div>
    </div>
  </div>

  <p>
    書店にいくと自己啓発本はたくさん売っている。 そんな数ある本のなかでもこの本で紹介されている手法は、 際立って理路整然としてまた独創的な印象を受けた。
  </p>

  <p>
    課題は本に載っている内容とほぼ同じ。 ちなみに、課題にはすべて日本語で取り組んだ。
  </p>

  <p>
    この本はもっと評価されるべき!以下、講義の内容についてのメモ。
  </p>
</div>

Immunity to Changeの理論について

この本は、キーガン先生とレイヒー先生の、 25年に渡る研究者人生のすべてを費やして書かれた本。 こういうことを書かれると、それだけで理論に凄みが増す。

以下の大前提をもとに、この本はかかれている。

~ 大人になっても人間は成長できる ~

死ぬのをわかっていても変われない

<div class="outline-text-3" id="text-2-1">
  <p>
    はじめの書き出しがとても印象的だ。
  </p>

  <blockquote>
    <p>
      最近の研究によると、食生活を改めたり、もっと運動したり、<br /> 喫煙をやめたりしなければ心臓病で死にますよと専門医から警告されたときに、<br /> 実際に自分をそのように変えることができる人は七人に一人にすぎないという。
    </p>

    <p>
      たった七人に一人だ!
    </p>

    <p>
      人は、自分の命に関わる問題でさえ、自分自身が心から望んでいる変革を実行できない。
    </p>

    <p>
      自分が本心からやりたいと望んでいることと<br /> 実際に実行できることの間には大きな溝がある。
    </p>
  </blockquote>
</div>

技術的課題と適応的課題

<div class="outline-text-3" id="text-2-2">
  <p>
    課題には2種類ある。適応的課題に技術的なアプローチをしても失敗する。
  </p>

  <p>
    たとえば、ダイエットの達成のために高いマシンや情報教材を購入して 一時的に目標を達成しても、時間がたつとリバウンドする。
  </p>

  <p>
    これは、心が変わらないから。恒常性を維持する自然な免疫力で適応を阻まれたから。
  </p>
</div>

免疫マップ

<div class="outline-text-3" id="text-2-3">
  <p>
    人が変われない原因は、心の免疫システムにある。
  </p>

  <p>
    その免疫システムを4つのステップで解明していき、 各ステップの関わりを見える化したものが、免疫マップ。
  </p>
</div>

<div id="outline-container-sec-2-3-1" class="outline-4">
  <h4 id="sec-2-3-1">
    1.改善目標
  </h4>

  <div class="outline-text-4" id="text-2-3-1">
    <p>
      改善したい目標。一般的な意味と違いはない。 しかし、この1から展開される2から4が独創的なのだ。
    </p>
  </div>
</div>

<div id="outline-container-sec-2-3-2" class="outline-4">
  <h4 id="sec-2-3-2">
    2.阻害行動
  </h4>

  <div class="outline-text-4" id="text-2-3-2">
    <p>
      1の目標を達成しようとしたときに、それを妨げる自分の行動をリストアップする。 心の免疫システムによって、変化しようとしたときに生じる行動を明文化する。
    </p>
  </div>
</div>

<div id="outline-container-sec-2-3-3" class="outline-4">
  <h4 id="sec-2-3-3">
    3.裏の目標
  </h4>

  <div class="outline-text-4" id="text-2-3-3">
    <p>
      2の阻害行動をやめようとしたときに、生じる感情を不安ボックスに記入する。 ここで記入するものは、感情につよく関連しているものである必要がある。
    </p>

    <p>
      くそっ!ちくしょう!Shit!, Fuck! 汚い言葉であれば汚いほど推奨される。
    </p>

    <p>
      そして、その不安ボックスの中から1の改善目標に対立する考えをあぶり出す! 変革に重要なことは、この考えを取り除くこと。これこそが裏の目標。
    </p>
  </div>
</div>

<div id="outline-container-sec-2-3-4" class="outline-4">
  <h4 id="sec-2-3-4">
    4.強力な固定概念
  </h4>

  <div class="outline-text-4" id="text-2-3-4">
    <p>
      強力な固定概念とは、3の裏の目標をもつような人が抱いている思い込み。
    </p>

    <p>
      変革阻害システムの根底にある思い込みを言語化することで、表舞台に引きずり出す。 そのことによって、免疫観念を克服しやすくなる。
    </p>
  </div>
</div>

継続的発展(Continuum of Progress)

<div class="outline-text-3" id="text-2-4">
  <p>
    3つの視点から、 目標の達成と強力な固定観念の除去が達成されたときの状態を分析する。
  </p>

  <ul class="org-ul">
    <li>
      Behaviors(振る舞い)
    </li>
    <li>
      Thoughts(理性的な思考)
    </li>
    <li>
      Feeling(感情、心情)
    </li>
  </ul>

  <p>
    3つタイムスパンから、 目標の達成と強力な固定観念の除去が達成されたときの状態を分析する。
  </p>

  <ul class="org-ul">
    <li>
      initial steps forward
    </li>
    <li>
      Significant Progress
    </li>
    <li>
      Full success
    </li>
  </ul>
</div>

SMART

<div class="outline-text-3" id="text-2-5">
  <p>
    よい実験の条件。
  </p>
</div>

<div id="outline-container-sec-2-5-1" class="outline-4">
  <h4 id="sec-2-5-1">
    SAFE
  </h4>

  <div class="outline-text-4" id="text-2-5-1">
    <p>
      Safe means that if the worst-case outcome were to occur, you could live with it!
    </p>
  </div>
</div>

<div id="outline-container-sec-2-5-2" class="outline-4">
  <h4 id="sec-2-5-2">
    MODEST
  </h4>

  <div class="outline-text-4" id="text-2-5-2">
    <p>
      Modest means that the test is relatively easy to carry out (ideally, it doesn&#8217;t require you to go out of your way at all, but rather is an opportunity to do something different in your normal day). It can also mean you make a small change in what you do.
    </p>
  </div>
</div>

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

  <div class="outline-text-4" id="text-2-5-3">
    <p>
      a good test will be actionable in the near-term. This means that you are able to carry it out within the next week or so. You can easily imagine a setting or upcoming situation in which to run your test.
    </p>
  </div>
</div>

<div id="outline-container-sec-2-5-4" class="outline-4">
  <h4 id="sec-2-5-4">
    RESERCH
  </h4>

  <div class="outline-text-4" id="text-2-5-4">
    <p>
      &#8220;how accurate is my Big Assumption?&#8221; and, like any good research, it requires collecting data (including data that would qualify your assumption or call it into doubt). In addition to how people react to you, your feelings can be a very rich data source.
    </p>
  </div>
</div>

<div id="outline-container-sec-2-5-5" class="outline-4">
  <h4 id="sec-2-5-5">
    TEST
  </h4>

  <div class="outline-text-4" id="text-2-5-5">
    <p>
      The test, in fact, tests your Big Assumption. A &#8220;test&#8221; should not be some clever way to prove that your Big Assumption is true! Your test should be designed so that it can generate disconfirming data (data that proves that your Big Assumption is not always true),if it exists.
    </p>
  </div>
</div>

Running Your First Test

<div class="outline-text-3" id="text-2-6">
  <ul class="org-ul">
    <li>
      強力な固定観念からスタートする。
    </li>
  </ul>

  <p>
    What experiment would give you information about how accurate it is (or isn&#8217;t)?
  </p>

  <ul class="org-ul">
    <li>
      振る舞いからスタートする。
    </li>
  </ul>

  <p>
    What behavior could you change that would get you useful information about your Big Assumption?
  </p>
</div>

<div id="outline-container-sec-2-6-1" class="outline-4">
  <h4 id="sec-2-6-1">
    どのようなデータを集めるか
  </h4>

  <div class="outline-text-4" id="text-2-6-1">
    <p>
      ビデオテープに収めることができるデータまたは、 自分の心情の経験的データをあつめる。
    </p>

    <p>
      自分の行動に依存しないような、行間を読むような、 たとえば他人の心情を推し量るようなデータはダメ。
    </p>

    <ul class="org-ul">
      <li>
        Directly observable data
      </li>
    </ul>

    <p>
      the actual things people say or do, the words or action that would be captured on videotape if the event were recorded. This includes what you do and say, as well as what any other people in the test situation do and say.
    </p>

    <ul class="org-ul">
      <li>
        Experiential data on your own inner states
      </li>
    </ul>

    <p>
      how you feel or make sense of what happens during your test. Depending on your Big Assumption and your test design, this type of data may be the only type you can collect.
    </p>
  </div>
</div>

DICE

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

<div id="outline-container-sec-2-7-1" class="outline-4">
  <h4 id="sec-2-7-1">
    Did, do data
  </h4>

  <div class="outline-text-4" id="text-2-7-1">
    <p>
      What you actually did and the data you collected
    </p>
  </div>
</div>

<div id="outline-container-sec-2-7-2" class="outline-4">
  <h4 id="sec-2-7-2">
    Interpretation
  </h4>

  <div class="outline-text-4" id="text-2-7-2">
    <p>
      How you interpret that data (or the multiple interpretations you make)
    </p>
  </div>
</div>

<div id="outline-container-sec-2-7-3" class="outline-4">
  <h4 id="sec-2-7-3">
    Connection to Big Assumption
  </h4>

  <div class="outline-text-4" id="text-2-7-3">
    <p>
      What the data tells you about your BA
    </p>
  </div>
</div>

<div id="outline-container-sec-2-7-4" class="outline-4">
  <h4 id="sec-2-7-4">
    Encore
  </h4>

  <div class="outline-text-4" id="text-2-7-4">
    <p>
      What the data tells you about your BA What text can you run next
    </p>
  </div>
</div>

継続的発展(Continuum of Progress)

<div class="outline-text-3" id="text-2-8">
  <p>
    3つの視点から、目標の達成と強力な固定観念の除去が達成されたときの状態を分析する。
  </p>

  <ul class="org-ul">
    <li>
      Behaviors(振る舞い)
    </li>
    <li>
      Thoughts(理性的な思考)
    </li>
    <li>
      Feeling(感情、心情)
    </li>
  </ul>
</div>

Hooks and Releases

<div class="outline-text-3" id="text-2-9">
  <p>
    変化には4段階ある。
  </p>

  <p>
    Hooks(落とし穴)とRelease(脱出ルート)を意識することが必要。
  </p>

  <ul class="org-ul">
    <li>
      どのような状況でBAは正しいか
    </li>
    <li>
      どのような状況でBAは猛威をふるうか
    </li>
    <li>
      BAに支配されそうになったときに、 その状態から抜け出すための手軽な方法やセルフトークを確立できているか
    </li>
  </ul>
</div>

<div id="outline-container-sec-2-9-1" class="outline-4">
  <h4 id="sec-2-9-1">
    UNCONSCIOUSLY &#8220;IMMUNE&#8221;(無意識的に影響下)
  </h4>

  <div class="outline-text-4" id="text-2-9-1">
    <p>
      はじめの段階。
    </p>

    <p>
      This is where we all are when we first begin the process you have learned in this program.
    </p>
  </div>
</div>

<div id="outline-container-sec-2-9-2" class="outline-4">
  <h4 id="sec-2-9-2">
    CONSCIOUSLY &#8220;IMMUNE&#8221;(意識的に影響下)
  </h4>

  <div class="outline-text-4" id="text-2-9-2">
    <p>
      意識的に変化しようとしている状態。
    </p>

    <p>
      This is a stage in the process that may not seem like to you like big progress, since so many of us judge success only on behavioral change,
    </p>
  </div>
</div>

<div id="outline-container-sec-2-9-3" class="outline-4">
  <h4 id="sec-2-9-3">
    CONSCIOUSLY &#8220;RELEASED&#8221;(意識的に自由)
  </h4>

  <div class="outline-text-4" id="text-2-9-3">
    <p>
      Big Assumptionsから距離をおいて考えるようになった状態。 Big Assumptionsを意識的にコントロールできる状態。
    </p>

    <p>
      どういうときにBAの影響がつよくなり、 その時にどのようなself-talkをすればBAの影響を防ぐことができるかを 自覚している状態。
    </p>

    <p>
      Being Consciously Released from your Big Assumptions means that you have begun to win some distance from their control.
    </p>
  </div>
</div>

<div id="outline-container-sec-2-9-4" class="outline-4">
  <h4 id="sec-2-9-4">
    UNCONSCIOUSLY &#8220;RELEASED&#8221;(無意識的に自由)
  </h4>

  <div class="outline-text-4" id="text-2-9-4">
    <p>
      新しい信条によって自然に行動できる状態。 自然とBAに反する行動ができる状態。
    </p>

    <p>
      At this point, you automatically act and think in ways that run counter to your previously held Big Assumption in those situations where it is not valid.
    </p>
  </div>
</div>

自分の挑戦

自分の挑戦体験記を後悔。間違えた、公開。

免疫マップ

<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">
    1.改善目標
  </h4>

  <div class="outline-text-4" id="text-3-1-1">
    <p>
      早寝早起きをして規則正しい生活をする。
    </p>

    <p>
      早寝早起き、自分にとってはもっとも改善が必要な課題。
    </p>

    <ul class="org-ul">
      <li>
        社会人なのに、朝起きられず、遅刻ばかりしてしまう。
      </li>
      <li>
        朝起きられないため、精神科に通って毎日坑不安剤を飲んでいる。
      </li>
    </ul>

    <p>
      しかし、かつては早起きができていた。 改善しようという努力によって短い間だけれども、早起きが定着してた。
    </p>

    <p>
      今の状況は、リバウンドだと思っている。 より、早起きできなくなった。これは適応的課題。
    </p>
  </div>
</div>

<div id="outline-container-sec-3-1-2" class="outline-4">
  <h4 id="sec-3-1-2">
    2.阻害行動
  </h4>

  <div class="outline-text-4" id="text-3-1-2">
    <ul class="org-ul">
      <li>
        家に帰ってから寝るまでの間に計画していないことをする。
      </li>
      <li>
        その日にしなくてもいいことを、その日のうちにしてしまう。
      </li>
      <li>
        寝る前にネットサーフィンしてしまう、ドラクエしてしまう。
      </li>
      <li>
        就寝儀式にしたがって行動していない。
      </li>
      <li>
        翌日の予定を立てて寝ない。
      </li>
      <li>
        寝る時間が不安定。
      </li>
      <li>
        目覚ましをかけて寝ない。
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-3-1-3" class="outline-4">
  <h4 id="sec-3-1-3">
    3.裏の目標
  </h4>

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

  <ul class="org-ul">
    <li>
      不安ボックス<br /> <div class="outline-text-5" id="text-3-1-3-1">
        <ul class="org-ul">
          <li>
            ちくしょう!ただでさえ自分の時間がないのに、早く寝るのなんてまっぴらだ!
          </li>
          <li>
            明日もきっと自分の好きなことができない。
          </li>
          <li>
            くそ、今日中にするべきことが終わらない。絶対にこれは今日しなければいけないのに。
          </li>
          <li>
            また起きれなかったという虚無感を味わうくらいなら、 取り返しがつかないほどに夜更かししてしまえ。
          </li>
          <li>
            今更寝たってどうせ起きられないよ。またダメだという気持を味わいたくない。
          </li>
        </ul>
      </div>
    </li>

    <li>
      裏の目標<br /> <div class="outline-text-5" id="text-3-1-3-2">
        <ul class="org-ul">
          <li>
            朝ゆっくり休みすぎたことよって、満員電車で疲れるようなことはしたくない。
          </li>
          <li>
            今の幸せや快楽に溺れた挙句、長期的な大きな喜びを手放したくない。
          </li>
          <li>
            寝坊してしまい、またダメだった、また変われなかったという屈辱感を味わいたくない。
          </li>
          <li>
            どうにでもなれという投げやりで計画性のない人間にはなりたくない。
          </li>
          <li>
            よい習慣がいつになってもみにつかず、時間が経っていつも後悔したくない。
          </li>
          <li>
            その場の感情で投げやりになって計画性がない人になりたくない。
          </li>
          <li>
            どうせダメだろうという諦めの気持だけで、挑戦をしないような人間になりたくない。
          </li>
        </ul>
      </div>
    </li>
  </ul>
</div>

<div id="outline-container-sec-3-1-4" class="outline-4">
  <h4 id="sec-3-1-4">
    4.強力な固定概念
  </h4>

  <div class="outline-text-4" id="text-3-1-4">
    <ul class="org-ul">
      <li>
        寝坊すると怠惰な人間に思われる。
      </li>
      <li>
        寝坊すると計画性のない人間に思われる。
      </li>
      <li>
        寝坊するとなんの目標も達成できない。
      </li>
      <li>
        寝坊するとダメな人間になる。
      </li>
      <li>
        その場の快楽や感情に流されているとダメな人間になる。
      </li>
      <li>
        早く寝たって、明日もどうせ早く起きることができない。
      </li>
      <li>
        いつも時間がない。
      </li>
      <li>
        明日もきっと自分の好きなことをする時間がない。
      </li>
      <li>
        よい習慣を身につけようとしてもどうせ続かない。
      </li>
      <li>
        寝坊するとひどい罪悪感と虚無感を味わうことになる。
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-3-1-5" class="outline-4">
  <h4 id="sec-3-1-5">
    完成した免疫マップのレビュー
  </h4>

  <div class="outline-text-4" id="text-3-1-5">
    <p>
      ここまでの分析をして、自分には&#8221;いつも時間がない&#8221;という固定観念があるように思えた。
    </p>

    <p>
      朝起きることができない理由は、時間管理にあるのでは?本当に時間がないのか? 時間がない、という思い込みこそが固定観念で、事実とは違うのでは?
    </p>

    <p>
      また、なんどもなんども朝起きようとしては挫折してきた結果、 &#8220;頑張ってもどうせおきられない&#8221;という固定観念があるように思えた。
    </p>

    <ul class="org-ul">
      <li>
        どうせ、早く寝ても朝起きられない。
      </li>
      <li>
        睡眠時間を記録しても、どうせ途中で止めてしまう。
      </li>
      <li>
        どうせ、またギリギリまでふとんのなかでぬくぬくしている。
      </li>
    </ul>

    <p>
      まとめると、以下の2つが固定観念として浮かび上がってきた。
    </p>

    <ul class="org-ul">
      <li>
        いつも時間がない。
      </li>
      <li>
        どうせ早く起きられない。
      </li>
    </ul>

    <p>
      この2つの固定観念に関する検証をすることにした。
    </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">
    前に進むためのはじめのステップ(Initial Steps Forward)
  </h4>

  <div class="outline-text-4" id="text-3-2-1">
    <ul class="org-ul">
      <li>
        Behaviors(振る舞い~する。) <ul class="org-ul">
          <li>
            家にかえったら、決めたこと以外はやらないで、まっすぐにふとんに入る。
          </li>
          <li>
            夜、やりたいことが発生したら、メモして後日にまわせるようになる。
          </li>
          <li>
            今飲んでいる抗うつ剤、抗不安剤の量を減らす。
          </li>
          <li>
            ジムに通う習慣を取り戻す。(時間がないといいわけしない)
          </li>
        </ul>
      </li>

      <li>
        Thoughts(理性的な思考~知る、考える) <ul class="org-ul">
          <li>
            遅くまで起きようとしたときの感情を距離を置いて観察できるようになる。
          </li>
          <li>
            自分がどのようなときに遅くまで起きているか、早く寝るかを観察できる。
          </li>
        </ul>
      </li>

      <li>
        Feeling(感情、心情~感じる) <ul class="org-ul">
          <li>
            明日もきっと早く起きれると、信じてふとんに入ることができる。
          </li>
        </ul>
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-3-2-2" class="outline-4">
  <h4 id="sec-3-2-2">
    スゴい発展(Significant Progress)
  </h4>

  <div class="outline-text-4" id="text-3-2-2">
    <ul class="org-ul">
      <li>
        Behaviors(振る舞い~する。) <ul class="org-ul">
          <li>
            朝5時に起きる習慣が身につく。
          </li>
          <li>
            見積りと実績の作業時間を記録し分析する習慣が身につく。
          </li>
        </ul>
      </li>

      <li>
        Thoughts(理性的な思考~知る、考える) <ul class="org-ul">
          <li>
            やりたいことが発生したときに、その感情を抑制することができる。
          </li>
        </ul>
      </li>

      <li>
        Feeling(感情、心情~感じる) <ul class="org-ul">
          <li>
            &#8220;時間がない&#8221;という無意識的に心の中で唱えつづける声が聞こえなくなる。
          </li>
        </ul>
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-3-2-3" class="outline-4">
  <h4 id="sec-3-2-3">
    満ち足りた成功(Full Success)
  </h4>

  <div class="outline-text-4" id="text-3-2-3">
    <ul class="org-ul">
      <li>
        Behaviors(振る舞い) <ul class="org-ul">
          <li>
            目覚ましをつかわないでも、早寝早起きができている。
          </li>
          <li>
            早寝早起きが当たり前のこととして、継続できている。
          </li>
          <li>
            規則正しく、安定した睡眠時間が継続できている。
          </li>
          <li>
            満員電車をさけて出社できている。
          </li>
          <li>
            澄み切った心で集中して勉強に取り組み、数々の成果を出す。
          </li>
        </ul>
      </li>

      <li>
        Thoughts(理性的な思考) <ul class="org-ul">
          <li>
            その場の欲望に流されず、感情をコントロールすることができる。
          </li>
          <li>
            やりたいことが発生しても、優先順位を見極めて感情を抑制することができる。
          </li>
        </ul>
      </li>

      <li>
        Feeling(感情、心情) <ul class="org-ul">
          <li>
            寝坊しても、罪悪感を感じなくなる。
          </li>
          <li>
            時間に余裕を感じる。時間に対する不安感や焦り、動悸を感じなくなる。
          </li>
          <li>
            寝るときと起きたときは、澄み切った感覚を得ることが出来る。
          </li>
          <li>
            時間の不安感から開放され、意欲が沸いてくる。
          </li>
        </ul>
      </li>
    </ul>
  </div>
</div>

実験計画1 目覚ましをかけずに21時に寝る

<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">
    実験計画
  </h4>

  <div class="outline-text-4" id="text-3-3-1">
    <p>
      目覚ましをかけないで、21時に寝る。
    </p>

    <p>
      目覚ましがないと起きられないのか?今までのように寝坊するのか?
    </p>
  </div>

  <ul class="org-ul">
    <li>
      どのようなデータを集めるか<br /> <div class="outline-text-5" id="text-3-3-1-1">
        <p>
          起床時間。
        </p>
      </div>
    </li>

    <li>
      どういう結果が得られたときに固定観念が反証されたとみなすか<br /> <div class="outline-text-5" id="text-3-3-1-2">
        <p>
          目覚ましをつかわなくても5時に起きれた日が3日あったら。
        </p>
      </div>
    </li>
  </ul>
</div>

<div id="outline-container-sec-3-3-2" class="outline-4">
  <h4 id="sec-3-3-2">
    実験結果
  </h4>

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

  <ul class="org-ul">
    <li>
      はやく寝ようとしたときに生じた感情記録<br /> <div class="outline-text-5" id="text-3-3-2-1">
        <p>
          まっすぐにふとんに入ると、そわそわする。 しかし、それははじめだけで、次第に早く寝たいと思うようになる。
        </p>
      </div>
    </li>

    <li>
      実験データ<br /> <div class="outline-text-5" id="text-3-3-2-2">
        <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
          <colgroup> <col class="left" /> <col class="right" /> <col class="right" /> <col class="right" /> </colgroup> <tr>
            <th scope="col" class="left">
              Date
            </th>

            <th scope="col" class="right">
              Bed
            </th>

            <th scope="col" class="right">
              Wake
            </th>

            <th scope="col" class="right">
              &#xa0;
            </th>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-04-14 月></span></span>
            </td>

            <td class="right">
              21.0
            </td>

            <td class="right">
              4.5
            </td>

            <td class="right">
              7.5
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-04-15 火></span></span>
            </td>

            <td class="right">
              23.5
            </td>

            <td class="right">
              7.0
            </td>

            <td class="right">
              7.5
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-04-16 水></span></span>
            </td>

            <td class="right">
              21.5
            </td>

            <td class="right">
              5.0
            </td>

            <td class="right">
              7.5
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-04-17 木></span></span>
            </td>

            <td class="right">
              22.0
            </td>

            <td class="right">
              7.0
            </td>

            <td class="right">
              9.
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-04-18 金></span></span>
            </td>

            <td class="right">
              23.5
            </td>

            <td class="right">
              7.5
            </td>

            <td class="right">
              8.
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-04-19 土></span></span>
            </td>

            <td class="right">
              22.0
            </td>

            <td class="right">
              4.5
            </td>

            <td class="right">
              6.5
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-04-20 日></span></span>
            </td>

            <td class="right">
              21.5
            </td>

            <td class="right">
              4.5
            </td>

            <td class="right">
              7.
            </td>
          </tr>

          <tr>
            <td class="left">
              Average
            </td>

            <td class="right">
              22.142857
            </td>

            <td class="right">
              5.7142857
            </td>

            <td class="right">
              7.6428567
            </td>
          </tr>
        </table>
      </div>
    </li>
  </ul>
</div>

<div id="outline-container-sec-3-3-3" class="outline-4">
  <h4 id="sec-3-3-3">
    結果の解釈
  </h4>

  <div class="outline-text-4" id="text-3-3-3">
    <ul class="org-ul">
      <li>
        目覚ましをかけなくても自然と目が覚める。
      </li>
      <li>
        だいたい7.5時間で目が覚める。
      </li>
      <li>
        残業して遅く寝た日ははやく起きられない。
      </li>
      <li>
        夢をよくみる。
      </li>
    </ul>

    <p>
      早くふとんにはいって寝た日は目覚ましをつかわず、目が覚めた。
    </p>

    <p>
      よって、固定観念は反証された。
    </p>
  </div>
</div>

実験計画2 計画外の時間と感情の記録

<div class="outline-text-3" id="text-3-4">
  <p>
    夜更かしをしてしまう日は、心に余裕がないときが多い気がする。
  </p>

  <p>
    心の不安は、計画どおりにタスクがこなせなかった日が多い気がする。
  </p>

  <p>
    予定外の仕事をした日と、心の不安感には相関関係があるか? 時間がないという思い込みは、予定どおり計画が進まない不安感からくるか?
  </p>

  <p>
    実験する前からそんな気がするが、 この仮説を裏付けるデータを採取して検証してみる。
  </p>
</div>

<div id="outline-container-sec-3-4-1" class="outline-4">
  <h4 id="sec-3-4-1">
    どのようなデータを集めるか
  </h4>

  <div class="outline-text-4" id="text-3-4-1">
    <p>
      タスクを予定・予定外でわけて、予定外の作業に費やした時間を収集する。
    </p>

    <p>
      一日の終わりに、&#8221;時間がない&#8221;と感じたか、を5段階で評価する。
    </p>
  </div>
</div>

<div id="outline-container-sec-3-4-2" class="outline-4">
  <h4 id="sec-3-4-2">
    どういう結果が得られたときに固定観念が反証されたとみなすか
  </h4>

  <div class="outline-text-4" id="text-3-4-2">
    <p>
      予定外の作業時間と不安感に相関関係があったとき。
    </p>
  </div>
</div>

<div id="outline-container-sec-3-4-3" class="outline-4">
  <h4 id="sec-3-4-3">
    実験結果
  </h4>

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

  <ul class="org-ul">
    <li>
      実験データ<br /> <div class="outline-text-5" id="text-3-4-3-1">
        <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
          <colgroup> <col class="left" /> <col class="right" /> <col class="right" /> <col class="right" /> </colgroup> <tr>
            <td class="left">
              date
            </td>

            <td class="right">
              next
            </td>

            <td class="right">
              unplan
            </td>

            <td class="right">
              feeling
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-04-29 火></span></span>
            </td>

            <td class="right">
              5.6
            </td>

            <td class="right">
              4.4
            </td>

            <td class="right">
              &#xa0;
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-04-30 水></span></span>
            </td>

            <td class="right">
            </td>

            <td class="right">
              1.0
            </td>

            <td class="right">
              2
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-05-02 金></span></span>
            </td>

            <td class="right">
              6.9
            </td>

            <td class="right">
              3.4
            </td>

            <td class="right">
              2
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-05-03 金></span></span>
            </td>

            <td class="right">
              5.35
            </td>

            <td class="right">
              4
            </td>

            <td class="right">
              2
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-05-05 月></span></span>
            </td>

            <td class="right">
              11.25
            </td>

            <td class="right">
              1.8
            </td>

            <td class="right">
              2
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-05-06 火></span></span>
            </td>

            <td class="right">
              12.5
            </td>

            <td class="right">
            </td>

            <td class="right">
              3
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-05-10 土></span></span>
            </td>

            <td class="right">
            </td>

            <td class="right">
            </td>

            <td class="right">
              4
            </td>
          </tr>

          <tr>
            <td class="left">
              <span class="timestamp-wrapper"><span class="timestamp"><2014-05-11 土></span></span>
            </td>

            <td class="right">
              12.5
            </td>

            <td class="right">
            </td>

            <td class="right">
              2
            </td>
          </tr>
        </table>
      </div>
    </li>
  </ul>
</div>

<div id="outline-container-sec-3-4-4" class="outline-4">
  <h4 id="sec-3-4-4">
    結果の解釈
  </h4>

  <div class="outline-text-4" id="text-3-4-4">
    <ul class="org-ul">
      <li>
        やや相関関係があるが、つよくはない。
      </li>
      <li>
        予定外のことをした以外にも、以下の要因がある。 <ul class="org-ul">
          <li>
            見積もった時間を大幅にオーバーしてしまったとき。
          </li>
          <li>
            寝坊して、一週間のうちにやろうと思っていたことが遅れているとき。 日の単位ではなくでもっと長いスパンで遅れを感じると不安になる。
          </li>
        </ul>
      </li>
    </ul>

    <p>
      この実験では、あまりよい成果が得られなかった。
    </p>

    <p>
      時間がないということは、
    </p>

    <ol class="org-ol">
      <li>
        物理的に時間がない
      </li>
      <li>
        不安感から時間がないと感じる
      </li>
    </ol>

    <p>
      の2つしかない。2の場合は、克服できるはず。
    </p>

    <p>
      また、不安感は2つからくることを知った。
    </p>

    <ul class="org-ul">
      <li>
        予定どおりに進まない、見積りを誤る
      </li>
      <li>
        予定外のことをする
      </li>
    </ul>
  </div>
</div>

実験計画3 走る

<div class="outline-text-3" id="text-3-5">
  <p>
    以下のbig assumptionを検証
  </p>

  <p>
    いつも時間ない。
  </p>
</div>

<div id="outline-container-sec-3-5-1" class="outline-4">
  <h4 id="sec-3-5-1">
    どのようなデータを集めるか
  </h4>

  <div class="outline-text-4" id="text-3-5-1">
    <p>
      走る前と走り終わったあとの心情をノートに記録する。
    </p>

    <p>
      よい習慣は、毎日小さく(5分から)はじめることで継続できることを検証する。 時間がないという思い込みは、心理的な不安からくることを認識する。
    </p>

    <p>
      走り終わったあとに、走る前と同じように時間がないと感じていたか。
    </p>
  </div>
</div>

<div id="outline-container-sec-3-5-2" class="outline-4">
  <h4 id="sec-3-5-2">
    どういう結果が得られたときに固定観念が反証されたとみなすか
  </h4>

  <div class="outline-text-4" id="text-3-5-2">
    <p>
      走り終わったあとに、時間がないという感情が減ったとき。
    </p>
  </div>
</div>

<div id="outline-container-sec-3-5-3" class="outline-4">
  <h4 id="sec-3-5-3">
    実験結果
  </h4>

  <div class="outline-text-4" id="text-3-5-3">
    <p>
      別のノートに記録。
    </p>
  </div>
</div>

<div id="outline-container-sec-3-5-4" class="outline-4">
  <h4 id="sec-3-5-4">
    結果の解釈
  </h4>

  <div class="outline-text-4" id="text-3-5-4">
    <ul class="org-ul">
      <li>
        走り終わるとそこまで時間がないようには感じない。 時間がないと感じるのはストレスが生み出す心理的な問題。
      </li>
      <li>
        むしろ、時間がないはずの夜に5分走ったほうが、 その後の就寝と起床の効率があがる。
      </li>
      <li>
        事実として時間がないのではなくて、時間がないと感じている。 疲労とストレス解消によって時間がないという気持ちが薄れる。
      </li>
      <li>
        時間がない感じたときは、あせるのではなくて、 ストレスがたまっているからどうやってストレスを減らすかを 考えるのがよい。 <p>
          この実験はやや予定調和的ではあるものの、期待どおりの結果が得られた。
        </p>

        <p>
          いつも時間がない、という思い込みは反証され、心の声は弱くなった。
        </p>
      </li>
    </ul>
  </div>
</div>

実験計画4 認知療法

<div class="outline-text-3" id="text-3-6">
  <p>
    以下のbig assumptionを検証。
  </p>

  <p>
    明日もきっと虚しい一日になるに違いない。
  </p>

  <p>
    寝る時間が多いときは、ストレスが高いとき。 睡眠は現実逃避の手段になっているから。
  </p>

  <p>
    以下のfull sccessに近づくための実験を計画してみる。
  </p>

  <ul class="org-ul">
    <li>
      寝るときと起きたときは、澄み切った感覚を得ることが出来る。
    </li>
  </ul>
</div>

<div id="outline-container-sec-3-6-1" class="outline-4">
  <h4 id="sec-3-6-1">
    どのようなデータを集めるか
  </h4>

  <div class="outline-text-4" id="text-3-6-1">
    <p>
      一日の終わりに、つまらない、虚しい、つらいと感じた出来事を取り出す。 以下の2つをデータとして残す。
    </p>

    <ul class="org-ul">
      <li>
        認知療法のフレームワークにしたがって、出来事を解釈。 <ul class="org-ul">
          <li>
            状況
          </li>
          <li>
            気分
          </li>
          <li>
            自動思考
          </li>
          <li>
            合理的な考え
          </li>
        </ul>
      </li>

      <li>
        解釈のあと、その結果をどう感じたかを記録
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-3-6-2" class="outline-4">
  <h4 id="sec-3-6-2">
    どのような結果を期待するか
  </h4>

  <div class="outline-text-4" id="text-3-6-2">
    <p>
      出来事の解釈によって、虚しさが減少すること。 その結果、きっと虚しくなるという思い込みが弱まること。 積極的に別の解釈をしようと心がける習慣ができること。
    </p>
  </div>
</div>

<div id="outline-container-sec-3-6-3" class="outline-4">
  <h4 id="sec-3-6-3">
    どういう結果が得られたときに固定観念が反証されたとみなすか
  </h4>

  <div class="outline-text-4" id="text-3-6-3">
    <p>
      出来事の解釈によって、幸福度が変化したとき。
    </p>
  </div>
</div>

<div id="outline-container-sec-3-6-4" class="outline-4">
  <h4 id="sec-3-6-4">
    実験結果
  </h4>

  <div class="outline-text-4" id="text-3-6-4">
    <p>
      省略
    </p>
  </div>
</div>

<div id="outline-container-sec-3-6-5" class="outline-4">
  <h4 id="sec-3-6-5">
    結果の解釈
  </h4>

  <div class="outline-text-4" id="text-3-6-5">
    <p>
      解釈のあと、その場ではあまり気持ちは変化しない。 数日おいて改めて見直してみると、 自分の感じていたことはとても些細なことだったり、 そこまで考え込まなくてもいいことだったりすることに気づいた。
    </p>

    <p>
      時間をおいて出来事を解釈するとそれは気分を深く落ち込ませない。 結果によって、仮定が実証された。
    </p>

    <p>
      テクニックとして、より早くそのような距離を置いた思考に至るようになりたい。
    </p>
  </div>
</div>

まとめ

早寝早起きをするためには、以下の3つの強力な固定観念を克服する必要がある。

  • どうせ明日も早くおきることができない。
  • いつも時間がない。
  • 明日もきっと虚しい一日になるに違いない。

まだ、克服できたとはいえないが、着実に成果はでている。

免疫マップが完成したとき、以上の固定観念が浮き彫りになったことに驚いた。

世の中には睡眠についてはたくさんのライフハックや睡眠グッズがあふれている。 自分も、早起きのためにそのような情報をあつめ、睡眠グッズを買ってきた。 しかし、それらでは睡眠を克服することができなかった。 睡眠を克服するということは、技術的課題ではなくて、適応的課題なのだ。

技術的なライフハックでは変われない。 強力な固定観念の克服によってのみ、変わることができる。