OmniAICreator/Qiita-1.07M huggingface dataset:
Raspberry PiにインストールされているSonic PiでUSBスピーカーを利用する

# はじめに
この記事は、ハンズオン準備のための備忘録です。技術的に最適な方法ではないかもしれません。

Raspberry Piで利用するRaspbianには[Sonic Pi](https://sonic-pi.net/)というプログラムで音楽を奏でるソフトウェアがインストールされています。このソフトウェアでは、デフォルトでオーディオデバイスの優先順位がいちばん高いものに音声出力しているようですが、ソフトウェア内にはこの優先度を調整するための設定が無いため、Raspbianそのものの設定を変える必要がありました。
# 参考サイト
https://qiita.com/skyfish20ch/items/f0cddcd1abb9e3133543

# 利用したもの
Raspberry Pi 3 Module B V1.2
Raspbian Stretch with desktop and recommended softwareのRelease date: 2018-11-13
USB接続ミニステレオスピーカー（スイッチサイエンスhttps://www.switch-science.com/catalog/3152/）
# 方法

① USBスピーカーをUSBポートに刺す

② コマンドでスピーカーの優先順位設定を調べる

`cat /proc/asound/modules`

たぶん以下の表示になる

```
0 snd_bcm2835
1 snd_usb_audio
```
③ /etc/modprobe.dにsound.confを作成する

`sudo leafpad /etc/modprobe.d/sound.conf`

④ sound.confに以下の内容を書く

```
options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1
```

⑤再起動する
#注意事項
1. この設定を行うと、`aplay /usr/share/sounds/alsa/Rear_Center.wav`での音声再生テストはエラーになります。

~~2. スイッチサイエンスの製品ページ https://www.switch-science.com/catalog/3152/ にある「Raspberry Pi での使用については、こちらのガイドをご参照ください。」のところは、行わなくてよい。~~

# 所感
Sonic Piはライブコーディングでライブ演奏ができるため、USBスピーカー接続のトラブルシューティング事例は多くあるかと思ったのですが、あまり見かけませんでした。今回の設定でも、すべてがOKというわけではなく対処療法なので、もっとよい方法があればご教示いただきたいです。
Amazon DynamonDB demo

DynamoDBを開き、「テーブル」から「テーブルの作成」をクリック。
![スクリーンショット 2019-01-12 19.56.50.png](https://qiita-image-store.s3.amazonaws.com/0/280929/3ee9f819-2db6-ef30-0fdc-864422537b30.png)


ここでは書籍情報を保存することとするので、[テーブル名]に Books と入力してください。

[パーティションキー]を指定します。
パーティショニングとインデックス化は、パーティションキーにより実行されます。
ここでは、著者によって、書籍を検索するようにするので、Author と入力しておきます。
しかし、複数の著作がある著者もいるので、著者のみでは識別できません。
そこで、著者と著者によって識別できるように、ソートキーに Title を追加します。

テーブル設定では、Auto Scalingを使うか、スループットを手動でプロビジョニングするか、テーブルにセカンダリインデックスを定義するかどうかです。
ここでは、デフォルト設定を使用します。この場合、テーブルはDynamoDBにより自動でモニタリングされ、それに応じて読み取りおよび書き込みスループットが設定されます。
・セカンダリインデックスなし。
・Auto Scaling のキャパシティーを AnyScale のデフォルト機能を示すテーブルの作成ページで 70% のターゲット使用率 (最低キャパシティーは 5 つの読み込みと 5 つの書き込み) に設定。
・Encryption at Rest with DEFAULT encryption type 
![スクリーンショット 2019-01-12 20.07.58.png](https://qiita-image-store.s3.amazonaws.com/0/280929/af605172-1000-dfa7-3c9b-b662286ac17e.png)


以下のようにテーブルが作成されました。
・テーブル名：Books 
・プライマリキー：Author
・検索キー：Title
早速データを「項目」に追加していきます。「項目の作成」をクリック。
![スクリーンショット 2019-01-12 20.20.52.png](https://qiita-image-store.s3.amazonaws.com/0/280929/ad1275a6-dea0-893c-579d-3079b3a5ae54.png)


Author に、yamada 、Title に red と入力してみましょう。
また、この項目に別の属性を追加してみましょう。
「Append」-「StringSet」で、Edition で Audio と Kindle を入力。
![スクリーンショット 2019-01-12 20.31.43.png](https://qiita-image-store.s3.amazonaws.com/0/280929/b184dadf-1011-11b9-4aad-6ca6e8b52b74.png)


また、表示方法を Tree → Text に変更してみます。
なお、項目の上限サイズである400キロバイト以内であれば、いくつでも属性を追加することができます。
![スクリーンショット 2019-01-12 20.35.19.png](https://qiita-image-store.s3.amazonaws.com/0/280929/ea7085ad-d01a-f02a-98ec-fc52c01151a3.png)


同じようにいくつか追加してみましょう。
項目によって属性が異なっていても構いませんが、Author と Title は必須です。
![スクリーンショット 2019-01-12 20.47.22.png](https://qiita-image-store.s3.amazonaws.com/0/280929/62c4eb2c-e454-6891-d91f-6205966f90c1.png)


では、テーブルが作成されたことでクエリオペレーションを使って、書籍を探してみましょう。
パーティションキーの値の指定が必要です。今回は yamada の書籍を探します。
2冊の書籍が出てきました。
![スクリーンショット 2019-01-12 20.47.53.png](https://qiita-image-store.s3.amazonaws.com/0/280929/5fccb40b-c47b-8b85-c775-846caa9572b9.png)


次に、スキャンオペレーションです。
Edition を　Audio にすると何冊かの書籍が検索されました。
Githubがユーザーステータスに対応したらしい。あいあむすたーばっくすなう。

Githubがユーザーステータスに対応したらしい。あいあむすたーばっくすなう。

プロフィールページやSettingsからすぐに変更できそう

![image](https://user-images.githubusercontent.com/13635059/51072913-93b7e800-16ac-11e9-8e46-332ba937e8b0.png)


見え方

![image](https://user-images.githubusercontent.com/13635059/51072909-7d119100-16ac-11e9-87c4-e1044df1a79d.png)

それだけ。


---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues


https://github.com/YumaInaura/YumaInaura/issues/347









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
エンジニアの魂は、一回前よりもうまくなること。

エンジニアの魂は、一回前よりもうまくなること。

エンジニアリングの根本的な部分での話をしたい。エンジニアリングの根本的な魂とは、1回物事をやったら、次はもっとうまくやってやろうと思う心だと思う。これはエンジニアリングだけではなくて、日常生活や人生の全ての局面に当てはまると思う。

例えば今日、今さっき、僕はStarbucksで水をこぼしてしまったのだけれど、ペーパーを何枚か持ってきて、テーブルをぬぐいながら、もし次に同じようなことがあったら、もっとうまく拭き取ってやろうと言う気持ちでテーブルをぬぐっていた。 https://t.co/FIGtewcE5q

![image](https://user-images.githubusercontent.com/13635059/51072691-d2976f00-16a7-11e9-96dd-96e260e22f5e.png)


例えば同じくスターバックスで、リュックサックから充電のアダプターを取り出すとき、このコードの煩雑さに、ストレスで死にそうになるのだけれど、次はもっとうまく取り出したり、しまったりしてやろうと考えながら充電ケーブルを出し入れしたりする。ちなみに今日は1日中スターバックスにいるぞ。 https://t.co/T13vIYFQdM

![image](https://user-images.githubusercontent.com/13635059/51072692-d88d5000-16a7-11e9-9755-8e260b349999.png)

次はもっとうまくやるなんて、毎回上達するなんてすごく大変なことだと思うかもしれない。だけどエンジニアは凄く短気なので、ほんのわずかでもストレスを感じると、どうにかしてそれを解決しないと、ストレスだけで寿命が80年は縮まってしまう生き物なのだ。だから上達すると言う事は、救命行為だ。

僕も日常生活の煩雑な行為全てのストレスで死にそうになる時に、次はもう少しばかりましな選択的行動をとって、少しでもストレスの爆発を減らしたいと願うのだった。そこに平穏なる世界、美しく音楽に惹かれる世界が待ち受けているはずだ。人生はとても短いから、美しい景色を見るための問題解決。

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues

https://github.com/YumaInaura/YumaInaura/issues/345








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Create Pytorch DataLoader from numpy.array

*scikit-learn*のデータセット(*ndarray*) からPyTorchの**DataLoader**を作るのにすこし躓いた.

今後のためにメモ

```python
# データ作成
from sklearn.datasets import fetch_mldata
from sklearn.model_selection import train_test_split

mnist = fetch_mldata("MNIST original")
X = mnist.data.astype(np.float32)  # shape(70000, 784)
y = mnist.target.astype(np.int64)  # shape(70000)


# ndarrayからインスタンスを一つずつ取り出してtorch.Tensorに変換してリストに入れる
tensor_X = torch.stack([torch.from_numpy(np.array(i)) for i in X])
tensor_y = torch.stack([torch.from_numpy(np.array(i)) for i in y])

# trainとtestで分ける
train_size = 60000
X_train = tensor_X[:train_size]
y_train = tensor_y[:train_size]
X_test = tensor_X[train_size:]
y_test = tensor_y[train_size:]

# DataLoaderを作る
train_dataset = torch.utils.data.TensorDataset(X_train, y_train)
train_loader = torch.utils.data.DataLoader(train_loader)

test_dataset = torch.utils.data.TensorDataset(X_test, y_test)
test_loader = torch.utils.data.DataLoader(test_dataset)
```

```python
X = mnist.data.astype(np.float32)
y = mnist.target.astype(np.int64)
```

ここで型を変換してる理由は、PyTorchの要求してくる型に合わせるためです。
C言語でモザイク等の画像処理をしてみた

こんにちは、
今日は、C言語を用いて画像処理を行ったのですが、この実装でいいのかと疑問になったのでまとめます。
間違っているところのご指摘していただけると嬉しいです！

## 前提
入力画像のRGBに対応したppm形式とします。


## 共通処理
入力の画像に対して、幅、高さ、最大輝度などの情報を取得します。
そのあと、画像データがバイナリーとして格納されているので、取得します。
今回は、P6形式の画像を取り扱っていますので下記のようにしますが、本当はマジックナンバーによって形式が異なるので、処理が変わるので注意してください。


```.c
void read_binary_data(FILE *fp, img *img_p) {
    for (int h = 0; h < img_p -> height; h++) {
        for (int w = 0; w < img_p -> width; w++) {
            img_p -> map[h][w].r = fgetc(fp);;
            img_p -> map[h][w].g = fgetc(fp);;
            img_p -> map[h][w].b = fgetc(fp);;
        }
    }
}
```


## 画像処理
データを取得できたら、画像を処理していきます。
今回は3種類の処理をしました。


- 左右反転
- PGM変換
- モザイク加工

### 左右反転

左右反転の処理は、出力する際に1行ずつ左右反転すればよいです。


```.c
void write_binary_data(FILE *fp, img *img) {
    for (int h = 0; h < height; h++) {
        for (int w = width; w > 0; w--) {
            fputc(img -> data[h][w].r, fp);
            fputc(img -> data[h][w].g, fp);
            fputc(img -> data[h][w].b, fp);
        }
    }
}
```

### PGM変換



入力画像を、マジックナンバーがP4で始まるPGM画像形式に変換し、出力します。
グレースケールには、 `G = 0.299*R + 0.587*G + 0.114*B` という関係がありますので、これを使います。

```.c
void convert_pgm(FILE *fp, img *img_p) {
    for (int h = 0; h < img_p -> height; h++) {
        for (int w = 0; w < img_p -> width; w++) {
            fputc(img -> data[h][w].r * 0.299 + img -> data[h][w].g * 0.587 + img -> data[h][w].b * 0.114, fp);
        }
    }
}
```

### モザイク
入力画像に対して、任意のブロック（正方形）サイズのモザイク処理をします。
まず、ブロック内のRGBの値の平均を計算します。ブロック内の全てのピクセルで計算した色にすればモザイク処理ができます。
`safe_area` とは、実際のブロックのサイズのことです。
例えば、モザイクのブロックのサイズが8だとします。8の倍数以外の画像サイズだと綺麗にモザイク処理ができないので、それの対策としてます。

```.c
void execute_mosaic(img *img_p, int mosaic_size) {
    int r, g, b;
    int safe_area_x, safe_area_y;

    for (int h = 0; h < img_p -> height; h += mosaic_size) {
        for (int w = 0; w < img_p -> width; w += mosaic_size) {
            r = 0;
            g = 0;
            b = 0;

            for (int y = 0; y < mosaic_size; y++) {
                if (img_p -> height <= (h + y)) break;
                safe_area_y = y + 1;

                for (int x = 0; x < mosaic_size; x++) {
                    if (img_p -> width <= (w + x)) break;
                    r += img_p -> map[h + y][w + x].r;
                    g += img_p -> map[h + y][w + x].g;
                    b += img_p -> map[h + y][w + x].b;
                    safe_area_x = x + 1;
                }
            }

            for (int y = 0; y < safe_area_y; y++) {
                for (int x = 0; x < safe_area_x; x++) {
                    img_p -> map[h + y][w + x].r = r / (safe_area_y * safe_area_x);
                    img_p -> map[h + y][w + x].g = g / (safe_area_y * safe_area_x);
                    img_p -> map[h + y][w + x].b = b / (safe_area_y * safe_area_x);
                }
            }
        }
    }
}
```


## 感想
書くほどでもなかったかなと思いますが、他によいやり方があれば教えていただきたいです。
Vue Smooth Scrollを使ってみた

vue.jsでスムースクロールの実装にトライしてみたので自分用にメモ

### インストール
```
npm install vue-smoothscroll --save
```

### 実装
単一ファイルコンポーネント内で実装してみました
(※単一ファイルコンポーネントでも[公式](https://www.npmjs.com/package/vue-smoothscroll)での使い方の説明通りで問題なく動作しました)。

app.js

```
window.Vue = require('vue')

const app = new Vue({
  el: '#app'
})

```

app.vue

```
<template>
    <div class="form-group" id="comment">
</template>

<script>
    import vueSmoothScroll from 'vue-smoothscroll'
    Vue.use(vueSmoothScroll)

    export default {
        methods: {
            // 記載はしておりませんが、イベントをトリガーにして以下の処理が行われ、
            // コメント要素までスムーズスクロールされるイメージです
            doSmoothScroll() {
                this.$SmoothScroll(document.querySelector('#comment'), 400, null, null, 'y')
           },
        },
     }
</script>
```
インターンで初ブログを書きました！！教えてくれた！情報収集術と情報整理術！！

## インターン先でエンジニアブログを書かせてもらいました。
以下URLになります。
https://techblog.lclco.com/entry/2018/12/21/170000

僕は現在長期インターンをしています。
インターン先では、いろんな経験をさせて頂いているので本当に感謝しかありません。

今回はいかにしてエンジニアの方々は情報収集、または情報整理をしているのかをインタビューさせていただきました。
内容に関しては記事を見ていただきたいので、今回は自分が気づいた記事の書く上での注意を紹介します。

## ブログの注意

ブログを書いて見返して見て完璧だ!と思っても、修正点をメンターの方に頂きました。
以下ご指摘頂いた内容です。

- 誤字脱字が多かったので、声に出して読んで見る
- 話し言葉をへらす。 なかなか など、あまり分からない
- 表現方法と対象がどこにあるのかがわからなかった
- 同じことを繰り返すのは構成を同じにしたほうが読みやすい
- 句読点のバランスを考える
- 自分視点になりがちなので、相手に状態を細かく伝える
- 言い切ってしまっているところは濁すなどして注意したほうがいい
- 「#の数」ではなくて「見出しの階層レベル」など言い方がおかしい

一番修正をすることが難しかったのが「自分視点になりがち」ということでした。
どうしたら相手に伝えられるのかを考えたときに、インターンで行っているコードを書くまえに一度やりたいことを一つずつ言語化する作業を取り入れて実践していました。

## 最後に
今回の経験でインプットとアウトプットがいかに大切なのか、自分ができていないのかを感じました。また、インタビュー記事の書き方もたくさん教えていただきました。
また次回書かせていただくことがあれば、今回の反省を生かしていきたいです！
プログラマー体質な人の英語リーディング・ネーミング参考書籍

# はじめに

英語、特に暗記が苦手で物忘れ体質が激しく、コツコツやるのが苦手でグウタラ者でコテコテのプログラマー体質な方向けの参考書書籍です。リーディングとプログラミングの際のネーミングに特化しています。得意なプログラミング能力?を活かして最短で走れるための書籍をセレクトしました。少しでも役に立てれば

# 中学英語の復習

[図解入門ビジネス中学英語の基本と仕組みがよ~くわかる本](https://www.amazon.co.jp/dp/4798022756)

生成文法を駆使して、図解しながら中学の英文法を分かりやすく説明している。

# 高校英語の復習


[英語リーディング教本](https://www.amazon.co.jp/dp/4327451371)

硬めのプログラミング言語の仕様書＋演習のような本。演習を通じて英語のインタープリッタを頭の中に構築する。
オライリーやBNF等で記述された言語仕様書をサクサク読める人なら手に取るべし。
姉妹書（英語ベーシック教本、英語リーディング教本ドリル)もオススメ。

[リンケージ英語構文100](https://www.amazon.co.jp/dp/4010341041)

英語構文を網羅したもの。英語リーディング教本ではカバー仕切れていない文を同じよう形で品詞分解して説明している。前振りに英文の一般的な構造図が書いてある。公式マニュアルだけでなく洋書に手を出す場合は必要。読む物にかかわらず、IT英語でこれより上の構文力は多分いらない。

[大学受験のための英文熟考 上 (熟考シリーズ)] (https://www.amazon.co.jp/dp/4010338733)
リーディングの最後の仕上げの本。他と違って、この本の文自体は短いので細切れ学習にぴったり。[下](https://www.amazon.co.jp/dp/4010338865)は途中でやめたので知らん。

# 技術英語全般

[はじめての技術英語](https://www.amazon.co.jp/dp/4860640225)

技術英語で必要な文法、熟語、構文を練習問題付き解説。電子/電気の文が多いがIT分野と被っているので応用は聞く。

[技術翻訳　奥義と裏技　（１２）: 各種構文（その２）倒置・強調・省略・一致・反復・挿入・分詞構文](https://www.amazon.co.jp/dp/B01HQOYCGK)

技術英語の省略、反復について学べる本。

# 数学、単位、数量系英語全般

[基礎からわかる数・数式と図形の英語―豊富な用語と用例](https://www.amazon.co.jp/dp/4888776296)

数式図形表現の習得に特化した本。

[基礎からわかる数量と単位の英語―豊富な文型と用例](https://www.amazon.co.jp/dp/4888776350)

同様に数量、単位表現の習得に特化した本。

# IT英語

[アプリケーションをつくる英語](https://www.amazon.co.jp/dp/4844332848)

UIで使う英単語、英文の微妙なニュアンスの違いを学べる。

[問題解決力とコーディング力を鍛える 英語のいろは](https://www.amazon.co.jp/dp/B07KPYRG1D)

主にコーディングで英語をどう使うに特化したもの。まだあまり読み込んでいない。

[現場で困らない! ITエンジニアのための英語リーディング](
https://www.amazon.co.jp/dp/4798149497)

英語リーディングの際のコツについて述べた本。

# IT英語の問題集

[理工系のための英文法再入門](
https://www.amazon.co.jp/dp/4274200116)

問題はIT関係が多い。

[理数系のための技術英語練習帳 －さらなる上達を目指して－](
https://www.amazon.co.jp/dp/4320005899)

問題はコンピュータサイエンスと数学（機械学習周り）が多い

# アプリ・サービス

[dash](https://kapeli.com/dash)
本来のリファレンスだけでなく、クラス名、プロパティ名、メソッド名を考える時に使用。

[Safari Online](https://play.google.com/store/apps/details?id=com.safariflow.queue)
オライリーから出ているサブスクリプションで洋書を読むためのアプリ。ACMの会員になれば割引で読める。
iOS、Android版両方出ているけどGoogle翻訳と連携できるAndroid版の方がオススメ。

# Swift

[Swift らしい表現を目指そう
](https://booth.pm/ja/items/1049662) Swiftの本だが、言語そのものは英語のようにかける。

# 学習方法

[デスマーチに追われるIT技術者が勉強せずに英語力を身につけてキャリアアップした方法](https://www.amazon.co.jp/dp/4798046132)

英語学習は気合を入れても挫折するだけです。肩の力を抜いて日々続けていくための方法が記載されています。

# まとめ

プログラミング言語の学習方法を応用すると良い。
英語学習は目的や人によって、教材の相性が激しい。
Navigation LibraryでBottomNavigationの初期位置を変更する

DeepLinkなどから遷移してBottomNavigationの初期位置を変更する時の実装メモです。

`navController.navigate()`でnavigationのidを指定して実装しようとしたところ、バックスタックが積まれて端末のバックボタンを押した時に元のタブ位置に一度戻るという挙動になってしまったので少し工夫しました。

```navigation/navigation.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    app:startDestination="@+id/home">

    <fragment
        android:id="@+id/home"
        android:name="com.konifar.HomeFragment"
        android:label="@string/home_title"
        tools:layout="@layout/home_fragment">
        <action
            android:id="@+id/action_to_favorite"
            app:destination="@id/favorite" />
        <action
            android:id="@+id/action_to_account"
            app:destination="@id/account" />
    </fragment>

    <fragment
        android:id="@+id/favorite"
        android:name="com.konifar.FavoriteFragment"
        android:label="@string/favorite_title"
        tools:layout="@layout/favorite_fragment" />

    <fragment
        android:id="@+id/account"
        android:name="com.konifar.AccountFragment"
        android:label="@string/account_title"
        tools:layout="@layout/account_fragment" />
</navigation>
```

```MainActivity.kt
private fun setUpBottomNavigation() {
    val host = supportFragmentManager
        .findFragmentById(R.id.nav_host_fragment) as NavHostFragment? ?: return

    // 2つめのお気に入りタブを初期位置にする
    val navOptions = NavOptions.Builder()
        .setPopUpTo(R.id.home, true)
        .build()
    // ここで R.id.favorite ではなく R.id.action_to_favorite を指定する
    host.navController.navigate(R.id.action_to_favorite, null, navOptions)
    binding.navigation.setupWithNavController(host.navController)
}
```

詳しい説明はまだNavigationのコードを読めていないので読んでから書きます。

以上。
アイテムを拾うゲームの作成（コードのみ）No.1

こちらのコードは以下のサイトのコードのみを書いています．
[pickup-gameの作成　No.1](https://ayousan.hatenablog.com/entry/2019/01/12/190605)

```c#:PlayerController.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class PlayerController:MonoBehaviour{
    public float speed;
    public float flag=1000f;

    private Rigidbody2D rb2d;


    void Start(){
        rb2d =GetComponent<Rigidbody2D>();
    }

    void FixedUpdate(){
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");
        float x = Input.GetAxisRaw("Horizontal");

    Vector2 movement = new Vector2(moveHorizontal,moveVertical);
        rb2d.AddForce(movement * speed);

    Vector3 scale = transform.localScale;
    if(x >= 0){
        scale.x = -1;
    }else{
        scale.x = 1;
    }
    transform.localScale = scale;
  }

    void Update(){
        if(Input.GetKeyDown("space")){
            rb2d.AddForce(Vector2.up*flag);
        }
    }

    void OnTriggerEnter2D(Collider2D other){
        if(other.gameObject.CompareTag("PickUp")){
            other.gameObject.SetActive(false);

        }
    }
    


} 
```
プレイヤーの矢印キーによる操作，Spaceキーでのジャンプ，矢印キーを押したときにプレイヤーキャラが移動方向を向くように設定．
matplotlibのスタイルシートについて

## 概要

* `matplotlib`でスタイルシートが使用できる。
* 以下のようなメリットがあると考えられる。

	* スタイルシートを呼び出すだけで、任意の設定にできる。
	* グローバル設定を変えなくてすむので柔軟性が高い
	* 個別の図に対してスタイルシートを呼び出せるので、これまた柔軟性が高い。

## スタイルシートの登録

* スタイルシートはグラフの体裁を記載しておくファイル。
* `plt.style.use('hoge-style')で呼び出すことができる。
* `mpl_configdir/stylelib`にスタイルシートを登録できる。

	* ファイル名は`hoge-style.mplstyle`とする。
	* `mpl_configdir`は`matplotlib.get_configdir()`で取得できる。

* パラメータの記載の方法は`matplotlibrc`中の表記に従う。
* スタイルシートのサンプルは以下の通り。

```

axes.titlesize : 24
axes.labelsize : 20
lines.linewidth : 3
lines.markersize : 10
xtick.labelsize : 16
ytick.labelsize : 16

```

* ある一つの図だけのスタイルシートを変更したい時には、
	`with plt.style.context(('hoge-style')):`を使用する。

```python

with plt.style.context(('dark_background')):
    plt.plot(np.sin(np.linspace(0, 2 * np.pi)), 'r-o')
plt.show()

```
## その他の方法

### rcParamsによる変更

* `matplotlib.rcParams`を変更することで体裁を変更することもできる。
* この方法は、全ての図に影響を与えるグローバルな設定。

```python

mpl.rcParams['lines.linewidth'] = 2
mpl.rcParams['lines.color'] = 'r'

```

* `mpl.rc`を使用すると、あるカテゴリー(以下ではline)の複数の要素に同時に設定を変更できる。

```python
mpl.rc('lines', linewidth=4, color='g')

```

## おわりに

matplotlibのdocumentが2018年11月に3.0.2になっていました。少し読んだだけでも便利なことが沢山記載されているので、ちゃんと読まなきゃな…

## 参考

[Customizing Matplotlib with style sheets and rcParams](https://matplotlib.org/tutorials/introductory/customizing.html#sphx-glr-tutorials-introductory-customizing-py)
jnr-ffi関係記事リンク集

# 動機
JNRには公式ドキュメントがない
なんなら日本語の記事もほとんど見つからない

# リンク
+ [Panama Overview and Status Update](http://cr.openjdk.java.net/~jrose/panama/panama-status-2015-1216.pdf)
+ [jnr](https://github.com/jnr)
+ [Maven Repository: com.github.jnr » jnr-ffi](https://mvnrepository.com/artifact/com.github.jnr/jnr-ffi/2.1.9)
+ [jnr-ffiでJavaからCを呼び出す (Windows)](http://hito4-t.hatenablog.com/entry/2015/06/25/123933)
+ [jnr-ffiでJavaからCのポインタを使う](http://hito4-t.hatenablog.com/entry/2016/01/12/185710)
+ [jnr-ffiでJavaからCを呼び出すときに構造体を扱いたい](http://hito4-t.hatenablog.com/entry/2016/09/27/205051)
+ [JNRを使ってJavaからネイティブアクセス](https://torutk.hatenablog.jp/entry/20150829/p1)
+ [JNR: Java Native Runtime](https://www.slideshare.net/skrb/jnr-java-native-runtime)
+ [Oracle Code One 報告会 Java SE Update](https://www.slideshare.net/skrb/oracle-code-one-java-se-update-123955054)
+ [JJUGナイトセミナー JVM特集に参加して #JJUG](https://torutk.hatenablog.jp/entry/20150826/p1)
+ [JNR(JNI)経由で、WindowsのネイティブDLLが呼び出せない](http://mslabo.sakura.ne.jp/WordPress/make/%E5%93%80%E4%B8%81%E3%83%BB%E5%9B%9B%E6%96%B9%E5%B1%B1%E8%A9%B1/jnrjni%E7%B5%8C%E7%94%B1%E3%81%A7%E3%80%81windows%E3%81%AE%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96dll%E3%81%8C%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%9B%E3%81%AA%E3%81%84/)
+ [GroovyからGoの関数を使う→はやい](https://qiita.com/yujiorama_at_github/items/3f7cab906969764cc805)
+ [Using Panama "foreign" JDK](http://hg.openjdk.java.net/panama/dev/raw-file/foreign/doc/panama_foreign.html)
<br>

+ [Java : executable jar作成時にnativeをどのように同梱すればいいか分からない](https://teratail.com/questions/77763)
+ [Native-Utils](https://github.com/adamheinrich/native-utils)
+ [Maven Repository: tw.edu.sju.ee.eea.commons » commons-nativeutils » 1.0](https://mvnrepository.com/artifact/tw.edu.sju.ee.eea.commons/commons-nativeutils/1.0)
POSIX？PCREってなにそれ？PHPの正規表現を書きたくて知った聞いたことあるけど知らない言葉

[メールアドレスのフォーマットチェック](https://qiita.com/ponsuke0531/items/f780da79e4d2fc784604) をPHPでしたくていろいろ見ていてよく見かける言葉。聞いたことがあるけど知らないじゃ済まされなくなる前に調べて記録しておく。

# POSIXは、UNIX系OS間の移植性を確保するための広範囲にわたる標準規格
- 英語 : Portable(移植できる) operating system interface
- 読み方 : [ポジックス](http://yomikata.org/word/POSIX)
- WindowsなどUNIX系以外のOSでも部分的にサポートしている

正規表現と正規表現を使うツールのを扱った部分がPOSIXには含まれている。
なので別に正規表現のための規格っていうわけではない。
[コマンドなんかも含まれている。](https://qiita.com/richmikan@github/items/e4cb1537d38966c10f4b)

POSIXでは正規表現の各種方言を基本正規表現と拡張正規表現の2つに分類している。

## 基本正規表現 : BRE
- 英語 : Basic Regular Expressions

> [9.3.1 BREs Matching a Single Character or Collating Element](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_00_01)
[A BRE ordinary(普通の) character](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_02), [a special character](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_03) preceded(先立って) by a <backslash>, or a <period> shall match a single character. A bracket expression(ブラケット表現) shall match a single character or a single collating(照合する) element.

### ブラケット表現は、複数の文字の中のいずれか1文字を表す表現
- bracketは、 `[` と`]` のこと
- [ブラケット表現はこんな感じ](http://www.jaist.ac.jp/~fjt/bracket.html)

## 拡張正規表現 : ERE
- 英語 : Extended Regular Expressions

> [9.4.1 EREs Matching a Single Character or Collating Element](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04_01)
An ERE ordinary character, a special character preceded by a <backslash,> or a <period> shall match a single character. A bracket expression shall match a single character or a single collating element. An ERE matching a single character enclosed(囲む) in parentheses(丸かっこ) shall match the same as the ERE without parentheses would have matched.

## BREとEREの違い

| 正規表現の機能 | BRE | ERE |
|:-:|:-:|:-:|
|`.``^``$``[...]``[^...]`| `.``^``$``[...]``[^...]`  | `.``^``$``[...]``[^...]` |
|0から任意個を表す量子定子|  * | *  |
|`+``?`量子定子   |ない   |`+``?`   |
|範囲の表現|\{min,max\}   |{min,max}   |
|または(or)の表現   |ない   | `｜` |  

## ローケルは、正規表現に影響を与えます。
ローケルは、日付・時刻・単位・コード体系における文字の解釈法など、言語・文化的な習慣を記述する各種設定のコレクションである。

このローケルが影響を与えるものの１つが`/w`(単語を構成する文字)である。
多くの方言では、 `\w` は `[a-zA-Z0-9_]` と同じである。(`_`は含まないこともある。)

が、PHPにおいては(他はわからないけど)
uパターン修飾子によるUTF-8の場合であっても `\w`はASCII文字にしか対応していない。
Unicodeで指定できるすべての文字を表したい場合は、`\pL``\pN``\pZ`をuパターン修飾子と併せて使う。

[PHPのUnicode 文字プロパティ](http://php.net/manual/ja/regexp.reference.unicode.php)
(フォーマット)`\p{プロパティ文字}` : (意味)プロパティを持つ文字

|プロパティ|マッチするもの|
|:-:|:-:|
|L|アルファベット|
|N|数字|
|Z|区切り文字|

# PCREは、NFAベースの正規表現ライブラリ
- 英語 : [Perl Compatible(両立できる) Regular Expressions](https://www.pcre.org/)
- 読み方 : [ペクル](http://yomikata.org/word/PCRE)
- イギリスのPhilip Hazelさんが書いたPerl5互換の正規表現ライブラリ

NFAは、「全米先物協会」ではなく「非決定性有限オートマトン」です。

[PHPのpregで使われています。](http://php.net/manual/ja/book.pcre.php)
POSIX準拠のereg関連スイートに苛立ったAndrei ZmievskiさんがPHPに入れたそうです。

# 出展
- ![image.png](https://qiita-image-store.s3.amazonaws.com/0/159761/d755951d-0a10-72b2-12ff-ae502021edc7.png)
- [3つの正規表現を知らないとハマるヨ - おでーぶでおでーぶ](http://jmatsu.hatenablog.com/entry/2017/01/30/130952)

## 注意
私は、英語も日本語も弱いので100%確実な情報を得るには原文を読んでください。
iPadPro + ApplePencil でエンジニアの最強イメージを描いてみては？

iPadPro + ApplePencil でエンジニアの最強イメージを描いてみては？


とても強いエンジニアのイメージ画像 

こんなん


![image](https://user-images.githubusercontent.com/13635059/51071679-50537e80-1698-11e9-846a-4f1689de6423.png)

ところで今日、大阪茶屋町エリアでコスプレ的なイベントをやっていた

![image](https://user-images.githubusercontent.com/13635059/51071657-0f5b6a00-1698-11e9-83b9-43b00df0be08.png)

こんなエンジニアもいいね

あなたのイメージはなんですか？

僕の場合は忍者です。


なぜ自分のイメージを描かないんですか？

生産性が200倍ぐらいになりそうないイメージがしませんか？


追伸

この記事はほんの出来心です

あと、自分のイメージを描くにはiPadProとApplePencilがおすすめです、不器用なエンジニの手足に優しいやつ

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues


https://github.com/YumaInaura/YumaInaura/issues/344








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
iPad ProとApplePencilの力で、ノーモア時間泥棒の絵を描いてみた。エンジニアこそデバイスに依存した自己表現をすべき。

iPad ProとApplePencilの力で、ノーモア時間泥棒の絵を描いてみた。エンジニアこそデバイスに依存した自己表現をすべき。

![image](https://user-images.githubusercontent.com/13635059/51071589-e686a500-1696-11e9-9dce-96410ab0ad16.png)

# ためしがき

今日あった良かった事は、世の中の「時間泥棒」についてTwitterで他のかたとやり取りをして、iPad Proの試し書きができたことだ。


ノーモア映画泥棒って言う映画のWARNINGのようなものが関西にはあるんだけど、全国区なのかわからないい。それのコラージュで、のも時間泥棒と言う絵を1分ぐらいで書いてみた。

# やり方

やり方は、iPad ProでApple Pencilを使って絵を書いて、その画像をTwitterに送るだけだ。だけどこうやってデバイスに慣れ親しんで、いつでもスピーディーに使える体制を整えておくと、何か喋りたいとか描きたくなったときに一瞬でそれを形にできるのが本当にすばらしい。

# iPhone MacBook Ipad Pro がアウトプット表現のチャンスを変える

iPhoneやiPadやMacBookを使っていて良いと思うのは、自分が表現したくなったときに表現できると言うことなのだこれ。

最初の環境設定とか使い慣れるまでの苦労はすごくストレスフルだけど、手足が自由に動かせて、ちゃんと表現やアウトプットをすることができたときはなかなか良い快感があるな。

だから本当に僕ら、特にアウトプットやクリエイティブなことをする人は、自分が思った時に、自分が思ったようなことを表現できる体制と言うのは、たとえどんなに苦労しても整えておくべきなんだと思う。

そうしないと手足が動かせないまま、やりたいことをやりたい時にできないと、アイディアも泡沫のように消えてしまうし、なんとも人生がはかなくもったいないじゃないか。

と言うことで、1年ぐらいは買うの迷ったiPad Proだったけれど、表現の自由のためにお金を出して買って本当に良かった。そう思った話でした。

#  エンジニアと何が関係あるって？

エンジニアは主に手先が不器用だからこそ、iPHone音声入力や、iPadProなどのデバイスを使いこなしていったら良いじゃないかな。

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues

https://github.com/YumaInaura/YumaInaura/issues/343








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
エンジニアのアウトプット学習の未来は、僕らの意識ではなくツールが、筆記道具が、デバイスが変える。 Slack + iPhone 音声入力でブログを書いてみよう。

エンジニアのアウトプット学習の未来は、僕らの意識ではなくツールが、筆記道具が、デバイスが変える。 Slack + iPhone 音声入力でブログを書いてみよう。

![image](https://user-images.githubusercontent.com/13635059/51071580-a8898100-1696-11e9-8d76-4d58c405c0f4.png)

# Twitterで僕がフォローしている人に、最近文章が読みやすくなったと言われました。

前は箇条書きだったけれど最近は文章ですね!と言っていただけました。

僕自身は意識していなかったのですが、多分iPhoneでの音声入力による文字起こしを始めたのが1番影響が大きかったと思います。

やはり人間はデバイスというか、道具というか、ツールによって表現方法が依存するんだなぁと言うことを深く感じました。

# MacBook VS iPHone Voice input

MacBookエアでテキストを打ち鳴らすのと、iPhoneで音声入力をするのと、原稿用紙に万年筆でテキストを書くのとでは、本当に本当に、全く違ったものが生み出されることでしょう。

人間、言いたい事は1つで、頭の中にあるものをアウトプットするだけじゃないかと思いがちですが、実は全くそうではなくて、僕らはツールと言うものに依存して、脳が適応して、表現方法を変えるものみたいです。

いろいろなアウトプット方法を知れば知るほどに、試せば試すほど、自分自身の頭の中にあるものなんて実はちっぽけで、存在すらしなくて、ツールやサービスや枠と言うものが、脳みそに反射して成果物を生み出すんだと言う感覚が非常に強くなってきます。

# Slack + iPHone Voice input = ?

例えば今は、140文字の制約がないSlackと言うアプリケーションに直接音声入力をしているのですが、こうするとTwitterで話すときに比べて文字数が完全に自由になるので、ついついダラダラと長い文章を打ち込んで、冗長な文章になってしまっているのが自分でもわかります。

僕らの表現がツールに依存していると言うとなんだか悔しいような気もしますが、逆に環境に依存しないものはこの世の1つも存在しないことを考えると、ツールや環境を変えることで世界を変えることができるのだと思い至ります。

ツールが変われば、環境が変われば、アウトプットや人間が少しも変わらないなんて事は絶対になくて、僕らは確実に脳の中で起こる生態系のようなものが、変化するのです。ちょっと日本語がおかしくなりましたが。
いろんな実験をしていろんなツールを使っていろんな環境試してみて、自分の脳の中からいろんな生態系の生き物たちを引っ張り出したいものです。


---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues

https://github.com/YumaInaura/YumaInaura/issues/342








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
技術書の値段が高くて買いたくないって？え、ディズニーランドよりずっと安いでしょ？

技術書の値段が高くて買いたくないって？え、ディズニーランドよりずっと安いでしょ？

# 休日は1日に、スターバックスに2000円も使う男ですが何か問題でも ?

![image](https://user-images.githubusercontent.com/13635059/51071541-ec2fbb00-1695-11e9-9679-eee639c8e0a0.png)

# これは本当に値段の比較の問題なのだ。

これをカフェ目線で考えると高いと思うかもしれないが、例えば飲み会に一塊行けば、3000円から5000円ぐらいは使うだろう。

例えば遊園地に行けば10,000円から20,000円ぐらいは使ってしまうだろう。

それに比べて、1日カフェで過ごして2000円を使うと言うのは、どれだけ安くてコスパ最強な過ごし方だと思うだろうか。

# お金は比較問題

自分が何か、良くないお金をの使い方とか、贅沢をしてしまってるんじゃないかと思うときは、逆の娯楽から逆算して、自分を暗示にかける方法もあるぞ、

例えば、ディズニーランドに行くのはお金が高いけれど、海外旅行に比べればずっと安いよね、みたいな。

# 破産しないようにね

まぁこの方法で自己暗示をかけ続けると、完全にお金が破綻してしまうような気もするけどね(笑

人間はお金と言うものを比率とか比較でしか認識できない生き物、とゆうか、お金を認識できるのは人間だけなので。多分。

自分の認識をコントロールすることで、お金と言うものをコントロールできるかもしれないね。お金は比較物の問題です。

# ということで

海外旅行よりずっと安い技術書はバンバン買ってしまいましょうか‥？

誰か積読の回避方法教えてください…

![image](https://user-images.githubusercontent.com/13635059/51071548-141f1e80-1696-11e9-8de7-233d75d90a76.png)

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues

https://github.com/YumaInaura/YumaInaura/issues/341








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
絵文字の種類はたくさん存在するけれど、ごく一部しか使われない理由ってなんだろう？社会性とか自分のキャラクタとかかな。

 絵文字の種類はたくさん存在するけれど、ごく一部しか使われない理由ってなんだろう？社会性とか自分のキャラクタとかかな。

![image](https://user-images.githubusercontent.com/13635059/51071500-42502e80-1695-11e9-9ca4-50b37e0a958a.png)

# 顔の絵文字

特にスマイリーとか人間の表情を表した絵文字は、ほんの少しの口の角度の違いだけでも、ニュアンスが全く違ってくる。

だけどごく1部を除いて、なんだかどれも自分の気持ちとは違うような気がしてくるのだ。 

もっといろんな絵文字を使いこなしてみたいんだけど、口を真横にした顔の絵文字もなんだか違う気がするし、口をちょっと曲げたのも違う気がするし、ほんの少し笑ったやつも違う気がするし。

結局はニコニコマークのいくつかを使うことになる:smile::grin::laughing:

あとサングラス:sunglasses:

# 社会性と 絵文字


なんというか、本当はもっといろんな気持ちの表情があるはずなんだけど、人にメッセージを送るときに、適切か不適切を判断して、数少ない種類になっているのかもしれない。

:kissing_heart:Twitterでキスマークなんか送ったらダメ、ハートは危ない

:face_with_monocle:こいつなんで片方だけメガネかけてんのなんか
:rolling_on_the_floor_laughing:ここまで笑い転げるのもほとんどのケースは失礼なような気もするし、自分のキャラとも違う気がする

:stuck_out_tongue_winking_eye:片目を出してベロ出してそんなお茶目な表現もまずしないしなぁ

# 絵文字は消去法で利用されるかも

と言うことで世界に絵文字の種類がたくさんあるけれど、結局社会的メッセージには無難ないくつかが選ばれることになるのかも
すべての絵文字の使用率の国ごとの統計とかあったら見てみたい。割と利用率に偏りが出てくるんじゃないだろうか。

絵文字の世界はとても奥が深いとこのアラサー男性は思っている。

ようやく35歳にして、絵文字初心者の道を歩み始めたばかりだ:sunglasses:


---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues

https://github.com/YumaInaura/YumaInaura/issues/340

https://twitter.com/YumaInaura/status/1083964738969624576/photo/1









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
PHPフォーム作成で学んだこと(セッション)

#PHPフォーム作成で使ったもの（ツール）
エディタ:Atom 1.33.1 x64
ファイル共有ソフト:FileZilla
データベース確認:PhpMyAdmin
OS:Linux mint 19.1

##セッションについて
以下のような挙動で実装した。

```php:input.php

<?php
session_start();
?>



~~~~~CSS~~~~~

    <form method="post" action="confirmsankou.php">
    <div class="element_wrap">
    <label>学籍番号</label>
    <input type="text" name="your_number" value="<?php echo $_SESSION['your_number'];?>">
</div>

<div class="element_wrap">
<label>名前</label>
<input type="text" name="your_name" value="<?php echo ($_SESSION['your_name']);?>">
</div>
<div class="element_wrap">
<label>年齢</label>
<input type="text" name="your_old" value="<?php echo ($_SESSION['your_old']);?>">
</div>
    <div class="element_wrap">
    <label>備考</label>

    <textarea type="text" name="remarks" value="<?php echo ($_SESSION['remarks']);?>">
</textarea>
</div>	<input type="submit" name="btn_confirm" value="送信">
</form>

```
inputのフォームで受け取った値を、confirmsankou.phpに送信する。

confirmsankou.phpには「送信」ボタンと「戻る」ボタンがあり、セッション機能を実装していることによって、戻るボタンを押してもWebサーバ上に自動的に保存され、フォームには元の値が残ったままとなっている。

#まとめ
今後もこのようなスーパーグローバル関数や、プログラミングを効率的に行えるスキルや関数などを身に着けていきたいと思う。
間違ってサーバを切る前にターミナルを消してしまい、Failed to listen on 127.0.0.1:8080 (reason: Address already in use)が出たのでその対処法まとめ。

laravel 5.5.xでwebアプリを作っていたら間違ってターミナルを消してしまい、もう一度ターミナルからサーバーを立ち上げたら
```Failed to listen on 127.0.0.1:8080 (reason: Address already in use)```
が表示されたのでその解決策のメモ。

以下の記事を参考にした。
http://awacleberry.hatenablog.com/entry/2017/06/24/212713
https://qiita.com/Arashi/items/8b8d9d2f1f040b2aecf1

具体的には
```lsof -i:8080```
ポート番号（今回だと8080）を指定し、このコマンドでPIDを特定。
```$ kill -9 [該当のPID]```
を実行することで正常な状態に戻った。
クラウドIDE上でHerokuを扱う際のメモ書き

Railsチュートリアル （https://railstutorial.jp/chapters/sign_up?version=5.1#sec-production_webserver） を進めていて、クラウドIDE上でHerokuをインストールする方法を何度も忘れたので、メモ書き

```
source <(curl -sL https://cdn.learnenough.com/heroku_install)
heroku --version
```

gitの接続先確認

```
git remote -v
```

現在のルーティング一覧を表示

```
rails routes

   logout DELETE /logout(.:format)         sessions#destroy
    users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new
edit_user GET    /users/:id/edit(.:format) users#edit
     user GET    /users/:id(.:format)      users#show
          PATCH  /users/:id(.:format)      users#update
          PUT    /users/:id(.:format)      users#update
```

rails console上でDB操作
以下を参考にしました。
https://ruby-rails.hatenadiary.com/entry/20140724/1406142120
bash でコレ（文字列 or 変数の値 or コマンド標準出力 or ファイル内容）をアレ（コマンドライン引数 or コマンド標準入力 or 入力ファイル引数）としてコマンドに入力する方法

bash でコレをアレとしてコマンドに入力したい時がある．「コレ」とは，文字列，変数の値，コマンドの標準出力，ファイルの内容，のいずれかである．「アレ」とはコマンドライン引数，コマンドの標準入力，入力ファイル引数，のいずれかである．これら「コレ」と「アレ」のすべての組み合わせにおいて， bash でどう書けるかをまとめて表にしておくという，誰もが知っていて当然の内容なので私以外の誰も得をしないことが決定的に明らかなエントリである．

<table>
  <thead>
    <tr>
      <th>コレ＼アレ</th>
      <th>コマンドライン引数<br>(<code>echo</code> コマンドの引数を例とする)</th>
      <th>コマンドの標準入力<br>(<code>cat</code> コマンドの標準入力を例とする)</th>
      <th>入力ファイル引数<br>(<code>cat</code> コマンドの引数を例とする)</th>
    </tr>
  </thead>
  <tbody>
    <tr></tr>
    <tr>
      <th>文字列<br>(<code>Hello, world!</code> を例とする)</th>
      <td><code>echo 'Hello, world!'</code></td>
      <td>
        <code>echo -n 'Hello, world!' | cat</code><sup>1</sup><br/><br/>
        <code>cat &lt;&lt;'EOS'<br/>
Hello, world!<br/>
EOS</code><sup>2</sup> <sup>3</sup><br/><br/>
        <code>cat &lt;&lt;&lt;'Hello, world!'</code><sup>2</sup><br/><br/>
        <code>cat &lt; &lt;(echo -n 'Hello, world!')</code><sup>1</sup> <sup>4</sup>
      </td>
      <td><code>cat &lt;(echo -n 'Hello, world!')</code><sup>1</sup></td>
    </tr>
    <tr></tr>
    <tr>
      <th>変数の値<br>(変数名 <code>var</code> を例とする)</th>
      <td><code>echo "$var"</code></td>
      <td>
        <code>echo -n "$var" | cat</code><sup>1</sup><br/><br/>
        <code>cat &lt;&lt;&lt;$var</code><sup>2</sup> <sup>5</sup><br/><br/>
        <code>cat &lt; &lt;(echo -n "$var")</code><sup>1</sup> <sup>4</sup>
      </td>
      <td><code>cat &lt;(echo -n "$var")</code><sup>1</sup></td>
    </tr>
    <tr></tr>
    <tr>
      <th>コマンドの標準出力<br/>(<code>echo 'Hello, world!'</code> の標準出力を例とする)</th>
      <td>
        <code>echo "$(echo 'Hello, world!')"</code><sup>6</sup><br/><br/>
        （脚注7も参照のこと）
      </td>
      <td>
        <code>echo 'Hello, world!' | cat</code><br/><br/>
        <code>cat &lt;&lt;&lt;$(echo 'Hello, world!')</code><sup>5</sup> <sup>8</sup><br/><br/>
        <code>cat &lt; &lt;(echo 'Hello, world!')</code><sup>4</sup>
      </td>
      <td>
        <code>cat &lt;(echo 'Hello, world!')</code>
      </td>
    </tr>
    <tr></tr>
    <tr>
      <th>ファイルの内容<br/>(ファイル名 <code>file</code> を例とする)</th>
      <td>
        <code>echo "$(cat file)"</code><sup>6</sup><br/><br/>
        <code>echo "$(&lt;file)"</code><sup>6</sup> <sup>9</sup><br/><br/>
        （脚注7も参照のこと）
      </td>
      <td><code>cat &lt;file</code></td>
      <td><code>cat file</code></td>
    </tr
  </tbody>
</table>

1. <code>echo</code> の <code>-n</code> オプションを指定しないとコレの最後に改行が加わる．
2. コレの最後に改行が加わる．
3. <code>EOS</code> は bash の word として妥当な文字列であれば何でもよい．
4. コレを（最後の改行の付加など）一切の変更を加えることなくコマンドの標準入力へ流し込める． pipe による書き方も同じ要求を満たすが， pipe はコマンドが subshell で起動される一方，この書き方はコマンドが現在の shell 環境で実行されるため，この書き方が必要になる文脈がある．
5. <code>&lt;&lt;&lt;</code> の次の word は word splitting の対象とならないため quote する必要はない．
6. コレの最後において連続する改行が削除される．
7. コレを（最後において連続する改行の削除など）一切の変更を加えることなくコマンドライン引数とする方法としては https://stackoverflow.com/questions/15184358/ 等を参照のこと．
8. コレの最後において連続する改行が1つの改行に置き換わる．「command substitution の展開の際，最後おいて連続する改行が削除される」と「here string による標準入力の最後に改行が加わる」という仕様が組み合わさった結果である．
9. <code>echo "$(cat file)"</code> よりも速い（と bash のドキュメントに書いてある）．
カラフルなRust

[ggez](https://github.com/ggez/ggez)でゲームを作る際、定数で定義されている色が黒と白しかなく、少々不便に感じていた。その旨を作者に伝えると、このクレイトを紹介してくれた。(https://github.com/ggez/ggez/pull/544)
備忘録がてらこちらに残しておく。

### クレイト
https://docs.rs/chromatica/1.0.1/chromatica/css/index.html

<img width="1792" alt="スクリーンショット 2019-01-12 17.37.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/196544/d153085c-9fce-678f-e012-ae3e18e41e2e.png">


### 色のサンプル
https://www.w3.org/TR/css3-color/#html4 https://www.w3.org/TR/css3-color/#svg-color

<img width="1792" alt="スクリーンショット 2019-01-12 17.36.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/196544/71e7e19c-2b22-221e-29a4-b5aa62e02673.png">


これによってRustから青や赤あたりの彩色だけでなく、ダークグレイやライムなど様々な色が手軽に利用できる。 ただし、定義がu8なため必要に応じてキャストする必要がある。
Nuxt.js入門してみました。

新年ということで、初めてqiita書いみました。

## 環境
- OS : macOS Mojave 10.14.2
- node : v11.6.0
- npm : 6.5.0
- vue-cli : 3.3.0

Nuxt.jsにはnodeの環境と、yarnまたはnpmの環境が必要になります。(今回はyarnを使用していきます)



## 各種インストール
nodeの環境はこちらからDLして手順にしたがって導入してください　-> https://nodejs.org/ja/

```
brew install yarn
npm install -g vue-cli
npm install -g @vue/cli @vue/cli-init

#インストールされているか確認
vue -V #3.3.0
```

## VueCLIを使ってテンプレートを作成

```
# vue init テンプレート名 フォルダ名
vue init nuxt-community/starter-template test

# ↓以下質問がされるので随時対応
? Project name test
? Project description Nuxt.js project
? Author eyescream

   vue-cli · Generated "test".

   To get started:

     cd test
     npm install # Or yarn
     npm run dev
```


```
cd test
yarn #パッケージインストール
yarn run dev

# http://localhost:3000へアクセス
```


<img width="1438" alt="スクリーンショット 2019-01-12 17.36.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/304443/aa3edd72-ba7a-aa33-d7e7-709b2cc10eb3.png">
プログラミングの考え方で思うところがある話

#はじめに
プログラミングを学習開始して、はや１か月が経ちました。
この１か月でやるべきこと、やりたいことが一気に増え、「自分の時間が無いんじゃない？」と心配されていますが、そんなことはない、と自分では考えています。
基本、僕はコンピュータを触るだけで「楽しい！面白い！」と感じる人間です。
ですから、プログラミングをしている時、何かを執筆している時、新しい知識を学んでいる時、パソコンの前やスマホ、タブレット、ゲームをしている時は、「自分の時間」と定義しています。(記事執筆は怪しくなってきましたが)
あまりこの記事には関係のない話ですが、今の考え方をアウトプットしてみることもどうか、と考えて記述しました。

#プログラミングを学んでいて
この１か月でプログラミングを学んでいて、最も大きな収穫が、「エラーの解決法」を発見したことです。
そのことに気づけた機会は、自分でPHPのデータベース連携フォームを作成していたことに起因します。

##エラーの解決
PHPフォーム制作に取り掛かり、自分では何とか動かせるようなコードを書いたつもりで実行してみました。
すると、
・ブラウザ上に何も表示されない
・MySQLへの命令を書いているはずなのに、思ったとおりの挙動をしてくれない。
などの問題が発生し、そのエラーの解決に２週間もの時間をかけてしまいました。
なぜそこまで時間がかかったのか、原因ははっきりしています。
「エラーの解決法」を知らなかったからです。

##具体的なエラーの解決法
これはプログラミングをする上で当たり前のことですが、過去の僕は実践していません（反省）

・コードをじっくり見て、一つ一つの挙動、どこにどのようなアクションを起こしているかを把握する。
・エラーが出た場合は、まずググり、エラーの内容を把握する。
・とにかくググる、質問する。

といった解決法を実践してみたら、3日と経たずにフォームが完成しました。

##まとめ
以上、自分なりにまとめてみたエラー解決法です。
Ruby入門まとめ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/257568/a3b36ebf-8806-0508-4d09-132d35f9c826.png)

覚えておきたいことをまとめ(随時追加)

## 全てがオブジェクト
- オブジェクト.メソッドで呼べる事
- 文字列、配列、数値だけでもメソッドして呼べる
- この特徴は最初にプログラミングはじめる人が聞いてもよく分からない

## メソッドの引数に括弧の有無自由 

## メソッド内最後式の評価が返り値
最後にリターンいらない

## Rubyでは、falseとnilを除くすべての値が真

## Rubyでは、変数はオブジェクトへの参照
変数を別の変数に代入して、代入後の変数を再代入すると最初に作った変数の値も変わる

## module
### 使い所
- 複数のクラスに対しての共通のクラスメソッドのミックスイン
- 名前衝突防止の名前空間
- シングルトンオブジェクトの作成

## :: 
### 使い所
- 名前空間の区切り
- 定数の参照

## ||=
左辺が未定義または偽なら代入
(イディオムと呼ばれる)
### 使い所
1つの比較条件だけのとき

## attr_reader :シンボル名
getterの定義。インスタンス変数と対応する。

## 多重代入
左辺に複数の変数、右辺に配列で一気に格納できる
a, b = [1, 2]

## <<~
ヒアドキュメント

## %w
配列

## %i
シンボルの配列

## require_relative
相対パスで指定できる

## "#{@変数}"
ダブルクォートで変数の文字列展開

## 可変長引数(配列)
```
def hage(hair1, hair2, *hair3)

end
```

## ensure
begin rescueでどちらのブロックに入ったあとでも入る

## map
要素ごとにやって欲しい処理を外から渡す

## 書籍情報
伊藤 淳一, プロを目指す人のためのRuby入門
https://amzn.to/2soc82h

## 雑感
他言語から入った際に感じるRubyの特徴をメモ
括弧なしはすごい英文意識して書けば文章みたいでなんかすごい
混在していると一貫性がなくて困惑する
Lightningで添付されたファイルをapexから参照する方法

# きっかけ
Salesforceでレコードに登録されたメールアドレスにレコードの添付ファイルを自動で送りたかった。

# 起こった問題
最初は「Attachment」のオブジェクトからデータを取得しましたが、使用していた環境がLightningだったためこのオブジェクトには添付ファイルが保存されていませんでした。

#どうしたか
調べるとLigtningでは「ContentDocumentLink」と「ContentVersion」を使うと添付ファイルをApexのコードで使うことができます。
実際のコードは以下の通りです。

```apex:getFile.apxc
List<ContentDocumentLink> links = [SELECT ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId = :任意のID];
List<String> ids = new List<String>();
for(ContentDocumentLink link : links){
	ids.add(link.ContentDocumentId);
}

for(ContentVersion file : [SELECT Title , FileType, VersionData FROM ContentVersion WHERE IsLatest = True AND ContentDocumentId in :ids]){
   System.debug('ファイル名:' + file.Title + '|型：' + file.FileType);
}
```

実際のファイルを使うには「VersionData」のプロパティを参照するとファイルの中身が取得できます。
詳しい「ContentVersion」のオブジェクトについては以下を参照してください。

[ContentVersionの詳細](https://developer.salesforce.com/docs/atlas.ja-jp.api.meta/api/sforce_api_objects_contentversion.htm)
ファイルパーミッション(FilePermition)まとめ

##ファイルパーミッションとは
パーミッション(permission)とはファイル一つ一つまたはディレクトリに対するアクセス権のこと。
Webサーバーは UNIX と呼ばれるOSを使用したシステムが多く使われており、ネットワークに接続することでさまざまなコンピュータからアクセスされることになる。その際、外部の人が勝手にファイルを書き換えたりできないようにファイルにアクセス許可属性を指定する必要がある。その属性のことをパーミッションと呼ぶ。

##パーミッション設定種類
- 設定対象ユーザー　
- パーミッション(許可内容)　


 **対象ユーザー**

| シンボル |  認定対象|
| :---:| :---: | 
| u | 所有ユーザ（user） | 
| g | 所有グループ(group) | 
| o | その他のユーザ(ohters) | 
| a| 全てが対象(all)| 
| 認証なし| 何も設定指定しない場合は全てが対象となる| 

**パーミッション(許可内容)**

| シンボル |  数値 | 許可内容 |
| :---:| :---: | :---: | 
| r | 4 | 読み込み許可|
| w | 2 |書き込み・変更許可 |
| x | 1 |実行許可| 


**シンボルと数値のパーミッション対応表**
[![Image from Gyazo](https://i.gyazo.com/aed96f8ae09a8461b943fce76244f7fd.png)](https://gyazo.com/aed96f8ae09a8461b943fce76244f7fd)


##一般的なパーミッション設定
ページで使用するファイル：全て 「読み取り」 許可属性を指定
CGI のファイル：「実行」 許可属性を指定。
ライブラリなど他のプログラムから呼び出されるファイル：「読み込み」許可 属性を指定
ログファイルなど動的に保存されるファイル：「書き込み」 属性を指定

（例）
HTMLファイル , 画像ファイル  →　６４４ rw-r--r--
CGI実行ファイル  →　７５５ rwxr-xr
CGIが格納されているディレクトリ → ７５５ rwxr-xr-x 
CGI　JavaScript のライブラリ  →　６４４ rw-r--r-- 
ログなどの保存用ファイル  →　６６６ rw-rw-rw- 

##パーミッション変更コマンド

~~~
$ chomod [option] [mode] [file/directory]
~~~
（例）
testディレクトリのパーミッション「777」を変更。

~~~
$ chmod 777 test
~~~
-Rオプションを指定して「test」ディレクトリのパーミッションを「755」に設定。

~~~
$ chmod -R 755 test
~~~

##参考URL
https://www.server-memo.net/tips/command/chmod/chmod.html
NodejsでInkbird IBS-TH1 (BLE温湿度センサー) から温度湿度情報を得る


## はじめに
Bluetooth(BLE)で飛ばせる温度計としてAmazonで売ってる[Inkbird IBS-TH1 mini](https://www.amazon.co.jp/Inkbird-%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC-%E3%83%9F%E3%83%8B%E6%B8%A9%E6%B9%BF%E5%BA%A6%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AD%E3%82%AC%E3%83%BC-Bluetooth-%E6%B8%A9%E6%B9%BF%E5%BA%A6%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC/dp/B07C3KNRV4/ref=pd_lpo_vtph_328_bs_t_1?_encoding=UTF8&psc=1&refRID=XV7H66DY3VJ77ZNKGV6P) のデータを、RasberryPIからnodejsを使って読み取ってみました。

## 開発環境
- Central: Rasberry Pi3 B+ (Raspbian)
- Peripheral: Inkbird IBS-TH1 mini
- nodejs: v8.15.0 + noble

## データフォーマット
[こちら](https://gist.github.com/onderweg/4e17a37cf00219e10645e6ff4fdcf65b)参照しました。9バイトのデータが送られてきており、1，2バイトが温度、3，4バイトが湿度データ、8バイト目がバッテリー残量のようです。


## コード
```javascript:inkbird.js
const INKBIRD_ADDR = 'xx:xx:xx:xx:xx:xx'; //IBS-TH1のアドレス
const INTERVAL = 5 * 60 * 1000;  //5分おきにスキャン

var noble = require('noble');

noble.on('stateChange', function(state) {
  if (state === 'poweredOn') {
      noble.startScanning();
  } else {
      noble.stopScanning();
  }
});

noble.on('scanStart', function() {
  console.log('scanStart');
});

noble.on('scanStop', function() {
  console.log('scanStop');
});

noble.on('discover', function(peripheral) {
  var buf = peripheral.advertisement.manufacturerData;
  if( peripheral.address == INKBIRD_ADDR){
  	var t = buf.readInt16LE(0) / 100;
  	var h = buf.readInt16LE(2) / 100;
  	var b = buf[7];
  	console.log('[discover IBS-TH1] temp:' + t + ' degree, humidity:' + h + '%, battery:' + b + '%\n');
	noble.stopScanning();
  }
});

setInterval(function() {
	console.log('Start scanning..');
	noble.startScanning();
}, INTERVAL);

```

## 実行
``` 
$ sudo node inkbird.js
scanStart
[discover IBS-TH1] temp:16.47 degree, humidity:45.78%, battery:14%

scanStop
```
現在は冷蔵庫内の温度記録に使っています。冷蔵庫内からRaspberryPIまで10mほどありますが、問題なく受信できています。
![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/175355/4dbcc84d-a2d2-ba27-284a-0e2a6e20268a.jpeg)


## 終わりに
本体内蔵のデータロガーを使うとバッテリー消耗が早いようなので、あらかじめスマホアプリでデータログ間隔を最長の30分に設定しておくとよいようです。CR2032で1ヶ月以上駆動しています。
Iframely で外部サイトのサムネイル付きリンクを設置 - Hugo

![iframely.jpg](https://qiita-image-store.s3.amazonaws.com/0/285675/3ba3d7a5-e17d-621a-6bf0-4946d371e380.jpeg)

こんな感じで外部サイトのサムネイル付きリンクを設置することができます。無料で利用可能で対応サイトも多くて素晴らしいサービス。下のリンク先で埋め込みリンクを作成できます。

- 👉[Responsive Embed Codes via Iframely](https://iframely.com/embed)

![code.jpg](https://qiita-image-store.s3.amazonaws.com/0/285675/78a9fd58-3099-c1e4-d110-7892b61499b3.jpeg)

URL を入力するとコードが生成されるので、これを Markdown ファイルに書いて Hugo でビルドすればオッケーです。

```html
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
```

`<script ...>...</script>` の部分は一つの記事に複数も書く必要はないので、記事の一番下に一つだけ書けば十分です。



## Links

- [Iframely - Embeds codes for today's Internet](https://iframely.com/)
- [itteco/iframely: oEmbed proxy. Supports over 1800 domains via custom parsers, oEmbed, Twitter Cards and Open Graph](https://github.com/itteco/iframely)

Open Source Software として開発されているらしい。
Linux引数(オプション)のハイフン-と--の違い

##Linux引数(オプション)のハイフン(ダッシュ)-と--の違い
【UNIXスタイル】 

- ハイフン１つ(-)ではじまる
- オプションは英数字１文字の省略形
- 全てのオプションは省略できる

（例）

~~~
$ ls -a
#複数オプションをまとめて指定できる
$ ls -aF
~~~

【GNUスタイル】
GNU = UNIXと互換性のあるシステムソフトウェア。完全にフリーなUNIXライクなOSを開発するために、1984年にスタートしたソフトウェア開発プロジェクト。

- ハイフン２つではじまる
- オプションの省略形は不可

~~~
$ ls -all
#複数オプションを指定する場合はスペースを空けて続ける
$ ls --all --classify
~~~

 **※POSIX規格のガイドラインではハイフン１つと省略形の記述があり、Unixスタイルが推奨されている** 
POSIX = Unix を始めとした各種の OS で移植しやすいプログラムを作成するための国際規格で、 IEEE, The Open Group によって策定、認証される。 コマンドラインプログラムのインターフェースについてもPOSIX で規定されている。

##【2020.1 追記】ハイフン(ダッシュ)なしのオプション
【BSDスタイル】
psコマンドに関しては、UNIXスタイル、GNUスタイルに加えて、BSDスタイルが存在する。

- ハイフンはつかない
- オプションは英字１文字の省略形

~~~
$ ps a
#複数オプションをまとめて指定できる
$ ps aux
~~~

※スタイルによって表示結果の表記も変わる
参考：https://sechiro.hatenablog.com/entry/20120805/1344139544
東京公共交通オープンデータチャレンジ　あと四日

#概要

東京公共交通オープンデータチャレンジの、バスapi叩いて見た。
バス路線をマップで表示してみた。

#写真

![](http://jsdo-static-contents.s3.amazonaws.com/images/capture/C/9/F/C9FU.jpg?t=1547202921)

#成果物

http://jsdo.it/ohisama1/C9FU

以上。
sshの秘密鍵パスフレーズの確認と変更

**秘密鍵ファイルにパスフレーズが設定されているかの確認**

~~~
$ ssh-keygen -yf ~/.ssh/秘密鍵ファイル名
~~~

パスフレーズが設定されていない場合
→秘密鍵を元に作成された公開鍵が出力される。

パスフレーズが設定されている場合
→パスフレーズの入力を求められ正しいパスフレーズが入力されれば同様に公開鍵が出力される。

**秘密鍵ファイルのパスワードを変更する**

~~~
$ ssh-keygen -f 秘密鍵ファイル名 -p
~~~
古いパスフレーズと新しいパスフレーズを聞かれる
パスワード設定を解除する場合はEnterのみでok
レガシーコードを扱うための参考文献

### はじめに

Web、アプリ開発も新規開発は少なくなり追加開発の比重が増えているかと思います。最新のフレームワークを使う新規開発に比べ、追加開発のような地味で後ろ向きな開発はあまり派手な情報は出回りません。が、その中で役に立つ文献を何冊かピックアップしました。

### 「派生開発」を成功させるプロセス改善の技術と極意

[「派生開発」を成功させるプロセス改善の技術と極意-清水吉男](https://www.amazon.co.jp/dp/4774132497)

　組み込み開発は前機種からのソースコードに追加、修正して開発する場合がほとんどです。
その場合に問題になるのが以下の3つです。

- どこを修正すれば良いか。
- 修正すればどこまで影響が出るのか？
- そもそも何を変更して、何を変更すべきではないか？
    
　これが理由でプロジェクトが予想以上に遅延および成果物の品質が低下します。
この問題に対応するために編み出されたのがXDDPという手法です。

　詳細はググればわかるのですが、主にWhat(仕様)、Where(変更箇所)、How(変更方法)をコーディング前にあぶり出す手法です。

　成果物のガチガチに決まった組み込み向けの開発手法なので、Web開発でそのまま適用するのは難しく、地味な内容が故にチームで取り組むのは難しいですが、個人の思考ツールとして観点だけでも応用するだけでもそれなりの成果がでます。

### テスト駆動開発による組み込みプログラミング ―C言語とオブジェクト指向で学ぶアジャイルな設計

[テスト駆動開発による組み込みプログラミング ―C言語とオブジェクト指向で学ぶアジャイルな設計](https://www.amazon.co.jp/dp/4873116147)

組み込み向けのテスト駆動開発の本ですが、30ページ程レガシーコードの改善に割かれており大変読みやすく要点がコンパクトにまとまっています。

レガシーコード改善ガイドが分厚くて読みにくい場合は参考になるかと思います。

### プログラムスライシング技術と応用

[プログラムスライシング技術と応用](https://www.amazon.co.jp/dp/4320027434)

2000年問題対応で使われた手法。読んでみたいがプレミアがついている。手法の一部は経験則で編み出して活用していると思う。

### レガシーソフトウェア改善ガイド

[レガシーソフトウェア改善ガイド - クリス・バーチャル (著), 吉川邦夫 (翻訳)] (https://www.amazon.co.jp/dp/B01MSLAFPT)

　ビジネス的判断からリファクタリングするか、リアーキテクティング、ビッグ・リライトを選択するための指針が書かれています。

単なるエゴ、興味、クセからリライトを選択しがちですが、大事なのは状況に応じて的確に判断することです。本書はこのための重要な指針を示してくれます。

### 組込みソフトウェア開発のためのリバースモデリング (組込みエンジニア教科書) 

[組込みソフトウェア開発のためのリバースモデリング (組込みエンジニア教科書)](https://www.amazon.co.jp/dp/4798113743)

ソースの解析、現状の設計情報(アーキテクチャ?)の抽出、立て直し方法を体系的に解説した本になります。
観点はWeb、アプリでも役に立つはずです。

### 『チームで育てるAndroidアプリ設計』

[チームで育てるAndroidアプリ設計](https://peaks.cc/books/architecture_with_team)

### 進化的アーキテクチャ――絶え間ない変化を支える 

[進化的アーキテクチャ――絶え間ない変化を支える]
(https://www.oreilly.co.jp/books/9784873118567/)

まだちゃんと読んでいないが、つまる所、レガシーコードは事業と現状のコードの剥離と言う事で。

### 番外編 プログラマーのためのソースコードを読む技術

[プログラマーのためのソースコードを読む技術]
(https://www.amazon.co.jp/dp/477414293X)

何はともあれ、人のソースコードが読めなければどうしようもありません。ソースコードを読むための技術が書いてある本。初心者向け。

### 追記

レガシーコードをベースにした開発手法については、長年、この種の問題に苦しめられてきた組み込み業界の方がノウハウが多いです。
後、レガシーコード改善ガイドは除いています。あまりに有名で色んな方が書評しており、特にここで評価する必要性はないので。。。
Qiitaはコメントスパムを違反報告できないシステムのようだ？

Qiitaはコメントスパムを違反報告できないシステムのようだ？

# 追記

解決した！

[[Qiita]コメント単位での通報方法 - Qiita](https://qiita.com/tommy_aka_jps/items/7c3ef5efada5d51ac626)

# 記事本体

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/cea30ae8-bd09-d0cd-ecb5-f31929b91e8b.png)


# コメント

身を粉にして探しても見当たらないのだけど‥なぜ？


![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/7db7bbee-0335-2a02-2751-d88a31d01560.png)



[ZOZO大忘年会の FireBase で大規模アンケート！ 費用2円だった話を5分でまとめたい記事。 - Qiita](https://qiita.com/YumaInaura/items/a2d23bbb0b5db9b91a2f#comment-6ea61bc0c034a5169f1c)

# 感想

ユーザー入力ができるものすべては、わかりやすい場所から違反報告などをできなければいけない気がする。

# なんか大量に来た

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/95199ad0-26b4-e0b3-a342-9a7fbed70c49.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/60ac8814-b145-8830-56eb-999b846318b3.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/dad66a1c-fa6b-167e-2981-d34e66b5de34.png)









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->