Quantcast
Channel: プログラム の個人的なメモ
Viewing all 860 articles
Browse latest View live

【Spark Framework】REST API + knockout.jsを使って データバインドする

$
0
0

■ はじめに

https://blogs.yahoo.co.jp/dk521123/37203509.html
で、REST API を作成できたので、ユーザに表示できるように
knockout.js を使って、データバインドしてみる

なお、knockout.js については、以下の関連記事を参照のこと。
knockout.js
https://blogs.yahoo.co.jp/dk521123/35664953.html
https://blogs.yahoo.co.jp/dk521123/35665471.html
https://blogs.yahoo.co.jp/dk521123/35679484.html


■ サンプル

 * 「index.html」の格納場所は、以下の関連記事を参照のこと。
https://blogs.yahoo.co.jp/dk521123/37208237.html

index.html

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Hello World</title><script type="text/javascript"
  src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script><script type='text/javascript'
  src='https://ajax.aspnetcdn.com/ajax/knockout/knockout-3.4.2.js'></script></head><body><h1>Hello World!</h1><ul data-bind="foreach: people"><li>ID: <span data-bind="text: id"></span>, 名前: <span
      data-bind="text: name"></span></li></ul><script type="text/javascript">
      var viewModel = {
        people : ko.observableArray()
      };
      ko.applyBindings(viewModel);
      $(document).ready(function() {
        $.getJSON("/hello", function(data) {
          viewModel.people(data);
        });
      });</script></body></html>

DemoService.java

package com.sample.spark;

import com.google.gson.Gson;
import com.sample.spark.controllers.HelloWorldController;

import spark.Service;

public class DemoService {
  public static void main(String[] args) {
    DemoService sparkService = new DemoService();
    sparkService.initialize();
  }

  private Service service;

  private DemoService(ServiceConfig config) {
    this.service = Service.ignite();
  }

  public void initialize() {
    this.service.staticFiles.location("/public");

    Gson gson = new Gson();
    HelloWorldController controller = new HelloWorldController();

    this.service.get("/hello", controller::getPeople, gson::toJson);
    this.service.get("/stop", (request, response) -> {
      // Server stop!
      this.service.stop();
      return null;
    });
  }
}

HelloWorldController.java

package com.sample.spark.controllers;

import java.util.ArrayList;
import java.util.List;

import com.sample.spark.models.Person;

import spark.Request;
import spark.Response;

public class HelloWorldController {
  public List<Person> getPeople(Request request, Response response) {
    List<Person> people = new ArrayList<>();
    people.add(new Person(1L, "Mike"));
    people.add(new Person(2L, "Tom"));
    people.add(new Person(3L, "Kevin"));
    return people;
  }
}

Person.java

package com.sample.spark.models;

public class Person {
  private long id;
  private String name;

  public Person(long id, String name) {
    this.id = id;
    this.name = name;
  }

  public long getId() {
    return this.id;
  }
  public void setId(long id) {
    this.id = id;
  }
  public String getName() {
    return this.name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

出力結果

ブラウザを立ち上げて、以下のURLにアクセスする
[[http://localhost:4567]]
Hello World!

ID: 1, 名前: Mike
ID: 2, 名前: Tom
ID: 3, 名前: Kevin


関連記事

Spark Framework

初期設定 ~ 環境構築(Gradle Project)からHello Worldまで / 新版 ~
https://blogs.yahoo.co.jp/dk521123/37204914.html
Spark Framework + GSONを使って REST API を作成する
https://blogs.yahoo.co.jp/dk521123/37203509.html
静的ファイルを設定するには...
https://blogs.yahoo.co.jp/dk521123/37208237.html

knockout.js

knockout.js ~入門編~
https://blogs.yahoo.co.jp/dk521123/35664953.html
knockout.js ~基礎編~ [1]
https://blogs.yahoo.co.jp/dk521123/35665471.html
knockout.js ~構文編~
https://blogs.yahoo.co.jp/dk521123/35679484.html
ASP.NET MVC で、 knockout.js を使う ~入門編~
https://blogs.yahoo.co.jp/dk521123/35660898.html

【Spark Framework】Ajax で form データ送受信する

$
0
0

■ form データを受信するには...

request.queryMap() 又は、request.queryParams() から取得可能
...(Request request, Response response) {
  QueryParamsMap map = request.queryMap();
  String userId = map.get("userId").value();
...
  String userId2 = request.queryParams("userId");

■ サンプル

DemoService.java

package com.sample.spark;

import com.google.gson.Gson;
import com.sample.spark.controllers.HelloWorldController;

import spark.Service;

public class DemoService {
  public static void main(String[] args) {
    DemoService sparkService = new DemoService();
    sparkService.initialize();
  }

  private Service service;

  private DemoService(ServiceConfig config) {
    this.service = Service.ignite();
  }

  public void initialize() {
    this.service.staticFiles.location("/public");

    Gson gson = new Gson();
    HelloWorldController controller = new HelloWorldController();

    this.service.get("/receive", controller::receive);
    this.service.get("/stop", (request, response) -> {
      // Server stop!
      this.service.stop();
      return null;
    });
  }
}

HelloWorldController.java

package com.sample.spark.controllers;

import java.util.ArrayList;
import java.util.List;

import com.sample.spark.models.Person;

import spark.QueryParamsMap;
import spark.Request;
import spark.Response;

public class HelloWorldController {
  public String receive(Request request, Response response) {
    QueryParamsMap map = request.queryMap();
    try {
      String userId = map.get("userId").value();
      String userName = map.get("userName").value();

      String userId2 = request.queryParams("userId");
      String userName2 = request.queryParams("userName");
      return "userId : " + userId + " userName : " + userName +" userId2 : " + userId2 + " userName2 : " + userName2;
    } catch (Exception ex) {
      return "Error: " + ex.getMessage();
    }
  }}

sampleform.html

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Hello World</title><script type="text/javascript"
  src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script><script src="./js/customAjax.js" type="text/javascript"></script></head><body><h1>Hello World!</h1><form><fieldset><p>ID</p><input type="text" name="userId" id="userId"><p>Name</p><input type="text" name="userName" id="userName"> <input
        type="button" id="buttonSubmit" value="submit"></fieldset></form><br><p>
    Result: <span id="result"></span></p></body></html>

customAjax.js

$(function() {
  $('#buttonSubmit').click(function(){
    var userId = $('#userId').val();
    var userName = $('#userName').val();

    $.ajax({
      url: '/receive?userId=' + userId + '&userName=' + userName,
      success: function(result) {
        $('#result').text(result);
      }
    });
  });
});

出力結果

ブラウザを立ち上げて、以下のURLにアクセスする
[[http://localhost:4567/sampleform.html]]


関連記事

【Spark Framework】初期設定 ~ 環境構築(Gradle Project)からHello Worldまで / 新版 ~

https://blogs.yahoo.co.jp/dk521123/37204914.html

【Spark Framework】REST API + knockout.jsを使って データバインドする

https://blogs.yahoo.co.jp/dk521123/37208334.html

【Raspberry PI】Google Assistant SDK

$
0
0

■ 言語

https://developers.google.com/assistant/sdk/overview
[1] Python
[2] gRPC API
gRPC については、以下の参考文献を参照
http://charleysdiary.hatenablog.com/entry/2016/09/08/163909

■ ハードウェア要件

https://developers.google.com/assistant/sdk/develop/grpc/
[1] Raspberry PIのようなインターネットに繋がるデバイス
[2] マイク
[3] スピーカー

■ 手順

https://developers.google.com/assistant/sdk/develop/grpc/hardware/setup?hardware=rpi
[1] ハードウェアとネット接続の設定
https://developers.google.com/assistant/sdk/develop/grpc/hardware/audio
[2] オーディオ(スピーカー / マイク)の設定とテスト
https://developers.google.com/assistant/sdk/develop/grpc/config-dev-project-and-account
[3] Google Developerプロジェクトとアカウントを設定
 [3-1] プロジェクトを作成
 [3-2] 作成したプロジェクトに対して、Google Assistant APIを有効にする
 [3-3] OAuth クライアント ID を作成する
https://developers.google.com/assistant/sdk/develop/grpc/integrate
[4] Google Assistantをデバイスに組み込む

【Java】コマンドライン引数のパーサー [2] ~ args4j 編 ~

$
0
0

■ はじめに

https://blogs.yahoo.co.jp/dk521123/37206429.html
の続き。今回は「args4j」。
個人的には、こっちの方が使いやすい。


■ サンプル

import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;

public class ServiceConfig {
  @Option(name = "-p", aliases="--port", required=false, usage="Port")
  private int port;

  @Option(name = "-t", aliases="--threads", required=false, usage="Max Threads")
  private int maxThreads;

  @Option(name="-d", aliases="--debug", required=false, usage="debug option")
  private boolean isDebug;

  @Option(name="-h", aliases="--help", required=false, usage="debug option")
  private boolean hasHelp;

  public int getPort() {
    return this.port;
  }
  public void setPort(int port) {
    this.port = port;
  }

  public int getMaxThreads() {
    return this.maxThreads;
  }
  public void setMaxThreads(int maxThreads) {
    this.maxThreads = maxThreads;
  }

  public boolean isDebug() {
    return this.isDebug;
  }
  public void setDebug(boolean isDebug) {
    this.isDebug = isDebug;
  }

  public static void main(String[] args) {
    ServiceConfig serviceConfig = new ServiceConfig();
    String[] args1 = {"-p", "18080", "-t", "10", "--debug"};
    CmdLineParser parser = new CmdLineParser(serviceConfig);
    try {
      parser.parseArgument(args1);
    } catch (CmdLineException ex) {
      ex.printStackTrace();
      return;
    }

    parser.printSingleLineUsage(System.out);
    System.out.println();
    parser.printUsage(System.out);
    System.out.println();

    System.out.println("Port:" + serviceConfig.getPort());
    System.out.println("MaxThreads:" + serviceConfig.getMaxThreads());
    System.out.println("Debug:" + serviceConfig.isDebug);
  }
}
出力結果
 [-d (--debug)] [-p (--port) N] [-t (--threads) N]
 -d (--debug)     : debug option (default: true)
 -p (--port) N    : Port (default: 18080)
 -t (--threads) N : Max Threads (default: 10)

Port:18080
MaxThreads:10
Debug:true


関連記事

【Java】コマンドライン引数のパーサー [1] ~ Apache Commons CLI 編 ~

https://blogs.yahoo.co.jp/dk521123/37206429.html

【トラブル】【Java】 Linux 上で、System.exit() に設定した値が process.waitFor() で受け取った時に値が異なる

$
0
0

■ 現象詳細

https://blogs.yahoo.co.jp/dk521123/37181766.html
のサンプルをLinux上で実行したところ、
System.exit() に設定した値が process.waitFor() で受け取った時に値が異なっていた。

なお、Windows上(Windows7/10 Java1.8.0)で確認したところ問題ないソースだった。

例:HTTPコード 407 の時

【ProxySettingChecker.java】
System.exit(407);

 ↓

【Main.java】(受け取り側)
int result = process.waitFor(); // ★ result = 145 で 設定した 407 とは異なる ★

■ 発生した環境

 * OS : Debian8
 * Java : Java1.8.0_65

■ 結論

System.exit() に設定する値は『0~255』の範囲に限る

■ 調査で使用したコード

SampleA.java

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class SampleA {
  public static void main(String[] args) {
    for (int i = -300; i < 300; i++) {
      String value = String.valueOf(i);
      System.out.println("[" + value + "]");
      execute("java", "-jar", "SampleB.jar", value);
    }
  }

  private static void execute(String... commands) {
    ProcessBuilder processBuilder = new ProcessBuilder(commands);

    try {
      Process process = processBuilder.start();
      int result = process.waitFor();
      System.out.println("Result Code : " + result);
      if (result != 0) {
        System.err.println("Error!");
      }
      try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
        String line;
        while ((line = bufferedReader.readLine()) != null) {
          System.out.println(line);
        }
      }
      try (BufferedReader errorBufferedreader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
        String errorLine;
        while ((errorLine = errorBufferedreader.readLine()) != null) {
          System.err.println(errorLine);
        }
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}

SampleB.java

SampleB.jar にする
public class SampleB {
  public static void main(String[] args) {
    int inputValue = Integer.valueOf(args[0]);
    System.out.println("inputValue : " + inputValue);
    System.exit(inputValue);
  }
}

実行結果(抜粋)

・・・
[-2]
Result Code : 254 ★NG★
inputValue : -2
[-1]
Result Code : 255 ★NG★
inputValue : -1
[0]
Result Code : 0 ☆OK☆
inputValue : 0
[1]
Result Code : 1 ☆OK☆
inputValue : 1
・・・
[255]
Result Code : 255 ☆OK☆
inputValue : 255
[256]
Result Code : 0 ★NG★
inputValue : 256
[257]
Result Code : 1 ★NG★
inputValue : 257

関連記事

【Java】プロキシ設定のチェック機能を考える ~ その2 ~

https://blogs.yahoo.co.jp/dk521123/37181766.html

【Windows】 Windowsでの開発用SMTPサーバー ~ ダミーSMTPサーバ構築 ~

$
0
0

■ Windowsでの開発用メールサーバソフト

[1] smtp4dev
[2] BlackJumboDog
Linux版は、以下の関連記事を参照
https://blogs.yahoo.co.jp/dk521123/36252946.html

[1] smtp4dev

環境設定

 * 以下のサイトから「smtp4dev-X.X.X-binaries.zip」(今回は「smtp4dev-2.0.9-binaries.zip」)
  をダウンロードし、解凍し、smtp4dev.exeを起動するだけ(簡単)
http://smtp4dev.codeplex.com/

[2] BlackJumboDog

 * 詳細は、以下の関連記事を参照
https://blogs.yahoo.co.jp/dk521123/37222808.html

関連記事

【Linux】 ダミーSMTPサーバ構築

http://blogs.yahoo.co.jp/dk521123/36252946.html

Windowsでのプロキシソフト ~ BlackJumboDog ~

https://blogs.yahoo.co.jp/dk521123/37222808.html

【Java】【JUnit】 Email送信に関する単体試験について

https://blogs.yahoo.co.jp/dk521123/36257589.html

【Java】 Java で、 Email を送るには... ~ JavaMail / テキストメール編 ~

【Windows】 Windowsでのプロキシソフト

$
0
0

■ はじめに

https://blogs.yahoo.co.jp/dk521123/36956970.html
で Linux用のプロキシソフトを扱ったが、
開発用に気軽に試すために、Windows上で動くプロキシソフトを探す。

■ Windows版プロキシソフト

[1] BlackJumboDog
[2] HttpProxyAuth
[3] Squid for Windows

 => それぞれに特徴・機能があるので、要件に合うように選べばいいかと
 => 機能が揃ってるのは「[3] Squid for Windows」かと。

[1] BlackJumboDog

 * プロキシだけでなく、Web、メール、FTP、DHCP、DNSサーバ、計6つの機能を備えたソフト
 * フリーソフト(商用利用時は要連絡らしい)
 * GUI操作
 * 画面インターフェイスを見る限り、以下の機能はなさそう
  [1] 認証機能 << HTTPサーバではできるのだが...
  [2] SSLプロキシ構築(SquidのようにSSL証明書の設定とかできなさそう)

環境設定

ダウンロード先
https://forest.watch.impress.co.jp/library/software/blackjmbdog/
補足:動作環境
 * v6.2.0(15/10/11)について、 .NET Framework 4 が必要。
設定
 * 以下を参照
http://pdfandfont.blogspot.jp/2012/08/bjd.html
http://fu-k.iobb.net/home/proxy/bjd-proxy.html
http://ganbarepc.blog32.fc2.com/blog-entry-324.html
トラブルシュート
http://reviewdays.com/archives/47965

参考文献

http://www5.plala.or.jp/m5ka1/memo/soft/bjdset.htm

[2] HttpProxyAuth

 * GUIではなく、CUIで動かす
 * 認証機能あり(っというか必須)
 * 画面インターフェイスを見る限り、以下の機能はなさそう
  [1] SSLプロキシ構築(SquidのようにSSL証明書の設定とかできなさそう)

環境設定

ダウンロード先
http://www.vector.co.jp/soft/winnt/net/se499627.html
設定
 * ダウンロードして、zipファイルを解凍するだけ
起動と停止
[1] コマンドプロンプトを起動
[2] HttpProxyAuth.exe まで移動(【例】cd C:\HttpProxyAuth)
[3] 以下を参考に起動(【例】HttpProxyAuth "user:pass@localhost:18080" 18888)

Readmeより
~~~~~~~~~
HttpProxyAuth.exeの起動引数は次のフォーマットです。[]は省略可能です。

HttpProxyAuth.exe "user:pass@ProxyName:Port" [MyPort] [DspY_N]

user     :認証プロキシのユーザID      (必須)
pass     :認証プロキシのパスワード    (必須)
ProxyName:認証プロキシサーバ名        (必須)
Port     :認証プロキシポート番号      (必須)
MyPort   :本中継ツールのポート番号    (省略値=8080)
DspY_N   :中継した通信データの表示有無(省略値=0)※表示する場合は1を指定

(例1)HttpProxyAuth "user:pass@localhost:8080"
(例2)HttpProxyAuth "user:pass@localhost:8080" 8888
(例3)HttpProxyAuth "user:pass@localhost:8080" 8888 1

終了する場合はコマンドプロンプトを閉じます。
~~~~~~~~~


関連記事

【Linux】プロキシサーバソフト [1] ~ Squid / 初期設定編 ~

https://blogs.yahoo.co.jp/dk521123/36956970.html

【ネットワーク】プロキシ (Proxy)

https://blogs.yahoo.co.jp/dk521123/37051264.html

Windowsでの開発用SMTPサーバー ~ ダミーSMTPサーバ構築 ~

https://blogs.yahoo.co.jp/dk521123/37222874.html

【Windows】 Windows環境におけるプロキシソフト ~ Squid for Windows編 ~

$
0
0

■ はじめに

 * 以下の関連記事の続きで、機能が充実しているSquid for Windowsを試す
https://blogs.yahoo.co.jp/dk521123/37222808.html

■ Squid for Windows

https://blogs.yahoo.co.jp/dk521123/36956970.html
のWindows版

■ 環境設定

 * インストーラ「squid.msi」をダウンロード・インストールするだけ

ダウンロード先

https://wiki.squid-cache.org/KnowledgeBase/Windows

■ 実行・停止

 * Windwosの右下にあるアイコントレイから簡単に選択できる
* 以下を一読しておくといい
http://squid.robata.org/squid_win.html

■ ファイル構成

 * デフォルト「C:\Squid」でインストールした場合、以下の通り。

設定ファイル

C:\Squid\etc\squid
 squid.conf

# 設定ファイル修正後は、Squidを再起動する

ログファイル

C:\Squid\var\log\squid
 access.log
 cache.log
* ログのローテーションについて
# 「管理者で実行」した「Squid Terminal」で以下をコマンド
squid -k rotate

■ Basic認証を行うには...

https://gist.github.com/yvanin/ef831720112c1f6ee8c3
https://www32.atwiki.jp/lmes2/pages/192.html
を参考にした。設定ファイルについては、以下の関連記事を参照のこと。
https://blogs.yahoo.co.jp/dk521123/36962466.html

[1] 設定ファイル「squid.conf」を修正する

# 以下の「C:\Squid\etc\squid\squid.conf」を参考に。
# 追加した部分は「#-= Add From -=-=-=-=-=-=-=-=」から「#-= Add To -=-=-=-=-=-=-=-=」まで
C:\Squid\etc\squid\squid.conf
・・・略・・・
acl CONNECT method CONNECT

#-= Add From -=-=-=-=-=-=-=-=

# 認証モジュールのPATHとパスワードファイルのPATHを指定
auth_param basic program "/lib/squid/basic_ncsa_auth.exe" "/etc/squid/htpasswd"

# 認証用のプロセス数を制限
auth_param basic children 5

# 「auth_param basic realm 【ダイアログ表示の文言】」
auth_param basic realm Plz input your id and password for Basic Authentication

# 有効保持時間
auth_param basic credentialsttl 5 hours

# パスワードの大文字小文字を区別する
auth_param basic casesensitive on

# パスワード認証を許可
# acl [ルールの定義名] proxy_auth REQUIRED (acl : ACCESS CONTROL LIST) =>  password という制限を登録
acl password proxy_auth REQUIRED
# http_access allow [ルールの定義名] => password 有効化
http_access allow password
#-= Add To -=-=-=-=-=-=-=-=

#
# Recommended minimum Access Permission configuration:
#
・・・略・・・

[2] Basic認証用のパスワードファイル「htpasswd」を新規作成

 * 以下のサイトなどで、ユーザ名、パスワードを入力し、パスワードファイルの内容となる文字列を生成する

# 例えば、ユーザ名「admin」、パスワード「password」で「admin:$apr1$i9mlTlUJ$LrQmHbHvtazoP9JI9LRD2/」が得られる
# それを「C:\Squid\etc\squid\htpasswd」に書き出す
http://www.htaccesstools.com/htpasswd-generator-windows/
C:\Squid\etc\squid\htpasswd
admin:$apr1$i9mlTlUJ$LrQmHbHvtazoP9JI9LRD2/

[3] Squid を再起動する

 * 再起動して、完了。
動作確認
 * プロキシを設定したFirefoxなどのブラウザで「yahoo.co.jp」をアクセスする

 => ダイアログ表示「・・・"Plz input your id and password for Basic Authentication"・・・」が表示されるはず。
 => 以下を入力する
  + ユーザ名 :【[2] で設定したユーザ名を入力(例:「admin」)】
  + パスワード:【[2] で設定したパスワードを入力(例:「password」)】


関連記事

Windows環境におけるプロキシソフト ~ 導入編 ~

https://blogs.yahoo.co.jp/dk521123/37222808.html

【Linux】プロキシサーバソフト [1] ~ Squid / 初期設定編 ~

https://blogs.yahoo.co.jp/dk521123/36956970.html

【Linux】プロキシサーバソフト [2] ~ Squid / Basic認証編 ~

https://blogs.yahoo.co.jp/dk521123/36962466.html

【Linux】プロキシサーバソフト [3] ~ Squid / SSLプロキシ構築編 ~

https://blogs.yahoo.co.jp/dk521123/36958786.html

【Linux】プロキシサーバソフト [4] ~ Squid / 設定ファイル編 ~

https://blogs.yahoo.co.jp/dk521123/37053190.html

【Java】Java で レスポンスヘッダーの日時を取得するには...

$
0
0

■ サンプル

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

import com.ibm.icu.util.Calendar;

public class Main {

  public static void main(String[] args) {
    Calendar calendar = getDatetimeFromResponseHeader("https://blogs.yahoo.co.jp/dk521123/37095462.html", 10_000);
    System.out.println(toString(calendar));
  }

  public static Calendar getDatetimeFromResponseHeader(String url, int timeout) {
    try {
      URL targetUrl = new URL(url);
      HttpURLConnection connection = (HttpURLConnection) targetUrl.openConnection();
      connection.setConnectTimeout(timeout);
      connection.setReadTimeout(timeout);
      connection.setRequestMethod("HEAD");
      Calendar returnValue = Calendar.getInstance();
      returnValue.setTimeInMillis(connection.getDate());
      return returnValue;
    } catch (IOException exception) {
      return null;
    }
  }

  public static String toString(Calendar calendar){
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS");
    return dateFormat.format(calendar.getTime());
  }
}

関連記事

Java で HTTP通信を行うには...

https://blogs.yahoo.co.jp/dk521123/37095462.html

Java で ping を考える

https://blogs.yahoo.co.jp/dk521123/37019179.html

【Java】プロキシ設定のチェック機能を考える ~ その2 ~

https://blogs.yahoo.co.jp/dk521123/37181766.html

【AWS】AWS Artifact に関するあれこれ

$
0
0

■ AWS Artifact

Artifact(アーティファクト) : 人工物
https://dev.classmethod.jp/cloud/aws/aws-artifact-new/
が分かりやすい

 * ISO、PCI、SOCなどの第三者による監査レポートをダウンロード可能

公式サイト

https://aws.amazon.com/jp/artifact/

参考文献

https://recipe.kc-cloud.jp/archives/9107

■ 準拠法を日本法に変更するには...

https://aws.amazon.com/jp/blogs/news/how-to-change-aws-ca-by-artifact/
より抜粋
2017年11月より同サービスにおいて、日本のお客様に向けて
「日本準拠法に関する AWS カスタマーアグリーメント変更契約」の手続きが可能

AWS カスタマーアグリーメントについて

https://aws.amazon.com/jp/agreement/
より抜粋
13.4 準拠法
本契約およびサービス利用者とアマゾンの間に生じるすべての種類の紛争は、抵触法の原則にかかわらず、
アメリカ合衆国ワシントン州法に準拠する。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

「アメリカ合衆国ワシントン州法」→「日本準拠法」への変更

動画を参考
https://www.youtube.com/watch?v=bnRuxeOG8zc

参考文献

https://qiita.com/digitalpeak/items/8368468b340acefba5f4

■ 補足:用語整理

NDA

【Google Cloud】 音声認識 / Google Cloud Speech API ~ Java / 基本編 ~

$
0
0

■ 環境構築

今回作成する環境下

 * OS              : Windows10
 * Java            : Java1.8
 * Eclipse         : Oxygen.1a Release (4.7.1a)
 * ビルド ツール   : Gradle

前提条件

 * Buildship: Eclipse Plug-ins for Gradle のインストール
行っていない場合は、以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/37204914.html

■ Javaのプロジェクト作成

[1] プロジェクト(Gradle Project)を作成する
 1-1) Eclipseの[File]-[New]-[Other]-[Gradle]-[Gradle Project]を選択し、「Next」ボタン押下。
      さらに、「Next」ボタン押下。
 1-2) 以下を入力し、「Finish」ボタン押下
  + Project Name   : 任意(今回は「GoogleCloudSpeechDemo」)
[2] ビルドスクリプト「build.gradle」の修正
 2-1) Eclipseの対象プロジェクト直下にある「build.gradle」を開き
      以下の「build.gradle」を参考に記載する
 2-2) Eclipseの対象プロジェクトを右クリックし、[Gradle]-[Refresh Gradle Project]を選択
 2-3) Eclipseの対象プロジェクト内の「src/main/java」「src/test/java」配下にある
     「Library.java」「LibraryTest.java」を削除する

google-cloud-speechについて

[[https://cloud.google.com/speech/docs/reference/libraries?hl=ja#client-libraries-install-java]]
より
Gradle を使用している場合は、依存関係に以下を追加します。

compile group: 'com.google.cloud', name: 'google-cloud-speech', version: '【バージョン】'

【バージョン】は、以下のサイトから最新版を記載する(今回は、「0.30.0-alpha」)
https://mvnrepository.com/artifact/com.google.cloud/google-cloud-speech
build.gradle
// Apply the java-library plugin to add support for Java Library
apply plugin: 'java-library'

// In this section you declare where to find the dependencies of your project
repositories {
    // Use jcenter for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

dependencies {
    // !Add!
    compile group: 'com.google.cloud', name: 'google-cloud-speech', version: '0.30.0-alpha'

    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
}

■ サポート言語について

https://cloud.google.com/speech/docs/languages
 * 日本語
  => 「ja-JP」を指定


関連記事

日本語対応の音声認識サービス

https://blogs.yahoo.co.jp/dk521123/37139755.html

音声認識 / Google Cloud Speech API ~ 入門編 ~

https://blogs.yahoo.co.jp/dk521123/37143570.html

【Java】SSLのトラストストア / キーストアのパスを変更するには...

$
0
0

■ SSLのトラストストアのパスを変更するには..

 * デフォルトの(指定しない)場合は

 【JAVA_HOME】/lib/security/cacerts

// トラストストアファイルへのパス
System.setProperty("javax.net.ssl.trustStore", "keys/clientTruststore.jks");
// トラストストアファイルへのパスワード
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

■ SSLの キーストアのパスを変更するには..

// ユーザーの秘密鍵ストアファイルへのパス
System.setProperty("javax.net.ssl.keyStore", "keys/serverKeystore.jks");
// ユーザーの秘密鍵ストアファイルへのパスワード
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");

関連記事

【Java】CRL (証明書失効リスト) と OCSP

https://blogs.yahoo.co.jp/dk521123/37239141.html

【Java】 SSLログ や SOAPログ などのコンソールログをファイル出力に変更するには...

https://blogs.yahoo.co.jp/dk521123/36689096.html

Javaアプリにおける SSL通信時のデバッグ方法

https://blogs.yahoo.co.jp/dk521123/35261371.html

Java で、SSL通信を行うには

https://blogs.yahoo.co.jp/dk521123/33122920.html

【Java】CRL (証明書失効リスト) と OCSP

$
0
0

■ 用語整理

 * 各用語は、以下の関連記事を参照のこと。
https://blogs.yahoo.co.jp/dk521123/33100623.html

■ 証明書失効リストのチェックを有効にする

構文

// クライアントで証明書失効リスト(CRL)のチェックを有効化する
System.setProperty("com.sun.net.ssl.checkRevocation", "true");

// CRLDP(CRL配布ポイント)を有効化する
System.setProperty("com.sun.security.enableCRLDP", "true");

API仕様

https://docs.oracle.com/javase/jp/7/technotes/guides/security/jsse/JSSERefGuide.html
より抜粋

デフォルトの PKIXParameter が使用されます。
有効にするには、システムプロパティー com.sun.net.ssl.checkRevocation を true に設定します。
この設定では、CertPath 実装自身が取り消し情報の場所を検出する必要があります。
SUN プロバイダの PKIX 実装では多くの場合にこの動作を実行できますが、
システムプロパティー com.sun.security.enableCRLDP を true に設定する必要があります。
https://docs.oracle.com/javase/jp/7/technotes/guides/security/certpath/CertPathProgGuide.html
より抜粋

CRL 配布ポイント拡張機能に対して、サポートが提供されます。
これは、デフォルトでは互換性を維持するため無効になっています。
システムプロパティー com.sun.security.enableCRLDP の値を true に設定すると、これが有効になります。


関連記事

SSL / TLS ~用語・拡張子編~

https://blogs.yahoo.co.jp/dk521123/33100623.html

【Java】SSLのトラストストア / キーストアのパスを変更するには...

https://blogs.yahoo.co.jp/dk521123/37239270.html

【Java】 SSLログ や SOAPログ などのコンソールログをファイル出力に変更するには...

https://blogs.yahoo.co.jp/dk521123/36689096.html

Javaアプリにおける SSL通信時のデバッグ方法

https://blogs.yahoo.co.jp/dk521123/35261371.html

Java で、SSL通信を行うには

https://blogs.yahoo.co.jp/dk521123/33122920.html

【HTML5】WebRTC ~ 入門編 ~

$
0
0

■ 用語整理

P2P (Peer to Peer)

 * PC同士が直接通信すること

NAT (Network Address Translation)

 * プライベートIPアドレスをグローバルIPアドレスに変換するプロトコル
詳細は以下の関連記事を参照のこと。
https://blogs.yahoo.co.jp/dk521123/36384737.html

■ WebRTC

Web Real-Time Communication
 * Webブラウザ上で、音声/映像などのデジタルデータをリアルタイムにやり取りするための規格
 * W3CとIETFという二つの団体で標準化
 * P2Pでブラウザ間通信

■ 関連するサーバ

シグナリングサーバ

 * P2Pでブラウザ間通信を行うために、互いのIPアドレスや利用するUDPポート番号などを
   教え合う「シグナリング」が必要で、そのためのサーバを用意する必要がある

STUN/TURNサーバ


■ 対応ブラウザ

https://caniuse.com/#feat=rtcpeerconnection
 * Firefox << ローカルでも気軽に動作確認できる
 * Chrome

【HTML5】Web Notifications API ~ 入門編 ~

$
0
0

■ Web Notifications API

Notification : 通知
 * 簡単にデスクトップ通知が実装可能
デモとサンプル
https://davidwalsh.name/notifications-api

Web Push APIとの違い

Web Notifications API
 * 画面上に通知を表示する機能
Web Push API
 * サーバから通知を受信する機能
以下のサイトも参照
http://garapon.hatenablog.com/entry/2016/04/20/%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96Push%E3%81%A8WebPush%E3%81%A8Web_Notification%E3%81%AE3%E3%81%A4%E3%81%AE%E9%80%9A%E7%9F%A5%E6%96%B9%E6%B3%95%E3%82%92%E6%95%B4%E7%90%86%E3%81%97%E3%81%A6

■ サンプル

例:HelloWorld的なサンプル
<!doctype html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Notification Demo</title></head><body><button onclick="sayHello()">Hi</button><br /></body><script type="text/javascript">
  function sayHello() {
    if(window.Notification && Notification.permission !== "denied") {
      Notification.requestPermission(function(status) {
        var notify = new Notification('Title ... Say Hello!', {
            body: 'Body ... Say World!!',
            icon: 'https://ident-001.west.edge.storage-yahoo.jp/res/ident-5mypszyrqsxdfvywx6dmdr5oam/profile/icon_sr?1274278682'
        });
      });
    }
  }</script></html>

補足:Chrome での確認

 * Chrome ではWebサーバ経由でないと確認できない (Firefoxなら気軽に試せる)
 * 詳細は、以下の関連記事を参照のこと。
https://blogs.yahoo.co.jp/dk521123/37243216.html

■ Notificationあれこれ

指定した時間で通知を閉じる

setTimeout(function() {【Notificationインスタンス】.close();
}, 【時間】);
サンプル
Notification.requestPermission(function(status) {
  var notify = new Notification('Title ... Say Hello!', {
      tag: 'Tag ... Say World!!',
      body: 'Body ... Say World!!',
      icon: 'https://ident-001.west.edge.storage-yahoo.jp/res/ident-5mypszyrqsxdfvywx6dmdr5oam/profile/icon_sr?1274278682'
  });

  // ★3秒後消す★
  setTimeout(function() {
    notify.close();
  }, 3000);
});

Web Notifications APIがサポートされているブラウザか確認

if ("Notification" in window) {
  // サポートされている
} else {
  // サポートされていない
}
サンプル
<!doctype html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Notification Demo</title></head><body><button onclick="checkSupportOrNot()">Check</button><br /></body><script type="text/javascript">
  function checkSupportOrNot() {
    if ("Notification" in window) {
      var notify = new Notification("Support!", {});
    } else {
      alert("Not Support!!");
    }
  }</script></html>
参考文献
https://developer.mozilla.org/ja/docs/Web/API/notification

続きは、以下の関連記事
https://blogs.yahoo.co.jp/dk521123/37244878.html

関連記事

【HTML5】Web Notifications API ~ 基本編 ~

https://blogs.yahoo.co.jp/dk521123/37244878.html

【HTML5】WebRTC ~ 入門編 ~

https://blogs.yahoo.co.jp/dk521123/37243216.html

【HTML5】WebRTC ~ 基本編 / PeerServer・PeerJS ~

$
0
0

■ 用語整理

PeerJS

 * 「WebRTC」機能をラップするJavaScriptライブラリ
 * MIT License
デモサイト
http://cdn.peerjs.com/demo/chat.html
を2台のブラウザ(例えば、ChromeとFirefox)でやり取りすれば
気軽にデモの確認ができる

PeerServer(peerjs-server)

 * 以下の関連記事で、シグナリングサーバが必要と述べたが、そのシグナリングサーバ。
https://blogs.yahoo.co.jp/dk521123/37243216.html
注意
 * STUNサーバやTURNサーバの機能はない


関連記事

【HTML5】WebRTC ~ 入門編 ~

https://blogs.yahoo.co.jp/dk521123/37243216.html

【Linux】Linuxのセキュリティ ~ fail2ban ~

$
0
0

■ はじめに

https://blogs.yahoo.co.jp/dk521123/37253842.html
で、「Installing fail2ban」とあったので、調べてみた

■ fail2ban について

 * ブルートフォース攻撃 / 不正アクセスを検知し、自動的にそのIPアドレスからのアクセスを遮断する
 * Python製

■ fail2ban の設定ファイル

/etc/fail2ban/fail2ban.conf
 * 全体的な動作を設定
/etc/fail2ban/jail.conf
 * どのようなサービスとログファイルを監視するかを設定
/etc/fail2ban/jail.local
 * Fail2banを更新しても上書きされない
  => サイトごとの設定はこのファイルで指定可能

■ 環境構築

Raspbian (Raspberry PI)の場合

インストール
# インストール
sudo apt-get install fail2ban

# 「active (running)」かどうか確認
sudo systemctl status fail2ban

# バージョン確認できる
fail2ban-client -i

exit


関連記事

【Raspberry PI】ラズパイのセキュリティを考える

https://blogs.yahoo.co.jp/dk521123/37253842.html

【Raspberry PI】ラズパイのセキュリティを考える

$
0
0

■ はじめに

http://blog.trendmicro.co.jp/archives/7717
https://japan.zdnet.com/article/35102503/
等の記事で、Raspberry Piにもセキュリティ対策が必要そうなので
ラズパイのセキュリティについて考えてみる

■ 公式サイトに記載されているセキュリティ対策

https://www.raspberrypi.org/documentation/configuration/security.md
[1] デフォルトのパスワードを変更する (Change your default password)
[2] ユーザ名を変更する (Changing your username)
[3] sudoでパスワードを要求させる (Make sudo require a password)
[4] 最新セキュリティ修正を確保する (Ensure you have the latest security fixes)
[5] SSHセキュリティを強化する (Improving SSH security)
[6] ファイアウォールのインストール (Install a firewall)
[7] fail2ban のインストール (Installing fail2ban)

[7] fail2ban のインストール

 * 以下の関連記事を参照のこと。
https://blogs.yahoo.co.jp/dk521123/37253912.html


関連記事

Raspberry PI ~ 初期構築編 ~

https://blogs.yahoo.co.jp/dk521123/37155840.html

Raspberry PI ~ OS環境設定編 ~

https://blogs.yahoo.co.jp/dk521123/37157434.html

Linuxのセキュリティ ~ fail2ban ~

https://blogs.yahoo.co.jp/dk521123/37253912.html

【Linux】【セキュリティ】アンチウイルスソフト ~ Clam AntiVirus / 基本編 ~

$
0
0

■ 基本コマンド

パターンファイル更新

sudo freshclam
freshclam について
 * ウイルスデータベースをHTTP経由で最新の状態に更新
https://clamav-jp.osdn.jp/jdoc/clamav.html

スキャン

構文
sudo clamscan 【オプション】 【スキャンするディレクトリ】

# スキャン
sudo clamscan --infected --remove --recursive
http://clamav-jp.osdn.jp/jdoc/clamav.html#c4.1
出力等に関するオプション
`オプション`説明
`#
`略
1 --quiet - エラー情報のみ出力 2 --log=[FILE] -l [FILE] 結果を[FILE]へ出力 3 --infected -i ウイルスに感染したファイルのみを結果を表示する
動作に関するオプション
`オプション`説明
`#
`略
1 --infected - 感染を検出したファイルのみを結果に出力 2 --recursive -r 指定ディレクトリ以下を再帰的に検査 圧縮ファイルは解凍して検査 3 --remove - スキャンして見つけたら削除 4 --exclude=[pattern] - パターンにマッチするファイルを検査しない 5 --include=[pattern] - パターンにマッチするファイルのみを検査 6 --move=[DIRECTORY] - ウイルスに感染したファイルをDIRECTORYへ移動 7 --force - エラーを無視して強制的に検査

■ スキャン結果について

----------- SCAN SUMMARY -----------
Known viruses: 6302993
Engine version: 0.99.2
Scanned directories: 1
Scanned files: 24
Infected files: 4
Data scanned: 62.86 MB
Data read: 58.33 MB (ratio 1.08:1)
Time: 39.378 sec (0 m 39 s)

説明

`項目
`#
説明
1Known virusesClamAVが対処可能な不正プログラムの数
2Engine versionClamAVのバージョン
3Scanned directoriesスキャンしたディレクトリ数
4Scanned filesスキャンしたファイル数
5Infected files感染しているファイル数
6Data scannedスキャンした容量
7Timeスキャンにかかった時間

関連記事

アンチウイルスソフト ~ Clam AntiVirus / 導入編 ~

https://blogs.yahoo.co.jp/dk521123/37031641.html

アンチウイルスソフト ~ Clam AntiVirus / あれこれ編 ~

https://blogs.yahoo.co.jp/dk521123/37046269.html

【Linux】vmstatコマンド

$
0
0

■ vmstatコマンド

 * 「主メモリーの空き容量」「CPUの動作状況」などを表示する

■ 構文

vmstat 【オプション】 【更新回数】

主なオプション

`オプション(省略版)`説明
`#
`オプション
1 -a --active アクティブ/非アクティブなメモリ量 2 -s --stats 1項目1行でメモリの統計情報とイベントカウンタを表示 3 -S 単位 --unit 単位 単位をk,K,m,Mで指定する(kは1000、Kは1024、mは1000000、Mは1024*1024 [Byte])
ヘルプの出力結果
 -a, --active           active/inactive memory
 -f, --forks            number of forks since boot
 -m, --slabs            slabinfo
 -n, --one-header       do not redisplay header
 -s, --stats            event counter statistics
 -d, --disk             disk statistics
 -D, --disk-sum         summarize disk statistics
 -p, --partition <dev>  partition specific statistics
 -S, --unit <char>      define display unit
 -w, --wide             wide output

 -h, --help     display this help and exit
 -V, --version  output version information and exit

コマンド例

例1
vmstat
例2 : 5秒間隔で100回表示
vmstat 5 100

■ 出力結果・説明

例1 : 「vmstat」実行例
$ vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0  64364   6608  10072  85204   28  563  4055   701  252 1047  9  9 76  5  0

procs

 * アクティブなプロセスに関する統計情報
`項目
`#
説明
1r実行待ち状態にあるプロセス数
2b割り込み不可能なスリープ状態にあるプロセス数

memory

 * メモリ使用量と使用可能量に関する情報
`項目
`#
説明
1swpd仮想メモリ量
2free空きメモリ量 [KB]
3buffバッファに使用しているメモリ量 [KB]
4cacheキャッシュに使用しているメモリ量

swap

 * スワップに関する統計情報
`項目
`#
説明
1siディスクからスワップインしているメモリ量 [KB/秒]
2soディスクにスワップしているメモリ量 [KB/秒]

io

 * メモリ使用量と使用可能量に関する情報
`項目
`#
説明
1biブロック・デバイスから受け取ったブロック数 [ブロック/秒]
2boブロック・デバイスに送られたブロック数 [ブロック/秒]

system

 * システム全体の割り込みおよびコンテキストの切替レート
`項目
`#
説明
1in毎秒の割り込み回数
2cs毎秒のコンテキスト・スイッチ回数

cpu

 * CPU使用量の割合
`項目
`#
説明
1usユーザー時間の割合
2syシステム時間の割合
3idアイドル時間(何もしてない待機状態)の割合
4waIO待ち時間の割合
5st仮想環境で実行している際、ホストOSに割当ててもらえなかった時間の割合

例2 : 「vmstat -s」実行例
$ vmstat -s

       492464 K total memory
       484632 K used memory
       178464 K active memory
       177824 K inactive memory
         7832 K free memory
        15776 K buffer memory
        75440 K swap cache
       901116 K total swap
        90540 K used swap
       810576 K free swap
         2158 non-nice user cpu ticks
           20 nice user cpu ticks
         1550 system cpu ticks
       356447 idle cpu ticks
         1360 IO-wait cpu ticks
            0 IRQ cpu ticks
           42 softirq cpu ticks
            0 stolen cpu ticks
       746741 pages paged in
       135000 pages paged out
         2726 pages swapped in
        24050 pages swapped out
       170442 interrupts
       410574 CPU context switches
   1512127624 boot time
         1903 forks


関連記事

パフォーマンスに関わるコマンド ~ Linux編 ~

https://blogs.yahoo.co.jp/dk521123/34615658.html
Viewing all 860 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>