OmniAICreator/Qiita-1.07M huggingface dataset:
Travis CIを使ってgradleでDeployGateに自動デプロイ


端末にUSBケーブルつないでデバッグビルドをインストール、とかしんどい。

TravisCIを使ってGitHubにpushする度にDeployGateにデバッグ版のビルドがデプロイされるように設定しました。

## gradleからDeployGateへのデプロイ
`build.gradle`にDeployGateの設定を追記し、gradleからDeployGateへのデプロイをできるようにしておきます。

DeployGateのトークンは環境変数から読み込むように設定。

あと`uploadDeployGateDebug`タスクは`assembleDebug`タスクに依存するように設定、`./gradlew uploadDeployGateDebug`コマンドだけでデプロイできるように。

```build.gradle
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
        classpath 'com.deploygate:gradle:0.6'
    }
}
apply plugin: 'android'
apply plugin: 'deploygate'

deploygate {
  userName = "$System.env.DEPLOYGATE_USER"
  token = "$System.env.DEPLOYGATE_TOKEN"

  apks {
    debug {
      sourceFile = file("${project.buildDir}/apk/bookscan-manager-debug-unaligned.apk")
    }
  }
}

uploadDeployGateDebug.dependsOn assembleDebug
```

## Travis CIにDeployGateのトークンを設定
Travis CIの[Secure environment variables](http://docs.travis-ci.com/user/build-configuration/#Secure-environment-variables)にしたがってDeployGateのトークンを暗号化して登録

```
$ gem install travis
いろいろ
$ cd my_project
$ travis encrypt DEPLOYGATE_TOKEN=1234567890
Please add the following to your .travis.yml file:

  secure: "aRFPOfnpvnbgJprVgEEpWDrxhTE/qxf2i5GdwIGtXRuYMUzG9T5Lzg/BIlcu4v+r3hrt2MQJMCcqQXlM5gvrjWhQLSBLpZ1dGSU+E9duYq3Rt9+ML9X+6vBn3+VEQe9k8fN+m0xY6WnWnOAKvqfE8CIvpjiGou06SVNhaWuWJjE="

Pro Tip: You can add it automatically by running with --add.
```

## `.travis.yml`にDeployGateの設定を追記
`.travis.yml`でDeployGateのユーザIDと（上記コマンドで暗号化された）トークンを環境変数に設定。

```.travis.yml
language: android
env:
  global:
    - DEPLOYGATE_USER=hogelog
    - secure: "aRFPOfnpvnbgJprVgEEpWDrxhTE/qxf2i5GdwIGtXRuYMUzG9T5Lzg/BIlcu4v+r3hrt2MQJMCcqQXlM5gvrjWhQLSBLpZ1dGSU+E9duYq3Rt9+ML9X+6vBn3+VEQe9k8fN+m0xY6WnWnOAKvqfE8CIvpjiGou06SVNhaWuWJjE="

script:
  - ./gradlew uploadDeployGateDebug
```

## GitHubにプッシュ、Travis CIからDeployGateにデプロイ
GitHubのリポジトリとTravis CIを連携させてから上記`.travis.yml`をコミットしてプッシュ。

すると以下のようにTravis CIが動き始める。`DEPLOYGATE_TOKEN`も不思議文字列から復号できており、Travis CIからDeployGateへデプロイできていました。

![kobito.1401198135.475213.png](https://qiita-image-store.s3.amazonaws.com/0/1742/294d1c7e-1d28-e5ca-f651-b1e9435f99f4.png "kobito.1401198135.475213.png")


## 備考
上述した設定などは https://github.com/hogelog/android-bookscan-manager に含まれています。
vimrc 読書会の学習効率を上げるある 1 つの Tips

本記事は [Vim Advent Calendar 2013](http://atnd.org/events/45072) の 178 日目です。
177 日目は @manga_osyo さんによる、[Web から素早く :help するサイトつくった](http://d.hatena.ne.jp/osyo-manga/20140526/1401115510) でした。


たった一つの、とまで尊大なことは言えないですが、便利に使えるであろうある Tips を紹介します。実は windows の Vim ではデフォルトで設定されている機能だったりします。

未知のオプション
================

他人の vimrc やプラグインを読んだり、読書会に参加していると未知のオプションや関数に出会うことは少なくないでしょう。そんな時は必殺 `K`、`K` です。

設定
====

windows 以外をご使用の方が何も考えずにこの必殺を発動させると爆死します。爆死はしないですが、何も便利ではありません。

`K` は何かというと、カーソル位置のキーワードをプログラムで調べるという機能です。

[`:help K`](http://vim-help-jp.herokuapp.com/#K)

このプログラムに何が使われるかというと、`'keywordprg'` オプションで指定された値が使われます。

[`:help 'keywordprg'`](http://vim-help-jp.herokuapp.com/#'keywordprg')

そしてこの `'keywordprg'` に `:help` を設定する (windows では規定値) と、`K` で help がひけてしまうのです。

例えば `autocmd` を利用して、vimrc を開いた場合は `K` で help が引けるようにしておくといいかもしれません。

```vim:.vimrc

augroup set_kp_help
  autocmd FileType vim setlocal keywordprg=:help
augroup END

```

補足
====

カーソル下のキーワードを拾うという特性上、正確に help が引けない場合もまれにあります。幸いなことに先日、そういった内容も取り上げて頂いているので参照ください。

[:help する Vim の operator かいた <Vim Advent Calendar 2013> - pockestrap
](http://pocke.hatenablog.com/entry/2014/05/25/202957)

また `K` は visual モードでも使えるので、対象のキーワードを選択して `K` を押すことでも対応できることがあります。

余談
====

上記でも何度か用いていますが、@manga_osyo さんの vim :help サービスがオープンしました。

[いつでもどこでも :help する - Vim :help](http://vim-help-jp.herokuapp.com/)

このビッグウェーブに、各地では早くも盛り上がりを見せています。

[いつでもどこでも Emacsから :help する - Life is very short](http://d.hatena.ne.jp/syohex/20140527/1401188929)

[Big Sky :: いつでもどこでも Vim から :help する](http://mattn.kaoriya.net/software/vim/20140527210100.htm)

ほんとはこの流れに乗りたかったのですが、アイデア力も技術力も乏しく、残念ながら空気を読めない形になってしまいました。ごめんなさい…ﾋｯ

- - - 

以上 Vim Advent Calendar 2013 178 日目の記事でした。次回 179 日目は @supermomonga さんです。
Arduino回路側を組むのに必要な基礎の基礎の基礎

#Arduino基盤
##5V
5Vの電圧がとれる。プラス側。回路のスタート地点。
##GND
グラウンド。電圧0、マイナス側。回路の終着地点。
##デジタル入力・出力
プログラム側でPinModeを宣言することで入力、出力どちらもできる。
0Vか5Vか(LOWかHIGHか/0か1か/FalseかTrueか)を扱える。
##アナログ入力
0〜1023の1024段階の値を読み取れる（0V〜5Vを1024に段階に分けて読み取る）。
主にセンサ(光量・温度・音量.etc)、ボリュームつまみなどの値の読み取りに使用。
##アナログ出力
0〜255の256段階の値を出力できる(0V〜5Vを256段階に分けて出力)。
LEDの光量調節等に利用。
##外部電源
通常はUSBから給電されるが、電池で動かしたいなどそれ以外を利用したいときに使う。
6V〜20V。
#電子回路の考え方
##電気の輪っかの考え方
プラス(Arduino:5Vピン)からマイナス(Arduino:GND)へ電気が流れる輪となるようにつなぐ。
そのスタート(5V)とゴール(GND)の間にセンサ・モーター・抵抗などをはさむ。
スタートの5Vの電気がセンサ・モーター・抵抗などに消費され0V(GND)に帰るようにする。

##全体の構成
基本的な構成は以下。
**入力(各種センサー等)=>処理（Arduino）=>出力（LED・モーター・スピーカー等）**
この入力・出力についてそれぞれ電気の輪っかを作る。
###入力
**5V＝>センサ-＝>GND
　　　└Arduinoアナログ/デジタル入力ピン**(値の読み取り)

###出力
**Arudnoアナログ/デジタル出力ピン=>出力部品（LED/モーター/スピーカー等）＝>GND**
※GNDは入力・出力共通

##電子部品をつなぐ方向
多くの電子部品はプラスとマイナスをつなぐ方向が決まっている。プラスの足とマイナスの足はコードの色や長さで見分けられるので確かめてからつなぐ。

##抵抗について
電気の輪っかにおいて、センサーやモーターなどで5Vを消費しきれない場合は適切な値の抵抗を挟む。
挟まないと場合によっては壊れる。

#ブレッドボードについて
見れば、または刺せば、またはサンプルの回路を組めばわかる。やってみた方が早い。
Test::Mojoでビルドされたアプリにブラウザでアクセスする


# 概要

テストがなんか失敗してよくわからない場合、
ブラウザで操作して確認してみたい時がある。

フィクスチャ設定などもそのまま残るので、できると便利。


# 一時的なサーバを立ち上げる

Net::EmptyPort + Mojo::Server::Daemon で、
一時的なサーバを立ち上げる。

Net::EmptyPortは、Test::TCPに同封されているモジュールなので、
入っていない場合はTest::TCPをインストールする。

以下のような関数を用意する。

```perl:t/Util.pm
package t::Util;
use strict;
use warnings;
use utf8;
use Net::EmptyPort qw(empty_port);
use Mojo::Server::Daemon;

sub run_server {
    my ($app) = @_;
    my $port = empty_port();
    warn "Accepting connections at http://*:$port/\n";
    my $daemon = Mojo::Server::Daemon->new(listen => ['http://*:'.$port]);
    $daemon->app($app);
    $daemon->run;
}

1;
```

あとはテストでデバッグしたいタイミングで、
以下のように記述する。

```perl:t/base.t
use strict;
use warnings;

use Test::More;
use Test::Mojo;

use t::Util;

my $t = Test::Mojo->new('MyApp');

# ここでサーバが立ち上がり、ブロックされる
t::Util::run_server($t->app);

$t->get_ok('/')->status_is(200)->content_like(qr/Mojolicious/i);

done_testing;
```

テストを実行するとコメントの部分でブロックされ、
出力でListenしているURLが表示される。

```shell
$ prove -l t/base.t
t/basic.t .. Accepting connections at http://*:50277/
```

この場合、「 http://localhost:50277/ 」をブラウザに入力すると、
アプリの画面が表示される。

「Ctrl+C」で終了させる。
Pyside を使ったカラーピッカー（色選択ツール）のサンプル

ありがちですが、Pysideのサンプルとして作成しました。
習作程度の代物なのであまり実用的ではありません。


```python:ColorPicker.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PySide import QtCore, QtGui
'''
ColorPicker.py
Pyside を使ったカラーピッカー（色選択ツール）
'''


class colorPicker (QtGui.QWidget):

    def __init__(self):
        super(colorPicker, self).__init__()
        self.initUI()

    def initUI(self):
        '''
        ユーザーインターフェースの初期化
        '''
        self.infoLabel = QtGui.QLabel()
        self.colorLabel = QtGui.QLabel()
        self.colorButton = QtGui.QPushButton('QColorDialog.get&Color()')
        self.colorButton.clicked.connect(self.setColor)

        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.infoLabel)
        layout.addWidget(self.colorLabel)
        layout.addWidget(self.colorButton)

        self.setLayout(layout)
        self.resize(300, 150)
        self.setWindowTitle('Color Picker')

    def setColor(self):
        '''
        ダイアログを出して色選択
        '''
        color = QtGui.QColorDialog.getColor(QtCore.Qt.green, self)
        if color.isValid():
            self.colorLabel.setPalette(QtGui.QPalette(color))
            self.colorLabel.setAutoFillBackground(True)
            self.infoLabel.setText('color(#RGB) = ' + color.name())


def main():
    app = QtGui.QApplication(sys.argv)
    window = colorPicker()
    window.show()
    return app.exec_()

if __name__ == '__main__':
    main()
# EOF


```
pLaTeX縦書きでhyperrefパッケージを使うときの変更点

pLaTeX縦書きでhyperrefパッケージを使うと、いくつか期待しない結果が生じてしまいます。その理由をおおざっぱに言うと、hyperref.styが文章論理構成をつかさどる各種マクロに対して、hookのようにひっかけて、PDFにおけるhyperlink textの機能を提供しているからです。

今回は、pLaTeX縦書きでhyperrefパッケージを使ったとき、目次において各種見出しに対するページ頁番号が横向きにひっくり返ってしまうことに対処する変更点を記します。

## 目次における各種見出しに対する頁番号の出力

汎用縦書きクラスファイルの目次において、各種見出しに対する頁番号が横向きにひっくり返らないようにするために、plext.styが提供する連数字コマンド`\rensuji`をページ番号出力`\thepage`にかぶせています。

```latex:tarticle.cls
\def\addcontentsline#1#2#3{%
  \protected@write\@auxout
    {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
     \@temptokena{\rensuji{\thepage}}}%
    {\string\@writefile{#1}%
       {\protect\contentsline{#2}{#3}{\the\@temptokena}}}%
}
```

ところがhyperrefパッケージを読みこむと、この`\contentsline`コマンドを書き換えてしまいます。

## hyperrefに対する`\contentsline`の再定義

以下のような`\contentsline`コマンドの再定義をして、`\thepage`相当に`\rensuji`をかぶせることで、期待した結果を得られます。

```latex
\RequirePackage[dvipdfmx, % draft,
  bookmarks=true,
  bookmarksnumbered=true,
  % colorlinks=true,
  setpagesize=false,
]{hyperref}[2012/11/06 v6.83m]
%% override \contentsline against hyperref.sty 2012/11/06 v6.83m
\def\contentsline#1#2#3#4{%
  \begingroup
    \Hy@safe@activestrue
  \edef\x{\endgroup
    \def\noexpand\Hy@tocdestname{#4}%
  }\x
  \ifx\Hy@tocdestname\ltx@empty
    \csname l@#1\endcsname{#2}{\rensuji{#3}}%
  \else
    \ifcase\Hy@linktoc % none
      \csname l@#1\endcsname{#2}{\rensuji{#3}}%
    \or % section
      \csname l@#1\endcsname{%
        \hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
      }{\rensuji{#3}}%
    \or % page
      \def\Hy@temp{#3}%
      \ifx\Hy@temp\ltx@empty
        \csname l@#1\endcsname{#2}{#3}%
      \else
        \csname l@#1\endcsname{{#2}}{%
          \hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend
        }%
      \fi
    \else % all
      \def\Hy@temp{#3}%
      \ifx\Hy@temp\ltx@empty
        \csname l@#1\endcsname{%
          \hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
        }{}%
      \else
        \csname l@#1\endcsname{%
          \hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
        }{%
          \hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend
        }%
      \fi
    \fi
  \fi
}
\RequirePackage[dvipdfmx]{pxjahyper}[2012/05/27 v0.2]
```

以上です。

何かしらpLaTeXの縦書きクラスファイルを作成するときに、ご参考いただければ幸いです。
CakePHP2入門してみた(sqlite,Bootstrap)

# cakephpの取得

```bash:
$ wget https://github.com/cakephp/cakephp/archive/master.zip
$ unzip master.zip
$ rm master.zip
$ cd cakephp-master
$ cp -p app/Config/database.php{.default,}
```

# database設定(sqlite)

```diff:app/Config/database.php
-'datasource' => 'Database/Mysql',
+'datasource' => 'Database/Sqlite',
-'database' => 'database_name',
+'database' => '/絶対パス/scorer.sqlite3',
```

# 暗号化の元となる値の変更

```bash:
$ vim app/Config/core.php
以下の値変更
Security.salt
Security.cipherSeed
```

# テーブルの作成

```bash:
$ sqlite3 scorer.sql
```

```sql:何か突っ込んでみる
CREATE TABLE users (
  id integer primary key autoincrement
 , name char(40) NOT NULL UNIQUE
 , created DATETIME
 , modified DATETIME
);
CREATE TABLE scores (
  id integer primary key autoincrement
 , value char(40) NOT NULL
 , created DATETIME
 , modified DATETIME
);
CREATE TABLE dates (
  id integer primary key autoincrement
 , date date
 , created DATETIME
 , modified DATETIME
);
```

# databaseからひな形作成

```bash:
$ app/Console/cake bake All
```

```bash:webサーバ起動
$ (cd app/webroot; php -S localhost:8888)
```

http://localhost:8888/ で画面が出ることを確認。


# BootstrapCakeを入れてみる

[BootstrapCake](https://github.com/EKOInternetMarketing/BootstrapCake.git)

```bash:
$ wget https://codeload.github.com/EKOInternetMarketing/BootstrapCake/zip/master
$ unzip master
$ rm master
$ cp -a BootstrapCake-master/app/ app
$ rm -r BootstrapCake-master
```

```diff:app/Controller/AppController.php
 class AppController extends Controller {
      //public $components = array('DebugKit.Toolbar');
+    public function beforeFilter(){
+        $this->layout = 'bootstrap';
+    }
 }
```

# CakePHPのファイル構成例

* app/Model/Post.php
* app/Controller/PostsController.php
  * public $scaffold;
* app/View/Posts/index.ctp

## 便利関数

debug($val); -> var_dumpの綺麗版
packstackでOpenStackをインストールする手順

[RDOを使ったOpenStack Havana Neutron構築編](
http://www.slideshare.net/VirtualTech-JP/140204-rdo-openstackhavana)を参考にOpenStackをインストールしたので、
その手順をまとめておきます。

#OpenStackをインストールした環境
1.iMac2013
2.VirtualBox
3.CentOS6.5

#OpenStackインストール
インストール前にselinuxは無効にしておく。

```
 #setenforce 0

```

サイトからrdoのrpmを持って来てインストールする

```
 #wget http://repos.fedorapeople.org/repos/openstack/openstack-havana/rdo-release-havana-8.noarch.rpm
 #yum install rdo-release-havana-8.rpm
 #yum update
 #yum install openstack-packstack python-netadd
 #packstack —allinone
```

インストール後に、/etc/nova/nova.confのlibvirt_tyepをkvmからqemuに変更して、OSをrebootする。

localhostにWebブラウザで接続すると、OpenStackのログイン画面が表示されるので、/root/keystonerc_adminにadminのパスワードがあるので、それでログインできる。
ScalaでJavaScriptのsetTimeout的なことをする


`future` を使うと簡単にできる。(下のスニペットは http://ideone.com/s6yf02 で動かしてみることができる。)

```scala
object Main extends App {
  import concurrent._
  import ExecutionContext.Implicits._

  future {
    Thread.sleep(5000)
    println("5秒経過!!!")
  }

  for (i <- 1 to 10) {
    Thread.sleep(1000)
    println(i)
  }
}
```

結果

```
1
2
3
4
5秒経過!!!
5
6
7
8
9
10
```
database.ymlをDRYに！

#美しくないdatabase.yml

冗長な部分が多い…

```rb
development:
  database: db_development
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: dbuser
  password: "<%= ENV['DB_PASSWORD'] %>"
  port: 5432
test:
  database: db_development
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: dbuser
  password: "<%= ENV['DB_PASSWORD'] %>"
  port: 5432
staging:
  database: db_development
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: dbuser
  password: "<%= ENV['DB_PASSWORD'] %>"
  port: 5432
production:
  database: db_production
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: dbuser
  password: "<%= ENV['DB_PASSWORD'] %>"
  port: 5432
```

# DRY!

YAMLには、アンカーとエイリアスがあったので書き直してみる

```rb
common: &common
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: dbuser
  password: <%= ENV['DB_PASSWORD'] %>
  port: 5432

development: &development
  database: db_development
  <<: *common

test: *development

staging: *development

production:
  database: db_production
  <<: *common
```

# 確認方法
```zsh
% ruby -r yaml -e 'print YAML.load(ARGF.read()).delete_if {|key| key == "common"}.to_yaml' ./database.yml
```

こんな感じで、大体あってることが確認できる

```rb
---
development: &1
  database: db_development
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: dbuser
  password: "<%= ENV['DB_PASSWORD'] %>"
  port: 5432
test: *1
staging: *1
production:
  database: db_production
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: dbuser
  password: "<%= ENV['DB_PASSWORD'] %>"
  port: 5432
```

# 参考サイト
[プログラマーのための YAML 入門 (初級編) アンカーとエイリアス](http://magazine.rubyist.net/?0009-YAML#l10)
Windows7などでDLL/OCXのレジストリ登録を自動化する

昔 Windows NT4.0向けに開発したシステムを、Windows7向けに調整する作業を行ったときの備忘録です。
Windows NT4.0のときに、ちゃんとしたインストーラを用意していなかったため自作DLL/OCXを、BATファイルでまとめてレジストリ登録する『なんちゃってインストーラ』を使っていました。これをそのまま利用したかったのですが、Windows7(Vista以降) では権限周りが厳格化されたた影響で、そのままでは使い物になりませんでした。
例えば

```dos
regsvr32 ?????
```

を、Windows7 で実行すると、

「 _モジュール "?????" は読み込まれましたが、DllRegisterServer への呼び出しはエラーコード 0x80040200 により失敗しました。_ 」

等というメッセージが表示され登録することができません。
（私の場合は 0x80040201 でした。）
これはユーザーにレジストリを直接編集する権限が無いために発生するエラーです。

[参考サイト - Microsoft社のコミュニティサイト]
http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/error-codes-while-installing-program-0x80040200/97db71e4-929d-4eac-b950-25c5fd6e3d49

この問題を解決するために runas コマンドを利用しました。runas は一時的に他のユーザーでプログラムを実行するためのコマンドで、sudo に近いものと解釈して良いと思います。
ここでは管理者として regsvr32 を実行させたい訳なので、次のように修正して実行しました。

```dos
runas /user:administrator "regsvr32 ?????"
```

ダメでした。実行するとパスワードを訪ねられるのですが、設定した覚えが無かったのでそのまま enter すると、

「 _1327: ログオン失敗: ユーザーアカウントの制限。考えられる理由として、空のパスワードが許可されていない、ログオン時間制限、またはポリシーによる制限が適用された、などが挙げられます。_ 」

のメッセージが表示されました。Administrator のパスワードが空だとダメのようです。
Administratorのパスワード設定はこのあたりを参考にしました↓
http://apple-voice.com/wordpress/2010/04/windows-7-how-to-enable-administrator/

Administrator のパスワードを設定した後に改めて実行すると、

「 _193: ????? は有効な Win32 アプリケーションではありません。_ 」

のメッセージが表示されました。そんなバカなっ！
で、いろいろ試行錯誤した結果、runas を実行するとカレントディレクトリが他のディレクトリに移ってしまうことが原因でした。（少し前にやったのでうろ覚えですがシステムディレクトリあたりだったと思います。）
結局、BAT ファイルの先頭で

```dos
set mypath=%cd%
```

としておき、登録するコードを

```dos
runas /user:administrator "regsvr32 %mypath%¥?????"
```

とすることで無事に登録できるようになりました。これは、DLL/OCXと BATファイルが同じディレクトリにあることが前提ですね。
ちなみに regsvr32 を実行するたびに Administrator のパスワードを聞かれるので、ちょっと微妙ですね。
（これはインターネットに接続しないスタンドアロンのシステムで実施した措置です。）
Vimをバッチモード(-e -s)で使う際のTips

ファイルを1行ずつ読み込みながら処理するのはawkが向いていますが、
途中の行から前に戻りながら編集したい場合など、
エディタ操作としてなら簡単に記述できる処理をスクリプトとして実行したい場合、
Vimのバッチモードは便利です。
(shell script中から、バッチモードで起動したVimを、1つのフィルタとして使う等)

* [Ex modeでスクリプト実行](http://vim-jp.org/vimdoc-ja/starting.html#-s-ex): `-e -s <scriptfile`
* [Normal modeでスクリプト実行](http://vim-jp.org/vimdoc-ja/starting.html#-s): `-s scriptfile` (`-e`無し)

最近Ex mode用スクリプトを2つ書いた際のTipsです。

* http://qiita.com/deton/items/60d796c3ba5cbb8c4bbb#4-5
* http://qiita.com/deton/items/2fc42176b177d33d6d1e#3-1

## GNU edのコメントは`#`だがvimは`"`
Ex modeでのスクリプト実行では、ed用スクリプトもある程度動作。
## [--noplugin](http://vim-jp.org/vimdoc-ja/starting.html#--noplugin)
plugin内(fakeclip.vim等)でエラーが発生するとexit codeが1になるのを回避するため。
## [-X](http://vim-jp.org/vimdoc-ja/starting.html#-X)
Xサーバへの接続にPCによっては70ms程度かかる場合があるので。
## 前の行へは`-`、次の行へは`+`
`-4`等も使用可。

`:-`は、`:.-1`の省略とみなされる模様。
Vimのヘルプには明示的な記述は無いが、[:range](http://vim-jp.org/vimdoc-ja/cmdline.html#:range)あたり。
## Ex mode用スクリプトファイル内に空行があると`E501: At end-of-file`
## エラーが発生するとvimのexit codeが1になる
## スクリプトのデバッグは`-V`を付けてvimを実行
## 画面に何も表示されずに、Vimが動き続けて終了しない場合は、`qa!<Enter>`と入力してみると終了するかも
ユーザ入力待ちになっている可能性。
## shell scriptから呼んでいる場合、以降の処理を中断させたいときは`:cquit`してexit codeを1にして、shell script側で判定
【Rails4】カラムの最大値を求める(maximum)


最大値を取得するにはmaximumを使用する

例：

```rb
max = Comment.where("image_id = ?", comment.image_id).maximum(:comment_no)
if max.nil?
  comment.comment_no = 1
else
  comment.comment_no = max + 1
end
```

参考にしたサンプルの書式

```rb
User.maximum(:login_count)
User.where("age > ?", 20).maximum(:login_count)
```

参考URL：
http://railsdoc.com/references/maximum
Ruby on Rails - hidden_fieldの使い方


```erb
<%= form_for @order do |f| %>
  <%= f.hidden_field :service, "test" %>
  <%= f.submit %>
<% end %>
```
だとうまくいきません。

値を指定するには

```erb
<%= f.hidden_field :service, :value => "test" %>
```
としましょう。
Proposal to RubyKaigi 2014

RubyKaigi 2014 の発表応募を書いてみました。
英語はもちろんのこと日本語ですらプロポーザルなんて書いたことがないので応募する前に晒してみます。
「こんな内容に変えた方がいい」、「もっと刺激的なタイトルがいい」などのアドバイスをよろしくお願いします。英語の間違いは私の心が折れない程度に優しく御注意ください…

Qiitaはコメントが投稿しやすいし、間違いを指摘する変更リクエストも貰いやすいかな？と思って使っています。ストックして後日「話が違うやんか！」と苦情を頂きましてもお応えできませんので悪しからず。

---

# Presentation Proposal to RubyKaigi 2014


## Title
Break open the door of embedded systems to IoT!
mruby on LEGO Mindstorms EV3 &reg;



## Description
LEGO Mindstorms EV3 &reg; is the awesome construction kit to create customizable, programmable robots.

[ev3dev](https://github.com/mindboards/ev3dev), one of the linux distributions is running on the Mindstorms EV3.
I will explain how to implement the APIs to operate the Mindstorms EV3 using mruby.
mruby is the lightweight implementation of the Ruby language, and it will encourage embedded system programmers to open the door to IoT (Internet of Things).
Please learn how to hook your devices into the net with mruby.

> keywords: mruby, embedded system, robotics, physical computing

## Notes
I will demonstrate the LEGO robot programmed with mruby.
But it will be smaller than a tissue box.

## How long do you want to talk?
30mins

## Spoken languages in your talk
Japanese

## Your Name
Takehiko YOSHIDA

## Bio
C Programmer.

I'm working in a manufacturer of information-related equipment as a programmer of embedded systems.

In the intervals of my business, I'm introducing the fun of IT to children as a volunteer staff of a global robotics competition for students. [World Robot Olympiad](http://www.wro2014.org)

## Twitter Username
@chihayafuru

## GitHub Username
chihayafuru

## Location
Nagano, Japan
「プログラムでシダを描画する」をPHPで描画する

* [プログラムでシダを描画する - 強火で進め](http://d.hatena.ne.jp/nakamura001/20140505/1399316565)
* [「プログラムでシダを描画する」をDartで描画する - Qiita](http://qiita.com/zukkun/items/08b72c9934d3c0c09936)
* [「プログラムでシダを描画する」をGoで描画する - Qiita](http://qiita.com/qt-luigi/items/ec6cd349259fe6cc29eb)
* [Clojure - プログラムでシダを描画する - Qiita](http://qiita.com/woxtu/items/30aebcf15770c438d6fd)
* [「プログラムでシダを描画する」をPythonで描画する - Qiita](http://qiita.com/noc06140728/items/8b8f06cfc312b8492df4)
* [「プログラムでシダを描画する」をJavaScript+Canvasで描画する - Qiita](http://qiita.com/alucky0707/items/ada6514d6068fdff2a8c)

ん？流行ってんの？

![シダ](https://qiita-image-store.s3.amazonaws.com/0/25060/01fa07c7-3073-1e07-c96c-7c1378bc3a9a.png)

```php
<?php

function W1x($x, $y) { return 0.836 * $x + 0.044 * $y; };
function W1y($x, $y) { return -0.044 * $x + 0.836 * $y + 0.169; };
function W2x($x, $y) { return -0.141 * $x + 0.302 * $y; };
function W2y($x, $y) { return 0.302 * $x + 0.141 * $y + 0.127; };
function W3x($x, $y) { return 0.141 * $x - 0.302 * $y; };
function W3y($x, $y) { return 0.302 * $x + 0.141 * $y + 0.169; };
function W4x($x, $y) { return 0; };
function W4y($x, $y) { return 0.175337 * $y; };

function f($im, $k, $x, $y, $width, $height) {
    if ($k > 0) {
        foreach (range(1, 4) as $i) {
            if ($i === 1 || mt_rand(0, 9) < 3) {
                f(
                    $im,
                    $k - 1,
                    call_user_func("W{$i}x", $x, $y),
                    call_user_func("W{$i}y", $x, $y),
                    $width,
                    $height
                );
            }
        }
    } else {
        imagesetpixel(
            $im,
            $x * 490 + $width * 0.5,
            $height - $y * 490,
            imagecolorallocate($im, 0, 128, 0)
        );
    }
}

$im = imagecreatetruecolor(500, 500);
imagefill($im, 0, 0, imagecolorallocate($im, 255, 255, 255));
f($im, 20, 0, 0, 500, 500);
header('Content-Type: image/png');
imagepng($im);
```
[Unity] Unityで音を再生する


## 音もコンポーネント

Unityは音も非常に手軽に使うことが出来ます。
Unityのその他の概念と同様、音もコンポーネントとして扱われます。

音（`AudioClip`）は、`AudioSource`（音源）から再生されます。
どういうことかと言うと、Unityの世界は3Dのため、音が鳴った位置も大事になります。
現実世界でも、近くのものほど音が大きく、遠くなるにつれて音が小さくなりますよね。
それをシミュレートしてくれる、というわけです。

![capture.png](https://qiita-image-store.s3.amazonaws.com/0/5616/f17f3533-8121-fd2f-8b85-f3a409cd85a6.png "capture.png")


## `AudioListener`で音を聴く

そのため必然的に、音は音源だけではなく「 **その音をどこで聞くか** 」という設定も必要になります。
その音を聞く対象もGameObjectとして配置してやる必要があるわけです。
このGameObjectにアタッチするコンポーネントは`AudioListener`と呼ばれます。
（そして大抵の場合、音を拾うのはカメラのため、デフォルトでMain Cameraにはこの`AudioListener`コンポーネントがアタッチされています）

![capture.png](https://qiita-image-store.s3.amazonaws.com/0/5616/eb80f32d-8e3d-153f-ae89-8dee04eb08bc.png "capture.png")


まとめると、

* GameObjectに音源コンポーネントを追加する
* 再生したい音（AudioClip）をコンポーネントに紐付ける
* 音を拾うコンポーネント（AudioListener）をアタッチしたオブジェクトを配置する



## BGMは2D音源で

3Dでの音は、その音を聴く`AudioListener`の位置によって音の大きさなどが変わります。
しかし、BGMは通常、そうした3D空間にあるものではなく、一定の音量で流れているものだと思います。
こうした音源の場合は、3D音源として扱うのではなく、2D音源として扱います。

設定は簡単で、BGMなど2D音源として扱いたい音のリソース（AudioClip）を、Projectペインから選択肢、Inspectorで`3D Sound`のチェックボックスを外すだけです。

![スクリーンショット 2014-05-27 10.23.23.png](https://qiita-image-store.s3.amazonaws.com/0/5616/0166deb8-d92d-8292-60ef-46fc7ed0e37f.png "スクリーンショット 2014-05-27 10.23.23.png")

変更後は、右下にある「Apply」ボタンを押して変更を確定しておきます。


## SEをトリガー駆動で鳴らす

SEは通常、なにかしらのイベントがトリガーとなって鳴るのが普通でしょう。
（例えば弾が当たって爆発した、とか）

なので、イベント発生時に音を再生します。
そして音の再生は、前述の通り`AudioSource`が担当します。
ということで、シンプルなコード例を載せておきます。（備忘録的に）

```c#
// AudioSourceがアタッチされたGameObject

void OnCollisionEnter(Collision collision) {
	AudioSource audioSource = gameObject.GetComponent<AudioSource>();
	audioSource.PlayOneShot(anySE);
}

// あるいは、audioSourceのclipプロパティに設定して再生
void OnCollisionEnter(Collision collision) {
	AudioSource audioSource = gameObject.GetComponent<AudioSource>();
	audioSource.clip = anySE;
	auidoSource.Play();
}
```
iOS、AndroidのOSバージョン毎のシェア状況

備忘録

##iOS
###Apple Developer - Support Center - App Store Distribution
https://developer.apple.com/support/appstore/

*As measured by the App Store during a 7‑day period ending May 18, 2014.*

##Android
###Android Developers - Dashboards
http://developer.android.com/about/dashboards/index.html

*This data reflects devices running the latest Google Play Store app, which is compatible with Android 2.2 and higher. Each snapshot of data represents all the devices that visited the Google Play Store in the prior 7 days.*

**それぞれの説明にあるように、直近でストアに訪れた端末のOSシェアなので、実際に稼働しているOSの割合とは異なる可能性がありますが、AppleとGoogleから発表されていますので、様々な説明材料に使えると思います。**
SimpleHTTPServerの次の一歩としてFlaskを使う


手元で実験のためにWebアプリのちょこっとしたプロトタイプを作るって時に、HTMLやCSSやJSなどを静的に配信したいだけだったら

    python -mSimpleHTTPServer

が楽ちんだということはだいぶ知名度が上がってきたみたいだけど、「あ、ちょっとデータを保存したい」とか思った時には静的配信だけだと力不足なんだよね。(GETパラメータに積んでログに残すという力技は除く)

で、そういうシチュエーションになったので僕はFlaskで1ポモドーロ(25分)くらいで実装したんだけど、ふとFacebookを見たら似たようなシチュエーションでSocket使うとか言ってる人が居たのでこれはブログに書いておくべきことかーと思ったのです。

フレームワーク習得にかかる時間を大きく見積もり過ぎだよ。とりあえず25分間Quickstartをやってはどうか。Socketでサーバを実装するのに比べたら学習に掛かった時間はすぐにペイする。 http://flask.pocoo.org/docs/quickstart/

僕が実際に25分で実装したのがこちら: https://gist.github.com/nishio/be5b5071a8c8fb94836b

Hello worldをコピペするところから始めたんで関数名に痕跡が残っているし、printも消してないけど、出来たての汚いプロトタイプってのはこんなもん。

特定ディレクトリ以下を静的配信するのはこの3行

```py
    @app.route('/collecting/<path:filename>')
    def send_foo(filename):
        return send_from_directory('../collecting', filename)
```

特定URLへのPOSTを保存するのがこの4行。ちなみに1人で低頻度しか使わないのでデータベースいらないやとファイルに保存している。

```py
    @app.route('/api/save/<filename>', methods=['POST'])
    def save(filename):
        file(filename, 'w').write(request.form['data'])
        return 'ok'
```

あと、Hello worldではdebugオプションがついていないけど、これをつけておくと500の時とかにスタックトレースとかが見れるし、スタックトレースの各フレームで対話的にコードを実行できるので原因を調べるのにも便利。

```py
    app.run(debug=True)
```

プロトタイプを作る人にとっては、Flaskの学習に25分投資するのはお得な賭けだと思うよ。

追記: あ、書き忘れたけどクライアントサイドはjQueryを使っていて、このAPIにデータを送るのはこんな感じ:

```js
    $.post('/api/save/hoge', {'data': 'datadatadata'})
```
masonryを使いながらinfinite scrollを使って画像が重ならないようにする


<a href='http://www.favmedia.me/'>FavMedia - Twitterのfavツイート画像閲覧</a> の開発で、userページで表示させる画像を[infinite scroll](https://github.com/paulirish/infinite-scroll)で読み込みつつ、[Masonry](http://masonry.desandro.com)でタイル状に整える時に読み込み途中の画像が重なって表示してなんか嫌だなぁと調べて解決した方法のメモ

ここのソースコード見れば一発ですがね <http://desandro.github.io/masonry/demos/infinite-scroll.html>

[imagesloaded](https://github.com/desandro/imagesloaded)も使います


```html
<script src="../js/jquery-1.7.1.min.js"></script>
<script src="../jquery.masonry.min.js"></script>
<script src="../js/jquery.infinitescroll.min.js"></script>
<script>
  $(function(){
    var $tiles = $('#tiles').css({ opacity: 0 });
    $tiles.imagesLoaded(function(){
      $tiles.animate({ opacity: 1 });
      $tiles.masonry({ itemSelector: '.tile' });
    });

    $tiles.infinitescroll({
      navSelector  : 'ul.pagination',
      nextSelector : 'ul.pagination a[rel=next]',
      itemSelector : '#tiles .tile',
      loading: {
        msgText: '',
        finishedMsg: '',
      }
    }, function( newElements ) {
      var $newElems = $( newElements ).css({ opacity: 0 });
      $newElems.imagesLoaded(function(){
        $newElems.animate({ opacity: 1 });
        $tiles.masonry( 'appended', $newElems, true );
      });
    });
  });
</script>
```

`.css({ opacity: 0 })`の値を付けてやって、読み込み完了後に`$tiles.animate({ opacity: 1 });`を付けてあげれば良かったんですね。まぁそうですね(hideとshow駆使してがんばってた労力無駄だった)

えぇぇええ！！実際に動いてるところが見てみたいって！！？！？？？しょうがないなここ行けば見れるよー(宣伝)

<http://www.favmedia.me/soramugi>
遅いgrunt-styleguide + styledoccoを爆速にする

[某社CTOに教えて頂いた。](https://twitter.com/hokaccha/status/471204879625486336)

## 設定前

2分かかってます。ひえー。

```js:Gruntfile.js
    styleguide: {
      xxx: {
        options: {
          framework: {
            name: 'styledocco'
          }
        },
        files: {
          // …
        },
      }
    },
```

```console
$ time grunt styleguide
Running "styleguide:dist" (styleguide) task

>> DEST: …

Done, without errors.

real	2m2.127s
user	1m59.839s
sys	0m2.192s
```

## 設定後

`--no-minify`を設定する。

```js:Gruntfile.js
    styleguide: {
      xxx: {
        options: {
          framework: {
            name: 'styledocco',
            options: {
              'no-minify': true
            }
          }
        },
        files: {
          // …
        },
      }
    },
```

```console
$ time grunt styleguide
Running "styleguide:xxx" (styleguide) task

>> DEST: …

Done, without errors.

real	0m2.688s
user	0m2.404s
sys	0m0.292s
```

2分かかっていたものが2秒で終わるようになりました。ｺﾞｲｽｰ
HadoopのWordCountをJava8のStreamで実装してみた

勉強がてら、Java8のStreamを使ってHadoopのサンプルコードのWordCountを実装してみた。
@daiki_kameyaに手伝ってもらった。


```java
	public static void main(String[] args) throws Exception {
		Path path = FileSystems.getDefault().getPath("input.txt");

		Files.lines(path).flatMap(line -> Arrays.stream(line.split(" ")))
				.collect(Collectors.groupingBy(s -> s, Collectors.counting()))
				.forEach((k, v) -> System.out.println(k + ":" + v));
	}
```
一部の変更点だけXXXしたい

# 一部のハンクだけ追加したい

```bash
$ git add -p
```

# 一部のハンクだけ破棄したい

```bash
$ git checkout -p
```

# 一部のハンクだけ退避したい

```bash
$ git stash -p
```

`$ git stash save`を一部のファイルだけ出来ないのかなーと思って調べてみたら`$ git stash -p`と`$ git checkout -p`が知れてお得な感じだった。

普段、`$ git add -p`でいくつかコミットを分けたりするのだけど、`$ git stash -p`で退避しておいて残りの変更点を`$ git amend`（`git commit -a --amend --reuse-message=HEAD`のエイリアス）で前のコミットに含めたくて`git stash`について調べてた。あんまり使わなそう。
Rubyで素数の配列を返すプログラム


２月に面接でホワイトボードを前に頭真っ白になったのをふと思い出したので、素数を返すプログラムを書いてみました。

どうせなら配列で返すか、ということで再帰的に素数を配列に足していくメソッドにしました。`prime?`メソッドはPrimeクラスを使わず自前です。

※コメント頂いたおかげでずいぶんスリムになりました。Before/Afterは編集履歴で確認できます。

```ruby:primes_array.rb
def prime?(n,primes)
  primes.all? { |m| n % m != 0 }
end

def primes_array(n,i=2,arr=[])
  return arr if arr.size >= n
  arr << i if prime?(i)
  i += 1
  primes_array(n,i,arr)
end

p primes_array(ARGV[0].to_i)
```
[Ruby] Hashのsymbolize_keysをrails抜きで実装する


軽く捜しても意外と見つからない思いを何度かしたので、書いておく。

~~~ruby
class Hash
  def symbolize_keys
    self.each_with_object({}){|(k,v),memo| memo[k.to_s.to_sym]=v}
  end
  def deep_symbolize_keys
    self.each_with_object({}){|(k,v),memo| memo[k.to_s.to_sym]=(v.is_a?(Hash) ? v.deep_symbolize_keys : v)}
  end
end
~~~

~~~ruby
h = {'a' => {'b' => 123, 'c' => 789, 123 => 'a'}, 'x' => 123, :foo => 'bar'}
h.symbolize_keys
#=> {:a=>{"b"=>123, "c"=>789, 123=>"a"}, :x=>123, :foo=>"bar"}
h.deep_symbolize_keys
#=> {:a=>{:b=>123, :c=>789, :"123"=>"a"}, :x=>123, :foo=>"bar"}
~~~

Railsの実装とは少し違うけど、充分な範囲で。
GitBucket on WindowsServer2012


# 動作環境
WindowsServer 2012 R2 DataCenter
JDK8 Update5(64Bit)
jetty9.1.5
GitBucket1.1.3

# JDKのインストール
http://docs.oracle.com/javase/8/
取ってきて入れる

環境変数の追加
PATH=C:\Program Files\Java\jre8\bin\

# jettyのインストール
http://www.eclipse.org/jetty/

## 展開して配置
C:\Service\jetty

## 動作テスト
Jettyを展開したパスに移動して java -jar start.jar を実行
http://localhost:8080/
にアクセスjettyからエラーが出ていれば成功

## apache-commons-daemonを利用してJettyをサービス化
http://www.apache.org/dist/commons/daemon/binaries/windows/

### ファイルの配置
展開したディレクトリに存在する prunsrv.exe と prunmgr.exe をJettyのホーム
ディレクトリ直下にコピー
※64bit OSを利用している場合は amd64/prunsrv.exe を使う点に注意

### ファイルのリネーム
prunsrv.exe > JettyService.exe
prunmgr.exe> JettyManager.exe

### サービス登録
管理者権限で以下を実行
> set JETTY_HOME=C:\Service\jetty\

> JettyService //IS//JettyService --DisplayName="Jetty Service"
--Install=%JETTY_HOME%\JettyService.exe --LogPath=%JETTY_HOME%\logs
--LogLevel=Debug --StdOutput=auto --StdError=auto --StartMode=Java
--StopMode=Java --Jvm=auto --Startup=auto --JvmMx=512
--StartPath=%JETTY_HOME% ++JvmOptions=-XX:MaxPermSize=128m
--Classpath=%JETTY_HOME%\start.jar --StartClass=org.eclipse.jetty.start.Main
--StopClass=org.eclipse.jetty.start.Main ++StopParams=--stop
++JvmOptions=-Djetty.home=%JETTY_HOME% ++JvmOptions=-Djetty.port=8080
++JvmOptions=-DSTOP.PORT=8079 ++JvmOptions=-DSTOP.KEY=jetty
++JvmOptions=-Djetty.logs=%JETTY_HOME%\logs
++JvmOptions=-Dfile.encoding=UTF8
++JvmOptions=-Dorg.mortbay.jetty.Request.maxFormContentSize=1000000

### 参考：サービスから削除する場合
> JettyService //DS//JettyService

## 起動テスト1
JettyService //TS//JettyService

http://localhost:8080/
にアクセスjettyからエラーが出ていれば成功

# GitBucketの配備
https://github.com/takezoe/gitbucket/releases
最新のgitbucket.warを取ってくる

## gitbucket.warの配置
C:\Service\jetty\webapps

## 起動テスト2
JettyService //TS//JettyService

http://localhost:8080/gitbucket/
UserNmae:root
Password:root

ログインできれば成功

# 注意点
## 実行ユーザー毎の差異について
### コマンドプロンプトから実行した場合
Administratorで実行した場合、ファイルは以下に配置される
> C:\Users\[ユーザー名]\.gitbucket

### サービスとして登録した場合は以下に配置
C:\Windows\System32\config\systemprofile\.gitbucket

## 設定のURL設定について
iptablesなどでポートを振り替えたりしない限り触らないこと


# 参考サイト
* [GitHub:GitBucket](https://github.com/takezoe/gitbucket)
* [apache-commons-daemon](http://commons.apache.org/proper/commons-daemon/proc
run.html)
* [gitbucketを Jetty, Windows7 でサービス化す
る](http://weathercook.hatenadiary.jp/entry/2013/10/11/011306)
* [GitBucket 1.13をリリースしまし
た](http://d.hatena.ne.jp/takezoe/searchdiary?word=%2A%5BGitBucket%5D)
user modelの削除メモ


$ user newで生成したもの全て削除したい


user modelを削除したい

`$ rails destroy controller user new`

｀ remove  app/controllers/user_controller.rb
       route  get "user/new"
      invoke  erb
      remove    app/views/user
      remove    app/views/user/new.html.erb
      invoke  rspec
      remove    spec/controllers/user_controller_spec.rb
      remove    spec/views/user
      remove    spec/views/user/new.html.erb_spec.rb
      invoke  helper
      remove    app/helpers/user_helper.rb
      invoke    rspec
      remove      spec/helpers/user_helper_spec.rb
      invoke  assets
      invoke    coffee
      remove      app/assets/javascripts/user.js.coffee
      invoke    scss
      remove      app/assets/stylesheets/user.css.scss
｀
削除できた
Atomで入れておきたいpackage

# [recent-files](https://atom.io/packages/recent-files)
最近開いたディレクトリを覚えておく。Atomにはデフォルトでこの機能がないので入れないとつらい。

# [sublime-style-column-selection](https://atom.io/packages/sublime-style-column-selection)
これ入れるとOptionキー＋クリック＋ドラッグで矩形選択できる

# [editorconfig](https://atom.io/packages/editorconfig)
Atomで[EditorConfig](http://editorconfig.org/)を使えるようにする。

# [pain-split](https://atom.io/packages/pain-split)
Paneを上下左右に分割する。

# [atom-alignment](https://atom.io/packages/atom-alignment)
```
var a = b;
var ab = c;
var abcd = d;
var ddddd =d;
```

なコードを

```
var a     = b;
var ab    = c;
var abcd  = d;
var ddddd = d;
```

に変換するやつ。

# [pretty-json](https://atom.io/packages/pretty-json)
JSONを整形してくれるやつ。

# [autocomplete-plus](https://github.com/atom-community/autocomplete-plus)
タイプ中に自動補完をしてくれるヤツ。ただし補完候補の選択がデフォルトだとtabキーになっていて使いづらいので、自分はkeymap.csonに以下を追加してEnterにしている。

```
'.autocomplete-plus input.hidden-input':
  'enter': 'autocomplete-plus:confirm'
```
CSSとかに使う短縮名を考える


IDとかCLASS名を短くしたいのはよくわかる。
でも、規則性もへったくれもなく自己中短縮名を作られた日には、部屋の中を悶え転げ回る気分。
という事で簡単に一覧作ってみる。ちょろちょろ更新する予定です。


個人的に短縮名を選択するのは、4〜5文字を超えていて、なおかつ広く使われている短縮名がある用語に限っています。
たとえば『icon』『error』『alert』なんかは、わざわざ短縮名使わなくてもいいんじゃないかと思ってたりします。
『current』なんて、そのまま使っていることも多いですし。

この一覧をゆる〜く作ったのは、短く命名した方がいい＝むやみやたらに自己中短縮する考え方にブレーキをかけるための草稿です。
想定対象者は実務経験の浅い（新卒〜3年目前後）作業者です。

# よくある短縮名の一覧
## あ行

| 日本語| 短縮名 | 英単語 |
|:-----|:-----|:-----|
| アイコン | ico | icon |
| アプリケーション | app | application |
| アラート | alrt | alert |
| 以前の、前の | prv | previous |
| エラー | err | error |


## か行

| 日本語| 短縮名 | 英単語 |
|:-----|:-----|:-----|
| カテゴリー | cat | category |
| 画像 | img | image |
| 現在位置 | cr | current |
| 答え | ans | answer,as |
| 広告 | ad | advertisement |

※「質疑応答」Qs and As〔questions and answersの略〕
出典：<a href="hhttp://eow.alc.co.jp/search?q=%E8%B3%AA%E7%96%91%E5%BF%9C%E7%AD%94" target="_blank">英辞郎on the WEB</a>

## さ行

| 日本語| 短縮名 | 英単語 |
|:-----|:-----|:-----|
| 写真 | pic |picture |
| 最小 | min | minimum |
| 最大 | max | maximum |
| 削除 | del | delete |
| 説明 | desc | description |
| 下 | dn | down |
| 質問 | qs |questions|

※「質疑応答」Qs and As〔questions and answersの略〕
出典：<a href="http://eow.alc.co.jp/search?q=%E8%B3%AA%E7%96%91%E5%BF%9C%E7%AD%94" target="_blank">英辞郎on the WEB</a>

## た行

| 日本語| 短縮名 | 英単語 |
|:-----|:-----|:-----|
| タイトル | ttl | title |
| ダウンロード | dl | Download |
| チェック | chk | check |
| テキスト | txt | text |
| テーブル | tbl | table |
| ドキュメント | doc | document |


## な行

| 日本語| 短縮名 | 英単語 |
|:-----|:-----|:-----|
| ナビゲーション | nav | navigation |


## は行

| 日本語| 短縮名 | 英単語 |
|:-----|:-----|:-----|
| パスワード | pw | password |
| バナー | bnr | banner |
| 番号 | num | number |
| ボタン | btn | button |


## ま行

| 日本語| 短縮名 | 英単語 |
|:-----|:-----|:-----|
| ミーティング | mtg | meeting |
| メッセージ | msg | message |
| 目次 | toc | table of contents |


## や行

| 日本語| 短縮名 | 英単語 |
|:-----|:-----|:-----|


##ら行

| 日本語| 短縮名 | 英単語 |
|:-----|:-----|:-----|
| ローカル | locl | local |


## わ行

| 日本語| 短縮名 | 英単語 |
|:-----|:-----|:-----|


# スペシャルサンクス
かなり参考にしました。

参考：プログラミング用語省略形- 窓を視ればアマグラマ(リンク切れ）  
参考：[変数名の力 - いいプログラムを書こう](http://takaot.o.oo7.jp/prprpr/varname.html)
参考：[英辞郎 on the WEB](https://eow.alc.co.jp/)

# すてきなサービス発見した
[プログラマーのためのネーミング辞書 | codic](https://codic.jp/) 
ネーミングを生成してくれるとか本当に嬉しい。

こちらの使い方については、『[寝ログ｜関数や変数のネーミングに悩んだら「codic」に日本語名を入力するとある程度解決するかも](http://nelog.jp/codic)』が詳しい。
 
この記事を書いた後、『codic』をフルで使う機会がなくて、ほとんど使ってないwww
どちらかというと「短縮名(略語)を検索できる」サイトを使っている。

# 短縮名(略語)を検索できるサイト
**[Abbreviations and acronyms dictionary](https://www.acronymfinder.com/)**
よく使うサイト。これを使えば、なんちゃって略語の爆誕を防げる。

**[All Acronyms - Top Acronyms and Abbreviations Dictionary](https://www.allacronyms.com/)**
『Abbreviations and acronyms dictionary』と違うのは**投票数**があるところ。
いくつか略語の候補があった時の参考にできる。
【メモ】Git for Windows + MinGWな環境の.bashrc

http://qiita.com/poad1010/items/d6252f1271934e7f17b4
MSYS2を使うと、RubyもGitも小細工なしで使えるため、余程の理由がない限りはMinGWではなくMSYS2を推奨します。
Git for WindowsもMSYS2がベースっぽいし

DevKitでも一緒だとは思う。
mingw-getが使えるから、DevKitにしていないけど…
Ruby自体、あんまり使ってないし

因みに、MinGWは32bit版です。64bit版は試したことない。

```.bashrc
# less コマンド等のエラー回避
export TERM=msys
 
# lsで日本語を表示する
alias ls='ls --color=auto --show-control-chars'
alias ll='ls -l'
alias l='ls -CF'
 
# gettext用
export OUTPUT_CHARSET=UTF-8
 
# viコマンド
alias vi='vim.exe'
 
# git
alias git='git.exe'

source /c/Program\ Files\ \(x86\)/Git/etc/git-prompt.sh
source /c/Program\ Files\ \(x86\)/Git/etc/git-completion.bash
 
# ロケール他
export TZ=JST-9
export LANG=ja_JP.UTF-8
export LC_ALL='C'
export TPUT_COLORS=256
export HOSTNAME=msys-bash
PS1='[\[\033[0m\]\u\[\033[00;32m\]@$HOSTNAME\[\033[0m\] \t \w\[\033[0m\]$(__git_ps1)\[\033[00m\]] \n\$ '

export PATH=~/.packer:$PATH:/c/Program\ Files\ \(x86\)/Git/bin
```

これの何が便利かって言うと、mintty上でgitが使えるってこと。
Xcode5で32bitを指定する場合


	Projectを選択⇒「Build Settings」⇒「Architectures」

上記にてドロップダウンリストからOtherを選択し、

	$(ARCHS_STANDARD_32_BIT)

を入力する。
ターゲット別に指定する場合は、TARGETSから選択する。

![ss3.png](https://qiita-image-store.s3.amazonaws.com/0/44441/2a3e8791-a63a-9f76-2439-7a10044ea17a.png "ss3.png")


「Build Settings」の画面で「Architectures」が表示されない場合は、
検索ボックス左横のタブにて「All」を選択していることを確認する。
※ 「Basic」を選択している場合は表示されない。
Angular.js アプリのコンポーネントを Developer Tools で取得

Angular.js アプリをいじっていて、特に私のような初心者だとコンポーネントが実際にどんなもんなのか、JavaScript コンソールでごにょごにょしながら理解したいなーというときがある。

```js
var myApp = angular.module("myApp", []);
myApp.service('BlogService', function() {
  // do something
});
```

上記のような module、service がある場合には以下のような感じで。

```js
angular.injector(["ng", "myApp"]).get("BlogService")
````

API ドキュメントは以下。

https://docs.angularjs.org/api/auto/service/$injector
文字化けしたたくさんのファイルを一括リネームするスクリプト


find ~~~|xargs sh -c 'mv~~~'でひとつずつファイル名を変えながらmvしようとしたらshに怒られるしもうヤダ

```zsh
#from以下の全てのファイルをリネームした上でtoに移動
#数値判定サボってますめんなさいごめんなさい
#bashやzshなら動くと思う

from=./from/
to=./to/
inode=$(ls -li "$from"|head -n2|tail -n1|awk '{print $1}')
while [ 0 -lt "$inode" ];do
	find "$from" -inum $inode -exec mv '{}' "$(mktemp -u --tmpdir="$to" name-xxxxxxxxxx)" \;
	inode=$(ls -li "$from"|head -n2|tail -n1|awk '{print $1}')
done
```
PowerShellでdllを読み込む際の注意点

PowerShellで`Add-Type -Path`等でdllを読み込む際、「新しすぎて読み込みません」というようなメッセージが出ることがある。

原因はPowerShellが使用している.NET Framework。たとえPC(サーバー)に最新の.NET Frameworkが入っていても、PowerShellが使用するのは旧態依然の2.0なのだ。
このため、新しいフレームワークで追加されたクラス、ビルドされたdllを読み込もうとすると上記のエラーが発生する。

互換性のための措置と思われるが、正直有難迷惑なので動作する.NET Frameworkのバージョンを変更することにする。

PowerShellのインストールディレクトリ(powershellを起動し、$pshomeで確認可能)に、下記のようなconfigファイルを配置する。

```powershell.exe.config
<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.5.51209"/>
        <supportedRuntime version="v4.0.30319"/>
        <supportedRuntime version="v2.0.50727"/>
    </startup>
    <runtime>
        <loadfromremotesources enabled="true"/>
    </runtime>
</configuration>
```

supportedRuntimeを加えることで、動作する.NET Frameworkを調整できる。
なお、デフォルトの開発環境であるPowerShell ISE上で動かす場合には、別途同じ内容を`powershell_ise.exe.config`で保存しておく必要がある。

また、configファイルを参照するようなdllの場合は、以下のようにする(下記例では、mylib.dll.configに設定された"dllparam"が表示されればOK)。

```loadMyAssembly.ps1
$root = "C:\my_assembly\"
$assembly_path = $root + "mylib.dll"
$assembly_config = $assembly_path + ".config"

[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $assembly_config)
Add-Type -AssemblyName System.Configuration
Add-Type -Path $assembly_path
write-host ([Configuration.ConfigurationManager]::AppSettings["dllparam"]) 

```

なお、ISEを使っている場合configへのパスがキャッシュされるようでうまく動かない。
その場合、キャッシュを初期化する下記の呪文を入れることで対処可能.

```
[Configuration.ConfigurationManager].GetField("s_initState", "NonPublic, Static").SetValue($null, 0)
[Configuration.ConfigurationManager].GetField("s_configSystem", "NonPublic, Static").SetValue($null, $null)
([Configuration.ConfigurationManager].Assembly.GetTypes() | where {$_.FullName -eq "System.Configuration.ClientConfigPaths"}).GetField("s_current", "NonPublic, Static").SetValue($null, $null)
```


＜参考＞
[Enable .NET 4 Runtime for PowerShell and Other Applications](http://www.bonusbits.com/main/HowTo:Enable_.NET_4_Runtime_for_PowerShell_and_Other_Applications)
[Using CurrentDomain.SetData(“APP_CONFIG_FILE”) doesn't work in PowerShell ISE](http://stackoverflow.com/questions/13420545/using-currentdomain-setdataapp-config-file-doesnt-work-in-powershell-ise)
Javascript実行系はマルチスレッドに対応しているのか？

結論だけ、書く。
# Webブラウザで動くJavascriptは基本シングルスレッドである
# HTML5のWeb Workersという新機能でマルチスレッドに対応

setTimeoutなどは非同期のように見えるが，setTimeoutは指定時間後に実行キューに関数を入れるだけ．
setTimeoutした後の処理が長時間かかると指定時間後になっても実行されないこともありえる
参考ページ：http://d.hatena.ne.jp/amachang/20060910/1157911122


例えばsetTimeoutした後に時間のかかる処理を行うと
setTimeoutの関数はその分遅れる
例）http://jsfiddle.net/hA8nR/

# Node.jsは原則シングルスレッド

しかし，子プロセスを作ることは可能である．
http://nodejs.org/api/child_process.html
重くなってきたmac portsを軽量化する。

Mac portsで色々インストールしたら重くなってきた！
そんな貴方のためのmac ports clean up方法を紹介！

(1)homebrewにする(身も蓋もない...)

(2)使ってない枝葉のポートを消し飛ばす。
`$ sudo port -uf uninstall leaves`

(3)インストール時のゴミファイル消し飛ばす。
`$ sudo port clean installed`

(4)アップデート後に残った古いversionを消し飛ばす。
`$ sudo port uninstall inactive`
herokuコマンド一覧(作成中)

アプリの一覧

```

$ heroku apps


```

アプリ作成

```

$ heroku create


```

アプリを再作成した場合など、アプリIDを変更する



```

$ git config -e

```
update url to heroku

herokuにデプロイ

```

$ git push heroku master


```
アプリ削除

```


$ heroku destroy --app アプリケーションＩＤ

```

dyno?の起動数を変更

```


$ heroku ps:scale web=0
$ heroku ps:scale worker=0

```

ログ確認
```
$ heroku logs
```


ログ確認※tail
```
$ logs --app APP_NAME --tail
```



db:migrate
```
$ heroku run rake db:migrate --app アプリケーションＩＤ
```

master以外のブランチをデプロイ
```
$ git push heroku デプロイしたいブランチ:master
```
POSTでリダイレクトする

# はじめに
とあるWEBページで、GETストリングで受け取った値をページロード時に
別のサイトへPOSTでリダイレクトする必要があったので、その方法をメモっておきます。


.NETの性質上POSTデータを送る場合以下のようなことになる。

> * ASP.NETの構想として、他のページ（特に他のAppドメイン）への遷移はGETを利用を想定。(セキュリティ面などから)
> 　コンセプトとして、POSTはPOSTBACKのみの利用。
> 
> * 例外として、LinkButtonコントロールを使うと、ノンコーディングでPOST送信で画面遷移ができる。
> 　このとき、ページ上のコントロールのidが、そのままPOST変数名になる。
> 　ただし、渡したくないコントロールの情報についてもPOSTされてしまう。(ボタン名やViewStateなど)そこをクリアすればこの方法でＯＫ。
> 
> * LinkButtonが使えない場合は、JavaScriptで組むしか無い。

参考　http://social.msdn.microsoft.com/Forums/ja-JP/7a023755-35c6-40b3-b9d1-3b53981c1d06/postresponseredirectweb?forum=aspnetja

というわけで、ページロード時にリダイレクトしたいので、
.NET と JavaScript の組合せで対応しました。

え？JavaScript だけでやっちゃえば、いいじゃない？
その方法も試してみましたが、自分のテストが悪かったかもしれませんが、
URLエンコードされた文字列をJavaScriptで正しく解釈できなかったので、
このような形になりました。

まあ、.NET + JavaScriptの構成にしたおかげでページロード時に
.NET側で複雑な処理をさせることもできるようになりました。
（今回のサンプルではやっていませんが。）

# サンプルコード
```aspx-vb:RedirectSample.aspx
<%@ Page Language="vb" ResponseEncoding="UTF-8" %>
<% 
    txtval.Text = System.Web.HttpUtility.HtmlDecode(Page.Request.QueryString.Get("val"))
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function doPost() {
            document.getElementById("val").value = document.getElementById("txtval").value
            document.form1.method = "post";
            document.form1.submit();
            //    return false;
        }
    </script>
</head>
<body>
<form name="form1"  action="http://example.com/dest_post.aspx" method="post">
    <input type="hidden" name="val" id="val" value="" />
</form>
<form runat="server" ID="GETSTRING">
    <asp:TextBox ID="txtval" runat="server" Enabled="false" style="width:1px;" ></asp:TextBox>
</form>
</body>
</html>
<script type="text/javascript">
   doPost();
</script>
```

## 仕様の簡単な説明
http://～～～/RedirectSample.aspx?txtval=hogehoge のようなリクエストがくると
txtvalの値をGETで受け取り、
http://example.com/dest_post.aspx へPOST送信でリダイレクトしています。

&lt;form&gt;タグを分割することによってリダイレクト先のPOST送信する変数名をカスタマイズしているところが
ポイントです。

# 最後に
セキュリティ上の理由で、このようなPOST送信はいけないような気がしますが、
こうすることにより、誰がどうなってどのように困るのか、私の貧困な想像力では分かりませんでした。
分かる方がいましたらお教えて頂けると嬉しいです。
aws-cliコマンドでの接続エラー

バックアップ自働化してて http://aws.amazon.com/jp/cli/ をはじめて使ってたんだけどなんかアップロードする時にエラー出てた。

```
$ aws s3 cp a.txt s3://mybucket/

upload failed: a.txt to s3://mybucket/a.txt A client error (PermanentRedirect) occurred when calling the PutObject operation: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
```

こういうの。 `--debug` つけるともっと詳細吐く。

どうも `aws configure` の時にリージョン設定してないと不正なエンドポイントに接続しにいってこれが起きているっぽい。

再度 `aws configure` を打って http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html を参考に `ap-northeast-1` を入れた。

`aws --region "ap-northeast-1"` でもその場で変えられるっぽい。
ポートを握っているプロセスを見たい時

ふとCentOSでman netstatを眺めていて『へぇ〜！ ° °（ Д ）』となったので、メモ

# 普通にやるなら

```shell-session
$ sudo lsof -i:8080
COMMAND     PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
squid      1986    squid   11u  IPv6 1771222      0t0  TCP *:webcache (LISTEN)
clock-app 10204    user1   22u  IPv4 1883730      0t0  TCP example.local:46261->example.local:webcache (CLOSE_WAIT)
```

# man netstatより抜粋
>   -p, --program
       Show the PID and name of the program to which each socket belongs.

という事は、以下で良いという事ですよ！

```shell-session
$ sudo netstat -anp | grep 8080
tcp        1      0 127.0.0.1:46273             127.0.0.1:8080              CLOSE_WAIT  10204/clock-applet  
tcp        0      0 :::8080                     :::*                        LISTEN      1986/(squid)     
```

出てくる情報は簡略化されているので、分かり難い場合があるかもしれませんが、その場合は、pidがあるので、psを叩けば（結局叩くのかよ）何か分かります。

## ただし
macでman netstatをすると以下になっています
>      -p protocol
           Show statistics about protocol, which is either a well-known name for a protocol or an alias for it.  Some protocol names
           and aliases are listed in the file /etc/protocols.  The special protocol name ``bdg'' is used to show bridging statistics.
           A null response typically means that there are no interesting numbers to report.  The program will complain if protocol is
           unknown or if there is no statistics routine for it.

なので、環境によってですけどね。

# まとめ
## netstatに-pオプションがある環境でプロセスを知りたい時
`sudo netstat -anp | grep ポート番号`
必要に応じて`sudo ps aux | grep プロセスID`

## 何も気にしたくない時
`sudo lsof -i:ポート番号`

と、まとめてしまうと使えない子みたいに見えますが、「-pオプションが使える環境ではとりあえずつけておく」という使い方も良いかもしれませんよね。
どのポートを調べる事になるか分からない事もありますし！

# おまけ
というような事を書いていたのですが、先日某所で行われた勉強会で発表をされていた先生（学生さん）が「ぱんつ♪ぱんつ♪」と言いながらデモをされていたのが耳に残ってしまいました・・・（笑
最初は『なんの事を言っているのだろう？』と思っていたのですが、よくよく画面を観ると

```bash
sudo netstat -pantu
```
とありました。
よく思いつきますね〜。
tuをつけると、Unix domain socketsが表示されなくなりますが、普段はこちらを気にする機会は少ないと思います。
なので、皆様もパンツで調べましょう！