2021年7月23日金曜日

Eclipse IDE for Enterprise Java and Web Developers上のTomcatにHTTPSでアクセスする方法

Eclipse IDE for Enterprise Java and Web Developers上のTomcatにHTTPSでアクセスする方法をメモしておきます.

1. mkcert -install
2. cd $HOME/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0
3. mkcert localhost X.X.X.X
4. openssl pkcs12 -export -in localhost+1.pem -inkey localhost+1-key.pem -out localhost+1.p12
5. keytool -importkeystore -destkeystore localhost+1.jks -srckeystore localhost+1.p12 -srcstoretype PKCS12
途中パスワードを求められます.
6. Eclipseのプロジェクトエクスプローラーから「Other projects-> Servers -> Tomcat vX.X Server at localhost-config」で辿り着ける場所にあるserver.xmlを開く.
7. 次のコメントの下に
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
  maxThreads="150" SSLEnabled="true">
  <SSLHostConfig>
    <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
    type="RSA" />
  </SSLHostConfig>
</Connector>
-->
次の内容を追加する.
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
  maxThreads="150" SSLEnabled="true">
  <SSLHostConfig>
    <Certificate certificateKeystoreFile="conf/localhost+1.jks"
      certificateKeystorePassword="XXXXXXXX"
      type="RSA" />
  </SSLHostConfig>
</Connector>
XXXXXXXXは,5で指定したパスワードを記す.

2020年12月18日金曜日

Eclipse Java EEのDynamic Web ProjectでJavaScriptライブラリの構成管理をしつつモジュラーハンドラーを利用する方法

Eclipse Java EEのDynamic Web ProjectでJavaScriptのライブラリの構成管理をやりたかったので,ちょっとトライしてみました.

以下の作業をすれば,${PROJECT_HOME}/libにあるJavaScriptのライブラリ,あるいは,${PROJECT_HOME}/src/main/javascriptにある自身のコードが更新した際に,それらを一つにパックしたコードを${PROJECT_HOME}/src/main/webapp/jsに作成することができます.ただ,ライブラリと自分のコードを一つにパックすると,デバッグしずらいし,Builderをプロジェクトごとに登録するのが面倒だし,元々やりたかったのはJavaScriptライブラリの構成管理なので,使わずじまいとなりそうです.ちなみに,${PROJECT_HOME}は,プロジェクトのベースとなるディレクトリのことです.

1.存在しない場合,下記のディレクトリを作成.
  • ${PROJECT_HOME}/lib
  • ${PROJECT_HOME}/src/main/javascript
  • ${PROJECT_HOME}/src/main/webapp/js
2.次のコマンドを実行.
% cd ${PROJECT_HOME}/lib
% npm init -y
% npm install --save-dev webpack webpack-cli
3.次の内容を「${PROJECT_HOME}/lib/package.json」に追加.
{
      :
  "scripts": {
      :
    "build": "webpack --mode=production"
  },
      :
}
4.次の内容のファイルを「${PROJECT_HOME}/lib/webpack.config.js」に作成.
module.exports = {
    entry: '../src/main/javascript/index.js',
    output: {
        path: __dirname + '/../src/main/webapp/js',
        filename: 'main.js',
    },
    resolve: {
        modules: ["node_modules", "../../../lib/node_modules/"],
    }
};
5.次の内容の実行ファイル(実行パーミッションを付与する必要あり)を「${PROJECT_HOME}/bin/npmbuild.sh」に作成.
#!/bin/sh
export PATH="/usr/local/bin:$PATH"
npm run build
6.右ボタンを押下して,表示されるプルダウンメニューから「Properties」を選択.
7.「Properties」ダイアログにおいて次の操作を実行.
1.左にあるメニューから「Builders」を選択.
2. 「New...」ボタンを押下.
8.「Choose configuration type」ダイアログ内の「Program」を選択し,「OK」ボタンを押下.
9.「Edit Configuration」ダイアログにおいて次の操作を実行.
1.「Name」に作成するBuilderの名称を入力.
2. 「Main」タブにおいて,次の操作を実行.
1.「Location」に実行ファイルのパスを入力(「Browse Workspace...」ボタンを押下して表示されるダイアログで当該ファイルを選択可能).
2.「Working Directory」に「package.json」が置かれたディレクトリのパスを入力(「Browse Workspace...」ボタンを押下して表示されるダイアログで当該ファイルを選択可能).
3. 「Refresh」タブにおいて,次の操作を実行.
1.「Refresh resources upon completion」をチェック.
2.「Specific resources」をチェック.
3.「Specify Resources...」ボタンを押下して表示されるダイアログでBuilderを実行する対象となるディレクトリを選択.
4.「Recursively include sub-folders」をチェック.
4. 「Build Options」タブにおいて,次の操作を実行.
1.「Allocate Console」をチェック.
2.「After a "Clean"」,「During manual builds」,「During auto builds」をチェック.
3.「Specify working set of relevant resources」をチェック.
4.「Specify Resources...」ボタンを押下して表示されるダイアログでBuilderを実行する対象となるディレクトリを選択.
5. 「OK」ボタンを押下.
10.「Properties」ダイアログにおいて,次の操作を実行.
1.選択したBuilderがリストの一番上になるまで「Up」ボタンを押下.
2.「Apply and Close」ボタンを押下.

2020年12月9日水曜日

Eclipse EEのDynamic Web Projectにおいてライブラリを管理するためにGradleを使う方法

Eclipse EEのDynamic Web Projectにおいてライブラリを管理するためにGradleを使う方法は以下のとおりです.

  • Dynamic Web Projectを作成する.
  • プロジェクトのルートに以下に記すbuild.gradleファイルを作成する.
  • プロジェクトを右クリックして表示されるポップアップメニューで「Configure->Add Gradle Nature」を選択する.
  • srcディレクトリの配下にmain/javaディレクトリを作成する.
  • WebContentディレクトリをsrc/mainに移動し,「webapp」ディレクトリに改名する.
  • プロジェクトを右クリックして表示されるポップアップメニューで「Properties->Deployment Assembly」を選択する.
  • 「Web Deployment Assembly」ダイアログでAddボタンを押下する.
  • 「New Assembly Directive」ダイアログで「Folder」を選択し,Nextボタンを押下する.
  • 「New Assembly Directive」ダイアログで「src->main->webapp」を選択し,Finishボタンを押下する.
  • プロジェクトを右クリックして表示されるポップアップメニューで「Gradle->Refreash Gradle Project」を選択する.
  • buildディレクトリを削除する.

以前同じタイトルの内容[1]を投稿したのですが,こちらのほうが前のよりよい気がしたので,今後はこの方法でやっていこうと思います.

[1] Eclipse EEのDynamic Web Projectにおいてライブラリを管理するためにGradleを使う方法, https://emaizetto.blogspot.com/2020/04/eclipse-eedynamic-web-projectgradle.html

2020年4月11日土曜日

Eclipse EEのDynamic Web Projectにおいてライブラリを管理するためにGradleを使う方法

Eclipse EEのDynamic Web Projectにおいてライブラリを管理するためにGradleを使う方法は以下のとおりです.

  • Dynamic Web Projectを作成する.
  • プロジェクトのルートに以下に記すbuild.gradleファイルを作成する.
  • プロジェクトを右クリックして表示されるポップアップメニューで「Configure->Add Gradle Nature」を選択する.
  • ライブラリを更新した場合は,プロジェクトを右クリックして表示されるポップアップメニューで「Gradle->Refreash Gradle Project」を選択する.

ちょっと失われる設定もあるみたいですが,私的には問題ないので,問題がおきないうちはこの環境でWebアプリを作っていこうと思います.以前から構成管理に憧れていて,ずっとやりたかったんだけど,やっと踏み出すことができて良かったです.

「org.json.JSONException: Unterminated string at XXXX」に対処する方法

org.jsonライブラリを使ったコードでJSON文字列を処理した際に

org.json.JSONException: Unterminated string at XXXX
という例外に出くわしました.この例外は,文字列に直接記述することが許されていない文字を文字列に記述した際に生じるみたいです.そういうわけで,この例外に対する対処方法は,文字列に直接記述することが許されていない文字については,エスケープシーケンスで記述するということになります.

JSONの仕様[1]によると,値としての文字列に直接記述できる文字は,以下のとおりです.

  1. 0x20-0x21
  2. 0x23-5B
  3. 0x5D-10FFFF

上記の範囲に収まらない文字については,エスケープシーケンスで記述する必要があります.例えば,値として「0\t1\n」という文字列を記したい場合,「0x30,0x09,0x31,0x0a」と記すとNGなので,「0x30,0x5c,0x74,0x31,0x5c,0x6e」と記す必要があります.(0x30='0',0x31='1',0x09='\t',0x0a='\n',0x5c='\',0x6e='n',0x74='t').

今回の例外は,そのことを知らず,エスケープシーケンスで記す必要のある文字を直接記してしまったために発生したということになります.

[1]RFC8259, https://tools.ietf.org/html/rfc8259

2020年4月1日水曜日

Oculus GoでVideoPlayer越しにビデオを再生できない問題を解消する方法

VideoPlayerを使ってビデオを再生するOculus Go用のプログラムを作成した際に,次のメッセージが表示されて再生できないという問題に出くわしました.

Unity : AndroidVideoMedia: Error opening extractor: -10000

数日間試行錯誤を続けたところ,ビデオのURLに原因があることをつきとめました.

今回デバッグのために作成したコードは以下のとおりです. このコードの14行目でビデオのURLを指定しているのですが,それが「https://192.168.1.5:8443/test.mp4」のときに上記のエラーが発生します.このエラーを解消する方法は,ビデオを「https://hogehoge/test.mp4」というURLでアクセスできる場所に置き,そのURLをvideoPlayer.urlの値に指定するというものです.そうすると,ビデオが再生されるようになります.

原因はURLにあるところまではわかったのですが,URLのどこが原因かは定かではありません.なんとなくですが,ポート番号が怪しい(ポート番号の指定は無視されデフォルトのポート番号が使われているような)気がしています.

2020年3月30日月曜日

SPRESENSEで自作MQTTパブリッシャを動作させる方法

SPRESENSEで自作MQTTパブリッシャを動作させてみようと下記の「MqttPublisherTest.ino」というプログラムを実行したところ, 次のようなエラーに出くわしました.

mosquitto
New connection from 192.168.1.21 on port 1883.
Client  has exceeded timeout, disconnecting.
シリアルモニタ
failed, rc=-4

どうも使っているライブラリが怪しかったので,「SparkfunESP8286WiFi.cpp」というコードの(1)の部分を修正したところ, 上記のエラーは解消することができました, ただ,今度は次のような別のエラーが表示されるようになりました.

mosquitto
New connection from 192.168.1.21 on port 1883.
New client connected from 192.168.1.21 as ESP8266Client-0 (p2, c1, k15).
Socket error on client ESP8266Client-0, disconnecting.
シリアルモニタ
failed, rc=-1

処理内容を細かくチェックすると,MQTTブローカからの返信を処理していない箇所があったので, 「SparkfunESP8286WiFi.cpp」というコードの(2)の部分を追加したところ, シリアルモニタのエラーは解消することができました.

mosquitto
New connection from 192.168.1.21 on port 1883.
New client connected from 192.168.1.21 as ESP8266Client-5165 (p2, c1, k15).
Socket error on client ESP8266Client-5165, disconnecting.
シリアルモニタ
なし

引き続き処理内容を細かくチェックすると,コネクションの状態を返すべきところがWiFiの接続状態を返している箇所があったので, 「SparkfunESP8286Client.cpp」というコードの(3)の部分を修正したところ, ようやく期待通りの動作をさせることができました.

2019年10月31日木曜日

Tomcat 9がEclipseから起動しない問題を解消する方法

インストーラー付きのTomcat 9をWindowsにインストールし,Eclipseから起動すると次のメッセージが表示されて失敗する問題に出くわしました.

Starting Tomcat V9.0 Server at local host has encountered a problem.
This server cannot be started because one or more of the ports are invalid.
Open the server editor and correct the invalid ports.

この問題の解消方法をメモしておきます.

  • インストーラーでインストールしたTomcat 9を削除
  • Tomcatのサイトから「64bit Windows zip」をダウンロード
  • ZIPファイルを展開し,所望の場所にインストール
  • Eclipseの「Preferences > Servers > Runtime Environments」でTomcat 9を登録
  • 「Servers」ビューにTomcat 9を登録
  • Tomcatを起動

2019年5月2日木曜日

Eclipse上でポート番号を指定してApp Engineを起動する方法

Eclipse上でポート番号を指定してApp Engineを起動する方法をメモしておきます.

手順は以下の通り.

1Project Explorer内の当該プロジェクト上で右クリック.
2ポップアップメニューにある「Debug As」と「Debug on Server」をこの順番で選択.
3Debug on Serverダイアログで「Manually define a new server」を選択.
4「Select the server type」内のツリーメニューにある「Google」を「App Engine Standard」をこの順番で選択.
5「Server port」に指定したいポート番号を入力.
6「Finish」を押下.

ちなみに上記の手順はGoogle App Engine Javaのものです.他の言語の場合は異なるかもしれません.

2018年6月12日火曜日

SSHポートフォワーディング(ローカルフォワード)を利用する方法

SSHポートフォワーディング(ローカルフォワード)を利用する方法をメモしておきます.

ローカルマシンの8080ポートからリモートマシン(remote)を経由してターゲットマシン(target)の80番ポートにアクセスする場合のコマンドは以下の通り.

$ ssh -L 8080:target:80 remote

2018年5月26日土曜日

読了:アテンション

「アテンション」を読みました.

Ben Parr: アテンション, 飛島新社, 2016-03 [アマゾン, 楽天]

本書についてのメモを以下に記しておきます.

情報が満ち溢れる現代において,人々の注目は風のある日の風見鶏のようにあちらこちらに向けられている.1つの対象に対して向けられる注目の時間は昔より少なくなっているのだ.そのような状況において,1つのものに注目を寄せ続けてもらうのは難しい.だから,注目について理解し,その性質に従って適切に振る舞うことが重要になってくる.

注目は即時,短期,長期の3種類に分類される.即時の注目とは,まわりの世界に対する人々のすばやい無意識の反応のことである.この注目は,ほんの数秒しか持続しないので,すぐに忘れ去られるか,短期の注目に移るかのいずれかとなる.次に,短期の注目とは,特定の出来事や刺激に対する人々の短期的な集中のことである.この集中を持続させることができれば,長期の注目を獲得できる.最後に,長期の注目とは,人々の興味を途切れなく,深くつなぎ止めた段階のことである.この段階に至れば,作り手の思惑通りに事が進む可能性が高まる .

3つの注目には,それぞれを獲得するための手法がある.それは,自動,フレーミング,破壊,報酬,評判,ミステリー,承認の7種類のトリガーである.即時の注目を獲得するのに有効なのは,自動トリガーである.自動トリガーとは,対比か無意識の連想によって,特定の感覚的手がかりに注意を向ける傾向このことである.次に,短期の注目を獲得するのに有効なのは,フレーミングトリガー,破壊トリガー,報酬トリガーである.フレーミングトリガーとは,相手の世界観にしたがうか,それを覆すことによって注意を向けてしまう傾向のことである.破壊トリガーとは,人々の期待をあえて裏切り,注目するものを変えさせるのに効果がある.報酬トリガーとは,報酬により人々のモチベーションを向上させる傾向である.最後に,長期の注目を獲得するのに有効なのは,評価トリガー,ミステリートリガー,承認トリガーである.評価トリガーとは,専門家,権威者,大衆の評価を用いて,対象への信頼性が高まったり,魅力が高まったりする傾向である.ミステリートリガーとは,謎や不確実性やサスペンスを作り出して,最後まで関心をつなぎ止める働きのことである.承認トリガーとは,自分を承認し,理解してくれる人に寄せる関心のことである.これら7つのトリガーを適切に組み合わせれば,即時から長期まで注目を維持することができる.

「いいものさえ作れば客は来る」?まったく困った考え方だ.このフレーズを見たとき,ドキッとした.なぜなら,「いいものさえ作れば客は来る」は自分がいつも念頭に置いているポリシーだからだ.いきなり脳天を撃ち抜かれた感はあったが,逆にどうしてそんなことが言えるのか興味をそそられてしまった.多分,最初に紹介したフレーズは本書に記されているフレーミングトリガーなのだろう.相手の世界観を覆すというその手法により,まんまと自分の注目は本書に寄せられてしまったようだ.本書で紹介されている7つのトリガーはいずれも使いやすい手段のように思える.それらの効果は,実践を通して確かめていきたい.

2017年10月17日火曜日

Eclipse WTP + TomcatでHTTPS通信を行う方法

Eclipse WTP + TomcatでHTTPS通信を行う方法をメモしておきます.

1. 次のコマンドを実行した後,パスワードとオレオレ証明証の発行に必要な情報を入力する.
$ keytool -genkey -alias tomcat -keyalg RSA -keystore workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/conf/localhost-rsa.jks
2. Project Explorerの「Servers->Tomcat vX.X Server at localhost-config->server.xml」を選択
3. server.xmlに次の内容を追加(コメントとして雛形があるので,それを解除).
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true">
  <SSLHostConfig>
    <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" certificateKeystorePassword="XXXXXXX" type="RSA" />
  </SSLHostConfig>
</Connector>

2016年11月5日土曜日

[読了]習慣の力

「習慣の力」を読みました.

Charles Duhigg: 習慣の力, 講談社, 2013-04 [アマゾン, 楽天]

本書についてのメモを以下に記しておきます.

とある研究成果によると,毎日の人の行動の,実に40%以上が,「その場の決定」ではなく「習慣」だそうだ.習慣には良いものもあるし,悪いものもある.行動に占める習慣の領域がそれほど広いのであれば,どちらの習慣がそこに収まるかによって,人生の過ごし方が変わってくるはずだ.ただ,習慣のコントロールは難しい.気づいたときには身についているもので,やめようと思ってもやめられないし,良かれと思って始めてみても,なかなか続けられない.習慣というのは本当にやっかいなものだ.

しかし,近年の研究成果によると,そうでもないらしい.習慣とは何とかコントールできる対象のようだ.本書は,様々な個人,組織,社会と様々なレベルの事例を挙げながら,その方法を解き明かしている.

習慣とそれをコントロールするためのポイントは以下のとおりである.

  • 習慣は,欲求により作動された,きっかけ,ルーチン,報酬からなるループである.
  • 欲求,きっかけ,報酬を変えるのは難しいが,ルーチン(毎朝ジョギングするとか,タバコを吸うとかに当たる)は変えられる.
  • きっかけと報酬を見える化する.そして,そのきっかけのときに,その報酬が得られるような行動を行う.その行動が両者に結びつけば,ルーチンとなる.
  • つくりかえた習慣のループを永遠のものに変える要素は,「信じる」ことである.
  • 連鎖反応を起こして他の習慣を変えていくような習慣のことをキーストーン・ハビットと呼ぶ.
  • キーストーン・ハビットが与えれてくれるのは,「小さな勝利」(大きな勝利にもう少しで手が届くと思わせるもの)と呼ばれるものである.
  • キーストーン・ハビットの一つに意志力(無意識に自分を制御する習慣)があり,個人の成功にはこれが求められる.
  • 「ものごとを自分でコントロールしている感覚」は,意志力の保持に役立つ.
  • 新しい習慣を売り込むには,新規のものを古い習慣に見せるようにする.

2015年8月2日日曜日

共有するGitリポジトリを作成する方法

共有するGitリポジトリを設定する方法をメモしておきます.

$ groupadd group
$ usermod -G group user
$ mkdir /path/to/repository.git
$ git init --bare --shared /path/to/repository.git
$ chown -R user:group /path/to/repository.git

2015年6月13日土曜日

GEAのDataNucleus Enhancerが異常終了する問題

GEAのDataNucleus Enhancerが「java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal」という例外で異常終了する問題に出くわしました.この問題の解決方法をメモしておきます.

  • 「/WEB-INF/lib」(別のフォルダでもいいかもしれない)に「xml-apis-X.X.X.jar」と「xercesImpl-X.X.X.jar」を配置する(Xは適当な数字).
  • それら二つのJARファイルを「Java Build Path」の「Libraries」に追加する.

今回は,[1]の質問に対する回答を参考にしました.

[1] AppEngine Error [ java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal ], http://stackoverflow.com/questions/10234201/appengine-error-java-lang-noclassdeffounderror-org-w3c-dom-elementtraversal

2015年4月22日水曜日

CSSではみ出した部分を「…」にする方法

CSSではみ出した部分を「…」にする方法をメモしておきます.

.hogehoge {
    width: 4em;
    white-space: nowrap; 
    overflow: hidden;
    text-overflow: ellipsis;
}
<div class="hogehoge">どうしてプログラムのサンプルに使うテキストは「ほげほげ」なんだろう?</div>

「text-overflow: ellipsis;」と記せば,「…」にならなかったので,何でだろうとずっと悩んでいたのですが, このプロパティは,先の例のように他の3つのプロパティといっしょに使わないと効果が発揮されないんですね. ようやく謎が解けた.\(^O^)/

2015年4月19日日曜日

ロジスティック回帰をJavaで実装

文献[1]で紹介されているロジスティック回帰をJavaで実装してみました.

ロジスティック回帰は,分類問題に適用できる機械学習手法の1つです(確率化したパーセプトロンという理解でいいのかな). 文献で紹介されているとおりあらかじめ用意したデータを分類する関数を求めてみました. グラフにした結果は次の図のとおりです. 青の点が正解,赤の点が不正解,黄色の直線がそれらを分類するために推定された関数,オレンジが正解になる確率が0の領域で,緑が1の領域です. 直線付近は,正解と不正解の境界になっているので,正解になる確率がどんと落ちてます.

ちなみに,これまでグラフはExcelで描いてきたのですが,今回は難しかったので,d3.jsを使ってみました(かなりゴリ押しですけど). 使ってみて思いましたが,大本の文献で使っているPythonがやっぱり一番簡単そうですね.

[1] 中谷 秀洋: ロジスティック回帰を実装してみよう, 機械学習はじめよう 第20回, http://gihyo.jp/dev/serial/01/machine-learning/0020

2015年4月16日木曜日

パーセプトロンをJavaで実装

文献[1]で紹介されているパーセプトロンをJavaで実装してみました.

パーセプトロンは,分類問題に適用できる機械学習手法の1つです. 文献で紹介されているとおりあらかじめ用意したデータを正解(1)と不正解(-1)に分類する関数を求めてみました. グラフにした結果は次の図のとおりです. そうなるようにデータを作ってあるので,当たり前なのですが, 正解と不正解をうまく仕分ける関数を求めることができました.

[1] 中谷 秀洋: パーセプトロンを実装してみよう, 機械学習はじめよう 第17回, http://gihyo.jp/dev/serial/01/machine-learning/0017

2015年4月11日土曜日

ベイズ線形回帰をJavaで実装

文献[1]で紹介されているベイズ線形回帰を記事[2]で作成したプログラムを元にしてJavaで実装してみました.

ベイズ線形回帰は,線形回帰を確率化してベイジアンで関数を求める手法です. 文献で紹介されているとおり基底関数をベイズ基底にして関数を求めてみました. 結果は次の図のとおりです. ベイズ線形回帰なので,関数だけでなく,確率密度も求めることができます.

[1] 中谷 秀洋: ベイズ線形回帰を実装してみよう, 機械学習はじめよう 第14回, http://gihyo.jp/dev/serial/01/machine-learning/0014
[2] mizo0409: 線形回帰をJavaで実装, http://mizo0409.blogspot.jp/2014/01/java.html

2015年2月10日火曜日

[読了]良い習慣悪い習慣

「良い習慣悪い習慣」を読みました.

Jeremy Dean: 良い習慣悪い習慣, 東洋経済, 2014-09 [アマゾン, 楽天]

本書についてのメモを以下に記しておきます.

行動を習慣化させるには,どのくらいの時間がかかるか?本書は.この疑問の答えを探すところから始まる.巷によると21日が有力な説であるが,学術的な研究成果によると平均で66日になるらしい.行動によって短くなったり,長くなったりするが,行動を習慣化するにはどうも2ヶ月ぐらいかかるみたいだ.

習慣とは,自動化された行動である.行動の習慣化は,意図的にそうすることもできるし,経験からそうなってしまうこともある.いずれにせよ一旦行動が習慣化されれば,結果の善し悪しにかかわらず,無意識が周囲の状況に基づきその実行をコントロールするようになる.

行動を習慣化するためのポイントは次のとおりである.

  • 達成する価値のある最終目標を持つ.
  • 最終目標までの具体的なプロセスを考える.
  • 同じ状況下で繰り返す.
  • 進捗をモニタリングする.
  • 行動して得られるものが報酬となるようにする.
  • 不満に対処する.
  • 心理的対比(夢想と現実を比較すること)と実行意図(「〜ならば〜する」と定めること)を組み合わせて行動する.
  • 生活に組み込むのが難しい運動などは,既存の生活習慣に付随させる.