OmniAICreator/Qiita-1.07M huggingface dataset:
5分で起動まで行けるElectronとES2015による最小工数で作る最速Electronアプリ

## Electronとは

最近流行りのDesktopアプリを作成可能なNode.js製のツール

- atomエディタ
- Visual Studio Code
- kobito for windows
- Slack

まぁとりあえずは試してみたくなるよね？

なので、軽く作ってみるつもりが若干ハマりどころもあったので現時点（2015/12/2）での最小工数でできた部分をメモしておこうと思いました

## 試してみる

最初に [electronのリポジトリ](https://github.com/atom/electron) に行くが、全然分からないので、検索かけてみるとある程度の記事が引っかかるかと思います

http://qiita.com/Quramy/items/a4be32769366cfe55778
http://qiita.com/ukiuni@github/items/4f004db5d163f4048ea2
http://phiary.me/electron-tutorial-try/

これらの記事で分かった方はこれ以上読む必要無いので、これ以降は暇な人で
若干ハマったのは書き方は全然これであっていたんですが、最初に動かす時に `node index.js` みたいな感じでしていたので、全然動かず、「あれ？あれ？」ってなってました（つまり `electron` の使い方を完璧に誤っていた）

### 起動までを
```sh
npm init -y
```
init ファイルを作り

```sh
npm i --save-dev electron-packager electron-prebuilt
```
必要なJSパッケージを導入し

```json
  "scripts": {
    "start": "node_modules/.bin/electron ."
  }
```
`npm run start` で実行できるようにスクリプトを書き、

```js
'use strict';

let app = require('app');
let BrowserWindow = require('browser-window');

require('crash-reporter').start();

console.dir(BrowserWindow);

app.on('window-all-closed', () => {
  if(process.platform !== 'darwin') app.quit();
});

app.on('ready', () => {
  let mainWindow = new BrowserWindow({width: 1000, height: 900});
  mainWindow.loadUrl(`file://${__dirname}/index.html`);
  mainWindow.webContents.openDevTools();
  mainWindow.on('closed', () => {
    mainWindow = null;
  });
});
```
といったエントリポイントとなる `index.js` ファイルを用意します


```sh
$ ll
total 24
-rw-r--r--    1 l-03-003  staff   322 12  2 09:56 package.json
drwxr-xr-x  153 l-03-003  staff  5202 12  2 09:56 node_modules
-rw-r--r--    1 l-03-003  staff   497 12  2 11:48 index.js
```

この時点でこんなようなデスクトップアプリができます

![スクリーンショット 2015-12-02 11.57.55.png](https://qiita-image-store.s3.amazonaws.com/0/11101/4c8b5372-134d-206c-4216-3cb763326158.png)

画面は表示されましたね〜 :clap: :clap: 
ここまでが最小構成でできる Electron だと思います
ではここから、 `index.html` を追加していきましょう

### Viewを作る

単純にJSファイルの

```js
  mainWindow.loadUrl(`file://${__dirname}/index.html`);
```

ここで表示させるHTMLを決めているので、あとは `index.html` を作るだけです

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
</body>
</html>
```

作成して、表示をしてみてもまだ真っ白です
あとはWebエンジニアならご存知の通り、いつものHTMLページを作ってくだけですね

```html
...
  <link rel="stylesheet" href="assets/stylesheets/index.css">
...
```

追加でCSSも読みこませておきます

### いろいろと作ったあとは...

最終的にこうなりました
![スクリーンショット 2015-12-02 12.28.17.png](https://qiita-image-store.s3.amazonaws.com/0/11101/af7bf9ff-3c0f-91c2-9628-9a9b0d10ff09.png)

ということで [株式会社LiB](https://www.libinc.co.jp/project-casting/) では Starting Memberを募集しております！
（最後まで見てくださりありがとうございましたm(_ _)m）
【iOS】リリース時にログ出力しないようにする方法

リリース時にログ出力しないようにする方法で、まとまっているサイトがなくて困ったのでメモ
Objetive-Cプロジェクトで使用する〜.pchを使わない方法です。

## #if DEBUG を有効にする
Project -> Buid Settings -> Swift Compiler -> Other Swift Flags -> Debug
に -D DEBUG を追加する

## メソッドをオーバーライドする
AppDelegateファイルのクラスの外にprintとNSLogのメソッドを追加する

```swift

func print(items: Any..., separator: String = " ", terminator: String = "\n") {
    #if DEBUG
        Swift.print(items[0], separator:separator, terminator: terminator)
    #endif
}

func NSLog(message:String){
    #if DEBUG
        Foundation.NSLog(message)
    #endif
}

func NSLog(format:String, _ args:CVarArgType...){
    #if DEBUG
        Foundation.NSLog(String(format: format, arguments: args))
    #endif
}
```

## 確認
print関数を書いたところから上記で作成したメソッドへ飛べるか確認します。
最後にコンソールに出力されていないことが確認できたら完了です。

## 参考にしたサイト
[iOS Swift Xcode 6: Remove println() for release version](http://stackoverflow.com/questions/26913799/ios-swift-xcode-6-remove-println-for-release-version)

## 2015.12.11追記
Build Configuration をDebugにしてipaを作成すると
「#if DEBUG」に入らなかったのでメモ
line monitor > コア部分 (v0.6, v0.7) > ログ機能の実装

line monitor
http://qiita.com/7of9/items/028556c5a819a6a8de96


## v0.6

[v0.6 @ github](https://github.com/yasokada/python-151113-lineMonitor/releases/tag/v0.6)

- /etc/rc.localで実行するため、`#!/usr/bin/env python`を1行目に追加した。

## v0.7

[v0.7 @ github](https://github.com/yasokada/python-151113-lineMonitor/releases/tag/v0.7)

通信テキストのログ機能を追加した。


### ログ機能について

- COM0またはCOM1からの通信を受信した文字列をログファイルに追記する。
- ログファイルは5行の通信ごとにファイル追記する。5行未満はメモリに保持する。
- Logフォルダ以下に[yymmdd].logというファイルが作成される (例: Log/151202.log)


### ログファイル例

実際に通信してみた結果のログファイルを以下に示す。

```Log/151202.log
2015/12/02,07:07:05,444,rcvd2,from COM4
2015/12/02,07:07:08,996,rcvd1,from COM5
2015/12/02,07:07:12,952,rcvd2,aaa
2015/12/02,07:07:13,777,rcvd2,bbb
2015/12/02,07:07:14,449,rcvd2,ddd
2015/12/02,07:17:47,110,rcvd1,//--------------------------
2015/12/02,07:17:48,132,rcvd1,test, 115200bps
2015/12/02,07:17:48,289,rcvd1,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,
2015/12/02,07:17:48,454,rcvd1,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,
2015/12/02,07:17:48,611,rcvd1,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,
2015/12/02,07:17:48,780,rcvd1,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,
2015/12/02,07:17:48,937,rcvd1,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,
2015/12/02,07:17:49,103,rcvd1,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,
2015/12/02,07:17:49,259,rcvd1,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,3.1415926535897932384626,
2015/12/02,07:17:49,424,rcvd1,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,2.718281828,
```

- 1列目 : 2015/12/02 - 年月日
- 2列目 : 07:17:49 - 時分秒
- 3列目 : 424 - ミリ秒
- 4列目 : rcvd1 - どちらのCOMポートから受信したか
- 5列目 : 2.718281828,... - 受信文字列


### ログファイルの取り出し (SFTP接続)

RPi2でlinemonitor.pyを動かした場合、Log/フォルダへのアクセスはSFTP接続をすることになる。

以下はMacOS X 10.8.5にてCyberduckにてSFTP接続した時の画像。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/fc9f8c1d-d9cf-e037-c253-9e1949bd810c.png)

##TODO

- RPi2がIPアドレスをDHCPから取得できない場合でも、COM通信のログ保存はできるように
  - 現状ではUDP通信で停止する
- Log/がroot権限なのでユーザpiから削除できない。
  - ユーザpiで作成するか、chmod o+w のようなことをする
Xcode BotsでUIテストのテキスト入力が正しく行われない時の対応方法

Xcode BotsでKIFを利用したUIテストを実行した時に、英字での入力を期待しているが日本語での入力になってしまいテストが失敗した。

これはハードウェアキーボードが利用されてMacのIMの影響を受けている為だった。よってSimulatorがハードウェアキーボードに接続しないように設定するとソフトウェアキーボードで正しく文字入力が行えるようになった。

Build PhasesでRun Script Phaseを作成して以下のコマンドを実行するとSimulatorの設定が変更され、ソフトウェアキーボードを利用するようになる。
```
defaults write com.apple.iphonesimulator ConnectHardwareKeyboard 0
```

また、この設定を読み込ませる為に以下のコマンドでSimulatorを終了させておくと良い。
```
osascript -e 'quit app "Simulator"'
```
JAVA 練習問題(P108) ArrayList 



▪️Test51.java

```java
import java.util.ArrayList;
import java.util.*;

public class Test51 {
	public static void main(String[] args) {
		Hero01 h1 = new Hero01("田中");
		Hero01 h2 = new Hero01("安達");
		List<Hero01> names = new ArrayList<Hero01>();
		names.add(h1);
		names.add(h2);
		for (Hero01 i : names) {
			System.out.println(i.getName());
		}

	}

}
```


▪️Hero01.java

```java
public class Hero01 {
	private String name;
	private int hp;
	static int money;
	static int money2;

	public Hero01(String name) {
		this.hp = 100;
		this.name = name;
	}

	public Hero01() {
		this("ダミー");
		System.out.println("Hero22のコンストラクタが動作");
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		if (name == null) {
			throw new IllegalArgumentException("名前がnullである。処理を中断。");

		}
		if (name.length() <= 1) {
			throw new IllegalArgumentException("名前が短すぎる。処理を中断。");
		}
		if (name.length() >= 8) {
			throw new IllegalArgumentException("名前が長すぎる。処理を中断。");
		}
		this.name = name;
		System.out.println(this.name);
	}

}
```

▪️Test51.javaはこれでもいい

```java
import java.util.ArrayList;
import java.util.*;

public class Test51 {
	public static void main(String[] args) {
		Hero01 h1 = new Hero01("田中");
		Hero01 h2 = new Hero01("安達");
		List<Hero01> names = new ArrayList<Hero01>();
		names.add(h1);
		names.add(h2);
		Iterator<Hero01> it = names.iterator();
		while (it.hasNext()) {
			Hero01 e = it.next();
			System.out.println(e.getName());
		}

	}

}
```

▪️Test51.java
田中
安達

▪️Test91.java

```java
import java.util.ArrayList;
import java.util.*;

public class Test91 {
	public static void main(String[] args) {
		ArrayList<Integer> points = new ArrayList<Integer>();
		points.add(10);
		points.add(2);
		points.add(100);
		Iterator<Integer> it = points.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
	}
}
```

▪️Test91.java 実行結果
10
2
100
RMarkdownで目次と見出しの通し番号を自動生成

## この記事の目的
私が大好きなRMarkdownについて、Tipsを集中的に連載しようという思いつきの企画です。あと自分の中で進めている別企画のメモという位置づけでもあります。なので**大した中身はありません**。

### R Markdownとは
Markdown記法をベースに、チャンクという形でRのコードを記述して評価・出力することができるものです。RStudioのクイックリファレンスでは以下のように説明してあります:

> R Markdown is an easy-to-write plain text format for creating dynamic documents and reports. 

### 注意事項
この記事ではRStudioでの利用を前提にしています。[^1]

[^1]: rmarkdown::render()で実行すればそこまで気にしなくてもいい気もしますが、一応前提にします。

## 目次の自動生成
ある程度まとまったドキュメントを作成する場合、冒頭に見出しがあるとわかりやすいですね。そしてリンクも自動でついてくれるとなおいいですね。

Rmarkdown(というかpandoc)には、これを自動で生成してくれる機能がはいっています。Rmdファイルを作成した時に自動で生成される冒頭部分[^2]に、以下のように設定してください:

[^2]: ここはyaml記法となるので、書き方に注意してください。特に**左側の階段上になるスペースと`:`がつくかどうか**に注意してください。

```
---
title: "タイトル"
author: "kazutan"
output: 
  html_document:
    toc: true
---
```

この`output:`以降の部分を設定すると、toc(table of contents)が作成されます。なお、見出しにも深さのレベル(h1,h2,...)がありますが、「どの深さまで取り込むか」も指定できます[^3]。例えば「深さレベル3まで(h1とh2とh3まで)」としたいときは、以下のように指定します:

[^3]: デフォルト値は2です。

```
---
title: "タイトル"
author: "kazutan"
output: 
  html_document:
    toc: true
    toc_depth: 3
---
```

これで深さ3まで見出しに取り込みます。Rmd(md)だと、`# hoge`と`## hogeho`と`### hogehoge`までですね。

## 見出しに通し番号
ある程度まとまったドキュメントを作成する場合、見出しに通し番号を付けたほうがわかりやすくなります。ですがこれを手動で振っているとミスしたり面倒だったりします。

RMarkdown(というかpandoc)には自動でこれを割り当ててくれる便利な機能がはいってます。Rmdファイルを作成した時に自動で生成される冒頭部分に、以下のように設定してください。

```
---
title: "タイトル"
author: "kazutan"
output:
  html_document:
    number_section: true
---
```

これで自動的に見出しに通し番号が振られます。また見出しの深さレベルも自動的に評価して判断します。

おそらく両方を組み合わせて設定することが多いかと思います。ぜひ使ってみてください。

Enjoy!
Apacheを2.2から2.4にアップデートしたら、SubversionとRedmineが動かなくなった時の話


# いきさつ

aptでアップデートできるからと何も考えずにApacheを2.2から2.4.7にアップデートしたら、Apache経由で運用していたSubversionとRedmineが動かなくなった。
Subversionはすぐに解決できた。
同様の対処をRedmineにも適用したが、Apacheとの連携がうまくいかなかった。
色々試したのでどれが良かったのかわからずじまいだが、やったことをまとめる事にした。

# 原因

## 原因その１
私は知らなかった。次のコマンドがあることを。

* a2ensite
* a2dissite
* a2enmod
* a2dismod

## 原因その2

Apacheでアクセス制御するディレクティブが変更されていた[^1]。
以下の旧ディレクティブをRequireに置き換えた。

* Allow
* Deny
* Order

ちなみに[mod_access_compat](http://httpd.apache.org/docs/current/en/mod/mod_access_compat.html)というディレクティブを使えば旧ディレクティブも使えるらしい。

# 対処

## 対処その1
a2en...、a2dis...というコマンドを知らなかった私は、mods-enablesとsite-enableに直接シンボリックリンクを作っていた。
それが2.4.7では機能しなくなったらしい。
その対処方法として次のことをした。

* 手動で作った`/etc/apache2/site-enable`配下のシンボリックリンクを削除
* `/etc/apache2/site-available`配下のファイルに拡張子`.conf`を追加(ex. 001-redmine → 001-redmine.conf)
* `sudo a2ensite ファイル名`を実行

## その他の対処

それでもRedmineは動かず、`/var/log/apache2/error.log`を覗いてみるとRubyの実行でエラーが起きていた。
要は、ApacheとRailsの連携がうまくいっていなかったらしい。

### やったこと

* Rubyのバージョンアップ 2.2.2 → 2.2.3
* Passenger5.0.21をインストール(旧バージョン5.0.7)
* passenger-install-apache2-moduleを実行
* passenger.confファイルを分割、移動
* Redmineのアップデート(3.0.? → 3.0.6)

### passenger.conf

対処その1から推測すると、passenger.confのパスを移動してa2enmodを使用したことが、最も効果があったのではと思う。
`apache2.conf`ファイルのコメントを読んでも`/etc/apache2/conf.d/`に言及していないので、デフォルトではこのディレクトリを読み込まなくなったのだろう。
`/etc/apache2/conf.d/passenger.conf`の中身はpassenger-install-apache2-moduleで出力された内容の通りだったので、以下のようにファイルを分割して、他のモジュールと同様に配置した。

* `/etc/apache2/mods-available/passenger.load`でLoadModule
* `/etc/apache2/mods-available/passenger.conf`でIfModuleディレクティブの内容記述

分割、配置したらa2enmodコマンドで適用すること。

[^1]: [Upgrading to 2.4 from 2.2 Run-Time Configuration Changes](http://httpd.apache.org/docs/current/en/upgrading.html)
MilkcocoaのSDKについて

こんにちは @syuhei です。

Milkcocoaのロゴがしれっと大文字になりました。正式にはこのように大文字のMilkcocoaですのでよろしくお願いいたします。さて今日は[Milkcocoa](https://mlkcca.com/)のSDK(Software Development kit)について書きます。いろいろな場所で、Milkcocoaを使って欲しいため、SDKを高速開発中です。至らないところもあるかもしれませんが、その時はぜひお問い合わせください。[Twitter](https://twitter.com/syuhei_hiya)で@リプを頂けるとが割と高速に反応します。

##現在提供中のSDK

現在サイトにも記述している、提供中のMilkcocoa SDKは以下です。

- ブラウザ
- Node.JS
- Java

おかげさまで、これらのSDKについては、チュートリアルやサンプル、ユーザ様の記事もかなり充実しております。Java SDKについては、Milkcocoa Meetup vol 5で@i_ka_rashiさんが紹介してくださいました。AdventCalenderの明日の分でそれについて書かれるのではないかと思います。今回はこれ以外のSDKについて紹介いたします。実は現在ソースコードが[Github上](https://github.com/milk-cocoa)で公開されているSDKが複数存在します。

- [Swift](https://github.com/milk-cocoa/milkcocoa-swift-sdk)
- [ESP8266](https://github.com/milk-cocoa/Milkcocoa_Arduino_SDK)
- [Python](https://github.com/milk-cocoa/python_sdk)


この中でESP8266用のSDKについては[Milkcocoa Engineer Blog](http://blog.mlkcca.com/iot/milkcocoa-arduino/)に紹介記事もあります。Python SDKについても、python milkcocoa ngi644さんが書いてくださった記事([Milkcocoa Python SDK を試す](http://ngi644.net/blog/archives/1177))がございます。Python SDKはペッパーくんでも使えそうですね！

これらのSDKは特に機能などで未実装なものが多くあります、そこでOSS(Open Source Software)として提供することで、可能な限り早く皆様が使える状態にできると判断いたしました。またHistory APIなどはHTTPの仕様を公開することで、より実装しやすくすることも考えております。

##ライセンスについて

これらのSDKのうち、ほとんどはMITライセンスで提供されています。もし変なとこがございましたら、遠慮なくForkして、修正して、Pull RequestやIssueを投げてください。
参考情報ですが、それぞれのSDKは、以下のようにMQTTライブラリを利用して開発しています。

- Swift SDK(https://github.com/emqtt/CocoaMQTT)

- ESP8266 SDK(https://github.com/adafruit/Adafruit_MQTT_Library)

- Python SDK(https://eclipse.org/paho/clients/python/)

##まとめ

Milkcocoaというサービスがコミュニティの中でどのように成長していくか、とても楽しみです。クライアントSDKのOSS化はその第一歩だと思っております。皆様よろしくお願いします！
どの職種も意識しておきたい！進行における確認ポイント！

どうも、株式会社LIGでディレクターやってます阿羅漢です。

制作会社のディレクターとして、ものづくりを進めていく中で、ここは気をつけて確認しておかなきゃなぁということを備忘録としてまとめてみますー。

事業会社の方含め、さまざまな職種の方のご参考になるとうれしい。
というか、足りないとこあったら教えていただけると更にうれしい。

##POINT.1　前提条件はしっかりと説明！
![1.png](https://qiita-image-store.s3.amazonaws.com/0/103348/9a474e86-8fcf-d4d6-58a1-41c95b7418be.png "1.png")
制作側もクライアント側も、つい企画や表現の内容ばかりを話しがちですが、まずは下記のことを確認して書き起こしていくことが重要です。

**①誰に向けて、何のためにをつくるのか（ゴールの設定）**
**②予算を考慮して何を作ることができるのか(制作物の要件定義)**

なぜなら、はじめに進むべきゴールの方向を決めておかないと、途中で出てきたアイデアやブラッシュアップの内容が、本当に目的に合っているものなのかという判断がつかなくなってしまうからです。

また、予算の中で出来る範囲を一つひとつ丁寧に話をしておくことも大切です。

**要望があってから、「それは追加になってしまう」というような金額の話を持ち出してしまうのは、制作側も、クライアントも気持ちいいものではないからです。**
（もちろん、無理して予算内でやってしまうことを避けるのにもつながります。）

お互いのモチベーションが下げてしまうことは、制作のクオリティを120％まで引き上げられない大きな原因になってしまいかねないので、気をつけたいところっす！


##POINT.2　不透明な部分は、何度も確認！
![3のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/103348/7d57bb5e-881f-e038-0491-32f051e53828.png "3のコピー.png")
制作をすすめていくと、どうしても「これってどういう話になっていたかな？」、「やっぱりこうした方が良い！」など、クライアントに確認をとったほうが良いことが出てくることがあります。

その場合、予想で進めてしまわないことはもちろん、すぐに確認をした方が良いと思います！気づいた、思いついた、ということは、その内容を決めておく必要がある時だということっす。
**小回りよく、早めに確認しておくことで、後の工程で大きく致命的な手戻りになってしまうことを防ぎます。**
また、気軽に確認できるような関係を、クライアントと築いておくことも、一つのものづくりを行うチームとして大切なことかなって。



##POINT.3　追加事項、変更内容は資料にする！
![6.png](https://qiita-image-store.s3.amazonaws.com/0/103348/2ab9ca54-1a05-aef5-487f-940866e4a2f5.png "6.png")
突発的な追加依頼や、変更内容などは、電話、メールなどの言葉で簡単に済ませがち。
しかし言葉だけでは、主観による理解のずれが生じてしまう場合があるため、 **作業にとりかかる前に、ビジュアルつきの資料で、確認を取るようにしましょー！**

キャプチャに赤字を入れるなど、本当に簡単な資料で良いので、内容の可視化が大事。

また、クライアントから届いた資料がわかりづらい、話すたびに少しずつ内容が違う、なんてこともあるので、こちら側のフォーマットで整理して打ち返しつつ、記録を残していくことが大切ですー！

ちょっと面倒なのですが、じつは後々の面倒くさいことを防げているんです。
  
---
  

以上、ざっくりですが、まとめてみました！

エンジニアさんはテクニカルディレクターとして、デザイナーさんは、アートディレクターとして、クライアントと直接やり取りを行う場面もあるかと思います。

常に意識しながら進めていくことが、クオリティアップに集中するために時間を確保することになるんじゃないでしょか。死ぬほどやっても、時間は有限。効率アップしなきゃ（汗）
いい加減JavaScriptの文字括りを「'」にするか「"」にするか決着つけようぜ！

つけようぜ！

'にしようぜ派:
「HTMLの文字括りが " だからjsでHTML生成するときに捗るよ派」
「英語キーボードだとシフトキー押さなくて済むからエコだよ派」
"にしようぜ派:
「ほとんどの言語でこっちだからこっちにしたほうが捗るよ派」
「HTMLでもこっちなんだから当然こっちだろ派」
どっちでもいいよ派:
「そのプロジェクトごとになんとなく決めればいいよ派」
「 **`** だけ使うよ派（過激派）」

どちらにも言い分があるので、主要なプロジェクトでの採用状況を調べました。

# 採用状況

### **'** を採用しているプロジェクト

- Node.js本体
  - https://github.com/nodejs/node
  - https://github.com/npm/npm
- フレームワーク
  - https://github.com/angular/angular
  - https://github.com/facebook/react
- ビルドシステム
  - https://github.com/gruntjs/grunt
  - https://github.com/gulpjs/gulp

### **"** を採用しているプロジェクト

- jsトランスパイラ
  - https://github.com/babel/babel
  - https://github.com/Microsoft/TypeScript
- コード検証ツール
  - https://github.com/eslint/eslint
  - https://github.com/palantir/tslint

# 結果、**'** の勝利。だが、しかし...
結果として ' の方が多かったわけですが、トランスパイラやlintがどちらも " を採用しているのが興味深いです。
また、今回分野別に分けてみましたが、どの分野でも使っているものがブレていませんでした。
文字括り論争、今後の動向を見守りたいと思います。
LDAP環境を簡単にローカルへ構築する


# 要件
- Ubuntu13
- ldapi:///dev01.hoge.local:389,dc=hoge,dc=local


# インストール
```
$ apt-get install ldap-utils slapd ldapvi libnss-ldapd libpam-ldapd nscd
```
※LDAPAdministorator Passwordは「p0o9i8」
※libnss-ldap　libpam-ldapという名のパッケージもあるがこちらは古いらしい。紛らわしい。


# LDAP

- DN表記(コマンドラインでオブジェクトを指定する際に利用する)
	- 識別名（DN）
		- CN=...で始まる。
		- 組織単位(OU)
		- 組織(O)
		- ドメイン(DC)
		- 国(C)



- olcDatabase(DBの箱)





# ルートスキーマの作成
- 適当なディレクトリでldifファイルを作成

	```base.ldif
dn:ou=People,dc=hoge,dc=local
objectClass: organizationalUnit
ou: People
```

- 作成したldifファイルを読み込み	

	```
$ ldapadd -x -D cn=admin,dc=hoge,dc=local -W -f base.ldif
```  

　　-x シンプルな認証
　　-D LDAPにバインドするのに使用するDN。行う操作に必要な権限をもったDNを指定する必要がある。これ無しだとanonymousバインドになる。
　　-W プロンプトでパスワードを要求
　　-f ファイルを指定  

- 追加した内容を確認

	```
$ ldapsearch -x -D cn=admin,dc=hoge,dc=local -W -LLL -b dc=hoge,dc=local dn
Enter LDAP Password:
dn: dc=hoge,dc=local
dn: cn=admin,dc=hoge,dc=local
dn: ou=People,dc=hoge,dc=local
```


# スキーマの追加
- 現状読み込まれているスキーマの確認

	```
$ ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
```  


- 必要なスキーマの追加

	```
$ ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/openssh-lpk.ldif
$ ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/sudo.ldif
```


# ユーザーの追加

- 適当なディレクトリでldifファイルを作成

	```a123456.ldif
dn: uid=a123456,ou=People,dc=hoge,dc=co,dc=jp
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: ldapPublicKey
sn: hoge
cn: foo
uid: a123456
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/a123456
userPassword: {SSHA}9yfE3ENwK0oaC/zo4tFPnu3LpXTwAsnH
mail: hoge_foo@xxx.co.jp
loginShell: /bin/bash
```

	dn 追加する識別名
	objectClass 継承するオブジェクトクラスの指定
	 - inetOrgPerson 組織に属する人間の属性[参考](http://docs.oracle.com/cd/E19225-01/821-0779/bzapc/index.html)
	 - posixAccount POSIX抽象化の属性
	 - shadowAccount(shadowPasswordの追加属性)
	 - ldapPublicKey(公開鍵の追加属性)

	sn (Sir Name：姓)
	cn (Common Name：名)
	uid (ユーザー名)
	uidNumber (ユーザーID)
	gidNumber (グループID)
	homeDirectory (まんま)
	userPassword (まんま)※slappasswordコマンドで生成
	mail: (まんま)
	loginShell: (まんま)
	description: (まんま)

- 作成したldifファイルの読み込み

	```
$ ldapadd -x -D cn=admin,dc=hoge,dc=local -W -H ldapi:// -f a123456.lidf
```
	-H 対象ホスト  
　
- 追加したユーザーが存在するか確認

	```
	$ ldapsearch -x -D cn=admin,dc=hoge,dc=local -W -LLL -b dc=hoge,dc=local dn
	Enter LDAP Password:
	dn: dc=hoge,dc=local
	dn: cn=admin,dc=hoge,dc=local
	dn: ou=People,dc=hoge,dc=local
	dn: uid=a123456,ou=People,dc=hoge,dc=local
	```


# 設定 

```/etc/nslcd.conf
uid nslcd
gid nslcd
uri ldap://xxx.xxx.xxx.xxx
base ou=People,dc=hoge,dc=local
ldap_version 3
nss_initgroups_ignoreusers root
pam_authz_search (&(objectClass=posixAccount)(uid=$username))
```

```/etc/ldap/ldap.conf
URI ldap://xxx.xxx.xxx.xxx
BASE ou=People,dc=hoge,dc=local
TIMELIMIT 120
TIMEOUT 120
NETWORK_TIMEOUT 120
```


# 起動

```
$ /etc/init.d/nscd restart
$ /etc/init.d/nslcd restart
$ /etc/init.d/slapd restart
```

# 参考
- [LDAPの設計](http://www.atmarkit.co.jp/ait/articles/0807/17/news132.html)
- [OpenLDAP を Ubuntu 12.04 にインストール](https://sites.google.com/site/michinobumaeda/misc/openldap-ubuntu-12_04-install)
Nginxログローテートの設定の実例


## 設定

実行権限の確認

```bash
ll /etc/logrotate.d/nginx
-rw-r--r-- 1 root root 403 Nov 26 19:36 /etc/logrotate.d/nginx
```

logroteの設定

```bash:/etc/logrotate.d/nginx
# Do not modify this file by hand!

"/var/log/nginx/access.log" "/var/log/nginx/error.log" {
  missingok
  notifempty
  daily
  rotate 7
  create 644 www-data root # permission と owner は適宜注意
  compress
  delaycompress
  notifempty
  sharedscripts
  postrotate
      [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
  endscript
}
```

## 解説

プロパティ | 役割
------------|--------------
missingok | ログファイルが見つからなくてもエラーにしない。
rotate n | n世代までログをローテート。それ以上は削除
compress |  ローテートしてログを圧縮
delaycompress | 1つ前のファイルはまだ圧縮しない。それ以外を圧縮
notifempty | ログファイルが空ならローテーションしない
create | ローテーション後、新たにログファイルを作成する。権限、ユーザ、グループを指定。
sharedscripts | スクリプト宣言文。以降に記述された処理をワイルドカードの指定に関わらず、１度だけ実行する
postrotate | ログローテーション実施後に実行される部分

* 注意点として、ログを単純にローテートしても、Nginxのログの書き込み先は変わらない。
* そのためaccess.log.1とリネームして、新しくaccess.logを作ったとしても、ログはaccess.log.1に書き込まれ続ける。
* 書き込み先を新しいaccess.logにする処理をpostrotateに設定する。
  * この処理はnginx をインストールした際に設定されるものをそのまま使っている。
  * 権限周りでうまくログローテート出来ないなどあるため実行権限は一度確認する

* [kill option](http://h50146.www5.hp.com/products/software/oe/tru64unix/manual/v51a_ref/HTML/MAN/MAN1/0100____.HTM)

>
次のコマンドは指定されたシグナルを指定されたプロセスに送ります。
>
>     kill -USR1 1103
>
>
  このコマンドは SIGUSR1 シグナルをプロセス 1103 に送ります。 SIGUSR1 シグナ
  ルでとられるアクションは，ユーザが実行中の特定のアプリケーションによって定
  義されます。

## logrotate コマンド

編集したnginxファイルをdebugしたい場合は`-d`オプションを使う

```bash
logrotate -d /etc/logrotate.d/nginx 
```

```bash
reading config file /etc/logrotate.d/nginx

Handling 1 logs

rotating pattern: "/var/log/nginx/access.log" "/var/log/nginx/error.log"  after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log does not need rotating
considering log /var/log/nginx/error.log
  log does not need rotating
not running postrotate script, since no logs were rotated
```

手動で実行したい場合は`-f`を使う


```bash
logrotate -f /etc/logrotate.d/nginx 
```


### 参考
* http://www.mk-mode.com/octopress/2013/02/17/nginx-logrotation/
* http://christina04.hatenablog.com/entry/2015/07/21/094631
javascript jqueryメモ

# javascriptのメモ

## ページロード時に指定したアンカーへ移動する
`$(document).ready(function() {
        // チェックエラー時
        if( <?php echo $model->countErrMessages() ?> > 0){
          obj = document.getElementById("form_area"); 
          y = obj.offsetTop; 
          scrollTo(0,y);
        }
    });`

## diplay:noneした項目をチェックボックス押下時に表示／非表示にする
    `$(function(){
      // 基準
      $("#check_11").click(function() {
        $("#hid_check").slideToggle(this.checked);
      });
});`

## チェックボックスのチェックされているか確認する
        `if($("#check_11").prop("checked") ){
          $("#hidetc_check").slideToggle(this.checked);
        };`

## 文法メモ
`$(function(){
   xxxx;
   xxxx;
});`

意味：
AWSサーバーにログインできなくなった場合の対処



普段使いのMacが起動しなくなって新しくしたところ、使っていたAWSにログインできなくなったので、再度使えるようになるまでの、備忘録です。
SSHでログインできないと、クライアント上でしかログが確認できないし情報少なすぎて、ほんと辛いですね。。

# 新しいキーペアの作成（失敗）
前のMacが起動しなくなったので秘密鍵も失ったため、新しいキーペアを作成しました。
ですが、以下のエラーでログインできず。```-vvv``` して詳細なログも追いましたが、原因つかめず。

```.log
Permission denied (publickey).
```

# キーペアのインポート(失敗)
Mac上で```ssh-keygen```で秘密鍵・公開鍵を作成して、公開鍵をインポートし、秘密鍵のアクセス権も ```chmod 400 hoge.pem``` しましたが、さっきと同じエラーでログインできず。

# インスタンスにJavaSSHクライアント(MindTerm)を起動して接続確認(失敗)
クライアントの設定は指示通りやっているので問題ないと判断し、サーバー側がどうなっているのか確認したかったので、インスタンスに対してブラウザからJavaアプレットで繋ぐのを試みました。
いろんな確認ポップアップに対してすべて```Yes```で答えましたが、ログインの段階でターミナルが固まる、という動作を何度も繰り返したため、諦めました。

# 新しいインスタンスを作成して、ボリュームを付け替え
試しに、新しいインスタンスを作成したうえで、ボリュームの付け替えしたらどうなるかなと思って、やってみました。
手順を以下に残します。
* 新しいインスタンスの作成
* 接続できないインスタンスのインスタンスの状態を```停止```する。
	* このときに、ルートデバイスの値を控えておく。```/dev/xvda```など。
* 新しく作ったインスタンスの状態も```停止```する。
* ボリュームに表示される２つのボリュームをデタッチ。
* 接続できないインスタンスに紐付いていたボリュームを、新しく作成したインスタンスにアタッチ。
	* このときに入力するデバイスは、さっき控えておいたデバイスの値を入力。
* 新しく作ったインスタンスの状態を```開始```にする。
* Macからsshでつないでみる

自分はこれでうまくいきました。

ログインできたときの俺つえぇぇー！！感がたまんないですね（笑）
今どきのiAd実装

2日目にして早くも iOS Advent Calendar 2nd が途切れそうなので急遽書かせて頂きます！

# iAdの実装方法

## 一昔前

```
#import <iAd/iAd.h>
```

```objc
adView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];
adView.frame = CGRectMake(0, self.view.frame.size.height -
    adView.frame.size.height, adView.frame.size.width, adView.frame.size.height);
adView.autoresizesSubviews = YES;
adView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
adView.delegate = self;
[self.view addSubview:adView];
```

バナーオブジェクトを生成して、表示位置を表示して、回転時の表示に対応して、、いろいろ大変でした。

## 今

```swift
import iAd
```

```swift
self.canDisplayBannerAds = true
```

たったこれだけ！

![Simulator Screen Shot 2015.12.02 10.14.34.png](https://qiita-image-store.s3.amazonaws.com/0/8292/f2d12cbc-66c0-0c99-c896-2f215e829b9d.png)


画面の最下部にAdを表示してくれます。（[表示位置は変えられないようです](http://stackoverflow.com/questions/22311144/iad-banner-views-on-top-using-candisplaybannerads-yes)）

ちなみに、`canDisplayBannerAds` プロパティは iOS 7 から `UIViewControlleriAdAdditions` に追加されています。

```swift
@available(iOS 7.0, *)
public var canDisplayBannerAds: Bool
```

# インタースティシャルにも対応

あらかじめAdを読み込んでおき、

```swift
UIViewController.prepareInterstitialAds()
```

`interstitialPresentationPolicy` に `Automatic` を指定します。

```swift
self.interstitialPresentationPolicy = ADInterstitialPresentationPolicy.Automatic
```

![Simulator Screen Shot 2015.12.02 10.19.31.png](https://qiita-image-store.s3.amazonaws.com/0/8292/32e50dcf-276d-57b7-bf3f-aa9a0a78f4d0.png)

これだといつ表示されるかわからないので、任意のタイミングで表示することもできます。

```swift
self.interstitialPresentationPolicy = ADInterstitialPresentationPolicy.Manual
let displayed = self.requestInterstitialAdPresentation()
```

# どうやってAdを表示してるのか

試しに View UI Hierarchy で表示してみました。
 
![スクリーンショット 2015-12-02 10.38.39.png](https://qiita-image-store.s3.amazonaws.com/0/8292/22f1d8f2-fd47-e76b-9ac9-1b3ffbe19525.png)

UIViewController の subview として `ADBannerView` を addSubview しているようですね。

```
(lldb) po self.view.subviews
▿ 2 elements
  - [0] : <UITableView: 0x7f959983c600; frame = (0 0; 375 617); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x7f95995685d0>; layer = <CALayer: 0x7f95995597b0>; contentOffset: {0, -64}; contentSize: {375, 880}>
  - [1] : <ADBannerView: 0x7f959943bb30; frame = (0 617; 375 50); clipsToBounds = YES; layer = <CALayer: 0x7f959942e0c0>>
```

ちなみに、Ad表示前にもともと表示していたビュー（上の例だとUITableView）には `self.originalContentView` でアクセスできます。

```
(lldb) po self.originalContentView	
<UITableView: 0x7f959983c600; frame = (0 0; 375 617); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x7f95995685d0>; layer = <CALayer: 0x7f95995597b0>; contentOffset: {0, -64}; contentSize: {375, 880}>
```

# サンプルコード

ちょっと試してみたい方はこちら
https://github.com/koogawa/iAdSample

# 肝心のフィルレートは…？

その話はやめておきます。
terraform インスタンスに適用な可能なiam roleをファイルで管理する



インスタンスに適用な可能なiam roleをファイルで管理する。
公式のサンプルだとtfに直接書いてるのでメモ代わり

```
resource "aws_iam_role" "front" {
  name = "front"
  assume_role_policy = "${file("./iam/assume.policy")}"
}

resource "aws_iam_policy" "front" {
  name = "front"
  path = "/"
  description = "for front policy"
  policy = "${file("./iam/front_role.policy")}"
}

resource "aws_iam_policy_attachment" "front_role_attachment" {
  name = "front_role_attachment"
  roles = ["${aws_iam_role.front.name}"]
  policy_arn = "${aws_iam_policy.front.arn}"
}

resource "aws_iam_instance_profile" "front" {
  name = "front"
  roles = ["${aws_iam_role.front.name}"]
}
```
`./iam/assume.policy`と`./iam/front_role.policy`を置いて、
aws_instanceやaws_launch_configurationに次を追加すれば使えます。
```
  iam_instance_profile = "${aws_iam_instance_profile.front.id}"
```
rdocじゃねぇよmarkdownだよ現象

* ruby (2.2.2)
* rails (4.1.14)
* yard (0.8.7.6)

```ruby:.yardopts
--markup=markdown
--markup-provider=kramdown
```

    $ bin/bundle exec yard
    [error]: Invalid markup type 'rdoc' or markup provider (kramdown) is not registered.
    ../2.2.0/gems/yard-0.8.7.6/lib/yard/templates/helpers/html_helper.rb:101:in `html_markup_rdoc': undefined method `new' for nil:NilClass (NoMethodError)

原因: プロジェクト初期のREADME.rdoc を放置してた

```ruby:yardoc.rb
        readme = Dir.glob('README{,*[^~]}').first
        readme ||= Dir.glob(files.first).first if options.onefile
        options.readme ||= CodeObjects::ExtraFileObject.new(readme) if readme
        options.files.unshift(options.readme).uniq! if options.readme
```

「このファイル、拡張子.rdoc だからrdocだよね！」 -> 「……kramdownってなにそれ？そんなプロバイダーはrdocにはないよ(´・ω・｀)」というエラーなのであった。
[Java]int↔Stringとプリミティブ型の型変換

#[Java]int↔Stringとプリミティブ型の型変換
int→String

```
String str = String.valueOf(i);
```

String→int

```
 	
int i = Integer.parseInt(str);
```

　また、基本データ型(プリミティブ型)同士の変換は拡張のみが許されています。
　基本データ型とは, int,long,char,doubleなどです。
　記述方法は、「（変換後の型）変換前の変数」です。
（例）
int→double

```
int i;
double dbl = (double)i;
```
 	
　ほかにboolean型とString型とか、Object型とint型とかありますが割愛させていただきます。
 以上、よく使うJavaの型変換でした。
自分用のチートシート

# css
## テーブルの幅の固定
```
table-layout: fixed;
```

# Vim
## ファイル履歴
:ju
`<c-o>`で移動

# Smarty
## LOOP
```smarty
{section name=i start=1 loop=13}
    {$smarty.section.i.index}
{/section}
```
# windows
## DNSキャッシュの初期化
ipconfig /flushdns

# javascript
## 画面を閉じる
`<a href="javascript:window.open('about:blank','_self').close();">close</a>`

# PHP
## 配列の生成
```php
$result = array_pad([], 5, 0);
```

## 変数を文字列化
print_r($val, true);

## グループ一覧
cat /etc/group

## ユーザー一覧
cat /etc/passwd


# Linux
## メモリの確認
cat /proc/meminfo
free

## コマンド一覧
ls `echo $PATH | sed "s/:/    /g"`

## 置換
echo $PATH | sed "s/:/     /g"

## tcshで改行出力
set echo_style=sysv
echo "test\ntest"

## 文字列の置換

## プロセスの確認
pstree -ap

## scpが使えない
yum install openssh-clients

## 現在のシェルの確認
echo $SHELL

## 設定ファイル
vi /etc/httpd/conf/httpd.conf

## ルートファイル
cd /var/www/html

### 起動など
chkconfig httpd on
service httpd restart

### 削除
yum remove php56

### 外部から接続できない
vi /etc/sysconfig/iptables
service iptables restart

※iptablesのREJECTの前に追加する

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT


## php56のインストール
http://qiita.com/pakiln/items/645e8a97cde46b59f9f8

## ブラウザ
lynx
gでURL指定

## 解放ポートの確認
nmap

## プロセスの確認
top

## 日付の変換
date_format(date, "%y-%m")

## dump
mysql dump -u root --all-dtabases > dump.sql

## キャッシュを使用しない
select SQL_NO_CACHE from table;

## データベース一覧
show databases;

## テーブル一覧
show tables from {データベース名}

# Choco
## インストール済み一覧
choco list -lo
c++ builder XE4, 10.2 Tokyo > TeeChart > 時間軸の最大最小の設定 > target->Axes->Bottom->SetMinMax(setSt, setEd);

```txt:動作環境
C++ builder XE4
    TeeChart Lite v2013.08.130414
RAD Studio 10.2 Tokyo Update 2 (追記 2018/01/10)
    TeeChart v2016.17.160129 32bit VCL
```

TeeChartにて時間軸の最小と最大を変更しようとした。

参考
https://www.steema.com/files/public/teechart/java/v1/docs/Tutorials/tutorial4.htm

## try1 > 最小と最大を個別設定

上記を参考に以下を実行しようとした。
ここで、targetはTChart *型。

```test.cpp
	TDateTime setSt, setEd;

	setSt = VarToDateTime("2015/12/02 10:00");
	setEd = VarToDateTime("2015/12/02 12:00");

	target->Axes->Bottom->Minimum = setSt;
	target->Axes->Bottom->Maximum = setEd;
```

以下のエラーダイアログが表示された。

> XXX
> Axis Minimum Value must be <= Maximum.

最小を設定する時に、現在の最大の値によりエラーが出る。


## try2 > 最小と最大を同時設定

再度、参考ページを確認して、以下でできることが分かった。

```test2.cpp
	TDateTime setSt, setEd;

	setSt = VarToDateTime("2015/12/02 10:00");
	setEd = VarToDateTime("2015/12/02 12:00");

	target->Axes->Bottom->SetMinMax(setSt, setEd);
```
会社の金でHHKBを買った話

この記事は(ry
http://qiita.com/advent-calendar/2015/sansan

# 誰よお前
エンジニアとしてご飯を食べ始めて9ヶ月のHaiToです。
最近では[Omotesando.rb](http://omotesandorb.connpass.com/)で発表したりしてます。

最近弊社ではいろいろなものが会社の金で買えるようになりました。

```
ハードウェアで年間３万円
ソフトウェアで年間２万円
```
それだけのお金で~~遊ぶ~~環境を整備したりいろいろなソフトウェアを試すことが出来ます。
人事施策サイコーですね。弊社ではもともと月額5kまで書籍代があったのですが、その拡張版です。
その書籍代も年間6万円になり、DDDも自己負担ゼロで買えるようになりました。
やりますね弊社。その調子でもっと広い机を買ってください。

> 12/1 から。ちょうど昨日

というわけで当日にサクッとHHKBを買ってオフィスに届けてもらいました。AmazonPrimeなので当日！　人類の(ロジスティクスの)勝利だ！

# こんな感じ
![2015-12-01 17.57.16.jpg](https://qiita-image-store.s3.amazonaws.com/0/37097/5d4b0de2-5763-fbed-a7b2-1875f1cefe09.jpeg)

元から持っていたHHKBと合わせて二刀流になりました。
以前どこかの記事で見た二刀流をみてやりたい！　と思ったのでやってみました。

机の上が汚いというのは気にしないでください。

HHKB二刀流試して一日たちますが、慣れてきてやっぱ良いですね。
HHKBがもともと良いのは言わずものがなですが、二刀流にしたことで姿勢に無理がなくなりました。

弊社の皆、HHKB(あるいはリアルフォース)買ったほうが良いですよ。
大した話ではないのだが、ずーっと困っていた件


### MacOS/XでSubversionのクライアントにVersionsを使いたいのに、UTF-8-Mac問題で困ってる

よくある話ですが、後ろ向き解決策を見つけました。
最新バージョンとかだと、この問題に当たる確率が高く、泣く泣くバージョンを下げて対応しようとしましたが、

> http://versionsapp.com/releasenotes

から辿れるダウンロード可能なブツはどれもダメ。そういうさなか、

> Versions 1.3 Open Beta
> https://blackpixel.com/writing/2013/11/versions-13-open-beta.html

を発見！ベータであるとかそんなのは見なかったことにして、コレを使うことでようやく解決。
だって、ディレクトリごとの操作とか困っちゃうしね。

因みに、UTF-8-Macというのはこういうことだそうです。またひとつモノを覚えちゃった(押し出されて忘れた何かもある)。

> UTF-8-MAC なんていう文字コードはありません
> http://tama-san.com/utf-8-mac_1/
リポジトリ内の状態を把握しやすくする

便利であった
https://github.com/rimraf/k

```zsh:~/.zshrc
zgen load rimraf/k
```

```shell-session
uraura@rosemary$ k --human
total 176
-rw-r--r--  1 uraura staff  220 17 Sep   13:50 | Bowerfile
-rw-r--r--  1 uraura staff  817 17 Sep   13:50 | Capfile
-rw-r--r--  1 uraura staff 3.8K  1 Dec   16:33 | Gemfile
-rw-r--r--  1 uraura staff  14K 20 Nov   14:30 | Gemfile.lock
-rw-r--r--  1 uraura staff 1.3K 20 Nov   14:30 | Makefile
-rw-r--r--  1 uraura staff 8.1K 17 Sep   13:50 | README.md
-rw-r--r--  1 uraura staff  478 17 Sep   13:50 | README.rdoc
-rw-r--r--  1 uraura staff  248 17 Sep   13:50 | Rakefile
drwxr-xr-x 19 uraura staff  646 20 Nov   14:30 | app
drwxr-xr-x  9 uraura staff  306 17 Sep   13:50 | bin
-rw-r--r--  1 uraura staff  802  9 Oct   18:49 + circle.yml
drwxr-xr-x 23 uraura staff  782 26 Nov   15:48 | config
-rw-r--r--  1 uraura staff  396 17 Sep   13:50 | config.ru
drwxr-xr-x  7 uraura staff  238 14 Oct   09:58 | coverage
drwxr-xr-x 10 uraura staff  340  1 Dec   14:25 | db
drwxr-xr-x  4 uraura staff  136 16 Oct   12:09 | doc
drwxr-xr-x  7 uraura staff  238  9 Oct   18:49 + lib
drwxr-xr-x  7 uraura staff  238 26 Nov   10:43 | log
drwxr-xr-x 38 uraura staff 1.3K 20 Nov   14:30 | public
drwxr-xr-x 26 uraura staff  884 30 Nov   11:27 | spec
drwxr-xr-x  3 uraura staff  102 17 Sep   13:50 | system
drwxr-xr-x  6 uraura staff  204 26 Oct   16:31 | tmp
drwxr-xr-x  3 uraura staff  102 17 Sep   13:50 | vendor
```

実際は色が付いてたりするのでぱっと見でわかって良いですね．
[備忘録]RassberyPI Flaskインストール

・pythonを2.7.9にする

1.ssl関連のインストール
`sudo apt-get install libffi-dev libssl-dev`

2.pythonのインストール

```sh:
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
tar xvf Python-2.7.9.tgz
cd Python-2.7.9/
./configure && make && sudo make install
```

3.pipインストール
`curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | sudo python`

4.Flaskインストール
`sudo pip install Flask`

5.サンプル

```py
import flask

app = flask.Flask(__name__)

@app.route('/')
def index():
    return "Hello Hogee"

if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=True)
```

`host='0.0.0.0'`で、外部からアクセスできる。。
mongodb3.0.x 設定ファイルテンプレ

# /usr/local/mongodb/ 以下に構築する場合の設定周り
## 1. ディレクトリ構成
バイナリをDLして適当に配置してください。

```
# mkdir -p /usr/local/mongodb/conf
# mkdir -p /usr/local/mongodb/logs
# mkdir -p /usr/local/mongodb/tmp
# ln -s <path to data path> /usr/local/mongodb/data
# ln -s <path to bin path> /usr/local/mongodb/bin
```
## 2. Keyfileを作る
MongoDB3系からセキュリティ周りが厳しくなり、replica-setへJOINさせる際にkeyfileによる認証が必要になりました。
StandAloneの場合は不要です。

```
openssl rand -base64 741 > /usr/local/mongodb/conf/mongod.key
```

## 設定ファイルテンプレ
しっかり設定しなければならないのは以下の２点くらい

### storage.wiredTiger.engineConfig.cacheSizeGB: 100
インデックス構築や、cursor処理、メモリリーク（orz...）でも消費されるので
現状ではメインメモリの80% 程度に調整しておいた方が良さそうです。

### replication.oplogSizeMB: 102400
これは用途によって適当に。。

```
processManagement:
  fork: true
  pidFilePath: /usr/local/mongodb/logs/mongod.pid

net:
  port: 27017
  maxIncomingConnections: 1000000
  unixDomainSocket:
    enabled: true
    pathPrefix: /usr/local/mongodb/tmp/
  http:
    enabled: false
    JSONPEnabled: false
    RESTInterfaceEnabled: false

security:
  authorization: enabled
  javascriptEnabled: true
  keyFile: /usr/local/mongodb/conf/mongod.key

operationProfiling:
  slowOpThresholdMs: 1000
  mode: slowOp

storage:
  engine: wiredTiger
  dbPath: /usr/local/mongodb/data
  directoryPerDB: true
  indexBuildRetry: true
  syncPeriodSecs: 60
  wiredTiger:
    engineConfig:
      cacheSizeGB: 100
      statisticsLogDelaySecs: 0
      journalCompressor: snappy
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: snappy
    indexConfig:
      prefixCompression: true
  journal:
    enabled: true

replication:
  oplogSizeMB: 102400
  replSetName: MyRS
  secondaryIndexPrefetch: all
```
Dockerの外部からアクセスするときにハマったこと(WEBrick)

書き手→Linux、Docker初心者です
結論→結果的にうまくいったけど、いろいろ未解決。

#構成はこんな感じ
・HostOS (Windows)　※ネットワークはProxyを通している
・GuestOS (VM/CentOS6.7)
・上記にDocker、CentoOS6.7、Ruby 2.1.7、RubyonRails4.2.5をインストール

##やりたいこと
RubyonRailsにテストアプリを乗せて、開発標準で付いているWEBrickを起動し、
Docker外(=GuestOS)からブラウザを立ち上げてアクセスできることを確認する。

##やってみたら接続できない
Docker上でIPを確認した後(172.17.0.1)、WEBrickを立ち上げる
※あらかじめ適当にアプリを作っておく

```sh:docker側
rails s                                                                                                                                                             
=> Booting WEBrick
=> Rails 4.2.5 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
```

GuestOSでFireFoxを立ち上げて
ttp://xxx.xx.0.1:3000
にアクセス。

するとブラウザは「正常に接続できません」と表示されたので、
サーバは立ってるし、Proxyが怪しい、と目をつけてみる。

実際、GuestOSとDocker間でpingは通るので、
試しにcurlを投げるとproxyが原因でアクセスが遮断された、と出た。

##というかなぜproxyを通ろうとしているのか
vethで通信をやりとりするのでproxyは通らないよね・・・？と思っていたのだが。。。
一応GuestOS側で確認したら、仮想ブリッジdocker0に紐づいたvethインターフェースが認識されている。
※brctl showで確認

Docker側でネットワークの向こうからinstall するために
wget、rbenvや/etc/sysconfig/dockerにproxyの設定をしているので
それが悪さしているのかと思い、とりあえず色々コメントアウト。
それでもproxyを通ろうとしているので埒があかず、
GuestOSで確認しようとしていたブラウザのproxyを通さないでやってみたらパケットは認識した。

##localhost

それでもつながらない。
WEBrickでポートを指定して起動して、Docker側でも-pをつけてrunしているのにつながらない。

とふと見たら、WEBrick側、起動時のログに「http://localhost:3000」って書いてる・・・。
試しにIPアドレスを0.0.0.0で指定

```sh:WEBrick起動
rails s -b 0.0.0.0                                                                                                                                                             
```

で起動したらうまくいった。


#結果
とりあえずやりたいことはできた。
しかし結局、GuestOSのどこかのproxyが原因でなかなか繋がらなかったが、どの設定なのかがわからなかった。
Excel で正規表現を使えるようにする

# 概要

Excel の関数や、VBA の中で正規表現を使いたいと思うことは多いと思います。
下記のようにすると使えるようになりますよ。


# VBA の画面から下記のモジュールを追加します。

```vbnet
Option Explicit

'正規表現で一括置き換え
Public Function RegExpReplace(SrcStr As String, RegStr As String, RepStr As String) As String
    RegExpReplace = GetRegExp(RegStr:=RegStr, IgnoreCase:=False, IsGlobal:=True).Replace(SrcStr, RepStr)
End Function

'正規表現で検索
Public Function RegExpMatch(SrcStr As String, RegStr As String) As Boolean
    RegExpMatch = GetRegExp(RegStr:=RegStr, IgnoreCase:=False, IsGlobal:=False).Test(SrcStr)
End Function

'正規表現オブジェクト取得
Private Function GetRegExp(RegStr As String, Optional IgnoreCase As Boolean = False, Optional IsGlobal As Boolean = True) As Variant
    Dim Reg
    Set Reg = CreateObject("VBScript.RegExp")
    Reg.Pattern = RegStr '正規表現文字列
    Reg.IgnoreCase = IgnoreCase     '大文字と小文字を区別しないか
    Reg.Global = IsGlobal          '文字列全体を検索
    Set GetRegExp = Reg
End Function
```

やることは、これだけです。
ただし、 xlsx じゃなくて、xlsm （マクロ含む形式）で保存しないといけませんけどね。

# 使い方（関数として使う場合）

たとえば、下記のようにすれば A1 の文字列中に含まれる数字が [] で囲まれることになります。

```
=RegExpReplace(A1, "(\d+)", "[$1]")
```

下記のようにすれば A1 の文字列中に数字が含まれるかどうかを TRUE / FALSE で返すようになります。

```
=RegExpMatch(A1, "\d")
```


# 使い方（VBAとして使う場合）

関数と同様に下記のように使えます。

```vbnet
strReplaced = RegExpReplace(strTarget, "(\d+)", "[$1]")
```

```vbnet
boolMatched = RegExpMatch(strTarget, "\d")
```
Projectileのキャッシュをクリアする


ファイルの削除やリネームを行うと、キャッシュが汚れて
期待通りの動作をしなくなることがあります。

その場合は、以下のコマンドでキャッシュをクリアしてください。

```emacs
M-x projectile-invalidate-cache
```
インコ式静岡新聞のご紹介

# インコ式静岡新聞のご紹介

まずはこちらのビデオをご覧ください。

[![インコ式静岡新聞](http://img.youtube.com/vi/ZQdAb2Zs0IM/0.jpg)](http://www.youtube.com/watch?v=ZQdAb2Zs0IM)

（昨日聞いたような言い回しですね）静岡県で 2009 年から 2010 年まで放送されていた、静岡新聞社さんの企業 CM です。インコ勢に絶大な人気を誇っていたようですが、静岡県に住んでいるのにぼくは知りませんでした（あまりテレビを見ないのです...）。

CM では 2030 年開始予定となっていますが、これを実現する要素が徐々に整いつつあるそうで、2015 年の今年、まずはスマホアプリから開始するということです。

* [iOS 版はこちら](https://itunes.apple.com/jp/app/inko-shi-jing-gang-xin-wen/id1033049927?l=ja&ls=1&mt=8)
* [Android 版はこちら](https://play.google.com/store/apps/details?id=jp.inkoshiki&hl=ja)

さて、肝心のアプリの内容なのですが、下記の機能があります。

* 目覚まし
* 厳選ニュース 3 本（ニュースの音声読み上げ）
* 記念日カウンタ
* 天気予報
* インコの着せ替え

とてもシンプルですね。ニュースは全国のものもありますが、地元、静岡県のニュースが多い印象です。静岡県に住んでいる方はもちろん、出身は静岡県だけれど今は県外にお住まいの方も思わずニヤリとするニュースはいかがでしょうか。帰省される際のネタになるかもしれませんね！

## Titanium

というわけで、こちらのインコ式静岡新聞アプリは Titanium を使い、iOS / Android 両対応で作られています（技術的なお話は 12 月 10 日のアドベントカレンダーまでしばし待たれよ！）。アプリの開発はぼくの所属する会社でお手伝いさせていただいたのですが、なんと、会社を作ってから今まで静岡県のお客さまのお仕事をしたことがなかったのです。初めての静岡県のお仕事が、小さな頃から知っていた「静岡新聞」のお仕事なんて、嬉しい限りです。

## 新聞に掲載されました

![12219332_920061364729981_8299040968170890064_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/47686/85604106-ee61-a026-780a-bcf26dfa5bae.jpeg)

静岡新聞を見ることができないアナタ！大丈夫です。今なら JR 静岡駅、もしくは、JR 浜松駅に足を運べば駅のコンコースで巨大なインコを直に見ることができますよ！

![12279206_920091238060327_6894217037382085495_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/47686/5777c4ba-07f5-627f-ffef-1e232cd4fb52.jpeg)


## 関連サイト

もっと詳しく知りたい！という方はこちらをどうぞ。

* [インコ式静岡新聞オフィシャルサイト](http://inkoshiki.jp/)
Vagrant から VirtualBox が起動できなくなった時のメモ

`vagrant up` すると、以下のようなエラーが出る。

```
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'starting, running'. The machine is in the
'poweroff' state. Please verify everything is configured
properly and try again.

If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run `vagrant up` while the
VirtualBox GUI is open.

The primary issue for this error is that the provider you're using
is not properly configured. This is very rarely a Vagrant issue.
```

> VirtualBox の GUI を使ったら詳しいエラー情報あるかもね

っぽいことが書いてあるようなので、開いてみる→USB2.0 がどうのと言っている→Extension Pack が必要っぽい。

以下からダウンロード→インストールしたところ、無事に起動できました。
[Downloads – Oracle VM VirtualBox](https://www.virtualbox.org/wiki/Downloads)

※Version 5.0.10 r104061
python > datetime > msecを取得する > msec = int(round(time.time() * 1000)) % 1000

```txt:動作確認
CentOS 6.5
```

現在時刻のmsecを取得したい。

参考
http://stackoverflow.com/questions/5998245/get-current-time-in-milliseconds-in-python


```151202a.py
import time

for loop in range(0,3):
	msec = int(round(time.time() * 1000)) % 1000
	print msec
	time.sleep(0.1)
```

```txt:結果
[toLearn]$ python 151202a.py 
283
384
484
```

だいたい100msecごとにmsecの値が表示できている。
git > タグを消す > git tag -d v0.7 / git push origin :v0.7

リモートと合わせてタグを消す方法

v0.7というタグを消す場合。

```
$ git tag -d v0.7 
$ git push origin :v0.7
```

参考
http://qiita.com/Iida_t/items/03a8e9dd97e59173f731
技術英語 > Unfortunately, [that's not an option] at the moment. / We [had no other option but to] go home.

@ Star Trek Voyager > ELOGIUM

危険な状態にある船を今すぐ違う場所へ移動させた方が良いと言うドクターに対してのJanewayの回答

> Unfortunately, <font color=red>that's not an option</font> at the moment. 「残念だけど、今はできない。」

先の場面で船が原因不明の故障に陥っていた。

<hr>
関連して思い出したのは

> We <font color=red>had no other option but to</font> go home. 「家に帰るしかしょうがなかったんだよ」

ソースは失念。何かのドラマで聞いたような気がする。

optionがない -> 仕方がない、という取り方。

no other option の部分は no other options だったかもしれない。
wp-config.phpでURLやwp-configの場所を定義する


## ディレクトリ構成

├ **index.php**
├ **wp** (gitのsubmoduleとしてWordPressをインストールする)
├ **wp-content** (wp/wp-contentの内容を複製して外に置く)
└ **wp-config.php**


## wp-config.php, index.php


```wp-config.php
$URL = 'http://YOUR_DOMAIN';

# WordPress Address
define('WP_SITEURL', $URL.'/wp/');

# Site Address
define('WP_HOME', $URL.'/');

# wp-content Directory
define('WP_CONTENT_DIR', dirname(__FILE__).'/wp-content');

# wp-content Address
define('WP_CONTENT_URL', $URL.'/wp-content');

```

```index.php
<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require('./wp/wp-blog-header.php');
```
PayPal  Technical Slides

Payment Advent Calendar 1日目です。急遽勢いで立ち上げてしまったが頑張るぞーっと。

１日目として、日本のみなさんにはあまり馴染みのないかもしれないPayPalの技術スライドをいくつかピックアップしてみました。
僭越ながら、今年の振り返りとして色んなところで喋った私のスライドも載せさせていただきます。

# API、バックエンド編
おもにバックエンドのAPIプラットフォームの構成などを説明したスライドです。
さすが歴史が長いだけあって格闘の歴史が垣間見えます。
2つ目のスライドのp14の構成図でAPI facadeパターンについて書かれているのは興味深いです。
[Evolution of PayPal API Platform at API Meetup]
(http://www.slideshare.net/deepaknadig/evolution-of-paypal-api-platform-at-api-meetup)
[Craft Conference 2015 - Evolution of the PayPal API: Platform & Culture](http://www.slideshare.net/deepaknadig/craft-conference-2015-evolution-of-the-paypal-api-platform-culture)
[PayPal Real Time Analytics](http://www.slideshare.net/anilmadan902/paypal-business-intelligence-and-real-time-analytics)

# Node.js、フロントエンド編
PayPalは全世界で利用できるグローバルサービスですが、UIの仕様やリリースタイミングが各地域で異なっていたりします。そんな複雑なフロントエンドの仕様をどうさばいているかの資料です。
先日の東京Node学園祭でも、PayPalがnode.jsのエンタープライズ事例として紹介されていました。
こちらも長い歴史との格闘が書かれていて、その中で生まれたOSS、Kraken jsと共に語られていることが多いです。
ちなみに、たまにPayPalはJavaをNode.jsで書き換えた的な発言を見つけますが、上記にあるとおり、バックエンドは様々な資産が生きており、フロントエンドのJSP資産を新しいJavaScript資産に置き換えているのが正しい認識かと思います（さすがに決済系を全てNode.jsで書くのはどうかと個人的には思います）。
[Kraken js at paypal](http://www.slideshare.net/lennymarkus/node-js-at-paypal)
[KrakenJS](http://www.slideshare.net/PayPal/krakenjs)

# 決済全般、セキュリティ編
USのAdvocatorで日本のBattleHackにも来てくれた[Jonathan LeBlanc](http://www.slideshare.net/jcleblanc/presentations)氏の資料です。
テクニカルライターということもあって、スライドとして非常にみやすいです。
[Secure Payments Over Mixed Communication Media](http://www.slideshare.net/jcleblanc/secure-payments-over-mixed-communication-media)
[Protecting the Future of Mobile Payments](http://www.slideshare.net/jcleblanc/protecting-the-future-of-mobile-payments)

# 日本語での入門編
私のスライドになりますが、日本でのPayPalの仕様や取り組みをわかりやすく伝えるために書いたものです。２つ目のスライドでは珍しく法令的なものにもふれています。
[API Meetup #8 PayPal API](http://www.slideshare.net/junichiokamura/api-meetup-8)
[Shinjuku.rb 20151125 PayPal 101](http://www.slideshare.net/junichiokamura/shinjukurb-20151125-paypal-101)

# まとめ
全般的に長い歴史をもつシステムの課題克服へのアプローチが多くて、決済以外にも色々参考になる部分があるのではないでしょうか？

実はPayPalはAPIエコノミーの促進にも積極的でして、[Open API Initiative](https://openapis.org/news/announcement/2015/11/new-collaborative-project-extend-swagger-specification-building-connected)に参画したり、REST APIの[HATEOAS Link](https://developer.paypal.com/docs/api/#hateoas-links)や[Webhook](https://developer.paypal.com/docs/integration/direct/rest-webhooks-overview/)の仕様は広く参考にされています。
このあたりは、後日のAdvent Calendarで触れられたらとおもいます。

PayPalの技術情報に興味のある方は、[技術ブログ](https://devblog.paypal.com/)のほうもあさってみてもいいかとおもいます。

「こんなスライドもあるよ？」とかあればぜひおしえてください！
unzip 覚書

# Usage:
```
unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
```

list の中にあるファイル(xlist と exdir を除く)を展開する。
file[.zip] はワイルドカードを使用することができる。

## unzip -Z
ZipInfo モードを実行する。

## unzip -p
パイプへファイルを展開する。メッセージは表示しない。

## unzip -l
下記の形式でファイルの一覧を表示する。

```
Archive:  test.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     2324  2015-12-02 02:18   unzip.md
---------                     -------
     2324                     1 file
```

## unzip -f
既存のファイルを更新する。ファイルの作成は実行しない。

## unzip -t
圧縮ファイルのデータに破損がないかテストする。

## unzip -u
ファイルを更新する。必要があればファイルを作成する。

## unzip -z
アーカイブコメントのみを表示する。

## unzip -v
unzip のバージョン情報、または下記の形式でファイルの一覧を表示する。

```
Archive:  test.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
    2324  Defl:N     1269  45% 2015-12-02 02:18 69bcf956  unzip.md
--------          -------  ---                            -------
    2324             1269  45%                            1 file
```

## unzip -T
圧縮ファイルのタイムスタンプを更新する。

## unzip -x
xlist に含まれるファイルを除外する。

## unzip -d
exdir へファイルを展開する。

# modifiers:
## unzip -n
既存のファイルを上書きしない。

## unzip -q
メッセージを表示しない。

## unzip -o
プロンプトを表示せずにファイルを上書きする。

## unzip -a
テキストファイルを自動変換する。

## unzip -j
ディレクトリを作成しない。

## unzip -aa
全ファイルをテキストとして扱う。

## unzip -U
非アスキーユニコードをエスケープする。

## unzip -UU
ユニコードフィールドを無視する。

## unzip -C
大文字/小文字を区別しないファイル名

## unzip -L
名前を小文字に変換する。

## unzip -X
UID/GID 情報を復元する。

## unzip -V
VMS バージョン番号を保持する。

## unzip -K
setuid/setgid/tacky の権限を保持する。

## unzip -M
コマンドの出力を more ページャへパイプする。

## unzip -O CHARSET
DOS, Windows, OS/2 向け圧縮ファイルの文字エンコードを指定する。

## unzip -I CHARSET
UNIX 向け圧縮ファイルと他の圧縮ファイルの文字エンコードを指定する。