OmniAICreator/Qiita-1.07M huggingface dataset:
AndroidのアプリがRenderThread の謎エラーで落ちるのを解消する方法

#問題
特定の端末にて下記の出力をLogcatに残して謎の死を遂げます。
アプリ起動時に突然落ちます。文献もなく、きつかった。
でも、今日ググったら直ぐに解決策が見つかったという謎。
長らく懸案でしたが、解決策を発見しましたので報告します。

```
pid: 13362, tid: 13414, name: RenderThread >>> jp.mirm.mirmapp <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x34
x0 0000000000000001 x1 0000007f6bb71340 x2 0000007f69e00000 x3 0000000000000002
x4 00000000000000c4 x5 0000000000000000 x6 0000007f7b6c0680 x7 0000007f7b981710
x8 0000000004595184 x9 0000000004800000 x10 0000007f808c4800 x11 0000000000000000
x12 0000007f80883c00 x13 006345e9fc7f20b7 x14 000000000000018c x15 99f36bdc9125bbf0
x16 0000007f8a5d05a0 x17 0000007f8a5779d0 x18 0000007f6bcc4b80 x19 0000007f6bfe7110
x20 0000000000000000 x21 0000000000000870 x22 0000007f809b2a18 x23 0000000001fa4000
x24 397df56a30e6ec4c x25 0000007f8083e848 x26 397df56a30e6ec4c x27 0000007f88468df8
x28 7fffffffffffffff x29 0000007f80c94bd0 x30 0000007f8bac7d24
sp 0000007f80c94b80 pc 0000007f8bac7df0 pstate 0000000020000000
```

#解決策
「android:hardwareAccelerated="false"」でハードウェアアクセラレートを無効にします。

```xml:AndroidManifest.xml
    <application
            android:allowBackup="true"
            android:icon="@mipmap/icon1"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/icon1"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            android:hardwareAccelerated="false"
        >
```
#Ref
https://stackoverflow.com/questions/35250816/android-fatal-signal-11-sigsegv-code-1-fault-addr-0x0-in-tid-29092
https://techbooster.org/android/application/7054/
[Flutter] Flare使ってアニメーション試してみた。

こんにちは！

数日前、flutter live みましたか？
見てなかった方のため、リンク載せておきます。

1. [Flutter Live - Flutter Announcements and Updates (Livestream)](https://www.youtube.com/watch?v=NQ5HVyqg1Qc)
2. [Flutter 1.0の発表](https://www.youtube.com/watch?v=kpcjBD1XDwU)
3. [Flutter Design (Flutter Live)](https://www.youtube.com/watch?v=6hmgkimeaEE)

Flutterで開発したら、開発速度めっちゃくちゃ早くなりますので、一度試してみてください。

# はじめに

今回公開したアニメーションのためのFlareということを使ってみようと。
動画は三つ目のリンクで確認できます。

[Flare](https://www.2dimensions.com/about-flare)は[2Dimension](https://www.2dimensions.com/)というサイトで無料で利用できます。

![녹화_2018_12_08_00_36_42_812.gif](https://qiita-image-store.s3.amazonaws.com/0/137182/f22560eb-e040-5920-fd69-52215555b17a.gif)

アニメーションすごいでしょ？
こういうものを作れます。

# やってみよう

## アニメーション作り。

まず、サイト入って会員加入必要です。
プロジェクト作ったらこんなメニューがみえます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137182/d01ec23e-5bad-ee1c-bdaa-2dcde88168e5.png)

簡単な〇のずけいから試してみましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137182/b359e880-f906-a490-29d6-6bf484278338.png)

右には位置やサイト変えます。
色は下のFillやstrokeで変えます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137182/8cc557ff-e989-ea76-49ce-2a100c0d6d97.png)

後はモーション設定します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137182/be84d156-94a2-628a-2dca-b219f87ad78f.png)

自分が作ったアニメーションはこれです。

![2018_12_08_00_04_44_22.gif](https://qiita-image-store.s3.amazonaws.com/0/137182/fa3cf689-8384-0b38-8b7a-bd0e774dc8dd.gif)

## 作ったアニメーションをFlutterでアプリ作り。

作ったモーションはExport簡単にできます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137182/80ac6e4a-ac78-8fe8-0470-1ecd035e2852.png)

assetsフォルダーを作ります。
flare_flutterが必要です。

```yaml
dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.2
  flare_flutter:

dev_dependencies:
  flutter_test:
    sdk: flutter
```

Go Packages get !

assets 設定しましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137182/b8aac4a7-fd7c-28f3-075e-475da3ad8218.png)


import flare_actor dart file  

```dart
import 'package:flare_flutter/flare_actor.dart';
```

Codeは簡単ですよね！

```dart
 @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Flare 101"),
      ),
      body: Center(
          child: FlareActor(
        "assets/hello_flare.flr",
        animation: "Untitled",
        fit: BoxFit.contain,
      )),
```

## 注意
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137182/3eeaa1ef-4699-b4da-9b00-2b86075aa8fa.png)

# 結果。

![2018_12_08_00_22_48_747.gif](https://qiita-image-store.s3.amazonaws.com/0/137182/891c64fb-ab87-a106-22ce-77f4b843f53c.gif)

#終わりに

今回はFlareを使ってアニメーションを作ってFlutterで試してみました。
ありがとうございます。

# 2021年のアップデート
- Riveは1.0から2.0になりました。
- また使えます。
[rails5]文字列のカラムに外部キー制約を設定する方法

Railsでカラムに外部キー制約を設定する際に、文字列のカラムに設定したい時があると思います。
Railsで文字列のカラムに外部キー制約を設定する方法を記載します。

# 文字列のカラムに外部キー制約を設定する方法
reference型のカラムに```foreign_key: true```と```type: :string```を設定することで文字列のカラムに外部キー制約を設定できます。
```type: :string```の記載がないとデフォルトで数値型になってしまうため、外部キーの参照先が文字列の場合、型が一致せずエラーがでます。

サンプルコードは下記になります。

```create_table.rb
class InitTables < ActiveRecord::Migration[5.0]
    def change
        create_table :users, id: false do |t|
          t.column :id, 'VARCHAR(10) NOT NULL PRIMARY KEY' # 外部キー参照先
          t.timestamps
        end

        create_table :hoge do |t|
          t.references :user, foreign_key: true, type: :string # 外部キー参照元
          t.timestamps
        end
    end
end
```
# まとめ

カラムをreference型とし、```foreign_key: true```、```type: :string```を記載することで文字列のカラムに外部キー制約をかけることができます。

参照先のカラムが文字列で、```type: :string```を記載しないと下記エラーがでます。

```
Mysql2::Error: Cannot add foreign key constraint
```

これは参照先のidが文字列なのに対して、デフォルトでは参照元カラムが数値型で設定されるためです。
```type: :string```を設定することで型を文字列で一致させることができます。
GPUSound入門（３）　シンセサイザー部分の音色いじり

## シリーズ

GPUSound入門
https://qiita.com/MachiaWorx/items/68f8691d0866e0e0ff68

GPUSound入門（２）
https://qiita.com/MachiaWorx/items/75c63dff12b4a6189a35

### 音量変更（Amp/エンベロープ）

``` GLSL:SampleCode
vec2 mainSound( float time )
{
    // A 440 Hz wave that attenuates quickly overt time
    return vec2( sin(6.2831*440.0*time)*exp(-3.0*time) );
}
```

前回時点でサイン波の出力は可能になりました。

ここに発音後、持続時や出始めの音量の推移をもってより楽器っぽく音が鳴ります。
ということでコントロール方法をいくつか記載してみます。

まずは前回出てきたexp関数の役割について書いていきます。

exp関数は、いわゆる「e^x」のことですね。
対数グラフはいい資料があったのでこっちを御覧ください。
（Googleさんやってくれるわ）

https://www.google.co.jp/search?source=hp&ei=JJUJXKOSBYmN8wX2uLTgAw&q=e%5Ex&btnK=Google+%E6%A4%9C%E7%B4%A2&oq=e%5Ex&gs_l=psy-ab.3..0l8.483.2011..4197...0.0..0.75.280.4......0....1..gws-wiz.....0..0i4j0i131i4j0i131.Z8kLYDyRmdI

コレ見て分かるのは、「マイナスの値に行くほど0に収束していく」ということです。
よって、このグラフは工夫することでデータを収束させるのに使うことができるということです。

制御については、「時間が経過するほどこのグラフのマイナス部分に進んでいく」という形にすれば、値は正の値を取りつつ0に近づいていくという形になります。
これは値を減衰させるのにとっても便利です。
あと、x=0のとき、e^x = 1なので、倍数にするのに便利です。（元の数を参照できる）

ということで、これで減衰を表現したのが上記SampleCodeのext関数部分なんですね。
同じ考えで、徐々に音量が上がっていく形にするには「特定の値に収束していく」式を当てはめればいいんです。

今回は面倒なので、そのままexp関数を使いたいと思いますが、無限に値が増加していくため、clamp関数で値の範囲を指定する形にしてみます。

ということでアタック・リリース（ディケイかな？）をゆるくフェードさせたのが下記ソースです。

``` GLSL:SampleCode3
vec2 mainSound( float time )
{
    // A 440 Hz wave that attenuates quickly overt time
    return vec2( sin(6.2831*440.0*time)
                *clamp(exp(time)-1.,0.0,1.0)
                *exp(-time) 
               );
}
```

こんな感じで音を作り込んでいけば、シンセサイザーの音はどうにかなりそうです。

### のこぎり波

あとサイン波だけじゃ物足りないので、他の波形も作ってみます。

参考資料があったので連携。
http://www.graffathon.fi/2016/presentations/additive_slides.pdf

どちらかと言うとのこぎり波形な感じ。

``` GLSL:SampleCode_SAW
#define PI 3.14159

float saw(float phase) {
	float s = 0.0;
	for (int k = 1; k <= 8; k++) {
	s += (sin(2.0*PI*float(k)*phase) / float(k));
	}
	return (1.0/2.0) - (1.0/PI)*s - 0.5;
}

vec2 mainSound( float time )
{
    // FM音源
    return vec2( saw(time*440.0) *exp(-3.*time) );
}
```

他には三角波をサイン波だけで作る資料とか。
無限フーリエ級数の式をこっちに書いていく形になります。

https://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E6%B3%A2_(%E6%B3%A2%E5%BD%A2)

もっと計算を単純にしてもいいとは思いますが、まずは正確な式を書いてそっから単純化していくと形を維持しやすいかと思います。
実際矩形とかすげえ簡単に書くことができますしね・・・

### FM音源

せっかくなのでオールドロマン溢れるFM音源も実装させてみましょう。
（いやFM8とかで現役なのわかりますけど自分がFM音源と聞いてガレッガとか思い浮かべるので・・・）

FM音源については下記URL参照。
https://ja.wikipedia.org/wiki/FM%E9%9F%B3%E6%BA%90

つまりサイン波を定義する波形の周期を更にサイン波で振動させることで、
音をグワングワン揺らすことが可能になるんですね。

実際のFM音源では更に並列にしたり多重で変調かけたりしますが、
まずはキャリア-モジュレータ1組を作成することにします。

式は、以下の通り。
a * sin( 2*PI*fa*time + b * sin(2*PI*fb*time) )

a : 振幅
fa: キャリア（基準になる発振器）の周波数
b : 変調指数（適当に決めるヤツ）
fb: モジュレータ（キャリアを揺らす発振器）の周波数

これを少し整えてみると下記のコードになります。

``` GLSL:SampleCode_FM
vec2 mainSound( float time )
{
    // FM音源
    return vec2( sin(6.2831*440.0*time 
                +4.0* sin(6.2831*220.0*time))
                *exp(-3.*time) 
               );
}
```

FM音源も理論が分かると結構コンパクトに書くことができてしまいます。
フィードバックとかは別途処理書かなきゃいけないですけど。

### 終わり

とりあえず音色の説明は最低限これがあれば困らねえだろうというのを書いてみました。
これでベース・メロディ・パッド等書けるかと思います。

あとはドラムとか必要かもしれませんね。
これは別項目で書いてみます。
IBM、Notes/Domino(他)を売却

RedHat買収に比べたら小さなニュースかもしれませんが、個人的にちょっと驚いた発表がありました。

IBM、Notes/Dominoをインド企業に売却へ
http://www.itmedia.co.jp/news/articles/1812/07/news098.html

早ければ2019年中頃には売却が完了するようです。

Notesはせいぜい仕事上のグループウェアとして使っているぐらいですが、会社としてはNotes移行の案件も結構やっているので、やや身近なニュースでした。
あとは、最近BigFixのテクニカルセールス資格を取得しているので、BigFixも合わせ技で売却されててちょっと笑いました。

IBM BigFix
https://www.ibm.com/jp-ja/security/endpoint-security/bigfix
Tomcat8のセットアップとGitBucket動作 (Ubuntu18.04)

OpenJDKとTomcat8を入れてwebappのサンプルとしてGitBucketを動作させる

# インストール

```
root@cheddar:~# apt search tomcat
Sorting... Done
Full Text Search... Done
root@cheddar:~# 
```

あれ？

調べてみると、なるほど、Universeリポジトリ。

```
root@cheddar:~# add-apt-repository "deb http://jp.archive.ubuntu.com/ubuntu/ bionic universe"

root@cheddar:~# apt install tomcat8
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  authbind ca-certificates-java default-jre-headless java-common
  libcommons-collections3-java libcommons-dbcp-java libcommons-pool-java
  libecj-java libjpeg-turbo8 libjpeg8 liblcms2-2 libpcsclite1 libtcnative-1
  libtomcat8-java libxi6 libxrender1 libxtst6 openjdk-11-jre-headless
  tomcat8-common x11-common
Suggested packages:
  default-jre libcommons-collections3-java-doc libcommons-dbcp-java-doc
  libgeronimo-jta-1.1-spec-java ant ecj liblcms2-utils pcscd libnss-mdns
  fonts-dejavu-extra fonts-ipafont-gothic fonts-ipafont-mincho
  fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic tomcat8-admin tomcat8-docs
  tomcat8-examples tomcat8-user
The following NEW packages will be installed:
  authbind ca-certificates-java default-jre-headless java-common
  libcommons-collections3-java libcommons-dbcp-java libcommons-pool-java
  libecj-java libjpeg-turbo8 libjpeg8 liblcms2-2 libpcsclite1 libtcnative-1
  libtomcat8-java libxi6 libxrender1 libxtst6 openjdk-11-jre-headless tomcat8
  tomcat8-common x11-common
0 upgraded, 21 newly installed, 0 to remove and 11 not upgraded.
Need to get 47.6 MB of archives.
After this operation, 195 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

...snip...
```

これでTomcat8と、依存するOpenJDKも入る。

# GitBucketのデプロイ

war一つで動作するものとして手ごろだったので。。

```
zaki@cheddar:~/gitbucket$ curl -LO https://github.com/gitbucket/gitbucket/rele
ases/download/4.29.0/gitbucket.war
```

.gitbucket作成用にtomcat8ユーザのホームのownerをtomcat8にする。 (`$TOMCAT_HOME`指定で別の場所に作ってもOK)

```
root@cheddar:~# chown tomcat8:tomcat8 /var/lib/tomcat8/
root@cheddar:~# 
root@epoisses:~# ls -al /var/lib/tomcat8/
total 24
drwxr-xr-x  6 tomcat8 tomcat8 4096 Dec  8 00:43 .
drwxr-xr-x 37 root    root    4096 Dec  8 00:24 ..
lrwxrwxrwx  1 root    root      12 Aug 14 05:23 conf -> /etc/tomcat8
drwxr-xr-x  2 tomcat8 tomcat8 4096 Aug 14 05:23 lib
lrwxrwxrwx  1 root    root      17 Aug 14 05:23 logs -> ../../log/tomcat8
drwxr-xr-x  2 root    root    4096 Dec  8 00:43 policy
drwxrwxr-x  4 tomcat8 tomcat8 4096 Dec  8 00:29 webapps
lrwxrwxrwx  1 root    root      19 Aug 14 05:23 work -> ../../cache/tomcat8
```

デプロイ

```
zaki@cheddar:~/gitbucket$ ls /var/lib/tomcat8/webapps/
ROOT
zaki@cheddar:~/gitbucket$ sudo cp gitbucket.war /var/lib/tomcat8/webapps/
zaki@cheddar:~/gitbucket$ ls /var/lib/tomcat8/webapps/
gitbucket  gitbucket.war  ROOT
```

あとはwebアクセスすればok

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/b941d54f-e6a1-5705-252e-62707868669f.png)
とにかく多用するワンライナーもといaliases

# エイリアスです

```bash
[Darth@Death Star: ~]$ alias | grep ls
alias imgls='/Users/Darth/.iterm2/imgls'
alias ll='ls -l'
alias ls='ls -aF --color --time-style="+%Y-%m-%d %H:%M:%S"'
alias lsr='ls -lSr'
alias ltr='ls -ltr'
```

ワンライナー黒魔術はコピペメンにより事故る可能性が高いので今回は安全なエイリアスの中でとにかく利用頻度が高いものを挙げてみます。しかも `ls` 縛り



# `ltr`

```bash
alias ltr='ls -ltr'
```

まぁ使いますね、ログディレクトリなんかで大活躍

なに? `ls -lt` は無いのかって?

そんなの使わないでしょ、必要なら `ltr|tac` でも叩こうよ

# `lsr`

```bash
alias lsr='ls -lSr'
```

実はそんなに使わないですね。多分 `ls --full | sort -k 5 -n` とか使う人が多いんじゃ無いかな
でも有ると便利な `lsr`

なに? `ls` は無いのかって? 無茶言うな、そもそもそんなリスト要らん



# なんで `r` なの?


`ls -lt|head` とか叩くの面倒じゃ無いですか、以上



以上、白魔術としての多分事故らない aliases for newbies でした
用 Docker Compose 快速生成一個 WordPress 網站（筆記，無細節說明）

根據這個頁面嘗試

> https://docs.docker.com/compose/wordpress/#define-the-project

## 環境

- macOS 10.14
- Docker version 18.09.0
- iTerm

## 手順

1. 建立資料夾
2. 寫 `docker-compose.yml`
3. 執行
4. 停止執行
5. 更新 WordPress
6. 清除 Volume

## 建立資料夾

在這裡檔案名稱就先用 `wordpress`

```sh
// 在終端機
mkdir wordpress
cd wordpress
```

## 寫 `docker-compose.yml`

因為會需要用到多個服務，
所以用 Docker Compose 會比較好
因此先在根目錄新增 `docker-compose.yml` 這個檔案之後
加入以下的內容


```yml
version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
```

## 執行

```bash
docker-compose up -d
```

還沒有安裝過的話就會需要等他下載映像檔和配置資料庫，
成功安裝之後，就可以透過 http://localhost:8000 這個網址來存取剛裝好的 WordPress

就會看到像是這樣的畫面，也就是 WordPress 的初始畫面

![image.png](https://qiita-image-store.s3.amazonaws.com/0/41979/5743ca66-9330-53cd-b845-7dd1db004f2c.png)

剛安裝好之後直接存取 http://localhost:8000 可能不會直接有頁面，我的情況需要等幾秒鐘，瀏覽器才會自動重新整理出現這個畫面。

## 停止執行

要停止 wordpress 和資料庫的服務的話可以透過這個指令停止即可

```bash
docker-composer down
```

## 更新 WordPress

透過 Docker 安裝的 WordPress 在更新的時候，會有無資料夾權限的問題
因此勢必要透過 Docker 的指令來更新。

更新的時候請先把 Docker 停止執行

```
docker-composer down
```

接著再進行這樣的指令，先請 Docker Compose先去拉看看有沒有新的映像檔版本，再來執行：

```
docker-compose pull && docker-compose up -d
```

- https://www.linode.com/docs/quick-answers/linux/wordpress-with-docker-compose/#update-wordpress

## 清除 Volume

停止執行之後，期望把資料庫的容器（`db_data`）清除掉的話
可以先以這個指令來確認有哪些容器

```bash
docker volume ls -q
```

找到前綴是資料夾名稱，後半是 `db_data` 的容器實體
以這邊的範例來說的話，就是這個：

```
wordpress_db_data
```

所以在清除的時候可以下這個指令就可以清除了

```bash
docker volume rm wordpress_db_data
```

如果沒有其他容器的話，也可以這樣刪除

```bash
docker volume rm $(docker volume ls -q)
```

這樣就完整清除了。

## 結語

以上，這樣就可以快速的透過 docker compose 生成 WordPress 來用了！ :tada:
Python で FPGA/簡単な足し算プログラムを動かす

# Vivado で合成
Python で書いた足し算プログラムを Polyphony でコンパイルし Vivado のシミュレータで動作確認をしてから Cora Z7 で動くように合成しました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/995f27b5-2d56-6d2d-de46-af75c66696b9.png)

# Program Device でダウンロード
VIO をつかったのでデバッグ用の設定になっています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/01ac040f-9398-c837-2443-bef7dbf10a22.png)

# hw_vio_1 に信号線追加
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/dcb7d7ec-4f90-e811-6454-9c9e918b869b.png)

# VIO の操作画面が出る
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/4540a4b8-b4b9-b8c7-3723-63c43eda2e4a.png)

# VIO で操作
## 足す数を設定
vio_0_probe_out2 に 0x12340000 を vio_0_probe_out3 に 0x5678 を入れてみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/b3e18b45-af0c-4212-6ee1-6821b8f49a5d.png)

## 実行
vio_0_probe_out0 を 1 にします。すぐに結果が返ってきて adder_0_adder_out_0 に結果が adder_0_adder_valid に 1 が立ちました
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/373b0ec7-ba5d-debf-b575-150920149228.png)

## 後処理
vio_0_probe_out0 を 0 に戻し、vio_0_probe_out1 を 1にしましょう。アクセプトしたことになり adder_0_adder_valid が 0 に戻りました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/1a3fe941-3fd2-1b36-2b23-f061d5f55bff.png)

## VIO 注意点
どういうわけか VIO は前の GUI の情報をもっているようで、二度目以降、BitStream をダウンロードした時に output の値が前の時のが画面上に残っています。しかし、実際にはデフォルトの値が出力されているようです。なので、GUI 終了時にはデフォルトの値に戻してから終了しましょう。
SQLの基礎をつらつら

#はじめに
最近就職活動をしていて思うのは結構どの会社でもSQLの知識は重要であるということ。

やはりある程度の企業になるとたくさんのデータをどのようにさばくのかが問題になるんだと思う。

なので最近になって急いでSQLの勉強を始めてとりあえず入門書を読み終えたのでまとめてみる。

#CREATE TABLE

CREATE TABLE TableName　でテーブルが作成できる。
下にデータを書いて情報を入れれる。


``` sql:create_table
CREATE TABLE Person
(name VARCHAR(50) NOT NULL, age INTEGER NOT NULL);
```

#DROP TABLE

```sql:drop_table
DROP TABLE Person;
```

でテーブルを削除


#ALTER TABLE

テーブルのカラムを追加、削除する。

```sql:alter_table
ALTER TABLE Person ADD COLUMN age INTEGER NOT NULL;
=> age:integer を追加

ALTER TABLE Person DROP COLUMN age;
=> age:integer を削除
```

#INSERT INTO
テーブルにデータを追加する

```sql:insert_into
INSERT INTO Person VALUES ('TARO');
=> 'TARO'を追加
```


#SELECT

データを出力する

```sql:select

SELECT * FROM Person;
=> Personのデータすべてを出力

SELECT name FROM Person;
=> Personのnameだけを出力

```


#DISTINCT
重複を省く

```sql:distinct
SELECT DISTINCT category FROM Book;
=> カテゴリを出力（重複なし）
```

#WHERE
検索する

```sql:where
SELECT category, title FROM Book WHERE category = 'SF'
=> SFカテゴリの本を出力
```

#COUNT
数える

```sql:count
SELECT COUNT(*) FROM Book;
=> BOOKの数
```

#AVG SUM MAX MIN
AVGは平均
SUMは合計
MINは最小値
MAXは最大値

```sql:asmm
SELECT MAX(age), MIN(age), AVG(age), SUM(age) FROM Person;
```

#GROUP BY
グループ化できる。

```sql:groupby
SELECT category, COUNT(*)
FROM Book
GROUP BY category;
```

カテゴリごとの本の数

正直なんでCOUNT(category)じゃなくてCOUNT(*)なのかわからん

#HAVING
GROUP BYによって集められたデータをさらに条件を付けて表示する

```sql:having
SELECT category, COUNT(*)
FROM Book
GROUP BY category
HAVING COUNT(*) >= 100;
=> カウントが100を超えるものを表示
```


#UPDATE

UPDATEで情報を更新できる

```sql:update
UPDATE Person SET name = 'UPDATE' WHERE name = 'TARO';
```

#CURRENT_DATE CURRENT_TIME
現在の日付を取得

```sql:current_date
SELECT CURRENT_DATE;
```

現在の日時を取得

```sql:current_time
SELECT CURRENT_TIME;
```


#LIKE
文字を曖昧検索できる

%STRで後方一致
%STR%で中間一致
STR%で前方一致


#BETWEEN
範囲検索できる

```sql:between
SELECT age FROM Person WHERE age BETWEEN 16 AND 19
=> 16歳から19歳の人を表示
```



#EXISTS
まだよくわからん

#CASE
値を評価してそのあとの処理を書く

```sql:young-adult
SELECT age 
CASE WHEN age < 18
THEN 'young : ' || name
CASE WHEN age >= 18
THEN 'adult : ' || name
ELSE NULL END AS yord FROM Person;
```

これで年齢が18歳未満の人にはyoung : nameが表示され18以上の人にはadult : nameが表示される


#INNER JOIN


テーブルを結合できる

```sql:join
SELECT University.name, Person.name, Person.age
FROM Person INNER JOIN University ON Person.name = University.person_name;

```


これで大学と大学にいる人の名前、年齢を表示



#おわり

とりあえず疲れました。
SQLの超入門書を終えてみて何となくわかったようなわからないような気がします（笑）

知識が圧倒的に足りていないのはわかっているので他の本も買って勉強したいと思います。

書くの疲れた…
Python で FPGA/簡単な足し算を合成する(CoraZ7編)

# Vivado でCora Z7用デザインをつくる
すでに前回までで Vivado 上でシミュレーションが出来ました。
Create Block Design で Diagram を作った上で adder のモジュールを Add Module します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/27014a41-8e16-204a-c3bc-55a93fdc4f43.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/7a1ce9d2-cdff-ad1b-a37c-d266cca4ef16.png)

# clk と rst だけ Make External

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/7e76ac7b-4317-0b71-a1c8-561dca8e9c4a.png)

# VIO を追加して回路を完成させる。
VIO は input が２つ、output が４つ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/d11d599c-04b0-4590-5119-bca21238d29e.png)

## input の1つは 32bit
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/9d7f54c1-21d7-d0ad-a6ef-87094d934abf.png)

## output の 2つは32bit
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/d2911de4-7eba-def1-1010-528cb03f49fb.png)

## 接続して回路を完成させる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/f9e3562c-32b1-9d16-3032-fbc36c35797f.png)

# xdc の追加
adder.xdc として clk と rst を追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/5c5c8b55-0c97-7b1c-ef62-22ed9a3b38fb.png)

```tcl:adder.xdc
## PL System Clock
set_property -dict { PACKAGE_PIN H16   IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L13P_T2_MRCC_35 Sch=sysclk
create_clock -add -name sys_clk_pin -period 8.00 -waveform {0 4} [get_ports { clk }];#set

## RGB LEDs
#set_property -dict { PACKAGE_PIN L15   IOSTANDARD LVCMOS33 } [get_ports { led0_b }]; #IO_L22N_T3_AD7N_35 Sch=led0_b
#set_property -dict { PACKAGE_PIN G17   IOSTANDARD LVCMOS33 } [get_ports { led0_g }]; #IO_L16P_T2_35 Sch=led0_g
#set_property -dict { PACKAGE_PIN N15   IOSTANDARD LVCMOS33 } [get_ports { led0_r }]; #IO_L21P_T3_DQS_AD14P_35 Sch=led0_r
#set_property -dict { PACKAGE_PIN G14   IOSTANDARD LVCMOS33 } [get_ports { led1_b }]; #IO_0_35 Sch=led1_b
#set_property -dict { PACKAGE_PIN L14   IOSTANDARD LVCMOS33 } [get_ports { led1_g }]; #IO_L22P_T3_AD7P_35 Sch=led1_g
#set_property -dict { PACKAGE_PIN M15   IOSTANDARD LVCMOS33 } [get_ports { led1_r }]; #IO_L23N_T3_35 Sch=led1_r

## Buttons
set_property -dict { PACKAGE_PIN D20   IOSTANDARD LVCMOS33 } [get_ports { btn0 }]; #IO_L4N_T0_35 Sch=btn[0]
#set_property -dict { PACKAGE_PIN D19   IOSTANDARD LVCMOS33 } [get_ports { btn[1] }]; #IO_L4P_T0_35 Sch=btn[1]
```

# トップモジュールを作って合成
Create HDL Wrapper でトップモジュールを作ります。自動的に Set as TOP となるので合成をします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/c9293c08-811e-a54d-2405-214b01de8ff6.png)

今回はここまで
曲線スナップを使用して絵を描いてみる

# FireAlpacaの曲線スナップを使って絵を描く
## はじめに
この記事はSLP KBIT Advent Calender 2018の8日目の記事である。プログラミングに関して特に書けることが無かったので普段どのように絵を描いているのかを紹介する。
このような記事を書くのは初めてなので分かりづらい点はあるかもしれませんが、どうかご了承ください。

###準備するもの
・FireAlpacaが使用できるPC(必須)
・スキャンが行えるプリンター
・イラストの下書き

##FireAlpaca
FireAlpaca[ファイア アルパカ]は、世界10言語、Mac/Windows 両対応のフリーペイントツールです。シンプルな機能と操作性で、初心者でも気軽にイラスト製作が楽しめます。([FireAlpaca公式サイト](http://firealpaca.com/ja/)より。)
個人的に、今まで使用してきたフリーソフトで一番使いやすいです。

##曲線スナップ
任意でガイドを調整し、ガイドに沿った線を引くことができるツール。
作成したガイドは移動、回転、反転が可能。
PC上にフリーハンドで奇麗に線が引けない人におすすめ。
詳しい解説は[こちら](http://firealpaca.com/topics/スナップ機能を使ってみよう)。


##FireAlpacaに画像を入れてみる
下書き↓

あらかじめ用意した下書きをプリンターでスキャンして、
その画像をFireAlpacaで開く。

![s1.png](https://qiita-image-store.s3.amazonaws.com/0/309108/5e607587-b2b7-6d12-f400-a6e6a31ee7d9.png)

余白は選択ツールを使ってトリミングして削っても良い。

##曲線スナップを使ってみる
曲線スナップを使う前に、**新規レイヤーを絶対に作ること。**
(下書きと同じレイヤーに線を引くと色塗りの時に困る)
![s7.png](https://qiita-image-store.s3.amazonaws.com/0/309108/651e0297-93ae-3456-7700-82aec48993ba.png)
曲線スナップをクリックするとガイドを作成できるようになり、任意の曲線を引けるようになる。同じ個所をダブルクリックすると、そこが終点となる。

![s2 2.png](https://qiita-image-store.s3.amazonaws.com/0/309108/a0ab8731-ff71-8c6e-1f34-6c18dbd2aef1.png)
このように、下書きの上にガイドを作成すると、
![s3 2.png](https://qiita-image-store.s3.amazonaws.com/0/309108/a77de884-c872-aed5-3681-b5b31f8d1568.png)
奇麗になぞることが出来る。
線の太さに強弱を出したい場合、『ペン(入り抜き)』を使うと良い。

あとは上の手順を繰り返して、下書きの全ての線をなぞる。
![s4.png](https://qiita-image-store.s3.amazonaws.com/0/309108/490f7b97-b039-80a8-56bf-4c659dff95d9.png)
ここまでくるとあとは色塗りです。

##イラストを完成させる
線画が完成したら、それより下に色塗り用の新規レイヤーを作成し、とりあえずベタ塗りしてみる。最初に使用していたスキャンした画像があるレイヤーは非表示にすると良い。
![s5.png](https://qiita-image-store.s3.amazonaws.com/0/309108/84b7139a-bbbb-25b7-c8c2-49e34bb691d3.png)

あとはキャラの影や光沢、背景を付け加えていく。
曲線スナップは下書きをなぞるだけではなく、色塗りのための境界線を描いたりするときにも使える。
![k1.png](https://qiita-image-store.s3.amazonaws.com/0/309108/b09292c1-e0fb-ed33-1076-39c37f19b0f7.png)
![k2.png](https://qiita-image-store.s3.amazonaws.com/0/309108/fac3c40a-d17d-cb64-565b-47312403d355.png)
![k3.png](https://qiita-image-store.s3.amazonaws.com/0/309108/58333204-46f8-22fe-f980-236b28cbdc46.png)
特に、アニメ塗りをする際は曲線スナップはかなり便利だと思う。
また、レイヤーの合成モードを『通常』から『乗算』や『加算・発光』などに変更したり、不透明度を変更して見映えをよくしましょう。

##完成図
![kansei.png](https://qiita-image-store.s3.amazonaws.com/0/309108/a1cceece-2c0e-a327-b277-cfaa0026f808.png)

##まとめ
ペンタブや液タブを使うのがどうしても難しい時は一度曲線スナップを試してみてはいかがでしょうか。多少時間はかかるかもしれませんが、ある程度は描くことが出来ます。
Salesforce と Keycloak は繋がるか

だいぶ遅くなってしまいましたが、7日目はじめます。

# はじめに
システムを扱う中で必ず出てくるのが「アカウント管理」や「ユーザー管理」をどうするのかという話です。
最近はインフラ寄りの仕事をことが多いからか、「Active Directory」や「OpenLDAP」などのそれに関わるツールの話をよく聞きます。
それとは別に「Keycloak」というものがあって、こちらもそれらに関連するツールとして注目が高まっているんだそうです。

せっかくなので、Keycloakを使ってSalesforceにつなげることは可能なのか試してみました。

# 手順

## Keycloakのインストール

    [Keycloak のインストール](https://qiita.com/silverskyvicto/items/de672d59bca749baf2ab)に手順を記載しました。

不足分は[keycloakの公式ドキュメント](https://www.keycloak.org/docs/latest/server_installation/index.html)を見つつやっていただけると良いかと思います。（あとで追記します）

## OpenID Connect の設定

Keycloak 側

1. 「レルムの追加」でSalesforceを新規作成します

Salesforce側

1. 「設定」からクイック検索で「認証プロバイダ」を検索します
2. 「新規」ボタンをクリックします
3. 必要事項を入力します
だいたい画像のような感じになります
![入力画面.png](https://qiita-image-store.s3.amazonaws.com/0/34297/744b113a-3118-25f6-d6b7-9b96e8e4dfcc.png)

4. 保存します
macbook pro でのまっさらからの brew install 記録

こんにちは。二日連続で Advent Calendar 参加を決めたことに後悔している小泉です。私たちは保険会社のスタートアップとして、テクノロジーで保険を身近にそして手軽に入れる存在にしたいという思いから会社を立ち上げました。尖った技術で尖った保険商品を作ってみたいと思われる方、ぜひオフィスに遊びに来てください！ https://www.wantedly.com/companies/justincase


## 要旨

Mac を新調したのはつい二日前。今後クリーンインストールすることもあろうかと思うので、ここに業務に必要なアプリのbrew経由でのインストールメモを残すこととした。

```
# brew install
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# coding environment
brew install git
# for git completion
cat <<\EOF >> .bashrc
source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/git-completion.bash
GIT_PS1_SHOWDIRTYSTATE=true
export PS1='\[\033[37m\][\[\033[36m\]\u\[\033[37m\]@ \[\033[32m\]\W\[\033[37m\]]\[\033[31m\]$(__git_ps1)\[\033[00m\]\n\$ '
EOF

brew cask install visual-studio-code
brew cask install sourcetree
brew install docker
brew cask install docker
brew cask install postman

# language or IDE
# `brew install r` fails installing tidyverse. Need to use brew cask
brew cask install r
brew cask install rstudio

# Xcode install from Apple store
sudo xcodebuild -license


# python with pyenv
brew install pyenv
cat <<\EOF >> .bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
EOF

# for Mojave
# sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
pyenv install 3.7.0
pip install mypy
pip install flake8
pip install pandas

# node
brew install nvm
cat <<\EOF >> .bashrc
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

EOF

# communication
brew cask install slack

# google tools
brew cask install google-chrome
brew cask install google-drive-file-stream

# browser
brew cask install firefox

# command-lines
brew install awscli
# echo 'export PATH=~/.local/bin:$PATH' >> .bashrc
brew install jq
brew install wget
brew install curl

# deprecated
# brew cask install remote-desktop-connection
brew tap homebrew/cask-versions
brew cask install microsoft-remote-desktop-beta

# others
cat <<\EOF >> .vimrc

syntax on
set autoindent
set expandtab
set tabstop=4
set shiftwidth=4
set cursorline
set number

set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac

EOF
```
【TIC-80】ゲーム作って公開するぞ！（その３）

##一週間でやったこと

![week2.gif](https://qiita-image-store.s3.amazonaws.com/0/284455/2783f3ba-1468-c1a6-62b7-925135e040e1.gif)


- ステージ初期化と表示

‥以上！

あっかーん

今後の予定

- 自機ずんだ（下で見切れてるやつ）の移動処理
- ずんだピースと接触、吸着処理
- 自機ずんだの回転、反転処理
- ネクストずんだピース出現
- クリア判定

まだ[VOICEゲームジャム2](https://itch.io/jam/voicegamejam2)まで2週間ある。
明日から本気出す！
tmutil deleteでError (257) readingとなる場合の対処

## 環境

* Mac mini 2018
* macOS 10.14 (Mojave)
* TimeMachineのファイルシステムフォーマット: Mac OS Extended (Case-sensitive, Journaled, Encrypted)

## 経緯

Mac mini 2011 (High Sierra)で使っていたTimeMachineの外付けHDDをMac mini 2018 (Mojave)で使おうとつないだところ，容量が足りないエラーが発生しました（前後のマシンのコンピュータ名は異なります）．
そこで，`tmutil`コマンドを使って過去のバックアップを削除しようとしたところ，次のようなエラーになりました．

```shell:
$ sudo tmutil delete /Volume/timemachine_disk/Backups.backupdb/computer_name
Error (257) reading: /Volumes/timemachine_disk/Backups.backupdb/computer_name
Total deleted: 0B
```

当該ディレクトリへのアクセスはできないようです．

```shell:
$ sudo ls /Volumes/timemachine_disk/Backups.backupdb/computer_name
ls: computer_name: Operation not permitted
```

これはSIP(System Integrity Protection)というものによる制限のようです．`chown`などでアクセス権を回避する方法なども見かけたのですが，SIPがオンの状態ではどうにもうまくいきませんでした．

## 対処方法

一度SIP(System Integrity Protection)をオフにしてから実行することで削除できるようになりました．

1. macOSをシャットダウンする
1. Command+Rを押しながらリカバリモードで起動する
1. TimeMachineのディスクをディスクユーティリティでマウントする
1. ターミナル（ユーティリティメニュー）で`csrutil disable`と入力しSIPをオフにする
1. macOSを再起動する
1. macOSが通常起動したら，TimeMachineのディスクをマウントする
1. `tmutil`コマンドでバックアップの削除を実行する（今度はエラーにならずに削除された）
1. macOSをシャットダウンする
1. Command+Rを押しながらリカバリモードで起動する
1. ターミナル（ユーティリティメニュー）で`csrutil enable`と入力しSIPをオンに戻す
1. macOSを再起動する


## 参考

* [Mac をシングルユーザモードまたは Verbose モードで起動する - Apple サポート](https://support.apple.com/ja-jp/HT201573)
* [MacでOperation not permittedが出た時の対処法 - Qiita](https://qiita.com/mym/items/90bf9f0a6417bd785bb0)
Python で FPGA/Vivado のシミュレータを使う

# Vivado のシミュレーションを使う
Cora Z7 を対象としたいのでまずは xc7z7007sclg400-1 のプロジェクトを作ります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/f5f3a98f-e91a-e1e4-08d8-606001713ac0.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/9b026e37-1aab-f031-39c8-4a3db598c16e.png)

# polyphony が生成した Verilog ファイル
simu.py で出来たファイルは .tmp 内にあります。ここでは前回と同様 adder.py をコンパイルしています。

```text:simu.py 実行
> ../polyphony/simu.py adder.py
Compiling: [=========================] 100% ... printresouces
(99, 66, 2)
v =  3
  170:finish

> ls .tmp
_adder.v  debug_log      debug_log.top.adder  test*
adder.v   debug_log.top  debug_log.top.test   test.v
```

簡単な足し算プログラムで出来た test.v _adder.v の Verilog を Vivado に追加します。test.v はシミュレーション用です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/48212c7e-72b8-859c-8399-1d308cbc3459.png)

# シミュレーション実行
Run Behavioral Simulation を実行します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/b6499e06-76a2-169d-dd1c-f2c1e53fd126.png)

シミュレーション用の画面になりました。finish で止まっていてすでに実行済みのようです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/ca39b0c5-542c-b4d4-128f-02955d29fe8b.png)

# シミュレーション結果を見る
Untitled のタブがシミュレーション結果です。うまくいったようです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/2d1e8036-a85f-334e-74db-24e65bdaab8b.png)
[cocoa][swift]BUKURO.swift 2018-07 を振り返る

<p>『The Bash in Tokyo』という祭りは終わりました。<br />
今後は、地道にコツコツと勉強会を開催することにして、心機一転の第1発目。<br />
予想外だったのは、申し込み人数が多かったことです。<br />
そして、自分の発表、参加された方々が楽しんでくれたようで充実した勉強会となりました。<br />
よかった。ホッ。</p>

# Cocoa.swiftについて
<ul>
<li>Cocoa勉強会 関東 Swift分科会 です。</li>
<li>ほぼ毎月、池袋コワーキングスペース OpenOffice FOREST で開催してます。</li>
<li>macOS/iOS/watchOS/tvOSプログラマーのための勉強会です。</li>
<li>プログラムに関する知識や経験を共有を目的としています。</li>
<li>会の活動内容や発表資料、サンプルコードは公開を前提としています。</li>
<li>申し込みは、connpassから。<br /><a href="https://cocoa-kanto.connpass.com/">https://cocoa-kanto.connpass.com/</a></li>
</ul>

# VirtualBoxへのMojaveのインストール
<p>この発表があった時点で、VirtualBoxへMojaveをインストールするのは困難でした。<br />
この発表では、インストールに成功したので、その手順を詳細に説明しました。</p>

# 通信デバッグ
<p>ちょうど仕事でiPhoneの通信障害を負っていたので、USBで接続されたiOS端末をMacでパケットキャプチャーをする方法を発表した。</p>

# SwiftのOptionalを理解する
<p>発表者は、Objective-Cの専門家だが、仕事の都合でSwiftを利用する機会がするない。<br />
慣れていないので、なかなか、Optionalがマスターできない。<br />
そこで、Optionalに関係することを全て一覧にして、その内容が具体的なコードを簡素な資料にしたので、それを発表した。<br />
この発表は、次の発表と続いていて、勉強会参加者とOptionalについてディスカッションした。</p>

# 構文糖衣なしでSwiftのオプショナルを使うとどうなるか？
<p>発表会用に用意したコードをもとに、勉強会参加者とディスカッションするという内容だった。<br />
やはり、こういう形式だととても盛り上がる。<br />
参加された方々は楽しめたのでは？</p>

【関連情報】
<a href="https://qiita.com/advent-calendar/2018/cocoa">Cocoa Advent Calendar 2018</a><br />
<a href="https://cocoa-kanto.connpass.com/event/91202/">BUKURO.swift 2018-07</a><br />
<a href="https://cocoa-kanto.connpass.com/">Cocoa.swift</a><br />
<a href="https://www.facebook.com/groups/cocoa.kanto/">Cocoa勉強会 関東</a><br />
<a href="http://www.bitz.co.jp/weblog/">Cocoa練習帳</a><br />
<a href="https://qiita.com/m_yukio">Qiita</a><br />
Xcode10で簡単にコードカバレッジ測定

# 手順
## スキームの編集
Product > Scheme > Edit Scheme... を開き、Testを選択します。
OptiinsタブからCode Coverageにチェックを入れてClose。
![スクリーンショット 2018-12-07 23.04.28のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/112818/e317dd29-d043-e5db-6b5d-305c853bc7d3.png)


## テストの実行
Testを実行して成功させます。

## 測定結果の確認
Report NavigatorからTest内のCoverageをクリック。
下のような感じで、ファイル毎、メソッド毎のテストカバレッジ一覧を見ることができます。
![スクリーンショット 2018-12-07 23.00.01.png](https://qiita-image-store.s3.amazonaws.com/0/112818/2a0ffae5-3781-4a98-82c5-3069ae3d1be4.png)

さらにメソッドをダブルクリックすると該当コードに移動し、行ごとに実行したか or していないかを調べることもできます（右上の数字は呼び出した回数です）。
<img width="1026" alt="スクリーンショット 2018-12-07 23.39.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/112818/20824412-37dc-2ac6-c693-05fdfcf0a562.png">

# 参考
* [Swift のコードカバレッジ - Qiita](https://qiita.com/zakkied/items/7d77bdb7585cde23cfab)
* [Xcodeの概要: コードカバレッジを利用する](https://developer.apple.com/jp/documentation/ToolsLanguages/Conceptual/Xcode_Overview/CheckingCodeCoverage/CheckingCodeCoverage.html)
vscodeでVue.jsを書くときに使っているプラグインとか

お疲れ様です。@dayoshixです。

ここ1年ほど仕事でvscodeを使ってVue.jsアプリを書いています。
今、vscodeに入れているプラグインの中からVue.js開発に関連していて便利だと思ったプラグインとかツールをまとめてみました。

# ESLint

![eslint.png](https://qiita-image-store.s3.amazonaws.com/0/31639/6f53f92e-8ed8-9009-206a-51fc377a7a0e.png)


eslintを使用する場合は入れておきましょう。
後述する`Vetur`を使用し単一ファイルコンポーネント(`.vue`)内のJSにeslintを効かせたい場合にも必要となります。

[ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)

# Vetur

![vetur.png](https://qiita-image-store.s3.amazonaws.com/0/31639/9bca1d93-3557-a543-748f-b329f25329ea.png)

単一ファイルコンポーネントでVue.jsを書いている場合はほぼ必須のpluginです。
これがないとシンタックスハイライトや、HTMLやJSなど文脈に合わせたコード補間などが効かないので黙って入れることになります。

色々な事ができるので[ドキュメント](https://vuejs.github.io/vetur/snippet.html)を一通り参照することをお勧めします。

中でも[Setup](https://vuejs.github.io/vetur/setup.html)ページにある[単一コンポーネントファイル内のJSにESLintを効かせるvscodeの設定](https://vuejs.github.io/vetur/setup.html#vs-code-config)は先に紹介したESLintプラグインを入れている場合は設定しておくと[eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue)の[Essentialなルールセット](https://vuejs.github.io/eslint-plugin-vue/rules/#priority-a-essential-error-prevention)でチェックしてくれるので便利です。

また、ES Moduleのパス指定でWebpackのaliasを使用している場合、通常設定ではコードジャンプが効かなくなってしまうのですが、ここで紹介されている[Path mapping](https://vuejs.github.io/vetur/setup.html#path-mapping)をやっておくとコードジャンプが効くようになるので参考にすると良いでしょう。

[Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur)

# Bookmarks

![Bookmarks.png](https://qiita-image-store.s3.amazonaws.com/0/31639/84e7a48f-bb94-5b32-e9a3-3e7202a9350c.png)

単一ファイルコンポーネントを編集する際、コードが長くなればなるほど`<template>`、`<script>`、`<style>`の行ききが煩わしくなる事があります。
そういう場合に行単位でブックマークが出来てショートカットキーで移動できるこのプラグインが便利です。

![vue.gif](https://qiita-image-store.s3.amazonaws.com/0/31639/cb5f46ac-c294-35c6-308c-c61b9550bae3.gif)

[Bookmarks](https://marketplace.visualstudio.com/items?itemName=alefragnani.Bookmarks)

# Vue Peek

![vue-peek.png](https://qiita-image-store.s3.amazonaws.com/0/31639/c7aed4c7-622f-c604-2cd7-8c694deca061.png)

vscodeの標準機能である参照先のコードをその場でのぞき見できるpeekを単一ファイルコンポーネントで行えるようになります。
peekをよく使う人は入れておくと便利かもしれません。

[Vue Peek](https://marketplace.visualstudio.com/items?itemName=dariofuzinato.vue-peek)

# その他

vscodeとは関係ありませんがVue.js開発に便利な物も紹介します。

## Vue.js devtools

![vue-devtool.png](https://qiita-image-store.s3.amazonaws.com/0/31639/302569f1-f7d0-774b-fc9a-a0cc900d0eae.png)

Vue.js開発を便利にするWebブラウザエクステンションで、Vue.js開発をする場合に最初に入れるべき物と言えます。
Vueコンポーネントのinspectionや状態、Vuexストアのmutationごとの状態などを参照する事が出来ます。

## Vue CLI 3

![vuecli3.png](https://qiita-image-store.s3.amazonaws.com/0/31639/68f35b0d-7627-4df2-4a92-a94674c3099e.png)

Vue.jsアプリのベストプラクティスを適用したっぽいプロジェクト雛形を作成出来たり、Vue.jsのpluginやライブラリなどをアプリに組み込んで来れたり、色々できる開発補助ツールです。  

これで作ったプロジェクト雛形と同等のレベルのものを一人で作るには膨大な時間と労力が必要なので特別な理由がない限り利用したいところ。

[vue-devtools](https://github.com/vuejs/vue-devtools)

# 総括

まとめてみると`Vue CLI 3`でいい感じのプロジェクトの雛形が出来て、`vscode`に`Vetur`を入れて、Chromeに`Vue.js devtools`を入れるだけで快適な開発環境を手に入れる事が出来て今Vue.jsでWebフロントエンドを始める人は恵まれているなぁと思った。😌
Ubuntu 18.04 LTSにdockerをインストール

環境: Ubuntu 18.04 LTS

以下のコマンドで簡単にインストール出来た。

```
$ sudo snap install docker
docker 18.06.1-ce from Docker, Inc (docker-inc) installed
```
バージョンの確認

```
$ docker --version
Docker version 18.06.1-ce, build e68fc7a
```
uim-fepもしくはvimのバグ 256色のcolorschemeで点滅する日本語とNeoVimへの移行

uim-fepもしくはvimのバグ 256色のcolorschemeで点滅する日本語とNeoVimへの移行
==========================================

長らく更新していなかった。

時々，
- [uim-fepとuim-anthyの使い方と設定方法](https://qiita.com/Pseudonym/items/9ff0e9028dfd6bad5958)
- [fbtermの日本語表示．uim-fepとuim-anthyで日本語入力も．ついでに，vimの256色化も](https://qiita.com/Pseudonym/items/12e447557a5234bb265b)
- [w3m（w3m-img）をfbterm対応にして，インライン画像表示．ついでにrangerのサムネイルも](https://qiita.com/Pseudonym/items/310bc76fdbdeca76b903)
この辺の記事をいいねしてくれる人がいる．

こんなマニアックなものを見てくれるとはうれしい．

今回はそんなマニアックなお話の続き．

環境
-----------
- ArchLinux
- st
- uim
- i3-wm (dwmから乗り換え)


(´・ω・)  < そもそもなんでこんな問題発生するのか...
---------------------

(´・ω・)     <st(simple terminal)を使っているから

(´・ω・  ) < すごくいい端末エミュレータなんだけど...．fcitxとかuim-ximが使えないのよ 

(´・ω・)  <この 辺話や環境についてはまた別の記事で


前提条件であるst上での日本語の入力(uim-fep)
======================

なんだかんだでuim-ximとかfcitxを使ってX上で日本語入力をしていたが，
(´・ω・)  が愛する端末エミュレータstではうまく動いてくれない．

なんと，入力した文字がウィンドウの真下に現れるのだ．
そして，エンターを押して決定するとピョコンと瞬間移動して，文字が入力される．
基本フルスクリーンなのにそんな文字が見えるとでも？

さらに悪いことに，長文を打ってエンターを押すと文字化け（おそらく制御文字として入力される）し，ものの見事に画面をぐちゃぐちゃにしてくれる．

(´・ω・)  < 使い辛くてしかたがない

というわけで，普段のX上ではuim-ximを使い，stではuim-fepを使うようにしたかった．

( ちなみにstは公式ではXIMをサポートしているらしいのだが．．．
[suckless.org st - simple terminal](https://st.suckless.org/))

そこで，`~/.xprofile`には，次のように書く．
ポイントは`uim-xim&`を外しておくことだ．
そうしないと，st上でもuim-ximが動いてしまう．

```~/.xprofile

export GTK_IM_MODULE='uim'
export QT_IM_MODULE='uim'	
#uim-xim&
export XMODIFIERS='@im=uim'
```

xtermとかurxvtだと普通にfcitxやuim-ximが使えるのだろうか？


日本語が点滅する
==================

そして，上のように設定した上でstを起動し，


(´・ω・)<   `uim-fep` ッターン

と気持ちよく叩き，いそいそとvimを立ち上げる(´・ω・)  
`i`を打ち`ctrl  + space`で日本語に切り替えカチャカチャと文字を打ちEnterを叩く(´・ω・)  
そしてその顔がこうなる

( д) ﾟ ﾟ

なんと，入力した文字が点滅し始めているではないか．

xtermやurxvtでuim-fepしても同じような事が起こる．
なのにどこにも情報が乗っていない!!!

＼(^o^)／ < ｵﾜﾀ

で諦められるかい，
というわけで色々原因やらを調べてみた．

わかったこと
===============

- vimで256色のcolorschemeを使った場合のみ発生する
	- molokaiとかgruvboxとかはアウト
	- 標準colorschemeだと大丈夫
	- `TERM=xterm``TERM=screen`だとmolokaiやgruvboxでも大丈夫(色はあれだが)
	- `TERM=st-256color``TERM=xterm-256color``TERM=screen-256color`だとアウト
- たまにvimを終了しても点滅が残り，bash(uim-fep)まで点滅を始める
	- exitでuim-fepを終了すると大丈夫
- uim-fepのオプションによる微妙な違い(オプションが何を意味するかは割愛)
	- `uim-fep -sl`だと，最初っから点滅している．
	- `uim-fep -sn`だと，日本語を入力してEnterを押すと入力した文字が点滅
		- この点滅は`ctrl + L`でフラッシュするとなくなる

以上の事から，uim-fepとvimどっちかが悪いか，どっちも悪いかであるが，確信もないし，`yay -G uim`で引っ張ってきたコードは最初から`makepkg`でコンパイルが通らないし．．．

でもまあ，uim-fepとvimの相性が悪いなら別のものを．．．

(´・ω・)<  vi... いや NeoVimとかあったな．


vimからNeoVimへ
=====================

vimの代わりにNeoVimを入れた結果，まだたまに文字が点滅するが，vimに比べれば格段にまし．

設定ファイルの場所が変わるけど，`ln -s`で張り直してやれば今までのままでも使える．

__ただし__，viminfoはフォーマットに互換性がないみたい．(よく調べていないが)


(´・ω・) <このついでにNeoVimに移行しちゃおっか．

というわけで，vim使いからNeoVim使いになりました．

NeoVimへの文句
------

NeoVimでこの記事を書いているんだけど，顔文字の表示がおかしい

```
set ambiwidth=double
```

の設定をしているんだけど眉毛と目がうまく表示されず，妙につまっている．
さらに，カーソルの下の文字と実際に操作している文字がずれているせいで，
まったく思い通りに文字が打てない．
vimだと綺麗に写ったのにね．NeoVimだと設定の書き方が違うのかな？
これが今の不満．

(´・ω・)
Python で FPGA/簡単な足し算プログラム

#簡単な足し算プログラムを書いてみる
Python で足し算プログラムを書いてみます。テストベンチも作ります。

```python:adder.py
from polyphony import testbench

def adder(a, b):
    return a + b

@testbench
def test():
    v = adder(1, 2)
    print("v = ", v)

test()
```

味気なですが Python で実行してみましょう。

```text:Pythonで実行
> python adder.py
v =  3
```

うまく動きました。iverilog を使ったシミュレータではどうでしょう？polyphony の github にある simu.py で実行してみます。

```text:iverilogで実行
> ../polyphony/simu.py adder.py
Compiling: [=========================] 100% ... printresouces
(99, 66, 2)
v =  3
  170:finish
```

うまくいったようです。-vm オプションでモニターが出来ます。

```text:-vmオプションを使う
> ../polyphony/simu.py -vm adder.py
Compiling: [=========================] 100% ... printresouces
(99, 66, 2)
    0:adder_0_in_a=   x, adder_0_in_b=   x, adder_0_out_0=   x
   10:adder_0_in_a=   x, adder_0_in_b=   x, adder_0_out_0=   0
  110:adder_0_in_a=   1, adder_0_in_b=   2, adder_0_out_0=   0
  130:adder_0_in_a=   1, adder_0_in_b=   2, adder_0_out_0=   3
v =  3
  170:finish
```

うまくいっているような気がします。-vd オプションで vcd ファイルを生成します。

```text:-vdオプションを使う
> ../polyphony/simu.py -vd adder.py
Compiling: [=========================] 100% ... printresouces
(99, 66, 2)
VCD info: dumpfile test.vcd opened for output.
v =  3
  170:finish
```

test.vcd が出来ました。gtkwave で見てみましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/f83eea80-6b4f-8a23-655d-72206e268fee.png)

うまくいっている気がします。
PowerAppsでスコア用のフォントを表示する。

単に数字を表示するのではなくちょっと気の利いたフォントで数字を表示したいときに使える方法です。
単純に数字の画像を切り替えるだけなんですけどね♪

# 準備
0~9のスコア用の画像をメディアに取り込んでおきます。

こんな感じ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/97601/c8dfbd79-3fb2-98ea-ff9b-2d4d3e3a4b53.png)

# 方法１：Switchを使って切り替える
一番理解しやすいやり方だと思います。

メディアから画像を桁数分だけ挿入し、各桁のImageプロパティに以下の設定を行います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/97601/db9b7a21-b723-3ba8-d860-2867ec4eb1bc.png)


```C#:Imageプロパティ
一の位 = Switch(Mod(score,10),0,dNumber0,1,dNumber1,2,dNumber2,3,dNumber3,4,dNumber4,5,dNumber5,6,dNumber6,7,dNumber7,8,dNumber8,9,dNumber9)
十の位 = Switch(Mod(RoundDown(score/10,0),10),0,dNumber0,1,dNumber1,2,dNumber2,3,dNumber3,4,dNumber4,5,dNumber5,6,dNumber6,7,dNumber7,8,dNumber8,9,dNumber9)
百の位 = Switch(Mod(RoundDown(score/100,0),10),0,dNumber0,1,dNumber1,2,dNumber2,3,dNumber3,4,dNumber4,5,dNumber5,6,dNumber6,7,dNumber7,8,dNumber8,9,dNumber9)

```

Scoreの値を変更することで画像が切り替わります。
![スコア加算1.gif](https://qiita-image-store.s3.amazonaws.com/0/97601/08ba4ea5-90a2-5960-f2c9-5c89139d19f5.gif)

# 方法２：スコア用の画像をコレクションに保存して呼び出す
Switchを使わない方法です。

ScreenのOnVisibleでもボタンのOnSelectでもよいのでコレクションを作ります。今回は```numImages```というコレクションにします。

```c#:
ClearCollect(numImages,{id:0,image:dNumber0},{id:1,image:dNumber1},{id:2,image:dNumber2},{id:3,image:dNumber3},{id:4,image:dNumber4},{id:5,image:dNumber5},{id:6,image:dNumber6},{id:7,image:dNumber7},{id:8,image:dNumber8},{id:9,image:dNumber9})
```
コレクションの一覧を確認すると確かに生成されています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/97601/a6b751ae-6a2c-4841-3e3b-4060f237abf2.png)



あとは各桁のImageプロパティに以下の設定を行うだけです。

```C#:Imageプロパティ
一の位 = LookUp(numImages, id=Mod(score,10),image)
十の位 = LookUp(numImages, id=Mod(RoundDown(score/10,0),10),image)
百の位 = LookUp(numImages, id=Mod(RoundDown(score/100,0),10),image)
```

問題なく動きますね。
![スコア加算2.gif](https://qiita-image-store.s3.amazonaws.com/0/97601/a3d6545c-fe67-960b-954f-27ef53de48db.gif)

# 方法３：せっかくだから表示用の画像をギャラリーで作る。

方法１と方法２では表示用の画像を3枚挿入しましたが、それがちょっともぞもぞする場合はギャラリーを使います。

まずはscoreを桁ごとに分けてコレクションを作成します。```scoreNum```とします。

```c#
ClearCollect(scoreNum,{id:0,num:0},{id:1,num:0},{id:2,num:0})
```

こんなのできました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/97601/2c3d6d87-cbb2-1213-8418-a2741f5179f2.png)

ギャラリーを挿入してItemsに```scoreNum```を設定します。その際、idの降順になるように設定します。
ギャラリーのレイアウトは横方向を選びます。

```c#:Gallery
Items = Sort(scoreNum,id,Descending)
```
また、ギャラリー内の画像のImageを以下のように設定します。

```c#:Image
Image = LookUp(numImages,id=ThisItem.num,image)
```

で、ちょっと横幅を調整するとこんな感じになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/97601/1dbcf6a9-94e6-69b7-b087-742d28d0311f.png)

あとは```score```を増減させたときに```scoreNum```をUpdateIfで更新するだけになります。

```c#:Button.OnSelect
UpdateContext({score:score+1});
UpdateIf(scoreNum,true,{num:Mod(RoundDown(score/10^id,0),10)})
```

こちらの動作も他と比べ問題なさそうですね。
![スコア加算3.gif](https://qiita-image-store.s3.amazonaws.com/0/97601/04cfe3a6-4499-342b-7425-24ae36a3ebd1.gif)


少しぐらい早くしてもそれっぽくスコアが表示されます。
![スコア加算.gif](https://qiita-image-store.s3.amazonaws.com/0/97601/0d4a3d91-d276-b659-b1f2-b05cfe10f6ec.gif)

お好きな実装方法でお試しください。
Railsの自己結合①　初心者→中級者へのSTEP7/25

#Railsの自己結合
**はじめに**
今回は自己結合についてです。バックエンドっぽいです。土日が待ち遠しいです。
頑張ります。

##自己結合とは##
**そもそも結合って？**
２つのリレーションに対し、指定した条件を満たすように１つのリレーションへと統合すること。
内部結合、外部結合など結合の仕方は色々あります。今回はその中の一つ自己結合についてです。


**なんで結合するん？**
例えば下記のようなリレーションが二つあります。

*人物リレーション*

| id          | name       | country_id   |
|:------------|-----------:|:------------:|
|1            |taro        |1             |
|2            |jiro        |1             |
|3            |tom        　　|2             |
 
*国リレーション*

| id          | name       | 
|:------------|-----------:|
| 1           | japan      | 
| 2           | America    | 
| 3           | India      | 

taroの国はどこだっけ？となった時、人物リレーションから住む国のidを調べ、次に国リレーションから該当する国を見つける。二回リレーションを見るわけです。面倒です。なので結合してリレーションを見るのは一回にします。
今回の場合は内部結合でくっつけると下記のようになります。

| id          | name       | country_id   |id          | name       | 
|:------------|-----------:|:------------:|:-----------|-----------:|
|1            |taro        |1             |1     　      | japan      | 
|2            |jiro        |1             |1     　      | japan      | 
|3            |tom        　　|2             | 2     　     | America    | 

taroの国はtaroの行を見れば一瞬でわかりますね。
このように結合は検索を楽にしてくれるのです。


**自己結合って？**
上の例では内部結合でした。二つのリレーションを結合しています。
ですが、自己結合とは同じ一つのリレーションを結合するのです。.....??

例を見せた方が早いですね。

| id          | name       | firend_id    |
|:------------|-----------:|:------------:|
|1            |taro        |2             |
|2            |jiro        |1             |
|3            |tom        　　|1             |


上記の場合、taro君の友達を探す時、taroの行のfirend_idをみる。次にそのidで探す。さっきと同じく二度手間です。
てな訳で結合します。イメージしにくいですが、上のリレーションと全く同じのがあったとして結合するとイメージしてみてください。そうすると以下のようになります。

| id          | name       | firend       |
|:------------|-----------:|:------------:|
|1            |taro        |jiro          |
|2            |jiro        |taro          |
|3            |tom        　　|taro          |

これで友達が一目瞭然になりました。これが自己結合です。



##まとめ
今日は少なめです... 明日はRDMなので...
続きは、以上をふまえて明日、railsでの自己結合を掘り下げていこうと思います。


##参考にしたの

SQL素人でも分かるテーブル結合(inner joinとouter join)
https://qiita.com/naoki_mochizuki/items/3fda1ad6594c11d7b43c

Active Record の関連付け (アソシエーション)
https://railsguides.jp/association_basics.html#%E8%87%AA%E5%B7%B1%E7%B5%90%E5%90%88
AUTOSAR（Adaptive 18.10）を読んでいく（6）

# State Management

State Managementは、現在のMachine StateやFunction Group Stateの定義と、
Execution Managementが必要とする状態遷移の初期化を責務とする機能クラスタである。
Execution Managementによって、現在の状態に依存し、現在動作しているProcessに関する
状態遷移と状態制御を行う。

よくわからない1段落。何が言いたいんだろう・・・

状態変化要求は以下によって発生する

- エラーリカバリを目的としたHealth Management（例えば、fallback機能の有効化）
- システムを診断状態に落とすためのDiagnostic
- ソフトウエアのConfigurationやUpdateをするために、
  システムを診断状態に落とすためのUpdate and Config Management
- 必要とされる機能やネットワークの状態に対応するNetwork Management
- 認証アプリ（例えば、異なるマシンや異なるECU上に配置されている自動車のstate manager）

状態変化要求は、ara::comサービスインターフェースを介して、他のFunctional Clsterから発生する。

State Management機能は重要な機能なので、他のFunctional ClusterやApplicationからのアクセスはセキュアである必要がある。（例えば、IAM（Identity and Access Managementを使う））
State ManagementはPlatform Health Managementによってモニタおよび監督される。

State Managementは、現在の状態に関する情報を要求するためのインターフェースを提供する。

さらに、State Managementは、より細かい粒度のプロセス制御機能を提供する。
（たとえば、late wake-upのサポート、アプリケーション仕様に記述されたリセット処理の実行、アプリケーションの通信のふるまい制御 等）
これら全ては、メモリからProcessを削除することなしに実行でき、異なるスタートアップパラメータでリロードやリスタートすることができる。

State Management機能は、プロジェクト特有であるため、AUTOSARはClassic Platform BswMのような機能仕様を決めた。
State Managementは、以下を目的としている。

- 基本となるサービスのインターフェースを規定する
- 実際の仲裁ロジックを、プロジェクト固有のコード（ライブラリなど）にカプセル化する

仲裁ロジックのコードは、標準的な設定パラメータに基づいて個々に開発され、（部分的に）生成されるかもしれない。
これら、ないしは他の設計は議論中であり、詳細は後の版で規定する。

---
まあ、後の版を確認しろ、ってことですね