OmniAICreator/Qiita-1.07M huggingface dataset:
システム資料を英語化する場合のよく使うセンテンス

#概要
英語、苦手ですがシステム資料を英語化する事があるので、そのためのメモ

手順については、[AAA]を参照してください。
``` For instructions, see [AAA].
```
[AAA] および [BBB] の値は、独自の値で置き換えてください。
```Substitute your own values for the values [AAA] and [BBB].
```
[AAA] および [BBB]で 環境変数を設定する
```Set the [AAA] and [BBB] environment variables.
```
[AAA] ファイルと [BBB]ファイルは、同じディレクトリに配置しないでください。
```[AAA] and the [BBB] file do not have to be in the same directory.
```
ニーズに応じて、次の方法のいずれかを使用します。
```Use one of the following methods, depending on your needs.
```
[AAA]は一意である必要があります。
```[AAA] must be unique. 
```
コンソール画面で [AAA]をクリックし、続いて [BBB]をクリックします。
```In the console page, click [AAA], and then click [BBB].
```
[AAA]ページの [BBB] で、[ccc] を選択します。
```On the Select [AAA], under [BBB], select [ccc].
```
次のことに注意することが重要です。
```It's important to note.
```
[AAA]が存在している必要があり、存在しない場合はエラーが発生します。
```The [AAA] must exist, or an error will result.
```

これは、以下に必要になります。
```You will need it for the following:
```
次の例に示すように、[AAA]は[BBB]、[CCC]を指定する必要があります。
```The AAA must specify BBB, C, as shown in the following example.
```

AAAを作成するときは、2つの情報を指定する必要があります。
```You must specify two pieces of information when you create a AAA.
```

次のうちいずれかを使用する必要があります。
```you must use one of the following alternatives.
```

値は null を指定できます。
```Values can be null.
```



<br>


| 日本語 | 英語 |
|:-:|:-:|
| 桁数  | figure length  |
| 外部サイト  | external site  |



今後もっと追加しながらまとめていこうと思います。
mac 画面をスクリーンショットする方法

|動作|ショートカット|
|:--|:--|
|画面全体のスクリーンショット|command(⌘) + shift + 3|
|画面の一部のスクリーンショット|command(⌘) + shift + 4|
|ウィンドウのスクリーンショットを撮る|command(⌘) + shift + 4<br/>→スペースキー<br/>→撮りたいウィンドウ上でクリック|

### ちなみに
- 上記のショートカットキーと一緒に control を押せば、キャプチャした内容がクリップボードに保存されます。
- メニューバーもウィンドウとして認識されるため、スクショできます。
<img width="1440" alt="スクリーンショット 2016-11-03 16.22.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/142359/aaa73a23-f463-8379-9c80-1c70c394d613.png">

### その他
- デスクトップに「スクリーンショット <日付> <時間>.png」として保存されます。
- 「shift」キー、「option」キー、またはスペースバーを押しながらドラッグすると、範囲の選択方法が変わります。
- ボタンを放す前に「escape (esc)」キーを押すとキャンセルされます。
WindowsのGit Bashで日本語がうまく扱えない

マルチバイト文字のバックスペースが中途半端（1byte分）削除されたりlsで日本語が文字化けしていたり。
`git-bash multibyte`とか`git windows bash backspace`とかで色々検索したけどなかなか出てこなかった。
lsのエイリアスを貼れとかminttyの設定を~~とかいろいろ出てきて全然治らなかったり、そもそも表示できなくなったり。

色々弄ってよく分からなかったんだけど最終的にはlocaleの問題なのかって[StackOverflow](http://stackoverflow.com/questions/10651975/unicode-utf-8-with-git-bash)で気付いて、`~/.bashrc`に以下を追加した。

```
export LANG='ja_JP.UTF-8'
```

localeとか文字コードとかttyとかをちゃんと勉強しないとダメだなって思った。
Pythonでじゃんけんポイっ　初心者向け Windows ローカルサーバで動かそう


この記事は、Django Girls Japan Python初級者向け、
「Pythonでじゃんけんゲームを作ろう」の勉強会用資料です。
尚、記載者も初心者のため、何らかの不具合などござましたら申し訳ございません。
記載者環境：Windows 10 python3.5

# CGIサーバー
http.serverモジュールを使うと、Pythonで書いたプログラムをWebサーバの中で
実行する事が可能です。
Webサーバを用意したり、モロモロの設定をしなくても手軽にWebアプリケーションを作って
ためす事ができます。

今回は
[Pythonでじゃんけんポイっ](http://qiita.com/sandream/items/a0f69e69b561192517a2)
で作成したじゃんけんゲームをもとに、ブラウザ上で動かすものを作ります。

ファイルの構造は以下のようにします。

![kaisou.JPG](https://qiita-image-store.s3.amazonaws.com/0/100769/e2733619-df36-a68b-4b04-dea438176e03.jpeg)

コマンドプロンプトでjankenフォルダにいる状態で
python -m http.server --cgi
と入力し、エンターキーを押すとローカルサーバが起動します。
(Python2の場合は　python -m CGIHTTPServer　と入力してください。)

![cgi.JPG](https://qiita-image-store.s3.amazonaws.com/0/100769/dcf9f6ae-896b-706e-b783-a322b8cc3a0e.jpeg)

これで、ブラウザ上でゲームを動かす事ができるようになります。
![janken3.JPG](https://qiita-image-store.s3.amazonaws.com/0/100769/8e153388-755d-ece2-4f38-7836865bc465.jpeg)

# HTMLのソース
jankenフォルダ直下におく、htmlのソースです。

```html
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> </head>
<body>
  <center><br><br>
  <form action="/cgi-bin/janken.py" method="POST"><h1><font color="#FF7F50">じゃーんけーん</font></h1><br /><br />
    <font size="5"><input type="radio" name="janken" value=1>グー<br />
    <input type="radio" name="janken" value=2>チョキ<br />
    <input type="radio" name="janken" value=3>パー<br /><br /></font>
    <input type="submit" name="submit" />
  </form>
  </center>
</body>
</html>

```

```html
  <form action="/cgi-bin/janken.py" method="POST">
```
ここで、このページからのリクエストをcgi-binフォルダ下にあるjanken.pyにわたす事ができます。
（htmlのソースの詳細は、ここでは割愛いたします。）

# Pythonファイル
janken/cgi-bin フォルダ下にあるjanken.pyのソースです。

```python
# -*- coding: utf-8 -*-
# !/usr/bin/env python

import cgi
import random

form = cgi.FieldStorage()

dic = {"1": "グー", "2": "チョキ", "3": "パー"}

user = form.getfirst('janken')
user_choice = dic[user]

choice_list = ["1", "'2", "3"]
pc = dic[random.choice(choice_list)]

draw = '<font color="#32CD32">DRAW</font>'
win = '<font color="#FF7F50">You Win!!</font>'
lose = '<font color="#0000FF">You lose!!</font>'

if user_choice == pc:
    judge = draw
else:
    if user_choice == "グー":
        if pc == "チョキ":
            judge = win
        else:
            judge = lose

    elif user_choice == "チョキ":
        if pc == "パー":
            judge = win
        else:
            judge = lose

    else:
        if pc == u"グー":
            judge = win
        else:
            judge = lose


html_body = """
<html><body><center><br><br><br>
あなたが選んだのは %s<br><br>
コンピュータが選んだのは%s<br><br>
<font size="5">　結果は　%s </font><br><br>
<a Href ="http://127.0.0.1:8000/janken.html">戻る</a>
</center></body></html>""" % (user_choice, pc, judge)

print("Content-type: text/html\n")
print(html_body)

```
【GAS】Slackの特定のチャンネル内の投稿を定期的に削除する

　「temp」という名前のチャンネルを作り、一時的なやりとり、毎日の天気予報通知、outgoingを使った一時的な調べごと（たとえばスプレッドシートで作ったシフト表から明日誰それが出勤するとかしないとか）をここで行うことにします。

　こうした情報は溜まっていくと邪魔なだけなのでいちど見たらさっさと消したいところですが、Slackで削除という作業はけっこうかったるいですよね。

　そこで、GASを使って定期的かつ自動的に削除しようというわけです。

　若干戸惑ったのは削除するのにタイムスタンプが必要ということ。しょうがないのでひとつずつタイムスタンプを取得してせっせと削除するような流れになっています。

```js:コード.gs
function clearSlack() {

  // チャンネルリストを取得
  var token = "取得したトークン";
  var url = "https://slack.com/api/channels.list?token="+token+"";
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText();
  var data = JSON.parse(json);

  // 対象となるチャンネル名から対応するチャンネルIDを探し出す
  var channel_name = "temp";
  for (var i=0; i<data.channels.length; i++) {
    if (data.channels[i].name == channel_name) {
      var channel = data.channels[i].id;
      break;
    }
  }
  
  // チャンネル内からタイムスタンプの一覧を取得
  var url = "https://slack.com/api/channels.history?token="+token+"&channel="+channel+"";
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText();
  var data = JSON.parse(json);
  var ary = [];
  for (var i=0; i<data.messages.length; i++) {
    ary.push(data.messages[i]["ts"]);
  }
  
  // 投稿を順々に削除
  for (var i=0; i<ary.length; i++) {
    var url = "https://slack.com/api/chat.delete?token="+token+"&channel="+channel+"&ts="+ary[i]+"";
    UrlFetchApp.fetch(url);
  }
  
}

```

　これを「リソース」→「現在のプロジェクトトリガー」からたとえば日タイマーで午前３時から４時に実行するように設定しておけば毎日まっさらな状態を保てるようになるかと思います。
NavigationBar に barTintColor を指定しても、指定した色より薄い場合の対処法

## NavigationBar の色の変え方

ググるとよくこんな感じのを AppDelegate に書け、と出てくる。

```
        UINavigationBar.appearance().tintColor = UIColor.white
        UINavigationBar.appearance().barTintColor = UIColor.orange
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
```

ただ、これで動かしてみても、思っていた色より少し薄い...。

<img width="319" alt="Glass.png" src="https://qiita-image-store.s3.amazonaws.com/0/5678/63598882-01b6-55e6-b085-6917e43f5606.png">

## isTranslucent

以下も AppDelegate に設定すると良い。


```
        UINavigationBar.appearance().isTranslucent = false
```

<img width="317" alt="Glass.png" src="https://qiita-image-store.s3.amazonaws.com/0/5678/70a74d2d-8ba2-5b4e-972c-229d2165a02c.png">

思っていた orange になりました :tada:

## 注意

`isTranslucent` を設定すると `UISearchController` にフォーカスした際に検索バーが下にズレる現象が起きるので、その時は Searchbar を使っている ViewController で

```
extendedLayoutIncludesOpaqueBars = true
```

を実行しましょう。
FQDNとかサブドメインとか


| 名称        | 例        | 備考        |
|------------|------------|------------|
|URI       |http://www.example.co.jp/|Uniform Resource Identifierの略。一般的には**URL**と呼称されることが多い。|
|FQDN      |www.example.co.jp|Fully Qualified Domain Nameの略|
|ドメイン    |example.co.jp||
|ホスト名   |www|一般的にはこれが**サブドメイン**と呼称されることが多い|
|サブドメイン|||
|TLD      |jp|Top Level Domainの略|
|SLD      |co|Second Level Domainの略|
|サードレベルドメイン|example||
|ccTLD    |jp|country code Top Level Domainの略。|
|gTLD     |com|generic Top Level Domainの略。一般的にccTLD以外のTLDを指すことが多い。|
Visual Studio Code(VSCode)のＤ言語拡張機能(code-d)を使ってみた(Windows)

# Visual Studio Code(VSCode)のＤ言語拡張機能(code-d)を使ってみた(Windows)

Visual Studio Code(VSCode) の初心者がＤ言語拡張機能(code-d)を試してみました。

この記事を更新しました。(2017/01/23 現在)
[Ｄ言語拡張機能(code-d)のアップデート](http://qiita.com/sfujita/items/3d35bd41eead60975639) 

## Topics

- Ｄ言語拡張機能(code-d ver 1.16.0) の状態のレポートです(2017/01/23 現在)
- インテリセンス/オートコンプリートは、ほぼ完成の域に達しています素晴らしいです
- Emacs の FlyCheck のようにコンパイルせずにエラーや警告を示します
- マウスカーソルで関数や変数を指定するとエラーメッセージや関数定義のコメント行を見ることができる
- code-d: Create new Projectなど問題なく使える
- import 文の追加の支援機能がおもしろい(code-d version 0.16.0)
- コンパイルエラーがなくなると自動的にビルドします(code-d version 0.16.0)
- 動作環境は Window10 で確認/他の環境でも問題はなさそうです(作者はWindows 環境を持っていないかも？)
- さらに詳しい話は code-d home  https://github.com/Pure-D/code-d/wiki

## 実際の動作はこんな感じです
![vscode_dlang_intellisense.png](https://raw.githubusercontent.com/SeijiFujita/quiita_works/master/using_vscode_01/vscode_dlang_intellisense.png)

## Ｄ言語拡張機能(code-d)インストール


### インストールに必要なもの

- VSCode 本体
- Ｄ言語拡張機能(code-d)
- workspace-d 以下の dcd,dscanner,dfmt,dub をコントロール　
- dcd - オートコンプリート・コードナビゲート
- dscanner シンタックスチェック
- dfmt ソースコードフォマッタ
- 以上をビルドするツールとして git, dub, dmd, ldc2 が必要です


### インストールを行う順番 

1. 各種ツールをビルドしPATHを通す
1. VScode がインストールされていない場合はインストール
1. VSCode の拡張機能で dlang を検索し "D Programing Language(code-d)" をインストールまたはアップデートを行う
1. VSCode メニューの ファイル -> 基本設定 -> ユーザ設定 ->  D configration で設定を行う
1. 拡張機能を初めてインストールする場合は、D言語の標準ライブラリ(phobos,)


### 各種ツールをビルドしPATHを通す

- [Ｄ言語拡張機能(code-d)のアップデート](http://qiita.com/sfujita/items/3d35bd41eead60975639) 

### VSCode のインストール 

VSCode 本体のダウンロード/インストール、基本的な使い方を読んで理解を深めましょう。

1. VSCode Download https://code.visualstudio.com/Download 
1. VSCode 基本的な使い方 http://www.atmarkit.co.jp/ait/articles/1507/10/news028.html


### Ｄ言語拡張機能のインストール 

VSCodeを起動し拡張機能で "dlang" で検索、 Ｄ言語拡張機能は２つありますので、D Programming Language(code-d) をインストール  

Ｄ言語拡張機能は D Programming Language(code-d) を選択


![vscode_dlang_ext.png](https://raw.githubusercontent.com/SeijiFujita/quiita_works/master/using_vscode_01/vscode_dlang_ext.png)


### Ｄ言語拡張機能の動作確認と設定

拡張機能の d.stdlibPath が正しく設定されていない場合は要求されるので、dmdの標準ライブラリのPATHを以下のように設定

```json:settings.json
// settings.json
// 既定の設定を上書きするには、このファイル内に設定を挿入します
{
    "d.stdlibPath": [
        "C:\\D\\dmd.2071.2\\src\\druntime\\import",
        "C:\\D\\dmd.2071.2\\src\\phobos"
    ]
}
```
  
![vscode_dlang_setting.png](https://raw.githubusercontent.com/SeijiFujita/quiita_works/master/using_vscode_01/vscode_dlang_setting.png)



以上、バリバリコードを書きましょう！

## 関連リンク

- Ｄ言語のエディタ対応状況 http://wiki.dlang.org/Editors

----

- location https://github.com/SeijiFujita/quiita_works/tree/master/using_vscode_01


tag: dlang,VSCode,Visual Studio Code
filename: using_vscode_01.md
last update: 2017/01/25
WatchOS3 SceneKitで2Dのラベルを表示させる

WatchKit3からSceneKitやSpriteKitが使用できるようになった。

SceneKitを使用することで3Dのアプリケーションを作成することが可能になったが、何かテキストを表示させる場合は2Dで表示したいことがあります。

WatchOS3でSceneKitを使用して上記のことをしたい場合のソースコードを公開します。

ポイントとしてはSceneKitのWKInterfaceSCNSceneにSpriteKitのシーンをオーバーレイ表示させるだけです。


```objc:InterfaceController.h
#import <WatchKit/WatchKit.h>
#import <Foundation/Foundation.h>

@interface InterfaceController : WKInterfaceController
{
    
}
@end
```

```objc:InterfaceController.m
#import "InterfaceController.h"
#import <SpriteKit/SpriteKit.h>

@interface InterfaceController()
{
}
@property (strong, nonatomic) IBOutlet WKInterfaceSCNScene *scnInterface;
@end


@implementation InterfaceController

- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];
    SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/caracter.dae"];
        
    // Create and add a camera to the scene
    SCNNode *cameraNode = [SCNNode node];
    cameraNode.camera = [SCNCamera camera];
    [scene.rootNode addChildNode:cameraNode];
    
    // Place the camera
    cameraNode.position = SCNVector3Make(0, 0, 25);
    
    // Create and add a light to the scene
    SCNNode *lightNode = [SCNNode node];
    lightNode.light = [SCNLight light];
    lightNode.light.type = SCNLightTypeOmni;
    lightNode.position = SCNVector3Make(0, 10, 10);
    [scene.rootNode addChildNode:lightNode];
    
    // Create and add an ambient light to the scene
    SCNNode *ambientLightNode = [SCNNode node];
    ambientLightNode.light = [SCNLight light];
    ambientLightNode.light.type = SCNLightTypeAmbient;
    ambientLightNode.light.color = [UIColor darkGrayColor];
    [scene.rootNode addChildNode:ambientLightNode];
    
    // Retrieve the ship node
    ship = (SCNNode *)[scene.rootNode childNodeWithName:@"Armature" recursively:YES];
    //ship.scale = SCNVector3Make(0.1f, 0.1f, 0.1f);
    ship.rotation = SCNVector4Make(0, 0, 0, M_PI);
            
    // Set the scene to the view
    self.scnInterface.scene = scene;
    // Show statistics such as fps and timing information
    self.scnInterface.showsStatistics = YES;
        

    // ---------------------------------------------------
    // SpriteKitでシーンを作成するそこにLabelを貼る
    // WKInterfaceSCNSceneのoverlaySKSceneプロパティーに作成したSpriteKitのシーンを代入
    // 要するにSpriteKitのシーンをオーバーレイ表示させる
    // ---------------------------------------------------
    SKScene *skScene = [SKScene sceneWithSize:CGSizeMake(self.contentFrame.size.width, self.contentFrame.size.height)];
    SKLabelNode *label = [SKLabelNode labelNodeWithFontNamed:@"Courier"];
    label.text = @"Hello";
    label.fontSize = 20;
    label.position = CGPointMake(100, 100);
    [skScene addChild:label];
    
    _scnInterface.overlaySKScene = skScene;
}

- (void)willActivate {
    [super willActivate];
}

- (void)didDeactivate {
    [super didDeactivate];
}
@end
```
Rubyにて標準出力で表示するプログレスバーなどを作る

やりたいのは以下のように更新されていく標準出力を作ること

![sample.gif](https://qiita-image-store.s3.amazonaws.com/0/15402/bf8167c1-4360-de20-3389-7a96cc15be55.gif)

コツは`print "\r"`。これをするとカーソル位置が行頭に戻り、一つの行を上書きしていくことができる。

話はこれで終わりなのだけどこれだけじゃつまらないので、これを使ったお遊びを2つ書きました。

## プログレスバーっぽいものを表示する

```rb
def progress_bar
  num = rand(20)
  1.upto(num) do |i|
    print "\r#{'=' * i}>"
    sleep 0.2
    puts " End" if i == num
  end
end
```

![progress_bar.gif](https://qiita-image-store.s3.amazonaws.com/0/15402/54791004-eda6-e61d-9592-2d1e233635dd.gif)

## おみくじ

```rb
def omikuji
  kuji = %w(大吉 中吉 吉 末吉 凶 大凶)
  num = rand(30)
  0.upto(num) do |i|
    print "\r#{kuji.shuffle[i % kuji.size]}"
    sleep 0.1
  end
end
```

![omikuji.gif](https://qiita-image-store.s3.amazonaws.com/0/15402/e1c67f57-f26f-69ac-935a-9490f2d9f666.gif)
Emacsフォーカスアウトで自動保存

EmacsでもIntelliJのように、フォーカスが外れたときに
自動保存ができるelispがありました。

[super-save](https://github.com/bbatsov/super-save)
> Save Emacs buffers when they lose focus

## 特徴

* Emacsから別のアプリケーションに移ったときや、`switch-to-buffer`や`other-window`でバッファ切り替えたときに、元のバッファが自動的に保存されます。
* `auto-save-buffers`のように、アイドル時に自動保存することもできます。

## 設定

パッケージのインストールが済んでいれば、以下の1行だけでOKです。

```lisp
(super-save-mode +1)
```
### カスタマイズ

[ソース](https://github.com/bbatsov/super-save/blob/master/super-save.el)を見ると3つdefcustomがありました。

| defcustom                      | 説明                                 | デフォルト値                                                                                        |
|--------------------------------|--------------------------------------|-----------------------------------------------------------------------------------------------------|
| super-save-triggers            | super-save-commandを起動するコマンド | '("switch-to-buffer" "other-window" "windmove-up" "windmove-down" "windmove-left" "windmove-right") |
| super-save-auto-save-when-idle | アイドル時に自動保存する             | nil                                                                                                   |
| super-save-idle-duration       | アイドル時自動保存の間隔（秒）       | 5                                                                                                   |



### 設定例

`use-package`使用時の設定例を以下に示します。
10秒アイドル時に自動保存する設定になっています。

```lisp
(use-package super-save
  :config
  (setq super-save-auto-save-when-idle t
        super-save-idle-duration 10)
  (super-save-mode +1))
```

当初、アイドル時の自動保存の設定が動かなかったのですが、
setqを先に書いて、`(super-save-mode +1)`を一番最後に持ってくると
期待通り動作しました。
Elixirを使うためにanyenv経由でOSXにexenvをインストールした

[Elixir](http://elixir-lang.org/)入門するために環境構築しました。

`brew install elixir`をしたくなかったので、env経由で入れようと思って調べていると、見つかった [Mac OSXにanyenv/exenvでElixirをインストールする](http://qiita.com/nownabe/items/67a27ddd23652676ffee) という記事がめちゃくちゃ参考になりました。

が、エラーが途中で出て、 [Mac で erlenv を使う際 Erlang/OTP が OpenSSL 付きでビルドできない問題](http://qiita.com/noto/items/21098c240264319e8d63) という記事を元に解決しました。

以下、打ったコマンドです。brew経由でOpenSSLを入れていない方は`brew install openssl`をしておきましょう。



```sh
$ anyenv install erlenv
$ exec $SHELL -l
$ brew install unixodbc wxmac fop
$ wget http://www.erlang.org/download/otp_src_19.1.tar.gz
$ tar zxf otp_src_19.1.tar.gz
$ cd otp_src_19.1
$ ./configure --prefix=$HOME/.anyenv/envs/erlenv/releases/19.1 --enable-dynamic-ssl-lib --with-ssl=/usr/local/opt/openssl
$ make -j 4
$ make install
$ erlenv global 19.1
$ erlenv rehash
$ exec $SHELL -l
$ cd ..
$ rm -rf otp_src_19.1 otp_src_19.1.tar.gz
```

ここまでやって、`erl`と`crypto:start().`がうまくいけば、多分Elixirもうまく入ります。

```sh
$ erl
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.1  (abort with ^G)
1> crypto:start().
ok
2>
```

自分は最初、以下のようなエラーが出て、次の`exenv install 1.3.4`がうまくいきませんでした。

```sh
$ erl
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.1  (abort with ^G)
1> crypto:start().
** exception error: undefined function crypto:start/0
2>
```


先ほど打ったように、`./configure`にオプションをつければ問題ありません。


では、最後に`exenv`を使ってElixirを入れていきます。

```sh
$ anyenv install exenv
$ exenv install 1.3.4
$ exenv global 1.3.4
$ exec $SHELL -l
```

`elixir -v`した時にきちんとバージョンが表示されれば、これにて無事Elixirが使えるようになりました。

```sh
$ elixir -v
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Elixir 1.3.4
```

Erlangのインストールが少し長かったかと思います。お疲れ様でした。
New Relic Browserを試してみた


トライアルでNew Relic Browserを試してみたのでその結果をメモ。

### New Relic Browserとは

Webアプリのクライアントサイド側のページロード時間やAjaxの通信時間などをモニタリングしてくれるサービス。

詳しくは[公式サイト](https://newrelic.com/browser-monitoring)を参照。

### 導入方法

すごく簡単。

New Relic Browserの管理画面から新規追加して生成されたコードをHTMLのヘッダーにコピペするだけ。

それだけで各情報をモニタリングしてくれる。

### モニタリングの種類

モニタリングしたい内容やアプリの性質で、以下の3種類から選ぶ。

実質はProとPro+SPAの二択な気がする。

- Basic
  - ページロードのみのモニタリング
  - 以前はこのタイプが無料で使えたけど、今は無料版がないみたいだから意味ない気も。
- Pro
  - Proの全機能使いたい場合はこちら。
- Pro+SPA
  - Proの全機能を使いたい、かつSingle Page Applicationの場合はこちら。

### できたこと

公式にもある通り、下のような内容をモニタリングできた。
さっと確認した範囲なので、もっと他にもいっぱいある。

- ページ内の各イベント
	- 通信の開始・完了タイミング
	- UIイベントのタイミング
- Ajaxの通信時間、通信量
- JSのエラー
- アクセスしたブラウザの種類
- アクセス元の地域

Pro+SPAという設定にすることで、SPAの各ページも問題なく認識できた。

データの反映までに5分程度かかると書いてあるとおり、リアルタイミングではなくちょっと遅れてデータが反映された。

### できなかったこと

エラーが起きた行まではさすがにわからなかった。ひょっとしたら見る方法あるのかもしれないけど、ぱっと見た感じはなかった。

また、Fetch APIはモニタリングできてないようで、Ajaxのモニタリング結果を見ても出てこない。
polyfill(isomorphic-fetch)を入れてからFetch API非対応のブラウザ(Safari)でアクセスしたらログが取れたので、XMLHttpRequestしかログを取ってくれない模様。

### まとめ

HTMLのヘッダーにコード挿入するだけで各情報をモニタリングしてくれるのですごくいいと思った。

惜しむべくはFetch APIに対応してないことだけなので、早くFetch APIに対応して欲しい。
tensorflow-lstm-regression > test / train / validationの分割割合

LSTMでのsine curveの学習。
http://qiita.com/7of9/items/11500a5c26d4c8828062#x%E3%81%AE%E5%80%A4

上記において、以下の3つのデータを用意している。

- train (8097)
- test (997)
- validation (897)

10,000のデータセットに対してこの割合をどこで定義しているのか。

https://github.com/mouradmourafiq/tensorflow-lstm-regression/blob/master/lstm.py


データの準備は以下のgenerate_data()を使っている。

```py
def generate_data(fct, x, time_steps, seperate=False):
    """generates data with based on a function fct"""
    data = fct(x)
    if not isinstance(data, pd.DataFrame):
        data = pd.DataFrame(data)
    train_x, val_x, test_x = prepare_data(data['a'] if seperate else data, time_steps)
    train_y, val_y, test_y = prepare_data(data['b'] if seperate else data, time_steps, labels=True)
    return dict(train=train_x, val=val_x, test=test_x), dict(train=train_y, val=val_y, test=test_y)
```

上記ではprepare_data() を使っている。

```py
def prepare_data(data, time_steps, labels=False, val_size=0.1, test_size=0.1):
```

デフォルト引数で10%, 10%, 80%の割合となっている。

正確な割合ではない(3つの合計9991に対しては、9.97%, 8.99%, 81.04%)なのは未消化。
koa@2でsocket.io

node.jsで使われているサーバーアプリケーションにkoaと言うものがあります。
generatorベースだった1.x系から大幅な変更がなされ、async/awaitベースになったkoa@2.x系でsocket.ioを起動させてみます。

## koaおよび必要なプラグインのインストール
koaの主流のバージョンは1.x系なので2.x系をインストールするにはバージョンの指定が必要です。

```javascript
npm i koa@2
npm i koa-static
```

今回はとりあえず静的ファイルを送れればいいのでkoa-sataticを使っています。
ほかのミドルウェアを使う場合は、[koaのwiki](https://github.com/koajs/koa/wiki)でsupports v2にチェックがついているものを使ってください。

## ソースコード
今回の構成は

```text
projectroot
 |-client
 |   |-index.html
 |   |-index.js
 |-server
      |-server.js
```

という感じになっています

```javascript:server.js
const Koa = require('koa');
const serve = require('koa-static');

const app = new Koa();
app.use(serve('../client'));

const server = app.listen(3000);

const io = require('socket.io').listen(server);
io.on('connection', (socket) => {
  socket.emit('popo',{po:'poppopopo'});
});
```

```html:index.html
<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="utf-8">
    <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
    <script src="index.js"></script>
  </head>
</html>
```

```javascript:index.js
var socket = io('http://localhost:3000');
 socket.on('popo', function (data) {
   console.log(data);
 });
```

koa-staticで`app.use(serve('../client'))`とすると、
index.htmlにhttp://localhost:3000/index.html でアクセスできるようになります。
これで`npm start`でサーバーを起動してhttp://localhost:3000/index.html にアクセスしコンソールに{po:'poppopopo'}と表示されていれば成功です。
SpockのConfineMetaClassChangesアノテーションを検証する

# 概要
SpockのConfineMetaClassChangesアノテーションは、mockしたクラスやインスタンスを
mock前の状態に戻してくれるそうなので検証してみました
http://spockframework.org/spock/javadoc/1.0/spock/util/mop/ConfineMetaClassChanges.html

# サンプル
## featureにアノテーションを付ける場合
```groovy
import spock.lang.Specification
import spock.util.mop.ConfineMetaClassChanges

class HogeSpec extends Specification {
    def "groovyで処理をオーバーライドする"() {
        given:
        // getHogeメソッドの戻り値をfugaに変える
        Hoge.metaClass.getHoge = {
            "fuga"
        }

        when:
        // getHogeを実行する
        def hoge = new Hoge().getHoge()

        then:
        // getHogeの値がfugaに変わっているはず
        hoge == "fuga"
    }

    def "groovyでオーバーライドされた処理を実行する"() {
        given:
        // ここではHogeクラスを書き換えない

        when:
        // getHogeを実行する
        def hoge = new Hoge().getHoge()

        then:
        // getHogeの値はhogeのままと思いきやfugaに変わったまま
        hoge == "fuga"
    }

    @ConfineMetaClassChanges(Hoge)
    def "再度オーバーライドするけどConfineMetaClassChangesアノテーションがついてる"() {
        given:
        // getHogeメソッドの戻り値をpiyoに変える
        Hoge.metaClass.getHoge = {
            "piyo"
        }

        when:
        // getHogeを実行する
        def hoge = new Hoge().getHoge()

        then:
        // getHogeの値がpiyoに変わっているはず
        hoge == "piyo"
    }

    def "ConfineMetaClassChangesアノテーション付きでオーバーライドされた処理を実行する"() {
        given:
        // ここではHogeクラスを書き換えない

        when:
        // getHogeを実行する
        def hoge = new Hoge().getHoge()

        then:
        // さっきはメソッド間で処理が変わってなかったので
        // getHogeの値はpiyoのままと思いきや
        // piyoへの変更は破棄されてfugaに戻っている
        hoge == "fuga"
    }

    class Hoge {
        def String getHoge() {
            "hoge"
        }
    }
}
```

そのままSpockのテストとして実行するとTestSuccessになります

## クラスにアノテーションをつける場合
```groovy
class Fuga {
    def String getFuga() {
        "fuga"
    }
}
```

```groovy
import spock.lang.Specification
import spock.util.mop.ConfineMetaClassChanges

@ConfineMetaClassChanges(Fuga)
class FirstTestSpec extends Specification {

    def "groovyで処理をオーバーライドする"() {
        given:
        // getFugaメソッドの戻り値をfugaに変える
        Fuga.metaClass.getFuga = {
            "piyo"
        }

        when:
        // getFugaを実行する
        def fuga = new Fuga().getFuga()

        then:
        // getFugaの値がfugaに変わっているはず
        fuga == "piyo"
    }

    def "groovyでオーバーライドされた処理を実行する"() {
        given:
        // ここではFugaクラスを書き換えない

        when:
        // getFugaを実行する
        def fuga = new Fuga().getFuga()

        then:
        // getFugaの値はpiyoのまま
        fuga == "piyo"
    }
}
```

```groovy
import spock.lang.Specification

class SecondTestSpec extends Specification {

    def "再度オーバーライドされた処理を実行する"() {
        given:
        // ここではFugaクラスを書き換えない

        when:
        // getFugaを実行する
        def fuga = new Fuga().getFuga()

        then:
        // ここではpiyoへの変更は破棄されてfugaに戻っている
        fuga == "fuga"
    }
}
```

FirstTestSpec -> SecondTestSpecの順で通して実行するとTestSuccessになります

### 今回作成したコード
https://github.com/panage/groovy-mock-sample/tree/master/test/groovy/mock/sample/recovery
ASP.NET で Enter キーで意図しない Submit（PostBack）が発生する

## はじめに

ASP.NET では Enter キーで Web フォームを送信するようになっています。しかし、そうしたくない場合ももちろんあり、その方法もあります。ネットで検索するとすぐにその方法が見つかりますが、日本語でトップヒットする情報ではうまくいかないケースが発生したため、こちらに記します。

## 基本的な方法

ネットで検索すると、隠しボタンをデフォルトボタンにしてクリックイベントに return false; を設定するという方法がヒットします。

```html
<form id="form1"
      runat="server" 
      defaultbutton="HiddenDummyButton">    <!-- ポイント -->
    <!--略-->
    <asp:Button ID="HiddenDummyButton" 
                runat="server" 
                Text="Button" 
                onClientClick="return false;" 
                style="display:none;" />    <!-- ポイント -->
    <!--略-->
</form>
```

概ねこの方法で問題ありません。

## うまくいかないケース

この方法だけではうまくいかない場合が発生しました。画面上に表示されている別のボタンが勝手にデフォルトボタンのように振舞ってしまうのです。

ブラウザによってその振る舞いは違ったため、それはもちろん環境によります。しかし対象ユーザーの使うブラウザで発生したため、対策を取らざるを得ません。

生成された HTML を見てみると、該当するボタンの type が button ではなく submit になっています。これは普通に button になってほしいところ。

そのような場合は、画面上に配置したボタンすべてに UseSubmitBehavior=False を明示的に指定します。

```html
    <asp:Button ID="TheButton1"
                runat="server" 
                Text="Button"
                UseSubmitBehavior="False" />    <!-- ポイント -->
```

こうすることで type=button のボタンになり、デフォルトボタンのような振る舞いはしなくなりました。

UseSubmitBehavior=False をしないと type=submit になるのは基本らしいので、こちらの対策が正道かもしれません。しかしダミーボタンがあれば「このフォームは Enter キーによる送信はしない」あるいは「Enter キー入力をどうするかはオレが決める」という意思がはっきり伝わります。
UITabBarの高さ変更（備忘録）

# UITabBarの高さ変更方法

UITabBarをextensionしてsizeThatFitsをoverrideすればできる

```sample.swift
extension UITabBar {
    override public func sizeThatFits(size: CGSize) -> CGSize {
        var size = super.sizeThatFits(size)
        size.height = 100
        return size
    }
}
```

## 参考
http://qiita.com/tsugita/items/ce24aa67e4016376b9db
OpenCV:拡張GUI(Qt5)動作確認サンプル

# 1. 概要
[Mac:OpenCV(+Qt5)最新版インストール方法](http://qiita.com/maemori/items/d013b8009697e8d3caa9)で導入したOpenCV（highguiモジュールをQt5で拡張）の動作確認サンプル。
([GitHub](https://github.com/maemori/opencv3_sample/tree/master/cpp/drawing/put_text_sample))

# 2. 実行結果
![put_text_sample_01.png](https://qiita-image-store.s3.amazonaws.com/0/73580/6bca0f9f-4f0b-cafc-8458-d6e0421cf74a.png)
![put_text_sample_02.png](https://qiita-image-store.s3.amazonaws.com/0/73580/020e8dce-0ac5-b086-e774-b2853e11cd33.png)

# 3. ソースコード
``` cpp:main.cpp
/**
 * OpenCV3 描画サンプル： フォントとテキスト
*/

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>


int main( int argc, char** argv )
{
    // 表示する文字列
    cv::String text = "Hi Hello World!";

    // フォントの指定
    int fontFace = cv::FONT_HERSHEY_SCRIPT_COMPLEX;

    // 文字の大きさ
    double fontScale = 3;

    // 文字の太さ
    int thickness = 5;

    // 画像マトリックス構造体の作成
    cv::Mat img(600, 800, CV_8UC3, cv::Scalar(200, 150, 100));

    // 文字列表示のベースライン（y座標）
    int baseline = 0;

    // 表示文字列のサイズを取得
    cv::Size textSize = cv::getTextSize(text, fontFace,
                                fontScale, thickness, &baseline);

    // 中央表示位置の計算
    cv::Point textOrg((img.cols - textSize.width)/2,
                  (img.rows + textSize.height)/2);

    // 文字列をBOXで囲む
    baseline += thickness;
    int margin = 10;
    cv::rectangle(img, textOrg + cv::Point(-margin, margin),
              textOrg + cv::Point(textSize.width + margin, -textSize.height - margin),
              cv::Scalar::all(50));

    // 表示ベースラインに下線を引く
    cv::line(img, textOrg + cv::Point(0, thickness),
         textOrg + cv::Point(textSize.width, thickness),
         cv::Scalar(250, 190, 140));

    // 画像マトリックスにテキストを追加
    cv::putText(img, text, textOrg, fontFace, fontScale,
            cv::Scalar::all(250), thickness, 8);

    //　ウィンドウの生成
    cv::namedWindow("TestWindow", cv::WINDOW_AUTOSIZE);

    //　ウィンドウに画像マトリックスを表示
    cv::imshow("TestWindow", img);

    // ユーザが入力するまで待機
    cv::waitKey(0);

    // ウィンドウの破棄（関連するメモリの解放）
    cv::destroyAllWindows();

    // 終了
    return 0;
}

```

# 4. Make設定ファイル

``` cmake:CMakeLists.txt
#----- cMakeのバージョン ----
cmake_minimum_required(VERSION 3.6)

#----- プロジェクト情報 ----
# プロジェクト名
set(PROJECT_NAME put_text_sample)
# ビルドターゲットのソースを指定
set(SOURCE_FILES main.cpp)

#----- ビルド設定 -----
# プロジェクトの言語を指定
project(${PROJECT_NAME} CXX)
# コンパイルオプション
set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++")

#----- OpenCVの設定 ----
# OpenCVConfig.cmakeがあるディレクトリを指定（環境に合わせて変更）
SET(OpenCV_DIR "/usr/local/Cellar/opencv3/HEAD-6c12533_4/share/OpenCV")
# OpenCvのincludeディレクトリを指定（環境に合わせて変更）
INCLUDE_DIRECTORIES("/usr/local/Cellar/opencv3/HEAD-6c12533_4/include")
# [Package]_DIRに指定されたディレクトリを使い検索
FIND_PACKAGE( OpenCV REQUIRED )

#----- ビルド ----
# 対象のソースファイルを設定
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
# OpenCVの動的ライブラリをビルドターゲットにリンク
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
```

## 5.ビルド

``` bash
cmake .
make
```

## 6.実行

``` bash
./put_text_sample
```

上の画像のウィンドウが表示されます。
OpenFOAMにおけるファイル・ディレクトリの操作

# ファイル操作関数の定義場所

OpenFOAMでは、ファイル操作関連の関数はOSspecific.HおよびPOSIX.Cで定義されています。
[OpenFOAM C++ Documentation: OSspecific.H](http://cpp.openfoam.org/v4/a08523_source.html)
[OpenFOAM C++ Documentation: POSIX.C](http://cpp.openfoam.org/v4/a09412_source.html)

例えば
- `home()`
- `cwd()`
- `exists(const fileName&, const bool)`
- `isDir(const fileName&)`
- `isFile(const fileName&, const bool)`
などが定義されています。

# 使用例

例えば、あるGeometricFieldの初期化において、そのフィールドに対応するファイルが時間ディレクトリ内に存在する場合にファイルを読み取って初期化するするには

```cpp
if (isFile(runTime.timePath()/"sigma"))
{
    sigmaPtr_.set
    (
        new volSymmTensorField
        (
            IOobject
            (
                "sigma",
                runTime.timeName(),
                mesh,
                IOobject::MUST_READ,
                IOobject::AUTO_WRITE
            ),
            mesh
        )
    );
}
```
Groovyでメソッドを書き換えたりプロパティを追加する

# 概要
groovyを使って
クラスやインスタンスのメソッドを書き換えたり
プロパティを追加するサンプルです

# サンプル
```groovy
class Target {
    String get() {
        "not overwritten"
    }
}

class DirectOverwrite {
    static void main(String[] args) {
        def target = new Target()
        def dontTouch = new Target()

        // まずは普通に"not overwritten"を出力
        println target.get()

        // インスタンスに対して処理を上書き
        target.metaClass.get = {
            "overwrote!"
        }

        // 上書き確認 出力が"overwrote!"に変わる
        println target.get()

        // 別のインスタンスは変わらない
        println dontTouch.get()

        // クラスに対して処理を上書き
        Target.metaClass.get = {
            "overwrote!"
        }

        // クラスを書き換えたあとにインスタンスを生成すると変わる
        dontTouch = new Target()
        println dontTouch.get()

        // プロパティも足せる
        Target.metaClass.message = "add property"
        Target.metaClass.get = {
            message
        }
        def addProperty = new Target()
        println addProperty.get()

        // あとで足したプロパティも書き換えられる
        Target.metaClass.set = { String s ->
            message = s
        }
        def setProperty = new Target()
        setProperty.set("set property!")
        println setProperty.get()
    }
}
```

## 結果
うまくいくとこんな出力になります

```
not overwritten
overwrote!
not overwritten
overwrote!
add property
set property!
```

### 今回作成したコード
https://github.com/panage/groovy-mock-sample/tree/master/src/groovy/mock/sample/overwrite
concrete5.7.x 以降で使えるフォームアドオンまとめ (2019年7月更新)


[concrete5](https://concrete5-japan.org/) は WordPress に比べるとメールフォームブロックのオプションが少ないです。

おすすめの concrete5 で使えるメールフォームブロックは何が良いか、聞かれたので紹介します。

主に有料アドオンが2個があります。

# 無料アドオン (V8 では不可)

- **標準のフォームブロック**
    - concrete5 インストールで標準装備しているブロック
    - テキスト、テキストエリア、選択、ファイルなどの機能付き
    - 確認画面なし
    - メール送信通知は指定した管理者のみ可能
- **[Form Auto Reply](https://www.concrete5.org/marketplace/addons/form-auto-reply)**
    - 7/19 時点 V8.5.1 では使えず
    - 標準のフォームブロックの拡張機能
    - 送信完了メッセージを HTML で表示可能
    - 確認メールを送信可能
    - 確認画面は無し
- **[suiton_confirm_form_pack](https://github.com/YuzuruSano/suiton_confirm_form_pack)**
    - 7/19 時点 V8.5.1 では使えず
    - Javascript を使った確認画面付きフォームブロック
    - 京都の Web 制作会社翠灯舎のお偉いさんが制作したブロック

# 有料アドオン

- **[Formidable Lite](https://www.concrete5.org/marketplace/addons/formidable-lite)** ($20)
    - メールアドレス等の確認用フィールドが使える
    - 最小値、最大値の設定ができる
    - AJAX で Validation できる
    - 確認メールが送れる
    - 確認画面は無し
    - フォーム作成はブロック毎ではなく別で管理。別ページに同じフォームを設置できる
- **Formidable Full** ($60)
    - Formidable Lite のフル版
    - Lite版との主な違い
        - 追加項目：コード、パスワード、評価、範囲、スライダー、複数ファイルアップロード
        - タイマー設定: フォームを送信できる時間を限定できる
        - IP・ユーザー制限: IP や concrete5 のユーザーで投稿できる人を限定できる
        - 投稿数設定: 一定投稿数で受付を自動的に締切る
        - 振り分け通知: 投稿内容によって通知メールの送信先を変更できる
        - 添付: 通知メールに送信ファイルを添付できる
- **コンクリートファイブジャパン: Custom Form (仮)** (数万円〜)
    - 確認画面表示 (PHP で表示)
    - 確認メールを入力者に送信
    - 入力項目のない、HTML表示エリア項目、
    - 各項目にキャプションなどを追加可能
    - 項目ごとにCSSクラスの指定ができる
    - ログイン済みユーザーのユーザー属性自動入力機能


# カスタマイズ

3つめのオプションとして、「 **外部フォーム** 」ブロックを使って、カスタマイズでフォームを作成する方法があります。

フレームワークとしてのフォーム送信ブロックが有り、そこに PHP で処理を加えるというブロックです。

コンクリートファイブジャパン株式会社では、過去に

- ポータルサイトの採用申し込みフォーム
    - パラメータを使い、店舗・ユーザー・施設情報の自動入力
    - 選択された店舗の管理者へ確認メールを送信
    - ログイン済みユーザーのユーザー属性とマッチした項目の自動入力機能
- グローバルサイトの問い合わせフォーム
    - 多言語対応：住所の並び順の変更
    - 問い合わせ元の国や地域によって、確認メールの送信先を変更

などのカスタマイズを行っています。

他にも

- [concrete5.7 外部フォーム（最少）を作ってみる。](http://qiita.com/yorozuone/items/2f3bfd0f908d0bb8c3a2)
- [concrete5.7対応 外部フォームブロックの作り方まとめ](https://www.cherrypieweb.com/weblog/technical/20161207104805.php)


と、外部フォームの具体的なカスタマイズを行っているチュートリアルもあります。

## サンプルプログラム

2019年7月開催の、concrete5 名古屋ユーザーグループ勉強会にて、外部フォームの Boiler Plate を作成しました。

https://github.com/katzueno/c5_external_form_boilerplate

詳細の説明は、基本毎月1回開催している[concrete5 名古屋ユーザーグループ](https://concrete5nagoya.doorkeeper.jp)におこしください。詳細を説明できます。


以上
よく使うLinuxコマンド集(CentOS)

CentOS７をセットアップする際、よく使うコマンドをメモする。


## EPELリポジトリの有効化

```:epel
sudo wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
sudo rpm -ivh epel-release-7-8.noarch.rpm
```

##sudoを登録したユーザで使えるようにする。

```
sudo visudo
```

```bash:visudo
root     ALL=(ALL)   ALL
yourname ALL=(ALL)   ALL  #<-この行を追加する
```

##複数のファイルをtailする
Multitailは一つのウインドウを分割して、複数のファイルのTailを表示するとても便利なツール。とても便利なので、コレを導入しない手はない。
下の図は、multitailを起動したところ。４つのファイルを指定すると、それが４分割して表示される。２つでも３つでも表示可能。また、分割の仕方（縦分割・横分割）についても指定をすることができる。
![image](https://qiita-image-store.s3.amazonaws.com/0/77722/546363e1-09bd-d1d8-ef4e-2913620a737b.png)

###インストール
EPELを有効化してから下記コマンドを実行

```
yum install multitail
```
###利用方法

```bash:
multitail fileA fileB             #縦に並べて表示
multitail -s 2 fileA fileB        #横に並べて表示
multitail -s 2 fileA fileB fileC  #縦横３つに分割

#-m 1000をコマンドに追加すると、読み込む行数が１０００行になる。大文字にするとすべてのファイルに適用する。
multitail -s 2 -M fileA fileB        #1000行読み込む

#起動中にvを押すと分割の仕方を変更することが可能
#起動中にqを押すとmultitailが終了する。


```

#システム内のプロセスを検索
ps axf | grep httpd | grep -v grep

#システム内のファイルを検索
find / -name "filename*"

#現在使われているポートと、そのポートが使われているプロセスIDを確認する
下記は80番ポートを使っているプロセスを調査した場合。

```
#netstat -apn | grep :80
tcp6       0      0 :::80                   :::*                    LISTEN      98108/httpd         
tcp6       0      0 :::8080                 :::*                    LISTEN      12859/java          
tcp6       0      0 :::8090                 :::*                    LISTEN      13392/java          
tcp6       0      0 :::8091                 :::*                    LISTEN      15489/java          
tcp6       0      0 127.0.0.1:8000          :::*                    LISTEN      13392/java 
```

前のコマンドは:80で始まるポートが使われているプロセスが表示されてしまっていたが、検索する文字列をダブルコーテーションで囲った上で後に空白を入れることで、８０番ポートを使っているプロセスだけに絞ることができる。

```
#netstat -apn | grep ":80 "
tcp6       0      0 :::80                   :::*                    LISTEN      98108/httpd         
tcp6       0      0 :::8080                 :::*                    LISTEN      12859/java          
tcp6       0      0 :::8090                 :::*                    LISTEN      13392/java          
tcp6       0      0 :::8091                 :::*                    LISTEN      15489/java          
tcp6       0      0 127.0.0.1:8000          :::*                    LISTEN      13392/java 
```

#IPアドレスを指定する
##一時的に変更する
一時的にIPアドレスを変更する。ただし、この方法はシステムを再起動したタイミングでもとに戻ってしまうことに注意

##恒久的に変更する

...


```
# /sbin/ifconfig eth0 192.168.1.100
```

#パスを追加する
##現在のパスを確認

```
echo $PATH
```
##ログインユーザ全員のパスに追加

```

```

#ファイアウォールを無効化する
##今だけ無効化
TODO
##ずっと無効化
TODO

#SSH自動ログイン設定
クライアント側でキー(秘密鍵、公開鍵)を作成。するとユーザディレクトリ配下に鍵が作成される。下記コマンドを実行すると、パスワードを聞かれるが、パスワードなしでログインできるようにしたい場合は何も入力しないでエンターを押す。
``ssh-keygen``

下記のコマンドで作成した公開鍵をサーバ側にコピーする。ユーザ名、サーバ名は適宜変更する。
``ssh-copy-id -i ~/.ssh/id_rsa.pub nagase@192.168.1.38``

##特定のフォルダの合計容量を調べる
-sは合計値を出力する、-hは出力の単位を適切にするためのオプション 
``$ du -sh /usr/bin/``
70-410スキル トレーニング

試験 70-410:
Windows Server 2012 のインストールおよび構成

試験内容
次のリストは、この試験の対象となる領域を示しています。
• Windows Server 2012 のインストールおよび構成
• Active Directory ドメイン サービスの概要
• Active Directory ドメイン サービス オブジェクトの管理
• Active Directory ドメイン サービスの管理の自動化
• ネットワーク サービスの実装
• ローカル記憶域の実装
• ファイルと印刷サービスの実装
• グループ ポリシーの実装
• Hyper-V によるサーバー仮想化の実装

受験対象者のプロファイル
この試験は、Windows Server 2012 オペレーティング システムに関する知識と経験を持つ情報技術 (IT) プロフェッショナルで、Windows Server 2012 のコア インフラストラクチャ サービスの実装に必要なスキルと知識の評価を受けようとしている方を対象としています。
この試験は、3 つの試験から成る試験シリーズのうち最初の試験です。このシリーズでは、既存のエンタープライズ環境へのコア Windows Server 2012 インフラストラクチャの実装に必要なスキルと知識を評価します。この試験では、Windows Server 2012 のコア サービス (Active Directory、ネットワーク サービスなど) に関する初期実装と構成について評価します。この試験と他の 2 試験では、全体として、Windows Server 2012 環境におけるサービスとインフラストラクチャの実装、管理、保守、および準備に必要なスキルと知識を評価します。
画像ごとに繰り返す70-411教育

試験番号：70-411
Windows Server 2012 の管理

試験概要
この試験は、3 つの試験から成る試験シリーズのうち 2 番目の試験です。このシリーズでは、エンタープライズ環境内の Windows Server 2012 インフラストラクチャの管理に必要なスキルと知識を評価します。この試験では、ユーザーとグループの管理、ネットワーク アクセス、データ セキュリティなど、Windows Server 2012 インフラストラクチャの保守に必要な管理タスクを評価します。この試験と他の 2 試験では、全体として、Windows Server 2012 環境におけるサービスとインフラストラクチャの実装、管理、保守、および準備に必要なスキルと知識を評価します。

対応資格
この試験の対応資格は以下です。
Microsoft Certified Solutions Associate (MCSA): Windows Server 2012

試験準備対応トレーニング
オフィシャル マイクロソフト ラーニング プロダクト（OMLP）
#23411 Windows Server 2012 の管理
Coursera Machine Learning の 課題提出,  submit エラーについて

 Coursera の Machine Learning の課題提出できない, submitでエラーがでるという場合、
フォーラムでは、バージョン4.0.0以降のoctaveを使用することが推奨されています。

 しかし, バージョン4.0.3でもsubmitでエラーがでて課題提出ができないことが確認されています。
（というか私の環境ではエラーが出ました。octave4.0.3, windows8.1）

そこで
[General Discussion : Here is the "peer certificate" patch
](https://www.coursera.org/learn/machine-learning/discussions/forums/8LDwTL2SEeSEJSIACyEKsQ/threads/_et09TGlEea-YhKdNUv9pQ)によれば、

各エクササイズフォルダ(ex1とか2とか)中のlibフォルダにある submitWithConfiguration.m ファイルの66行目

```responseBody = urlread(submissionUrl, 'post', params);
```
これを
```[code, responseBody] = system(sprintf('echo jsonBody=%s | curl -k -X POST -d @- %s', body, submissionUrl));
```
に書き換えて保存してoctaveを再起動すれば上手くいくとのこと。

私の環境ではこれでsubmitのエラーが出ず、課題提出することができました。
ただ、各週の課題の度に書き換えるのが少々面倒なので、あまり良い方法ではないですね。
MessagePackでシリアライズされたファイルを読み込むときはchar*を使う

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">なんか実引数と仮引数で値ちがうんだけどなにこれ<br>バイナリファイルの扱いわからん <a href="https://t.co/MeWGT7XjTG">pic.twitter.com/MeWGT7XjTG</a></p>&mdash; izumin (@izumin5210) <a href="https://twitter.com/izumin5210/status/793750303170408448">November 2, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## TL;DR
- ファイルの内容は `std::string` ではなく `char*` に 読み込ませる．


## ダメな例
ファイルの内容を`std::string`に保持するパターン．

```cpp
std::ifstream ifs(file.path().string(), std::ios::in | std::ios::binary);
std::istream_iterator<char> itr_begin(ifs);
std::istream_iterator<char> itr_end;
const std::string str(itr_begin, itr_end);
auto buf = str.data();
auto size = str.size();

msgpack::object_handle oh;
msgpack::unpack(oh, buf, size);
```

バイナリの途中に`0x00`が紛れ込んでるとそこで切り落とされてしまい，`insufficient bytes`みたいなダイイングメッセージ残して死ぬ．

## 大丈夫な例
ファイルの内容を`char*`に保持するパターン．これだと途中で捨てられることはない．

```cpp
char *buf;
size_t size;

std::ifstream ifs(file.path().string(), std::ios::in | std::ios::binary);
auto begin = static_cast<size_t>(ifs.tellg());
ifs.seekg(0, ifs.end);
auto end = static_cast<size_t>(ifs.tellg());
ifs.clear();
ifs.seekg(0, ifs.beg);
size = end - begin;
buf = new char[size];
ifs.read(buf, size);

msgpack::object_handle oh;
msgpack::unpack(oh, buf, size);
```

## 雑記
- `std::string`なのか`char*`なのかちゃんと使い分けないと死を招く（あたりまえ）
- [msgpack-c][msgpack-c]はコンテナに入った適当なstructとかでもよしなにやってくれるので最高

[msgpack-c]: https://github.com/msgpack/msgpack-c
642-889 SPEDGE 試験

642-889 SPEDGE 試験
Implementing Cisco Service Provider Next-Generation Egde Network Services

試験概要
642-889 SPEDGE Implementing Cisco Service Provider Next-Generation Edge Network Services では、Point Of Presence（アクセス ポイント）を介してレイヤ 2 およびレイヤ 3 VPN を提供するサービス プロバイダー VPN ソリューションの知識について確認します。この試験では、Cisco IOS、IOS XE、および IOS XR オペレーシング システムについて扱います。この試験の受験対策として、Implementing Cisco Service Provider Next-Generation Edge Network Services（SPEDGE）コースが用意されています。
642-889 免費DEMO下載: http://www.testpdf.net/642-889.html
ofxAssimpModelLoaderで発生するEXC_BAD_ACCESSを解決する

土器の3DモデルをVJに使ってみようと思い立ち、試しにofxAssimpModelLoaderのexampleをやったらエラーが出たのでgoogle先生に聞いた

xcode 8.1 (8B62)
openframeworks 0.9.0

#EXC_BAD_ACCESSらしい
exampleのプログラムに問題があるわけでは無く
addonの一部でエラーを吐いているらしい

```ofxAssimpModelLoader.cpp#41

// loads scene from file
    scene = shared_ptr<const aiScene>(aiImportFileExWithProperties(file.getAbsolutePath().c_str(), flags, NULL, store.get()), aiReleaseImport);

```
ここでエラーが発生する

デフォルトのaddonなので根本的に何か間違っているのだろうと思い
google先生に聞いたところここに飛ばされ
[ofxAssimpModelLoader trouble](https://forum.openframeworks.cc/t/ofxassimpmodelloader-trouble/23531)
最終的にはhttps://github.com/openframeworks/openFrameworks/tree/0.9.3/addons/ofxAssimpModelLoader/libs/assimp/lib/osx
にたどり着いた

#解決方法
どうもaddons/ofxAssimpModelLoader/libs/assimp/lib/osxにあるassimp.aがよくなかったらしく、上記のページの手直しされたassimp.aとすでにあるassimp.aを入れ替えることで解決した

ただ0.9.0で成功したものの、0.9.7では相変わらずエラーを吐く
よくわからない
[GoogleCloudPlatform]GCEのモニタリングツールを使ってみよう（２）

# 前書き
stackdriverを利用したモニタリングツールの導入方法の説明を前回しているので、
気になる方はそちらにアクセスをお願いします。
ということで、今回はstackdriverを利用したhttpの監視について、検証をしました。

# やり方

https://app.google.stackdriver.com/uptime
にアクセスします。

adduptimecheckをクリックします。

<img width="560" alt="スクリーンショット 2016-11-02 19.46.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/e7907535-7313-f080-5fc3-9f71b0364ce9.png">

上から順に

* Title

任意の名前

* CheckType

HTTP,HTTPS,TCPから選べます。HTTPの死活を見たいのでHTTPに。

* ResourceType

Instance,ElasticLoadBarancer,AppEngine,URLから選べます。
今回はURLで。
多分今回のケースだとInstanceも行けるのかな。
AppEngineを使ってる方はAppEngineを選ぶといいかもです

* hostname

監視対象のURL

＊ Path

これちょっとわかんない・・・

*check every

何分ごとに監視するか。今回早く結果が見たいので１分毎に見るようにしてます。

## テストしてみる

<img width="559" alt="スクリーンショット 2016-11-02 19.56.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/c1a6f7cc-a3bc-5063-ec42-adcb03b05c24.png">

一番下にtestボタンがあるので一旦テストしてみましょう。
監視対象サーバに入りデーモンの起動状態をチェックします。
ちなみに現在は起動中。

```
[root@instance-1 ~]# service httpd status
httpd (pid  3807) is running...
[root@instance-1 ~]# 
```

この状態でTestを押すと、

<img width="556" alt="スクリーンショット 2016-11-02 19.57.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/56aa11ad-4b70-eccd-605f-6161c8c81c58.png">

こんな感じで200だよと帰ってきます。
今度はサーバを止めてテストをしてみましょう。

```
[root@instance-1 ~]# service httpd stop
Stopping httpd:                                            [  OK  ]
[root@instance-1 ~]# 
```

<img width="563" alt="スクリーンショット 2016-11-02 19.59.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/fa799bee-360e-2306-1ee7-6bb9803ef11a.png">

おこられました。
一通りの動作が確認できたところで、Saveを押します。

<img width="563" alt="スクリーンショット 2016-11-02 20.00.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/269ac6ec-a6f1-5020-e8bf-f80b44d80a67.png">

こんな感じで、アラートでたらメール送るよと言ってくるので、いい場合はCreateAlertingPolicyを押します。

CreateAlertingPolicyのNotificationsを押し、サーバが止まったときの通知先を選択します。

<img width="662" alt="スクリーンショット 2016-11-02 20.04.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/b1b79fd5-7075-46ab-b682-ba93c0ca31dc.png">

設定を保存します。

ここで、一度サーバを止めて一分間待ってみましょう。

```
[root@instance-1 ~]# service httpd stop
Stopping httpd:                                            [  OK  ]
[root@instance-1 ~]# 
```

ん・・・すぐにはメールこないのか・・・
１０分後・・・自分のアドレスに一通のメールが届きました・・・

```
Stackdriver has detected that one of your resources has entered an alert state. 
Summary: An uptime check on Uptime Monitoring URL blog.deathers.jp. is failing. 
Violation Began: 2016-11-02 11:16:44 UTC (4 mins 4 secs) 
Condition Name: Generic HTTP check on blog.deathers.jp  
 
View violation details: https://app.google.stackdriver.com/account/login/--------/incidents/--------
Document:

サーバがやばい
```

キターーーーーーー！！！！
ということでhttpの監視でした。

他にもいろいろと機能があるのでぜひ使ってみてください。
[GoogleCloudPlatform]GCEのモニタリングツールを使ってみよう（１）

# 前書き
GCEをやっていて、ふと、サーバーのエラー検知とかできないかなと思って調べてみたところ
以下のようなサービスが有りました。
サーバのモニタリング及びレポートなどを自動で書いてくれるツールで、
現在、βテスト期間中なので基本無料で利用ができます。

https://cloud.google.com/monitoring/

こんかいはこのツールの導入方法を書いてみたいと思います。

☆ちゅうい

* 事前にGCEでプロジェクト及びサーバを作ってください。

# 導入方法


Google Cloud Platform project
のSelect accountをクリックします

<img width="979" alt="スクリーンショット 2016-11-02 19.12.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/de14515d-01bf-3bff-01e9-531dcf42dc74.png">

次に以下のような画面が出るので監視対象のプロジェクトを選択してください。

<img width="537" alt="スクリーンショット 2016-11-02 19.15.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/252a7714-95ad-5f9c-9700-a07153dd9eec.png">

次に以下のような画面が出ますが、こちらはAWSの設定なので無視してContinueで。

<img width="1280" alt="スクリーンショット 2016-11-02 19.17.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/d8efce63-73f7-7c8c-9ca3-a702f9c41b1a.png">

continueを押すと以下画面が出てきます。

<img width="1277" alt="スクリーンショット 2016-11-02 19.19.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/3f0248b0-fbff-512b-c2bd-6dbf6c964bc9.png">

監視対象のマシンにログインを行い、以下のコマンドを入力します。

```
[root@instance-1 ~]# curl -sSO https://repo.stackdriver.com/stack-install.sh
[root@instance-1 ~]# bash stack-install.sh --write-gcm
[root@instance-1 ~]# curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh
[root@instance-1 ~]# bash install-logging-agent.sh 
```

Continueボタンを押すと、以下の画面が出てきます。
<img width="1279" alt="スクリーンショット 2016-11-02 19.20.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/b5eae191-3f91-7957-de8e-a0a3469b156e.png">

パフォーマンスレポートを毎日受け取りたい場合は一番上を
週で受け取りたい場合は真ん中を
レポートなんていらねえ！という方は一番下を選択してください。

これで一旦は導入完了しました。
次回は、このツールを利用したhttp監視の仕方について書きたいと思います。
Chrome 55ベータでtextareaの改行がmaxlength制御上の1文字でカウントされるようになった

# 概要

いままで Chrome では、`<textarea>` の `maxlength` の制御上、改行は2文字としてカウントしていましたが、Chrome 55 ベータで1文字としてカウントされるように変更されました。
相互互換性の改善のためのようです。

[Chrome 55 ベータ版: 入力ハンドリングの改善と async / await 関数](https://googledevjp.blogspot.jp/2016/11/chrome-55-beta-input-handling.html)
> `<textarea maxlength="">` と `<textarea minlength="">` は、改行文字を 2 文字ではなく 1 文字として数えるようアップデートされます

# お試し
[こちら](http://www.w3schools.com/TAGs/tryit.asp?filename=tryhtml5_textarea_maxlength)のページを拝借し、`maxlength` を `5`　にして試します。すべてWindows 10上です。

## Chrome 55 ベータ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/124069/70a399c4-5be2-3c24-ba31-68bf96fe6990.png)
`12(改行)34` まで入力できました。改行が1文字としてカウントされているのが分かります。


以降、参考までに以前のバージョンや他のブラウザでも試してみます。

## Chrome 54
![image.png](https://qiita-image-store.s3.amazonaws.com/0/124069/90fa26d6-a6df-85ea-0cff-53f2bc719b95.png)

`12(改行)3` までしか入力できません。改行が2文字としてカウントされているのが分かります。

## Edge 38.14393.0.0
![image.png](https://qiita-image-store.s3.amazonaws.com/0/124069/82dfc866-1ef6-271f-51b1-c87f153dd7d3.png)
改行は1文字としてカウント。

## IE 11.321.14393.0
![image.png](https://qiita-image-store.s3.amazonaws.com/0/124069/c0f542e4-c53f-3195-db18-8c0f5457f2be.png)
改行は1文字としてカウント。

## Firefox 49.0.2
![image.png](https://qiita-image-store.s3.amazonaws.com/0/124069/4273c95c-7386-b07e-a78d-6db0aa657046.png)
改行は1文字としてカウント。
bokehをオフラインで

# bokeh.resourcesの仕組み  

Bokehでグラフを表示するにはBokehJSとCSSが必要になるが、これはデフォルトではCDN(cdn.pydata.org)から供給される。
サーバに接続しにいくので、当然ネットに繋がっている必要がある。

出先等でネット環境がない場合、これでは不便なのでCDNからINLINEに切り替えることでローカルでもBokehを使えるようになる。

# bokeh.io.output_fileを使う場合(htmlファイルに出力する場合)

キーワード引数`mode`に`'inline'`を渡す。

```py
from bokeh.io import output_file

output_file('a.html', mode='inline')
```

# bokeh.io.output_notebookを使う場合(Jupyter notebook上で表示する場合)

キーワード引数`resources`に`bokeh.resources.INLINE`オブジェクトを渡す。

```py
from bokeh.io import output_notebook
from bokeh.resources import INLINE

output_notebook(resources=INLINE)
```

これでネット環境がなくてもBokehが使える。やったねたえちゃん！