OmniAICreator/Qiita-1.07M huggingface dataset:
[PHP] laravelでseederを利用

# laravelインストール記事
1. [[PHP] laravelを利用したので、インストールメモ](http://qiita.com/kshimadutsu/items/3e7ea97f39145da7be09)
2. [[PHP] laravelでsqliteを利用](http://qiita.com/kshimadutsu/items/ec801d8406936b3688cb)
3. [PHP] laravelでseederを利用

# Seederを作成

Seederを作成

```console
$ php artisan make:seeder UsersSeeder
Seeder created successfully.
$ ls database/seeds/
DatabaseSeeder.php  UsersSeeder.php
```

テストコードを追記

```php:UsersSeeder.php
<?php

use Illuminate\Database\Seeder;

class UsersSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
        echo get_class($this) . "\n"; // 自分のクラス名をecho
    }
}
```

確認

```console
$ php artisan db:seed --class=UsersSeeder
UsersSeeder
```

※ クラスがautoloadされない！
下記のようにクラスが見つからない"Class UsersSeeder does not exist"というエラーが出ることがあります。

```console
$ php artisan db:seed --class=UsersSeeder
  [ReflectionException]
  Class UsersSeeder does not exist
```
追加したクラスがautoloadされていない状況です。
その際には、dump-autoloadを実行すると、autoloadされるクラスが再定義されます。

```console
$ composer dump-autoload
```
Maya | 親ノードを順に取得する

選択したノードからさかのぼり、親ノードを取得していく。

```py:MayaCmds版
import maya.cmds as cmds

def get_parent(node):
    parent = cmds.listRelatives(node, parent=True, path=True)
    if parent:
        yield parent
        for p in get_parent(parent):
            yield p

for node in get_parent(cmds.ls(selection=True)):
    print node
```

```py:PyMel版
import pymel.core as pm

def get_parent(node):
    parent = pm.listRelatives(node, parent=True)
    if parent:
        yield parent
        for p in get_parent(parent):
            yield p

for node in get_parent(pm.selected()):
    print node
```

null1を選択してスクリプトを実行すると、次の結果が得られる。
![image](https://qiita-image-store.s3.amazonaws.com/0/52118/840a9d49-211a-821b-8776-932118219799.png)

```
[nt.Transform(u'group1')]
[nt.Transform(u'group2')]
[nt.Transform(u'group3')]
```
TDの新コーンソールでConnectionを削除する話

# はじめに
Output resultするためにConnectionを作成したのですが、
テスト等で作ったConnectionを新コンソールから消せなかったからTDのサポートに問い合わせて教えてもらいました。

# 問い合わせ内容

```
お世話になっております。
Output resultを行うときのConnectionをテスト等でたくさんつくってしまったのですが、どうやって削除したらよいでしょうか？
方法がわからず困っております。
ご教示いただけたら幸いです。よろしくお願いいたします。
```
![スクリーンショット 2016-11-07 21.06.13.png](https://qiita-image-store.s3.amazonaws.com/0/77113/f9d28994-e03d-6b2f-d569-c74016bb5618.png)


# 返信内容

```
お世話になっております。
TD Tです。

Outputのconnectionの削除を新コンソールでは現在のところ実施できないため、旧コンソールにて実施頂けますと幸いです。

1 - 左下のアイコンをクリックし、Return to Old console
2.- New QueryのResult Exportをクリックhttps://console.treasuredata.com/query_forms/new
3 - 削除したいResult Outputの設定をクリックし、DELETEを実施

以上、よろしくお願いいたします。
```

また出た旧コンソール・・

# ちょっとハマった点
返信内容にしたがって操作すれば簡単に削除できました。
が、ちょっとハマったのでその点共有↓

OwnerユーザーでConnectionを削除しようとしたら、DELETEボタンがない。
なぜ・・と絶望して、自分の個人ユーザーでログインしなおして同じ操作をしたらDELETEボタンが出てきました。

どうやら作成者でないとConnectionは削除できないよう。

たしかに勝手に消されちゃったら困るもんなと思いつつ、Ownerだったら全部消せてもいいんじゃないかと思う。
そして、作ったユーザーを削除しちゃったらConnectionは消えてしまうんだろうか？
それとも権限がOwnerに移るのかな？

#さいごに
元々TDはずっと便利に使わせていただいているのですが、
これからも『旧コンソールでしかできない』がつきまとうのかなと思うと憂鬱。
いっそ旧コンソールに戻そうかな。
【Docker】 MySQLを柔軟にカスタムできるテンプレート

# 【docker】 MYSQLを柔軟にカスタムできるテンプレート
## 他テンプレート
+ [**mysql**](http://qiita.com/okamu_/items/de46c35a9db94a5685a5)
+ [(予定)mysql レプリケーション]()
+ [rails](http://qiita.com/okamu_/items/52e4cac9d10ff3440709)
+ [docker-compose rails mysql](http://qiita.com/okamu_/items/748b6e9cb6ef554dc311)
+ [(予定)docker-compose rails mysql redis]()

## 背景
+ 2年ほど前からdockerでサービスを動かしてきて、作りたいと思ってた
+ dockerの設定が記事によってまちまち
+ バージョン指定やinitするときにsqlを走らせたい
+ my.cnfなどカスタムしたい
+ dataVolumeを指定したい
+ それぞれググるのが面倒

## 使いどころ
+ ローカルのお試し開発環境で試すもよし
+ カスタムしたいところだけコメントアウトを外せばいい

## 試してみる
+ 下にあるDockerfileとかの内容をコピる or [https://github.com/vvdocker/solo-mysql](https://github.com/vvdocker/solo-mysql)にアクセスする or cloneする ``` git clone https://github.com/vvdocker/solo-mysql ```
![スクリーンショット 2016-11-09 11.22.08.png](https://qiita-image-store.s3.amazonaws.com/0/62822/5b43dbdd-780e-3053-3bf7-cd4f07963a6e.png)


+ Dockerfileで必要なところをコメントインとかする

``` Dockerfile

# Dockerfile

##########################
# base sql version
##########################
FROM mysql:5.7
#FROM mysql:5.6
#FROM mysql:latest

##########################
# ENV
##########################
ENV MYSQL_ROOT_USER root
ENV MYSQL_ROOT_PASSWORD root
ENV MYSQL_DATABASE sample_db
ENV MYSQL_USER test
ENV MYSQL_PASSWORD password

##########################
# my.cnf
##########################
#COPY conf.d/my.cnf /etc/mysql/conf.d/

##########################
# start up shell command
##########################
VOLUME ./init.d:/docker-entrypoint-initdb.d

```
``` my.cnf
[client]                           
port=3306
socket=/tmp/mysql.sock

[mysqld]                           
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

[mysqldump]                        
quick

[mysqld_safe]                      
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
```
```startup.sh
#! /bin/bash
CREATE_USER='mysql'
CREATE_PASSWORD='secret'
GRANT="GRANT ALL ON ${MYSQL_DATABASE}.* TO ${CREATE_USER}@'%' IDENTIFIED BY ${CREATE_PASSWORD}; FLUSH PRIVILEGES"
echo $GRANT | mysql -u ${MYSQL_ROOT_USER} -p${MYSQL_ROOT_PASSWORD}
```
``` startup.sql
DROP TABLE IF EXISTS `personal`;
CREATE TABLE `personal` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(10) DEFAULT NULL,
        KEY `id` (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
      LOCK TABLES `personal` WRITE;
      /*!40000 ALTER TABLE `personal` DISABLE KEYS */;
INSERT INTO `personal` (`id`, `name`)
SELECT * FROM (SELECT 1, 'root@local') AS tmp
WHERE NOT EXISTS (
      SELECT `id` FROM `personal` WHERE `id` = 1
    ) LIMIT 1;
```
+ これらのサンプルをもとに好きに書き換える

+ ``` docker build -t vvdocker-mysql . ```　でイメージを作って
+ ``` docker run --name app-db -d vvdocker-mysql ``` で起動する
+ ``` docker run --name app-db --volumes-from strage_container -d  vvdocker-mysql ```のようにbusyboxなども対応

## その他追加事項
+ railsやredis　compose周りのテンプレートも追加予定
+ 追加予定まわりはこちらを参考に[https://github.com/vvdocker?tab=repositories](https://github.com/vvdocker?tab=repositories)
Swift2.3でパスコード入力で英数字だけ入力させたい「絵文字を入力させたくない」

#swiftの正規表現に関する情報が少ない

あまりにも最近のswiftの正規表現に関する情報が少ないので

備忘録がてら残しておきます

シンプルにまとめようかと思いましたが

分かりづらくても細かく多くの情報があった方が

誰かが読み解けるかもしれないと思い

なるべく事細かにまとめましたが

分かりずらかったら、本当にすみません


#正規表現で絵文字判定する

パスワード入力画面の実装の際、英数字キーボードにしても結局絵文字入力はできてしまい

入力されたパスワードはNSURLに渡すため文字が入力されてしまうと

スレッド１エラーになってしまうので

絵文字が入力されたら、エラーを返すという処理を実装しました

ポイントは、どうやって絵文字か否か見分けるかという点、

正規表現で英数字を指定し、入力された値と正規表現を比較すれば

そこに正規表現ではない文字が含まれていたら

エラー判定が可能だと気がつきました




#NSRegularExpression を使う

swiftでは、正規表現を簡単に扱うことができません

全然モダンではありません

なのでNSRegularExpressionクラスに渡して

正規表現を正規表現として認識させる必要があります

だから、絵文字判定、正規表現を使うにはNSRegularExpressionを使いましょう


.
.
.



```swift:処理を呼び出して正規表現判定するコード
func tapBtn() {
        
        
        let reg = Regex.init("[0-9a-z]")
//変数regに正規表現を代入する
//Regexは絵文字判定をするクラス
//initでインスタンス化して.(ドット技法でアクセスしてる)
//"[0-9a-z]" は0~9またはa~zまでが来ることを指定している



        reg.test("hogehoge")//true
        reg.test("hogehogeあ")//false
//デバック確認
        
       
        
        
        if !reg.test(Code.value ?? "") {

//func test(input: String) -> Bool でtrueかfalseが返って来るので
//Code.valueがfalse（正規表現ではなかったら)は
//論理否定（if !）によって処理が通る

            print("英数字だけを入力してね")
//デバック確認
   
      return

//もし入力された値が正規表現("[0-9a-z]")の中にない場合はreturnで終了
        }

```



.
.
.


```swift:　NSRegularExpressionで絵文字を弾く処理


class Regex {
    let internalExpression: NSRegularExpression
//NSRegularExpressionを定義する
    
    let pattern: String
//定数patternを定義
    
    init(_ pattern: String) {
//initで関数を定義する
//引数patternには先ほどinitでインスタンス化、ドット技法でアクセスした正規表現("[0-9a-z]")が代入される

        self.pattern = pattern
//定数patternに渡された正規表現("[0-9a-z]")を代入する
        
        self.internalExpression = try! NSRegularExpression(pattern: pattern, options: .CaseInsensitive)
//定義したNSRegularExpression型の定数internalExpressionをselfで呼び出して　try!で代入
//＊ここに正規表現が入るわけで、これで正規表現が比較できるようになる。正規表現が使えるようになる。
//CaseInsensitiveは小文字と大文字を区別しないという意味
    }
    
    func test(input: String) -> Bool {
//関数testを定義して引数に、ユーザーが入力してきたパスワードが入る
//比較した結果が-> Boolでtrueかfalseかどちらかで返される
//!reg.test(Code.value ?? "")でアクセスされたCode.valueがユーザーが入力したパスワード


        let matches = self.internalExpression.matchesInString(input, options:  NSMatchingOptions(), range:NSMakeRange(0, input.characters.count))
//正規表現が入ってる("[0-9a-z]")internalExpressionにmatchesInStringを使い、文字を入力したinputでアクセス
//options:  NSMatchingOptions() オプションはなし
//inputの中の値をrange:NSMakeRange(0, input.characters.count))で一文字づつ取り出している

        return matches.count > 0
    }

```
PHP で Backtrace を出力する

PHP は標準ではエラーを出力した際に、Stacktrace (PHP では Backtrace と言うようだ) を出力してくれない。

下記のようなコードをエラー発生箇所の直前に入れることで、当該のエラーがどのような経路で発生しているのか辿ることができる。

```php
$trace = debug_backtrace();
foreach($trace as $line) {
    error_log("{$line["file"]}: line {$line["line"]}");
}
```

`debug_backtrace()` が返す配列をそのまま `print_r` しても良いが、情報が多すぎて読みづらいので、上記のように値を抽出した方が良いと思う。
Firebase Analyticsを本番環境とテスト環境で使い分ける[Google Analyticsみたいにできないの？]

Firebase Analyticsを本番環境とテスト環境で使い分けたいと思い，方法を調べてみましたので記事にします．
**※他の方法をご存知の方はご教授お願いします！**

**#追記(2016/11/09)
本番環境とテスト環境でBundleIDを変えると，Firebase Analyticsでも1つのプロジェクトでそれぞれ分析できるみたいですね（たぶん）**
分析レポートが返ってくるのを待って正しく動いているか確認します．

**#追記(2016/11/10)
上記の方法で本番環境とテスト環境でFirebase Analyticsでも1つのプロジェクトでそれぞれ分析できることを確認しました！！**
一応，解決...したかな？


# Google Analyticsの場合
表題にも書きましたが，Google Analytics(以下，GA)での切り替えと同様な方法がないかと模索しているので，まずGAでの方法を紹介します．

GAでは，
「1つのアカウントで分析するためのIDを複数取得することができ，この複数のIDを本番用とテスト用に切り替えることができます」

# Firebase Analyticsの場合
Firebase Analytics(以下，FA)では，僕が調べたところ

「GAにおけるアカウントに相当するプロジェクトを必要数作成し，各プロジェクトに本番用とテスト用を登録する」

という方法があるのですが，環境ごとにFAのプロジェクトを作成するのはちょっと...
# やりたいこと
**FAでもGAのように1つのプロジェクトで複数の環境を切り替えたい！**
上記の方法をご存知の方がいたらご教授お願いいたします！
（そもそも不可能である可能性もありますが...その場合は「できないよ」とご指摘いただけると幸いです．）
Bash on Ubuntu on Windows(BoW)の最高の端末環境をつくる

mattnさんの [Bash on Ubuntu on Windows の最高の端末環境を教えてやるからちょっと来い。](http://mattn.kaoriya.net/software/bow/20160824234928.htm)を、たぶん一番簡単な方法で。
といってもほぼ同じことしかしていないので、上記事でわかる人は読まなくてもよさそう。

## Bash on Ubuntu on Windowsを使えるようにする

* Windows10にアニバーサリーアップデートを適応
* プログラムの変更と削除>Windowsの機能の有効かまたは無効化から、Windows Subsystem for Linuxのチェックボックスをチェック
* PowoerShellを起動して bash と入力

そのまま流れに身を任せると使えるようになる

ついでにgitをインストールしておく
BoWを起動して

```Bash
sudo apt-get update
sudo apt-get install git
```

## msys2を入れる

[msys2 Installer](https://msys2.github.io/)から64bit版をダウンロードして起動、流れに身を任せてインストール

インストール後、msys2にgccとmakeを入れる

```bash
pacman -Syuu
pacman -S gcc
pacman -S make
```

## wslbridgeをビルドする

[GitHub - rprichard/wslbridge](https://github.com/rprichard/wslbridge)

BoW上でmsys2のhomeに行って

```bash
git clone https://github.com/rprichard/wslbridge.git
```

msys2上で

```bash
cd /home/wslbridge/frontend
make
```

BoW上で

```bash
cd [msys2のhome]/wslbridge/backend
make
```

ビルドできたら、msys2上で

```bash
mintty -t "Bash on Ubuntu on Windows" -e [wslbridgeのディレクトリ]out/wslbridge.exe
```
を入力するとmintty上でBoWが起動する。


## ショートカットを作る

このままだといちいちmsys2上から長いコマンドを入力しなくてはいけないので、ショートカットを作る。

1. デスクトップで右クリックとかしてショートカットを作る。
2. ショートカットのプロパティを開く
3. リンク先に以下のように入力

```bash
C:\msys64\usr\bin\mintty.exe -h always -t "Bash" -e "[wslbridgeのディレクトリ]wslbridge/out/wslbridge.exe"
```


あとは煮るなり焼くなり。
[QNX] QNXに関する公開情報まとめ

# QNX とは
## 概要
> QNX（キューエヌエックス、またはキューニックスと発音）は商用のリアルタイムUnixであり、POSIXとPOSIX 1003.1bに対応している。主に組み込みシステム向けに販売されている。元々はカナダの企業QNXソフトウェアシステムズが開発していたが、同社は後にリサーチ・イン・モーション（現ブラックベリー）が取得した。

[QNX - Wikipedia](https://ja.wikipedia.org/wiki/QNX) より引用

## 適用範囲
・車載機器
[BlackBerryがFordとパートナーして、同社のまれな孝行息子QNXの多方面的車載利用を推進 | TechCrunch Japan](http://jp.techcrunch.com/2016/11/02/20161101blackberry-teaming-up-with-ford-for-broader-use-of-qnx-in-connected-cars/)
[QNX OS for Automotive Safety](http://www.qnx.com/products/certified_os/automotive-safety.html)
[車載インフォテイメント向け QNX CAR プラットフォーム](http://www.qnx.com/products/qnxcar/index.html)

・医療機器
[QNX OS for Medical (医療機器向けQNX OS)](http://www.qnx.com/products/certified_os/medical.html)

# QNXのAPIに関するドキュメント
公開されているドキュメントとしては以下などを参照して下さい。
v6.3 ~ v6.6 までがHTMLとPDFで公開されています。

[QNX Product Documentation](http://www.qnx.com/developers/docs/)

# その他
## Screen Graphics Subsystem
QNXはWindow Systemとして、Screenというモジュールを使用している。
公式のドキュメントとしては以下などを参考

[About Screen - QNX SDP 6.6 Documentation](http://www.qnx.com/developers/docs/660/index.jsp?topic=%2Fcom.qnx.doc.screen%2Ftopic%2Fmanual%2Fcscreen_about.html)

参考ソース:
公式ドキュメントからサンプルへのリンクなどはないが、GitHubなどをAPI名検索すればいろいろと存在している。
ひとまず、以下に公式(QNX/BlackBerry)の公開ソースへのリンクを記載。

- [blackberry/TouchControlOverlay: TouchControlOverlay was developed as a translation layer from PlayBook touch inputs to mouse and keyboard events to make porting easier.](https://github.com/blackberry/TouchControlOverlay)
- [blackberry/Core-Native-Community-Samples: Core Native Samples contributed by the Community](https://github.com/blackberry/Core-Native-Community-Samples)

## Qt
QtはQNXに対応している様子。

+ [QNX - Qt Wiki](http://wiki.qt.io/QNX)
+ [QNX CAR 新バージョンが Android アプリと Qt インターフェイスに対応](http://www.qnx.co.jp/news/pr_5613_1.html?lang=en)

# 関連

+ [[Linux][mount] LinuxでQNXのファイルシステムをマウントする - Qiita](http://qiita.com/koara-local/items/1c4b6c619129d9d750e8)

# 参考
[組み込みシステム用QNXリアルタイム オペレーティング システム（RTOS）ソフトウエア、開発ツール、サービス](http://www.qnx.com/)
[オペレーティング システム](http://www.qnx.com/products/neutrino-rtos/index.html?lang=jp)
[QNX - Wikipedia](https://ja.wikipedia.org/wiki/QNX)
[車載ソフトウェア：QNXが組み込みソフト基盤を刷新、ディスプレイオーディオに最適な開発キットも - MONOist（モノイスト）](http://monoist.atmarkit.co.jp/mn/articles/1403/10/news105.html)
スマートフォン用のWebページでスリープを防ぐ

あるウェブページを表示させているときにスマートフォンの画面をスリープになるのをJavaScriptだけで防ぎたかったので探してみた。NoSleep.jsというライブラリを発見した。

インストールは次の通り。

```
$ npm install --save nosleep.js
```

以下サンプル。サンプルを作るのにめんどくさかったのでReactを使ってあるが本質ではない。

```js
import NoSleep from 'nosleep.js/NoSleep'

class App extends Component {
    constructor() {
        super();
        this.noSleep = new NoSleep();

        this.state = {sleep: "Sleep"}
    }

    render() {
        return (
            <div>
                <button onClick={() => {
                    this.setState({sleep: "No Sleep"});
                    this.noSleep.enable();
                }}>No Sleep
                </button>
                <button onClick={() => {
                    this.setState({sleep: "Sleep"});
                    return this.noSleep.disable();
                }}>Sleep
                </button>
                {this.state.sleep}
            </div>
        );
    }
}
```

NoSleepのインスタンスを作りボタンが押されあときのイベントハンドラでenableを実行する。このenableはイベントハンドラの中で実行する必要がある。コンストラクタの中で実行しても有効にならない。

実装はJavaScriptに埋め込まれた見えない小さな動画を再生することで画面がスリープになるのを防いでいるようだ。

## 参考
* https://github.com/richtr/NoSleep.js
Mavenリポジトリから壊れたJARを一括削除する

# 問題

Javaのトラブルシューティングで遭遇する厄介な問題に、原因不明の`ClassNotFoundException`がある。原因を調べていくと、ローカルMavenリポジトリのJARが壊れていた、ということがある。とくに、外部Mavenリポジトリサーバが一時的にダウンしていたり、別のURLに移動したりしていた場合、中身がHTML（Webサーバのエラーページ）のJARがリポジトリに紛れ込んでいることがある。

こういった問題のトラブルシューティングは非常に面倒なので、原因不明のエラーに悩まされないためにも、このような中身がHTML形式になっている壊れたJARをローカルMavenリポジトリから一掃したい。

# 解決方法

ローカルのMavenリポジトリに行って、以下のコマンドを実行する。

```sh
$ cd ~/.m2/repository/
$ find . -type f -name *.jar | xargs file --mime-type -F '' | grep "text/html" | awk '{ print $1 }' | xargs -I{} rm -v {}
```
Amazon Linuxがコンテナ化されたのでApache + PHP + PhalconのDocker Image作ってみた

普段、AWS上でアプリを動かすことが多いので、出来る限りAWSと開発環境を同じにしたいという要望があるんだけど、タイムリーにImageを取得することが出来るようになったので、開発用のDockerImageが簡単に作れるようになった。それと同時に、yumのリポジトリも公開されたので、yum installがどこからでも出来るようになった！以前は、EC2上でrpmをインストールして、EBSデタッチして、アタッチしてイメージ吸い取ってとかの作業が全く必要なくなりました。やったね！

Image取得するのにちょっと手間がかかるけど、後ほどDockerHubに上がるそうなので、正座してまちましょう。

# Apache + PHP + Phalconのイメージ作成

```Dockerfile
# from AWS AMI Image
# see http://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/amazon_linux_container_image.html
# see http://qiita.com/taishin/items/1305d4f97ffe08e24bb0
FROM 137112412989.dkr.ecr.ap-northeast-1.amazonaws.com/amazonlinux:latest

# Apache
RUN yum -y install httpd24
RUN sed -i -e "s/Listen 80/Listen 8000/" /etc/httpd/conf/httpd.conf
RUN sed -i -e "s/AllowOverride None/AllowOverride All/" /etc/httpd/conf/httpd.conf
RUN sed -i -e "s/Options Indexes FollowSymLinks/Options -Indexes +FollowSymLinks/" /etc/httpd/conf/httpd.conf

# PHP 5.6
RUN yum -y install php56-devel php56-pdo php56-pecl-apcu php56-mysqlnd php56-opcache uuid-php56

# Phalcon 2.0.13
RUN yum -y install gcc make git
RUN git clone git://github.com/phalcon/cphalcon.git && cd cphalcon/build && git checkout -b phalcon-v2.0.13 && ./install
RUN echo 'extension=phalcon.so' > /etc/php-5.6.d/phalcon.ini

ENTRYPOINT /usr/sbin/httpd -D FOREGROUND

EXPOSE 8000
```

EC2のインスタンスからイメージを作ると1.4Gほどあったのが865Mほどに減りました！
これも嬉しい。

http://qiita.com/taishin/items/1305d4f97ffe08e24bb0
Xploreが超絶便利

# Xplore
[Xplore](https://github.com/sn-developer/Xplore)という開発者用toolがマジで便利で、"Scripts - Background" モジュールの痒いところに手が届くヤツで目から鱗な感じです。

## インストール方法
- Hi Systemのアカウントがある場合
    -  [Share] (https://share.servicenow.com/app.do#/detailV2/96bf34fbdb4e2a0010c37ecfbf9619a7/overview) からUpdate setを取得する
- Hi Systemのアカウントがない場合
     
    - [Github] (https://github.com/sn-developer/Xplore) の dist から Update Setを取得する
- あとは 通常の Update Set 適用方法と同じ。

## 何ができるか
1. Server side / Client Side の任意ののコードを実行し、結果を詳細に表示。
   console.dir() や JSUtil.logObject() で表示するように、実行結果オブジェクトの中身を詳細に表示してくれる。
2. jslogやgs.logの出力結果を画面に表示
![image](https://qiita-image-store.s3.amazonaws.com/0/72876/4c198be2-9ac7-4ff4-9c8f-10fdef379749.png)
3. XMLのフォーマット
![image](https://qiita-image-store.s3.amazonaws.com/0/72876/1947c67f-63c8-a9d2-7432-ce157ce32fea.png)
4. 正規表現のテスト
![image](https://qiita-image-store.s3.amazonaws.com/0/72876/32f2f4b2-224e-266e-2072-d0440ef64799.png)
5. テーブルの階層構造表示
![image](https://qiita-image-store.s3.amazonaws.com/0/72876/2075720f-6602-97d1-19a7-dde39f516994.png)
6. Script Includeを検索・表示し、"1."で示したようにテストできる。
![image](https://qiita-image-store.s3.amazonaws.com/0/72876/1d58f2a4-98de-f015-3ad4-80a10a1d3267.png)

## 今後
- Intellisense 機能(コードの自動補完)を追加する予定らしい。

## Misc
"Scripts - Background" でお試しするよりは遥かに高機能で使いやすい。特に、[wiki](wiki.servicenow.com)や[docs] (docs.servicenow.com)、[Community](community.servicenow.com)やGoogle先生で調べても良く分からないAPIの詳細を調べるときや...各種調査で...。

```js
for(var i in hoge) gs.print(i); 
```

とか

```js
gs.log(Object.getOwnPropertyNames(hoge));
```

とか

```js
JSUtil.logObject(hoge);

```

などで地道に探っていくより遥かに効率的で便利なのでマジ感謝しかない。
【Javascript】ハッシュ（連想配列）からkey指定でvalueを取得する

忘れやすいのでメモしておきます。

```js
var messageHash =
{
    "a": "あいうえお",
    "b": "かきくけこ",
    "c": "さしすせそ",
};

alert(messageHash["a"]);  // -> あいうえお
```

* * *
追記：以下の方法でもOK。

```js
alert(messageHash.a);  // -> あいうえお
```
Eclipse Che の中で起動したサーバを外からアクセスする

# 疑問

Eclipse Che でサーバアプリケーションを開発した場合，手元の端末からそのサーバへアクセスしたいわけですが，アドレスやポートはどうやって知るのでしょうか?

# 回答

次のような手順でアドレスを取得できます。(添付画像参照)

0. ウインドウ右上にある青色のボタンを使って，パースペクティブを Operations に切り替えます。
0. ウインドウ情報にあるタブを `Servers` に切り替えます。
0. `Exposed Port` の情報から，外部に公開されているアドレスとポートの組を得ます。

![Screenshot 2016-11-09 at 10.png](https://qiita-image-store.s3.amazonaws.com/0/5414/fb5aafc5-51ad-de67-b383-3ca17b3da825.png)

## 補足(雑感)

このような感じで，立ち上げたサーバは外部に公開されます。
ポートはランダムですが，IPアドレスさえわかれば，スキャンを掛けるのは容易です。

ファイアウォールの内側なら大して気にならないと思いますが，クラウド IDE として外部に公開してあるものを使う場合には，パスワード認証やクライアント鍵認証などの対策を取りましょう。

# 対象バージョン

Eclipse Che

* Version :5.0.0-M7-SNAPSHOT
* Revision :b3ef0a2edcdfb80e
* Build Time :2016-11-03 16:30:56
Paperclip で保存する画像の寸法チェックをする

## 概要

Paperclipを利用した画像アップロードの際に画像の寸法（height, width）をチェックし、

> 「横幅XXXpx、縦幅YYYpx以下の画像は許可しない」

といった寸法制限を実現します。

## 環境

- Rails 4.2
- Gem: Paperclip 4.3.0
- ImageMagick 6.9.5-2

## 実装

```image_dimensions_validator.rb
class ImageDimensionsValidator < ActiveModel::EachValidator

  CHECKS = { greater_than: :>, greater_than_or_equal_to: :>=,
             equal_to: :==, less_than: :<, less_than_or_equal_to: :<= }.freeze
  SIDES = [:width, :height].freeze

  def validate_each(record, attribute, value)
    dimensions = Paperclip::Geometry.from_file(value.queued_for_write[:original].path)

    SIDES.each do |side|
      next if options[side].blank?
      CHECKS.keys.each do |check|
        next if options[side][check].blank? || dimensions.send(side).send(CHECKS[check], options[side][check])
        record.errors[attribute] << "#{side} (#{dimensions.send(side)}px) must be #{check} #{options[side][check]}px"
      end
    end
  end

  def check_validity!
    SIDES.each do |side|
      next if options[side].blank?
      unless CHECKS.keys.any? { |argument| options[side][argument].present? }
        fail ArgumentError, "You must pass either :#{CHECKS.keys.join(', :')} to the validator"
      end
    end
  end
end
```

### オプション

- :width
- :height

にそれぞれ、もしくはどちらかにオプションを指定。

```オプション.rb
{less_than: INT} # INTより小さい長さの画像ならOK
{less_than_or_equal_to: INT} # INT以下の長さの画像ならOK
{greater_than: INT} # INTより大きい長さの画像ならOK
{greater_than_or_equal_to: INT} # INT以上の長さの画像ならOK
{equal_to: INT} # INTと同じ長さの画像ならOK
```

### 使用例

```使用例.rb
class SampleImage < ActiveRecord::Base
  has_attached_file :file, IMAGE_OPTIONS
  # widthが640px以上、かつheightが460px以上の画像ならOK
  validates :file, image_dimensions: {
    width: {greater_than_or_equal_to: 640},
    height: {greater_than_or_equal_to: 460}
  }, if: -> {file.dirty?} # upload時のみ寸法のvalidate
  ....
end
```

## 参考

[thoughtbot/paperclip](https://github.com/thoughtbot/paperclip)
[ruby on rails - Paperclip image dimensions custom validator - Stack Overflow:](http://stackoverflow.com/questions/12388887/paperclip-image-dimensions-custom-validator)
[[ruby] dimensions_validator.rb - CodeGist:](http://codegists.com/snippet/ruby/dimensions_validatorrb_sija_ruby)
モバイルファーストインデックス（MFI）現在のまとめ

自分用備忘録として、各記事から急ぎ抜粋。おかしな点ありましたらご指摘ください。

##とりあえずgoogle検索結果にどのような影響があるか？
モバイルのインデックスがプライマリになるので、PC向けページにあるコンテンツはモバイル向けページにあるコンテンツほど重要視されなくなる。
##PCとSPで同一のコンテンツが好ましい。
だが、アコーディオン等、初期状態で隠れているコンテンツもUXを高めるためであれば問題ないが、無関係のコンテンツを格納するなど、SPAMのような使い方はペナルティ対象。
##概要図
![image.png](https://qiita-image-store.s3.amazonaws.com/0/104471/9e652955-7c69-a3e2-c4db-e2702b716613.png)
（出典：http://web-tan.forum.impressrd.jp/e/2016/11/08/24325）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104471/c35b8439-f2e1-98a4-4da8-b5f24f42cf46.png)
（出典：http://web-tan.forum.impressrd.jp/e/2016/11/08/24325）

##開始時期
Googleはあと数か月と時期については曖昧にしている
業界的には、「たぶん2月ぐらい」や「たぶん4月、5月」という話がでている。
※というわけで、現時点では2017年春くらいとみておこう。
※その前にテスト期間があるはずなので年明けにはテスト開始なのでは？

##とりあえず急ぎ対応しなくてもよいサイト
・レスポンシブ・ウェブ・デザインで対応中
・同一URLで動的に出し分け中（PCもモバイルもほぼ同じコンテンツ）
・スマホ向けはない。PC向けサイトだけ（順位評価は別として）

##MFIで対応が必要だと思われる・同一URLで動的に出し分け中（モバイル版のコンテンツが薄い）
・PC向けとスマホ向けを別URLで運用中
##すでに設定済みのrel=”canonical”とrel=”alternate”などのlink要素は変更が必要か？
必要なし。無数にありすぎて対応が不可能だから。
Google側で何かしら処理する予定との事。

##PC向けページしかないサイトの扱い
検索結果にはPCサイトの内容から表示される。

##AMPについて
AMP対応サイトは評価対象。
また、検索結果のスニペットにAMPページが使われることはない。正規バージョンのページ（今後はモバイル向けページ）の情報が使われる。
https://blog.sakurasaku-labo.jp/amp-beginners/
![image.png](https://qiita-image-store.s3.amazonaws.com/0/104471/56727a6a-3523-d48c-b222-6ec92b3c8c8e.png)
※個人的にはAMPはニュースサイトなどアーカイブ系のコンテンツ向けだと思うので無理にサイトごとAMPにする必要はないのでは？と思っております。

##構造化
もちろん構造化データも同様に評価対象
http://www.seohacks.net/blog/html_css/kouzoukadata/

###出典まとめ
MFI
http://web-tan.forum.impressrd.jp/e/2016/11/08/24325
https://www.suzukikenichi.com/blog/google-introduces-mobile-first-index/
https://www.suzukikenichi.com/blog/q-and-a-about-mobile-first-index-part2/
AMP
https://blog.sakurasaku-labo.jp/amp-beginners/
サイト構造化
http://www.seohacks.net/blog/html_css/kouzoukadata/
Vue.js でリストを読み込む

Spring Boot + Doma2 で作ったapiを Vue.js から呼び出し、リストを構築してみた。
今まではjQueryのajaxを利用してapiのデータを受け取っていたが、今回はvue-resourceというものを利用してみた。

```html:pickup.html
<table id="pickup" class="table table-bordered">
	<thead>
		<tr>
			<th></th>
			<th>タイトル</th>
			<th>開始日</th>
		</tr>
	</thead>
	<tbody>
		<tr v-for="item in items">
			<td><img src="{{ item.image }}" width="100" /></td>
			<td>{{ item.title }}</td>
			<td>{{ item.period}}</td>
		</tr>
	</tbody>
</table>
<a href="javascript:append();">append</a>
<script type="text/javascript" th:inline="javascript">/*<![CDATA[*/
	var list = [];
	new Vue({
		el: '#pickup',
		data: {
			items: list
		}
	})
	function append() {
		Vue.http.get('/api/pickup?offset=' + list.length).then((response) => {
			for (i = 0; i < response.body.length; i++) {
				list.push(response.body[i]);
			}
		});
	}
	append();
/*]]>*/</script>
```

今回は Thymeleaf を利用しているので、<script>タグへの'th:inline'属性の追加と、CDATAの記述を行っている。
list変数をVue.jsにバインディングして、load()関数でapiの内容をpushしている。配列をそのままpush出来ないようなので、forで一件ずつ処理を行うのが若干残念だった。
Spring Boot + Doma2 で UnknownColumnHandler を設定する

Spring Boot + Doma2 な環境でwebアプリを作り始めた。
そんな中、sqlファイルで

```
SELECT * FROM ...
```

のような記述をしたら、以下のようなエラーが発生した。

> org.seasar.doma.jdbc.UnknownColumnException: [DOMA2002] カラム[pub_date]が結果セットに含まれますが、このカラムにマッピングされたプロパティがエンティティクラス[xxx.yyy.Zzz]に見つかりません。次の3つの内のいずれかの対応が必要です。1)エンティティクラスに[pubDate]という名前のプロパティを定義する。2)任意の名前のプロパティに@Columnを注釈し@Columnのname要素に[aaa]を指定する。3)UnknownColumnHandlerに未知のカラムを無視するような実装をしorg.seasar.doma.jdbc.Configに設定する。
SQLファイルパス=[META-INF/xxx/yyy/zzz/select.sql]。

エラーメッセージに解決策が書かれていて素晴らしい！
この中で、今後実装を進めるなかで手間が減りそうな3を選択することとし、以下のような実装を行った。

```java:App.jaga
@EnableAutoConfiguration
@ComponentScan
public class App {

	@Autowired
	DataSource dataSource;

	@Autowired
	Dialect dialect;

	@Autowired
	Naming naming;

	public static void main(String[] args) throws Exception {
		SpringApplication.run(App.class, args);
	}

	@Bean
	Config domaConfig() {
		return new Config() {
			@Override
			public DataSource getDataSource() {
				return dataSource;
			}

			@Override
			public Dialect getDialect() {
				return dialect;
			}

			@Override
			public UnknownColumnHandler getUnknownColumnHandler() {
				return new UnknownColumnHandler() {
					@Override
					public void handle(Query query, EntityType<?> entityType, String unknownColumnName) {
					}
				};
			}

			@Override
			public Naming getNaming() {
				return naming;
			}
		};
	}

}
```

ググっても実装方法が見つけられるかなり時間をムダにしてしまった...
そもそもsqlでカラムを指定するべきな気がするが...
Compose.io(OSS DBaaSサービス）のMongoDBを一通り触ってみたよ

バックアップやAdd-onのインストール、DB作成などなど、MongoDBで何ができるのかを色々試したのでメモします。
**Mongoそのもの、構築等に詳しくない人でも、セルフサービスでMongoを利用することができるサービス**だなと改めて実感しました。

##関連の超概略記事
http://qiita.com/azzeten/items/2e3901c080aafed078eb

前にも書きましたがクラウドサービスはちょこちょこUIが変わったり、機能追加が激しいので、ちょっと見ないうちに色々充実してて結構感動します。

## DBを作る、コレクションを作る、接続用のユーザを作成する

mongoでいうところの use ホニャララです。
自分のPCのローカルにクライアントが何も入っていくても、一応一通りのことができるようになってるのが良いです。
![スクリーンショット 2016-11-08 21.45.22.png](https://qiita-image-store.s3.amazonaws.com/0/119378/bbbe0cf8-0128-0740-bc8a-61efe6f5bab2.png)

![スクリーンショット 2016-11-08 21.46.00.png](https://qiita-image-store.s3.amazonaws.com/0/119378/fd82c581-be71-fd3f-053e-f90dc403ab0d.png)

接続用のユーザを作りたいときは、上記のキャプチャの左ペインにある「Users」をクリックしてadd userするとできます。
![スクリーンショット 2016-11-13 18.24.52.png](https://qiita-image-store.s3.amazonaws.com/0/119378/63daf922-834a-131d-5f98-ac86e92ccace.png)


## クライアントからmongodbに接続してみる
ユーザを作成したのでお次は接続。
クライアント入っている場合は、以下のようにやれば接続できます。
クライアントが入っていない場合、（Macであれば） **brew install mongodb --with-openssl**でインストールします。 
また、SSLで接続できるように、example.comとかで適当なpemファイルを作って、composeのWEB UIに乗ってるSSLの暗号文字列たち↓をコピペします。
![スクリーンショット 2016-11-13 18.41.59.png](https://qiita-image-store.s3.amazonaws.com/0/119378/dbe92752-23ec-1be3-bdd5-d5d867004e27.png)

コマンドライン的には・・・。

```console:クライアントのインストール
$ brew install mongodb --with-openssl
$ vi example.pem
コピペして保存
```

```console:接続
$ mongo --ssl --sslCAFile ホスト名:ポート番号/DB名 -u ユーザ名 -p パスワード
```
こんなかんじになります。
![スクリーンショット 2016-11-13 18.46.09.png](https://qiita-image-store.s3.amazonaws.com/0/119378/4d02f39d-21f0-83c8-39e2-9e133b49294c.png)

参考はこちら
https://www.compose.com/articles/going-ssl-with-compose-mongodb-plus/

## バックアップ取得とリストア
バックアップ取得も自動と手動の両方があります。
自動は日次とかで取られて、自分で取りたいタイミングでも**手動でバックアップできるようで、しかも1クリック！**

バックアップを取ったあとは、リストアもしくは自分の手元にダウンロードができます（随分前に試した同じcomposeのPostgreSQLのサービスと一緒っぽいです）
![スクリーンショット 2016-11-09 10.01.23.png](https://qiita-image-store.s3.amazonaws.com/0/119378/2fd1c283-026b-2e93-42d9-2b11a9a715dc.png)

## Add-onを追加する
現状追加できるのは、Syslog-NGとOplog Access、Telegraf。
![スクリーンショット 2016-11-08 21.47.54.png](https://qiita-image-store.s3.amazonaws.com/0/119378/d3bfb90d-4a3a-3b88-e825-b4ad32e9ab8b.png)

ためしにoplog accessを追加
![スクリーンショット 2016-11-08 21.49.26.png](https://qiita-image-store.s3.amazonaws.com/0/119378/700fe224-420b-c973-ad7b-1fa08499f285.png)


数分も立たないうちにadd完了です、さっきまで「Add」だったのが「Configure」に代わり、具体的な接続ユーザや接続子URL等を確認することができます。
![スクリーンショット 2016-11-08 21.50.29.png](https://qiita-image-store.s3.amazonaws.com/0/119378/072283b8-5447-d2e8-9195-333476689aae.png)
Visual Studio 2019, 2015のライセンスの状態の確認方法

###Visual Studio 2019, 2015のライセンスの状態の確認方法
1.Visual Studio 2019, 2015を起動する。
2.ヘルプーMicrosoft Visual Studioのバージョン情報を選択。
3.ウィンドウの右上のあたりにあるライセンスの状態を選択。
jQuery関数への第二パラメータとしてコンテキスト参照を渡す

## 以下参照

```jQuery:jquery.js
// <p>要素から見つかった<em>ワードの合計数を出力する
window.alert($('p').find('em').length + ' italic words');

// 以下コンテキスト参照で上記コードと等価
window.alert($('em', $('p')).length + ' italic words');
```
nodeのlogger levelを切り替える方法

# はじめに
nodeのデバッグ中なんかに詳細な情報を出したくなることはちょくちょくあると思います．

どういうわけか，loggerレベルを切り替えるコマンドをよく忘れてしまうので，メモしておきます．

方法は，`コマンドライン`，`GUIツール`，`ソースコードで指定`の3つがあります．

# コマンドライン
`node`を起動させた状態で，下記コマンドを入力します．

```bash
$ rosservice call /(node_name)/set_logger_level ros.(package_name) (logger_level)
```

logger_level は下記のいずれかを入力します．

- logger_level
  - DEBUG
  - INFO
  - WARN
  - ERROR
  - FATAL

# GUIツール
あるいは，`rqt_logger_level`というツールから設定可能のようです．
`node`を起動した状態にするのは前述の通りです．

```bash
$ rosrun rqt_logger_level rqt_logger_level
```

# CPPソースコード
コード内で指定もできるようです．

```cpp
#include <ros/console.h>
if( ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Debug) ) {
   ros::console::notifyLoggerLevelsChanged();
}
```

# 参考文献
- [ROS Wiki - Logging](http://wiki.ros.org/roscpp/Overview/Logging)
- [ROS Wiki - rqt_logger_level ](http://wiki.ros.org/action/fullsearch/rqt_logger_level?action=fullsearch&context=180&value=linkto%3A%22rqt_logger_level%22)
データ型のvoidってなんなんだろう

サンプルコードをeclipse上で書いていて、
メソッドのデータ型の一つであるvoidが気になったので調べて見ました。

端的に言うと、戻り値がないメソッドにはvoidを指定すればいいようです。

普通、戻り値のデータ型はメソッドが呼び出された時に値を一つだけ呼び出し元に返します。
	
public int getId(){
　　　　return id;
}

return値が何もない場合はvoidを指定します。

public void setId(int id){
　　　　this.id = id;
}

ちなみにvoidはreturnを省略することもできるので、
ここでは省略しています。
技術英語 > Stabilize the error / make it occur reliably.

@ Code Complete (No. 17482 / 36077)

> Here's an effective approach for finding a defects:
1. <font color=red>Stabilize the error</font>
2. Locate the source of the error (the "fault").
    ...
3. Fix the defects
4. Test the fix
5. Look for similar errors.

問題が起きた時に、その再現性を高める方法を探すということでStabilize the errorなのだろう。
再現率が高まれば、色々試行錯誤ができるようになる。

下の方に以下の文章がある。

> The defect is easier to diagnose if you can stabilize it -- that is, make it occur reliably.
マウスカーソルを大きく見やすく見つけやすく注目してもらうソフト2種：Kokomite/PointerStick

#マウスカーソル今どこ？を主張するソフトウェア
ここ！ってのが一目で分かるようにしたいときのソフトを2種類ご紹介。
プレゼン時や動画撮って説明するときとか便利です。

Mikulusでマウスカーソル目立たせたくて検索。しかし…(後述)

##:one: Kokomite
![kokomite00.png](https://qiita-image-store.s3.amazonaws.com/0/71326/4ce8ea3e-f124-2cfd-16fc-01c6217f379d.png)
Kokomiteの詳細情報 : Vector ソフトを探す！
http://www.vector.co.jp/soft/winnt/amuse/se476302.html
`Kokomite1-0-2-125.zip`をダウンロード。

###起動
インストールとかありません。実行ファイルダブルクリック即起動。
![kokomite01.png](https://qiita-image-store.s3.amazonaws.com/0/71326/03c8397d-d7d3-be8c-a56e-1cd9ecc73928.png)
起動してすかさず**ON**をクリックするとこんな見た目になります。
黄色い半透明の円がマウスカーソルの位置に付いてくるようになります。

###設定
![kokomite02-settings.png](https://qiita-image-store.s3.amazonaws.com/0/71326/0d830818-2132-ab4a-00ff-c05e5d8faad0.png)
様々な設定ができます。

- 色
- 形状　：　円とリングから選べます
- 透明度
- サイズ　：20px　～　150px
- 位置追跡周期
- 位置補正
- 点滅
- HotKey
- マウスクリックモニタ　：　マウスクリックすると色が変化して分かりやすくなります。


###設定変えてみた
![kokomite02-settings2.png](https://qiita-image-store.s3.amazonaws.com/0/71326/cbb5f5b6-f687-8387-3299-b9b049abe264.png)
![kokomite03.png](https://qiita-image-store.s3.amazonaws.com/0/71326/8ce685f8-0947-b16f-c212-20ea71884fe6.png)

- リングにしてみた。適度なリング形状。
- 点滅を最速に。非常に目立ちます。
- マウスクリックモニタ有効　クリックすると色が変わる。左クリックのみ。
- 黄色のときは「クリックモニタ」有効にしたとき、クリックすると赤になるので、最初から赤にしてみた→クリックすると黄色になる。


##:two:PointerStick
![pointerstick.png](https://qiita-image-store.s3.amazonaws.com/0/71326/81ba2159-1d9b-5f9e-f284-16071201701e.png)
Download PointerStick 2.77
http://www.softwareok.com/?Download=PointerStick
`PointerStick_x64.zip`

##起動
こちらもインストールとかありません。シンプル。

![pointerstick01.png](https://qiita-image-store.s3.amazonaws.com/0/71326/4ab5b2fb-a532-657a-456b-e7f883368c51.png)
超目立つ！！まさに指示棒。

##設定
標準で日本語化できます。
![pointerstick02.png](https://qiita-image-store.s3.amazonaws.com/0/71326/03e36a4e-f00e-7f09-6183-9a66dc7a755b.png)

![pointerstick03.png](https://qiita-image-store.s3.amazonaws.com/0/71326/74650206-ca19-9e03-916f-0ccaee73b641.png)
トリプルクリックによる非表示が便利。楽ですね。

![pointerstick04.png](https://qiita-image-store.s3.amazonaws.com/0/71326/48fed5e8-a89a-3a0f-dcf4-a607dfa629cc.png)
画像・テクスチャから見た目も選べます。

![pointerstick05.png](https://qiita-image-store.s3.amazonaws.com/0/71326/745f6632-b727-257f-a9e6-38d4f78366ba.png)
指示棒を指し示す方向も選択可能。


#:exclamation: uDesktopDuplicationとの相性
![uddfreez.png](https://qiita-image-store.s3.amazonaws.com/0/71326/c7d66c09-1bae-75e2-4cd2-cbd0e2603952.png)
1.2.4版のx86_64.exe、
mikulus(0.384)とは相性が悪いようです。どちらもモニタ間移動で停止してしまいます。

マウスカーソル周りはかなり難しいご様子ですね。。。（ならこんなソフト使うなって|дﾟ)）

##他要因？
すみません！書き上げてからもっかい動作テストしたら今度はスイスイフリーズ無しに。。
Mikulusとx86_64.exe同時起動でも「モニタ間カーソル移動」問題無しです。
一体さっきのは何が。
Keynoteで作った図をQiitaに貼るとPNGになる

Keynote.appで作った図を，画像で保存したいときがあります．そんなときKeynoteで作った図をクリップボードにコピーし，画像が貼れるエディタにペーストするとPNG画像が得られます．　

## 理由
クリップボードの内部状態がPNGだから．（コメントで指摘をいただきました）

## 例
ここでは，Qiitaの編集画面に貼り付け，PNG画像を取得してみます．
ほかにも「Evernote」,「Mail.app」,「メモ.app」などでもPNG画像が生成できました．

1. Keynote.appで図を作ります．
![スクリーンショット 2016-11-09 01.03.12.png](https://qiita-image-store.s3.amazonaws.com/0/87159/d1baabc2-9482-7a19-ffc6-0f18812d6971.png)

2. 選択し，コピーします．
![スクリーンショット 2016-11-09 01.17.08.png](https://qiita-image-store.s3.amazonaws.com/0/87159/f7c06013-7c31-b392-5dce-db57b3e455c0.png)


3. ブラウザでQiita.comを開き，編集画面に移ります．
<img width="1136" alt="スクリーンショット 2016-11-09 01.25.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/87159/f546cd31-57a9-a2e6-a9b2-b2c6fb960543.png">

4. PNG形式の画像が得られます．
<img width="1136" alt="スクリーンショット 2016-11-09 01.25.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/87159/f715cd67-f9a9-8790-09d4-5319a4791ebc.png">

以上です．
sbt new 触ってみた


sbt 0.13.13 には `sbt new` コマンドというのが追加されたので試しに触ってみました。

## 簡単な説明

`activator new` のようにプロジェクトの雛形を作ってくれるコマンドです。Giter8 というプロジェクトを取り込んだようです。

## インストール

11/9 現在 Homebrew では最新版が 0.13.13 なので普通にインストールすればそれになります。とてもかんたん。

```
$ brew info sbt
sbt: stable 0.13.13, devel 1.0.0-M4
Build tool for Scala projects
http://www.scala-sbt.org
/usr/local/Cellar/sbt/0.13.11 (5 files, 1.2M)
  Poured from bottle on 2016-02-27 at 13:18:39
/usr/local/Cellar/sbt/0.13.12 (5 files, 1.2M)
  Built from source on 2016-07-30 at 21:09:44
/usr/local/Cellar/sbt/0.13.13 (6 files, 1.2M) *
  Built from source on 2016-11-09 at 00:08:50
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/sbt.rb
==> Requirements
Required: java >= 1.6 ✔
==> Caveats
You can use $SBT_OPTS to pass additional JVM options to SBT:
   SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"

This formula is now using the standard typesafe sbt launcher script.
Project specific options should be placed in .sbtopts in the root of your project.
Global settings should be placed in /usr/local/etc/sbtopts
```

週末にやったときはまだ出ていなかったので project/build.properties を作って `sbt.version=0.13.13` と書き込んでおくとかよくわからないおまじないをしていましたが、それは不要になったようです。

## 使ってみる

では早速コマンドを打ってみましょう。

```
$ sbt new
[info] Loading project definition from /.../project
[info] Set current project to ideaprojects (in build file:/.../)
Template not found for:
```

えええ、`activator new`と違って template list が出てきたりはしないようで、template 名も自分で探す必要があるようです。まあ、Ivy とかと同じで template 名から Download URL を生成する仕組みのようなのでそもそも網羅的に検索できない気もしますが。

探すのは、.g8 で終わる名前の Giter8 用テンプレートです。ざっと探した感じ、Scala 2.12.0 用のプロジェクトを始めるためのテンプレートとしては、[Giter8 公式](http://www.foundweekends.org/giter8/)に載ってる

```
$ sbt new eed3si9n/hello.g8
```

とか、[Scala 2.12.0 Release Note](http://www.scala-lang.org/news/2.12.0#build-tool) に載ってる

```
$ sbt new scala/scala-seed.g8
```

とかがあるみたいですね。

[Giter8 templates](https://github.com/foundweekends/giter8/wiki/giter8-templates)というのもあるようですが、一部盛んに更新されているものもありますが、大半は数年前のもののようです。リンク切れだったり Scala 2.8 という文字が見えてうっとなったりしました。

何はともあれ、これらを実行すると、カレントディレクトリの下に新しいsbtプロジェクトのディレクトリができて、新しいsbtライフが始まるわけです。

## 感想

sbt 用のレポジトリを activator 用の大量の jar を落としてくることなく、sbt 本体を使って簡単にセットアップできるようになったのは喜ばしいです。しかし、templateなどはまだあまり揃っていないようなので今後に期待ですね。

詳しい人がいい感じのテンプレ紹介とかテンプレの見つけ方とか書いてくれることにも期待しています。
配列操作

勉強したことまとめ

##filter
条件マッチするものを新たな配列に格納していく。
以下は、文字数が３文字以上のものを抽出。

```swift:filter.swift
let strings = ["AB", "CDEF", "GHIJKLM" , "NOP"]

let resultStrings = strings.filter {
    $0.characters.count >= 3
}
//["CDEF", "GHIJKL", "NOP"]

```


##reduce

要素をまとめて一つの値を返す。
※reduce(n) nは初期値
第一引数：今の値
第二引数：配列の要素（配列の場合は先頭から）

```swift:reduce.swift
let numbers = [9, 8, 3, 7, 6]
let sum = numbers.reduce(1) {
    return $0 * $1
}
//sum 9072
```

ちなみにStringも

```swift:reduce2.swift
let strings = ["A", "B", "C", "D", "E"]
let stringConcatenation = strings.reduce("alphabet: ") {
    $0 + $1
}
// alphabet: ABCDE

```

##map
すべての要素に同じ処理し、新たな配列を返す。
※辞書はランダムに取り出される。

```swift:map.swift
let goods = ["Chocolate": 200, "Banana": 100, "Juice": 150]
let prices = goods.map {
    Int(Double($0.value) * 1.08)
}
//[216, 162, 108]
```


##まとめ
めちゃくちゃまとまってる記事がありました。。。
http://qiita.com/motokiee/items/cf83b22cb34921580a52

クロージャは書き方（というか省略？）がたくさんあるので状況に適した書き方ができるようになりたい。
Rails hidden field  使い方

#hidden fieldでの値指定方法

```erb
<%= q.hidden_field :user_id, value:current_user.id %>
```
##下記だと何故か上手くいかなかった
[参考](http://qiita.com/azusanakano/items/5849a7ca74be58d195b7)

```erb
<%= q.hidden_field :user_id, :value => current_user.id %>
```

僕みたいに上手くいかなかった人の参考になれば•••

成功した方のリンクは忘れた

英語の`stackoverflow`だったが
Djangoで入力フィールドにプレースホルダ(placeholder)を設定する

Django:1.10

以下に記載されていました。

Widgets | Django documentation | Django
https://docs.djangoproject.com/ja/1.10/ref/forms/widgets/#customizing-widget-instances

なるほど、attrsに指定したらいけそう。

```python:forms.py
class LoginForm(forms.Form):
    username = forms.CharField(label='LOGIN_ID', max_length=30,
            widget=forms.TextInput(
            attrs={'placeholder':'ユーザ名', 'class':'class_name'}))
    password = forms.CharField(
            label='PASSWORD', max_length=128,
            widget=forms.PasswordInput(
            attrs={'placeholder':'パスワード', 'class':'class_name'}))
```

プレースホルダが表示されました。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/147868/5a069276-c93e-d6d0-ac10-12a29b7366d1.png)
SSHの鍵多すぎ問題を解決する


以前にFacebookである人が、SSHの接続情報の管理に `~/.ssh/config` を使ってたんだけど、鍵が多すぎて修羅場みたいなことを書いてて、その時は特に何も思いつかなかったんですが、以下のような方法はどうでしょうね？

## ワーキングディレクトリにSSHのコンフィグを置く。

`.ssh-config` というファイル名で内容は以下のような感じのあれです。

```
Host example.com
  HostName xxx.xxx.xxx.xxx
  User vagrant
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /path/to/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes
```

上の例は `vagrant ssh-config` で出したものを例にしているので、細かいところは気にしないでください。笑


## SSHコマンドのエイリアスを作成

`~/.bash_profile` に以下のような関数を設置。なにをしているかというと、ワーキングディレクトリに `.ssh-config` というファイルがあると、`-F` オプションにそれを渡しているだけ。

```
function ssh {
    if [ -f ./.ssh-config ]; then
        /usr/bin/ssh -F ./.ssh-config $@
    else
        /usr/bin/ssh $@
    fi  
}
```

以上で、ワーキングディレクトリに移動したときにそこに `.ssh-config` があるとそれが読み込まれて `ssh example.com` だけで接続できる感じ。

各プロジェクトのディレクトリに `.ssh-config` を置いとくといい感じかも。

まだ実際にそういう運用はしたことないですが、試しに仕込んでしばらく様子を見ます。
【Swift】YouTube動画アプリのサンプルコード（お気に入り登録）

# 概要
YouTubeの動画検索と動画再生のサンプルコードです。

* キーワード検索
* カテゴライズ
* お気に入り登録
* 動画再生

# [前回](http://qiita.com/menomoto/items/a43f9f672278795a371b)からの変更箇所
* タブバーのアイコン作成、タイトル変更
* 動画のお気に入り登録と一覧表示（NSUserDefaults）

# 次回以降のタスク
* 新着動画、Featured
* 動画のお気に入り登録と一覧表示（Realm）
* お気に入りの削除
* カテゴリをツリー構造に変更
* 検索結果の並び順の調整

# github
https://github.com/menomoto/Sample_Apps/tree/master/gameVideos

* 利用する場合は[APIキー](https://github.com/menomoto/Sample_Apps/blob/master/gameVideos/gameVideos/Components/Constants.swift#L3)を変更してください。

# 結果
![サンプル](http://i.imgur.com/Mr1nwzk.gif)

# TabBar Icon
* TabBarのアイコンは以下がシンプルでオススメです（ @2x あり）
* [100+ Free iOS 7 Tab Bar Icons](https://www.icondeposit.com/theicondeposit:139)
Rust で解く 1 から max までのすべての自然数の最小公倍数

#概要

『[Project EulerのSmallest multipleをElixirで解く](http://qiita.com/y-temp4/items/865b17837a4fb9eaf86f)』という記事を読んで、 Rust ではどのように実装できるかやってみた。


<ins datetime="2016-11-09T19:11:00+09:00">（追記）@tatsuya6502 さんからご指摘を受け、コードを修正しました。</ins>


#実装アプローチ
##1. 再帰的アプローチ

元ネタのアルゴリズムを、ほぼそのまま Rust に移植した手法（一応、末尾再帰の形で実装したつもり。出来てなかったらコメントで教えてください）。
この手法のメリットは、関数プログラミング的なわかりやすさがあるところだ。デメリットとしては、 `max` の数が大きいとスタックオーバーフローを起こす可能性があることだ。 Rust では末尾再帰による最適化は保証されないので、速度面でもデメリットが発生する可能性がある。

```rust:stack
///a と b の最大公約数を求める
fn gcd(a: usize, b: usize) -> usize {
    if a % b == 0 {
        b
    } else {
        gcd(b, a % b)
    }
}

///ループ処理
fn solve(n: usize, lcm: usize, max: usize) -> usize {
    if n <= max {
        solve(n + 1, (n * lcm) / gcd(n, lcm), max)
    } else {
        lcm
    }
}

///1 から max までのすべての自然数の最小公倍数を求める
pub fn get_lcm(max: usize) -> usize {
    assert!(max > 2);
    solve(2, 1, max)
}
```


##2. イテレータを使用したアプローチ

ループ処理に [`fold()`](https://doc.rust-lang.org/beta/std/iter/trait.Iterator.html#method.fold) を使用した手法。
この手法のメリットは、ループ部分ではスタックオーバーフローの危険がない[^1]ことである。デメリットとしては、ぱっと見では何をしているかわかりづらいところだ。

```rust:fold
///a と b の最大公約数を求める
fn gcd(a: usize, b: usize) -> usize {
    if a % b == 0 {
        b
    } else {
        gcd(b, a % b)
    }
}

///ループ処理
fn solve(max: usize) -> usize {
    (2..max + 1).fold(1, |lcm, n| {
        (n * lcm) / gcd(n, lcm)
    })
}

///1 から max までのすべての自然数の最小公倍数を求める
pub fn get_lcm(max: usize) -> usize {
    assert!(max > 2);
    solve(max)
}
```


##3. 手続き的アプローチ

手続き的な手法。
この手法のメリットは、スタックオーバーフローの可能性がないことだ。デメリットとしては、可変な（ `mut` な）変数が必要なことだ。可変変数は意図しない場所での変更によるバグの温床になるため、 Rust ではデフォルトで変数は変更不可である。

```rust:procedural
///a と b の最大公約数を求める
fn gcd(a: usize, b: usize) -> usize {
    let (mut a, mut b) = if a < b {
        (b, a)
    } else {
        (a, b)
    };
    while b > 0 {
        let r = a % b;
        a = b;
        b = r;
    }

    a
}

///ループ処理
fn solve(max: usize) -> usize {
    let mut lcm = 1;
    for n in 2..max + 1 {
        lcm = (n * lcm) / gcd(n, lcm);
    }

    lcm
}

///1 から max までのすべての自然数の最小公倍数を求める
pub fn get_lcm(max: usize) -> usize {
    assert!(max > 2);
    solve(max)
}
```


#最後に

Rust 的にはたぶん、最大公約数を求めるには[手続き的手法](#3-手続き的アプローチ)を使い、ループ処理には[イテレータを使う](#2-イテレータを使用したアプローチ)のがいいんじゃないかと思う。

```rust:mix
///a と b の最大公約数を求める
fn gcd(a: usize, b: usize) -> usize {
    let (mut a, mut b) = if a < b {
        (b, a)
    } else {
        (a, b)
    };
    while b > 0 {
        let r = a % b;
        a = b;
        b = r;
    }

    a
}

///ループ処理
fn solve(max: usize) -> usize {
    (2..max + 1).fold(1, |lcm, n| {
        (n * lcm) / gcd(n, lcm)
    })
}

///1 から max までのすべての自然数の最小公倍数を求める
pub fn get_lcm(max: usize) -> usize {
    assert!(max > 2);
    solve(max)
}
```

以上、独断と偏見でコメントしてみた。

もし、もっとこんな方法があるよというアイディアや、ここはこうしたほうがいいというご意見があれば、コメントや編集リクエストで教えていただけると嬉しい。


[^1]: わかりやすさを優先して `gcd()` では再帰的手法を使用しているので、この部分ではスタックオーバーフローの危険はある。
npm で bundle exec 相当の使い方をしたい場合の設定とnpm本体の現状

## <i class='fa fa-frown-o'></i> bundle exec と npm
以下のIssueで話し合いをしているようですが、すぐに機能が提供される流れではなさそうです。  
`npm-exec` label まで作られているのでよくある要望みたいです。

* [npm-exec 関連のIssue - npm/npm - GitHub](https://github.com/npm/npm/issues?utf8=%E2%9C%93&q=label%3Anpm-exec%20)

## <i class='fa fa-wrench'></i> 代替手段
`.bashrc` 等に

```sh
export PATH=$PATH:./node_modules/.bin
```

を追加することで

```sh
$ mocha
```

などのように実行できるようになります。

package.json の script 内では `./node_modules/.bin` を参照しているのでわざわざ
上記のような設定はいりません。
そのため `npm run` 経由でしかコマンドを実行しないならこの設定は不要です。

私自身はフロントの開発をほとんどしないので実際の開発の人がどんな風に使っているのか分かってないです。
身内に聞いた感じだと

「 npm-exec 相当のものはあってもいいけど、なくてもそんなに困らないです 」

くらいの温度感でした。

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* [How to use package installed locally in node_modules? - Stackoverflow](http://stackoverflow.com/questions/9679932/how-to-use-package-installed-locally-in-node-modules)
* [npm and bundler - the Good Parts - Climb That Mountain](http://www.adomokos.com/2012/12/npm-and-bundler-good-parts.html)
* [コマンドパスを自動で通し npm install -g しない - Jxck_ -  Qiita](http://qiita.com/Jxck_/items/8f5d1b70b7b5aa6053ee)
gitとgithubの連携

githubにgitのソースを最初にpushしたいときのメモ

*以下２点が前提条件*
githubのアカウントをもっている
ローカル環境でgit管理しているソースがある

githubでrepositoryを新しく作るとこのコマンドたたけよって親切に教えてくれる。
<pre><code>echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:{github-account}/test.git
git push -u origin master
</code></pre>

だけどpushコマンドのときにエラーになった。
git push -u origin master
<pre><code>$ git push -u origin master
The authenticity of host 
~
~
~
Please make sure you have the correct access rights
and the repository exists.
</code></pre>

理由はgithubにsshkeyが登録されていなかったから。
なので以下の手順を実行する。
1.ssh鍵のありかを確認する。
<code>$ ls ~/.ssh</code>
2.登録しているメールアドレスを確認する。
<code>$ git config --global user.email</code>
3.公開鍵を作る。
<code>$ ssh-keygen -t rsa -C "メールアドレス"</code>
4.作られた公開鍵をクリップボードに貼り付ける
<code>$ clip < ~/.ssh/id_rsa.pub</code>
5.githubの【settings】-【SSH and GPG keys】で公開鍵登録画面に遷移する
<code>https://github.com/settings/keys</code>
6.右上の【newsshkey】ボタンを押して【key】のテキストエリアにコピーしたsshkeyを貼り付ける
 このときtitleはわかりやすければ何でも良い。
7.画面下方の【Add SSH key】ボタンを押して登録完了。
8.コマンドで一度githubに接続確認をする。
<code>$ ssh -T git@github.com</code>

これでgit pushができるようになる。
ふつうのエディタっぽく、名前をつけずに新規作成

初めてほかのエディタからEmacsに触りはじめたときに「えっ最初にファイル名決めなきゃだめなの？」と思ったことはないです？ 私はあった。いまでも、まれによく感じる。

## 解決策

こんなコマンドを定義するだけ。

```el
(defun my/new-untitled-buffer ()
  "Create and switch to untitled buffer."
  (interactive)
  (switch-to-buffer (generate-new-buffer "Untitled")))


;; Alt+Shift+N に割り当てる
(global-set-key (kbd "M-N") 'my/new-untitled-buffer)
```

キーバインドはお好きに。私は<kbd><kbd>C</kbd>-<kbd>N</kbd></kbd>などは既に使ってたのでこちらを割り当てた。

## 活用のためのヒント

* 保存したいときは、ふつうに<kbd><kbd>C</kbd>-<kbd>x</kbd> <kbd>C</kbd>-<kbd>s</kbd></kbd>を押せばファイル名を入力できます。
* まだ名前決めてないんだけど(Ruby|Python|PHP)で書きたいんだよなー、ってときは<kbd><kbd>M</kbd>-<kbd>x</kbd> <kbd>ruby-mode</kbd></kbd>とか<kbd><kbd>M</kbd>-<kbd>x</kbd> <kbd>python-mode</kbd></kbd>とか<kbd><kbd>M</kbd>-<kbd>x</kbd> <kbd>php-mode</kbd></kbd>でメジャーモードを直接起動してあげます。
* ファイルなしのバッファを使ふよりも[Emacs で使い捨てファイルを開く](http://qiita.com/akisute3@github/items/1d143b0b69e9aaf252ca)のように`open-junk-file`の方が良いアプローチかもしれませんね
Kotlinで書かれたAndroidアプリをbuildしたときにエラーになる場合の対応

### 環境
- kotlin : 1.0.4
- AS : 2.2.2

### 現象
いつからかは把握できていないのですが、Kotlinで書かれたアプリをbuildすると失敗するようになって（たまに成功する。。。）、失敗した場合はcleanしてからbuildし直すと成功する、という現象が発生するようになりました。ビルドのログを見る限り、kaptが中間ファイルを生成するところでExeptionが吐かれていました。

### 対応
- gradle.propertiesで`kotlin.incremental=true`を設定してインクリメンタルビルドを有効にしていたのですが、これをfalseにすると発生しなくなりました。検索してもなかなか同じ状況の人が見つからなかったので何か特定の組み合わせで起きる現象なのかもしれませんが、対応メモとして残しておきます。
[※記事移行済][PepperプレゼンTips] プレゼンの前後で、Pepperを迅速に設置＆撤収する場合に入れると良さそうな処理と操作手順

Pepperと一緒にプレゼンなどをするとき、迅速設置＆撤収をするためのアプリ作成のコツを書いてみました。
※12/4 記事を以下に移行しました。
Robot/ロボット Advent Calendar 2016 4日目: [PepperデモTips] デモの前後でPepperを迅速に設置＆撤収し、余計な音をできるだけ出さないための一手法
http://qiita.com/yuka_nm/items/ab427a73ed4b08c36cac