OmniAICreator/Qiita-1.07M huggingface dataset:
Formulaのバージョンを指定してインストールする方法

# 要件

imagemagickを昔のバージョン指定してインストールしたい

# 方法

```
# brew tapで公式にないFormulaを追加できる。
# brew tap ユーザ名/リポジトリ名
$ brew tap homebrew/boneyard

$ brew versions imagemagick

6.9.0-10 git checkout c809b35 /usr/local/Library/Formula/imagemagick.rb
6.9.0-9  git checkout 3574531 /usr/local/Library/Formula/imagemagick.rb
6.9.0-3  git checkout 8b2b988 /usr/local/Library/Formula/imagemagick.rb
6.8.9-8  git checkout 9efbcda /usr/local/Library/Formula/imagemagick.rb
6.8.9-7  git checkout fc0f13b /usr/local/Library/Formula/imagemagick.rb
6.8.9-5  git checkout e15674a /usr/local/Library/Formula/imagemagick.rb
6.8.9-1  git checkout 1fe28f8 /usr/local/Library/Formula/imagemagick.rb
6.8.8-9  git checkout b84f779 /usr/local/Library/Formula/imagemagick.rb
6.8.7-7  git checkout e68e443 /usr/local/Library/Formula/imagemagick.rb
6.8.7-0  git checkout 14a1fa8 /usr/local/Library/Formula/imagemagick.rb
6.8.6-3  git checkout 870d5e9 /usr/local/Library/Formula/imagemagick.rb
6.8.0-10 git checkout 321b293 /usr/local/Library/Formula/imagemagick.rb

$ cd /usr/local/

$ git checkout 14a1fa8 /usr/local/Library/Formula/imagemagick.rb

$ brew install imagemagick
```
iOS UIViewControllerで呼ばれるメソッド

iOS開発をObjective-cで始めたのでわかったことを書こうと思います。

元ネタは[こちら](http://blog.77jp.net/iphone%E9%96%8B%E7%99%BA-uiviewcontroller-%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB-viewdidload-viewwillappear-viewdidappear-viewwilldisappear-viewdiddisappear-ios-%E9%80%86)

---

```
init(インスタンス作成時に呼び出したイニシャライザ)
```
　　↓

```
viewDidLoad
　・View が初めて呼び出される時に1回だけ呼ばれます。
　・アプリ起動後に初めて当Viewが表示された場合に1度だけ呼ばれます。
```
　　↓

```
viewWillAppear
　・View が表示される直前に呼ばれるメソッド
　・タブ等の切り替え等により、画面に表示されるたびに呼び出されます。
　・タブが切り替わるたびに何度でも呼ばれます。
```
　　↓

```
viewDidAppear
　・View の表示が完了後に呼び出されるメッソド
　・タブ等の切り替え等により、画面に表示されるたびに呼び出されます。
　・タブが切り替わるたびに何度でも呼ばれます。
```
　　↓

```
viewWillDisappear
　・View が他のView (画面から消える) 直前に呼び出されるメッソド
　・View が他のView (画面から消える) 直前に呼び出されるメッソド
　・タブが切り替わるたびに何度でも呼ばれます。
```
　　↓

```
viewDidDisappear
　・View が他のView (画面から消えた) 非表示後に呼び出されるメッソド
　・View が他のView (画面から消える) 直前に呼び出されるメッソド
　・タブが切り替わるたびに何度でも呼ばれます。
```
Bem

## HTML

### デフォルト

![default.png](https://qiita-image-store.s3.amazonaws.com/0/21399/737f76ab-d5fc-b3f4-9d60-7412f0afc58c.png)

```jade:jade
div.formItem
  dl.formItem__contents
    dt.formItem__heading
      span.formItem-label 必須
      br
      span お名前
    dd.formItem__input
      input(type="text" name="firstName" placeholder="例：進学")
    dd.formItem__input
      input(type="text" name="lastName" placeholder="例：花子")
```

### エラー

![error.png](https://qiita-image-store.s3.amazonaws.com/0/21399/4cc8d200-8616-edb6-76ee-bb13adabfb5e.png)

```jade:jade
div.formItem
  dl.formItem__contents
    dt.formItem__heading
      span.formItem-label 必須
      br
      span お名前
    dd.formItem__input--error
      input(type="text" name="firstName" placeholder="例：進学")
    dd.formItem__input--error
      input(type="text" name="lastName" placeholder="例：花子")
```

## CSS

```sass:stylus
.formItem
  .formItem__input
    border 1px solid #666
    border-radius 5px
    background #fff

  .formItem__input--error
    @extend .formItem__input
    background #fdd
```
Compass で compressed 出力した BOM 付き css を単純結合するとスタイルが効かなくなる


# 問題

Compass で output_style = :compressed で scss をコンパイルすると、`@charset` 指定が消されて BOM(Byte Order Mark)が付与される。これは Sass の仕様らしい([このへん](https://github.com/sass/sass/blob/d26e6fa17f55d64278c9f09b5ace5e256e363e3f/lib/sass/util.rb#L833-L838))。

で、その css を単純に読みこむだけなら、困ることもないのだが、HTTP リクエスト数を減らす目的で、出力したファイル群を単純結合したりすると、ファイルの途中に BOM(U+FEFF) が含まれることになり、ブラウザ側でスタイルを解釈できないという問題がある。

![bomcss2.png](https://qiita-image-store.s3.amazonaws.com/0/1329/65d6ea80-4439-3f37-8890-28e129823632.png "bomcss2.png")


![bomcss.png](https://qiita-image-store.s3.amazonaws.com/0/1329/f4a5744e-71bf-818d-bc16-3eb499d8a7df.png "bomcss.png")

# 解決策

結合時にフィルタ処理などで冒頭以外の BOM を削除してやれば良い。
PHP だと以下のように書ける。

```php
preg_replace('/(?<=.)\x{FEFF}/us', '', $combined_css);
```

状況によっては他の(UTF8 とか UTF16-LEとかの)BOM が付く場合もあるので、適当に対応してやる必要があるかも知れない。

# 参考

http://morilog.com/memo/sass_compass_error_3/
slackとIRCをIRCボットで連携してみた

もともとプライベートなネットワーク内でコミュニケーションツールとしてIRCを利用していたが、外部とのやりとりでslackも利用することになった。
その際にslackとIRCを連携できたら便利だなと思ってIRCボットで連携してみた。
この文書では連携内容をメモしておく。

同じようなことをされている方がいた！
[Scala - SlackとIRCを相互リレーする話 - Qiita](http://qiita.com/sifue/items/4fd6efee608da0cc849d)

# 連携例

IRCボットでこんな感じに連携してみた。

slack側
![slack_irc_bot.png](https://qiita-image-store.s3.amazonaws.com/0/16768/e459ab80-69e1-627e-73d0-2f6776f8ca5e.png)

最後2行がIRCでの発言

IRC側
![irc_slack_irc_bot.png](https://qiita-image-store.s3.amazonaws.com/0/16768/93458712-9ecb-67a6-7f3e-e6e10e0319d8.png)

最後2行以外がslackでの発言

# システム構成

![slack_irc_bot.png](https://raw.githubusercontent.com/mechamogera/MyTips/master/images/slack_irc_bot/slack_irc_bot.png)

IRCボットはrubyで作成

# 特徴

## IRCへの連携

* ボットの名前をなるべくslack上の発言者の名前にあわせて変更してslack上の発言を行う
 * ボットの名前として_(アンダーバー)をslackの名前の最初につける
 * IRC上で名前が被った場合はプレフィックスに_(アンダーバー)が増えて行く
* マルチスレッドで複数のボットを動かして名前をキャッシュすることができる
 * 必要な場合は一番古い発言を行ったボットの名前が変更される

メリット

 * ボット名固定でslack上の発言者の名前をコメント上に表示する場合はキーワードにひっかかる場合があるがそういうことがない

デメリット

 * slack上の名前をIRCのnicknameの仕様に無理やりあわせるため発言者がわかりにくくなる場合がありうる
 * ボットの数によっては頻繁に名前が変わってIRC上に通知されるためうざい場合がある
 * マルチスレッドなボット間で連携がいるためコードがやや複雑になる

## slackへの連携
 
 * IRCの発言者の名前の前後に:をつけるのでslack上でカスタムアイコン登録すると発言者がわかりやすい
 * IRCの発言者の名前のサフィックスの_は削除する
  * LimeChatで名前が被った場合にサフィックスに_をつける仕様を意識

## SQS越しの連携

* メリット：外には出ていけるが外からアクセスできないようなプライベートなネットワークにあるIRCとも連携可能
* デメリット：AmazonWebService環境が必要になる

# ソースコードと使いかた

Github上に配置
https://github.com/mechamogera/slack_irc_bot
基礎for初心者 Requiredのエラー

初心者って、小さいエラーでも分からない事あるじゃないですか。
これもその１つ。たまにエラーで、Required〜〜〜みたいなのあるじゃないですか。

例えば
```Required: android.support.v4.app.Fragment```

Foundと一緒に出てくるので、このFoundを探し、そこのimportを書き換えます。
例えば、今回のエラーの原因は
```android.app.Fragment```
になっているからでした。
そういう時は、指示された通り、
```Required: android.support.v4.app.Fragment```
に書き換えて上げましょう。最初の```android.app.Fragment```は消しましょう。

初心者だと、とにかく何でも躓く。とにかく、失敗の積み重ねかな。
MacでFnキーを押すとGyazoを起動する設定

Macで特定キーを押すとアプリケーションを起動する設定のやり方。
Fnキーを押すとGyazoが起動する設定を例に説明する。

[![Gyazo](http://i.gyazo.com/83516a50f5f5ad15b4f1e1182f8012a6.png)](http://gyazo.com/83516a50f5f5ad15b4f1e1182f8012a6)

## 前提
[karabiner](https://pqrs.org/osx/karabiner/) をインストールしていること

## やり方
`~/Library/Application\ Support/Karabiner/private.xml` にこのような設定を書く。

``` xml
<?xml version="1.0"?>
<root>
  <vkopenurldef>
    <name>KeyCode::VK_OPEN_URL_GYAZO</name>
    <url type="file">/Applications/Gyazo.app</url>
  </vkopenurldef>

  <item>
    <name>fn to Gyazo</name>
    <identifier>remap.fn2gyazo</identifier>
    <autogen>
      --KeyToKey--
      KeyCode::FN,
      KeyCode::VK_OPEN_URL_GYAZO
    </autogen>
  </item>
</root>
```

karabinerの設定メニューを開いて「Reload XML」して、設定を有効にする。

![](http://i.gyazo.com/ed4ac5b028ea2a1cdbb9e76f55508bed.png)
![](http://i.gyazo.com/6de01c0157c1c3fab4bdbd100415786b.png)
[Linux] zipコマンド備忘録

よく忘れるので。

 * /path/to/hogehoge と同階層に /path/to/hogehoge.zip をつくる

```shell-session
$ cd /path/to/hogehoge
$ zip /path/to/hogehoge.zip *
```

 * /path/to/hogehoge と同階層に パスワード付きの/path/to/hogehoge.zip をつくる

```shell-session
$ cd /path/to/hogehoge
$ zip -P password /path/to/hogehoge.zip *
```
[解決] Nexus5のロック解除音を消したい

少し前からロック解除時に(ロック時にも)「トゥルル」みたいな音が出るようになって、音の設定のところを変えてみたが変わらなかった。

`設定 > 音と通知 > その他の音`の設定はこんな感じ。
![Screenshot_2015-03-20-09-47-00.png](https://qiita-image-store.s3.amazonaws.com/0/55938/a0a1cf1e-8091-03d6-f927-d5e759959f3f.png "Screenshot_2015-03-20-09-47-00.png")


ローテーションした時とかにも鳴って、かなりうざい。いろいろ検索してると、`NFC`の設定がONになってると音がなるらしい。

`設定 > もっと見る`の`NFC`の設定をOFFにすると音が消える。
![Screenshot_2015-03-20-09-47-13.png](https://qiita-image-store.s3.amazonaws.com/0/55938/ef9f5f97-4b05-48e0-63c2-abc5f08424f9.png "Screenshot_2015-03-20-09-47-13.png")
Alamofireでダウンロードのdestinationを変更する

##ファイル名を変更してダウンロードする方法

```swift
let path = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
let newPath = path.URLByAppendingPathComponent("new_name.png")
Alamofire.download(.GET, "http://example.com/images/old_name.png", { _ in newPath })
```


##DocumentDirectoryにフォルダーを作ってダウンロードする

```swift
//フォルダを作る
var err: NSErrorPointer = nil
let docPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let imgPath = docPath.stringByAppendingPathComponent("img")
if NSFileManager.defaultManager().fileExistsAtPath(imgPath) == false{
    NSFileManager.defaultManager().createDirectoryAtPath(imgPath, withIntermediateDirectories: false, attributes: nil, error: &err)
}


//download
let path = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
let newPath = path.URLByAppendingPathComponent("img/new_name.png")
Alamofire.download(.GET, "http://example.com/images/old_name.png", { _ in newPath })
```
ShinobiLayer: sftpを使ったSoftLayer Object Storageへの簡易アクセス方法

#はじめに
過去に以下の方法を紹介してきましたが、これは5GBの壁を越えてファイルの転送をしたいからです。

* [Cyberduck(GUI)を使ったSoftLayer Object Storageへのアクセス方法](http://qiita.com/testnin2/items/1868f9f5775ae06afc26)
* [python-swiftclientを使ったSoftLayer Object Storageへのアクセス方法](http://qiita.com/testnin2/items/c588da9c1658a2f176a8)
* [SoftLayer Object Storageの制約](http://qiita.com/testnin2/items/5511c493a1499112dfa3)

5GB以下のファイルを取り扱うだけで良いのであれば、sftpを利用するのが一番簡単かもしれません。**ただし、5GBを越えるファイルを転送すると、5GBを超過するタイミングで転送が止まってしまうので注意してください。**

# Object Storageへの接続情報の確認
SoftLayerのCustomer PortalからUsernameとPasswordを確認しておきます。
![objectstorage01_mosaik.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/1cff972f-aa5a-6512-e004-7ed1c8ec15ee.jpeg)
![objectstorage02_mosaik.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/aa3ce0f7-0753-d40f-fcb0-c5aa310dfb90.jpeg)

# Linuxのsftpコマンドによるアクセス
下記では、ログイン後、コンテナ内を移動したりファイルをアップロードする例を示します。

* xxxxxxxxの箇所は、Username
* passwordの箇所は、API Key

```
[root@tok01 ~]# sftp xxxxxxxx@tok02.objectstorage.softlayer.net
Connecting to tok02.objectstorage.softlayer.net...
xxxxxxxx@tok02.objectstorage.softlayer.net's password:
sftp> ls
cachetest      shinobilayer
sftp> cd shinobilayer
sftp> ls -l
-rw-------    1 65535    65535         244 Feb 20 16:44 index.html
-rw-------    1 65535    65535         218 Feb 20 16:45 menu.html
-rw-------    1 65535    65535       24237 Feb 20 16:45 ninja.jpg
-rw-------    1 65535    65535           0 Mar 20 00:01 test.data
-rw-------    1 65535    65535          93 Feb 20 16:45 top.html
sftp> pwd
Remote working directory: /shinobilayer
sftp> lpwd
Local working directory: /root/test
sftp> lls -l
total 1028
-rw-r--r-- 1 root root 1048576 Mar 20 09:25 test.data
sftp> put test.data
sftp> ls -l
-rw-------    1 65535    65535         244 Feb 20 16:44 index.html
-rw-------    1 65535    65535         218 Feb 20 16:45 menu.html
-rw-------    1 65535    65535       24237 Feb 20 16:45 ninja.jpg
-rw-------    1 65535    65535     1048576 Mar 20 00:28 test.data
-rw-------    1 65535    65535          93 Feb 20 16:45 top.html

```

（参考）http://knowledgelayer.softlayer.com/procedure/connect-object-storage-using-sftp

# WinSCPによるアクセス

* xxxxxxxxの箇所は、Username
* passwordの箇所は、API Key

を入力します。

![WinSCP.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/99fcd90b-9362-4580-899f-25666c59f393.jpeg)
![WinSCP2.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/b300277c-f1f4-3f9f-46ef-85f8f4fb3b51.jpeg)

（参考）http://knowledgelayer.softlayer.com/procedure/accessing-object-storage-using-winscp

# 終わりに
Cyberduckやpython-swiftclientは敷居が高いという方は、是非sftpでのアクセスを試してみてください。ちょっとしたことにはsftpで十分だと思います。
2015-03-20 行連結 > C, C++ / bash / Fortran(固定形式) / Fortran(自由形式) > 行末コメントを"能"という文字で終わった時に失敗する | ハマり文字: 表、予、能、申、...


[こちらの投稿](http://qiita.com/lazynick/items/1d7ed671f938845c8b40)
を見て、ふと自分が使用する言語の行連結についてまとめたくなった。


| 言語 | 行連結の書き方 | Link |
|:-----------|------------:|:------------:|
| C, C++ | 行末に\ | [Link](http://dev.activebasic.com/egtra/2008/06/12/145/) |
| bash | 行末に\ | [Link](http://qiita.com/lazynick/items/1d7ed671f938845c8b40) |
| Fortran(固定形式) | 6桁目に継続行の印をつける | [Link](http://www.str.ce.akita-u.ac.jp/~gotou/zyouhou/f90/sec1.html) |
| Fortran(自由形式) | 行末に& | [Link](http://www.jamstec.go.jp/esc/simschool/f90learning/chap2/page1.html) |

以前、行連結で失敗したものとしては、行末コメントを"能"という文字で終わった時、使用していたコンパイラでは"能"の2バイト目を"\"と解釈して行連結になり、次の行がコメントになってしまっていた。参考2には他の漢字も記載されている ([参考1](http://yoshihashi3.blogspot.jp/2010/03/blog-post_25.html), [参考2](http://www.shtml.jp/mojibake/sjis_cgi.html))。

```c:failCode.c
...
funcFirst(); // 1つめの機能
funcSecond();
// funcSecond()がコメントになってしまう
...
```

きちんとしたコンパイラならこういう問題は起きないかもしれないが、以後、こういうコメントを書かないよう注意している。
windows 10で認証なしでファイル共有

認証なしで

* windows10で作った共有フォルダにwindows8.1にアクセス、
* NASにwindows10からアクセス

ができた。

* 従来の共有フォルダにアクセスするに以下チェック
  * `40ビット暗号化または56ビット暗号化を使用するデバイスのためのファイル共有を有効にする`

## ネットワークと共有センター

![r9.png](https://qiita-image-store.s3.amazonaws.com/0/25728/519be21b-75c8-58ab-e94f-6ff0d5b466fb.png)

![r9-2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c9901fab-acbf-1750-76ee-97ee31c15ccb.png)

## フォルダの共有設定

![r9-10.png](https://qiita-image-store.s3.amazonaws.com/0/25728/57e431b2-3ef6-3362-035e-664318a036fc.png)

なお、既存のファイルが見れない場合、Guest権限がないだけ
To do tail recursion with Python2

末尾再歸にて 最適裡に 實行するには class を 作りて @ より 始まる　meta programming を おこなふと いふ。 (ref: http://code.activestate.com/recipes/496691/)

```python:tail_recursive.py
class tail_recursive (object):

  def __init__(self, func):
    self.func = func
    self.firstcall = True
    self.CONTINUE = object()

  def __call__(self, *arguments, **keywords):
    if self.firstcall:
      func = self.func
      CONTINUE = self.CONTINUE
      self.firstcall = False
      try:
        while True:
          result = func(*arguments, **keywords)
          if result is CONTINUE: # update arguments
            arguments, keywords = self.argskwd
          else: # last call
            return result
      finally:
        self.firstcall = True
    else: # return the arguments of the tail call
      self.argskwd = arguments, keywords
      return self.CONTINUE
```

これを @tail_recursive として 用ゐる。 たとへば 次:

```python
@tail_recursive
def sum(n, acc=0):
  if n == 0:
    return acc
  else:
    return sum(n - 1, acc + n)
```

@tail_recursive 有らざるも 動き得。 されども その stack すぐに overflow す。
MacでOpenBLAS版Rをインストール


homebrewの環境が前提

```
% brew update
% brew install gcc # fortranが必要なため
% brew tap homebrew/science # リポジトリ追加
% brew install Caskroom/cask/xquartz
% brew install openblas --build-from-source
% brew link openblas --force # /usr/local/ にシンボリックリンクがないと警告があった場合
% brew install r --with-openblas
% brew cask install rstudio
```

RStudioの画面が真っ白な場合、```/Library```シンボリックリンクを貼る
```% sudo ln -s /usr/local/opt/r/R.framework /Library/Frameworks
```

### rJava

ロードできないエラーが出たので

```
Error :  .onLoad は loadNamespace()（'rJava' に対する）の中で失敗しました、詳細は: 
  call: dyn.load(file, DLLpath = DLLpath, ...) 
  error:  共有ライブラリ '/usr/local/Cellar/r/3.1.3/R.framework/Versions/3.1/Resources/library/rJava/libs/rJava.so' を読み込めません: 
  dlopen(/usr/local/Cellar/r/3.1.3/R.framework/Versions/3.1/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
  Referenced from: /usr/local/Cellar/r/3.1.3/R.framework/Versions/3.1/Resources/library/rJava/libs/rJava.so
  Reason: image not found  
 エラー:  パッケージ ‘rJava’ をロードできませんでした 
```

次のようにシンボリックリンクを貼った

```
% sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/server/libjvm.dylib /usr/lib
```

参照
- [Mac に OpenBLAS 版の R をインストールする](http://qiita.com/mrkn/items/eb1036e0681be4fc4f7b)
- [MacOSX に homebrew で R をインストール](http://qiita.com/dkkoma/items/8b45ce94c2c5d89d567f)
- [【Homebrew】インストールしたパッケージのシンボリックリンクが作成されない場合](http://www.task-notes.com/entry/20141130/1417275206)
remastersys

## 参考

* [日記/2015-02-20 - ORCA 簡単 インストール](http://yukeikai.net/orca/index.php?%C6%FC%B5%AD%2F2015-02-20)
* [CentOS - PXEブート用にtftp・DHCPサーバー搭載1CD Ubuntuを作った - Qiita](http://qiita.com/tukiyo3/items/e07988dfe3c4655ec850)の時使ったメモ

## ミラーサイトからダウンロード

* [remastersys-gui_3.0.4-1_amd64.deb](ftp://ftp.gwdg.de/linux/easyvdr/mirror/remastersys/ubuntu/remastersys-gui/index.php%3FKEY=filename&ORDER=SORT_DESC)

* [remastersys_3.0.4-2_all.deb](ftp://ftp.gwdg.de/linux/easyvdr/mirror/remastersys/ubuntu/remastersys/index.php%3FKEY=filename&ORDER=SORT_DESC)


## インストール

```bash:
apt-get install isolinux
```

```bash:
dpkg -i remastersys_3.0.4-2_all.deb remastersys-gui_3.0.4-1_amd64.deb
apt-get -f install
```

## remastersys使い方

* remastersys clean
* remastersys backup
raspberry pi raspbian 導入メモ

#準備
raspberrypi B+
USBマウス
USBキーボード
マイクロSD
SDカードリーダー
HDMIケーブル
ディスプレイ
wifiドングル

#RaspbianをSDカードに入れる
noobのが楽　osもいっぱい入ってます
でもその分で容量拡張できないので
Raspbianいれます

win32DiskImagerで書き込み



#初回ID.PASS
ID:pi
PASS:raspberry


#初期設定 raspi-config
[こちら](http://qiita.com/starswirl_k/items/3076673d351d1f782046)


#CUIコマンド
[まとめ](http://qiita.com/starswirl_k/items/2c4df3c5ef81aec66288)


#LCDシールド
[waveshare 3.5](http://qiita.com/starswirl_k/items/62fab45afccf8ffff2f7)
raspberrypiで使うCUIのメモ

使うのまとめていきます

#sudo
Super User DO
Switch User DO
管理者権限的な？

#apt
$ apt-cache search　[]
検索
$ apt-cache -n search []
パッケージ名検索
$ apt-cache show []
詳細を表示
$ sudo apt-get install []
パッケージをインストール
$ sudo apt-get --reinstall []
再インストール
$ sudo apt-get purge eject []
パッケージの除去

#cd ls
$ pwd
自分のいるディレクトリ(カレントディレクトリ)を知る

$ cd 
ホームディレクトリに移動
$ cd [移動先]
指定したディレクトリに移動

$ ls
カレントディレクトリのファイルを表示
$ ls []
指定先ディレクトリのファイル表示

#dir cp
ディレクトリ
$ mkdir　[作成するdir名]
カレントディレクトリにディレクトリ作成
$ rmdir [除去するdir名]
指定したディレクトリを除去

$ cp [コピー元名] [作成するコピー名]
指定したファイルをコピーし指定した名前で作成する

$ mv [移動するファイル名] [移動先]
指定先にファイルを移動する

$ rm [ファイル名]
ファイル除去(ファイル名の前にアドレスを書けば　別のディレクトリでもおｋ
#Bash
**Ctrl+a**
カーソルを行の先頭まで移動
**Ctrl+e**
カーソルを行の末尾まで移動
**Ctrl+f**
→
**Ctrl+b**
←
**Ctrl+d**
Delete
**Ctrl+h**
Backspace
**Ctrl+p**
↑
**Ctrl+n**
↓
**Ctrl+r**
履歴を逆順に検索
**Tab**
コマンドやファイルの補完
候補が1個なら表示
2個以上ならTab2回押しで候補表示
**Ctrl+l**
画面のクリア

#アプリ起動
$ [プログラム名]
環境変数PASSで指定されたディレクトリにあるプログラムを指定し実行

$[ブラウザアプリ名] [URL]
指定したURLを開く

#nano
$ nano [テキスト名.txt]
指定したファイルを開く

**Ctrl+O**
保存
**Ctrl+X**
終了
**Ctrl+W**
検索(Atl+Wで移動

**Alt+Uの追加**
$ cd
$ nano .bashrc

```lang:bashrc
　alias nano="nano -u"       ←追加
 #some more ls aliases
```
$ source .bashrc

**Alt+U**
編集作業を元に戻す
**Alt+\**
ファイルの先頭へ
**Alt+/**
ファイルの末尾へ

#vi vim
Vim(Vi IMproved)

**GVimのインストール**
$ sudo apt-get install vim-gnome

$ vi []
vi起動

##ノーマルモード
**Esc2回押し**
ノーマルモードに戻る
カーソルの移動
コピーペースト
他モードへの移行
**方向キー**
上 k
下 j
左 h
右 l

**ZZ**
編集した内容を保存し終了
**ZQ**
保存せず終了

**0**
行の先頭へ
**$**
行の末尾へ
**G**
最後の行へ
**G [行数]**
指定した行数へ
**x**
文字の除去(Del
**dd**
カーソルのある行を除去
**P**
ddで除去した行をカーソル位置前に書き戻す
**p**
ddで除去した行をカーソル位置後に書き戻す
**u**
直前のコマンドを取り消す（元に戻す
**[数字][コマンド]**
指定した回数コマンドを繰り返す
**/[検索する文字]**
 **n** 続けて検索
 **?** 逆順に検索
**:e [ファイル名]**
新規ファイル
**:w**
上書き保存
**:r**
名前をつけて保存

**vimtutor**
vimチュートリアル





##挿入モード
**i**
挿入モード
**a**
挿入モード(カーソルの右隣の位置から書き込む)
**Esc**
ノーマルモードに戻る









#よく使うの

**GUI起動**
startx

**設定**
raspi-config

**システムアップデート**
$ sudo apt-get update
$ sudo apt-get upgrade

**CUIからシャットダウン**
$ sudo shutdown -h now
または
$ sufo poweroff

$ sudo halt 
**CUIから再起動**
$ sudo shutdown -r now
または
$sudo reboot


**リモート接続**
ip確認
$ ifconfig

**wifiドングル**
$ sudo nano /etc/network/interfaces

```iface wlan0 inet manual```
から
```#iface wlan0 inet manual
iface wlan0 inet dhcp```
にする

```wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf```
から
```#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf```

ctrl+o保存
ctrl+x終了
Juniper(EX及びQFX series)でのvlan設定

対象機器:EX4300,QFX5100
memo:EX4300及びQFX5100はEnhanced Layer 2 Softwareとなり、EX4200等の従来のJUNOSとはVlanの設定が一部異なります。
URL:https://www.juniper.net/documentation/en_US/junos14.2/topics/task/configuration/getting-started-els.html

1.accessの設定

■設定例
interfaces {
    ge-0/0/0 {
        unit 0 {
            family ethernet-switching {
                port-mode access;
                vlan {
                    members vlan100;
                }
            }
        }
    }
}
vlans {
    vlan100 {
        vlan-id 100;
    }
}


2.untagとtag vlanを混在させる場合

■設定例
interfaces {
    ge-0/0/0 {
        unit 0 {
            family ethernet-switching {
                port-mode trunk;
                vlan {
                    members [ vlan100 vlan101 vlan102 ];
                }
                native-vlan-id vlan1;
            }
        }
    }
}
vlans {
    vlan1 {
        vlan-id 1;
    }
    vlan100 {
        vlan-id 100;
    }
    vlan101 {
        vlan-id 101;
    }
    vlan102 {
        vlan-id 102;
    }
}



■確認例
JUNOS# run show vlans detail
VLAN: default, 802.1Q Tag: Untagged, Admin State: Enabled

VLAN: vlan1, 802.1Q Tag: 1, Admin State: Enabled
Number of interfaces: 1 (Active = 0)
  Untagged interfaces: ge-0/0/0.0

VLAN: vlan100, 802.1Q Tag: 100, Admin State: Enabled
Number of interfaces: 1 (Active = 0)
  Tagged interfaces: ge-0/0/0.0

VLAN: vlan101, 802.1Q Tag: 101, Admin State: Enabled
Number of interfaces: 1 (Active = 0)
  Tagged interfaces: ge-0/0/0.0

VLAN: vlan102, 802.1Q Tag: 102, Admin State: Enabled
Number of interfaces: 1 (Active = 0)
  Tagged interfaces: ge-0/0/0.0
Sassのインストールでエラーになった

↓インストールから知りたい人はコチラ
[http://qiita.com/cro46/items/ddb79820f94d8e6b7397](http://qiita.com/cro46/items/ddb79820f94d8e6b7397)

Sassのインストールでエラーになってコケました。
今回はその対策を書きます。

## 環境
Windows 8.1
Ruby 2.2.1
Sass 3.4.13
Chrome

## 事象
`ERROR:  Could not find a valid gem 'sass'`のようなメッセージが出て、
インストールに失敗する。どうしたらいいのか全くわかんない。

## 解決方法
まず[https://rubygems.org/gems/sass](https://rubygems.org/gems/sass)にアクセスします。
少しスクロールすると右下にDownloadリンクが見えます。

![sass.jpg](https://qiita-image-store.s3.amazonaws.com/0/67519/5e6f43fe-503b-d400-8ddc-c56b97e767cf.jpeg)
これをクリックしてダウンロードしてください。
何もしなければ最新版が自動的にダウンロードされます。
sass-3.4.13.gemみたいなファイルがダウンロードされたと思います。

次にコマンドプロンプトを使ってダウンロードしたファイルを実行します。
コマンドプロンプトは[Windows]キーと[x]キーを同時押しして、メニューから「コマンドプロンプト」を選択して起動してください。

標準設定であればダウンロードフォルダへダウンロードされているので、そのディレクトリまで移動します。
コマンドは`cd c:\Users\ユーザー名\Downloads`
（バックスラッシュになっていますが、半角の￥です）

ディレクトリ移動が完了したらおそらく前は失敗したであろう
`gem install sass`を実行してください。

あら不思議。
インストール成功です。
お疲れ様でした。
【GitHub】Please tell me who you are.

github使っていたらこんなエラーが出ました。解決方法は以下の通り


```
*** Please tell me who you are.

Run

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'me@me-PC.(none)')
```

この
```git config --global user.email "you@example.com"```
の"you@example.com"を自分のアドレスに変える。""も要らないので注意

これをterminalへ！
git config --global user.email YOUREMAIL@gmail.com

そしらた、僕の場合コミットできるようになおってました。
for式はforeach

# for式はforeach

社内の勉強会で

	for式はforeachに展開される。
	なので、自前のクラスでもforeachを実装すれば、for式で回せる。

っていう話をしたので、実証してみる。

---

まずは「for式がforeachに展開される」ことを確認。

```scala
package sample1

object Main extends App {
  
  val seq = Seq(1, 2, 3)
  
  for (i <- seq) println(i)
  
}
```

コンパイル時に`-Xprint:typer`つけてホントかどうか見てみる。

```bash
$ scalac -Xprint:typer sample1.scala
```

↓こんなの出ました。

```scala
[[syntax trees at end of                     typer]] // sample1.scala
package sample1 {
  object Main extends AnyRef with App {
    def <init>(): sample1.Main.type = {
      Main.super.<init>();
      ()
    };
    private[this] val seq: Seq[Int] = collection.this.Seq.apply[Int](1, 2, 3);
    <stable> <accessor> def seq: Seq[Int] = Main.this.seq;
    Main.this.seq.foreach[Unit](((i: Int) => scala.this.Predef.println(i)))
  }
}
```

foreachになってますね。

---

次に、自前のクラスをfor式で回してみる。
foreachのシグニチャはこんなの。

```scala
def foreach(f: (A) ⇒ Unit): Unit
```

これを実装すればOKのはず。

```scala
package sample2

object Main extends App {
  
  object Eachable {
    import scala.util.Random
    
    private val random = new Random
    
    // ランダムな数値をエサに３回「f」を呼び出す。
    def foreach(f: (Int) => Unit) = {
      f(random.nextInt)
      f(random.nextInt)
      f(random.nextInt)
    }
  }
  
  for (i <- Eachable) println(i)
  
}
```

レッツ、コンパイル。

```scala
[[syntax trees at end of                     typer]] // sample2.scala
package sample2 {
  object Main extends AnyRef with App {
    def <init>(): sample2.Main.type = {
      Main.super.<init>();
      ()
    };
    object Eachable extends scala.AnyRef {
      def <init>(): sample2.Main.Eachable.type = {
        Eachable.super.<init>();
        ()
      };
      import scala.util.Random;
      private[this] val random: scala.util.Random = new scala.util.Random();
      <stable> <accessor> private def random: scala.util.Random = Eachable.this.random;
      def foreach(f: Int => Unit): Unit = {
        f.apply(Eachable.this.random.nextInt());
        f.apply(Eachable.this.random.nextInt());
        f.apply(Eachable.this.random.nextInt())
      }
    };
    Main.this.Eachable.foreach(((i: Int) => scala.this.Predef.println(i)))
  }
}
```

foreachになってますね。
動かしてみると、３回テキトーな数字が表示されます。

---

[gist](https://gist.github.com/fkmt-disk/85048538f14f6503a729)にコード全文。
Debug.Log(System.Object, UnityEngine.Object)オーバーロード

# はじめに
　Unity開発において、[Debug.Log](http://docs.unity3d.com/ScriptReference/Debug.Log.html)はよく使うと思います。

　実はDebug.Logメソッドは、二つのオーバーロードが存在します。

* `public static void Log(System.Object message)`
* `public static void Log(System.Object message, UnityEngine.Object context)`


　1つ目のオーバーロードは良く使う方も多いと思います。ところで2つ目の方のオーバーロード、ご存知でしたか？お恥ずかしながら僕は知りませんでした。

# ログを吐いたコンポーネントを所持するゲームオブジェクトを識別できる

　`public static void Log(object message, Object context)`の[ドキュメント](http://docs.unity3d.com/ScriptReference/Debug.Log.html)には次のように説明されています。

> When you select the message in the console a connection to the context object will be drawn. This is very useful if you want know on which object an error occurs.


　なるほど、試してみましょう。

　次のようなSample.csを用意します。

```csharp:
using UnityEngine;

public class Sample : MonoBehaviour
{
	void Start ()
	{
		Debug.Log ("Hello Log with context.", gameObject);
	}
}
```

　新規シーンを作成、空のゲームオブジェクトを作ってSampleコンポーネントを付与した後、実行します。

　コンソールウィンドウで表示された「Hello Log with context.」というログをクリックすると。次の画像の通り、ヒエラルキー中のSampleコンポーネントが付与されているゲームオブジェクトがハイライトされました。


![スクリーンショット 2015-03-20 0.57.02.png](https://qiita-image-store.s3.amazonaws.com/0/4125/d82e34dc-54e7-5751-abec-b6946a0f759a.png "スクリーンショット 2015-03-20 0.57.02.png")


　この機能、あるコンポーネントが複数のGameObjectに付与されていた場合などで、どのGameObjectのものか識別できて便利かもしれませんね。コンソールウィンドウ中のログをダブルクリックすると該当コードが開く事は知っていましたが、これは知りませんでした。


　ところで、

```csharp:
Debug.Log ("Hello Log with context.", gameObject);
```

　を

```csharp:
Debug.Log ("Hello Log with context.", this);
```

　に変えても、同じようにハイライトされました。ヒエラルキービュー中のゲームオブジェクトに加えて、インスペクタに表示されているSampleコンポーネントもハイライトされる、なんてことはありませんでした。

　ちなみにこれは、Debug.Logだけでなく、

* [Debug.LogError](http://docs.unity3d.com/460/Documentation/ScriptReference/Debug.LogError.html)
* [Debug.LogException](http://docs.unity3d.com/460/Documentation/ScriptReference/Debug.LogException.html)
* [Debug.LogWarning](http://docs.unity3d.com/460/Documentation/ScriptReference/Debug.LogWarning.html)

　でも同様のオーバーロードを持っています。むしろこれらのメソッドでの活用の方が多そうですね。

# 呼び出したGameObject以外もハイライトできる

　呼び出したGameObject以外もハイライトできました。

　例えば、

* インスペクタから設定したプレファブ
* Resource.Load\<T\>で読みこんだリソース

　などは、ヒエラルキービュー中でなくプロジェクトビュー中のオブジェクトがハイライトされました。


# まとめ

　結構使う機会がありそうですね。知らなかったです。Debug.Logより、Debug.Warningnなどで使う方が多いかもしれませんが。

　もしかして常識ですか？だったら恥ずかしい。

　蛇足ですが、個人的なUnityへの不満(もう改善のしよいがない系のものなのですが)の一つに、UnityEngine.Objectクラスのクラス名が、System.Objectと区別がつきづらくてしょうがない、というものがあります。

```csharp:
public static void Log(object message, Object context)
```

　objectはSystem.Object、ObjectはUnityEngine.Objectですが、ぱっと見て非常にわかりずらい。
etcdのリセット方法 (CoreOSの話)

どういう状態？
------------

なんらかの原因で、etcdクラスタからメンバーがいなくなったのに、etcd上には存在している状態になってしまうことがあります

```
$ curl -L http://127.0.0.1:4001/v2/machines
http://172.16.2.145:4001, http://172.16.2.147:4001
```

※172.16.2.147は存在しない子なのに、出てきてしまっている

原因
----

[Cluster Finding Process](https://github.com/bmizerany/etcd-team/blob/master/Documentation/design/cluster-finding.md)にも書いてあるとおり `-data-dir` を探しに行きます。CoreOSだと `/var/lib/etcd/` がそれです (`$ systemctl cat etcd` で確認できる)

ここに過去のデータが残っていると、先のような状態になります

ともかく
-------

出直したい場合は、こんな感じです

```
coreos$ cd /var/lib/etcd
coreos$ sudo systemctl stop etcd
coreos$ sudo rm -rf log snapshot/
coreos$ curl -w "\n" 'https://discovery.etcd.io/new?size=3'
https://discovery.etcd.io/NEW_TOKEN_1da1c4c39e3c16b276991b75
```

cloud-config.ymlの`discovery`を上記URLに書き換える

```
coreos$ sudo coreos-cloudinit --from-file=cloud-config.yml
```

これで `/var/lib/etcd/` の中身は、心機一転、新しいクラスタとして動き出します。

注意
----

もう、二度と前のクラスタを組むことは出来ません
思い残す事のないようにおねがいします

参考資料
-------

- etcd - ローカルのKVM-VM上でCoreOSでクラスタ組んだメモ - Qiita / 
http://qiita.com/satoruf/items/5497832f9eae1954044d
Androidでファイル名の拡張子を取得する

たまに拡張子ほしい時がある。

```java
/**
* ファイル名から拡張子を取得する
* 単純に一番最後の.以降を取得しているだけ。
* @param fileName ファイル名
* @return ファイルの拡張子。拡張子がない場合はnull
*/
public static String getSuffix(String fileName) {
	if (fileName == null) return null;
	int point = fileName.lastIndexOf(".");
	if (point != -1) {
		return fileName.substring(point + 1);
	} 
	return null;
}
Android Studio 1.1でRendering Problemsが出たときの対応


最近、API22が入ったタイミングで起こるようになった問題。ぽい。

Android StudioのDesignでエラー(Rendering Problems)が出る。
だから、GUIでのレイアウト作成ができない！

Android初心者からしたら大問題で、挫折しそうになりました。
なんとか対応策を見つけたのですが、new projectの度、いつも忘れてて時間を取られるのでメモです。

## いろんなところで、書かれている対応方法

### DesignのAPIバージョンを21にする

ドロイドのアイコンからバージョンを選択。
22じゃなくて、SDKが入っているバージョンを選べばいいぽい。僕は、21の機能を使いたいので。

![スクリーンショット 2015-03-20 00.13.31.png](https://qiita-image-store.s3.amazonaws.com/0/15786/1c3cfe38-0025-b296-571f-19c98e4b18fb.png "スクリーンショット 2015-03-20 00.13.31.png")

### bundle.gradle(app)に書かれているバージョンを21.1.2にする

これも、自分が使うものでいいぽい。

![スクリーンショット 2015-03-20 00.36.25.png](https://qiita-image-store.s3.amazonaws.com/0/15786/0c7514ae-21d6-e04a-c9a7-3fa5d5bc6e09.png "スクリーンショット 2015-03-20 00.36.25.png")


### projectをcleanする

やりますね。clean、build、Android Studioの再起動する。


## やってみた結果

直らない。。。

![スクリーンショット 2015-03-20 00.14.26.png](https://qiita-image-store.s3.amazonaws.com/0/15786/140ec638-5ea2-4669-7b29-6e3b789a651f.png "スクリーンショット 2015-03-20 00.14.26.png")

## なんとかなった対応方法

### DesignのThemeを変更する

![スクリーンショット 2015-03-20 00.32.25.png](https://qiita-image-store.s3.amazonaws.com/0/15786/07123ccd-0848-a50b-34bc-662193386460.png "スクリーンショット 2015-03-20 00.32.25.png")

All->Theme->OK

![スクリーンショット 2015-03-20 00.32.46.png](https://qiita-image-store.s3.amazonaws.com/0/15786/7410549d-f24f-7155-9969-d2e92fb457f7.png "スクリーンショット 2015-03-20 00.32.46.png")

でたー。
なんか色違うけど、実際にこの色が反映されるわけではないぽいので、まあいっか。
直らない人は試してみてください。他のThemeでも出るやつは出ます。

プロジェクト作ったタイミングでは表示がされてる気がするので、
もしかしたらDesignの表示から端末のフレーム表示を消すのが何か悪いのかな？
SonarQubeドキュメント和訳 システム要件 - Requirements

SonarQube(http://www.sonarqube.org/ )のドキュメントを翻訳していきます。

こちらはSonarSource社の提供する下記のページの翻訳です。
http://docs.sonarqube.org/display/SONAR/Requirements

#前提条件
SonarQubeを動作させるにはJava(JRE7/JDk7以上)がインストールされている必要があります。

# ハードウエア要件
1.SonarQubeサーバーを効率よく動作させるには最低1GBのメモリ(RAM)が必要です。  
2. 必要なディスクの空き容量はSonarQubeで解析するコードの量に依存します。
   たとえば、SonarQubeのパブリックインスタンスである「Nemo( http://nemo.sonarqube.org/ )」は4年間の歴史の中で、1500万行以上のコードを分析しています。
「Nemo」は現在Amazon EC2の c3.largeインスタンスで動作しており、約10GBのディスクを使用しています。そこには270以上のプロジェクトが登録され約300万件のオープンなissueがあります。  
3. SonarQubeは優れたI/O性能をもったハードディスクにインストールする必要があります。
Elasticsearchのインデックスが格納される「data」フォルダには、サーバ稼働中莫大な量のI/Oが発生します。そのため、ハードディスクのI/O性能はSonarQubeサーバ全体のパフォーマンスに大きな影響を与えます。


#サポートするプラットフォーム

###Java
SonarQubeのJavaの分析器は全てのバージョンの全てのJavaソースファイルを分析することができます。しかし、SonarQubeの分析、及び、SonarQubeサーバの実行のためには特定のJVMのバージョンが必要です。

|JREの種類|サポート状況|
|:-----------|:------------|
| Oracle JRE | *×* 6 <br>*✔* 7u75+ <br>*✔* 8 
| Open JDK | *×* 6 <br>*✔* 7u55+ <br>*✔*8|
| IBM JRE | *×*|
| GCJ | *×* |
| Oracle JRockit | *×* |

###データベース
データベースの文字セットは"UTF-8"、言語は"英語"を設定する必要があります。

|DBの種類|サポート状況|
|:-----------|:------------|
| Microsoft SQL Server | *✔* SQLServer 2008(MSSQL Server 10.0)はjTDSドライバによる接続をサポートします。<br>マイクロソフトのドライバはサポートしません。<br>Express Editionもサポートします。<br>*✔* SQLServer2012 (MSSQL Server 11.0) はjTDSドライバによる接続をサポートします。<br>マイクロソフトのドライバはサポートしません。<br>Express Editionもサポートします。<br><br> *※* 照合順序はcase-sensitive(CS)とaccent-sensitive(AS)でなければなりません。|
|MySQL| *✔* 5.1　～ 5.5 <br> *✔* 5.6はSonarQube3.5以降でサポートします<br> *✔* 5.7はSonarQube4.4以降でサポートします。 <br><br>*※*ストレージエンジンはInnoDBをサポートしますが、MyISAMはサポートしません。 <br>*※* mysql-connector-javaによる接続のみサポートします|
|Oracle|*✔*  10GはOracleの11.2.xのドライバーをサポートします10G with Oracle 11.2.x drivers<br> *✔* 11GはOracleの11.2.xのドライバーをサポートします 11G with Oracle 11.2.x drivers <br>*✔* XE エディションもサポートします。XE Editions are supported |
|PostgreSQL|*✔* 8.x<br> *✔* 9.x|

### Webブラウザ  Web Browser
SonarQubeの機能を全て体験するには、ブラウザでJavaScriptの使用を許可する必要があります。

|ブラウザの種類|サポート状況|
|:-----------|:------------|
|Microsoft Internet Explorer|*×* IE 8<br>*✔* IE 9<br>*✔* IE 10<br>*✔* IE 11 ⇒課題 https://jira.codehaus.org/browse/SONAR-5773|
|Mozilla Firefox|*✔* サポートします。|
|Google Chrome|*✔* サポートします。|
|Opera|*△*　テストしていません |
|Safari|*✔* サポートします。|


※こちらの翻訳の元のページとその著作権表示は下記の通りです
http://docs.sonarqube.org/display/SONAR/Requirements
© 2008-2014, SonarSource S.A, Switzerland.
Rubyの全クラスを出力する


以下のコードを実行すると、Rubyの全クラスを出力する。

```ruby:全クラスをputsで出力
ObjectSpace.each_object(Class) do |klass|
  puts klass.name
end
```

## 仕組み
`ObjectSpace#each_object(klass)`は、引数で指定したklassと`Object#kind_of?(mod)`の関係にある全てのオブジェクトに対して繰り返し処理を行うモジュール関数。

`Object#kind_of?(mod)`は、以下の条件でtrueを返す

- オブジェクトがmodあるいはそのサブクラスのインスタンスである
- オブジェクトがmodをインクルードしたクラスかそのサブクラスのインスタンスである

```ruby:Object#kind_of?の使用例
'str'.kind_of?(String) # => true
100.kind_of?(Fixnum)   # => true
[].kind_of?(Array)     # => true

# Fixnum < Integer < Numeric < Object < BasicObjectの関係なので以下全てtrue
100.kind_of?(Integer)     # => true
100.kind_of?(Numeric)     # => true
100.kind_of?(Object)      # => true
100.kind_of?(BasicObject) # => true

# ArrayはEnumerableモジュールをインクルードしているのでtrue
[].kind_of?(Enumerable) # => true
```

全てのクラスはClassクラスのサブクラスであるので、イコール全てのクラスはClassクラスとkind_of?の関係にあると言える。
なので、`ObjectSpace#each_object(klass)`の引数に`Class`を指定することで全クラスが取得できる。

## 終わりに

特定のモジュールをインクルードしたクラス一覧や特定のメソッドを持つクラス一覧を確認したくて色々調べてるうちに、全クラス取得する方法に辿り着いた。

ObjectSpaceモジュールはほとんど使ったことがなかったのでこの投稿が正しいか少し不安だけど、マニュアル見る限りでは大丈夫だと思う...(ﾟＡﾟ;)ｺﾞｸﾘ

参考

- [module function ObjectSpace.#each_object](http://docs.ruby-lang.org/ja/2.2.0/method/ObjectSpace/m/each_object.html)
- [instance method Object#is_a?](http://docs.ruby-lang.org/ja/2.2.0/method/Object/i/is_a=3f.html)
- [Class: Object (Ruby 2.2.1)](http://ruby-doc.org/core-2.2.1/Object.html#method-i-kind_of-3F)
変数の値のローテーション3パターン

例えば`a, b, c, d, e`という複数の変数があったときに、その値をローテーションする方法です。もちろん2つ以上ならいくつでもできます。

##方法① 一時変数
```js
var x;
x = a, a = b, c = d, d = e, e = x;
```

`x`を一字的な変数として使用しています。
メリット：わかりやすい
デメリット：無駄な変数

##方法② 配列
```js
a = [b, b = c, c = d, d = e, e = a][0];
```

配列と代入を上手く使った方法です。
個人的にはこれが一番好きです。
メリット：無駄がない
デメリット：動作がわからないとわかりにくい

##方法③ 分割代入（ES6）
```js
[a, b, c, d, e] = [b, c, d, e, a];
```

ECMAScript6、JavaScript1.7で新たに使えるらしい機能のひとつです。
代入の左側を、配列やオブジェクトのように記述できます。
メリット：簡単でわかりやすい
デメリット：対応状況を考えるとまだ使えない
画像の指定した範囲以外を暗くして強調する

手順書などを作ってる時に、「ここに注目」ってのを表したい時に
キャプチャした画像をexcelとかにキャプチャした画像を貼り付けて、excelの図形描画で囲んだりしていました。

例えば「メニューから『ファイル』を選択」というような時に
こんな画像を用意してました。
![excel.png](https://qiita-image-store.s3.amazonaws.com/0/34692/cfce96b9-9ba5-82ab-f201-3f5f6899c4c2.png)

でも、あるときすごい見やすい画像で資料を作っている方を見つけました。
こういうのです。
![gimp2.png](https://qiita-image-store.s3.amazonaws.com/0/34692/cc861f74-464c-5973-0192-65acfb5b0a7d.png)

で、こういうのはどう作るんだろう？と思って調べてみると、
gimpで簡単に作れるんですね。

1.ツールボックスから「矩形選択」を選択
![select_rectangle.p![selected.png](https://qiita-image-store.s3.amazonaws.com/0/34692/2da06c88-3063-b2de-4887-4214ba9f49e8.png)
ng](https://qiita-image-store.s3.amazonaws.com/0/34692/eaea9341-a744-ef99-23a4-659dccab81e5.png)

2.境界がなじむように、ツールオプションから「境界をぼかす」を選択
![bluer.png](https://qiita-image-store.s3.amazonaws.com/0/34692/03360984-a7e2-dae6-30cf-5f419492e71e.png)

3.ハイライトしたい部分を矩形選択
![selected.png](https://qiita-image-store.s3.amazonaws.com/0/34692/aaf10df1-2954-5cc3-6a3b-dc8ecbed6a3a.png)

4.「選択」から「選択範囲の反転」を選択
![invert.png](https://qiita-image-store.s3.amazonaws.com/0/34692/000d447e-38f7-473d-a317-4ac1bde26a36.png)

5.「色」から「明るさ-コントラスト」を選択
![contrast.png](https://qiita-image-store.s3.amazonaws.com/0/34692/b001b836-7e66-77e5-fefe-889bcb99c63a.png)

6.明るさ-コントラストのダイアログで、「明るさ」を調整します。
私はいつもフェーダー左いっぱい-127でしてます。
![contrast_fade.png](https://qiita-image-store.s3.amazonaws.com/0/34692/7f9ca985-ba23-1a2c-b3b4-bff904d0bfa0.png)

7.これで指定した範囲だけがハイライトされます。
![result.png](https://qiita-image-store.s3.amazonaws.com/0/34692/2cec5c3d-6a81-cae4-338f-5e2260443777.png)

いい感じですね。

#script化
私の場合はコントラストの明るさは-127固定でとくに問題ないので、
scriptにして強調したい部分を選択してから「フィルター」の「Shadow Highlight」から
一発で変換出来るようにしています。

gimpのscript-fuはよくわかりませんが、見よう見まねで作ってしのいでいます。
[shadow-highlight.scm](https://github.com/pocari/gimp_plugin/blob/master/shadow-highlight.scm)

これをインストールすると強調したい範囲を選択(Shift押しながら複数選択も)してから
「フィルター」から「Shadow Highlight」-「Shadow Highlight」
を実行するとハイライトされます。
![last.png](https://qiita-image-store.s3.amazonaws.com/0/34692/d586c3b2-1455-cf27-87f3-dc728cf0d291.png)
DropwizardでDate型をJSON出力するときの日付書式(DateFormat)を指定


公式ドキュメントのどこに何が書いてあるのかが非常にわかりにくいDropwizardですが、java.util.Date型をJSONに吐き出すと、デフォルトではUnixTimeとして出力されます。

内部的にJacksonを利用しているので、どこかで日付書式が設定できるんだろうなと思ってConfigurationをよく読んだのですが、それらしき項目はなさそうな感じでした。(v0.8.0時点)

ただ、BootstrapクラスからJacksonのObjectMapperが拾えるので、Applicationクラスのinitialize()メソッドで日付書式を突っ込んであげることで、一応期待する動作になるっぽいです。


```Application.java

	@Override
	public void initialize(Bootstrap<BlogSampleConfiguration> bootstrap) {
		// use Hibenate 
		bootstrap.addBundle(hibernateBundle);
		// Date型の書式をISO8601に設定
		bootstrap.getObjectMapper().setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"));
	}
```

お作法として正しいのかはいまいち微妙ですが。
Rails(Grape)でAPIを作成する備忘録4(タグ情報の付与と絞込みの実装)

#今更ですが
今までフロントエンドのみ触ってきたサーバーサイドに全く触れたことのない学生が、勉強しながら書いてます。
全部完成させてこの記事を書いているわけでは無いので見通しの良い、使えるコードであるかはわかりません。ご了承ください。

僕みたいなサーバーサイド触ったこと無いけどAPI作ってみるかって人の参考に少しでもなればと思います。


## ドキュメントへのタグ情報の付与

grape-entityのインストール

```rb:Gemfile
  gem 'grape-entity'
```

その後`bundle install`

Entityを定義
これを使えば簡単に埋め込みができたり無駄なものを返さなくて良くなります

```rb:lib/api/entity.rb
module Entities
  class Tag < Grape::Entity
    expose :id, :name
  end

  class Document < Grape::Entity
    expose :id, :content, :title, :user_id, :created_at
    expose :tags, using: Entities::Tag
  end
end
```

includeさせる

```rb:lib/api/document_api.rb
  desc "returns all documents"
  get do
    document = Document.includes(:tags)
    present document, with: Entities::Document
  end
```

これでhttp://localhost:3000/api/document
にアクセスすると

```json
{
  id: 1,
  content: "ほげふがぴよ",
  title: "ほげほげ",
  user_id: 1,
  created_at: "2015-03-17T04:08:38.185Z",
  tags: [
          {
            id: 1,
            name: "ふがふが"
          }
        ]
}
```

タグ情報が含まれて帰ってきます

## 絞込みの実装

タグによるドキュメントの絞り込みを実装しました。
URLの指定の仕方がこれでいいのか悩みましたがとりあえずこういう形にしておきます。

```rb:lib/api/tag_api.rb
class Tag_API < Grape::API
  resource "tags" do
    params do
      requires :tag_id, type: Integer
    end
    # http://localhost:3000/api/tags/{:tag_id}/document
    get ':tag_id/documents' do
      document = Document.includes(:tags).where(tags: {id: params[:tag_id]})
      present document, with: Entities::Document
      # 以下だとSQLがドキュメント毎に走るN+1問題
      # tag = Tag.find(params[:tag_id])
      # present tag.documents, with: Entities::Document
    end
  end
end
```

コメントアウトしているようなコードで、検索してからドキュメントを返そうとするとドキュメント毎にSQLが走ってしまいます
研究室のWiki程度ならこれくらいでもいいかもしれないですが、それなりにアクセスされる何かを作る場合はお気をつけください
cocos2dx 3.xの3dと2d画像が同じレアーに存在している件について

cocos2dxの3.xがそろそろ正常に動いたところで、ためしようと思いました。

ひとまず、簡単なUIで行きましょう。

キューブを乗せましょう、背景は普通の2D画像で行きましょうと。

早速ですが、Blenderで3Dのオブジェクトを作りました。
ネットで背景画像も拾いました。

Sprite
..
Sprite3D

の順番で入れたら、あれ？
Sprite3Dがないですけど

という現象は発見しました。

発生原因：
１、SpriteとSprite3dが同じ次元のSpriteじゃない
２、cocos2dx用意したカメラの前にずっといるのはSpriteだ、Sprite3DがSpriteの後ろにいます。

原因わかったので、解決も出ましたね。
3Dを使いたいから、すべて3Dでやりましょう。

cocos2dxがSprite3Dを用意した同時に、BillBoardという便利なPlaneも同封していたね。
Planeと言いましたが、Unity3Dの中のPlaneと認識してほしいですね。

このBillBoardが平面的の3D表現はすごく役を立っています。
ぜひ活用してくださいとみんなに言いたいですね。

下記はコードです。

<pre>
auto sprite = BillBoard::create("2D画像");
sprite->setPosition3D(Vec3(3D座標));
this->addChild(sprite);
    
auto test = Sprite3D::create("モデルファイルc2d/c2t");
cubeTest->setPosition(Vec2(2d座標));
this->addChild(cubeTest, 1);
</pre>
UE4 マウスの位置をワールド座標に変換する

# 概要
表題のとおりです。
UE4で、マウスでクリックした場所に何かしたいときに役立つかもしれません。


# デモ
マウスでなぞった空間上に連続した点を取り、それをつなぐようなメッシュを生成します。
そのあと再帰して枝が生えます（謎）
http://youtu.be/JqSXUpJrEoo


# 多分共通している部分

## マウス入力を有効にする
UE4のデフォルトではマウス入力が無効となっています。
PlayerControllerでマウスに関する機能の設定ができます。

ランタイムでプロパティを書き換えることもできますが、
ここではPlayerControllerのクラスを置き換えることにします。

↓これを読んでください！
https://docs.unrealengine.com/latest/JPN/Resources/ContentExamples/MouseInterface/MouseControlSetup/index.html

なお、プロジェクトテンプレートによってはゲームモードは既に作成されており、PlayerControllerクラスを作成してそのゲームモードに割り当てるだけで済みます。


## 入力を受け取る
左ボタンのPress/Releaseを受け取るには
入力>マウスイベント>マウスの左ボタン
が使用できます。
![mouseleft.PNG](https://qiita-image-store.s3.amazonaws.com/0/61553/e4619736-adf8-28e2-e8a9-628a8ecc1cf5.png)

マウスの座標をWorld座標系で得るには
Game>Player>ConvertMouseLocationToWorldSpace
が使用できます。
![mousepos.PNG](https://qiita-image-store.s3.amazonaws.com/0/61553/ee7472fa-15fb-75b0-fb39-669ef70bb0e8.png)
これには二つの出力値
WorldLocation：（多分）カメラの座標
WorldDirection：カーソル方向のベクトル
があります。

マウスの座標には「奥行き」情報が無いため、
3次元のワールド座標に置き換えると一般的には「点」ではなく「半直線」になります。

ここからは、半直線から一つの点を特定するロジックについてです。

# オブジェクトとの衝突を使用する方法
![mouse_collision.PNG](https://qiita-image-store.s3.amazonaws.com/0/61553/0d6636f6-7c3d-b272-87ed-e821f3908172.png)
レイトレースなどと呼ばれる呼ばれる手法で、ワールドに置かれた物体との衝突座標を取り出します。

これにはLineTraceByChannelが使えます。
●　StartとEndの間に衝突可能な物体があれば
ReturnValue から true, OutHit から衝突情報が出力されます。
衝突しなければ
ReturnValue は false です。
●　入力値の "Start" には ConvertMouseLocationToWorldSpace からの WorldLocation がそのまま使え、"End" には WorldDirection * (適当な長さ) を入れるとよいでしょう。
●　出力値の OutHit は様々な情報を含んだ構造体になっており、衝突座標等を取り出したい場合は BreakHitResult を使います。


# 平面（Plane)との衝突を使用する方法
![mouse_plane.PNG](https://qiita-image-store.s3.amazonaws.com/0/61553/7339a98d-a81a-8f0e-e0e4-3937fd76e323.png)
本質的には似たようなものですが、物体ではなく数値で指定した平面との衝突座標を取り出します。

LinePlaneIntersection を用います。
入力にPlaneを受け取るところが先ほどと異なります。

このPlaneをどのように決めるかが鍵で、アプリケーションによって異なるところになりますが、
冒頭の動画では
* マウスのボタンが押され始めた時にコリジョンを用いて座標を得る
* その座標を通り、カメラの視線方向と垂直な平面を使用する
ようになっています。

以下のような感じでその平面を作れます。
![makeplane.PNG](https://qiita-image-store.s3.amazonaws.com/0/61553/81588c28-b55a-fc56-39ca-a5e5934d8bf3.png)

Planeに直接値を入れて生成しています。
Planeを作成のX,Y,Zに平面の法線ベクトルを、
Wに平面上の点を法線軸に射影（dot product）したものを入れます。
グラフ上部からドット積ノードにつながっているのはコリジョンを使って作った座標です。


# まとめ
表題の件について、実現方法の紹介をしました。


以上です。
ERBとSlimの比較

個人的に作ってるサービスのERBをSlimに入れ替えて、大幅にすっきりして感動したので少しだけ

# Slimってなんぞ
ERB同様テンプレートエンジンです
他にもHamlというものもあって、HamlとSlimはほとんど同じ書き方ですがほんのちょっとだけSlimの方がシンプルです

# Slimの基本構文
## コメント
Slimのコメントは/から始まる1行です

`
/ ここがコメントです
`

## タグ、属性
`タグ 属性[ 属性...] コンテンツ`
例
`span id="notice" class="anounce" マイクテスト`

さらにSlimが賢いのは、#（ID）や.（クラス）といったシンタックスシュガーを使えること
例えば上のものをシンタックスシュガーを使って書き換えると以下のようになります
`span#notice.anounce マイクテスト`

## Rubyコード
また、Rubyコードは以下のようになります

```
- ~Rubyコード~
= ~出力を伴うRubyコード~
```

例

```
- @books.each do |b|
　p = b.name
　p = b.price
```

なお、Slimでは終了タグやendを記述する必要はありません。インデントの深さによって勝手に判断されるためです
従ってインデントの深さは正しく記述する必要があります

## 入れ子構造の表現
また、タグの入れ子構造も次のようにインデントによって判断されます

```
div#header
　a href="#"
　　span こっちはヘッダだよ
div#content
　a href="#"
　　span こっちはコンテンツだよ
```
このように、記述を最低限にすることができるのでERBよりもすっきりとビューを書くことができます
最初は面食らうと思いますが（私も驚きました）、慣れればビューのコーディング時間を大きく短縮できるとともに可読性を上げられると思うので、ぜひ挑戦してみてください


# オマケ：比較サンプルコード
## ERB
```
<%= javascript_include_tag "posters_index" %>
<%= stylesheet_link_tag "posters_index" %>
<input type="hidden" id="server" value="<%= @server %>">

<div class="container">
  <%= paginate @posters %>
  <div id="list">
    <table border="1" class="table-striped">
      <tr>
        <th class="category">区分</th>
        <th class="title">タイトル</th>
        <th class="contributor">投稿者</th>
        <th class="posted">投稿日</th>
        <th class="replies">返信数</th>
      </tr>

      <% @posters.each do |poster| %>
        <tr <%= "class=closed" if poster.closed %>>
          <td class="category"><%= poster.category.label %></td>
          <td class="title"><%= link_to "#{poster.title}", "/posters/#{poster.server.server}/#{poster.id}" %></td>
          <td class="contributor"><%= poster.contributor %></td>
          <td class="posted"><%= poster.posted.to_date.strftime("%Y/%m/%d") %></td>
          <td class="replies"><%= poster.replies.size %></td>
        </tr>
      <% end %>
    </table>
  </div>
</div>
```


## Slim
```
= javascript_include_tag "posters_index"
= stylesheet_link_tag "posters_index"

/ JSへ選択されているサーバを伝えるための要素
/ Ruby変数をそのまま展開できるようです。素晴らしいですね！
/ input#server type="hidden" value="#{@server}"
input#server type="hidden" value=@server

/ コンテンツ（該当記事一覧）
.container
  = paginate @posters
  #list
    / 数値もクオートで囲まなくて良いそうです
    / table.table-striped border="1"
    table.table-striped border=1
      tr
        th.category 区分
        th.title タイトル
        th.contributor 投稿者
        th.posted 投稿日
        th.replies 返信数

      - @posters.each do |poster|
        / この気持ち悪い記述ももう少しすっきり！
        / tr class="#{'closed' if poster.closed}"
        tr class=('closed' if poster.closed)
          td.category = poster.category.label
          td.title = link_to "#{poster.title}", "/posters/#{poster.server.server}/#{poster.id}"
          td.contributor = poster.contributor
          td.posted = poster.posted.to_date.strftime("%Y/%m/%d")
          td.replies = poster.replies.size    
`
tmuxにPowerlineの導入


いろいろ調べて導入するの面倒なのかなと思ったけど、試してみたらすげぇ簡単だった。

## そもそもPowerlineとは
元々はvimのプラグイン。
ステータスバーかっこいい！見た目もきれい！テンションあがる！というもの。（たぶん）


## tmux-powerlineを入れる
gitからclone。簡単ですね。

```
cd
git clone git://github.com/erikw/tmux-powerline.git
```

動作確認のためにとりあえず `~/.tmux.conf` に以下を貼付けて`tmux`を起動。

```~/.tmux.conf
set-option -g status on
set-option -g status-interval 2
set-option -g status-utf8 on
set-option -g status-justify "left"
set-option -g status-left-length 60
set-option -g status-right-length 90
set-option -g status-left "#(~/tmux-powerline/powerline.sh left)"
set-option -g status-right "#(~/tmux-powerline/powerline.sh right)"
```
表示がカラフルになってそれっぽくなっているのを確認。

![スクリーンショット 2015-03-19 23.22.17.png](https://qiita-image-store.s3.amazonaws.com/0/53128/793a1702-a1b6-acc3-84e5-eb624f4c6f40.png "スクリーンショット 2015-03-19 23.22.17.png")

境界線と思われるあたりの文字が化けているのはフォントの問題なので次項のフォントを導入すれば大丈夫なはず。


## fontを入れる
Powerlineはフォントで見かけを調整しているようなのでこちらの方が重要。

こっちもgit cloneしてコマンド一発。簡単ですね。

```
$ git clone https://github.com/powerline/fonts.git
$ cd fonts
$ ./install.sh
All Powerline fonts installed to /Users/agile/Library/Fonts
```

あとは設定でフォントを変えればOK。
自分はSourceCodeProを選択しましたが `git clone` してきたfontフォルダの中にある好きなものを選べば良いでしょう。

![スクリーンショット 2015-03-19 23.25.21.png](https://qiita-image-store.s3.amazonaws.com/0/53128/f57ebb2f-122e-1b9e-afab-5f67594bedc6.png "スクリーンショット 2015-03-19 23.25.21.png")

かっこいい！！
カスタマイズは別途がんばる事にする。


参照
http://matsu.teraren.com/blog/2013/02/10/moteru-tmux-powerline/
pepper Programming Tips -既存のロボット動作、ロボットアプリケーションを任意に動作させる-

pepperにプリセットされているロボット動作、ロボットアプリケーションを任意に動作させる方法です。

＜使用するボックス＞
・Text Edit
・Run Behavior

＜使用方法＞
1) Text EditとRun Behaviorをつなぐ
2) マウス右クリックにてロボット動作なら"動作パスをコピー"、ロボットアプリケーションなら"アプリケーションのIDをコピー"する。
3) コピーした内容をText Editにペーストし実行。
![rb01.jpg](https://qiita-image-store.s3.amazonaws.com/0/59491/0a3d2a17-e684-bb4c-f139-7874e73f9bca.jpeg)

※あとは、例の「ボク、pepperと話すのは初めてですか？」を止めたいですね！(^^;)
run_dialog_devとかpepper_dialog_sample辺りがそうなのではないかとニラんでおります。
xcodebuildに-schemeをつけると途端に動かなくなって辛いです


SVNでチェックアウトしてきたiOS向けプロジェクト。
これを```xcodebuild -project Hogehoge -scheme Hogehoge```とか```xcodebuild clean -scheme Hogehoge```ってやったらなんも反応ないんだけど
でハマったメモ。

※上記コマンドはうろ覚え


## 結論

1. [Product] > [Scheme] > [Manage Schemes...] で、メインとなるプロジェクトの [Shared] にチェック。
* .xcodeproj の中にxcshereddataなるものが生成されるので、それをコミット。
* おわり


- 参考: [[iOS] Mac OS X に Jenkins 環境を構築して CocoaPods なプロジェクトをビルドする ｜ Developers.IO](http://dev.classmethod.jp/smartphone/iphone/jenkins-cocoapods/)

これでJenkinsでもビルドできるよ!やったね!


## その他

> *xcodebuildでワークスペースファイルを使う際にスキーマファイルが必要になります。このファイルがXcodeでワークスペースファイルを開いた際に生成されるものであるため、CocoaPodsで自動生成したワークスペースをxcodebuildでビルドしようとするとスキーマファイルが見つからずにビルドが失敗します。*

- 参考: [趣味でつくるiOSアプリこそJenkinsでリリースを自動化 - Qiita](http://qiita.com/makoto_kw/items/b23350aed11ea87cd92b#%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)

そうだったのか……。
vimでファイル保存時の空白を削除する

## やったこと
たまにソースコードの行のおしりにつけてしまった半角スペースを消し忘れたまま、コミットしてしまうことがあったので自動化した。

![スクリーンショット 2015-03-19 22.49.54.png](https://qiita-image-store.s3.amazonaws.com/0/63145/3b88e8d3-f684-0b15-8ae1-e7e483db3b1f.png)

## 動作確認環境
- OSX 10.10
- MacVim Kaoriya版
- NeoBundle

## 設定

`.vimrc`　に以下を追記

```
" 行末の半角スペースを可視化　:FixWhitespaceで削除
NeoBundle 'bronson/vim-trailing-whitespace'
```

上記を導入することでvimで半角スペースが可視化され、また`:FixWhitespace`が追加される。それを下のように設定。

```vim
" autocmd
autocmd BufWritePre * :FixWhitespace
```

autocmdは任意のタイミングでvimに処理を走らせることができる仕組み。今回はバッファを書き込む前にFixWhitespaceが走るので、ファイル保存時には空白スペースがない状態になる。

## やってみて
ついやってしまう方には役立つかも。たぶん他にもうまいやり方あるはず。理想で言えばコミット前に全ファイルのチェックとかしたい。