OmniAICreator/Qiita-1.07M huggingface dataset:
#Centos 6 .10 + #docker で yum install がエラーで落ち curl さえ clould not resolve host とかわけの分からないことを言い出したが service docker restart で直った件

表題の通り。

# Error

こんなん。

```
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM centos
 ---> ee2526f4865b
Step 1 : COPY . ./
 ---> 3003a20f114b
Removing intermediate container aa06ae32b2ce
Step 2 : RUN yum install -y vim sudo &&   cp ./google-cloud-sdk.repo /etc/yum.repos.d/ &&   sudo yum install -y google-cloud-sdk
 ---> Running in f5f5fef98f9c
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors


 One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.

     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).

     3. Run the command with the repository temporarily disabled
            yum --disablerepo=<repoid> ...

     4. Disable the repository permanently, so yum won't use it by default. Yum
        will then just ignore the repository until you permanently enable it
        again or use --enablerepo for temporary usage:

            yum-config-manager --disable <repoid>
        or
            subscription-manager repos --disable=<repoid>

     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

Cannot find a valid baseurl for repo: base/7/x86_64
```

# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
メールの文字コードは「ISO-2022-JP-MS」じゃなくて「UTF-8」でもいいらしい

PHPのメール送信で検索すると「ISO-2022-JP-MS」に文字コードを変換して送信するコードが多かったので
「ISO-2022-JP-MS」でないといけないと思い込んでいました。

#「UTF-8」でのメール送信

```
<?php
$defaultLanguage = mb_language();
$defaultEncoding = mb_internal_encoding();

mb_language('uni');
mb_internal_encoding("UTF-8");

$to = '送信先メールアドレス';
$subject = '件名';
$body = '本文';
$header = 'From: 送信元メールアドレス';

mb_send_mail($to, $subject, $body, $header);

mb_language($defaultLanguage);
mb_internal_encoding($defaultEncoding);
```

mb_language()の設定が'Japanese'になっているコードよく見るけど
'uni'に直した方が良さげ。（多分）
https://www.php.net/manual/ja/function.mb-language.php

#「UTF-8」と「ISO-2022-JP-MS」
そもそもなんで「UTF-8」で送信したかったかと言うと、「ISO-2022-JP」では第３、第４水準の文字に対応していないらしく、
人名を送信した時に「？」に文字化けする文字があったから。「UTF-8」だと文字化けせずに送信できた。

ただ、「UTF-8」はメーラーによっては対応していないものもあるらしいので、
古いガラケーとかにも対応したいなら「ISO-2022-JP-MS」の方がいいのかも。

SendGridでは「UTF-8」で送信しているみたいなので、一般的な環境では「UTF-8」で問題なさそうですが。
https://sendgrid.kke.co.jp/blog/?p=8400
https://sendgrid.kke.co.jp/blog/?p=10958


文字種に対応したいなら「UTF-8」
古いメーラーにも対応したいなら「ISO-2022-JP-MS」

みたいな使い分けで考えていいかな？
文字コードよくわからん。
Tensorflow-gpuをインストールする際のCUDAとcuDNNの選び方

今回いろいろとtensorflow-gpuの導入に戸惑ったので備忘録
importしてもモジュールがありませんとやらでCUDAとCUDNNちゃんといれたのに！ってなってた。
結局はバージョンが対応してない者同士を入れていたせいなんだよね、当たり前だよね。
各種のダウンロードの仕方とcuDNNの移し場所はいろんな人が載せているのでそちらを参照するように。
#自分のtensorflow-gpuのバージョン確認
当方win10なのでプロンプトの方を使った

pip listで自分のバージョンを確認する

```
pip list
```

いろいろなバージョンが出てくるので目的のtensorflow-gpuを探す
今回は1.13.1だった
#対応バージョンの確認
CUDAとcuDNNにはそれぞれ対応したバージョンがあるらしい
↓対応したものが乗っている公式サイト
[https://www.tensorflow.org/install/source#common_installation_problems]
探してみるとtensorflow_gpu-1.13.1に合ったものはそれぞれCUDA10.0cuDNN7.4だった
これらを公式サイトからダウンロードして古いものをアンインストールしてからインスコし直した
ちなみに古いバージョンのcuDNNが欲しい時は公式ページの下の方にある
Archived cuDNN Releases
で過去のバージョンをダウンロードできるよ
#確認

```ruby:sample.py
>>import tensorflow as tf
>>print(tf.__version__)
1.13.1
```
こんな風に表示出来たらおっけ
出来なかったらパスとか確認し直すといいかもね
[自分メモ] FuelPHPを初めてみる

## インストール

取得先は`get.fuelphp.com/oil`じゃなくhttpsにしないといけない。
今回は`fuel_practice`という名でプロジェクト作成。

```
$ curl https://get.fuelphp.com/oil | sh
$ oil create fuel_practice
```

ひとまずフォルダができました。

## ディレクトリ構成

基本的に`fuel/app`以下を編集していく感じっぽい。

```
$ cd fuel_practice
$ tree -L 2 .
.
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── TESTING.md
├── composer.json
├── composer.lock
├── composer.phar
├── docs
│   ├── assets
│   ├── classes
│   ├── composer.json
│   ├── contribute.html
│   ├── credits.html
│   ├── favicon.ico
│   ├── favicon.png
│   ├── general
│   ├── index.html
│   ├── installation
│   ├── license.html
│   ├── packages
│   ├── requirements.html
│   ├── templates
│   ├── toc.html
│   └── vendor
├── fuel
│   ├── app
│   ├── core
│   ├── packages
│   └── vendor
├── oil
└── public
    ├── assets
    ├── favicon.ico
    ├── index.php
    └── web.config

15 directories, 21 files

```

## hello world 表示まで

### 設定

メインの設定は `app/config/config.php` 

日時設定と、言語設定

```
'language'           => 'ja'
'locale'             => 'ja_JP.UTF-8',

'default_timezone'   => 'Asia/Tokyo',
```

### ルーティング

doc: http://fuelphp.jp/docs/1.9/general/routing.html

連想配列で定義される。

基本は以下の形っぽい。

```
[ 
  ...
  '[パス]' => '[controller/action]',
  ...
]
```

一応`/hello`にアクセスすると、`Hello World`と表示されるページが準備されている。

今回は、ルートパスで自作のindexページを表示したいので、

```
'_root_' => 'index/index',
```

と書き換えておく。

### controllerとview作成

doc: http://fuelphp.jp/docs/1.9/packages/oil/generate.html

`php oil g controller [コントローラ名] [アクション名]`と叩くと、コントローラとビューが生成される。

```
$ php oil g controller index index
```

作成されたファイルは

* app/views/template.php
* app/views/index/index.php
* app/classes/controller/index.php

共通レイアウトは、`template.php`で、その中の`$content`にview/index/index.phpが呼ばれているぽい。

デフォルトではテンプレートエンジンは使っていないみたい。

`view/index/index.php`に`Hello World`と入力し、保存。

ひとまず、作成完了。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/168990/9ae76a86-5cce-6e98-5727-931b868d7e55.png)
Node.jsをアップデートしようとした際にnpm-cli.jsがエラー吐きまくる件

きっかけはNginx+UnicornでRailsを動かそうとした時に
Unicorn周りではまってしまったので、一旦

```
rails -s
```
でサーバーを起動しようとした時のこと


webpackerがインストールされていないというエラーを吐き始めた。

```
Webpacker configuration file not found /xxx/Rails/yyy/config/webpacker.yml. 
Please run rails webpacker:install 
Error: No such file or directory @ rb_sysopen - 
/xxx/Rails/yyy/config/webpacker.yml (RuntimeError)
```

webpackerを入れようとすると、

```
$ bundle exec rails webpacker:install

Webpacker requires Node.js >= 6.14.4 and you are using 5.10.1
Please upgrade Node.js https://nodejs.org/en/download/
```

Nodeをアップデートするようにとのこと。

NPMをアップデートしようとすると、

```
$ npm update -g npm
/xxx/.nodebrew/node/v5.10.1/lib/node_modules/npm/bin/npm-cli.js:85
      let notifier = require('update-notifier')({pkg})
      ^^^

SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:146:18)
    at node.js:404:3
```

Nodeのバージョンが5.10.1と古く、letが使えないということなので、


https://qiita.com/gaikitan/items/406d6c4b1ccd1733318a
を参考にNodeを一度アンインストールしました。

```
$ which node
→ /usr/local/bin/node

rm -rf /usr/local/bin/node
// NPMも削除
rm -rf ~/.npm
```

そしてNodeをインストールし直しました。
(brewとnodebrewはもう入っていました)

```
$ brew -v
Homebrew 1.9.2
$ nodebrew -v
nodebrew 0.9.6
```

```
// バージョン確認
$ nodebrew ls-remote
$ nodebrew use v10.15.3
$ node -v
v10.15.3

```

```
$ rails s
```

して、localhostにアクセスすると無事RailsのHello Worldが表示されました。
AWS SAM内にLambda Layersを定義する方法(Python言語編)

# 概要
2018年の11月末に、AWS Lambdaに新しい機能 `Lambda Layers` が追加されましたが、
SAMで使うにはどうすればいいのということで、その方法を書いていきます。

SAM内にLayersを定義することの利点ですが、
LayersをSAMで管理することによって、他のLambda関数と同時にAWSにデプロイすることができるようになります。
また、ローカルでのSAMのテスト等で、開発中のLayerを使用することができるようになります。

# ファイル構成・記述内容

##ファイル構成
構成はこのようにします。

```
XXXXXX(任意のフォルダ名)
├ template.yaml  → SAMテンプレート
├ regist_record  → Lambda関数用フォルダ
│  └ app.py      → Lambda関数用のPythonソース
└ layer          → レイヤー格納用フォルダ
   └ python      → Python言語のレイヤーであることを示すフォルダ(名前は必ずpythonにすること)
      ├ XXXX_util.py       → python用の共通処理
      └ XXXX_settings.py   → 同上
```

## 記述内容

### SAM Template
SAMテンプレートは以下のように記述します。

``` yaml:template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
 A serverless application of XXXXXXX

Resources:
 RegistRecord:
   Type: AWS::Serverless::Function 
   Properties:
     CodeUri: regist_record/
     Handler: app.lambda_handler
     Runtime: python3.7
     FunctionName: regist-record
     Role: arn:aws:iam::(アカウント名):role/(ロール名)
     Environment: 
       Variables:
         ENV: dev
         XXXXXX_TABLE_NAME: xxxx_record_t
         XXXXX_URL: https://sqs.ap-northeast-1.amazonaws.com/XXXXXXXXXX/YYYYYYYYYY
     Events:
         (省略)
     Layers:
     - !Ref CommonLayer
 CommonLayer:
   Type: AWS::Serverless::LayerVersion
   Properties:
     LayerName: XXXX_common-layer
     Description: Common Application Resource Layer
     ContentUri: layer
```

続いて解説です。
`RegistRecord` の中に、`Layers`という項目がありますが、そこにLayerの情報を定義することによってLambdaFunctionからLayerを参照させることが可能になります。
`!Ref`の値はLayerのリソース名(ここでは`CommonLayer`)に合わせてください。
また、ContentUriには、実際にLayerを格納しているフォルダ名(`layer`)に合わせてください。

`Events`はLambdaの呼び出し元に応じて設定してください。

### Pythonファイルからの呼び出し方
結論からですが、同じディレクトリ階層にあるものとして、Pythonソース内からimportします。

以下のような感じです。

```python:regist_record/app.py
from XXXX_util import XXXX_util
from XXXX_settings import XXXX_settings

```
php-master-changes 2019-04-05

今日は zend_is_identical() が int でなく zend_bool を返すようにする修正、JIT での === と !== の生成コード修正、typo の修正、smart branch の最適化、*BSD での JIT のレジスタダンプの修正があった！

# 2019-04-05
## dstogov: Make is_identical() functions return zend_bool (instead of int)
- https://github.com/php/php-src/commit/9038d5c6ee223027dde2e9e69e24e7d3c04e8af2
- [7.4~]
- zend_is_identical() （`===` とかに使われる）が int でなく zend_bool を返すよう修正
- なお zend_bool は unsigned char の typedef

## javiereguiluz: Fixed a typo
- https://github.com/php/php-src/commit/3b4d9f9d9ebd2a4f8949c79b9734772e22cb7b7b
- ext/opcache/jit で、Dmitry 御大の typo を別の人が修正

## dstogov: Optimized "smart branch" instructions
- https://github.com/php/php-src/commit/d6848625d7309b76377aa50b07a5bbdb6779c042
- [7.4~]
- [smart branch](https://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html#smart-branches) で ZEND_VM_SMART_BRANCH() 使ってた箇所を ZEND_VM_SMART_BRANCH_TRUE() へ流すパスと ZEND_VM_SMART_BRANCH_FALSE() へ流すパスで分けるようにして最適化

## dstogov: Fixed JIT for === and !==
- https://github.com/php/php-src/commit/df6709f480ce2d53b9944ffdf29e7a8ecad9d551
- ext/opcache/jit で、`===` と `!==` の生成コードを修正

## devnexen: JIT register dump, fix BSD build.
- https://github.com/php/php-src/commit/5247a0bc6662582b1257738833fab06b230df01e
- ext/opcache/jit で、*BSD でのレジスタダンプを修正

## staabm: typo
- https://github.com/php/php-src/commit/87b62fe7bc666294d96dbf6e4a5d20f1f8cb5d80
- [7.4~]
- ZEND_VM_SMART_BRANCH_FALSE が ZEND_VM_SMART_BRANCH_FASLE になっていた typo を修正
DockerでAlpineベースのイメージにreviewdogをインストール

# Alpineへのreviewdogのインストール手順

公式の通りダウンロードして実行権限を付与

```sh
apk add --no-cache curl

curl -sfSL https://github.com/haya14busa/reviewdog/releases/download/0.9.11/reviewdog_linux_amd64 -o /usr/local/bin/reviewdog
chmod +x /usr/local/bin/reviewdog
```

ただ、これだけだとAlpine環境では以下のようなエラーが出てしまう。

```sh
/ # reviewdog
sh: reviewdog: not found
```

原因は `/lib64/ld-linux-x86-64.so.2` がないことで、 `/lib/libc.musl-x86_64.so.1` で代替できるのでシンボリックリンクを貼ることで解決する。

```sh
mkdir /lib64
ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
```

## Dockerfile

上記の手順をDockerfileに落とし込むとこのような感じになる。

```dockerfile:Dockerfile
FROM alpine

# インストールしたいreviewdogのバージョン
ENV REVIEWDOG_VERSION 0.9.11

# reviewdogをインストール
RUN apk add --no-cache curl
RUN curl -sfSL https://github.com/haya14busa/reviewdog/releases/download/$REVIEWDOG_VERSION/reviewdog_linux_amd64 -o /usr/local/bin/reviewdog
RUN chmod +x /usr/local/bin/reviewdog

# 依存解決のためにパスを保管
RUN mkdir /lib64
RUN ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
```

## 参考

- https://github.com/reviewdog/reviewdog
- https://stackoverflow.com/questions/34729748/installed-go-binary-not-found-in-path-on-alpine-linux-docker
- https://qiita.com/MiCHiLU/items/1e80a5325b2746eaf2d4
マークアップエンジニアに必要な技術

マークアップエンジニアとして約4年間働いてきました。そして、これからはフロントエンドエンジニアとして静的なWebサイトから、動的なWebアプリケーションを作成する仕事に変わります。

そこで、4年間のまとめとして、マークアップエンジニアとして学んだことを書いてみようと思います。

これからエンジニアになる、もしくは目指す方のお役に立てれば幸いです。

## マークアップエンジニアとは？
マークアップエンジニアとは、HTML・CSS・JavaScriptを使い静的なWebサイトをつくる人です。人によってはデザインまでやるひとや、PHP等のサーバーサイドまで対応するひともいますが、ぼくの業務範囲ではそれらはありませんでした。

### 作業の流れ
1. デザイナーからデザインカンプをもらう
2. デザインカンプを文書構造に変換し、マークアップしていく
3. マークアップにスタイルを当て、見た目をデザインカンプに近づけていく
4. アニメーションや動的な部分をJavaScriptで実装していく
5. ターゲットブラウザでの表示崩れやバグがないか確認していく
6. テストサーバーにデータをアップし、デザイナーやディレクターに確認してもらう
7. 問題なければ、お客様に展開（提出）する
8. テストサーバーで問題がなければ、本番環境にデプロイし公開
9. 打ち上げ

プロジェクトごとに多少の違いはありますが、基本的にこのような流れで作業を進めていきます。いわゆるウォーターフォール型の開発が多かったです。

上流から参加したプロジェクトもありました。その時は、構成やワイヤーフレームをみながらHTML・CSS・JavaScriptで実装可能かどうかをエンジニア目線でレビューするだけではなく、ユーザー目線での改善案を提案したりもします。

## 手に入れたスキル
- セマンティックなHTMLのマークアップ
  - Pug、EJSよる効率的な開発
  - WAI-ARIAによるアクセシビリティ対応
- デザインカンプになるべく近づけていくCSSの表現力
  - SCSSによる効率的な開発
- アニメーションや動的な部分をJavaScriptで実装
  - ECMAScript2015+をbabelでトランスパイル
- Gitによるバージョン管理
- Gulpやwebpackでのタスク管理
  - サーバーサイドJavaScriptをちょろっと

### HTML
マークアップはWebサイトの基本です。セマンティックなマークアップはSEOでも有利ですし、アクセシビリティ性も高くなります。デザインカンプをみて、適切なアウトラインを考えましょう。

```HTML
<!-- アウトラインが整ったHTMLの例 -->
<section>
  <h1>大見出し</h1>
  <p>リード文</p>
  <section>
    <h2>中見出し</h2>
    <p>本文</p>
  </section>
  <section>
    <h2>中見出し</h2>
    <p>本文</p>
  </section>
</section>
```

HTMLに慣れてきたら、効率化のためにPugやEJS、Nunjucksを使ってみましょう。

### CSS
CSSは各プロパティを覚えてデザインを再現することも大切ですが、同じくらい設計も大切になってきます。

#### 有名なCSS設計
- OOCSS
- SMACSS
- FLOCSS
- BEM
- ECSS

このあたりの入門書としては、少し古いですが[Web制作者のためのCSS設計の教科書](https://amzn.to/2OPlXRx)がオススメです。

また、HTMLと同じようにCSSに慣れてきたらSCSS等のプリプロセッサを使い、効率化を図りましょう。

### JavaScript
ライブラリやフレームワークを使う前に、バニラなJavaScriptを使ってみましょう。jQueryを使わなくても、ほとんどの機能を作ることができまます。また、ECMAScript2015+を使い、それ以下のバージョンを学習する必要はありません。Babelを使いましょう。

個人的にはICS MEDIAさんの[JavaScript コードレシピ集](https://amzn.to/2uNFs3t)がオススメです。

上記の作業に余裕が出てきたら、JavaScriptのライブラリやフレームワークを使い、Webアプリケーションにチャレンジしてみましょう。

- Vue.js（Nuxt.js）
- React（Next.js）
- Angular

このあたりを調べてみましょう。マークアップエンジニアからフロントエンドエンジニアへステップアップするために、これらの知識が必要になります。

### Git
Web制作の現場では、ほぼほぼGitでのバージョン管理が行われています。[わかばちゃんと学ぶ Git使い方入門](https://amzn.to/2Ul1wSf)を読めばだいだい大丈夫です。

### タスクランナー
タスクランナーを使い、より作業を効率化させましょう。規模や内容によりますが、Gulpとwebpackは使えると良いです。（正確には、webpackはタスクランナーではありませんが。。）

## まとめ
今回はあえて細かな解説はせず、ざっくりとした内容にしました。わからない単語は、ご自身で調べてみてください。調べる力もエンジニアに必要なものです。

また、作業の流れや項目もプロジェクトや会社により大きく変わりますので、そのあたりはアサインされた現場の先輩に聞いてみてください。

それでは、よきコーディングライフを。
Visual Studio Codeのミニマップを非表示にする方法

# 視界に入るミニマップが邪魔
VSCodeでエディター右側に表示されるミニマップがウザいので非表示にすることにした。
<img width="284" alt="スクリーンショット 2019-04-06 04.05.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/3bb6ac28-0e4b-3f1b-6c77-ca071b2980cd.png">

行数の多いファイルではミニマップのスクロールやクリックで該当箇所に素早くアクセスすることが出来るが、基本的にキー検索や参照でファイル内を移動することが多いため、表示領域を圧迫するだけで自分はほとんど使わない機能だったので。
![minimap.png](https://qiita-image-store.s3.amazonaws.com/0/6380/53b24ad9-82f7-d1b8-168c-f0f73aa95635.png)

# Editor > Minimap: Enableをオフに

以下、本記事執筆時点での設定情報を記載する。

- Mac版 バージョン1.32.3 (1.32.3)

Visual Studio Codeのメニューから設定画面へアクセス。
Code -> References -> Settings

検索窓に「editor.minimap.enabled」と入力。表示される「Editor > Minimap: Enable」のチェックを外せばOK。
<img width="427" alt="スクリーンショット 2019-04-06 04.06.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/0145b2d5-ef6c-c1bc-ef4a-b4f1cb631fd5.png">

# 表示の左右変更も可能
ちなみに「editor.minimap.side」で、ミニマップを左右どちらに表示するか選択できる。
<img width="498" alt="スクリーンショット 2019-04-06 16.10.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/a389c480-d455-a79b-8089-3351b3ede332.png">

# 参考
[Visual Studio Code User Interface](https://code.visualstudio.com/docs/getstarted/userinterface#_minimap)
Golang 文字エンコーディングについて

#はじめに

エンコーディング関係がほんとめんどくさくて参っているのでとりあえず自分の知識をまとめます。

#エンコーディングの種類

基本的にUTF8,Shift_JIS,EUC_JPの３つがある感じ。

UTF8が一番汎用性があるというかどこでも使える感じだと思う。

Shift_JISはWindowsで使われていて、EUC_JPはMacで使われています。

問題はShift_JISで結構厄介な文字化け問題がおきます。:frowning2:

#文字コードの変換（transform.NewReader()）

文字コードを変えるときのコードで一般的なのがtransform.NewReaderを使うこれ↓だと思います。


```golang
sample := "こんにちは"
// Shift_JISからUTF8に変換
str := transform.NewReader(sample, japanese.Shift_JIS.NewDecoder())
// UTF8からShift_JISに変換
str := transform.NewReader(sample, japanese.Shift_JIS.NewEncoder())
// EUC_JPからUTF8に変換
str := transform.NewReader(sample, japanese.EUCJP.NewDecoder())
// UTF8からEUC_JPに変換
str := transform.NewReader(sample, japanese.EUCJP.NewEncoder())
```

という感じ

UTF8に変換するときはNewDecoder()を使いShift_JIS,EUC_JPに変換するときはNewEncoder()を使う感じっぽいですね。

でもこれエラーとか出てくれないけど良いんですかね？

正直エラーが出る場合があるかもしれないのでエラーを検知できるようにしてほしいな....

例えば

```golang 
str := transform.NewReader(sample, unicode.UTF*.NewDecoder())
```

みたいにするとsampleがそのまま出力されるんですよね。

なんかエラーが発生してないから大丈夫と思いきや問題あったみたいなことになりそうなので怖いです。




#文字コードの変換(transform.Strings())

transform.Stringsを使ってエンコードを変える方法もあります。

これはエラーも補足できるので個人的にはこっちのほうが良いような気がします。

```golang
// UTF8からShiftJISに変換
str, n, err := transform.String(japanese.ShiftJIS.NewEncoder(), sample)
// ShiftJISからUTF８に変換
str, n, err := transform.String(japanese.ShiftJIS.NewDecoder(), sample)
// UTF8からEUC_JPに変換
str, n, err := transform.String(japanese.EUCJP.NewEncoder(), sample)
// EUC_JPからUTF8に変換
str, n, err := transform.String(japanese.EUCJP.NewDecoder(), sample)
```

みたいな感じ。



#UTF8からShiftJISに変換した際に文字化けする

UTF8からShiftJISに変換した際に文字化けが発生することがあるようです。

巷では「Shift_JISのだめ文字」と言われるそうですが、文字の2バイト目が「|,/,\,@」などの文字コードと重なる場合に文字バケが起きてしまうそうです。


説明が下手すぎで何言ってるかわからないと思うのでこちらを参考にしてください↓

https://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp
https://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp/table


windowsの文字化け問題は面倒なので即刻どうにかしてほしいものです。
Railsチュートリアル　７章/８章とエラー対応


・サイトのレイアウトにデバッグ情報を追加する。
（デバッグとはバグを見つけ修正する作業のことをさす）

```<%= debug(params) if Rails.env.development? %>```

application.html.erbに追記。

本番環境に展開したアプリケーションではデバッグ情報を表示したくないので、
```if Rails.env.development?```と記載している。
こうすれば、デバッグ情報はRailsの3つのデフォルト環境のうち、
開発環境 (development) だけで表示されるようになる。

#・Railsの３つのデフォルト環境とは
１：テスト環境 (test)
２：開発環境 (development)
３：本番環境 (production)
＊Rails consoleのデフォルトの環境はdevelopment。


・Gravatar画像とサイドバー
→Gravatarは無料のサービスで、プロフィール写真をアップロードして、
指定したメールアドレスと関連付けることができる。
Gravatarはプロフィール写真をアップロードするときの面倒な作業や写真が欠けるトラブル、
また、画像の置き場所の悩みを解決できる。
ユーザーのメールアドレスを組み込んだGravatar専用の画像パスを構成するだけで、
対応するGravatarの画像が自動的に表示される。（なんて便利なんだ！）


・セッション
Railsでセッションを実装する方法として最も一般的なのは、cookiesを使う方法。
cookiesとは、ユーザーのブラウザに保存される小さなテキストデータで、
あるページから別のページに移動した時にも破棄されないので、
ここにユーザーIDなどの情報を保存できる。

アプリケーションはcookies内のデータを使って、
例えばログイン中のユーザーが所有する情報をデータベースから取り出すことができる。


#＜８章で出たルーティングエラー＞
・routesファイルをチュートリアルに乗っ取って書き換えると、
　以下のルーティングエラーが出た。（画像参照）

![スクリーンショット 2019-04-06 16.32.55.png](https://qiita-image-store.s3.amazonaws.com/0/378334/03313ea4-759c-3f20-2c1a-544919a8c2e6.png)

routesファイルを見直すと、
```post '/signup', to: 'users#create'```の記載がなかった。

なので下記の通り修正して解決。

```Rails.application.routes.draw do
  root   'static_pages#home'
  get    '/help',    to: 'static_pages#help'
  get    '/about',   to: 'static_pages#about'
  get    '/contact', to: 'static_pages#contact'
  get    '/signup',  to: 'users#new'
  post   '/signup',  to: 'users#create'
  get    '/login',   to: 'sessions#new'
  post   '/login',   to: 'sessions#create'
  delete '/logout',  to: 'sessions#destroy'
  resources :users
end```


学びとしてはエラー分をみて、
どうすれば良いかがようやく分かってきた。（気がする）
オフラインリアルタイムどう書く E32 の問題

オフラインでリアルタイムに「どう書く」をやるイベント( https://yhpg.doorkeeper.jp/events/88379 )を行っています。

問題は「きれいな四角」という名前で、詳細は
http://nabetani.sakura.ne.jp/hena/orde32rects/
です。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。

似たような問題をもっと解きたいという方は、
https://nabetani.hatenadiary.com/entry/yhpg_list
に過去問リンク集がありますので、そちらをご覧になると良いと思います。
データの威力

#データ専門家のハードル
　ここで僭越ながら私の経験を語ると１人のその辺の社員でした。しかし約三年前からデータの仕事を始めて、その過程で成長することにより、実際にECモールにてデータアナリストに就き、現在は提供してもらえるクライアントには1st、必要な場合は2nd、3rd Partyデータを利用する大手某総合広告代理店でデータアーキテクトをしています。

　一見データアナリスト、アーキテクト等の職種の特殊さに目が行きがちで、元々の専門家なのかと思われるかもしれません。
　しかし、私は今やデータ専門家ですが、そのスキルはほとんど【会社の業務への向き合い方】から得ました。
　何なら休みはゲームばっかりしてます（最近はPUBG※弱い）少しは知識のフォローとかを兼ねてカフェで勉強したりもしていますが微々たるものです。。。そんな自分でもできます！だからハードルってそんなに高くないと思っています。。
　※注記：もちろん他のデータ専門家の方とかはちゃんと勉強していると思います。

#データの専門家になった経緯
　そして現在から約二年前までは全くデータの専門家として仕事をしたことはありませんでした。だからこそデータの仕事のハードルはみなさんが考えるほどそこまで高くないと個人的には思っています。

　専門家である社会的に価値は高く、給料は2年前から約2倍になっています。それだけ需要があるということだと思っています。

　専門家といっても私は、実際私は仕組み上知っておくべきプログラミング知識や数学知識はあるとおもいますが、ゴリゴリにソースコード書いたり、某同僚のサイエンティストみたいに数式をガリレオの福山雅治の如く書けるわけでもありません。

　もちろん前提知識としてある程度必要な部分もあるかと思うのですが、特に数学関連については諸説ありますが、よほどデータサイエンティストとして専門的な予測やモデル化をしない限り、私は最低限で良いと思っています。

　では何故データの専門家として今仕事ができているかというと【データを使った意思決定に直結する】アウトプットを出すにはどう業務に向き合えば良いかを意識しながらやってきたからかなと個人的に思っています。

　私はデータ専門家ではない頃から
　｢データでこういうことが読み取れるから、こういう施策をしましょう！｣
　｢データでこういう傾向が見られるからこのような改善をしましょう！｣
　という提案を自らの業務範囲のデータで実施してきました。ここまで分かりやすく伝えないと、周りの人はデータを理解し、意思決定にデータを使うまでには至りません。そうある意味翻訳作業のようなものです。

　もちろんデータの根拠を聞かれるのですが、それを調べられる限り調べて根拠づけていました。
　そして気が付くとその会社ではデータといえば一旦私に話が集まるようになっていました。データについての相談ってすごく需要があるのでどんどん私のところに集まるのです。そうなるのに大した時間はかかっていません。

　よってまずはこのような意識を持った業務への取り組みが大事になってきます。

　やがてその業務経験を詳しく職務経歴書に書いたところ運よく「データアナリスト」という職種で採用していただける企業と出会い今に至ります。

　ちょっと本当にデータ専門家になって良いのかな。。。？と悩みましたが、もともと何でも直前までやらない性質ですし、休みや自宅で勉強するのって本当に苦手です。なので環境に飛び込んで仕事の中でデータの業務を通じて勉強と経験をするって発想に至りました。これが実際一番効率が良いと思っていますし、実際にデータアナリストとしての業務に向き合って足りないところを埋める過程は、凄い成長できたなと実感しています。この一番自分が成長できる勝ちパターンにもっていくということは意識しています。

　そして、私はこの経験を通じてデータという最も客観的な根拠を論理的に説明できることは非常に武器になることを同時に理解していき、その過程を通じて私もデータの仕事の楽しさを理解しました。そしてその中で色々気づくこともあったので後述していきたいと思います。

　こうして、私は社内におけるただのデータが少し分かる人から、運の力もありましたがこんな私でもデータ専門職に就くことができました。
　
　やっぱり思うのですがデータを知ることの威力って凄いです。
GKE ノードのブートディスクのサイズを縮小する手軽な方法

GKE k8sクラスタのノードのディスクサイズを縮小する方法を説明します。

はじめに
--------

GCEインスタンスのディスクサイズをオンラインで拡張する機能は公式でサポートされていますが、縮小はサポートされていません。
https://cloud.google.com/compute/docs/disks/add-persistent-disk?hl=ja#resize_pd

これについていくつかのワークアラウンドがあることがすでに知られています([[1]](https://blog.jicoman.info/2018/09/decrease-gce-persistent-disk-size/), [[2]](https://qiita.com/adv-m-kuroshima/items/73f77024d02fd188d71a))が、
GKEのノードに使っているGCEインスタンスのディスク縮小の場合はもっと簡単なやり方で実現できます。
ですが Qiita に記事が見つからなかったので書いておきます。
（当たり前過ぎて誰も問題にしないだけかもしれません…）

方法
----
新しいノードプールを作成して元のノードプールから各Podを移行させてください。
[ノードプール](https://cloud.google.com/kubernetes-engine/docs/node-pools)というのはGKEのワーカーノードのサブセットです。
新しいノードプールを作成する際に、マシンのブートディスクサイズを所望のサイズまで減らしてください。

ノードプールを作成したあと古いノードプールの各ノードに対して `kubectl cordon` を実行して、
さらにその後 `kubectl drain` を実行してください。
詳しいやり方は公式ドキュメントを読んでください。
https://cloud.google.com/kubernetes-engine/docs/tutorials/migrating-node-pool
いまさらながら、Raspbery Pi を始めてみる

ようやく踏ん切りがついてRaspbery Pi 3　スターターキット　を秋葉原　千石電商で購入。
![IMG_20190406_154424.jpg](https://qiita-image-store.s3.amazonaws.com/0/366986/526a6f60-5eb0-0511-15dc-06085857b4bf.jpeg)
キットには、本体と公式ケース、SDカード(16GB)、アダプター、HDMI(2m)がセットになっている。

写真を見て気づいたけど、本体右側のフラットケーブルの差込口を保護するシールがはがれかけてる。きれいに直した。

やったことを記録しておく。
参考にしたサイトさま、助かりました
http://omao.hatenablog.com/entry/2018/01/14/225203

1. 組み立て・接続
といっても、ケースのフタを開いて、本体を収めて、フタを閉じるだけ。
あとはHDMI・マウス・キーボードを接続し、最後にアダプターを接続。アダプターを接続した時点で起動開始するようだ。

2. OSインストール
NOOBS V3.0 なる画面が表示される。
最初は
 * Raspbian
 * LibreELEC_RPi2
の２つだけ表示されているけど、Wifiの設定をするとドカンと増える。
ひとまず、Raspbian だけチェックをつけてインストールをクリックする。20分程度で完了し、再起動。
Linux起動の特有のCLIで、ずらずらといろんなことをやっている様子。ほどなくしてデスクトップが開始される。

いとも簡単にOSインストールまでできました。

ここから念願の「GoogleHomeに能動的にしゃべらせる」ことをやりたいと思います。
CentOS7の仮想環境をいじくる

#はじめに
[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしている<@kento_o>です。

[前回の記事](https://qiita.com/kento_o/items/bce0b129519324606177)でVagrantの仮想環境にCentOS7を入れました。

##ssh接続+wgetをインストール
まずは、

```
$ vagrant ssh
```
でローカルのVagrant+CentOS7の環境に接続します。

その後、

```
$ rpm -ivh /tmp/wget-1.14-10.el7_0.1.x86_64.rpm

```
上記のコマンドでwgetをインストールします。

#PostgreSQLを導入
wgetを使用して、

```
$ wget https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm
```
を導入します。

そして、作成された「postgres」ユーザーにsuコマンドを使用してユーザーを入れ替えます。

#データベース確認
```
$ psql -l

   Name    |  Owner   | Encoding  | Collate | Ctype |   Access privileges   
-----------+----------+-----------+---------+-------+-----------------------
 postgres  | postgres | SQL_ASCII | C       | C     | 
 template0 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
 template1 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
(3 rows)



```

成功しました！




#おわりに
普段何となく使っていたものの意味を考える日々です。
pythonでフォルダ内のファイル名のみ取得する方法

## はじめに
とあるフォルダからファイル名のみ取得したいシーンが有りました。

```
hoge/
　└ huga/
　 　├ file1.txt　　←この file*.txt 達だけが欲しい
　 　├ file2.txt
　 　└ file3.txt
```

その作業記録として残しています。


## 方法1: glob と os.path.split を使う
glob でファイルパスを取得し、ファイルとそれ以外に split するという方法。

```python
import glob
import os

for f in glob.glob('hoge/huga/*.txt'):
    print(os.path.split(f)[1])
```

## 方法2: pathlib を使う
pathlib は Python3.4 から追加されたモジュール。
私は今回はこれを使いました。

```python
import pathlib

p_temp = pathlib.Path('hoge/huga').glob('*.txt')
for p in p_temp:
    print(p.name)
```

## 余談
実はこの pathlib を使って少しハマってしまいました。ハマったのは
`glob モジュールの glob() はリストを返すが、pathlib の glob() はイテレータを返す`
という点です。

私が書いた処理では、p_temp を使いまわしていたので、2回目以降は消えてしまっていました。
使いまわしたければ list() してやる必要がありました。
どっちもリストを返すだろうと思いこんでいたのがいけなかった…

```python
p_temp = list(pathlib.Path('hoge/huga').glob('*.txt'))
```

## 参考
https://note.nkmk.me/python-pathlib-iterdir-glob/
（pathlibで詰まったときにこちらを読んで解決できました）
データ屋さんになろう

#データ屋さんという概念
　昨今データ活用やデータドリブンという言葉が巷を駆け回っており、データ人材の価値は高まるばかりです。しかしそれにも関わらずデータを真に使える人材が足りないという話も聞く。
　今やデータを使わないと仕事にならない時代。。。。じゃあいっそ自分が社内でデータ屋さんを開業してしまっては？

　データ屋さんって何やねん。。。って思いますよね？「いやー～さんにデータは任せておけば大丈夫だな」と社内で思われるような人のことを私の解釈ではデータ屋さんという呼び方に勝手にしました。※雑

　なぜかというと、大体そういう頼み方をされる人は会社でそのポジションを確立しています。まさにデータ屋さんの如く嵐のように仕事を頼まれるからです。

　更にそれをどんどん進めるのが、データ屋さんにそういう感じで頼んでくる人たちは『基本的に自分で勉強する気がない』ためずっとその人たちにデータの仕事を頼んできます。

　まー大変！大変なんですが、、、、これって実は大チャンスです！全部自分でやって経験値を上げてしまえば良いのです！

#データ屋さんの価値
「AIとか使えば何でも自動的にやってくれるんでしょ？」「機械学習とかで売上とか予測できるんでしょ？」とかあれやこれや自由自在です。。。ましてや、「俺の仕事なんてAIに取られちゃうんだよな！まじめにやっても無駄じゃん！怖い！！」いや、そこまで情報に踊らされるお前が怖いわ笑。

　私の経験上では上層部の皆さんには多分一部の方を除いて改めてデータを本質からそしてデータの仕事ができるまでの知識を得ようという気は大体ありません。

　そういう人たちはできなくても、営業スキルや度胸などその他スキルの専門性で活躍している人も多いです。新しくデータの事を学ぶのはそれなりに大変なのです。
　つまり身に着けてしまって一目置かれればデータの業務はずっと俺のターン！になります。これがつまり「会社データ屋さん」になるということです。

　データは確かに何でもできる側面はある一方上記の技術は全てある程度の必要なデータがそろわないと動きません。教師あり学習？それとも教師なし学習？なの？とか聞いたら大体黙ります笑。それに使うデータの選定や加工がどれだけ大変かと。。。

　それでもこんなにデータに振り回されるのはデータのことを本質的に知らないからに他なりません。そして本質まで理解する必要はありません。うわべだけでもどんなものか知っているだけで全然違います！
　ここ大事です！うわべだけでも全然違うのです。
　　
　つまりポイントを押さえればデータを使える人材になることはそれほど難しくないのです。ぜひデータを使えるという武器を身に着けてほしいと思って以下の様な部分についてフォーカスしてみたのがこの本です。

　・最低限どういう知識を知っていればいいのか。データを使って成長するにはどうしたら良いのか？
　・分析アウトプットってどうしたらいいんやろ。。。
　・実際にどういう意識で業務に取り組めば経歴書にかけるような経験ってできるのだろう。
　・埋もれているデータ人材に向けて

　社内の評価でもデータに関する貢献がしっかりアピールできれば高評価されることは間違いありません。あの人は営業がすごいとか、プレゼンが上手とか色々社内で持っているといい専門性はあると思いますが、データが強い人という専門性は社内でも強い方の要素に分類されることでしょう。
　この本からどういう観点で会社のデータに触れれば、データを知っている人と社内で分類されるかについてのポイントを学んでいただければ幸いです。
　
　ここまでで何回データって言っただろう笑。是非データに振り回されず、使う側つまり会社データ屋さんを開業しましょう！
　
　※専門家ではありますがこれが正しいと断言するつもりもごさいません。あくまで一意見として見てください。
　そして、なるべく汎用的になるように書いていますが、私がIT企業及びECについてのアナリストだったのでマーケティングとそちらの面が少し濃くなってしまうことをご容赦ください

それでは宜しくお願いします。
teraterm自動ログイン

■teraterm自動起動設定

単純にttlをダブルクリックして自動ログインしたい場合は、
①usernameに対象のユーザをいれる。
②hostnameに対象のIPアドレスを入れる
③対象のユーザのパスワードを入れる。
strconcat msg ' /passwd='　→　strconcat msg ' /passwd=password'

上記の3つが設定されていれば、下記をコピーして使用すれば、
ttlをダブルクリックして実行すれば自動ログインできる。

--------------------------------------------------------
; sample macro of Tera Term
;
; File: ssh2login.ttl
; Description: auto login with SSH2 protocol
; Environment: generic
; Update: 2004/12/4
; Author: Yutaka Hirata

username = 'root'     ; 「nike」をログインに使用するユーザー名に書き換える
hostname = '192.168.3.20'    ; 「192.168.1.3」を接続するサーバーのIPアドレス/サーバー名に書き換える
remote_prompt = "#"  ; リモートマシンのプロンプト記号。bash系なら「$」、cshなら「%」、tcshなら「>」など
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

msg = 'Enter password for user '
strconcat msg username
;passwordbox msg 'Get password' ; パスワードボックスを表示し、入力された内容を変数msgに格納

msg = hostname
strconcat msg ':22 /ssh /auth=password /user='
strconcat msg username
strconcat msg ' /passwd=password'
strconcat msg inputstr

connect msg

wait remote_prompt ;#(プロンプト)が返ってくるまで待つ
sendln "date"
wait remote_prompt ;#(プロンプト)が返ってくるまで待つ
sendln "uname -n"
wait remote_prompt ;#(プロンプト)が返ってくるまで待つ
sendln "id"

-------------------------
【composer】composerのインストール

##ことの顛末##
そもそもこんなこと書く必要ないじゃん！？って思われる方は多いと思います。
ええ、多分自分も何も知らずに見たらそう思うでしょう。

この記事は、自分が他の記事に対してオブジェクト指向で記事を作成するための記事です。
つまり、どんな環境でも本番のように使おうと思うとcomposerの利用は今後欠かせないと思うのですが、記事を書くたびに同じこと書くのは絶対的に非効率です。
しかしそこを抜かしてしまうと初学者は「何をどうするの」となり、IT学習に対するモチベーションの低下を招くでしょう。
そんなことでモチベ下がるならやるな、というのは簡単ですが人を育てるというのはそうではなく「相手の目線にどれだけ寄り添って教えられるか」だと自分は考えています。

ということで、そのオブジェクトの一つとしてこの記事を残します。

```
[root@localhost ~]# curl https://getcomposer.org/installer | php
[root@localhost ~]# mv -i composer.phar /usr/local/bin/composer
```

これだけなんですけどね(´・ω・\`)=3
Ruby on Rails - ③ link_toメソッド

#link_toメソッド
Scaffoldで自動生成されたコード

```
<td><%= link_to 'Show', user %></td>
<td><%= link_to 'Edit', edit_user_path(user) %></td>
<td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
```

#URLやパスを指定
外部のURLにリンクを追加

```
link_to 'Google', 'http://www.google.co.jp'
```

#「_path」を付けて次のように記述することもできる
routes情報を見て見ましょう〜

```
$ rails routes
```
<img width="1127" alt="スクリーンショット 2019-04-06 16.01.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/108475/1ae6b8bd-d56b-80e2-6471-f4a7ae805589.png">


_pathの前に「Prefix」をつければいいですね。
editのPrefixは「edit_user」なのでedit_user_pathになります。
editはAction名、userはController名の単数

```
<td><%= link_to 'Edit', edit_user_path(user) %></td>
```
【php】php7.3と周辺モジュールのインストール

##ことの顛末##
そもそもこんなこと書く必要ないじゃん！？って思われる方は多いと思います。
ええ、多分自分も何も知らずに見たらそう思うでしょう。

この記事は、自分が他の記事に対してオブジェクト指向で記事を作成するための記事です。
つまり、どんな環境でも本番のように使おうと思うとVirtualBoxの利用は欠かせないと思うのですが、記事を書くたびに同じこと書くのは絶対的に非効率です。
しかしそこを抜かしてしまうと初学者は「何をどうするの」となり、IT学習に対するモチベーションの低下を招くでしょう。
そんなことでモチベ下がるならやるな、というのは簡単ですが人を育てるというのはそうではなく「相手の目線にどれだけ寄り添って教えられるか」だと自分は考えています。

ということで、そのオブジェクトの一つとしてこの記事を残します。

##phpと周辺モジュールのインストール##

```
[root@localhost ~]# yum -y install epel-release
```

```
[root@localhost ~]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

```
[root@localhost ~]# yum -y remove php-* #元々ないはず
```

```
[root@localhost ~]# yum -y install --enablerepo=remi,remi-php73 php php-devel php-mbstring php-pdo php-gd php-zip php-xml  php-mysqlnd
```

phpのみでいいなら、

```
[root@localhost ~]# yum -y install --enablerepo=remi,remi-php73 php
```

まででいいかと思います。
何かの作業で入っているモジュールと入ってないモジュールがある場合は、上記のように必要なものだけ書けば取れます。
容量が多いフォルダ・ファイルを特定&logrotateの設定

サーバの容量が足りなくなりRailsのアプリケーションが落ちてしまったので、原因調査した時の記録。

#容量が多いフォルダを特定する

### コマンド

```
sudo du -scmh /* | sort -rn
```

### 出力結果

```
503M	/home
118M	/root
84M	/lib
56M	/opt
31M	/boot
23M	/lib64
16K	/lost+found
・・・
```

容量が多いフォルダに対して上記コマンドを続けていく。

# 容量が多いファイルを特定する

ファイルがあるフォルダまで到達したら、以下コマンドで容量が多いファイルからソートする。

```
ls -hS
```
※-h:容量をMG単位で表示
※-S:容量が大きい順にソート

```
$ ll -hS
合計 1.7G
-rw-r--r-- 1 root root 324M  4月  6 15:24 2019 access_log
-rw-r--r-- 1 root root 1.4M  4月  6 15:02 2019 error_log
-rw-r--r-- 1 root root 143K  3月 31 03:23 2019 error_log-20190331
-rw-r--r-- 1 root root 327M  3月 31 03:23 2019 access_log-20190331
-rw-r--r-- 1 root root 159K  3月 24 03:24 2019 error_log-20190324
-rw-r--r-- 1 root root 412M  3月 24 03:23 2019 access_log-20190324
-rw-r--r-- 1 root root 174K  3月 17 03:15 2019 error_log-20190317
-rw-r--r-- 1 root root 376M  3月 17 03:14 2019 access_log-20190317
-rw-r--r-- 1 root root 178K  3月 10 03:24 2019 error_log-20190310
-rw-r--r-- 1 root root 229M  3月 10 03:23 2019 access_log-20190310
```

# logrotateの設定
私の場合はapacheのログローテーションの設定が良くなかったので、とりあえずローテしたファイルはgzipで圧縮するような設定に変更

### logrotate.conf

```
sudo vim  /etc/logrotate.conf 
```

```sh:logrotate.conf
# uncomment this if you want your log files compressed
compress # ここをコメントアウト外す
```

### logrotate.d/httpd 

```
sudo vim /etc/logrotate.d/httpd 
```

```sh:/etc/logrotate.d/httpd
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}
                   
```

### logrotateの設定反映

```
sudo logrotate /etc/logrotate.conf 
```

### 既にあるローテしたファイルを圧縮

```
ls /var/log/httpd/access_log-* | xargs gzip
ls /var/log/httpd/erro_log-* | xargs gzip
```
※xargs:lsした結果のファイルに対して指定のコマンド(gzip)を実行

```
ll -hS
合計 363M
-rw-r--r-- 1 root root 326M  4月  6 15:53 2019 access_log
-rw-r--r-- 1 root root  11M  3月 24 03:23 2019 access_log-20190324.gz
-rw-r--r-- 1 root root 9.5M  3月 17 03:14 2019 access_log-20190317.gz
-rw-r--r-- 1 root root 8.5M  3月 31 03:23 2019 access_log-20190331.gz
-rw-r--r-- 1 root root 7.1M  3月 10 03:23 2019 access_log-20190310.gz
-rw-r--r-- 1 root root 1.4M  4月  6 15:46 2019 error_log
-rw-r--r-- 1 root root  10K  3月 10 03:24 2019 error_log-20190310.gz
-rw-r--r-- 1 root root 8.6K  3月 24 03:24 2019 error_log-20190324.gz
-rw-r--r-- 1 root root 7.4K  3月 31 03:23 2019 error_log-20190331.gz
-rw-r--r-- 1 root root 6.7K  3月 17 03:15 2019 error_log-20190317.gz
```

1.7G→363Mに削減！
今後も圧縮されるはずだから容量はこれ以上は増えないはず。

# 参考サイト

https://qiita.com/Esfahan/items/a8058f1eb593170855a1
【apache】apacheのインストール

##ことの顛末##
そもそもこんなこと書く必要ないじゃん！？って思われる方は多いと思います。
ええ、多分自分も何も知らずに見たらそう思うでしょう。

この記事は、自分が他の記事に対してオブジェクト指向で記事を作成するための記事です。
つまり、どんな環境でも本番のように使おうと思うとapacheの利用は欠かせないと思うのですが、記事を書くたびに同じこと書くのは絶対的に非効率です。
しかしそこを抜かしてしまうと初学者は「何をどうするの」となり、IT学習に対するモチベーションの低下を招くでしょう。
そんなことでモチベ下がるならやるな、というのは簡単ですが人を育てるというのはそうではなく「相手の目線にどれだけ寄り添って教えられるか」だと自分は考えています。

ということで、そのオブジェクトの一つとしてこの記事を残します。

##apacheのインストール##

```
[root@localhost ~]# yum -y install httpd
```

```
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
```
Visual Studio CodeのReference informationを非表示にする方法

# 「references」表記がウザい
VSCodeでUnityのC#ファイルをいじっていたら、変数や関数宣言の上部に「references」という文字が表示されていることに気付いた。
![referenceinfo.jpg](https://qiita-image-store.s3.amazonaws.com/0/6380/e717f43c-adff-15da-8c3b-9c486a44db88.jpeg)
どうやら各変数、関数の参照数が表示され、注釈をクリックするとミニウインドウで参照先が閲覧できる機能らしい。

確かに便利な機能なのだが、行数表示の合間に逐一「references」の文字が挟まれ煩わしいため非表示にすることにした。


# Editor: Code Lens をオフに

以下、本記事執筆時点での設定情報を記載する。

- Mac版 バージョン1.32.3 (1.32.3)

Visual Studio Codeのメニューから設定画面へアクセス。
Code -> References -> Settings

検索窓に「editor.codeLens」と入力。
<img width="729" alt="スクリーンショット 2019-04-06 15.42.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/4dd09c43-d6ce-a7a8-ed3a-8beb3ad7cf99.png">

表示される「Editor: Code Lens」のチェックを外せばOK。
<img width="489" alt="スクリーンショット 2019-04-05 19.14.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/6380/830368a8-178f-c4cd-c8b9-d5fdb446a807.png">

# 参考
[Code Navigation in Visual Studio Code](https://code.visualstudio.com/Docs/editor/editingevolved#_reference-information)
Windows10 んの1分でスリープ問題を解決してみました

Windows８からアップデート１０してからパソコンがすぐにスリープしてしまいますが、一日中パスワード入力大変ね・・・
調べてみたら以下の原因でした。

デスクトップー＞右クリックー＞ディスプレイ設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/386070/6d1a7259-ff9f-8eac-8907-b25f77929604.png)

電源とスリープー＞電源の追加設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/386070/0247b2c5-758a-db1b-820d-53a30534b4de.png)

左側からコンピューターがスリープ状態になる時間を変更

![image.png](https://qiita-image-store.s3.amazonaws.com/0/386070/bbed5ded-2a61-88c5-c08d-d6c39d8346cf.png)

こちらでじぶんの好きなタイムを設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/386070/2f81e574-fd9f-b43b-0d72-8d9e57bf4149.png)


もし解決出来なかった場合は以下続き

![image.png](https://qiita-image-store.s3.amazonaws.com/0/386070/c61ea555-c782-214b-b5da-df93c464de77.png)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0
--------------------- 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/386070/0475043b-4773-2367-65e9-0503b6a223fa.png)

7bc4a2f9-d8fc-4469-b07b-33eb785aaca0　　　のattributesの値を：２にする、元々は1です。

次は戻って

![image.png](https://qiita-image-store.s3.amazonaws.com/0/386070/5e0c5915-bb26-5f95-573e-13a18a47ac3b.png)

詳細な電源設定の変更

![image.png](https://qiita-image-store.s3.amazonaws.com/0/386070/f5599c4e-d4d9-03d9-24a2-a1807986ec55.png)

の無人スリープタイムアウトを選択する
元々２分と思います。長く変更してください。

これで解決できたと思います。
GoのフレームワークGinのルーティングで conflicts with existing wildcard が出る時の対処法

[gin](https://github.com/gin-gonic/gin)のルーティングでのワイルドカードの話。

# 生じた問題

以下のようなパスの場合

```go 
g := r.Engine.Group("v1")

g.GET("/threads", c.ListThreads)
g.GET("/threads/:id", c.GetThread)
g.POST("/threads", c.CreateThread)
g.PUT("/threads/:id", c.UpdateThread)
g.DELETE("/threads/:id", c.DeleteThread)

g.GET("/threads/:threadId/comments", c.ListComments)
g.GET("/threads/:threadId/comments/:id", c.GetComment)
g.POST("/threads/:threadId/comments", c.CreateComment)
g.PUT("/threads/:threadId/comments/:id", c.UpdateComment)
g.DELETE("/threads/:threadId/comments/:id", c.DeleteComment)
```

以下のようなエラーが出る。

```
panic: path segment ':id' conflicts with existing wildcard ':threadId' in path '/v1/threads/:id'
```

# エラーが生じた原因

調べていると、[ginのissue](https://github.com/gin-gonic/gin/issues/1301#issuecomment-392346179)で同じようなエラーに直面している人が質問をしていて、エラーが生じる原因と解消法の1つが紹介されていた。

> Basically, both routes need to have the wildcard in the same position, and the wildcards need to be named the same thing.

引用元: [ginのissue](https://github.com/gin-gonic/gin/issues/1301#issuecomment-392346179)

意訳すると
両方のルートは同じ位置にワイルドカードを持っている必要があり、ワイルドカードには、同じ名前をつける必要がある。

従って、先ほど記した以下のエラーが生じたのは、同じ位置に別の名前のワイルドカードが存在したため。

```
panic: path segment ':id' conflicts with existing wildcard ':threadId' in path '/v1/threads/:id'
```
# 解消する方法

[ginのissue](https://github.com/gin-gonic/gin/issues/1301#issuecomment-392346179)を参考にして以下のように同じ位置のワイルドカードを同じ名前にしてあげれば、エラーは解消される。

```go

g := r.Engine.Group("v1")

g.GET("/threads", c.ListThreads)
g.GET("/threads/:threadId", c.GetThread)
g.POST("/threads", c.CreateThread)
g.PUT("/threads/:threadId", c.UpdateThread)
g.DELETE("/threads/:threadId", c.DeleteThread)

g.GET("/threads/:threadId/comments", c.ListComments)
g.GET("/threads/:threadId/comments/:id", c.GetComment)
g.POST("/threads/:threadId/comments", c.CreateComment)
g.PUT("/threads/:threadId/comments/:id", c.UpdateComment)
g.DELETE("/threads/:threadId/comments/:id", c.DeleteComment)
```

# 参考にさせていただいたサイト
[gin/segment conflicts with existing wildcard #1301](https://github.com/gin-gonic/gin/issues/1301#issuecomment-392346179)
IT派遣バイトでVimがなかったらやばかった

# IT派遣バイトで役に立ったVimテク５選


![IMG_2182.png](https://qiita-image-store.s3.amazonaws.com/0/149269/c19d6cd0-8676-d44a-1e88-568371db12e1.png)





## Summary

Vimがなかったらやばかった


### 行数のカウント

`vip` で選択して`g<C-g>`で行数カウント みたいな

覚え方

`VIPな洗濯じじぃ`


```
foo
bar
baz
```

`Lines` のとこ

```
Selected 3 of 17 Lines; 3 of 12 of 89 Chares; 12 of 155 Bytes
```

使い所

いろいろ

とくに前のファイルと比較な自力`diff`な時

### １０文字作成

`<C-v>y`でコピーして`10p`みたいな

覚え方

`ヤンクヤンク ジュッピー`

```
// なんとかして x をコピー
x

// ９文字貼り付けの最後に a みたいな
xxxxxxxxxxa
```

使い所

テストとか。256の文字入力のテストとかに。

### １行にする

`vip`で選択して`J`で１行に

覚え方

`VIPだじぇ〜`

```sql
select *
from  footbl
where userId > 99
```

```sql
select * from  footbl where userId > 99
```

使い所

`SQL`ファイル作成の時とかに

### １行挿入

`qqo<ESC>jq`で１行記憶の`2@q`で２回繰り返し

覚え方

`まくろ〜　まくろ〜`

```
foo
bar
baz
```

```
foo

bar

baz
```

使い所

エクセル帳票の見出し文字とかに

### 空白行の削除

`VIP`で選択して`vglobal/\S/d`みたいな

覚え方

`グローバル〜　グローバル〜`


```
foo

bar


baz
```

```
foo
bar
baz
```

使い所

エクセル帳票のなにかに

実際には・・・

コマンド化して使ってました

```vim
command! -range DeleteEmptyLines call s:DeleteEmptyLines(<line1>,<line2>)
function! s:DeleteEmptyLines(fst,lst) abort
  execute (a:fst) "," (a:lst) 'vglobal/\S/d'
endfunction
```
Vueを利用してポートフォリオを作成してみる(1/3)

(記載時からvue_cliのバージョンが変化しています。)
Vue.jsの勉強を兼ねて、ポートフォリオサイトをVue.jsで作成してみました。
現在はコンテンツが少ないのでVueの利点をですが、将来的にページ数や内容を増やすときの改修をしやすくしたいな&SPAとして運用していきたいなという期待も込めてのVue利用です。

# vue.cliを利用して環境を作成する
まずは、vue.cliを利用してVue.jsの環境を作成します。
(node,yarn,vuecliはインストール済みです)

```
$ vue create test
```

どういう環境で作成するかを質問されるのでManuallyを選択します。
(defaultでもいいかもしれませんが、今回はSCSSを使いたかったので)

```
Vue CLI v3.5.1
┌───────────────────────────┐
│  Update available: 3.5.5  │
└───────────────────────────┘
? Please pick a preset: 
  default (babel, eslint) 
❯ Manually select features 

```

使いたい機能にspaceキーでチェックを入れます。
今回はBabel,CSS Pre-processors,Linterにチェックを入れてみます。

```
Vue CLI v3.5.1
┌───────────────────────────┐
│  Update available: 3.5.5  │
└───────────────────────────┘
? Please pick a preset: Manually select features
? Check the features needed for your project: 
 ◉ Babel
 ◯ TypeScript
 ◯ Progressive Web App (PWA) Support
 ◯ Router
 ◯ Vuex
❯◉ CSS Pre-processors
 ◉ Linter / Formatter
 ◯ Unit Testing
 ◯ E2E Testing
```

各機能のオプションを色々質問されます。
自分が使いたいものを選択してEnterを押すだけです。
今回は下のような設定にしてみました。

```
? Check the features needed for your project: Babel, CSS Pre-processors, Linter
? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported 
by default): Sass/SCSS (with dart-sass)
? Pick a linter / formatter config: Basic
? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i
> to invert selection)Lint on save
? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? In packag
e.json
```

環境設定が開始され、成功すると"Successfully created project test."と表示されるので
後は下に書かれているように、cd test > yarn serve  を行い、
http://localhost:8080/
にアクセスするとおなじみの画面が表示されます。

```
success Saved lockfile.
✨  Done in 14.10s.
⚓  Running completion hooks...

📄  Generating README.md...

🎉  Successfully created project test.
👉  Get started with the following commands:

```
```
 $ cd test
 $ yarn serve
```

<img width="665" alt="スクリーンショット 2019-04-06 15.11.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/205283/7677c8e9-008f-711a-3f8f-b4be2ffa8e6e.png">
mui Developer Editionで遊んでみる（準備編）

#この記事について
muiを入手したので、その開発情報を自分用にまとめたものです。

[mui Developer Editionで遊んでみる（準備編）](https://qiita.com/kobayuta/items/9a78b923648a2478604d)
[mui Developer Editionで遊んでみる（HOME画面のカスタマイズ）](https://qiita.com/kobayuta/items/76cd0d2483e42ae6e34d)
[mui Developer EditionでSORACOMを使ってみる](https://qiita.com/kobayuta/items/b8b15639be6c866641e1)

# muiとは
muilab株式会社( https://mui.jp/#jp ) が開発する、スマートディスプレイの一種です。
Kickstaterでのクラウドファンディングが成立し、4月から開発者版が先行して順次発送されています。
ぶっちゃけ、電光掲示板なのですが、他と大きく違うと個人的に思っているのが以下の点です。

・タッチパネルを備えている
　通常の電光掲示板は表示のみですが、muiはタッチパネルを備え、入デバイスとしても使えます。
・インターネットに直接つながる。
　開発者版はRaspberry Pi3を用いて制御を行います。そのためのSDKも公開されています。
　つまり、自分で好きなサービスと連携させてカスタマイズができるのです。開発者版サイコー！
・見た目が"木"
　これが一番の特徴だと思うのですが表示がされていない場合、本当に木の棒に見えます。
　タッチ入力する際の手触りもまんま木です。
　リビングにおいてもすんなり馴染みます。どうもCalm Designという奴らしいです。

##動くようにする
開発者バージョンを使うにはRaspberry Pi 3Bもしくは3A+を接続する必要があります。3A+を使うと基板を本体内部に収容できるそうなのですが、残念ながら日本では技適の関係で使用できないのでRaspberry3Bを使います。この場合、基板からケーブルを引っ張り出す必要があります。
SDイメージはmuiの開発者ページ( https://app.mui-cloud.net/dev )からダウンロードできます。
bz2で圧縮されているので解凍後、SDカードに書き込みます。書き込みはlinuxならdd、Windowsならwin32diskimagerなどを使用します。

書き込んだSDカードを装着し、muiの電源を入れます。最初に起動メッセージが表示され、その後サンプルアプリケーションが起動します。

##SDKについて
SDKは以下の場所で公開されています。
https://github.com/muilab/mui-display-lib

SDイメージの中にはすでにインストールされています。(/home/pi/mui以下)
カスタマイズするには、提供されているサンプルをもとにPythonでコードを書いていきます。

SDイメージでは/home/pi/mui/mui-display-lib/sample/sample.pyが自動起動するようになっています。
停止するには以下のコマンドを入力します。

```
sudo systemctl stop mui_sample.service
```
再度有効にするには以下のコマンドを入力します。

```
sudo systemctl start mui_sample.service
```

このあたりは普通のLinuxで、systemdのサービスの有効化・無効化と同じです。

とりあえず、SDイメージのサンプルのままではダミーデータが表示されるだけなので、次回以降sample.pyをベースにカスタマイズしていきます。
Stackless Pythonの少し前のバージョン（3.6.8）をWindowsにインストール

Stackless Pythonのインストール（Windows）でハマったのでメモ。

Stackless Python単体のWindows用インストーラでは、なぜかtkinterが入らない。そのためMiniconda3で行く。しかしMiniconda3で普通に`conda install -c stackless stackless`して`conda create -n stackless36 python=3.6`しても、なぜかノーマルのCPythonが仮想環境に入ってしまう。
そこでAnacondaのレポジトリ（[x86](https://conda.anaconda.org/stackless/win-32), [x64](https://conda.anaconda.org/stackless/win-64)）からStackless Pythonのパッケージをダウンロードして、

```
conda install -c stackless stackless
conda create -n stackless36 python=3.6
activate stackless36
cd envs\stackless36
conda install C:\path\to\downloaded-package.tar.bz2
```

これで無事に`import tkinter`が通った。
【Laravel】環境構築ができない人は試してみてください

##ことの顛末##
弊社ではよく「Laravelの環境構築ができない！」という声を聴きます。
自分自身は独自フレームワークを使っているので、教えようと思っても教えられない現実がありました。
で、あまりにも聞かれる回数が多いので「これはそろそろやらなきゃいかん」と思い立ったのです。

ネットでよく見るのはvagrantを使った構築方法ですが、昔自分で試したときはそもそもvagrantを使うことが出来ず、諦めていました。
今回紹介する手法は「VirtualBox」を使って「CentOS7」をインストールし、その中で必要なものをインストールし、ブラウザでトップページを表示する方法です。


##動作環境##
windows10でhomeでもproでも構いません。
proの場合はHyper-Vは使わないようにします。なのでDockerをtoolboxを用いずに利用している人は本稿のやり方ではできない（VirtualBoxが使えない）可能性が高いです。

PCスペックについては
AMD(R) Ryzen Threadripper 2990WX プロセッサー (3.0-4.2GHz/32コア/64スレッド)
DDR4-2400 16GB×4(クアッドチャンネル/計64GB)
1TB SSD / NVMe M.2[PCI Exp.3.0×4]
NVIDIA GeForce GTX-1080Ti(11GB)
です。もちろんこんなにスペック高くなくていいですが、せめて4コア、8GBメモリ以上は欲しいところです。
2コア、4GBメモリではかなりストレスが溜まるでしょう。それ以下の場合はVirtualBoxがそもそも動かない可能性も出てきます。
スペックの確認については、左下のウインドウズロゴを右クリックし、ファイル名を指定して実行→dxdiagと入力してEnter→ポップアップが出るのではいを選択　で見れます。
赤く囲った部分でCPU、メモリ、グラフィックボードのスペックが見れます。
![00000200525.JPG](https://qiita-image-store.s3.amazonaws.com/0/193056/25da972e-b27b-eff5-560e-b87c17e975b4.jpeg)


##VirtualBox6のインストール##
自分の記事です。
https://qiita.com/qyuser/items/534f24ccaf1ae09d2869

##MySQL5.7のインストール##
自分の記事です。
https://qiita.com/qyuser/items/b9b1c5530eb4f5034fb5

##apacheのインストール##
自分の記事です。
https://qiita.com/qyuser/items/d0c3dbc01af230bb126d

##php7.3のインストール##
自分の記事です。
https://qiita.com/qyuser/items/e1971eb9b66b2e15e9a4

##Gitも必要##
自分の記事です。
https://qiita.com/qyuser/items/b6ab1e5eac65197a2fca

##composerのインストール##
自分の記事です。
https://qiita.com/qyuser/items/7148e6faca169dc9f396

##いよいよLaravelプロジェクト作成##

```
[root@localhost ~]# cd /var/www/html
[root@localhost ~]# sudo yum -y install unzip
[root@localhost html]# composer create-project --prefer-dist laravel/laravel your_project_name
[root@localhost html]# cd your_project_name
[root@localhost your_project_name]# php artisan key:generate
[root@localhost your_project_name]# echo 'export PATH=~/.config/composer/vendor/laravel/installer:$PATH' >> ~/.bash_profile
[root@localhost your_project_name]# source ~/.bash_profile
```

```
[root@localhost your_project_name]# vi /etc/httpd/conf/httpd.conf

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html/your_project_name/public"
```
:wqで保存


##権限変更（これ変えないとpermission deniedエラーが出る）
```
[root@localhost your_project_name]# chown -R root:apache storage
[root@localhost your_project_name]# chmod -R 0775 storage
[root@localhost your_project_name]# chcon -R -t httpd_sys_rw_content_t /var/www/html/your_project_name/storage
```

```
[root@localhost your_project_name]# systemctl restart httpd
```

###IPどこだっけ？###


```
[root@localhost your_project_name]# ip a
inet 192.168.56.106/24
```

![00000200554.JPG](https://qiita-image-store.s3.amazonaws.com/0/193056/df410229-4e5f-6ef7-630c-c05ae53572c8.jpeg)

![00000200555.JPG](https://qiita-image-store.s3.amazonaws.com/0/193056/38b6ee63-f703-4600-b251-e6ced4e3bfc1.jpeg)
で、出た～～～～～～(ノД`)・゜・。

画面が出せたという方、よろしければいいねボタンをポチっとお願いします！
次の記事へのモチベにつながります！
React v16のPropTypesでハマった

Reactのバージョンを上げた際に、PropTypesはReactにあるものだと思ってハマってしまった。

React 15.5からPropTypesはprop-typesとしてライブラリが切り離されているっぽい。
https://github.com/reactjs/react-codemod#react-proptypes-to-prop-types

というわけで

# Reactのバージョン

```package.json
"react": "^16.8.6"
```

# prop-typesをインストール
私は、yarnを使っているので...

```
yarn
$ yarn add prop-types 

npm 
$ npm install --save prop-types
```


```Hoge.jsx
// 修正前
Hoge.propTypes = {
  hoge: React.PropTypes.object.isRequired
}

// 修正後
// ファイルの上部
import PropTypes from 'prop-types';
.
.
.
Hoge.propTypes = {
  hoge: PropTypes.object.isRequired
}
```
Reactから切り離されたので `React`からではなく、インポートした`PropTypes`から定義すれば良い