OmniAICreator/Qiita-1.07M huggingface dataset:
Macでwindows用のexeファイルを動かす

#Mac OS上でexeファイル動かす

##環境
Mac Os High Sierra 10.12.2 beta
homebrew 1.3.8

##どうやるの？
wineインストールして動かすだけ
https://github.com/wine-mirror/wine

Macならhomebrewでインストールできるので凄く簡単！！
command

```
brew install wine
```

インストールしたら

```
wine ~/path-to-your-exefile/~.exe
```

で実行できます

32bit用のファイルも動く！！
【Unity】指定したGameObjectとPrefabとの関連付けを完全に絶つ

# 概要

この記事は [モバイルファクトリー Advent Calendar 2017](https://qiita.com/advent-calendar/2017/mobilefactory) 4日目の記事です。

3日目の記事は [@carimatics](https://qiita.com/carimatics)さんの [「Perlで静的型付プログラミング」](https://qiita.com/carimatics/items/edc2918a4a89645107f8) でした。

本記事ではUnityでGameObjectとPrefabとの関連付けを完全に絶つ方法を紹介します。

# 環境

Unity 2017.2.0f3

# Break Prefab Instance

Unityを知っている方ならすぐに「Break Prefab Instance」を思い浮かべるかと思いますが、「Break Prefab Instance」を実行してもInspectorに表示されている「Prefab」の表示が消えずに残ってしまっています。（再度「Break Prefab Instance」が実行できない所を見ると、関連付けは解除されているようですが、なぜInspectorに情報が残るのかが謎です）

![1.gif](https://qiita-image-store.s3.amazonaws.com/0/43938/2770ad2a-5ee3-de0d-558a-60e90a424a07.gif)

Inspectorの情報を消すにはPrefab側を消すしかなさそうだったので、何とかPrefabは消さずにInspectorもすっきりさせる方法はないかと探していました。

# 方法

Prefabを消すことなく関連付けのみを消すには以下のような操作が必要なようです。

![2.gif](https://qiita-image-store.s3.amazonaws.com/0/43938/bb37d2ae-2a9b-9291-43ba-771ae163786b.gif)

1. 新しく別のPrefabを作成
2. 「Break Prefab Instance」実行
3. 新しく作った方のPrefabを削除

# 面倒なのでScript化

```csharp
using UnityEditor;

public class DisconnectPrefabInstance
{
    [MenuItem("GameObject/Disconnect Prefab Instance", true)]
    static bool IsEnabled()
    {
        return Selection.gameObjects.Length > 0;
    }

    [MenuItem("GameObject/Disconnect Prefab Instance", false, 100)]
    static void Disconnect()
    {
        var outputPath = "Assets/tmp.prefab";

        foreach (var gameObject in Selection.gameObjects)
        {
            PrefabUtility.CreatePrefab(outputPath, gameObject, ReplacePrefabOptions.ConnectToPrefab);
            PrefabUtility.DisconnectPrefabInstance(gameObject);
            AssetDatabase.DeleteAsset(outputPath);
        }
    }
}
```

上記Scriptを導入することで、簡単にPrefabとGameObjectの関連付けを解除することができるようになりました。

![3.gif](https://qiita-image-store.s3.amazonaws.com/0/43938/a8a231fe-d7c5-1f81-3b88-155de86b5cae.gif)

# まとめ

短いですが、今回は地味に良く遭遇する問題に対しての解消法を紹介しました。
少しでもお役に立てたなら幸いです。

次の担当は [@yashims85](https://qiita.com/yashims85) さんです。よろしくお願いします。
【Windows】nodistでnodeをインストール

### **Node**
Window10 や Windows 11 にて、nodistをインストールし、nodeを導入手順を紹介。

# 0. 今回の環境 (前提)
- Windows10
- コマンド実行はpowershellにて


# 1. nodistをインストーラーからinstall

- https://github.com/marcelklehr/nodist/releases よりインストーラー(.exe)をダウンロードし、インストール
<br>

もしくは winget が入っている環境なら winget 経由でもインストールできます。

```
winget install nodist
```

- インストールできたらpowershellを起動し、以下のコマンドを実行

```
$ nodist -v
```

バージョンが出たら成功。

「nodist ： このシステムではスクリプトの実行が無効になっているため、〜〜〜」というエラーメッセージが出る場合は以下の**[2](https://qiita.com/nt_tn/items/f3193cde496399b41e51#2-%E5%AE%9F%E8%A1%8C%E6%A8%A9%E9%99%90%E3%81%AE%E5%A4%89%E6%9B%B4)**の処理を行う。

出ていない場合は以下の**[2](https://qiita.com/nt_tn/items/f3193cde496399b41e51#2-%E5%AE%9F%E8%A1%8C%E6%A8%A9%E9%99%90%E3%81%AE%E5%A4%89%E6%9B%B4)**を飛ばして、**[3](https://qiita.com/nt_tn/items/f3193cde496399b41e51#3-node%E3%82%92%E5%B0%8E%E5%85%A5)**へ。


# 2. 実行権限の変更
スクリプトの実行権限を変更します。
まず、powershellを一旦閉じて、「管理者として実行する」から実行します。

その後、以下のコマンドで実行権限を確認します。

```
$ Get-ExecutionPolicy
```

恐らく以下の

```
Restricted
```

となっているので、これを「Unrestricted」または「RemoteSigned」に変更します。
詳細は http://www.atmarkit.co.jp/ait/articles/0805/16/news139.html などを参照してください。今回は「Unrestricted」に変更します。

```
$ Set-ExecutionPolicy Unrestricted
```

を実行し、再度「Get-ExecutionPolicy」の実行結果をみて、「Unrestricted」になっていることを確認します。


その後は1で失敗した以下のコマンドを再度実行します。

```
$ nodist -v
```

今度こそバージョンが出たら成功です。


# 3. nodeを導入
以下のコマンドを実行し、導入できるnodeのバージョンを確認します。

```
$ nodist dist
```

今回は6.9.5のバージョンを試しに導入してみます。

```
$ nodist + 6.9.5
```

6.9.5の箇所に自分のインストールしたいバージョンを指定してください。
次に、使用するバージョンを指定します。

```
$ nodist 6.9.5
```

特定のディレクトリで使用したい場合には上記のコマンドではなく、

```
$ nodist local 6.9.5
```

の方を実行します。

上記のどちらかを実行したら、

```
$ node -v
```

でバージョンが出るか確認し、指定バージョンが表示されれば、成功です。


# 4. npmのバージョンを指定
下記のコマンドでバージョンをみれます。

```
$ npm -v
```

バージョンを変更したい場合は以下のように指定して上げる必要があります。

```
$ nodist npm <<バージョン>>
```

特定のディレクトリで使用したい場合には、

```
$ nodist npm local <<バージョン>>
```

を実行。

※ 追記 : もし、上記の実行時に "Sorry, there's a problem with nodist. Couldn't resolve npm version spec 8.11.0 : Couldn't find any matching version" のようなエラーが出た場合は下記のコマンドで解決できる可能性があります。
具体的には node と npm のバージョンをマッチさせてインストールします。

```
$ nodist npm match
```

最後に「npm -v」でバージョンを確認して終了です。
Cognos Analytics の日付のプロンプトでデフォルトで入力される当日日付をブランクにする

#概要
日付のプロンプトは、実行するとデフォルトで「当日日付」が入ります。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/de60afeb-9f86-cf2a-fb13-11c621e6a383.png)

当日日付が勝手に入るとじゃまな環境で、ブランクにして欲しいというリクエストへの対応です。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f3a207f5-c5f5-eaa1-88e3-8e2167e25f10.png)

#内容
すんごい簡単なのですが、HTMLアイテムを使ってJavaScriptを記載して実装するだけです。
日付のプロンプトのUIは「入力ボックス」、名前を「DatePrompt」にしています。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/ff2d35f1-a6e2-8d3b-58f4-fc261f79326f.png)

HTMLアイテムの中身は以下です。

```html
<script language="javascript">
var formWR = getFormWarpRequest();
var dateTxtPrompt = formWR.txtDateDatePrompt
dateTxtPrompt.value=' ';
</script>
```

以上、簡単ですが。

#参考
**How to make a date prompt empty by default in Cognos Analytics**
http://www-01.ibm.com/support/docview.wss?uid=swg22009608
NativeScriptを最新版にアップデートする

基本的には公式の[アップデート手順](https://docs.nativescript.org/releases/upgrade-instructions)を参考になります。大きなバージョンアップ時は、[開発ブログ](https://www.nativescript.org/blog)にもわかりやすく手順が乗ることが多いので、そちらも参考に。

が、一部うまくいかないこともあるので備忘。


# tns コンパイラを最新に

プロジェクトのルートで以下を実行します。

```bash
npm install -g nativescript
```

# iOS/AndroidランタイムやCoreモジュールを最新に

```bash
tns platform remove ios && tns platform add ios
tns platform remove android && tns platform add android
npm i tns-core-modules@latest
```

※公式では `tns update`で良いよーと書いてありますが、「Could not update the project!」　と出て失敗するころが多く、上記のコマンドで対応しています。

# TypeScriptの開発用プラグインをアップデート(TypeScriptプロジェクトのみ)

```bash
npm i nativescript-dev-typescript@latest --save-dev
./node_modules/.bin/ns-upgrade-tsconfig
```

# Angularの依存関係をアップデートする(Angularプロジェクトのみ)

```bash
npm i nativescript-angular@latest --save
./node_modules/.bin/update-app-ng-deps
npm i
```

# Webpackプラグインの更新(必要に応じて)

基本的には必要ないものの、メジャーバージョンアップなどでは必要になることが多い。
Webpackでビルドできない場合などは効果があることが多い。

```
npm i nativescript-dev-webpack@latest --save-dev
./node_modules/.bin/update-ns-webpack --deps --configs 
```

# 最新になったか確認

`tns info` コマンドで以下のように全て「Up to date」と出れば最新版になっています

```shell-session
$ tns info
All NativeScript components versions information
┌──────────────────┬─────────────────┬────────────────┬───────────────┐
│ Component        │ Current version │ Latest version │ Information   │
│ nativescript     │ 3.3.1           │ 3.3.1          │ Up to date    │
│ tns-core-modules │ 3.3.0           │ 3.3.0          │ Up to date    │
│ tns-android      │                 │ 3.3.1          │ Not installed │
│ tns-ios          │ 3.3.0           │ 3.3.0          │ Up to date    │
└──────────────────┴─────────────────┴────────────────┴───────────────┘
```

# ビルドや動作で失敗するようになったら

アップデート後、ビルドエラーや実行時エラーが出るようになったら、以下を試してみましょう。

プロジェクトのルートで

```shell-session
rm -rf node_modules/
npm install
tns platform remove [ios/android]
```

# その他NativeScriptアップデート時にやっておくといいこと

## tns-platform-declarations の最新化

最新のOSのSDKのメソッドや定数を使いたいなら、アップデートしておくほうが良い。（というか基本最新化して不都合は無い)

```
npm i tns-platform-declarations@latest
```

## プラグインのアップデート

NativeScriptのバージョンアップと共に、使っているプラグインが古くなっていないか、セキュリティパッチが出てないか確認し、アップデートするのが良いだろう。

```
npm outdated # これで新しいバージョンが出てないか確認
npm i [プラグインのnpmパッケージ名]@latest # インストール
```

もちろん、プラグインのアップデートで既存のコードが動かなくなる（最悪アプリが起動しなくなる）こともあるので、アップデートはひとつずつ、アプリの動作を確認しながら行うのが良い。
社内の警備システムを可視化したかった話

※先に結論、駄目でした。

## いきさつ
先日、弊社も引っ越しまして新しいビルに入りました。
そこには警備システムも入っていて便利だなと思う一方、
罠が割りとあり、既に何度も引っかかり警備員が飛んでくる始末。
それをなんとかしようとして失敗したプロジェクトです。

##要件定義
ビルの入口にビル全体の集中コントロールコンソールがあって
そこで警備の解除、開始を行える。
ただし、会社自体の玄関からは警備中かどうかわからず
警備中の状態で鍵を開けて中に入ると警備システムに引っかかり警備員が飛んでくる。
（これ、わりとシステム設計の欠陥だと思う）

そこで、玄関の鍵の横に『警備中』か否かのひと目で分かるものがほしい。あとslackにも投げたい。

社内にもサブコンソールがあり、そこのランプで分かるかもしれない（**これがそもそもの間違い**）

##初期設計
ランプの光量を[sony MESH](http://meshprj.com/jp/)で取得してgooglespreadsheetに更新。


その内容を鍵の横に設置したスマートフォンで表示すればいいのでは。

##問題点

1.MESHで拾える光量をコンソールが発していない
→cdsで光量測量キット作って、ちょうどいいしきい値が取れた。


2.ラズパイなりArduino繋ぐのめんどくない？
→cds光量キットにLEDついてるから、LEDの光量をMESHで取得して
　IFTTT連携からgooglespreadsheetに書き込めた

3.googleappscriptのイベントが動いてくれない
→「Simple Triggers」周りに罠が点在していて
・onEditは使えない→myonEditとかならいい
・spreadsheetから作成したgasを使わないと駄目
・そもそも外部サービスに通知送ってくれない
・外部サービスからの更新ではイベントが呼ばれない→数分毎の更新確認なら使える

##いざ本番
一日目：動かない
二日目：もしかしてランプ光ってないのでは？と訝しんでスマホで一時間ごとに撮影してみる
→光ってない。

#つまり警備状態の取得は無理。
というオチになりました。
と言っても色々やったおかげで、ラズパイとかArduinoとかLANシールドとか
回路からの情報取得とかテスターとかマイクロusbからの電源供給とか
googleappscriptは癖強いけどやっぱり便利だなーとか色々わかりました。
あとハンダ指にぶっ刺したり。

会社の同僚も興味持ってトイレに人感センサー仕掛けてドアの前にランプ置いたりとかし始めたり。

今は映画であるような赤色レーザーポインター警備センサーを設置しようと部品を集めています。

また今回の試行錯誤は[ここ](http://ch.nicovideo.jp/whitetail/blomaga/ar1357665)にメモしてあります。

明日は[kamoc](https://qiita.com/kamoc)さんのGoogle Home + ルンバハックです。
GlowstoneでMinecraftサーバーを作る

#Glowstoneって？
Glowstoneは本家Minecraftサーバーのソースコードに依存していない、
Spigot、CraftBukkitライクなオープンソースMinecraftサーバーです。

Glowstoneは本家Minecraftサーバーに依存していないため、Mojangの規約に引っかかりにくい(引っかからない)というのが特徴です。
また、Mavenにも対応しているので、依存関係を簡単に解決できるでしょう。

#Glowstoneのダウンロード
まずは早速ダウンロードしてしまいましょう。
https://glowstone.net/
下部にあるLatest versionのすぐ下のボタンをクリックします。(Download for x.xx.x, xには数字)
ダウンロードしたら空のディレクトリにjarファイルを置きます。

#実行
Windowsの場合、以下のスクリプトを作ります。(bat形式)

```
@echo off
java -Xms1G -Xmx1G -XX:+UseG1GC -jar glowstone.jar
pause
```

Linuxの場合は、端末で以下のスクリプトを入力します。
```java -Xms1G -Xmx1G -XX:+UseG1GC -jar glowstone.jar```

どちらも、ディレクトリはglowstone.jar(Glowstone本体)が置いてあるディレクトリにして下さい。

初回起動時は、デフォルト設定ファイルの読み込み、依存ライブラリの取得、ワールドの作成が行われます。
ログに```Ready for connections.```と表示されたら接続準備完了です。

#ログインする
Minecraftクライアントを起動し、
マルチプレイ->ダイレクト接続->ipアドレスを入力(クライアントでサーバーを開いている場合はlocalhostで可)

以下の用になればログイン成功です。(何故かダメージを受けています(；・∀・))
![2017-12-04_17.20.01.png](https://qiita-image-store.s3.amazonaws.com/0/111880/040bb7ea-1492-c328-3d1f-80561313e2e0.png)

#OP権限設定
これは本家Minecraftのサーバーと全く変わりありません。ですが一応説明しておきます。

## OP授与
実行しているサーバーコンソールを開きます。
```op <Username>```を打ってEnterを押します。(<Username>はMinecraftユーザー名)
例: ```op YZ6```

## OP剥奪
実行しているサーバーコンソールを開きます。
```deop <Username>```を打ってEnterを押します。(<Username>はMinecraftユーザー名)
例: ```deop YZ6```

#プラグインの追加
CraftBukkitやSpigotと同じようにプラグインを追加できます。
プラグインをpluginsのフォルダに置き、再起動すれば簡単に追加できちゃいます。
詳しい方法については割愛します。

#設定
本家Minecraftサーバーと違うのは設定ファイルです。
設定ファイルは全てconfigに入っています(BAN情報やOP情報など)。
本体の設定ファイルはglowstone.ymlです。
今回はサーバー本体の設定だけ説明します。

```
server:
    ip: ''
    port: 25565
    name: Glowstone Server
    log-file: logs/log-%D.txt
    online-mode: true
    max-players: 20
    whitelisted: false
    motd: A Glowstone server
    shutdown-message: Server shutting down.
    allow-client-mods: true
    snooper-enabled: false
    prevent-proxy-connections: true
...
```
### ip
サーバーのIPアドレスを設定します。グローバルIPが複数ある場合とかは使うことが多いでしょう。

### port
ポート番号です。重複する場合は変更して下さい。(1-65535)

### name
サーバー名です。お好みで設定して下さい。

### log-file
ログの格納場所です。基本は触れる必要はありません。
```%d```はログの年月日が記載されます。

### online-mode
よっぽどのことが無い限りtrueに設定して下さい。必ずです。
(逆にBungeeCord経由で繋げる場合はfalseにしないと接続できません。)

### max-players
最大接続人数を指定します。Windowsの場合は20のままが良いです(Windowsのライセンスの都合上)。

### whitelisted
ホワイトリスト制のサーバーにするかの設定です。
trueで設定します。

### motd
サーバーの説明です。クライアントにリストしている場合に表示されます。

### shutdown-message
サーバー停止時にクライアントに表示されるメッセージです。

### allow-client-mods
クライアントがMod導入を認めるかの設定です。
特に指定しない場合はtrueで。

### snooper-enabled
これはMojangに統計情報(スヌーパー)を送信するかの設定です。特に弄る必要はないと思います。

### prevent-proxy-connections
VPNやプロキシ経由での接続を許可するかの設定です。
特に弄る必要はないと思います。

これ以上説明するとこれだけで一杯一杯になってしまうので、今回は設定ファイルについてはここまでにしておきます。

# まとめ
Glowstoneは・・・。

- 本家Minecraftサーバーに依存しない！
- 簡単に構築できちゃうプラグイン型Minecraftサーバー！
- SpigotやCraftBukkitと同じように、プラグインを追加できる！
- オープンソース大好きっ子&マイクラ大好きっ子にはたまらない代物！

という感じになります。是非一度はGlowstoneで構築してみてはいかが？
ちなみに[GlowstoneのライセンスはMIT](https://github.com/GlowstoneMC/Glowstone/blob/master/LICENSE)です。

##### スーパー蛇足(かもしれない)おまけ
祝！
**結月ゆかり 6周年 & 紲星あかり 爆誕(発売)**
おめでとうございます！！！！！
【React】create-react-appのregisterServiceWorkerとは、なんぞや

## create-react-appのregisterServiceWorkerについて

いくらググっても情報がなくて、灯台下暗しで、registerServiceWorker.jsのファイルを開いてみるとコメントが書いてあった。

``` registerServiceWorker.js
// In production, we register a service worker to serve assets from local cache.

// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on the "N+1" visit to a page, since previously
// cached resources are updated in the background.

// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
// This link also includes instructions on opting out of this behavior.

```

ってことで、キャッシュしてるってことです。詳しくは、
https://goo.gl/KwvDNy
ここを見なさい、とあるので、見ると。。。
本番時は必要みたいですが、開発時はキャッシュしてほしくないのでコメントしちゃっても良さそうです。

``` 
import { unregister } from './registerServiceWorker';
```

まだ勉強中なのでよくわかってませんが、確実に消すには
こんな感じで書くとキャッシュを消してくれる？ってことかな？

ということで、「registerServiceWorker」とは？と検索しても日本語の説明がなかったので残しておきます。
ニューラルネットワークセオリー

## なぜニューラルネットワークは万能なのか

ニューラルネットワークはuniversal function つまり、万能な関数であると言われている。これにより、ニューラルネットワークはどの分野の問題にも対応できるとされている。しかし、ニューラルネットワークの歴史上最初からこの万能性が明らかだったわけではない。

1969 に Minsky と Papert が perceptron の限界を数学的に証明。ニューラルネットワークにはXOR 問題が解けないとされた。

**![img](https://lh5.googleusercontent.com/U0hxlAeQ-c2MvL8iGU5DrC4hjrMP7AlblAg_xmplvTMbqX7HfzKhxaz_IOTzzDSGRraJ0ziREMG4U1DACwrrImBxX2-XejEnJpqs1UEYgLQJD0uRxTV08xRnsG3q0346m6pix2RZ)**

例えば 2個のニューロンからなるパーセプトロンの出力は以下の式のようになる:

$$S=W \cdot X=w_{11}x_{1} + w_{21}x_{2}$$

**![img](https://lh6.googleusercontent.com/-zj6-AWeLx8NDPiHbMpSB2EnIsR838eBUgooF-U5aeXPVmltEfN9sCjQNBkePkF1wSxUdu8aCxu1JmfCI-OgfLro74PbIOZ9CnIrzzSBnZbS2vlZR6eAq3CWSr2d4T_G3wBAr594)**

**多重層ネットワーク** を使ってもこの問題は解けない

**![img](https://lh6.googleusercontent.com/X9SNgtuJaZSx-h6oT6O8VZjwrB_OYITB-p1uyYNIiD8SMysT4gtGNmi5R1_Gkk1n5mm4qMRI1qgCg7_NSNR-ZsBxmAO18LEOxocYHYfff9IPkskDUzFrfhwCa_ZHA1eWpdd0n8gv)**

上のような形にしたところ、最終的な重みは単層ニューラルネットワークと同じことをしている

$$Z = W_2(W_1X)=(W_2W_1)X$$



しかし、各ノードの値をそのまま使わず関数を使うとこの問題は解ける例えば

$$x < 0 = 0 $$ のような関数を使うと:

![img](https://lh6.googleusercontent.com/M5ePYcyADVmaksOXsBFJtZhztuiCwYaY2iEuDf82LPP13qMJX2rDMFcWzA1wRfdI1v-yWYVEBPxrrGEMpUNCyn3yx9o8j4GTvKtLBjrqe6bXP5rq_eMkBZCLlqeuAT0cuoCDrOxU)

ここで $$x < 0 = 0$$ の閾値関数を使うと:

![img](https://lh6.googleusercontent.com/dYnCOGhLB93KThX1-vX1Hx4_G0sMbTHdN00CYeMaQmfBoKKnF1jiNnlSJrFSuWUB4NqnT1D-075WErd5Q4p8lipVUNP6aSP9Ae1NEwvgYu1Tv_fhz8Ckvs_HLcJiWLrevE3DKKwA)

よってニューラルネットワークは XOR 問題も解ける。



## ニューラルネットワークの学習で最適化しているもの

ニューラルネットワークでは標的にしている値 $t_{i}$ とニューラルネットワークが出力する値 $y_i$ を少しずつ近づけることによって最適な重みを算出しよとする。最適化の評価関数には以下のものが使われる:

$$ E = \frac{1}{2} \sum_{i=1}^n(t_i - y_i)^2$$

一見これはデータと出力との二乗誤差を計算しているだけに見えるが重みの尤度も計算している。

以下にその証明を明記する。誤差が正規分布だと仮定すると、ニューラルネットワークの重みからデータの尤度を計算する方程式は以下のようになる:

$$p( \overrightarrow{t} | \overrightarrow{x}, \overrightarrow{w},  \overrightarrow{\beta}) = \Pi_{i=1}^n N(t_i|y_i, \beta^{-1})$$  (1)

$\beta$ は統計精度である

(1) の両辺の対数をとると

$$ln[p( \overrightarrow{t} | \overrightarrow{x}, \overrightarrow{w},  \overrightarrow{\beta})] = - \frac{\beta}{2} \sum_{i=1}^n(t_i-y_i)^2 + \frac{n}{2}ln(\beta) - \frac{n}{2}ln(2\pi)$$   (2)

(2) は尤度であり、$- \frac{\beta}{2} \sum_{i=1}^n(t_i-y_i)^2$ は負なのでこれを最大するには $ \sum_{i=1}^n(t_i-y_i)^2$ を最小化しないといけない。つまり二乗誤差最小化 = 尤度最大化なのでニューラルネットワークの学習は誤差の最小化であり、同時に尤度の最大化である。
Cesium Terrain Builderの使い方メモ

### 概要

Cesiumの [デフォルトの地形](https://cesiumjs.org/data-and-assets/terrain/stk-world-terrain/) は解像度が（たぶん）30m程度のため、地上に立った視点で眺めると [細かい地形の起伏が潰れて](https://qiita-image-store.s3.amazonaws.com/0/65190/fb986686-a040-d1df-0501-6b984893184f.png) しまっています。
また [地理院地図Globe](http://globe.gsi.go.jp) では国土地理院の5m DEMを使用しているので細かい地形の起伏は残っているのですが、[斜面が階段状](https://qiita-image-store.s3.amazonaws.com/0/65190/a3e44e24-2b9e-aff8-1b9d-fa263cf7ad8e.png) になってしまっています。
そこで、地形の起伏は残っている＋斜面も滑らかになる状態を目標に [Cesium  Terrain Builderで生成したTerrain](https://qiita-image-store.s3.amazonaws.com/0/65190/7139559a-4975-924d-b3d0-584a5200fb6b.png) を試してみました。
その作業メモです。


### 作業環境と使用ツール

OS: mac OS Sierra
Tool:

  - [GDAL](http://www.gdal.org)
  - [fgddem.py](http://space.geocities.jp/bischofia_vb/python/fgddem/)
  - [Docker](https://www.docker.com)


### 作業手順

1. DEMの取得
  [基盤地図情報 ダウンロードサービス](https://fgd.gsi.go.jp/download/menu.php) のページの「数値標高モデル」から、取得したい範囲のDEMをダウンロードします。

2. DEMをGeoTIFFに変換
  [fgddem.py](http://space.geocities.jp/bischofia_vb/python/fgddem/) を使用して、DEMをGeoTiffに変換します。

3. GeoTIFFのマージ (option)
  生成したい地形が複数のGeoTIFFにまたがる時は、GDALの `gdal_merge.py` コマンドでGeoTIFFをマージします。 

4. Cesium Terrain BuilderでTerrain生成
  [cesium-terrain-builder](https://hub.docker.com/r/homme/cesium-terrain-builder/) のDocker imageを取得してコンテナを起動し、ctb-tile コマンドでterrainを生成します。 
  
    ```bash
# コマンド例
docker pull homme/cesium-terrain-builder
docker run -it -v $(pwd):/root homme/cesium-terrain-builder /bin/bash
cd root
ctb-tile --output-dir ./tileset/terrain/newone dem_whole.tif
```

5. Cesium Terrain ServerでTerrain配信
  [cesium-terrain-server](https://hub.docker.com/r/geodata/cesium-terrain-server/) のDocker imageを取得してコンテナを起動し、`cesium-terrain-server` コマンドでterrainを配信します。

    ```bash
# コマンド例
docker pull geodata/cesium-terrain-server
docker run -it -v $(pwd):/root -p 8080:8080 geodata/cesium-terrain-server /bin/bash
cd /root
cesium-terrain-server -dir tilesets/terrain -port 8080 -web-dir tilesets/terrain
```

6. Cesiumを使ったViewerをJavascriptで作成
  JavascriptでCesiumを使ったViewerを作成し、ブラウザで閲覧します。
  上の4, 5の手順のようにTerrain生成・配信をした場合の、対応する CesiumTerrainProviderの記述は以下のようになります。

    ```JavaScript
CesiumTerrainProviderの記述例:
terrainProvider: new Cesium.CesiumTerrainProvider({
  url: 'http://localhost:8080/tilesets/newone'
}),
```

7. ブラウザで閲覧
  作成したViewerをブラウザで閲覧します。
  今回作成した地形のサンプルは以下のURLで閲覧可能です。
  （鎌倉・江ノ島周辺のみTerrain生成済みです）

  [Cesium terrain examples](http://ec2-13-112-56-3.ap-northeast-1.compute.amazonaws.com/terrain_viewer/)

以上です。
Node.js + multer でのファイルアップロード

Node.jsのサーバ上でファイルを受け取る処理が必要になったので、調べながらゴリゴリ書いていたらつまづいたので、ここにまとめておく。

# 環境構築

```
npm install multer --save
```
ここはいつも通りなのですんなりと終わらせた。

# サーバ側実装

```js:upload.js
...
const multer = require("multer");
...
router.post('/upload', function(req, res, next) {
    let upload = multer({ dest: '../tmp/' }).single('file');
    upload(req, res, function(err) {
        dataProcess(req)
                .then(function(){
                    ...
                })
                .catch(function(error){
                    ...
                });
    });
});
```
ここで数時間つまづいた。

# 何が問題だったの？
どこが原因だったかといえばここ↓
```let upload = multer({ dest: '../tmp/' }).single('file');```
いろいろ調べたところ、1ファイルのときは「.single()」を使うというところまでは分かったのだけども、その引数に指定されているものがどういうものなのかがわからなかった。
実はこれ、HTML側からリクエストするファイルフィールドのパラメータ名だったのだ。
ここがHTML側と一致していなかったため、サーバ側でファイルを正しく受け取れていなかったのが今回のつまづきポイントだった。

またひとつかしこくなった！
日付の範囲指定を行う際ワンポイント注意


## 日付の範囲指定
* 2日以上経過した注文を取得する

```rb:order.rb
orders = Order.where(shipped_date: 2.business_day.ago.all_day).all
```

* 2日前のその日だけしか取得していなかった。


## 営業日計算に利用する gem business_timeを使うときは以下の設定を
```:Gemfile
gem 'business_time'
```

初期状態で営業日を計算してみると1日と設定しても2日後の日付が表示される。
営業時間の設定がおかしいらしい、また今日は月曜日で金曜日まで祝日はない。

```ruby:console
1.business_days.after(DateTime.now)
# => 2日後の日付が表示される。
```

```yml:root/config/initializers/business_time.rb
BusinessTime::Config.load("#{Rails.root}/config/business_time.yml")
```

以下のファイルで会社の営業日と営業時間を設定しておく必要がある。

```yml:root/config/business_time.yml
business_time:
  beginning_of_workday: "00:00:00" 
  end_of_workday: "23:59:59" 
  work_week:
    - mon
    - tue
    - wed
    - thu
    - fri
```


```ruby:console
1.business_days.after(DateTime.now)
# => 1日後の日付が表示された。
```
Drupal8のリダイレクト

Qiita初投稿です。初心者なもので無難そうな（？）内容を書きます。

#Drupal8のリダイレクト
長く運営しているWEBサイト（A）の一部を分割して、ドメインの異なる新しいサイト（B)を立ち上げました。
古いサイト（A）の該当ページに新サイト（B)の案内を書いておいたのですが、アクセスが後を絶たないようです。外国からのアクセスもあったりするので、ちゃんとリダイレクトしようかと思った次第です。

以前にサイト内で移動したころは、まだHTMLを直接編集していたので、ヘッダーへ以下のように書き込んでいました。

`<meta http-equiv="refresh" content="5;URL=http://www.new.com">`

今回はDrupal。記事毎にヘッダーは触る方法は分からなかったので、モジュールを探しました。

見つかったモジュールが「Redirect」(β版ではありますが・・・）

あまりにもシンプルなネーミングですが、drupal8の時代になって、「Path redirect」というモジュールと、「Global Redirect」というモジュールが合体したものだそうです。

設定画面[環境設定][検索とメタデータ][URL redirects]をごらんください。

![d8redirect_md.png](https://qiita-image-store.s3.amazonaws.com/0/175967/95f8b7a1-7d45-eb4f-772b-93f59ff114a6.png)


上の青いボタン（Add redirect）を押すと、以下の画面が立ち上がり、新しいリダイレクトを設定できます。


![d8redirect_md_add.png](https://qiita-image-store.s3.amazonaws.com/0/175967/3564b7de-f11a-c5fc-ebd0-3a33fe631e03.png)

パスに古いサイト、宛先に移動先のURLを張り付ければOK。
３００番台のステータスコードが選択できるようになっています。

最後に便利そうな機能をご紹介。
[設定]タブの
[Automatically create redirects when URL aliases are changed. ]
をチェックしておくことで、コンテンツのURLエイリアスを変更すると、自動的に同サイト内でのリダイレクトが登録されます。
MacでEthereumを使ってブロックチェーン入門(Go-ethereum導入編)


[Fusic Advent Calendar 2017](https://qiita.com/advent-calendar/2017/fusic) 4日目の記事です。


今回はブロックチェーン入門記事、第一回です。


## Geth(go-ethereum)のインストール


apt-getコマンドがデフォルトでMacに入っていないので、Homebrewでインストール。

```
$ brew tap ethereum/ethereum
$ brew install ethereum
```

ちなみに開発ブランチをインストールしたい場合は以下のように打つとよいらしい。

```
$ brew install ethereum --devel
```

インストール完了したら、Gethをビルドする。
ビルドにはGo言語のコンパイラが必要。入っていない方は以下のコマンドでインストール。

```
$ brew install go
```

Geth(go-ethereum)をクローン、ビルド。

```
$ mkdir ~/ether-practice
$ git clone https://github.com/ethereum/go-ethereum
$ cd go-ethereum
$ make geth
```

パスが通っていることを確認します。

```
$ which geth
/usr/local/bin/geth
```

これでローカルでEthereumのブロックチェーンを構築する準備が整いました。


##Genesisブロックの作成、初期化

```
$ mkdir testnet
$ cd testnet/
$ pwd
~/ether-practice/testnet 
```

テストネットのディレクトリにGenesisファイルを作成します。

```
$ vi genesis.jsonb
{
        "config": {
                "chainID": 15,
                "homesteadBlock": 0,
                "eip155Block" :0,
                "eip158Block":0
        },
        "nonce": "0x0000000000000042",
        "maxhash": "0x00000000000000000000000000000000000000000000000000000000000000000000000",
        "difficulty": "0x00",
        "alloc": {},
        "coinbase": "0x0000000000000000000000000000000000000000",
        "timestamp": "0x00",
        "parenthash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "extraData": "0x00",
        "gasLimit": "0x1312d00"
}"
```


そして以下のコマンドでgethを初期化。

```
$ geth --datadir ~/ether-practice/testnet init ~/ether-practice/testnet/genesis.json
```

それではgethを起動します。

```
$ geth --networkid 4649 --nodiscover --maxpeers 0 --datadir ~/ether-practice/testnet console 2>> ~/ether-practice/testnet/geth.log
```

コンソールが起動したら成功です。

```
Welcome to the Geth JavaScript console!

instance: Geth/v1.7.3-stable/darwin-amd64/go1.9.2

>
```

とりあえずgethを起動するところまでできました。
次回はアカウントの作成やプライベートネットワークでのマイニング。
そしてSolidityを用いたスマートコントラクトの実装までやっていけたらと思います。


### 参考書籍
[はじめてのブロックチェーンアプリケーション Ethereumによるスマートコントラクト開発入門](http://www.shoeisha.co.jp/book/detail/9784798151342)
テストが辛くなった時のためのPullRequestBuilderまにゅある

[KLab Advent Calender](https://qiita.com/advent-calendar/2017/klab) 9日目の記事です
実はAdventCalendar初投稿のhohhenです。よろしくお願いします

# どんな時のマニュアル？

プロジェクト開発してると必ずと言っていいほど使うのが[Jekins PullRequestBuilderプラグイン](https://wiki.jenkins.io/display/JENKINS/GitHub+pull+request+builder+plugin)

ですが、プロジェクトの規模が大きくなるにつれてテストの時間は長くなったり、PRラッシュによるテストキューが詰まったり、テストとは関係のないファイルのPRをわざわざテストを通したりと辛くなってきます...

その際にテスト側をチューニングするのはもちろんですが、今回はPrb側を弄ってみます

## 重複したテストを停止させる
pushされた際にテストする形にしていると細かい単位でpushした際に連続してテストが走ってしまい
先のテストが無駄になってしまうので先のテストは停止させるようにしてしまいましょう

設定は簡単
`ジョブの設定 > ビルド・トリガ > Trigger Setup > 追加 > Cancel build on update`

はいこれでテスト詰まった時に手動で重複ジョブを止める必要がなくなりましたね

## コンフリクト時テストを停止させる
テストが走っているのに対象のPRがコンフリクトしてたらテストしている意味が薄くなってしまうのでさっさと止めてしまいましょう

これは残念ながらPullRequestBuilderには設定が見当たらなかったのでbashで書いていきます
（もっと良い方法あるかも

```bash
IS_MERGE_REV=`git name-rev --name-only head | grep merge | wc -l`
if [ ${IS_MERGE_REV} = 0 ] ; then
  echo "[check conflict] Is not merge commit. There is a possibility that This branch has conflicts that must be resolved"
  exit 1
fi
```

PullRequestBuilderはテスト時リモートブランチである 
`refs/pull/${PR番号}/(merge|head)` (コンフリクトしてた場合はhead)をfetchして
`refs/remotes/origin/pr/${PR番号}/(merge|head)`にチェックアウトします
なので現在のrev名がmergeじゃなかった場合はコンフリクトしているのでスキップしてしまいます。

## テストすべきファイルがPRに含まれているかチェックする
フロントエンド側のプロジェクトに携わっているとちょいちょいGitHubにリソースをコミットするケースが出てきます
もちろんPRは出すわけですが、リソースだけのPRをテストにかけるのはあまりに時間がもったいないのでこれも止めてしまいましょう

これもPullRequestBuilderいい感じの変数がなかったのでがんばってbashで書いていきます

```bash
IS_MERGE_REV=`git name-rev --name-only head | grep merge | wc -l`
if [ ${IS_MERGE_REV} = 0 ] ; then
  echo "[check conflict] Is not merge commit. There is a possibility that This branch has conflicts that must be resolved"
  exit 1
fi

TARGET_FILE_COUNT=`git show \
  | grep Merge: \
  | awk '{print $2}' \
  | xargs git diff --name-only head\
  | grep -e "^\(path/to/\(controller\|service\|model\)\)"
  | wc -l`

if [ $TARGET_FILE_COUNT = 0 ] ; then
  echo "Test target file is not modify"
else
  echo "Start test"
fi
```

前半は先程紹介したコンフリクトチェックで
後半はmergeされたrevisionであることを利用して$2(ベースブランチ)側とhead側のdiffを取った後に
テスト対象のディレクトリであればテストを行うようにしてあります

## おまけ
PullRequestBuilder調べてる途中でGitHub側でPRのhead/merge revisionが作られていて、それらがデフォルトのfetchの対象外になっていることに気づいたので以下のようなaliasを作ってみました

```
[alias]
	ch-pr-head = "!f() { git fetch origin \"+refs/pull/$1/head:refs/remotes/origin/pr/$1/head\"; git ch origin/pr/$1/head; }; f" 
	ch-pr-merge = "!f() { git fetch origin \"+refs/pull/$1/merge:refs/remotes/origin/pr/$1/merge\"; git ch origin/pr/$1/merge; }; f" 
```

`git ch-pr-merge 1234` とすると#1234PRのベースブランチとマージ済みrevisionにチェックアウトすることができます
レビュワーになった時とか便利なので是非

## さいごに
初のAdventCalendarでしたが、ちょっと内容泥臭すぎたかなーという印象
もっと良い感じにPullRequestBuilder弄っていきたい

明日は [kakkun61](https://qiita.com/kakkun61) さんの記事です。では
CSS Grid Layout

# CSS Grid Layout

この間HTML5 感。のイベントに参加したので、そこで知ったCSS Grid Layouの内容をメモ。

[HTML5 感。](http://html5exam.jp/newsdetail/seminar20171118_report/)

登壇者は株式会社コムセント最高技術責任者（CTO）の関口和真さんでした。
内容は端折りますがCSS Grid Layoutの使い方の簡単サンプルを載せます。

## CSS Grid とは

* CSSで２次元のグリッドを（仮想的に）描きレイアウトを作成するための仕組み
** グリッド＝Excelみたいな構造

* 任意のマス目に対して要素を配置することが可能
** HTMLに依存しない

## CSS Grid 用語

* 列、行、セル（エリア）、トラック
* インデックスは0からでなく1から
* 隣接する２本のラインの間をトラックと言う

## CSS 列と行

* 重要なのは線（ライン）
* 下から、右から数える場合は-1、-2から数える

![cssgridlayout.png](https://qiita-image-store.s3.amazonaws.com/0/170830/e5c91908-dc1f-43ed-eca0-1cacc3c0ef5d.png)


## サイズ指定

* コンテナを作成しなかに治める要素を指定
* display: grid
* grid-template-rowsで行の高さ指定できる
* grid-template-columnsで列の幅を指定できる
* frという単位が使える（1fr：残り全て）

## 位置指定

* grid-row: 1 / 3
** 1行から3行

* grid-column: 1 / 3
** １列から３列

## エリア

* セルに対してエリアを作ることが可能
* セルの別名として機能する

## エリア指定方法

```
grid-template-areas:
"area1 area2"
"area1 area3"
```
##

* container直下の子要素がセル扱いになる
* grid-template-areasは改行で意味が変わったりするので整形すると気をつける

```css
.container {
  display: grid;
  grid-template-columns: 200px 400px 1fr; //幅200px,400px,残り幅全部の３カラム
  grid-template-rows: 200px 200px; //高さ200pxの行を２行
  grid-gap: 20px; //カラム同士のマージンを20pxにセット
  grid-template-areas: //カラムに名前をつけて配置を指定している
    "area01 area02 area03"
    "area04 area05 area06";
}
@media screen and (max-width: 768px) {
/* セルの配置を変える場合grid-template-areasで配置を変えることが出来る */
.container {
  display: grid;
  grid-template-columns: 200px 400px 1fr;
  grid-template-rows: 200px 200px;
  grid-gap: 20px;
  grid-template-areas:
    "area01"
    "area03"
    "area04"
    "area02"
    "area05"
    "area06";
  }
}
.box01 {
  grid-column: 1 / 2;
  grid-row: 1 / 2;
  grid-area: area01;
}
.box02 {
  grid-column: 2 / 3;
  grid-row: 2 / 3
  grid-area: area02;
}
.box03 {
  grid-column: 3 / 4;
  grid-row: 2 / 3;
  grid-area: area03;
}
.box04 {
  grid-column: 2 / 4;
  grid-row: 1; /* 1 / 2 */
}

```

[code sample](http://jsdo.it/blackcat.yuza/8S8U)

## ではflexboxは？

* 順番を逆にすることはできるが変えることをはできない
* flexboxとCSS Gridを作った人は同じ
* 両方うまい具合に使い分けすれば良いのでは

## まだ最新のブラウザからでしか使いこなせない
* IE11以上、IE Edge12以上（ベンダープレフィックスがいる、grid-gap使えないなど微妙に仕様が異なる点がある）
* IE Edge16から完全対応
* Safariが10.3以上から（古いmacとかだと使えない）
* Chrome 57以上から
* FireFox 52以上から
re:dashでよく使うPythonの基礎まとめ

こんにちは、[株式会社オズビジョン](http://www.oz-vision.co.jp/)の@seungyeon-kimです。

最近、データの集計のためre:dashをよく使っていますが、取得したデータからほしい情報だけ取り出したい時や、入力値を加工してデータを取得したい時があります。
その時、有用に使えるのが「Python」です。

実は私、Php以外は大学時代にJavaとC、遊びでrubyをちょっと触ったぐらいで、Pythonは初めてです。（rubyと使い方は似ていますが）
ですので、re:dashで処理の追加が必要な時、Pythonの使い方の調べにかなり時間がかかってしまいます。
その手間を減らすため、今回は自分がre:dashでよく使っているPythonの使い方を共有したいと思います。

# クエリ関連
## クエリにバインディングがしたい

```py3
query = '''SELECT * FROM TABLENAME WHERE COLUMN = ?'''
```
値の特定はできないが、データを渡してクエリを回したい時、主に使う方法が下記の二つです。

### replace()を使って、文字を特定して置換する

```py3
# 文字列.replace(置換される文字, 置換する文字)
query.replace('?', データ)
```

### reモジュールのsub()で、正規表現を使って置換する

```py3
import re
# re.sub(正規表現, 置換する文字列, 置換される文字列 [, 置換回数])
result = re.sub('\?', データ, query)
```

## クエリ結果が0件かどうかを確認したい
### len()を使って、データの長さを確認
データの長さを返す**len()**を使います。
len()でデータの長さを取得して、長さが0かどうかを判断して処理を分岐します。

```py3
data = ['あ', 'い', 'う', 'え', 'お']
len(data)　# 結果5
```

### if notで、データがあるかどうかを確認
※ 追記 (2017/12/04 22:26)
@shiracamusさんよりアドバイスいただきました
0や空リストなどはFalseとして判定されます。

```py
if not data:
```


# 入力値関連
## カンマ区切りの複数データを配列にしたい
re:dashの入力フォームから入力してもらった値がカンマ区切りの複数のデータの場合、配列に作ってから処理をしたい時、ありますね。
その場合は、**split()**を使って、文字列を分割します。

```py
text = 'おはよう, ございます'
# 文字列.split(切り分けする文字)
text.split(',') # 結果 => ['おやよう', 'ございます']
```

## 入力値の一部を切り出したい
特に日付データから、年と月を切り出したい！という場合、よく使います。

```py
date = '20170911'
year, month, day = date[0:4], date[4:6], date[6:8]
>>> year
'2017'
>>> month
'09'
>>> day
'11'
```

# おわりに
普段はPhpをメインで使っていまして、Php以外の言語はあまり触る機会があまりありませんでした。
そのため、最近re:dashで集計をしながら、ちょっとずつPythonを触っていて、やはり新しいことを学ぶのは楽しいな～と思っています。
re:dashも、pythonも、使い始めたばかりなので、Pythonもre:dashもガリガリ使っている方、またはもっといいやり方知っているよ！という方いらっしゃいましたら、ぜひコメントください。
次回の私の投稿は、Pythonまとめver2を投稿しますので、楽しみにしてください。

*** 
次の更新は、オズビジョン入社1年目で、大活躍中のENGから「新卒ENGが出くわした頻出IT用語集」を共有するらしいです！IT用語は、覚えても覚えても新しいものがどんどん出てくるから、ENGはもちろんIT系に働く人なら、常に勉強すべきものですよね。
すごく有意義な内容になると思いますので、ぜひ楽しみにして下さい！

# おまけ
re:dashでPythonを使うコツとPythonの基礎まとめも共有します。
すごくわかりやすいので、ぜひ見てください。

* [re:dashでpythonを使う vol.1](https://qiita.com/terra_yucco/items/fc4d3b3270a168dbd18d)
* [Pythonの基礎まとめ](https://qiita.com/shizuma/items/f4601aa8b526f95e68b0)
MeCab+unidicで -Oyomi が使えるようにする


# 概要
Mecab 0.996 + unidic2.1.2

MeCabにunidic辞書を使用する場合、バイナリ辞書、ソース辞書のどちらのインストール方法を取ってもデフォルトのdicrcには出力フォーマットとしてのyomi形式が定義されていないため、エラーとなる。

``` sh
$ echo "日本語の文章" | mecab -d /usr/local/lib/mecab/dic/unidic -Oyomi
writer.cpp(63) [!tmp.empty()] unkown format type [yomi]
```

Googleで検索をしてみると、次のページがヒットする。

[[小ネタ] mecab + unidic で出力フォーマットを整形する方法](https://tech.naviplus.co.jp/2014/05/14/%E5%B0%8F%E3%83%8D%E3%82%BF-mecab-unidic-%E3%81%A7%E5%87%BA%E5%8A%9B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%92%E6%95%B4%E5%BD%A2%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)

このサイトは参考になったが、しかしながら、この方法はあまり賢くない上に少しだけ間違っている。

それは、次のような例の時におかしくなる。

``` sh:
$ echo "言ってた" | mecab -d /usr/local/lib/mecab/dic/unidic -O '' -F '%f[6]' -U '%m' -E '\n'
イウテルタ
```

# 方法

コマンドラインに指定しているオプションをdicrcファイルに定義する。
そして、正しいフィールドを出力するようにする

``` :/usr/local/lib/mecab/dic/unidic/dicrc

; 末尾に以下を追加
; yomi
node-format-yomi = %f[9]
unk-format-yomi = %m
eos-format-yomi  = \n
```

node-format-yomiのフィールド番号は9番を指定する。
参考サイト、6番目は語彙素読み。9番目が発音形出現形となっているため。

この設定ののち、次のように利用できる。

``` sh:
$ echo "日本語の文章" | mecab -d /usr/local/lib/mecab/dic/unidic -Oyomi
ニッポンゴノブンショー
$ echo "言ってた" | mecab -d /usr/local/lib/mecab/dic/unidic -Oyomi
イッテタ
```

# 参考
[辞書のフィールド](https://hayashibe.jp/tr/mecab/dictionary/unidic/field)
python系の奴をdocker deployする時に出来るだけimageを軽くする



だれかブラッシュアップして欲しい。


C拡張がmariadbだけだとするここんなものかな。srcの外にrequiments.txtを入れて変更なければキャッシュ聞くようにしたい。当然ベースはalpine。

プロジェクトの最低限のディレクトリ構成はこんな感じ？

- Dockerfile
- requirements.txt
- .git
- src
  - projectname
      - settings_docker.py
  - app1
  - app2

```
FROM python:3.5-alpine
ADD requirements.txt /var/projectname/
RUN apk add --no-cache --virtual .dev gcc make musl-dev mariadb-dev\
    && python3 -m venv /venv \
    && /venv/bin/pip install --upgrade pip \
    && /venv/bin/pip install --no-cache-dir -r /var/projectname/requirements.txt \
    && runDeps="$( \
            scanelf --needed --nobanner --recursive /venv \
                    | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
                    | sort -u \
                    | xargs -r apk info --installed \
                    | sort -u \
    )" \
    && apk add --virtual .python-rundeps $runDeps \
    && apk del --purge .dev
ADD ./src /var/projectname/
WORKDIR /var/projectname

CMD /venv/bin/gunicorn projectname:application --env DJANGO_SETTINGS_MODULE= projectname.settings_docker --workers 4 --log-level INFO --capture-output --bind 0.0.0.0:8000

```

あとは環境変数で何とかすれば良い

この形だと、ビルドに必要なパッケージ消す時に、venv以下のsoファイルが見ている依存パッケージだけ残るようになる。そこそこ無駄にファイル入れているとはいえ、実際作ってみた80MBでそこそこ小さくてよかった。

jsを下に入れてたりするとカジュアルにnode_modulesとか入ってくるので.dockerignoreは必要なことは書いて置こう
Smarty3をもう一歩便利に使うフィルター


# はじめに
私がSmarty3を使っていたのが数年前で
古いからもう使われてる事ないだろな・・・と思いましたが
qiitaに記事を書いてる人を見つけて
誰かの役に立てばと自分で便利だったfilterの使い方をご紹介

# Smarty3ドキュメントのフィルター
https://www.smarty.net/docs/ja/
***15. 拡張機能*** にある

 - プリフィルタ（prefilter）
 - ポストフィルタ（postfilter）
 - アウトプットフィルタ（outputfilter）
 
です。
*改めて見返して見たら分かりやすいので説明を引用しておきます。*

## [プリフィルタ(prefilter)](https://www.smarty.net/docs/ja/advanced.features.prefilters.tpl)
> プリフィルタは、テンプレートがコンパイルされる前に 実行されるPHPユーザ定義関数です。テンプレートに含まれた不必要なコメントを除いたり、 第三者にテンプレートの更新を任せている時に テンプレート内にど のようなものが含まれているかを監視する等といった前処理を行います。

テンプレートには開発のドメイン等環境ごとに異なる事は記述せずに動的に切り替えるプログラムを入れていましたが、大人数で修正が入るとhttp://dev.service.jp/ みたいに書かれてしまう事があり
プリフイルタで消すということをやりました。
またURLを記述する際に相対パスから絶対パスに変更するなどもプリフィルタで行いました。

### 例
```php
// 参考用です
function smarty_prefilter_cut_dev($source, &$smarty) {
    $patterns []= 'http://dev.service.jp/';
    $replacements []= '';
    $newSource = str_replace($patterns, $replacements, $source);
    return $newSource;
}
```

## [ポストフィルタ（postfilter）](https://www.smarty.net/docs/ja/advanced.features.postfilters.tpl)
> テンプレートが display() 又は fetch() を経由して呼び出された時、出力は１つ又は複数のアウトプットフィルタを通して送られます。 これは ポストフィルタ とは異なります。 コンパイルされたテンプレートがポストフィルタによって、 テンプレートがディスクに保存される前に処理されるのに対し、 アウトプットフィルタはテンプレートが実行される時にその出力を処理します。

テンプレートがコンパイルされて保存する前に実行されるので
そのテンプレートの出力全体に影響があるものはここで処理できます。
当時、あまり使ってませんでした・・・

### 例
```php
function smarty_postfilter_dev($compiled, &$smarty) {
    return $compiled.'_postfilter-dev_';
}
```


## [アウトプットフィルタ（outputfilter）](https://www.smarty.net/docs/ja/advanced.features.outputfilters.tpl)
> テンプレートが display() 又は fetch() を経由して呼び出された時、出力は１つ又は複数のアウトプットフィルタを通して送られます。 これは ポストフィルタ とは異なります。 コンパイルされたテンプレートがポストフィルタによって、 テンプレートがディスクに保存される前に処理されるのに対し、 アウトプットフィルタはテンプレートが実行される時にその出力を処理します。

アクセスしてきた側（例えばユーザ）の環境により出力する文字をSJIS, UTF8などに変更する
ポストフィルタで変換すると、ファイルがエンコードされたファイルが保存されるのでアウトプットフィルタでやりました。

### 例
```php
function smarty_outputfilter_enc_sjis($output, &$smarty) {
    $result = mb_convert_encoding($output, 'SJIS-win', 'UTF-8');
}
```

## まとめ
Smarty3のフィルタは結構簡単に追加したり外したりできたので便利でした。
まだ使ったことなくて全てPHPでやってる人には是非検討して見てください。


:dancer::dancer_tone1::dancer_tone2::dancer_tone3::dancer_tone4::dancer_tone5:
Objective-CでのwebAPI接続について

こんにちは。

つい先日Objective-CからWebAPIに接続することがありましたので、その手法をまとめます。

##URLを作る

###まずString型でURLを生成していく

```NSString *urlString = @"http://hogehoge.jp/hoge.php";```

パラメータがある場合は別変数で保持する。
```NSString *id = @"0";
    NSString *idStr = [NSString stringWithFormat:@"id=%@", id];```


URLとパラメータを文字列結合する。
```NSString *urlWithParam = [NSString stringWithFormat:@"%@?%@",urlString,idStr];
```

###URLエンコード

String→URLへとエンコードを行う。
```NSURL *url =[NSURL URLWithString:urlWithParam];
```

##接続準備
###URLからリクエストURLを生成
接続時に使用するリクエストURLを生成する。
```NSURLRequest *request = [NSURLRequest requestWithURL:url];
```

今回はサブスレッドで実行する必要があったため、処理を記載。
```NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];```

##接続
###SessionDataTaskを使って接続〜判定結果による処理

```
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                              completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                  // 処理を書く
                                  //NSDictionary化
                                  NSDictionary *dic = [NSJSONSerialization 
                                      JSONObjectWithData:data options:0 error:nil];
                                                
                                  //判定
                                  bool *result = dic[@"return"][@"result"];
                                                
                                  if(result == true){
                                      NSLog(@"問題ありません。");
                                  }
                                  else{
                                      NSLog(@"問題があります。");              
                                  }
                                  // セッションの後始末
                                  [session invalidateAndCancel];
                              }];
    [task resume];
```

と上記のように書くことでWebAPIとの接続に成功しました！

##まとめ
Objective-c初心者が調べながら実装を行いましたが、情報が新しいものが少なく
少々手間取りました。
ざっとまとめさせていただきました。
先輩方から教えていただいたことが、またどなたかの役に立ちますよう！

では！
Solidityのfunction修飾子がよくわからなくなるのでメモ

Solidityを使っているとfunctionを定義する時にpublicやらいろいろ修飾子をつけるのですが、いっぱいあってよくわからなくなるので意味をメモ書きします。

- internal,external,public,private
  - public コントラクト内部からも、外部メッセージでも呼び出すことができるfunction
  - external ほぼpublicと一緒だが内部でfunctionを呼び出す時にthis.(function名)と呼ばないといけない (External functions are sometimes more efficient when they receive large arrays of data.) とも書いてあるので使うといいことあるかも？
  - internal 定義したコントラクトと派生コントラクトのみで呼び出すことができる。外部呼び出し不可
  - private 定義したコントラクトのみで呼び出し可能。派生コントラクトでも呼び出し不可
- pure
  - 状態変数を読みも書きもしないfunction
- constant, view
  - 状態変数はreadonlyで書き込まないfunction
- payable
  - Etherを送信できるfunction


ちなみにSolidityではmodifier構文でカスタムの修飾子を作ることができます。このあたりも開発の時はドキュメント化しないとわからなくなりますね。あとJava、C#と違って修飾子がパラメータの後ろにつけるところも間違えやすいので注意。

```js

contract Hoge {
   address owner;

   /* トランザクション送信者がownerであることを確認するmodifier */
   modifier onlyOwner() { assert(msg.sender == owner); _; }

   function ownerOnlyFunction() public onlyOwner {
      /* owner限定で実行できるfunction */
   }
}

```
配列の要素を正規化してオブジェクト化する


```js
const users = [
  {id: 1, name: 'Alice'}, 
  {id: 2, name: 'Bob'}, 
  {id: 3, name: 'Charlie'}
]
```

を

```js
{
  1: {id: 1, text: 'Alice'}, 
  2: {id: 2, text: 'Bob'}, 
  3: {id: 3, text: 'Charlie'}
}
```

のようにidをキーにしたObjectに変換したい。

## 方法
```js
import _ from 'lodash';

const users = [
  {id: 1, name: 'Alice'}, 
  {id: 2, name: 'Bob'}, 
  {id: 3, name: 'Charlie'}
]

const userObjects = _(users).map(x => [x.id, x]).fromPairs().value();
console.log(userObjects);
```

## 要素技術
- lodash
  - https://lodash.com/docs/4.17.4#lodash
- map
  - https://lodash.com/docs/4.17.4#map
- fromPairs
  - https://lodash.com/docs/4.17.4#fromPairs
- prototype-value
  - https://lodash.com/docs/4.17.4#prototype-value
残高があるのに「残高が少ない」というエラーになる原因と対策

Counterparty を使っていると、充分な BTC 残高があるはずなのに、`insufficient funds` というエラーが発生することがしばしばあります。
特に使い始めのユーザに多発する傾向があります。

この挙動は、バグというよりは Bitcoin ブロックチェーンの性質に基づく、仕様です。

## [おさらい] Bitcoin の残高

Bitcoin のブロックチェーンには、アドレスに紐づく残高そのものは記録されていません。
各トランザクションには、アドレスへ送金された金額(output)と、後日そのoutputが他のアドレスへの支払い(input)として使われたかどうかのフラグだけが記録されています。

アドレスの残高は、そのアドレスに当ててあり使用済みでない output (いわゆる UTXO)の金額の合計として計算されます。

残高は、複数の output に分散して入っているというところが、本稿を理解するためのキモの部分です。

他のアドレスへの支払いの際には、 送金額より少しだけ多くなるだけの UTXO をかき集め、送金に用いるトランザクションの input とします。
また、お釣りが output に設定されます。

この UTXO は、ブロックチェーンに採り込まれて一定の承認数となるまで使えません。[^utxo]
一定の承認数となったお釣り output は、新たな UTXO となります。

[^utxo]: 仕様上は使えてしまうのですが、2重支払が起きるリスクが起こるので運用上は使えません。

つまり、承認途中のお釣りは、他の支払いのための UTXO として使えません。

承認まで待たされる事象は、Bitcoin のウォレットや交換所を使ったことがあれば、意識する機会が多いかもしれません。
しかし、UTXO の存在までは意識なさる方は(Counterwallet はエンジニア向けツールでもないので)多くないかもしれません。

## Counterparty と UTXO

Counterparty は、メッセージの送信で Bitcoin のトランザクションを使います。
つまり、メッセージの送信には UTXO が要ります。

UTXO が少ない状態でメッセージを多数送信した場合には、UTXO が枯渇します。
その結果として表示されるのが BTC 残高が充分なのに起こる `insufficient funds` です。

## 対策

原因がわかれば、対策は簡単ですね。

* 先のメッセージを含むブロックが承認されるまで待つ。
* XCP アドレスへの少額多数の BTC 送金を行って UTXO を増やす。

上記のいずれかになります。
Azure DevOps Projectsでハマった話

[SC（非公式） Advent Calendar 2017](https://qiita.com/advent-calendar/2017/unofficial-sc)の6日目の記事です。

この記事は[Azure DevOps Projectsを試す](https://qiita.com/sat0tabe/items/a8b9782c2f028c7381f6)の舞台裏編です。

#はじめに

Connect();2017で発表された中で私が一番興味を持ったのは、現在の業務に少なからず関わっていたためDevOpsProjectでした。
すぐさま試すことにしました。

結果的にAzureの知識もCI/CD Pipelineの知識もまったく足りてないことがわかりましたが、、、

#さっそく

##作成
手順というか作成はポータルをポチポチとクリックするだけなので瞬殺でした。

##しかし
Doneを押して速攻エラー

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/78b21359-4938-9f47-9224-8721af44065e.png)
こんなエラー
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/c379fac9-dd13-f4c7-f3fb-5755d21faf6d.png)
こいつも延々このまま

しばらく待ってもう一度試しても同じ現象が。。
途方に暮れてその日は断念

##次の日も
同じように試すが、まったく変わらない

そこでtwitterで助けをも求める、、、

###すると、、、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/d5e0ff71-d7f7-a154-3384-ada3afd34b9c.png)

とMSのエヴァのかたに回答いただきました。

##確認
早速見てみると、2日間がんばった分のリソースグループが大量に残されていました。
....きちんと後でゴミ掃除します。

教えていただいたとおりにしようと思ったのですが、まず、かろうじてリソースグループは作成されていたものの何のエラーも吐き出されていませんでした。

仕方ないので既存のvstsを使用してもう一度作成してみると、当然のごとく失敗したんですが、
エラーメッセージの出力はできていました。

メッセージの内容を確認してみると、まったく意味の分からない内容
リソース名が重複していますだそうです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/529256b0-5d45-640a-2ff5-d9a2424fe1dc.png)

最終的にはVSTSリソースに対する権限がなかったことがわかったのですが、この時点ではまったく役に立つメッセージではなかったです。

##仕方ないので
DevOpsProjectsで作成するリソースをすべて手動で作成して原因の究明することにしました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/a6e4eb3b-7e25-be37-76a5-36eaad73fcf3.png)


##エラー
すぐにエラー発生してくれました
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/ef3c13db-7236-c7d1-c0f5-26903c518540.png)
それではエラーの詳細を見てみましょう

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/f1673202-2de0-2074-e493-9d33632d84d7.png)
原因はAADのゲストアカウントだからだったそうです。

##解決
たまたま私はAADのアカウントを持っていたためすぐさまそちらで試すとものの5分とかからずに
AzureDevOpsProjectsを作成することができました。めでたしめでたし。

#おわり
結果的に新サービスを試したかっただけなのに2日ほどかかることととなってしまいましたが、おかげで色々普段見ないようなところまで触れることととなったので、少し勉強になりました。
そしてAzureADにも興味を持つようになったのでよかったとします。
ただ、サービスの作成だけで疲れ果てたのでDevOpsProjectsの細かいところまでまだ見ていないのであとで色々遊んでみたいと思います。
US旅行者向けプリペイドSIMをSIMフリー化したiphoneで使いたい（ZIP SIM版）

海外に行く際に今までならWiFiルーターをレンタルして、電話はキャリアの電話番号のまま海外で使うといパターンが鉄板でした。しかし、キャリアSIMから格安SIMに変更したことでこの方法が取れなくなりました。
ちょうどUSに出張に行く機会がありましたので、折角ならでと思いSIMフリー化したiphoneに現地のプリペイドSIMを入れることを検討しました。

Qiitaを参照される方は海外行かれる方も多いと思われますので、メモのため記載いたします。

#準備
USで利用可能なSIMは各種あるようですが、旅行者用となると数が限られてくるようです。（Webで情報探していただくと各種情報あります）

SIMの選択条件として次の項目を考え、
・情報が多いこと
・現地で戸惑わないこと
・プリペイドで利用できること
・なるべく日本で準備できること
結論として、[ZIP SIM](https://zipsim.us/)というSIMを選びました。
日本からはAmazonなどで[購入可能](https://www.amazon.co.jp/ZIP-SIM-%E9%80%9A%E8%A9%B1%EF%BC%8BSMS%EF%BC%8B%E3%83%87%E3%83%BC%E3%82%BF%E9%80%9A%E4%BF%A1500MB%E3%80%817%E6%97%A5%E9%96%93-%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E7%94%A8%E3%83%97%E3%83%AA%E3%83%9A%E3%82%A4%E3%83%89SIM-2016%E5%B9%B44%E6%9C%88%E3%82%88%E3%82%8A%E5%95%86%E5%93%81%E5%90%8D%E3%83%BB%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%8C%E5%A4%89%E6%9B%B4%E3%81%A8%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%EF%BC%89/dp/B01ESRFUK0)です。
（zip simの回し者ではないです、、）

#環境
iphone：6s Plus / iOS 11.1.2

ZIP SIMの種類：14日間、通話＋SMS＋データ通信1GB
![IMG_6818.JPG](https://qiita-image-store.s3.amazonaws.com/0/142407/a829bcff-5f80-066a-13e9-4f23a2bd47c3.jpeg)


#やってみた
出張前にAmazonで注文し購入しておいたSIMは日本では開けずに、現地に到着後日本で使用していたSIMと挿し替えます。
（ちなみに、日本で使用しているIIJmioのSIMはUS（シアトル、ラスベガス）ではAT&Tとキャリア名が表示されていました。）
☆実施日2017/11/27

すると、次のようなSMSメッセージが送られてきます。
![IMG_7001b.png](https://qiita-image-store.s3.amazonaws.com/0/142407/2f0e400d-529b-401f-c73b-a7b2f0743b4c.png)


事前に調べた情報だと、特別な開通操作（アクティベーション）は不要で、割り当てられた電話番号が表示されているとのことでしたが、なにも表示がありません。。
いろいろ調べてみたところ、iphoneの設定＞電話＞自分の番号 にすでに割り当てられた番号が表示されておりました。iphoneの場合プロファイルの再設定が必要かもという情報もありましたが、私の場合は不要でした。（設定＞キャリアの表示欄にはZIP SIMと表示されていました）
この状態で通話も可能でした。

ちなみに上記メッセージにある”1”とSMSで送信してみたところ、次のような返信があり、SMSで各種コマンドを入力・送信すると操作方法を教えてもらえるようです。
![IMG_7002a.png](https://qiita-image-store.s3.amazonaws.com/0/142407/cc52f4a1-f528-e68c-51ec-eeaa4696134c.png)

参照のため、各コマンド実行結果を貼っておきます。

”number”→自分の電話番号を表示
![IMG_7003c.png](https://qiita-image-store.s3.amazonaws.com/0/142407/b66e3ddc-7850-2a0f-3ace-0e4eaffaad7d.png)

”mms”→MMSの設定
![IMG_7004a.png](https://qiita-image-store.s3.amazonaws.com/0/142407/3128ecdb-0c47-8de4-bcf2-34cc723b4210.png)
![IMG_7005a.png](https://qiita-image-store.s3.amazonaws.com/0/142407/9caf2af3-a2dc-1cea-823b-d5129ffd2df5.png)

”balance”→データ通信量の確認
![IMG_7003a.png](https://qiita-image-store.s3.amazonaws.com/0/142407/afa2367d-e2a8-77cc-5f26-5574ecd05e73.png)



#結論
ZIP SIMは自動で開通（アクティベーション）し、簡単に使うことができました。
日本で準備できるという点から使いやすいSIMではないかと思います。
Uberを使う際も役に立ちました。
今からはじめるデカタイヤ

　この記事は、[ETロボコン Advent Calendar 2017](https://qiita.com/advent-calendar/2017/etrobo)の5日目のエントリーです。

　どうもみなさんおばんです、本部技術走行体の人です。CS大会に参加した方、または観戦された方は既にご存知かと思いますが、RCX時代より長年に渡りETロボコンの走行体で使われてきた**外径81.6mmのタイヤとホイールのセット**、これ既にディスコンになっていまして、アフレルさんの在庫も心許無いことから、**2017年を持って引退**することとなりました。今までありがとう290226。

　そんな訳で、新しいタイヤ＆ホイールを含んだ新ETロボコンキット、アフレルさんから**もう間もなく発売**される予定ですが、来年に備えていち早く今から先行調査したい！ という方向けのエントリーとなっております。あ、タイヤ変更以外にも両走行体とも修正は加えられますが、**基本的には来年度もEV3way-ET/HackEVです**。

# デカタイヤの正体
　新タイヤはズバリ「[6021952/11957 Motorcycle Tyre Φ100,6](https://brickset.com/parts/6021952/motorcycle-tyre-ø-100-6)」、ホイールの方は「[6176748/88517 Motorcycle Rim Φ75](https://brickset.com/parts/6176748/motorcycle-rim-ø-75)」です。もちろんホイールはPart#88517であれば何色でも構いません。現行のレゴキットでは「[#42063 BMW R1200GS Adventure](https://brickset.com/sets/42063-1/BMW-R-1200-GS-Adventure)」に入っていますので入手しやすいと思います。しかもこのキットにはLEGO Technic 40周年記念3Mビームが入ってますので超おすすめ！　ちなみにAmazonでは[コチラ](https://www.amazon.co.jp/dp/B01J41MCVA)。

#デカタイヤの組み立て方
![ev3wayet18_wheel_arrow_1_0_0_0_1_0_0_0_1_1_4960_600_DPI_1.png](https://qiita-image-store.s3.amazonaws.com/0/151581/c63a81ef-8537-99a6-1dbe-89cf36cad64c.png)
![ev3wayet18_wheel_arrow_1_0_0_0_1_0_0_0_1_2_4960_600_DPI_1.png](https://qiita-image-store.s3.amazonaws.com/0/151581/3d809aae-07b7-2cbc-457e-6343fe3570b0.png)
![ev3wayet18_wheel_arrow_1_0_0_0_1_0_0_0_1_3_4960_600_DPI_1.png](https://qiita-image-store.s3.amazonaws.com/0/151581/655a4bdd-5549-27a3-7332-682c738b5679.png)
![ev3wayet18_wheel_arrow_1_0_0_0_1_0_0_0_1_4_4960_600_DPI_1.png](https://qiita-image-store.s3.amazonaws.com/0/151581/5aee694c-6909-7253-b413-54d3dcfd0f28.png)
![ev3wayet18_wheel_arrow_1_0_0_0_1_0_0_0_1_5_4960_600_DPI_1.png](https://qiita-image-store.s3.amazonaws.com/0/151581/f8a4d8fe-3495-20ca-f38f-b6e4fc991341.png)
自作String拡張クラスの生きる痕跡

2017年、githubのお試しfirst repositoryとしてつくったものの、誰の目にも触れられずひっそりと生きているわが子（repository）が不憫なため、ここに生きる痕跡を残しておきます。

これ↓
**[112KA/String](https://github.com/112KA/String)**

#どんなクラス?
文字を操作しやすくしたstd::stringの機能拡張ライブラリ。
あまり他に見ない特徴としては、自分のmemory allocatorを設定できるところです。

仕様類似物
-[ezhikman/String](https://github.com/ezhikman/String)
-[Lmachado73/String](https://github.com/Lmachado73/String)

std::basic_stringを拡張したかったけど、関数がprivateになってて拡張できなかったので、全部新しく書いた。（ほぼコピペ）

custom memory allocatorが設定できるString拡張クラス見つからなかったけど、そもそも需要がないのかな。。細かくメモリ管理したいなどがなければ使わないかも。。

#使い方
##設定
```cpp
#include "BasicString.hpp"

// use std::allocator 
using string = BasicString<char, std::char_traits<char>, std::allocator<char> >;
// or original allocator
using my_string = BasicString<char, std::char_traits<char>, my_allocator<char> >;

```
##fomat指定で初期化
```cpp
//constructor
my_string s1("string1");
printf("%s\n", s1.c_str());		//string1

my_string s2("string%d",2);
printf("%s\n", s2.c_str());		//string2
```
##文字連結
```cpp
my_string s3(s1 + "_" + s2);
printf("%s\n", s3.c_str());		//string1_string2


//operator+=
s1 += "_";
s1 += s2;
s1 += "_" + s3;
printf("%s\n", s1.c_str());		//string1_string2_string1_string2


//append
s2.append("_string3");
s2.append("_string%d",4);
printf("%s\n", s2.c_str());		//string2_string3_string4


```

#その他
-hpp
-CMake初めて書いた。
-Catch(Testing framework)初めて使った。いつのまにかCatch2がでてるが使ってるのは古いやつ。
-Doxygen初めて使った。
-CMake/Catch/Doxygen構成はgithubでも時々見かけるので、ちょっとしたライブラリ開発を考えてる初学者には構成要素の参考になるのでは。

#参考リンク
-[Catch というマクロライブラリで C++ のコードをテストする](https://qiita.com/ntabee/items/dcfa1a0c375b69c80957)
-[std::string::nposの正体](https://qiita.com/yakigac/items/8797cc256d6dcbd5e36a)
-[クラスへの機能のちょい足し](https://qiita.com/rinse_/items/a6b4c543c7bc1d44b536)
IAMユーザで初めてAWSコンソールにログインする時にパスワード変更できない件

# 問題

新規IAMユーザ発行時に `次回のサインインで新しいパスワードを作成するようユーザに求める` にチェックを入れてユーザに連絡したが、AWSコンソール初回ログイン時に新しいパスワードを設定しようとすると、 `iam:ChangePassword の実行権がありません。`  というエラーが発生してパスワードが変更できない。

試しに `AdministratorAccess` の管理ポリシーをアタッチしたり、
パスワード変更の権限を付与するカスタムポリシーを作成して明示的にアタッチしたりして、権限は持っているはずなのに同様のエラーでパスワードが変更できない。

という問題が発生した。

# 原因と解決索

本当の原因は変更しようとしていた新しいパスワードがIAMパスワードポリシーに違反していることだった。
IAMパスワードポリシーに則り、パスワードをより複雑なものに変更したところ問題は解決した。

そもそもエラーメッセージが間違っていて iam:ChangePassword の実行権は、ちゃんとIAMユーザに付与されており、結局エラーメッセージが間違っていることが問題だった。

AWS側ではっきり `パスワードのポリシー違反です。` 的なエラーメッセージが表示されるようになるまでは、同じような問題にハマるAWS管理者はゼロにならないと思われますが、
エラーメッセージが間違っている事が判明したので、仮パスワードを連絡する際にパスワードポリシーのルールも伝えるようにしようと思いました。。

**2018/03/30 追記**

```
ユーザーに iam:ChangePassword を実行する権限がないか、入力されたパスワードが管理者によって設定されたアカウントパスワードポリシーに準拠していません
```
というメッセージが表示されるようになり、アカウントパスワードポリシーに準拠していないことに気づけるようになっていました！
【メモ】Tweenを途中で止める

# はじめに
ゲーム中にTweenを一時停止して、途中から再開したい、ということがあったのでメモ。
今回は以下のパターンで上記の動作がほしくなった。

- 一時停止ボタンを押したとき
- 別タブを開いているとき

# 書き方

```js
createjs.Ticker.paused = true;
```

これで動いているすべてのTweenを一時停止できる。
動かす場合はtrueをfalseに変更すればオッケー。

一時停止ではなくて止めて終わりでいい場合は以下の通り。

```js
createjs.Tween.removeTweens(target);
```

targetはTweenを消したいムービークリップを書けばいい。
Tweenを指定するときにgetで指定する部分。

``` js
createjs.Tween.get(target).to();  //このtargetを指定すればおｋ
```