OmniAICreator/Qiita-1.07M huggingface dataset:
adapterについて

##Adapterとは

android studioでlistViewを使う際にはadapterを使わなければなりません。
adapterのはdeveloperでは

```Adapter object acts as a bridge between an AdapterView and the underlying data for that view.
```
つまりAdapterViewなどのViewとデータの橋渡しをしています。

##ArrayAdapter

http://qiita.com/nimani76/items/032d0d6d01f7bfd6a5e4
ここで使ったadapterはArrayAdapterというもので

```
val adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1)
```

このように使っています。
```this```はContext情報を渡しています。
Conrextとはアプリケーション全体の状態の情報(かな？)のことでその情報を渡しています。
```android.R.layout.simple_list_item_1```とはandroidSDKに標準で準備されているレイアウトファイルのIDをあらわすもの。
この二つのコンストラクタ以外にも```android.R.layout.simple_list_item_1```のうしろにlistのデータを渡すこともできます。

##adapterの種類
adapterはArrayadapter以外にもCursorAdapter,SimpleAdapter,BaseAdapterがあります。
####SimpleAdapter
SimpleAdapterはMLファイルで定義された複数のビューを表示するときに使用します。
コードは```SimpleAdapter(this, listData, R.layout.list,arrayOf("no", "name"), intArrayOf(R.id.no, R.id.name))```で
```this```はContext情報を渡すもの。
```listData```はmapのlistでデータを表示するコンストラクト。
```R.layout.list```はlistviewに表示するウィジェットの定義されているID。```arrayOf("no", "name")```は表示するデータのmapのキー。
```intArrayOf(R.id.no, R.id.name)```はlistviewに表示するウィジェットが定義するresourcesのなかのウィジェットのID。
####BaseAdapter
BaseAdapterはBaseAdapterを継承することで独自のadapterを作る場合に使用します
例として

```kotlin:origadapter.kt
import android.view.ViewGroup
import android.view.LayoutInflater
import android.widget.ArrayAdapter
import android.view.View
import com.example.nimani.listas2.R

class origadapter(context: Context, objects: List<HashMap<String, String>>) : BaseAdapter<HashMap<String, String>>(context, 0, objects) {
    private val mInflater: LayoutInflater
    private var mTitle: TextView? = null
    private var mDesc: TextView? = null

    init {
        mInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    }

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        var convertView = convertView
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list, null)
        }

        val item = this.getItem(position)
        if (item != null) {
            mTitle = convertView!!.findViewById(R.id.title)
            mTitle!!.text = item["title"]

            mDesc = convertView!!.findViewById(R.id.desc)
            mDesc!!.text = item["desc"]
        }
        return convertView!!
    }
}
```
のように継承して使用します。

####CursorAdapter
CursorAdapterとはCursorクラスでアクセスする場合に使います。
今回は省略

##参照
MitoRoid
http://mitoroid.com/category/android/android_listview1.php

Android開発でList Viewを使おう！
http://qiita.com/Tsumugi/items/47f31bb7351979a45653
Laravel 5.4/DuskブラウザテストにMacroでメソッドを追加する


# はじめに
Laravelではトレイト`Illuminate\Support\Traits\Macroable`を使用しているクラスはマクロによるメソッドの追加が可能な設計となっている。

`Laravel\Dusk\Browser`はそれを継承しているため、独自メソッドの登録が可能。
拡張クラスを作る必要が無いので継承関係がややこしいことにならない。
今回はDuskのブラウザテストでウインドウ（タブ）切り替えをするメソッドを追加してみた。

# マクロを定義したファイルを作成
クロージャ―で定義するが、コール時にインスタンスがバインドされるようになっているので `$this`が使用可能。


```tests/Browser/Macros/Macros.php
Browser::macro('switchToLastTab', function() {
  // ウインドウがロードされるまで待つ
  $this->pause(1000);
  $handles = $this
              ->driver
              ->getWindowHandles();
  $this
    ->driver
    ->switchTo()
    ->window(end($handles));
  return $this;
});
```

# `AppServicePrpvider`でマクロを登録
`app\Providers\AppServiceProvider.php`内の`register`メソッド内で先ほど作成したファイルをロードする。
require_onceなどでファイルをロードするだけ。
参考
https://laracasts.com/discuss/channels/tips/50-loading-form-macros

```php
  public function register()
  {
    if ($this->app->environment('local', 'testing')) {
      // duskの登録
      $this->app->register(DuskServiceProvider::class);
      // ブラウザテスト用マクロを登録
      require_once(base_path('tests/Browser/Macros/Macros.php'));
    }
  }
```

# 呼び出す
```php
  public function testHoge()
  {
    $this->browse(function ($browser) {
      $browser
        ->visit('/')
        ->clickLink('open window')
        ->switchToLastTab()
        ->assertTitleContains('Hoge');
    });
  }
```
最近やっと固まってきたコーディングスタイル #Haskell

最近やっと自分のHaskellのコーディングスタイルが固まってきたので, 纏めておきたいと思います.

尚, 今回の記事は[@YoshikuniJujo](http://qiita.com/YoshikuniJujo)さんの[こちらの記事
 (Haskell - 個人的な(そして異端的な)コーディングスタイル)](http://qiita.com/YoshikuniJujo/items/2db33a90b7252c817baa)の構成とサンプルコードを借用させて頂いています.
[@YoshikuniJujo](http://qiita.com/YoshikuniJujo)さん, ありがとうございます.

## はじめに

色々試行錯誤した結果, 美しさと読みやすさを最優先することにしました.
書く時, またそれの修正時には多少手間がかかりますが, Vim等のエディタの機能を最大限利用して効率化を図ろうという方針です.
GHCのPreludeのソースと[@YoshikuniJujo](http://qiita.com/YoshikuniJujo)さんのソースに多分に影響を受けているかと思います.

## 字下げ

半角スペースを使います. また, インデントの文字数は可変です.
関数の型宣言はの`::`は`=`と縦に揃え, `=`の後ろのスペースは2つ分空けます.

``` hs
hello     :: String -> IO String
hello str =  do print str
                return str
```

以下のように, 改行前の文字に合わせます.
`do`の直後は改行をしません.

## スペース

スペースに関しては, [@YoshikuniJujoさんのこちらの記事
 (Haskell - 個人的な(そして異端的な)コーディングスタイル)](http://qiita.com/YoshikuniJujo/items/2db33a90b7252c817baa)と殆ど同じですが, 複数行にまたがる括弧のみ違います.

複数行にまたがる括弧では, 開き括弧とコンマが縦に並ぶように記述します.

``` hs
list1 = [ item1
        , item2
        , item3
        , item4 ]
```

レコード構文で`deriving`がある場合は以下のようにします.

``` hs
data Some = Some { slot1 = value1
                 , slot2 = value2
                 , slot3 = value3
                 } deriving (Show)
```

## 1行の幅

1行の幅は基本的に80文字までとします.
"どんな環境で見ても大体折り返し無く見れる"というのが個人的な理想なので, どんなに長くても100文字までには改行したいと思っています.
ただ, 字下げをスペース可変にしている関係で, 必然的に文字数が多くなる傾向にはあります.

## 演算子と改行

行内で改行が必要になった際は, 演算子が行頭に来るように改行しています(が, 可読性の向上のために行末に変更するかも知れません).

``` hs
hello =  "Hello, hello, hello, hello, hello, hello, ..., "
         ++ "world!"

foo =  fun1
       . fun2
       . fun3
       $ fun4 x

bar =  monad1
       >>= monad2
       >>= monad3
       >>= monad4

baz =  fun
       <$> app1
       <*> app2
       <*> app3
       <*> app4
```

## 変数名

変数名はまだあまり綺麗に固まっていません.
スコープの狭い変数は, 3文字以下の略語(f, xs, ch, str等)を付けています.

## 演算子($)の連続

演算子($)が連続する場合は, 出来る限り全て演算子(.)に置換します.

``` hs
f $ g $ h $ ... y $ z $ a
```

このような場合は, 以下のようにします.

``` hs
(f . g . h . ... y . z) a
```

## 複数の関数をまとめて型宣言するとき

複数の関数の型宣言をまとめて行ったことはありません.
今後検討します.

## where節

where節は以下のように記述します.

``` hs
fun x = ...
        where y = ...
              z = ...
```

## let-in式

基本的に`let-in`式は使わないようにしています.
なるべく`where`を使います.

## ワイルドカードを使う/使わない

ワイルドカードに関しては, [@YoshikuniJujoさんのこちらの記事
 (Haskell - 個人的な(そして異端的な)コーディングスタイル)](http://qiita.com/YoshikuniJujo/items/2db33a90b7252c817baa)と同じです.

## モジュールの導入

モジュールの導入に関しては, [@YoshikuniJujoさんのこちらの記事
 (Haskell - 個人的な(そして異端的な)コーディングスタイル)](http://qiita.com/YoshikuniJujo/items/2db33a90b7252c817baa)と同じです.
sinatraでyieldを使いこなそう

#sinatraでlyaoutを使う
```ruby:layout.erb
<html>
  <head>
  <title></title>
  </head>
  <body>
    <%= yield %>
  </body>
</html>

```
###layoutを使いたい時
```ruby:app.rb
get '/' do
  erb :index
end
```
###layoutを使いたくない時
```ruby:app.rb
get '/' do
  erb :index, layout: nil
end
```
Gitレポジトリ内の文字列を一括置換する git-sed

近頃のIDEや高級エディタでは、プロジェクトの全ファイルから文字列を検索して一括置換できるものが多いのですが、残念ながら一括置換が無かったり、IDEを起動するのが面倒だったり、そもそもIDEを使えないこともあります。

そこで、CLIで全ファイル一括置換する方法をご紹介します。

# git ls-files を使えばよい

レポジトリ内の全ファイルをリストアップできます。

```
$ git ls-files --help
NAME
       git-ls-files - Show information about files in the index and the working tree

SYNOPSIS
       git ls-files [-z] [-t] [-v]
                       (--[cached|deleted|others|ignored|stage|unmerged|killed|modified])*
                       (-[c|d|o|i|s|u|k|m])*
                       [--eol]
                       [-x <pattern>|--exclude=<pattern>]
                       [-X <file>|--exclude-from=<file>]
                       [--exclude-per-directory=<file>]
                       [--exclude-standard]
                       [--error-unmatch] [--with-tree=<tree-ish>]
                       [--full-name] [--recurse-submodules]
                       [--abbrev] [--] [<file>...]
（以下略）
```

なので、`sed` コマンドなどの編集コマンドとつなげば一括置換は簡単です。

```
$ git ls-files | xargs -L 1 sed -e 's/before_filter/before_action/g' -i

$ git ls-files | while read -r f; do sed -e 's/before_filter/before_action/g' -i "$f"; done
```

# コマンドにしてみた（git-sed）

毎回パイプや`while`を書くのが面倒なので、コマンドにしてみました。

`git sed 's/before_filter/before_action/g'` で使えます。

```bash
#!/bin/bash
set -euC
if [ "$#" -eq 0 ]; then
  echo 'git sed [SED-COMMANDS]' >&2
  exit 1
fi

if which gsed > /dev/null; then
  SED=gsed
else
  SED=sed
fi

cmd=()
while [ "$#" != "0" ]; do
  cmd+=(-e "$1")
  shift
done

git ls-files | while read -r f; do
  # シンボリックリンクにはsedを適用しない（リンクを一度削除して、通常のファイルとして作り直してしまうため）
  [ -f "$f" ] && [ ! -L "$f" ] && "$SED" -i "${cmd[@]}" "$f"
done
```
Office365の連絡先情報について

SharePointで部署情報を取得しようとした際に気づいたんですが
部署情報の入力された方法の違いによって取得する情報が違っていたので
備忘録として残します。

# 例) システム1部とシステム2部で色々登録
|| Delve | Admin Center | SharePointで取得 |
|:-:|:-:|:-:|:-:|
|Delveで「システム1部」を登録| システム1部  |  空 | システム1部  |
|↑後Admin Centerで「システム2部」で上書き| システム2部  | システム2部  |  システム2部 |
|↑後Delveで「システム1部」で上書き   |  システム1部 | システム2部  | システム1部  |

# Admin Center上の情報が更新されない
上記表のようにAdmin Center上で登録した情報はDelveに反映されましたが、Delveで登録した情報がAdmin Center上に反映されませんでした。
ただしSharePointで取得した部署情報はDelveで入力したものだったので、最終的に入力された情報を取得する動きのようです。
fstabの記述ミスによる起動不可から復旧

# 概要
fstabの記述を誤り、起動時に以下のようなエラーが出て起動できない状態に陥りました。
その時の復旧手順 for CentOS7

```
Welcome to emergency mode! After in logging in ,type "journalctl-xb" to view system logs , "systemctl reboot" to reboot , "systemctl default" to try again to boot into default mode.
Welcome to rescue mode!
Type "systemctl default" or ^D to enter default mode.
Give root password for maintenance.
Give root password for maintenance.
(or type Control -D to continue): (or type Control -D to continue):
```

# 回避方法

1. エラーの続きにrootパスワードを入力し、メンテナンスモードに入る

2. 「/」ファイルシステムが読み取り専用モードでマウントされているため、書き込み可能なようにマウントし直す
`# mount -o remount,rw /`

3. fstabの記述ミスを削除して保存
4. 再起動

# 参考元
http://d.hatena.ne.jp/shibainu55/20090105/1231903678
俺用 CentOS7 インストール後チートシート

###新規ユーザの作成
```bash
useradd admin
```

###パスワード設定
```bash
passwd
```

###sodoを利用可能にする
```bash
gpasswd -a admin wheel
su admin
cd ~
visudo
# %wheel        ALL=(ALL)       ALL　#←行頭のコメントアウトを削除
:wq
```

###rootログインを拒否
```bash
sudo vi /etc/ssh/sshd_config
```

```vim:/etc/ssh/sshd_config
#PermitRootLogin yes
PermitRootLogin no
```

###インストールされてるプログラムの最新化
```bash
sudo yum update
```

###ファイヤーウォールの確認
CentOS7からは直接iptablesは触らない
設定はhttps://fedoraproject.org/wiki/FirewallD/jp 参照

```bash
firewall-cmd --state
#runningなら起動中

firewall-cmd --get-default-zone
#publicを確認
```

気づいたことがあれば都度追記
Ansibleエラー：sudo: a password is required\r\n

#環境
Semaphore v2.4.1
Azure 仮想マシンにAnsible（Semahore)を利用してサーバ構築します。


#エラー1
Semaphoreサーバに諸々設定して、タスク実行したら、次のようなエラーが発生しました。

```
10:14:52: fatal: [XX.XX.XX.XX]: FAILED! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "sudo: a password is required\r\n", "msg": "MODULE FAILURE", "parsed": false}

```

■ 対応策1
いろいろと試行錯誤した結果、ymlファイルにbecome_user を追記することでクリア！

```
# vi web01.yml

---
 - hosts: web01
   become: yes
   become_user: webadmin       ※ 追加  （ここでは、実行ユーザをwebadminユーザとしています）
   roles:
     (省略）

```

なかなかSemaphoreの実行ログから、原因を探り対処するのが大変ですね。
英語サイトしか引っ掛からないこともあり、苦戦しました。
Slackに文章を投稿したい時の極基本動作

#はじめに
Slackでの基本動作がわからんと言われたので、まとめてみることにした。
*わからなくなったらSlackbotさんとおしゃべりをして実験してみましょー。

#普通に文章を書きたい！
自分がメッセージを送りたいグループや個人のページの下部にある、下図のボックスに文章を打ち込みます。
書き終わったらEnterを押します。
改行は【Shift＋Enter】。これは様々なSNSなどの改行でも使えるので覚えておくと便利です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/cd520a5b-3649-00df-c336-a61e8cc5bd7e.png)

#添付ファイルをつけたい
方法が2種類あります
- ドラッグ＆ドロップ
- ボタンを押す
です。

##ドラッグ＆ドロップ
ドラッグ＆ドロップの方はSlackの画面の上に添付したいファイルをかざすと下のようなメッセージが出てくるので、確認して手を離します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/21e31ccf-47b9-2868-899d-c0e5cafd09be.png)

多分基本的にはコメントを加えるかというメッセージが出てくるので、必要なら加えましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/89e5bc9f-0a18-d385-dc87-2aeec90e9bbb.png)

##ボタン式
メッセージ入力ボックスの左の「＋」を押すと図のようなメニューが出ます。
「Google Drive」から。あるいは、「Your Computer」（自分のPC）から。のどちらかを選択して、共有したいファイルを選び投稿しましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/483f6165-25d2-bb2c-7980-c5087e343715.png)


#メッセージを消したい
メッセージを消したくなった時は、メッセージにカーソルをかざした時に出てくる「・・・」を押すと「Delete message」というものが出てくるので、押して消しましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/87dcf3ca-77d8-0063-2fc3-e2eb2beaacc8.png)

#メッセージを編集したい
内容に修正を加えたい時は、上のメッセージを削除したい時と同様に「・・・」を押して「Edit message」を選び編集しましょう。
編集時、Enterを押すとメッセージ内容が確定してしまいますので、改行（Shift＋Enter）や矢印キーを上手に使って編集しましょう。

#長い文章を送りたい
2種類方法があります。
- Post
- snippet

![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/92ac951d-fef5-4dac-a512-3bb49f81cfe0.png)

##Post
postは長い文章を送りたい時に使います。
あんまり使ったことはないのでよくわからないのですが、長文を折りたたんでくれのがいいところですね。
あと、「他人にこのメッセージを編集する権限を与えるか」という文言が出てくるので、共同作業だとかフォーマットを埋めてもらうだとかそういうことにも向いてるのかもしれない。
他人とこの機能を一緒に使ったことがないのでよくわからないですが。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/c2144375-c1fd-38cd-7e4a-5c009080bcf5.png)
（[文章はお借りしてきました](http://asakuratosho.sets.ne.jp/tosyo/ohanasi/jugemu.htm)）

タイトルと文章を書いて「Share」を押して文章を共有したい先を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/baa1bda9-882f-f1d8-4acd-8e27feffb62c.png)

##Snippet
snippetはも同じように長文を共有する時に向いているのですが、よりプログラミングコード向けになっています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/3fa39281-4ac8-df1a-9f77-f6c6361fa944.png)

コードを打ち込むと色分けしてくれるのが楽しい。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/616a00bc-4a66-ee1d-dbfd-ebbd15c3ab45.png)
[ここから借りてきました](https://softlayer-api-python-client.readthedocs.io/en/latest/api/client/#managers)

#他人のメッセージに反応する
他人のメッセージに反応したり返信したい時は、そのメッセージにカーソルをかざします。
左から「ミニスタンプ」、「返信する」、「みんなに見えるように返信を書く」です。
ミニスタンプはオリジナルスタンプを作ることもできますが今回は省略。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/b121d4c1-10b1-ace6-31bc-beeaef93d339.png)

返信は、普通に書くと、こうなって、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/afbc328b-4363-b849-8ee2-d93ba09db1c3.png)

みんなに見えるように返信を書くとこうなります。
こちらは、シェア機能も兼ねているので、返信が見える先も選べます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/141025/9bb7d1b1-fa9c-b040-964d-a6092091bbf6.png)

#終わり
そんな感じです！
とりあえずこれだけわかればSlackはできる！
というわけで、おつかれさまでした。
Cognos BI へのFixPack適用ログ

##概要
久しぶりに、Cognos BIの環境にFixPackの適用作業を実施しました。
一応手順をまとめて投稿しておきますので、FixPack適用される方はご参考にして下さい。


##手順
**前日までの事前準備**

FixPackのダウンロード
https://www-945.ibm.com/support/fixcentral/

サーバー版は、基本的に64bitですよね。

Framework ManagerのFixPackも忘れないように。
⇒FMのFPは、Windows 32bit Server版になります。

**当日のFixPack適用前作業**
とにかく何があっても今の状態に戻れるよう、バックアップを色々と取得します。
また、FixPack適用により、カスタマイズ内容がデフォルトに戻ってしまうファイルは多々あります。
カスタマイズしているファイルは、バックアップ取得しておきましょう。

・Cognosの各種設定の画面コピーを取得
何事も念のため。Cognos ConfigurationとCognos Administrationで設定している内容は、全て画面キャプチャーを取得しておきます。

・Cognos BIの停止
Cognos BIのプロセスを停止します。

・Cognosノードのシステムバックアップ
手順は環境により違いますが、必ず取得しましょう。

・c10_64フォルダ配下のバックアップ
/opt/ibm/cognos/c10_64 配下を全て、tar コマンドなどでアーカイブしておきます。
Windowsの場合は、フォルダごとごっそりどこかにコピーしておきましょう。

・Content Storeのバックアップ
FixPack適用後に、Cognosを起動するとContent Storeの内容が変わります。
FixPackレベルを元に戻すためには、このContent Storeの内容も元に戻す必要があるため、バックアップが必要です。
DB2なりOracleなり、データベースのバックアップコマンドで取得しておきます。

・カスタマイズファイルのバックアップ
このあたりは個別にコピーしておきました。
c10_64/cmplst.txt
c10_64/webcontent/index.html
c10_64/webcontent/default.htm
c10_64/webcontent/m/mobilelauncher.html
c10_64/configuration/cogstartup.xml
c10_64/template/ps/system.xml
c10_64/template/ps/portal/system.xml

CGSをカスタマイズしている場合
Windows: \webapps\p2pd\WEB-INF\services\cgsService.xml
Linux: /bin64/cgsServer.sh

カスタマイズしているファイルが何かわからない場合は、.orgというような拡張子でバックアップを取得しているファイルが無いかを見るのと、また、c10_64の下の、bin、bin64、configuration、webcontentの下で更新日付を見て、何か変更しているものが無いか考えましょう。

・Framework Managerのモデルファイル
FMモデルファイルも、新しいFixPackのFMで開くと元には戻せません。
モデルファイルのあるフォルダーごと、しっかりバックアップ取得しておきましょう。

**FixPack適用作業**
FixPackのファイルを解凍しますが、今回Linux版でしたが、.tar.gz 拡張子のファイルなのですが、
gunzip コマンドで解凍しようとすると、「not in gzip format」 と言われて、解凍できませんでした。
拡張子は.tar.gzなのですが、実は.tar のファイルのようで、
mv X.tar.gz X.tar とした後に、tar -xvf X.tar で解凍できました。

解凍後、issetupを実行して、GUIでFP適用をします。
Framework ManagerノードもFPを適用しましょう。

**適用後作業**
カスタマイズしていたファイルが、色々とデフォルトに戻っているので、しっかりとカスタマイズを反映しましょう。
今回の環境では、index.html、default.htm、cgsServer.shがカスタマイズしていて、全部デフォルトに戻ってたので、カスタマイズを再反映しました。

適用後は普通にCognosを起動するだけですが、後の憂いを無くすために、CognosノードのOSの再起動と、Cognos Configurationを開いて保存をやっておきましょう。

起動時には、cogserver.logの起動時ログを全部確認して、何かエラーっぽいメッセージが無いか確認する。

Cognos Administrationの設定も確認する。

Cognosのレポート動作やバッチの動作を確認する。

##参考情報
今回は使用しませんでしたが、FixPackの戻しのTechnoteです。
**How to Rollback From a Fix Pack or Interim Fix to an Earlier Build**
http://www-01.ibm.com/support/docview.wss?uid=swg21341204

カスタマイズしていたファイルが戻ってしまう話。
**Product Customization considerations when installing Interim Fix builds**
http://www-01.ibm.com/support/docview.wss?uid=swg21632409
LimeSurveのユーザーパスワードを符号化して更新する方法

LimeSurveyにユーザーを大量に追加する場合、パスワードを符号化して登録する方法がある。
具体的には、データベースのユーザー管理テーブルusersの password 列を更新する。

※LimeSurveyはワンタイムパスワードに対応しているので、one_time_pw 列にSQLでパスワードを入力しておく方法でもよい。

符号化のアルゴリズムはSHA2_256で、例えばSQL Serverでは次のように生成する。

```SQL
--パスワード
DECLARE @HashThis varchar(4000);

--符号化されたパスワード
DECLARE @HashResult varchar(4000);

--初期パスワードを入力
SET @HashThis = 'password'

--SHA2_256で符号化
SET @HashResult = master.dbo.fn_varbintohexstr(HashBytes('SHA2_256', @HashThis));
SELECT @HashResult

-- 先頭の文字列「0x」を削除
SET @HashResult = SUBSTRING(@HashResult,3,LEN(@HashResult));
SELECT @HashResult;


````
TensorFlowの1.3.0GPU版でImportError: DLL load failedが出てしまう

## はじめにまとめ

[ここ](http://tono-n-chi.com/blog/2017/08/tensorflow-gpu-dll-import-error/)に書いたとおりですが、
TensorFlow 1.3はcuDNN6を使用しているので、cuDNN5.1でセットアップした場合は1.2.1を使いましょうという話でした。

## エラー内容

```Python
ImportError: Traceback (most recent call last):
  File "C:\Users\tono\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 18, in swig_import_helper
    return importlib.import_module(mname)
  File "C:\Users\tono\Anaconda3\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 648, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 560, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 922, in create_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
 
During handling of the above exception, another exception occurred:
 
Traceback (most recent call last):
  File "C:\Users\tono\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 41, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "C:\Users\tono\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 21, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "C:\Users\tono\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 20, in swig_import_helper
    return importlib.import_module('_pywrap_tensorflow_internal')
  File "C:\Users\tono\Anaconda3\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'
```

## 解決方法

[リリースノート](https://github.com/tensorflow/tensorflow/blob/r1.3/RELEASE.md)に

> All our prebuilt binaries have been built with cuDNN 6. We anticipate releasing TensorFlow 1.4 with cuDNN 7.

とあるとおりcuDNN6が使用されているので、cuDNN6をインストールするかTensorFlow1.2.1を使うかのどちらかを選択しなければなりません。
突然Androidエミュレータが起動しない

# 現象

Androidネイティブアプリ開発の環境をイチから作っていたある日のことでございます。

- Windows 7 (64bit)で、
- JDK 1.8 入れて、
- Android Studio 2.3.3 入れて、、、

ところがでございます。エミュレータが起動しない！
正確に言えば、エミュレータの”ガワ”だけは出て、だがしかし真っ黒のまま。
そして傍らに「Your GPU driver information」というタイトルのダイアログ。

ネットを駆け巡ってみると、私と同じ現象で困っていた方が居ました。
[【Stack Overflow】Android Studio, Suddenly got GPU Driver Issue when running emulator](https://stackoverflow.com/questions/45121828/android-studio-suddenly-got-gpu-driver-issue-when-running-emulator)

なんだかAndroid Emulatorのリビジョン26.1.3のバグみたいです？
そのうち直るかもしれませんね。次のリビジョンのを楽観的に待つというのもアリかも。

# 対策

上記のStack Overflowにて解答されている方策で対応できました。
なお、エミュレータのβ版を試す、は避けました。

## まず、コマンドでエミュレータを正常起動させてみる

そこに記載されているAnswerのうちのひとつである、AndroidSDKに同梱されているemulator.exeを使う方策でエミュレータの正常起動にまでこぎつけました。

当コマンドは、%ANDROID_SDK%\emulatorディレクトリに在ります。

```emulator -avd <avd_name> -gpu host```

”\<avd_name\>”のところは、自分で作ったエミュレータの名前を書いてください。名前が分からなかったら、以下のコマンドで目視できます。

```emulator -list-avds```

エミュレータの名前を「`Nexus 5X API 23`」のように半角スペース込みであれば、「`Nexus_5X_API_23`」というようにアンダーハイフンになるかと思います。

これで解決と言えば解決だと言えるのですが（このためのバッチファイルなんかも用意しましたし）、でもなんか癪です。Android Studio標準の「AVD Manager」からエミュレータを起動したい。なので、次に進みます。

## エミュレータの設定

意地でもAndroid Studioの「AVD Manager」ボタンからエミュレータを起動したいので。
![AVD_manager_btn.png](https://qiita-image-store.s3.amazonaws.com/0/100612/a6a5e5f1-da3a-2f5a-d6b4-9cee9c5333ee.png)

エミュレータを立ち上げたら、傍らにある縦長のアイコンの一番下にある「More」をクリックします。
![More.png](https://qiita-image-store.s3.amazonaws.com/0/100612/abc791e8-ce59-01b2-c61c-35407ccdbb73.png)

「Settings」の「OpenGL ES renderer」から、以下のいずれかを選択して試してください（エミュレータの再起動が必要です）。
![OenGL ES settings.png](https://qiita-image-store.s3.amazonaws.com/0/100612/8e80b842-857f-1129-9e4a-2334877953bd.png)


- ANGLE (D3D11)
- ANGLE (D3D9)
- Desktop native OpenGL

私は[Desktop native OpenGL]でうまくいきました。

### ちなみに

ここを設定し直しても効果はありませんでした。

「AVD Manager」の「Your Virtual Devices」の編集ボタンをクリックします。
![Your Virtual Devices.png](https://qiita-image-store.s3.amazonaws.com/0/100612/bfa1fcae-eef8-3e33-5372-cb78e122f4d5.png)

[Emulator Performance]の[Graphics:]で3項目選択できるのですが、ここはデフォルトである「Automatic」のままでいいみたいです（他のを選択しても効果はありませんでした）。
![Verify_Configration.png](https://qiita-image-store.s3.amazonaws.com/0/100612/d1ec2eae-b0d9-9651-e459-cb63a814b1c6.png)

以上です。
GitHubのチーム開発でよく使うコマンドまとめ

GitHubでforkやプルリクエストを使ったチーム開発をするときに、よく使うコマンドをまとめてみました。

## ローカルに作業環境を準備する
あらかじめ、オリジナルとなるリポジトリのgithubページから、自分のgithubアカウントへリポジトリをフォークしておきます。

- オリジナルリポジトリのアカウント名: `__ORIGINAL__`
- 自分のアカウント名: `__SELF__`
- リポジトリ名: `awesomeapp`

```bash
# まずはローカルに自分のリポジトリをcloneする
git clone https://github.com/__SELF__/awesomeapp.git

# uptreamという名前でフォーク元のリポジトリを参照する
git remote add upstream https://github.com/__ORIGINAL__/awesomeapp.git

# topic1ブランチで作業開始
git checkout -b topic1
```

この状態で`git remote -v`とすると、

```
origin   https://github.com/__SELF__/awesomeapp.git(push)
origin   https://github.com/__SELF__/awesomeapp.git(fetch)
upstream https://github.com/__ORIGINAL__/awesomeapp.git(push)
upstream https://github.com/__ORIGINAL__/awesomeapp.git(fetch)
```

というように、`origin`・`upstream`の２つのremoteが設定されており、それぞれ自分・フォーク元のリポジトリを参照するようになります。


## 自分のリポジトリからフォーク元へプルリクエストを出す

topic1ブランチで作業が終わったら、フォーク元のmasterブランチへプルリクエストを出します。

- 自分の作業ブランチ: origin/topic1
- フォーク元の統合ブランチ: upstream/master

```bash
# topic1ブランチへ移動
git checkout topic1

# フォーク元の最新をローカルに持ってくる
git fetch upstream

# ローカルで変更しているファイルがあるときは、rebaseの前にstash
git stash

# コミット履歴を一本化する
git rebase upstream/master
# コンフリクトしたら修正......

# プルリクエストに含まれるコミットを一つにまとめる
git rebase -i $(git log -n 1 upstream/master --pretty=format:"%H")
# コミットメッセージの変更...

# rebaseしているのでforce push
git push -f

# stashしていたら、元に戻す
git stash pop
```

この状態でプルリクエストを作ると、`upstream/master`に対して、コミットが一本化された１つのコミットだけを含んだプルリクエストが作られます。コミット履歴をクリーンに保つことができます。

`git rebase -i`の後ろの`$(git log -n 1 upstream/master --pretty=format:"%H")`では、`upstream/master`の最新のコミットIDを取得しています。`upstream/master`の最新のコミットにつなぐ形でコミット履歴が一本化されます。

また、`git rebase -i`をすると、
> pick a9ca5b4f コミットメッセージ1
> pick 85b03ac4 コミットメッセージ2
> pick 86d93e18 コミットメッセージ3

のようにコミット履歴の編集画面が開きます。一番上のコミットだけを残して、２番目以降のコミットの`pick`を`squash`(あるいは単に`s`)にするとコミットを１つにまとめることができます。


## 共同作業者のプルリクエストをローカルでチェックするとき

共同作業者が`upstream/master`に作成したプルリクエストを、ローカルに取り込んでチェックします。

- 共同作業者のアカウント名: `__SOMEONE__`
- チェックしたいブランチ: `someonerepo/topic2`

```bash
# まだローカルになければ、共同作業者のリポジトリのremoteを追加
git remote add someonerepo https://github.com/__SOMEONE__/awesomeapp.git

# 共同作業者のリポジトリの最新をローカルに持ってくる
git fetch someonerepo

# カレントブランチを変更
git checkout someonerepo/topic2

# someonerepo/topic2ブランチの最新を取り込む
git merge someonerepo/topic2 # Fast-forwardマージになるはず
git reset --hard someonerepo/topic2 # force pushされているときはこっち
```

この状態で`git remote -v`とすると、

```
origin       https://github.com/__SELF__/awesomeapp.git(push)
origin       https://github.com/__SELF__/awesomeapp.git(fetch)
upstream     https://github.com/__ORIGINAL__/awesomeapp.git(push)
upstream     https://github.com/__ORIGINAL__/awesomeapp.git(fetch)
someonerepo  https://github.com/__SOMEONE__/awesomeapp.git(push)
someonerepo  https://github.com/__SOMEONE__/awesomeapp.git(fetch)
```

というように、`someonerepo`のremoteが追加されており、共同作業者のリポジトリを参照するようになります。

force pushされているブランチをローカルへpullしたいとき、一度ローカルのブランチを削除してから取り込んでいる方も多いと思います（わたしがそうでした）。上記のように、`git reset --hard`を使うといちいちブランチを削除せずに取り込めます！
OPNのF-Number

Makeで新しいFM音源チップが出ていたようですが、元祖FM音源チップのYM2203(OPN)を久しぶりに復活させてプログラムを作るためにF-Numberをrubyで計算してみました。

```fnum.rb
# Calculation YM2203 F-Number value

oct = 4
div = 6

if ARGV.count == 1 then

  clk = ARGV[0].to_f

# C#, D, D#, E ,F, F#, G, G#, A, A#, B, C
  note = [277.2, 293.7, 311.1, 329.6, 349.2, 370.0, 392.0, 415.3, 440.0, 466.2, 493.9, 523.3]

  for var in note do
    fnum = (var * (2 ** 20) / (clk * 1000 * 1000 / (12 * div))) / (2 ** (oct - 1))
    print fnum.floor.to_s + ", "
  end

  print "¥n"
else
  print "% ruby fnum.rb [clock MHz]¥n"
end
```

入力クロックを引数に4オクターブの6分周(デフォルト)を計算します。

3.6 MHzで計算してみます。

```
% ruby fnum.rb 3.6
726, 769, 815, 864, 915, 969, 1027, 1088, 1153, 1222, 1294, 1371, 
```

昔亜土電子で購入した時にチップに付いてきた日本語のデータシートはコピーの 字がつぶれて解読するのが骨でした。そもそもYM2203のデータシートはちょっと分かりにくい気がします。

C#始まりなのはデータシートに合わせています。

まるめはfloorではなくてround(0)の方が良さそうですがデータシートのビットデータはfloorされているようです。

ちなみにYM3528(OPL)の計算式は以下になります。

```rb
fnum = (var * (2 ** 19) / (clk * 1000 * 1000 / 72)) / (2 ** (oct - 1))
```

OPLのデータシートはround(0)な値が記載されているようです。

ジャンクとして入手したYM3935というチップが手元にあるのですが、ネットで検索しても情報が見つかりません。製造は1997年の31週でSDIP/64ピンという特徴からYM2608(OPNA)やYM2610(OPNB)に近いのではないかと思っています。なにか情報お持ちの方いましたら教えてください。([ここ](http://www.dtech.lv/techarticles_yamaha_chips.html)にYAMAHAのチップの一覧がありますが、載ってません。)
Xcode 5.1.1から6.2に更新 brew doctor と brew upgrade（備忘録＋解決済み）

MacOSX 10.9
Xcode 5.1.1　ー＞ 6.2

#１．Xcode を6.2に更新

Downloads for Apple Developers
https://developer.apple.com/download/more/

#２．brew doctor でウォーニング

...
$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!

Warning: You are using macOS 10.9.
We (and Apple) do not provide support for this old version.
You may encounter build failures or other breakages.
Please create pull-requests instead of filing issues.

Warning: Some keg-only formula are linked into the Cellar.
Linking a keg-only formula, such as gettext, into the cellar with
`brew link <formula>` will cause other formulae to detect them during
the `./configure` step. This may cause problems when compiling those
other formulae.

Binaries provided by keg-only formulae may override system binaries
with other strange results.

You may wish to `brew unlink` these brews:
  imagemagick@6
  libxml2
...

#３．「imagemagick@6」の削除とアップグレード

Homebrewのアップデート時に出た5つのWarningと解決方法 - Qiita
http://qiita.com/unsoluble_sugar/items/acaffa6d0e28c3c24934

...
$ brew unlink imagemagick@6
$ brew install imagemagick@6
Error: imagemagick@6 6.9.8-0 is already installed
To upgrade to 6.9.9-8, run `brew upgrade imagemagick@6`
$ brew upgrade imagemagick@6

（中略）

/usr/local/Cellar/freetype/2.8: 63 files, 2.7MB, built in 23 seconds
==> Installing imagemagick@6
==> Downloading https://dl.bintray.com/homebrew/mirror/imagemagick%406-6.9.9-8.tar.xz
######################################################################## 100.0%
==> ./configure --disable-osx-universal-binary --prefix=/usr/local/Cellar/imagemagick@6/6.9.9-8 --disable-
==> make install
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/imagemagick@6/bin:$PATH"' >> ~/.bash_profile

For compilers to find this software you may need to set:
    LDFLAGS:  -L/usr/local/opt/imagemagick@6/lib
    CPPFLAGS: -I/usr/local/opt/imagemagick@6/include
For pkg-config to find this software you may need to set:
    PKG_CONFIG_PATH: /usr/local/opt/imagemagick@6/lib/pkgconfig

==> Summary
/usr/local/Cellar/imagemagick@6/6.9.9-8: 1,469 files, 23.3MB, built in 2 minutes 45 seconds
$
...


#４．「libxml2」の削除とアップグレード

...
$ brew unlink libxml2
Unlinking /usr/local/Cellar/libxml2/2.9.4_2... 17 symlinks removed
$ brew install libxml2
Error: libxml2 2.9.4_2 is already installed
To upgrade to 2.9.4, run `brew upgrade libxml2`
$ brew upgrade libxml2
...

以上
ざっくばらんメモ_4：

###Learning to Infer Graphics Programs from Hand-Drawn Images
手書きの図から、その図を記述するプログラム（TeXなど）を推論するモデルを
提案したというもの。
特に四角と三角を規則性を持たせて描画すると、それに対応するfor分を記述するなど
高度な置き換えが可能で印象的である。
図示などのある程度抽象化された表現を一足飛びに具体化（実装）する事が可能である
ため、これをより複雑な表現に応用していく事が出来ればプログラム実装がかなり楽に
なると思われる。
OpenStreetMapの地形データをUnityで使える3Dデータとして書き出す方法

ハッカソン中に試行錯誤してたどり着いたやり方をまとめておきます。

# 概要
1. 地図の任意の範囲の.osmファイルを出力する
2. OSM2Worldを使って.objファイル形式に変換する


# 1. 地図の任意の範囲の.osmファイルを出力する
http://www.openstreetmap.org/ にアクセスし、任意の範囲を選択してから「エクスポート」します。

![Screenshot 2017-08-21 06.43.30.png](https://qiita-image-store.s3.amazonaws.com/0/96286/1c9d06d7-8ec4-918d-2a80-351aadf6be64.png)


# 2. OSM2Worldを使って.objファイル形式に変換する
OSM2Worldをインストール→起動し、osmファイルを取り込みます。
http://wiki.openstreetmap.org/wiki/JA:OSM2World の記述を参考にすると良いです。

起動画面
![Screenshot 2017-08-21 06.47.53.png](https://qiita-image-store.s3.amazonaws.com/0/96286/01e714c8-f97b-e471-64dc-2a164497d8d6.png)

OSMファイルを開いたところ(この後、File > Export OBJ file を選択)
![Screenshot 2017-08-21 06.58.57.png](https://qiita-image-store.s3.amazonaws.com/0/96286/be679c44-7c30-8fc9-ffb8-eca397fa186c.png)

Unityに取り込むとこんな感じです。
![Screenshot 2017-08-21 06.53.00.png](https://qiita-image-store.s3.amazonaws.com/0/96286/4450ba3d-e328-1016-c247-7ac26f4cae05.png)


# 今後の課題
建物同士がオブジェクトとして分かれていない。
UV値が全てゼロに設定されているのでうまく画像を貼り付けられない。
解消する方法がありそうな気がするんですが、知ってる人がいたらぜひ教えて下さい。


# 参考にしたサイト
http://wiki.openstreetmap.org/wiki/JA:3D#.E3.82.A8.E3.82.AF.E3.82.B9.E3.83.9D.E3.83.BC.E3.83.88

その他にこんなやり方があるようです。
[ActionStreetMap](http://actionstreetmap.github.io/demo/)
こちらは地図を動的に生成可能。
[GoMap](https://www.assetstore.unity3d.com/jp/#!/content/68889)
[MapBox](https://www.mapbox.com/unity/)
ユーザーごとのメール送信先一覧を出す

`journalctl -u postfix` の結果を tmpに一旦出力し、
from= の QUEUE_ID を元にto= を一覧にする。

----

* ~/cron/mailto_history/main.sh

```bash:main.sh
#!/bin/sh
LANG=C

#SINCE=$(date "+%Y-%m-%d 05:00:00" -d "7 days ago")
#UNTIL=$(date "+%Y-%m-%d 05:00:00" -d "2 days ago")

#SINCE=$(date "+%Y-%m-%d 05:00:00" -d "1 days ago")
#UNTIL=$(date "+%Y-%m-%d 05:00:00" -d "0 days ago")

SINCE=yesterday
UNTIL=now

set -eu
cd ~/cron/mailto_history/

journalctl --since="$SINCE" --until="$UNTIL" \
  -u postfix > tmp

sh analyze.sh
```

* ~/cron/mailto_history/analyze.sh

```bash:analyse.sh
#!/bin/sh
LANG=C

# メール送信先一覧を出したいユーザーを列挙
USERS="root miku pepper"
# 無視したい送信先一覧
IGNORES="pepper@gmail.com|miku@outlook.jp"
# メールアドレスが長ったらしいので、メールアドレスからドメイン名をカット。変数名変えればよかった。
IGNORE_DOMAIN="@qiita.com"

get_from() {
    USERNAME=$1
    # 例: Aug 20 19:50:24 hogehoge.jp postfix/qmgr[560]: 0D44F3BAF5: from=<root@hogehoge.jp>, size=1170, nrcpt=1 (queue active)
    grep "from=<$USERNAME" tmp 2>/dev/null \
    | cut -f '6' -d " " | sed 's/://'
}

send_list() {
    QUEUEID=$1
    grep "$QUEUEID" tmp 2>/dev/null
}


#-----------
QUEUE_LIST=""
for u in $USERS
do
    echo "[$u]----------"
    QUEUE_LIST=`get_from $u`

    for i in $QUEUE_LIST
    do
        RESULT=`send_list $i`
        # 例: Aug 20 22:00:27 hogehoge.jp postfix/local[662]: 0D44F3BAF5: to=<miku@hogehoge.jp>, relay=local, delay=0.01, delays=0.01/0/0/0.01, dsn=2.0.0, status=sent (delivered to command:  IFS=' ' && exec /usr/bin/procmail -f- || exit 75 )
        RESULT=$(echo "$RESULT" | grep to= 2>/dev/null | cut -f 3,7 -d " ")
        echo "$RESULT" \
          | egrep -v "$IGNORES" 2>/dev/null \
          | sed -e 's/to=<//' -e "s/$IGNORE_DOMAIN//"  -e 's/>,//'
    done

    echo
done

exit 0
```
vim/rubymineでDovrak配列を使う

参考（ほぼ丸写し）
[vimrc基礎文法最速マスター - 永遠に未完成](http://thinca.hatenablog.com/entry/20100205/1265307642)

dovrak配列でも右手だけで移動したい。助けてドラえもん。
↓
４行で解決できる

解決方法　挿入モード（コードを書いてる時は）dovrak。ノーマルモードとヴィジュアルモード（:wqなど）を打つときはqwartyに戻す。

vimでは、

 |ノーマルモード|挿入モード|コマンドラインモード|ビジュアルモード
----|----|----|----|----
map/noremap|○  |   -|   - |  ○
nmap/nnoremap|  ○ |  - |  -  | -
imap/inoremap |-|   ○|   - |  -
cmap/cnoremap|  - |  - |  ○  | -
vmap/vnoremap|  - |  - |  -  | ○
map!/noremap!|  - |  ○ |  ○  | - 

以上の様にモードによりキーマップの変更の仕方が違う。
よってノーマルモードとヴィジュアルモードの時だけキーを置換する。

"移動キーのみnomal/visualモード時のみ置換　dが犠牲になっている
noremap d h
noremap h j
noremap t k
noremap n l

"dをkの位置に割り当てる
nnoremap k d

こんなことも出来る
"hhでescモードにはいる.
inoremap <silent> hh <ESC>

rubymineでも同じことを.ideavimrcに書けばok
ジュリアたんをvimで愛でるために


juliaは素晴らしい言語です。
そして、juliaにはジュリアたんという非公式キャラクターがいます。

vimでjuliaを開いた際にジュリアたんを表示するプラグインを作れば、
ジュリアたん見たさにjuliaを始めるひとが増えるのでは？
という布教活動用のpluginを作りました。

https://github.com/amanoese/splash-julia
## Install

dein.vimでを採用している方は、tomlファイルに下記を追記してください

```vim:dein.toml

[[plugins]]
repo = 'thinca/vim-splash'

[[plugins]]
repo = 'amanoese/splash-julia'
depends = ['thinca/vim-splash']

```
# Usage
open files of *.jl

![splash-julia2.gif](https://qiita-image-store.s3.amazonaws.com/0/155890/f0cf8e87-a67f-dbd5-cdbd-ab2e60b9f8e7.gif)


もし友達にjuliaを勧める際のメリットの一つになればよいのですが...
他の言語用のpluginを作っても面白そうですね
React NativeのARTを使って図形描画をしてみる

React NativeにはDocsにはないARTという、SVGっぽい形で図形描画できるライブラリがあります。
新たにライブラリ追加することなく使うことができますし、一応公式なので安心感もあります。
そんなARTを少し触ってみたので、導入手順と使い方を残しておきます。

## 導入手順
まずはいつもの初期手順でiOSで起動までします。

```
react-native init ARTSample
cd ARTSample
react-native run-ios
```

AndroidはそのままでOKなので、iOSだけXcodeで以下の設定が必要です。
自動リンクの方法があるのかもですが、とりあえず手動リンクします。

1. `ARTSample/ios/ARTSample.xcodeproj` を開きます
2. Librariesを右クリックして、 `Add File to ${PROJECT_NAME}` をクリック
3. `ARTSample/node_module/react-native/Libraries/ART/ART.xcodeproj` を選択
4. Xcode上で `ARTSample/ios/ARTSample.xcodeproj` を選択して、Build Phasesを開きます
5. `Link Binary with Libraries` の＋ボタンを押します
6. `libART.a` を追加します

これで準備完了です。

## サンプルコード
とりあえずパッと動かしたいので、 `index.ios.js` を編集して、図形描画してみます。
なお、ライブラリ追加をしているので、 `react-native run-ios` か、Xcode上で再実行を行ってください。

```
import React, { Component } from 'react';
import {
  AppRegistry,
  View,
  StyleSheet,
  ART,
} from 'react-native';

const {
  Surface,
  Shape,
  Path,
} = ART;

export default class ARTSample extends Component {
  render() {
    return (
      <View style={styles.container}>
        <Surface width={100} height={100}>
          <Shape
            d={'M50 0 L 0 100 L 100 100 Z'}
            fill={'red'}
            strokeWidth={1}
          />
        </Surface>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
});

AppRegistry.registerComponent('ARTSample', () => ARTSample);
```

こんな感じで表示されます。

<img width="414" alt="Simulator Screen Shot 2017.08.21 2.02.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/147184/8ca2b042-fb7f-0d02-2dcf-391cd8eac8c3.png">

ShapeコンポーネントのdプロパティにはSVGのパスデータ文字列を入れるそうで、SVGのパスデータ文字列を解説したこのページが参考になりました。
結構な表現力がありそうです。
http://defghi1977.html.xdomain.jp/tech/svgMemo/svgMemo_03.htm

## まとめ
React NativeのARTは図形描画をクロスプラットフォームで手軽に行えるので、
データに合わせて色を替える必要が合ったりなど、画像では対応できない場合などちょっと図形描画したいと思った時に便利です。
Docsにないのが少し不安ですが、Deprecatedになる場合も何かしらのアナウンスがあると期待……。

各コンポーネントの詳細はGitHub上で確認するのが良いのかなと思います。
https://github.com/facebook/react-native/tree/master/Libraries/ART

## 参考
- http://browniefed.com/blog/getting-react-art-running-on-react-native/
 - 導入手順含め参考にさせてもらいました
 - Reactのアイコンをサンプルとして用意しており、複雑な図形を作る際の参考になります
イベントレポート：テクノロジー × 地方 Meetup! これが私の生きる道#01に行っていました(前篇)

#地方で働くエンジニアの実態を聞いてみたかったので。
テクノロジー × 地方 Meetup! これが私の生きる道#01 ～北海道/宮城/島根/福岡/沖縄～
https://techplay.jp/event/628696?utm_source=628696_20170802&utm_medium=email&utm_campaign=prevent

私も地方出身者なので、東京以外でのエンジニアの活動に興味がありました。
地方ならではの事業があり、どういう取り組みをしているのかを知りたいと思い参加しました。

#登壇者紹介の紹介

##小野真弘氏（北海道 株式会社インフィニットループ 取締役副社長）
インフィニットループはメインは東京にあるスマホゲームメーカーの受託開発で、その他の取り組みとしては「おっさんが美少女になってプレゼンができるソフト」なども開発しているんだとか。
社員も150人に増えて来ていて、今後どのような組織にしていくかが課題だそうです。

話を聞いていて感じたのは、「札幌だから」という点が何の強みになっていないというところ。

その点について、気になったので懇親会でお話させてもらったのですが、札幌だから強いのではなく、札幌という場所で事業規模を拡大していけるだけの強み（顧客からの信頼・人脈）があるとのことでした。
遠隔地での不便はないか聞いたところ、社員各々がslackを使い、東京の顧客とやり取りをしており、不便さはないとのこと。仙台に支社がありますが開発部門を東京にもつ予定はないそうです。

##小泉勝志郎氏(宮城 株式会社テセラクト 代表取締役)
81才でiPhone向けアプリを開発し、WWDC2017で紹介され話題になった若宮正子さんにプログラミングを教えた方で、高齢者とITの関わりをテーマとした「シニアプログラミングネットワーク#1」の主催者でもあります。最近は「渚の妖精ぎばさちゃん」を生み出し、それがきっかけでテレビ出演もされています。

プレゼンでは地方での活動の利点として「一番になりやすい」ということを上げていました。
小泉さんは震災をきっかけに当時日本ではメジャーではなかったクラウドファンディングサービス「うらと海の子再生プロジェクト」を立ち上げました。それをきっかけに様々な方とのコネクションが出来て、若宮さんと知り合えたのもそれがきっかけだったそうです。このような現象について小泉さんは「一番と一番は惹かれ合う」とおっしゃってました。

東京だと埋没してしまいそうなことでも地方だと目立つことが出来る。
新しいことを始めたい人には地方はメリットに働くようです。

##羽角均氏(島根 株式会社モンスター・ラボ エンジニア)
Railsのエンジニアであり、今回の登壇者唯一のサラリーマンです。
地方であることのデメリットについては、バングラデシュと連携してやってるので島根でも東京でも関係ないそうです。

島根に移住して、幸福度が上がったとおっしゃっていました。特に、多くの人が意外に思っていたのは奥さんが移住に乗り気だったこと。多くの場合、移住には家族が足かせになりますが、羽角さんの場合、奥さんに移住を提案したところ島根県を調べて気に入った奥さんは、勤め先に移住するので仕事をリモートワークにしてほしいと進言したそうです。

後篇に続きます。
http://qiita.com/wakaran_ojisan/items/619f8f9f2eb7aac621ea
【入門】styled components

## まえがき
今まではcssやsassファイルを読み込んだり、React Component内の色々なタグに`style={...}`を書き込んで、デザインを実装してきました。

styled componentsはReact Componentそのものです。
propsから条件 (三項) 演算子で当てるstyleの切り分けもできます。
HOCを使うこともできます。

CSSinJSとしてカテゴライズされるstyled componentsですが幅広い活用ができることを紹介していきます。

## インストール
`yarn add styled-components` or `npm install --save styled-components`

## 今日のやることリスト
今回のサンプルです。 [webpackbin (styledSample)](https://www.webpackbin.com/bins/-Ks-JDQeI5GWFqOIWWpr)
サンプルを見ながら話を進めます。

1. styled componentsでとりあえず動かす。
2. 状態に応じた任意のstyleを当てる。
3. globalにstyleを当てる。
4. React RouterやUI ライブラリなど別コンポーネントにstyleを当てる。

## styled componentsでとりあえず動かす。
```js:index.js
18     <Title>Hello styled component</Title>
```

```js:cssinjs.js
13 export const Title = styled.h1`
14   font-size: 1.5rem;
15   text-align: center;
16   color: palevioletred;
17   margin-bottom: 3rem;
18 `;
```

`styled.h1`でstyled componentsが`<h1>`タグをラップしてhtml上ではCSS Modulesとして吐き出されます。


## 状態に応じた任意のstyleを当てる。
```js:index.js
19     <ButtonGround>
20       <Button>Normal</Button>
21       <Button primary>Primary</Button>
22     </ButtonGround>
```

```js:cssinjs.js
19 export const ButtonGround = styled.div`
20   width: 100%;
21   display: flex;
22   flex-direction: row;
23   margin-bottom: 3rem;
24 `;
25 export const Button = styled.button`
26   color: ${props => (props.primary ? '#fff' : '#000')};
27  background-color: ${props => (props.primary ? '#0275d8' : 'palevioletred')};
28   border-color: ${props => (props.primary ? '#0275d8' : 'palevioletred')};
   ...
43 `;
```

条件 (三項) 演算子で`props.primary`が存在するかしないかで値が変わります。
ここでは`props.primary`が存在するとprimaryボタンとしてデザインが反映されます。


## globalにstyleを当てる。
```js:index.js
26 globalStyles;
```

```js:cssinjs.js
50 export const globalStyles = injectGlobal`
51   html {
52     font-size: 16px;
53   }
54 `;
```

ここでは普段のcssと同じ感覚と気持ちで書く認識でいいと思います。
ただし、ここで何でも書きすぎると今までのようにcssの管理が大変になるので避けたいです。
Bootstrap, Semantic UIは既にコンポーネントが用意されているので`!important`を使って上書きしようなんて判断はまだ早いです。次を御覧ください。

## React RouterやUI ライブラリなど別コンポーネントにstyleを当てる。
```js:index.js
23     <SubTitle as="h2">Finish...</SubTitle>
```

```js:cssinjs.js
44 export const SubTitle = styled(Header)`
45   &&& {
46     color: palevioletred;
47     margin-bottom: 3rem;
48   }
49 `;
```

`styled(NavLink)`はHOCというものだな、なるほど。
！！？？ああ、トリッキーだ。`&&& {}`って何だ。
`<a class="link colord">AAA</a>`というアンカーがあったとすれば、
`<a class="link colord myLink">AAA</a>`として`.myLink`でデザインしていくことになると思いますが、それと同じ振る舞いをします。
これはCSSの詳細度と闘っています。

それと忘れてはいけないのが、きちんとライブラリのドキュメント読んでprops渡し忘れないこと(`as="h2"`)みたいに。

もしこのパターンでエラーが発生するときは、きっとライブラリのコンポーネントが期待しているものがstyledコンポーネントでは無く、ピュアなhtmlタグだったりする。

```
import {SuperHeader} from 'super-ui-sample';
import {
  MyHeader
} from './cssinjs';

const Sample = () =>
  <Body id="styledSample">
	  <div>
	    <MyHeader>My Title</MyHeader>
	  </div>
  </Body>;
```

こういうこともある。


## 備考
* HOCについてはこちら
	* [これから始めるReact.js 発展編 - HOCパターンについて](https://app.codegrid.net/entry/react-ex-3)
	* [Higher-Order Components - React - Facebook Code](https://facebook.github.io/react/docs/higher-order-components.html)
* CSSの詳細度についてはこちら
	* [詳細度 - CSS | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/Specificity)
GradleのProductFlavorsごとに読み込むライブラリを切り替える


## 概要
Gradleでproductフレーバーとstagingフレーバーで読み込むライブラリを変更する

## 方法
```gradle:build.gradle
def PACKAGE_NAME = "com.exsample"
android {
	productFlavors {
		product {
			applicationId "${PACKAGE_NAME}"
		}
		staging {
			applicationId "${PACKAGE_NAME}.staging"
		}
		develop {
			applicationId "${PACKAGE_NAME}.develop"
		}
	}
}
dependencies {
	productCompile(name: "lib-release", ext: 'aar')
	stagingCompile(name: "lib-staging-release", ext: 'aar')
	developCompile(name: "lib-develop-release", ext: 'aar')
}
```
dependeciesの項目で「フレーバー名+Compile」で読み込むライブラリを変更することができる。
【swiftエラー】clang: error: linker command failed with exit code 1 (use -vto see invocation)


xcodeのキャッシュ周りのエラー。

unityで同じ名前のアプリをビルドしてておかしくなったり、
carthageかcocoapods付近がおかしくなってる可能性あり。
carthageをupdateしてライブラリをビルドし直したら直った。

>This usually happens when using Cocoapods and you are building from the xcproject which doesn't know about the cocoapod libraries.



参照
https://www.bountysource.com/issues/39247126-clang-error-linker-command-failed-with-exit-code-1-use-vto-see-invocation
importヘッダまわりのエラーの場合もあるようだ。
http://d.hatena.ne.jp/goodbyegirl1974/20120920/1348106337
OWASP ZAPを使って脆弱性の確認（動的スキャン）をする

## 概要
OWASP ZAPの動的スキャン機能を使うと、手軽に脆弱性の確認を行うことができます。

注意点として、スキャンの対象は自分が管理しているサイトか診断の許可を得ているサイトのみに行ってください。
また、スキャンの影響で本番環境にトラブルがおきる可能性があるので、本番環境ではなくステージング環境などの準備を行い、そちらに対してスキャンをすることをおすすめいたします！

## 説明
この記事は下記の内容で進めていきます。

 - OWASP ZAPのインストール
 - スパイダー機能を使って対象のURLを取得
 - 動的スキャンを実施
 - 結果の確認

実施手順を以下に書いていきます。


## 環境
 - macOS Sierra 10.12.5
 - OWASP ZAP 2.6.0
 - WordPress 4.8.1


## OWASP ZAPのインストール
下記からOWASP ZAPをダウンロードすることができます。
>https://github.com/zaproxy/zaproxy/wiki/Downloads

確認に使ったMacではJavaをインストール済みなので、Cross Platform Package版を使用しました。

インストール後の設定については、下記の記事を参考にいたしました。
>Mac版のOWASP ZAPで脆弱性チェックの設定
>https://doruby.jp/users/r357_on_rails/entries/Mac_OWASP_ZAP

## スパイダー機能を使って対象のURLを取得
下記の設定が完了している状態で、スパイダー機能を使ってみます。

 - OWASP ZAPの起動
 - ブラウザのプロキシ設定
 - OWASP ZAPでブラウザの通信が取得できている
 - OWASP ZAPのウィンドウ左上にあるモードを「<font color="Red">プロテクトモード</font>」に設定
 - 対象環境のドメインを「規定のコンテキスト」に設定

※今回はローカル環境にWordPressの確認用環境を用意しました。

デモ環境のURLへのアクセスをOWASP ZAPで取得しておいて、
「URL→攻撃→スパイダー」を選んで、スパイダー機能を実行します。

<img width="80%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/156827/a1a17902-36f0-ee4b-20cc-305791b67714.png">

スパイダー機能を実行後、下記のようにデモ環境のURLが取得できています。
<img width="40%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/156827/99b382f6-e40d-629a-bec3-00f030e57ec0.png">

## 動的スキャンを実施
スパイダー機能と同様に、対象のURLについて「URL→攻撃→動的スキャン」を選んで、実行します。

<img width="80%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/156827/f871d508-5d4a-1812-514c-f78eb277cbf1.png">

実行中は、％表示の左にあるアイコンをクリックすると、下記のように実行状況が表示されます。
<img width="80%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/156827/0ff9d969-7293-f8cc-3b68-53045001a29b.png">

それぞれのチェック項目について、進捗が表示されています。
<img width="80%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/156827/4359fb50-f599-c8ed-b109-248fe13c443d.png">

## 結果の確認
デモ環境で検出された脆弱性は、アラートの項目に表示されます。
<img width="80%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/156827/88711739-90f4-b272-808b-6067417733a7.png">

また、検出結果は「レポート→HTMLレポート作成」から保存することで、HTML形式でまとまった形で確認することもできます。
<img width="80%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/156827/66ad5d88-6fd1-27f9-7ab9-dd4e48f65a7d.png">

## 結果の保存
「ファイル→永続化コンテキスト」で、今回行った確認データを保存することができます。

## まとめ
この記事で行った動的スキャンでは、アクセス権限の不備などの手動で確認しないといけない脆弱性は見つけられませんが、簡単な操作でサクッと診断を行うことができます。

繰り返しになりますが、スキャンの対象は自分が管理しているサイトか診断の許可を得ているサイトのみに行ってください。
また、スキャンの影響で本番環境にトラブルがおきる可能性があるので、本番環境ではなくステージング環境などの準備を行い、そちらに対してスキャンをすることをおすすめいたします！

また、今回はスキャン中にログインが切れた場合について考慮せずに動的スキャンを行いました。
もし、スキャン中にログイン状態が切れてしまうと、その後のログインが必要なページの診断はエラーになってしまいます。

そこで、下記のサイトを参考に自動認証機能を設定しておきますと、ログイン状態が切れてしまっても自動でログイン処理が実行されてスキャンを継続してくれますので、正常に動的スキャンを実施することができるかと思います。
>OWASP ZAP 2.3 自動認証機能の設定
>https://www.pupha.net/archives/2046/

※検証に使用したOWASP ZAP 2.6.0とは一部表示は違いますが、同じ手順で自動認証機能を設定することができました。

## 参考サイト

 - [IPAテクニカルウォッチ　「ウェブサイトにおける脆弱性検査手法の紹介」の公開](https://www.ipa.go.jp/about/technicalwatch/20131212.html)
 - [Mac版のOWASP ZAPで脆弱性チェックの設定](https://doruby.jp/users/r357_on_rails/entries/Mac_OWASP_ZAP)
 - [OWASP ZAPで開発中にセキュリティ診断！](http://codezine.jp/article/detail/9504)
 - [OWASP ZAP 2.3 自動認証機能の設定](https://www.pupha.net/archives/2046/)
QUIC のドラフト概要

QUIC ドキュメントのリファレンス
2017年8月20日時点で、[QUIC及びQUICに関わるドキュメント](https://datatracker.ietf.org/wg/quic/documents/)があるので概要だけ列挙してみた。

# QUIC について

- [QUIC: A UDP-Based Multiplexed and Secure Transport](https://tools.ietf.org/html/draft-ietf-quic-transport-05)
    - QUIC のコアを定義。接続確立、パケットフォーマット、多重化と信頼性について書かれている。暗号ハンドシェイク、損失検知について書かれている。
- [Using Transport Layer Security (TLS) to Secure QUIC](https://tools.ietf.org/html/draft-ietf-quic-tls-05)
    - TLSが安全なQUICにどう使われているかが書かれている。
- [Hypertext Transfer Protocol (HTTP) over QUIC](https://tools.ietf.org/html/draft-ietf-quic-http-05)
    - QUIC トランスポートプロトコルは、ストリーム多重化、フロー制御、低遅延接続の確立といったHTTP向けの転送に望ましい機能を持っている。QUIC上でHTTPセマンティクスの対応付けを記述している。QUICによって包摂されたHTTP/2についても書かれており、HTTP/2拡張がどうQUICへポートされているかも書いている。
- [QUIC Loss Detection and Congestion Control](https://tools.ietf.org/html/draft-ietf-quic-recovery-05)
    - QUICの損失検知と輻輳制御メカニズムについて書かれている
- [Manageability of the QUIC Transport Protocol](https://tools.ietf.org/html/draft-ietf-quic-manageability-00)
    - QUICの運用に関わる議論。ロードバランシングなど。
- [Applicability of the QUIC Transport Protocol](https://tools.ietf.org/html/draft-ietf-quic-applicability-00)
    - QUIC プロトコルの適用について。QUIC 上で構築されるアプリケーション向け。


# QUIC 関連
- [Hypertext Transfer Protocol (HTTP) over multicast QUIC](https://datatracker.ietf.org/doc/draft-pardue-quic-http-mcast/)
    - QUIC プロトコルの紹介と、QUICトランスポートが持つフレーミングとパケット層を使ったマルチキャストIP上のHTTPリソース転送の構成をHTTP/QUICにマッピングしている。QUICプロトコルの構文とセマンティクスとの互換性は、実践的に維持され、これが不可能な箇所は追加機能が指定される。
- [Specification of DNS over Dedicated QUIC Connections](https://tools.ietf.org/html/draft-huitema-quic-dnsoquic-02)
    - DNSの転送隠匿性を提供するためにQUICを使用。
- [Header Compression for HTTP/QUIC](https://tools.ietf.org/html/draft-bishop-quic-http-and-qpack-03)
    - HTTP/2はヘッダー圧縮用にHPACKを使っている。HPACKをQUIC用に改良
- [RTP over QUIC](https://tools.ietf.org/html/draft-rtpfolks-quic-rtp-over-quic-00)
    - Real-time Transport Protocol (RTP)をQUIC上に適用するための設計議論
- [QUIC Interdomain Troubleshooting](https://tools.ietf.org/html/draft-stephan-quic-interdomain-troubleshooting-00)
    - QUICがダメだった時のフォールバックなど。
- [Header Compression for HTTP over QUIC](https://tools.ietf.org/html/draft-krasic-quic-qcram-02)
    - QCRAMというHPACKとメカニズムのバリエーションを定義している。
- [One Way Latency Considerations for Multipath in QUIC](https://tools.ietf.org/html/draft-chan-quic-owl-01)
    - QUICでのマルチパストランスミッションを向上するためにOne Way Latency (OWL)の使用について記述している
初めてのajaxその２

#出ができたので入りも作る
前回の投稿でajaxの出力が出来たので、入力も作ってみることにしました。

お手本
http://webcake.no003.info/webdesign/jquery-ajax-php-post-sample.html

#実践
##JavaScript側実装
XXXXが実行されたらdataに設定した情報をpostパラメータとして
PHPに送ります。

```js
      function XXXX(){ 
        var data = {param : 'new_message'};
        $.ajax({
          url: 'http://192.168.XX.XX/XXX/XXX_php',　//PHPの処理のパス
          type:'POST',
          data: data,
          timeout:1000,
          success: function(data) {
                        console.log(data);
                     },
          error: function(data) {
                         console.log(data);
                     }
        });
      };
```
##PHP側実装
PHP側はPOSTパラメータとして受取り、文字列を連結してechoします。

```php
      function XXX_php()
        {
            if (isset($_POST['param']))
            {
                echo "OK param = " . $_POST['param'];
            }
            else
            {
                echo 'The parameter of "request" is not found.';
            }
        }
```

結果

```php
OK param = new_message      

```

あとはPHP内の処理をいじると色々できそう。
Webブラウザ負荷テスト時のタイムアウトエラー

Webブラウザ負荷テスト時のタイムアウトエラーについてです。

自サイトの負荷テストで複数のWebブラウザ(Google Chrome)を同時に動かし何秒でレスポンスが返ってくるかを計測しています。

複数のWebブラウザを1台のPCで動作させているのですが、タイムアウトエラーとなってしまう可能性が高い(全体のリクエストの37%程度)、また全体的にレスポンスが遅い(通常は1秒もかからないのに平均5秒程度)です。

■質問
何が原因でタイムアウトエラー・速度低下となってしまうのか、その原因を切り分け・特定したいのですが、何か良い方法・ツールはないでしょうか？
また以下の情報から原因予想が立ったら教えて頂けますでしょうか？
どんなささいな情報でも解決に向う可能性があるので、ご教授下さい。

■構成
PC→ルータ(市販の安い物)→ハブ(市販の安い物)→光モデム→マンションVDSL集合装置→インターネット(プロバイダ)→自サイトサーバ

■ポイント
上記構成のどこがボトルネックでタイムアウトになってしまうのか、原因の切り分けがしたいのです。

■動作情報
【1台のPCで10個のブラウザ×20アクセス】これが1セット
1セットが完了したら次のセットへ、というオペレーションを自動で行っています。

■数値情報
またアクセス中のリソースは以下の通りとなります。
CPU : 30～50%
ネットワーク受信 : 10Mbps～45Mbps
※MAX100Mbpsの回線なので単純にネットワークの回線速度が足りていないのでしょうか？

また、夜間にタイムアウト回数と速度低下が特に顕著になる傾向があります。
やはりマンションVDSL集合装置→インターネット(プロバイダ)あたりが原因なのでしょうか？

それともCPUを結構使っているので、単純にPCのCUPスペックが足りていないのでしょうか？

■ツール情報
Selenium WebDriverというテストツールを使用してWebブラウザ(Google Chrome)を自動操作しています。

■環境
Win8.1 Pro
Google Chrome
Selenium WebDriver