OmniAICreator/Qiita-1.07M huggingface dataset:
LaTeXでn進数から10進数への変換式


n進数から10進数への変換式をlatexで作成．

```latex:test.tex
\documentclass{article}

\usepackage{xstring}
\usepackage{xifthen}
\usepackage{pgf}

\usepackage{amsmath} % align

\begin{document}

\newcounter{ep}
\newcounter{index}

\newcommand{\toD}[2][2]{
   \StrLen{#2}[\mystrlen]
   \setcounter{ep}{\mystrlen}
   \setcounter{index}{0}%
   \whiledo{\value{index} < \mystrlen}{%
      \addtocounter{ep}{-1}
      \stepcounter{index}%
      \StrChar{#2}{\theindex} \times #1^\theep
      \ifnum\theep>0{{}+{}}\fi
   }
}
\newcommand{\toDD}[2][2]{
   \StrLen{#2}[\mystrlen]
   \setcounter{ep}{\mystrlen}
   \setcounter{index}{0}%
   \whiledo{\value{index} < \mystrlen}{%
      \addtocounter{ep}{-1}
      \stepcounter{index}%
      \StrChar{#2}{\theindex} \times 
      \pgfmathint{#1^\theep}\pgfmathresult
      \ifnum\theep>0{{}+{}}\fi
   }
}

\begin{align}
(0334)_8 &= \toD[8]{0334} \\
         &= \toDD[8]{0334} \\
%
(1011011)_2 &= \toD{1011011} \\
            &= \toDD{1011011}
\end{align}

\end{document}
```


こうなります．

![スクリーンショット 2016-12-11 22.56.46.png](https://qiita-image-store.s3.amazonaws.com/0/44835/6f6d9369-a922-0fc2-1385-e20ae56eaf26.png)
Elasticsearch with RoRで色んな検索をしてみる。その1

自分がハマったので記述してまいります。
記述するって結構コストかかることなので、毎度適当にやってしまう自分がいる。。。ショボーン(´･ω･`)


Elasticsearchを利用しており、WEB画面をRails5で実装しようとした時のことです。
RoRとESでModel管理するのが面倒だなーと思っていたところ、
gemにelasticsearchがあることを知りました。

これは使えるんじゃないか。
ということで利用しようとしたところ、まとまってないことがあったので記述します。

### サーバ環境

私が利用している環境は以下の通りです。

OS : Centos 6.8
Editor : vim

### Elasticsearch

Elasticsearchをサクッとインストール

```
### rpm追加
$ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
### 確認
$ cat /etc/yum.repos.d/elasticsearch.repo

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

### install
$ yum install -y elasticsearch

### service start
$ service elasticsearch start

### 一応chkconfig追加
$ chkconfig --add elasticsearch

### 一応確認
$ curl localhost:9200 | jq .
```

### Gemfile

RoRがインストールされていることが前提です。

Gemfileに以下の４つのGemfileを追加します。

```
$ vim Gemfile
[snip]
### elasticsearch
gem 'elasticsearch',       git: 'git://github.com/elasticsearch/elasticsearch-ruby.git'
gem 'elasticsearch-dsl',   git: 'git://github.com/elasticsearch/elasticsearch-ruby.git'
gem 'elasticsearch-model', git: 'git://github.com/elasticsearch/elasticsearch-rails.git'
gem 'elasticsearch-rails', git: 'git://github.com/elasticsearch/elasticsearch-rails.git'
[snip]
```

### 設定ファイル

RoRの初期設定ファイルを設定します。
ない場合は以下ような形で追記ください。

```
$ config/initializers/elasticsearch.rb
elasticsearch_url = ENV['ELASTICSEARCH_URL'] || ENV['WERCKER_ELASTICSEARCH_URL'] || 'http://localhost:9200'
Elasticsearch::Model.client = Elasticsearch::Client.new(host: elasticsearch_url)
require 'typhoeus/adapters/faraday'
```

- localhost部分は適当に変更して利用してください。
- require 'typhoeus/adapters/faraday'が何かのエラーで必要だったが、、、忘れたので割愛、気分が出たら調べます。


## RoRで設定する

RoRの model, controller, view で利用する方法を記載します。

### Model設定

ESのインデックスを指定する記述内容です。
また、ディレクトリはconcernsじゃなくても ../ のディレクトリでもOKです。

```
$ cat ./app/models/concerns/xxx.rb
class Xxx < ApplicationRecord

  include Elasticsearch::Model ### こいつが重要

  index_name "es_#{Rails.env}" ### 環境別にしてみる。
  document_type 'test'         ### 書かなくてもOK 今回は一応
 
end
```

以降の基本的な設定は [Rails Webookさんのページ](http://ruby-rails.hatenadiary.com/entry/20151018/1445142266#rails-elasticsearch-1-freetext-keyword) を参照してください。
長くなってしまう。。。

### controllerで呼び出す。

上記設定したXxxモデルに、以下のようなメソットがあるとします。

```
$ cat ./app/models/concerns/xxx.rb
 [snip]

 def self.search(params = {})
  keyword = params[:q]
  [snip]
 end
```

この場合controllerで以下のような呼び出しができます。

```
$ cat app/controllers/test_controller.rb

  def index
    @searchs = Xxx.search(params)
  end
```

### Viewで表示する。

model, controllerが揃ったところで、
Viewで表示して見ます。


```
$ cat app/views/tests/index.html.haml

### 検索結果数
= "検索結果: 約 #{@searchs.results.total} 件"

### 検索結果のイテレーション
- @searchs.each do | search |
 = search.name
 = search.note

### pager
= render 'pager', paginate:@searchs  ### 大事なことは雷様が解決してくれる。

### aggregations
- searchs.aggregations.price.buckets do | price |
 = price
```

というように表示できる(はず)です。
少し前に記述していて、今回最終確認していないコードを載せていますので
何かツッコミあれば教えてください。

次回は、今回ふれなかったaggregation部分を記述します。
GR-CITRUS+mrubyで書き方によるバイナリサイズの違いを検証してみた


GR-CITRUSのプログラムをmrubyで行うとき、素の状態的に用意されているメソッドを叩くと、見た感じarduinoを触ってる時と変わらなくてeachとか制御構造等でしか恩恵を得られないような気がしたので、オブジェクト指向らしい書き方をするとどうなるのか検証してみた。

本体LEDを点滅させ、ボタンクリックで停止させるプログラムを作って見た。

## arduino風に書いたばあい

```ruby:aruduino_like.rb
#!mruby

pinMode(13,0x02)

console = Serial.new(0)
console.println "running..."

loop do
  if digitalRead(13) == 0
    console.println "exit!"
    System.exit
  else
    [1, 0].each do |sw|
      led sw
    end
    delay 250
  end
end
```

mrbcして出てきたバイナリは 439bytes。小さい。

## Ruby風にボタンをオブジェクトと定義して、かつアプリケーション全体をClassにしてみた
```ruby:rubish.rb
#!mruby
# coding: utf-8

INPUT = 0x00
OUTPUT = 0x01
INPUT_PULLUP = 0x02

#
# ボード上のピンを定義
#
class Pin
  HIGH = 0
  LOW  = 1

  def initialize(pin, mode)
    if pin.class == Symbol
      @pin = pin.to_s.split("_").last.to_i
    else
      @pin = pin
    end

    pinMode(@pin, mode)
  end

  #
  # ピンをHIGH/ONにする
  #
  def on
    digitalWrite(@pin, HIGH)
  end
  def off
    digitalWrite(@pin, LOW)
  end
  def on?
    digitalRead(@pin) == HIGH
  end
  def off?
    digitalRead(@pin) == LOW
  end
end

#
# Pinを継承してボタンオブジェクトを作成。今回は初期化の引数しか使ってないけど。
#
class Button < Pin
  def initialize(pin, mode=INPUT_PULLUP)
    super
  end
end


class MyApplication
  def initialize
    @console = Serial.new(0)
    @console.println "running..."

    @btn_stop = Button.new(:pin_13)
  end

  def run
    loop do
      if @btn_stop.on?
        @console.println "exit!"
        System.exit
      else
        [1, 0].each do |sw|
          led sw
        end
        delay 250
      end
    end
  end
end

MyApplication.new.run
```

mrbcして出来たバイナリは	1593bytes.

##まとめ
このRuby風にClass定義して、インスタンスをMyApplicationクラスに作っていくやり方で、液晶画面やセンサを組み込んでみたところ8KB以上のバイナリとなり、(2016.12.10現在)ファームウェアでの8KB制限に引っかかってしまう結果となった。

うまいやりかたは思いつかないけど、組み込みという性質上あんまりバリバリにClass定義して容量を食ってしまうと元も子もないので、当面はarduino風の書き方がいいのかもしれない(個人の感想です)
Raspberry Pi3にMacからシリアルコンソール接続 ₍₍ (ง  ﾟ^ ﾟ)ว ⁾⁾

＊次回やる時とかに残しておく用のただのメモです。

環境: Raspberry Pi3, Raspbian 8.0


今回買ったシリアルコンソールはコレ。Amazonで680円でポイント使ってもっと安くなっていい買い物でした。今のとこ正常稼働。
=> [USB to UART TTLシリアルケーブル 1M (PL2303HX) 10Gショップ](https://www.amazon.co.jp/dp/B014CA59P4/ref=cm_sw_r_tw_dp_x_Cfvtyb3B17HHP) 

# 準備

**その1: config.txtを編集**
`sudo vim /boot/config.txt`
開いたファイルの最後の末尾に下記を加える。
`# Setting for a serial console cable` (ただのコメント)
`dtoverlay=pi3-miniuart-bt`

**その2: cmdline.txtを編集**
`sudo vim /boot/cmdline.txt`
開いたファイルの中身を以下に差し替えます。
`dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait`

(こわい人はもともとあった内容をどっかにコピペしとくと良いと思います)

# GPIOピンに挿す
今回は電源はUSBからはとらないので赤は放置。
順番は左から以下の通り
空空黒白緑


![IMG_5120.JPG](https://qiita-image-store.s3.amazonaws.com/0/105408/fc00d267-5b13-605e-7bb7-3711414a707d.jpeg)

裏から見た感じ。矢印がついてる方を外側に向ける感じでさす。
![IMG_5119.JPG](https://qiita-image-store.s3.amazonaws.com/0/105408/8c731558-45c0-6515-7f31-c5cf4b4efc84.jpeg)

# Macからアクセス
USBをMacにさしたら、ターミナルで下記コマンドを実行。
`screen /dev/cu.usbserial -s 115200`

ドン!

これでユーザー名とパスワードが要求されるので、入れたらあとは見慣れた画面に。

あの一行ずつぬるっと出てくる感じね。

テキストエディタで開いた時みにくい感じはありますが、いろいろな希望が閉ざされた時に接続するには十分なんじゃないかな、と思います。
【JavaEE】@Dependentのよくある勘違い

# @Dependent

CDIのスコープアノテーションの一つ。
スコープのライフサイクルは
「Inject先のBeanのスコープに従う」

## 陥ってしまう勘違い
上記の説明。
これ例えば、Inject先のBeanが@RequestScopedであれば、@DependentのBeanも@RequestScopedとして振る舞う。
とも取れると思います。

実はこれは間違いなのです！

## 実例
例えば、下記のようなコードがある。

```Java:MainBean.java
@RequestScoped
public class MainBean {

    @Inject
    private HogeBean hogeBean;

    @Inject
    private FugaBean fugaBean;

    public void execute(){

        hogeBean.setMethod(); // 1

        fugaBean.method(); // 3

        hogeBean.printMethod(); // 6

    }
}
```

```Java:HogeBean.java
@RequestScoped
public class HogeBean {

    @Inject
    private DependentBean depBean;

    public void setMethod(){
        depBean.setId("HogeBeanで設定したID"); // 2
    }

    public void printMethod(){
        System.out.println(depBean.getId()); // 7
    }

}
```
```Java:FugaBean.java
@RequestScoped
public class FugaBean {

    @Inject
    private DependentBean depBean;

    public void method(){

        System.out.println(depBean.getId()); // 4
        depBean.setId("FugaBeanで設定したID"); // 5

    }
}
```
```Java:DependentBean.java
@Data
@Dependent
class DependentBean{

    private String id;

}
```

MainBeanのexecuteがどこからか実行されるとする。

1. hogeBeanのsetMethod()が呼ばれる。
* hogeBeanのもつdepBeanにIDが設定される。
* fugaBeanのmethod()が呼ばれる。
* fugaBeanのもつdepBeanのIDを出力する。
* fugaBeanのもつdepBeanにIDが設定される。
* hogeBeanのprintMethod()が呼ばれる。
* hogeBeanのもつdepBeanのIDを出力する。

というような流れになります。

Inject先のスコープと同じスコープになるという解釈だと、DependentBeanは@RequestScopedのBeanと考えられる。
@RequestScopedのオブジェクトは1リクエストで同じインスタンスを使いまわすため
上記4.で出力されるのは2.で設定した値になり、7.で出力されるのは5.で設定した値になるはず。

だから出力結果は

```:コンソール
HogeBeanで設定したID
FugaBeanで設定したID
```
となるはず。

しかし、実際には出力結果は

```:コンソール
null
HogeBeanで設定したID
```
となります。

## 本当の@Dependentの振る舞い

@Dependentの生存期間は、

* Inject先の生存期間と同じ

が正解です。
hogeBeanが生成されるタイミングでdepBeanが生成されるし、
hogeBeanが破棄されるタイミングでdepBeanが破棄されます。
また、
hogeBeanにもつdepBeanとfugaBeanにもつdepBeanは<b>別インスタンスとなります。

すごく乱暴な言い方をすると、フィールドにnewしてインスタンスを作成しているのと同じイメージです。
（もちろんCDI管理にならないため現実には扱いが異なりますが）

## 循環参照
CDI管理Bean同士の循環参照は基本的には問題ないですが、@DependentのBean同士で循環参照を行うとサーバ起動時にエラーとなります。
これは、依存先のBeanが見つからなくなるためです。

## まとめ
よくよく考えてみると、Inject先に@ApplicationScopedがあったり@SessionScopedがあったりした時にどうなるんだよ。
ってなるんですが、周りでも勘違いしている人が多かったので。

ドメインでコンポーネントを分けた際などにそれぞれで別の状態が持てるのでなにかうまく使えたりしそうです。
[Lightning] コンポーネントバンドルを1行ずつ説明する

今回は [「Salesforce App Cloud Advent Calendar 2016 - Qiita」](http://qiita.com/advent-calendar/2016/salesforce-app-cloud) の Advent Calendar 何日目じゃろか、です。

不本意ながら、今年最大の風邪を引いてしまい、[Salesforce World Tour Tokyo 2016](http://eventjp.salesforce.com/)を目の前に、大変しまった状況です。が、自分で割り当てた順番です。何か書き残しておこうとして、社内向けに準備する予定だったものをそのまま公開します。

# Lightningコンポーネントバンドル関連図

Lightningコンポーネントの話をします。ここに来ている人は、少なからず、Lightningコンポーネントの存在と存在意義は知っているものとして処理します。しかしながら、さて、Lightningコンポーネントでアプリケーションをつくろうかなんて考えた日には、どれをどう組み合わせると、いったい何ができあがるのか、という感じで最初からつまづくでしょう。私がそうだったのだから、みんなもそのはずです。

ひとまず、最初の段階として Lightning コンポーネントバンドルはどのような関係性を持っていて、開発に必要なものは何かを理解していただこうと、次の図を準備しました。

![図 Lightningコンポーネントバンドル関係図](https://qiita-image-store.s3.amazonaws.com/0/37263/dd8327fb-f62a-9010-cad9-d100a96cc222.jpeg "Lightningコンポーネントバンドル関係図")

「実装リソース」と「サポートリソース」は個人的適当につけてみたもので、正式なものではありません。から、これで呼ぶ必要はありません。

## 実装リソース

実装リソースでは、実際に Lightningコンポーネントが動作するときに必要となるバンドルリソースです。すべてを活用すると、きっとスゴイコンポーネントアプリケーションが開発できると、明るい将来を見据えていますが、「COMPONENT」さえあれば、最低動きます。[Lightningコンポーネント開発者ガイド](https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/)によると、Lightningアプリケーションビルダーや、コミュニケーションビルダーのアプリケーションを開発する場合には、**DESIGN**は**必須**と記述ありますが、なくても動きます[^1]。 

今日の本編です。各コンポーネントバンドルを1行で説明します。

| コンポーネントバンドル | 説明内容 |
|:--|:--|
|COMPONENT|実際の画面構成をHTML5とauraフレームワークで記述|
|CONTROLLER|COMPONENTで定義したイベントから呼ばれるJavaScriptロジック|
|STYLE|COMPONENTのスタイルをCSS3で定義・記述|
|HELPER|CONTROLLERおよびRENDERから呼ばれる共有モジュール群|
|DESIGN|アプリビルダーなどで属性の初期値を設定|
|RENDER|COMPONENTのレンダリング状況に応じて呼ばれるJavaScriptロジック|

## サポートリソース

実際に実行されるときにはまったく影響がない → 要するに実行させるためにあってもなくても良いモノです。横展開したい場合や、アプリケーションに**華**を持たせたい場合の色づけに使います。

| コンポーネントバンドル | 説明内容 |
|:--|:--|
|DOCUMENTATION|コンポーネントの説明書を記述すると、ヘルプとして参照可能|
|SVG|アプリビルダーやコミュニティビルダーで表示されるアイコンデータ|

# 将来計画

なんとなく、コンポーネントバンドルごとに自分の備忘録もふくめて、アプリケーションの作り方とかを、きっとどこかに残していきます。

[^1]: Winter'17現在
そろそろ勉強しておくべき個人情報保護法


### はじめに

個人情報保護士の試験日は[12月18日](http://www.joho-gakushu.or.jp/h28nittei/)でしたね。

![カレンダー.png](https://qiita-image-store.s3.amazonaws.com/0/28543/74eef259-6824-e0ec-7434-feeda0052716.png "カレンダー.png")

全然本気出せない。むしろいま火中。

![失敗した.jpg](https://qiita-image-store.s3.amazonaws.com/0/28543/7a155f2d-e8da-dcae-21e2-4aeef0881e7e.jpeg "失敗した.jpg")

そんな訳で現在まさに勉強中の個人情報保護法について、復習を兼ねて書いてみることにしました。

### 個人情報保護法とは
ざくっと言うと、個人情報の有用性を配慮しながらも、個人情報を保護しますという事を目的にした法律。
安全性だけではなく利便性も、というのがポイント。

プライバシー意識の高まりや、国際的な法制定の流れを受けて2005年に施行（成立は2003年）された。

### なぜいま個人情報保護法なのか
法案が制定してから約10年経った2015年9月に改正個人情報保護法が成立したため。
成立から施行されるまでタイムラグがあるが、その施行が2017年春頃（何もなければ）と迫ってきている。

### 改正法が施行されると何が変わるのか
10年ぶりということで結構変わっていますが、特に影響の大きそうなのは以下の4点。

- 個人情報の定義の明確化
- 個人情報取扱事業者の範囲拡大
- ビッグデータの利活用促進（匿名加工情報）
- 個人データ流出に対する罰則

見るのにガッツが必要な法案や基本方針などは[コチラ](http://www.ppc.go.jp/personal/preparation/)を参照。

![理解.jpg](https://qiita-image-store.s3.amazonaws.com/0/28543/d79b2fc6-336c-063a-458f-99f4d00276e9.jpeg "理解.jpg")


#### 個人情報の定義の明確化
元々の定義が`単独、もしくは組み合わせて個人を特定できる情報`と割と曖昧だったため、グレーだった部分（顔認識データ、購買履歴など）がちゃんと定義されました。

基準が明確になったので管理の判断がしやすくなる一方で、純粋に守るべき範囲が拡大しているので洗い出しなどが必要になりそうな悪寒。

#### 個人情報取扱事業者の範囲拡大
改正前は取り扱う個人情報が5,000人以下の事業者は適用対象外だったのが、適用される事となるそうです。
その中には個人事業主やNPO、ちょっと前に話題となったマンション管理組合なども含まれます。

ナーバスになりすぎるなとは言うけど、先のマンション管理組合用に出された[ガイドライン](http://www.cgr.mlit.go.jp/chiki/kensei/kensetu/pdf/k_jyouhou.pdf)を見ても絶望しかない。
実際に運用が始まりノウハウが貯まってくればマシになるとは思うけど、最初は大変そう。

#### ビッグデータの利活用促進（匿名加工情報）
現行法だとビッグデータ分析を法律に従って行うのは無理ゲーなので ~~みんな海外にサーバーを置いた~~ その対策としてマスキング（匿名加工）すれば大丈夫だよ、という話。

でもまぁ正直面倒くさそう。

#### 個人データ流出に対する罰則
いわゆる名簿屋をターゲットとした、不正な方法で個人情報を取得したヤツらを罰する法案。
これで妙な不動産投資営業が無くなることを祈る。

ただ`不正な方法`の何を持って不正と言うのか問題があって、まだまだ課題は多そう。

### 個人情報取扱事業者になると何をしなければいけないのか
ざっくり分類すると以下の４つの義務が応じます。

- 利用目的
- 安全対策
- ユーザ対応
- 苦情処理

※この辺は過去問やってても自分の正解率が怪しいので後でググってください。

#### 利用目的について
ざっくりとしてない、目的が出来る限り特定された利用目的を作って、ユーザの目のつく場所に置けというお話。

ざっくりとした例
- 事業活動のため
- サービス向上のため

#### 安全対策について
安全対策として`必要かつ適切な措置`を行うこと。
適切とは`組織的・人的・物理的・技術的`に分けられた対策のことなので、要は幅広く対策しろって事ですね、わかります。

#### ユーザ対応について
ユーザからの問い合わせにちゃんと対応しろというお話。
具体的には、受付窓口や受付・開示方法の設定、受付時の本人確認手段、その求めに応じた開示や利用停止などの実施など。

#### 苦情処理について
ユーザからの苦情に対応できる体制を作ってちゃんと対応しろというお話。

### そもそ個人情報って？
一言で言えば、`それ単独、もしくは組み合わせて本人を特定することが出来る個人の情報`。
アンケートの集計結果など統計情報は含まれない。

法案では以下の３種類に分類されている。

- 個人情報
- 個人データ
- 保有個人データ

#### 個人データ
検索できるように体系的にまとめたものを`個人情報データベース等`と言い、そこに含まれる個人情報を`個人データ`と言う。
何を言ってるかよくわからないと思うが、そう定義されているから仕方ない。

![日本語.jpeg](https://qiita-image-store.s3.amazonaws.com/0/28543/8f3c74a6-7992-5cad-d903-700d60672be2.jpeg "日本語.jpeg")


ちなみにデータベース等は別に電子化されていなくても、アナログベースでもちゃんと五十音順などで整理されている物（名刺ファイル、病院のカルテなど）も該当する。
でも、ちゃんと整理されていないものは該当しないらしい（ここテストに出ます）。何だろう、このモヤモヤ。

#### 保有個人データ
事業者が自由に追加や訂正、削除を行え、かつ６ヶ月以上保有している個人データは`保有個人データ`と呼ばれる。
`保有個人データ`を取り扱う場合は、開示等の求めに応じなければならなくなる。

### そういえばマイナンバーも個人情報保護法と関係あるの
あります。

ただその関係は、個人情報保護法を一般法とする特別法として成り立っているので、番号法に規程がない項目については個人情報保護法のものが適用される仕組みとなっています。

ちなみに現状ではマイナンバーは、「税」「社会保障」「災害対策」に用途が限定されているので、事業で取り扱うケースはだいぶ限られているかと思われます。

ちなみに過去問のなかで将来コンビニで住民票を発行とか書かれてましたが、本当に使われる日は来るのか。

### まとめ
正直まとめきれない。
ここでまとめきれるくらいなら、テスト勉強にこんな苦労はしてない。

とりあえず個人情報は容量と用法を守って正しくお使い下さい。
python3 HelloWorld

#**python3 HelloWorld**
##HelloWorldとは
HelloWorld(ハローワールド)とは、HelloWorldと文字列を表示するプログラムのことです。
様々な言語で作ることができ、言語を学習し始めてはじめに学習するプログラムでもあります。
##目標
実行したら、Helloworldという文字列を表示するプログラムをpython3で作成する
##ソースコードと解説
```python:HelloWorld.py
print("HelloWorld")
```
これが、python3のHelloWorldという文字列を表示するプログラムです。
printとは、その後ろにあるカッコの中に入っているものを実行した時に表示するというものです。
そして中に入っているのは"HelloWorld"、2つのダブルクオーテーション(")の間にあるものは文字列とみなされるので、HelloWorldという文字列を意味しています。
つまりこれで、実行したらHelloWorldという文字列を表示するプログラムをpython3で作成できました。
YAMAHA RTX1210 と VyOSでOSPFを構築する

#はじめに
**この記事は[高知工科大 Advent Calendar 2016](http://www.adventar.org/calendars/1872)の11日目の記事です。**
先日 [YAMAHA RTX1210](http://jp.yamaha.com/products/network/routers/rtx1210/)を衝動買いしたので、[VyOS](http://vyos.io/)と組み合わせてOSPFを構築するテストを行いました。
#OSPFとは？
OSPFはOpen Shortest Path Firstの略で、リンクステート方式のルーティングプロトコルです。ネットワーク層で動作します。ルーティングメトリックにコスト値を用いていて、帯域幅などに応じて最適な経路を選択できます。また経路収束が高速、エリアごとに分けることで大規模なネットワークに対応できる、などの特徴があります。


#ネットワーク構成
以下の図のような構成のネットワークで実験します。全部をエリア0(backbone)として、コスト値はデフォルトの設定のまま行います。
図下部分の`192.168.36.0/24`と`192.168.50.0/24`間をOSPFでルーティングするのが目的です。
![ADC2016-11.jpg](https://qiita-image-store.s3.amazonaws.com/0/106927/d3d8095a-2c7f-b1d2-8c43-3567943142f4.jpeg)

#構築
各ルータに設定を行います。

```:RTX1210.config
ip lan1/1 address 192.168.36.1/24
ip lan1/5 address 192.168.40.1/30
ospf use on
ospf area backbone
ip lan1/1 ospf area backbone
ip lan1/5 ospf area backbone
ospf configure refresh
```

```:VyOS-Aノード.config
set interfaces ethernet eth0 address '192.168.40.2/30'
set interfaces ethernet eth1 address '192.168.40.5/30'
set interfaces loopback lo address 1.1.1.1/32
set protocols ospf area 0 network 192.168.0.0/16
set protocols ospf parameters router-id 1.1.1.1
```

```:VyOS-Bノード.config
set interfaces ethernet eth0 address '192.168.40.6/30'
set interfaces ethernet eth1 address '192.168.50.1/24'
set interfaces loopback lo address 2.2.2.2/32
set protocols ospf area 0 network 192.168.0.0/16
set protocols ospf parameters router-id 2.2.2.2
```

#構築結果
OSPFが正常に動作していれば、RTX1210 で`show ip route`のコマンドで以下の様に**OSPF**による経路が追加されます。

```:RTX1210
> show ip route
宛先ネットワーク    ゲートウェイ     インタフェース  種別         付加情報
192.168.36.0/24     192.168.36.1         LAN1/1  implicit
192.168.40.0/30     192.168.40.1         LAN1/5  implicit
192.168.40.4/30     192.168.40.2         LAN1/5      OSPF     cost=11
192.168.50.0/24     192.168.40.2         LAN1/5      OSPF     cost=21
```
これでネットワーク図下部分の`192.168.36.0/24`と`192.168.50.0/24`で通信が可能になります。
試しに`192.168.50.10`のPCを用意し、`192.168.36.0/24`のネットワークから`tracert 192.168.50.10`を実行します。

```
>tracert 192.168.50.10

192.168.50.10 へのルートをトレースしています。経由するホップ数は最大 30 です

  1    <1 ms    <1 ms    <1 ms  192.168.36.1
  2    <1 ms    <1 ms    <1 ms  192.168.40.2
  3     1 ms     1 ms     1 ms  192.168.40.6
  4     3 ms     2 ms     1 ms  192.168.50.10

トレースを完了しました。
```
OSPFを設定したルータ達を経由してアクセスできました！
#最後に
VyOSはOSSなので、余ってるPCや仮想環境があれば高機能なルータを構築できます。ネットワークの勉強したいと思っている方にオススメです。
Androidでユニットテストを始めるメモ4

前回の続き
http://qiita.com/kojimamasahiro/items/d5384a8e7c44a8b2843c

既存のコードにDaggerを適用すると、テストがしやすくなるとどこかで見たので使ってみる。

Dagger2
https://google.github.io/dagger/

# インストール

```
dependencies {
    compile 'com.google.dagger:dagger:2.8'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.8'
}
```

# 使い方

詳しくは、以下が詳しい。
http://qiita.com/arenahito/items/d9bbca61c8a67cfad226

要は、DIをすることで疎結合になり、テストするさいにテスト用のロジック（モック）を仕込めるようになります。


# さいごに

DIパターンというデザインパターンを理解しないといけないし、
DaggerはDIパターンを楽に実装するためのDIコンテナを簡単に作成/利用ができるライブラリーなので、
それぞれについて理解しなければいけません。

このあたりについては、わかってないことが多いので今後何かしらできたらいいなと思っています。
enthumble キーカスタマイズ例

enthumble が入っていないPCを使うと蕁麻疹ができそうなので、
いつでも使い慣れている設定に戻せる様にメモ。


[HowToUse]
Check=http://jp.enthumble.com/
Name=enthumble version 4.0
[KEY]
Space={Enter}
Muhenkan={}
Henkan={}
Hiragana={}
F1=#{1}
F2=#{2}
F3=#{3}
F4=#{4}
F5=#{5}
F6=#{6}
F7=#{7}
F8=#{8}
F9=#{9}
F10={Volume_Mute}
F11={Volume_Down}{Volume_Down}
F12={Volume_Up}{Volume_Up}
F18={}
F19={}
1={F1}
2={F2}
3={F3}
4={F4}
5={F5}
6={F6}
7={F7}
8={F8}
9={F9}
0={F10}
-={F11}
Hat={}
\={}
Q=#{left}
W={ctrl down}{PgUp}{ctrl up}
E={ctrl down}{PgDn}{ctrl up}
R=#{right}
T=#{up}
Y={ctrl up}{alt up}
U={delete}
I={up}
O={AppsKey}
P={PgUp}
@={}
LB={}
A={}
S={ctrl down}s{ctrl up}
D=#e
F=#r
G={ctrl down}a{ctrl up}{ctrl down}v{ctrl up}
H={Backspace}
J={left}
K={down}
L={right}
Semicolon={PgDn}
:={}
RB={}
Z={alt down}{F4}{alt up}
X=^x
C=^c
V=^v
B={Capslock}
N=^z
M=^y
,={HOME}
.={END}
/={}
Backslash={}
Up={vkF2sc070B}{vkF3sc029}{ASC 33194}
Down={vkF2sc070B}{vkF3sc029}{ASC 33195}
Left={vkF2sc070B}{vkF3sc029}{ASC 33193}
Right={vkF2sc070B}{vkF3sc029}{ASC 33192}
LButton=^{PgUp}
MButton={MButton}
RButton=^{PgDn}
WheelUp={}
WheeDown={}
PageUp=^{PgUp}
PageDown=^{PgDn}
Home={}
End={}
Delete={}
backspace={}
Enter={Enter}
Escape={}
Hankaku={}
Tab={}
Capslock={}
Lwin={}
Rwin={}
Insert={}
Dockerで作るJupyter Notebook開発環境

研究室リモートサーバ上にJupyter Notebook環境を作ったら色々と捗ったのでその紹介です。調べながらやったら色々と詰まったので情報を残しておこうと思います。

### 捗ったこと

+ 研究室リモートサーバの高スペックな計算資源を使える
+ Webブラウザ上から簡単にアクセスできる
+ よく使うもの(numpyとかmatplotとか)がはじめから入っている
+ Dockerとりあえず使ってみたアピールができる

### 研究室リモートサーバの環境

+ Ubuntu 16.04.1 LTS (GNU/Linux 3.13.0-24-generic x86_64)
+ グローバルIPが付与されている

### Dockerのインストール

まず[このへん](http://qiita.com/snowman8765/items/d3f2756aeac1f18eccf9)を参考にしつつ，UbuntuにDockerをインストールします。また，dockerは一度立ち上げたらその後はWebブラウザから利用するので，

```shell
$ sudo docker daemon
```

などとして，daemonとしてdockerを起動しておきます。

### Jupyter Notebookのdocker imageを取得してくる

[ここ](https://hub.docker.com/r/jupyter/datascience-notebook/)から **jupyter/datascience-notebook/** のdockerイメージをpullしてきます。データ解析に必要なものはだいたい入っていていい感じです。

### ポートを開ける

jupyter notebookは8888番ポートを使用するので空けておきます。ここで空けるのは動作チェックのためであり，別に8888番ポートである必要はありません。

### dockerを起動してみる

```shell
docker run -d -p 8888:8888 jupyter/datascience-notebook
```

とやって起動しましょう。8888ポートに接続して，jupyter notebookが立ち上がっていればOKです。

### セキュリティを高めよう

[このあたり](http://qiita.com/Himaken/items/b411de87b00c051e6697#%E5%AE%9F%E8%A1%8C%E6%89%8B%E9%A0%86)を参考にしてパスワードの設定をします。こうするとjupyter notebook起動時にパスワードが要求されます。パスワードを設定したらいったん `docker commit` しておくとよいですね。

また，SSL接続をできるようにしておくとよいです。上記のも合わせて [このあたり](http://jupyter-notebook.readthedocs.io/en/latest/public_server.html)を参考にするとHTTPSで通信ができます。オレオレ証明書でもよいですが，let's encryptを使って証明書を発行しておくとよいです。

### 実際の使用時のコマンド

```shell
$ docker run -e GRANT_SUDO=yes -d -p 8888:8888 -v ~/:/home/hoge/fuga/data --user root jupyter/datascience-notebook start-notebook.sh
```

実際に使う場合には，用意されているシェルスクリプトから起動するのが便利です。

+ `-e GRANT_SUDO=yes`
    + jupyter notebook内で立ち上げたターミナルでsudo権限を使えるようにします
    + pipで新たなものを入れるときなど必要です
+ `-v ~/:/home/hoge/fuga/data`
    + docker外とdocker内で共用するディレクトリです
    + gitを使うには大きいファイルのやりとり

### さいごに

かなりざっくりとしたまとめになってしまいましたが，こうした環境を用意しておくとかなり便利です。
Bracketsに恋して

[カレシ・カノジョできないエンジニア Advent Calendar 2016](http://qiita.com/advent-calendar/2016/give_me_kareshi)の15日目の記事です。

恋人（いない）の顔より、友達の顔より、家族の顔より、同僚の顔より、長く見つめているのはBracketsの画面なので、
もはやこれはBracketsと付き合っていると言っても過言ではないのでは。
いっとき、恋するエディタと言われたSublimeTextには、私は心ときめかなかったので、そういうところが問題なのかもしれません。

##Bracketsのかわいいところ
- アイコンがかわいい。
- jsでできているところ。  
慣れ親しんだjsでできているというだけで、幼馴染と再会したような安心感があるものです。
- わりと素直。  
見た目も、プラグインも簡単に入れたり消したり変えたりできるのでいいですね。

##Bracketsのかっこいいところ

- 英語ができなくても怒ったりしない。  
日本語対応も難なく初めからしておいてくれる。
- 時々おせっかいになところもあるけど、細かい気遣いできる。  
カラーコードにカーソルを乗せたらカラーチップが出て色が見えるとか、画像パスにカーソル乗せたらサムネイルが出るとかそういうところ好き。


##Bracketsのちょっときらいなところ

- なんだか検索したら、HTML初心者に最適！とか書かれちゃってるところ。  
すぐそうやって誰にでもでれでれして！（やきもち）
- アップデートで使えなくなったりバグったりするプラグインが多々ある気まぐれなところ。  
プラグインを作りやすいゆえに、いろんなプラグインがありすぎて、いいやつもわるいやつもいますね。
- 器が小さい。  
大量のファイルがあるフォルダを読み込ませたりすると（node_moduleとか）、フリーズしたりアラートが出ます。プラグインで、このフォルダは無視していいんだよ、と教えてやると、機嫌が収まります。

ちょっとあげてたら、嫌いなところ結構あるじゃんってなってちょっと彼との付き合いもまた考えなければいけない時なのかもしれません。いいやつなんだけど。

これまで何度か乗り換えようと思ったけれど、慣れるとなかなか離れがたいので難しいですね。ちなみにちょい前に話題になったAtomは重いので付き合えません。

## Bracketsの好きなプラグイン
### Beautify
整形ツール。ショートカットキー一発で、いろいろ整形してくれます。
ドラッグで選択するとそこだけ整形してくれたりして、いいやつ。

### Brackets Key Remapper
ショートカットキーをカスタマイズできる。ほかのプラグインの設定も大抵そうですが、jsonファイルに設定書けばいいのでこれも簡単。

### Paste and indent
コピペしたときに、コピペの位置に合わせてインデントをいい感じにしてくれる。たまに邪魔になって無効にしたりするけど、また有効にしたくなってしたりと、ぐずぐずな関係。

あとなんかもっとあったかなーと思ったけど、最近はアップデートの結果、足りなかった機能が追加されたりして、そこまでプラグインに頼らずとも最低限のことはできるようになった印象です。
（タブで開いたりとか、２カラムで開いた時の左右の移動とか、前はプラグインでしかできなかった）

Sublimeに恋できなかった方がいらっしゃいましたら、ちょっと試してみるのも良いかもしれません。
付き合うのにお金かからないし。ものは試しです。
[Brackets](http://brackets.io/)
NSLockメモ

詳しくは「スレッドプログラミングガイド」参照

ロックはスレッドの排他制御に必要。
注:アップルはスレッドプログラミングではなくより簡便な代替テクノロジー(NSOperation, GCD, アイドル時間通知、非同期関数、タイマー、別プロセス)を使うことを勧めている。

#スレッドの実装
###スレッドの基礎にある実装メカニズムはMachスレッド
###POSIX API

#スレッドの３つの状態
実行、実行可能、ブロック

## NSLockingプロトコル

ロックオブジェクトが持つべきメソッド。lock,unlock。

lock ロックを取得する。ロックが取得できるまでスレッドを止める。
unlock ロックを開放する。

## NSLock

NSLockingの実装の一つ。
NSLockingプロコトル以外により細かな制御ができる。

tryLock:　ロックでなかったときに直ちにNOを返す。lockが開放されるまで待つのと対照的。
lockBeforeDate: 指定時刻までにロックできなかったらNOを返す。
setName: ロックに名前をつける。
name

## NSConditionLock
NSLockingの実装の一つ。特定の条件(Condition 整数値)の場合にロック、アンロックができるようにする。Producer-Consumer パターンを実装できる。

initWithCondition: ロックを特定の条件で作る。
lockWhenCondition: この条件になっていたらロックが取れる。(ちなみに単にlockだと条件と無関係にロックを取る。)
unlockWithCondition: ロックを開放し、条件を設定する。

また、NSLockと同様に,tryLock,tryBeforeDateがあり、それのCondition版がある。

## NSRecursiveLock

ロックの回数がカウントされるので同一スレッドでロックしてもデッドロックにならずそのまま通過する。アンロックはロックした回数だけ呼ぶことで開放できる。メソッドはNSLockと同じ。

この再帰ロックによって他のスレッドはブロックされているが長期間待たされる可能性がないように注意する。再帰ロックをなくすようにコードを改善することでパフォーマンスが向上できる。

###NSCondition
条件変数


##ロックが必要なクラス、必要でないクラス。
###スレッドセーフ
基本的に不変オブジェクト

NSArray
NSAssertionHandler
NSAttributedString
NSCalendarDate
NSCharacterSet
NSConditionLock
NSConnection
NSData
NSDate
NSDecimal関数
NSDecimalNumber
NSDecimalNumberHandler
NSDeserializer
NSDictionary
NSDistantObject
NSDistributedLock
NSDistributedNotificationCenter
NSException
NSFileManager（OS X v10.5以降）
NSHost
NSLock
NSLog/NSLogv
NSMethodSignature
NSNotification
NSNotificationCenter
NSNumber
NSObject
NSPortCoder
NSPortMessage
NSPortNameServer
NSProtocolChecker
NSProxy
NSRecursiveLock
NSSet
NSString
NSThread
NSTimer
NSTimeZone
NSUserDefaults
NSValue
NSXMLDocument
NSXMLParser

ただし、不変オブジェクトを返すメソッド(例 NSString)でも可変オブジェクトを入れてくることがある(NSMutableString)ので、不変コピーを作る必要がある。


###スレッドセーフでない
基本的に可変オブジェクト

NSArchiver(ラップ先にその可能性)
NSAutoreleasePool
NSBundle
NSCalendar
NSCoder(ラップ先にその可能性)
NSCountedSet
NSDateFormatter
NSEnumerator(ラップ先にその可能性)
NSFileHandle
NSFormatter
NSHashTable関数
NSInvocation
NSJavaSetup関数
NSMapTable関数
NSMutableArray
NSMutableAttributedString
NSMutableCharacterSet
NSMutableData
NSMutableDictionary
NSMutableSet
NSMutableString
NSNotificationQueue
NSNumberFormatter
NSPipe
NSPort
NSProcessInfo
NSRunLoop
NSScanner
NSSerializer(ラップ先にその可能性)
NSTask
NSUnarchiver
NSUndoManager
arXivでcleverefを使う

※cleverefについては[前の記事](http://qiita.com/wktkshn/items/110cd6007837938e6c88)を参照してください。
※このページの内容は[ここの回答](http://tex.stackexchange.com/questions/276801/how-does-one-use-cleveref-in-an-arxiv-submission)と[cleverefのマニュアル](http://tug.ctan.org/macros/latex/contrib/cleveref/cleveref.pdf)を参考にしました。

# arXivでcleverefを使う方法
arXivはコンパイルの際に勝手にhyperrefを読み込む[^1]ため、cleverefを用いたコードを何も考えずに投稿すると正しく表示されません。
[^1]: 00README.XXXなる名前のファイルを用いればhyperrefの読み込みを抑制できますが、何故かこの場合でも明示的に`\crefname`によって設定をする必要があります。

しかし、以下の2点を守れば正しく表示されるようになります。

1. `\usepackage{hyperref}`を`\usepackage{cleveref}`よりも前に、ソースコードに自ら書く。
2. `\crefname`を用いて、`\cref`での表示名を明示的に指定する。

[cleverefのマニュアル](http://tug.ctan.org/macros/latex/contrib/cleveref/cleveref.pdf)に書いてあるように、(もし使うなら)hyperrefはcleverefよりも先に読み込まれなければいけません。
そのため、arXivによってcleverefよりも後にhyperrefが読み込まれないように、自ら先にhyperrefを読み込む必要があります。
また、2.に書いてある`\cref`による指定は普段の環境では省略できる場合も多いため、忘れていたりそもそも知らなかったりする可能性がありますね。

# poormanオプション
arXivでは上記の方法でうまく行くと思いますが、他の状況でどうしてもうまく行かない場合にはpoormanオプションを用いることでほぼ確実に解決できます。
このオプションは、cleverefを利用できないような"poor man"の環境でもコンパイルが通るようにするためのものです。

具体例と使い方を述べましょう。

```latex:hoge.tex
\documentclass{article}
\usepackage[poorman]{cleveref}
\newtheorem{theorem}{Theorem}
\crefname{theorem}{Theorem}{Theorems}
\begin{document}

\begin{theorem}
 \label{theorem:foo}
 This is a theorem.
\end{theorem}
 
 By \cref{theorem:foo}, we have ...
 
\end{document}
```

上記のように、cleverefにpoormanオプションを指定して読み込みます。
これをコンパイルすると、同じディレクトリに`hoge.sed`なるファイル[^2]が生成されます。
[^2]: ファイル名は元々のTeXファイルの名前で決まります。
これは`hoge.tex`からcleveref依存の部分を全て取り去る方法が記されたテキストファイルで、terminal上で次のように入力して利用します[^3]。
[^3]: こちらで動作確認したのはubuntuのみ。macはhogeおそらくそのままで使えると思いますが、windowsは自分でsedをインストールする必要があるかもしれません。"windows sed"などでググってください。

```
sed -f hoge.sed hoge.tex > hogeforpoorman.tex
```

これを実行すると、次のようなファイルが生成されます。

```latex:hogeforpoorman.tex
\documentclass{article}

\newtheorem{theorem}{Theorem}

\begin{document}

\begin{theorem}
 \label{theorem:hoge}
 This is a theorem.
\end{theorem}
 
 By Theorem\nobreakspace \ref {theorem:hoge}, we have ...
 
\end{document}
```

確かにcleverefに依存する部分が全て取り除かれた上で、元々はcleverefによって補われていた`Theorem`がソースコードに挿入されていますね。
このファイルであれば、おそらくどんな環境のLaTeXでも正しくコンパイルできると思います。

(12/11 25時ごろ追記)
`\cref`と`\Cref`について勘違いしていたことを指摘されたので、修正しておきました。
詳細は[前の記事](http://qiita.com/wktkshn/items/110cd6007837938e6c88)を参照してください。
HoloLensでOpenCV その2 自分の視界をアニメにする #アセットアドカレ

## はじめに
この記事は [Unity Assets Advent Calendar 2016](http://qiita.com/advent-calendar/2016/unity-asset) 9日目の記事になります。

引き続きHoloLensでOpenCVと遊んでみます。

## サンプルをHoloLensに対応する

前回はOpenCV for UnityをHoloLensのプロジェクトで使えるようにいろいろしました。

> HoloLensでOpenCV その1 ことはじめ #アセットアドカレ
http://qiita.com/drafts/cb9bcc072f24571963e2

最後に *それぞれのサンプルプロジェクトを開いて実機に転送して動かしてみましょう。*
としれっと〆ましたが、いきなりこんな感じには動きません。

<iframe width="560" height="315" src="https://www.youtube.com/embed/gqEFu0MX2OQ" frameborder="0" allowfullscreen></iframe>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">とりあえずHoloLens実機でOpenCVのComicFilterSampleを動かしてみた<br>HoloLens Unity x OpenCV ComicFilter <a href="https://t.co/K4PDHr9FVc">https://t.co/K4PDHr9FVc</a> <a href="https://twitter.com/YouTube">@YouTube</a>さんから</p>&mdash; ゆーじ (@yuujii) <a href="https://twitter.com/yuujii/status/746140706188623873">2016年6月24日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

カメラに映る映像をコミック調にする**ComicFilterSample**のシーンを使った場合、そのままでは映像が映る**Quad**が超巨大で何が映ってるかよくわからない状態になっているので**Quad**を小さくしてみます。
ついでに常にカメラの前にいる状態にして、自分の視界をコミック調にするような感じにカスタマイズしてみます。

## 完成図

![image](https://qiita-image-store.s3.amazonaws.com/0/32347/d679553c-a464-e7c7-ea34-4ea075fca211.png)

1. **Hierarchyビュー**で**Main Camera**の下に**Quad**を配置
2. **Camera**のパラメーターを完成図のように変更
3. **Quad**のScaleを完成図のように変更
4. ComicFilterSample.csでScaleを設定している当該箇所をコメントアウト

完成
文字列から制御文字を削除する

#課題

RFIDリーダなどの機器からシリアル通信で送られてきた文字列を``println``でそのまま表示すると

```
received: 0511

received: 0511

received: 0511

```
となってしまうのを

```
received: 00511
received: 0511
received: 0511
```
としたい．

#原因
受信した文字列に制御文字が含まれていることが原因

#解決策
``tirm()``で制御文字やスペースを削除する

```
myString = trim(myString);
```

#参考
https://processing.org/reference/trim_.html
初学者がハマってしまったplayframework

[第２のドワンゴAdventCalendar](http://qiita.com/advent-calendar/2016/dwango2)10日目担当だったはずのD3vel0pperです。
昨日投稿できなかったのがすごく辛くなってます。。申し訳ありません。。。
インターンしただけの人でAdventCalendarに投稿しちゃうっていう無謀な人です。

# Playframework使い始めてみようと思い立った

今回は、webのフレームワークであるPlayframework(公式は[こちら](https://www.playframework.com/documentation/ja/2.4.x/Home))を使い始めてみたので、初めて見る人にでもわかるように少しづつ説明していきたいと思います。
実際まだ触り始めたばっかりなので、間違っていたらバシバシ編集していきます。。
世に出ている情報の多くは初心者殺し感半端じゃないんですよぉ。。。。

## まずフレームワークとは

フレームワークとは、頻繁に使うことが多いような機能を、多くの人が利用可能にしたもののことで、例えばWebフレームワークでは、一からhtmlを編集したりルーティングを設定したり、http経由で投げられたリクエストを処理したりなどを設計、実装することなく、ストレスフリーに実行できるようにしたものがあります。

## Playframeworkとは

Playframeworkはscala,及びjavaでwebアプリケーションを開発するときに広く使われているフレームワークです。現在はscalaとjavaを公式ではサポートしているようです([公式](https://www.playframework.com/documentation/ja/2.4.x/Home)を参照)。
さぁ、これを使って自分もウハウハweb開発するぞーと思っていました。昨日のあの事件が起こるまでは...

## 何にハマったのか

ひとまず、公式に沿ってプロジェクトを立ち上げてみたはいいものの、IntelliJIDEAさんが、ジェネレートしてくれた以下のコードの`views.html.index`の`index`の部分が(darculaテーマなので)赤く輝いておられる。
エラーは*cannot resolve the symbol "index"*とのこと。

```HomeController.scala

package controllers

import javax.inject._
import play.api._
import play.api.mvc._

/**
 * This controller creates an `Action` to handle HTTP requests to the
 * application's home page.
 */
@Singleton
class HomeController @Inject() extends Controller {

  /**
   * Create an Action to render an HTML page with a welcome message.
   * The configuration in the `routes` file means that this method
   * will be called when the application receives a `GET` request with
   * a path of `/`.
   */
  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }

}

```

これ、一番最初に自動でジェネレートされるなんの変哲も無いコードなのですが、これがすでに動かないので初めて触るものなのにこれで本当心が折れそうになりました。
しかし、そこはエンジニア魂の見せ所。ダメだ…と思った問題にこそ立ち向かっていかなければ…締め切りは過ぎたけども。
それで、ほんげーーーと思って格闘していました…

## 解決に至るまで

で、いろいろと調べて回っていたのですが、「そういえば、エラーそのまま入れれば出てくるんじゃね？ていうかそれ基本じゃ無い？」と思って「scala play テンプレート cannot resolve」と入力して調べていたら、ようやく[こちら](http://grokbase.com/t/gg/play-framework/151vc026y5/intellij-idea-play-framework-2-3-7-issues)のページを見つけまして...

このページでも同じような症状に悩まされる人がいて、
みてみると、下の方に「.ideaを削除してみるといいよ！その後もう一回プロジェクトをIDEAのメニューからインポートしてみて！」って回答している人がいました。

ちなみに、同じような回答を見たことがあったので、すでに一度プロジェクトを閉じてから、.ideaフォルダを削除して、もう一度IntelliJを開き直す、っていうことを試していたのですが、確かに、IntelliJを再起動してたから、再起動せずにIntelliJ上から削除して再度プロジェクトをひらけばいけるのでは？と思い立ち、やって見ました。

そしたら・・・・
***できましたよ！解決しました！***
きちんと赤いエラー表示も消えて、きちんと読み込んでくれました！
試しにlocalhost:9000にアクセスしてみると、きちんと表示されました！

## 解決策

今回自分が解決した方法は以下です。

1. IntelliJで開いているプロジェクトの中にある、「.idea」ディレクトリを***IntelliJ上から右クリックで*** 削除する
2. 一旦現在のプロジェクトをクローズする
3. もう一度IntelliJの「File > Open」から該当のプロジェクトを開く
4. それでもダメなら何度か繰り返してみる

自分はこれで解決しました。

### 今回学んだこと

導入記事だとしても、案外そんな簡単にはいかないんだぞ、ということですね。
なめてかかってた自分が恥ずかしいです。実際締め切りにも遅れてしまいましたし。
きちんとエラーが出たら、落ち着いて調べてみることが大切なのだな、と思いました。
これだけは言っておきたいです。
***エラーが出たらそのエラーをコピペしてググる！***
案外これで出てきたりするので、初学者仲間の人は覚えておいて欲しいです。

それでは、今回はこの辺で失礼します。。。

### 追記2017/04/15

別の解決方法が見つかったので、メモがてら共有します。
IntelliJのメニューから
「File」>「Invalidate Caches/restart」
を選ぶとうまくいくパターンもある模様です。
Ansible Tower の REST API ことはじめ

本記事は [Ansible Advent Calender 2016](http://qiita.com/advent-calendar/2016/ansible) の 12/11 分の記事です。

# ■ Ansible Tower とは
Ansible Towerは構成管理ツール Ansible の Web GUI、CLI(tower-cli)ツールです。現在はRed Hat社のプロプライエタリ・ソフトウェア ですが、今後オープンソース化される予定もあります。 Ansible Tower は REST APIに対応していて、例えば以下のようなことができます。 

- Job Template(Playbook + αの定義)の実行、確認、追加  
- 実行時の標準出力の確認
- インベントリやスケジュールの確認、追加

本記事では、APIをたたくための準備としてトークンの発行方法と、APIリクエスト例をご紹介します。 

- 参考: 公式ドキュメント Ansible Tower API Guide v3.0.2
 - https://docs.ansible.com/ansible-tower/latest/html/towerapi/

# ■ トークンの発行方法とトークンの使い方

1. `https://{Tower_IP_ADDRESS}/api/v1/authtoken/` に対して、`{"username": "user", "password": "mypass"}` というjsonをPOSTします。
2. jsonで`token`という名前でトークンの値が返ってきます。
3. APIリクエスト時にヘッダー内の`Authorization: `で `Token {token-value}`という形式で指定します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/124069/201e546d-f6bb-1516-4589-08b73381e918.png)
※図中のトークンはダミーです

- 参考: 公式ドキュメント Auth Token API Endpoint
 - http://docs.ansible.com/ansible-tower/latest/html/towerapi/auth_token.html

## トークンの有効期限
デフォルトのトークンの有効期限は1800秒(30分)です。変更したい場合は、`/etc/tower/conf.d/session.py` の `AUTH_TOKEN_EXPIRATION` の値を変更します。

- 参考: 公式ドキュメント Working with Session Limits
 - http://docs.ansible.com/ansible-tower/latest/html/administration/session_limits.html

## トークンの有効範囲
トークンはAPIリクエスト元ごとに発行が必要です。たとえばホストAから発行したトークンはホストBでは使用できませんので、別途ホストB用のトークンを発行する必要があります。
  ![image.png](https://qiita-image-store.s3.amazonaws.com/0/124069/864e20fd-cca1-34c0-8368-9d288896b236.png)

# ■ APIリクエスト例

例えば、JobTemplate ID 10 の JobTemplate を起動させる場合は、以下のようなPOSTをします。
```
https://{Tower_IP_ADDRESS}//api/v1/job_templates/10/launch/
```
（ヘッダー内に前述のトークンを指定）

結果はjsonで返ってきます。

なお、エンドポイントの一覧は `https://{Towe_IP_ADDRESS}/api/` で確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/124069/c696f6bb-f61e-2949-4443-1abac6c4f197.png)

- 参考: 公式ドキュメント Browsable API
 - http://docs.ansible.com/ansible-tower/latest/html/towerapi/browseable.html

# ■ さいごに

Ansible TowerはWeb管理画面のほうが注目されることが多い気がしますが、REST APIに対応していることもメリットと感じています。直接APIをサポートしていなかったサービスや機器も Ansible Tower を経由することによって、API化することができ、何か面白いことができようになるのではと思っています。

　　
※本記事は、[NetOpsCoding#4](https://atnd.org/events/82204)で発表した「[スマホのセンサーでネットワークを操る](http://www.slideshare.net/akira6592/netopscoding4lt-ansible-tower)」の抜粋をベースにしています。
辞書学習アルゴリズム

[スパースモデリング](http://www.kyoritsu-pub.co.jp/bookdetail/9784320123946)第12章の辞書学習アルゴリズムをjupyter notebookで実装した。[jupyter notebookへのリンク](https://github.com/kibo35/sparse-modeling/blob/master/ch12.ipynb)

結果
--
Barbaraから8x8のパッチ約25000個を抽出し、辞書学習を行った。

![barbara_patches.png](https://qiita-image-store.s3.amazonaws.com/0/114365/026cbeab-1235-a0bc-c4f3-d15e06de9381.png)

初期値とした2次元分離可能DCT辞書
![dct_dictionary.png](https://qiita-image-store.s3.amazonaws.com/0/114365/f451e33d-5ce9-86c7-2a39-769cbdb1cc24.png)
K-SVD法でパッチから学習した辞書
![ksvd_dictionary_barbara.png](https://qiita-image-store.s3.amazonaws.com/0/114365/3c64e5d9-714e-38c1-e161-96e130f2db32.png)

辞書学習によりスパース表現誤差が減少した。

![Barbara_K-SVD.png](https://qiita-image-store.s3.amazonaws.com/0/114365/891c02fd-6cd3-f866-3981-9a431f23f6e4.png)


K-SVDアルゴリズム
--
* 信号事例$Y:n \times M$（nは信号の次元、Mは事例数）
* スパース表現$X:m \times M$（mはスパース表現ベクトルの次元）
* 辞書$A:n \times m$

$k_0$個の要素のみが非ゼロの$x_i$で$y_i$をスパース表現する。

#### タスク：


```math
\min_{A,\{x_i\}^{M}_{1}} \Sigma_{i=1}^{M} ||y_i-Ax_i|| \text{ subject to } ||x_{i}||_0 \leq k_{0}, 1 \leq i \leq M
```

#### 初期化：
$k=0$として

* 初期辞書：まず8×11の1次元DCT行列$A_{1D}$を作成した。$k$番目のアトム$(k=1,2,\dots,11)$は、

$a^{1D}_{k}=\cos((i-1)(k-1)\pi/11),(i=1,2,\dots,8)$

である。最初のアトム以外は平均を引き去り、クロネッカー積

$A_{2D} = A_{1D} \otimes A_{1D}$

を用いて初期辞書を生成した。

* 正規化：$A$の列を正規化

#### メインループ：
$k \leftarrow k+1$として、以下のステップを実行する。

* スパース符号化：追跡アルゴリズムを用いて、以下の解を近似する。

```math
\hat{x_{i}} = \arg \min_{x} ||y_{i} - Ax||_{2}^{2} \text{ subject to } ||x||_{0} \leq k_{0}
```
そして、$1 \leq i \leq M$についてスパース表現ベクトル$\hat{x}_{i}$を得る。これらを用いて行列$X$を構築する。

* K-SVD辞書更新：以下の手順により、辞書の列を更新し、$A$を得る。
　　$j_0=1,2,\dots,m$について反復する。

1. アトム$a_{j_{0}}$を用いる事例集合を定義する。$$ \Omega_{j_{0}} = \\{ i|1 \leq i \leq M, X[j_{0}, i] \neq 0 \\}$$

1. 残差行列を計算する。$$ E_{j_{0}} = Y - \Sigma_{j \neq j_{0}} a_{j}x_{j}^{T} $$

1. $E_{j_{0}}$から $\Omega_{j_{0}}$に対応する列だけをとりだし$E_{j_{0}}^{R}$とする。
1. $SVD$を適用し、$E_{j_{0}}^{R} = U \Delta V$とする。そして辞書のアトム$a_{j_{0}} = u_{1}$、その表現ベクトルを$x_{j_{0}}^{R}=\Delta[1, 1]v_{1}^{T}$として更新する。

* 停止条件：もし$||Y - AX||^{2}_{F}$の変化が十分に小さければ終了し、そうでなければ反復する。

#### 出力：
結果$A$を得る。

参考
--
* M. Elad著、玉木徹訳、スパースモデリング、第12章
* https://github.com/greyhill/pypbip/blob/master/ksvd.py
F#について

# 始めに
関数型言語の実装に慣れるため、F#の基本的な文法のコードを書いてみました

# サンプルコード

```fsharp
//型の定義
type Person = {
  Name: string
  Age: int
}

//型の具象化
let a = { Name = "hoge"; Age = 24 }
let b = { Name = "hoge"; Age = 24 }

//if文
if a = b then
  System.Console.WriteLine(a)
  System.Console.WriteLine(a.Age)
else
  printfn "Oops..."

let c = { Name = "TRIPLE"; Age = 25 }
if a = c then
  System.Console.WriteLine(a)
  System.Console.WriteLine(a.Age)
//  printfn a.Name --(A)
else
  printfn "Oops..."

//関数の定義
let my_function num = num + 1
System.Console.WriteLine(my_function 1) //2が表示される

//パターンマッチ
let my_type_check target=
    match target with
      | "TRIPLE" -> System.Console.WriteLine( "ブログ主")
      | "READER" -> System.Console.WriteLine("読者" )   
      | _ -> System.Console.WriteLine( "他人")

in 
my_type_check c.Name //ブログ主が表示される
my_type_check a.Name //他人が表示される

//再帰呼び出し
let rec saiki target=
    match target with
      | 0 -> 0
      | _ -> saiki(target-1) + 1
System.Console.WriteLine(saiki 5) //5が表示される

let rec saiki2 target=
    match target with
      | 0 -> 0
      | _ -> target+saiki(target-1) 
System.Console.WriteLine(saiki2 5) //9が表示される --(B)

let rec saiki3 target=
    if(target <= 0) then 0 //--(C)
    else target+saiki3(target - 1)ｰｰ(C')

System.Console.WriteLine(saiki3 5) //15が表示される //--(D)
``` 

#メモ
- 再帰関数として定義したい場合はrecをつける

#疑問点
- (A)でコンパイルエラーが出る理由がわからない
- (B)と(D)で結果が違う理由がわからない
- (C)でtarget == 0と記述すると、(C')でコンパイルエラーが発生する。どうやら、targetがbool型として推論されているように見えるけれど、そうなる理由がいまいちわからない
初めてのプログラミングで社内の経費精算管理ツールをつくってみる（まで）#2

##前回からの続き

プログラム未経験者のディレクターがきちんと動くプログラムをつくるまでのお話し、第2回目です。
第1回目は[コチラ](http://qiita.com/fumitoterajima/items/ab2624c9e07d79991b6b)。

現状の課題は下記の通りですが、今回は業務フローを書き出して課題に漏れが無いかの検証について書いてみます。


>###現状の課題
>
>＜メンバー視点＞
>
>* 勘定科目（○○費とか）に何を記載すれば良いのか項目が分かり辛い
* 日にちを半角スペースで入力するのが面倒くさい
* 月末に領収書をまとめるのが面倒くさい
>
＜管理者視点＞
>
>* 各メンバーで勘定科目の項目が異なるため入力しなおしが発生する
* 6人分のファイルをいちいち開くのが面倒くさい
>
まとめるといろいろと面倒くさい事が多いってことですね。
（面倒くさがりはエンジニア向きって聞いた事があります。残念ながら自分は真逆。。）
>
###対策
>
* 勘定科目をプルダウン形式にし、各科目の該当例も表示しておく（管理者の入力しなおしも減る、はず）
* 日にちはカレンダーから選択できる形式にする
* メンバーの記載した各シートを管理者の1枚のシートに反映する
>
月末の領収書まとめは、、各自でクリアファイルにまとめておきましょう。
交通費は、、グーグルカレンダーにどこに行ったか記載しましょう（事前にね）。



##業務フローの見直し

###現状のフロー

------------------------------------------------

1. 管理者：月末にメンバーに向けSlackで経費精算の告知
2. メンバー：レシート探し
3. メンバー：各自、経費精算シート(Excel)に記入
4. メンバー：Slackで管理者に経費精算シートを送付
5. 管理者：経費精算シートを受領しディレクトリに格納×メンバー分
6. 管理者：各経費精算シートの項目を確認し記入ミスや不明点があれば差し戻し×メンバー分
7. （メンバー：差し戻し内容を修正し再送付※差し戻しがあった場合）
8. 管理者：「交通費と立替経費」をそれぞれ計算×メンバー分
9. 管理者：↑を給与に反映×メンバー分

------------------------------------------------

管理者の負担が大きいですね。。（いつもありがとうございます）
特に「×メンバー分」という箇所はなんとかしたいところです。

###負担を減らせそうな箇所をピックアップ

------------------------------------------------

* 「1.」のSlackでの告知 → **自動化する**
* 「4.」経費精算シートを送付 → **ツール上でワンクリックで完了させる**
* 「5.」各経費精算シートを受領しディレクトリに格納　→ **自動化する**
* 「6.」差し戻し → **ツール上でワンクリックで完了させる**
* 「7.」再提出 → **ツール上でワンクリックで完了させる**
* 「8.」交通費と立替経費の計算 → **自動化する**

------------------------------------------------

主にツール上で
「 **ワンクリックで完結させる** 」
「 **自動化させる** 」
というのが肝になってきそうです。（自動化って使い方、合ってんのかしら）


###改善後の業務フロー

------------------------------------------------
1. Slack bot：月末にメンバーに向けSlackで経費精算の告知
2. メンバー：レシート探し
3. メンバー：各自、経費精算ツールに記入
4. メンバー：経費精算ツールで「提出」ボタンを押下
5. 経費精算ツール：各経費精算シートを1枚のシートにまとめる、且つ「交通費と立替経費」を計算して表示
6. 管理者：各項目を確認し記入ミスや不明点があれば経費精算ツールの「差し戻し」ボタンを押下×メンバー分
7. （メンバー：差し戻し内容を修正し「提出」ボタンを押下※差し戻しがあった場合） 
8. 管理者：「交通費と立替経費」を給与に反映×メンバー分

------------------------------------------------

だいぶ管理者の負担が減ってきましたね。（無理やり感ありますが）
6.の各項目の確認は人間がやるしか無さそうです。
8.の給与に反映はコピペで済みそうなので割愛します。これが100名規模とかになると自動化の対象なんでしょうね。。


##課題と対策の再設定

###現状の課題

＜メンバー視点＞

* 勘定科目（○○費とか）に何を記載すれば良いのか項目が分かり辛い
* 日にちを半角スペースで入力するのが面倒くさい
* 月末に領収書をまとめるのが面倒くさい
* **経費精算シートの送付＜追加分＞**

＜管理者視点＞

* 各メンバーで勘定科目の項目が異なるため入力しなおしが発生する
* 6人分のファイルをいちいち開くのが面倒くさい
* **メンバーへの告知＜追加分＞**
* **経費精算シートの差し戻し＜追加分＞**
* **各経費精算シートの「交通費と立替経費」の計算＜追加分＞**


###対策

* 勘定科目をプルダウン形式にし、各科目の該当例も表示しておく（管理者の入力しなおしも減る、はず）
* 日にちはカレンダーから選択できる形式にする
* メンバーの記載した各シートを管理者の1枚のシートに反映する
* **メンバーへの告知をSlack botで行う＜追加分＞**
* **経費精算シートの提出・差し戻しをワンクリックで完結させる＜追加分＞**
* **各経費精算シートの「交通費と立替経費」の計算を自動化させる＜追加分＞**

課題と対策にそれぞれ追加がありました。
これで抜け漏れは無い、はず。。（一旦、前に進まないと）

###メモ

取り急ぎ出来ることを形に。
現状で運用している経費精算シート(Excelですが。。)を修正してみました。

* 勘定科目のリスト化(プルダウン形式)※下の図は各項目を選択後の状態
* 交通費と立替経費の計算

![excel.png](https://quad.qiita.com/files/5d256dfd-9dc3-8060-49e6-e3382d8bad6b.png "excel.png")


##終わりに
###次回に向けて
次は実際にどんな画面が必要なのかを書き出してみます。

###雑感
第2回目のAdvent Calendarですが、多少書く時間が短くなりました。繰り返しですね、きっと。

早くコードを埋め込んだ記事が書きたいです。（バシっと）

引き続きどうぞ宜しくお願いいたします。
ng github-pages:deployが失敗してCommand failed: git rm -rと言われたけどgh-pagesブランチに適当なファイルを一度コミットしたら成功した

GDG神戸主催の[Angular2勉強会](https://gdgkobe.doorkeeper.jp/events/54256)へ行って[Tutorial: Tour of Heroes with Angular-CLI](https://github.com/ng-japan/ng2-hands-on-seed/tree/master/courses/tutorial)に取り組んだ。

勉強会では Chapter 5: サービス までやって、残りの Chapter 6: ルーティング は自習でやった。

やっと完成したので[Githubに公開した](https://github.com/niwatako/hello-angular)のだけど、コードだけ公開してもつまらないので動く状態で置いておきたい。

調べたら `ng github-pages:deploy` によって gh-pages ブランチの作成からビルド、コミット、プッシュまで全部やってくれるようなので、なんて便利なんだと感動したわけだけれども、やってみたら失敗する。

```
Command failed: git rm -r 
usage: git rm [<options>] [--] <file>...

    -n, --dry-run         dry run
    -q, --quiet           do not list removed files
    --cached              only remove from the index
    -f, --force           override the up-to-date check
    -r                    allow recursive removal
    --ignore-unmatch      exit with a zero status even if nothing matched


Error: Command failed: git rm -r 
usage: git rm [<options>] [--] <file>...
```

どうやらバグで、「もしも既にgh-pagesブランチに過去にビルドしたファイルがあれば消す」という所で、過去にビルドしたファイルが存在しなくても git rm -f を発行してしまうことが原因のように見える。

https://github.com/angular/angular-cli/blob/0a68cc5f152aea2773f8dcd95a86f70242f26499/packages/angular-cli/commands/github-pages-deploy.ts#L220

というわけで、gh-pagesブランチに適当なファイルをadd&commitして、もう一度masterから ng github-pages:deploy したら無事[GithubPagesに公開することが出来た](https://niwatako.github.io/hello-angular/dashboard)。

Issueも既に上がっていたのでそのうち治ると思う。

"ng github-pages:deploy" is fail on 1.0.0-beta.22-1 · Issue #3507 · angular/angular-cli
https://github.com/angular/angular-cli/issues/3507
SECCON 2016 Online CTF Writeup - Vigenere ※人力

# Vigenere (Crypto, 100pts)
以下の暗号を解くと、flagが手に入ります。

```
k: ????????????
p: SECCON{???????????????????????????????????}
c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ

k=key, p=plain, c=cipher, md5(p)=f528a6ab914c1ecf856a1d93103948fe
```

下記ページを参考に人力()で解きました。テクニカルな解法ではないです。
[ヴィジュネル暗号: Axoluder`s blog](http://axoluder.seesaa.net/category/13348409-1.html)
[ヴィジュネル暗号 - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%B4%E3%82%A3%E3%82%B8%E3%83%A5%E3%83%8D%E3%83%AB%E6%9A%97%E5%8F%B7)

## 既知部分の復号

問題とともに提示されたヴィジュネル方陣を使用します。

![venegere.png](https://qiita-image-store.s3.amazonaws.com/0/144905/a24a0dc5-64bd-0c4f-77c7-45ec5a484578.png)

縦軸(上段)を平文p、横軸(左列)を鍵kとした場合、クロスする文字が暗号化後の文字c。

平文が **S** のとき 暗号が **L** になる鍵は **V**
平文が **E** のとき 暗号が **M** になる鍵は **I**
平文が **C** のとき 暗号が **I** になる鍵は **G**

繰り返すことで、鍵の一部が判明します。残り5文字。
`k: VIGENER?????`

タイトル「Vigenere」から推測して、残り4文字。
`k: VIGENERE????`

## ここで一度復号
行き詰まってしまったため、今ある鍵部分のみ復号してみます。
ヴィジュネル暗号では、鍵の長さが平文よりも短い場合、鍵を繰り返し適用することで暗号化/復号を行うそうです。

`key: VIGENERE????`

対応づけてみるとこんな感じです。

```
k  : VIGENERE???? VIGINERE???? VIGENERE???? VIGENER
p  : SECCON{????? ???????????? ???????????? ??????}
c  : LMIG}RPEDOEE WKJIQIWKJWMN DTSR}TFVUFWY OCBAJBQ
```

先ほどのヴィジュネル方陣と照らし合わせて、復号します。

```
k  : VIGENERE???? VIGINERE???? VIGENERE???? VIGENER
p  : SECCON{A???? BCDEDEFG???? KLMNOPQR???? VWXYYZ}
c  : LMIG}RPEDOEE WKJIQIWKJWMN DTSR}TFVUFWY OCBAJBQ
```

どうやら、A～Zを並べた文字列のようです。

```
p : SECCON{A????BCDEDEFG????KLMNOPQR????VWXYYZ}
```

## ここから力技
鍵の残り4文字を探し当てる必要があります。
`k: VIGENERE????`

まずは、平文の空白を推測して埋めてみました。

```
             BABB        HIIJ        STTU
p  : SECCON{A????BCDEDEFG????KLMNOPQR????VWXYYZ}
　　　　↓
p  : SECCON{ABABBBCDEDEFGHHIJKLMNOPQRSTTUVWXYYZ}
```

(推測で)埋めた平文を用いて鍵を推測します。

```
             CODD         COEE         BODE
k  : VIGENERE???? VIGINERE???? VIGENERE???? VIGENER
p  : SECCON{ABABB BCDEDEFGHIIJ KLMNOPQRSTTU VWXYYZ}
c  : LMIG}RPEDOEE WKJIQIWKJWMN DTSR}TFVUFWY OCBAJBQ
```

3つの候補 **CODD** , **COEE** , **BODE** から、鍵の残り部分を **CODE** と仮定しました。
`key: VIGENERECODE` → ヴィジュネルコード でしょうか。


## flag取得
鍵が判明したので、残り部分も復号します。

```
k  : VIGENERECODE VIGINERECODE VIGENERECODE VIGENER
p  : SECCON{A???? BCDEDEFG???? KLMNOPQR???? VWXYYZ}
c  : LMIG}RPEDOEE WKJIQIWKJWMN DTSR}TFVUFWY OCBAJBQ

　↓

k  : VIGENERECODE VIGINERECODE VIGENERECODE VIGENER
p  : SECCON{ABABA BCDEDEFGHIJJ KLMNOPQRSTTU VWXYYZ}
c  : LMIG}RPEDOEE WKJIQIWKJWMN DTSR}TFVUFWY OCBAJBQ

　↓

SECCON{ABABABCDEDEFGHIJJKLMNOPQRSTTUVWXYYZ}
```

flagが判明し、投稿したところ正解でした。
ヴィジュネル暗号自体を知らなかったこともあり、暗号の理解から始めて2時間以上を要しました。次回はもっとスマートな解き方をしてみたいところです。
NERD Commenterでコメントアウト、アンコメントを楽にする

プログラミングしてたら絶対にやるコメントアウト、アンコメント。
それを色々と楽にしてくれるvimのプラグインの紹介です。

# プラグインの特徴
コメントの状態（コメントアウト、アンコメント）を切り替えるコマンドや、
行末にコメントの挿入といったコマンドなど、コメントアウト関係のコマンドを提供してくれるプラグインです。

またファイルタイプを見ているため、PHPなら```//```、htmlなら```<!-- -->```といった具合に
言語仕様に合わせた適切なコメントアウトを挿入してくれます。

# コマンド
多数のコマンドが提供されているが、便利なもの、特徴的なものを抜粋。全てのコマンドは[こちら](https://github.com/scrooloose/nerdcommenter#default-mappings)から。

### コメントの状態を切り替える \<leader\>c\<space\>
カーソル位置の行、選択している場合は選択行のコメントの状態を切り替える。
選択行の１行目を見て、コメントされていない行なら全てコメントアウト、
コメントされている行なら全てアンコメントを行う。

![NERDComToggleComment](https://qiita-image-store.s3.amazonaws.com/0/116289/cf2888a0-10c0-baff-71c0-feb1374b9bf8.gif)

### 選択した行のコメントの状態を個別に切り替える \<leader\>ci
さきほどのコマンドとは違い、こちらは１行毎個別に切り替える。

![NERDComInvertComment](https://qiita-image-store.s3.amazonaws.com/0/116289/b0b1b420-fac3-1a2c-a834-e9a4a7847aa5.gif)

### 行末にコメントを追加する \<leader\>cA
カーソル位置の行末にコメントを追加した後、挿入モードに切り替える。

![NERDComAppendComment](https://qiita-image-store.s3.amazonaws.com/0/116289/7f3c28d0-3f17-04f0-2a70-83b2164811a4.gif)

### ブロックコメントを挿入する \<leader\>cs
カーソル位置の行、選択している場合は選択行を囲う形でブロックコメントを挿入する。
ブロックコメントが存在しない言語の場合は各行に単一行コメントを挿入する。

![NERDComSexyComment](https://qiita-image-store.s3.amazonaws.com/0/116289/18433a20-a58f-53ca-bf7b-76d33923def8.gif)


# 設定
多数の設定が提供されているが、便利なもの、特徴的なものを抜粋。全ての設定は[こちら](https://github.com/scrooloose/nerdcommenter#settings)から。
いずれもデフォルトでOFFになっている設定で、.vimrcに追加することで設定可能。

### コメントの後にスペースを追加する
NERD Commenterでコメント挿入した時、コメント記号の後にスペースを挿入してくれるようになる。
コメントが見やすく見やすくなるのでオススメ。

```vim
let g:NERDSpaceDelims=1
```

### コメント記号を左に並べる
ネストしている場所をコメントアウトする時、コメント記号を左に並べるようにする。

デフォルトではこうなるが・・・
![NERDComToggleComment](https://qiita-image-store.s3.amazonaws.com/0/116289/cf2888a0-10c0-baff-71c0-feb1374b9bf8.gif)

設定するとこうなる。
![NERDDefaultAlign_left](https://qiita-image-store.s3.amazonaws.com/0/116289/83f0f457-aea2-e75f-996a-8819938e638d.gif)


```vim
let g:NERDDefaultAlign='left'
```

# 使ってみた所感
### **コメントアウトもアンコメントも一瞬でできる**
普段コメントアウトする際、「行頭に移動して〜、挿入モードに切り替えて〜、コメント記号挿入して〜」って
やってた事がコマンド１発で終わるので快適。複数行だって選択した後にコマンド１発で済む。
コマンドの中でも特に**コメントの状態を切り替えるコマンド（\<leader\>c\<space\>）が超便利！**
このコマンド１種類で事足りるのがでかい。とりあえずこれだけ覚えるだけでも快適になる。

### **どんなファイルでも悩むことなくコメントアウトできる**
NERD Commenter側がファイルタイプに合わせてコメントアウトしてくれるので
「この言語のコメントアウトは何の記号だっけ・・・」って悩む必要がない。
[細かいファイルタイプまで対応している](https://github.com/scrooloose/nerdcommenter/blob/057f6150bdb11124bcb63e85f5445fae47f383c3/plugin/NERD_commenter.vim#L71-L463)ので普段触らないファイルでも安心。
複数種類のファイルを触る人ほど恩恵がでかい。

そんなわけで、NERD Commenterを入れてよかった！✧＼٩( 'ω' )و ／✧

# プラグインの入れ方
.vimrcに以下を追加

```vim
NeoBundle 'scrooloose/nerdcommenter'
```

その後、NeoBundleInstallで入れることでプラグインが入る。

また、ファイルタイプを参照するので、

```vim
filetype on
```

も.vimrcに付け加える必要がある。


# NERD Commenter
https://github.com/scrooloose/nerdcommenter
Railsアプリでscssファイルの内容が反映されない時に確認すること



## 環境
- Mac OS X El Capitan 10.11.6
- Rails 5.0.0.1
- Ruby 2.3.1


## 問題
- notes.scssの内容が反映されない

## 原因
- `notes.css`と`notes.scss`が存在しており、`notes.css`のみが読み込まれていた