OmniAICreator/Qiita-1.07M huggingface dataset:
VagrantでたてたOSにGitlabを導入して、日本語化もする

# 概要
Gitlabを運用していて、検証用に手元で確認したかったので
[VagrantでたてたOSにGitLabつっこむメモ](http://qiita.com/ksyunnnn/items/dab26532efe31cb26c18)を書き、更に日本語化も試しにしてみたメモ

# 必要な環境
* [日本語化パッチ](https://github.com/ksoichiro/gitlab-i18n-patch)(ここにもやり方は書いてます)
* git(パッチをうまく管理するため)
* Gitlab導入済み環境([VagrantでたてたOSにGitLabつっこむメモ](http://qiita.com/ksyunnnn/items/dab26532efe31cb26c18)にて)

# Git

## git準備

```
$ sudo su -
# Gitインストールするのに必要なあれこれDl
$ yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
# まずは適当なバージョンのGitをDlして解凍
$ wget https://www.kernel.org/pub/software/scm/git/git-2.9.0.tar.gz
$ tar zxvf git-2.9.0.tar.gz
# Gitインストール
$ cd git-2.9.0
$ make prefix=/usr/local all
$ make prefix=/usr/local install
$ git --version
```

## gitのバージョン管理
### 準備
```
# 手頃なフォルダに移動
$ cd /usr/local/src/
# クローンしとく
$ git clone git://git.kernel.org/pub/scm/git/git.git
```

### アップデートする
```
$ cd git
$ git pull
$ make prefix=/usr/local all
$ make prefix=/usr/local install
$ git --version
```

# 日本語化
## 準備

```
# 手頃なフォルダに移動
$ cd /usr/local/src/
$ git clone https://github.com/ksoichiro/gitlab-i18n-patch.git
```
## パッチ適用
```
$ cd /opt/gitlab/embedded/service/gitlab-rails
$ patch -p1 < /usr/local/src/gitlab-i18n-patch/patches/[GitLabバージョン]/app_ja.patch
# 再起動
$ gitlab-ctl restart
```

## 日本語化パッチのアップデート

Javascriptファイルを変更するため、パッチ適用後にプリコンパイルされたファイルを一度削除してプリコンパイルし直してください。

例：

```
$ cd /opt/gitlab/embedded/service/gitlab-rails
$ rm -rf public/assets
$ export PATH=/opt/gitlab/embedded/bin:$PATH
$ bundle exec rake assets:precompile RAILS_ENV=production
```
WindowsのHOSTSファイルのエイリアス数は一行で９個まで

# WindowsのHOSTSファイルのホスト名制限→９個まで

[「ホスト名に制限はある？」](http://superuser.com/questions/932112/is-there-a-maxium-number-of-hostname-aliases-per-line-in-a-windows-hosts-file)より。


```:HOSTS
127.0.0.1  h01 h02 h03 h04 h05 h06 h07 h08 h09 h10 h11
```

この場合、h10,h11は解決されないようです。
たくさん書く場合は以下のように別の行に書きましょう。

```:HOSTS
127.0.0.1  h01 h02 h03 h04 h05 h06 h07 h08 h09
127.0.0.1  h10 h11
```

ということでした。

---
以上です
SSO(シングルサインオン)について(社内LT用)

##概要
現在、K社にて案件対応中のSSOについて簡単にまとめてみました。
##認証について
一般的な「認証」とは？

- ユーザーは各アプリケーションやシステムごとにログインの手続きを行う
- ユーザーID/パスワードといった文字列を組み合わせて入力する方法などでログインを行う
- 入力された情報がシステム側に正しいと判断されることによりユーザーが「認証」される

![キャプチャ4.PNG](https://qiita-image-store.s3.amazonaws.com/0/162505/7bd833b8-9340-7497-fc2f-dade29a5f9bc.png)

一般的な「認証」にはいくつか課題があります。
１．ユーザーへの負担

- 各アプリケーションごとのログイン（入力）作業
- 多くのIDやパスワードを管理しなくてはならない

２．セキュリティ上の問題

- 管理するIDやパスワードを手帳やメモなどに書き残してしまう

##SSO(シングルサインオン)とは
1回のユーザー認証で、複数の異なるアプリケーションやシステムへのアクセスを可能にするソリューション（技術）を「Single Sign On」略してSSOといいます。

##SSOの仕組み
SSOの実現方式は大きく分けて５つあります。
- エージェント方式
- リバースプロキシ方式
- 代理認証方式
- フェデレーション方式
- 透過型方式

今回、案件で扱っているのは「リバースプロキシ方式」になります。今回はこの方式について説明をしたいと思います。

###■仕組み
ブラウザとWebAPサーバ間の通信経路上に「リバースプロキシ」サーバを設置し、「リバースプロキシ」サーバにSSOソフトウェアを導入することで、SSOを実現します。Webブラウザからのアクセスを「リバースプロキシ」サーバが受けて、後ろのWebAPサーバに中継を行います。
![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/162505/5977258c-b1c6-be31-ae37-b061efb1401f.png)

###■メリット
★ユーザー

- 多数のパスワード管理、ログイン操作からの解放

ユーザーは自ら管理するパスワード数が減り、また異なるアプリケーションにアクセスする度に発生する認証情報の入力が不要。

★管理者

- 利用者情報の一元化による管理の簡素化
管理者はアプリケーション毎に設定された利用者情報（IDやパスワードなど）を 一元化でき、膨大な情報管理が簡素化可能。

- アクセス制御・アクセスログの一元管理

管理者はユーザー認証から各アプリケーションへのアクセス制御やアクセスログを一元化でき、シンプルかつセキュアな管理を実現。

★開発者

- アプリケーション開発コストの削減

開発者は認証・認可機能の開発を本来のアプリケーション開発から切り離せ、 開発期間・工数の削減を可能にする。また既存アプリケーションにおいても、認証・認可機能を付与が容易。

★経営者

- 内部および外部からのセキュリティリスクの軽減

悪意のある第三者による不正侵入や脆弱性攻撃など、「認証」における様々な セキュリティリスクを回避・軽減が可能。(バックエンドのAPサーバを隠蔽できる)

###■デメリット
- SSO環境に含めるすべてのWebAPサーバへのアクセスがプロキシサーバを経由するように、NW構成を変更する必要がある
- WebAPサーバ側に「代理認証を許可する機能」がない場合は改修が必要になることがある


##HPE製品”IceWallSSO”について(参考)
IceWall SSOは、シングルサインオンにより一度の認証で複数のWebアプリケーションへのログインを実現し、さらにセキュリティと「アクセスコントロールの4A」の統合を実現する「統合認証基盤」です。
エージェントレスでOSやWebアプリケーションに制限の少ないリバースプロキシ方式を主体としています。

![キャプチャ１.jpg](https://qiita-image-store.s3.amazonaws.com/0/162505/1da747ba-2fa2-7802-1b13-e177391b525a.jpeg)

引用元：http://h50146.www5.hpe.com/products/software/security/icewall/sso/about/what.html

##まとめ
- SSOを導入＝使用者の負担は軽減される。
- セキュリティーやコンプライアンスが注目されている時代にマッチした技術であり、今後も市場シェアは拡大していくのではないだろうか。
Laravelで認証前のリダイレクト先のログインページを振り分ける


認証前のユーザが`/admin`配下ページにアクセスしてきたら`/admin/login`に、`/user`配下ページにアクセスしてきたら`/user/login`にリダイレクトさせたかった。

## 前提
- `config/auth.php`の`guards`に`users`とか`admin`が追加されている
- `    $this->middleware('auth:admin');`的なコードが記述されている

## Handler.phpを編集
`exception->guards()[0]`でアクセスしようとしたURLがなんの`guard`によって弾かれたかが取れる。

```php:app/Exceptions/Handler.php
  protected function unauthenticated($request, AuthenticationException $exception)
  {
    if($request->expectsJson()) {
      return response()->json(['error' => 'Unauthenticated.'], 401);
    }
    
    switch($exception->guards()[0]){
      case 'user':
        return redirect()->guest('user/login');
        break;
      case 'admin':
        return redirect()->guest('admin/login');
        break;
      default:
        return redirect('/');
        break;
    }
  }
```
RDF completeness

Semantic web では Open World Assumption (OWA) の考え方を採用している。一般論として「存在している事」は簡単（一例を挙げればよい）だが、「存在しない事」を証明するのは困難（悪魔の証明）。ところが実際データを扱い始めると、「存在しないことが分かっている」というケースがある。これをどう表現すればよいだろうか。

一方 SPARQL などは Closed World Assumption (CWA) を採用している（でなければ否定を使ったクエリの結果が得られない）。この場合は単に triple が存在しなければ、「存在しないこと」を表現しているとも言える。ただし、実運用上は「明示的に」存在しないことを表現したい。どうすればよいだろうか。

他の世界を見渡すと、例えば RDB では 3 論理値で `NULL` が採用されている。C では一般的なコンベンションとして 0 が未確定値として使われる。浮動小数点数で使われる IEEE 754 の仕様では `NaN` という値がある。Python pandas では `NaN` に加えて `None` という定数が欠損値に用いられる。cache では negative cache という手法がある。RDF ではどうするか。

この問題は completeness と呼ばれていて、何らかの completeness statement を追加するのが一般的の様子。なので SPARQL での complete reasoner という形が提案されたりしているようだが、仕様化までは到達していない、というのが現時点の状況か。

例えば保育園の[申込状況のデータ](http://www.city.kobe.lg.jp/child/grow/nursery/img/higasinadaku.pdf)では、申し込みがないことを表現している 0 と、そもそも申し込みを受け付けていない斜線の二つがある。この例に限って考えると、ひょっとすると RDB の [NULL の場合分け（4論理値）](https://codezine.jp/article/detail/532)みたいに、フィールドひとつに情報を詰め込もうとするから苦しいというだけだろうか。解法としては数字は 0 にして、さらに追加で「受け付けていない」というプロパティを宣言するのが良いだろうか。どうしたもんだろうか。

`xsd:float` は IEEE 754 の定数を受け付けたりするので悩む : `"INF"^^xsd:float`, `"-INF"^^xsd:float`, `"NaN"^^xsd:float`
Ubuntu における Sun Grid Engine の設定方法について

# 概要

Ubuntu 14.04 での Sun Grid Engine 設定についてのメモ

# 参考になったところ

知らない方法で設定をしていた。
Ubuntu とおそらく Debian ならではの設定方法だとはおもうが、勉強になった。
他のソフトウェアの設定にも使えるかもしれない。


## 環境変数などの違いがあるかもしれない

以下のスクリプトを投げてみて、正しく実行されるか確認する

```
#!/bin/bash
date
hostname
```

## 特定のキューの特定のホストに向けてジョブを投入する

`testthrow.q` という名前のキューの
`yourdesiredhost` に、
`myownjob.sh` というジョブを投入したいときは

```
qsub -q testthrow.q@yourdesiredhost myownjob.sh
```

# ヘッドノードがCentOSで、実行ノードがUbuntuの場合きをつけること


## /bin/sh

Ubuntuだと、 `dash` が使われているとおもうので、`bash`がデフォルトで期待されるならば、そのあたり気をつける。
キューのデフォルトのシェル

変更するときは

```
qconf -mq testshell.q
```

これを実行した後、変更ができる。
一応確認したほうがよい。



# 参考情報

以下のページは、おそらく 2016 年に更新があったか、書かれたと思われる。

## 英語

* [Sun Grid Engine installation on Ubuntu Server | peteris.rocks](https://peteris.rocks/blog/sun-grid-engine-installation-on-ubuntu-server/)

## 日本語

* [マスターホスト](http://www.q-eng.imat.eng.osaka-cu.ac.jp/~ippei/html/gridengine/master.html)
セキュリティエラーが発生した！（記念ｗ）

# セキュリティエラーが発生した！
![セキュリティエラー.jpg](https://qiita-image-store.s3.amazonaws.com/0/69125/918d96e6-b163-1f38-ba7e-ef92110afd9b.jpeg)

見ての通り、深刻なセキュリティエラーが発生してしまいました！
記念に一枚ｗ

# 経緯
とある、QAサイトのリンクを踏んだところ、何かを踏んだらしく、添付画像のとおりにｗｗｗ

ちなみに、訪問したサイトは
`http://www.materialdoc.com/`
こちらで、ポップアップ ブロックの表示があったものの、すり抜けたらしくその後、幾つかのサイトを経由して、画像のサイトをポップアップ。
**ここ、なんか仕込んでる（仕込まれている？）っぽいです。訪問注意！**

# 経由したと思われるサイト
同時刻帯の履歴から

(http)://c.codeonclick.com/script/wait.php?stamat=j%7CB7Z3P6Nhe3tnG6J1eCJjM-oheCtnQ6p1eaonP75x.695%2CocPoqvdNub23mVhppBkQWmGK-xYFyxJB3THsqBtCY2Zp9oO3faMQEPI_zEbaIrtgXuBfcZyROSuQEWiuMSu3SrVUwKAacfF5Dsznbfm8EXFMORT4r6qnmUcTsJRHosJqLsH2MjZwL1iA8FBJEqgaPRx8912sdnXLsinAMrklIgPeC9hfmTp5behnU3npu2UgV-ZqMVci-4MQ_Y6zfxarcOuBpSSjjMuSw8LojgF5KhqEZwO3H7lB13lVsy_NQGfJhibbZ9uk4kN0jAYerdRpYySZKSu0SvuJtJFDk1HtiMw%2C&ttc=y9vrr9yc

(http)://pwwysydh.com/click?i=115&h=Ax722bagzrnp41wtlLr5fx_lLnbwmgfQ3i3c4mSD2g7SeXo0jl6RTGbf1r-0D9d_kcbHTLqqNxRbWhBCDXgOL46sDNrilkGroKviO87Y57Ux6p-JKi3oC1QSQnPZjOCxGkzduDF9Y5JHZkxxcevxZwyWLbr9f8EFtuIT_72x_bCdyuxS356y6hhjZjkmzQ7waPT6Eo8t_G0jloSpsguk1kHgyfbekLa_rG6MdEMjZbYlynN-khtgmSLrmOy-47XFvaNXIXbBJ9VuudZFWsPePnuqGpv6EyPYdjlgq0xuZzdbuGfj4BdbuB1AlSa4_E4DQjhPs6xYO8JwJ6xdMMqeS3hBRRU0txuGjzLpwsr0du6vnoDqisVgfPWs_as14Q_aexTVhBlINZwy63HmdsUH2ZVZ2bqZbfP_iPK-daWmJ9EUYTdZfmFntKWs_k-u62aT_y6_nxIF371pgJ78JnCE_YXMHibZLl5TcScVV6sfkZn2Ki-U1_1rcuDqES-ukl2R972H3Uh0TmLkbhvZ9VjikrnPMj7weY0r_vYjTVx1YaHcMUUNtfPkmzGNKctqIRDmDDrWv690RG1XQGG9oery12MCqwGLiCrBZGXcY7fpYCa-KsSMZGjgRDPsJ-KXSWbwdj0nm7tW1L3Gash4zd9o4ZgqqDIklzcE

(http)://techexpertmountainva.com/index5.html?&c1=%28run+of+network%29&c2=1374309.adexchangeprediction.com

# セキュリティエラーｗ ページのソース見た
ソース掲載しようと思ったけど、単純模倣がいるとメンドイので、一応中身見掲載はやめときます。js でアラート出しているだけだと思いますが、他に iframe で (http)://french.compsecurityer45.com/ が情報抜いているみたい。だけど、よくわからんかった。。。

**今更だけど、みんな気をつけてね＾＾；**
[AWS]ELBの状態を取得したい

一発でELBの状態を取得したかったので、作ってみました。
ぶら下がっているEC2の詳細情報は前回の記事で作ったEC2取得ワンライナーの出力結果
から取得するようにしてるので、もっと良い方法があれば教えてください

```
echo "++++ ELB info ++++" 
    aws --profile ${_title} --region ${_region} elb describe-load-balancers | jq -r '.LoadBalancerDescriptions[]|("ELB-DNSName : " + .DNSName + " ELBName : " + .LoadBalancerName ,.Instances[])' | sed 's/{//g' | sed 's/}//g' | sed '/^$/d' | sed 's/"InstanceId"://' |\
    while read line
    do
      echo $line | grep "^ELB-DNSName :"
   　　  　 if [ $? = 1 ]
  　　   　 then
              _host=`echo $line| cut -d '"' -f 2`
              _data=`grep $_host /home/ec2-user/.output/${_title}_ec2 | sed 's/ - /-/g' | awk -F" " '{if($6 == NULL){printf "%-61s %-21s %-15s %-15s\n", $2,$3,$4,$5}else{printf "%-38s %-21s %-15s %-15s %-15s\n", $2,$3,$4,$5,$6}}'`
              _health=`aws --profile ${_title} --region ${_region} elb describe-instance-health --load-balancer-name $_elb_name --instances $_host | jq -r '.InstanceStates[]|("State : " + .State)'`
              echo -e "\t$line  ${_data}${_health} "
     　　　 else
              echo $line
              _elb_name=`echo $line | awk '{print $6}'`
      　　　fi

   　　 done
```

出力されると以下のようにぶら下がっている風な感じで出力されます
（もっとかっこいい出力の仕方を考えています。。。）

```
++++ ELB info ++++
ELB-DNSName : test-33333.ap-northeast-1.elb.amazonaws.com ELBName : test
        "i-000000000000000"  test-test                         52.xxx.xxx.xxx        10.xxx.xxx.xxx    t2.xxx        running        State : InService
```
Laravel上画像アップロード

Laravelでは画像アップロードを簡単に行うことができます。

作業工程は以下の通りです。：
①ルーティング
    →フォームビュー
    →リクエスト
②コントローラー
③ビュー

まず、ルーティングを記載します。
--->routes.php
***********************************************************************************
```
Route::get('/', 'UploadController@index');
Route::post('/store', [
    'as' => 'store', 'uses' => 'UploadController@store'
]);
```
***********************************************************************************

後はビューを制作しましょう。
--->uploads.blade.php
***********************************************************************************
```
{!! Form::open(['url' => 'route.store', ['files' => true]]) !!}
@if (isset($message))
        <div class="alert">{{$message}}</div>
@endif
		<?php echo Form::token(); ?>
		<?php echo Form::label('upload', 'Upload a file'); ?>
		<?php echo Form::file('file'); ?>
		<?php echo Form::submit('Submit'); ?>
{!! Form::close() !!}
```
***********************************************************************************
*['files'=>true]*を忘れずに記載する。
次はコントローラー（ バリデーションチェックとビジネスロジックのため ）
--->UploadController.php
***********************************************************************************
```
namespace App\Http\Controllers;
 
use App\Http\Controllers\Controller;
use Request;
 
 
class UploadController extends Controller {

    public function index(Request `$`request)
    {
        return view('uploads');
    }
    public function store(Request $request)
    {

        // バリデーションルール
        $rules = [
            'file' => 'image|max:3000',
        ];
        //バリデーションされているファイルは (jpeg, png, bmp, gif, or svg)にしないといけません。
        //3000Kb以下のファイルにする必要です。

        // バリデーターにルールとインプットを入れる
        $validation = Validator::make($request, $rules);
        
        // バリデーションチェックを行う
        if ($validation->fails()) {
            return redirect('/')->with('message', 'ファイルを確認してください！');
        }

//バリデーションルール、メッセージをRequestファイルに書いて、呼ばれることもあります。

        $imageName = str_shuffle(time().$request->file('file')->getClientOriginalName()). '.' . $request->file('file')->getClientOriginalExtension();//ファイル名をユニックするためstr_shuffleを使う
        $request->file('file')->move(
            base_path() . '/public/images/catalog/confirm', $imageName
        );
        return redirect('/')->with('message', 'ファイルをアップロードしました！');
    }
}
```
***********************************************************************************

大事な機能：
→アップロードするファイル名を取得するため、*getClientOriginalName()*を使う
→アップロードするファイルの一時的な名を取得するため、*getFilename()*を使う
→アップロードされたファイルのパスを取得の場合、*getRealPath()*を使う
→アップロードされたファイルのサイズを取得の場合、*getClientSize()*を使う
→アップロードされたファイルのmimeタイプを取得の場合、*getClientMimeType()*を使う
→アップロードされたファイルの拡張子を取得の場合、*getClientOriginalExtension()*を使う
→*move()*メソッドはファイルを記載したパスまで移動するために使います。ファイルパスはパラメーター１とファイル名はパラメーター２で記載する必要があります。
USB接続の英語キーボードを英語キーボードとして使う

1. デバイスインスタンスパスを取得
1. レジストリエディタで `HKEY_LOCALMACHINE\SYSTEM\CurrentControlSet\Enum\HID` を開く
1. デバイスインスタンスパスに移動
1. `Device Parameters` に以下の `DWORD` 値を追加
  - `KeyboardTypeOverride = 4`
  - `KeyboardSubtypeOverride = 0`
1. 再起動

| 言語 | タイプ | `KeyboardTypeOverride` | `KeyboardSubtypeOverride` |
|:-:|:-:|:-:|:-:|
| 英語 | 101/104 | 4 | 0 |
| 日本語 | 101/104 | 7 | 0 |
| 日本語 | AX | 7 | 1 |
| 日本語 | 106/109 | 7 | 2 |
| 韓国語 | 101type1 | 8 | 3 |
| 韓国語 | 103 | 8 | 6 |

この表の値は [ＵＳＢ英語キーボード付けた。（英語、日本語キーボードの共存、KeyboardTypeOverride）](http://202122.iku4.com/%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3/%EF%BD%95%EF%BD%93%EF%BD%82%E8%8B%B1%E8%AA%9E%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E4%BB%98%E3%81%91%E3%81%9F%E3%80%82%EF%BC%88%E8%8B%B1%E8%AA%9E%E3%80%81%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89) から引用。英語101（HHKB）しか試していない。
いまさら聞けない絶対パスと相対パス Win/Mac

[これ](https://off.tokyo/blog/%e7%b5%b6%e5%af%be%e3%83%91%e3%82%b9%e3%81%a8%e7%9b%b8%e5%af%be%e3%83%91%e3%82%b9%e3%81%be%e3%81%a8%e3%82%81-win-mac/)でいけた
Raspberry Pi > GPIO > 50kHzから800kHzの範囲のクロックを出そうとした > 失敗 > RPi.GPIO + time.sleep()使用時に58kHz程度 > time.sleep()関連の実装と最小時間(usec) / PWM / 周波数ジェネレータ を教えていただきました

```txt:動作環境
Raspberry Pi 2 Model B (以下RPi)
Raspbian Jessie
Tektronix TDS 2024C (200 MHz, 2GS/s)
```

某マイコン(uC)で50kHzから800kHzのクロックを使うセンサーを試そうとしたが、そのuCで直接試用するのは荷が重いと感じた。

RPiで試すことにした。

### 参考情報

Raspberry Pi 2 vs. 1 GPIO Benchmark
http://codeandlife.com/2015/03/25/raspberry-pi-2-vs-1-gpio-benchmark/

使ったことがあるRPi.GPIOではPi 2で243kHz出せるとのこと。Pi 1は70kHzとのこと。

上記の関連コードは以下にある。
http://codeandlife.com/2012/07/03/benchmarking-raspberry-pi-gpio-speed/

### 試してみた

ベースcodeは以下にした。
http://qiita.com/7of9/items/d4c2ec34c368569e0882

```gpio.py
#!/usr/bin/env python

import RPi.GPIO as gpio
import time
usleep = lambda x : time.sleep(x/1000000.0)
nsleep = lambda x : time.sleep(x/1000000000.0)

gpio.setmode(gpio.BOARD)

kPinCLK = 8 # GPIO14, 4th from the top at right sides

gpio.setup(kPinCLK, gpio.OUT)

print "hello"

while True:
	gpio.output(kPinCLK, True)
	nsleep(1.0)
	gpio.output(kPinCLK, False)
	nsleep(1.0)
```

`nsleep(1.0)`にて矩形の1周期を2ナノ秒に設定したが、59.504kHzであった。

![F0000TEK.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/0e6a93c7-e471-6724-4169-22b23965421a.jpeg)

`nsleep(1.0)`を`nsleep(100.0)`にしたところ58.5kHzであった。ほとんど変化がない。

58.82kHzは17マイクロ秒に相当する。

2つの`nsleep(1.0)`をコメントアウトした場合は189kHz程度にはなった。

![F0001TEK.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/4ecada97-5d81-462f-c7f9-a442cb3e10fe.jpeg)

## 補足

~~RPi.GPIOの使用時の注意点については、ストックした記事のコメント欄で見た覚えがあるが、その記事を見つけられない。~~

RPi.GPIOの使用時の注意点などについて、コメントに記載されている。
割込みについての記載。
http://qiita.com/rukihena/items/fb94a2cdcbb37ec8ced7

## 追加で教えていただいた事項
(追記 2016/02/07)

@mt08さんの[コメント](http://qiita.com/7of9/items/caa10591069cd3a33c76/#comment-75e6de14ab9d2a727df5)にてtime.sleep()関連の実装について教えていただきました。

コメントの通り、usが最小の処理時間になりそうですね。

@rukihena さんの[コメント](http://qiita.com/7of9/items/caa10591069cd3a33c76/#comment-0055b13b4b492c07c62d)にてソフトウェアクロック生成の問題点、PWM, SPIクロック、周波数ジェネレーターを紹介いただきました。
VirtualBox上の仮想マシンがアップデートで立ち上がらなくなった場合の備忘録

VirtualBoxマネージャからアップデートダイアログが出て
アップデートを行ったら仮想マシンが軒並み起動しなくなったときのメモ

起動しようとすると

> 2d4.1880: NtCreateFile(\Device\VBoxDrvStub) failed: 0xc0000034 STATUS_OBJECT_NAME_NOT_FOUND (0 retries)

とでる

検索をすると
WindowsUpdateが悪さをという記事もヒットしたものの、その記事からの引用元が2014年のものなので
流石にそれは無さそうと除外(Windows10のため)

とりあえずインストーラからリペアで修復できるか確認をし、無事起動
フロントエンド(初心者)の私がfont-sizeを10px以下にするときに躓いたこと

今回引っかかったのは
以下の画像のようなテキストリンクを作ろうとしたときの話です。
![スクリーンショット 2017-02-07 10.25.36.png](https://qiita-image-store.s3.amazonaws.com/0/163415/f037d20a-ff0c-c317-c29d-7d46b2587770.png)

##引っかかった話
テキストの左にある矢印のアイコンを小さくしようとした。
最初の状態：
![スクリーンショット 2017-02-07 10.26.53.png](https://qiita-image-store.s3.amazonaws.com/0/163415/29f4fa98-07b7-26f5-14e2-d6d0e667b796.png)

この矢印のclassにfont-size: 10px;を追加した。
小さくなった。
が、しかし10px以下にはできないらしい。。
もう少し小さくしたいと思い調べると
transform: scale(0.5);で小さくできるよという記事を見つけたので試しに
やってみたのだが、
何も変わらない。。。。。

transform: scale();について調べたら
inlineブロックだと適用されないみたい。。

試しにdisplay:block;
にして再度見てみると小さくなった！！

無理やりな方法かもしれないので何かアドバイスがあれば教えてください！
ChromeデベロッパーツールでHTMLタグの順序・入れ子構造を入れ替える

ウェブサイトのコーディング中にHTMLタグを入れ替えて確認したいことがよくあると思います。その度にHTMLファイルを書き換えてリロードしてとまあまあな手間ですよね。そんなときはChromeのデベロッパーツールでサクッと確認できます。

# HTMLタグをドラッグ＆ドロップ！

調整したいHTMLタグをドラッグ＆ドロップするだけで入れ替えられます。別のHTMLタグ内へ移動すると入れ子構造も変更できます。

![chrome.gif](https://qiita-image-store.s3.amazonaws.com/0/55103/c1fb9a8d-9962-39fe-0a89-03e9112bb370.gif)

かなりシンプルな使い方ですね。ひょんな拍子でドラッグ＆ドロップして気づいた機能です。なかなか忘れないとは思いますが、備忘録として残しておきます:bow_tone1:
Web制作メモ

# CSS
## 宣言
意外と知らない!?CSSセレクタ20個のおさらい
2011.06.15 カテゴリ：スタイルシート セレクタ CSS 
http://weboook.blog22.fc2.com/blog-entry-268.html

## 背景

### 背景関連のサイト
http://www.webcreatorbox.com/tech/css-gradient/

### グラデーション配置
http://jxnblk.com/shade/?base=%23C97373&hueShift=180&saturate=1&lighten=-0.02

### タグ
http://isket.jp/web%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3/css%E8%A6%8B%E5%87%BA%E3%81%97%E3%82%BF%E3%82%B0%E3%82%92%E7%94%BB%E5%83%8F%E3%81%A7%E3%83%AA%E3%83%83%E3%83%81%E3%81%AB%E8%A1%A8%E7%8F%BE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/


# ツール関連

## Brackets
###URL
http://html.adobe.com/jp/opensource/
###アドイン
http://qiita.com/assialiholic/items/c7962f804cdb21a49327

### インストール済みアドミン
* Beautify
* Brackets Color Palette
* Brackets Css Color Preview
* colorHints
* Custom Work
* HTML Block Selector
* HTML Format
* HTMLHint
* Indent Guides
* Number Tabs
* Shizimily Multi-Encoding for Brackets
Git で地味に便利なコマンドN選 #git

意外と知らなかったけど知ってると便利でさらっと使えるとかっこいいコマンド
僕が知らなかったのをメモしているので実は「常識でしょ」というものもあると思う
そのうち追加していく予定

# git commit --allow-empty -m "コメント"
全く差分のない空コミットを作成する。
とりあえずブランチ切って Pull Request 作っておきたいときに使う。
着手することは確定していて、手を動かす前に議論しておきたいときなどに便利。
Jenkins でジョブを動かしてみたいときにコミットハッシュだけ変えたいときとかにも使う

# git reset -p
`git add -p` でインタラクティブにハンクをステージングへ持っていくのはメジャーなやり方ですが、これはその逆でステージングからインタラクティブに落としていく。
ほとんどステージングに載せたいけど一部いらない場合便利

# git rev-parse --show-toplevel
カレントディレクトリが所属しているリポジトリのルートのパスを表示する
`cd` に食わせてさっと移動できるとかっこいい

# git diff --name-only
diff で変更があったファイルの名前だけ知りたい

# git diff --word-diff
差分を行単位ではなく、もう少し細かい単位で表示する

```
diff --git a/README.md b/README.md
index baaf064..b822f41 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,2 @@
# title
hello world, I am knsh14. [-Unity-]{+Golang+} Engineer.
```
あえて PHP-5.3 + MySQL-5.1 を CentOS-6.8 にインストール

# はじめに

環境の必要に迫られて、いまさらながら Aapch-2.2 + MySQL-5.1 + PHP-5.3 の環境を構築したので、そのメモです。ディストリビューションは、ius リポジトリを使える CentOS-6.8 を選びました。
当然ながら、セキュリティの問題がありますので、実運用ではなく、あくまでテスト環境としての構築です。

# インストール 

## CentOS

CentOS6.8をインストールします。今回はクラウド上のインスタンスを作成しました。

## 初期設定

rootでログインし、念のため既存パッケージのアップデートと、エディタの emacs インストールは私の趣味。

```
$ yum update
$ yum install emacs
```

必要に応じてユーザアカウント等も作っておきます。

## iusリポジトリをインストール

```
$ wget https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-14.ius.centos6.noarch.rpm
$ sudo rpm -Uvh ius-release-1.0-14.ius.centos6.noarch.rpm
```

## iusアーカイブからphp53uをインストール

```
$ sudo yum --enablerepo=ius-archive,epel install php53u php53u-cli php53u-gd php53u-mcrypt php53u-mysql php53u-dev
```

--enablerepo=ius-archive と指定するポイント。/etc/yum.repo.d/ 以下を編集して enable=1 とするのと動作は同じ。

GPG-keyのエラーがでたがそのまま続行。

## MySQL-5.1 のインストール

```
$ sudo yum install mysql-server
```

# 環境設定

## Apache と MySQL を適切に設定

* /etc/httpd/conf/http.conf をサーバに合わせて修正
* /etc/my.cnf を編集し、デフォルト言語を UTF-8 に

詳しくは MySQL もしくは Apache のドキュメントを参照

## 起動および自動設定

```
$ sudo chkconfig httpd on
$ sudo chkconfig mysqld on
$ sudo /etc/init.d/httpd start
$ sudo /etc/init.d/mysqld start
```
 
## 動作確認

ドキュメントルートに、以下の内容の phpinfo.php を作成しブラウザからアクセスして、動作を確認

```
<?php phpinfo(); ?>
```

# 最後に

今のところ依存関連の問題もなく、正しく動作しているようです。
ショートカットを活用しよう - 17 - (Excel) Ctrl + 1

# <kbd><kbd>Ctrl</kbd> + <kbd>1</kbd></kbd>の効果
セルの書式設定ダイアログを表示します。
![Excel04.png](https://qiita-image-store.s3.amazonaws.com/0/156225/aa452fa9-2992-7a36-6ec0-c9f63f74819c.png)

テンキー側の<kbd>1</kbd>は反応しません。
タブの切り替えは<kbd><kbd>Ctrl</kbd> + <kbd>PageUp</kbd></kbd>、<kbd><kbd>Ctrl</kbd> + <kbd>PageDown</kbd></kbd>で。
個別の項目はラベルに書かれているアクセスキーで。特によく使うアクセスキーは覚えておくと、セルの書式設定の変更がすばやく行えるようになるかと思います。
もっとも、罫線を引く場合などは、無理にキーボードを使うよりはマウスの方が速いとは思いますが、時折意地になってキーボードのみで操作したりします。

以上

|前回|方針|次回|
|:--|:--:|--:|
|[<kbd><kbd>Alt</kbd> + <kbd>(テンキー側の数値入力)</kbd></kbd>](http://qiita.com/rrryutaro/items/e8697d1cbc2e40cd1f92)|[記事の方針](http://qiita.com/rrryutaro/items/74d60a6e31ff149c5710)|[Excel での <kbd>F11</kbd>の各種効果など](http://qiita.com/rrryutaro/items/1629ac7d157a762e8da0)|
実行例と stringer から学ぶ go generate 入門

# go generate とは

* [go generate](https://golang.org/cmd/go/#hdr-Generate_Go_files_by_processing_source) は Go の標準ツール
  * コマンドラインから `go generate` と実行..
  * するとコードから `//go:generate` から始まるコメント行を検索し `//go:generate command argument...` というコメント行の全文から `command` のコマンドを `argument...` の引数付きで実行する
  * 任意のコマンドを実行できるが Go のコードを生成することを想定して作られている
* 自動では実行されないので、任意のタイミングで手動で実行したり、メイクファイルに記載しておきビルド前に実行したり、ファイル変更を検知して実行したりする

# go generate は何をしてくれるか

* `go generate` と実行するとカレントディレクトリから `*.go` ファイルを検索して各ファイル毎に `//go:generate` から始まるコメント行を探して実行する

```
// ファイルとディレクトリの作成
$ mkdir g1 g2
$ echo -e 'package g1\n//go:generate echo one' > g1/file1.go
$ echo -e 'package g1\n//go:generate echo two' > g1/file2.go
$ echo -e 'package g2\n//go:generate echo three' > g2/file3.go

// g1 で実行. file1.go file2.go の go:generate コマンドが実行される
$ cd g1
$ go generate

one
two

// g2 で実行. file3.go の go:generate コマンドが実行される
$ cd ../g2
$ go generate

three

$ cd ../

// 親ディレクトリで再帰的に実行. すべてのファイルの go:generate コマンドが実行される
$ go generate ./...

one
two
three

// go:generate コマンド行には実行環境の情報を変数で渡せる
$ mkdir g3
$ echo -e 'package g3\n//go:generate echo $GOARCH -- $GOOS -- $GOFILE -- $GOLINE -- $GOPACKAGE' > g3/file4.go
$ cd g3
$ go generate

amd64 -- darwin -- file4.go -- 2 -- g3
```

* このように go generate はコマンドを検索して（必要であれば環境を変数で渡して）コマンドを実行してくれるが、コード自体の解析などは行ってくれない。

# stringer とは

* [stringer](https://godoc.org/golang.org/x/tools/cmd/stringer) とは定数を定数名の文字列に変換する関数を生成するコマンド
* `stringer -type=Pill [file|dir]` とすると file か dir のファイル一覧から `Pill` 型の定数を検索して、定数名の文字列を返す `func (Pill) String() string` を生成する
* file も dir も指定しない場合はカレントディレクトリを dir として実行する
  * 実際の処理は https://github.com/golang/tools/blob/master/cmd/stringer/stringer.go#L110 あたり
* go generate からは `Pill` 型の定数の宣言されたコードかそのコードと同じディレクトリのコードに `//go:generate stringer -type=Pill` と記載して実行する

# おわりに

* なんとなく自分でも go generate に対応したツールが作れそうな気がしてきた
* コードを検索して解析して生成する流れはある程度パターンがありそうだからジェネレータのジェネレータも作れるかもしれない
addEventListenerで関数に引数を渡す

addEventListenerでイベントをバインドする時にハマった事があるので書いておきます。

# ハマった内容

とりあえずコードを見て下さい。

```javascript
var btn = document.querySelector('.jscBtn');
// clickFunction に引数を渡したい
btn.addEventListener('click', clickFunction, false);

function clickFunction(value){
    console.log(value):
}
```
clickFunction関数でvalueを使うため、addEventListener時に引数として渡そうとしていますが、上手くいっていないパターンです。

# 大体うまくいってる例
以下のようにしたら、うまく行きそうな気がしますね。

```javascript
var btn = document.querySelector('.jscBtn');
btn.addEventListener('click', function(){
    // clickFunction に引数を渡す
    clickFunction('my name'):
}, false);

function clickFunction(value){
    console.log(value): // 'my name'
}
```

関数に変数を渡すところまでは上手くいっていますが、別の問題が出てきます。以下のコードを見てください。

```javascript
var btn = document.querySelector('.jscBtn');
btn.addEventListener('click', function(){
    clickFunction('my name'):
}, false);

function clickFunction(value){
    console.log(value): // 'my name'
}

// クリックイベントを解除したいが、うまくいかない
btn.removeEventListener('click', clickFunction , false);
```

イベントをバインドする事は出来るものの、解除（アンバインド）する事が出来ません。

# 成功例

```javascript
var btn = document.querySelector('.jscBtn');
btn.addEventListener('click', clickFunction, false);
btn.eventParam = 'my name';

function clickFunction(event){
    console.log(event.target.eventParam): // 'my name'
}
```

~~イベントをバインドしたDOMオブジェクトのパラメータに引数を入れておいて、イベント発火時に参照する形です。~~
コメントで頂いたアドバイスを元に修正を加えてみました。removeEventListenerでイベントを解除出来るようにもしています。

```html:index.html
<button class="jscBtn" data-name='testName'>Click</button>
<button class="jscRemoveEventBtn">removeEvent</button>
```

```javascript:index.js
const btn = document.querySelector('.jscBtn');
const removeEventBtn = document.querySelector('.jscRemoveEventBtn');

const myEvent = function(event){
	console.log(event.target.dataset.name);
}

btn.addEventListener('click', myEvent, false);
removeEventBtn.addEventListener('click', function(){
	btn.removeEventListener('click', myEvent);
}, false);
```

# デモ
https://jsfiddle.net/8o0z48tb/

# 気になる点
windowオブジェクトにイベントをバインドする時も、windowオブジェクトに関数の引数を入れる方法で実装は出来るものの、完全にアンチパターンなので他の方法を模索しています。

「俺はこうやってるぞ」等、より良い方法があれば教えて頂けたら嬉しいです。
Access2016 VBA ボタンのイベントプロシージャが呼ばれない

Access2016の環境でプログラムを実行を実行させているのですが、
ボタンに割り付けたクリックイベントのプロシージャが呼ばれないという現象が発生しています。

同じプログラムを他のPCで動作させると、そのイベントプロシージャが呼ばれるので、このPCのAccessの環境設定設定だと思うのですが、
分かりません。

どなたか、ご教授下さい。
Chrome　で　このページを翻訳しますか？　と表示される原因

お世話になっております。

弊社会社概要のページをふとchromeで見てみると
”このページを翻訳しますか？”
と表示されていました……

難しい漢字だから支那の言葉だと思ったのだろうか……

うーん　明示的に指定したいけどchromeには無いのカナ？？？

と思ったのでメモ失礼します。
homebrew インストール……以前にProxy環境下で引っかかったメモ 

支給されたMacでちゃんと開発環境作ろうとして
[Homebrew公式ページ](http://brew.sh/index_ja.html)冒頭のコマンド

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

叩いたら、

``` sh
curl: (22) HTTP response code said error　
```

やら407やらのproxy系エラーでひっかかったのでメモ

完全にn番煎じな自分用。


## 今回引っかかった内容（結論）
- proxy の**ユーザー名に`@`がある場合はURIエンコードした`%40`で置き換える**
- CurlにもProxy設定する


以下、環境とやったこと

## 実行環境

本体: MacBook Air
OS: macOS Sierra(10.12.3)
Homebrew: 1.1.9(2017/02/06時点での最新版)


## bashにproxy通す

- ブラウザとかは通したので通したつもりで忘れてた
- 常識ではあるけどついうっかり忘れがちなやつ（だと思いたい）

``` sh
export HTTP_PROXY=ユーザー名:パスワード@proxyのURL:ポート番号
export HTTPS_PROXY=ユーザー名:パスワード@proxyのURL:ポート番号
export http_proxy=ユーザー名:パスワード@proxyのURL:ポート番号
export https_proxy=ユーザー名:パスワード@proxyのURL:ポート番号
```
> ### 注意すること 
- 大文字と小文字両方通しておく(アプリによってどっちかしか見てないのがある）
- **ユーザー名に`@`が含まれる場合はURIエンコードした`%40`で置き換える**
  - ここでひっかかって、Proxyが通らなくて地味に時間喰った
- うっかり`proxu`とかタイポしないこと


## curl にProxy通す

``` sh
proxy-user = "ユーザー名:パスワード"
proxy = http://proxyのURL:ポート番号
```

やっとbash通ったーと思ったら407で弾かれた。
ので、調べたらcurlにもProxy設定が必要だった。  
前にどっかでやったことがあるはずだけど以下略 



## あとはコマンド叩くだけ
で、無事Homebrewインストール完了。
  

というか私はそもそもpyenvをインストールしたかっただけな
んだ。
なんでこんなところで引っかかって時間使ってしまったんだ……と思いつつ久しぶりにやると忘れてるので、やっぱりメモ大事。
ということで書き散らしておく。
npmパッケージのローカルインストール

#0.はじめに

Node.jsのパッケージ管理ツールであるnpmですが、通常はインターネットに接続している環境で動作するものです。
しかし、ローカル（イントラネット）の場合でインターネットに接続できない場合、npmでのパッケージ追加ができません。
このような場合でもローカルインストールできる方法をまとめてみました。

#1."npm pack"ではダメな理由
たとえば、forever(Node.js用のデーモンマネージャー）をインストールしたい場合、インターネットに接続できる環境で以下のコマンドを実行するとインストールができます。

```
npm install -g forever
```

これをパッケージ化するには以下のコマンドを使います。

```
npm pack forever
```

すると「forever-X.X.X.tgz」のようなファイルが生成されます。
これをインストールしたい環境（ローカル環境）へ持っていき

```
npm install -g forever-X.X.X.tgz
```

とすればインストール・・・できないのです。
依存関係でエラーが出てきてしまいます。
**＃依存関係にある全てのパッケージをpackしてしまえばインストール可能ですが・・・**

よって別の方法を取りたいと思います。

#2.npmboxを使う
npmboxは依存するモジュールごとパッケージ化する便利なものです。
以下、手順です。
なお、前提として以下のようにします。

- インターネットに接続できる環境（これを「インターネット環境」）とインターネットに接続できない環境（これを「イントラネット環境」）の2つがある
- 「イントラネット環境」にforeverをインストールすることが目的
- 両環境ともnpmboxは未インストール


####2.1.インターネット環境にnpmboxをインストール

```
npm install -g npmbox
```

####2.2.npmboxを用いnpmboxとforeverをパッケージ化

```
npmbox npmbox forever
```

以下の2ファイルが作成されます。
npmbox.npmbox
forever.npmbox

####2.3.イントラネット環境にnpmboxをインストール
npmbox.npmboxを使ってnpmboxをインストールします。
ここではまだnpmbox自体がインストールされていないためnpmにてインストールします。

```
tar --no-same-owner --no-same-permissions -xvzf npmbox.npmbox
```
展開すると.npmbox.cacheというディレクトリが作成されるはずです。
展開された.npmbox.cacheを使ってnpmboxをインストールします。

```
npm install --global --cache ./.npmbox.cache --optional --cache-min 99999999999 --shrinkwrap false npmbox
```

これでnpmboxがインストールされました。

**＃途中エラーが出る場合はキャッシュのクリアを試してください**

```
npm cache clean
```

####2.4.イントラネット環境にforeverをインストール
forever.npmboxを使ってnpmboxをインストールします。
npmboxがインストールされたので、npmbox(npmunbox)にてインストールします。

```
npmunbox -g forever.npmbox
```

#3.最後に
npmboxは環境構築時（インターネットに接続できる状態時）にインストールしておくことをおススメします。
Webの概要がわかる本一覧

#Webの概要がわかる本一覧

##ウェブの仕事力が上がる標準ガイドブック 1 Webリテラシー 第2版
http://amzn.to/2kAXnEG

##Webを支える技術 -HTTP、URI、HTML、そしてREST
http://amzn.to/29PKjrd

##「プロになるためのWeb技術入門」
http://amzn.to/2kkQIQu
DockerでGUIのアプリ動かすためのメモ

# メモ
追記：グループの設定を追加

環境はUbuntu 16.04にDocker 1.13.0。基本的に以下のROSのチュートリアルページの「2. The safer way」を参照。

http://wiki.ros.org/docker/Tutorials/GUI [[1]]

```bash
docker run -it \
    --user=$USER \
    --env="DISPLAY" \  # ホスト側のDISPLAYを設定
    --workdir="/home/$USER" \  # 初期ディレクトリをホストユーザーのホームに設定
    --volume="/home/$USER:/home/$USER" \  # ホストユーザーホームをマウント
    --volume="/etc/group:/etc/group:ro" \  # 以下4つはホスト側のユーザー情報をそのまま使うための設定
    --volume="/etc/passwd:/etc/passwd:ro" \
    --volume="/etc/shadow:/etc/shadow:ro" \
    --volume="/etc/sudoers.d:/etc/sudoers.d:ro" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \  # ホスト側のXを使う
    osrf/ros:indigo-desktop-full \  # Dockerコンテナを指定
    rqt  # 実行コマンドを指定
```
X11 unix socketを使うために、環境変数DISPLAYを渡して、`/tmp/.X11-unix`をマウント。あと、ホストのユーザーで実行するために、`/etc/passwd`などもマウント。
ただ、これだと、自分のdocker バージョンではうまく行かなかった。
[[2]]より、`--user=$(id -u):$(id -g)`で直接UIDとGIDを指定するようにした。追記：所属しているグループすべて追加するには、`--group-add`を使う。
また、これで起動するとGUI画面は表示されたがコンソールにX errorほげほげとエラーが出た。[[3]]を見ると、セキュリティに厳しくなったか何かのようで、とりあえず、環境変数`QT_X11_NO_MITSHM=1`を設定すると良い。最終的には

```bash
docker run -it \
    --user=$(id -u):$(id -g) \  # ホスト側のUIDとGIDでコンテナを起動
    $(for i in $(id -G); do echo -n "--group-add "$i; done) \  # 所属しているグループを全て設定
    --env=DISPLAY=$DISPLAY \  # ホスト側のDISPLAYを設定
    --env=QT_X11_NO_MITSHM=1 \  # X errorを抑える
    --workdir="/home/$USER" \  # 初期ディレクトリをホストユーザーのホームに設定
    --volume="/home/$USER:/home/$USER" \  # ホストユーザーホームをマウント
    --volume="/etc/group:/etc/group:ro" \  # 以下4つはホスト側のユーザー情報をそのまま使うための設定
    --volume="/etc/passwd:/etc/passwd:ro" \
    --volume="/etc/shadow:/etc/shadow:ro" \
    --volume="/etc/sudoers.d:/etc/sudoers.d:ro" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \  # ホスト側のXを使う
    osrf/ros:indigo-desktop-full \  # Dockerコンテナを指定
    rqt  # 実行コマンドを指定
```

ちなみに自分は`.bashrc`に以下を追加して楽に上のオプションを指定できるようにしている

```bash
export DOCKER_USER="--user=$(id -u):$(id -g) $(for i in $(id -G); do echo -n "--group-add "$i; done) --workdir=/home/$USER --volume=/home/$USER:/home/$USER --volume=/etc/group:/etc/group:ro --volume=/etc/passwd:/etc/passwd:ro --volume=/etc/shadow:/etc/shadow:ro --volume=/etc/sudoers.d:/etc/sudoers.d:ro"
export DOCKER_DISP="$DOCKER_USER --env=DISPLAY=$DISPLAY --volume=/tmp/.X11-unix:/tmp/.X11-unix:rw -e QT_X11_NO_MITSHM=1"
```

こんな感じ、

```bash
docker run -it --rm $DOCKER_DISP osrf/ros:indigo-desktop-full rqt  # bash
docker run -it --rm $(echo $DOCKER_DISP) osrf/ros:indigo-desktop-full rqt  # zsh

```

ROSの話だけど、これでコンテナからrvizも起動できた。ROSで環境汚さなくてすむし、違うバージョン共存できる。

[1]: http://wiki.ros.org/docker/Tutorials/GUI "docker/Tutorials/GUI - ROS Wiki"
[2]: https://github.com/docker/docker/issues/22323 "linux spec user: Unable to find user xxx · Issue #22323 · docker/docker"
[3]: https://github.com/unetbootin/unetbootin/issues/66 "ubuntu 16.10 xserver bad access · Issue #66 unetbootin/unetbootin"
N/W機器の初期化手順一覧

様々なデバイスの初期化手順を記載しておく

# Juniper

## SSG-X
ID: netscreen
PASS: netscreen

### Hard Reset

1. リセットボタンによる初期化手順
1. リセットボタンを8秒押し続ける
1. 前面のSatusランプがオレンジに点滅し始めるので、緑に戻るまで押し続ける
1. その後、２～３秒（気持ち長めで）時間を置き、再度リセットボタンを８秒ほど押し続ける
1. 前面のSatusランプが赤に点滅し始めるので、緑に戻るまで押し続ける
1. Statusランプが緑に戻るとデバイスの再起動が始まる
1. Powerランプが緑に点灯、Statusランプが緑に点滅していれば再起動が完了

### Soft Reset

<pre>
 # unset all
</pre>

# Cisco

#
OpenBlocks IoT VX1 のシリアルコンソール用ドライバ

## TL;DR

OpenBlocks IoT VX1のシリアルコンソールを使うためのドライバは *CP210x* です

- Windows, macOS : [Silicon Labs / CP210x USB - UART ブリッジ VCP ドライバ](http://jp.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx)
- Linux : Kernel 3.12以降で標準 (usbserialドライバ)

## ハマりどころ

OpenBlocks IoT BX1までは [FTDI](http://www.ftdichip.com/Drivers/VCP.htm) だったのですが、モデルチェンジで仕様が変わっていたようです

```:VX1のdmesg
[    7.800342] usbserial: USB Serial support registered for cp210x
[    7.800407] cp210x 1-4.1:1.0: cp210x converter detected
[    7.848098] usb 1-4.1: cp210x converter now attached to ttyUSB0
```

### 未確認情報

OpenBlocks IoT BX3 も *CP210x* との情報がありますが**未確認です**。

## あとがき

Ubuntuに挿した時に気がつきましたが、この件どこにも情報が載っていない。
minttyでVagrant sshログインできない時の方法

#sshでログインしようとしたらできない！

勉強中にvagrantでsshログインしようとした際に詰まったので備忘録として残します。

`vagrant up`      

でOS起動して

`vagrant ssh`

でログインしようとしたら、下記のエラーが発生。

```
Pseudo-terminal will not be allocated because stdin is not a terminal.
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-108-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Mon Feb  6 22:40:57 UTC 2017

  System load:  0.16              Processes:           95
  Usage of /:   6.0% of 39.34GB   Users logged in:     0
  Memory usage: 19%               IP address for eth0: 10.0.2.15
  Swap usage:   0%

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud
```

あれ、本の通りに行かない。
Google検索したところ回避方法？を発見。

`vagrant ssh-config >> ~/.ssh/config`

の後に

`ssh default`

こうすればログインできました！
技術英語 > Lists are good for [keeping track of things by their order].

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 1114 / 12833)

> Lists are good for **<font color=red>keeping track of things by their order</font>**.

<hr>
関連して思い出したのは

http://qiita.com/7of9/items/636c52f1f4b359b8d32b

> ,and require you to **<font color=red>keep track of</font>** many details, which can lead crashes and problems that are hard to diagnose.

...

> We lost track of time.
サーバのvimで作業する時のtips

サーバで作業する場合にvimの設定を変更できないで使うときに使うコマンドの覚書

### カラースキームを変更する（一時的）。

サーバのvimを使うときとてつもなく見づらい色になってることがあります。
この場合はデフォルトで入ってるカラースキームを設定しましょう。

```
:colorscheme desert
```

### 文字コードを変更して読み直す（一時的）

なぜこんな文字コードに・・・

ということがたまにあると思います。その場合には以下のように文字コードを指定して読み直しましょう。

```
:e ++enc=文字コード名
```

例）euc-jpで読み直す場合

```
:e ++enc=euc-jp
```

### 今読んでるコードのディレクトリを開きたい。

```
:e .
```

上記コマンドで標準のファイラーが立ち上がります。
カレントディレクトリがvimを立ち上げたディレクトリになってると思います。

ファイルを開いている場所にカレントディレクトリを移動する。

```
:lcd %:h
```

ディレクトリを開いてるときは以下

```
:lcd %
```
ReactNative Android のUserAgent を変更する

## やりたいこと

React Native で作成した Android アプリからのリクエストの UserAgent を確認すると、 `okhttp/3.4.1` などとなっていて、OSのバージョンやデバイスの情報がわかりませんでした。

アプリからのリクエストというのは、 [React Native が提供している Fetch API](https://facebook.github.io/react-native/docs/network.html) で呼び出したHTTP のリクエストです。

なので、UserAgent を変更して色々な端末情報を含めるようにしたい。

端末情報は、UserAgent としてではなく、別の方法でサーバへ送っても良いですが、大抵アクセスログのフィールドの一つとして UserAgent は収集されていることが多いと思うので、都合がよさそうです。

## 方法

MainActivity.java をすこしオーバーライドします。

`react-native: 0.39.2` で動作を確認しました。

```java:MainActivity.java
public class MainActivity extends ReactActivity {
  ...
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    attachInterceptor();
  }

  private void attachInterceptor() {
    final String agentString = "YOUR HTTP AGENT";

    OkHttpClient replacementClient = OkHttpClientProvider.getOkHttpClient().newBuilder().addNetworkInterceptor(new Interceptor() {
      @Override
      public Response intercept(Interceptor.Chain chain) throws IOException {
        Request originalRequest = chain.request();
        Request requestWithUserAgent = originalRequest.newBuilder()
                .removeHeader("User-Agent")
                .addHeader("User-Agent", agentString)
                .build();

        return chain.proceed(requestWithUserAgent);
      }
    }).build();
    OkHttpClientProvider.replaceOkHttpClient(replacementClient);
  }
  ...
}
```

UserAgent に設定する文字列は、必要な情報を取得して生成すれば良いと思いますが、 `System.getProperty("http.agent")` で取得すると見慣れたフォーマットの文字列が取得できるようです。

おそらく、この箇所で生成される文字列でしょう。

https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/os/RuntimeInit.java#L197

## 細かいところ

react-native の Android 側の Networking Module はこの辺りを見れば良さそうです。

https://github.com/facebook/react-native/tree/master/ReactAndroid/src/main/java/com/facebook/react/modules/network

そのなかの `OkHttpClientProvider` というのは、 `OkHttpClient` のインスタンスを提供する役目のようですが、 上記のコードは、`replaceOkHttpClient` を呼ぶことで、デフォルトで生成されるインスタンスと自ら用意したそれとを差し替えています。
macでカメラが認識されない場合の対処(MacBook)

SkypeやPhotoBoothでMacBookProのFaceTimeカメラが認識されなくなり、かなり困ったので対処方をまとめておきます。

## ①カメラが認識されているかを調べる
アップルのロゴクリック => "About this mac" => "System Report..."　で下記の"System Information"を開きカメラが認識されているか確認。
![Screen Shot 2017-02-07 at 3.09.30.png](https://qiita-image-store.s3.amazonaws.com/0/121224/aa615291-955f-8555-8595-0cc66bb1f1cb.png)
これで、表示があればカメラ自体に問題はないはずです。表示されていない場合でも、②・③で治るかもしれません。

## ②カメラを使っているプロセスを殺す
```Tarminal
sudo killall VDCAssistant
```
他のアプリケーションがカメラをロックしているだけなら、これで治ります。
アクティビティモニタで`VDCAssistant`を殺しても良いらしい。
今回は、これでも治らなかった。

## ③NVRAM（不揮発性メモリ）を初期化
NVRAMの初期化方をApple公式サイトより引用しました。
＜注意＞MacBook Pro (Late 2016) モデルは手順が違います！！ 詳しくは、[公式ページ](https://support.apple.com/ja-jp/HT204063)で確認してください。
>1. Mac をシステム終了します。
2. キーボードで「command (⌘)」「option」「P」「R」の各キーの場所を確認します。
3. Mac の電源を入れます。
4. 起動音が聞こえたらすぐに、「command + option + P + R」キーを同時に押し、そのまま押し続けます。
5. コンピュータが再起動し、2 度目の起動音が聞こえるまで、キーを押したままにします。
6. キーを放します。

これで治りました！！

### Skypeで確認
`Skype -> Preferences -> Audio/Video` でSkypeでカメラが正常に認識できているか確かめることができます。
### そもそも NVRAM とは？
Apple公式ページより
>NVRAM (不揮発性メモリ) はコンピュータに内蔵されている小容量のメモリで、macOS からすばやくアクセスできる場所に、所定の設定情報を記憶しています。NVRAM に記憶される設定情報は、お使いの Mac のモデルと、Mac に接続されているデバイスの種類によって異なります。
>
>ex: スピーカーの音量・画面解像度・選択されている起動ディスク・最近起きたカーネルパニックの情報 (存在する場合) など

IT用語辞典e-wordsより
>NVRAMとは、コンピュータの記憶装置として利用される半導体メモリ装置のうち、自由に読み書きが可能で、電源を落としても内容が失われないもの。以下の異なる二つの意味で用いられる。
>
>一つは、半導体メモリ素子の分類を表す用語で、通電しなくても内容が失われない不揮発性メモリ（non-volatile memory）のうち、RAMと同じように記録内容の読み書きが自由に行えるフラッシュメモリなどの素子の総称を表す。
>
>もう一つは、コンピュータ内部などに設置される半導体メモリを利用した装置の一種で、一般的なSRAMやDRAMに電池（バックアップバッテリー）を組み合わせ、常に通電しておくことで内容が失われないようにしたものを指す。ハードウェアの設定情報などを記録しておくために利用されることが多い。

フラッシュメモリはUSBや、BIOSなどの記憶に利用されているらしい。BIOSは、マザーボード上でメモリやらcpuやらの設定をするやつ。

## 参考
http://qiita.com/tomoyukilabs/items/553de09a902daa75b758
http://itpro.nikkeibp.co.jp/article/COLUMN/20131203/522202/
https://support.apple.com/ja-jp/HT204063
http://e-words.jp/w/NVRAM.html
styled-components

> Visual primitives for the component age

https://github.com/styled-components/styled-components

以降の文章は、だいたい上記のreadmeの抜粋なので雑にどんなものか知りたい人以外は上記プロジェクトページを見ることをオススメする。

さて、これは、CSSinJSの一つである。
しかし、今までのCSSinJSと大きく違うところは、classNameによるあの煩わしいマッピングを廃止したところにある。

```
$ yarn add styled-components
```


```js
import React from 'react';

import styled from 'styled-components';

// Create a <Title> react component that renders an <h1> which is
// centered, palevioletred and sized at 1.5em
const Title = styled.h1`
  font-size: 1.5em;
  text-align: center;
  color: palevioletred;
`;

// Create a <Wrapper> react component that renders a <section> with
// some padding and a papayawhip background
const Wrapper = styled.section`
  padding: 4em;
  background: papayawhip;
`;
```

ベンダープレフィックスは自動で付与

```js
<Wrapper>
  <Title>Hello World, this is my first styled component!</Title>
</Wrapper>
```

![](https://camo.githubusercontent.com/640c2142e506d4b61bdd29513cb2cdbddbd4aa2f/687474703a2f2f692e696d6775722e636f6d2f77554a70636a592e6a7067)

classNameなんて一文字も出てこない。完全にコンポーネントに閉じてるので、考えることが非常に少ない。コンポーネントにCSSを当てるだけ。


mediaクエリやアニメーションも普通に使える。
サードパーティのコンポーネントへのスタイリングも可能だ。

また、Atomで`language-babel`を使ってるなら、シンタックスハイライトがサポートされている。
スニペットが使えるので、cssと同じように書いていける。
これは非常に嬉しい。
![](https://camo.githubusercontent.com/62d88c898d078e91a7c29bd45636315b02598106/687474703a2f2f696d6775722e636f6d2f6b3768343563332e6a7067)

さらに、stylelintも適用可能である。
![](https://camo.githubusercontent.com/7b55be7205ae590ae3e1476fbf01c0f7aa57bd32/687474703a2f2f696d6775722e636f6d2f6272397a6448622e676966)

他にも、READMEが充実しているので見ることをオススメする。

https://github.com/styled-components/styled-components
Keynoteでもプロポーショナルメトリクスが使える！

## プロポーショナル未使用

![スクリーンショット 2017-02-07 2.27.55.png](https://qiita-image-store.s3.amazonaws.com/0/48238/8208a7c4-8a61-3b01-57d5-8664709e2476.png)

---

## プロポーショナル適用後

![スクリーンショット 2017-02-07 2.29.03.png](https://qiita-image-store.s3.amazonaws.com/0/48238/3cd302da-d2cb-5bef-16a7-c32e06752b90.png)

---

## プロポーショナル未使用

![スクリーンショット 2017-02-07 4.24.03.png](https://qiita-image-store.s3.amazonaws.com/0/48238/610e37d7-9ded-adf6-6c13-2b65157f1ce2.png)


---

## プロポーショナル適用後

![スクリーンショット 2017-02-07 4.23.17.png](https://qiita-image-store.s3.amazonaws.com/0/48238/892184d3-b8e2-485b-8075-17a921997ed7.png)

---

# 適用方法

![スクリーンショット_2017-02-07_2_28_38.png](https://qiita-image-store.s3.amazonaws.com/0/48238/1f5bc9d4-28ad-e2b9-08c6-13fa5c67321b.png)

1. フォントパネルを⌘+Tで表示
2. メニューから「タイポグラフィ」を選択
3. 適用したい文字へ「プロポーショナル幅」を選択

※対応しているOpenTypeフォントでないと無理。ヒラギノとかならOK。

---

# もっと早く知りたかった！

プレゼン資料なんてフォントサイズが大きくて行長が短いんだから、プロポーショナルメトリクスでツメ組みできるならそれに越したことはない。もっと早く知りたかったな……。
WindowsでJavaScript生活をゼロからはじめようと思ったらつまづいた話

[ゼロから始めるJavaScript生活](http://qiita.com/takahashim/items/7838334d1451fb0a9811) をWindowsで試したら、flowでつまづいたときの話です。

## 元ネタ

* [JavaScript Stack from Scratch](https://github.com/verekia/js-stack-from-scratch)
* 上記の日本語fork→[ゼロから始めるJavaScript生活](https://github.com/takahashim/js-stack-from-scratch)
* Qiitaでの紹介記事→[ゼロから始めるJavaScript生活](http://qiita.com/takahashim/items/7838334d1451fb0a9811)

## 環境

Windows7(64bit)

## 事象

[12 - Flow](https://github.com/takahashim/js-stack-from-scratch/tree/ja/tutorial/12-flow) のページで、gulpfile.babel.jsの"lint"タスクにflow()を追加した後の実行時に以下のエラーが発生する。

``` sh
[19:01:18] Starting 'lint'...
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: spawn D:\xxxxxxxx\node_modules\gulp-flowtype\node_modules\flow-bin\vendor\flow.exe ENOENT
    at exports._errnoException (util.js:1022:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:359:16)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)
error Command failed with exit code 1.
```

## 対応

Windowsでやる場合、以下の対処を行うと動くようになった。

* flow-binをインストール
* インストールした.\node_modules\flow-binからflow-win64-v0.xx.0ディレクトリを.\node_modules\gulp-flowtype\node_modules\flow-binにコピー
* コピーしたflow-win64-v0.xx.0ディレクトリをvendorにrename

これでとりあえず動いたんですが、根本的な対処をご存じの方は教えてください。
(実験編)色々なオブジェクトの存在確認メソッド

#色々なオブジェクトの存在確認をしたい

人様の書いたコードを読むにつけ､`hoge.nil?`だとか､`if params[:hoge]`､`hoge.blank?`だとか`if foo.hoge.size==0`だとか､色々な書き方を見て､何をどう使えばいいのかわからなくなってきたrails(ruby)初心者です｡

[前回の記事](http://qiita.com/fursich/items/e4be106b2aa639fd3e6a)を書いていて､少しだけわかったような気になったのですが､細かい仕様の違いにまだ慣れておらず｡

自分用の備忘録と､メタプログラミングの基礎練習がてらに実験してみました｡

#というわけで結果

こんな感じになりました｡

<img width="1010" alt="スクリーンショット 2017-02-07 18.11.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/151343/cf26513e-c6f5-9957-b528-b57371a12252.png">

+ `@undefined`は定義されていないインスタンス変数(適当な名前)です｡
本当に未定義の変数(を意図した文字列)を突っ込むと､rubyがメソッドか変数かも解釈できず､実行不能になるので@をつけました｡

+ `!`は､論理評価をさせるために入れました｡よく､`if hoge`だとか､`unless hoge`というコードがありますが､そういう形での評価に対応しています｡


#雑感など

+ 未定義かもしれない変数を確認する時は､少なくともそれが変数であることをrubyがわかってさえいれば､いろいろ確認手段はある｡(rubyが変数かどうかすら判断できないような名前だと､どうすればいいのでしょう･･)

+ 未定義(初期化されていない)インスタンス変数(つまり@hogehogeのようなもの)への参照はnilを返す｡つまり結果的にはnilに対する評価と同じ結果になる｡当然ながら､インスタンス変数が定義(初期化)されている場合は､変数の中身に応じて挙動が変わる｡

+ 'nil?'と'!'の振る舞いは`false`への反応を除いて同じ(前回調査済み)

+ `blank?`と`persent?`は表裏の関係(お互いの論理否定)

+ count/size/lengthは予想以上にまちまち｡

0.size = 8

というのは､Integer型のバイト数｡
たとえば`(1000**10).size`とかやってみると､数字が増えていくのが確認できます｡

#コードなど

ちょこちょこっとrailsで出力してみたレベルですが参考になれば･･｡

```ruby

class NiltestController < ApplicationController
  def index
    method_test
  end

private  
  def method_test
    test_methods = [
      'nil?',
      '!',
      'empty?',
      'blank?',
      'present?',
      'count',
      'size',
      'length',
      'any?',
      'zero?'
    ]
    test_objects = {
      '@undefined' => @undefined,
      'nil'     => nil,
      'false'   => false,
      'true'    => true,
      '""'      => "",
      '" "'     => " ",
      '"hoge"'  => "hoge",
      '[]'      => [],
      '[@undefined]'   => [@undefined],
      '[nil]'   => [nil],
      '{}'      => {},
      '{hoge: @undefined}' => {hoge: @undefined},
      '{hoge: nil}' => {hoge: nil},
      '0'       => 0,
      '0.0'     => 0.0,
      '"0"'     => "0"
    }
    
    @methods = test_methods 
    @results = []
    
    test_objects.each do |label, obj|
      res = [label]
      test_methods.each do |meth|

        begin
          res << (obj.send meth).to_s
        rescue => e
          res << e.class.to_s
        end

      end
      @results << res
    end
  end
end
```

```ruby
<div class='container'>
  <table class='table table-striped'>
  
    <tr>
      <th>methods</th>
      <% @methods.each do |obj| %>
        <th><%= obj %></th>
      <% end %>
    </tr>
  
    <% @results.each do |res| %>
      <tr>
        <% res.each do |r| %>
          <td><%= r %></td>
        <% end %>
      </tr>
    <% end %>
    
  </table>
</div>
```

#環境

ruby 2.3.0p0
Rails 4.2.7.1

です｡(rails5じゃなくてすみません･･)

#参考サイト

例によって様々なサイトを参考にさせていただきましたが､特に下記のサイトでの確認方法を盛大に参考にさせていただきました｡この場を借りて感謝させてください｡

http://d.hatena.ne.jp/yk5656/20140317/1395559495

http://stackoverflow.com/posts/20663389/revisions
エディタ拡張でメニューにショートカットを作成する

## サンプル
![image](https://qiita-image-store.s3.amazonaws.com/0/164066/80779def-b64f-7168-2be4-f1d7cccc292d.png)

## ツールバーに自分のプログラムを追加する
```csharp:MyChildhoodDreamEditor
#region

using UnityEditor;
using UnityEngine;

#endregion

/// <summary>
/// エディタ拡張（ウィンドウを作成する）
/// </summary>
public class MyChildhoodDreamEditor : EditorWindow
{
    [MenuItem("ExpansionTool/hogehoge %t")]
    private static void Open()
    {
        EditorWindow.GetWindow<MyChildhoodDreamEditor>("ほげほげ");
    }

    private void OnGUI()
    {
        if (GUILayout.Button("実行")) {
            Debug.Log("hogehoge");
        }
    }
}
```

## ツールバーのショートカット(tは変更可能)
| 記号 | キー |
|:-:|:-:|
|%t|Ctrl + t|
|&t|Alt + t|
|#t|Shift + t|