なぜ、だれも私の言うことを聞かないのか?

 

はい。引き続きコーチングの本です。

なぜ、だれも私の言うことを聞かないのか?

今回も要点と思ったところを抜き出してまとめておきます。

ストレスのサイン

ストレスを感じたとき、あなたはどんな気持ちになりますか?どんな行動をよくするでしょうか?私たちは自分のストレス状態に気づかないで、こころの調子をくずしているのに、そのまま頑張り続けてしまうかもしれません。とくに、何かに向かって頑張っているときほど、ストレスに気づきにくいものです。

そこで、ストレスサインを知っておくことが大切になります。自分のストレスに気づけるようになると、適切に休むことができるようになります。自分の友人のストレスに気づけるように、心がけておきましょう。

早めにストレスに気づいて、適切に休むことが、こころと体の健康には大切です。

攻撃的な行動によるストレスサイン

・口答えや批判が多くなる

・歩くのも食べるのも速くなる

・結論を急ぐ

・落ち着かない

・ささいな事に腹を立てる

逃避的な行動によるストレスサイン

・口数が少なくなる

・ミスが多くなる

・トイレの回数が増える

・コーヒーやお茶、エナジードリンク等をよく飲む

・タバコや酒をよく飲む

・辛いものや甘い物をよく食べる

・ギャンブルにコリだす

・テレビをよく見る

 

以上のような行動はストレスサインです。

自分がそうなっていたら休みましょう。

また、こういった行動がストレスを加速させる一面もおそらくあるので、

原因を早急に取り除き、できれば控えたい行動です。

ストレスの原因についてはこういうのが多いです。

 

NLPコーチング

 

はい。コーチングの本をもりもり読んでいます。

図解NLPコーチング術 木村 佳世子 (著)

新しい概念がよく出てくるためここにまとめときます。

NLPコーチング とは

NLP(Neuro-Linguistic Programming:神経言語プログラミング)は、1970年代に米国カリフォルニアのサンタクルーズ大学で開発が始まった、卓越したコミュニケーターの調査分析に基づく優れたコミュニケーションのスキル体系です。

開発者は当時同大学の言語学教授ジョン・グリンダーと学生のリチャード・バンドラーでした。2人は「優れた才能」に注目し、特にセラピーの分野で卓越した才能を発揮した人々を研究しました。

当時、主な研究対象者は、天才療法家と呼ばれたゲシュタルト療法のフリッツ・パールズ、家族療法のバージニア・サティア、催眠療法のミルトン・エリクソンです。また、交流分析(TA)の創始者であるカール・ロジャーズとエリック・バーンのビデオの研究も行い、システム理論の草分けでありサイバネティックスや精神医学、言語学に長けたグレゴリー・ベイトソンの影響を強く受けました。こうした研究の結果、「脳の取扱説明書」(自分の脳を使いこなして生き方を変える)とも言われる究極のコミュニケーション技術の体系が生まれました。現在では、NLPの研究機関やNLP関連の講座を実施する団体は世界中に見られ、日本においても米国NLP協会理事長のクリスティーナ・ホールはじめ、リチャード・バンドラー、ジョン・グリンダー、タッド・ジェームス、ロバート・ディルツなど複数の流派による資格認定団体が存在します。

現在の米国NLP協会理事長であるクリスティーナー・ホールは、言語学者として2人の研究をサポートし、NLPトレーナー養成のための体系的なマニュアルを構築し、高いレベルのNLPトレーナーを輩出する活動に力を注いでいます。

概要が微妙にぶっとんでるのがNLPコーチングの特徴です。でも、人生に役立ちそうな概念もたくさんあります。

リソースフル

NLPのワークを行う上で、大切な概念のひとつに、「リソースフル」
というものがあります。リソースフルとは、 自分の持っている資源
や能力を最大限に発揮している状態をいいます。

ですので、リソースフルな状態でいるときには、「自分には能力ある」
「自分にはできる」という思考や感情を持っている状態になります。
そして、それに相応しい行動を行うことができ、あなたの能力を普段
以上に、引き出すこと、または発揮することができます。

NLPコーチングでは「できる前提で物事を考える」=「リソースフルな状態」としています。いかにコーチング対象に「できる前提」で考えてもらえるようにするのかが腕の見せ所というわけです。

サブモダリティ

サブモダリティーとは、日本語で従属要素といいます。
具体的には、人が周りの世界を五感を通じて認識する際に使用した様々な構成要素のことを指します。

(中略)

色のサブモダリティ-では、どのような色なのか、濃さや薄さはなどを感じます。
一般的に楽しい思い出は、明るい色合いで温かさや明るい音楽、大きな映像などが浮かんできたのではないでしょうか?

反対に嫌な思い出は、どことなく暗く、どんよりとじめじめした感じで、ひんやりとしたような感覚もあるかもしれません。

サブモダリティ・チェンジ

たとえば、あなたが、大きな犬に噛まれたことがあり、犬の恐怖症になっているとします。

そのような場合、犬のイメージを 頭の中に浮かべてもらいます。そして、その犬の色をイメージの中で変えてもらいます。

たとえば、茶色い犬のイメージだったものを、白色に変えるなどです。

すると、色んな色に変えていくことで、恐怖を感じなくなる時が来ますから、そこまでいくと、上書き完了です。

要は、なにか不快な感情が発生する対象には、それに付随する見た目、音、温度や湿度、感触や重さのイメージがあり、それを変更して記憶することで無害化できるという考えです。

おそらく、こんな感じの図で説明できる気がします。

 

そんでこうなります。たぶん。

 

リフレーミング

リフレーミングとは、心理的枠組み(フレーム)によって、人や物事への印象や意味を変化させ、理想に向かえる有効な状態にしていくことを言います。

このリフレーミングを学ぶことによって、失敗したとき、悔しさで前に進めないとき、プレッシャーがかかっている時など、行き詰っている状態の認識の枠組みを変え、新たな選択肢を見出すことができます。

どんなことにも良い点と悪い点がありますが、その両方を認識することで、可能性を広げることができます。

例えば、

歩いていたら、道を間違えた

A:目的地までの所要時間は増えた
B:想定よりも運動する時間は増えた

どちらも同じことを言っていますが、楽観的なものの考えが瞬時に行えるように一見、悪いと思えることの良い点をすぐに思いつくようになると良いです。

ファミコンで学ぶアセンブリ言語

 

はい。いよいよそろそろ機械語だったりバイナリ的な何かを学ばないとプログラマとしてアカンかな。という心境に至り、いろいろ情報を集めております。とりあえず、以前に見たこの動画を思い出したのでいろいろ調べたりします。

ユカリンカワイイヤッター

はい。ファミコン七不思議の一つ、「りり」について知らない人はここを読むか各自ググってください。

あと、私自身が「アセンブラ」「アセンブル」「アセンブリ言語」「低級言語」「機械語」「バイナリ」の違いがよくわかっておらんのでそこらへんを調べてから進みます。

低レベル(低級)(低水準)言語

コンピュータによって扱われる言語のうち、コンピュータが直接解釈して処理できる「機械語」、または機械語に近い構造を持ったプログラミング言語のことである。
低級言語は、多くの場合「高級言語」との対比で用いられる。高級言語とは、より人間の言語に近い構文や概念の体系を持ったプログラミング言語を指す語である。https://www.weblio.jp/content/%E4%BD%8E%E6%B0%B4%E6%BA%96%E8%A8%80%E8%AA%9E

アセンブリ(言語)

機械語と一対一の関係にある低水準言語のこと。
アセンブリ言語(アセンブラ言語)と呼ばれる。
言語自体は MOV AX , FFなどと書かれている。
このままでは実行できない。

http://www.cyamax.com/entry/2017/08/14/070000

CASL(キャスル)

情報処理技術者試験の試験課題として独自に開発された言語であり、COMETと呼ばれる架空の演算装置に対応している。
一般的に、アセンブリ言語は機械語とほぼ1対1で対応しており、ハードウェアの設計に対する依存性が強い。
このため、実在するハードウェアやアセンブリ言語を試験の題材とするならば、試験の公平を期することができないという問題が生じる。
CASLやCOMETは、既製品に依拠せず完全に独自に開発されたため、公平さの維持を実現している。
2001年の試験からCASLはCASL IIへと改定されている。
同じくCOMETも仕様変更を経てCOMET IIとなっている。
ちなみに、試験の実施元であるIPA(情報処理推進機構)のWebサイトでは、CASL IIのシミュレータを無償でダウンロード提供している。
https://www.weblio.jp/content/CASL

MOS 6502

アメリカのモステクノロジーが1975年に発表した8ビット MPU (CPU) である。
1977年に発売されたApple II に搭載されて一躍有名になり、その後PET 2001(1977年1月発表、10月発売)、CBM3032、VIC-1001等、主にコモドール社の製品で採用されていた。
日本ではパソコン用のCPUとしてはそれほど普及しなかったが、互換CPU(リコー製RP2A03)がファミリーコンピュータやPCエンジンに採用されている。
https://ja.wikipedia.org/wiki/MOS_6502

MPU(micro processing unit)

主にコンピュータの演算機能を担う半導体チップのことである。
マイクロプロセッサは、PCに関する言及においては、CPU(中央演算処理装置)の同義語として扱われている。
より厳密に言えば、CPUは構成要素としての処理装置のことであり、マイクロプロセッサは1チップ化された処理装置を指すものである。
PCのCPU、MPUは、初期のころから1チップであったため、両者の違いはないに等しい。
世界初のマイクロプロセッサは、1971年に嶋正利らによって電卓用に開発されたIntelの4004である。
4ビットの演算能力を備えていた4004が登場する以前は、多数のトランジスタを実際に組み合わせて回路を構成していたが、4004は2300個分のトランジスタ素子がひとつの半導体チップ上に集積されていた。
https://www.weblio.jp/content/MPU

嶋正利(しままさとし)

日本を代表するコンピューター技術者のひとりである。1943年8月22日、静岡県静岡市生まれ。Intelが開発した世界初のマイクロプロセッサである「4004」の設計開発に携わり、世界のコンピュータ産業に多大な影響を与えたことで知られている。
嶋正利氏は東北大学理学部化学第二学科を卒業した後、日本計算機販売社(後のビジコン社)に入社して電卓の開発に携わることになった。折しも電卓開発争いが始まった頃で、シャープやカシオが小型化のため新しい集積回路(IC)を求めてアメリカ企業と提携を進めてゆく中、日本計算機は設立されたばかりのIntel社へ提携交渉を進めていた。この年(1969年)はIntel社の創立から1年目のことだった。
そこでIntel社と嶋氏は目覚しい活躍を見せ、同社のフェデリコ・ファジンやスタンレー・メイザー、マーシャン・エドワード・ホフJr. らと共に、4004の開発に成功した。完成は1971年4月だった。ただ、その将来性にいち早く気づいたIntelは、開発費を返却して日本計算機販売社から独占販売権を取り戻している。そして同年11月、「MCS-4」の名称で、世界初のマイクロプロセッサが発表された。
1972年、嶋氏はIntelに引き抜かれて米国に渡った。そこでパソコン誕生のきっかけともいえる8ビットマイクロプロセッサ「8080」の開発に貢献した後、Zilog社に転籍してZ80を開発、まもなく16ビットマイクロプロセッサ「Z8000」の開発も手がけた。
1979年、嶋氏は日本に帰国してインテル・ジャパン・デザインセンターを設立した。1986年にはVMテクノロジーを設立。後にAOIテクノロジーの代表取締役社長に就任している。
氏は、1992年に筑波大学から工学博士号を授与されており、1997年には京都賞(先端技術部門)が授与されている。
https://www.weblio.jp/content/%E5%B6%8B%E6%AD%A3%E5%88%A9

ちなみに、著書の「マイクロコンピュータの誕生」はAmazonで1万円を超えるプレミアがついているが、岩波書店のオンデマンド出版が利用でき、5,000円で買えるらしい。
https://www.iwanami.co.jp/book/b287063.html

アセンブラ

アセンブリ言語で書いたプログラムを
機械語に変換するプログラム(ソフト)のこと。
英語ではassemblerなので、
assemble(変換)+er(者)で変換をしてくれる者のこと。
http://www.cyamax.com/entry/2017/08/14/070000

アセンブル

アセンブリをバイナリファイルに変換すること。
アセンブリ言語MOV AX , FF –変換(アセンブル)–> B8FF00バイナリ
となる。
http://www.cyamax.com/entry/2017/08/14/070000

マシン(機械)語

機械語は、その名の通り機械である計算機のために書かれた0と1のビットからなるデータ列である。このため、機械語を見てどのような動作をするのかを人間が理解する事は非常に難しい。また、同じ処理であってもどの機械(CPU)で実行するかによって機械語の内容は変わってしまう。
文字を使って命令とレジスタを表現する事で、機械語をもう少し分かりやすく表記したものがアセンブリ言語である。アセンブリ言語で書かれたコードはアセンブラによって機械語に変換する事ができる。機械語とアセンブリ言語は低級言語、CやJava等のそれ以外のプログラミング言語は高級言語と呼ばれる。
機械語はバイナリエディタなどによって読み書きする事ができる。その際には1と0の二進数ではなく、記述を短くできる十六進数が使われることも多い。
プログラムや入出力がパンチカードで行われていた時代には機械語を読み書きできる事が計算機を扱うエンジニアにとって普通であった。しかし、アセンブラやコンパイラの普及によりそういったスキルは必須ではなくなり、むしろマニアックであるとみなされる領域となっている。
http://dic.nicovideo.jp/a/%E6%A9%9F%E6%A2%B0%E8%AA%9E

バイナリ(ファイル)

中身がバイナリデータなファイルのこと
http://wa3.i-3-i.info/word1147.html

バイナリデータ

バイナリ(binary)とは、元々「2進数の」という意味の英語である。コンピュータはデータを処理するために、全ての情報を2進数に変換しているので、コンピュータが解釈するために用意されたデータはすべてバイナリ形式となっている。
https://www.weblio.jp/content/%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA

Hex Editor

そんでは、動画本編を進めてみます。

ゆかりさん「まず、りりが画面にでている状態で背景タイル情報を格納しているVRAM(0x2843)をみてみましょう」

ここで利用しているツールはHxDというバイナリ(Hex)エディタです。

PPU(Picture Processing Unit)

ファミコンで描画を行うのは、PPU(Picture Processing Unit)です。PPUは6502とは別のメモリ空間(VRAM)を持ち、 背景やスプライトの描画を行います。PPUは6502とは独立して非同期に画面描画を行います。 6502がスプライト描画のレジスタ書き込みを行っても、画面にすぐスプライトが描画されるわけではありません。 6502からPPUを操作するには、PPUコントロールレジスタに値を設定します。

http://gikofami.fc2web.com/nes/nes003.html

PPUへのアクセス方法についてはこちらを参照

トレースログ

ゆかりさん「VRAMに『りり』が書き込まれる瞬間の1フレームのトレースログをとります」

トレースログ

トラブルが発生した場合に,トラブル発生の経緯を調査したり,各処理の処理時間を測定したりするために採取するログ情報のことです。

http://itdoc.hitachi.co.jp/manuals/3020/30203S0832/AJSK0010.HTM

 

アセンブリのデバッグ方法がなんとなくわかった気がしたので今日はここまで。

オリソン・スウェット・マーデン

 

はい。後藤新平閣下も読んだとされる

オリソン・スウェット・マーデンの本当の幸せを見つける秘訣

を読んでおります。

別のマーデン本のAmazonのレビューでアル中と書かれているのですが、アル中にしては生涯に渡って業績が多すぎるのと英語wikiだったり英語Google先生に訊いてみても「知らん」とのことなんでたぶんデマです。

明治~大正時代くらいになるとWEB上の情報が極端に不正確になってしまってデマが多くなるのは今後、改善すべきインターネットの課題でやんすね。

さておき、いい本です。この本。翻訳の方がいい腕してるというのもあるのですが、100年前に引き寄せの法則に言及してるのは驚きです。たぶん成功者の皆さんにとっては人類有志始まって以来から現代に至るまで、「人生は思い通りにしかならない」っていうのは周知の事実だったんでしょうたぶん。

この本で私が心に刻んでおきたいことは2つです。

人生を深刻に考えすぎない

自分の悩みに何かユーモラスなところ、滑稽なところがないか考えてみよう。コメディアンになったつもりで、あなたが置かれた状況を笑い飛ばしてみよう。深刻に悩むのは、あとになってからで構わないではないか。

人生にはあなたに都合のよいことしか起きない

(要約)人生に起きるあらゆるイベントはあなたにとって都合の良い、良いイベントである。

 

うむ。その通りでございます。

Laravel 5.6 での Vue の blade template 内の書き方

npm が入ってる前提です。

コンソールから下記を実行してファイルを生成

masasikatano:~/workspace (master) $ npm install
masasikatano:~/workspace (master) $ npm run dev

laravelのテンプレートのhead部分に以下を追記

<meta name="csrf-token" content="{{ csrf_token() }}">

それと、jsを読み込む部分に以下を追記

<!-- Vue -->
<script src="js/app.js"></script>
<script src="js/main.js"></script>

あとは、Vueを表示したい bladeテンプレート部分に、以下のように記入

<div id="hoge">
    <p>Hello @{{ name }}!</p>
    <p><input type="text" v-model="name"></p>
  </div>

Laravel の blade テンプレート内でのVueの書き方は

@{{ hoge }}

になります。

あと、自分でvueを記述するための

js/main.js

var app = new Vue({
  el: '#hoge',
  data: {
      name: 'taguchi'
    }
});

にいろいろ書くと使えます。

取り急ぎメモ。

 

参考 : LaravelからVue.jsを使う最短レシピとTips

https://qiita.com/fruitriin/items/e0f2c9aa035c3ff2c874

ドットインストールのVue講座

 

はい。百式先生ドットインストールのVue講座を進めています。

とりあえずモリモリ進めてみたんですが、内容を復習も兼ねてまとめたくなったんで書いときます。

Vue.js とは

JavaScript謹製のUI 部品を作るためのフレームワーク。使えると超便利。中国系アメリカ人の方が作ってるらしく中国語でもサポート充実で中国でも人気らしいです。

また、AngularJS等と同じく、双方向データバインディングができるのが大きな特徴。

双方向データバインディングとは、データが更新されればUIが更新され、UIが更新されればデータが更新される仕組みのことです。

基本的には、jQueryなんかと同じくライブラリの本体を読み込むとブラウザあれば動くようになります。

ミニマルなVue.js

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My Vue App</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="js/main.js"></script>
</body>
</html>

js/main.js

(function() {
  'use strict';
})();

用語解説

ざっくり用語解説です。特にわからなければリンク先をじっくり読んだりしてしっかり感じ取ってください。

View Model

ViewModel とは Vue.js のインスタンスのこと。
View と Model をとりもつオブジェクト。

Vue.jsではじめるMVVM入門

インスタンス

インスタンス (instance)とはオブジェクト指向で出てくる概念のひとつで設計図(クラス)を具現化した「実体」のこと

インスタンス (instance)

インスタンスとオブジェクトの違い

ディレクティブ

ディレクティブとは、DOM 要素に対して何かを実行することをライブラリに伝達する、マークアップ中の特別なトークンです。

ディレクティブ

個人的には、このディレクティブが Vue.js が Vue.js である最大の特徴であり、Vue.js そのものであると言っても過言ではないと思いますたぶん。

Vue.jsのディレクティブ ≒ 他プログラミング言語の制御構造

みたいな認識なのですがあんまり自信はないですはい。

v-model ディレクティブ

v-model はUIとViewModelオブジェクトを紐付けるディレクティブです。

index.html

まずはVue.jsで扱うUIの領域を id = app として div で定義します。main.jsのViewModelインスタンスから受け取ったデータは {{ }} の中に書くことで表現できます。

次に、UIから data へ反映させるには input タグを使用して v-model=”name” というディレクティブを使用することで main.js 内の ViewModel インスタンスの name データと紐付けすることができます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My Vue App</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>

  <div id="app">
    <p>Hello {{ name }}!</p>
    <p><input type="text" v-model="name"></p>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="js/main.js"></script>
</body>
</html>

js/main.js

UI ( id=app ) に結びつくデータを作るため、 ViewModel インスタンス ( var vm )を作成し、どの領域の UI  と結びつけるのかを el (elementsの略) キーで指定し、data キーで保持するデータを指定します。

(function() {
  'use strict';
  // 
  var vm = new Vue({
    el: '#app',
    data: {
      name: 'taguchi'
    }
  });
})();

v-for ディレクティブ

v-for は配列をループさせて表示するためのディレクティブです。

List Rendering

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My Vue App</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>

  <div id="app">
    <h1>My Todos</h1>
    <ul>
      <li v-for="todo in todos">{{ todo }}</li>
    </ul>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="js/main.js"></script>
</body>
</html>

js/main.js

data には配列形式でデータを保持することもできる。

(function() {
  'use strict';

  var vm = new Vue({
    el: '#app',
    data: {
      todos: [
        'task 1',
        'task 2',
        'task 3'
      ]
    }
  });
})();

v-on ディレクティブ

v-on ディレクティブを使うことで、DOM イベントの購読、イベント発火時の JavaScript の実行が可能になります。

イベントハンドリング

index.html

まずは、input タグに v-model=”newItem” ディレクティブを使用してViewModel インスタンスの newItem データと紐付けします。

次に、フォームが submit された時にViewModel内のメソッドを発火するためにディレクティブとして v-on:submit=”addItem” を使用します。また、 v-on はよく使うので @submit=”addItem” とすることも可能です。

さらに、@submit.prevent=”addItem” とすることでsubmitを押下したときの画面遷移(リロード)を防ぐことができます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My Vue App</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>

  <div id="app" class="container">
    <h1>My Todos</h1>
    <ul>
      <li v-for="todo in todos">{{ todo }}</li>
    </ul>
    <!-- <form v-on:submit="addItem"> -->
    <form @submit.prevent="addItem">
      <input type="text" v-model="newItem">
      <input type="submit" value="Add">
    </form>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="js/main.js"></script>
</body>
</html>

js/main.js

UIから受け取る newItem を data に追加します。

次に、v-on ディレクティブで使用するメソッドとして methods というキーを追加して、その中に addItem メソッドを追加します。data 内のデータには this でアクセスできるので this.newItem と書くことができます。

(function() {
  'use strict';

  var vm = new Vue({
    el: '#app',
    data: {
      newItem: '',
      todos: [
        'task 1',
        'task 2',
        'task 3'
      ]
    },
    methods: {
      addItem: function() {
        this.todos.push(this.newItem);
        this.newItem = '';
      }
    }
  });
})();

v-onのクリックイベント

index.html

spanタグに @click=”deleteItem(index)”と指定することで main.jsのメソッドを発火させることができます。

v-for は v-for=”(todo, index) in todos” とすることで配列のインデックスを、展開後に使用することができます。

リストレンダリング

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My Vue App</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>

  <div id="app" class="container">
    <h1>My Todos</h1>
    <ul>
      <li v-for="(todo, index) in todos">
        {{ todo }}
        <span @click="deleteItem(index)" class="command">[x]</span>
      </li>
    </ul>
    <form @submit.prevent="addItem">
      <input type="text" v-model="newItem">
      <input type="submit" value="Add">
    </form>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="js/main.js"></script>
</body>
</html>

js/main.js

ViewModel の methods に deleteItem を追加して、todos の 指定のidの 要素を削除する処理を追加します。

(function() {
  'use strict';

  var vm = new Vue({
    el: '#app',
    data: {
      newItem: '',
      todos: [
        'task 1',
        'task 2',
        'task 3'
      ]
    },
    methods: {
      addItem: function() {
        this.todos.push(this.newItem);
        this.newItem = '';
      },
      deleteItem: function(index) {
        if (confirm('are you sure?')) {
          this.todos.splice(index, 1);
        }
      }
    }
  });
})();

v-bind ディレクティブ

index.html

チェックボックスに対しては v-model=”isDone” を書くことで、isDone が true のときは checked の役割をします。

フォーム入力バインディング

データに応じて css の class を付け替えるには v-bind ディレクティブを使用します。

span タグに v-bind:class=”{done: todo.isDone}” とすると、 VeiewModel データの todo.isDone が true の時は、 css の done クラス が表示されます。

また、v-bind は省略が可能で、 :class=”{done: todo.isDone}” とできます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My Vue App</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>

  <div id="app" class="container">
    <h1>My Todos</h1>
    <ul>
      <li v-for="(todo, index) in todos">
        <input type="checkbox" v-model="todo.isDone">
        <!-- <span v-bind:class="{done: todo.isDone}">{{ todo.title }}</span> -->
        <span :class="{done: todo.isDone}">{{ todo.title }}</span>
        <span @click="deleteItem(index)" class="command">[x]</span>
      </li>
    </ul>
    <form @submit.prevent="addItem">
      <input type="text" v-model="newItem">
      <input type="submit" value="Add">
    </form>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="js/main.js"></script>
</body>
</html>

js/main.js

(function() {
  'use strict';

  var vm = new Vue({
    el: '#app',
    data: {
      newItem: '',
      todos: [{
        title: 'task 1',
        isDone: false
      }, {
        title: 'task 2',
        isDone: false
      }, {
        title: 'task 3',
        isDone: true
      }]
    },
    methods: {
      addItem: function() {
        var item = {
          title: this.newItem,
          isDone: false
        };
        this.todos.push(item);
        this.newItem = '';
      },
      deleteItem: function(index) {
        if (confirm('are you sure?')) {
          this.todos.splice(index, 1);
        }
      }
    }
  });
})();

v-show ディレクティブ v-if ディレクティブ

index.html

条件的な要素を表示するのは v-show ディレクティブを使用します。また、他の言語のif文と同じような v-if ディレクティブ も使用できます。

条件付きレンダリング

また、一般的に、v-if はより高い切り替えコストを持っているのに対して、 v-show はより高い初期描画コストを持っています。 そのため、とても頻繁に何かを切り替える必要があれば v-show を選び、条件が実行時に変更することがほとんどない場合は、v-if を選びます。

Vueのあれこれ

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My Vue App</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>

  <div id="app" class="container">
    <h1>My Todos</h1>
    <!-- <ul>
      <li v-for="(todo, index) in todos">
        <input type="checkbox" v-model="todo.isDone">
        <span :class="{done: todo.isDone}">{{ todo.title }}</span>
        <span @click="deleteItem(index)" class="command">[x]</span>
      </li>
      <li v-show="!todos.length">Nothing to do, yay!</li>
    </ul> -->
    <!-- <ul>
      <li v-if="todos.length" v-for="(todo, index) in todos">
        <input type="checkbox" v-model="todo.isDone">
        <span :class="{done: todo.isDone}">{{ todo.title }}</span>
        <span @click="deleteItem(index)" class="command">[x]</span>
      </li>
      <li v-else>Nothing to do, yay!</li>
    </ul> -->
    <ul v-if="todos.length">
      <li v-for="(todo, index) in todos">
        <input type="checkbox" v-model="todo.isDone">
        <span :class="{done: todo.isDone}">{{ todo.title }}</span>
        <span @click="deleteItem(index)" class="command">[x]</span>
      </li>
    </ul>
    <ul v-else>
      <li>Nothing to do, yay!</li>
    </ul>
    <form @submit.prevent="addItem">
      <input type="text" v-model="newItem">
      <input type="submit" value="Add">
    </form>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="js/main.js"></script>
</body>
</html>

js/main.js

(function() {
  'use strict';

  var vm = new Vue({
    el: '#app',
    data: {
      newItem: '',
      // todos: [{
      //   title: 'task 1',
      //   isDone: false
      // }, {
      //   title: 'task 2',
      //   isDone: false
      // }, {
      //   title: 'task 3',
      //   isDone: true
      // }]
      todos: []
    },
    methods: {
      addItem: function() {
        var item = {
          title: this.newItem,
          isDone: false
        };
        this.todos.push(item);
        this.newItem = '';
      },
      deleteItem: function(index) {
        if (confirm('are you sure?')) {
          this.todos.splice(index, 1);
        }
      }
    }
  });
})();

computed プロパティ

index.html

spanタグ囲って、 {{ remaining }} を追加します。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My Vue App</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>

  <div id="app" class="container">
    <h1>
      My Todos
      <span class="info">({{ remaining }}/{{ todos.length }})</span>
    </h1>
    <ul>
      <li v-for="(todo, index) in todos">
        <input type="checkbox" v-model="todo.isDone">
        <span :class="{done: todo.isDone}">{{ todo.title }}</span>
        <span @click="deleteItem(index)" class="command">[x]</span>
      </li>
      <li v-show="!todos.length">Nothing to do, yay!</li>
    </ul>
    <form @submit.prevent="addItem">
      <input type="text" v-model="newItem">
      <input type="submit" value="Add">
    </form>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="js/main.js"></script>
</body>
</html>

js/main.js

ViewModel内の computed キーはVue インスタンスに組み込まれる算出プロパティ (Computed property) です。

算出プロパティはキャッシュされ、そしてリアクティブ依存が変更されたときにだけ再算出します。ある依存関係がインスタンスのスコープ外の(つまりリアクティブではない)場合、算出プロパティは更新されないことに注意してください。

https://jp.vuejs.org/v2/api/#computed

ViewModel に computed プロパティを追加します。todos.isDone の数が変更されると動的に remaing の値が変更されます。

(function() {
  'use strict';

  var vm = new Vue({
    el: '#app',
    data: {
      newItem: '',
      todos: [{
        title: 'task 1',
        isDone: false
      }, {
        title: 'task 2',
        isDone: false
      }, {
        title: 'task 3',
        isDone: true
      }]
    },
    methods: {
      addItem: function() {
        var item = {
          title: this.newItem,
          isDone: false
        };
        this.todos.push(item);
        this.newItem = '';
      },
      deleteItem: function(index) {
        if (confirm('are you sure?')) {
          this.todos.splice(index, 1);
        }
      }
    },
    computed: {
      remaining: function() {
        var items = this.todos.filter(function(todo) {
          return !todo.isDone;
        });
        return items.length;
      }
    }
  });
})();

Component

index.html

コンポーネントは Vue.js の最も強力な機能の 1 つです。基本的な HTML 要素を拡張して再利用可能なコードのカプセル化を助けます。高いレベルでは、コンポーネントは Vue.js のコンパイラが指定された振舞いを加えるカスタム要素です。場合によっては、特別な is 属性で拡張されたネイティブな HTML 要素の姿をとることもあります。

コンポーネント

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My Vue App</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>

  <div id="app">
    <like-component></like-component>
    <like-component></like-component>
    <like-component></like-component>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="js/main.js"></script>
</body>
</html>

js/main.js

(function() {
  'use strict';

  var likeComponent = Vue.extend({
    data: function() {
      return {
        count: 0
      }
    },
    template: '<button @click="countUp">Like {{ count }}</button>',
    methods: {
      countUp: function() {
        this.count++;
      }
    }
  });

  var app = new Vue({
    el: '#app',
    components: {
      'like-component': likeComponent
    }
  });

})();

Component内のpropsキー

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>My Vue App</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>

  <div id="app">
    <like-component message="Like"></like-component>
    <like-component message="Awesome"></like-component>
    <like-component message="Great"></like-component>
    <like-component></like-component>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="js/main.js"></script>
</body>
</html>

js/main.js

親コンポーネントからデータを受け取るためにエクスポートされた属性のリスト/ハッシュです。シンプルな配列ベースの構文、そして型チェック、カスタム検証そしてデフォルト値などの高度な構成を可能とする配列ベースの代わりとなるオブジェクトベースの構文があります。

https://jp.vuejs.org/v2/api/#props

(function() {
  'use strict';

  var likeComponent = Vue.extend({
    // props: ['message'],
    props: {
      message: {
        type: String,
        default: 'Like'
      }
    },
    data: function() {
      return {
        count: 0
      }
    },
    template: '<button @click="countUp">{{ message }} {{ count }}</button>',
    methods: {
      countUp: function() {
        this.count++;
      }
    }
  });

  var app = new Vue({
    el: '#app',
    components: {
      'like-component': likeComponent
    }
  });

})();

 

Udacity の Google による Website Performance Optimization をやってみる

 

はい。 Vueを勉強してるんですが、ブラウザのレンダリング周りの知識が必要なことになり、調べてます。そんななかみつけたのが Udacity の Website Performance Optimization

Udacity とは

Udacityとは、元スタンフォード大学教授のコンピュータ科学者セバスチャン・スラン(Sebastian Thrun)が中心となって立ち上げられたMOOC(大規模公開オンライン講座)のプラットフォームである。2012年2月にサービスを開始した。

Udacityはコンピュータサイエンスまたは数学の分野に特化しており、人工知能やアルゴリズムなどをテーマとした高度な授業を配信している。最初に配信した2コースだけで世界中から延べ16万人のユーザーが受講したとされる。Udacityは「Coursera」や「edX」と共に代表的なMOOCのプラットフォームとして挙げられることが多い。

ちなみに、Udacityの設立者であるセバスチャン・スランは、Google X Labの立ち上げに加わり「Google Glass」や「Google driverless car」などの研究開発プロジェクトに携わっていることでも知られている。

セバス·チャンはナザリック第9・10階層に控え、メイド長と共に「至高の41人」の生活面を支える最高責任者である家令。

サンクユーセバス!というわけでさっそくやっていきます。Website Performance Optimization

導入

ムッキムキの赤い彼がGoogleのWebパフォーマンスエンジニアのイリヤ・グリゴリクさんです。

GoogleのTシャツが欲しい。ムッキムキです。ムッキムキ。最近のエンジニアは筋トレが必修科目であることがよくわかります(ぇん)。

Critical Rendering Path Walkthrough

クリティカルレンダリングパスとは、ブラウザがHTML、CSS、JavaScriptを画面上のピクセルに変換するための一連のステップのこと

HTMLとDOM

ブラウザはURLの入力を受けてサーバーにページを要求し、入手したHTMLの解析を行う。

文字情報 Character → トーカナイザによりトークン化 Tokens → 別のプロセスによりノードオブジェクト化 Nodes → ノードオブジェクトを統合して、ドキュメントオブジェクトモデルを作成する DOM

の順番に解析を進めていく。

Fast Google Search Responses

Googleに検索キーワードを入力すると、

  1. まず、検索結果ページの共通ヘッダ部分(キーワードを入力できる部分)を描画する
  2. 検索結果が届きしだい、検索結果をリスト化して表示する

という二段階に分かれて結果ページを表示している。

Converting CSS to the CSSOM

CSSはブラウザのパースによって、HTMLのように、

文字情報 Character → トーカナイザによりトークン化 Tokens → 別のプロセスによりノードオブジェクト化 Nodes → ノードオブジェクトを統合して、CSSオブジェクトモデルを作成する CSSOM

を経てCSSOMに変換される。

その際、CSSは再定義を許可しているため、全てのCSSをCSSOMに変換してからでしかレンダリングが行えない。

つまり、少しずつ段階を分けてレンダリングする手法がとれないため、CSSは(相対的に)ブロッキングであるといえます。

Steps to Render the Page

 

ページをレンダーする際にブラウザは以下の手順を踏みます。

  1. Begin constructing the DOM by parsing HTML – HTMLを解析してDOMを構築し始める
  2. Request CSS & JS resources – CSSとJavaScriptのリソースを要求する
  3. Parse CSS and construct the CSSOM tree – CSSを解析してCSSOMツリーを作成する
  4. Execute JS – JavaScriptを実行する
  5. Merge DOM and CSSOM into the Render Tree – DOMとCSSOMを結合させてレンダーツリーを作成する
  6. Run layout, Paint – レイアウトとペイントを実行する

Optimizing the DOM

通常、前項6のレンダーツリー構築前の、1.DOMと3.CSSOMがレンダリングを遅くさせる原因となります。

Unblocking CSS with Media Queries

デフォルトでブラウザは特定のスタイルシートそれぞれがレンダリングをブロックすると仮定します。

しかしメディアクエリにメディア属性を加えることでスタイルシートが適用される場合を指示することもできます。

参考: メディアクエリの利用

例えば、スマホでポートレイトモードの場合には下記のように

上の2つのCSSがレンダリングをブロックしますが、

下2のCSSはレンダリングをブロックしません。

JavaScript and the CRP

下記の例ではDOM → Javascript → DOM の順番でページが解析される。

つまり、JavaScriptはパーサをブロックすると言えます。

 

OpenAim を Laravel 5.6 にアップグレードしました

 

はい。Laravel 5.6 発表されましたね。それに伴って、私のサイトも Laravel 5.2系から 5.6 にアップグレードしました。

今は OpenAimもLaravel 5.6で動作しております。

参考にさせていただいた記事はこちら

Laravel5.3 アップグレード @kawax

移行に伴い、テストが全滅してたりしたおかげで一瞬ヒヤッとしましたがなんとか移行できました。

ついでに、MySQLをアップグレードしたらMariaDBと統合した兼ね合いなのか、単にSDカードが老朽化してただけなのか、Raspberry Pi が起動しなくなりビビリましたがその復旧も終わって私は元気です。

そんで、何が言いたいかと言うとOpenAimが一周年を迎えました。

いよいよサイトをオープンして丸一年でございます。

これもひとえに利用して頂ける皆様のおかげでございます。

まあ、このサイトがどんなサイトなのかはリンク先をみてもらうとしてまだまだ登録者様を大募集しております。

オンラインサービスやタスク管理サービスやゲームが好きな方々ぜひぜひ登録してみてね!

地頭力を鍛える 問題解決に活かす「フェルミ推定」 細谷 功

 

はい。地頭力を鍛える 問題解決に活かす「フェルミ推定」 細谷 功 をよみました。

以下要点

東京都に信号は何基あるか

1. 単位面積あたりの本数を市街地と郊外で分ける

1-2. 市街地の電柱配置を50m四方に1本 = 50m × 50m = 2,500m2に1本、つまり ( 1000m × 1000m = 1,000,000m2 になるので) 1,000,000m2 ÷ 2500m2 = 400本 で市街地の1km四方には400本の電柱があると仮定する

 

1-3. 郊外の電柱配置を200m四方に1本 = 200m × 200m = 40,000m2に1本、つまり ( 1000m × 1000m = 1,000,000m2 になるので ) 1,000,000m2 ÷ 40,000m2 = 25本 で郊外の1km四方には25本の電柱があると仮定する

 

日本の総面積は378,000 km²でこの情報はネットを見ればすぐに分かる。

また、国土の約73%を山地が占める山国でもある。というのもネットですぐに出てくる。そこで、73%(山地)+7%(緩衝地帯)= 80%が郊外、20%が市街地と想定する。

 

2. 実際に計算する

2-1-1. 市街地の面積 = 378,000 km² × 20% = 75,600 km2

2-1-2. 市街地の電柱の本数 = 400 × 75,600 km2 = 30,240,000 本

2-2-1. 郊外の面積 = 378,000 km² × 80% = 302,400 km2

2-2-2. 市街地の電柱の本数 25 × 302,400 km2 = 7,560,000 本

2-3. 日本の電柱の本数の合計 = 30,240,000 + 7,560,000 = 37,800,000本

 

そうすると、実際は33,000,000本らしいのでだいたい合ってるらしい。

日本人だけが知らない戦争論 苫米地英人

 

ええ。表題の通りを読んでございます

クロムウェルの正体

1650年代にニューモデル・アーミーを指揮し清教徒革命を行ったオリバー・クロムウェルは、世界の銀行家の豊富な資金を背景にイギリス国王チャールズ一世の王政を打破し、銀行家へイギリスの通貨発行権をもたらし、その後に真実を知る者と共に始末されたのだと氏は伝えます。

要するに、戦争をして得をするのはその後に通貨発行権を手にする人物で、戦争を行うのもこの種の人物だと氏は言います。

各国の革命の奇妙な類似性

日本の戊辰戦争であっても、薩長同盟に資金提供をしていたのはイギリスの銀行家で、幕府に資金提供をしていたのはフランスの銀行家でした。

その後、ニューモデル・アーミーのような私兵くずれの奇兵隊が現れ倒幕となり、日本銀行が設立されています。

戦争でのお金儲けの方法

戦争でのお金儲けの方法は、相手の土地を焦土にして二束三文で買い叩くというものです。

経済学は虚学

元々経済学は、ヨーロッパの大銀行家の戦争への主張を正当化するために生み出された接待用の学問でした。

その証拠に、経済学の大前提として、「不景気になれば金利を下げる必要があり、好景気になれば金利を上げる必要がある」という理論がありますが、実際には因果関係が逆で、「金利を下げれば好景気になり、金利を上げれば不景気になる」という単純な話を中央銀行が景気を操作しているのを民衆に悟らせず、中央銀行へのヘイトが向かないようにするカバーストーリーを各々の経済学者が担当しています。

戦争に加担するな

銀行家のお金儲けに手を貸す必要はありません。

疑うこと

恐れないこと

執着しないこと

が重要だと氏は言います。