OmniAICreator/Qiita-1.07M huggingface dataset:
Tumblrのテーマカスタマイズ


##独自タグについて
Tumblrのテーマは「HTMLコード」＋「独自タグ」で生成されており、テーマのカスタマイズは、「HTMコード」を編集することで行います。

独自タグは、以下の公式ドキュメントに一覧が記載されています。

参照：カスタムHTMLテーマを作成するには
https://www.tumblr.com/docs/en/custom_themes

##テーマオプションについて
テーマオプションを設定することで、ユーザーが「htmlコード」を編集することなくテーマ編集画面にて、設定値の変更やON/OFF等を容易に変更することが可能となります。

例：レイアウト／テーマカラー／フォントの変更、要素の表示非表示、変数設定、任意箇所のテキスト更新など

![capture01.png](https://qiita-image-store.s3.amazonaws.com/0/49717/073d72ed-d1f8-39e3-f044-2b675990d63b.png "capture01.png")

###テーマオプションの設定
テーマオプションの設定は、テーマに「メタタグ」を記載することで、設定値等のオプション項目が表示され、セットされた「メタタグ」の値を「html/css/JavaScript」側で反映する記載を行うことで、独自のテーマオプションを実装することが可能となります。

##GoogleAnalytics
下記のコードをテーマへ設定し、テーマオプションの画面で「GoogleAnalytics」のIDをセット（入力）することでトラッキングコードの設定ができます。

```HTML
{block:Hidden}
	<meta name="text:Google analytics ID" content="">
{/block:Hidden}
```

###セットしたIDを反映###
```{text:Google Analytics ID}```
※ 文字列として反映箇所へ設置

###If文を使って「IDが設定してある時」に限定する###
```{block:IfGoogleAnalyticsID}〜{/block:IfGoogleAnalyticsID}```
※ メタタグで設定した項目名のスペースを詰めて記載する
※ IfNotも利用可能:{block:IfNotxxx}〜{/block:Ifxxx}

```HTML
{block:IfGoogleAnalyticsID}
 <script>
 	(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
	ga('create', '{text:Google Analytics ID}', 'auto');
 	ga('send', 'pageview');
 </script>
{/block:IfGoogleAnalyticsID}
```
Qiitaに投稿する時、リンクにfaviconを設定する方法

Markdown記法 チートシートにリンクの付け方はあったのですが
地味なfaviconを表示する方法がなかったのでメモります。

# 通常のリンク
[<font size="5" color="BLUE">Markdown記法 チートシート</font>](http://qiita.com/)

# faviconを表示する場合
[<font size="5" color="BLUE">![Markdown記法 チートシート](http://www.google.com/s2/favicons?domain=http://qiita.com/Qiita/items/c686397e4a0f4f11683d/)Markdown記法 チートシート</font>](http://qiita.com/Qiita/items/c686397e4a0f4f11683d)

# それぞれの意味
```
[<font size="5" color="BLUE">![画像（favicon）が表示されなかった時に表示する文字列]
(http://www.google.com/s2/favicons?domain=「ここにリンクアドレスを入力」)
ページに表示する文字列</font>](「ここにもリンクアドレスを入力」)
```
VirtualBoxでHost:Mac, Guest:Linuxの共有フォルダを有効にする方法

なぜか最近、VirtualBoxの共有フォルダの設定が有効に動作しなくなったような気がしたので、再設定してみました。

```bash:Guest
$ sudo pacman -S virtualbox-guest-utils
$ modprobe -a vboxguest vboxsf vboxvideo
$ sudo systemctl start vboxservice.service
$ sudo systemctl enable vboxservice.service
# 共有フォルダをマウントする
$ mkdir -p /media/sf_Downloads
$ sudo mount -t vboxsf Downloads /media/sf_Downloads/
# シンボリックリンクをホームに設置
$ ln -s /media/sf_Downloads ~/sf_Downloads
# グループに追加してユーザー権限でフォルダにアクセスできるようにする
$ sudo usermod -aG vboxsf $(whoami)
```

上のような感じで通常は行けるのですが、何故か`auto-mount`などが有効にならず、かつモジュールも起動時に読み込まれない感じだったので、以下を設定。

```bash:Guest
# load-module
$ sudo vim /etc/modules-load.d/virtualbox.conf
# 追記
vboxdrv
vboxguest
vboxsf 
vboxvideo

# auto-mount
$ sudo vim /etc/fstab
# 追記
Downloads /media/sf_Downloads vboxsf fmode=0777,dmode=0755 0 0
```

これで`auto-mount`されるはずですし、パーミッションからもユーザーアクセス可能なはず。
[ Linux ] CentOS7 grubの編集 (transparent hugepage無効化設定編)

以下メモ
##0.transparent hugepage
「透過的」にhugepageを利用できる仕組み
linuxでは4KB のページ(page)と呼ばれるblockでメモリを扱うことになっている。
2MBのhugepageを使うと単位が大きいのでブロックへのアクセスがより楽になる => メモリアクセス時間短縮につながる。らしい。
透過的(transparent)というのは「あらかじめhugepage用のメモリ領域を確保しておくめんどくさい手続きが必要なくhugepageの仕組みを利用できる」とかそんなかんじの意味。
略称THP
デメリットはブロック単位が大きいので小さいメモリで十分なのに2MB割り当ててしまう=> メモリ無駄使いになる　ということ。
というわけでこの設定を無効化します。

##1. THPの設定確認


```bash

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
[always] madvise never
#または
cat /sys/kernel/mm/transparent_hugepage/enabled


```
centos7だと多分THPの設定が標準で`always`になってる。

```bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
cat  /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
```
これでneverに変更できるけどサーバリブートすると元に戻る。
じゃあどうするか。grubを編集しよう。

##2. grub2の編集
正確にはcentos7なのでgrub2の編集ということになる。
centos6だと/boot/grub/menu.lstまたは/boot/grub/grub.conf(シンボリックリンク先の /etc/grub.conf)を直接編集すればよかったのですが、centos7だと違う。
手順としては
1.  /etc/default/grubを編集
2.  grub2-mkconfig
3.  reboot
という流れでやってみます

##3. transparent_hugepage=never の設定をgrubに追加
```bash:設定前はこんなかんじ
cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=jp106 rd.lvm.lv=centos/root crashkernel=auto  rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

cat /etc/grub2.cfg
#長いので中略このあたりにGRUB_CMDLINE_LINUXの設定がある？？
        linux16 /vmlinuz-3.10.0-123.4.4.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=jp106 rd.lvm.lv=centos/root crashkernel=auto  rhgb quiet LANG=en_US.UTF-8
        initrd16 /initramfs-3.10.0-123.4.4.el7.x86_64.img
#中略

```

`GRUB_CMDLINE_LINUX`の項目に設定追記(transparent_hugepage=never)します

```bash:この項目だけ変えた。
vi /etc/default/grub
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=jp106 rd.lvm.lv=centos/root crashkernel=auto transparent_hugepage=never rhgb quiet"

```

その後 `grub2-mkconfig` を実行してvagrantなので`vagrant halt`してから`vagrant up`

##4.　結果
うーん。。。この方法でよいのかどうかよくわからない。
1. 例えば`echo always > /sys/kernel/mm/transparent_hugepage/enabled`としてからサーバリブートしてみるとまた`never`に戻ってたのでデフォルトの設定は確かに「THP無効」となった
2. だけど`cat /etc/grub2.cfg`でもう一度確認しても`transparent_hugepage=never`という設定を確認することが出来ない！なぜだろうか、、、、


と思ったら以下のオプションで解決しました！

```bash
grub2-mkconfig -o /boot/grub2/grub.cfg ##BIOS搭載だとこうなる 

####UEFIだと以下のようにする
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

```

もう一度`cat /etc/grub2.cfg`で確認すると`transparent_hugepage=never`が反映されてました

というわけで正しい手順は
1 /etc/default/grubを編集
2 `grub2-mkconfig -o /boot/grub2/grub.cfg(または/etc/grub2.cfg)`を実行
3 リブート

となりそうです。
Member Center に入ろうとすると You've already agreed… って言われる件について


# 前提

新規に iTunes Connect なユーザを作って、 iPhone Developer な Certificate 作るか、とか思って Member Center に入ろうとすると `You've already agreed to the Apple Developer Agreement` とか言われて、ログインできない現象が発生。

# 結論

Apple ID 的に「秘密の質問」が設定されていない場合に発生するもよう。

[Apple ID](https://appleid.apple.com/) の設定を再確認しましょう。

# 詳細

- 新規に登録するための Apple ID は作成済み
	- だが、iPhone とか Mac とかの実機で使ったことがなく、秘密の質問が未設定
	- iTunes Connect 上で新規ユーザとして登録する場合に発生し易いかな？
- Member Center から Invitations を送信
- Member Center へのログインセッションを持っていないブラウザ (普通に Sign Out する) で、Invitations メールのリンクを踏む
- 新規登録対象のユーザの Apple ID でサインイン
- `You've already agreed to the Apple Developer Agreement` って言われる ＼(^O^)／

ってな感じでした。

んで、「ぐぬぬ…」ってなって、ググったところ、Apple のフォーラムでも言及はされていて、「Apple ID の設定見直したら行けたZE!!」ってな回答を見つけた。

- [Apple ID 管理サイト](https://appleid.apple.com/) にサインイン
- 「秘密の質問が設定されてねーよ？」って言われる
- 設定する
- その状態で、再度 Invitations のリンクを踏む
- 「ｷﾀ━━━━━(ﾟ∀ﾟ)━━━━━!!!!」

なんていうか、エラーメッセージが間違ってるとか、マジで困るんで、そこはどうにかしてください…(´･ω･`)

# 参考

- https://forums.developer.apple.com/thread/6251
ansibleでユーザとssh鍵を一括登録する

ansibleでユーザ登録からssh公開鍵登録をまとめて行おうとしたのでやり方をまとめました。
LDAPを使うっていうのはとりあえず無しで。

# やりたかったこと
* グループ登録
* ユーザ登録
* ユーザの作成済みssh公開鍵をサーバへコピー

# 利用したもの
- groupモジュール
- userモジュール
- authorized_keyモジュール

# 作ったもの
```yaml:tasks/main.yml
- name: Add group
  group: name="{{item.name}}" gid="{{item.gid}}" state="{{item.state}}"
  with_items: "{{group}}"

- name: Add users
  user: name="{{item.name}}" uid={{item.uid}} comment="{{item.comment}}" group="{{item.group}}" state="{{item.state}}"
  with_items: "{{users}}"

- name: Add user ssh keys
  authorized_key: >
     user="{{item.name}}"
     key="{{ lookup('file', item.key) }}"
  with_items: "{{users}}"
```

```yaml:vars/main.yml
users:
  - { name: 'user1',  uid: 5001, group: 'users' , comment: 'user1', home: '/home/user1', createhome: 'yes', state: 'present' , key: 'keys/user1'}
  - { name: 'user2',  uid: 5002, group: 'users' , comment: 'user2', home: '/home/user2', createhome: 'yes', state: 'present' , key: 'keys/user2'}

group:
 - { name: 'users', gid: 5000, state: 'present'}

```

# ファイル配置
ロール名は適切につけてください。

```text
somerole
├── files
│   └── keys
│       ├── user1
│       └── user2
├── tasks
│   └── main.yml
└── vars
    └── main.yml
```
Workflow Engine をつくろう！ Part 3（Task 間でのデータのやり取り）

[Part 1 Task の依存関係の解決](http://qiita.com/hakobera/items/d7742cc0801a9c62ef72)
[Part 2 Workflow の冪等性](http://qiita.com/hakobera/items/478f55c9ddf682e5caca)
[Part 3 Task 間でのデータのやり取り](http://qiita.com/hakobera/items/cf570090943ea177938e)
[Part 4 Task の並列実行](http://qiita.com/hakobera/items/f3ddf4fac8316daab8ba)

# Task 間でのデータのやり取り

今回は Task 間でのデータのやり取りを実装していきます。次回以降が少し長くなるのと、実装が簡単なので、今回は短めにまとめます。

## Task 間のデータのやり取りとは？

「Task 間のデータのやり取り」とは何かを、いつもの例で説明します。

![Alt text](http://g.gravizo.com/g?
  digraph G {
    rankdir=LR;
    TaskB -> TaskA
    TaskC -> TaskA;
    TaskD -> TaskB;
    TaskD -> TaskC;
  }
)

「Task 間のデータのやり取り」というのは、正確には「下流（Downstream）Task の output メソッドの戻り値を、上流（Upstream）Task が参照できる」機能のことです。上の図でいうと、TaskB, TaskC は TaskD の、TaskA は TaskB, TaskC の output メソッドの戻り値である Target クラスのインスタンスを参照できます。この機能を持つメソッドを、input メソッドとして追加します。

すると

- TaskD#output == TaskB#input
- TaskD#output == TaskC#input
- TaskB#output == TaskA#input
- TaskC#output == TaskA#input

こんな感じの関係になります。具体例としては、以下のように、下流 Task の出力内容の和を出力する Task なんてものが書けます。

```rb
class GenerateDataTask < Task
  def output
    LocalFileTarget.new("/tmp/data#{Time.now.strftime('%Y-%m-%d')}.txt")
  end

  def run
    # 1から10までの数字をファイルに出力
    File.open(output.path, "w") do |f|
      (1..10).each do |i|
        f.puts i
      end
    end
  end
end

class SumTask < Task
  def requires
    [ GenerateDataTask.new ]
  end

  def output
    LocalFileTarget.new("/tmp/output_#{Time.now.strftime('%Y-%m-%d')}.txt")
  end

  def run
    sum = 0
    # GenerateDataTask#output の戻り値から、ファイル名を取得
    File.foreach(input[0].path) do |line|
      sum += line.to_i
    end
    File.write(output.path, sum) #=> 1から10までの数字の和である55が出力される
  end
end

Workflow.new.run(SumTask.new)
```

実際の Workflow でよくある日次処理でファイル名に日時が含まれているような動的にファイル名が変わる場合でも、それを意識することなく受け渡すことができます。このようにデータのやり取りを Target クラスで抽象化することで、`SumTask` の再利用性が上がります。

## 実装してみよう

今回の実装は Task クラスに以下の input メソッドを足すだけです。簡単ですね。

```rb
class Task
  def input
    @input ||= requires.map { |task| task.output }
  end
#（省略）
end
```

では、実際に前述のサンプルコードを実行してみましょう。

```bash
$ ruby example.rb
$ cat /tmp/output_2016-01-06.txt
55
```

できていますね。

全ソースコードはこちら。
https://gist.github.com/hakobera/03bcc4576b7bacab419f

## まとめ

この記事では、Workflow Engine の機能のうち、関連する Task 間でのデータを Target クラスを経由してやり取りする方法について解説しました。

次回は、Task の並列実行について解説します。

[Part4へ](http://qiita.com/hakobera/items/f3ddf4fac8316daab8ba#_reference-baf7e646e039c60b6227)
Gitlab CI Multi Runnerをインストール・Registerする

# Gitlab CIを使用してみる
　突然CIしてみたくなったのでちょうど手元にあるgitlab CIでビルドできる環境を作ってみます．
　Runnerのインストールで躓いたのでメモ．

## 下準備

* Debian 
* Gitlab CE 8.2.2

## Gitlab CIを使用できるようにするまで

### 公式ドキュメント
　ドキュメントは[ここ](http://doc.gitlab.com/ce/ci/quick_start/README.html)にあるので，基本的にはこの手順通りに行っていく．
　runnerをインストールするあたりからドキュメントが怪しいのでそれ以降は次の手順で行いました．

### gitlab-ci-multi-runnerをインストールする
　上記ドキュメントに従うとapt-getのときにgitlab-ci-multi-runnerがないと言われてしまいます．
　そんなときは[gitlab-ci-multi-runner自体のドキュメント](https://github.com/ayufan/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md)にしたがって入れて行きましょう．

### gitlab-ci-multi-runnerをregisterする

http://gitlabのホーム/ci/admin/runners にrunner登録用のtokenが書いてあるのでこれをコピーしておきます．

後は下記の通りコマンドを実行し，指示されたとおりに返事していれば勝手に使用できるようになります．
executorはこのRunnerをどこで実行するかを指定します．私はDockerにしましたが何でも良い気がします．

```
xxxx:~$ sudo gitlab-ci-multi-runner register
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
http://gitlabのドメイン名等orIPアドレスがここに来る/ci
Please enter the gitlab-ci token for this runner:
#上記手順で取得したトークンをここで入れる
Please enter the gitlab-ci description for this runner:
[gitlabのドメイン名等orIPアドレスがここに来る]:
Please enter the gitlab-ci tags for this runner (comma separated):

INFO[0063] c73130de Registering runner... succeeded
Please enter the executor: shell, parallels, docker, docker-ssh, ssh:
docker
Please enter the Docker image (eg. ruby:2.1):
ruby2.1
If you want to enable mysql please enter version (X.Y) or enter latest?

If you want to enable postgres please enter version (X.Y) or enter latest?

If you want to enable redis please enter version (X.Y) or enter latest?

If you want to enable mongo please enter version (X.Y) or enter latest?

INFO[0076] Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
```

あとは公式ドキュメント通りにいれれば無事動きましたとさ．
Xcode7でATSを即座に無効にする方法を更新してみた (1ステップ)

Xcode上でATSを無効にするより早いのが判明したので書いてみた
tonkotsuboy_comさんの記事を参考にしました → http://qiita.com/tonkotsuboy_com/items/9c056b4b2b1ffb85615e
※ATS無効はAppleに推奨されていないので適切に使用しましょう。

---

1. ターミナルで以下のコマンドを入力します。

```bash
$ defaults write {プロジェクトのInfo.plistの絶対パス} NSAppTransportSecurity -dict NSAllowsArbitraryLoads "<true/>"
```

以上

---

defaults コマンドを使うときは、Info.plist は絶対パスで指定することと、dict に bool を設定するために ```"<true/>"``` と文字列で指定することがポイントです。

絶対パスを指定するのが多少面倒なので、そこに改善の余地がありそうですね。
【覚書】WP：アイキャッチ画像のlightbox化

>http://sysana.com/stinger3%E3%81%A7%E5%8D%98%E4%B8%80%E8%A8%98%E4%BA%8B%E3%81%AE%E6%8A%95%E7%A8%BF%E6%96%87%E6%9B%B8%E3%81%AB%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81%E7%94%BB%E5%83%8F%E3%82%92%E8%A1%A8/

参考にしました
使用したプラグインは　WP jQuery lightbox
```
<?php if ( has_post_thumbnail() ): ?>
<?php $src_info = wp_get_attachment_image_src(get_post_thumbnail_id(),'full'); ?>
<a href="<?php echo $src_info[0] ?>" rel="lightbox">
<?php the_post_thumbnail('medium'); ?>
</a>

```
SlackとGoogle App Scriptで自動翻訳機能を作った

<img width="388" alt="スクリーンショット 0028-01-06 12.25.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/64427/c38f8b20-8920-5473-fc7e-23acbe8cda52.png">


仕事で外国語の文章を読むことがあり、たまに面倒くさくなってGoogleTranslateを使うことがある。そこでSlackで自動翻訳してくれるものを作った。

## 仕様

シンプルに

　- 元言語と翻訳言語の両方を選択できる
　- bot名の後に元言語と翻訳言語を指定した後、翻訳したい言語を入力する。
　- 翻訳された文章が返ってくる。

## 使うサービス

 - Google App Script
 - Slack（Outgoing Webhooks）
 
## ソースコード

基本設定などは[こちら](http://tech.camph.net/slack-bot-with-gas/)を参照のこと

```js

function doPost(e) {
  Logger.log(e);
  var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN');
  var bot_name = "Translator Amanda";
  var bot_icon = "http://cdn.movieweb.com/img.news/NE7gJxmYw4Z2ae_1_1.jpg";
  var verify_token = "**********"
  
  if (verify_token != e.parameter.token) {
    throw new Error("invalid token.");
  };
  
  var app = SlackApp.create(token);
  
  var body = e.parameter.text.substr(8);
  var original_lan = body.substr(0,2);
  var convert_lan = body.substr(3,2);
  var message = body.substr(6);
  var message = LanguageApp.translate(message, original_lan, convert_lan);

  return app.postMessage("#test", message, {
    username: bot_name,
    icon_url: bot_icon
  });
}
```

## 今後したいこと

 - 調べたい単語の意味をネット上から拾ってきてくれるBot
 - 言語を指定しなければデフォルトで英語=>日本語で翻訳してくれるAmandaさん。（正規表現を使う）
Volleyでやたらに start() を呼び出してはいけない

# Volleyでやたらに start() を呼び出してはいけない

Androidのネットワーク周りをいい感じに担保してくれる Volley というのがあります。


```java

// Volleyのインスタンス作成
RequestQueue mQueue = Volley.newRequestQueue(context);

// リクエスト生成
JsonObjectRequest request = new JsonObjectRequest(...)

// リクエストをキューに挿入
mQueue.add(request);

// リクエスト開始
mQueue.start();
```

という流れで、バックグランドでいい感じにリクエストを開始してくれるんですが、複数同時に実行する場合たまに通信が完了せずに失敗してしまうケースが。

よくよく調べてみると、最後の ```mQueue.start();```が問題。
イメージとしては、キューに ``add`` して  ``start`` を呼び出して通信開始という流れかと思いきや、``add``の時点で通信はもう開始されている。

start()のソースを読んでみると

```java
public void start() {
        stop();  // Make sure any currently running dispatchers are stopped.
        ...
    }
```

先頭でいきなり stop してました。
つまり、複数同時に通信をした時に、タイミングによっては通信途中のものをstopしてしまうという事態に。

ということで、何か明示的に通信開始したい場合以外は ``start()`` しないようにしよう。

ちなみに某しかさん曰く、現在Android界隈では Retrofit が主流とのこと。
http://square.github.io/retrofit/



参考

http://stackoverflow.com/questions/31158858/random-com-android-volley-noconnection-error-java-io-interruptedioexception-st
http://qiita.com/ueno-yuhei/items/d81dc638951ce3f6988a
LANに接続されているIPアドレスを知る（MAC OSX)



## 1. 自分のIPを確認する
ifconfigをつかって、自分が使っているipを確認する

```
ifconfig | grep netmask
        inet 127.0.0.1 netmask 0xff000000
        inet 192.168.1.27 netmask 0xffffff00 broadcast 192.168.1.255
        inet 192.168.33.1 netmask 0xffffff00 broadcast 192.168.33.255
```


## 2. ブロードキャスト宛にpingを発行する
上記の例だと192.168.1.***をつかっているらしいので、そんおブロードキャストアドレスにpingをうつ

```
ping 192.168.1.255
```

## 3. arpで確認

```
arp -a

ntt.setup (192.168.1.1) at 0:b:a2:d4:42:98 on en0 ifscope [ethernet]
? (192.168.1.2) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet]
? (192.168.1.3) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet]
... 続く ...
```
Atom でエンコーディングを自動判別するパッケージ auto-encoding

# TL;DR

Atom（1.3.2）でファイルを開いたときにエンコーディングを自動判別するようにしたければ [auto-encoding](https://atom.io/packages/auto-encoding) を使うとよい。

# Atom がエンコーディングを自動判別してくれない

Atom 1.3.2 は、ファイルを開いたときにファイルエンコーディングを自動判別してくれない。

![before.png](https://qiita-image-store.s3.amazonaws.com/0/9734/5b40b072-f889-48ae-a06c-6a9a82b6c126.png)

つらい。

# Ctrl + Shift + u という手があるが

```Ctrl + Shift + u``` でエンコーディングを選べて、「Auto Detect」という選択肢があるのでこれで判別できるのだが、ファイルを開く都度 ```Ctrl + Shift + u``` を押すのはメンドクサイ。

# デフォルトのエンコーディングを設定できるが

また、「File」メニューの「Settings」から「Core Settings」→「File Enconding」でデフォルトのエンコーディングを設定できるが、ここにはなぜか Auto Detect がない。

なぜだ。

# auto-encoding が救う

そこで auto-encoding というパッケージが役に立つ。

https://atom.io/packages/auto-encoding

その機能はズバリ「default "Auto Detect"」。

apm で簡単にインストールできる。

```bash
$ apm install auto-encoding
```

インストール後、ファイルを開きなおす。

![after.png](https://qiita-image-store.s3.amazonaws.com/0/9734/129dcc5c-bbc7-6095-d5eb-3991cc3ce331.png)

嬉しい。

auto-encoding が Google 検索でイマイチ引っかかりにくいようで、存在に気づいていない人もいそうなので書きました。
突然SAML認証と仲良くしなきゃいけなくなった人へ

あわわ、なんかSSO関連の案件でなんとかやってたら
急に手ごわそうなSAMLとか言うのがでてきやがったぜって方向け。(初心者向け)

#ひとまずSAML認証の概要のキャッチアップ 
http://xmlconsortium.org/websv/kaisetsu/C10/content.html
ここ見れば登場人物やそれぞれの役割、関わり方がざっくりわかるので
一旦目を通しておく。

#重要なワードたち
- SOAP：Simple Object Access Protocol
　SOAPはメッセージングのエンベロープの仕様を定めているものであるが、
　Webサービスのプロトコルとして、要求／応答をRPCとする手順も規定している。

- SAMLの提供するサービス
 - 認証情報伝達サービス（Authentication Assertion）
 - 属性情報の伝達（Authorization Assertion）
 - アクセス制御情報の伝達（Authorization Decision Assertion）

認証と認可のお話、これらをググれば一通りやれることがわかります。
ここを勉強した後に一番上のURLを参照すればだいたいわかった気になれます。

*Tips*
既にあるプロダクトをSAML認証を用いたSSO対応させる場合に知りたいのは
以上のような情報が多かった気がします。
 ・御社でSAML認証している際に送信しているxmlくださいー
 ・ユーザーに紐づく属性情報どんなんありますかー
 　(既存のプロダクト製品のユーザーの項目に紐付けることになるかも)
 ・ユーザー権限を御社製品でどう表現するか

あとはひたすら環境構築！

 ※困った時用の頼れるリファレンス。通常時に上から読もうとすると病むので注意。
 https://www.oasis-open.org/committees/download.php/22553/sstc-saml-tech-overview-2%200-draft-13.pdf

＃あとがき
前職の同期にSAML認証に関して質問を受けて返答したら
「Qiitaみたいだ！」といってもらえたので載せてみました。ｗ

// 下記URLがリンク切れを起こしていたので代わりとなるページを探して貼っておきました。
// http://japan.entrust.com/resources/pdf/wp/13-xml.pdf
centOS 6でGoogle日本語入力（「Mozc（モズク）」）を使う方法

centOS 6でGoogle日本語入力（「Mozc（モズク）」）を使う方法を記します。

１：下記シェルをrootで実行する
２：右上のパネルにあるibusアイコンを右クリックして「設定」を選択します。
３：ibusの設定画面の[インプットメソッド]において[インプットメソッドの選択]→[日本語]→[Mozc]を選択します。
４：そして追加ボタンでMozc入力環境を追加して優先順位を変更してMozcをトップにします。

```
# setup_Mozc.shの準備
rm -f setup_Mozc.sh; touch setup_Mozc.sh; chmod u+x setup_Mozc.sh; vi setup_Mozc.sh
```

```
#!/bin/bash

if [ "$UID" -eq 0 ];then
    echo "root!"

    echo "＋------------------------------------------------------------------------------------------------------------＋";
    echo "■setup start " ${0};
    echo "＋------------------------------------------------------------------------------------------------------------＋";

    wget http://dl.fedoraproject.org/pub/epel/6/x86_64/protobuf-2.3.0-9.el6.x86_64.rpm
    wget http://ftp.kddilabs.jp/pub/Linux/packages/Vine/Vine-6.3/x86_64/Vine/RPMS/zinnia-0.06-3vl6.x86_64.rpm
    wget http://ftp.kddilabs.jp/pub/Linux/packages/Vine/Vine-6.3/x86_64/Vine/RPMS/tegaki-zinnia-japanese-0.3-1vl6.noarch.rpm
    wget http://ftp.kddilabs.jp/pub/Linux/packages/Vine/Vine-6.3/x86_64/Vine/RPMS/mozc-server-1.5.1090.102-1vl6.x86_64.rpm
    wget http://ftp.kddilabs.jp/pub/Linux/packages/Vine/Vine-6.3/x86_64/Vine/RPMS/mozc-utils-gui-1.5.1090.102-1vl6.x86_64.rpm
    wget http://ftp.kddilabs.jp/pub/Linux/packages/Vine/Vine-6.3/x86_64/Vine/RPMS/ibus-mozc-1.5.1090.102-1vl6.x86_64.rpm
    wget http://ftp.kddilabs.jp/pub/Linux/packages/Vine/Vine-6.3/x86_64/Vine/RPMS/mozc-1.5.1090.102-1vl6.x86_64.rpm

    rpm -ivh protobuf-2.3.0-9.el6.x86_64.rpm
    rpm -ivh zinnia-0.06-3vl6.x86_64.rpm
    rpm -ivh tegaki-zinnia-japanese-0.3-1vl6.noarch.rpm
    rpm -ivh mozc-server-1.5.1090.102-1vl6.x86_64.rpm
    rpm -ivh mozc-utils-gui-1.5.1090.102-1vl6.x86_64.rpm
    rpm -ivh ibus-mozc-1.5.1090.102-1vl6.x86_64.rpm
    rpm -ivh mozc-1.5.1090.102-1vl6.x86_64.rpm

    rm -f protobuf-*.rpm
    rm -f ibus-mozc-*.x86_64.rpm
    rm -f mozc-*.rpm
    rm -f tegaki-zinnia-japanese-*.rpm
    rm -f zinnia-*.rpm


    echo "＋------------------------------------------------------------------------------------------------------------＋";
    echo "■setup end";
    echo "＋------------------------------------------------------------------------------------------------------------＋";

else
    echo "non-root user!"
fi
```
Rake起動を判定

# Rake起動を判定

## やりたかったこと
Rakeから起動された場合だけ、特定の処理を制限したかった

## 判定方法
### rakeコマンドから起動された場合
```
$0.split("/").last == "rake"
```

### ENV環境変数を入れた場合
```
BATCH=true bundle exec rake xxx:task
```
```
ENV["BATCH"] == "true"
```

## 落ち
よし！Rakeから起動された時には制限をかけた、と思ったが、
対象のバッチがrails runnerのでダメだった、、、
ということもある
playframeworkでakkaのログを追加

# きっかけ
`play run` で動かしているとき、一番上のアクターで例外が発生したときは、例外のstacktraceが標準出力にはでるけど、logbackで指定しているファイルにはでていなかった。本番運用でこれが原因でトラぶったときに原因究明ができなくなってしまうのではと思い、これをログファイルに出すやり方を調べてみた。

#　やり方

application.confに次を追加

```
akka.loggers=["akka.event.slf4j.Slf4jLogger"]
``` 

2.3系からplayの公式にもakkaのログに関する設定が出ている模様。
https://www.playframework.com/documentation/2.3.x/SettingsLogger

# 参考サイト

http://stackoverflow.com/questions/16048087/make-akka-aware-of-plays-logback-configuration
【覚書】WP：ナビの現在地

こんなこともわからんのかのレベル

>http://www.gl0ssy.net/wordpres-class-carrent/

参考URL

```
<nav>
<ul>
<il class="nav-btn<?php if ( is_page('programming') ) { echo ' current'; } ?>"><a href="#">ナビゲーション1</a></li>
</ul>
</nav>
```
is_categoryでもよし
jQuery Columns : 要素にリンクを埋め込む

# 概要
jQuery Columns で表を作るとき、要素にリンクを埋め込む。

- 最初、HTML 文字列で渡したら、タグを消去されたので...
- 公式ドキュメントには書いてあったが日本語で引っかからなかったのでメモ

# 方法
schema にて、template を指定する。(公式の Example 3)

```js
data = [{"id": 1, "url": 'test/01/index.html'},
        {"id": 2, "url": 'test/02/index.html'},]

$("#columns").columns({
    data: data,
    schema: [
        {"header": "id", "key": "id"},
        {"header": "url", "key": "url", "template": '<a href="{{url}}">{{url}}</a>'},
    ],
})
```

# 参考
- http://michaeleisenbraun.com/columns/
コードでUICollectionViewのCellの選択状態の設定と解除

選択状態の設定
-

```objc:.m
    // 複数選択する場合はallowsMultipleSelectionをYESに設定する
    _collectionView.allowsMultipleSelection = YES;

    // 一番最初のCellを選択する
    NSIndexPath *selectIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [_collectionView selectItemAtIndexPath:selectIndexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];
```



選択状態の解除
-

複数選択の場合

```objc:.m
    // 選択されているIndexPathを全て非選択状態にする
    for (NSIndexPath *indexPath in _collectionView.indexPathsForSelectedItems) {
        [_collectionView deselectItemAtIndexPath:indexPath animated:NO];
    } 
```

単一選択の場合

```objc:.m
    [_collectionView deselectItemAtIndexPath:[_collectionView.indexPathsForSelectedItems lastObject] animated:NO];
```
よくやるネストぶちころし術

不必要なネスト掘り下げマンは腹を切って死ぬべきである

```php
private function checkHogeHageHige ($hoge, $hage, $hige) {

  // ほんとはもっと複雑な条件だったりするけど  

  if ($hoge) {
    if ($hage) {
      if ($hige) {

        // すごく長い処理

        return true;
      } else {
        return false;
      }
    } else {
      return false;
    }
  } else {
    return false;
  }
}
```

```php
private function checkHogeHageHige ($hoge, $hage, $hige) {

  if (!$hoge) {
    return false;
  }

  if (!$hage) {
    return false;
  }

  if (!$hige) {
    return false;
  }

  return true;
}
```

異常系は先にお帰りいただいて、浅いネストでゆっくり正常系の処理をやりましょう

この方法はクソ長い関数の一部分だとできない場合が多くて、関数分割の恩恵でもある
Ansible でサーバに接続できないのメモ

体裁は後で整えるとしてメモ。追記も随時。

# 事例１
ansible で -m ping でもエラーになる（特にはじめてのサーバ）

<pre>
エラーメッセージ
ssh connection closed waiting for a privilege escalation password prompt
</pre>

悩みに悩んだ挙句、対象のサーバがパスワードログインを禁止に設定してあることに気づく。
正しい対処方法はよくわからないが、ssh で接続しているので、 ansible.cfg に
<pre>
ssh_args = -F ssh_config -q -o PubkeyAuthentication=yes
</pre>
として、鍵認証でログインすれば通過できた。
てかなんでデフォルトで鍵認証オフなんだ。。。
（ちなみに Ansible のバージョンは1.9.3）

# 事例２

これも特にはじめてのサーバの時

<pre>
エラーメッセージ
fatal: [act-sandbox00] => Incorrect become password
</pre>

パスワード誤り。初期パスワードのままになっててsudoできないとか。

# 事例３

これも（ｒｙ

<pre>
エラーメッセージ
ssh connection closed waiting for sudo password prompt
</pre>

sudo 出来ない可能性。 sudoersに追加されてないとか。 %wheel が有効じゃないとか。

<pre>
$ visudo
## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
↓
%wheel        ALL=(ALL)       ALL

あと

Defaults    requiretty
↓
#Defaults    requiretty
</pre>
【覚書】WP：親カテゴリのテンプレートを小カテゴリに！

functions.phpにこれをプラス

```
add_filter( 'category_template', 'my_category_template' );

function my_category_template( $template ) {
    $category = get_queried_object();
    if ( $category->parent != 0 &&
        ( $template == "" || strpos( $template, "category.php" ) !== false ) ) {
        $templates = array();
        while ( $category->parent ) {
            $category = get_category( $category->parent );
            if ( !isset( $category->slug ) ) break;
            $templates[] = "category-{$category->slug}.php";
            $templates[] = "category-{$category->term_id}.php";
        }
        $templates[] = "category.php";
        $template = locate_template( $templates );
    }
    return $template;
}
```
>http://studio-freetown.com/post-783/

参考にしました。
[Sublime Text2]マクロを用いた日付入りファイルヘッダ入力

Sublimeで~~スニペットだけでは日付入りでファイルヘッダの入力は難しいので~~マクロを書いてみました．
##必要なもの
- ファイル名，署名等を記述したスニペット
- [InsertDate](https://github.com/FichteFoll/InsertDate)

スニペットは自分が必要な内容を適当に記述([例](http://qiita.com/Sumire_sn24/items/e03e604cc2562584e12c))，InsertDateはPackage Controlからインストールする．

マクロの内容はただスニペット，InsertDateを順番に実行しているだけ．



```sublime
[
	{
		"args":
		{
			"name": "Packages/User/MySnippet/cpp/FileNameAuthor.sublime-snippet"
		},
		"command": "insert_snippet"
	},
	{
		"args": null,
		"command": "left_delete"
	},
	{
		"args": null,
		"command": "left_delete"
	},
	{
		"args": null,
		"command": "reindent"
	},
	{
		"args": {"format": "#%Y/%m/%d"},
		"command": "insert_date"
	},
	{
		"args":
		{
			"characters": "\n*/"
		},
		"command": "insert"
	}
]
```
insert_snippetとinsert_date以外のコマンドは体裁を整えるためのインデント等です．
insert_snippetの引数は使用するスニペットのパスを書く．insert_dateの引数については[ここ](https://github.com/FichteFoll/InsertDate)
これをPackages/User/に***.sublime-macroとして保存する．

後はこんな感じでマクロをショートカットで呼べるようにすればOK

```sublime
{
    "keys": ["command+shift+:"],
    "command": "run_macro_file",
    "args": {"file": "Packages/User/Macro/FileNameDate.sublime-macro"}
}
```
実行例

```cpp
/*!
	\file			hoge.cpp
	\author		sumire
	#2016/01/06
	*/
```
毎回ヘッダにたくさん書くことがある人にはいいかもしれません．
python : 文字列フォーマットに定義済みの変数をそのまま使う

便利だったのでメモ。
format() に locals() を渡すとよい。

```py:ipython
name = 'Taro'
country = 'Japan'
print("I'm {name} from {country}.".format(**locals()))
```

```shell-session:stdout
I'm Taro from Japan.
```

# 参考
- http://stackoverflow.com/questions/11764900/using-locals-and-format-method-for-strings-are-there-any-caveats
- http://stackoverflow.com/questions/1550479/python-is-using-vars-locals-a-good-practice
- http://qiita.com/twitte_raru/items/17f0e589252e703b2daa
Emacsのruby-modeでマジックコメントの自動挿入を停止する


http://cortyuming.hateblo.jp/entry/20140130/p1


```elisp
(require 'ruby-mode)
(defun ruby-mode-set-encoding () nil)
```

追記: コメントで@shohexさんにさらに良い方法を教えてもらった。

```elisp
(custom-set-variables
 '(ruby-insert-encoding-magic-comment nil))
```

これだとruby-modeのrequire不要なので軽い。
fluentd に GEOIP Plugin をインストールする


# fluentd に GEOIP Plugin をインストールする

IP Adress から Location情報をリアルタイムに引いてくれる便利なPluginです  
CentOS6でInstallすることを想定します

Plugin こちらの方が作成されていました。ありがとうございます。  
https://github.com/y-ken/fluent-plugin-geoip

## gpio-devel を Install する

1. epel repository を追加  
epel repository を使えるようにしてみる

```bash
wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
```

2. gpio-devel をInstall

```bash
yum install geoip-devel --enablerepo=epel 
```

## Plugin Install
1. Plugin を Install する  

```bash
sudo td-agent-gem install fluent-plugin-geoip
```

gcc が Installされていない場合、ここでエラーが出るので、gcc のInstallが未済の場合ここでInstallする

```bash
yum install gcc
```

## 使い方
詳しい使い方はこちらを参照ください。  
https://github.com/y-ken/fluent-plugin-geoip

Elasticsearch にいれて、kibana から参照したい場合、以下のように追加してやるといい  
※ Elasticsearch 上で GIO_IP として mapping することを忘れずに  

```xml:td-agent.conf
<match access.*>
  type geoip
  geoip_lookup_key host
  skip_adding_null_record  true
  add_tag_suffix .gioip
  <record>
    country ${country_code['host']}
    location ${latitude['host']},${longitude['host']}
  </record>
</match>
```

Elasticserch のマッピング(参考)

```bash
curl -XPUT http://localhost:9200/_template/access_log/ -d '
{
  "template": "access_log-*",
  "mappings": {
    "access_log":{
      "properties":{
        "location":{
          "type":"geo_point"
        }
      }
    }
  }
}
'
```
paperclipでweb上の動画を保存する！

# paperclipでweb上の動画を保存する方法

まずは下記をGemfileに記述し、bundle installを実行してください

```ruby:Gemfile
gem 'paperclip'
```

```
$ bundle install
```

###Movieモデルを作成します

```
$ rails g model movie 
```

migrationファイルは下記のように記述

```ruby:yyyymmddhhmmss_create_movies.rb
class CreateMovies < ActiveRecord::Migration
  def change
    create_table :movies do |t|
      t.attachment :videofile
      t.timestamps null: false
    end
  end
end
```
attachmentは、paperclipで定義されており、ファイル情報を保持するために複数カラムを追加してくれます。

###migrationを実行

```
$ rake db:migrate
```

モデルは下記のように記述

```ruby:movie.rb
class Movie < ActiveRecord::Base
  has_attached_file :videofile,
    path: "#{Rails.root}/public/system/:class/:id.:extension",
    url: "/system/:class/:id.:extension"
  validates_attachment_content_type :videofile, content_type: ["video/mp4"]
end
```
validates_attachment_content_typeは今回mp4を対象にしています。


###保存処理を実行する際の記述

```ruby:movie_controller.rb
  def save_movie(url)
    movie = Movie.new
    # web上から動画を取得
    open(url, 'User-Agent' => 'Your User Agent') do |videofile|
      movie.videofile = videofile
    end
    movie.save!
  end
```
openで指定したurlの動画を取得します。
エラー処理などを一切省いていますが、これでweb上から動画を取得して保存できます。


###保存した動画を呼び出すには、viewで下記を記述してください。

```ruby:movie.html.er
  <div class="movie">
    <video autoplay loop width="420" height="420">
      <source src="<%= @movie.videofile %>">
      <p>動画を再生するにはvideoタグをサポートしたブラウザが必要です。</p>
    </video>
  </div>
```

以上で完了です。
OSM日本の離島名称編集


OSMで地理院地図がsourceとして使えることはよく知られています。

地理院地図のURLとopenstreetmap.orgのxyz記述がほぼ一緒なので、対象の位置に飛びやすいことを見つけました。

これを利用して、OSM日本の離島の名称を編集することが可能です。

2014年に命名された離島の一覧は以下のとおりです。

* [領海の外縁を根拠付ける離島の地図及び海図に記載する名称の決定について](http://www.kantei.go.jp/jp/singi/kaiyou/ritouhoushin/meisyou140801.html)

ここから、地理院地図へのリンクがついたPDF（！）に飛ぶことができます。
地理院地図には、上記の地名がすでに投入されています。

* [対象のPDF](http://www.kantei.go.jp/jp/singi/kaiyou/ritouhoushin/pdf/meisyou140815.pdf) (地名部分をクリックすると地理院地図へジャンプ)

例えば、北小島は[このあたりです](http://maps.gsi.go.jp/?z=15&ll=30.48745,140.31511#15/30.487450/140.315110)。

![地理院地図](https://qiita-image-store.s3.amazonaws.com/0/9928/32c7ddf8-eb42-2658-7e23-7a4ecf3f48e4.png "スクリーンショット 2016-01-06 12.31.31.png")


URLの文字列の、最後の部分を切り取ります。

```
http://maps.gsi.go.jp/?z=15&ll=30.48745,140.31511#15/30.487450/140.315110
```

という記述の、この部分です。

```
15/30.487450/140.315110
```

これを、openstreetmap.orgのURL末尾のところに貼り付けてエンターで移動できます。

```
http://www.openstreetmap.org/#map=15/30.4874/140.3151
```

![osm.org](https://qiita-image-store.s3.amazonaws.com/0/9928/1488856d-1d6b-d69f-3059-f73bfd92944e.png "kobito.1452051339.618241.png")

あとは、ログインしてiDやJOSMで編集すればOKです。

オブジェクト、あるいは変更セットへの sourceタグ付与を忘れないようにしましょう。
View::shareを利用してサイト全体のViewで支える変数を設定

すべてのページでインクルードしているパーツに対して変数を設定したい場合、それぞれのControllerないで定義するのは現実的ではないので、View::share()など、サイト全体に設定できる関数を利用して変数を設定しておく。

```
View::share('foo', $bar);
```
これを記述しておけば、すべてのViewで$fooの値を利用することが可能。
記述するところは、route.phpや基底クラスのconstractorなどに記述しておけばOK。

利用の場面としては、共通メニュー内に表示条件を指定したい時の条件設定をする場合などに使えそう。

#BaseController.php
```
public function __constract()
{
  // 表示条件を設定
  if (***)
  {
    $fuga = true;
  }
  else
  {
    $fuga = false;
  }
  View::share('fuga', $fuga);
}
```

#menu.blade.php
```
<ui>
  <li>menu1</li>
  <li>menu2</li>
  <li>menu3</li>
  @if ($fuga)
  <li>menu4</li>
  @endif
  <li>menu5</li>
</ui>
```
【Mac】ssh接続で毎回パスワードを求められるのでaliasとsshpassを使って解決

社内サーバで一部、鍵認証ではなくパスワード認証のサーバがあり、毎回パスワードを探してコピペするのが面倒だったので、簡単にできないか探してみました。

※ macユーザ対象に書いてます。

# ssh接続で毎回パスワードを求められるのでaliasとsshpassを使って解決

sshする際にパスワードを指定できないかなと探してみたら、sshpassなるものがありました！

```bash
$ sshpass -p 'password' ssh username@xxx.xxx.xxx.xxx
```

これでパスワードを指定して認証できるんです。

ただ、このままだと結局パスワードを探してコピペしなければいけないので、aliasに登録するのが今回の記事になります。

## 1. sshpassをHomebrewを使ってインストール

※ Homebrewをインストールしてない人は下記等を参考にインストールしてください。

> ・[パッケージ管理システム Homebrew](http://qiita.com/b4b4r07/items/6efebc2f3d1cbbd393fc)
> ・[Homebrewまとめ](http://qiita.com/vintersnow/items/fca0be79cdc28bd2f5e4)
> ・[MacにHomebrewをインストールする](http://qiita.com/_daisuke/items/d3b2477d15ed2611a058)

### 1-1. brew install sshpass

「sshpass brew install」等で調べると下記のコマンドが出てきましたが、残念ながらエラーになりインストールができませんでした。

```bash
$ brew install https://raw.github.com/eugeneoden/homebrew/eca9de1/Library/Formula/sshpass.rb
######################################################################## 100.0%
==> Downloading http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz
==> Downloading from http://jaist.dl.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar
######################################################################## 100.0%
Error: MD5 support has been dropped for security reasons.
Please switch this formula to SHA256.
```

### 1-2. エラー解消

エラーの解消方法を調べてみると
https://gist.github.com/arunoda/7790979
![brew_install_sshpassのエラー解消](https://qiita-image-store.s3.amazonaws.com/0/50898/8273d06a-93d0-e406-f839-cd09cda0bfe0.png)
MD5に対応したものを作成してくれてました！！！

こちらのsshpassでインストールできました！
kadwanevさんありがとうございます。

```bash
$ brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
######################################################################## 100.0%
==> Downloading http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz
Already downloaded: /Library/Caches/Homebrew/sshpass-1.05.tar.gz
==> ./configure --prefix=/usr/local/Cellar/sshpass/1.05
==> make install
🍺  /usr/local/Cellar/sshpass/1.05: 8 files, 39.2K, built in 9 seconds
$
$ sshpass -V
sshpass 1.05 (C) 2006-2011 Lingnu Open Source Consulting Ltd.
This program is free software, and can be distributed under the terms of the GPL
See the COPYING file for more information.
```


## 2. aliasにsshコマンドを登録

※ zshの方は、zshに置き換えて読んでもらえればと思います。

bashのaliasにsshpassを使ったssh接続コマンドを記載しましょう！

### 2-1. .bashrcにaliasを記載

```bash
$ vi ~/.bashrc
```

```vim
# ~/.bashrc

alias hogehoge='sshpass -p 'password' ssh username@xxx.xxx.xxx.xxx'
```

### 2-2. bashを更新してaliasを即反映

```bash
$ source ~/.bashrc
$ alias
alias hogehoge='sshpass -p password ssh username@xxx.xxx.xxx.xxx'
$ hogehoge
Last login: Wed Jan  6 12:08:08 2016 from 192.168.21.99
```

パスワード認証なしで簡単にsshできました！

少しでも参考になれば幸いです。
以上！「【Mac】ssh接続で毎回パスワードを求められるのをaliasとsshpassを使って解決」でした！
Herokuのデータベースをローカルに持ってくる

あんまり情報がなかったので書いときます。`db:pull`は古いので使えない。

```
% rake db:drop #ローカルDBを削除、勝手に上書きしてくれない
% heroku pg:info
=== DATABASE_URL
#(略)
% heroku pg:pull DATABASE_URL project_name_development
```

あと`PostgreSQL`のバージョンが古いと

```
pg_dump: server version: 9.4.4; pg_dump version: 9.3.5
pg_dump: aborting because of server version mismatch
pg_restore: [archiver] input file is too short (read 0, expected 5)
```

とか言われて使えないので

```
% brew update & brew upgrade 9.4
% brew switch postgresql 9.4.5_2
```

こんな感じでバージョンあげときましょう。

### 参考

https://gist.github.com/eoinkelly/fd80465942c8ca4bd5c0
CentOSでデスクトップ環境をつくる・・・失敗 [MEMO]

# CentOSでデスクトップ環境をつくる・・・失敗

## yum update and x tools install
```
sudo yum check-update
sudo yum update
sudo yum -y groupinstall "X Window System" 
sudo yum -y groupinstall "Desktop" 
sudo yum -y groupinstall "Development tools"
sudo yum -y groupinstall "General Purpose Desktop"
```

> [---参考---](http://www.server-world.info/query?os=CentOS_6&p=x&f=1)

## Desktop start setting
```
sudo sed -i "s/id:3:initdefault:/id:5:initdefault:/g" /etc/inittab
sudo startx
```

## Japanese Support setting
sudo yum -y groupinstall "Japanese Support"

```sudo vi /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
```

```source /etc/sysconfig/i18n
echo $LANG # -> "ja_JP.UTF-8"
```

## other tools
```
sudo yum -y install wget
sudo yum -y install vim-enhanced
sudo yum -y install gcc make openssl-devel 
sudo yum -y install unzip tree java-1.6.0-openjdk
sudo yum -y install ntp
```

## ntp setting
```
sudo vi /etc/ntp.conf
```
```
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
↓
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
```

```
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
↓
server ntp.nict.jp
server ntp.jst.mfeed.ad.jp
server ntp1.jst.mfeed.ad.jp
```

```
sudo /etc/rc.d/init.d/ntpd start 
sudo chkconfig ntpd on

sudo mv /etc/localtime /etc/localtime.org
sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```

## SELINUX setting
```
sudo setenforce 0
sudo vi /etc/selinux/config
```

```
SELINUX=enforcing
↓
SELINUX=disabled
```

```
sudo reboot
```
webページがどこまで見られたかをGoogleAnalytics上で確認できるjquery.scrolldepth.jsをいれてみた

MITライセンスだし、簡単に入れられそうだったので、試しに入れて使ってみたので、導入手順をまとめておきます。

## 公式サイトからjsファイルをダウンロード

以下の公式サイトからjsファイルをダウンロードします

http://scrolldepth.parsnip.io

## 導入
 
jQueryが読み込まれていることが前提なので、
jQueryの読み込みが記述されている箇所以降bodyの閉じタグ以前の場所にダウンロードしたjquery.scrolldepth.min.jsを読み込ませる記述をします。

```html

<!-- 古すぎるjqueryだと動かないらしい。1.11は大丈夫でした -->
<script src="js/jquery-1.11.3.min.js"></script>
<script src="js/jquery.scrolldepth.min.js"></script>
<script src="js/common.js"></script>

```

```js:common.js

$(function() {
    $.scrollDepth();
});

```

こんな感じです。
jQueryとScrollDepthを読み込んだ後に、$.scrollDepth()をreadyのタイミングで呼べばOKのよう。
$.scrollDepth()は引数でoptionが設定できるようなので後で調べてみようかと思います。

# GoogleAnalyticsで確認

GoogleAnalyticsのレポートタブから、左側メニューの

```
行動→イベント→ページ
```

でページ一覧に遷移して、任意のページリンクに移動したら見れるっぽい。


![スクリーンショット 2016-01-06 17.59.06.png](https://qiita-image-store.s3.amazonaws.com/0/105934/9ef1b0e8-4fc1-bb72-8fac-ce2a4235a4e9.png)
単語選択からの検索

# 概要
~~`<c-r>`に選択範囲の貼り付けが見つからなかったので仕方なく`map`で対応することにしました。~~
選択中の単語を検索する方法が見つからなかったので仕方なく`map`で対応することにしました。[^1]

[^1]: タイトルと内容が合っていないので修正しました。コメント頂いたので修正前の内容を残ししておきます。

# 設定方法
`vnoremap / "ay/<c-r>a<cr><c-o>`

# 使い方
1. 単語を選択している。( 例: `btn-default`など、`*`で対応できない場合 )
2. `/`で`map`を発動する
3. 検索ワードが選択文字になる ( 例: `btn-default`が検索できた )

# 後日談
`y<esc>/<c-r>"<cr>`を結局使っています。
ownCloudの外部ストレージにConoHaのオブジェクトストレージ繋いだ時、日本語のフォルダとかファイルが扱えない問題を解決したった件


# はじめに
無制限ストレージ with 新しいConoha Object Storage and ownCloud
http://qiita.com/ukitiyan/items/aaa1a2f3fe6e820007c0

↑で書かれたことの続編みたいなやつです。Qiitaデビューがこれでいいのかね？と言われそうですがいいんですよ。

上記の記事通りの手順で一応ConoHaのオブジェクトストレージをownCloudの外部ストレージとして連携させることは可能です。ConoHaを愛してやまない諸兄には狂喜乱舞のこととお喜び申し上げます。愛してないですか、そうですか。

で、ファイル名とかフォルダ名に日本語付けるのってどうよって思って生きてるｴﾝｼﾞﾆｬｰな方々だとピンと来ないと思うのですが、なんとこの方法だと日本語ファイル名のファイルはアップロード出来ないし、フォルダも掘れないし散々な気持ちにさせられるのですよ。

「これだからownCloudはXXXだぜ」とか思う前に待ってください！　ちょっとこれから紹介する方法を試してください！
そして感動してください！
当たり前のことが当たり前のように出来るだけなので感動しないかもしれませんが。

で、やり方を書こうとしてたら書いてもらいましたw　@ukitiyan あざっすー。
http://qiita.com/ukitiyan/items/5e65cbe6b1a14439bc9c

なのでここでは「じゃあ具体的に何したの？」って話をしようと思います。
まあ、つまりは外部ストレージ連携(Files External)プラグインの拡張の仕方ですね。
Visual Studio CodeをProxy配下で利用しているときにExtensionがインストールできないときの対処方法

現在問題が再発している模様

http://qiita.com/KuwabataK/items/f044b037bde50afbbca6#_reference-26d5b85ec3d8b2eafc11

上記を参考にしていただくとよいかと思われます。

# 問題

Visual Studio CodeをWindowsかつProxy配下で利用しているときにExtensionがインストールできない

https://github.com/Microsoft/vscode/issues/69

# 新対策

インストール後以下を設定すればOK

Proxyそのものの設定についてはPreferences→User Settingsにて設定してください。
以下は現状の私の設定状況です。

```json
// Place your settings in this file to overwrite the default settings
{
    //-------- HTTP configuration --------

	// The proxy setting to use. If not set will be taken from the http_proxy and https_proxy environment variables
	"http.proxy": "http://proxy.hoge.jp:18080",

	// Whether the proxy server certificate should be verified against the list of supplied CAs.
	"http.proxyStrictSSL": false,

}
```



# 旧対策(マージ済みのため現在は不要)

対処が完了した模様です。

https://github.com/Microsoft/vscode/issues/69#issuecomment-168728904

上記コメントをみればわかりますが簡単に対処方法を。

+ C:\Program Files (x86)\Microsoft VS Code\resources\app\out\vs\workbench\electron-main\sharedProcessMain.js を開きます
+ 8行目15531文字目に移動します
+ .host を .hostname に書き換えます
![](https://cloud.githubusercontent.com/assets/22350/12094696/4e595522-b30a-11e5-999d-e15f4ab4b636.png)

以上です。

Proxyそのものの設定についてはPreferences→User Settingsにて設定してください。
以下は現状の私の設定状況です。

```json
{
	"editor.fontFamily": "Consolas,Meiryo",
	"http.proxy": "http://hoge.hoge.jp:18080/",
	"https.proxy": "http://hoge.hoge.jp:18080/",
	"http.proxyStrictSSL": false,
	"markdown.styles": [
		"file://C:/WORKSPACE/Parsonal/markdown/css/github.css",
		"file://C:/WORKSPACE/Parsonal/markdown/css/user.css"
	]
}
```

社内Proxy配下で使うのを諦めていた人（かつ次回リリースまで待てない人）のご参考にしてください。
Project Eulerをシェル芸で解いてみる(Problem 6)

# 概要
Project Euler[^pe]は、数学的な問題解決能力を要求する、プログラミング問題集である。
一般的なオンラインプログラミングジャッジとは異なり、解答するプログラミング言語は、特に限定されていない。
フォームに入力した値だけで正誤を判別するため、適切なアルゴリズムさえ考案できれば、あらゆるプログラミング言語で解答することが可能である。
そのため、Web上では様々な手法による解答が公開されている。

しかし、シェル芸[^def]による解答は、私が探した限りでは、殆ど見つからなかった。
そこで、私自身の勉強も兼ねて、Project Eulerをシェル芸で解いてみることにした。
<br>

本記事では、Project EulerのProblem 6を、シェル芸で解いた際の過程を述べる。

# 実行環境
* Arch Linux (x86\_64, 4.3.3-2-ARCH)
* bash (4.3.42)
* GNU coreutils (8.24)
* gawk (4.1.3)

# 問題文
[原文 ([https://projecteuler.net/problem=6](https://projecteuler.net/problem=6))]

> The sum of the squares of the first ten natural numbers is,
>
>
```math
1^2 + 2^2 + ... + 10^2 = 385
```
> The square of the sum of the first ten natural numbers is,
>
```math
(1 + 2 + ... + 10)^2 = 55^2 = 3025
```
> Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is $3025 − 385 = 2640$.
> Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.

[日本語訳 ([http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%206](http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%206))]

> 最初の10個の自然数について, その二乗の和は,
>
```math
1^2 + 2^2 + ... + 10^2 = 385
```
> 最初の10個の自然数について, その和の二乗は,
>
```math
(1 + 2 + ... + 10)^2 = 3025
```
> これらの数の差は $3025 - 385 = 2640$ となる.
> 同様にして, 最初の100個の自然数について二乗の和と和の二乗の差を求めよ.


正答は、注釈[^ans]に記載する。

# 解法
```sh
1	#!/bin/sh
2	
3	(
4	    ### 二乗の和の算出式の生成
5	    seq -s ' ' 1 100 \
6	    | # 1~100の出力
7	    sed -e 's/[0-9]*/&^2/g' \
8	    | # 1~100のそれぞれについて、二乗の算出式の生成
9	    tr ' ' '+' \
10	    | # 二乗の総和算出式の生成
11	    sed -e 's/.*/(&)/' \
12	    ; # (二乗の和) - (和の二乗)を計算するために、二乗の和の前後にかっこを付加
13	
14	    ### 和の二乗の算出式の生成
15	    seq -s ' ' 1 100 \
16	    | # 1~100の出力
17	    tr ' ' '+'
18	    | # 1~100の総和算出式の生成
19	    sed -e 's/.*/(&)^2/' \
20	      # (総和)の二乗の算出式の生成
21	) \
22	| # (二乗の和)と(和の二乗)の出力
23	awk 'BEGIN {RS=""} {print $2,"-",$1}' \
24	| # (二乗の和)と(和の二乗)の差を求める算出式の生成
25	bc
26	  # (二乗の和)と(和の二乗)の差の出力
```

## 解法の解説
この解法による処理の詳細は、コードに記載してあるコメントの通りである。

# 雑記
* 「こんな別解があるよ」や、「こうすればもっと効率化できるぜ」、「こう書けばエレガントですわよ」等の意見がありましたら、気軽に教えていただけますと幸いです🐺
* 現在の進捗状況 -> [https://github.com/gin135/Project_Euler/tree/master/sh](https://github.com/gin135/Project_Euler/tree/master/sh)
<br>

* 今回は、解説は投げやり...
    - でも、今回の解答は、けっこうエレガントに出来たんじゃないかなと、自分でも思う。
    - だからこそ、コメントだけで解説が完結している訳だし。
    - とはいえ、 ~~怖い~~ 熟練シェル芸人さんの手に掛かれば、もっと ~~変態な~~ 素敵な方法が出てきそうな予感。

- - -

[^pe]: About - Project Euler ([https://projecteuler.net](https://projecteuler.net))
[^def]: シェル芸の定義 >> シェル芸 - 上田ブログ ([https://blog.ueda.asia/?page_id=1434](https://blog.ueda.asia/?page_id=1434))
[^ans]: 25164150
Laravel CollectiveのFormのSelectで「選択してください」等の一番上の表示を追加する

ちょっとしたTIPSです。知ってる人は知ってる。Laravelある程度分かった人にとってはなんでもない話。

## 環境

* Laravel5系(5.2まで確認済み)
* LaravelCollective 5.1,5.2で確認


## 解決策

+でくっつける

```php
{!! Form::select('user_id', ['' => '選択してください']+array_pluck($users, 'name', 'id'), old('user_id')) !!}
```

※空値が含まれないのが前提

## 結果

```html
<select class="form-control" name="user_id">
    <option value="" selected="selected">選択してください</option>
    <option value="1">ななしさん</option>
    <option value="2">ほげほげさん</option>
</select>
```

## ver5.4.2からは

第4引数に配列でplaceholderを設定することで初期表示を設定することが可能になったようです。


```php
{!! Form::select('user_id'
    , array_pluck($users, 'name', 'id')
    , old('user_id')
    , ['placeholder' => '選択してください']) !!}
```
Login setting on CentOS etc [memo]

# Login setting .. etc

## Key generate
ssh-keygen -t rsa -C "xxx@yyy.zzz"
※MacOSで利用する場合
puttygenなどでOpenSSH形式に変換してパーミッションをオーナーのみの権限に変更

## User Add
```
useradd xxx -d /home/xxx
mkdir /home/xxx/.ssh/
cp /root/.ssh/authorized_keys /home/xxx/.ssh/authorized_keys
chown -R xxx. /home/xxx/.ssh/authorized_keys
```

## Login setting
```
vi /etc/sshd_config
PermitRootLogin no 
RSAAuthentication yes
PasswordAuthentication no
```

### sshd restat
```
/etc/init.d/sshd restart
```

## sudo setting
```/etc/sudoers
xxx ALL=(ALL) ALL
```

## yum update
```
yum update
```

## tools install
```
yum install sysstat
yum -y install vim-enhanced
yum -y install wget
yum install gcc make openssl-devel 
```
よくgitのコマンドを忘れる方のために [Memo]

それは自分です。

# git memo


## 直前のcommitを取り消したい
```
git reset --hard HEAD^
```

## githubのpush先レポジトリを変更したい場合
```
git remote set-url origin https://github.com/xxx/yyy.git
```

## 過去のコミットにおけるCommiterとAuthorを全て変更
```
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='xxx'; GIT_AUTHOR_EMAIL='zzz@example.com'; GIT_COMMITTER_NAME='xxx'; GIT_COMMITTER_EMAIL='zzz@example.com';" HEAD 
```
FreeBSDにapache solrをインストールする

pkgからapache-solrをインストールしたらちょっと手こずったのでメモ

# インストール

```
sudo pkg install apache-solr bash
```

/usr/local/bin/solrがbashを前提にしてるのでbashも必要

# シンボリックリンクを張る

```
sudo ln -s /usr/local/www/apache-solr /usr/local/server
```

ディレクトリ構造が決め打ちになっててオプションとかでは対応できない。

# 起動

```
sudo /usr/local/bin/solr start
```

pkgが作るrcスクリプトは(たぶん)古いバージョンにしか対応していない

# コンソール

左側のメニューのThread Dumpを選ぶと死ぬ
gitでtexファイルを管理するときの.gitignoreの書き方メモ

- .texはコンパイル時に大量の中間ファイルが生成される
 - PDFと.texファイルだけ版管理したい
 - 一つ一つ.gitignoreに書くのはめんどくさい
- 全部無視してから例外というのができる


``` .gitignore
tex_file_name.*
!*.tex
!*.pdf
```
Mac elcapitanでマウス利用時にトラックパッドを無効にする方法

ソファーに座ってまったり作業時はトラックパッドを使い、
デスクでがっつり作業する際はマウスを使います。
マウス利用時にうっかりトラックパッドを触ってミスするのを避けたい。
システム環境設定で設定可能でした。

![システム環境設定.jpg](https://qiita-image-store.s3.amazonaws.com/0/107499/ede45c3e-8490-d483-9ead-f350aa45027b.jpeg)

![アクセシビリティ.jpg](https://qiita-image-store.s3.amazonaws.com/0/107499/76b79e07-47c6-8a24-200a-a080c9d3b6f9.jpeg)

（´-`）.｡oO（設定して気づいたけど、無意識にトラックパッドで操作しようとして無反応であれ？ってなることも多々有る・・・）
外部・内部ネットワークからのSSH接続（サーバー：Ubuntu⇔クライアント：Mac, WIndows）

#目的
Ubuntuのコンピュータに、外部ネットワーク、同一LAN内からのSSH接続をする。
個人メモ。鍵認証は含みません。

#内容
・SSHサーバーの構築（Ubuntu)
・同一ネットワークからのクライアントの接続方法
・外部ネットワークからのクライアントの接続方法

#環境
- Ubuntu14.04 LTS　（SSHサーバー側）
- OSX EI Capitan （接続用）
- Windows7（接続用）
- ルーター　ZXHN（NURO光回線）

#SSHサーバーを構築する
##UbuntuでのSSHサーバーのセットアップ
- Terminalを起動
- 以下のコマンドを入力

```
sudo apt-get install openssh-server 
```
- 以下の情報をメモしておく

LAN内IPアドレス

```
hostname -I
```

or

```
/sbin/ifconfig/
```

ホスト名

```
hostname
```
MACアドレス 

```
/sbin/ifconfig/
```

##同一LAN内の別コンピュータからSSH接続する
###Mac側からSSH接続をする
　1. Terminalを起動
　2. 以下のコマンドを入力

```
ssh <username>@<hostname or IP address>
```


###Windows側からSSH接続をする

1. SSHクライアントをインストール
-PuTTy　（今回使用）
-TeraTerm

2. クライアント側でホスト名 or IPアドレスを入力して、接続
   ホスト名、IPアドレス取得はMac側の＜補足事項＞と同じ

##外部ネットワークからSSH接続する

内部LANとは異なり、外部ネットワークから接続する場合ホスト名・LAN内のIPアドレスでは接続出来ません。
このため、グローバルIPアドレスからLAN内コンピュータにアクセスするため、ルーターでの変換設定が必要になります。

### 1. グローバルIPアドレス・LAN内部のIPアドレスの取得

Ubuntu環境で実施

・グローバルIPアドレス

```
curl inet-ip.info
```

・LAN内のIPアドレス

```
hostname -I
```

###2. LAN内のアドレスを固定化する
DHCPでアドレスが固定されていない場合に行う。ルーターの設定画面で行う必要があります。
ブラウザからhttp://192.168.1.1/ または http://192.168.0.1/ で接続可能な場合が多いです。

自分のルーター設定環境（ZXHN F600T）の場合は以下の項目から設定する。

```
ネットワーク＞LAN＞DHCP固定アドレス割当
```
SSHサーバーを入れたUbuntuのLAN内のIPアドレス、MACアドレスを入力する。

###3. ポートフォワーディングの設定

外部接続情報と、LAN内の環境を変換する。

- アプリケーション＞ポートフォワーディング
    - WAN接続
        - 複数ある場合は、”ステータス>>ネットワークインタフェース情報>>WAN接続情報”の接続情報を確認
    - 外部ホストIPアドレス：グローバルIPアドレス
    - (開始)外部ポート番号／（終了）外部ポート番号：22
    - 内部ホストのIPアドレス：LAN内IPアドレス
    - (開始)内部ポート番号／（終了）内部ポート番号：22
    - ”有効にする”をチェック

- アプリケーション＞アプリケーションリスト
    - "アプリケーションを追加するには、ここをクリックしてください。"をクリック
    - 任意のアプリケーション名を設定し、保存
    - （開始）WANポート	／（終了）WANポート：22
    - （開始）マッピングポート／（終了）マッピングポート：22
    
- アプリケーション＞ポートフォワーディング（アプリケーションリスト）
    - 内部ホストのIPアドレス
    - アプリケーション：上記で設定したアプリケーション名
    

###接続・確認テスト

・ポート開放の確認
外部LAN環境のパソコンから以下のコマンドを入力

```
nmap <グローバルIP>
```

22番ポートが表示されていたら、ポートが開放されている事がわかる。

・MAC側からのSSH接続確認

```
ssh <username>@<global ip address>
```

・Windows側からのSSH接続確認

Windows側から、PuTTyの場合グローバルIPアドレスを入力して接続する。