OmniAICreator/Qiita-1.07M huggingface dataset:
Firestore web hands-on 和訳+改変




英語版：
https://codelabs.developers.google.com/codelabs/firestore-web/

#Cloud Shellを使う場合
Cloud ShellはローカルのOSに依存しないクラウドのLinux環境が手に入ります．
`firebase` や `npm` などのインストールも既にされています．


##準備
ブラウザはChromeをおすすめします．



###プロジェクト作成
https://console.firebase.google.com/
上記にアクセスしてプロジェクトを作りましょう．

Databaseの中でCloud Firestore Betaを選択し，「**テストモード**」で始めます．
![Screenshot 2018-06-01 at 12.47.59 - Edited.png](https://qiita-image-store.s3.amazonaws.com/0/17440/104014bd-218d-1327-9453-34c6dcb18dc3.png)
![Screenshot 2018-06-01 at 12.48.37 - Edited.png](https://qiita-image-store.s3.amazonaws.com/0/17440/91678ef0-1579-de43-f8c4-9a1a79ee1dd3.png)


ここまで出来たら，下のボタンを押してCloud Shellに移行しましょう（以後の説明もこの内部にあります）．
[![Open in Cloud Shell](http://gstatic.com/cloudssh/images/open-btn.svg)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/Yatima-Kagurazaka/friendlyeats-web&tutorial=tutorial.md)


# Cloud Shellを使わない場合

英語版を見て頑張りましょう．
https://codelabs.developers.google.com/codelabs/firestore-web/

　


　

　

参考：
Cloud Shell関連情報

https://cloudplatform-jp.googleblog.com/2018/02/Cloud-Shell-Tutorials-learning-experiences-integrated-into-the-Cloud-Console.html
https://cloud.google.com/shell/docs/tutorials
Rails5の勉強 : assignsについて

#**注意:この記事はガチの初心者がとりあえずの解決法を書いてるだけです．参考にはなりませんからね**

毎回書いておくことにします笑
なにか「間違えたこと書かないでくれ」な点がありましたら教えていただけると幸いです...

#1. 今回のエラー
コントローラのテストについて勉強してたよ．
前回と同じくRuby on Rails 4.2 に基づいた本でやってるからこういったエラーが出るんだよね...
今回は変数@articlesを取り出そうとassignsメソッドを使おうとしたよ．

```ruby:myapp/test/controllers/articles_controller_test.rb
#前略
  test "index" do
    5.times { FactoryGirl.create(:article) }
    get :index
    assert_response :success
    assert_equal 5, assigns(:articles).count
  end
#後略
```
実行したコマンド
`bin/rake test TEST=test/controllers/articles_controller_test.rb`

返答

```
DEPRECATION WARNING: Using a dynamic :action segment in a route is deprecated and will be removed in Rails 6.0. (called from block in <main> at /Users/xxx/Rails/myapp/config/routes.rb:4)
Run options: --seed 43305

# Running:

E

Error:
ArticlesControllerTest#test_index:
NoMethodError: assigns has been extracted to a gem. To continue using it,
        add `gem 'rails-controller-testing'` to your Gemfile.
    test/controllers/articles_controller_test.rb:8:in `block in <class:ArticlesControllerTest>'


bin/rails test test/controllers/articles_controller_test.rb:4

E

Error:
(中略)

Finished in 0.406940s, 4.9147 runs/s, 2.4574 assertions/s.
2 runs, 1 assertions, 0 failures, 2 errors, 0 skips
```
もう一個エラーがあるのですがそれは別の件なのでここでは触れないよ．

#2. 原因
やっぱり非推奨になってるっぽい．

これを入れろって言われた．
`gem 'rails-controller-testing'`

#3.変更
てことで書き込み書き込み．

```Ruby:myapp/Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.0'

#中略

group :test do

 #中略,最後に追加

  gem 'rails-controller-testing'

end

#後略
```

#4.結果
これで無事に行った...はず．とりあえずエラーは消えた！
Ruby | pinspect メソッドの戻り値を変えると pry での表示も変わる


# Stringクラスのinspectを上書きした例

```rb
[12] pry(main)> class String
[12] pry(main)*   def inspect
[12] pry(main)*     :overwrite
[12] pry(main)*   end
[12] pry(main)* end
```

どんな文字列で終わっても `overwrite` が表示されるようになった。

```rb
[13] pry(main)> "a"
=> overwrite
[14] pry(main)> "b"
=> overwrite
[15] pry(main)> "c"
=> overwrite
```

# 追記

これは pry が表示に `p` を使っているからっぽい。
( `p` メソッドは `inspect` メソッドの結果を出力するメソッド )

## 素のRubyで試した例。

```rb
class String
  def inspect
    :overwrite
  end
end

p "a" # overwrite
pp "a" # overwrite
puts "a" # a
```


# 環境

- pry (0.11.3)
- ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]

# 参考

- [p (Kernel) - Rubyリファレンス](https://ref.xaio.jp/ruby/classes/kernel/p)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Visual Studio で、HTTP Error 500.19 - Internal Server Error

Visual Studio は、普段あまり使わないので、久しぶりに実行すると下図のようなエラーが発生しました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/93227/1ac20bfe-1fa1-2c66-b89c-95f7d168237f.png)

いつもは、Accessばかりで開発しているので、サーバー環境でのエラーに弱いのです。
原因は、Web.Config の環境設定でした。

こんな単純なエラーで恥ずかしい次第です。

詳しくは>>>
http://access-cloud.hatenablog.com/entry/visual-studio
pandasの基本操作を理解していない同士たちへ

## pandasの基本操作を理解していない同士たちへ

### pandasの`df[]`をそれっぽく書いてエラー連発していたやつちょっと出てこい!

pandasでデータの前処理[^1]をするときに、pandasではnumpyと同じようなスライスが使えるんだな。しかも、数字だけでなく、条件を指定することでいい感じにデータを抽出してくれるんだな。
よーし`df[hoge]`と書いて、
エラーを出して`hoge`をめっちゃ工夫してみるけどいっこうにエラーが鳴り止まないという経験をしたデータ分析初心者はいないだろうか?いや、いる。少なくともここに一人。

多分そいつは、
`df['hoge']`と`df.loc['hoge'](df.iloc[fuga])`の違いを理解していないはずだ。

いいか、**データフレームのスライスは列の指定**だ。データフレームのスライスでは行の指定はできない。


いい感じに[]を重ねれば、いずれはいい感じに行と列をして、臨んでいる新しいデータフレームを抽出できるはずだと思っているんじゃないか?
それは無理だ。いやできるかもしれないが、複雑な条件を指定することになると頭の中が訳わからなくなってしまうこと不可避で、作業効率が非常に悪くなってしまう。

今振り返れば、誤解の原因は、Seriesだとスライスで、行の指定になることだった。
そして、しっかりとpandasの挙動を理解せずに、雰囲気だけでpandasを利用していたことだ。

私のようなpandas素人独学者のために、
改めて、pandasの基本操作をまとめておきたい。

## pandasの基本操作

### **列**を指定しての抽出
```python
df['column名'] # 1列のみ指定
df[['column名1', 'column名2', ...]] # 複数列指定
```

### 行と列を指定しての抽出
```python
df.loc[:] # indexのみの指定
df.loc[:, ['column名', ...]] # 列を指定の抽出
df.loc[1:5, ['column名']] # indexの範囲を指定の抽出
```

### 行の抽出
```python
df.loc[df['bar'] == condition] # 指定列の中から条件を満たす行を抽出
```

ほとんど[この](https://qiita.com/hi34/items/43c366dea18b46faf49d#%E5%88%97%E3%81%AE%E6%8A%BD%E5%87%BA)記事から抜粋しただけなので、こちらを見てもらったほうがよい。


## 参考
[pandasの基本操作 - Qiita](https://qiita.com/hi34/items/43c366dea18b46faf49d#%E5%88%97%E3%81%AE%E6%8A%BD%E5%87%BA)
[Python pandas データ選択処理をちょっと詳しく <前編> - StatsFragments](http://sinhrks.hatenablog.com/entry/2014/11/12/233216)
[^1]: 基礎集計や可視化をしてデータの特徴を把握したり、欠損値や異常値を探しだして削除したり補完したりすること
snsサイトを集約

#簡単なHTMLコードでSNSを一ヵ所に集める。
　[このようなサイトができます](https://ttyn-home.azurewebsites.net/)
```html:index.html
﻿<html ...>
  <head>
    <title>your favorite title</title>
  </head>
  <body>
    <p>いろいろなサイトまとまってる部屋です</p>
<p><a href="your peing URL"><img src="peing.jpg"><a href="your github url"><img src="github.jpg"></p>
<p><a href="your twitter url"><img src="twitter.png"><a href="your facebook url"><img src="facebook.png"></p>
<p><a href="your amazon hosi-mono list"><img src="amazon.png"><a href="your instagram url"><img src="instagram.jpg"</p>
```

![ダウンロード (1).jpg](https://qiita-image-store.s3.amazonaws.com/0/256914/89ae45bf-69ee-0858-2908-266dd7912dc0.jpeg)
![ダウンロード (1).png](https://qiita-image-store.s3.amazonaws.com/0/256914/1005db37-9402-19cd-bc65-86c5cc9617d9.png)
![ダウンロード (2).jpg](https://qiita-image-store.s3.amazonaws.com/0/256914/74bb1193-22c4-a54e-3d81-0737bf1a0c17.jpeg)
![ダウンロード (2).png](https://qiita-image-store.s3.amazonaws.com/0/256914/f6b64be9-be4c-3dac-b21a-7c612a1858f2.png)
![ダウンロード.jpg](https://qiita-image-store.s3.amazonaws.com/0/256914/7b34c044-ed4d-0212-bbc5-abea06d1386d.jpeg)
![ダウンロード.png](https://qiita-image-store.s3.amazonaws.com/0/256914/06568577-d3d0-5e15-4c94-e4145454c93d.png)
画像はこちらをお使いください。
画像ファイルは同じフォルダに入れれば問題なく動作します。
一番問題なのはどこのサーバーを使うかという点。そこらへんはフリーサーバーやAzureつかってください、、、。
DockerでLaravel環境構築

### 参考
[DockerをMacにインストールする - @kurkuru]
(https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)
### 概要
初心者がMacにDockerを入れてDocker上でLaravelを動かすまで。参考サイトが非常に分かりやすいので基本的にはそのままで、それに加えて引っかかったとこ。
### 環境
macOS High Sierra
### Docker インストール
公式から Docker for Mac をインストール。
https://docs.docker.com/docker-for-mac/install/
### Laradock の導入
まずアプリのディレクトリ*app*を作り、その中にLaradockをclone。
また、envファイルもコピーしておく。

```bash
$ mkdir app
$ cd app
$ git clone https://github.com/LaraDock/laradock.git
$ cd laradock
$ cp env-example .env
```

これで準備は完了。Dockerコンテナをスタートする。

```bash
$ docker-compose up -d nginx mysql redis beanstalkd
```

できたら`docker-compose ps`で状態確認。
envに以下を追加。

```
DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd
```

ただ、まだ404とかしか出ないはず。

### Laravelのプロジェクトを作成

まずLaradockにログイン。

```bash
$ docker exec -it laradock_workspace_1 /bin/bash
```

*testapp*というプロジェクトを作成する。

```
# composer create-project laravel/laravel testapp
```

### ホストディレクトリのマウント

Dockerにホストのディレクトリをマウントする。
まずDockerをストップ。

```bash
$ docker-compose stop
```

docker-compose.ymlを書き換えて、testappディレクトリをマウントするようにする。
9こぐらいある${APP_CODE_PATH_HOST}を全て変更。

```
-        - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}
+        - ${APP_CODE_PATH_HOST}/testapp:${APP_CODE_PATH_CONTAINER}
```

これで再度起動。

```bash
$ docker-compose up -d nginx mysql redis beanstalkd
```

### 結果

![スクリーンショット 2018-06-03 13.37.00.png](https://qiita-image-store.s3.amazonaws.com/0/257749/35e79d38-8ff2-0825-6677-ed525591a671.png)

動くようになった。
Ruby on Rails Tutorial でSendGirdの設定で詰まった話

初めまして。
独学でRuby on Railsチュートリアルを進めていましたが、第11章のアカウントをアクティベートする際にSendGirdからメールが届かないくて困っていました。原因はherokuにSendGirdのアドオンを設定していなかったためでした。
~~※うろ覚えなので間違っていたらすみません。~~

開発環境：MacOS,AWS(Cloud9),heroku,Google Chrome

原因：herokuにSendGirdのアドオンを設定していなかった。
手順：heokuのアドオンの設定はクレジットカードの情報が必要です。クレジットカードの登録を終えてから`$ heroku addons:create sendgrid:starter`をCloud9のコマンドラインで実行。そのあとコンソールにherokuのURLが表示されるはずなのでリンクに飛ぶ。スマホの電話番号を入力するinput欄が表示されるはずなので`+81(先頭の0を除いた携帯番号)`を入力して送信。SMSに飛んできたメールにあるアクティベート番号をherokuのサイトで入力する。

そのあとRuby on Rails チュートリアル公式サイトのリスト 11.41から進めてください。

以上、拙い文章ですみませんでした。
go言語初心者のポインタ入門

##ポインタとは?
> ポインタ (英: pointer) とは、あるオブジェクトがなんらかの論理的位置情報でアクセスできるとき、それを参照する（指し示す）ものである。有名な例としては Pascal のポインタが挙げられる。

wikipedia参照
なるほど〜、だからポインタ変数からアドレスを取得できて、普通の変数からでも&を使うことでアドレス取得できるんだね！
しかもポインタ変数は*を使って、参照先のリテラルも取得できるんだ！


素敵ーー！！



超便利ーーーーーー！！



**ってなるかぼけーーーーーーーーーー！！**
とお怒りのみなさんのお気持ちすごくわかります。

ということで自分なりにまとめて見たいと思います。

```golang:pointer.go
package main

import (
	"fmt"
)

func main() {
	// int型のポインタ変数
	var p *int
	// 普通のint型変数
	var n int = 1000

	// &（アドレス演算子）を使って、nのアドレスを代入
	p = &n

	//ポインタ変数にはアドレスが格納されているので、アドレスがそのまま出力
	fmt.Println("pの値：", p)
	// *を使って、ポインタの中身(リテラル)を）取得することができる
	fmt.Println("pの中身：", *p)

	//当然int型のリテラルが表示される
	fmt.Println("nの値：", n)
	//&を使うことによって、普通のint型の変数でもアドレスを取得することができる
	fmt.Println("nのアドレス：", &n)
}
```
結果はこうなります。

```
pの値： 0xc420086008
pの中身： 1000
nの値： 1000
nのアドレス： 0xc420086008
```

<p>注意しなければいけないのは、変数定義で使う*とすでに定義済み変数に対して使う*は全く意味が違うんですねぇ。</p>

自分はこれがわからず、最初混乱していました。

変数定義で利用している*は、ポインタ変数と呼ばれる、メモリの割当先アドレスを格納するための特殊な変数を定義する際に利用されます。
では、定義済み変数で利用する*はなんなんでしょうか。
これは、「間接参照演算子」と呼ばれるもので、ポインタ変数自体に代入されている値は16真数のメモリのアドレスなのですが、そのアドレスが指し示すリテラルを取得することができます。
具体滝にはこの部分ですね。

```go
	//ポインタ変数にはアドレスが格納されているので、アドレスがそのまま出力
	fmt.Println("pの値：", p)
    //=> 「pの値： 0xc420086008」と出力する

	// *を使って、ポインタの中身(リテラル)を）取得することができる
	fmt.Println("pの中身：", *p)
    //=>「pの中身： 1000」と出力する
```


ではもう一つ、&というもう一つ演算子がありますが、これは「アドレス演算子」と呼ばれ、普通のint型の変数は当然int型の整数が値として代入されていますが、&を使うことによってその変数が格納されているメモリ上のアドレスを取得することができます。
具体的には下記

```go
	//当然int型のリテラルが表示される
	fmt.Println("nの値：", n)
    //=> 「nの値： 1000」と出力される

	//&を使うことによって、普通のint型の変数でもアドレスを取得することができる
	fmt.Println("nのアドレス：", &n)
    //=>「nのアドレス： 0xc420086008」と出力される
```

ということです。最初混乱するかもしれませんが、一つ一つ理解して、慣れてしまえばなんてことないと思うので、怖がらずにポインタ使いましょう！！
Slackの沢山のボタンを押してみた

チャンネルと　スレッドの違いが分からんとのことだったので
クリックできるメニュー、クリックできるボタンは　たくさんクリックした。

http://warabenture.com/grayscale/blog/201806slack/tour.html

かいつまんでみた。

http://warabenture.com/grayscale/blog/201806slack/how-to-use.html
オートレイアウトを設定しているのにレイアウトが崩れる(TableView、カスタムセル)

よくこのミスを犯して少し考えるので忘備録としてまとめておきます。

## したいこと

Xibファイルとカスタムセルを使って画像・ラベル等を表示させる
*レイアウトイメージ
<img width="309" alt="スクリーンショット 2018-06-03 12.59.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/261386/efd5abd6-650a-d84f-44a3-20af2c9a3db0.png">


## 問題
オートレイアウトを設定していてもレイアウトが崩れてしまう
*実際に表示された結果
<img width="373" alt="スクリーンショット 2018-06-03 12.56.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/261386/132e4b30-7bcc-9f09-fafd-cec95cdce7fb.png">


## 原因
今回カスタムセルのクラス名を"CustomCell"としたが
Xibファイルを開いてAttributes inspectorのclassの値を確認すると、これがUITableViewCellのクラスの値だけでなくContentViewのクラスにも設定されていた。
なのでContentViewのクラスの値を空にして再度runさせたところ問題なく表示された。
JQueryが動かない（バージョン間違えてただけ）

初投稿です。

jQueryを学び始めて２日目。
テキストを見ながらポチポチいじったり色々な先輩方のコードをコピペしていたところ、突如jQueryが動作しなくなりました。

書き方や、書く場所、順番など何度確認しても間違いはないはず……。
困り果てていたものの、よくよく見るとある箇所が原因だと判明。

    <script src="jquery-3.2.1.min.js"></script>

お前かー！？

はい、私は昨日jQueryを初めて使い始めたので、本来はjquery-3.3.1.min.jsのはずなんですね。
先輩の記述をコピペして使っていたがゆえに起きたエラーでした。

該当箇所を修正して無事勉強を再開できました。

あまりにも初歩的でスミマセン……。

でも今後同じように学んでいく初心者中の初心者の方の助けになれば幸いです。
一緒に頑張りましょう！
薄い画像をハッキリさせる

# 概要

薄い画像をハッキリさせる必要があったので、いろいろ調べた。
まずはビフォーアフター

## ビフォー

![predict_raw_03.jpg](https://qiita-image-store.s3.amazonaws.com/0/227399/3af36b65-31f3-2444-0034-7c7c1ccc0a91.jpeg)

## アフター

![predict_03.jpg](https://qiita-image-store.s3.amazonaws.com/0/227399/3a8c2a5b-176f-deb8-f399-908b66202c16.jpeg)

# 動作環境

- **Ubuntu** 16.04.4 LTS
- **Python** 3.5.2
- **chainer** 4.0.0
- **numpy** 1.14.2
- **cupy** 4.0.0
- **opencv-python** 3.4.0.12 


# ソースコード

```python3
def cleary(img, clip_limit=3, grid=(8, 8), thresh=225):
    clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=grid)
    dst = clahe.apply(img)
    th = dst.copy()
    th[dst > thresh] = 255
    return th
```

## CLAHEによるヒストグラム調整

CLAHE(Contrast Limited Adaptive Histogram Equalization)を利用することでいい感じにコントラストを調整することができる。

```python3
clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=grid)
dst = clahe.apply(img)
```

[CLAHE解説](http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_histograms/py_histogram_equalization/py_histogram_equalization.html#clahe-contrast-limited-adaptive-histogram-equalization)

## ノイズ除去

numpyのしきい値処理を実行することで白をよりくっきり強調できる。

```python3
th = dst.copy()
th[dst > thresh] = 255
```

以上。
VIEWをDRYにするhelper機能

#なるべくDRYに
モデルでスコープを使うなどして、なるべくコントローラーをDRYにしてきたので、view側もその流れを汲んでいきたいと思い、調べました。重複した書き方が減るのでかなり綺麗に書けました。

#画像ファイルがあるかないかで、表示する画像を分けたい。

自分が投稿した本の画像を表示する機能を作っていましたが、もし画像を投稿をしなかった場合、noimageという画像を表示したく、if文をviewに書いていました。
一枚だけならいいんですが、要件的に同じ機能を一つのページに４つ作る必要がありました。

![m_e_others_501.png](https://qiita-image-store.s3.amazonaws.com/0/147990/60013564-24e2-05db-68c5-c58604c50ac7.png)
こんなやつですね。

初期コード

```show.html.erb

<% if @content_first.blank? %>
 <%= image_tag 'no_image.png' %>
<% else %>
 <%= image_tag @content_first.to_s %>
<% end %>

<% if @content_second.blank? %>
 <%= image_tag 'no_image.png' %>
<% else %>
 <%= image_tag @content_second.to_s %>
<% end %>

<% if @content_third.blank? %>
 <%= image_tag 'no_image.png' %>
<% else %>
 <%= image_tag @content_third.to_s %>
<% end %>

<% if @content_fourth.blank? %>
 <%= image_tag 'no_image.png' %>
<% else %>
 <%= image_tag @content_fourth.to_s %>
<% end %>

```

同じような文章が羅列し、かなり汚い。。。。


#helperを使うと。。。。

helperのルートはapp/helper内にファイルとしてあります。

xxxxxx_helper.rbはxxxxxのリソース内で利用可能なhelper

application_helper.rbはそのrailsプロジェクト内どこでも利用可能なものです。

今回は本の画像のところでのみ利用したいので、books_helper.rbで利用します。


```books_helper.rb

module BooksHelper
  def has_content?(content)
     if content.blank?
        image_tag 'no_image.png'
     else
        image_tag content
     end
  end
end

```

このようなコードになります。contentを引数にし、ここにview側にある一枚一枚のcontentを入れていき、
blankかどうかを判定します。ここはviewではないので<% ~ %>は必要ないということに注意！



改良版コード

```show.html.erb
<%= has_content?(@content_first.to_s) %>
<%= has_content?(@content_second.to_s) %>
<%= has_content?(@content_third.to_s) %>
<%= has_content?(@content_fourth.to_s) %>
```

ここは<%= ~　 %>が必要になります。
これで同じコードを何回も書かずスッキリした見た目になりました。
Android StudioでOpenCV 2をCmakeしたときのエラー対策

##環境
- Windows 7
- AndroidStudio 3.0
- OpenCV for Android 2.4.11

##実行（エラーが出た）
以下の情報を参考にCmakeをしてみた。
[CMakeでAndroid向けのOpenCVを利用する](https://qiita.com/ara_tack/items/d98bce625cb302e3714a)
ちなみに↑の中のopencv_java3.soはopencv_java.soにする必要あり。

その状態でAndroid StudioのBuildを実行すると以下のエラーが出た。
Error:error: '../../../../src/main/jniLibs/x86_64/libopencv_java.so', needed by '../../../../build/intermediates/cmake/debug/obj/x86_64/libnative-lib.so', missing and no known rule to make it

原因はOpenCV for Android 2.4.11に存在していないABIをビルドしようとしていたため。

Android StudioでビルドするABIは以下
armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips, mips64

OpenCV for Android 2.4.11に入っているABIは以下
armeabi, armeabi-v7a, x86, mips

##解決方法
build.gradleの中のdefaultConfigの中に以下のようにabiFiltersを追加するとOKだった。
![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/c929d9ef-42fe-77c1-1dd7-4599d110fef1.jpeg)


##用語解説
ABI：端末のCPUごとに必要なもの。Javaは仮想マシン環境下なので意識する必要はないが、OpenCVなどのCやC++で作成されたプログラムは実環境下で使用することになるので、端末ごとにデータのやり取りを定義する必要がある。
https://developer.android.com/ndk/guides/abis
https://backport.net/blog/2017/06/23/android_abi/
laravel写経ツアー　あなたの脳の奥底に

laravelを学習し初めて1週間程になるんですが、知らない用語だらけでパニックになっています。

基本的には何も分かっていないのですが、よく使うコマンドとか、用語とかをひたすら写経すれば何が分かっていないのかがわかるよね？次見たとき親しみやすいよね？知らないと気持ち悪いから勉強しちゃうよね？っ
ていう初心者向けモチベーションアップツアーを用意しました。

#Tour of Monk (10分）
意味不明でも知ってても全部写経するツアーです。
ツアーを終えると、あなたは自分がどこに関する知識が疎いのかがわかり、モヤモヤとした気分になります。


VirtualBox
Vagrant
vagrantup
vagrantbox
Homestead
Homestead.yaml
Composer

laravel new laravelapp

composer create-project laravel/laravel --prefer-dist

php artisan serve

Route::get('/',function(){
   return view('monk');
});

Route::get('hello/{msg}',function ($msg){});

php artisan make:controller MonkController

namespace App\Http\Controllers;
use Illuminate\Http\Request;

Route::get('monk','MonkController@index');

php artisan make:middleware MonkMiddleware

Route::get('monk','MonkController@index')
   ->middleware(MonkMiddleware::class);

グローバルミドルウェア
Kernel.php

$validate_rule =[
    'name'=> 'required',
    'mail'=> 'email',
];

{{ csrf_field()}}


database.php
.env

php artisan make:migration create_monk_table
composer dump-autoload

public function up()
{
    Schema::create('monk',function (Blueprint $table){
          $table->increments('id');
          $table->string('name');
          $table->integer('age');
    });
}

php artisan migrate

php artisan make:seeder MonkTableSeeder

php artisan db:seed

Eloquent(ORM)

php artisan make:model Monk

$items = Monk::all();

hasOne結合
hasMany結合
belongsTo結合

Restful

php artisan make:auth

socialite

##お疲れ様でした
僕はこの記事を書きながら殆どの用語について、よく分かっていないことを再確認することが出来ました。
このモヤモヤから解消される為には一つ一つの呪文を理解するしかありません。

勉強してきますね❤️

/*一瞬詰まったとこ。個人メモ
MAC
'unix_socket' => 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
*/
全部無料で、自動ツイートするbotを作る

## やったこと

自動でつぶやく[Twitterのbot](https://twitter.com/urawaredsword)を作成した。

- 定型文の中からランダムに文章を選び、ツイートする
- 一定の時間ごとに自動でツイートする
- 全部無料（クレジットカードの登録も不要）

[ソースコード（GitHub）](https://github.com/miltood/TweetBot)

## 環境

- Windowsで開発
- Python3
- Heroku上でWebサービスを起動

## 作業内容

### Herokuの準備

https://signup.heroku.com/login
上記にアクセスしてアカウントを作成（Sign up）する。
メール認証後、アカウントが作成される。

https://devcenter.heroku.com/articles/heroku-cli
上記にアクセスして The Heroku CLIをダウンロードしてインストールする。
これによって端末からコマンドラインでHerokuを操作できるようになる。

### Twitterの準備

twitterアカウントがない場合は作成しておく。
https://apps.twitter.com/
上記にアクセスして、Twitter app を作成する。
必要情報を入力して登録すると、以下の情報が表示される。
（これらの情報を後でHerokuに登録する。）

- Consumer Key (API Key)
- Consumer Secret (API Secret)
- Owner
- Owner ID

### プログラムの作成

HerokuでPythonを動かすために、以下のファイルを作成する。

- clock.py
- index.py
- words.py
- Procfile
- requirements.txt
- runtime.txt

#### clock.py

BlockingScheduler を使用し、定期的に実行するための記述を行う。minutes=60 という記述箇所が実行間隔（単位は分）。以下の例の場合は、1時間に1回となる。任意の分に変更すれば良い。

```clock.py
from apscheduler.schedulers.blocking import BlockingScheduler
import words

twische = BlockingScheduler()

@twische.scheduled_job('interval',minutes=60)
def timed_job():
    words.puttweet()

if __name__ == "__main__":
    twische.start()
```

#### index.py

ダミーファイルであって記述内容に特別な意味はない。

#### words.py

TwitterのAPIを呼び出す処理を記述する。以下の例の場合は、文章1から文章5がランダムで選択される。文章は好きな数だけ追加することが可能。
["CONSUMER_KEY"]等キーの値は、ベタ打ちするとセキュリティ上の問題があるので、ここではHerokuの設定値を参照するようにしている。

```words.py
#coding; utf-8

from requests_oauthlib import OAuth1Session
import json
import os
import random
import datetime

def puttweet():

	twitter = OAuth1Session(os.environ["CONSUMER_KEY"], os.environ["CONSUMER_SECRET"], os.environ["ACCESS_TOKEN_KEY"], os.environ["ACCESS_TOKEN_SECRET"])

	tweets = ["文章1",\
	"文章2",\
	"文章3",\
	"文章4",\
	"文章5"]
	randomtweet = tweets[random.randrange(len(tweets))]
	params = {"status": randomtweet} 
	req = twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params)
```

#### Procfile

```Procfile
web: python index.py
clock: python clock.py
```

#### requirements.txt

```requirements.txt
web: python index.py
clock: python clock.py
```

#### runtime.txt

```runtime.txt
python-3.6.5
```

### デプロイ

コマンドラインからHerokuにキーの値を設定する。XXXのところを、上記Twitterの準備の手順で入手したキーの値にする。

```
heroku config:set CONSUMER_KEY="XXX"
heroku config:set CONSUMER_SECRET="XXX"
heroku config:set ACCESS_TOKEN_KEY="XXX"
heroku config:set ACCESS_TOKEN_SECRET="XXX"
```
Herokuにデプロイする。
以下で行う内容は、Heroku上にプロセスを作成、Gitでファイルを登録、更新、Heroku上に上程。

```
heroku create
git add .
git commit -m "Initial commitment."
git push heroku master
```

deploy...done. と表示されれば成功となる。エラーが出た場合は、その内容を読んで修正する。
デプロイできたのに定期ツイートがうまくいかない場合は、コマンドラインからherokuのログを参照して、そこにPythonの実行時エラーが出ていないか確認するとよい。

```
heroku logs
```

なお、words.pyに表示する文章のバリエーションを追加するときは、git addからgit pushを繰り返せばよい。

```
git add .
git commit -m "Added words."
git push heroku master
```

### 参考

以下を参考にさせていただきました。ありがとうございました。

[Pythonで作ったTwitterのbotをHerokuで動かす](http://hwhw.hatenablog.com/entry/2017/06/04/234539)
[twitter定期botをHerokuにデプロイ](https://qiita.com/nkg/items/0379a0a9c45af58640f5)
Ruby — ミミックメソッドとは (メタプログラミングRuby)

ミミックメソッドとは、他のなにかに擬態したメソッドのこと。

人間の眼に、あたかも言語要素のように見えたりするようなやつ。
ただこれは呼び方の問題であって、本質的にはただのメソッドと何ら変わりがない。

# 具体例

たとえばクラスにアクセサを定義する時。
`attr_accessor` を呼ぶ方法があるが、実はこれは言語要素ではなくてメソッドだ。


```rb
class A
  attr_accessor :some_method
end
```

単にクラス定義のコンテキストのなかで `attr_accessor` メソッドが実行されているだけ。
なので `attr_accessor` は書き換えることも出来る。

```rb
class A
  def self.attr_accessor(name)
    puts name
  end

  attr_accessor :some_method
end

# アクセサは定義されない
A.some_method # undefined method `some_method' for A:Class (NoMethodError)
```

## 実行結果

`attr_accessor` でアクセサが定義されていないことが分かる。

```
some_method

undefined method `some_method' for A:Class (NoMethodError)
```

# 参考

- メタプログラミングRuby第二版

# 環境

- ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
MacでコマンドラインからLaTeXコンパイル

<h3>目的</h3>
.texファイルを書いて、コマンド一発でPDFを作成すること。
#### 環境
macOS High Sierra
<h3>インストール</h3>
事前にghostscriptインストール。
<pre>
$ brew install ghostscript
</pre>
全部入ってるのがMacTex、少しなのがBasicTex。BasicTexをHomebrewでインストール。
ついでにドキュメントサイズの設定(A4)と日本語向けのパッケージインストール。
<pre>
$ brew cask install basictex
$ sudo tlmgr update --self --all
$ sudo tlmgr paper a4
$ sudo tlmgr install collection-langjapanese
</pre>
<h3>パッケージ</h3>
listingなどパッケージが入ってないときは適宜こんな感じで
<pre>
$ tlmgr search --global hoge
$ sudo tlmgr install hoge
</pre>
<h3>日本語フォント</h3>
Macのヒラギノフォント設定すると綺麗になる？らしい
<pre>
$ sudo cjk-gs-integrate --link-texmf --force
$ sudo mktexlsr
$ sudo kanji-config-updmap-sys hiragino-elcapitan-pron
</pre>
<h3>コンパイル時のエラー</h3>
例としてこんなエラーが出た時
<pre>
grep: pcrr7t.log: No such file or directory
mktextfm: `mf-nowin -progname=mf \mode:=ljfour; mag:=1; nonstopmode; input pcrr7t' failed to make pcrr7t.tfm.
kpathsea: Appending font creation commands to missfont.log.

! Font OT1/pcr/m/n/8=pcrr7t at 8.0pt not loadable: Metric (TFM) file not found.
</pre>
pcrr7t.tfmが無いってことで、それが入ったパッケージを探すコマンド↓
<pre>
$ tlmgr search --file pcrr7t.tfm --global
</pre>
結果
<pre>
tlmgr: package repository http://ftp.yz.yamagata-u.ac.jp/pub/CTAN/systems/texlive/tlnet (not verified: gpg unavailable)
courier:
	texmf-dist/fonts/tfm/adobe/courier/pcrr7t.tfm
</pre>
ということでcourierをインストール
<pre>
$ sudo tlmgr install courier
</pre>
したらコンパイルできた。
<h3>Makefile</h3>
こんな感じで書いた。
<pre class="prettyprint">
all:
  platex main.tex
  platex main.tex
  dvipdfmx main
</pre>
何回かplatexしないとrefが??になる。
<h3>参考</h3>
<a href="https://texwiki.texjp.org/?TeX%20Live%2FMac#e3decd1a">TeX Live/Mac - TEX Wiki</a>
<a href="http://El Capitan / SierraでTeX環境をゼロから構築する方法"></a>
<a href="https://tex.stackexchange.com/questions/75166/error-in-tex-live-font-not-loadable-metric-tfm-file-not-found">Error in TeX Live – Font … not loadable: Metric (TFM) file not found - StackExchange</a>
サイト側でChromeのautocompleteを無効にする

#経緯
オートコンプリートを発動させたくないフォームで、勝手にChromeがクレジットカード入力欄と勘違いしてクレジットカードのオートコンプリートを働かせ、さらに勝手にSSLじゃないから安全じゃないよってウインドウ出してきた。やめてほしかったので無効にしようとした。
![かってに.PNG](https://qiita-image-store.s3.amazonaws.com/0/67919/0eb71433-b1ae-dff8-88e0-1d7c407cde8f.png)
ただ、[この記事](https://qiita.com/saitoxu/items/f565172da3028c1544f7)にかいてあるように一筋縄じゃいかず、ダミーインプットもクレジットカード入力欄には意味がなかった。
しかたなくSSLに対応したが今度はクレジットカード選択プルダウンが出てきてしまって邪魔だったので、どうにか消せないかといろいろやってみて出来たので書く。

#方法
オートコンプリートしてほしくないinputタグに以下のようにautocomplete="address-line3"の属性をつける。
`<input autocomplete="address-line3">`
**※Chromeでしか確認してないのでChrome以外のブラウザでの動作は保証しない**

#説明
まず前提としてautocomplete="off"はほとんどのブラウザで無視される。「自動入力あったらいちいち思い出さなくていいから複雑なパスワードが設定できてセキュリティ面でよろしい」ということらしい。~~それはそうかもしれないがサイト側の設定を無視する必要なくない？~~

ぐぐったらautocomplete="nope"みたいに無効な値を設定する方法がたくさん出てきた。autocompleteはなんの項目として自動入力させるかを設定できて、無効な値を設定するとオートコンプリートが発動しないということらしい。だが、今のChromeでは無効な値を入れたautocompleteは無視されてるのでこれは駄目。

他に、パスワードの自動入力を無効にする方法として、見えないinputを作ってautocomplete="password"とすると、Chromeがどこにパスワードを入れていいか判らずオートコンプリートが発動しなくなるというのがあるらしい。inputを見えなくする方法としてdisableを設定するとオートコンプリート検知に無視させるのでstyle属性で透明にするとか書いてあって、いたちごっこ感がある。
これは良さそうと思ったが、クレジットカードの入力欄に関しては複数あっても全部に反応するらしく、複数のautocomplete="cc-number"があっても全部にオートコンプリートが反応してしまう。なのでこれも駄目。

autocompleteに無効な値ではなく、ほぼ使わない項目を設定すればオートコンプリートが発動しても入力はされないんじゃないかと考えた。[autocompleteに指定できる値の一覧](http://ryan.mcgeary.org/files/autocomplete-types.pdf)とにらめっこして、いろんな値を入れてみた。emailなどのよく使う項目は、
`<input value="0" autocomplete="email">`
のように初期値が設定されていればオートコンプリートはされないが、初期値を消して空になると選択プルダウンが出てしまう。
`<input  type="number" autocomplete="email">`
のように入力を限定すると値は入力されないし、選択プルダウンで選んでも入力はされなくなるが、そもそもプルダウン自体を出したくない。

よく使わなさそうなfaxとかhonorific-prefixとかは、そもそもChromeが対応してなくて無効な値と判定されてしまう。なので、**「対応はされているが、値があまり入力されない項目」**を一覧から探す地道な作業を行った。

その結果**address-line3は「対応はされているが、Chromeではオートコンプリートされる値を持たない項目」**だとわかった。
address-line1とaddress-line2では番地が入力されるが、なぜかaddress-line3ではなにも入力されないしプルダウンも出てこない。Chromeの自動入力設定ですべての項目の設定を行ったがオートコンプリートされなかった。

これが国や地域による住所表記の差なのか、自分が入力したことがなかっただけなのか、Chromeの対応が遅れてるだけなのかは判らない。これを見つけるために俺が休日を1日溶かしたことだけが判っている。
#最後に
多分この方法もChromeがきちんとautocompleteの値に対応していけば修正されると思うので、その場しのぎにしかならないと思う。
自動化に幸あれ。
ionic3でbuild時にCannot read property 'nodeValue' of undefinedと出てbuildできなくなった件

Info.plistを変更した際に、空白行を追加してしまっていたのが問題のよう。

AppAvailability cordova pluginを追加したが、うまく動作しなかった時に、Info.plistに追加が必要と書かれていたので、いじっていた際に空白行を追加してしまった模様。

削除することでbuild成功。


AppAvailabilityについては、

https://stackoverflow.com/questions/42125386/cordova-plugin-appavailability-is-not-detecting-facebook-app

を参照しました。
春の目覚め作戦 SpringMVC その４

##強引にBootstrapのModalダイアログを組み込みました
###Javaちゃんでやってきた人間には戸惑うばかりのフロントサイド(^_^;)

1.初期画面 ボタン類をModalダイアログに逃したんでスッキリ
![modal_初期画面.png](https://qiita-image-store.s3.amazonaws.com/0/28873/ea668cd1-5e5f-c357-233b-5e30aceecce0.png)

2-1.登録前画面 Modalダイアログで登録します
![modal_登録前.png](https://qiita-image-store.s3.amazonaws.com/0/28873/aae205c4-5847-dfb0-da22-51b394f176fe.png)

2-2.登録後画面
![modal_登録後.png](https://qiita-image-store.s3.amazonaws.com/0/28873/19b8c0cc-8137-f443-dd15-17625c579621.png)

3-1.完了前画面
![modal_完了押下前.png](https://qiita-image-store.s3.amazonaws.com/0/28873/7f3545b1-fef6-a420-2b46-f5657ec38a8f.png)

3-2.完了後画面
![modal_完了画面押下後.png](https://qiita-image-store.s3.amazonaws.com/0/28873/0dd87012-1015-a8a6-dfd2-b97964647431.png)

4.削除前画面
![modal_削除前.png](https://qiita-image-store.s3.amazonaws.com/0/28873/3e34b9c1-b637-a8f3-056f-560d65fd1bef.png)

5-1.検索前画面
![modal_検索前.png](https://qiita-image-store.s3.amazonaws.com/0/28873/8bf8a4b4-8269-a396-fd9e-a6b98b005be3.png)

5-2.検索後画面
![modal_検索後.png](https://qiita-image-store.s3.amazonaws.com/0/28873/505641ba-d9f6-1579-f8a9-c72501db99b8.png)

ざっとこんな感じですわ。

一応動作確認用のサイトです。
http://ikefukurou.com/TodoApp/

ありがとうございましたm(_ _)m
LightTPD,FastCGIに関するメモ

#環境
- macOS High Sierra ver 10.13.4
- Homebrew 1.6.6

#インストール手順
1. `brew install lighttpd`
2. `brew install fcgi`

#ディレクトリ関連
- ホームディレクトリ: `/usr/local/etc/lighttpd/`
- ソケットファイル: `/tmp/fcgi.socket`

#config設定


#コマンドメモ
- 起動:  `lighttpd -f /usr/local/etc/lighttpd/lighttpd.conf`
コマンドメモ【Mac】

#汎用
- 任意の単語が含まれるパスを探索
`mdfind <word>`
<br/>

- 任意の単語が含まれるプロセスの確認
`ps aux | grep <word>`
<br/>

- 


#ネットワーク関連
- ポート番号を指定したプロセスの確認  
`lsof -I :<port>`
<br/>

-
非機能要求グレード2018を愛でる

非機能要求グレードというドキュメントがある。元々はIPAによって2010年に公開されたもので、ざっくり言うとステークスホルダと非機能要件を詰めるために使えるツールで、2018年版が出たので改めて読んでみたが、なかなか便利なので紹介する。

https://www.ipa.go.jp/sec/softwareengineering/std/ent03-b.html

このドキュメントの主役は「活用シート」と呼ばれるもので、下記に示すように様々な非機能要件を５段階で示している。

<img width="1311" alt="nfr1.png" src="https://qiita-image-store.s3.amazonaws.com/0/33389/86a5acc9-9f5b-72cd-0af6-e13e64bceac3.png">

稼働率は99%（年に3.5日程度）か99.99%（年に1時間程度）かといった有名な指標のほか、忘れられがちな時刻同期もサーバだけ実施するか、系全体にするか、床荷重や電源までカバーされている。といっても１〜２時間もあれば目を通せる分量なので、経験の浅いエンジニアは、勘所を掴むために目を通してもよいだろう。

また、単に網羅性が高いと言うだけでない。分類もしっくりくる。プロジェクトのメンバーの分担を考える際に、そのまま使えそうなぐらい分離が良い。

- 可用性
- 性能・拡張性
- 運用・保守性
- 移行性
- セキュリティ
- システム環境・エコロジー

このドキュメントのおまけに付いてる「樹形図」は、この分類に沿って見出しをまとめたもので、６ページに収まるので手元においてプロジェクトの管理漏れをするのに適している。個人的には、この樹形図を最もよく使ってる。

<img width="949" alt="nfr2.png" src="https://qiita-image-store.s3.amazonaws.com/0/33389/880a93f1-48a6-284e-c390-1af591cb44cd.png">

全ドキュメントは英語・中国語も用意されているので海外のメンバーとのコミュニケーションにも使える。
ES2015初見殺し

ES2015の文法で、ググれないものたちを解説します。
const, import等、あるいは新規APIはググればわかるます。また、アロー関数など明らかに見た目が異質なので、知らなければそこで気づいて調べることができます。

しかし、そうでないものは意味を取り違えたまま先に進んでしまう可能性があります。

特にcurly bracket `{}` は、意味が多岐に渡りどれもよく使われるので注意が必要です。
(ブロックなのかオブジェクトリテラルなのか分割代入なのかJSXなのか...)。

## アロー関数式(Arrow function expression)

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/arrow_functions

通称「アロー関数」だが、関数ではない。

```js
const f = (arg) => { return "Hello " + arg }
f("World")   // 'Hello World'
```
この例の場合、以下のような省略が可能。

```js
const f = arg => "Hello " + arg 
```

### es5

```js
var f = function(arg) { return "Hello " + arg }
```

## 分割代入 (Destructuring assignment) 

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment



オブジェクトからプロパティをばらして代入します。
オブジェクトが持つ多くのプロパティから、必要なものだけを変数に代入できます。



``` js
const props = {
  name: '山田',
  age: 30,
  address: '大阪府',
}
const { name, address } = props
```

関数の仮引数でよく使用されます。
引数のオブジェクトがたくさんのプロパティを持っていて、そこから必要なプロパティだけを選択的に取得したい場合によく使います。


``` js
// 分配代入を使った仮引数
const f = ({ name, address } = {
  return name + ',' + address
}

const props = {
  name: '山田',
  address: '大阪府',
  tel: '012-345-6789',
  // その他たくさんのプロパティ...
}
f(props) //=> 山田,大阪府
```

### Reactでの使用例

import文で使用される。

``` js
import { Component } from 'react';

class MyComponent extends Component {
```
は、以下と等価である。

``` js
import React from 'react';

class MyComponent extends React.Component {
```


関数の仮引数でもよく使用されます。
（propsなどから、その関数で必要なものだけを選択的に引数に取りたい場合）

``` js
const render = ({ name }) => {
  return <h1>Hello {name}!</h1>
}
```

これは以下のコードと等価である。

``` js
const render = (props) => {
  return <h1>Hello {props.name}!</h1>
}
```


## スプレッド構文 (Spread syntax)

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax


Reduxではオブジェクトを直接書き換えず、オブジェクトのコピーを作ることが多いので、もとのオブジェクトから一部を変更した新しいオブジェクトを作る用途によく使います。

``` js
const person = { name: '田中', age: 25 }
const personWithAddr = {
  ...person,
  address: '東京'
}
console.log(personWithAddr) //=> {name: "田中", age: 25, address: "東京"}

```

オブジェクトのプロパティや配列の要素を展開する。


## プロパティ省略記法(Shorthand property names)

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer

プロパティ名に変数名をそのまま使うことができます。
複数の変数をまとめてひとつのオブジェクトを構築するときによく使います。

```js
const name = '田中'
const age = 25

const person = {
  name,
  age
}

console.log(person)  //=> { name: '田中', age: 25 }

```

省略記法を使わずに書くと以下のようになる。

``` js
const person = {
  name: name,
  age: age
}
```

省略記法と省略しないプロパティは混在してもよい。

``` js
const person2 = {
  name,
  age,
  address: '京都'
}
console.log(person)  //=> { name: '田中', age: 25, address: '京都' }
```
テクスチャマッピング

# 概要
テクスチャマッピングの記事は多くあるけど
以下みたいな形でテクスチャ座標がないモデルに対してのレンダリング方法について書いてる記事が見当たらなかったので書こうと思います。
![textureMapping.png](https://qiita-image-store.s3.amazonaws.com/0/63344/0c5e8c4d-f504-2b17-a59e-8cd2685ce000.png)

考えたら結構単純な実装ですんだためここでは具体的なテクスチャマッピングの手法は書きません。

- 他のサイトでたくさん解説記事あるので

きれいなテクスチャマッピングの方法についても書きません。

- 詳しく知らないので書けません。
- テクスチャマッピングを計算する論文読まないといけない？良いやり方あれば教えてください。

上図のBunnyを上から見たらこんな感じのマッピング結果になってます。
![textureMapping2.png](https://qiita-image-store.s3.amazonaws.com/0/63344/b31a8608-734b-d71c-e0e4-2e97ab4ba4e0.png)

こういったレンダリングどうやってるんだろーと軽く思った人向けの記事になります。

# やること

- テクスチャの用意

まずはレンダリングするのに必要なテクスチャを用意する必要があります。
画像としてあらかじめ用意してもいいし、簡単なのでコードで書いてもよいです。
![uv.png](https://qiita-image-store.s3.amazonaws.com/0/63344/dfba892d-e2e0-31d0-e074-291448806849.png)
コードの場合は以下のような感じになります。

`code`

```c#
        /// <summary>
        /// UVテクスチャの生成
        /// </summary>
        /// <param name="size">サイズ</param>
        /// <returns>テクスチャ</returns>
        public float[,,] CreateUVTexture(int size)
        {
            float[,,] rgba = new float[size, size, 4];
            float halfSize = size / 2;

            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    if (halfSize < i && halfSize < j ||
                        halfSize > i && halfSize > j)
                    {
                        rgba[i, j, 0] = 255;
                        rgba[i, j, 1] = 255;
                        rgba[i, j, 2] = 255;
                        rgba[i, j, 3] = 255;
                    }
                    else
                    {
                        rgba[i, j, 0] = 0;
                        rgba[i, j, 1] = 0;
                        rgba[i, j, 2] = 0;
                        rgba[i, j, 3] = 255;
                    }
                }
            }

            return rgba;
        }
```

`code`

- サンプラの設定

サンプラのWrapパラメータはRepeatにしておきます。

`code`

```c#
            GL.BindTexture(TextureTarget.Texture2D, textureId);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, Convert.ToInt32(TextureWrapMode.Repeat));
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, Convert.ToInt32(TextureWrapMode.Repeat));
            GL.BindTexture(TextureTarget.Texture2D, 0);
```

`code`

- テクスチャ座標の設定

きれいにテクスチャマッピングしたい場合はここが一番の肝になる部分ですが分からないので
今回(概要に乗せた図)は頂点座標のxyの座標に10を掛けた値をテクスチャ座標としています。
(Bunnyを-0.5から0.5の大きさに正規化しているため)
git commitでError detected while processing function dein#begin[1]...のエラー文が出る件

# git commitするたびにエラー文が出るようになった

git commitすると以下のエラー文がでるようになってしまった。このままENTERを押すとcommitできるのだがいちいち出るのが中々面倒。
また、普通にvimと打ってvimを起動した時にはエラーが出ないので問題ないかと先送りにしていた。

```
▶git commit
hint: Waiting for your editor to close the file... Error detected while processing function dein#begin[1]..dein#util#_begin[6]..dein#util#_error[1]..<SNR>4_msg2list:
line    1:
E121: Undefined variable: v:t_list
E15: Invalid expression: type(a:expr) ==# v:t_list ? a:expr : split(a:expr, '\n')
Error detected while processing function dein#begin[1]..dein#util#_begin[6]..dein#util#_error:
line    1:
E714: List required
Error detected while processing function dein#end[1]..dein#util#_end[2]..dein#util#_error[1]..<SNR>4_msg2list:
line    1:
E121: Undefined variable: v:t_list
E15: Invalid expression: type(a:expr) ==# v:t_list ? a:expr : split(a:expr, '\n')
Error detected while processing function dein#end[1]..dein#util#_end[2]..dein#util#_error:
line    1:
E714: List required
```

## vimrcに書いてあるdeinのエラー？

`dein#begin`から`dein#end`をコメントアウトしたら出なくなるのでdeinのエラーかなと疑っていてハマった。

```
# dein以外は問題なく動作していた。以下をコメントアウトしたらエラー文は出なくなる。

call dein#begin(expand('~/.vim/dein'))

call dein#add('Shougo/dein.vim')
...略
call dein#end()
```

## 試したこと

以下を全て試したがダメだった。

1. vimの再インストール
1. deinの再インストール
1. プラグインの削除
1. Mac再起動

## 解決策

色々と調べて行くうちに、vimのPATHがうんちゃらかんちゃらというコメントを発見。『もしかしてcommitする時に立ち上がるエディタのPATHが別のvimをさしているのか？』という推測がたったので確認してみたところ、`vim`ではなく`vi`が起動していた。

```
# gitのエディタ確認
▶git config --global core.editor
/usr/bin/vim

# 通常時にvimと打って起動しているvimのpath
▶which vim
/usr/local/bin/vim
```

やはり`vi`をさしていた。確かMacの場合、Homebrewでインストールしたvimは`/usr/local/bin/vim`、viは`/usr/bin/vim`だった気がする（またはvim7.3を差している）。

以下のコマンドでHomebrewでインストールしたvimに直したらエラー文が出なくなった。

```
# git commitの時のエディタをvimに戻す
▶git config --global core.editor /usr/local/bin/vim
```

# 参考
以下の掲示板のコメントを眺めていたら今回の解決策が思いついたので、こういうやりとりも記録に残るインターネッツっていいなっていう話。

vim-jp – Lingr
http://lingr.com/room/vim/archives/2016/04/16
sshで日本語を扱う時のメモ

ssh で日本語使う時のメモ。

# 参考
- [Vimの文字コード関連 - Qiita](https://qiita.com/take4s5i/items/a347be456b2f1312150c)

# .vimrc
```
set fileencoding=utf-8
set fileencodings=utf-8,iso-2022-jp,euc-jp,cp932
set encoding=utf-8
```

# screen
UTFモードで利用する。
```
screen -U
```
大量のExcelファイルからデータを抽出する

#概要

- 大量のExcelファイルからデータを抽出する必要があったので、プログラムをC#で作成してみた。
- ClosedXMLを使用した場合とOleDbを使用した場合。
- ClosedXMLを使用した方がシンプルだが、OleDbの方がメモリ消費量が少なく処理時間は半分くらい。
- ClosedXMLでカンマ区切り数字をGetString()するとカンマが無くなる。GetFormattedString()すればカンマが付く。

#ClosedXMLを使用した場合

```c#
using ClosedXML.Excel;
using System;
using System.Data.OleDb;

static void MainXML()
{
    var workbook = new XLWorkbook(@"\Tools\Book1.xlsx");
    foreach (var worksheet in workbook.Worksheets)
    {
        Console.WriteLine("Sheet={0}", worksheet.Name);
        var range = worksheet.RangeUsed();
        if (range is null) continue;
        int row_count = range.RowCount();
        int col_count = range.ColumnCount();
        for (int i = 1; i <= row_count; i++)
        {
            for (int j = 1; j < col_count; j++)
            {
                Console.Write("{0}\t", range.Cell(i, j).GetFormattedString());
            }
            Console.WriteLine("{0}", range.Cell(i, col_count).GetFormattedString());
        }
        range.Dispose();
    }
    workbook.Dispose();
}
```

#OleDbを使用した場合

```c#
using ClosedXML.Excel;
using System;
using System.Data.OleDb;

static void MainOle()
{
    string str = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=NO;'";
    var connect = new OleDbConnection();
    connect.ConnectionString = string.Format(str, @"\Tools\Book1.xlsx");
    connect.Open();
    var table = connect.GetSchema("Tables");
    int sheet_count = table.Rows.Count;
    for (int i = 0; i < sheet_count; i++)
    {
        string sheet_name = table.Rows[i]["TABLE_NAME"].ToString();
        Console.WriteLine("Sheet={0}", sheet_name);
        var command = new OleDbCommand();
        command.CommandText = string.Format("Select * from [{0}]", sheet_name);
        command.Connection = connect;
        var reader = command.ExecuteReader();
        while (reader.Read())
        {
            int count = reader.FieldCount;
            for (int j = 0; j < count - 1; j++)
            {
                Console.Write("{0}\t", reader[j].ToString());
            }
            Console.WriteLine("{0}", reader[count - 1].ToString());
        }
        reader.Close();
        command.Dispose();
    }
    connect.Dispose();
}
```
AndroidStudioに"your CPU doesn't support vt-x or svm" と言われた時の対処法

どもー、某Ａ省の<b>hiro</b>です。
業務でこっそり私的に使用するアプリを開発するために、<b>AndroidStudio</b>を導入しました。
その時に困ったことがあったのでメモ的な初投稿です。

参考にしたページ:<a href="https://www.bignox.com/blog/how-to-connect-android-studio-with-nox-app-player-for-android-development-and-debug/"><p>How to connect Android Studio with Nox App Player for Android development and debug</p></a>

<h1><b>困ったこと</b></h1>
AndroidStudioをインストールしたが、エミュレータが起動できない。

↓やりたいこと↓
![maxresdefault.jpg](https://qiita-image-store.s3.amazonaws.com/0/236701/20ad84cc-1789-4f99-65bc-727f074844c9.jpeg)

↓リアルな感じ↓
![AndroidStudioCPUError.png](https://qiita-image-store.s3.amazonaws.com/0/236701/41686a9f-5378-19e9-a9be-572946f06031.png)

つまり、"Your CPU does not support VT-x."というわけで、デフォルトのエミュレーターを起動してプロジェクトの実行が出来ない。
AndroidStudioが推奨する解決方法は以下
![AndroidSturioCPUError.png](https://qiita-image-store.s3.amazonaws.com/0/236701/d3e5852a-f247-745e-a82b-cc8905b27f2b.png)
＊戸田奈津子訳＊
（１）本番環境を使ってね！（暗黒微笑）
（２）と（３）やっすいパソコン使ってないで新しいのを買え！
（４）ARMシステムイメージをもとにした仮想デバイスを使え（遅いけどな！）

イケてないので他の解決法にしました。

<h1><b>Nox Player</b></h1>
エミュレーターです。
人によってはこういうの生理的に無理な人もいると思うんですけど、開発者である私たちは自らの行動を律して、<b>いい感じのこと（きれいな目）</b>にしかこういうの使わないんで、大丈夫です。頑張りましょう。
Androidのアプリをパソコンで出来るようになるのは、すごく便利ですね。自動タップ機能なんかもついているのでちょっとずぼらなゲーマーにも良さげです。

<h1><b>インストールからアプリの実行まで</b></h1>
<a href="https://jp.bignox.com/">ここから</a>ダウンロードして、あとは<a href="https://www.bignox.com/blog/how-to-connect-android-studio-with-nox-app-player-for-android-development-and-debug/">ここに書いてある</a>通りです。

<h1><b>最後に</b></h1>
Youtubeにも参考になる動画を見つけたので張っておきます。
<a href="https://www.youtube.com/watch?v=qKFFjFE8U8E">こんなの</a>
秋月のu-blox搭載GNSSモジュール(GT-902PMGG)を分解してみた

# はじめに

4月に秋月電子から新たなGNSSモジュールが発売されました。

[裕中企業股份有限公司(YUECHUNG INTERNATIONAL CORP. (YIC))](http://www.yic.com.tw/)の**GT-902PMGG**というモジュールで、**u-blox M8**チップセットを搭載しており、日本の準天頂衛星システム(QZSS)を含む各国の測位衛星の受信が可能となっています。

マグネットと両面ステッカーが付いたプラスチックのケースに入っており、予め配線が引き出されています。
![oofjgeuz.png](https://qiita-image-store.s3.amazonaws.com/0/128470/cb522aa7-adfb-088f-ef5a-2c8174d0fcfe.png)


# 背景
このモジュールは電源入力がVCCのみ引き出されており、バックアップ電源についてデータシートやメーカーのページ等を確認しても記述がはっきりしません。

唯一書かれているのは、データシートの電気的特性の欄に書かれたバックアップ電源入力電圧と電流の項目。
![datasheet.png](https://qiita-image-store.s3.amazonaws.com/0/128470/e2c6bc96-9975-8bfa-3bc1-28f3c6ca1ef6.png)

ケース内にバッテリーを内蔵しているのか、引き出されていないバックアップ電源ラインがあるのかがはっきりしないので、これを確認するべく分解しました。


# 分解
まず、いい匂いがする両面ステッカーを剥がします。
すると、マグネットとネジが出てきます。
![P_20180527_053617.jpg](https://qiita-image-store.s3.amazonaws.com/0/128470/502433cb-ec4b-db52-ad84-d293ac3a630a.jpeg)

ネジを外すと、GNSSモジュール本体が載った基板が顔を出します。
![P_20180527_030140.jpg](https://qiita-image-store.s3.amazonaws.com/0/128470/3f4c5fc8-ded6-d558-6f34-f98755b71aef.jpeg)
ハーネスと基板の間にコネクタがありました。JSTのSHコネクタのようです。
引き出されている線は5本ですが、コネクタは6極あります。

この基板も両面ステッカーでケースに固定されているため、基板のコの字の切欠きにマイナスドライバーを突っ込んで丁寧に剥がします。しっかり粘着している上に基板が薄く曲がりやすいので、破損させないようにパッチアンテナの下から起こします。


するとこのように分解できます。
![P_20180527_053838.jpg](https://qiita-image-store.s3.amazonaws.com/0/128470/9e335541-a6ae-b33e-e1ce-65949b3a41f0.jpeg)

基板の表裏はこのとおりです。（マットなレジストと黒のシルクがかっこいい）
寸法はおおよそ30x30x8でした。
![P_20180527_053950.jpg](https://qiita-image-store.s3.amazonaws.com/0/128470/63ddaba7-868f-6da5-ffc5-1f8d2ed911d6.jpeg)
パッチアンテナ側にパイロッドLEDがありました。Fixすると点滅します。
（表から見えるようにしてくれれば良かったのに…）
![P_20180527_053941.jpg](https://qiita-image-store.s3.amazonaws.com/0/128470/85d2e4fa-4901-2ee4-e1ff-d5ca9c6b5d4a.jpeg)
アンテナ裏側の基板上にボタン形の小さいバッテリーらしきものが実装されていました。

このモジュールに使われている電池の正体はわかりませんが、秋月で販売されている[MS621FE](http://akizukidenshi.com/catalog/g/gB-08345/)と同じような種類の2次電池と考えられます。


# (おまけ)コンフィグ保持
私が初めてu-bloxのモジュールを扱う上でハマった、コンフィグ保持の方法についてまとめておきます。

u-centerのConfiguration Viewからコンフィグを変更しSendを押しただけではバックアップ電池の電圧が十分でもコンフィグは保持されず、次回電源投入時には初期状態に戻ってしまいます。

コンフィグ変更後、Sendを押してからメニューバーのReceiver > Action > Save Configを押すことで電源再投入時に初期化されなくなりました。
![4681_20180603_スクロールキャプチャ.png](https://qiita-image-store.s3.amazonaws.com/0/128470/ad151e18-e8a3-9fec-0a3a-c106483caf8a.png)
バックアップ電池の電圧が定格を下回る0.7Vでも、上記の操作をした時点のコンフィグを保持していました。
Save Configを実行することで不揮発性の媒体にコンフィグが保存されるようです。

# まとめ
バックアップ電源→内部にボタン形二次電池
コンフィグ保持→変更後に Send と Receiver > Action > Save Config


# 参考資料
- [ＧＰＳ／ＧＬＯＮＡＳＳ受信機（Ｇａｌｉｌｅｏ／ＢｅｉＤｏｕ可）ｕ‐ｂｌｏｘ　Ｍ８搭載　みちびき３機受信対応: センサ一般 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gM-12905/)
- [GT-902PMGG データシート](http://akizukidenshi.com/catalog/g/gM-12905/)
もう忘れない。laravelの＠yieldと@sectionの関係

## @yieldと@sectionの関係
@section(‘head’) ～ @endsectionが一つのブロックで、前述の@yield(‘head’)部分に追加される

## 覚え方
yieldのyは親の"や（y）"

## 元のコード

```index.php
<DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ページタイトル</title>
<meta name="description" content="説明文">
<meta name="keywords">
<link href="/css/layouts.css" rel="stylesheet">
<link href="/css/pages.css" rel="stylesheet">
</head>
<body>
<header>
    ヘッダー
</header>
        <p>コンテンツ</p>
<footer>
    フッター
</footer>
</body>
</html>
```
上記の共通部分`<head>,``<header>,``<footer>`を@yieldにして、別のファイルで管理する。

## ベースとなるコード
共通コードとなる外部化したい部分を@yieldにした"親"ファイルを作成。

```layouts/parent.blade.php
<DOCTYPE HTML>
<html lang="ja">
<head>
@yield('head')
</head>
<body>
@yield('header')
        <p>コンテンツ</p>
@yield('footer')
</body>
</html>

```
## 外部化した`<head>`部分はhead.blade.phpへ

```head.blade.php
@extends('layouts.parent')
@section('head')
<meta charset="UTF-8">
<title>ページタイトル</title>
<meta name="description" content="説明文">
<meta name="keywords">
<link href="/css/layout.css" rel="stylesheet">
<link href="/css/page.css" rel="stylesheet">
@endsection
```

## 外部化した`<header>`部分はheader.blade.phpへ
```
@extends('layouts.parent')
@section('header')
<header>
    ヘッダー
</header>
@endsection
```
## 外部化した`<footer>`部分はfooter.blade.phpへ
```
@extends('layouts.parent')
@section('footer')
<footer>
    フッター
</footer>
@endsection
```

##説明
### `@extends('layouts.parent')`
これで親のファイルを継承しています。親と子を結びつけるチェーンのような感じでしょうか。

### `@section('head') ~ @endsection`
この部分が親(@extends)の@yield部分に召喚されるトンネルとなります。トンネルなので入り口(@section)と出口(@endsection)が必要になります。

### `@yield('head')`
子の`@section('head') ~ @endsection`というトンネルを通す穴です。親(@extends)に記載します。穴はひとつなので、閉じる必要もなしで`@yield('head')`一つのみ。

## 参照
https://qiita.com/k-waragai/items/504457527b32e113a489
http://cly7796.net/wp/php/to-a-common-layout-in-blade-template-of-laravel/
メモ：「12ステップで作る　組込みOS自作入門」環境構築

# 概要
「12ステップで作る　組込みOS自作入門」の環境構築を行ったときのメモ。

手元のUbuntu18.04ではマイコンへのROMの書き込みができなかったので、サポートサイトで提供されているOSのイメージを使った

# 環境
 * 4年前に買ったBTOパソコン
    * Intel(R) Celeron(R) CPU G1820
 * Ubuntu 18.04
 * VirtualBox 5.2.10

# 買ったもの

秋月電子でネット購入。

```
　1.【K-01271】Ｈ８／３０６９Ｆネット対応マイコンＬＡＮボード（完成品）
　　価格：￥3,750　×　数量：1　＝　合計：￥3,750
　2.【C-00004】ＲＳ２３２Ｃケーブル（Ｄサブ９Ｐオス）－（９Ｐメス）ストレート結線（１．８ｍ）
　　価格：￥350　×　数量：1　＝　合計：￥350
　3.【M-02746】ＵＳＢ－シリアル変換ケーブル　グレー色
　　価格：￥1,000　×　数量：1　＝　合計：￥1,000
　4.【M-01801】超小型スイッチングＡＣアダプター５Ｖ２Ａ　入力１００Ｖ～２４０Ｖ　ＧＦ１２－ＵＳ０５２０
　　価格：￥650　×　数量：1　＝　合計：￥650
```

# やったこと
 * サポートサイトで提供されているOSイメージから、仮想マシンを作成する
    * VirtualBoxをUbuntuにインストール
        * `sudo apt install virtualbox`
    * OSイメージを取得
        * http://kozos.jp/books/makeos/
    * 管理者権限でVirtualBoxを起動
        * 一般ユーザでは、ホストOSの任意のUSBポートと仮想マシンを接続することができなかった
    * 仮想マシンと、ホストOSのUSBに接続されたＵＳＢ－シリアル変換ケーブルを接続
        * 仮想マシンの設定で、USBの設定の箇所から行う
 * h8writeではこのOSイメージをつかっても書き込めなかったので、kz_h8writeを使う
    * h8write
        * http://mes.osdn.jp/h8/writer-j.html
    * kz_h8writer
        * https://ja.osdn.net/projects/kz-h8write/
Visual StudioでSystemCの環境構築

# はじめに
Visual Studioの環境でSystemCをはじめる手順を記載します。
以下の内容は基本的に[これ](https://stackoverflow.com/questions/41990606/installing-systemc-for-vs2013?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa)を参考にしています。

# 環境
- Visual Studio2015
- systemc-2.3.2

# 手順

1.acclleraでSystemCをDLします。
http://www.accellera.org/downloads/standards/systemc
ここのSystemC 2.3.2 (Includes TLM)->Core SystemC Language and Examples (.zip)

2.解凍してどこかのディレクトリに配置します。

3.systemc-2.3.2->msvc10->SystemCのSystemC.slnをvisual studio 2015で開きます。
バージョンアップしますか？はYesで進みます。

4.Debugタブ横はx64に設定します。
新規作成用と同じであれば大丈夫です。

5.SystemCとSystemC-coreのSolutionプロパティを設定します。
C/C++->Code Generation->Runtime Libraryを(/MTd)に設定します。

6.Buildして.libを生成します。
systemc-2.3.2/msvc10/SystemC/x64/DebugにSystemC.libが生成出来ていればOKです。

7.新しいプロジェクトをVisual Studioで作成します。
Win32 Console application->Empty projectで作成します。

8.C++ファイルをAddしておきます。

9.はじめに記載した[参考サイト](https://stackoverflow.com/questions/41990606/installing-systemc-for-vs2013?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa)の手順9~14を実行します。
手順13はsystemc-2.3.2/msvc10/SystemC/x64/Debugを指定します。

10.C++ファイルに以下を貼り付けます。
参考サイトとほぼ変わりません。

```cpp
#define _CRT_SECURE_NO_WARNINGS
#include <systemc.h>

struct test_module : sc_module {
	SC_HAS_PROCESS(test_module);

	test_module(::sc_core::sc_module_name) {
		SC_THREAD(test_thread);
	}

	sc_signal<std::string>  message{ "message" };

	void test_thread() {
		message.write("Hello world!");
		wait(1, SC_NS);
		cout << message.read() << endl;
		sc_stop();
	}
};

int sc_main(int argc, char** argv)
{
	test_module tmod{ "tmod" };
	sc_start();
	return 0;
}

```

11.Buildして成功したら完成です。
お疲れ様でした。

# おわりに
深夜に適当に書いたので間違ってたり分からなかったら教えてください。画像追加したりします多分…。
QiitaにSystemCの記事が全くないのでこれを機会に誰かたくさん書いてください、お願いします。