OmniAICreator/Qiita-1.07M huggingface dataset:
macが壊れたので初期設定メモ

# ソフトウェア
## Google Chrome
https://www.google.co.jp/chrome/browser/desktop/
# Google Chrome canary
https://www.google.co.jp/chrome/browser/canary.html
## Brave
https://brave.com/ja/
## Google IME
https://www.google.co.jp/ime/

## goland
https://www.jetbrains.com/go/download/#section=mac

## VSCode
https://code.visualstudio.com/docs/?dv=osx

## golang
https://golang.org/doc/install


## iTerm2
https://www.iterm2.com/downloads.html
### 設定
- Scrollback Lines: 20,000
- color theme
 - http://iterm2colorschemes.com/
  - Wez
  - blazer
  - solarized dark
  - red alert
  - etc...
    - ENCOM
- ビープ音 消去
  - [Preferences] -> [Profile] -> [Terminalタブ] -> Silence bell check.


## Karabiner(KeyRemap4MacBook)
https://pqrs.org/osx/karabiner/

- Other plain hjkl operations
 - Control_L+hjkl to Left/Down/up/Right

## just focus
https://itunes.apple.com/jp/app/just-focus/id1142151959

## caffeine
https://caffeine.softonic.jp/mac


## atom
https://atom.io/

## obsidian
https://obsidian.md/

## alfred
https://www.alfredapp.com/

## appcleaner
http://freemacsoft.net/appcleaner/

## fork
https://git-fork.com/

## trailer
https://ptsochantaris.github.io/trailer/

## Xcode
## 1password
https://1password.com/jp
## Clipy
https://clipy-app.com/
## Sketch
https://www.sketchapp.com/
## ShiftIt
https://github.com/fikovnik/ShiftIt/releases
## Kindle
https://www.amazon.co.jp/gp/digital/fiona/kcp-landing-page/ref=klp_mn

## Slack
https://slack.com/downloads/osx

## Discord
https://discord.com/download

## Docker
https://docs.docker.com/docker-for-mac/install/

https://www.docker.com/community-edition

## pritunl
https://github.com/pritunl/pritunl-client-electron/releases

## deepl
https://www.deepl.com/ja/translator

## zoom
https://zoom.us/download#client_4meeting

## Macvim
``` sh
$ brew install macvim
$ ln -s /opt/homebrew/Cellar/macvim/x.x-xxx/MacVim.app/ /Applications/
```

# 設定
## .bash_profile
`alias ll='ls -la'`

## .gitconfig
``` .gitconfig
[user]
	name = xxx
	email = xxx@xxx
[http "https://gopkg.in"]
	followRedirects = true
[url "git@github.com:"]
	insteadOf = https://github.com/
[core]
	excludesfile = ~/.gitignore_global
```
## .gitignore_global
``` .gitignore_global
*~
.DS_Store
```
## ショートカット

### 通知センターの表示
- ^N

### 前の入力ソースに切り替え
- ctrl + スペース

## 日付と時刻

## 通知

## 省エネルギー
- 電池の残量（％） 表示

## カレンダー

## システム環境設定 > アクセシビリティ > マウス/トラックパッド > トラックパッドオプション
３本指ドラックの有効化
https://support.apple.com/ja-jp/HT204609
Binary Options Trading Of Gold

The company is known for the **[Nesdek Inc Review](http://autobinarysignalssoftwarereviews.com/nesdek-inc-review/)** simple & transparent trade. They provide their client with the most robust, affordable & secure binary trading platform. They also offer payout of about 71%.

Availing Binary Options Charting Techniques

For successful speculation and hedging of portfolios, importance of using efficient strategies cannot be underestimated. Binary Options Charting Techniques is one such effective tool that increases the chances of remarkable profits. This technique allows the trader to interpret the asset price movement data expertly. This facility is provided by most binary options brokers. Some offer simple charts where as others offer advanced charting options. Basic Line graphs are plotted using points at every given unit of time, where as Bar & Candle Stick charts represent detailed information about assets & their price. Instead of points, bars are created and different color schemes are used to indicate positive or negative period. On Contrary, if the binary broker doesn't facilitate the client with modern charts, then charting software available on every kind of trade can be used.

Binary Options Night Trading

In order to compete the world, binary options brokers are coming up with new innovations & promotions in the field. For those traders who cannot manage their jobs along with their passion to trade, night trading options are discovered. Moreover, weekends & public holidays result in massive losses to potential investors. **[http://centumentltdreview.com/nesdek-inc-app-review/](http://centumentltdreview.com/nesdek-inc-app-review/)** It is obvious that a binary option that expires every hour does not offer night trading, but there various other options available. Asian Finance markets provide service all night in U.S. This trading option might apparently seem as a completed effort, but since binary trading are derivative contracts, finance & exchange markets do not have to play much role in it. This characteristic of binary options trading surely benefits keen & enthusiastic traders more than any other conventional trading methods.
画像を先読み込みして完了したらイベントを発生

# とりあえずサンプル
https://kiritani05.github.io/readimage/public/

# ソースとか詳細
###class js
```
export default class Readimage {
  constructor(opts) {
    this.targetElement = opts.targetElement; //ターゲットエレメント
    this.targetImageUrl = opts.targetImageUrl;
    this.ALLNUM = this.targetElement.length + this.targetImageUrl.length;
    this.CNT = 0 ;
    this.loadElemmentImage();
    this.loadUrlImage();
  }

  loadElemmentImage() {
    var _this = this;
    _this.targetElement.each(function(key, target) {
      var target_img = $(target).find("img")[0];
      _this.loadimage(target_img);
    });
  }

  loadUrlImage() {
    var _this = this;
    if(!this.targetImageUrl.length) return false;
    $.each(_this.targetImageUrl, function() {
      var target_img = $("<img>").attr("src",this)[0]
      _this.loadimage(target_img);
    });
  }

  loadimage(target_img) {
    var _this = this;
    target_img.orginSrc = target_img.src;
    target_img.src = "";
    $(target_img).bind("load", function() {
      _this.counter();
    });
    target_img.src = target_img.orginSrc;
  }

  counter() {
      this.CNT++;
      if (this.CNT >= this.ALLNUM) {
        var pageName = $("body").attr("class");
        switch (pageName) {
          case "top":
            $(".mainvisual").addClass("open");
            break;
          case "result":
            $(".your_type").addClass("open");
            break;
          case "shindan":
            break;
        }
      }
  }
}

```

### 設定js

```
import Readimage from './lib/readimage';
var opts = {
  targetElement: $(".readimage"),
  targetImageUrl: [
    '../images/background1.jpg',
    '../images/background2.jpg',
    '../images/background3.jpg'
  ]
}
new Readimage(opts);
```


targetElement は、読み込む画像を包んだ要素のもの一覧
targetImageUrl は直接url指定

targetElement はelementとしてあるけど、隠れてる画像を指定して
targetImageUrlはscriptやhoverで表示する画像を指定

みたいな使い方をしている。

counterの所に、完了したら直接動作を書いてしまってるけど、
コールバックみたいな形に書き直したいなぁ、、、

#ソースの説明
```
constructor(opts) {
  this.targetElement = opts.targetElement; //ターゲットエレメント
  this.targetImageUrl = opts.targetImageUrl;
  this.ALLNUM = this.targetElement.length + this.targetImageUrl.length;
  this.CNT = 0 ;
  this.loadElemmentImage();
  this.loadUrlImage();
}
```
初期設定。
読み込む画像をそれぞれに入れ込み、
ALLNUMに読み込む画像数を入れる。

```
loadElemmentImage() {
  var _this = this;
  _this.targetElement.each(function(key, target) {
    var target_img = $(target).find("img")[0];
    _this.loadimage(target_img);
  });
}
```
それぞれの画像情報を回して 読み込み、countして
ALLNUMと同じ数字になったら、
完了動作記載。
ここらで１つ、気になった”人工知能”搭載アプリをまとめてみる

## 運営ブログ
運営ブログ[ゆーかん：](http://u-kan.hatenadiary.jp/entry/ai-service-research)

機械学習・人工知能の勉強を最近してるんだけど、今世の中にどんなアプリがあるのかまとめてみたくなった。これらを調べてまとめた上で、これから作るアプリにうまい具合に詰め込んで、流行り遅れて**人工知能アプリ**をうまく作りたい。

普通にsmartnewsとかGoogleアプリにも機械学習はふんだんに使われてるけど、ちょっと今風で新しいものを取り上げてみる。

## 人工知能AI英会話ナンナ

人工知能が話し相手になってくれて、英語が勉強できるサービス。無料だし。まだテストなのかな？
そして自分が苦手な構文とかを、ナンナが指摘してくれるらしい。ほぉ〜

これがちゃんとできたら素晴らしい。

[ナンナ](https://chat-robot.weblio.jp/)

## SENSY

ファッション×人工知能。コーディネートとかを出してくれるんだとか。
自分の家にある洋服とか全部登録しなきゃいけないのかな？

そもそも朝ってそんなに時間無い気がするけど、、、
使うシーンがイメージできないなぁ〜

[SENSY](http://sensy.jp/)

## Less Mail

自動返信をしてくれるらしい。これは日本語の言語的な問題で期待できないんじゃないかな
これはちょっと使ってみたいなぁと思います。

http://robingets.me/lessmail/thanks.html

## Health Tap

これはいいかもしれない。日本は医療先進国だから、なかなか注目されないのかもしれないけど、、、
これも既にリソースを持っている人たちが、やっているイメージ

既にアメリカでは、毎月1000万件以上の質問が問い合わせされているとか。実際、これがあったらとてつもなく欲しい。

人工知能はおそらく、医師と質問者との効率のいいマッチングに使われているのかな？

[Health Tap](https://www.healthtap.com/)

## SELF

いわゆるパーソナルアシスタント。会話ができたり、日常のログを記録してくれたり、ニュースとかを提案してくれたり。FBを見る限り、3ヶ月前くらいにスタートしたのかな？FBがビジネスページじゃなくて、いいね！できないのが印象的、笑

[SELF](http://self.software/#page05)

## 感想
あまり面白いモノないなぁ。なんとなく思ってたけど、人工知能ってやっぱり前面に押し出すものじゃない気がする。今ある人工知能押し出してる系のものって、マッチング・パーソナルアシスタントの２個くらいしかないのか。

Google PhotoとかAmazonのレコメンドとかの方が圧倒的にいけてるな。そもそも人工知能って言葉が氾濫しすぎてて、機械学習なのか、ただのプログラムなのか、ディープラーニングなのか全くわからない。雰囲気でビジネスやってる時点でそもそも終わってるのか。

今回思ったのは、
- 優れた人工知能を作るには、そもそも圧倒的なデータ量が必要
- 人工知能は*効率化のための手段*でしかない
- 人工知能を前面に押し出してる時点で既に*イケてない*

人工知能アプリを作りたいなら、少し考えないとダメかもしれない。
GnuplotをAlpine Linuxに入れようとした悲惨な話

今OpenTSDBを検証しようと思っていますので、Dockerから一番手軽なのです。

Docker　Hub似て探しましたが、 [この](https://github.com/PeterGrace/opentsdb-docker) イメージを見つかりました。

だが残念なことは、このイメージにGnuplotが入ってません。さっそくGnuplotを入れようとしました。

惨めに、２箇所でこげちゃった。

## コマンド `gnuplot` が見つからない件について

必要なパッケージを入れて、無事にGnuplotをインストールしましたが、OpenTSDBの画面(localhost:4242)にて `gnuplot` コマンドが見つかりませんというエラーが出ました。

さんざん調べたところ、 `gunplot` 実行ファイルのインストール先が原因を突き止めた。

デフォルトで `gunplot` は　`/usr/local/bin/` にコーピーされましたが、OpenTSDBが　`gunplot`　を呼び出しできませんでした。

OpenTSDbのソールはJavaで、 `gunplot` を直接を呼び出しの代わりに、  `mygnuplot.sh` を呼び出しています。このファイルは下記のようで：

```shell-session
#!/bin/sh
# Because !@#$%^ Java can't fucking do this without a bazillion lines of codes.
set -e
stdout=$1
shift
stderr=$1
shift
exec nice gnuplot "$@" >"$stdout" 2>"$stderr"
```

このShellにて更に `exec nice` で  `gunplot` を実際に呼び出します。

**修正方法：**

Gnuplotバイナリーのインストール先を `/bin` にすればよいです：

```shell-session
./configure --bindir=/bin
```

これで、 `gunplot` が無事に呼び出されるようになりました。

が、さらに問題が起こった。

## Pngファイルを生成できないの件

今回は、別のエラーになりました。OpenTSDBが絵を描くにPngファイルを利用していて、  `gunplot` がPngファイルを作成できませんでした（Gnuplotにて `set terminal` が確認できます）。


再度Gnuplotを `./configure` をし、下記のローグを気づいた：

```
configure:10915: gcc -o conftest -g -O2  -I/usr/include  -Wl,--as-needed conftest.c -lgd   -lgd -ljpeg -lz -lpng16
/usr/lib/gcc/x86_64-alpine-linux-musl/4.9.2/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -ljpeg
/usr/lib/gcc/x86_64-alpine-linux-musl/4.9.2/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lfreetype
collect2: error: ld returned 1 exit status
configure:10915: $? = 1     
```

なるほど、Pngのみを使いたくても、 `jpeg-dev` と `freetype-dev` などを入れなければいけません。

最後、無事にGnuplotを動くため、下記の手順に従えば問題ないと思います：

```shell-session
cd /tmp && \
  wget http://downloads.sourceforge.net/project/gnuplot/gnuplot/5.0.3/gnuplot-5.0.3.tar.gz && \
  tar zxf gnuplot-5.0.3.tar.gz  && \
  cd gnuplot-5.0.3 && \
  apk --update add gd gd-dev libpng libpng-dev libjpeg jpeg-dev freetype freetype-dev && \
  apk --update add --virtual builddeps build-base autoconf automake git python && \
  ./configure --bindir=/bin && \
  make && \
  make install
```


## 最後

Gnuplotを正しく動作ために、３時間がかかりました。


ちなみに、私が作ったDocker Imageは https://hub.docker.com/r/liubin/opentsdb/ にあります。
NetBeansでSQL Serverに繋ぐときは

# 問題

NetBeansでSQL Serverに繋ぐときに、警告が出て接続できませんでした。

![sqlserver1.png](https://qiita-image-store.s3.amazonaws.com/0/114529/a8c51da7-e5ce-d934-f5e0-83fa1f6f1255.png)

# 対処方法

SQLServer構成マネージャーの設定を変更する必要があります。
プロトコルの「TCP/IP」を「有効」にし、さらにプロパティで該当するアドレスを「有効」にします。

![sqlserver2.png](https://qiita-image-store.s3.amazonaws.com/0/114529/91bea5a0-2a03-5ce9-ce3d-e077bbaf388b.png)
UnityでAndroidManifestを追加したい時の入手先

UnityでAndroidManifest.xmlに権限追記をしたいけれど、Assets/以下にAndroidManifest.xmlがない時用。

* 1度Androidでビルドする
* ビルドしたら作られるTemp/StagingArea/以下にAndroidManifest.xmlがある
* それをAssets/Plugins/Android/にコピー（ビルドが通ります）
* 好きな権限などを追記する
SublimeText | シンタックスハイライトの種類をキーボードで切り替える

# 問題

まだ保存しておらず、拡張子もないファイルを編集する時。

毎回、画面右下をマウスでクリックしなければいけなくて、面倒だなあと思っていた。
かといってショートカットも見当たらないし。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/37ca9ae8-a33e-2536-6a14-2d39149643d0.png)

# 解決

`ctrl(command) + shift + P` でコマンドパレットを呼び出して、`syntax [言語名]` などと検索すればOK。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/a40c2c3a-4679-dae2-4a39-55a1e0ad9559.png)

# 環境

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/1f81b5b8-2e57-03c8-7266-294193ec63c6.png)

# 参考

- http://stackoverflow.com/questions/12227798/sublime-text-2-key-binding-to-change-syntax








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
ASP.NET Core 1.0がリリースされたので、ASP.NET Coreを実行


[Getting Started — ASP.NET documentation](https://docs.asp.net/en/latest/getting-started.html)の素振りです。

# 実行環境

- Mac OS X Elcapitan

# 前提条件

.NET Coreはインストール済みです。
インストールしていなければ、[ASP.NET Core 1.0がリリースされたので、Mac上で.NET CoreをHello World!](http://qiita.com/ledsun/items/b72cc59b816fd0eecd30)を参考にしてください。

# 手順

## 新しいプロジェクトを作成

```
mkdir aspnetcoreapp
cd aspnetcoreapp
dotnet new
```

## package.jsonの編集
`"Microsoft.AspNetCore.Server.Kestrel": "1.0.0"`を追加します。

```package.json
{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0"
    },
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0"
  },
  "frameworks": {
    "dnxcore50": { }
  }
}
```

自動生成されたpackage.jsonの`frameworks`は`dnxcore50`です。
元のサイトのサンプルは`netcoreapp1.0`です。
`netcoreapp1.0`に修正しても、動作は変わりません。
気にしなくて大丈夫です。

Kestrelは

[ASP.NET vNext で用意されている 3 種類のサーバー - しばやん雑記](http://blog.shibayan.jp/entry/20141106/1415200465)

> クロスプラットフォーム / Node.js で実績のある libuv を利用

したWebサーバーです。


## 依存ライブラリのインストール
```
dotnet restore
```

## Startup.csを追加
機械的に次のファイルを追加します。

```Startup.cs
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;

namespace aspnetcoreapp
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.Run(context =>
            {
                return context.Response.WriteAsync("Hello from ASP.NET Core!");
            });
        }
    }
}
```

あらゆるリクエストに文字列`Hello from ASP.NET Core!`を返すアプリケーションです。

## Program.csを編集

```Program.cs
using System;
using Microsoft.AspNetCore.Hosting;

namespace aspnetcoreapp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}
```

元のサイトで強調表示されているのは、`using`と`Main`関数の中だけです。
`namespace`も修正が必要です。注意してください。

## 実行
```
dotnet run
```

を実行すると

```
Project aspnetcoreapp (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Hosting environment: Production
Content root path: /Users/shigerunakajima/aspnetcoreapp/bin/Debug/netcoreapp1.0
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
```

と、表示されます。
ブラウザで`http://localhost:5000`を開くと

![スクリーンショット 2016-06-28 13.15.39.png](https://qiita-image-store.s3.amazonaws.com/0/15964/c933ae8f-1bf7-cd77-fd7e-76324545a14a.png "スクリーンショット 2016-06-28 13.15.39.png")

が表示されます。

#　参考
- [aspnet/KestrelHttpServer: A web server for ASP.NET Core based on libuv.](https://github.com/aspnet/KestrelHttpServer)
tapsicleでheroku postgres => mysqlデータ変換

やりたいこと
---

* Heroku上に作ったRailsアプリを別のIaaS上に構築しなおしたい
* DBはHerokuデフォルトのPostgresを使っていたけど、これを機に使い慣れたMySQLに切り替えたい

しかし・・・
---

* どうもうまくいかない
* 一旦CSVにエクスポートしてからインポートする方法
    * 実際にやってみるとCSVの仕様が微妙に両DBで異なる
    * boolean型がt/fなのか1/0なのかなど
* [taps](https://github.com/ricardochimal/taps)を使う方法
    * [rakeのバージョンが合わない](https://github.com/ricardochimal/taps/issues/128)とかエラー出たり
    * [Configクラスがない](https://github.com/ricardochimal/taps/issues/143)とかエラー出たり
    * 結局動かない

tapsicle
---

* [tapsicle](https://github.com/jiffyondemand/tapsicle)を使ったらスムーズにできた
* 上記にもでてきたtapsのfork
* 使い方もほぼ同じで、今後もメンテしていくつもりとのこと

手順
---

* 事前にローカルにmysql,postgresをインストールしておき、各々作業用databaseを作成しておく

```
psql -U postgres
create database dump_from_heroku encoding 'utf8';
```

```
mysql -u root
create database dump_to_mysql default character set utf8;
```


* herokuからエクスポートしてローカルpostgresにインポート

```
heroku pg:backups capture --app your-app
curl -o /tmp/latest.dump `heroku pg:backups public-url --app your-app`
pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d dump_from_heroku /tmp/latest.dump
```

* tapsicleでローカルmysqlにインポート
  * encoding=utf8をつけること

```
gem install tapsicle
gem install mysql
gem install pg

taps server postgres://postgres@localhost/dump_from_heroku?encoding=utf8 httpuser httppassword
taps pull mysql://root@localhost/dump_to_mysql?encoding=utf8 http://httpuser:httppassword@localhost:5000
```

* mysqldumpでローカルmysqlからダンプを生成

```
mysqldump -u root --default-character-set=utf8 dump_to_mysql > your_app.dump
```

* dumpファイルを本番に取り込み

```
mysql -u root your-app < /tmp/your_app.dump
```

終わりに
---

メンテされなくなっても必要なライブラリは後継メンテナが出てきてて、オープンソースの強さを感じますね
.Net CoreをMacで試す

1.0.0が出たということなので環境構築だけでもしたメモ

# Setup

https://www.microsoft.com/net/core#macos

```
$ brew update
$ brew install openssl
$ brew link --force openssl
```

# Download

公式サイトから公式インストーラーをダウンロードする

<img width="915" alt="スクリーンショット 2016-06-28 12.39.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/15818/f26d55d7-06b2-5a55-4a91-27c5cbc24b89.png">

# Install

インストラーをポチポチした後 ターミナルを開いて以下のコマンドでリンクを通した

```
$ ln -s /usr/local/share/dotnet/dotnet /usr/local/bin
```

FYI: https://github.com/dotnet/core/blob/master/cli/known-issues.md#users-of-zsh-z-shell-dont-get-dotnet-on-the-path-after-install

# Create Project

```
$ mkdir hwapp; cd hwapp
$ dotnet new
$ dotnet restore
$ dotnet run
```

ここまでやると`Hello World!`とコンソールに出力された。

# まとめ

環境構築してからドキュメント読んだら
UWPは動かないとのことなのでやりたいことがなくなった。

せめてサーバーでも動かそうと思いWebFrameworkのサンプルを動かそうとしたけど

https://github.com/aspnet/KestrelHttpServer

```
➜  SampleApp git:(dev) dotnet restore
log  : Restoring packages for /Users/k2wanko/src/github.com/aspnet/KestrelHttpServer/samples/SampleApp/project.json...
log  : Writing lock file to disk. Path: /Users/k2wanko/src/github.com/aspnet/KestrelHttpServer/samples/SampleApp/project.lock.json
log  : /Users/k2wanko/src/github.com/aspnet/KestrelHttpServer/samples/SampleApp/project.json
log  : Restore completed in 1387ms.
➜  SampleApp git:(dev) dotnet run
Project Microsoft.AspNetCore.Server.Kestrel does not have a lock file. Please run "dotnet restore" to generate a new lock file.
Project Microsoft.AspNetCore.Server.Kestrel does not have a lock file. Please run "dotnet restore" to generate a new lock file.
```

という感じで`dotnet restore`は成功するのに`dotnet run`で`dotnet restore`しろと言われるので以下無限ループ(`project.lock.json`は作成されてるのに...)
[FFmpeg] 3.1 "Laplace" was released as new major version.

https://ffmpeg.org/index.html#news

```text:Changelog
version 3.1:
- DXVA2-accelerated HEVC Main10 decoding
- fieldhint filter
- loop video filter and aloop audio filter
- Bob Weaver deinterlacing filter
- firequalizer filter
- datascope filter
- bench and abench filters
- ciescope filter
- protocol blacklisting API
- MediaCodec H264 decoding
- VC-2 HQ RTP payload format (draft v1) depacketizer and packetizer
- VP9 RTP payload format (draft v2) packetizer
- AudioToolbox audio decoders
- AudioToolbox audio encoders
- coreimage filter (GPU based image filtering on OSX)
- libdcadec removed
- bitstream filter for extracting DTS core
- ADPCM IMA DAT4 decoder
- musx demuxer
- aix demuxer
- remap filter
- hash and framehash muxers
- colorspace filter
- hdcd filter
- readvitc filter
- VAAPI-accelerated format conversion and scaling
- libnpp/CUDA-accelerated format conversion and scaling
- Duck TrueMotion 2.0 Real Time decoder
- Wideband Single-bit Data (WSD) demuxer
- VAAPI-accelerated H.264/HEVC/MJPEG encoding
- DTS Express (LBR) decoder
- Generic OpenMAX IL encoder with support for Raspberry Pi
- IFF ANIM demuxer & decoder
- Direct Stream Transfer (DST) decoder
- loudnorm filter
- MTAF demuxer and decoder
- MagicYUV decoder
- OpenExr improvements (tile data and B44/B44A support)
- BitJazz SheerVideo decoder
- CUDA CUVID H264/HEVC decoder
- 10-bit depth support in native utvideo decoder
- libutvideo wrapper removed
- YUY2 Lossless Codec decoder
- VideoToolbox H.264 encoder
```


## 感想
Bobのデインターレースフィルタって、入ってなかったんだ
[DST](https://ja.wikipedia.org/wiki/Direct_Stream_Transfer)デコーダがはいったようだ
CUDAは知ってるけど、CUVIDは初めて聞いたな～


## 関連
http://qiita.com/pb_tmz08/items/cc8770d99f177f9dd138
Laravel5でPC/SPを振り分ける方法

## 前提
* 振り分ける必要があるのはPCとSPのトップページのみである
* 「/」にアクセスした時、SPなら「/sp」にリダイレクト
* 「/sp」にアクセスした時、PCなら「/」にリダイレクト
* 「/hoge」などへのアクセスには何もしない
* Viewに「index.blade.php」や「sp/index.blade.php」がある

## 動作環境
* Laravel 5.2.31
* CentOS 6.8
* PHP 5.6.22

.htaccessで振り分けれたらこんなこと書く必要はなかったんですが、
なかなか思い通りにいってくれないもので。。

## 記述
route.phpに次のように書きます。

```

Route::get('/', function(){
    $ua = $_SERVER['HTTP_USER_AGENT'];
    // user agent が iPhone か iPod か Android の場合
    if( (strpos($ua,'iPhone') !== false) || (strpos($ua,'iPod') !== false) || (strpos($ua,'Android') !== false) ) {
        return redirect('/sp'); // SP版TOPにリダイレクト
    }
    else { // user agent が それ以外 (例: iPad, PC) の場合
        return view('.index'); // PC版TOPを表示
    }
});

Route::get('/sp', function(){
    $ua = $_SERVER['HTTP_USER_AGENT'];
    // user agent が iPhone か iPod か Android の場合
    if( (strpos($ua,'iPhone') !== false) || (strpos($ua,'iPod') !== false) || (strpos($ua,'Android') !== false) ) {
        return view('.sp.index'); // SP版TOPを表示
    }
    else { // user agent が それ以外 (例: iPad, PC) の場合
        return redirect('/'); // PC版TOPにリダイレクト
    }
});

```

以上。get('/' ... のあたりに正規表現をつければ下のディレクトリにも影響させることができそう。
その場合、return viewのあたりを修正する必要がありそうですね。誰か書いて。
殴り書き Win + Intellij + VirtualBox + Scala + Spark でとりあえず開発準備(2)

■いろいろいれよう続き

・spark

http://spark.apache.org/downloads.html

1.6.0
Pre-built Hadoop 2.6

tar zxvf DLしたファイル
mv 解凍後のパス /usr/local/share/spark
cd /usr/local/share/spark

起動確認
bin/spark-shell

どーん

■win(intellij)

有料版は色々便利らしいけど、まあとりあえず無料版で。
どうしても不便を感じたら金払うスタイルで
つってもここは「落としてインスコしてプラグインとか入れる」だけなので

http://blog.chopschips.net/blog/2014/09/07/scala-get-started/

この辺参考で

多分最初はsbtプロジェクトとかメニューに出てこないと思うので、初回起動時はブランクプロジェクトみたいなやつ選んでプラグイン突っ込み、intellij再起動。
そうすればsbtプロジェクト出てくると思います。

プロジェクトロケーションはゲストと共有してるフォルダにしましょう。

自動実施される初回リフレッシュ的なの終わったら、

src/main/scala

ってディレクトリあると思うので
右クリ→New→Scala class
kindをObjectへ
hello worldのソースは割愛

ゲスト側でプロジェクトルートへcd

sbt run

こんにちは世界！

(3)へ続く
array.ununiq


```uniq.rb
array = %w(1 1 2 3 4 5 5 6 7 8 9 9 9).map(&:to_i)
=> [1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 9]

array.uniq
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
```

重複はuniqメソッドで簡単に取り除ける。
じゃあ重複した値を確認したい時は？

```ununiq.rb
array.select { |a| array.index(a) != array.rindex(a) }.uniq
=> [1, 5, 9]
```



既出の恐れが高い
殴り書き Win + Intellij + VirtualBox + Scala + Spark でとりあえず開発準備(1)

殴り書き。

■環境
Win7 + VirtualBox(Centの7)
無料版Intellij

■いろいろいれよう
しばらくはバーチャルマシンでの操作。
centの基本的なアレは済んでる前提。
バーチャルマシンだしってことでログインユーザはroot。

・scalaはJVM上で動くのでJDK入れる
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

ちなみに書いてる人の環境には既にopenjdkが入っちゃってたけど切り替えも簡単だった。

linux x64 rpm のほうをDL

yum localinstall DLしたrpmのパス 

alternatives --config java

今ｲﾝｽｺしたjdk選択

export JAVA_HOME=/usr/java/jdk1.8.0_91

java -version
java version "1.8.0_91"

どーん

・scalaをいれよう
http://www.scala-lang.org/download/2.11.8.html

の tgz版DL

cd /usr/local/lib
mv DLしたtgz .
tar zxvf scala-2.11.8.tgz
rm -f scala-2.11.8.tgz

別にやんなくても良いけどシンボリックリンクはっとく
ln -s scala-2.11.8/ scala

システム全体で使えるようにもしとこうか
echo 'export SCALA_HOME=/usr/local/lib/scala' >> /etc/profile.d/scala.sh
echo `'export PATH=$PATH:$SCALA_HOME/bin'` >> /etc/profile.d/scala.sh
source /etc/profile.d/scala.sh

scala -version
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL

scala
でコンソール起動も確認しとこう

どーん

・sbt
curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo

yum -y install sbt

どーん

・samba
これをやる理由は、ソースの編集はwinのintellijから、実行やassemblyはlinuxで、という状態にするため。macユーザはそのまま自前でやれるから必要ないですね。っていうかバーチャルマシンが要らないか。

http://kohkimakimoto.hatenablog.com/entry/2012/01/19/053810
http://orebibou.com/2014/12/centos7%E3%81%ABsamba%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/

このあたり参考に、ホストwin-ゲストcent間の共有フォルダを作る。
なお、どうせローカルなので権限関係はセキュリティガン無視の最強設定にしときましょう。
その辺デフォルトのままだと、linux側で先にコンパイルとかしちゃうと、intellij側でbuild.sbt編集してリフレッシュ走ったときにエラー出たりしていらつきます。


2へ続く
5.8GHz ワイヤレス映像受信モジュール RX5808 について

5.8GHz ワイヤレス映像受信モジュール BOSCAM RX5808 について

5.8GHzのワイヤレス映像受信モジュール BOSCAM RX5808 を使って遊ぼうと思ったので情報をまとめてみました。

![RX5808.jpg](https://qiita-image-store.s3.amazonaws.com/0/42120/fc675ec0-1ad0-b452-11af-d8aa440e7794.jpeg)


このモジュールは主に、ドローンからワイヤレスで飛ばした映像を受信するために使用されています。
最近のドローンブームのために数がそれなりに出ており、ebayやaliexpressなどで10USDぐらいで購入可能です。

# RX5808 の仕様
* 周波数 5705 - 5945 Mhz
* 電圧 5V
* 電流 170 mA (Typ) , 180 mA (Max)
* Video output x1
* Audio output x1
* CHはCH1, CH2, CH3 ピンのHigh/Lowで指定する。 8個のchが設定可能

RX5808にはRTC6715というチップが載っています。

# RTC6715 の仕様
* 3.3V動作　(モジュール内部で3.3Vを生成しているようです。)
* 周波数 5725 - 5805 MHz
* IF周波数 479MHz
 * 5.8Ghzを479MHzに変換したあとでFM復調を行う
* CHはピン指定またはSPIで制御
* RSSI出力 -91 dBm - 5 dBm が (0.5 V - 1.1 Vの電圧で出力)

# RX5808でSPIモードを使う
* 表面実装の抵抗を一つ取り外す。
* 抵抗の場所は下記参照
 * https://github.com/sheaivey/rx5808-pro-diversity/blob/master/docs/rx5808-spi-mod.md
* CH1, CH2, CH3が、SPIDATA, SPLE, SPICLKに対応する。
* SPIのアクセスはタイミング制約がある。

# SPIモードの選局
* Synthesizer Register A のRと Synthesizer Register BのNとAで設定する。
* 周波数 F_RF の導出式
 * F_RF = F_LO + F_IF
 * F_LO = 2*(N*32+A)*(F_OSC/R)
 * F_IF = 479MHz, F_OSC=8MHz
* 設定値導出例 F_RF = 5865MHzに設定する場合　(R=8 とする。　）
 * F_LO = F_RF - F_IF = 5865 - 479 = 5386 MHz
 * F_LO = 5386 MHz = 2*(N*32+A)*(F_OSC/R) = 2*(N*32+A)*(8MHz/8) = 2*(N*32+A)*1MHz
 * 2693 = 32N +A
 * 2693 を 32で割ると 商が84、余が5となるので、 N=84 A=5 となる。
* 周波数設定ステップ R=8の場合は2MHz単位
* SPIモードで選局のサンプルコード
 * https://github.com/sheaivey/rx5808-pro-diversity/blob/master/src/rx5808-pro-diversity/rx5808-pro-diversity.ino の setChannelModule()


# 参考
* https://github.com/sheaivey/rx5808-pro-diversity
WordPress で特定のカテゴリーの記事はログインしないと見られないけど記事一覧などでは特定の文言に置き換えるパターン

# 仕様
- カテゴリーのスラッグが private の場合はWordPressにログインしないと記事の閲覧ができない
    - ログイン後は直前に見ていたページにリダイレクトする
    - ただし、権限グループが管理者の場合はダッシュボードにリダイレクトさせる
- 記事一覧、フィードでは本文を特定の文言に置き変える

# ソース

条件を追加したい場合はよしなに。
このコードはテーマに追記するよりもプラグインにしたほうが良い。

```PHP:my-must-login-pages.php
<?php
function my_must_login_pages() {
	if ( is_feed() ) // フィードの時は除外
		return;

	$loginflg = false; // 条件が増えてもいいようにフラグを作っておく。　デフォルトはfalse
	if ( has_term( 'private', 'category' ) ) {
		$loginflg = true;
	}
	
	if ( ! is_user_logged_in() && $loginflg ) {
		/*
		 * $loginflg が true で WordPress にログインしてなかったら
		 * ログイン画面へ遷移させ、ログイン後の戻り先はその直前に見ていたページ
		 */
		auth_redirect();
	}
}
/*
 * my_must_login_pages()は get_header よりもはやい段階で実行。
 * クエリからWPオブジェクトが作られて（表示する内容が決まって）、テンプレートが表示される前
 */
add_action( 'wp', 'my_must_login_pages' );

/*
 * このままだと管理者もそのページにリダイレクトされるので
 * 管理者はダッシュボードにリダイレクトさせるよう以下を実行
 */
function my_login_redirect( $redirect_to, $request, $user ) {
	// is there a user to check?
	global $user;
	if ( isset( $user->roles ) && is_array( $user->roles ) ) {
		// 管理者かどうかチェック
		if ( in_array( 'administrator', $user->roles ) ) {
			// ダッシュボードにリダイレクト
			return admin_url();
		} else {
			// redirect them to the default place
			return $redirect_to;
		}
	} else {
		return $redirect_to;
	}
}
add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );

/*
 * 未ログインの場合、記事一覧では本文を特定の文言に置き変える
 */
function my_the_content_filter( $content ) {
	$loginflg = false;
	if ( has_term( 'private', 'category' ) ) {
		$loginflg = true;
	}
	
	if ( !is_user_logged_in() && $loginflg ) {
		$content = 'must login';
	}
	return $content;
}
add_filter( 'the_content', 'my_the_content_filter' );
add_filter( 'get_the_excerpt', 'my_the_content_filter' );

/*
 * フィードでは本文を特定の文言に置き変える
 */
function my_content_feed( $content ) {
	if ( has_term( 'private', 'category' ) ) {
		$content = 'must login';
	}

	return $content;
}
add_filter('the_content_feed', 'my_content_feed', 10, 2);
add_filter('the_excerpt_rss', 'my_content_feed', 10, 2);
```

今回は本文を特定の文言に置き換えたけど、以下の記事の「ページ分割部分を改変して、ログイン部分をつくる」を応用してログイン枠を作ってもいいかもね。

http://qiita.com/gatespace/items/2bf19dc1ecea848e1d85

# あわせて読むといいかも

- http://gatespace.jp/tag/is_user_logged_in/
- http://codex.wordpress.org/Function_Reference/auth_redirect
- http://codex.wordpress.org/Function_Reference/admin_url
- http://codex.wordpress.org/Plugin_API/Filter_Reference/login_redirect
- http://codex.wordpress.org/Plugin_API/Filter_Reference/the_content
WordPress Jetpack の Share 及び Like ボタン群を任意の場所に移動（ざっくり翻訳）

# 原文

https://jetpack.com/2013/06/10/moving-sharing-icons/

> There are actually two ways to move the Sharing buttons and one for the Like button.

まぁ、移動には２つの方法があるでってお話。

# Share（共有）及び Like（いいね）ボタンの移動

> Jetpack, by default, just attaches this tag to two filters — the_content() and the_excerpt() — so that the Sharing icons get displayed. By editing your theme files, you can move the tag wherever you’d like — we default to attaching it to the filters so that, when the Sharing and Likes modules are activated, the buttons are displayed with no extra work. You’re free to move it around to put the Sharing icons where you’d like; here’s how:

（意訳）
Jetpack はデフォルトでこのタグ（HTMLタグすなわちボタン群）を2つのフィルター -  `the_content()` と `the_excerpt()` - にフックして表示している。あなたのテーマのファイルを編集（カスタマイズ）する場合、このタグを任意の場所移動できる - デフォルトで「共有」と「いいね」モジュールが有効化された時、このボタン群はこのフィルターで動作する。自由に好きな位置に共有ボタンを置くことができる方法は以下を見て。

## 1. テーマの functions.php に次のコードを書く

（補足）共有ボタンといいねボタンとで関数とフィルターフックが違うのでこんな感じになってる。

```PHP:functions.php
function jptweak_remove_share() {
    remove_filter( 'the_content', 'sharing_display',19 );
    remove_filter( 'the_excerpt', 'sharing_display',19 );
    if ( class_exists( 'Jetpack_Likes' ) ) {
        remove_filter( 'the_content', array( Jetpack_Likes::init(), 'post_likes' ), 30, 1 );
    }
}
 
add_action( 'loop_start', 'jptweak_remove_share' );
```

## 2. 共有ボタンといいねボタンを表示させたい位置に次のコードを書く。

```PHP:single.php
if ( function_exists( 'sharing_display' ) ) {
    sharing_display( '', true );
}
 
if ( class_exists( 'Jetpack_Likes' ) ) {
    $custom_likes = new Jetpack_Likes;
    echo $custom_likes->post_likes( '' );
}
```

> Note that you do not need to display these together; you can put sharing_display() in a separate place from the Likes display codeblock.

（意訳）
補足 : この2つのコードを一緒に書く（表示する）必要はない。`sharing_display()`（共有ボタン）をいいねボタンのコードブロックからを離して設置することもできる。

（補足）
[iemoto](https://github.com/megumiteam/iemoto) の場合はタイトル部分や本文部分の前後など事前にフックできるポイント（ `do_action()` ）を多数埋め込んでいるので、上記コードを関数化してアクションフックで実行するよう実装したほうが楽。

# Share（共有）及び Like（いいね）ボタンを jQuery で移動する

```js:my-theme.js
jQuery( document ).ready( function( $ ) {
    // Relocate Jetpack sharing buttons down into the comments form
    jQuery( '#sharing' ).html( jQuery( '.sharedaddy' ).detach() );
} );
```

> The #sharing selector is just the DOM location where I want to move the buttons to, and the .sharedaddy one is the container that Jetpack places its buttons in normally. We just detach it from the normal position and then dump it into the new location exactly as it was.

（意訳）
表示させたい位置に `#sharing` の DOM をおいておけば `.sharedaddy` クラスの中身＝共有ボタンとLikeボタンをデタッチして移動します。
あなたのお家をスマートハウスにしてみませんか？　空気清浄機編

今回第1回目でご紹介するのはSHARP製の空気清浄機「KI-EX100-N」と遠隔操作する際に使用する家電ワイヤレスアダプタ「HW－A01」です！
スマート家電と聞くと「難しそう」や「高そう」など思われがちですが、別売りのワイヤレスアダプタを購入するだけでだれでもスマート家電がお使いになれます！
空気清浄機は遠隔操作することで電源の付け忘れや消し忘れなどを防止することが出来るようになり電気代の節約になり、省エネにもなります。


#1.	必要機材　


- 空気清浄機(KI-EX100-N)
- 家電ワイヤレスアダプタ(HW-A01)
- 無線LAN
- SSNGをインストールしたパソコン(Winndow、Macどちらでもok!)


まず最初に、空気清浄機(KI-EX100-N)に家電ワイヤレスアダプタ(HW-A01)を接続する。
接続手順は下の画像を参照してみてください。

![あああ.png](https://qiita-image-store.s3.amazonaws.com/0/130490/084a84d2-6ff4-fc3e-dac5-20a65a3be111.png)
図(1-1)　空気清浄機(KI-EX100-N)の接続手順


![無題4.png](https://qiita-image-store.s3.amazonaws.com/0/130490/50c327bc-ec65-18a6-2e2c-2b0a8e38851c.png)
図(1-2)　家電ワイヤレスアダプタを接続したときの全体画像
**青丸**で囲った部分に別売りの家電ワイヤレスアダプタ(HW-A01)を接続する。
 

![image](https://qiita-image-store.s3.amazonaws.com/0/130490/dd09dee9-cda4-1b83-ce3d-bbe942178ad0.png)
図(1-3)　上の画像にある青丸の拡大図


接続した家電ワイヤレスアダプタはスマート家電に接続することで無線LANを介して家電の制御で使用するパソコンと下の図のようなネットワークを形成します。
 ![image](https://qiita-image-store.s3.amazonaws.com/0/130490/4c437602-53f7-a4c4-f9a1-47f8d4a06278.png)
図(1-4)　家電製品とPCのネットワーク図
上の画像にある赤色の矢印は家電製品などで計測される稼働時間や電力消費量などをパソコンに送信し、
青色の矢印は電源のON/OFFなどを切り替えを無線LANに送信します。


# 2.	機器設置の手順　

まず、在宅LANに家電ワイヤレスアダプタを接続するためにアダプタの電源スイッチをONにします。
(赤丸で囲まれている場所　図2-1参照)

![image](https://qiita-image-store.s3.amazonaws.com/0/130490/bd7a81bb-5f2e-d887-a081-c19b39a2a39d.png)
(図2-1)　家電ワイヤレスアダプタ
 
家庭で使用している無線LANのアクセスポイントを、プッシュボタン接続できる状態にしましょう。
(無線LANの詳しい操作方法は取り扱い説明書をご確認ください。)

次に無線LANボタンを2秒以上押し、無線LANランプが点灯するのを確認します。
(点滅はアクセスポイント検索中の合図なのでNG)
![image](https://qiita-image-store.s3.amazonaws.com/0/130490/39c49f60-f8bc-7709-5831-a97160cad1f0.png)
(図2-2)　ランプ消灯時

 ![image](https://qiita-image-store.s3.amazonaws.com/0/130490/a3eea59c-55cd-2355-570c-3c5c3177acaf.png)
(図2-3)　ランプ点灯時

電源、無線ランプの2つが点灯すれば接続完了となります。
(接続できなかった場合は**約2分以内に**ランプが消灯します。その時はもう一度LANアクセスポイントをプッシュボタン接続できる状態にしてから、操作をやり直してください。)

# 3.	ソフトのインストールと操作手順

![image](https://qiita-image-store.s3.amazonaws.com/0/130490/3ec4feee-c7c0-0021-9998-61857f0ede74.png) 
(図3-1)　遠隔操作時のSSNG
上の図はSSNG起動時のパソコン画面で、その下は空気洗浄機を遠隔操作したときの画像です。
一見複雑そうに見えますが、真ん中の大きい部分は家電から送られてくるデータを受信し、表示する部分になります。
詳しくは一番下に記載しているページをご覧ください。

![image](https://qiita-image-store.s3.amazonaws.com/0/130490/4ea85437-7c3f-79aa-04a6-03e320718b1e.png)
(図3-2)　遠隔操作で空気清浄機を起動させたとき
写真だと見にくいかもしれませんが、ちゃんと遠隔操作で起動できています :sweat: 
次回からは動画を使って動くところを見せたいと思います。

下記のサイトからアプリケーションをインストールする。
https://smarthouse-center.org/sdk/download/
ssngの操作方法については下記のページからご覧いただけます。
http://qiita.com/sugi05/items/500aa560d3202ebf4530
WordPressの投稿作成画面で空欄ならアラートを出す

# 仕様
- タイトルの入力を必須にしたい

# 空欄があったらアラートを出す

- テーマの functions.php あるいはプラグインにする
- 投稿の入力画面は新規投稿と編集とでフックが違うので注意  
参照 : https://codex.wordpress.org/Plugin_API/Admin_Screen_Reference
- 基本的に JavaScript（jQuery） なので、他の要素にも対応する場合は DOM を調べればOK。
- 言わずもがな、WordPress に含まれている jQuery は noConflict モード  
参照: https://developer.wordpress.org/reference/functions/wp_enqueue_script/

```PHP:mytheme_post_edit_required.php
<?php
add_action( 'admin_head-post-new.php', 'mytheme_post_edit_required' ); // 新規投稿画面でフック
add_action( 'admin_head-post.php', 'mytheme_post_edit_required' );     // 投稿編集画面でフック
function mytheme_post_edit_required() {
?>
<script type="text/javascript">
jQuery(document).ready(function($){
  if( 'post' == $('#post_type').val() || 'page' == $('#post_type').val() ){ // post_type 判定。例は投稿と固定ページ。カスタム投稿タイプは適宜追加
    $("#post").submit(function(e){ // 更新あるいは下書き保存を押したとき
      if('' == $('#title').val()) { // タイトル欄の場合
        alert('タイトルを入力してください！');
        $('.spinner').hide(); // spinnerアイコンを隠す
        $('#publish').removeClass('button-primary-disabled'); // #publishからクラス削除
        $('#title').focus(); // 入力欄にフォーカス
        return false;
      }
    });
  }
});
</script>
<?php
}
```

応用で「アイキャッチ画像を必須化」ってのもできます。
https://github.com/jaws-ug/jawsdays2016/blob/master/wp-content/themes/jawsdays2016/inc/extras.php#L47-L72
Vagrantの共有フォルダにアクセスできなかったら

# <i class="fa fa-cubes" aria-hidden="true"></i> 結論

VirtualBoxのバージョンも上げる
5.0.22に更新したら、正常になった。

[Unable to mount /vagrant folder in 1.7.3 · Issue #5933 · mitchellh/vagrant]

内容はよく読めないのです。1.7.4で直った流れかと思ったら違ったみたい。


# <i class="fa fa-long-arrow-down" aria-hidden="true"></i> 現象発生までの流れ

1. 久々にVagrantを起動しようとする。
2. VirtualBoxに対してバージョンが古いと怒られ、Vagrant再インストール
3. `vagrant up`でエラーがでるも気にせず`vagrant ssh`
4. `/vagrant` フォルダの操作が`Operation not permitted`

# <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> エラーメッセージ

## `vagrant up`

```
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

chown `id -u vagrant`:`id -g vagrant` /vagrant

Stdout from the command:



Stderr from the command:

stdin: is not a tty
chown: changing ownership of ‘/vagrant’: Not a directory
```

## SSH後

```
$ ll /vagrant
ls: cannot open directory /vagrant/: Operation not permitted
$ ll /
(中略)
drwxrwxrwx  1 vagrant vagrant  4096 Apr 22  2015 vagrant/
```

# <i class="fa fa-cogs" aria-hidden="true"></i> 環境

* Windows 7 64bit
* VirtualBox 5.0.0(エラー発生時。のち5.0.22で解消)
* Vagrant 1.8.4

[Unable to mount /vagrant folder in 1.7.3 · Issue #5933 · mitchellh/vagrant]:https://github.com/mitchellh/vagrant/issues/5933
複数のバックグラウンドプロセスが全て成功したか判別する方法

# 環境

bash4.3

# スクリプト

```.sh
#!/bin/sh -x
pids=()
# ok.sh は 0 を返す
# ng.sh は 1 を返す
commands=("./ok.sh" "./ng.sh")

for command in ${commands[@]}; do
  ${command} &
  pids+=($!)
done

for pid in ${pids[@]}; do
  wait $pid
  if [ $? -ne 0 ]; then
    exit 1
  fi
done
```

# ポイント

- `$!` : 最後に起動したバックグラウンドプロセスのPID
- `wait ${pid}` で、対象のpidのプロセスが終了するまで待機
- wait の戻り値は、対象のプロセスの戻り値

# 参考

- [シェルでバックグラウンドで起動したプロセスの戻り値を取得するには: まじかんと雑記](http://magicant.txt-nifty.com/main/2008/05/post_256f.html)
Android NでCardview、Recyclerviewを使う際の注意点

最近AndroidStudio 1.5系から2.xへのバージョンアップを行った際にCardviewとRecyclerviewの動作がSDKバージョンによって違い、ハマってなかなか苦労した際のメモ

正確にはAndroidStudioのバージョンの問題ではなく、
cardview、recyclerviewライブラリのバージョンの違いによる動作変更？のようで
layoutの階層が深いと描画順序が変わっていて、cardviewに指定したサイズが描画時に反映されないという事態になり、Studioのアップデートもしていたので問題の切り分けに時間がかかりました。。。
layout.xmlでは、recyclerviewは３階層目、その行にcardviewを指定していました。
（そんなに深い階層とは思えなかったんですがね。。。）

cardviewとrecyclerviewはgradleで以下のように指定してました。

```app.gradle
dependencies {
    compile 'com.android.support:cardview-v7:+'
    compile 'com.android.support:recyclerview-v7:+'
}
```

この設定だと1.5(正確にはsdkが２３.x以下)では問題なく動き、2.x(正確にはsdkが２4.x以上)では表示サイズがおかしくなりました。

以下の設定に変更したところ正常に動きました。

```app.gradle
dependencies {
    compile 'com.android.support:cardview-v7:23.1.1'
    compile 'com.android.support:recyclerview-v7:23.1.1'
}
```

Android Nでlayout階層の描画順が変わったのか、、、
とりあえず動いたので、深くおっての調査はしていないです。
何か知っている人がいましたら教えてください。
CentOSにPHP7とcomposerをインストールする方法

# 概要
yumでインストール

## CentOS6.7の場合

```
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo yum -y install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-mysql php-xml
```

## CentOS7の場合

```
$ sudo yum -y install epel-release.noarch
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ sudo yum -y install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-mysql php-xml
```

### 補足
新しいレポジトリを読みに行ってくれない場合は下記コマンドでキャッシュを削除してみてください。

```
$ sudo yum clean all
```

## composerのインストール

```
$ curl -sS https://getcomposer.org/installer | php -- --install-dir=/tmp
$ sudo mv /tmp/composer.phar /usr/local/bin/composer
```

[参考]
[CentOS6／CentOS7にPHP5.6／PHP7をyumでインストール](http://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e)

[関連記事]
[CentOSにMySQL5.6のインストール](http://qiita.com/Esfahan/items/83200c64de8d826677b5)
Macのローカル開発環境でhttpsを有効にしたらApacheが起動しない

Macに最初から入っているApacheでSSL通信する環境を整えた
http://www.karakaram.com/mac-apache-ssl

こちらを参考にhttpsを有効化しようとしたところ、
```sudo apachectl restart```してもApacheが起動しない。

[MAMP]Apacheが起動しないときの手順
http://qiita.com/maximum80/items/3ca16b0b41cd5ff11c6c

こちらを参考に
```apachectl configtest```
で設定の構文チェック。

```
AH00526: Syntax error on line 52 of /private/etc/apache2/extra/httpd-ssl.conf:
Invalid command 'SSLCipherSuite', perhaps misspelled or defined by a module not included in the server configuration
```

コメントアウトして有効化する。
```/private/etc/apache2/httpd.conf
LoadModule ssl_module libexec/apache2/mod_ssl.so
```

再度```apachectl configtest```

```
AH00526: Syntax error on line 92 of /private/etc/apache2/extra/httpd-ssl.conf:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).
```

コメントアウトして有効化。
```/private/etc/apache2/httpd.conf
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
```

動いた。
Firebase Remote Config for Androidの勘所

# Firebaseとは

 * Googleが買収したサービス
 * 詳細はググろう

AndroidでRemote Configを使うにあたって、少しだけハマりどころがあったのでその共有。

# Remote Configとは

 * Firebaseのコンソール側でKey:Valueの値を登録しておける
 * 基本的に全ユーザーに対して同じKey-Valueをリアルタイムに配信・反映できる
    * 条件（アプリバージョン、OS、指定％のユーザー等）を指定してValueを変える事もできる
    * A/Bテストとか、使いみちはいろいろ。

# Androidで使う準備

 1. コンソールにアクセスしてプロジェクトを作成する
 1. コンソールからアプリのpackage名とkeystoreを登録する
    * このとき、一度登録してしまうと削除する手段がない（なさそう）ので「どのプロジェクト」に「なんのアプリ」を登録するかは慎重に決める
    * ただし、keystoreを変えてしまえば別アプリとして認識されるので、配信前であればなんとかなる
 1. コンソールからConfig値を指定する
 1. Androidプロジェクトにライブラリを登録する
   * この時、pluginとの兼ね合いで"9.+"のように曖昧な設定はできず、"9.0.2"のようにバージョンを確定させる

```groovy
// 追加例
dependencies {
    compile "com.google.firebase:firebase-config:9.0.2"
}
```

# 実際に使う

 1. デフォルト値をFirebaseに教える
   * XMLを使って指定する、もしくはMapクラスを使ってデータを直接指定する方法が使える
   * サンプルはXMLを使っているが、上記どちらでも良いが、失敗した場合の挙動が異なる

```java
// インスタンスを取得する
final FirebaseRemoteConfig mRemoteConfig = FirebaseRemoteConfig.getInstance();
```
```java
// Mapで直接デフォルト値を差し込む
Map<String, Object> defValues = new HashMap<>();
defValues.put("key", "value");
mRemoteConfig.setDefaults(defValues);
```
```java
// 読み込む
mRemoteConfig.getString("key");
```

# 注意点

 * デフォルトに空文字("")を指定することはできない
    * 指定した場合、正常にFirebaseのvalueを同期することができなくなる
    * XMLで空文字を指定した場合、setDefaults()で例外が投げられる
    * 仕方ないので、クソ文字として`"nil"`を指定した
 * 同期は明示的に行う必要がある
    * Firebaseのコンソールから値を変更した場合、「すぐに反映されます」と脅されるが、実際にアプリに反映するにはプログラム側で同期処理を行う必要がある
    * 逆に、それを行わないかぎりは古い値（もしくはデフォルト値）を使い続ける
    * 意図しないタイミングでの反映を避けるための挙動と考えられる
 * 同期は１時間ごとに回数制限があり、それを超えたい場合はFirebaseをdeveloper modeにする必要がある
 * 値は`fetch()`で取得 -> `activateFetched()`で反映させる
    * 「fetchだけして値はactivateしない」という処理も可能
    * activateするまでは古い値が有効となる
    * デフォルトに空文字等の無効な値が入っていると、activateが必ず失敗する(9.0.2での挙動）
 * fetchそのものは一瞬で終わる（体感）

```java
// cacheExpireSecには、キャッシュの有効秒数を指定しておく
// 3600秒=1時間に設定して、アプリ起動時にチェックするといいんじゃないかな？
Task<Void> fetch = mRemoteConfig.fetch(cacheExpireSec);

// fetchを待つ...

// fetchが成功したら、反映させる
if (fetch.isSuccessful()) {
    // 明示的にactivateする
    mRemoteConfig.activateFetched();
}
```

```java
// Developer Modeに切り替える
mRemoteConfig.setConfigSettings(
    new FirebaseRemoteConfigSettings.Builder().setDeveloperModeEnabled(true).build()
);

```
ASP.NET Core 1.0がリリースされたので、Mac上で.NET CoreをHello World!


ASP.NET Core 1.0がリリースされました。
まず.Net Coreを触ってみます。

# 要点
[.NET - Powerful Open Source Development](https://www.microsoft.com/net/core#macos)の手順に従って素振りました。


# 内容

## OpenSSLが必要なのでHome brewでインストール

```
brew update
brew install openssl
brew link --force openssl
```

## インストーラーを使って.Net Core SDKをインストール

[official installer](https://go.microsoft.com/fwlink/?LinkID=809124)をダウンロード、インストールします。

fish-Shellの場合は`dotnet`コマンドにパスが通りません。
[workaround](https://github.com/dotnet/core/blob/master/cli/known-issues.md#users-of-zsh-z-shell-dont-get-dotnet-on-the-path-after-install)に従ってシンボリックリンクを作成します。

```
ln -s /usr/local/share/dotnet/dotnet /usr/local/bin
```


## Hello Worldアプリケーションを作成

```
mkdir hwapp
cd hwapp
dotnet new
```

## 実行
```
dotnet restore
dotnet run
```

## 結果
次の表示の最後のに`Hello World!`が表示されます。

```
Project hwapp (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling hwapp for .NETCoreApp,Version=v1.0

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:01.9556343


Hello World!
```

## 生成されたソースコード
```csharp
using System;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
```

`Hello World!`を標準出力に表示するだけのサンプルです。

# 感想

これだけだと[monoでもできていた](http://qiita.com/ledsun/items/8eecfd6168db6db38ad3)ことなので、ちょっと物足りない感じです。
Virtualbox上のUbuntuでChrome系ブラウザが真っ黒になる現象について

もともとは記事作る気なかったので画像ないですすみません。

# 07/24修正追記
おそらくVirtualBox5.1.0以降、この方法は通用しなくなってしまっています。
ひょんなことからUbuntuを再構築したら解消不可能になり、びっくりしてTrisquelの方（こちらは当時から使い続けたもの）を確認したらこっちも死んでました。。
**以下の対処法は、今では嘘です。**

# 事態
virtualbox-guest-additionをインストールしてあるVirtualbox上のゲストubuntu系OS(ubuntu16.04, Trisquel7.0で確認)上において、Chrome系ブラウザ(Chromium, Opera, Vivaldiその他)がインストール直後の時点で真っ黒、またはその他壊れた表示になりブラウジングができない。
ホスト側はOS X El CapitanとWindows 10 Proで確認できたため無関係と思われる。

## 観察
ブラウザを端末から起動すると、マウスポインタの動きに連動してOpenGL関係のエラーがコンソールを埋め尽くす。
また、タイトルバーからして表示されないものの実はボタン等はすべてきちんと配置されており、×ボタンがあるだろう位置をクリックすると閉じることができる。

## 一時的対処
起動時に`--disable-gpu`オプションをつけてハードウェアアクセラレーションを無効にすると通常通り起動する。
しかし、この状態では表示がアバウト(一辺が数十pxの矩形範囲だけスクロールがずれたりする)な様子であまり好ましくない。
ゲストそのものを3Dグラフィックス支援無効で起動することでも同様。

# 原因
 ~~virtualbox-guest-additionのビルド時に必要なパッケージが一部不足していたためにグラフィックス支援が中途半端にしか機能してないのが原因~~ の模様。
現状、原因不明。

# ~~適切と思われる対処~~5.0.2x頃は機能した対処
Guest Addition CDイメージを改めて挿入し、端末からビルドをやり直す。
この時に画面上に出ているメッセージを真面目に読めば欠けているモジュールがわかる。
私のケースではdkmsが不足とあったため、

```
sudo apt install dkms virtualbox-guest-dkms
```

を~~行うと解決された。~~
**かつてはされましたが、今ではこれでは解決されません。**

### 備考
Trisquel GNU/Linuxではvirtualbox-guest-dkmsがaptに無い(プロプライエタリ？)。この場合は~~dkmsだけ導入しておき、CDイメージからのビルドをやり直せば問題ない。~~
**現在では何も変わりません。**

# 参考
[Dynamic Kernel Module Support - ArchWiki](https://wiki.archlinuxjp.org/index.php/VirtualBox#VirtualBox_.E3.82.AB.E3.83.BC.E3.83.8D.E3.83.AB.E3.83.A2.E3.82.B8.E3.83.A5.E3.83.BC.E3.83.AB.E3.81.AE.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB)
[Virtualbox - ArchWiki #ホストでカスタムカーネルを使っている場合](https://wiki.archlinuxjp.org/index.php/VirtualBox#.E3.83.9B.E3.82.B9.E3.83.88.E3.81.A7.E3.82.AB.E3.82.B9.E3.82.BF.E3.83.A0.E3.82.AB.E3.83.BC.E3.83.8D.E3.83.AB.E3.82.92.E4.BD.BF.E3.81.A3.E3.81.A6.E3.81.84.E3.82.8B.E5.A0.B4.E5.90.88)
Torch on CentOS 7

# 事前準備

基本的には以下のページを参照．
http://torch.ch/docs/getting-started.html#_

# Torchのダウンロード

```
$ git clone https://github.com/torch/distro.git --recursive
$ cd torch
```

# インストール
以下のコマンドを実行すると，関連するプログラムを導入する．
予めこれらが導入されている場合はスキップしてもよい(はず)．
内部でsudoを呼び出しているっぽい．．
```
$ bash install-deps
```

結局，以下を実行する．
```
$ ./install.sh
```

# 設定
シェルの設定ファイル(.bashrc)に以下を行う．
基本的には，install.shで自動的にされる．
```
. {/path/to/torch}/install/bin/torch-activate
```

これで，thコマンドが使えるようになる．
ここから，いろんなパッケージをインストールする必要がある模様．．
localStorageにある配列データを繰り返して表示する

## 前提 
ローカルストレージにあるkeyの値を取得して表示したい。
配列の中身はオブジェクトごとで構成されている。

```js

let parseData3 = JSON.parse(localStorage.getItem('array-data'));
console.log(paraseData3)
// 実行すると [Object, Object, Object, Object, Object]

```

## for文で回す
[1,2,3]のような配列なら出来るが、配列の中身がkeyと値でセットなので上手く取得できない。

```js

// ストレージにparseData3があったら実行
if (parseData3) {
  listarray = parseData3;
  length = listarray.length;
  for(let i =0; i < length; i++) {
    let liEl = document.createElement('li');
    // 配列の数だけ回すで〜〜〜〜
    liEl.textContent = listarray[i];
    listArea.appendChild(liEl);
  }
}

```

## for Eachで回す
推奨されていないやり方みたいなので終了

```js

  listarray.forEach((evt) => {
      let liEl = document.createElement('li');
      liEl.textContent = evt.text;
      listArea.appendChild(liEl);
  });

```

## for inで回す

```js

  for(let cnt in listarray) {
    let liEl = document.createElement('li');
    liEl.textContent = listarray[cnt].text;
    listArea.appendChild(liEl);
  }


```

## まとめ
for in文を使いましょう。