Powered By Blogger

2017年1月31日火曜日

Dockerのインストール

ここを参考に、実施してみた が、エラーとなったためメモ。
エラー内容は以下。
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp…
なぜ?
curl https://registry-1.docker.io/v2/
以下のレスポンスが返ってきた。
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}
ということで
docker login
を試みるがなぜかログインできずでダメ、インストールし直してみたりするが、一向に直らず同様のエラー。 ということ困ったときの再起動。再度実行したらできた…

hello-worldの実行
docker run hello-world
nginxの実行
docker run -d -p 80:80 --name webserver nginx
ブラウザでlocalhostにアクセス。 無事「Welcome to nginx!」と表示された。

2016年12月7日水曜日

MySQLで、JSON型にインデックスを貼る

こんな感じで、JSON型の特定項目に対してインデックスを貼ることが可能。
create table sample_table (
  id                int(11)       not null
 ,json_data         json          null
);

alter table sample_table add primary key (id);

alter table sample_table change id id int auto_increment;

alter table sample_table add hoge varchar(50) generated always as (json_unquote(json_extract(`json_data`,'$.hoge'))) virtual after json_data;

alter table sample_table add index sample_table_idx(hoge);

2016年9月6日火曜日

github上のプライベートなnpmパッケージをpackage.jsonに指定する方法

ハマったのでメモ。こんな感じのコマンド。
npm install --save git+ssh://git@example.com:hoge/foo#bar
#の後ろはブランチ名

2016年6月24日金曜日

ReactでHTMLエスケープせずに表示する方法

dangerouslySetInnerHTMLという属性を使う。
使い方はこんな感じ。
const htmlContent = ...
<td dangerouslySetInnerHTML={{__html: htmlContent }} />

2015年12月17日木曜日

play + react + gulp + webpackでビルド環境

最終着地点はactivator runと同時にreactをビルドする。
そしてMinifyもできるようにしておく。
  1. 前提条件 
    • 以下がインストール済であること
      • Scalaがインストール済
      • Playがインストール済
      • Node.jsがインストール済
      • gulpがグローバルインストール済
  2. プロジェクトの作成
    • >activator new
      
      Fetching the latest list of templates...
      
      Browse the list of templates: http://typesafe.com/activator/templates
      Choose from these featured templates or enter a template name:
        1) minimal-akka-java-seed
        2) minimal-akka-scala-seed
        3) minimal-java
        4) minimal-scala
        5) play-java
        6) play-scala
      (hit tab to see a list of all templates)
      > 6
      Enter a name for your application (just press enter for 'play-scala')
      > test1
      OK, application "test1" is being created using the "play-scala" template.
      
      To run "test1" from the command line, "cd test1" then:
      C:\playSandbox\test1/activator run
      
      To run the test for "test1" from the command line, "cd test1" then:
      C:\playSandbox\test1/activator test
      
      To run the Activator UI for "test1" from the command line, "cd test1" then:
      C:\playSandbox\test1/activator ui
      
  3. Reactのチュートリアルなどを参考にファイルを編集
    • JSを以下のような感じで配置し、main.jsをエントリーポイントする
      • /test1/app/assets/app/components/CommentBox.js
      • /test1/app/assets/app/components/CommentForm.js
      • /test1/app/assets/app/components/CommentList.js
      • /test1/app/assets/app/main.js
    • CSSを以下のような感じで配置
      • /test1/app/assets/app/css/main.css
    • /test1/app/views/index.scala.htmlを編集 
      • @(message: String)
        
        @main {
            <header>
              <h1>React Tutorial ES6</h1>
            </header>
            <div id="container"></div>
        }
        
    • /test1/app/views/main.scala.htmlを編集
      • @(content: Html)
        <html>
            <head>
                <title>title</title>
                <link rel="stylesheet" media="screen" href="@routes.Assets.versioned("css/main.css")">
                <link rel="shortcut icon" type="image/png" href="@routes.Assets.versioned("images/favicon.png")">
            </head>
            <body>
                @content
                <script src="/assets/app/main.build.js"></script>
            </body>
        </html>
        
  4. 必要パッケージのイントール、設定
    •  プロジェクトディレクトリ直下にpackage.jsonの作成
      • {
          "name": "test1",
          "version": "0.0.1",
          "dependencies": {
            "gulp": "^3.9.0"
          },
          "private": true,
          "devDependencies": {
            "babel-core": "^6.3.17",
            "babel-loader": "^6.2.0",
            "babel-preset-es2015": "^6.3.13",
            "babel-preset-react": "^6.3.13",
            "gulp-uglify": "^1.5.1",
            "jquery": "^2.1.4",
            "react": "^0.14.3",
            "react-dom": "^0.14.3",
            "webpack": "^1.12.9",
            "webpack-stream": "^3.1.0"
          }
        }
        
    • インストール
      • npm installを実行 (しばらくかかる)
  5. Gulpの設定
    •  プロジェクトディレクトリ直下にgulpfile.jsの作成
      • (function() {
          'use strict';
        
          var gulp = require('gulp');
          var uglify = require('gulp-uglify');
          var webpack = require('webpack-stream');
          var wpConf = require('./webpack.config.js');
        
          gulp.task('default', function() {
            console.log('gulp default task.');
          });
        
          gulp.task('build', function() {
            gulp.src(wpConf.entry).pipe(webpack(wpConf)).pipe(gulp.dest(wpConf.dest));
          });
        
          gulp.task('minify', function() {
            gulp.src('./target/web/public/main/app/main.build.js').pipe(uglify()).pipe(gulp.dest('./target/web/public/main/app'));
          });
        
          function errorHandler(err) {
            console.log('Error: ' + err.message);
          }
        
        })();
        
  6. webpackの設定
    • プロジェクトディレクトリ直下にwebpack.config.jsの作成
      • (function(module) {
          var WEBPACK_CONFIG = {
            entry: './target/web/public/main/app/main.js',
            dest: './target/web/public/main/app/',
            output : {
              filename : 'main.build.js'
            },
            module: {
              loaders: [
                {
                  test: /\.jsx?$/,
                  loader: 'babel',
                  query: {
                      presets:['es2015', 'react']
                  }
                }
              ]
            },
          };
          module.exports = WEBPACK_CONFIG
        }(module));
        
  7. 動作確認
    •  ビルドタスク
      • >gulp build
        [11:59:00] Using gulpfile C:\playSandbox\test1\gulpfile.js
        [11:59:00] Starting 'build'...
        [11:59:01] Finished 'build' after 212 ms
        [11:59:15] Version: webpack 1.12.9
                Asset    Size  Chunks             Chunk Names
        main.build.js  693 kB       0  [emitted]  main 
    • Minifyタスク
      • >gulp minify
        [12:03:32] Using gulpfile C:\playSandbox\test1\gulpfile.js
        [12:03:32] Starting 'minify'...
        [12:03:32] Finished 'minify' after 8.87 ms 
  8. activator run実行時にgulpを実行する設定 
    • /test1/projectディレクトリにGulp.scalaを作成(windowsとそれ以外で処理分けてるけど、他にいい方法はないのか・・・)
      • import play.PlayRunHook
        import sbt._
        
        object Gulp {
          def apply(base: File, tasks: String): PlayRunHook = {
        
            object GulpProcess extends PlayRunHook {
        
              var process: Option[Process] = None
        
              override def beforeStarted(): Unit = {
                process = Some(runGulp())
              }
        
              private def runGulp(): Process = {
                val process: ProcessBuilder = System.getProperty("os.name").startsWith("Windows") match {
                  case true => Process("cmd" :: "/c" :: "gulp" :: "--gulpfile=gulpfile.js" :: tasks.split(" ").toList, base)
                  case _ => Process("gulp" :: "--gulpfile=gulpfile.js" :: tasks.split(" ").toList, base)
                }
                process.run()
              }
        
              override def afterStopped(): Unit = {
                process.map(p => p.destroy())
                process = None
              }
            }
        
            GulpProcess
          }
        }
        
    • build.sbtの編集
      • 以下を追記
        import play.sbt.PlayImport.PlayKeys.playRunHooks
        playRunHooks <+= baseDirectory.map(base => Gulp(base, "build"))
        
  9. activator runの実行と確認
    • 以下のような感じで表示されているか確認
      • >activator run
        [info] Loading project definition from C:\playSandbox\test1\project
        [info] Set current project to test1 (in build file:/C:/playSandbox/test1/)
        
        --- (Running the application, auto-reloading is enabled) ---
        
        [info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
        
        (Server started, use Ctrl+D to stop and go back to the console...)
        
        [12:17:43] Using gulpfile C:\playSandbox\test1\gulpfile.js
        [12:17:43] Starting 'build'...
        [12:17:44] Finished 'build' after 501 ms
        [12:17:58] Version: webpack 1.12.9
                Asset    Size  Chunks             Chunk Names
        main.build.js  693 kB       0  [emitted]  main
        
    • localhost:9000にアクセスし、画面表示を確認
以上で終了

2015年12月10日木曜日

快適な日本語Eclipseの作成

最近Eclipseが重いので、取り替えず軽量かつ日本語の環境を作る。
そして、最低限Javaが開発できて、Marketplaceが使用できるようにする。

ベースはPleiadesのPlatform版を使う。

  1. 好きなバージョンを選び、環境に合わせてダウンロード。今回はMars64bit Standard Editionを使う。
  2. ダウンロードしたら適宜好きな場所に配置し解凍。
  3. 解凍されたディレクトリのeclipseディレクトリ配下にあるeclipse.exeを実行。当然まっさらなEclipseなので一瞬で起動する。
  4. 起動したら、ヘルプ-新規ソフトウェアのインストールを開き、作業対象のプルダウンよりMarsを選択。
  5. フィルタにJavaと入力、プログラミング言語-Eclipse Java 開発ツールを選択し、次へをクリックし画面の指示に従ってインストール。
  6. インストールが終わると、再起動の確認メッセージが表示されるので再起動を行う。
  7. Javaの開発が可能になったはずなので確認。
  8. 次にMarketplaceを使用可能にする。
  9. 先ほどと同様に、ヘルプ-新規ソフトウェアのインストールを開き、作業対象のプルダウンよりMarsを選択。
  10. フィルタにMarketplaceと入力、一般用ツール-マーケットプレース・クライアントを選択し、次へをクリックし画面の指示に従ってインストール。
  11. インストールが終わると、再起動の確認メッセージが表示されるので再起動を行う。
  12. ヘルプメニューにEclipse マーケットプレースと表示されているはずなので確認。
これで日本語かつ快適な環境の完成。

2015年5月20日水曜日

「object error is not a member of package views.html」というエラーの対処法

Eclipse上でPlayアプリケーションの開発を行っていて「object error is not a member of package views.html」というエラーが発生。

こちらのページを参考に対処したところ解決。