OmniAICreator/Qiita-1.07M huggingface dataset:
1分でajaxのお試し環境を作る with Docker & nginx

昨日の業務の際、急遽APIをajaxで実行するテストが必要になりました。
CORSの確認だったので、webサーバーを立てた方が良いはずなのですが、
サーバーの用意とajax通信するソースの用意が面倒そうだと感じました:kissing:

けれど、webで調べたサンプルを組み合わせることで、
簡単にajaxをお試しできる環境ができました。
また、いつか使うと思うのでメモメモ :pencil: 


## 作業ディレクトリとhtmlの作成
```bash
$ mkdir test
$ vim test/index.html
```

index.htmlには以下を貼り付けてください
(ajaxの通信先は適宜変更してください)

```html
<!DOCTYPE html>

<html lang="ja">

<head>
  <meta charset="utf-8">
  <title>
    ajaxテスト
  </title>
</head>
<body>
  <p>
    ajaxテスト
  </p>
  <input id="button" type="button" value="テスト">

  <script>
    var url = "https://api.github.com/search/repositories?q=javascript";
    var xhr = new XMLHttpRequest();

    document.getElementById("button").onclick = function() {

      xhr.open('GET', url);
      xhr.send();

      xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {

          console.log(JSON.parse(xhr.responseText));

        }
      }
    };
  </script>
</body>
</html>
```

## dockerでnginxを立て、起動
```
docker run --name sample1 -p 8090:80 -v $PWD/test:/usr/share/nginx/html -d nginx
```

## テスト
http://localhost:8090/ にアクセスして、consoleを開きましょう。
テストボタンを押下して、APIの実行結果がconsoleに表示できれば完了です。

<img width="1214" alt="test.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/110482/2a18da94-cbc4-2b94-096d-a73c2ffad49e.jpeg">

お疲れさまでした :airplane: 

## 参考
- [Docker 再入門2018 - コンテナ編 - ばうあーろぐ](https://girigiribauer.com/archives/20180205/)
    - dockerでnginxコンテナにソース置けばいいじゃんというアイデアはこちらの記事から
- [【JavaScript入門】Ajaxの使い方とGET・POST通信まとめ！ | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト](https://www.sejuku.net/blog/30245)
    - ajaxの処理はこちらから
Comparatorで学ぶJavaのラムダ式

いまさらながら、Javaのラムダ式についての解説を書きます。

# Javaのラムダ式
そもそもラムダ式は無名関数を記述する方法として、関数型言語でよく使われていたものです。
関数に関数を渡すときなど、一時的な関数を作るときに使います。

Javaにおいては関数というものが存在しません(メソッドは必ずクラスの中に定義される)。
そのため、Javaのラムダ式は「単一の抽象メソッドを持つインターフェースのインスタンスを生成して受け渡す」という挙動になります。
単一のメソッドに限定されるのは、ラムダ式では1つの式しか記述できないため、複数のメソッドを持つインターフェースだとどのメソッドの式かが定まらないためです。

記述の方法としては

```java

(引数) -> {処理}
```

と書きます。
引数や処理が1つしかない場合、カッコは省略できます。

具体例として`Collections`の`sort`メソッドを見ていきます。
これは第1引数の`List`に対してソートを実行するメソッドですが、第2引数に`Comparator`インターフェースのインスタンスを渡すと`comparable`メソッドを使ってソート順を判断してくれます。
例えば、文字列のリスト(`strList`)を文字の長さでソートしたいときは無名関数だと以下のように記述できます。

```java
Collections.sort(strList, new Comparator(){
    @Override
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
})
```

`Comparator`クラスは`compare`メソッド**だけ**が定義されているインターフェースなのでラムダ式で以下のように書き換えることができます。

```java
List<String> strList = Arrays.asList("a","ccc","bb");
Collections.sort(strList, (s1, s2) -> s1.length() - s2.length());
System.out.println(strList); // [a, bb, ccc]
```

# 関数型インターフェースとメソッド参照
`Comparator`クラスには`comparing`メソッドが以下のように定義されています。

```java
comparing(Function<? super T,? extends U> keyExtractor);
```

引数の型が`Function<? super T,? extends U>`となっていますが、これは**関数型インターフェース**の一種です。
関数型インターフェースはラムダ式が使えるインターフェースであり、様々な種類が用意されています。
今回の`Function<? super T,? extends U>`は引数がT、戻り値がUの型を持つインスタンスであることを示しています。
TとUについては、以下のように定義されています。
`<T,U extends Comparable<? super U>> Comparator<T>`

Tは比較対象のインスタンスの型。Uは比較するためのフィールドの型です。
そのため、この関数型インターフェースはTのインスタンス同士を比較するための情報Uを返す式であるという意味になります。

先ほどの`Collections.sort`の処理を`comparing`メソッドで書くと以下のようになります。

```java
Collections.sort(strList, comparing(s -> s.length()));
```

`s -> s.length()`の部分は、String型インスタンスsのlengthメソッドを呼び出すという意味なので、**メソッド参照**で書き換えることができます。
メソッド参照はあるインスタンスに対して、そのクラスのメソッドを呼び出すという処理を簡単に書ける記述方法です。
`クラス名::メソッド名`で記述します。
先ほどの例をメソッド参照で書くと以下のようになります。

```java
Collections.sort(strList, comparing(String::length));
```

参考
[(o1, o2) -> o1 - o2 なんて呪文はもうやめて！ - Java8でのComparatorの使い方](https://qiita.com/tag1216/items/50ecf6a7bc10218ee889)
[JavaDoc:Comparator](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Comparator.html)
Pythonで世界地図-18（地球が自転するアニメグラフ）

私にとって、とてつもない記事を見つけました。
目からウロコではなく岩石くらいの衝撃です。

Pythonで世界地図-7（地球が自転するアニメgif動画）
https://qiita.com/ty21ky/items/abf810a1e26e974930b8
を投稿した時に、いろいろ探したのですが、この記事は2018-07-13とつい最近の記事ですので前回の時はなかったのですね。

参考
Python: matplotlib で動的にグラフを生成する
https://blog.amedama.jp/entry/2018/07/13/001155

![a.gif](https://qiita-image-store.s3.amazonaws.com/0/238800/bf8cc563-62af-68d1-f1f8-8bbeffa085b5.gif)

上のアニメgifは前回の物ですが、今回はmpl_toolkits.basemapの地図を再描画しているので、intervalをいくら短くしてもこれの数分の1くらいのスピードで、なおかつスムースではありません。
これは、私が使用しているPCのspecが低い(i3-7100, 8GB)からかも知れません。

白黒の地球でこれですから、色を付けるくらいなら関係ないと思いますが、標高図・衛星図などではもっと遅くなると思います。

ドキュメントを読めば、何でも載っていると思うのですが、日本語で書いてあっても理解できないものもあるし、英語などでは、いちいち翻訳して(Google翻訳)も100%理解出来るものもありますが、普通50%もわかれば御の字の場合が多いです。
わかったとしても、サンプルコードがないと、うまく動かない場合も多いです。

```python:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib import animation

lat = 0

def _update(frame):
    """グラフを更新するための関数"""
    # 現在のグラフを消去する
    plt.cla()

    my_map = Basemap(projection='ortho', lat_0=lat, lon_0=frame,resolution='c', area_thresh=10000.0)

    my_map.drawcoastlines()

def main():
    # 描画領域
    fig = plt.figure(figsize=(4, 4))

    params = {
        'fig': fig,
        'func': _update,  # グラフを更新する関数
        'interval': 1,  # 更新間隔 (ミリ秒)
        'frames': np.arange(359, 0, -1),  # フレーム番号を生成するイテレータ
        'repeat': True,  # 繰り返す
    }
    anime = animation.FuncAnimation(**params)


    # グラフを表示する
    plt.show()
    plt.close()  #クローズしてメモリを開放する。連続して行う場合は必ず必要。


if __name__ == '__main__':
    main()
```
Githubリボン風のものを作るVueコンポーネント

Githubリボン風のものを作るVueコンポーネントを作ってみた。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/5557/5324ca5f-261d-b746-1f3a-2b4b9404010f.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/5557/75f7b0df-9d3e-8f33-4e79-a88f88201259.png)

文字によって色が自動的に決定されるという、嬉しいのかわからない実装をしつつ。

動くデモはこちら
https://jsfiddle.net/shinobu_shiva/eywraw8t/167025/
MacでHDDまるごとコピー（Sierra以降）

USB3.0 の外付けHDDを新しいドライブに新調したのでメモ。

1. ディスクユーティリティを起動
2. 引越し先のドライブを右クリックし、ポップアップメニューからPartitionsを選択
3. 引越し先のサイズを指定して、新しいパーティションを作成。
4. 作ったパーティションを右クリックし、ポップアップメニューから Restore を選択
5. 引越し元のパーティションを選択するとコピーが始まる

引越し先のパーティションを作るときのサイズを、あらかじめ引越し元よりも大きくしておけば、あとでパーティションを広げたり、結合したりという手間がない。

TimeMachineのパーティションも同じ方法でコピーできる（あらかじめTimeMachineを止めておくこと）。

`cp -a` したり`rsync`したり`dd`したりも試したけど、結局これが一番確実で楽だった。

[macOS SierraのためのDisk Utility: 「ディスクユーティリティ」を使用して物理ディスクにパーティションを作成する](https://support.apple.com/kb/PH22240?locale=ja_JP)
ブロックチェーンに関わる様々な暗号技術

# ハッシュ関数

**ハッシュ関数**とは、入力した値に対して全く別の値が出力される関数である。
出力された値を特に「ハッシュ値」と呼ばれる。

ハッシュ関数の特徴は下記の通り

- 同じ値を入力した場合は必ず同じ値が返される
- ハッシュ値から入力値を特定することは計算量的に困難なため、不可逆性がある
- 入力値が英数字少しでも異なれば全く別の値が出力される
- 出力される値は入力値のいかんに関われる固定長が返される
- 入力値が異なる場合は同じ出力値が返されることは原則なし

ハッシュ関数にはSHA-256やRIPEMD-160などと行った関数が存在する。

## SHA-256

NIST(米国標準技術局)によってFIPS180-4として標準化された「SHA-2」規格の一部として定義されたもの。
- SHA-224: ハッシュ値の長さが224ビット
- SHA-384: ハッシュ値の長さが384ビット
- SHA-512: ハッシュ値の長さが512ビット
- SHA-256: ハッシュ値の長さが256ビット

Linux環境で**sha256sum**コマンドを使用すると入力された値がSHA-256でハッシュ化される。

<img width="661" alt="スクリーンショット 2018-07-11 22.53.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/44392/e2dbb175-688b-967d-50a8-492ca265aed2.png">

入力する値を大小変更すると全く異なる値が返されます。

<img width="710" alt="スクリーンショット 2018-07-11 22.54.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/44392/e8aa0648-e7f2-5925-f834-2c4021ab6a9a.png">

入力する文字が1文字でも値が返されます。

<img width="651" alt="スクリーンショット 2018-07-11 22.57.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/44392/ee141f10-a531-c8ea-a261-31ff69e224de.png">

## RIPEMD-160

**RIPEMD-160**とは「RACE Integrity Primitives Evaluation Message Digest」の略称。
ハッシュ関数の一つ。
RIPEMD-160はオリジナルのRIPEMDでは128ビット長であるハッシュ値を160ビットにした上で改良したものをSHA-256よりも短いハッシュ値で出力される。

Linuxに標準でインストールされている**openssl**コマンドで確認できる。

<img width="632" alt="スクリーンショット 2018-07-11 23.00.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/44392/8f7b21f9-a776-8412-cd08-c333361ca046.png">

## HASH160
**HASH160**はハッシュ関数ではないが、SHA-256で出力されたハッシュ値をさらにRIPEMD-160でハッシュ化すること。

今日はここまで
RxDataSourcesライブラリ＋UITableViewを使ってMVVMサンプルiOSアプリを作る

情報が古くなっており、メンテナンスが難しいため、こちらのページはアーカイブさせていただきました。

古い情報でも閲覧を希望される場合は、編集履歴からご覧くださいませ。
PHPとRubyを比較してクラスついて理解する_100DaysOfCodeチャレンジ25日目(Day_25:#100DaysOfCode)

## はじめに
この記事はTwitterで人気のハッシュタグ#100DaysOfCodeをつけて、
100日間プログラミング学習を続けるチャレンジに挑戦した25日目の記録です。

## 動作環境
* PHP 7.1.16 (cli)
* Ruby 2.4.1p111 (2017-03-22 revision 58053)

## 本日学んだこと

* selfとクラスメソッド

## selfとクラスメソッドについて

クラスの中で`self`を使うことで、文字通り自分自身を表すことができます。

また、`self`はクラスメソッドを定義するときにも使われます。

クラスメソッドとは、クラスが生成するインスタンスとは関連のないメソッドを作りたいときに定義するメソッドのこと。

PHPの場合、クラスプロパティを作成した後にゲッターによってクラスメソッドを呼びだし、Rubyでは`クラス名.クラスメソッド`の形式で呼び出します。

以下の例では、PHPとRubyでインスタンスが生成される度に、生成されたインスタンスの数を数える`count`というクラスメソッドを実装しています。


```php
class Animal {
  private static $count = 0;
  public function __construct($kind) {
    $this->kind = $kind;
    self::$count++;
   }
  public function getCount() {
    return self::$count; //selfはAnimalを表している
  }
}
//ここから下はクラスの外部
$penguin = new Animal('キングペンギン');
echo Animal::getCount(); //クラスメソッドの呼び出し。1が返ってくる。
```

```ruby
class Animal
  
  def initialize(kind)
    @kind = kind
    if defined?(@@count) # @@countはクラス変数(クラスから生成された全てのインスタンスから参照できる変数)
      @@count += 1
    else
      @@count = 1
    end
  end
  
  def self.count
    @@count
  end
end

count_animal = Animal.new('キングペンギン')
p Animal.count
```
30日でできる！OS自作入門　day2

#こんにちは
17歳JK界隈の切り込み隊長，こっそり歩くです．

#2日目
ブートローダの説明，そしてMakefileの作り方という内容でした．
特筆する点はなし．

#URL
本に書いてた作者さんのページのURLを打ったら500が帰ってきました．悲しい．
arch linuxでパッケージをダウングレードする

# 環境
bash

# どうして
あるパッケージのバージョンが上がったことで、あるソフトが動かなくなりました。
依存先のアップデートへのソフトの対応にコミットすべきですが、そんな能力もなく、とりあえずパッケージのダウングレードをしてみます。

# どうした
[downgrade](https://aur.archlinux.org/packages/downgrader/)というツールがあるようなのでそれを使いました。

~~`$ yaourt -S downgrade`~~(2018/08/13修正)
yaourtはサポートが終了しました。
私はpakkuを利用しているのpakkuで書くと以下です。
`$ pakku -S downgrade`
`$ downgrade <package A> <package B>`
どのバージョンに戻すか選択肢が示されるので数字を指定します。
もし、依存が壊れる場合には警告してくれますので、
`$ downgrade <package A> <package B> <package C>`
のように追加してまとめてダウングレードすればよいようです。

# トラブルシューティング
ダウングレードしようとすると以下のようなエラーが発生

```terminal:Console
$ downgrade package-name
/usr/bin/downgrade: line 124: pacsort: command not found
```
`pacsort`がわからないようです。
原因pacmanに含まれていた一部のツールがpacman-contribに移行されたためのようです。[^1]
解決策はpacman-contribのインストールです。
`# pacman -S pacman-contrib`

# もっと詳しく
`add <package A> to IgnorePkg? [y/n]`
のように聞かれます。
これは、再びアップデートしてしまわないためにIgnorePkgにしていするかどうかを聞かれています。
yesを選択すれば、/etc/pacman.confの`IgnorePkg ='に追加されているはずです。

# 参考
[パッケージのダウングレード](https://wiki.archlinux.jp/index.php/パッケージのダウングレード)
[downgrade(github)](https://github.com/pbrisbin/downgrade)
[^1]: [paccacheが無い!?って人はpacman-contrib入れましょう](http://clomsync.hatenablog.com/entry/2018/08/04/221056)
ActionBarが透過にならなかったときに確認するところ

ActionBarを透過させようとしてググって出てきた情報では上手く行かずドハマリしたので
個人的備忘録も兼ねて残しておこうと思います。

# ActionBarを透過させる方法
「android actionbar 透過」とかでググれば出てくるので詳細は省きますが、
一言で言うとstyleをごちゃごちゃやります。
Qiitaにも参考になる記事があると思うのでよしなに調べてください。
本来ならそれで透過できます、現に問題なく透過できている画面はありました。
今回はその上手く出来ていた画面を参考にしたけどダメだったのが難問でした。
なぜならstyle設定しても透過できなかった場合の情報がなかったからです。

# チェックすべき項目
注意すべき点は2点
- ToolBarの親レイアウトをFrameLayoutにする
- AppBarLayoutを利用しない
今回ダメだった理由はLinearLayoutが親レイアウトになっていたことが原因でした。
なぜLinearLayoutだとダメなのかはわかりませんが、とにかくダメなんでしょう。。。
なお、AppBarLayoutを使っても透過できる方法も出てきたのですが、
私はAppBarLayoutを使わない方向で調整することにしたので上手く出来るかどうかは不明です。
ChromeOSからtermux使ってGCPにgcloudでssh

# はじめに
Chromebook (USキーボード) からいい感じにGCPにsshしたい。
どうせならgcloud入れていい感じにアクセスしたい。
ブラウザからsshすると、キーボードショートカットが微妙。C-v, C-n, C-p, C-wあたり。
Chromeのアプリでcroshってのがあるんだけど、何故かsshできなかった。
PlayストアでTermuxっての入れて試すことにした。

# Termux
人気高そう。
ChromebookにはPlayストアがあってAndroidアプリを入れられるので、これにした。
[Termux](https://play.google.com/store/apps/details?id=com.termux&hl=ja)
Termiusってのも入れてみたけど、Ctrlの挙動が微妙やった。

# 環境構築
ひたすらないものを入れていく。

```shell
pkg install openssh
pkg install emacs
pkg install curl
pkg install python
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud auth login
gcloud init
gcloud compute ssh user_name@instance_name
```

```gcloud auth login```は不要やったかも。もしくは```gcloud init```のあとにやるべきやったかも。
```gcloud init```は基本デフォルトでEnterおしまくった。
Zone聞かれるので、答えた。

あとで気づいたけど、ここにcurl使うやりかたかいてあった。
対話型インストーラってとこ。
[Cloud SDK のインストール  |  Cloud SDK のドキュメント  |  Google Cloud](https://cloud.google.com/sdk/downloads)

# 結果
できた。ごく普通のターミナル。

ログインしてEmacs開いているところ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/184221/1a40dd09-42df-a1bd-4645-466597ca9c93.png)

キーバインドも悪くない。
```Ctrl-space```が日本語切り替えなので、Emacsの範囲指定は```Ctrl-2```で我慢。
クリップボードが共有されていないので、そこが悩ましい。
これ入れてから、Chromebookが数秒固まる瞬間が出てきた。やだなぁ。
しばらく使ってみるか。
iOSアプリ開発を学びたかったらUdemyが断然おすすめ!

Udemyの者ではありませんが、iOSアプリ開発を独学したいという方の参考になればと思います。

僕がおすすめするコースは、こちら。

[iOS 11 & Swift 4 - The Complete iOS App Development Bootcamp](https://www.udemy.com/ios-11-app-development-bootcamp/)

日本語のやつも良さそうだが、このコースはクオリティが高すぎてびっくりした。（ていうかUdemyクオリティ高すぎ。）

どうやら、作成者はCoding BootCampの先生らしい。ちなみに[London App Brewery](https://www.londonappbrewery.com/)というCoding BootCamp。

唯一の障害は英語であることだが、Udemyには日本語自動字幕があるので、そちらを活用するのが良い。

## 良いところ
### 考える力が身につく
もっとも良いなと思った点は、コースの中で生徒にコーディングすることを促したり、実際に自分で調べてできるように教えたりしていること。写経すると、同じようなものは作れるようになるが、何か自分で新しいことをやろうとするとできない。という初心者が多いが、このコースをやり遂げられれば、スムーズにその後の開発につなげていくことができると思う。

### デザインが用意されている
きれいなデザインが用意されている。作成したアプリ等を友人等に見せびらかして、モチベーションアップできる。笑

### FireBaseなどバックエンドも踏まえたアプリを作成できる
実際にアプリを開発する際には、どのようにバックエンドと連携するかを考えると思うが、このコースではFireBaseを用いて連携する術を学ぶ。このあたりまできちんと考えられる書籍ってあまりないので、本当に素晴らしいと思う。
### エンジニアとして重要な考え方が身につく
DRYとかDebug等、重要なことをきちんと教えてくれます。ああ幸せ。
### 機械学習/ARが学べる(CoreML/ARKit)
機械学習をやっているので、CoreMLをどのように使用するかというのはとても参考になった。
### セール時は安い
僕が買った時は、1300円だった。
普通に書籍を購入すると3000円ぐらいするので、格安過ぎていったいどうなっているんだろうと思う。たぶんBootCampの宣伝になっているんだろうが。
## 注意したい点
### プログラミング完全初心者だと難しいかも
プログラミング初心者やパソコンに慣れていない人はいきなりやると少し難しいかも。
ProgateやドットインストールやPaizaで準備運動してから望むのが良さそう。
### Windows/Linuxだと難しいかも
仮想環境等でできるが、Macが一番！

## まとめ
BootCampのコースなので、エンジニアになってみたい！という人の事始めにはもちろんのこと、これからアプリ作りたいな〜とか、一歩進んだプログラミングをやってみたいという人におすすめできます。ちなみに新人研修とかで、これ使っても面白そうだなと感じました。
[Excel]セルのフォントをテーマのフォントに戻す

# はじめに

MS Officeの文書全体のフォントは、テーマのフォントで設定するべきである。

しかし、テーマのフォントを適切に設定せず、強引にフォントが変えられているExcelファイルをよく見るため、VBAからフォントを元に戻す方法のメモ。

# 方法

> [Font.ThemeFont プロパティ (Excel)](https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/font-themefont-property-excel "Font.ThemeFont プロパティ (Excel)")

を指定することで、テーマのフォントに戻すことが出来る。

手抜きで書くと以下のようになる。

```vb:アクティブなシートのフォントを本文のフォントに戻す
' 本文のフォントに戻す
Cells.Font.ThemeFont = xlThemeFontMinor
```

## 参考

`xlThemeFontNone`を指定すると、テーマのフォントとの関連付けが外れる。

セルのフォントを完全に固定したい場合（他のブックへ移動しても書式を維持したいなど）はこちらも。
Raspberry Piで材料シミュレーション

# はじめに
Raspberry Piは、Mathematicaが無償（非商用）で提供されているなど、組み込み用途だけでなく、科学技術計算にも利用できます。もちろん、材料シミュレーションにも使えます。

# ハードウェアの用意
高速CPUと大容量メモリが望ましいことは、言うまでもありません。執筆時点で最高性能のハードウェアを用意しました。

* [Raspberry Pi 3 Model B+](https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/)
  * ARMv8 (64 bit対応)、1.4 GHz、4コア
  * メモリ1 GB
  * （イーサネット実質300 Mbps）

複数のノードがネットワークを介してデータ通信しながら協調動作する並列計算も期待できそうですが、今回は利用しません。
CPUに長時間連続して高い負荷をかけることを前提に、ヒートシンクとファンを装着しました。ファンの電源はGPIOからとります。ピン配列はこちらを参照してください。
[GPIO - Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/usage/gpio/README.md)
CPU温度が上昇するとクロックダウンする機能が備わっているので、計算性能を維持するために注意しましょう。
![raspi.jpg](https://qiita-image-store.s3.amazonaws.com/0/159352/8fc23b2f-f5ee-8ebf-0f55-6446bd06af45.jpeg)
他に、 SDカード (32 GB)、USBのキーボードとマウス、HDMIでつながるディスプレイを用意します。

# インストールと計算環境の設定
USBからの起動やネットワークブートもできるそうですが、お手軽なSDカードを利用します。

公式OSであるRaspbianは、32 bit版のみが提供されています。ARMv8の64 bit実行モード (AArch64)は、32 bit実行モード (AArch32)と比べて大幅に機能拡張されていますので、前者の方が高速動作が期待できそうです。
[ARM、64ビットアーキテクチャ「ARMv8」の概要を公開 (2)](https://news.mynavi.jp/article/20111031-arm_v8/2)

複数のLinuxディストリビューションから64 bit版OSが提供されていますので、ここではOpenSUSE（Leap 15.0; XFCE）を選びました。
[HCL:Raspberry Pi3 - openSUSE](https://en.opensuse.org/HCL:Raspberry_Pi3)
ダウンロードしたファイルは圧縮されていますので、[7-Zip](https://www.7-zip.org)などのソフトウェアを利用して伸張します。

SDカードをフォーマットします。Windows標準搭載機能を使ってフォーマットできますが、専用ソフトウェアを利用した方が良いそうです。
[SDメモリカードフォーマッター - SD Association](https://www.sdcard.org/jp/downloads/formatter_4/index.html)
続いて、先ほど伸長したOSのイメージを、SDカードに書き込みます。
[Win32 Disk Imager download](https://sourceforge.net/projects/win32diskimager/)

以上で準備が整いました。SDカードを本体に装着し、電源を入れると起動します。初期設定は、rootのパスワードが`linux`となっています。起動後直ちに変更します。一般ユーザーを作り、管理作業以外の操作は一般ユーザーを使いましょう。

ネットワークの設定には少々手間取りました。私の環境では、インストール直後は有線ネットワークが正常に動作しませんでした。一旦無線で接続してソフトウェアを更新後に、有線が動作するようになりました。有線ネットワークのハードウェアは旧機種から変更されているので、ドライバが間に合っていなかったのかもしれません。

パッケージ管理は`zypper`コマンドを使います。追加ソフトウェアをインストールします。

```sh
# zypper --non-interactive install gnuplot gcc-fortran gcc-c++　openmpi3-devel fftw3-devel
```
OpenMPIのコマンドは`/usr/lib64/mpi/gcc/openmpi3/bin/`にインストールされます。同ディレクトリを`PATH`に追加しましょう。またFFTW3のライブラリは`/usr/lib64/`にインストールされます。

この時点でSDカードの空き容量は約25 GBでした。

# アプリケーションソフトウェアの導入
コンパイル作業は、Intel系プロセッサのLinuxとほぼ同じです。別記事を参照してください。ソースコードは、ネットワークを利用してコピーします。
[アプリケーションソフトウェア導入](https://qiita.com/USAMI_Mamoru/items/385e4eaf8fc30fbb4db2#アプリケーションソフトウェア導入)

## 相違点

### PHASE/0
Makefile中、コンパイルコマンドのオプションに`-m64`があります（三か所）が、これらは不要です。削除してください。

### libxc
コンパイル中にコンパイラ(gcc)が異常終了してしまいました。最適化レベルを下げると正常にコンパイルできましたので、`configure`時にオプションを追加してください。

```sh
$ ./configure CFLAGS=-O0
```

# 性能評価
公平公正なベンチマークは難しいので厳密な評価ではありません。コンパイラ等のバージョンも統一していません。

## 比較対象
Core i5-4200U搭載ノートパソコン。
物理コア２、Hyper Threadingで4論理コア、Windows 8.1。
コアを二つ割り当てた仮想マシン（Virtual Box）でCentOS7が稼働。

## 計算課題
ITO（In$_2$Sn$_2$O$_7$; 基本格子22原子）のPHASE/0によるSCF計算に要する時間を測定。

## 結果

|計算機環境と並列条件|所要時間|
| :-- | :--: |
| Raspberry Pi（バンド2並列、k点2並列の計4並列） | 64分 |
| 比較対象WindowsノートPC（k点2並列） | 7分 |

同じコア数で比較すればCore i5が速いことは予想していましたが、これほど差がつくとは思いませんでした。積極的にRaspberry Piをお勧めする場面は限られますが、例えば、主にノートパソコンをお使いで、それを頻繁に持ち歩いている場合は、長時間の計算は事実上できません。そんな時には、卓上にRaspberry Piを置いて、計算し続けてはいかがでしょうか。

# まとめ
これだけでは実用に供する材料シミュレーションとはなりませんが、本格的な予算獲得に向けた準備・練習に是非活用してください。
SQSをイベントソースとするLambdaで同時実行数の制限によりSQSメッセージが処理されなかった場合でもSQSメッセージの受信数はカウントされる

# 背景

## やりたいこと
以下のようなアーキテクチャが実現できるか考えてみました。

![a.png](https://qiita-image-store.s3.amazonaws.com/0/61641/ffa0ba8b-6ec9-f405-7580-8c87a3735036.png)

- SQSキューにメッセージが送信されたらLambdaを起動したい。
- LambdaはDynamoDBにアクセスする。
- DynamoDBのキャパシティユニットを一定に抑えるためにLambdaの同時実行数を制限したい。
- 同時実行数の制限によって処理されなかったSQSメッセージは元のSQSキューに戻し、Lambdaの同時実行数が減ったら改めて処理したい。
- プログラムのエラーによりLambdaで処理できなかったSQSメッセージはデッドレターキューに転送したい。

## 関係するLambdaの機能
このアーキテクチャの実現にLambdaの以下の機能が利用できます。

### Lambdaの関数レベルの同時実行数の管理
- [同時実行数の管理 - AWS Lambda](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/concurrent-executions.html)

### LambdaのイベントソースとしてSQSを使う
先日、AWS LambdaでSQSをイベントソースとしてサポートすることが発表されました。

- [Using AWS Lambda with Amazon SQS - AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html)

詳しくはクラスメソッドさんの記事を参照してください。

- [AWS LambdaがSQSをイベントソースとしてサポートしました！ ｜ Developers.IO](https://dev.classmethod.jp/etc/aws-lambda-support-sqs-event-source/)

# 疑問
同時実行数の制限によってLambdaの起動に失敗した場合、トリガーとなったSQSメッセージの受信数はカウントされてしまうのでしょうか。

もしそうなら

> - プログラムのエラーによりLambdaで処理できなかったSQSメッセージはデッドレターキューに転送したい。

の要件でデッドレターキューを設定しているため、同時実行数の制限によるLambdaの起動失敗を繰り返した結果、SQSメッセージがデッドレターキューに転送されることが考えられます。よって

> - 同時実行数の制限によって処理されなかったSQSメッセージは元のSQSキューに戻し、Lambdaの同時実行数が減ったら改めて処理したい。

の要件を満たすことはできません。

# 検証

同時実行数の制限によってLambdaの起動に失敗した場合、トリガーとなったSQSメッセージの受信数がカウントされるのか、検証してみました。

## 検証環境の構築

### SQS
`sample`と`sample-dead`という2個のキューを用意します。

![1. sqs_queue_list.png](https://qiita-image-store.s3.amazonaws.com/0/61641/e954a488-f7c5-0212-6a30-20c3ec93057c.png)

また`sample`キューは`デッドレターキュー`を`sample-dead`に、`最大受信数`（デッドレターキューに送信されるまでにメッセージを受信できる最大回数）を`1`に設定します。

![2. sqs_sample_queue_config.png](https://qiita-image-store.s3.amazonaws.com/0/61641/586907fb-8b44-1e01-c132-bfeb215c4e58.png)

### Lambda
`sample`という関数を作成し、`sample`キューをイベントソースとして指定します。

![3. lambda_with_sqs_as_event_source.png](https://qiita-image-store.s3.amazonaws.com/0/61641/ce678330-1648-efc2-ba62-98fa8e2b4c38.png)

また関数の同時実行数を0にします。これによりこのLambdaの起動は全て制限されます。

![4. lambda_throttling.png](https://qiita-image-store.s3.amazonaws.com/0/61641/b1b8bb0f-27ee-3ba9-f51a-b5f1a250c3a8.png)

## メッセージの送信
`sample`キューに対してメッセージを送信します。

![5. sqs_send_message.png](https://qiita-image-store.s3.amazonaws.com/0/61641/0cb9d36d-84f2-cb1f-abc3-08a5b8a84c94.png)

送信直後、すぐにメッセージが`処理中のメッセージ`に移動しました。Lambdaのイベントソースとしてメッセージが受信されたことがわかります。しかし、関数の同時実行数は0のため、メッセージがLambdaに渡されることはありません。

![6. sqs_message_in_progress.png](https://qiita-image-store.s3.amazonaws.com/0/61641/30c7a7e6-6cd5-3456-e147-cb84b8bb5843.png)

しばらくするとメッセージが`sample-dead`キューに移動しました。同時実行数の制限によってLambdaの起動に失敗した場合でも、トリガーとなったSQSメッセージの受信数はカウントされ、閾値を超えるとデットレターキューに転送されることがわかりました。

![7. sqs_message_in_dead_letter_queue.png](https://qiita-image-store.s3.amazonaws.com/0/61641/ccdc564a-6624-07f9-4b35-2dec41ed157f.png)

# 結論
同時実行数の制限によってLambdaの起動に失敗した場合でも、トリガーとなったSQSメッセージの受信数はカウントされるがわかりました。よってSQSをイベントソースとするLambdaに同時実行数の制限を設定しただけでは

> - 同時実行数の制限によって処理されなかったSQSメッセージは元のSQSキューに戻し、Lambdaの同時実行数が減ったら改めて処理したい。
> - プログラムのエラーによりLambdaで処理できなかったSQSメッセージはデッドレターキューに転送したい。

の2つの要件を同時に満たせないことがわかりました。
CryptZombiesレッスン１(チャプター1~5)の自分なりのまとめ

# はじめに
この記事は私がCryptZombiesを進めていく上で自分なりにまとめたものです。
書いてあることが１００％あってる保証はないです。
**参考にしたサイト**
サイト名: イーサリアム上のDApp開発をゲームを作って学びましょう
URL: 　https://cryptozombies.io/jp/　

**この記事の問題文と答えについては上の参考にしたサイトから引用しています。**
# チャプター１: レッスンの概要
 ゾンビの外見はゾンビDNAで決まる。
 ゾンビDNAは簡単なもので１６桁（例：　8356281049284737）　　
 例えば最初の２桁が頭の種類を表している
　　83 % 7 + 1 = ７と計算していて頭の種類が７種類ある
# チャプター２: コントラクト
solidityのコードはcontractの中にカプセル化されている。
**コントラクト**はethereumアプリケーションの基本ブロックのこと。
変数やファンクションは全てコントラクトに属している。

```
contract contract名{

}
```
で定義される。
### version pragrma
solidityのソースコードの最初にはversion pragrama(コードが使用するSolidityのコンパイラのバージョンを宣言するもの)を書かなければならない。
具体的には

```
pragma solidity ^0.4.19;  //0.4.19はsolidityのversion
contract contract名{

}
```
このように書く。

### チャプター２　テストの実行
問題文１: solidity 0.4.19バージョンを指定して、コントラクトを使う準備をせよ
問題文2: ゾンビ軍団を生み出すための、ZombieFactoryというコントラクトを作成してみよ。
答え

```
pragma solidity ^0.4.19; 　　//0.4.19はsolidityのversion
contract ZombieFactory{ 
}
```
### チャプター2の感想・まとめ
contractはclassの様なものな気がした。
# チャプター３　状態変数と整数
### 用語について
**状態変数**
コントラクト内に永遠に保管され続けるもの。イーサリアムブロックチェーン上に記載されるらしい。データベースに書き込むようなもの。
コントラクトについてはまだ完全に理解できていないのでブロックチェーン上でどのように動いていくのか勉強する必要がある。
例

```
contract Example {
  // この部分がブロックチェーン上に記載される
  uint 変数名 = 100;
}
```
上のコードはuint型の変数（変数名は任意）を定義してそこに１００を入れている。
**uint型について**
・ 符号無しの整数のデータ型。負数ではないことを表している。
・ uintは２５６ビットの符号無しの整数である。
・ uint8,uint16,uint32など少ないbit数で宣言することもできる。
### チャプター３　テストの実行
**問題文**
我々ゾンビのDNAは16桁の数字で決まる。

dnaDigitsというuintを宣言し、それを16に設定せよ。
**答え**
```  uint dnaDigits = 16;
```
上のやつを追加する
**チャプター３の感想・まとめ**
変数の定義は他のプログラミング言語とだいたい同じだった
# チャプター４ 数式演算
### 演算子一覧
加算（足し算）: x + y
減算（引き算）: x - y
乗算（掛け算）: x * y
除算（割り算）: x / y
剰余（余り）: x % y
他の言語と一緒
**solidityは指数演算もできる。**
xのy乗は　x ** y　と書ける
例

```
uint x = 5 ** 2; // 5^2 = 25 と同様
```
### チャプター４ テストの実行
**問題文**
ゾンビのDNAが16桁の数字だと確認するために、別のuintを作成して10^16と設定せよ。後のレクチャーでは剰余演算子である %を使用して整数を16桁に縮小できる。
1. dnaModulusという名前の uintを作成し、10のdnaDigits乗に設定せよ。
**答え**

``` uint dnaModulus = 10 ** dnaDigits;
```
これを追加する。
### チャプター4の感想・まとめ
%と１０の１６乗を使うと整数を１６桁に縮小できる理由が分からない。
演算子はほぼ他の言語と一緒
# チャプター５ 構造体
### 用語について
**構造体**
元々ある型の変数を寄せ集めて新しい型を作れる物。複数のプロパティを持つ複雑なデータ型を作成することができる。
**例**

```
struct 任意の構造体名 {
  uint age;
  string name;
}
```
このように書くと構造体を定義してその中にuint型のageとstring型のnameを入れれるようになる。
### String型について
Stringは任意の長さのUTF-8データに使用される。
例
```string greeting = "Hello world!"
```
### チャプター５　テストの実行
**問題文**
1. Zombieという名前のstructを作成せよ。
2. Zombie 構造体にプロパティを2種類設定せよ：name (string)、と、dna (uint)だ。
**答え**

```
    struct Zombie{
        string name;
        uint dna;
    }

```
これを追加する。
### チャプター５の感想・まとめ
構造体いろんな型のものを入れておける物。
今回はZombieに名前の要素とDNAの要素を定義した。

#次の記事
https://qiita.com/daichi77/items/3ae60fab23634f340e6e
【Rails 5.2】i18nでenumを日本語化 & モデル（model）別にYMLファイルを管理

## STEP1 : Gemfile 設定
```:your_app/Gemfile
gem 'enum_help'
```

## STEP2 : locale 設定
```:your_app/config/application.rb

module YourApplication
  class Application < Rails::Application

    # 以下追記
    config.time_zone = 'Tokyo'
    config.active_record.default_timezone = :local
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
    config.i18n.default_locale = :ja    


  end
end
```

## STEP3 : ja ファイル設置
### サンプルのモデルを`User`、enum を`sex_type`とします
```:config/locales/models/user/ja.yml
ja:
  activerecord:
    models:
      user: ユーザ情報
    attributes:
      user:
        sex_type: 性別
  enums:
    user:
      sex_type:
        male:男性
        female:女性
```

## STEP4 : view で確認
```
<%= form_with(model: @user, local: true) do |form| %>
  <table>
    <tr>
      <th><%= form.label :sex_type %></th>
      <td>
        <%= form.select :sex_type, User.sex_types_i18n.keys.map { |k| [User.sex_types_i18n[k], k]} %>
      </td>
    </tr>
  </table>
<% end %>
```

## 参考
- [Railsでgem無しに手軽にenumをi18nに対応させる](https://qiita.com/daichirata/items/9495e2548417a4507fec)
- [【Rails】enumをI18n対応させるenum_helpが便利すぎた](http://kimuraysp.hatenablog.com/entry/2016/05/19/233144)
Scratch ゲームを作ろう(写経)


- [子供の科学★ミライサイエンス プログラミングでなにができる?](http://www.seibundo-shinkosha.net/products/detail.php?product_id=5759)の「Part1 ゲームを作ろう」を写経したときに学んだこと
- 書籍通りに進めれば特に詰まるところは無かった

# Scratchの操作など

- 座標はx軸が-240(左)～240(右)。Y軸が180(上)～-180(下)。 
- ステージに表示された変数`xx`を隠したい場合、「データ」のブロックパレットにある・・・
  - `xx`の左にあるチェックを外す
  - 「変数`xx`を隠す」をクリックする

        ![capture1.PNG](https://qiita-image-store.s3.amazonaws.com/0/268273/787cf6d7-1ab9-ae96-2498-e0776f37241c.png)

- ステージに表示された変数をダブルクリックすると表示が変わる
  - 以下の3タイプ

         ![capture2.PNG](https://qiita-image-store.s3.amazonaws.com/0/268273/7022bdf9-55b9-8365-45a4-dc5bc94e25c5.png)

- [クローン](https://ja.scratch-wiki.info/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%B3)  
  - スプライトを複製できる

# 本の内容的な部分

- 以下、引用です

> page 031
> プログラミングで使う部品にわかりやすい名前をつけていくのは、プログラミングの基本テクニックだよ。
> 
> page 033
> そして最初からつくりたい動作をつくるのではなく、まずは単純なものをつくって、少しずつゴールに近づいていくようにするのも大切だ。
>
> page 044
> そのまま「岩」っていう名前にはしなかったよ。ゲームが完成した後で見た目を岩以外の何かに変更するかもしれないよね。だから名前はスプライトの役割である「障害物」という名前にしておいた。

# 参考

- [子供の科学★ミライサイエンス ラインナップ](https://www.kodomonokagaku.com/miraiscience/index.html#Lineup)
Tcl/TkでWindow IDを生成する関数

私がTcl/Tkスクリプトを作るときに最初に必ず(やむにやまれず)書くwid関数。

```tcl
proc wid {{parent ""}} {
    global wid_number
    if {[string index $parent end] != "."} {
        append parent .
    }
    return ${parent}wid[incr wid_number]
}
```
(本題には関係無いけど、「string index」や「lindex」など数値で位置を指定する関数で、末尾を指定するために「end」、末尾2個前を指定するために「end-2」などと書くところが、些細ではあるけどTclを気に入っているポイントのひとつだったりする)

使い方は、例えばframeにfoo、bar、bazというラベルを表示する場合に、以下のようにwindow idを自動生成するために使う。

```tcl
set wp [frame [wid]]
grid $wp
foreach i {foo bar baz} {
    set w1 [label [wid $wp] -text $i]
    grid $w1
}
```

本やWebのスクリプト例だと、

```tcl
grid [frame .f1]
grid [label .f1.l1 -text foo]
grid [label .f1.l2 -text bar]
grid [label .f1.l3 -text baz]
```

のようにwindow idを自分で命名しているものがほとんどだけど、実際にスクリプトを書くようになるとwindow idの生成が煩わしくなってきて、結果的にこのやり方に落ち着いた。

いっそウィジェットに「-parent window」みたいなオプションがあっても良さそうに思うんだけど、これまでそういう改良が行われなかったということは、自分でwindow idを明示する方が一般的ということなんだろうか・・・。
【CentOS7】共有ライブラリのエラーでVCSA6.7がインストールできないときに確認したいこと

#環境
**使用サーバー**
HP EliteBook 2560p

**使用vSphere**
ESXi6.5.0 ビルド番号：8294253

**使用vCenter**
vCenter Server Appliance6.7

#エラー内容
CentOS7上でVCSA6.7のインストールを実行すると、共有ライブラリのロード中にエラーが発生しインストールが中断される。
発生したエラーは以下の通り。

![act](http://drive.google.com/uc?export=view&id=1NlRhTD-P3WQlRHHgM5WYvGQd-bdxNSrd)

「libXss.so.1」という共有ファイルがなかったため、インストールが実行できなかったことが読み取れる。

#解決方法
####①yum whatprovidesコマンドを使う。
このコマンドはコマンドやパッケージをyumリポジトリの中から探してくれる。
今回は、「libXss.so.1」というファイルがどのパッケージに含まれているのか検索する。

![pic](http://drive.google.com/uc?export=view&id=1lc8Am6yCLzut_5kmQXFCJziCtdDMM_5F)

その結果、「libXss.so.1」を提供するパッケージは「libXscrnSaver-1.2.2-6.1.el7」であることが分かったため、このパッケージをyumでインストールすればよい。

####②yumコマンドで「libXscrnSaver-1.2.2-6.1」パッケージをインストールする。
以下コマンドを実行し、Complete!が表示されたらインストールが完了する。


```ruby:
[root@localhost ~]# yum install libXscrnSaver-1.2.2-6.1
.
.
[中略]
.
.
Installed libXscrnSaver-1.2.2-6.1.el7

Complete!

```

VCSA6.7インストーラーをダブルクリックし、インストール画面が表示されることが確認できればOK！
SharePointOnline をSharePointDesignerで開くには、SP1の適用が必須

SharePointOnlineのサイトのデザインを
カスタマイズするために、
SharePointDesignerをインストールしたが、

サイトに接続できない（権限が無いと言われる）。

ググったところ、SharePointDesignerの最新版である2013には
SP1が存在するらしい。

DLはこちらから。
https://support.microsoft.com/ja-jp/help/2817441/description-of-microsoft-sharepoint-designer-2013-service-pack-1-sp1


ただGoogle上位には無印のSharePointDesigner2013がヒットするので、SP1にたどり着くことが難しい。
こっちが無印のページ（SharePointDeisnerでぐぐるとこっちがTOPにくる罠）
https://www.microsoft.com/ja-jp/download/details.aspx?id=35491

なのでここにメモ。
chromeで終了時cookie全削除！拡張機能不要

2018/07/13執筆

#はじめに
最近PC向けブラウザを、Blink系マイナーから本家chromeに乗り換えたのですが、乗換前にできたマイナーブラウザ独自機能のうち、chromeで代替方法が全く分からず深刻な悩みだったものがあります。それは、終了時にCookieを全削除するというもの。
この2018年に、Cookie使わずに全てのサイトを快適に使うのはなかなか厳しくて。かといって、情報ダダ漏れも嫌な今日此頃。chromeのサードパーティー拡張機能、click＆cleanを使用しましたが、動作がやや不安定で不満でした。
これ以外の方法について、ネットを軽く調べた限りでは記載されていませんでした。でも、chromeのhelpを眺めていた所、本家chromeに実は2つの、自分にとって都合のいいものがあることに気づきました。それがこちら

**Cookie設定にはカスタムリスト"終了時に消去"がある**
**Cookie設定のカスタムリストには正規表現が使用可能(多分)**

#結論
つまり、**"終了時に消去"カスタムリストに、正規表現で全サイトを指定すれば、全サイトのCookieが終了時に消去されます**。驚き！なぜ自分はこんな単純なことに気づかなかったのでしょう。やり方が分かる人は以下飛ばしてOK。わからない人は以下

#重要
同日追記、閲覧履歴はこの方法だと消えないことに気づきました。だめじゃん何やってるんですかね自分。もう一部の拡張機能許可したシークレットモードにします。

#やり方
1. chromeの設定から、Cookie関連項目を開く

	各アドレスバーにこのリンク貼れば一発です
	
	```
	chrome://settings/content/cookies
	```

2. (忘却録)chromeには色々な動作設定がある為、何かあれば以下のリストから探しましょう。
	
	```
	chrome://about
	```

3. "終了時に消去"カスタムリストに以下を入力
	以下の2行を書き入れます
	
	```
	https://*
	http://*
	```

「httpsで開いたサイト全て、及びhttpで開いたサイト全て」を終了時に消去、という意味。localhostやsshなどは除外されそうですけど、chromeで開くのは基本この2つでしょうし充分では？
好奇心を持ち未来へ続くドアを進んで開けろ！　Hollywoodから来たチアベアが楽しいLED計画♡始めました。

　　Cheerbea came from cute Hollywood saw Japan's IchigoJam for the first time!　　　　　
　可愛いHollywoodから来たチアベアが日本のIchigoJamを初めてみたよ！

https://youtu.be/kc2_odGKp60

初心者には電子工作はつまづきばかりですが、
まず環境設定でつまづき方が　エンジニアの方でもいられることを知りました。
　なぜ？　いろいろな種類や言語が違うので、その分野だけをしている方が多いからだと知りました。

　いろいろみてみるのも、初心者としては面白いのではないかと思うの。
興味を持つことが大事だから、いろいろな色の基盤があるのよ！
基板だけでも可愛いの！
　一つのことをしっかり学ぶのも大事かと思いながら、真ん中を取り二つぐらいをメインにその時に応じて、楽しんでIoT(ものづくりをできたらと初心者は思うのです。いろいろなやり方があって、これから学ぼうと始めた人が、つまづいたときにも、楽しんでもらえたら嬉しいです。
　エンジニアになるわけではなく、プログラミングを楽しむことを大切にしたい！でも、IoT＝インターネットで作る物作りはしたい！
人のためになるもの、社会問題解決に、ストレス解消に、
まずあなたも、おしゃれにやってみましょう！！
Hollywoodから来たチアベアが、今回は案内します！！！

電子工作LED大好きギャル（？）を増やそう　楽しい計画♡

　そして、初心者は特にくたびれたら、🎶 チア体操もしてみましょう。
一度休憩して、水分を取り　深呼吸し、　体の部分部分を回して、🎶 チア体操しましょう。　（これもまたやりますね、お楽しみに）

　
ビデオを春先に作っていたのに、公開をためらっていたため、順番が逆になりましたが、それを特別公開します。
　今後いろいろなビデオや写真も　公開も考えていきたいと思いますが、

＊＊お願い＞CC BY にしたいので、　＊＊許可なく他での使用はしないでくださいね。（お断りくださいね）
　
　それと、いいね以外を押すのなら、見ないでください！　すごくめげました。
全く電子工作したことがない人が頑張って、全然繋げない事件もあったりを乗り越えて苦労してビデオ作った初心者の取り組みを応援してください。　初めてなのですから、時間かかかっているのに、文句言われるのは、やりたくなります。　初めての苦労している人が参考にしたい人のためのものですから。すんなり行く人は他にどうぞ！
pycharmのインタプリタにdockerを使用する

# はじめに
pycharmとdockerの連携はpycharm community版ではできません。
professional版でのみ可能です。

# 公式サポート
GPUを使用しない場合はこれで行けます。
https://pleiades.io/help/pycharm/docker.html
しかし、pycharmはndivia-dockerをサポートしていない？
みたいでGPUを使用する方法がなかなか見つかりませんでした。

# 方法
リモートインタプリタでsshを使用する。
[PyCharmのリモートインタプリタ機能でDeep Learningを手軽にできる開発環境を構築してみた](https://qiita.com/FaithnhMaster/items/a7e9aea842b9eb7392e2)
こちらのサイトに方法が書いてあったのですがdockerのコマンドなどがなったのでメモ。
### 手順
1. 記事に習ってDockerfileのみを作成(docker-composeはなくてもok)
2. dockerfileをbuildしてdocker imageを作成（dockerfileのあるディレクトリで以下のコマンドを実行）
    - ```docker build　-t tf-keras .```
        - tf-kerasと言う名前のイメージを作成

3. コンテナをrun
    - ```docker run --rm -it --name=root -p 8022:22 -v $(pwd):/workdir -w /workdir tf-keras-etc "$@"```
        - -v:自分の現在のディレクトリをコンテナ内の/workdirに送信
1. pycharmの設定
 File->setting->Project:Project name->Project Interpreter 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/266765/a698fedb-3dc6-a808-3356-cf3d57f53d63.png)

ここでadd
![image.png](https://qiita-image-store.s3.amazonaws.com/0/266765/32457008-94ed-e054-894d-6a1ba9424532.png)

SSH Interpreterを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/266765/6268930b-8cea-b2b1-bd94-d7afa63e934a.png)

Host:リモート接続先のIP
Port:8022
などをしてOK

Path Mappingを<Project root>→/workdirに
![image.png](https://qiita-image-store.s3.amazonaws.com/0/266765/65b6e2cd-05b7-7136-3320-a8f0c5c87f03.png)

1.実行

# 注意
- sshのためセキュリティに問題があるとかどうとか・・・
- Deploymentの設定のせいで実行するたびローカルのコードが消えました。Tools->Deployment->Automatic uploadが(always)になっていないことを確認しましょう。
Herokuデプロイまとめ

#Herokuデプロイで詰まったところを備忘録としてまとめる
##Vue.js,webpackerを使用している場合
データベースはpostgres
プロジェクトルートディレクトリにProcfileを作っておく
```
$ heroku create
$ heroku addons:create heroku-postgresql:hobby-dev
```
以下の二つのビルドパックの追加しなければならない
```
$ heroku buildpacks:add --index 1 heroku/nodejs
$ heroku buildpacks:add --index 2 heroku/ruby
```
その後は通常
```
$ git push heroku master
$ heroku run rake db:migrate
$ heroku open
```
##自分はこれでcssが読み込まれなかったので次のようにした
herokuにpushする前にターミナルで
`$ rake assets:precompile RAILS_ENV=production`
とした後、

```config/environments/production.rb
config.assets.compile = true #falseからtrueに
```
assets以下のapplication.cssで読み込むファイルは拡張子を省略してはいけない
##Action_cableを使用している場合
```ruby:config/environments/production.rb
config.action_cable.allowed_request_origins = [ /http:\/\/.*/ ]
```
```config/cable.yml
production:
  # adapter: redis
  # url: redis://localhost:6379/1
  # channel_prefix: ac_test_production
  adapter: async
```
と編集する
undefined method `+@' for ["2000", "2160", "160", "0"]:Array Did you mean?  +

## 型変換しても計算式として扱われているのか、文字列連結がうまくいかない。。

![スクリーンショット 2018-07-13 14.01.44.png](https://qiita-image-store.s3.amazonaws.com/0/213284/023292ba-8c75-9aa2-f7d7-2680c01752d7.png)


## 配列を並列に持ってきてコーディングしたらエラーが消えました。

```
    csv_data = CSV.generate(encoding: "UTF-8", headers: true) do |csv|
      csv << column_names
      histories.each.with_index do |history, i|
        部品（略）
        history.order.order_details.each.with_index do |detail, j|
          if history.order.order_code != detail.order.order_code
            同じ注文コードだったら余計なデータを表示しない
          else
            if j != 0
              # csvに空のフィールドを追加したい
              blank_data = []
              8.times do
                blank_data << ""
              end
              csv << blank_data +
              データの配列（略）
            else

              csv << history_row + shipment_row + 
               データの配列（略） +
              ["#{detail.quantity*detail.product_detail.unit_quantity}#{detail.product_detail.unit.name}"]+ history_price_row
              
              # history_price_rowはStringで出来たArray

            end
          end
        end
      end
    end
```



2018.07.14（追記）

コメント欄に
gae/go datastoreからデータをmapで簡単にサクッと取得する

datastoreからmap[string]interface{}でサクッとデータを取りたい時に、便利なので共有します。


コードに間違いなどありましたら、指摘してください

```go


import (
	"google.golang.org/appengine/datastore"
	"context"
)

func GetMap(ctx context.Context, key *datastore.Key) (map[string]interface{}, error) {
	res := map[string]interface{}{}
	list := &datastore.PropertyList{}
	err := datastore.Get(ctx, key, list)
	if err != nil {
		return nil, err
	}
	for _, v := range *list {
		if v.Multiple {
			switch t := res[v.Name].(type) {
			case nil:
				res[v.Name] = []interface{}{v.Value}
			case []interface{}:
				res[v.Name] = append(t, v.Value)
			}
			continue
		}
		res[v.Name] = v.Value
	}
	return res, nil
}



```
PHP5.4のシステムにPHPExcelをインストールした

## はじめに要件
PHPからエクセルを操作したい。
最初はPhpSpreadsheetを入れようとしました。

参考：PHPExcelが非推奨になったので後継のPhpSpreadsheetを使ってみる
https://qiita.com/mosaxiv/items/d71890ef203e506b75fc

しかし、PHPのバージョンが古くて入りませんでした。
[InvalidArgumentException]
Package phpoffice/phpspreadsheet at version  has a PHP requirement incompatible with your PHP version (5.4.45)

そこで古いPHPExcelを試してみました。

参考：PHPExcelでエクセル出力入門
https://qiita.com/suin/items/7a8d0979b7675d6fd05b


## composerのインストール
composerインストール
curl -sS https://getcomposer.org/installer | php

phpexcelインストール
php composer.phar require phpoffice/phpexcel

しかし、エラーとなります。

Problem 1
    - phpoffice/phpexcel 1.8.1 requires ext-xmlwriter

php-xmlが無いらしいです。

参考：composerでPHPUnitがインストールできない
http://blue-goheimochi.hatenablog.com/entry/2013/07/24/composer%E3%81%A7PHPUnit%E3%81%8C%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84


## php-xmlのインストール
php-xmlインストール
yum install php-xml

しかし、エラーとなります。

Error: Package: php-xml-5.3.3-49.el6.x86_64 (base)
           Requires: php-common(x86-64) = 5.3.3-49.el6

remiで入れたPHPだとphp-xmlもremiで入れる必要があります。

参考：PHP 5.5 などで PHP-XML などのインストール方法
https://himenaotaro.hatenablog.com/entry/2016/02/20/162600

remiでphp-xmlインストール
yum install --enablerepo=remi php-xml


## PHPExcelのインストール
PHPExcelインストール
php composer.phar require phpoffice/phpexcel

やっと成功します。
しかし、フォルダにテストプログラムをおいて実行すると、ステータス500のエラーとなります。

サーバーのログを見ると、php-xmlが機能していないようです。
PHP Fatal error:  Class 'XMLWriter' not found

・・php-xmlを入れた後にはApacheの再起動をしましょう。
service httpd restart

テストプログラムが成功しました！
Kotlin Style GuideをIntelliJに設定する

# 概要
Kotlin 公式の[Style Guide](https://kotlinlang.org/docs/reference/coding-conventions.html)をIntelliJに設定する方法が簡単だったので書いていきます。
リンク先にも英語で設定方法が書いてあるので、最新の情報はリンク先を参照してください。

# 環境
- macOS High Sierra 10.13.5
- IntelliJ IDEA ULTIMATE 2018.1

# やりかた
Preference -> Editor -> Code Style -> Kotlin を選択し、右上の「Set from…」と書いてある箇所をクリックします。

その後、Predefined style -> Kotlin style guide をクリックすれば設定完了です。

![スクリーンショット 2018-07-13 21.33.15.png](https://qiita-image-store.s3.amazonaws.com/0/160829/bef003ae-7cfc-8428-0793-de8617ab1e13.png)

Code -> Reformat Code すると、Style Guideに合わせてコードフォーマットされます。

# 参考
https://kotlinlang.org/docs/reference/coding-conventions.html
https://pleiades.io/help/idea/code-style-kotlin.html
【Ruby on Rails】【RDBMS】データベースの使い方[Progate]

この記事はシリーズものです。
前記事はこちらを参照しよう！
参照URL: https://qiita.com/hiroshimaeasyryo/items/9b28763cce7f01ed9c59


# では早速データベースを用意していきましょう

>データベースにデータを保存する為には、「テーブル」を作成する必要がある。

「テーブル」など基本的な用語についてはこちらの記事を参照しよう！
参照URL: https://qiita.com/hiroshimaeasyryo/items/c143e72aa007e3fa0e47

# 1.まずはマイグレーションファイルを作る

> マイグレーションファイルとは簡単にいうと
データベースに変更を指示する為のファイル。
このマイグレーションファイルを使うことで、SQL文を直接書かずに
データべースにテーブルを作成・変更することが可能。

つまりデータベースの種類(MySQL,PostgreSQL...)に左右されなくて済む。
(もっと言えばSQLが分からなくてもある程度大丈夫。)

また、テーブルの作成・変更をする毎にマイグレーションファイルが作成されるので、
そのファイルを使用してマイグレーションファイル実行前の状態にも戻せる。

> $ rails g model テーブル カラム名:データ型
でマイグレーションファイルを作成する

<img width="966" alt="スクリーンショット 2018-07-12 19.01.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/265778/caa856db-fad6-8556-e6bc-97e843a277fb.png">

<img width="973" alt="スクリーンショット 2018-07-12 19.01.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/265778/1af5bce4-d668-94b8-a8b7-f12a466fc30a.png">

> マイグレーションファイルはディレクトリ"db/migrate"の中に作られる

<img width="972" alt="スクリーンショット 2018-07-12 19.02.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/265778/30b53089-5fa5-e8f6-9317-244501f4c796.png">

> ファイルの中身はこんな感じだけど、コマンドによって自動生成
されたものなのでとりあえず理解しなくてよし

<img width="969" alt="スクリーンショット 2018-07-12 19.02.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/265778/d432675c-090d-e417-782f-fb007ed8b92e.png">


# 2.データベースに変更を反映させる

> コマンドで、
$ rails db:migrate
を実行する

<img width="1073" alt="スクリーンショット 2018-07-12 19.10.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/265778/c9f08faa-5baa-2d8b-f823-df9d8a4dc758.png">

> こんなテーブルが作成されます

<img width="893" alt="スクリーンショット 2018-07-12 19.14.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/265778/fc9e21b2-0bed-5bf3-12a5-c3f904ba666e.png">


# 3.モデルを用いる

> 「モデル」ってなんだ

テーブルを操作するための特殊なクラス。
$ rails g model モデル名
でモデルを作成することが可能だが、マイグレーションファイルを作った時の
$ rails g model Post:text
で実はPostモデルが生成されている。

<img width="974" alt="スクリーンショット 2018-07-12 19.27.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/265778/a827fae3-409b-dcb5-2479-02c062a0b90e.png">

ほら、できていた。
で、開いてみるとApplicationRecordというクラスを継承した、
Postクラスができていることがわかる。

<img width="969" alt="スクリーンショット 2018-07-12 19.27.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/265778/d840ed91-cc5b-e882-1197-3022bff065e6.png">

ApplicationRecordクラスが何かはちょっとまだわからない。
あとで触れられてくるはず。
csvをterminalで確認するコマンドをgoで作ってみた

# csvをheadで確認するのは辛い

1行が改行されるのが辛い
列がwindowに収まればギリギリ耐えられるけど列幅が行によって違うから辛い。

![head_cmd.gif](https://qiita-image-store.s3.amazonaws.com/0/35276/cdd6824a-ef75-96eb-1596-7b93cb9931b9.gif)

# csvhead

インストール方法

```
go get github.com/pshiko/catle
go install github.com/pshiko/catle/cmd/csvhead
```

https://github.com/pshiko/catle

goで書いてみた。
列の幅を揃えるの優先で、[termbox-go](https://github.com/nsf/termbox-go)使ってhjklで移動できるようにしてみた。
termbox-go便利


![tes2.gif](https://qiita-image-store.s3.amazonaws.com/0/35276/493ae7fd-ae3b-850d-f7a7-117b8c89659b.gif)


![test.gif](https://qiita-image-store.s3.amazonaws.com/0/35276/a2f78d3d-7924-03c8-af59-4e8a615691be.gif)

一応string列と、int列とSortだけ実装している。
column interfaceで各列のデータを持っているので、独自のcolumnを定義すればSortとか実装できるはず。
Findまで実装した方が良い気がしてきた。

pythonで書いてpandas使って実装した方が楽だった説。
【記録】Unity 2Dでゲームを作る 02

#Unity2dを使ってどんなゲームを作るか
・マウス操作(とりあえずWindowsを想定)
・クォータービュー
・シミュレーション
・街づくりっぽいの作成していきたい

#クォータービューの実装(断念)
[Unity 1週間ゲームジャム「フロー」でクオータービューに挑戦しました](http://eggame.hateblo.jp/entry/2017/08/29/191023)
先人は偉大である
だけどとりあえず、今回は初めてなのでトップビューから作成することに

#マップタイルの作成
[【Unity】タイルマップの基本的な使い方](http://baba-s.hatenablog.com/entry/2018/04/08/130000)
Unityに実装されているMapEditorを使ってみた
![image.png](https://qiita-image-store.s3.amazonaws.com/0/270036/43293295-3657-5c21-5f70-5c456a59c74b.png)
簡単なフロー
　マップタイルを拝借
　→UnityでSlice
　→スライスされたMapをTileEditorに読み込み
　→Tileから塗る
　 ※LayerでGroundとObjectで分けると便利、絵かきあるあるのレイヤー間違えも体験できるぞ！

#マウスカーソル取得 + キャラクター移動
キャラクター移動に関してはUFOチュートリアルと同等の内容なので割愛
マウスカーソル取得に関しては[【Unity】マウスの座標とGameObjectの座標を同期するスクリプト。](https://gist.github.com/Buravo46/8367810)をそのまま参考に
追随するイメージのポジションを常に更新してる。
将来的にはグリッドなのでクリックしたら該当グリット(32px*32px)が選ばれるように……したい。
![03.gif](https://qiita-image-store.s3.amazonaws.com/0/270036/3226b9e9-2550-8797-5500-805eec5a95ae.gif)

#UIを作る
[UnityのUIのクリックやドラッグのイベントを受け取る](https://gametukurikata.com/ui/uiclickdrag)
ここを参照し、MenuにScriptを埋め込む
![04.gif](https://qiita-image-store.s3.amazonaws.com/0/270036/ec84f8e6-300b-7deb-407a-86c4a8b486ec.gif)
も、失敗。ObjectにMouseがEnterしたらxPositionを画面端の固定値に変更
Exitしたら元のPosition値に設定したのだけど、うまくいかない。

UIの画像位置がpivot(0.5f, 0.5f)になっており、画像の中心が設定されていたので0,0へ変更
![05.gif](https://qiita-image-store.s3.amazonaws.com/0/270036/e4f7d4d1-d29a-99d0-c6b4-01404ecb929b.gif)
それっぽくなった
PEP572とGuido van RossumのBDFL引退

普段はPythonの最新の開発動向は追いかけていない私ですが、たまたまTwitterで
Pythonの生みの親Guido van Rossumの下記のツイートを目にしました。


<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">PEP 572 accepted. <a href="https://t.co/N9lKeDs7e5">https://t.co/N9lKeDs7e5</a></p>&mdash; Guido van Rossum (@gvanrossum) <a href="https://twitter.com/gvanrossum/status/1017213419101945856?ref_src=twsrc%5Etfw">July 12, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

何気なくこの[PEP 572](https://www.python.org/dev/peps/pep-0572/
)を斜め読んで、結構大胆な拡張だなぁ、などとその時は思っていました。

今日たまたま、Rubyの生みの親まつもとゆきひろ氏がこんなツイート

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">BFDL引退して、大食いユーチューバーを見てるってのは、それはそれで正しい生き方だな</p>&mdash; Yukihiro Matsumoto (@yukihiro_matz) <a href="https://twitter.com/yukihiro_matz/status/1017600588333240320?ref_src=twsrc%5Etfw">July 13, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

をしているのを見つけて、YoutuberっていうのはGuidoのこのツイート

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">My new favorite YouTube channel. <a href="https://t.co/JlTTtMLeNI">https://t.co/JlTTtMLeNI</a></p>&mdash; Guido van Rossum (@gvanrossum) <a href="https://twitter.com/gvanrossum/status/1014998821225443328?ref_src=twsrc%5Etfw">July 5, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

のことを指していると分かったのですが、**GuidoがBDFLを引退**っていうところにびっくりして調べてみました。

BDFLは、Benevolent Dictator For Lifeの略で[優しい終身の独裁者](https://ja.wikipedia.org/wiki/%E5%84%AA%E3%81%97%E3%81%84%E7%B5%82%E8%BA%AB%E3%81%AE%E7%8B%AC%E8%A3%81%E8%80%85)と訳されていますが、この言葉自体Guidoが使い始めたらしいです。

Pythonの言語仕様の拡張に関する提案は、PEPn (nは番号) という文書に記述されていますが、これらの提案を受け入れるか棄却するか、最終的に決定するというのが、今までのGDFLとしてのGuidoの役割でした。BDFLの役割や、PEPのドラフトやレビューといった言語仕様変更の手続き自体、[PEP1](https://www.python.org/dev/peps/pep-0001/#pep-editors)に書かれています。

生みの親がそれを辞めるというのですから大事ですが、その理由が、PEP572の議論だったそうです。詳しくは[この記事](https://lwn.net/Articles/759654/)に書いてありますが、要はPEP572での論争があまりにも激し過ぎて疲れ果てたし、自分の判断を嫌う人たちを見たくない、ということが理由ということです。

## PEP572

そんな未曽有の大論争を巻き起こしたPEP572は何についてかというと、代入式の追加です。
今までPythonでは名前への代入は文しかなく、代入式はありませんでした。[PEP 572](https://www.python.org/dev/peps/pep-0572/
)により、
``NAME := expr`` という代入式が新たに導入されることになります。正確には**named expression**という
式の値が右辺の`expr`の評価値で、副作用として同じ値に左辺の名前が付きます。新たなスコープは導入されません。

[PEP572](https://www.python.org/dev/peps/pep-0572/#syntax-and-semantics)に挙げられている例は、

```python
# Handle a matched regex
if (match := pattern.search(data)) is not None:
    # Do something with match

# A loop that can't be trivially rewritten using 2-arg iter()
while chunk := file.read(8192):
   process(chunk)

# Reuse a value that's expensive to compute
[y := f(x), y**2, y**3]
```

といったもので、確かに、cみたいに代入式が使えれば、同じものを二度評価したりしなくてもよかったり、もっと文が短くなるのに…と思うことはありました。

PEP572は、Python 3.8に反映される予定です。
MSX 仮想VRAM

```wall.c
/*
z88dk / WebMSX
zcc +msx -lndos -create-app wall.c
bload"cas:",r
*/

#include <msx/gfx.h>

#define BYTE unsigned char

#define WIDTH 64
#define HEIGHT 48

const int dx[] = { 0, 0, 1, 1, 1, 0, -1, -1, -1 };
const int dy[] = { 0, -1, -1, 0, 1, 1, 1, 0, -1 };

BYTE vvr[WIDTH * HEIGHT] = { 0 };

void gen_wall()
{
	int lines[][] = {
		{ 0, 0, 63, 0 },
		{ 0, 23, 63, 23 },
		{ 0, 47, 63, 47 },
		{ 0, 0, 0, 47 },
		{ 31, 0, 31, 47 },
		{ 47, 24, 47, 47 },
		{ 63, 0, 63, 47 }
	};

	for (int i = 0; i < 7; i++) {
		int x0 = lines[i][0];
		int y0 = lines[i][1];
		int x1 = lines[i][2];
		int y1 = lines[i][3];
		int w = x1 - x0;
		int h = y1 - y0;

		if (w >= h) {
			for (int j = x0; j <= x1; j++) {
				vvr[y0 * WIDTH + j] = 1;
			}
		} else {
			for (int j = y0; j <= y1; j++) {
				vvr[j * WIDTH + x0] = 1;
			}
		}
	}
}

void write_pgt()
{
	BYTE space[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00 };
	BYTE wall[] = { 0xff, 0x81, 0xbd, 0xbd, 0xbd, 0xbd, 0x81, 0xff };

	// パターンジェネレータ・テーブル
	vwrite(space, 0, 8);
	vwrite(wall, 8, 8);
}

void main()
{
	int px = 0;
	int py = 0;

	gen_wall();
	set_mode(mode_1);
	write_pgt();

	while (! get_trigger(0)) {
		int st = get_stick(0);
		px += dx[st];
		py += dy[st];
		if (px < 0) px = 0;
		if (px > WIDTH-32) px = WIDTH-32;
		if (py < 0) py = 0;
		if (py > HEIGHT-24) py = HEIGHT-24;

		BYTE *src = vvr + (py * WIDTH + px);
		int dst = 0x1800;	// パターンネーム・テーブル
		for (int y = 0; y < 24; y++) {
			vwrite(src, dst, 32);
			src += WIDTH;
			dst += 32;
		}
	}
}
```

[ROMカートリッジ版](http://webmsx.org/?rom=http://www.maroon.dti.ne.jp/lance/file/wall.rom)
MySQL クライアントを 8.x にアップデートしたときに WP-CLI の DB コマンドでエラーが出た時の対処法

MySQL クライアント 8.0 系でどうやら仕様が変わったらしく `wp db export` コマンドで以下のようなエラーが出ました。

```bash

$ wp db export
mysqldump: Couldn't execute 'SELECT COLUMN_NAME, 
JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"')
FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'wordpress'
AND TABLE_NAME = 'wp_commentmeta';':
Unknown table 'COLUMN_STATISTICS' in information_schema (1109)
```

以下は僕の環境の MySQL クライアントのバージョン。

```
$ mysql --version
mysql  Ver 8.0.11 for osx10.13 on x86_64 (Homebrew)
```

## 対処方法

ドキュメントにちゃんと書かれていませんが、WP-CLI の `wp db` コマンドでは、MySQL 用のコマンドラインオプションをそのまんま使用することができます。

上の不具合では、以下のようなオプションを渡してあげると解決します。

```
$ wp db export --column-statistics=0 
```

この件に関しては被害者が多発しそうなのでヘルプに追加しておきましょうかね。

## ついでに Wordmove での対処法

このエラーは MySQL の仕様変更によるものなので、Wordmove でも同様のエラーが出ます。

これに対する対処方法は。Movefile に以下のように `mysqldump_options: "--column-statistics=0"` を記述することです。

```yaml
local:
  vhost: "http://example.test"
  wordpress_path: "wordpress" # use an absolute path here

  database:
    name: "wordpress"
    user: "wordpress"
    password: "wordpress"
    host: "xxx.xxx.xxx.xxx"
    charset: "utf8"
    mysqldump_options: "--column-statistics=0"
```