OmniAICreator/Qiita-1.07M huggingface dataset:
Faviconを点滅させて別タブにいるユーザーになんかをお知らせする

```js
function blinkFavicon(blinkTime){
  if(blinkTime === undefined) blinkTime = 500;
  var blink = false;
  setInterval(function(){
    $('#favicon').remove();
    if (blink){
      blink = false;
      $('meta:last').after($(document.createElement('link')).attr('id', 'favicon').attr('rel', 'shortcut icon').attr('href', 'faviconのある場所'));
    } else {
      blink = true;
      $('meta:last').after($(document.createElement('link')).attr('id', 'favicon').attr('rel', 'shortcut icon').attr('href', 'faviconのある場所その2'));
    }
  }, blinkTime);
}
```

必要なもの
・jQuery
・ファビコン画像２つ(デフォルトで指定されている奴、それを明るくした奴)


これをやると、favicon(ブラウザとかで左上とかに出てくるwebサイトのアイコン)がぺかぺかと点滅する。
音も出ないし、alertでフォーカスも奪わないのでユーザーに何か操作を要求することもない。
簡単だけど便利。

※事前準備で、HTML上でファビコンの記述されている部分にid="favicon"を指定しなきゃいかんです。

blinkTimeに任意の数字(単位はミリ秒(1/1000秒))を入れると、その間隔でぺかぺかします。
何も入れないと0.5秒の間隔でぺかぺかします。
最近のIEでも動くっぽい。ワーオ
なおSafariは諦めろ。

参考資料
サーバからの通知方法にfaviconの動的変更を利用する
http://blog.katsuma.tv/2008/03/notification_by_favicon_change.html
GitHubラッパーのoctokitのAPI一覧とか使用例とか

GitHubのAPIを使って連携してみました。

で、octkitという公式ラッパークラスがあったけど、
API一覧的なものがなかったので。
以下に公開。

[https://github.com/octokit/octokit.rb/tree/master/lib/octokit/client](https://github.com/octokit/octokit.rb/tree/master/lib/octokit/client)

まぁ、octkitのソースの中身なんですが(汗
読み方としては、こんな感じ。

例）rails omniauth使用

emojis.rb
def emojis(options = {})

```rb
octokit_client = Octokit::Client.new :access_token => request.env["omniauth.auth"][:credentials][:token]
octokit_client.emojis
```

レポジトリとか、フォロー数とか、
使用言語、そのコード数まで取れる。
色々と遊べそうです。
lessがわからない人のBootstrap簡単カスタマイズ方法

# はじめに
デザインに手をかけず、とりあえずアプリを動かすためにBootstrapを使っています。
デフォルトのまま使えるかと思ったら、やっぱりちょこちょこ調整したくなったのでメモ。

# 2つのやり方
場合によって次のやり方を使い分けています。使い分けは後述します。
## CSSを上書きする
カスタマイズ用のcssファイルを作ってbootstrapのCSSより後から読み込みます。

```html
<!-- Bootstrap -->
<link href="/xxx/public/bootstrap-3.0.3-dist/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- カスタマイズ用CSS -->
<link rel="stylesheet" media="screen" href="/xxx/public/stylesheets/bootstrap-custom.css">
<link rel="stylesheet" media="screen" href="/xxx/public/stylesheets/my.css">
```

カスタマイズ用CSSは2つに分けています。
bootstrap-custom.cssは、全体に適用するものを書きます。
my.cssは一部分だけ（このdivの中身だけ変えたい）というものを書きます。
Bootstrapのデフォルトと異なるスタイルを適用しているのが全体なのか一部なのか意識するためです。

## 公式サイトの[Customize and download](http://getbootstrap.com/customize/)を使う
ここでlessの変数を変更すると、それを反映したcssがダウンロードできます。
変数がたくさんあってくじけそうになりますが、必要なとこだけ変更すればいいので大丈夫です！

> ![customize.png](https://qiita-image-store.s3.amazonaws.com/0/38582/098b91b1-af4c-1cf8-039c-c57b8ce18b3f.png)

# 全体的にフォントサイズを変えたい
[Customize and download](http://getbootstrap.com/customize/)で@font-size-baseを変更します。
Less variablesの配下のTypographyの中にあります。
Bootstrapでは@font-size-baseを元にしてH1~H6などのサイズを相対的に決めていますので、1か所変えるだけで全てのフォントサイズが変更できます。

> ![fontsize.png](https://qiita-image-store.s3.amazonaws.com/0/38582/092687b1-e470-10fc-4c28-de603dd4c048.png)



# 全体的にフォントの種類を変えたい
これもフォントサイズと同様に、[Customize and download](http://getbootstrap.com/customize/)を使います。
@font-family-baseでフォントの種類が決まるのですが、@font-family-baseがさらに@font-family-sans-serifを参照しているのでこちらを変更します。
次の例はMeiryo UIを追加しているところです。

> ![font.png](https://qiita-image-store.s3.amazonaws.com/0/38582/18d75e19-e198-3f2b-11e9-c32820699d17.png)

# 全体的にxxxを変えたいんだけど[Customize and download](http://getbootstrap.com/customize/)で設定できないよ？
lessの変数になっていない項目は、CSSを上書きします。
たとえばTooltipの色やフォントサイズを変える等。

```bootstrap-custom.css
/* ツールチップ  */
.tooltip > .tooltip-inner {
  background-color: #d9534f;
  font-size: 16px;
  font-weight: normal;
}
.tooltip.top > .tooltip-arrow {
  border-top-color: #d9534f;
}
```


# 部分的にxxxを変えたい
たとえば、サイト内にあるテーブルのうち、ある1つのテーブルのスタイルだけを変えたいといった場合、cssを上書きします。
部分的な適用であることを意識するために、my.cssに書いておくといいでしょう。

```my.css
/* テーブル */
.my-table .table-hover tbody .tr-pointer:hover td {
  background-color: #AFEEEE;
  cursor: pointer;
}
```
migration の timestamps で作成するカラムを NOT NULL にする

**2020/01/08 追記: Rails 5 で `t.timestamps` で作成するカラムはデフォルトで NOT NULL になったため、こちらの対応は不要になりました。**

マイグレーションで `created_at` や `updated_at` を定義する時に `t.timestamps` と書くことが多いと思うけれど、普通にマイグレーションを流すと `NULL` 可になる。

Rails に任せておけば `NULL` が入ることはないと思うが、`NOT NULL` にしておきたい。

migration でこう書く:

`t.timestamps` には引数を渡せる。

```rb
def change
  create_table :posts do |t|
    t.string :title, null: false

    t.timestamps null: false
  end
end
```

`db:migrate` すると `schema.rb` はこうなる:

```rb
create_table "posts", force: true do |t|
  t.string   "title",      null: false
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end
```

PostgreSQL で確認:

```postgres
test=> \d posts;                                                           
                                        Table "public.posts"                                         
     Column      |            Type             |                       Modifiers                        
-----------------+-----------------------------+------------------------------------------------------- 
 id              | integer                     | not null default nextval('posts_id_seq'::regclass)  
 title           | character varying(255)      | not null                                               
 created_at      | timestamp without time zone | not null                                               
 updated_at      | timestamp without time zone | not null                                               
```

殆どの場面ではこれらのカラムは `NOT NULL` になって良いと思うのだけれど、何か罠があるのだろうか。外部キー制約も [Foreigner](https://github.com/matthuhiggins/foreigner) を使わないと定義できないし、勝手にやれってことなのかな。
historyの特定行をこっそり消したい

<自分用メモ>

ターミナルに間違えてパスワード入力してしまったり、対話式じゃなくてコマンドのオプションにパスワードを平文で入力しなきゃいけないので仕方なくパスワード入力した結果、historyを見るとパスワードが残っちゃうことって結構ありますよね。

そのまま残しておくわけにも行かず、消したいですよね。

![Clipboard01.gif](https://qiita-image-store.s3.amazonaws.com/0/38926/fa5912f4-f049-43e3-4190-a1bb5487f95e.gif "ヤダッ！ワタシのパスワードまる見え！！")

全消しするなら、

```bash
$ history -c
```

でバッサリ消せますが、
特定のコマンドだけこっそり消したい時は -d オプションで番号を指定して消しましょう。

```bash
$ history -d {番号}
```
【Linux】【Shell】command not foundshの解決メモ

##シェル文法は問題ないはずのシェルスクリプト動かない
こんなエラーが出た
: command not foundsh

##原因
改行コードが変わっていた。
恐らくこんな流れかな？
Linuxでシェルを作る -> Windowsにwinscpを利用してシェルスクリプトを移動する -> 他のサーバにwinscpを利用してシェルスクリプトをコピーする
これで改行コードがLF -> CRLFになってしまいシェルスクリプトが動かなくなった

##対応
こんな感じで改行コードを変更し実行!!
nkf -Lu crlf.txt > lf.txt

##参考
http://bambi3.exblog.jp/6799282
http://ratememo.blog17.fc2.com/blog-entry-824.html
mp3ファイルをアルバムごとにフォルダに振り分ける

Shell32の参照設定を行う必要があります。
Windows 7でしか動作しないと思います。
(2014/3/12 追記：.m4aファイルにも対応しています。私の環境では、.mp3と同様に動作します。)

```csharp:mp3ID3.cs
using System;
using System.IO;
using System.Text;
using Shell32;

class mp3ID3 {
    static void Main() {
        string currentDir = System.Environment.CurrentDirectory;
        ShellClass shell = new ShellClass();
        Folder folder = shell.NameSpace(currentDir);
        DirectoryInfo di = new DirectoryInfo(currentDir);
        FileInfo[] fiary = di.GetFiles("*.mp3");
        Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
        StreamWriter sw = new StreamWriter(currentDir + "\\" + "log.txt", false, sjisEnc);

        foreach (FileInfo fi in fiary) {
            string artistName = folder.GetDetailsOf(folder.ParseName(fi.Name), 13); // アーティスト名
            string albumName = folder.GetDetailsOf(folder.ParseName(fi.Name), 14);  // アルバム名
            string artistDir = currentDir + "\\" + artistName;
            string albumDir = artistDir + "\\" + albumName;
            DirectoryInfo diNewArtistFolder = new DirectoryInfo(artistDir);
            DirectoryInfo diNewAlbumFolder = new DirectoryInfo(albumDir);

            if (!File.Exists(artistDir)) {
                diNewArtistFolder.Create();
            }
            if (!File.Exists(albumDir)) {
                diNewAlbumFolder.Create();
            }

            sw.WriteLine(fi.FullName);
            sw.WriteLine("を");
            try {
                fi.MoveTo(albumDir+"\\"+fi.Name);
            } catch (Exception e) {
                Console.Error.WriteLine(e);
                Console.Error.WriteLine("何かキーを押してください.");
                Console.ReadLine();
                return;
            }
            sw.WriteLine(fi.FullName);
            sw.WriteLine("に移動しました。");
            sw.WriteLine();
        }

        sw.Close();
    }
}

```
Vagrantトラブルシュートメモ


# トラブル
## "The guest additions on this VM do not match the installed version of VirtualBox!"と表示される

VirtualBoxとゲストOS内のVirtualBox Guest Additionsがアンマッチしているときに表示される。VirtualBox Guest Additionsのバージョンを認識して、自動的にインストールを行ってくれる`vagrant-vbguest`プラグインを使って解消する。


```
vagrant plugin install vagrant-vbguest
vagrant reload
```


## Provisioning時に"The expanded run list includes nonexistent roles"と表示される

`Vagrantfile`内の`role_path`が誤っている場合に出力される。手元の環境はマルチVMで使用しているので、chef_solo実行部分に`role_path`指定を挟む。

```ruby
web.vm.provision :chef_solo do |chef|
  chef.cookbooks_path = "../chef-kitchen/cookbooks"
  chef.roles_path = "../chef-kitchen/roles"
  chef.data_bags_path = "../chef-kitchen/data_bags"

  chef.add_role("app")
  chef.add_role("nginx_app")
end
```

## synced_folderが動かない

ホストOSとゲストOSのディレクトリはsftp経由で同期しているため、sshd_configのsftpサブシステムが有効になっているか調べる。

```text:/etc/ssh/sshd_config
AuthorizedKeysFile %h/.ssh/authorized_keys
ChallengeResponseAuthentication no
UsePAM yes
PasswordAuthentication no
Port 22
Subsystem sftp  /usr/lib/openssh/sftp-server  # ←これ
```

以下余談。

sshをchefのopensshレシピでうっかりインストールしてしまったところ、synced_folderが使用できない問題が発生した。ゲストOSのログからvagrantがsftp接続していることがわかる。

```text:/var/log/auth.log
Mar 12 15:33:48 precise64 sshd[1397]: subsystem request for sftp by user vagrant
```

opensshレシピを使いつつsftp subsystemを有効にするにはattributesを次のようにする。

```ruby
openssh: {
  server: {
    password_authentication: "no",
    port: 22,
    subsystem: "sftp      /usr/lib/openssh/sftp-server"
  }
}
```
TortoiseSVNでブランチ間のファイル差分を確認する方法

1. リポジトリブラウザを開く
2. 比較元のブランチを右クリックで選択
3. 比較対象としてマークを選択（これを実行すると選択したブランチが太字になる）
4. 比較先のブランチを右クリックで選択
5. URLを比較を選択
rescue 節で一定回数 retry したあとは次に移るループ

`begin ~ rescue ~ end`内での`next`は、`rescue`には関係せずに外側のループに作用するんだよな、と確認したかったのでやってみた。
（Ruby 1.9.3）

```Ruby
10.times do |i|
  retry_counter = 0
  begin
    raise
  rescue
    retry_counter += 1
    if retry_counter <= 5
      puts i.to_s + ": retry"
      retry
    else
      puts "retried 5 times so go to next loop"
      next
    end
  end
end
```
結果

```
0: retry
0: retry
0: retry
0: retry
0: retry
retry 5 times so go to next loop
1: retry
1: retry
1: retry
1: retry
1: retry
retry 5 times so go to next loop

（中略）

9: retry
9: retry
9: retry
9: retry
9: retry
retry 5 times so go to next loop
```
そういえば、（1.9以降だと）retryは繰り返し構造に作用しないし、繰り返し構造でのやり直しはredoだと思い出したのは、コレを書き終えたあとでしたw

>###redo
>ループ条件のチェックを行なわず、現在の繰り返しをやり直します。

>###retry
>retry は、rescue 節で begin 式をはじめからもう一度実行するのに使用します。
[制御構造(るりま 1.9.3)](http://rurema.clear-code.com/1.9.3/doc/spec=2fcontrol.html)
CasperJS Utils + Chrome でhtml要素を選択する方法

# 課題
html要素を一個だけ選択したいのに出来ない場合に、対処したい

# やりかた
◆　Chromeを立ち上げ、右側の設定ボタンをクリックしてブックマークツールバーを表示させる
![WS000000.png](https://qiita-image-store.s3.amazonaws.com/0/34636/bc9ed611-107d-c296-0554-43a2cb569458.png)

◆　下記URLを開き、青色の「CasperJS Utils」ボタンをツールバーへドラッグする
http://docs.casperjs.org/en/latest/modules/clientutils.html#index-2
![WS000001.png](https://qiita-image-store.s3.amazonaws.com/0/34636/a9f4eb2c-985b-b68f-cde1-35f363c590b2.png)

◆　html要素を選択したいページへ移動する。
　　※　以下、例として既に開いておいたGoogle Analyticsページを使用する
![WS000002.png](https://qiita-image-store.s3.amazonaws.com/0/34636/775d1b10-a104-6e97-a0e4-0ab4f3b5e59f.png)

◆　ブックマークツールバーへドラッグした CasperJS Utils をクリックする
　　※　クリックするだけで良い。

◆　選択したいhtml要素を表示させる。
　　※　以下、例として下画面のカーソルがかぶさっているチェックボックスを選択させたいものとする
![WS000003.png](https://qiita-image-store.s3.amazonaws.com/0/34636/05f12831-c790-4dec-8dc7-1b5a447affb6.png)

◆　チェックボックスにカーソルを合わせ、右クリック→「要素を検証」をクリックする

◆　Chrome デベロッパーツールが起動し、選択した要素の部分が青色で表示される
![WS000004.png](https://qiita-image-store.s3.amazonaws.com/0/34636/c1ab4de5-cff0-7c97-4166-4544645a9e40.png)

◆　デベロッパーツール右側の歯車アイコンの左のアイコンをクリックする
![WS000005.png](https://qiita-image-store.s3.amazonaws.com/0/34636/f7ea67e5-de87-4741-c5d7-eb65a7e9272a.png)

◆　コンソールが表示されるので、下記の文を入力してEnterキーを押下する
` __utils__.findAll('input[type="checkbox"][class="ACTION-toggle TARGET-view"]')`
![WS000006.png](https://qiita-image-store.s3.amazonaws.com/0/34636/bc1e6eae-9ee2-7997-2c1a-3de354888908.png)

◆　複数の要素が出てきた（今回は４個）。
![WS000007.png](https://qiita-image-store.s3.amazonaws.com/0/34636/b0d00ef1-fc7b-c596-7fd0-278764c42883.png)

◆　この中から特定の要素を選択する。idタグで選別すればよさそうな感じだが、このidタグはどうやらページが読み込まれるたび動的に数字が変化するらしいので使えない。そこで、要素の特定に使えそうなプロパティを選ぶことにする。
デベロッパーツールの右ウインドウ「Properties」タブをクリックする。
![WS000008.png](https://qiita-image-store.s3.amazonaws.com/0/34636/e13365ef-cac6-96a5-e641-82b727247700.png)

◆　一番上の左三角をクリックして展開する
![WS000009.png](https://qiita-image-store.s3.amazonaws.com/0/34636/761a3e6e-7f51-ebef-2f95-6d941e038006.png)

◆　展開した部分を探してゆくと、offsetParentの値がどうやらチェックボックスの属しているダイアログであるらしいことが分かる。idも固定のようなので、ここを指定してやれば一意に選択できそうである。
![WS000010.png](https://qiita-image-store.s3.amazonaws.com/0/34636/e68e34b5-fa74-bd36-359d-a640f7273780.png)

◆　offsetParentの値を選択するため、先程コンソールに入力した文を以下のように書き換える
` __utils__.findAll('div.ID-compareConceptSelector._GAn1 input[type="checkbox"][class="ACTION-toggle TARGET-view"]')`

◆　書き換えた文をコンソールに入力し、Enterキーを押下する
![WS000011.png](https://qiita-image-store.s3.amazonaws.com/0/34636/1bb910b4-6c7d-b4b3-679b-9fc2a0c73b4c.png)

一意の要素が選択されることを確認する。

試しに下記をコンソールに入力してチェックボックスをチェックしてみる
`__utils__.mouseEvent('click', 'div.ID-compareConceptSelector._GAn1 input[type="checkbox"][class="ACTION-toggle TARGET-view"]')
`
![WS000012.png](https://qiita-image-store.s3.amazonaws.com/0/34636/6274b8f2-8952-f75a-e068-6254ff440c8d.png)

チェックできた。

CasperJSでクリック遷移させる場合は文法を変える必要もあるが、特定要素の指定をするときに割と簡単にできるので試す価値ありです。

不明点ありましたらコメント欄まで。
cvsリポジトリをgitに変換

## 準備

```bash:centos7の場合
yum install -y git-cvs cvsps
```

```bash:ubuntuの場合
apt install -y git-cvs cvsps
```


* centos5の場合
    * http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/git-cvs-1.7.1.1-2.el5.rf.x86_64.rpm
    * http://dl.fedoraproject.org/pub/epel/5/x86_64/cvsps-2.2-0.8.b1.el5.x86_64.rpm

## CVSROOTの環境変数を確認

```
# 手元で動かしたい場合はローカルに
# /var/cvs-rep/ の /CVSROOT/ と、該当のディレクトリを持ってきて動かせば良い。
export CVSROOT=/home/user/cvs-rep/
```

## 変換

```bash:myprojectリポジトリをmyproject.gitに変換
git cvsimport -v -C myproject.git myproject
cd myproject.git
```

```bash:念のため差分がないか確認(cvs側でcommitし忘れとか)
diff -ru myproject myproject.git | egrep -v ^Only.*"CVS|.git"$
```

タグ付け
----------

```bash:あとで分かるようにタグ付け
git tag convert-from-cvs
```

```bash:タグつけるの忘れたのに気づいた場合、ハッシュを指定すれば良い。
git tag convert-from-cvs 78ee21b2a92a111703761aeb
```
iOS7.1以降端末へのOTA配信

#はじめに
iOS7.1以降端末へのadhocアプリをOTA配信するにあたってplistをSSL環境下におく仕様になったようです。
adhocアプリもEnterprise版のrelease配布も同じく。

##iOS8.x系でインストールが出来ない不具合

手元で何度か起こっていますので参考までに

その対応でこの記事にたどり着いた方は
こちらがご参考になるかも。plistの指定が厳格になったようです。↓
http://stackoverflow.com/questions/25760484/ios8-beta-ad-hoc-app-download-itms-services/25994559#25994559

>Specify a 'display-image' and 'full-size-image' as described here: http://www.informit.com/articles/article.aspx?p=1829415&seqNum=16
iOS8 requires these images

他、サーバ側の様々なセキュリティ対策の結果
SSL設定がちゃんとされていなかったということもありえます。
この場合はSSLがちゃんとされている他のサーバで動かしてみることを検討してみてください。

#OTA
WebサーバからiOSアプリを配布する方法のひとつです

#必要なファイル
 - 入り口となるhtml
 - plist
 - アプリ本体

#iOS7.1以降の端末で

##SSLなし
###htmlの記述
```html
<a href="itms-services://?action=download-manifest&url=[http://からはじまるplistの配置場所URL]">インストールする</a>
```

![cert.png](https://qiita-image-store.s3.amazonaws.com/0/12362/7b95ec04-2bfe-62af-930b-71a86bd57e4c.png)

##SSLあり
###htmlの記述
```html
<a href="itms-services://?action=download-manifest&url=[https://からはじまるplistの配置場所URL]">インストールする</a>
```

![alert.png](https://qiita-image-store.s3.amazonaws.com/0/12362/671040d6-1580-551c-5765-0fa04fec4cd7.png)

ここに表示されているアプリ名はplist中のmetadataに含まれるtitleの文字列が表示されています

#SSL化の選択
思いつく限りは下記のとおりです。
##自己署名証明書
いわゆるオレオレ証明書をplistを配置するサーバに設定する方法です。

自己署名証明書検証が完了しました。
VPS上での設定その他、手順が長くなったので
別記事で紹介します。

向いているのは

 - 個人でサーバを立てている
 - コストをかけたくない
 - iPhone構成ユーティリティを使える
 - 自己署名証明書
 - 運用コストを厭わない

使用するデバイスが増えれば運用コストは高くなります。
iPhone構成ユーティリティを使いadhocアプリを配布するデバイスへ証明書をインポートし
端末とplistを配置したサーバ間ではSSL通信、となります。
作成した構成プロファイルを

 - メールなどで送付しインストール
 - フィルタリングしたネットワーク内で公開しダウンロード

などが実施しやすいかなと

http://nanapi.jp/108213/
http://k-ui.jp/blog/2012/10/15/installing-a-private-certificate-in-your-iphone/

##レンタルサーバの共有SSLを使う
向いているのは

 - サーバの設定に不慣れ
 - 運用コストをかけられない
 - すぐ使いたい
 - 借りているサーバにSSL機能がついている
 
どういった証明書を使っているか、デメリットは？などはレンタル先で説明されている場合が多いです。

共有SSLの注意点：さくらインターネット
http://support.sakura.ad.jp/manual/rs/web/ssl_attention.html

##お手ごろな証明書を購入

証明書の発行に日数がかかる場合が多い一方技術サポートが手厚いところがおおいです。自前のサーバやレンタルサーバなどSSL化できるサーバの選択肢が増えるのもメリットだと思います。

#参考URL
http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-work-on-ios-7-1
http://nanapi.jp/108213/
http://support.sakura.ad.jp/manual/rs/web/ssl_attention.html

#さいごに
plistをSSL配下におけば、アプリのインストールはできるようになります。
ただ、別サーバにおいて、いったん回避策のつもりでいると、サーバ名が別で表示されてしまいアプリのインストール時に怪しむこともありそうです。
ADTで静的リソースをソースに埋め込む


Javaでよく使う[Class#getResource(String)](http://docs.oracle.com/javase/jp/6/api/java/lang/Class.html#getResource(java.lang.String))や[ClassLoader#getResource(String)](http://docs.oracle.com/javase/jp/6/api/java/lang/ClassLoader.html#getResource(java.lang.String))は、Androidでも使えます。普通にソースディレクトリに*.java以外のファイルを置くと、APKファイルに一緒にパッケージングされます。

```Java
InputStream in = MyActivity.class.getResourceAsStream("test.jpg");
```
のような感じでも使えます。この場合はMyActivity.javaと同じところにtest.jpgを置く必要があります。プラットフォーム毎に返ってくる値が変わるようなAndroidリソースとしては使えませんが、Contextが不要なのでActivityのコンストラクタなどでも使用できます。

ちなみにsrc/META-INFディレクトリを作成してリソースを配置した場合は無視されるようです。
pandas による金融データの分析とその可視化 (2)

## リターンインデックスと累積リターン

[昨日](http://qiita.com/ynakayama/items/32b1ca2a108876f889cc)に引き続き金融データの分析をしていきます。

株式ポートフォリオの分析にあたりリターンは資産価格のパーセント変化を通常示します。 Yahoo! ファイナンスの Apple の株式価格から株価のパーセント変化を求めます。

pandas のデータフレームには頻度変換のための強力な関数が備わっています。

| 関数         |説明          |
|:------------|:------------|
| resample    |データを固定頻度に変換する|
| reindex     |新しいインデックスにデータを割り当てる|

その他のデータフレームの関数については[リファレンス](http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.html)を参照すると良いでしょう。

[調整後終値](http://www.yahoo-help.jp/app/answers/detail/p/546/a_id/45316/~/%E8%AA%BF%E6%95%B4%E5%BE%8C%E7%B5%82%E5%80%A4%E3%81%A8%E3%81%AF) (Adjusted Closing Values) とは株式分割や配当の前後でデータを連続的にとらえるために分割後の値に調整したものです。

リターンインデックスとは銘柄の配当も加味した場合のパフォーマンスを示す指数で、投資単位を表す値を持つ時系列なデータです。 Apple のリターンインデックスは cumprod メソッドで求まります。

```py3
import pandas as pd
import pandas.io.data as web

# 2010 年以降の Apple 株の調整後終値を取得
price = web.get_data_yahoo('AAPL', '2009-12-31')['Adj Close']
returns = price.pct_change()
ret_index = (1 + returns).cumprod() # リターンインデックスの算出
ret_index[0] = 1 # 1 行目が NaN なので 1.0 に
print ( ret_index )
# => 
# Date
# 2009-12-31    1.000000
# 2010-01-04    1.015602
# 2010-01-05    1.017330
# 2010-01-06    1.001136
# 2010-01-07    0.999309
# 2010-01-08    1.005974
# 2010-01-11    0.997087
# 2010-01-12    0.985731
# 2010-01-13    0.999654
# 2010-01-14    0.993828
# 2010-01-15    0.977239
# 2010-01-19    1.020490
# 2010-01-20    1.004789
# 2010-01-21    0.987410
# 2010-01-22    0.938432
# ...
# 2014-02-19    2.653155
# 2014-02-20    2.622445
# 2014-02-21    2.593315
# 2014-02-24    2.604671
# 2014-02-25    2.577565
# 2014-02-26    2.554310
# 2014-02-27    2.605263
# 2014-02-28    2.598203
# 2014-03-03    2.605708
# 2014-03-04    2.622889
# 2014-03-05    2.628419
# 2014-03-06    2.620470
# 2014-03-07    2.618939
# 2014-03-10    2.621309
# 2014-03-11    2.646835

# 累積リターンを算出
m_returns = ret_index.resample('BM', how='last').pct_change()
print( m_returns['2014'] ) # 2014 年分を表示
# =>
# Date
# 2014-01-31   -0.107696
# 2014-02-28    0.057514
# 2014-03-31    0.018718

# 集約をおこないながら resample することで累積リターンを計算することもできる
m_returns = (1 + returns).resample('M', how='prod', kind='period') - 1
print( m_returns['2014'] ) # 2014 年分を表示 (同じ結果)
```

巨大なデータフレームの情報を print() すると自動的に中略され先頭と末尾が表示されます。

## 各社株式ポートフォリオの累積リターン算出と可視化

2010 年以降、とくに震災後から今年の 3 月 11 日までの 3 年間に注目して、金融及び IT 分野の株式ポートフォリオ価格履歴をプロットしてみます。

```py3
def get_px(stock, start, end):
    return web.get_data_yahoo(stock, start, end)['Adj Close']

names = ['AAPL', 'GOOG', 'MSFT', 'DELL', 'GS', 'MS', 'BAC', 'C']
px = pd.DataFrame( {n: get_px(n, '1/1/2010', '3/11/2014') for n in names} )

px = px.asfreq('B').fillna(method='pad')
rets = px.pct_change()
result = ((1 + rets).cumprod() - 1)

plt.figure()
result.plot()
plt.show()
plt.savefig("image.png")

```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/38501/30d5c620-798a-f165-de2a-fb00ae748472.png)

ここから一定期間のポートフォリオのリターンを計算したり、さまざまな可視化をおこなって戦略のバックテストをすることができます。

可視化も容易にできて豊富な関数を備えるデータフレームで金融データを扱えることにより、有償の高価なソフトウェアに頼らずともアドホックな分析が試行できることがわかりました。

## 参考

Pythonによるデータ分析入門――NumPy、pandasを使ったデータ処理
http://www.oreilly.co.jp/books/9784873116556/
Railsのロケールで特殊文字が表示されない問題

```yaml:locales/ja.yml
ja:
  footer: "&copy; naoty All Rights Reserved."
```

などと`&copy;`のような特殊文字をロケールファイルで指定するとうまく表示されない。

```
> I18n.t("footer")
=> "&copy; naoty All Rights Reserved."
```

こういうときは特殊文字の16進数表記を使うとうまく表示される。

```yaml:locales/ja.yml
ja:
  footer: "\xA9 naoty All Rights Reserved."
```

```
> I18n.t("footer")
=> "© naoty All Rights Reserved."
```
Jenkins＋Seleniumでフォアグラウンドでブラウザを表示する方法

# はじめに
* Jenkins＋Selenium(+Capybara, etc...)などを使って自動テストができる環境を持っている方は見ておいてください
 * しかも、構築して暫くはうにっとブラウザが立ち上がるところが見えていたがある日ぱたりと止まって見えなくなった方
 * しかも、どこで失敗してるのか実際に見てみたいのに表示されなくて困って[ここ](http://qiita.com/oh_rusty_nail/items/6757af94df456260b860)を見た方
 * しかも、コマンドプロンプトから実行すると成功するのにJenkinsから実行すると失敗してワケワカメな方

# はまったところ

### 現象
* 私の構築している環境での問題はWindows8.1 InternetExplorer11のテストがjenkinsから実行したら失敗
するというものでした

### 調査・解析
* Jenkinsを介さずコマンドプロンプトで実行 ▶︎ 成功
 * テスト自体の問題はなさそう
* 同じように構築したWindows8 InternetExplorer10の環境でJenkinsを介して実行 ▶︎ 成功
 * Jenkinsから実行が問題とは言い切れなさそう。OS/ブラウザのバージョンが非対応とか？
 * 実際、SeleniumのWikiにもInternetExplorer11はサポートしたよとは書かれていない
* Windows8.1 InternetExplorer11の環境下でJenkinsを介して実行 ▶︎ 失敗
 * テキスト入力(fill_in)をすると「 No connection could be made because the target machine actively refused it. - connect(2) (Errno::ECONNREFUSED)」とエラーが出てた

# フォアグラウンドでブラウザを立ち上げるようにする方法
* 至って簡単なことでしたが、 ```java -jar jenkins.war``` を実行するときにコマンドプロンプトから実行する
 * 私はタスクスケジューラでOS起動時に実行するようにしていましたが、それだとJenkinsのお仕事もバックグラウンドに持ってかれてしまうのだろうと
 * 自分で作り出した特異なケースなので、なかなかググっても答えにありつけなかったはずですm(_ _)m
* 対応後テストを回してみると成功しました
 * 追ってませんが、テキスト入力できなかったのはInternetExplorer11の特有な問題なのかもしれないです
 * Firefox3.X系のときにJavascriptでブロックされるとかなんとかで同様な現象が起きていたのでセキュリティ的な何かが絡んでいるのかもしれません

----

### 参考にしたサイト
* http://stackoverflow.com/questions/9618774/jenkins-selenium-gui-tests-are-not-visible-on-windows


# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
VirtualBoxで"Kernel driver not installed"

VirtualBoxでゲストOS（今回はWindowsXPでした）を起動しようとしたら以下のエラーが。

>Kernel driver not installed (rc=-1908)
>
>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing
>
>'/etc/init.d/vboxdrv setup'
>
>as root. if it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.

#何が起こったの
* VirtualBoxインストール後にカーネルのバージョンが変わった時
* カーネルモジュールがうまく組み込まれなかった

#どうすればいいの
* スーパーユーザ権限で以下のコマンドを実行

```bash
# /etc/init.d/vboxdrv setup
```

* サイトによってはsetupした後にstartさせたりとかあるけど取り敢えず我が家の環境ではsetupだけでエラー吐かなくなりました

#カーネルアップデートするたびにこれやんのめんどい
* そんなあなたにdkms？（調査不足）
* 上述のメッセージを適当翻訳するよ

>if it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.

```
もし君が使ってるディストリビューションで利用可能なら、DKMSパッケージをまず初めにインストールすべきだよ。
DKMSはLinux kernelの変化を追跡して、必要に応じてvboxdrvカーネルモジュールをリコンパイルしてくれるよ。
```

* つまりカーネルのバージョンの変化を追いかけて自動で組み込んでくれる…！？
* と思ったけどggってたら違う感じしてきた
* まぁでも今手元で問題なくゲストOSが動いているし次トラブった時に試してみます。

#ちなみに
* 以下のどちらかのコマンドを叩けばモジュールが組み込まれているか（loadedかどうか）教えてもらえます

```bash
# service vboxdrv status
```

```bash
# /etc/init.d/vboxdrv status
```

* 出力はこんな感じ（loaded）

```bash
VirtualBox kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) are loaded.
```
jenkinsでIRCbotプラグインを利用してngircdにつないだときにエラーになる


デフォルト設定でおもむろに`ngircd`を導入し、jenkinsから`IRC Plugin`で接続すると、以下のようなエラーになります。

> IRC notifier plugin: Sending notification to: jenkins
IRC notifier plugin: [ERROR] not connected. Cannot send message to 'jenkins'

別のIRCクライアントからは簡単につながるのになぜかなーと
思って調べていたんですが、Nicknameが長過ぎるため接続出来ないようです。


## 回避策1
Jenkins側の設定で`Nickname`を8文字以内に変更する。

![kobito.1394596682.470032.png](https://qiita-image-store.s3.amazonaws.com/0/11214/811f49ce-cfb5-f9b5-0136-f8bb05f2766b.png "kobito.1394596682.470032.png")

## 回避策2
IRCサーバー側の`ngircd.conf`の`MaxNickLength`を11文字に書き換える。

ログが出てなくてちょっと困りました。
以上です。

### 参考
https://groups.google.com/forum/#!topic/jenkinsci-users/VHOzk_iPkik
スライドショーの連打対策

アニメーションを伴うスライドショーとかでボタンを連打するとバグるのでflagをたてて判定。

```
var $btn = $(".btn"), // クリックするボタン
    flag = true;
$btn.on("click", function(e){
  e.preventDefault();
  if(flag){
    flag = false;
    $("hoge").animate(
      {"left": "100px"},
      "swing",
      function(){
        flag = true;
      }
    );
  }else {
    retutn false;
  }
});
```
Assembleで複数の編集領域を使う


Assembleで一つのページファイルに複数の編集領域を持たせる事ができたので、自分用メモとして残す。

## レイアウトファイル
```layout.hbs
<!doctype html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>{{title}}</title>
</head>
<body>
	{{> header}}

	<div class="content">
		{{> body}}
	</div>

	{{> footer}}

	<script src="common.js"></script>
	{{#block "footer-js"}}{{/block}}
</body>
</html>
```

## ページファイル
```page.hbs
---
title: ぺーじたいとる
---
{{! ここから「> body」に突っ込む内容 }}
<h1>Lorem Title</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam ex excepturi hic deleniti odio expedita totam? Nisi eum eaque aliquam illum adipisci quibusdam, perspiciatis officia, nobis odio, officiis provident, eveniet!</p>

{{! ここから「#block "footer-js"」に突っ込む内容}}
{{#content "footer-js"}}
<script src="js/page.js"></script>
{{/content}}
```

## ビルド結果
```page.html
<!doctype html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>ぺーじたいとる</title>
</head>
<body>
	<header>
		<h1>Site Title</h1>
	</header>
	<div class="content">
		<h1>Lorem Title</h1>
		<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam ex excepturi hic deleniti odio expedita totam? Nisi eum eaque aliquam illum adipisci quibusdam, perspiciatis officia, nobis odio, officiis provident, eveniet!</p>
	</div>
	<footer>
		<p><small>Copy</small></p>
	</footer>
	<script src="js/common.js"></script>
	<script src="js/page.js"></script>
</body>
</html>
```

今まで別ファイルに書いて、自作ヘルパーから呼び出してました…。
ちくせう…。
Rails4のproductionモードでSystemStackError

development モードから production モードにした際に突如 SystemStackError で動かなくなったので対応した際のメモ。

* routes で定義された全てのパス(controller のメソッド)の実行時に起こる
* パス内で activerecord 関連のメソッドを呼び出して無くても起こる
* DB には正しく接続されている

上記にも関わらず以下ログが出る。

```production.log
F, [2014-03-12T11:30:28.213030 #72992] FATAL -- : 
SystemStackError (stack level too deep):
  activerecord (4.0.3) lib/active_record/query_cache.rb:44

```

config/environments/production.rb でデフォルトで true となっている eager_load を false にすると現象は起きなくなった。原因はまだ分かっていません。。

```production.rb

# 以下を修正
  #config.eager_load = true
  config.eager_load = false

```
コマンドラインでGoogleDriveにアップロードする

Ubuntuやmacで開発をしていて、ログやキャプチャをとった後、そのファイルをチームメンバーに
共有をしたいときには、GoogleDriveにアップロード後共有することが多いです。

ただ、コマンドライン上でログファイルを取得して、ブラウザを表示して、アップロードしたい
ログファイルを指定して、、、とやるのは結構面倒な作業です。

そんなときはGoogle謹製のコマンドラインツールを使用しましょう。

https://code.google.com/p/googlecl/

# インストール

Downloadsページから、最新版のtar.gzを取得します。

https://code.google.com/p/googlecl/downloads/list

投稿時最新は googlecl-0.9.14.tar.gz でした。
後はコマンドラインで、

```
tar xvf googlecl-0.9.14.tar.gz
cd googlecl-0.9.14
sudo python setup.py install
```
とするだけです。


# 使い方

GoogleDriveのリストを表示する場合は、

```
$ google docs list
```

とします。
初回使用時のみ、ユーザ名の入力とブラウザでの認証を求められます。

GoogleDrive上のファイル一覧を見るとき。

```
$ google docs list -f ディレクトリ名
```

ファイル一覧はCSVなので、ファイル名だけ見たいときはawkでつなぐ。

```
$ google docs list -f ディレクトリ名 | awk -F, '{print $1}'
```

アップロードするとき。

```
$ google docs upload　--no-convert ファイル名
```

カレントディレクトリにダウンロードするとき。

```
$ google docs get ファイル名 .
```
[暫定対応]Xcodeのver.が上がったことで今まで使っていたプラグインが使えなくなってしまった場合の対応方法

# 背景
Xcodeのver.上げたら便利なプラグイン達が使えなくなって発狂した。
当然、各プラグインの開発者達がスグに対応してくれるとは思いますが、その間も待てない私のような人間はこの方法で対応すると良いです。

# 原因
そもそもの原因はXcodeのver.が上がったことでDVTPlugInCompatibilityUUIDの値が変更されたことが原因。

# 対応方法
まず、新しいver.のXcodeのDVTPlugInCompatibilityUUIDを調べます。
調べ方は
```
open /Applications/Xcode.app/Contents/Info.plist 
```
このコマンドでXcodeのInfo.plistが表示されるので、DVTPlugInCompatibilityUUIDキーに対応する値がそれです。

DVTPlugInCompatibilityUUIDが分かったら
~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/[各プラグインフォルダ]/Contents/Info.plist を開いて**DVTPlugInCompatibilityUUIDs**キーの値に最新ver.のDVTPlugInCompatibilityUUIDを追加してXcodeを再起動する

これでプラグインが再び動くようになります。
gitで自分用テンプレートを使う

# オレオレgitテンプレートの定義

```bash
$ tree $HOME/work/.git_template
/home/XXX/work/.git_template
-- hooks
   -- post-flow-release-finish
   `-- post-flow-release-start
`-- info
    `-- exclude

2 directories, 3 files
```

# git clone OR git init

1. -template オプションでtemplateディレクトリを指定 (git init --template=$HOME/work/.git_template)
2. 環境変数で指定(export GIT_TEMPLATE_DIR=$HOME/work/.git_template)
3. .gitconfigで指定（git config --global init.templatedir $HOME/work/.git_template）

# 適用例

```bash
/tmp$ rm -rf test
/tmp$ mkdir test
/tmp$ cd test
/tmp/test$ touch a
/tmp/test$ git init --template=$HOME/work/.git_template
Initialized empty Git repository in /tmp/test/.git/
/tmp/test$ tree . .git
.
`-- a
.git
-- HEAD
-- config
-- hooks
   -- post-flow-release-finish
   `-- post-flow-release-start
-- info
   `-- exclude
-- objects
   -- info
   `-- pack
`-- refs
    -- heads
    `-- tags

8 directories, 6 files
/tmp/test$
```
rvmのアップデートはupdateじゃなくてgetを使う

## `rvm update` じゃない

やると、updateは無くなったとエラーになる

```
$ rvm update

ERROR: rvm update has been removed. Try 'rvm get head' or see the 'rvm get' and rvm 'rubygems' CLI API instead
```


## `rvm get` を使う

使い方は `rvm get help` で調べる

```
$ rvm get latest
```
最新の開発版を使いたい場合はこちら

```
// https://github.com/rvm/rvm#try-again-with-latest-rvm

$ rvm get master
```


以上です。
Qt4 → Qt5 プログラム移行注意点

**Qt4とQt5のちがいをざっくりまとめてます。以下の点に注意すれば、ビルドは通るはず。**

#### ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)xxxx.pro

Qt4：

```
QT += core gui network webkit
```

Qt5：

```
QT += core gui network webkitwidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
```

#### ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)QApplication宣言
Qt4：`#include <QtGui/QApplication>`
Qt5：`#include <QApplication>`

#### ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)ローカルディレクトリ

Qt4：`QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation);`
Qt5：`QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);`

#### ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)QTableWidgetの行の高さを固定する方法が異なる

Qt4：

```
ui->tblwgt->verticalHeader()->setResizeMode(QHeaderView::Fixed);
```

Qt5：

```
ui->tblwgt->verticalHeader()->setDefaultSectionSize(100);
ui->tblwgt->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
```

#### ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)その他注意点

QHttp　→　QNetworkAccessManager
QString.toAscii()　→　QString.toUtf8()
SendMessageというワードが予約語（？）になったせいか、ビルドエラーになる場合がある

#### ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)アプリ配布

Qt5でWindowsアプリを配布するときはexeと同じ場所に

```
platformsフォルダ
　├ qminimal.dll
　└ qwindows.dll
```

を同梱すること

以上です。
debuggerでobjectが見えないときの対応


* こんな感じのエラーが出て、objectが見えず、デバックがしずらかった

```
error: Couldn't materialize struct: size of variable <varName> disagrees with the ValueObject's size Errored out in Execute, couldn't PrepareToExecuteJITExpression
```

* この二つの設定を確認する

    * Build Settingの``Strip debug symbols during copy``を``YES``にする
    * Build Settingの``Optimization Level``を``None``にする
* ConfigurationsにDebugとRelease以外にも追加した時にデフォルトの設定がDegugと同じでないために起きる問題みたい。

### 参考URL
* http://stackoverflow.com/questions/19870176/xcode-5-debugger-doesnt-print-objects-and-shows-nil-when-they-arent
Safari6.1.2でYoutubeの読み込みが停止する

#Safari6.1.2でYoutubeの読み込みが停止する

2014.03.12：時点
FlashPlayerのバージョンは10.1

Youtubeの動画を100%表示や背景に利用するために絶対配置するとSafariで
読み込みが停止されることがあるようです。

##【現象】
youtubeをposition:absolute;などの絶対配置で指定した場合、
Safariでうまく自動再生が開始されない、再生が途中で停止される。

埋め込み方はどうも関係なさそう、objectタグだろうがiframeAPIだろうがiframeの直埋め込みでも
同様の現象は発生した。

同じ動画のキャッシュが残っていると正常に動作する場合がある。

試験運用中のHTML5プレーヤーに変更していると、この現象は発生しない。

lightbox系のプラグインで表示させたりするのは大丈夫なので、ページ読み込み時のいろんなレンダリングの関係で停止しているのかも。。。

##【同様の現象が確認できたページ】
・http://yanmar-pbp.jp/
・http://next-a-class.com/animation/index.html
・http://www.seanmccambridge.com/tubular/

##【解決法】
現状は静止画に切り替えるとか、絶対配置を避けるといった方法しかないかと。。。
何かあったら教えて欲しいです。。。

【追記：2014/3/13】
パラメータにhtml5=1を付与して埋め込むとHTML5プレーヤーで読み込めるので、不具合がなくなった！！

ε=＼＿〇ノﾋｬｯﾎｰｲ!!

html5プレーヤーはiframeでのみ使用できるっぽいのでobjectタグで読み込んでいる場合は切り替える必要あり。
html5パラメータは公式で発表されていないっぽいけど、今後はHTML5プレーヤーが主流になると思うし
急に無くなるってこともあまりなさそうな気がする。
ファイル・スラック領域の確認方法

* [ファイル・スラック領域とは？](https://www.google.co.jp/search?num=50&q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B9%E3%83%A9%E3%83%83%E3%82%AF%E9%A0%98%E5%9F%9F)

市販ツール
========

* [Forensic Tool kit](https://www.focus-s.com/focus-s/products/forensicsecurity/soft_forensictoolkit.html)
* [EnCase® Forensic | Ji2](http://www.ji2.co.jp/product/encase-forensic/)
* [Final Data](https://finaldata.jp)

あたりを使えば確認できる。超時間かかる
フォント Ricty のインストール（Mac)


```
$ brew tap sanemat/font
$ brew install ricty

$ cp -f /usr/local/opt/ricty/share/fonts/Ricty*.ttf ~/Library/Fonts/
$ fc-cache -vf

```

[参考] Sublime Text 2でフォントを設定する
http://succi.jp/blog/?p=263


[参考] プログラムに最適なフォント『Ricty』を超簡単にインストール[Mac限定]
http://morizyun.github.io/blog/ricty-font-homebrew-mac/
[メモ]よくわからない日本語の説明でドキドキしちゃった時の対処方

http://www.xbox.com/ja-JP/developers/id
↑のページの申請の後いきなり御社とか出てきてドキドキしたので共有


ja-JPをen-usに変える。

すると英語になるかわりだいぶ読み取りやすくなる。

このページだと御社って行っていて日本人から見るとそれって法人じゃないとだめなの！？って認識になっちゃうけど
英語のページに行くとなんかいい感じ


まあ申請していいかはしらない。
certificate has expired or is not yet valid


### boot2doccker使っててrunに失敗したのでその備忘録

local timeがずれていたのが原因でした。

```
$ docker run -t centos /bin/bash -c "echo hello; echo world;"
Unable to find image 'centos' (tag: latest) locally
Pulling repository centos
2014/03/12 08:37:14 pull: Get https://cdn-registry-1.docker.io/v1/repositories/library/centos/tags: x509: certificate has expired or is not yet valid
```

```
$ boot2docker ssh
docker$ date
Sat Feb  8 01:39:02 UTC 2014

とりあえず手動で設定しておいた
docker$ sudo date -s "201403121007"
Wed Mar 12 10:07:00 UTC 2014
```

```
再度実行
$ docker run -t centos /bin/bash -c "echo hello; echo world;"
hello
world
```
よく使うXcodeとiOS Simulatorキーボードショートカット


常時MBAシングルモニタという貧弱解像度での開発なので若干偏ってると思います。

# Xcode

|操作|キーバインド|
|:-:|:-:|
|ファイルを開く|cmd-shift-O|
|タブを追加|cmd-T|
|タブを閉じる|cmd-W|
|次のタブ / 前のタブ|cmd-shift-{ / cmd-shift-}|
|ワークスペース内検索|cmd-shift-F|
|.h/.mファイル切替|cmd-ctrl-↑|
|インデントを下げる / 上げる|cmd-] / cmd-[|
|コメントアウト切替|cmd-/|
|前へ / 次へ|cmd-ctrl-← / cmd-ctrl-→|
|定義へ|cmd-ctrl-J|
|クリーン|cmd-shift-K|
|ビルド|cmd-B|
|実行|cmd-R|
|テスト|cmd-U|
|右ペインの表示切替 (Utilities)|cmd-alt-0|
|下ペインの表示切替 (Debug area)|cmd-alt-Y|

# iOS Simulator

|操作|キーバインド|
|:-:|:-:|
|表示サイズ 大/中/小|cmd-1/2/3|
|画面回転 右/左|cmd-→/←|
|ホームボタン タップ|cmd-shift-H|
|ホームボタン ダブルタップ|cmd-shift-H x2|
|ロック|cmd-L|
|スローアニメーション切替|cmd-T|
|着信ステータスバー切替|cmd-Y|
|ピンチイン/ピンチアウト|alt-ドラッグ|
Google Play Game Servicesの実績をクリア(未解除状態に戻す)

Google Play Game ServicesでAchievement関連のテストをしたあと、未解除状態にもどすツールがあるのでそれを使う。

https://github.com/playgameservices/management-tools/tree/master/tools/reset-o-matic

指示通りにするだけ。

* このツールはアプリのWeb版として振る舞うのでGoogle Play Developer ConsoleでWeb版のアプリを追加する必要があるが、その際にこのツールにアクセスするためのURLをちゃんと入力する必要がある
* ブラウザで開ければいいんだろう、とファイルシステム上のものをブラウザで開いても動かない
* ↑ c:\work\playgameservices 云々ではダメでhttp://localhost/tools/reset-o-maticならいける
macにhomebrewからrbenv ruby rails導入

すでにちまたにでまわってますが、せっかくなので。  
Mac OS X 10.9

#### home brewを最新にする

```
~ $ brew update
Updated Homebrew from a0b1aab2 to 51a9003a.
```

#### rbenv のインストール

```
~ $ brew install rbenv
==> Downloading https://github.com/sstephenson/rbenv/archive/v0.4.0.tar.gz
######################################################################## 100.0%
==> Caveats
To use Homebrew's directories rather than ~/.rbenv add to your profile:
  export RBENV_ROOT=/usr/local/var/rbenv

To enable shims and autocompletion add to your profile:
  if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
==> Summary
?  /usr/local/Cellar/rbenv/0.4.0: 31 files, 152K, built in 5 seconds
```
#### messageに出ていた設定実施

```
~ $ echo 'export RBENV_ROOT=/usr/local/var/rbenv' >> ~/.bash_profile 
~ $ echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi'>>~/.bash_profile
```
#### bashファイルの反映

``` 
~ $ source ~/.bash_profile 
```

#### rubyのインストール

```
~ $ rbenv install 2.1.1
~ $ rbenv rehash
```

#### rubyをどのユーザーでも使えるようにする
macでは不要かもです 

```
~ $ rbenv global 2.1.1
~ $ ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]
```
#### railsインストール
結構時間かかります。 verbose オプションつけたほうが進捗わかるかもです。未確認。

```
~ $ gem install rails
~ $ rbenv rehash
```
Ubuntu12.04にEclipseを入れる（日本語）

wiki.ubuntulinux.jpの通りにインストールした所エラーが出て起動できなかったのでそれについて。

#wiki.ubuntulinux.jpのやり方
https://wiki.ubuntulinux.jp/UbuntuTips/Application/EclipseJapaneseSetup#Pleiades

* pleiadesパッケージをインストールする

```bash
$ sudo apt-get install pleiades
```

依存関係により自動的にEclipseもインストールされる

* `/etc/eclipse.ini`を修正する
`-javaagent:/usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar`
を追記。ただし`-vmargs`の行より後に（普通は一番最後の行の後に追記でよい

* 起動

```bash
$ eclipse -clean
```

初回のみ`-clean`をつけて起動する。次回以降は普通に起動しておｋ

#エラった
* ログを見ろｋｓｇって言われたのでログを見る（以下は抜粋）

>!MESSAGE アプリケーション・エラー
>!STACK 1
>java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
>	no swt-gtk-3740 in java.library.path
>	no swt-gtk in java.library.path
>	Can't load library: /home/tea/.swt/lib/linux/x86_64/libswt-gtk-3740.so
>	Can't load library: /home/tea/.swt/lib/linux/x86_64/libswt-gtk.so

>	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:285)
>	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:194)
>		（中略）
>	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
>	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)

#ggってみたところヒットしたので対処
http://stackoverflow.com/questions/10165693/eclipse-cannot-load-swt-libraries
###Ubuntu 12.04 32 bit
`ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/`

###Ubuntu 12.04 64 bit
`ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/`

* なお32bitについては未検証
Jenkins のジョブの設定を版管理するいい方法はない?

[Jenkins](http://jenkins-ci.org/) のジョブの設定をバージョン管理するいい方法は無いのかとちょっとググってみたがあまりよさげな情報は見当たらなかった……。Jenkins のホームディレクトリを直接バージョン管理するといふ話がいくつか出てくるけど、それはあまり賢くないよね。(そもそもバージョン管理ツールが設定ファイルなどを直接書き換へたとき、Jenkins に設定がうまく反映されるのかな?)

* [Automatically Version Control Your Jenkins Configuration](http://blogs.lessthandot.com/index.php/enterprisedev/application-lifecycle-management/automatically-version-control-your-jenkins/)
* [Keeping your configuration and data in Subversion](https://jenkins-ci.org/content/keeping-your-configuration-and-data-subversion)

----

とりあへず Jenkins の設定をバージョン管理しない普通の状態でも、ビルド時の「シェルスクリプト」や「Windows バッチコマンドの実行」のところに直接長々とコマンドを書くのではなくて、シェルスクリプトファイルやバッチファイルも (ビルドするプログラムのコードベースと一緒に) バージョン管理したほうが良いですね。

----

## 関連情報

* [Jenkinsのバックアップとリストアについてメモ](http://qiita.com/tq_jappy/items/3654059d09a4896ae598)
postのリクエスト値を保存したければ言語側でaccess_logを自作

postのリクエスト値を保存したければ言語側でaccess_logを自作すれば良い。

Apacheの設定でできるのかと思って調べてたのですが、できないことがわかった。
(1アクセスに40行もerror_logに出力されてもいいなら可能ではある。)

* [mod_log_config - Apache HTTP サーバ](https://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html)

Apacheではcookieの値をログに書き出すことはできる。

```bash:
%{Foobar}C : サーバに送られたリクエスト中のクッキー Foobar の値
```

注意点
--------

ログを1行にするため、改行を置換かurlencodeかserializeとかしとく。
phpなら$_SERVER['QUERY_STRING']。
composerに対応したgithubリポジトリの作成



#### 前提
- [Packagist](https://packagist.org/)への登録は行わない。
 - 現状、登録しないと困った事が発生します。（下の方の困った事参照）

#### ライブラリ側
1. composer.josnを作成する
2. クラスとかもろもろ作成
3. tagをつける

作成したgithubリポジトリはこちら  
https://github.com/mapyo/composer_lib_test


#### ライブラリを使う側
- composer.jsonを作成など

作成したgithubリポジトリはこちら
https://github.com/mapyo/composer-test


#### 困った事
http://k-holy.hatenablog.com/entry/2012/06/13/124335

どうやらpackagistに登録しないと、
composerのクラスローダー経由で利用できない。
なので、composer.jsonで指定する。
以下のような感じ。

```
"autoload": {
  "psr-4": {
    "composer_lib_test\\": "vendor/mapyo/composer_lib_test/src"
  }
}
```

この記述を書かなくていい方法をご存知の方、教えてください〜

#### thanks
- http://akkunchoi.github.io/composer.html#git-composer-
[HTML5] img要素の正しいalt


alt属性の正しい書き方について書いてあるサイトを検索していたらSEOに関する記事ばっかりで萎えたので書いておく。

# alt属性の意味

HTML5でのaltはスクリーンリーダーやロボット等、画像を見る事ができないユーザーに対しても適切な情報を伝えるためのフォールバック。

# alt属性には「その画像が表している”文脈”」を書く

例としてたまたまTLに流れてきた画像を拝借します。
おいしそうですね。

![(8) Twitter](https://pbs.twimg.com/media/BieW4LVCEAA0jJz.jpg "(8) Twitter")
*via [(8) Twitter](https://pbs.twimg.com/media/BieW4LVCEAA0jJz.jpg)*

## 例文

ある晩、私はimg要素のalt要素について正しい説明をしているサイトを探していた。
ところがなかなか見つからないのに業を煮やし、仕方が無いので自らQiitaに記事を書くことにしたのだった。
記事を書くためには画像が必要である。私はおもむろにTwitterのURLを叩き、タイムラインを表示する。やあ、おあつらえ向きな画像があるじゃないか。

![(8) Twitter](https://pbs.twimg.com/media/BieW4LVCEAA0jJz.jpg "(8) Twitter")

リボンの串が刺さっているところを見ると、お子さんは女の子に違いない。思わずそうして画像を見ていたら、どうにも小腹が空いてきたようだ。私は一寸作業を中断して、台所に向かう事にした。

---

駄文失礼。
さて、ここでaltにふさわしいのは次のうちどれでしょうか。

### 1
```HTML:HTML5
<img src='...' alt='可愛いお弁当の画像'> 
```

### 2
```HTML:HTML5
<img src='...' alt='子供向けとおぼしき、美味しそうな、可愛いお弁当の画像。中央に子供の顔を模したおにぎり、周辺をコロッケ、からあげ、イカリング、ミニトマト、卵焼き、レタス、きゅうりが囲む。'> 
```

### 3
```HTML:HTML5
<img src='...' alt='お弁当の画像だ。といってももちろん、ただのお弁当じゃない。俗に言う、愛情弁当ってやつだ。中央に子供の顔を模したおにぎり、周辺にはコロッケ、からあげ、イカリング、ミニトマト、卵焼き、レタスが見える。うん、美味しそうだ。'> 
```

答えは「３」です。

## 解説

### 1
問題外。これはtitle属性に入れるべきです。

### 2
画像の様子を詳細に説明しています。
なぜこれがダメなのかというと文脈に沿っていないから。
この場合、前後が一人称なのに、急に3人称の説明口調になってしまいます。
もし仮に、一人称の文章、三人称の文章を区別するセマンティックな手段が存在すればこれでも良いかもしれませんね。（音声ブラウザではきちんとナレーション風の声に変わったりして）

### 3
前後の文脈と照らし合わせて違和感の無いような文章を構成しています。
書いてて気づいたのですが、この例だとそもそも画像自体に言及しているので、ちょっと差別化が難しく、やや極端な表現になってしまいました。実際には２の例をほんの少し手直しする程度で問題ないと思います。

## そのまんまでも良い場合もある
たとえばサイトのロゴなど。
サイトのロゴが表しているのはその文字自体なので、それをそのまま書けば良い。

## 画像が無くても文脈が変わらない場合は空文字を入れる
たとえば先の例で、画像の内容を前後の文章ですっかり描写してしまっていて、補足的に画像を添えている場合は、altには空文字を入れることができます。
これは、この画像が無くても文脈には一切関わりがないからです。

## やむをえずalt自体を省略できる場合もある

>次のような場合は alt 属性を省略することができる。(MAY)

>* 画像内容が不明な場合 (自動取得/生成やユーザー投稿など) で、かつ次のいずれかの条件を満たす場合
    + img 要素に空文字列でない title 属性がある
    + 空白でない ~~legend~~ figcaption 要素を含む figure 要素内に img 要素がある
    + img 要素が見出し (セクション) 内の唯一の内容となっている
* 画像が閲覧不可な環境 (低速回線やテキスト/音声ブラウザーなど) で、かつ利用可能な代替テキストがない場合
* 画像が閲覧可能な人に向けたプライベートな文書や HTML メール
    + ただし代替テキストを指定することが強く推奨される

>*via [HTML5: img 要素の alt 属性 の仕様 | attosoft.info](http://attosoft.info/blog/html5-img-alt/#omit-alt)*

# まとめ
alt属性は画像の説明ではなく、代役。
**そこに画像があったことにすら気づかせないalt**を書きましょう。

# その他の細かい用例は以下に詳しく載ってます。
[img 要素 - 組込コンテンツ - HTML要素 - HTML5 タグリファレンス - HTML5.JP](http://www.html5.jp/tag/elements/img.html#alt)
DAPを作りたい

#何がしたいの
* DAPを作りたいと友人と妄想しました

#市販のDAPにどんな不満が
* ストレージ容量が少ない
* 自由じゃない

#どんなスペックが欲しいの
* それなりのストレージ容量
* カラー液晶
* 映像再生
* 可逆圧縮なコーデックに対応

#どうやって作るの
* ケースに全部押し込んでそれっぽくしたい
* RaspberryPi使う
* 電源としてモバブ使ってもいいけど生セル用意してやった方が愛着湧きそう

#なんでRaspberryPi使うの
* RaspberryPi使って何か作りたかった
* 操作UIとか作るの便利そう
* マイコンで工作してもいいけど何も知識無いし勉強めんどい

#ストレージどうする
* システム用SDカードはロックしてUSB経由で他のストレージくっつける

##HDD
* 安いけど
* うるせぇ
* あつい
* ポータブルにするし（RaspberryPiとか使うあたり）無駄電力が予想されるし電力を削減したい

##SSD
* 静かだし発熱ないし消費電力少なめととても良い！
* がしかし高い

##SD
* ちょうどSDXC 128GBも出たしな（高い
* SDXC 64GBを2枚つけたほうが安い

#音は
##RaspberryPiの出力そのまま
* とても楽ちん
* 音質は微妙な感じなのでは（友人は音質気にする人）

##USB-DACとか使って処理させるのは
* 用意するのめんどい
* USBの帯域足りるのか
* 電力足りる？
* USB-DACとか使ったこと無いから全くわかりません

#カラー液晶とか言っちゃったけど…
##コンポジットを使う
* 画質的にアウトだろ

##HDMI
* きれい！
* 工作とか色々不要！かんたん！お手軽！
* 高価だし柔軟性に欠ける？

##SPIとか通して液晶を直接制御する
* 安いし自由度高い
* 静止画や簡単な動きを表示するのはなんとかなりそうな気がするけど映像を再生するとなるとパフォーマンスに不安が
* そもそも構造がわからん（経験値ゼロ

##キャラクタLCD使いたい
* だって楽ちんだもん！
* 妄想に反するのでだめ

#妄想中
妄想中だよ！
*
ファイルを探す[findとlocate]

Linux（我が家の環境ではUbuntu12.04）でファイルをサクっと検索したい場合に何を使うか
長らく自分は`find`を使っていたが、どうも`locate`の方が高速だし手軽らしいという話を聞きつけた。

#なんとなく調べてみた感じ
##find
* 検索オプションが豊富
* だから色々柔軟に検索できる（しやすい）
*  __遅い__ 

##locate
* `find`に比べて検索オプションが貧弱（調べ不足？）
*  __速い__ 

#遅いとか速いとかどうしてなの
* `find`ではその場でストレージにアクセスし検索する
* 対して`locate`では事前に作成したデータベースを元に検索する

##つまり
* `find`は新しいファイルに即座に対応できる
* `locate`は新しいファイルに対応できない代わりに検索が高速

#動作

```bash
find / -name '*hoge*'
```

```bash
locate hoge
```

* これで同じ動作。`locate`使ったほうが入力も楽だしよくね、っていう
* `find`では検索する場所を指定している（第1引数`/`）のに対して`locate`では指定していない
* `locate`ではデフォルトで`/`から検索する
* `locate`を用いて`/`以外から検索したい場合については後述

#検索するデータベースってどのタイミングで作られるの
* `/etc/cron.daily/mlocate`で作られている
* cron.dailyなので実行タイミングに起動してないと作成されない
* `/etc/crontab`を確認し実行タイミングを見ておく
* 手動でやりたければ`# updatedb`する

#/以外から検索したいとき
##データベースを作る
* 検索したい場所のデータベースを別個で作る

```bash
# updatedb -U /hoge/ -o /path/to/database.db
```

これで`/hoge/`のデータベースが`/path/to/databse.db`として作成される。
ちなみに標準のデータベースは`/var/lib/mlocate/mlocate.db`にある
* `updatedb`はスーパーユーザ権限で実行する必要がある。#でなく$で実行するとこんな感じ

```bash
$ updatedb -U ~/ -o ~/hoge.db
updatedb: can not change group of file `/home/tea/hoge.db.9XvzA2' to `mlocate': Operation not permitted
```

* 使用するデータベースを変更してlocateする

```bash
$ locate -d /path/to/database.db hoge
```

`-d`オプションでデータベースを指定するだけ

##めんどくさいんだけど…
* `locate`の結果を`grep`でもすればいいじゃない

```bash
$ locate hoge | grep '/home/hogehoge/'
```

#まとめ
* 頻繁にファイルが増えたり消えたりする場合には`find`を使ったほうが良い
* あんま変動しないとこなら`locate`
* ただしデフォルトでは常に`/`から検索されるので注意（無駄も含まれる）
* データベースを別個に作成してもいいけどパイプで`grep`とかに渡してやれば簡単


#追記
* `find`だと権限持ってないところを検索できない

```bash
$ find /etc/webmin -name '*webmin*'
/etc/webmin
find: `/etc/webmin/dovecot': 許可がありません
find: `/etc/webmin/fsdump': 許可がありません
find: `/etc/webmin/openslp': 許可がありません
以下略
```

* `locate`だと権限持ってないユーザで実行しても検索できる

```bash
$ locate webmin | grep /etc/webmin
/etc/webmin
/etc/webmin/acl
/etc/webmin/adsl-client
以下略
```

* Webminを使った意味は特にないです
【jQuery】Tabの中にGoogleMapを埋め込むとなぜかずれるときの対処法

JQueryのタブのなかにGoogleMapを埋め込んだときに、JQuery側の弊害ではまったので、メモ。
JQueryのタブの中に、GoogleMapの埋め込みコードを入れると、
中心座標の緯度・経度を指定しているにもかかわらず、ずれる。

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/35238/0e033282-5cd1-f286-8187-76efd8291e60.png "Untitled.png")


調べてみると、似たような現象に対する解決策を発見！
[jQuery UI TabsでGoogleMapを利用する。](http://blog.minetaya.net/archives/13176)

**対処法としては、タブの非表示方法を別のやり方で見えなくしてあげればいいとのこと。**



以下実際に対処した部分です。

**もともとのソース**
>
>$(function(){
>
>     //いったんタブ全体を非表示にする
>     $('.detail_tab .tab_conts').hide();

>     //デフォルトでtab_conts.box_01を表示する
>     $('.detail_tab .tab_conts.box_01').show();
>    
>     $('.detail_tab .d_tab li').click(function() {
>          $('.detail_tab .d_tab li').removeClass("hit");
>          $(this).addClass("hit");
>          var index = $('.detail_tab .d_tab li').index(this);
>          $('.detail_tab .tab_conts').hide();
>          $('.detail_tab .tab_conts').eq(index).show();
>     });
>
>});
>

どうやらメソッド「.hide()」でタブを非表示するときにCSSの「display:none」が呼ばれているみたいなので、
.hide()を使わずに無理くりCSSで見えなくさせました。

**カスタマイズしたソース**
>$(function(){
>    
>     //いったん全部のタブの中身を非表示にする
>     $('.detail_tab .tab_conts').css( {'position':'absolute','left':'-10000px'});
>    
>     //最初に表示する一番目のタブの中身だけCSSを変更して表示
>     $('.detail_tab .tab_conts.box_01')( {'left': '0','position':'relative','display':'block'});
>
>     $('.detail_tab .d_tab li').click(function() {
>          $('.detail_tab .d_tab li').removeClass("hit");
>          $(this).addClass("hit");
>          var index = $('.detail_tab .d_tab li').index(this);
>         
>          //いったん全部のタブの中身を非表示にする
>          $('.detail_tab .tab_conts').css( {'position': 'absolute','left':'-10000px'});
>         
>          //選択されたタブ番号の中身をCSSを変更して表示
>          $('.detail_tab .tab_conts.box_01')( {'left': '0','position':'relative', 'display':'block'});
>     });
>
>});

一応、これで解決です。
ただ、あまりスマートな感じがしない。。。
componentでビルドされたassetsをrailsのassetsで管理させる方法


`component build` でビルドされた javascript や css などの assets を rails の assets に管理させるのはそんなに難しくない。

```shell
$ cp build/build.js app/assets/javascripts/application.js
$ cp build/build.css app/assets/javascripts/application.css
```

のように assets をコピーするだけ。

毎回コマンドたたくのはめんどいので、下記のような `Makefile` を書いておいて、https://github.com/visionmedia/watch のようなもので `watch` しておけば `app/assets` が更新されて rails の asset pipeline を使えて開発が楽になる。

```make
SRC = $(shell find app/components/ -name "*.*")

build: components $(SRC)
    @component build --dev
    @cp build/build.js app/assets/javascripts/application.js
    @cp build/build.css app/assets/stylesheets/application.css

components: component.json
    @component install --dev

clean:
    @rm -fr components
    @rm -fr build
    @rm -f app/assets/javascripts/application.js
    @rm -f app/assets/stylesheets/application.css

.PHONY: clean
```