OmniAICreator/Qiita-1.07M huggingface dataset:
VNCのUbuntu環境にgit&hubコマンドをインストール


MacユーザーなのでLinuxにはあまり詳しくないので、また設定することがあるときのための覚書です。

## gitのインストール

```
sudo apt-get install git
```

特に困ることなし。

## hubのインストール

gemでインストールするので、gemをインストールするところから。

```
sudo apt-get install rubygems
```

y/nがふたつ出てきました。

+ 容量いくら使いますけどいいですか？ - もちろんYes 
+ Validationなしでやりますか？ - Noにしたら通せなかったので、思考停止の勢いでYes

完了したら早速gemでインストール。

```
sudo gem install hub
```

これで`hub --version`したら見事にインストールされていました。

## エイリアスの設定

`vim ~/.bash_profile`で以下の行を追記

```
eval "$(hub alias -s)"
```

これでラッピングも完了して、設定完了させましたよっていう報告のために`git pull-request`やって思ったら失敗。

おそらくsshキーの登録的な問題だろうと思ったので下の記事を参照した。

[UbuntuでGithubにSSH-keysを登録する方法](http://yakkuru21.hateblo.jp/entry/2014/06/24/181828)

他の人がローカルにsshキーを生成してGitHubに登録ってところまでやってあったっぽいので結局やったことは

```
ssh -T git@github.com
```

だけでした。GitHub上にsshキーを登録したのをターミナルからも参照できるよ的な感じですな。

成功。
初回だけユーザーネームとパスワードを求められました。
正直、ここの部分はこうなんだろうということでやったらできた程度のものなので自信うすめ。

## gitの基本的な設定

一応他にやったgitの設定も覚書として。

```
git config --global user.name "UserName"
git config --global user.email "User@email.com"
git config --global core.editor vim
git config --global push.default current
```

だいたい上の2つは当然のようにやりますね。
vimなのはとにかくnanoがデフォルトで呼び出されるのが嫌だからです。特にエディタ戦争を引き起こすつもりはございません。
pushの引数なしのときの挙動はcurrentにしよっか的な気分でやってます。gitしょしんしゃからヘルプを求められたときに、あれ？ってなりたくないので設定しました。

何か他にもした方がいいことあるだろうなーって思いながらも、パッと思いつかなかったのであんまり気にしないことにします。

前記事 - [スクロールさせる領域だけどスクロールバーは非表示にしたい。](http://qiita.com/naru0504/items/ff0c77775223dc5a9148)
Memcached - Memcachedのバックアップとリストアする方法

AWSのElastiCacheのNode Replace Event対応で、Memcachedのバックアップする必要があったのでその時の手順をメモ

#### 1.memcached-toolのインストール
Githubで公開されているMemcachedのバックアップを取得したり、ステータスを確認したりできるツール

```
# cd /usr/local/src
# git clone https://github.com/memcached/memcached.git
# /usr/local/src/memcached/scripts/memcached-tool
# ln -s /usr/local/src/memcached/scripts/memcached-tool /usr/bin/memcached-tool
```

#### 2.memcachedのバックアップ

```
memcached-tool <HOST>:<PORT> dump > <BACKUP_FILD>
```

#### 3.memcachedのリストア
Expireが設定されていない場合は復元できないなどの制約があるようだけど、今回のケースでは特に問題ないとのことなのでこの方法を採用

```
cat <BACKUP_FILE> | nc <HOST> <PORT>
```

memcached-toolは便利！

#### ※参考
http://makaaso.hatenablog.com/entry/2015/10/27/195818
Python マイナンバー検証用モジュールを公開

pip install可能なPythonでマイナンバーを検証するモジュールです。ruby版と1万件のクロスチェックを行っています。[マイナンバーのチェックデジットを計算する](http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64)の記事が素晴らしかったので参考にしてPython版を作ることが出来ました。


# install
```py:install
pip install mynumber
```
https://pypi.python.org/pypi/mynumber

# sample code
```py:install
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from mynumber import MyNumber

# マイナンバー検証
my_number = 123456789018
print MyNumber.validate(my_number)

# もっとマイナンバー検証
for my_number in MyNumber.gets(1000):
    assert MyNumber.validate(my_number)

# もっともっとマイナンバー検証 by iterator:重複あり
for my_number in MyNumber():
    assert MyNumber.validate(my_number)
```

# 根拠となる法令
[○総務省令第八十五号](http://www.soumu.go.jp/main_content/000327387.pdf)

## 第五条令第八条の総務省令で定める算式は、次に掲げる算式とする。

###算式
$11 - \Bigl( \displaystyle\sum_{n=1}^{11} P_n \times Q_n \Bigr) \% 11$
ただし、 $\Bigl( \displaystyle\sum_{n=1}^{11} P_n \times Q_n \Bigr) \% 11 ≦１ $の場合は、$0$とする

###算式の符号
$Pn$ : 個人番号を構成する検査用数字以外の十一桁の番号の最下位の桁を $1$ 桁目としたときの $n$ 桁目の数字
$Qn$ : $1≦n≦6$ のとき $n+1$、 $7≦n≦11$ のとき $n-5$

[原文](http://www.soumu.go.jp/main_content/000327387.pdf)と[マイナンバーのチェックデジットを計算する](http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64)の記事の数式を引用させて頂きました。


# 他言語版のご紹介
- [Ruby - マイナンバーのチェックデジットを計算する](http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64)
- [C++でマイナンバーのチェックデジットを計算する](http://qiita.com/yumetodo/items/600ca0df422010cbc4c1)


# Ruby版で検証
[マイナンバーのチェックデジットを計算する](http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64)の記事のコードでクロスチェックしてみました。

```rb:ruby_mynumber_validate.rb
#!/usr/bin/env ruby
def validate_my_number(mynumber)
  # 整数列化
  digits = mynumber.to_s.chars.map(&:to_i)
  # 12桁しか認めない
  return false unless digits.length == 12
  # チェックデジットを分離します
  check_digit = digits.pop

  # 残った数字を小さい方から調べます
  digits.reverse!

  # 数列の和を11で割った余りを計算します
  remainder =  (1..11).inject(0) {|sum, i|
    p = digits[i-1]
    q = (i <= 6) ? i+1 : i-5
    sum + p*q
  } % 11

  case remainder
    when 0,1
      check_digit === 0
    else
      check_digit === (11 - remainder)
  end
end

my_numbers = [
    xxxxx,
    xxxxx,
    xxxxx,
    xxxxx,
]

my_numbers.each do |num|
  r = validate_my_number(num)
  if r == false then
    p num
  end
end




```
認証鍵周りでたまに使うTips

#### 公開鍵の作成
``` $ ssh-keygen ```
#### RSA暗号の鍵の生成
``` $ ssh-keygen -t rsa ```
#### 秘密鍵から公開鍵を生成する
``` $ ssh-keygen -y -f .ssh/id_rsa > .ssh/id_rsa.pub ```
#### .sshの作成
``` $ ssh localhost ```
#### 鍵ファイルの変換
``` $ ssh-keygen -i -f id_rsa.pub >> authorized_keys ```
powershell で .NET Framework のバージョンを確認

powershell のバージョン

```
PS C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2
```

.NET Framework 4 系のみですが以下のレジストリから情報を取得できます。

```
PS C:\> get-item 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'


    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4


Name                           Property
----                           --------
Full                           Version       : 4.5.51650
                               CBS           : 1
                               TargetVersion : 4.0.0
                               Install       : 1
                               InstallPath   : C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
                               Servicing     : 0
                               Release       : 379893
```

Release 番号からバージョンを参照します。
Release 番号については[こちら](https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed)

switch 文にすると簡単かなと。

``` powershell
$release = (get-item 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full').GetValue("Release")

switch -Exact ($release)
{
    "378389" { Write-Host ".NET Framework 4.5" }
    "378675" { Write-Host ".NET Framework 4.5.1 on Windows 8.1" }
    "378758" { Write-Host ".NET Framework 4.5.1 on Windows vista/7/8" }
    "379893" { Write-Host ".NET Framework 4.5.2" }
    "393295" { Write-Host ".NET Framework 4.6 on Windows 10" }
    "393297" { Write-Host ".NET Framework 4.6" }
    "394254" { Write-Host ".NET Framework 4.6.1 on Windows 10" }
    "394271" { Write-Host ".NET Framework 4.6.1" }
    "394802" { Write-Host ".NET Framework 4.6.2 on Windows 10" }
    "394806" { Write-Host ".NET Framework 4.6.2" }
    "460798" { Write-Host ".NET Framework 4.7 on Windows 10" }
    "460805" { Write-Host ".NET Framework 4.7" }
    "461308" { Write-Host ".NET Framework 4.7.1 on Windows 10" }
    "461310" { Write-Host ".NET Framework 4.7.1" }
    "461808" { Write-Host ".NET Framework 4.7.2 on Windows 10" }
    "461814" { Write-Host ".NET Framework 4.7.2" }
    "528040" { Write-Host ".NET Framework 4.8 on Windows 10" }
    "528372" { Write-Host ".NET Framework 4.8 on Windows 10 Update 2022" }
    "528449" { Write-Host ".NET Framework 4.8 on Windows 11" }
    "528049" { Write-Host ".NET Framework 4.8" } 
    "533320" { Write-Host ".NET Framework 4.8.1 Windows 11" } 
    "533325" { Write-Host ".NET Framework 4.8.1" } 
    default { Write-Host "Unknown version" }
}
```
Blender Pythonで8*8（64個）のキューブを生成

```cube.py
import bpy

for x in range(1,9):
	for y in range(1,9):
		bpy.ops.mesh.primitive_cube_add(location=(x*10, y*10, 1))
```

うっかり生成し過ぎるとPCが落ちます。モデリングが面倒な時にお使いください。
Fizz Buzz

```FizzBuzz.py
for x in xrange(1,101):
	if x % 3 is 0 and x % 5 is 0:
		print "FizzBuzz"
	elif x < 100 and x % 3 is 0:
		print "Fizz"
	elif x < 100 and x % 5 is 0:
		print "Buzz"
	else :
		print x
```
MacでRuby on Rails4のローカル環境を構築する

# Homebrewのインストール
## Xcodeのインストール
AppStoreからXcodeをインストールする
<img width="683" alt="スクリーンショット_2015_10_27_18_24.png" src="https://qiita-image-store.s3.amazonaws.com/0/2781/7443885a-3c1f-069e-2479-c6ded47f3338.png">

導入が済んだら、ターミナルで以下のコマンドを実行

```bash:bash
xcode-select --install
```

## Homebrewのインストール
公式サイト：http://brew.sh/index_ja.html
からコマンドをコピーする。

```bash:bash
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

## Homebrewがインストールされているか確認

```bash:bash
brew -v
Homebrew 0.9.5
```
バージョンが出ればOK。

# Gitをインストールする

```bash:bash
brew install git
```
#Readlineをインストールする
```bash:bash
brew install readline
```

#OpenSSLをインストールする
```bash:bash
brew install openssl
```

#rbenvをインストールする
brewをアップデート

```bash:bash
brew update
```

```bash:bash
brew install rbenv
```

#ruby-buildをインストールする
```bash:bash
brew install ruby-build
```
ホームディレクトリに.rbenvフォルダを作る

```bash:bash
mkdir ~/.rbenv
```

##.bash_profileに設定を書き込む
```bash:bash
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```
.bash_profileの設定を反映させます。

```bash:bash
source ~/.bash_profile
```

#Rubyをインストール
rbenvにruby2.2.2があるか確認

```bash:bash
rbenv install -l
```
<img width="217" alt="sample_—_bash_—_80×24.png" src="https://qiita-image-store.s3.amazonaws.com/0/2781/770bd73b-8f3a-5183-e27a-1f991c8d6495.png">

Ruby2.1.2をインストール

```bash:bash
rbenv install 2.2.2
```

設定を反映させる

```bash:bash
rbenv rehash
```

Macでの標準のRubyバージョンを2.2.2に設定する

```bash:bash
rbenv global 2.2.2
```

設定を反映させる

```bash:bash
rbenv rehash
```

Rubyのバージョンが変更されたか確認

```bash:bash
ruby -v
ruby 2.2.2
```

#Rails4をインストールする

rbenvにopensslを当てる

```bash:bash
RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl`" rbenv install 2.1.2
```

Rails4をインストール

```bash:bash
gem install rails --version="4.2.0"
```

設定を反映させる

```bash:bash
rbenv rehash
```

Railsのバージョンの確認

```bash:bash
rails -v
Rails 4.2.0
```

#Railsを動かす

ホームディレクトリにrailsディレクトリを作成

```bash:bash
mkdir ~/rails
```
ディレクトリに移動

```bash:bash
cd rails
```

プロジェクトを作成

```bash:bash
rails new sample_project
```

bundleディレクトリを作成

```bash:bash
cd sample_project
bundle install --path vendor/bundle
```

##Railsサーバーを動かす

```bash:bash
bundle exec rails s
```

http://127.0.0.1:3000/
にアクセスして以下の様なページが出ればOK

<img width="831" alt="Ruby_on_Rails__Welcome_aboard.png" src="https://qiita-image-store.s3.amazonaws.com/0/2781/8c057158-adfa-0d04-7569-154ce8c22e03.png">
VyOSをmackerelで監視する


本手順は以下のバージョンで作成している。

* Linux vyos 3.3.8-1-amd64-vyatta


# 目的

ルーターとかで使うVyOSの監視を[mackerel](https://mackerel.io/)で行いたい。
特にそれ以上の理由は無い。

Nagiosでいいじゃんとか、SNMP使えよとか、色々意見はあるだろうけど、mackerelで管理したいのだ。


# インストール

下記作業は、対象ホストにssh等で特権ユーザーでログインして行うものとする。

## 注意

基本的に[公式のdebパッケージの手順](http://help-ja.mackerel.io/entry/howto/install-agent/deb)で良いのだが、注意がある。
公式では`sh`にパイプしているが、vyosでは`sh`コマンドはラッパーに喰われている(下記)ので、`sh`と記載のある場合は全て`bash`に置き換える必要がある。

```bash
$ type sh
sh is aliased to `_vyatta_op_run sh'
```

今後の手順更新に対して上記方法で追従できる保証はない。


## インストール

作業ユーザーでログインしているなら、root権限のbashを起動する。

```bash
$ sudo bash
```


aptのリポジトリ登録をbashで実行する。

```bash
$ curl -fsSL https://mackerel.io/assets/files/scripts/setup-apt.sh | bash
```

そして必要なパッケージをインストールする。

```bash
$ apt-get install mackerel-agent
$ apt-get install mackerel-agent-plugins
$ apt-get install mackerel-check-plugins
$ apt-get install mkr
```

## 設定

最低限APIキーは設定が必要。他に関しては、各々のお好きなように。
以下に参考を示す。

```mackerel-agent.conf
apikey = "あなたのAPIキー"

# Plugin for Linux
[plugin.metrics.linux]
command = "/usr/local/bin/mackerel-plugin-linux"

#
# Process Checks
#
[plugin.checks.bgpd_procs]
command = "/usr/local/bin/check-procs --pattern=/usr/sbin/bgpd"

[plugin.checks.ospfd_procs]
command = "/usr/local/bin/check-procs --pattern=/usr/sbin/ospfd"

[plugin.checks.ospf6d_procs]
command = "/usr/local/bin/check-procs --pattern=/usr/sbin/ospf6d"

[plugin.checks.ripd_procs]
command = "/usr/local/bin/check-procs --pattern=/usr/sbin/ripd"

[plugin.checks.ripngd_procs]
command = "/usr/local/bin/check-procs --pattern=/usr/sbin/ripngd"

[plugin.checks.zebra_procs]
command = "/usr/local/bin/check-procs --pattern=/usr/sbin/zebra"

[plugin.checks.keepalived_procs]
command = "/usr/local/bin/check-procs --pattern=/usr/sbin/keepalived"

[plugin.checks.ntpd_procs]
command = "/usr/local/bin/check-procs --pattern=/usr/sbin/ntpd"

[plugin.checks.cron_procs]
command = "/usr/local/bin/check-procs --pattern=/usr/sbin/cron"

[plugin.checks.rsyslogd_procs]
command = "/usr/local/bin/check-procs --pattern=/usr/sbin/rsyslogd"

```




## 起動

debian系列なので、サービス再起動は以下のコマンドで行う。
起動・停止とかのコマンドは割愛。

```bash
/etc/init.d/mackerel-agent restart
```

無事に起動したらmackerelのGUIを見て確認する。


## 補足

### 自動起動

下記のように確認して、Sがついたシンボリックリンクがあれば自動起動する。

```bash
$ ls -l /etc/rc*.d/*mackerel-agent

lrwxrwxrwx 1 root root 24 Oct 27 05:05 /etc/rc0.d/K01mackerel-agent -> ../init.d/mackerel-agent
lrwxrwxrwx 1 root root 24 Oct 27 05:05 /etc/rc1.d/K01mackerel-agent -> ../init.d/mackerel-agent
lrwxrwxrwx 1 root root 24 Oct 27 05:05 /etc/rc2.d/S03mackerel-agent -> ../init.d/mackerel-agent
lrwxrwxrwx 1 root root 24 Oct 27 05:05 /etc/rc3.d/S03mackerel-agent -> ../init.d/mackerel-agent
lrwxrwxrwx 1 root root 24 Oct 27 05:05 /etc/rc4.d/S03mackerel-agent -> ../init.d/mackerel-agent
lrwxrwxrwx 1 root root 24 Oct 27 05:05 /etc/rc5.d/S03mackerel-agent -> ../init.d/mackerel-agent
lrwxrwxrwx 1 root root 24 Oct 27 05:05 /etc/rc6.d/K01mackerel-agent -> ../init.d/mackerel-agent
```

もし自動起動する設定が入っていなければ以下のコマンドで有効化しておこう。

```bash
$ update-rc.d mackerel-agent enable
```
UITableViewで引っ張って更新+無限スクロールできるライブラリを公開しました。


# About

記事の一覧表示などで無限スクロール（InfiniteScroll）する際や引っ張って更新（PullToRefresh）する際に簡単にできるライブラリが見つからなかったので、Carthageでのライブラリ公開の勉強を兼ねて作ってみました。
当記事に使い方を書いていますが、サンプルコードはgithubに記載しています。


# PullAndInfiniteTableView

https://github.com/roana0229/PullAndInfiniteTableView

![DemoGif](https://raw.githubusercontent.com/roana0229/PullAndInfiniteTableView/master/dmeo.gif)


## Installation

Carthageを使ってインストールできます。
`github "roana0229/PullAndInfiniteTableView" >= 1.0`  


## Usage

1.継承するクラスを`UITableView`から`PullAndInfiniteTableView`に変更

2.下記のように、それぞれプロパティの変更とアクション時に実行したい処理を追加

```
tableView.showPullToRefresh = true
tableView.addPullToRefreshHandler({ [weak self] in ~ })
tableView.showInfiniteScroll = true
tableView.addInfiniteScrollHandler({ [weak self] in ~ })
```

3.APIを叩いてデータを取得するなど、データ更新処理が終わった時に下記のメソッドを呼ぶ

```
tableView.refresh(state: RefreshState)
```
コマンドラインからの SSH KEY 登録方法

# 概要

TERATERMを利用したカスタマー・ポータルからの登録方法は https://www.change-makers.jp/post/10302 にありますが、ポータル画面使うのは遅くて嫌だという方のために、slcliコマンドで登録する方法を書きました。

# 鍵の生成

```
$ ssh-keygen -t rsa -f ~/key/takara1
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/chef/key/takara1.
Your public key has been saved in /home/chef/key/takara1.pub.
The key fingerprint is:
11:51:24:19:c4:56:0c:c1:83:70:14:4a:4c:79:33:3e chef@ChefWs
The key's randomart image is:
+--[ RSA 2048]----+
|   o+++*O@+      |
|   .oo= *o.      |
|    .o +..       |
|      E  .       |
|       .S        |
|                 |
|                 |
|                 |
|                 |
+-----------------+
```


# 鍵登録
公開鍵ファイルを指定して登録します。 最後のtakara1はラベルですから、用途などわかる文字列にします。

```
$ slcli sshkey add -f takara1.pub takara1
SSH key added: 11:51:24:19:c4:56:0c:c1:83:70:14:4a:4c:79:33:3e
```

# 結果確認
次のコマンドでSSH鍵のリストを表示します。

```
$ slcli sshkey list
:........:...........:.................................................:.......:
:   id   :   label   :                   fingerprint                   : notes :
:........:...........:.................................................:.......:
: 395475 :  takara1  : 11:51:24:19:c4:56:0c:c1:83:70:14:4a:4c:79:33:3e :   -   :
:........:...........:.................................................:.......:
```
emojiにマッチするRuby正規表現パターン

RubyでUnicode9.0までの絵文字にマッチする正規表現パターン。

```rb
[\u{00A9}\u{00AE}\u{203C}\u{2049}\u{2122}\u{2139}\u{2194}-\u{2199}\u{21A9}-\u{21AA}\u{231A}-\u{231B}\u{2328}\u{23CF}\u{23E9}-\u{23F3}\u{23F8}-\u{23FA}\u{24C2}\u{25AA}-\u{25AB}\u{25B6}\u{25C0}\u{25FB}-\u{25FE}\u{2600}-\u{2604}\u{260E}\u{2611}\u{2614}-\u{2615}\u{2618}\u{261D}\u{2620}\u{2622}-\u{2623}\u{2626}\u{262A}\u{262E}-\u{262F}\u{2638}-\u{263A}\u{2648}-\u{2653}\u{2660}\u{2663}\u{2665}-\u{2666}\u{2668}\u{267B}\u{267F}\u{2692}-\u{2694}\u{2696}-\u{2697}\u{2699}\u{269B}-\u{269C}\u{26A0}-\u{26A1}\u{26AA}-\u{26AB}\u{26B0}-\u{26B1}\u{26BD}-\u{26BE}\u{26C4}-\u{26C5}\u{26C8}\u{26CE}-\u{26CF}\u{26D1}\u{26D3}-\u{26D4}\u{26E9}-\u{26EA}\u{26F0}-\u{26F5}\u{26F7}-\u{26FA}\u{26FD}\u{2702}\u{2705}\u{2708}-\u{270D}\u{270F}\u{2712}\u{2714}\u{2716}\u{271D}\u{2721}\u{2728}\u{2733}-\u{2734}\u{2744}\u{2747}\u{274C}\u{274E}\u{2753}-\u{2755}\u{2757}\u{2763}-\u{2764}\u{2795}-\u{2797}\u{27A1}\u{27B0}\u{27BF}\u{2934}-\u{2935}\u{2B05}-\u{2B07}\u{2B1B}-\u{2B1C}\u{2B50}\u{2B55}\u{3030}\u{303D}\u{3297}\u{3299}\u{1F004}\u{1F0CF}\u{1F170}-\u{1F171}\u{1F17E}-\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}-\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}-\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}-\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}-\u{1F570}\u{1F573}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}-\u{1F596}\u{1F5A5}\u{1F5A8}\u{1F5B1}-\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D0}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}-\u{1F6EC}\u{1F6F0}\u{1F6F3}\u{1F910}-\u{1F918}\u{1F980}-\u{1F984}\u{1F9C0}]
```

https://github.com/franklsf95/ruby-emoji-regex
注意点としてはREADMEにある通り、残念ながらskin toneや国旗や家族の絵文字(:family: のいろんなパターン)には対応していません。
Android DevelopのトレーニングをKotlinでやってみる -Building Your First App[2]-


#復習
Android DevelopのトレーニングをKotlinでやってみる -Building Your First App[1]-
http://qiita.com/kamedon39/items/8b814a0d7f0e826cf363

とりあえずKotlin化して実行までできた。

#Building Your First Appの続き

##Building a Simple User Interface
>The graphical user interface for an Android app is built using a hierarchy of View and ViewGroup objects

User InterfaceにはViewとViewGroupの２つあるみたい。
View:ButtonとかTextView...
ViewGroup:LinearLayoutとかRelativeLayout ....

自作でビューを作るときもこの２つのどちらかを継承すればxmlに記述して、呼び出せますね。

以下の５つはkotlinに関係ないので、割愛。xmlに反映します。
###Create a Linear Layout
###Add a Text Field
基本的なView,ViewGroupをxmlで記述する際の設定項目について書かれてる
###Add String Resources
Stringを記述の仕方が書かれてる
###Add a Button
以上のことを組み合わせて一つのレイアウトを組み合わせてつくってある
###Make the Input Box Fill in the Screen Width
Viewのサイズ調整についてかかれてる
特に注目すべきは、LinearLayoutでレイアウトでよく出てくるandroid:layout_widthが0dp、layout_weightが１の設定。
コンテンツの大きさを設定してるんじゃない！余った領域（余白）の分配だ。
今回はKotlinに注目してるので、割愛する。
この辺を参考に。
http://murakaming.hatenablog.com/entry/20110712/1310457296

```xml
<EditText
    android:layout_weight="1"
    android:layout_width="0dp"
    ... />
```


##Starting Another Activity
###Respond to the Send Button

```xml
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:onClick="sendMessage" />
```
個人的にはこの書き方は、好きではない。
Activityなどから見た時にどのボタンがどの処理と結びついてるかわからないためである。
ちょっと冗長になるけど、

```xml
<Button
    android:id="@+id/btn_send"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"/>
```

```java
findViewById(R.id.btn_send).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Log.d("MainActivity", "click: btn_send") 
            }
});
```

のほうがどのボタンでどの処理が結びついてるから良いと思ってる。

最近だとこれすら面倒ってことでButterKnifeを使って、アノテーションで書いたりするの多い記事が多い。
http://jakewharton.github.io/butterknife/

```java
    @OnClick(R.id.btn_send)
    void clickSend(View v) {
      Log.d("MainActivity", "click: btn_send") 
    }
```
だけど、未定義だったり、落ちたりするとエラーメッセージが面倒だったりする。。。

Kotlinだと

```kotlin

   findViewById(R.id.btn_send).setOnClickListener { view -> Log.d("MainActivity", "click: btn_send") };
```

でもsetContextViewでしてるlayoutのviewをfindViewByIdをするのは小学生までだよね。。。
せっかくKotlinを使ってるならkotterknife
https://github.com/JakeWharton/kotterknife

確かに使用感はKotlin版ってだけで、良いんだけど。Kotlinの良さをフルに活かしきれてない感が。。。
AndroidStudioのplugin都の組み合わせになるけど、Kotlin Android Extensionsがおすすめだ。
https://kotlinlang.org/docs/tutorials/android-plugin.html

次回脱線するけどKotlin Android Extensionsを紹介する
Respond to the Send Buttonの触りまで終了。

##github
https://github.com/kamedon/KotlinAndroidTraining
Raspberry Pi 2でWS281x LED Lチカ

Raspberry Pi 2でWS281x LED Lチカ
=================================

マイコン内蔵RGB LED PL9823を使ったLチカのメモ。
PL9823に使われているWS2811をRaspberry Piから制御するためのライブラリ[rpi_ws281x](https://github.com/jgarff/rpi_ws281x/)のmaster branchはRaspberry Pi2では動作しないが、先日[rpi2 branch](https://github.com/jgarff/rpi_ws281x/tree/rpi2)のほうがready for tesingの状態になったので使ってみた。

0から1の値を色に変換してLED表示する
------------------------------
「[値の大きさをサーモグラフィのような色に変換する](http://qiita.com/krsak/items/94fad1d3fffa997cb651)」の変換コードを使わせてもらってLEDの色を変化させてみる。

```python:pl9823_sample.py
#!/usr/bin/env python

import time
import math
from neopixel import *

# LED strip configuration:
LED_COUNT      = 1
LED_PIN        = 18      # GPIO pin connected to the pixels (must support PWM!).
LED_FREQ_HZ    = 800000  # LED signal frequency in hertz (usually 800khz)
LED_DMA        = 5       # DMA channel to use for generating signal (try 5)
LED_BRIGHTNESS = 255     # Set to 0 for darkest and 255 for brightest
LED_INVERT     = False   # True to invert the signal (when using NPN transistor level shift)

# return Color(G, R, B)
def colorScaleBCGYR(value):
    tmp_val = math.cos( 4.0 * math.pi * value)
    col_val = int((-tmp_val / 2 + 0.5) * 255)
    if   (value >= (4.0 / 4.0)):
        color = Color ( 0, 255, 0 )
    elif (value >= (3.0 / 4.0)):
        color = Color ( col_val, 255, 0 )
    elif (value >= (2.0 / 4.0)):
        color = Color ( 255, col_val, 0 )
    elif (value >= (1.0 / 4.0)):
        color = Color ( 255, 0, col_val )
    elif (value >= (0.0 / 4.0)):
        color = Color ( col_val, 0, 255 )
    else:
        color = Color ( 0, 0, 255 )
    return color

def showLed(color):
    # without these 3 lines, pixel color is not correctly set. ???
    strip.setPixelColor(0, Color(0, 0, 0))
    strip.show()
    time.sleep(0.005)

    strip.setPixelColor(0, color)
    strip.show()

# Main program logic follows:
if __name__ == '__main__':
    # Create NeoPixel object with appropriate configuration.
    strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS)
    # Intialize the library (must be called once before other functions).
    strip.begin()
    strip.setPixelColor(0, Color(0, 0, 0))
    strip.show()
    time.sleep(1)
    print ('Press Ctrl-C to quit.')
    for i in range(0, 61):
        showLed(colorScaleBCGYR(i / 60.0))
        time.sleep(0.1)
    strip.setPixelColor(0, Color(0, 0, 0))
    strip.show()
```

実行の様子
------------
[![実行の様子](http://img.youtube.com/vi/tko0qIULuvY/0.jpg)](https://youtu.be/tko0qIULuvY)
※青が少々暗いので調整の余地あり…
JAVA setterメソッド

getterメソッドとは逆に、ある特定のフィールドに指定された値を単に代入するだけのメソッドをsetterメソッドといいます。

▪️setterメソッドの書き方(定石)
**public　void　setフィールド名(フィールドの型　任意の変数名) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.フィールド = 任意の変数名;
}**

▪️Hero2.java

```java
public void setName(String name) {
		this.name = name;
		System.out.println(this.name);
	}
```

▪️Main22.java

```java
h.setName("ねこ８");
```


▪️Hero2.java

```java
public class Hero2 {
	private String name;
	private int hp;
	static int money;
	// Sword2 sword;
	static int money2;

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

	public void setName(String name) {
		this.name = name;
		System.out.println(this.name);
	}

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

	Hero2() {
		this("ダミー");
	}

	void setRandomMoney() {
		Hero2.money = (int) (Math.random() * 1000);
		System.out.println(name + "たちの所持金を初期化しました");
	}

	public void attack() {
		System.out.println(this.name + "は攻撃した！");
		System.out.println("敵に5ポイントのダメージを与えた！");
	}

	public void attack(Matango2 m) {

	}

	void sleep() {
		this.hp = 100;
		System.out.println(this.name + "は、眠って回復した！");

	}

	void sit(int sec) {
		this.hp += sec;
		System.out.println(this.name + "は、" + sec + "秒座った！");
		System.out.println("HPが" + sec + "ポイント回復した.");

	}

	private void die() {
		System.out.println(this.name + "は死んでしまった！");
		System.out.println("GAME OVERです。");
	}
}
```

▪️Main22.java

```java

public class Main22 {
	public static void main(String[] args) {
		Hero2 h = new Hero2("ねこ５");
		Hero2 h1 = new Hero2("ミナト");
		Hero2 h2 = new Hero2("ねこ");
		Hero2 h3 = new Hero2("ねこ7");
		h3.sleep();
		h3.sit(4);

		King k = new King();
		k.talk(h);

		System.out.println(h2.getName());
		System.out.println(h3.getName());
		h.setName("ねこ８");
		System.out.println(Hero2.money);
		System.out.println(Hero2.money);
		System.out.println(h1.money);
		System.out.println(Hero2.money);

		Matango2 m1 = new Matango2();
		Matango2 m2 = new Matango2("ねこ３");
		m2.hp = 30;
		System.out.println(m1.name);
		System.out.println(m2.hp);
		System.out.println(m2.name);

	}

}
```

▪️実行結果
ねこ7は、眠って回復した！
ねこ7は、4秒座った！
HPが4ポイント回復した.
王様:ようこそ我が国へ、勇者ねこ５よ
王様:長旅疲れたであろう。
王様:まずは城下町を見てくるとよい。ではまた会おう。
ねこ
ねこ7
ねこ８
0
0
0
0
ダミー２
30
ねこ３
InspectorでスクリプトのOn/Offを行うチェックボックスの出現条件


##### InspectorでScript名の左側にあるチェックボックス
- Scriptのenable/disableをあらかじめ設定できるものですが、表示されないScriptもあります。

- チェックボックス出ている例 
 - ![スクリーンショット 2015-10-27 17.40.13.png](https://qiita-image-store.s3.amazonaws.com/0/14945/a4ec3ede-64af-6612-1c47-a41f442f0d00.png "スクリーンショット 2015-10-27 17.40.13.png")

- チェックボックス出ていない例 
 - ![スクリーンショット 2015-10-27 17.47.21.png](https://qiita-image-store.s3.amazonaws.com/0/14945/f90d829b-629f-ffb9-d51d-658cc3481189.png "スクリーンショット 2015-10-27 17.47.21.png")

-----
##### 出たり出なかったりする原因は？
- Update系メソッドをクラス内で宣言している場合のみ、チェックボックスが出るみたい。


###### サンプル

```C#:GameController.cs
public class GameController : MonoBehaviour 
{
	// 宣言するとチェックボックスが表示されるメソッド例
	void Update(){}
	void FixedUpdate(){}
	void LateUpdate(){}
	void OnEnable(){} 

	// チェックボックスが表示されないメソッド例
	void Awake(){}
	void Start(){}
	void OnValidate(){}
}

```

- 実行中に更新されることがないクラスについてはチェックボックスを出す必要が無いだろう・・・ということのようです。

- 条件となるメソッドは他にもある模様ですが、全部は調べてません。Startとかも含んでほしかったかも…

-----

##### まとめ
- InspectorからScriptのEnable/Disableをあらかじめ設定したい場合は、Update系メソッドを宣言しておく必要がある。
ChromiumのFlash Playerが動かない(mac)

＊追記：v48のインストールでは下記の手順を行っても起動しないので
http://www.macupdate.com/app/mac/36244/chromium
ここからv46のダウンロードでおｋ


＝＝＝＝
しょーもないけど、詰まったので備忘録

通常のFlashインストールとは別に
https://get.adobe.com/jp/flashplayer/otherversions/
というものがある。
そこで
![スクリーンショット 2015-10-27 16.45.55.png](https://qiita-image-store.s3.amazonaws.com/0/7186/e3a381f1-b8f6-7a2a-ed2b-ba22f70834e6.png)

【バージョンを選択】Chromium - PPAPI
を選択してインストール。


*以外と記事少ないけど皆すんなりいくのね…


https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html
HTTPS Server Trust Evaluation


URL
https://developer.apple.com/library/ios/technotes/tn2232/_index.html

HTTPSはインターネットセキュリティの基盤となります。
HTTPSに接続を図ろうとする時、クラインアントは信用のあるサーバかどうかを評価されます。
もしも、その時信頼があると評価されなかった場合、クライアントの接続は拒まれます。
これらは多様な理由から起こります。
例えばサーバが自己署名証明書(暗号技術において、公開鍵をそれに対応する私有鍵で署名した公開鍵証明書)や中間証明書を保持していない場合、は接続ができません。

このドキュメントでは、なぜHTTPSでなければならないのかに理由を示していきたいと考えます。


後はTipsなので　=>　read Documents

```
後学習の事項 つまり何なのか？？

自己署名証明書

中間証明書
```
Start Developing iOS Apps. Swift Functions and Methods


#Functions and Methods

関数は再利用が可能で、その名付けられた幾つかのコードは、プログラム中に多くの場所で他のコードと関わりを持つ事が可能です。

funcを使う事は、関数の宣言を意味します。
そして関数の宣言を行う事で、関数の中にname:typeとしてパラメータを含める事ができます。

任意で、関数は「戻り値」を返す事ができます。それは「->」と書いた後にその関数が何を結果として返すのかを示す事で可能です。
今回の例では、文字列を返す事を示しています。
そして関数は、()の内部の処理を実行します。


```

func greet(name: String, day: String) -> String {
    return "Hello \(name), today is \(day)"
}
```


```

func 関数名(引数変数: 引数型) -> 戻り値型 {
    return 戻り値型
}

```


```
func sayHello(personName: String) {
    let greeting = "おはろ" + personName + "!"
    return greeting
}

print(sayHello("Tom")) //print "おはろTom!"
```



関数を呼び出す場合、その関数の名前と(引数=arguments)を指定します。

```
greet("Anna", day: "Tuesday")
greet("Bob", day: "Friday")
greet("Charlie", day: "A nice day")

```

関数はメソッドを持ちます。

```
let exampleString = "Hello"

if exampleString.hasSuffix("lo") {
    print("ends in lo")
}

```

dot syntax(ドット構文?)によってメソッド呼び出しを行います。

```
var array = ["apple", "banana", "dragonfruit"]

array.insert("cherry", atIndex: 2)

array

```
gulp-sassのコンパイル後のcssをいつもの見た目にしたい


(2015/10月時点の記事です)
ドキュメントを見ろという話ですが、書きます。
https://www.npmjs.com/package/gulp-sass


gulp-sassのコンパイル後の出力cssが
こんな感じになって気持ち悪かったです。

```css:style.css
body {
  background: red;}

p {
  font-size: 10px;}
```

outputStyle(アプトプットスタイル)の変更で解決できました。
outputStyle: 'expanded'

```js:gulpfile.js
gulp.task("sass", function() {
     gulp.src("sass/**/*scss")
    .pipe(sass({outputStyle: 'expanded'}))
    .pipe(gulp.dest("./css"));
});
```


```css:style.css
body {
  background: red;
}

p {
  font-size: 10px;
}
```

はいすっきりです！


僕は最初に他のネットの記事の記述で適用されませんでした。
この記事も古くなるかもです。
だめな時は公式ドキュメント見てください
https://www.npmjs.com/package/gulp-sass
Ubuntu 15.10 で apt-get install python3-pip すると pip3はPython3.5にひもづくっぽい

Ubuntu15.10環境のPython3.4にmysqlclientをインストールしようとしたところ、gccのエラーで中断されます。

どうやら、apt-getでpython3-pipをインストールすると、Python3.5に結びつく模様。python3.5-devがインストールされていなかったので、gccエラーになっていたようです。python3.5-devをインストールすれば、エラーは出ないんですけど、それではPython3.5用にしかならないので、今回の問題解決にはなりません。

ということで、easy_install3を利用すると、各バージョンごとのpipが入るようなので、そちらで対応。

```
# apt-get install python3-setuptools
# easy_install3 pip
```

Python3.4にmysqlclientインストールしたい場合は、

```
# pip3.4 install mysqlclient
```

ただ・・・
3.5と、dist-packagesのパスが同じっぽいけど・・・
とりあえず3.5使わないからいいやw

venv使えって話ですよね・・・

## 2015-12-21追記

本件、不具合として登録されているみたいですね。

https://bugs.launchpad.net/ubuntu/+source/python3.4/+bug/1506907

ただ、先ほど新しくインストールした15.10に

```
# apt-get install python3-pip
```

したところ、ちゃんとpython3.4に紐付いたみたいですが・・・どうなってるんでしょうね？
Logstash + Elasticsearch + Kibana4で簡易可視化

忘備録
【OS】
今回はCentOS7.1_x86_64版を使用。詳細は以下を参照。
http://www.server-world.info/query?os=CentOS_7&p=install

事前準備
セットアップに必要なパッケージを事前に設定しておく必要がある。以下を全て設定する。
システム変更が発生するので管理者権限が必須。rootにsuしておく事。

【YUMパッケージ管理】
yum -y install yum-plugin-priorities
yum -y update
yum -y groupinstall "Base" "Development tools" "Japanese Support"
[EPELリポジトリ追加]
yum -y install epel-release
[Remiリポジトリ追加]
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
[RPMforgeリポジトリ追加]
yum -y install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
【Firewall無効】
systemctl stop firewalld
systemctl disable firewalld
【SELinux無効化】
vi /etc/selinux/config
SELINUX=enforcing 
SELINUX=disabled ←変更(起動時に無効にする)

前提条件
既にJAVA+Elasticsearch+Kibana4はセットアップ済とする。

【Logstash】
公式サイトよりrpmを入手してインストール
https://www.elastic.co/downloads/logstash

<pre>
wget https://download.elastic.co/logstash/logstash/packages/centos/logstash-1.5.4-1.noarch.rpm
rpm -ivh logstash-1.5.4-1.noarch.rpm
</pre>
確認
<pre>
$ /opt/logstash/bin/logstash --version
logstash 1.5.4
$ export PATH=$PATH:/opt/logstash/bin
</pre>

Twitter AppsからTwitter Streaming APIを取得するためのアプリケーションを作成
https://apps.twitter.com/

![image](https://qiita-image-store.s3.amazonaws.com/0/55845/4f0029b3-37a3-a464-cd8c-0477924b1643.png)
適当に名前を付けます
![image](https://qiita-image-store.s3.amazonaws.com/0/55845/916d2e70-4d3f-41da-7981-f649dc1c539b.png)
利用許諾をチェックして[Create your Twitter application]ボタンをクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/55845/40b3d1f0-da81-74fa-dfd1-f916f3677ca1.png)
これでアプリケーションが出来上がりますので、Consumer Key、Consumer Secret Key、Access Token、Access Token Secretを取得します。

【Logstash実行】
inputとしてTwitterを指定し、全てのtweetを対象に、"aws"というキーワードで取得します。
<pre>
logstash -e 'input { 
  twitter {
    consumer_key => "取得したConsumer Key (API Key)"
    consumer_secret => "取得したConsumer Secret Key (API Secret)"
    oauth_token => "取得したAccess Token"
    oauth_token_secret => "取得したAccess Token Secret"
    keywords => ["aws"]
    full_tweet => true
  }} 
output { 
    elasticsearch 
      { host => localhost
        port => "9200"
        protocol => "http"
        index => "twitter"
        document_type => "stream"
      } 
    stdout { } }'
</pre>
【Kibanaで確認】
http://localhost:5601
初期設定で、以下の通り対象とするindexを設定し、[Create]ボタンをクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/55845/276b4255-96a2-8d7a-91c3-073378d92a47.png)

[Discover]で確認。
![image](https://qiita-image-store.s3.amazonaws.com/0/55845/98bbff5a-5b7e-2663-e8e3-33a8c2bb360e.png)
JAVA getterメソッド

ある特定のフィールド値を単に取り出すだけのメソッドは、
全てgetterメソッドと言えます。

▪️getterメソッドの書き方(定石)
**public　値を取り出すフィールドの型　getフィールド名(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.フィールド名;
}**

▪️Hero2.java

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

▪️Main22.java

```java
System.out.println(h2.getName());
		System.out.println(h3.getName());
```

▪️Hero2.java

```java

public class Hero2 {
	private String name;
	private int hp;
	static int money;
	static int money2;

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

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

	Hero2() {
		this("ダミー");
	}

	void setRandomMoney() {
		Hero2.money = (int) (Math.random() * 1000);
		System.out.println(name + "たちの所持金を初期化しました");
	}

	
	public void attack() {
		System.out.println(this.name + "は攻撃した！");
		System.out.println("敵に5ポイントのダメージを与えた！");
	}

	public void attack(Matango2 m) {

	}

	void sleep() {
		this.hp = 100;
		System.out.println(this.name + "は、眠って回復した！");

	}

	void sit(int sec) {
		this.hp += sec;
		System.out.println(this.name + "は、" + sec + "秒座った！");
		System.out.println("HPが" + sec + "ポイント回復した.");

	}

	private void die() {
		System.out.println(this.name + "は死んでしまった！");
		System.out.println("GAME OVERです。");
	}

}
```

▪️Main22.java

```java
public class Main22 {
	public static void main(String[] args) {
		Hero2 h = new Hero2("ねこ５");
		Hero2 h1 = new Hero2("ミナト");
		Hero2 h2 = new Hero2("ねこ");
		Hero2 h3 = new Hero2("ねこ7");
		h3.sleep();
		h3.sit(4);

		King k = new King();
		k.talk(h);

		System.out.println(h2.getName());
		System.out.println(h3.getName());
		System.out.println(Hero2.money);
		System.out.println(Hero2.money);
		System.out.println(h1.money);
		System.out.println(Hero2.money);

		Matango2 m1 = new Matango2();
		Matango2 m2 = new Matango2("ねこ３");
		m2.hp = 30;
		System.out.println(m1.name);
		System.out.println(m2.hp);
		System.out.println(m2.name);

	}

}
```

▪️実行結果
ねこ7は、眠って回復した！
ねこ7は、4秒座った！
HPが4ポイント回復した.
王様:ようこそ我が国へ、勇者ねこ５よ
王様:長旅疲れたであろう。
王様:まずは城下町を見てくるとよい。ではまた会おう。
ねこ
ねこ7
0
0
0
0
ダミー２
30
ねこ３
JavaScriptのランプ関数いろいろ

## ランプ関数とは
ランプ関数（Ramp function）とは、正（非負）の数を入力したときはそのままの数、
負の数が入力されたときはは0を返す関数です。

[ランプ関数 - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%B3%E3%83%97%E9%96%A2%E6%95%B0)

似たような関数でクランプ(clamp)関数というのがありますが、
こちらの方が実用的だからか、あるいはランプ関数の方が吟味するほど味のある関数ではないからか、クランプ関数の方がよく目にする気がします。

[Clamping (graphics) - Wikipedia, the free encyclopedia](https://en.wikipedia.org/wiki/Clamping_(graphics))

## 実装例

### 条件分岐による方法

```js
function ramp(x) {
  return (x < 0) ? 0 : x;
}
```

負の数だったら0、そうじゃなかったら入力値を返すという、定義に忠実な実装です。

### max関数を使う方法

```js
function ramp(x) {
  return Math.max(x, 0);
}
```

ちょっと数学的なやり方です（これも定義通り）。
引数を参照する部分が1つだけというのも良い点です。

### 符号関数を使う方法

```js
function ramp(x) {
  return ((Math.sign(x) + 1) / 2) * x;
}
```

``(Math.sign(x) + 1) / 2``はステップ関数を表します。
[ステップ関数](https://ja.wikipedia.org/wiki/%E9%9A%8E%E6%AE%B5%E9%96%A2%E6%95%B0)がJavaScriptに組み込まれてないので、若干回りくどいです。
あと、もうちょっと工夫しないと、負の数で[マイナスゼロ](https://ja.wikipedia.org/wiki/%E2%88%920)が返ってきてしまいます。

### 文字列処理による方法

```js
function ramp(x) {
  return Number(x.toString().replace(/^-.+/, 0));
}
```

正規表現でマイナスが付いているときだけ0に置換します。
入出力が両方文字列だった場合、``x.replace(/^-.+/, '0')``だけで済むので、その場合一番パフォーマンスがいいと思われます。

## 結論
直感ではありますが、一般用途ではmax関数を使う方法が一番素直でよいのではないでしょうか。

```js
function ramp(x) {
  return Math.max(x, 0);
}
```
秘密鍵の形式変換(Open SSH → PuTTY on Windows)

# 鍵の形式

| 形式         | 主なSSHクライアント |
| :----------- | :------------       |
| PuTTY        | PuTTY、WinSCP       |
| Open SSH     | OpenSSH             |
| SECH         | Poderosa            |

## PuTTYの秘密鍵

```
PuTTY-User-Key-File-2: <鍵形式>
Encryption: <暗号化形式（passphraseがない場合はnone）>
Comment: <コメント>
Public-Lines: 6
<公開鍵>
Private-Lines: 14
<秘密鍵>
Private-MAC: <何かしらのキー？>
```

## Open SSHの秘密鍵

```
-----BEGIN RSA PRIVATE KEY-----
<キー>
-----END RSA PRIVATE KEY-----
```

# 秘密鍵変換

## 変換元の鍵生成

```sh
ssh-keygen -t rsa
```

で以下の鍵ペアを生成
秘密鍵：admin
公開鍵：admin.pub

## PuTTY形式へ変換

`PuTTY Key Generator`を起動し、Loadボタン
![puttygen-1.png](https://qiita-image-store.s3.amazonaws.com/0/54591/4e413b6e-9aec-6191-2c2c-67bcf1a47470.png)

`All Files (*.*)`を選び、先ほど生成したadmin(秘密鍵)を開く
![puttygen-2.png](https://qiita-image-store.s3.amazonaws.com/0/54591/a5ff6bd5-b70b-820a-d421-094ee01739b9.png)

Open SSH形式で読み込んだからPuTTYで使うには`Save parivate key`でPuTTY形式で保存してねと言われる
![puttygen-3.png](https://qiita-image-store.s3.amazonaws.com/0/54591/0e4377d3-c2ea-55af-7f41-33dcfe60b281.png)

言われたとおり`Save parivate key`でPuTTY形式で保存
![puttygen-4.png](https://qiita-image-store.s3.amazonaws.com/0/54591/1e6eb15d-ffe9-2717-e1fd-b09f63354d9d.png)
Kotlinで遊ぼう

[ことりん](https://www.google.co.jp/search?q=%E5%8D%97%E3%81%93%E3%81%A8%E3%82%8A&es_sm=91&source=lnms&tbm=isch&sa=X&ved=0CAcQ_AUoAWoVChMIoIi2uJLiyAIVRxyUCh3RSw5T&biw=925&bih=552)で遊ぶ

# pluginの追加
Preference > Plugins > Install JetBrains plugin から下記の2つを追加
- Kotlin
- Kotlin Extensions For Android

再起動する

# プロジェクト作成
- まずは普通に作る
- code > Converting Java code to Kotlin で`hoge.java`を`hoge.kt`に変換
- Tools > Kotlin > Configure Kotlin in the project > OK
- `build.gradle`に`kotlin-android`が追加されていれば変換成功

これでKotlin版のprojectができる
意外と簡単に変換できるし、KotlinからJavaのクラス読み込めるので混ざっても使える

# あわせて読みたい
[KotlinでAndroid開発するのに便利なライブラリ: KotterKnife](http://qiita.com/ngsw_taro/items/909451c887dc366d12d4)
'ある文字'を'ある文字列'から削除する。

例'I am learning Python.'から母音'a,e,i,o,u'を削除して'm lrnng Pythn.'を出力する。

ある文字(達)は母音の vowels = ['a','e','i','o','u','A','I','U','E','O']
ある文字列は'I am learning Python.'

```py:example.py
def anti_vowel(text):
    vowels = ['a','e','i','o','u','A','I','U','E','O']
    new_text =[]
    for i in text:
        new_text.append(i)
        for j in vowels:
            if i == j:
                new_text.remove(j)
    return ''.join(new_text)
print anti_vowel('I am learning Python.')
# m lrnng Pythn.
```

こういうのも。

```py:example2.py
def anti_vowel(text):
        new_text = ""
        vowels = "aeiouAEIOU"
        for i in text:
            if i not in vowels:
                new_text += i
        return new_text
print anti_vowel('I am learning Python.')
```

一行で書くと

```py:example3.py
def anti_vowel(text):
    return ''.join([new_text for new_text in list(text) if new_text not in 'aeiouAEIOU'])
print anti_vowel('I am learning Python.')
```

正規表現(※メモ：要勉強)をつかうと以下のように書ける。

```py:example.py
import re
s='I am learning Python.'
print re.sub('[aeiouAEIOU]', '', s)
#Or
print s.translate(None, 'aeiouAEIOU')
#Or
print filter(lambda c: c.lower() not in 'aeiou', s)
```
@knoguchiさん、ありがとうございます！
Rails4 に ActiveAdmin を導入するための最小手順

# Rails プロジェクトを作る

`$ rails new project_name`

# Gem を入れる

```rb:/path/to/project/Gemfile
+ gem 'devise'
+ gem 'activeadmin', github: 'activeadmin'
```

```
$ bundle install
```

# Rails に ActiveAdmin を インストールする

`$ bundle exec rails generate active_admin:install`

# マイグレーションを実行する

`$ bundle exec rake db:migrate`

# 初期ユーザーを作成する

`$ bundle exec rake db:seed`

# Rails サーバーを起動する

`$ bundle exec rails server`

# ブラウザからアクセスする

http://localhost:3000/admin/

# ログインする

メールアドレス admin@example.com
パスワード password


# 動作環境

- Rails 4.2.4
- ruby 2.2.3
- Bundler version 1.10.6



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
RubyにてHTTPリクエスト時におこるエラー覚書

備忘録。
エラーは数が多く一覧を記載することはできないのでよく起こるリクエスト時のエラーを記載。

.each処理時に止まってしまう場合に、rescueさせて使う。
追記あればその都度記載。

- SocketError
- OpenURI::HTTPError
- Errno::EHOSTUNREACH
- Errno::ENETUNREACH
- Errno::ECONNREFUSED
- Timeout::Error
- Errno::ETIMEDOUT
クオートとバッククオートを間違って bundle install できなかった話

# 問題

Gemfile に gem を追加する。

```rb:Gemfile
gem `devise`
```

インストールする。

```
$ bundle install
```

何度試してもエラーになる。

```
There was an error parsing `Gemfile`: No such file or directory - devise. Bundler cannot continue.
```

# 解決

シングルクオートで書くべきところを。
バッククオートで書いていた。

直したら動いた。

```rb:Gemfile
- gem `devise`
+ gem 'devise'
```



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
Choregrapheのパネル操作Tips

ChoregrapheのGUIには使いにくいところがまだまだあります。（2015/10/27現在）この記事では、Choregrapheのパネル操作に関するTipsを集めていきます。開発スピードを上げたい方のフラストレーションを少しでも減らせれたら幸いです。

#▼パネルの格納
プロジェクトの内容、ポーズライブラリ、ロボットビューといったパネルは上下左右に格納することができます。しかし、格納したいのに出来ない、格納したくないのに格納されてしまうと言ったフラストレーションを感じた方はたくさんいらっしゃると思います。
Choregrapheでは、パネルの格納のトリガーが、パネルを操作する（マウス）カーソルの位置になっています。したがって、パネルを格納したいときは、パネルを操作するカーソルを収納される位置まで持って行き、

![store.gif](https://qiita-image-store.s3.amazonaws.com/0/88740/01e13785-aa9e-3f7a-c9f3-b1367660d019.gif)

逆に格納したくないときはカーソルが収納される位置でないところ（作業パネル、ツールバー、Choregraphe外）でマウスを放しましょう。

![not_store.gif](https://qiita-image-store.s3.amazonaws.com/0/88740/73f37c71-4aca-1a8e-68c0-90f47aa4ed99.gif)

#▼Retinaディスプレイのロボットビュー操作
Choregraphe (2.3.1)はmacのRetinaディスプレイに対応していません。それによってRetinaではロボットビューがパネル内に小さく表示されます。
ポーズの微調整をしたいときは、ロボットビュー全体にロボットが写っていると想像して、調整したいパーツがあると想定される場所にカーソルを置くとうまくいきます。

<img width="400" alt="robot_view_retina.png" src="https://qiita-image-store.s3.amazonaws.com/0/88740/eba0a104-57d1-3d98-9ed5-330e8947d004.png">

#▼作業パネルのズームレベル
Choregrapheの作業パネルのズームレベルを変えるのに、トラックパッド（特にmac）を使うと、思ったようにズームレベルを調節できないことがあります。
そんなときは、作業パネルで「右クリック→ズーム」から変更しましょう。
OSX Yosemiteにnode.jsをインストールする


#はじめに
node.jsは大量アクセスを一気にさばいてくれるフレームワークらしい。
イケてるハードウェア・エンジニアさんたちがArduinoの大量制御にnode.jsを用いてることを知り、node.jsに入門を決めた。


#node.jsインストールの手順
みんな大好き[ドットインストール]()にお世話になった。

1. 公式ページから.pkgファイルが手に入るのでインストール
2. node.js以外にパッケージマネージャであるnpmが同時にインストールされる

#mongoDBインストールの手順
ドットインストールの途中で導入することになった。
node.jsと相性の良い(?)DBらしく、避けては通れないらしい(?)
RDBの違いなどはこれから勉強します。

1. homebrewでmongoDBをインストールするだけ。
homebrewが入ってない場合は適当にググッて入れておこう。
さくっと短時間で終了した。

#ポイント
brew install mongodbが成功した直後に出る指示に従ってターミナルから設定しないとmongoDBは起動しないので注意が必要。
シンボリックリンクを貼る必要があるが、難しいことを考えずに２行コピペでおｋ

mongoDBのDB作成については[こちらのQiita](http://qiita.com/akippiko/items/db272b338d5af778d23c)が参考になる。たぶんおなじドットインストールのレクチャーで躓いた人の質問と解決。
CakePHP / Security.salt とは？ Security.cipherSeed とは？

## Security.salt と Security.cipherSeed をソースコードから探してみた

CakePHP をインストールすると最初に設定する salt 値について、結局これってどこで使われているのというのがネット上にはあまりなかったので調べてみた。

## Security.salt

### UUID生成で使用  



```php:lib/Cake/Utility/CakeText.php：77
public static function uuid() {
  # 中略
		if (empty($node)) {
			$node = crc32(Configure::read('Security.salt'));
		}
```

### hash関数で使用

hash関数のデフォルト salt になるようだ。

```php:lib/Cake/Utility/Security.php：117
public static function hash($string, $type = null, $salt = false) {
  # 中略
		if ($salt) {
			if (!is_string($salt)) {
				$salt = Configure::read('Security.salt');
			}
			$string = $salt . $string;
		}
```

### salt文字抜き出しで使用

```php:lib/Cake/Utility/Security.php：250
/**
 * Generates a pseudo random salt suitable for use with php's crypt() function.
 * The salt length should not exceed 27. The salt will be composed of
 * [./0-9A-Za-z]{$length}.
 *
 * @param int $length The length of the returned salt
 * @return string The generated salt
 */
	protected static function _salt($length = 22) {
		$salt = str_replace(
			array('+', '='),
			'.',
			base64_encode(sha1(uniqid(Configure::read('Security.salt'), true), true))
		);
		return substr($salt, 0, $length);
	}
```

### 暗号化で使用

```php:lib/Cake/Utility/Security.php：309
	public static function encrypt($plain, $key, $hmacSalt = null) {
		static::_checkKey($key, 'encrypt()');

		if ($hmacSalt === null) {
			$hmacSalt = Configure::read('Security.salt');
		}
```

### 復号化で使用

```php:lib/Cake/Utility/Security.php：352
	public static function decrypt($cipher, $key, $hmacSalt = null) {
		static::_checkKey($key, 'decrypt()');
		if (empty($cipher)) {
			throw new CakeException(__d('cake_dev', 'The data to decrypt cannot be empty.'));
		}
		if ($hmacSalt === null) {
			$hmacSalt = Configure::read('Security.salt');
		}
```

## Security.cipher

### 暗号化で使用

```php:lib/Cake/Utility/Security.php：184
	public static function cipher($text, $key) {
		if (empty($key)) {
			trigger_error(__d('cake_dev', 'You cannot use an empty key for %s', 'Security::cipher()'), E_USER_WARNING);
			return '';
		}

		srand(Configure::read('Security.cipherSeed'));
```

## 結果

まあ、予想通りな感じで特に面白みのない結果に…。
ざっくりは以下のように捉えて全く問題なさそう。

**CakePHP2 実践入門より**
> Security.salt と Security.cipherSeed は、CakePHP がパスワードや Cookie に保存する情報を、ハッシュ化や暗号化する際に利用されます。
localesで設定した名称にアクセスする方法いくつか



よく忘れがちで検索してるのでメモ代わりに。

ActiveRecordのクラス、Recordに対し、
configs/locales/ja.yml で

```yaml
ja:
  activerecord:
    models:
      record: レコード
    attributes:
      record:
        name: 名前
```

と指定していた場合

# Viewのフォームでラベルとして利用する

@record = Record.new
の環境下で

```erb
<%= label :record, :name %>
<%= text_field :record, :name %>
```
とすると、label :record, :name が[名前]を出してくれる。(<label>タグ付きです)


# ActiveRecordのクラスにつけた名称にアクセスしたい

Record.model_name.human 

# ラベルを経由せずに項目名を取得したい

Record.human_attribute_name("name")
{igraph} カレーなるネットワーク解析

# 0. イントロ
男女19人でカレーを食べに行きました。
「Bセット」は、7種類の中から2種類のカレーを選びます。
重複してはいけません。

肉カレー|野菜カレー|その他
---|---|---
キーマ|ほうれん草(サグ)|日替わり
チキン|ベジタブル|
マトン|ミックス豆|

集計結果がこちら。

```
> head(dat)
   カレー1  カレー2 性別
1   チキン   キーマ    m
2     サグ   キーマ    f
3     ベジ 日替わり    m
4   チキン     サグ    f
5   チキン     ベジ    f
6 日替わり     ベジ    m
```

もう、**血湧き肉躍り**ますよね。
あれ、やっちゃいましょうよ、**兄貴**。
AさんとBさんに**矢印**を引っ張って、**秘密のカンケー**を一目瞭然にするやつ。

```
library(igraph)
```

# 1. データ整形
**みんな大好き$for$文**を使ったりしながら泥臭く揃えると、こうなる。
注意した点は、curry1, curry2の順番は(心理学的な解析を行わない限り)意味がないので、逆順の行を追加して矢印を引っ張る(両側矢印になる, 矢印数の比は保存されている)。

```
> dat1
       curry1     curry2 weight   男女比
1      キーマ       サグ      2    1.000
2      キーマ     チキン      2    0.000
3      キーマ     マトン      1    0.000
4      キーマ ミックス豆      1    0.000
5      キーマ   日替わり      1    0.000
6        サグ     キーマ      2    1.000
7        サグ     チキン      2    0.500
```
ここまでで取り敢えずplotしてみる。

```
g <- graph.data.frame(dat1[,1:2])
plot(g)
```
<img width="354" alt="スクリーンショット 2015-10-27 15.05.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/92401/5987388e-111f-a90b-85b9-53826c2cdec6.png">

いいですねぇ。

# 2. オプションの指定
nodeの大きさを、「そのカレーがチョイスされた数」に従って変えたい。

```
size <- dat1 %>% group_by(curry1) %>%
  summarise(v.size = sum(weight))
```
パスの色は、男女比によって変えたい。
男100%：blue, 女性100%：red, 50%50%：灰色で、グラデーション。 

```
Col <- colorRamp(c("Blue", "grey", "Red"))
```
その他、
・太さをweightで与える
・肉カレーのnodeはオレンジ、野菜カレーは緑、日替わりは白
などのオプションを指定する。

```
g <- graph.data.frame(dat1[,1:2])
  E(g)$weight <- dat1$weight
  E(g)$color <- rgb(Col(dat1$男女比)/255)
  V(g)$size <- size$v.size*5
  V(g)$color <- c(rep(c("orange", "green"),3), "white")
```
で、plot。

```
plot(g, edge.width=E(g)$weight^3)
```  

# 3. 結果
<img width="546" alt="スクリーンショット 2015-10-27 11.11.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/92401/58809485-7386-1608-9637-9566e20df6bf.png">

・「肉-肉」ペアを結ぶ矢印は全て真っ青(100%男)。
・中身の知らない日替わりカレーにトライするのも100%男。
・女性陣は、少なくとも1つの野菜カレーを頼む。
・「マトン-サグ(ほうれん草)」の組み合わせ最強。
・チキン万能。
・ミックス豆(ぇ
Bundler, the underlying system used to manage Vagrant plugins,is reporting that a plugin or its dependency can't be found.の解決法



vagrant haltせずにプラグインを入れたりすると下記のエラーが起こる。そうなってしまった場合の解決法。

```bash
$ vagrant status
Bundler, the underlying system used to manage Vagrant plugins,
is reporting that a plugin or its dependency can't be found.
This is usually caused by manual tampering with the 'plugins.json'
file in the Vagrant home directory. To fix this error, please
remove that file and reinstall all your plugins using `vagrant
plugin install`.
```


プラグインを入れてしまった場合はplugins.jsonを消すと解消される。

```bash
rm -r ~/.vagrant.d/plugins.json
```

gemの場合はgemsを削除。

```bash
rm -r ~/.vagrant.d/gems
```

参考サイトURL
https://github.com/mitchellh/vagrant/issues/4918
HTMLメルマガの開封数をGAのイベントトラッキングで簡単に習得する

# TL;DR

- 対象：メルマガ開封数測定のソリューションがなかなかいいものが見つからない！という方へ
- 自社の話：メルマガの開封数はimgタグをおいてそのopen数を自社サーバーへ送り、自社サーバーから数字を引っこ抜くという作業をしていた。
- [この記事](http://qiita.com/Yamotti/items/41a513fe9592ee0cd11a)にあるように自社の計測環境はGA→spreadsheetへ集約している状況だったので、開封数もGAへ直接送りたい。から出来るようにしました。

# How

下記のimgタグをHTMLメルマガに埋め込む

```js:ビーコン
<img src="http://www.google-analytics.com/collect?v=1&tid=UA-xxxxxxxx-x&cid=smarby&t=event&ec=email&ea=open&el=20151027" />
```

各パラメーターは任意に設定

- `tid` : GAのトラッキングID
- `cid` : 任意
- `ec` : イベントカテゴリーに設定したい値
- `ea` : イベントアクションに設定したい値
- `el` : イベントラベルに設定したい値（下記はメルマガの送付日付を入れています）

## 結果

![image](https://qiita-image-store.s3.amazonaws.com/0/83135/e13fa507-7aeb-8562-3972-79149f7e7f55.png)

GAに設定したイベントの値を返してくれる。体感1分以内には反映されている模様。

# 参考

- [Measurement Protocol](https://developers.google.com/analytics/devguides/collection/protocol/v1/reference)