OmniAICreator/Qiita-1.07M huggingface dataset:
python　関数②

###定型文に任意の文字列を差し込む処理
###　formatメソッド
　　**文字列.format(引数,引数,...)**

　ex)>>>a='{}は{}と同じ意味だ'
　　>>>a.format('すぐに','ただちに')
　　'すぐにはただちにと同じ意味だ'


＃
＃
　　**文字列.format(引数0、引数1,...)**
　　番号をつけることで同じ値を何度も表示することができるようになる
　　
　ex)>>>a='{0}は{1}と同じ意味だ。{0}と{1}は{2}とも同じ意味である'
　　>>>a.format('すぐに','ただちに','すみやかに')
　　'すぐにはただちにと同じ意味だ。すぐにとただちにはすみやかにとも同じ意味である'


＃
＃

###　replaceメソッド
　文字列の中から旧文字列を探し出して、新文字列に置き換えた文字列を作り、返す
　　　　　**文字列.replace(旧文字列,新文字列)**

　ex)>>>guest='斎藤、鈴木、田中'
　　>>>guest.replace(',',様、')**
　　　　斎藤様、鈴木様、田中様


　　　　**文字列.replace(旧文字列,新文字列,回数)**
　　　　指定した回数だけ、文字列の中から旧文字列を探し出して、新文字列に置き換えた文字列を作り、返す
　　
　　ex)>>>guest='斎藤、鈴木、田中'
　　>>>guest.replace(',',様、',1)**
　　　　斎藤様、鈴木、田中
Ruby on Rails デバッガまとめ

# RoRでデバッグ

## はじめに

### システム情報
* Ruby 2.6.5
* Rails 5.2.3
* bundler 1.17.2
* puma
* rbenv local環境下

## デバッグ用のライブラリ群

### [pry-rails](https://github.com/rweng/pry-rails)（[rubygems](https://rubygems.org/gems/pry-rails)）

Rails console で Pry が起動するようになる
pry-rails を入れるまでは irb が起動する
show-routes などのコマンドが Rails console で使えるようになる
Rails console で help と打つと、使えるコマンドがわかる
binding.pry をソースコード中に挟むとそこがブレークポイントとなり、そこで処理を止めてデバッグできるようになる
pry-rails だけではステップ実行はできない

#### pryの使い方

```ruby:Rails-console
> help

**Navigating pry**
  !pry               Start a pry session on current self.
  disable-pry        Stops all future calls to pry and exits the current session.
  exit               Pop the previous binding.
  exit-all           End the current pry session. ブレークポイントで停止した状態から解放する（デバッグの終了）
  exit-program       End the current program.
  jump-to            Jump to a binding further up the stack.
  nesting            Show nesting information.
  switch-to          Start a new subsession on a binding in the current stack.
```

![チュートリアルをここに差し込み予定]()

### [pry-byebug](https://github.com/deivid-rodriguez/pry-byebug)（[rubygems](https://rubygems.org/gems/pry-byebug)）

binding.pry で止めたところからステップ実行ができる
例えば next コマンドで一行ずつ実行できる
こちらも詳細は Rails console の help などを参照

#### byebugの使い方

```ruby:Rails-console
> help
**Byebug**
  backtrace          Display the current stack.
  break              Set or edit a breakpoint.
  continue           Continue program execution and end the pry session.ブレークポイントで停止した状態から解放する（デバッグの終了）
  down               Move current frame down.
  finish             Execute until current stack frame returns. 現在のスタックを終了する（ステップアウト：レシーバ呼び出し部分に戻る）
  frame              Move to specified frame #.
  next               Execute the next line within the current stack frame. ステップの次に移動するが、内部処理には入らない（ステップオーバー）
  step               Step execution into the next line or method. ステップの次に移動するが、内部処理に入る（ステップイン）
  up                 Move current frame up. レシーバ呼び出し部分に戻る

Pry-byebug (v3.7.0)
  exit-all           End the current pry session.
```

![チュートリアルをここに差し込み予定]()

#### エイリアスを作成してコマンド短縮

```ruby:.pryrc
if defined?(PryByebug)
  Pry.commands.alias_command 's', 'step'
  Pry.commands.alias_command 'n', 'next'
  Pry.commands.alias_command 'f', 'finish'
  Pry.commands.alias_command 'c', 'continue'
end
```

### [pry-doc](https://github.com/pry/pry-doc)（[rubygems](https://rubygems.org/gems/pry-doc)）

show-method コマンドで C で書かれたコードやドキュメントも出力できるようになる
show-method は Pry のコマンドで通常は Ruby で書かれたコードやドキュメントのみ出力できる

#### pry-docの使い方

![チュートリアルをここに差し込み予定]()


## 注釈
* 参考になった技術まとめ
  * [pry-byebugでrubyをデバッグする](https://qiita.com/AknYk416/items/6f0bec58712edaf4940e)
  * [printデバッグにさようなら！Ruby初心者のためのByebugチュートリアル](https://qiita.com/jnchito/items/5aaf323ab4f24b526a61)
コーディングをする時に参考にしたサイトと便利なプラグイン

こんにちは！カレーアドベントカレンダー20日目です！
ついにあと6記事！やったぜ！！！！！！

以前、HTMLとCSSでカレーライスを作りました。
その際にお世話になったWebサイトと、
それだけじゃ心もとないので、普段業務で使ってるエディタのプラグインの紹介をしていこうと思います。

では、感動の第1フィナーレをどうぞ！！！！

## Webサイト
HTMLとCSSでカレーを作るのにいろんなものを参考にしました。
こちらに、参考にした記事およびWebサイトをご紹介します。

### PURE CSS ART GALLERY
https://css-art.com/

CSSで絵画書いてるとか、~~化け物級~~超人の方のCSSアートが紹介されているサイトです。
影の付け方であったり、曲線の書き方等を参考にしました！

### CodePen
https://codepen.io/

言わずもがな、全世界の人のコードを閲覧することができます。
「カレー」「湯気」「curry」等で検索をし、近しいものがあればどんな構造にしているか等を
見て理解した後に今回のカレーライスに落とし込みました。

### HTML + CSSでリアルな目玉焼きを作る
https://qiita.com/nishihara_zari/items/d7dad5fbe2eb81301938

ICSのにしはらさんの記事で、HTMLとCSSでリアルなシリーズです。
`mask-image`、`radial-gradient()`等の処理を参考にしました。
おかげさまでトロッとしたカレーライスにすることができました！

### 100days CSS
https://100dayscss.com/

毎日1つHTMLとCSSでの課題を与えてくれます。
実用的なものから、「絵を書くため」に使うもの様々です。
こちらは模写から入り、徐々に自分で考えて表現するようにすることで、
CSSプロパティの知識や、処理の方法等を覚えていきました。

## プラグイン
業務の中で使用している便利なプラグインの紹介をします。
使っているテキストエディタは`VS Code`です。
なので、`VS Code`が対象になります。

### Code Spell Checker
https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker

私はtypoや間違った英単語の覚え方をしていたりするので、
その対策としてこのプラグインを入れて誤字脱字を防いでいます。

このプラグインは以下のようにtypoをした場合、青い波線でハイライトしてくれます。
<img width="316" alt="スクリーンショット 2019-12-20 14.16.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146512/5e6df8ed-13a3-03c0-7bc0-2ad459d259f7.png">

また、「問題」ウィンドウでも表示してくれます。
<img width="365" alt="スクリーンショット 2019-12-20 14.26.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146512/5b2cdf08-81e0-cbd4-32a3-8c798c56d1e8.png">

お世話になってます！！！！！！！！！！！！

### Sublime Text Keymap and Settings Importer
https://marketplace.visualstudio.com/items?itemName=ms-vscode.sublime-keybindings

こちらはSublimeの機能や設定をそのまま移行してくれるものです。
Sublimeはもともと`emmet`の機能や、選択範囲の拡張・選択範囲の複製・複数行の検索・置換等
色々と便利なことをしてくれていました。（以下の記事参考）
https://qiita.com/sou_lab/items/0a478d18fe4e18ddcada

これによりコーディングスピードを爆速にすることで効率化できました。
（`emmet`については後日記事にします。）


### indent-rainbow
https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow

こちらはインデントごとにスペースの色を変更してくれるものです。
これによって、どの括弧がどこと対応するのかがわかりやすくなります。


## おわりに
今回はカーテンコールとして、HTMLとCSSで絵を書くときに参考にしたもの、
業務でお世話になっているプラグインについて紹介しました！

この方々に拍手をお願いしまーーーーーーす！！！！！！！！
ROCm で RADV で Vulkan(compute kernel) を使うメモ

## 背景

* ROCm 環境でも Vulkan(ゲーム用ではなく, GPU レイトレーシングや機械学習で compute shader で計算用) 使いたい
  * OpenCL な機械学習コードを, ROCm で動作確認しつつ Vulkan にポートしたいとか. 
* ゲーム向けなどの amdgpu(amdgpu-pro) ドライバだとプロプライエタリ(?)の Vulkan 使えるが, ROCm と共存できない
  * kernel 4.18 以降であれば共存できる...かも? 

ROCm 環境にて, RADV(Mesa の一部となっている amdgpu(これもオープンソースのはず)ドライバ上のオープンソース Vulkan 実装)で compute 系が動くのを確認しました.

最新 RADV だと, 性能は, プロプライエタリだったり AMDVLK(AMD 側で開発している Vulkan オープンソース実装?) と比べても遜色は無いと考えられます.

Mesa 20.0's RADV + ACO Vulkan Driver Now Consistently Beating AMD's AMDVLK Linux Driver
https://www.phoronix.com/scan.php?page=article&item=mesa20radv-aco-amdvlk&num=1

ただし RADV は最新 AMD Vulkan 機能の対応には時間がかかるようです.

## インストール

Ubuntu 18.04 とします. ROCm がすでに入っているとします(ROCm 側の? `amdgpu` kernel module が入っているとします)

```
mesa-vulkan-drivers/bionic-updates,now 19.0.8-0ubuntu0~18.04.3 amd64 [installed]
  Mesa Vulkan graphics drivers
```

2019/12/20 時点で 19.0.8 と少し古いですが, 必要なのは apt で入ります.

```
$ sudo apt install mesa-vulkan-drivers
$ sudo apt install vulkan-info
```


`vulkaninfo` で見てみます.

```
===========
VULKAN INFO
===========

Vulkan Instance Version: 1.1.70


Device Properties and Extensions :
==================================
GPU0
VkPhysicalDeviceProperties:
===========================
        apiVersion     = 0x40105a  (1.1.90)
        driverVersion  = 79691784 (0x4c00008)
        vendorID       = 0x1002
        deviceID       = 0x66af
        deviceType     = DISCRETE_GPU
        deviceName     = AMD RADV VEGA20 (LLVM 8.0.0)

...
```

Voala! :tada:

複数 GPU の場合はそれぞれの GPU の情報が表示されるはずです.

機械学習で quantized kernel 実行に有益な `VK_KHR_shader_float16_int8` はありませんでした.

patch 自体は取り込まれているので,

RADV Driver Gets Big Patch Series For 8-bit & 16-bit Arithmetic, 8-bit Storage
https://www.phoronix.com/scan.php?page=news_item&px=RADV-8-bit-16-bit-Extensions


最新 RADV(Mesa)をコンパイルすると使えるものと思われます.

## compute 系コードを動かしてみる

vulkan_minimal_compute が動くのを確認しました.

https://github.com/Erkaman/vulkan_minimal_compute

コンパイルには,  apt で libvulkan-dev を入れればとりあえずいけます.

また, Ubuntu の libvulkan1 は validation layers 込みっぽく, 実行時には validation layers も動きました.

## さらなる高みへ

`VK_KHR_shader_float16_int8` を使うには, 最新 Mesa(RADV) コンパイルでいけます.
 
RADV で最新 Vulkan を使うため, Mesa をコンパイルするメモ
https://qiita.com/syoyo/items/9b98a3124ce47065453f
最低限押さえておきたい、間違ったIPv6化


# はじめに

この記事は [IPv6 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ipv6) の 20日目の記事として投稿しています。

# IPv6化とは

この記事での「IPv6化」とは、サーバに **インターネットから到達可能な** IPv6アドレスを付け、サービスをその IPv6 アドレスで提供可能とし、かつDNSの AAAAリソースレコードにその**インターネットから到達可能な** IPv6アドレスをつけること、としたいと思います[^1]

[^1]: いや、抜けのある定義なんですけど細か過ぎても、ね？

# 間違ったIPv6化

わざわざ定義とか言い出した点で察してる方はおられるかと思いますが、ここで取り上げるのは到達性のないIPv6アドレスをつけちゃった事例です。

- IPv4射影アドレス
    - ::ffff:192.0.2.1 みたいなの
- IPv4互換アドレス
    - ::192.0.2.1 みたいなの

とか。どれもIPv4アドレスを埋め込むIPv6アドレスです。どうやら、埋め込むIPv4アドレスがグローバルアドレスなら、到達性があるだろうと思っちゃうみたいです。たまにこれらのアドレスを AAAA につけちゃってる例を見かけることがあります。

# 実例

を挙げようかと思ったんですが、いずれ修正されるだろうし、まぁイメージだけを。

```
$ dig www.example.com AAAA +short
::ffff:192.0.2.1
```

こんな感じで、IPv4射影アドレスとかが返ってくるサイトがあります。実例みたい人はキーワードに "::ffff:" と "AAAA" でググってみると見つかるかも？

# マジかよ！つけちゃったよ！

大丈夫(だと思う)。ちゃんとお作法に則った実装なら、IPv4 にフォールバックするし、そのサイトがウェブサイトなら、最近のブラウザではこのフォールバックも高速化されていて、おそらくユーザは気づかない[^2]。もしつけちゃってたら、そっと外しておきましょう……

[^2]: 最近の主要なブラウザはほぼ [Happy Eyeballs](https://tools.ietf.org/html/rfc8305)と呼ばれる技術に対応していて、IPv6 で到達性がなければ、さくっと IPv4にフォールバックしてくれます。大雑把に言えば、接続の際に、IPv4/IPv6とで同時に接続しに行き、応答が早い方が通信で利用されます（実際には名前解決や接続の際に、 IPv4 に若干のペナルティが入っていて、IPv6 接続が優先される。実際にどの程度のペナルティを課しているかは、実装依存だそうです）

# まとめ

ということで、気をつけましょう〜

## 余談

結構大きめのサイトで、この手のことをやっちゃった例を見たことがあります。周りに聞ける人がいなかった不幸、なのかもしれませんね。IPv6アドレスに IPv4アドレスを埋め込む系のアドレス体系と用途って結構あるので、私が知らないだけで類似の事例は結構転がってるのかもしれない……
PostgreSQLで縦のデータを横のhstore型に変換する

# PostgreSQLで縦持ちのデータを横持ちのhstore型へ変換する

サブテーブルのサブテーブルと連結した時に
複数レコードが取れるが1レコードとしてまとめたい場合がたまにあるので。

## hstore有効化

さらっと有効化

```sql
CREATE EXTENSION hstore;
```

## SQL

```sql
SELECT
  sub.ID ,
  hstore(
    array_agg(sub.SubID),
    array_agg(sub.DataID)::text[] -- 数値の場合はtext[]化
  ) AS SubID_DataID
FROM
( -- 適当なテーブルをでっち上げ
  SELECT '1' AS ID, '1' AS SubID, 99 AS DataID
  UNION ALL
  SELECT '1' AS ID, '2' AS SubID, 98 AS DataID
  UNION ALL
  SELECT '1' AS ID, '3' AS SubID, 97 AS DataID
  UNION ALL
  SELECT '2' AS ID, '4' AS SubID, 96 AS DataID
  UNION ALL
  SELECT '2' AS ID, '5' AS SubID, 95 AS DataID
  UNION ALL
  SELECT '2' AS ID, '6' AS SubID, 94 AS DataID
) sub
GROUP BY
  sub.ID;

```

## psql結果

```
 id |          subid_dataid
----+---------------------------------
 2  | "4"=>"96", "5"=>"95", "6"=>"94"
 1  | "1"=>"99", "2"=>"98", "3"=>"97"
(2 行)
```

hstoreは< String, String >型なのでtext型へ変換する必要がある位


# おまけ

## 縦のhstoreを1行のhstoreに結合する

一度キーとバリューを切り離して
再結合するひつようがあるかも
hstore[]型を受け取る関数があればいいんだけどな…

```sql
SELECT
  sub3.FLG,
  hstore(
    array_agg(sub3.SubID),
    array_agg(sub3.DataID)
  ) AS JOIN_DataID
FROM(
  SELECT
    'Dummy' AS FLG, -- グループ化用ダミー
    skeys(sub2.SubID_DataID) AS SubID,
    svals(sub2.SubID_DataID) AS DataID
  FROM(
    --ここから
    SELECT
      sub.ID ,
      hstore(
        array_agg(sub.SubID),
        array_agg(sub.DataID)::text[] -- 数値の場合はtext[]化
      ) AS SubID_DataID
    FROM
    ( -- 適当なテーブルをでっち上げ
      SELECT '1' AS ID, '1' AS SubID, 99 AS DataID
      UNION ALL
      SELECT '1' AS ID, '2' AS SubID, 98 AS DataID
      UNION ALL
      SELECT '1' AS ID, '3' AS SubID, 97 AS DataID
      UNION ALL
      SELECT '2' AS ID, '4' AS SubID, 96 AS DataID
      UNION ALL
      SELECT '2' AS ID, '5' AS SubID, 95 AS DataID
      UNION ALL
      SELECT '2' AS ID, '6' AS SubID, 94 AS DataID
    ) sub
    GROUP BY
      sub.ID
    -- ここまでの間は同じ
    )sub2
  )sub3
GROUP BY
  sub3.FLG;
```

## psql結果

```
  flg  |                           join_dataid
-------+------------------------------------------------------------------
 Dummy | "1"=>"99", "2"=>"98", "3"=>"97", "4"=>"96", "5"=>"95", "6"=>"94"
(1 行)
```
[AppStoreConnect]年齢制限指定

**年齢制限指定（1/3）**

|名称|英語表記|
|:--|:--:|
|アニメまたはファンダジーバイオレンス|CARTOON_FANTASY_VIOLENCE|
|リアルな暴力的表現|REALISTIC_VIOLENCE|
|長時間の過激なまたは加虐的でリアルな暴力|PROLONGED_GRAPHIC_SADISTIC_REALISTIC_VIOLENCE|
|冒とく的または下品なユーモア|PROFANITY_CRUDE_HUMOR|
|成人向けまたは成人向けを暗示するテーマ|MATURE_SUGGESTIVE|
|ホラー／恐怖に関するテーマ|HORROR|
|医療／治療情報|MEDICAL_TREATMENT_INFO|
|アルコール、タバコ、ドラッグの使用または言及|ALCOHOL_TOBACCO_DRUGS|
|疑似ギャンブル|GAMBLING|
|性的内容およびヌード|SEXUAL_CONTENT_NUDITY|
|過激な性的表現およびヌード|GRAPHIC_SEXUAL_CONTENT_NUDITY|
|コンテスト|CONTESTS|

**年齢制限指定（2/3）**

|名称|英語表記|
|:--|:--:|
|無制限のWebアクセス|UNRESTRICTED_WEB_ACCESS|
|ギャンブル|GAMBLING|

**年齢制限指定（2/3）**

|名称|英語表記|
|:--|:--:|
|子供向けに制作||
|17+に制限||
ビルドに少し苦労したのでメモしとく OpenSSL 1.1.1d for Windows

## OpenSSL 1.0.2の手順でやってみる

欲しいものは `static library` かつ `マルチスレッド バージョンの静的なランタイム ライブラリ` を使うもの。

- ActivePerl、nasmをインストールする。
- nasmのPATHを環境変数に登録する。
- openssl-1.1.1dのソースをダウンロード。
- ファイルを解凍し、解答したディレクトリに移動。

```
perl Configure VC-WIN32 -static --prefix=e:/Projects/openssl/openssl-1.1.1d-Win32
```

- ms\nt.mak のCFLAGSの /MD を /MT に変更する。

```
nmake -f ms\nt.mak
```

これで終わるはずだった。
しかしperlのConfigureのところでエラー発生。
Win32::Consoleがインストールされていないよって感じのエラー。

## 第一関門：ActivePerlをStrawberry Perlに切り替え

ActivePerlは5.26以降、PPMが使えないらしい
Perlは全然わからないので、CPANでチャレンジ。

```
cpan install Win32::Console
```

ってやってみたけど、エラーが消えない。
既にくじけそうになるが、WindowsのPerlの選択肢は `ActivePerl` だけじゃない。
`Strawberry Perl for Windows` に変えることで、エラーが出なくなった。

## 第二関門：ダウンロードしたソースからGithubに切り替え

Perlを切り替えたことで `perl Configure` は動いたので次は `nmake` だ。
途中まで順調だったのに、

```
        cl  /Zi /Fdossl_static.pdb /Gs0 /GF /Gy /MT /W3 /wd4090 /nologo /O2 /WX /I "." /I "crypto\include" /I "include" -D"L_ENDIAN" -D"OPENSSL_PIC" -D"OPENSSL_CPUID_OBJ" -D"OPENSSL_BN_ASM_PART_WORDS" -D"OPENSSL_IA32_SSE2" -D"OPENSSL_BN_ASM_MONT" -D"OPENSSL_BN_ASM_GF2m" -D"SHA1_ASM" -D"SHA256_ASM" -D"SHA512_ASM" -D"RC4_ASM" -D"MD5_ASM" -D"RMD160_ASM" -D"VPAES_ASM" -D"WHIRLPOOL_ASM" -D"GHASH_ASM" -D"ECP_NISTZ256_ASM" -D"POLY1305_ASM" -D"OPENSSLDIR=\"C:\\Program Files (x86)\\Common Files\\SSL\"" -D"ENGINESDIR=\"E:\\Projects\\openssl\\openssl-1.1.1d-Win32\\lib\\engines-1_1\"" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"OPENSSL_USE_APPLINK" -D"NDEBUG"  /Zs /showIncludes "crypto\asn1\tasn_new.c" 2>&1 > crypto\asn1\tasn_new.d
NMAKE : fatal error U1073: '"crypto\asn1\tasn_prn.c"' のビルド方法が指定されていません。
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\bin\HostX86\x86\nmake.exe"' : リターン コード '0x2'
Stop.
```

って出てエラー。ビルド方法が指定されていません？何のこと？
あれ、`crypto/asn1/tasn_prn.c` が存在していない。
なのに `Makefile` にはビルド対象のファイルに入っている。
最初はPerl Configureで生成するファイルなのかと思ってスクリプトファイルを見たりしていたけれど、Perlのソースを見るのに疲れて、試しにGithubを覗く。
そしたらファイルは存在する…。
OpenSSL_1_1_1dタグに切り替えても存在している。
ということで、

```
git clone https://github.com/openssl/openssl.git
git checkout -b OpenSSL_1_1_1d
```

こいつに対し、 `perl Configure` から再開。
ms\nt.makじゃなくてmakefileに変わっていたけれど、CFLAGSも問題なく変更。
`nmake` も成功。

出来上がった

- libcrypto.lib
- libssl.lib

を使えばOK。

めでたしめでたし。
vbsの作法 その48

#概要

vbsの作法調べてみた。
win10、64bitでやってみた。
wia叩いてみた。

#環境

windows10 64bit

#サンプルコード

```
Dim objImg
Dim objIp
intScaleRatio = 50
input = "C:\Users\***\Desktop\20191218065351gazo0.JPG"
output = "C:\Users\***\Desktop\gazo0.JPG"
Set objImg = CreateObject("WIA.ImageFile")
msgbox "ok"
objImg.LoadFile(input)
Set objIp = CreateObject("WIA.ImageProcess")
objIp.Filters.Add(objIp.FilterInfos("Scale").FilterID)
objIp.Filters(1).Properties("MaximumWidth").Value = objImg.Width * (intScaleRatio / 100)
objIp.Filters(1).Properties("MaximumHeight").Value = objImg.Height * (intScaleRatio / 100)
Set objImg = objIp.Apply(objImg)
objImg.SaveFile(output)
Set objImg = Nothing
Set objIp = Nothing

```

以上。
web版石巻バリアフリーマップから見た、障がいのある方へ情報を渡すUIとは

CivicTech AdEventCalendar　２３日目です。

私は宮城県石巻市で、多目的トイレの情報をWeb上のマップにする活動をしています。

##Webマップを作るきっかけ
私は自分自身も脳性麻痺によって手や足に障がいを抱えています。それで自らの目線を生かしてITサービスを作れたらと考えていました。それで、色々模索していた時に１冊の冊子に出会いました。
それが「石巻バリアフリートイレマップ」です

![IMG_3940.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208025/a1c98d5b-f60f-0441-2bd9-e4268dc2fe31.jpeg)
![IMG_3941.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208025/3205c89e-41cf-3e80-3792-a1b4c21ff945.jpeg)


この冊子は、石巻市内の公共施設や大規模商店、コンビニや公園にある多目的トイレの機能をまとめた冊子です。しかし冊子という媒体である以上、情報に限界があります。それで、この冊子をWeb化することでより、当事者にとって必要な情報を渡せないだろうと思い、この冊子をWeb化するプロジェクトを立ち上げました。２０２０年の春に公開することを目標に取り組んでいます。

##Web化することのメリット

以下モバイル版
<img width="375" alt="IMG_3937.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208025/4a3995be-5baa-6892-0f5c-13a2e12e7f1e.png">

冊子からWebにすることで、最大のメリットは情報の豊富さである。Web化することで多目的トイレの情報に写真を付けることができます。実際に車椅子で生活しておられる方は、車椅子自体が各自の障がいに合わせてカスタムメイドされているので、大きさがバラバラである。それで、多目的トイレであってもその大きさと、当人の車椅子の大きさによっては、その多目的トイレが利用できないという現状が生まれてく来ます。しかし、写真によってトイレの様子やそれに加え、トイレの縦横の実寸を加えることによって、当人が自分で利用できるかできないかを判断してもらえるようにしてみました。
また、Web化をすることで、スマートフォンでも情報が見られるように設計できます。そもそもトイレという者は、突発的に生じてくるものです。しかし３．４０年前の障がいのある方は、出掛ける前に事前に行くトイレを計画したり、もしくは絶食や絶水までもしていました。しかし、多目的トイレの情報がいつでもスマートフォンで探せるようにすることで、仮に障がいがあっても外に出掛けることの壁を少しでも取り除くことができるでしょう。

##障がいのある方に向けたUI
これらのメリットを分かりやすく伝えることができるように、私は地図上に、多目的トイレがある建物をマッピングしました。そして、そのマッピングしたところのボタンを押すと、各建物の情報がモーダルの形になって表示されます。多目的トイレにある機能は、アイコンで色付けすることによって、この多目的トイレにどんな機能があるのか、見ただけで分かるようにしました。

<img width="375" alt="IMG_3938.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208025/063d33d0-7f81-6132-78f3-cc7d9beac9ff.png">


さらには、写真を伴う情報はスライドショーの方式で見られるようにしました。サイドに切り替えられるボタンを置き、それを押すことであらゆる方向で撮影した写真が表示されます。そうすることで、障がいを抱えておられる方が、自分にとってこの多目的トイレが利用できるかどうかを判断することができるでしょう。

##視覚障がいがある方へのUI
しかし、視覚に障がいのある方にむけた場合は、サイトの作り方が少し変わってきます。視覚に障がいがある方は、スクリーンリーダーを使ってサイトを見ています。スクリーンリーダーでサイトを読んでもらうためには、いろいろな工夫が必要でした。まずスクリーンリーダーは、alt要素にある情報は読んでもらえるのですが、alt要素が付けられるHTMLタグは、非常に限られてきます。それでボタン類については、イメージ画像を使うことにしました。さらにマッピングしたボタン内のテキストも見た目を優先させてしまうと、改行をしたくなりますが、改行を入れてしまうと１つの建物名が複数の単語にスクリーンリーダーが認識してしまします。それで、ボタンの```div```に対して、CSSで```white-space: pre-wrap```にすれば、テキストがdivの大きさに合わせて行を変えてくれて、しかもスクリーンリーダーが一つの単語として認識してくれます。

![IMG_3939.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208025/bdf2e77b-147b-b5ad-b935-71d3168c6811.jpeg)

さらに、モーダルの情報も１度のタップで必要な情報が渡せるように、あえてモーダルの上の部分に「i」というイメージ画像をおき、そこにalt要素で必要が情報を持たせることで、スクリーンリーダーがその情報を読ませることができます。そうするなら、視覚に障がいがある方でも必要な情報を得ることができるでしょう。

##すべての人に向けたUIとは
自分自身も障がいがあるので、どんなUIなら使いやすいだろうかと少しは理解できていると思っていた。しかし、障がいは各々あり、それをすべて考慮してベストなものを提供することは非常に難しいと思いました。しかし、そこで分からないと決めつけるのでないと私は思っています。大切なことはそれぞれの障がいを考えてそれに寄り添う形で、UIを設計していくことが大切なのでないかと私は思っています。もちろん、この「石巻バリアフリーマップ」も今後もアップデートをしていきますが、その度に利用者の事情に寄り添って作って行ければと考えています。
Amazon CloudWatch Alarm をテスト実行する方法

Amazon CloudWatch Alarm の通知先を変更した場合の疎通テストをするために、これまでは閾値の変更をする方法で行っていました。この方法だと閾値の変更を間違う可能性があると考えています。

AWS CLI のドキュメントを読んでいたところ、指定したアラームの状態を変更するコマンドを見つけました。

```
### アラーム状態に変更
$ aws cloudwatch set-alarm-state \
  --alarm-name {{ アラーム名 }} \
  --state-value ALARM \
  --state-reason test

### OK 状態に変更
$ aws cloudwatch set-alarm-state \
  --alarm-name {{ アラーム名 }} \
  --state-value OK \
  --state-reason test
```

今後はこのコマンドで疎通テストをしていこうと思います。
blueqatでグローバーアルゴリズム

## この記事に関して
ここではpythonライブラリのblueqatを用いて量子プログラミングを行っていこうと思います。
内容は[公式のチュートリアル](https://github.com/Blueqat/Blueqat-tutorials/tree/master/tutorial-ja)を元に作成しています。
今回はグローバーのアルゴリズムを実装していきます。

## グローバーのアルゴリズム
詳しい内容は[ここ](https://qiita.com/KeiichiroHiga/items/99af7f5eae3fbdf7e583)に書いてます。
今回は2量子ビットの実装を行います。

このアルゴリズムは重ね合わせ状態から欲しい状態をとることができるアルゴリズムです。

重ね合わせ状態は以下のようになります。

``` math
H\left|0\right>\otimes H\left|0\right>= \frac{1}{2}(\left|00\right>+\left|01\right>+\left|10\right>+\left|11\right>)
```
この各確率振幅が 1/4 の重ね合わせ状態を欲しいものだけ増加させて取り出すということをします。
今回は $\left|11\right>$ を取り出そうと思います。

まず始めに Oracle によって欲しい状態の振幅を反転させます。
今回は CZ ゲートを施せば $\left|11\right>$ のみ符号が反転します。

``` math
H\left|0\right>\otimes H\left|0\right> \xrightarrow{CZ} \frac{1}{2}(\left|00\right>+\left|01\right>+\left|10\right>-\left|11\right>)
```
振幅増幅によって欲しい状態の振幅を増加させます。
これは以下のゲートで書けます。
n量子ビットの場合の構成は詳しい内容の部分の補足に述べています。

``` math
(H\otimes H)(X\otimes X)CZ(X\otimes X)(H\otimes H)
```
これらをすることで $\left|11\right>$ が取り出せます。

### 回路の作成
回路は以下のようになります。

``` math
\begin{array}{cccccc}
\left|0\right> -&H&-&*&-&H&X&*&X&H&-\\
&&&|&&&&|&& \\
\left|0\right> -&H&-&Z&-&H&X&Z&X&H&-
\end{array}
```
始めの Hゲートは重ね合わせの作成です。
CZゲート は Oracle の部分です。
最後の塊は振幅増幅の部分になります。

実際に実装します。

``` python:sample.ipynb
from blueqat import Circuit

c = Circuit().h[:] # 重ね合わせ
c.cz[0,1] # Oracle
c.h[:].x[:].cz[0,1].x[:].h[:] # 振幅増幅
c.m[:].run(shots=1000)

出力
Counter({'11': 1000})
```
きちんと取れたことがわかります。

## まとめ
今回はblueqatを用いてグローバーのアルゴリズムを実装しました。
次回は量子位相推定をblueqatで実装してみます。
Inline-c：C++のネームスペースやテンプレートの対応について

# 目的

HaskellからC++のネームスペースやテンプレートを扱うためにInline-cとInline-c-cppの改良を行ってきました。
既存の問題とInline-C以外のC++を扱うための方法の紹介したあと、今回行った改良について述べます。
inline-cの0.9.0.0とinline-c-cppの0.4.0.0のバージョンから使えるようになっています。

# 既存の問題

HaskellからCの関数を呼ぶために[Foreign_Function_Interface](https://wiki.haskell.org/Foreign_Function_Interface)が用意されています。
これはC言語から作ったライブラリのシンボル名を直接指定して、ghcがビルドするときにC言語のライブラリとリンクしてます。

例えば、以下のmy_funcというCの関数をHaskellから呼ぶ場合を考えます。
foreignで始まる文をHaskell側に書いてCのプログラムをライブラリしてghcでリンクします。

```c
double my_func (int v) {
  return v*2.1;
}
```

```haskell
foreign import ccall "my_func" myFunc :: Int -> IO Double

main = do
  v <- myFunc 123
  print v
```

C言語の場合はmy_funcの関数名とCのライブラリのシンボルが一致しますが、
C++の場合は一致しません。C++は同じ関数名で異なる引数の関数をサポートするためにライブラリのシンボルが[修飾](https://ja.wikipedia.org/wiki/%E5%90%8D%E5%89%8D%E4%BF%AE%E9%A3%BE)されています。

例えばC++の`double my_func(int)`の関数は修飾されると`_Z7my_funci`になります。
そのシンボルを下記のように指定すればHaskellからC++の関数を呼べますが、難しいです。

```haskell
foreign import ccall "_Z7my_funci" myFunc :: Int -> IO Double

```

そのため、修飾をさけるために`extern "C"`をつけることでHaskell側で`my_func`のシンボルで呼び出せるようにします。

```c++
extern "C" {
  double my_func (int v) {
    return v*2.1;
  }
}
```

しかし、いちいちC++の関数を`extern "C"`で囲むのは面倒です。

この問題に対応するためにHaskellは下記のパッケージがあります。

* [inline-c](https://hackage.haskell.org/package/inline-c-cpp)
    * Haskellの中にC/C++のコードを埋め込みTemplateHaskellでコンパイル時にC++と接続する関数を生成するパッケージ
    * Pros
        * C/C++のコードが自由に書ける。
    * Cons
        * C++のテンプレートやネームスペースに対応してない。
        * GCに対応してない。
* [fficxx](https://github.com/wavewave/fficxx)
    * HaskellのDSNでC++のIFを書きC++とHaskellのコード生成を行うパッケージ
    * Pros
        * C++のクラス、テンプレート、ネームスペースに対応している。
    * Cons
        * HaskellでC++のIFのためのDSLを書くのが大変。
        * DSL内のIFしか生成できない。
        * GCに対応してない。

#今回行った改良

## テンプレートとネームスペースへの対応

これまでinline-cは`std::vector<int>`や`std::string`のようなシンボルが扱えませんでした。理由はそのパーサーがC言語用のものになっていてパースエラーが発生していました。

今回inline-cを改良してC言語用のパーサーをC++のネームスペースやテンプレートへの対応できるようにしました。
改良のPRは[こちら](https://github.com/fpco/inline-c/pull/83)です。

使い方は、まず空のdataを用意します。ただのクラスの場合は`data <クラス名>`、テンプレートの場合は`data <クラス名> a`
の用に宣言します。

```haskell
import qualified Language.C.Inline.Cpp as C

data Test -- C++のクラスをいれるデータ
data Vector a -- C++のstd::vector<..>をいれるデータ
data Array a -- C++のstd::array<..>をいれるデータ
```

次にC++のシンボルとのマッピングを定義します。クラス名の場合はそのまま書き、テンプレートの場合は`<..>`を除いた部分を記述します。
たとえば下記のようになります。

```haskell
C.context $ C.cppCtx `mappend` C.cppTypePairs [
  ("Test::Test", [t|Test|]),
  ("std::vector", [t|Vector|]),
  ("std::array", [t|Array|])
  
```

Haskellの中でC++の関数を呼び出す場合は下記のようになります。`C.block|`のあとに戻り値のC++型（`std::array<int,10>*`）を書き、`C.block`のHaskellの戻り値の型は`IO (Ptr (Array '(C.CInt,10)))`のようになります。
HaskellでC++のポインタをptの変数を受け取ったあと、それをC++に送るには`$(<C++の型> <Haskellの変数>)`のようなものを書きます。

```haskell
main = do
      pt <- [C.block| std::array<int,10>* {
          return new std::array<int,10>();
        } |] :: IO (Ptr (Array '(C.CInt,10)))
      [C.block| void {
          (*$(std::array<int,10>* pt))[0]=true;
          std::cout << (*$(std::array<int,10>* pt))[0] << std::endl;
        } |]
```

#まとめ

Haskellからネームスペースやテンプレート付きのC++の関数を呼べるようにinline-cを改良しました。
inline-cの0.9.0.0とinline-c-cppの0.4.0.0のバージョンから使えるようになっています。
macOSでgccが入らない

## 環境
- MacBook Pro (13-inch, 2017)
- macOS Catalina(10.15.2)

## エラーが出る

```bash
$ brew install gcc
(略)
make[3]: /private/tmp/gcc-20191220-61140-9wayo/gcc-9.2.0/build/./gcc/xgcc: Permission denied
/bin/sh ../../../libgcc/../move-if-change tmp-libgcc_tm.h libgcc_tm.h
make[3]: *** [avx_resms64fx_s.o] Error 1
make[3]: *** Waiting for unfinished jobs....
echo timestamp > libgcc_tm.stamp
make[2]: *** [all-stage1-target-libgcc] Error 2
make[1]: *** [stage1-bubble] Error 2
make: *** [all] Error 2

READ THIS: https://docs.brew.sh/Troubleshooting
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90217/000eb5e0-f5f5-f95e-60bc-8b363cf5d557.png)
[リンク先](https://docs.brew.sh/Troubleshooting)を見ると「複数のターミナルを起動してるとエラーになるよ」（意訳）というのを見つけてコレだ！と思うものの、単一のウィンドウでやっても結果変わらず。

何度かやってダメだなー、俺、ダメだなーってなってた訳ですが。

```bash
$ brew install gcc
Updating Homebrew...
Warning: Building gcc from source:
  The bottle needs the Xcode CLT to be installed.
```

`brew install gcc` したときに出る `The bottle needs the Xcode CLT to be installed.` が気になりまして。💡

参考：[Mac Homebrewでgccのインストールに時間がかかる場合はXcode Command Line Tool (CLT)をインストールしておけば良い](https://rcmdnk.com/blog/2019/02/26/computer-mac-homebrew/)

を参考にしてインストール。「インストールに失敗しました」……でも。

```
$ xcode-select --install
xcode-select: note: install requested for command line developer tools
$ xcode-select --install
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
```

エラーを見ると、「コマンドラインツールはもうインストールされている」と出ているではないですか。もう一度インストールにチャレンジ。

```bash
$ brew install gcc
Updating Homebrew...
==> Downloading https://homebrew.bintray.com/bottles/gcc-9.2.0_2.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/15/1564397f461f629f3811f1ececc7f2bb614f7520242743fc41348d190d8b6aa9?__gda__=exp=1576817568~hmac=a4098a424af8b81a10c47
######################################################################## 100.0%
==> Pouring gcc-9.2.0_2.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/gcc/9.2.0_2: 1,462 files, 287.9MB
$ 
```

入りました 🎉

## なんで必要になったのか

```cpp
$ g++ program.cpp
program.cpp:1:10: fatal error: 'bits/stdc++.h' file not found
#include <bits/stdc++.h>
         ^~~~~~~~~~~~~~~
1 error generated.
```

`bits/stdc++.h`がない、と言われてしまったため。

## 解決方法

```bash
$ cd /usr/local/include/
$ ln -s /usr/local/Cellar/gcc/9.2.0_2/include/c++/9.2.0/x86_64-apple-darwin19/bits
```

無事に`g++`でコンパイルできるようになりました。 🎉
python　関数①

###関数とは？
　事前に目的に応じた機能を持つ処理を用意しておき、それをプログラム内で使用できるようにするもの
　新しく関数を作成することを「関数を定義する」という。
　「関数を呼び出す」とは、関数を実行することを言い、呼び出された関数は、実行結果として戻り値を呼び出し元に返す。
　呼び出しの際に処理に必要な値を、引数として指定することもでき、引数を指定することを「引数を渡す」という。

　　　　引数→(入力)→関数→(出力)→戻り値

####インデクス(index)とは？
　文字列の何文字目かを表す整数のこと。添え字ともいう。
　インデクスの指定：　文字列[インデクス]

　ex)>>>s='sunday'
　　 >>>s[0]
　　　's'

　インデクスは負の数で指定することもできる。文字列の最後の文字に対応するインデクスが-1で、文字列の先頭に向かって-2,-3,...とインデクスが小さくなる。


####文字列のスライス
　pythonにおける文字列は、作成した後は変更できない。この性質を「イミュータブル」という。
　文字列を取り出す方法がある→それがスライス！！！！

　　　　　　　　**文字列[開始index：終了index]**

　ex)>>>a='123456'
　　 >>>a[0:3]
　　　 '123'
  
　組み合わせることもできる
　ex)a[:3]+a[3:] = '123456'








#####ステップを使用する
　　元の文字列からとびとびに文字を取り出して、新しい文字列を作る

　　　**文字列[開始index：終了index:ステップ]**

　　
　　　ex)>>>a='あいうえおかきくけこさしすせそ'
　　　　>>>a[::5]
　　　　'あかさ'


#####負の数のステップ
　ステップに負の数を使うと元の文字列を逆順にした文字列を作れる。

　　ex)>>>a='おもいかるいし'
　　　>>>a[5:2:-1]
　　　'いるか'
　　ステップに負の数を使うと、開始インデクスが終了インデクスよりも右側になる
condaをオフにしておく方法

#condaをオフにしておきたい

condaコマンドをオフにしておき、condaコマンドで有効にする方法です。
anacondaがインストールされていることが条件です。

##追記
```
conda config --set auto_activate_base false
```
で似たようなことができるみたいです。
知らなかった！！！


#.bashrc、.zshrcの設定
.bashrc、.zshrcに

```
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/user/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/user/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/user/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/user/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<
```

みたいなものがあるはずです。
それを

```
function conda(){
    unset -f conda
```

と

```
}
```

で囲みましょう。
#例

```
function conda(){
    unset -f conda
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/user/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/user/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/user/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/user/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<
}
```

#解説
conda関数を定義してcondaを起動できるようにしました。
conda と入力すればこの関数が呼び出されます。
呼び出したら```unset -f conda```でこの関数をunsetしておきます。

#最後に
授業中に書いたので雑な記事ですがお許しください。
JDBC経由でDb2のREORGを実行する方法

#JDBC経由でREORGを実行したい
IBM Cloud上のDb2を使用した際に、Alter Tableしたところ、以降のリクエストでエラーが出るようになった。調べてみるとREORGすれば良いようなのだが、Cloudなので直接コマンドを打てない、、、
#SQLとしてREORGを実行
以下のSQLを発行することで、REORGを実行することが可能なようです。
実際に試してみたところエラーが解消されました。
```Call Sysproc.admin_cmd ('reorg Table [table name]');```


参考
http://www.technicaladvices.com/2012/05/15/db2-calling-reorg-command-from-jdbc/
Linuxコマンドのプチテクニックまとめ

# はじめに
Linuxの基本コマンドのプチテクニックを自分の中で整理したくてまとめました。

## 基本コマンド紹介
### 1. mvコマンドの名前変更
####通常の変更方法
```common-lisp
$ mv samplefile testfile
```
####プチテクニック
```common-lisp
$ mv {sample,test}file
```
### 2. 連番ファイルの作成方法
####通常の作成方法
```common-lisp
$ touch file1 file2 file3 file4 ・・・
```
####プチテクニック
```common_lisp
$ touch file{0..100}
```

### 3. 出力&エラー結果を同時にファイルに出力する方法
####前提
カレントディレクトリにsamplefileのみだとします。

```common-lisp
$ ls
samplefile
$ ls -l samplefile testfile > lsoutfile
ls: 'testfile' にアクセスできません: そのようなファイルやディレクトリはありません
```
####通常のリダイレクト
```common-lisp
$ ls -l samplefile testfile > lsoutfile 2>&1
or
$ ls -l samplefile testfile 2> lsoutfile 1>&2
```
####プチテクニック
```common_lisp
$ ls -l samplefile testfile &> lsoutfile
```

### 4. ファイル名の末尾にdateコマンドの実行結果を入れる方法
####プチテクニック
```common_lisp
$ touch samplefile`date +%Y%m%d`   # ``はバッククォーテーションです
or
$ touch samplefile$(date +%Y%m%d)
```

# さいごに
そんなに使う機会がなさそうなものばかりですが、こういうのもあるよでまとめてみました。
参考になれば幸いです。
Nuxt(compositionAPI)にvue-apollo v4(@vue-composable)を導入する

この記事は [Nuxt.js Advent Calendar 2019](https://qiita.com/advent-calendar/2019/nuxt-js) 22日目の記事です。

Nuxt(Composition API×TypeScript)でvue-apollo(v4)のvue-composableを使いたい!(長い) となったので記します。

# 構成

- Nuxt
- Composition API
- Typecript

# why vue-apollo?

nuxtでapolloを扱うときには通常、apollo-moduleを使用するかと思います。
Nuxtでvue-apolloを使うため、vue-apolloをラップしたライブラリです。

しかし、今回はvue-apolloの新しい機能 [@vue/apollo-composable](https://v4.apollo.vuejs.org/guide-composable/setup.html#_1-install-vue-apollo-composable) を使いたい。Composition API用に作られていてイイ感じに動いてくれます。
Nuxt用にラップしたライブラリが見つからないので直接使用します。

どうすればNuxtに組み込めるか迷ったので、記します

# 手順

1: Composition APIのバージョンを0.3.3以上にする
2: 必要なパッケージをインストールする

```bash
yarn add @nuxtjs/apollo graphql-tag @vue/apollo-composable apollo-boost apollo-client
```

3: apollo-module用の設定

```javascript:nuxt.config.js
  modules: [
      '@nuxtjs/apollo'
    ],
  apollo: {
      clientConfigs: {
        default: {
          httpEndpoint: '' // endpointのURL
        }
      },
      includeNodeModules: true
  },
```
4: ルートに注入する

```javascript:src/plugins/provide-apollo-client.js
import { provide } from '@vue/composition-api'
import { DefaultApolloClient } from '@vue/apollo-composable'
import ApolloClient from 'apollo-boost'

const apolloClient = new ApolloClient({
  uri: '' //endpointのURL
})
export default function({ app }) {
  app.setup = () => {
    provide(DefaultApolloClient, apolloClient)
  }
}
```

5: プラグインの登録

 ```javascript:nuxt.config.js
 plugins: ['@/plugins/provide-apollo-client'],
 ```

6: 型を定義

```typescript:src/shims-gql.d.ts
declare module '*.gql' {
  import Graphql from 'graphql'
  export default Graphql
}
```
7: 定義した型を適用

```ts:tsconfig.json
  "files": [
    "shims-vue.d.ts",
    "shims-gql.d.ts"
  ],
  "include": [
    "apollo/queries/*.gql",
    "apollo/queries/**/*.gql"
  ],
```

ここまでで、設定は完了して、疎通できる状態になりました

# 使い方

[ドキュメント](https://v4.apollo.vuejs.org/guide-composable/query.html#usequery) を見て。

Result にはref(?)がかけられてて、イイ感じに使えます。
使いたいものをピックアップとかしたかったら、useResultを使おう。


# 参考

https://github.com/vuejs/vue-apollo/issues/687
AsciiDoc で書いたドキュメントをPDFに変換する

# 概要
AsciiDoc で書かれたドキュメントをPDFファイルに変換するための設定についてのメモ。

# 環境
* Gradle：5.6

# 詳細

## ディレクトリ構成
```
│
├ gradle
│　│
│　└ wrapper             .. asciidoctorビルド用jar
│
├ src
│　├ themes
│　│　│
│　│　├ custom-theme.yml .. pdfのstyle設定用ファイル
│　│　│
│　│　└ logo.png         .. ロゴ画像
│　│
│　└ index.adoc            
│
├ build.gradle           .. asciidoctorビルド設定ファイル
│
├ gradlew                .. asciidoctorビルド実行exe（unix系統用）
│
└ gradlew.bat            .. asciidoctorビルド実行exe（windows系統用）
```
* ```src```フォルダ配下のadocがビルドされる
* pdfのstyleを設定するファイルを用意する

## ビルド設定
```gradle:build.gradle
buildscript {
  ext {
    asciiDoctorGradlePluginVersion = "1.5.7"
    asciidoctorjDiagramVersion = "1.5.8"
    asciidoctorjPdfVersion = "1.5.0-alpha.15"
  }
  repositories {
    jcenter()
  }
  dependencies {
    classpath("org.asciidoctor:asciidoctor-gradle-plugin:${asciiDoctorGradlePluginVersion}")
    classpath("org.asciidoctor:asciidoctorj-diagram:${asciidoctorjDiagramVersion}")
    classpath("org.asciidoctor:asciidoctorj-pdf:${asciidoctorjPdfVersion}")
  }
}

apply plugin: 'org.asciidoctor.convert'
apply plugin: 'org.asciidoctor.gradle.asciidoctor'

asciidoctor {
  dependsOn 'clean'
  requires = ['asciidoctor-diagram'] // asciidoctor-diagram の利用設定
  backends = ['html5', 'pdf']        // htmlとpdfファイルを出力する設定
  sourceDir = file('src')            // ビルド対象のファイルを置くフォルダ
  outputDir = file('build')          // ビルド後のファイルが出力されるフォルダ
  separateOutputDirs = false
}

wrapper {
  gradleVersion = '5.6'
}

defaultTasks 'asciidoctor'
```
## PDFスタイル設定（custom-theme.yml）
* PDF変換時のフォントなどを指定する設定ファイルを用意する
  * 詳しくは https://github.com/asciidoctor/asciidoctor-pdf/blob/master/docs/theming-guide.adoc を参考にする
  * 元にするスタイル設定は[こちら](https://github.com/asciidoctor/asciidoctor-pdf/tree/master/data/themes)から取得する

## サンプルドキュメント（index.adoc）
```text:index.adoc
:data-uri:
:pdf-style: ./themes/custom-theme.yml
:title-logo-image: image:./themes/logo.png[]
:toc: left
:sectnums:
:chapter-label:
:toclevels: 2
:toc-title: 目次
:figure-caption: 図

= タイトル

== TEST1
=== TEST2
==== TEST3
* 設定で目次や段落を自動的に作ってくれる
* toclevelsを2にしているため2段落（x.x）までの表題で目次が作成される

==== UML
* UMLの出力テスト

:imagesdir: /build
[plantuml, test-uml]
----
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml
----
```
* 出力されるPDFは以下のようになる
  * ![asciidoc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220144/dcc2a521-3a96-4544-de22-2e2e46260d8d.png)


# まとめ
社内でのみ運用する仕様書だとHTMLであっても問題ないが、
顧客に納品するとなるとどうしてもそういうわけにはいかなくなってくる。
そういったときに```asciidoctorj-pdf```を使えばPDFに変換できるため便利だと思う。

仕様書などのドキュメントも、バージョン管理のしやすいテキストベースのもので作成できると
履歴管理などしやすいのでそうなっていけばいいなと思う。
やっとできた！Windows10 プリンター共有 (LAN内)

・ホストPCに接続されたプリンターの電源を入れる

◎ホスト側(※アカウントPW設定が必要、標準ユーザーでも可)

・(スタートから歯車のマークを選択)ウィンドウズの設定 → ネットワークとインターネット → 共有オプション → ネットワーク探索を有効にする●

・ウィンドウズの設定 → デバイス → プリンターとスキャナー → (共有するプリンターを選択)管理 → プリンターのプロパティ → 共有 → このプリンターを共有する☑(プリンター名は任意)

・ウィンドウズの設定 → システム → バージョン情報 → デバイス名(PC名)を記録

◎クライアント側

・(スタートから歯車のマークを選択)ウィンドウズの設定 → ネットワークとインターネット → 共有オプション → ネットワーク探索を有効にする●

・ウィンドウズの設定 → デバイス → プリンターとスキャナー → プリンターまたはスキャナを追加します → (検索後)プリンターが一覧にない場合 → 共有プリンターを名前で検索 → 「\\\ホストPC名\プリンター名」を入力 → 次へ → ホストユーザー名とPWを入力 → 実行

※ホストアカウントにPWが無いとエラーが出ます。設定後はPWまたはアカウントを変更・削除しても使用可能
rad studio10.3へのComPort Libraryの追加方法

embarcadero RAD Studio 10.3 Enterprise版を使用しています。
RS232C通信を使用したいため、コンポーネントを追加しようとしています。


別サイト（https://ja.stackoverflow.com/questions/60655/cportlib%e3%81%a8%e3%81%84%e3%81%86%e3%82%b3%e3%83%b3%e3%83%9d%e3%83%bc%e3%83%8d%e3%83%b3%e3%83%88%e3%82%92%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）

の記述で見かけたとおり、
ComPort Libraryの導入
http://yuukiwogousei.blog.fc2.com/blog-entry-109.html

ComPort Library version 4.11f install in RAD Studio XE2-XE8 or 10 Seattle
https://sourceforge.net/p/comport/discussion/261327/thread/f4cfe7af/

を行いました。
ビルドはできましたが、インストールで次のエラーが表示されました。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554267/51943948-f5d7-039b-c9f7-473e8c248e8f.png)

ＯＫをクリックすると、
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554267/5091c592-ae34-855b-872c-6601fc79a021.png)
となりますが、
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554267/a9cedcda-283d-7686-af9b-5a3a110b4f0a.png)

読み込めません　と、なっていますが、指定された位置には、DsgnCPortCB6.bpl　が作成されています。

何か設定が異なるのか、指定のファイルが足らないのかが不明です。

よろしくお願いします。
PHPでキャッシュをMySQLに保存する方法

## 概要
キャッシュを使いたいけどキャッシュサーバがない場合に[symfony/cache](https://github.com/symfony/cache)のPdoAdapterを使うと簡単にDBにキャッシュを保存することができたのでメモ。

## 導入
composerでsymfony/cacheをインストール。

```
composer require symfony/cache
```

symfony/cacheはPSR-6なので扱いやすいPSR-16に変換するためにpsr/simple-cacheもインストールする。

```
composer require psr/simple-cache
```

以下実装例。DB名など自分の環境に読み替えてください。

```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');
use Symfony\Component\Cache\Adapter\PdoAdapter;
use Symfony\Component\Cache\Psr16Cache;
try {
    $pdo = new \PDO ('mysql:dbname=cache; host=localhost;port=3306; charset=utf8', 'user', 'passw0rd');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo '接続に成功しました。';
} catch (PDOException $e) {
    echo "接続エラー:{$e->getMessage()}";
}

$cache6 = new PdoAdapter(
    $pdo,
    $namespace = '',
    $defaultLifetime = 360,
    $options = []
);

// PSR-16に変換する
$cache16 = new Psr16Cache($cache6);

$key = 'key';
$value = 'value';

var_dump($cache16->get($key, null));
var_dump($cache16->set($key, $value));
var_dump($cache16->get($key, null));
var_dump($cache16->delete($key));
```

テーブルはsetの初回実行時に自動で作成される。
実行結果

```
接続に成功しました。
NULL
bool(true)
string(5) "value"
bool(true)
```

## 環境
PHP v7.3.2
MariaDB 10.1.38

## 参考
https://symfony.com/doc/current/components/cache/adapters/pdo_doctrine_dbal_adapter.html
https://symfony.com/doc/current/components/cache/psr6_psr16_adapters.html
WKWebView 内の URL テキストがリンクにならない


# やったこと
- Xcode 11.3
- 今更ながら、UIWebView から WkWebView への置き換え作業をやっていた
- DataDetector に Link を設定

```objc
WKWebViewConfiguration *webConfig = [[WKWebViewConfiguration alloc] init];
webConfig.dataDetectorTypes = WKDataDetectorTypeLink;
webView = [[WKWebView alloc] initWithFrame:self.bounds configuration:webConfig];
[self addSubview:webView];
```

# 問題発生
- UIWebView ではちゃんとリンクになっていた テキスト `http://hogefuga.moge` の部分がリンクにならない

# 原因
- どうやら原因は css 内のこいつ

```css
-webkit-user-select: none;
```
- こいつを消すと URL のテキストがちゃんとリンクになる
- こいつが何をしているかというと、WebView 内のロングタップで選択状態になるのを抑止している
    - Webビュー内のコンテンツをコピーさせたくないので設定していた
- WKWebView では選択させないようにする = リンクもさせないということらしい
- これも一緒（それはそう）

```objc
WKUserScript *disableSelectionScript = [[WKUserScript alloc] initWithSource:@"document.documentElement.style.webkitUserSelect='none';" injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:NO];
WKUserContentController *webController = [[WKUserContentController alloc] init];
[webController addUserScript:disableSelectionScript];
WKWebViewConfiguration *webConfig = [[WKWebViewConfiguration alloc] init];
webConfig.userContentController = webController;
webView = [[WKWebView alloc] initWithFrame:self.bounds configuration:webConfig];
[self addSubview:webView];
```

# 解決方法
- 上記 CSS の設定を削除して `canPerformAction` の return を `NO` にした上で選択状態になることを是とする（かっこ悪い）
- URL 部分を \<a\> タグでちゃんとリンクにする

# 未検証
- 多分 Swift でも一緒
- 多分 `dataDetectorTypes` に設定する値が変わっても一緒
【ライフハック】「背景とアイコンを同化させニキ」に対抗したい

##TL;DR
- chrome extensionを自作したい！という人向けです。

- プロフィール画像を微妙に変更するchrome extensionを作る
(chrome extensoionを自作して、特定のDOMに独自のcssを適用する)

##はじめに
以下のようなことが、よくありますね。(?)

<img width="500" alt="IKkgyaXeVVS7soP1576812316_1576812517.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348026/ea64ca6d-cd45-d98c-3af2-1ede909cda9d.png" style="border:solid 1px #111;">

\_アイコン画像が真っ白なので、背景に同化してしまっています。 \_

もちろんアイコン画像を何にしようと、その人の勝手なのですが、
これ、Facebookのメッセンジャーでやられてしまうと既読したのかどうかわかりません。



##環境
Google Chrome ver.79

##やったこと
[この記事](https://qiita.com/RyBB/items/32b2a7b879f21b3edefc)などを参考に、chromeのextensionを作ります。

ディレクトリ の構成はこんな感じです

```
chromeExtension/
　　　　　　┣ img/
　　　　　　　　┗ icon_img.png
   ┣ chrome_changeColor.css
　　　　　　┗ manifest.json
```

ファイルは以下の通りです

```manifest.json
{
  "name": "iconchnage",
  "version": "1.0.0",
  "manifest_version": 2,
  "description": "iconchnage Chrome Extension",
  "icons": {
        "32": "img/icon_img.png",
        "48": "img/icon_img.png",
        "128": "img/icon_img.png"
    },
  "content_scripts": [{
    "matches": ["https://www.facebook.com/*"],
    "css": [
      "chrome_changeColor.css"
    ]
  }]
}

```


```chrome_changeColor.css

._4jzq._jf4{
  background-color: #111;
}
```

Facebookの既読アイコンは Command+Shift+Cで調べると
"._4jzq._jf4" だったので、cssではこれを指定して、バックグラウンドの色を変更しています。


icon_img.pngには適当な画像を置きます。

##結果
<img width="500" alt="W8A5DKVye6iRHSE1576814349_1576814382.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348026/9ff6b45b-743d-b07d-fd7d-b17829d43b70.png">

これで既読が補足できます(^ ^)
##参考
[Chrome拡張の作り方 (超概要)](https://qiita.com/RyBB/items/32b2a7b879f21b3edefc)



##追記(2019年12月22日)
スマホのメッセンジャーアプリで、ダークモードで見ればよかったということに気づいてしまいました(完)
![TDp7xMr7YXDqRq51577005901_1577005936.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348026/625cd997-8a36-8e88-5d85-107ac854d2a8.jpeg)
DigitalOceanに独自ドメインを設定する

DigitalOceanに独自ドメインを設定する手順。

**事前に必要なもの:**
* 独自ドメイン
* DigitalOcean のアカウント

## DigitalOcean側
DigitalOcean のコンソールから Manage > Networking を選択するとドメイン画面にアクセスする。事前に取得したドメインを入力して[Add domain]
<img width="1280" alt="do01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67707/1a08d253-7b58-7e54-12ad-30fdcf75282b.png">

各ドメインの管理画面からサブドメインの登録ができる。
<img width="1034" alt="スクリーンショット 2019-12-20 10.49.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67707/e8d7bed3-a6d4-b794-6997-fd80e4dbf436.png">
例: `yourdomain.com` を `dropletA` で使いたい場合、各フィールドを以下とする。
HOSTNAME = @
WILL DIRECT TO = dropletA

## ドメインプロバイダー側
ドメインプロバイダーのコンソールからネームサーバーの設定をする。
多くのプロバイターでは自前のネームサーバーをデフォルトとしているがカスタムのネームサーバーを選択。DigitalOcean のドメイン画面にあるネームサーバーを指定する。
**DigitalOcean のドメイン画面**
<img width="1039" alt="スクリーンショット 2019-12-20 10.55.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67707/16f23d9b-0ac3-96b4-ec54-2311125e61f3.png">

**例: google domain**
<img width="974" alt="スクリーンショット 2019-12-20 10.55.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67707/793415f7-aaf1-1de7-ac59-c2fd13286b26.png">
令和元年秋期応用情報技術者に合格しました

#はじめに
これは私が応用情報技術者試験に向けて勉強した変遷と結果を記録したものです．

# 午前の過去問
執筆現在で最新の過去問(H31春)から過去にさかのぼって解いていきました．
正答率60%(80問中48問)以上で合格です．

|年度|正答数(/80問)|正答率(%)|
|---|---|---|
|H31春|31|38.75|
|H30秋|39|48.75|
|H30春|51|63.75|
|H29秋|49|61.25|
|H29春|56|70|
|H28秋|52|65|
|H28春|65|81.25|
|H27秋|57|71.25|
|H27春|58|72.5|
|H26秋|65|81.25|
|H26春|63|78.75|
|H25秋|62|77.5|

# 本番　令和元年秋期

###午前
正答数 59(/80問)
正答率 73.75%

ストラテジ系 15/25
マネジメント系 12.5/12.5
テクノロジ系 46.25/62.5

###午後
63.00点
情報セキュリティ(必答)
プログラミング(選択)
組み込みシステム開発(選択)
情報システム開発(選択)
システム監査(選択)

ギリギリ合格でした．
# 感想
午前は上記のとおりひたすら数をこなしたので心配はありませんでした．
半数ほどが過去問と全く同じ問題が出るので，やっただけ伸びると思います．
午後は過去問を何年か解いて，選択する問題を絞っておきたいです．
しかし4項目しか勉強していないと難しい場合に困っちゃうので6~7項目は解けるようにしたいです．
ちなみにシステム監査は過去問がうまくいったから選択しましたが，ほとんど壊滅でした(これを選択したせいで絶対落ちたと思った)．安定しない項目なので確実に取れるとは言えないでしょう．

# その他
勉強期間ですが，始めたらよいさじ加減が分からず100日前からちょろちょろとしていました．全力で打ち込むなら1か月ほどで，少しずつなら僕のように余裕をもって勉強しておくとよいかもしれません．

# さいごに
ギリギリ合格できたおかげで下書きに温存しておいたこの記事がお蔵入りにならずに済みました．．．

何かありましたらご指摘などよろしくお願いします．
win10 ssh クライアント「日本語環境」

長らく使っていたノートPCがいまだWinXP/32だったのでPCコンフル(秋葉原)で中古のLet's Noteを「¥23,800」で入手

      CF-NX2 Memory8G win10 64 pro

とりあえず必要なターミナルソフトを検討してはみたものの

       terraterm putty



SSDが128Gで余計なものは入れたくかなったので、win10 pro 標準のsshクライアントに再挑戦した。（以前日本語環境がいまくいかずあっさり断念）意外に簡単で

　(1) PowerShell のコードページ(cp932)を UTF-8 に

    > chcp 65001

![スクリーンショット 2019-12-20 13.02.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163369/ad609f4b-9a3e-977d-948d-8b366f193231.png)


　(2) PowerShell のフォント(consolas)を MSゴシック に
![スクリーンショット 2019-12-20 13.02.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163369/cbd59029-6557-70dc-949d-28b0286c8e19.png)


  (3) login 先の LANG 環境変数を確認

     export LANG=ja_JP.UTF-8

　普段macbookを使用していますが、win10/WSL環境は安いし侮れないと思いました。(powershellから scp もできるし、昔苦労した nfsクライアントなんかもできるんですね！）
Pythonでbase64形式の画像をデコードしてローカルに保存するメモ

# はじめに
仕事でbase64形式で画像データが返ってくるAPIをローカルに保存するというのがありましたが
少し苦戦したのでメモ(初心者向け)

# 環境
python 3.7.0

# base64の形式
```
data:image/png;base64,iVBORw0KGg.....
```

# コード
```python
splitString = base64文字列が格納された変数.split(',')
    img_binary = base64.b64decode(splitString[1])
    filename='hoge.png'
    with open(filename, 'wb') as f:
        f.write(img_binary)

```
マンガでわかる State

![C7F520A9-34CA-44D2-A407-B07B4CD6120B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11525/a14a19f1-e743-f392-dd63-8eaf8ed76dd1.png)

女の子はフクザツなので Q と聞いたらどんな A が出てくるかわからない、ってのがそけっとさんの言い分です。なるほど、CPU 負荷が高いのかメモリが枯渇しているのか、はたまたエラーによる例外フローが頻発して調子悪いのか... すべての組み合わせで可能性を考慮しないといけない。うーんなるほど。なるほど??

まあそういうことにしときましょうか。でもね、ソフトウェアのモデリングではとなると話は別ですからね。情報の複雑さはどんな理由があろうとも敵でしかありません。かわいいからって許しちゃダメです。

State パターンは、オブジェクトの内部に状態変化モデルを持たせるパターンです。それで、あらゆる可能性への配慮だとかいう、いつエンバグするかわからないような複雑なロジックを廃止して、今の状態は何か、その状態における振る舞いはこうだ、と一意に決めようという発想です。

めもりーちゃんは State パターンを導入したのでとてもシンプルです。やる気の決定は各 State オブジェクトのメソッドに持たせ、親となるオブジェクトはなにも考えず、ロジックを委譲するだけにします。

状態を表すのは具象状態クラスのインスタンスです。主オブジェクトには現在の状態をあらわす State 抽象型のポインタがひとつあります。そして、状態数と同じコンクリートクラスを実装し、ポインタがそのいずれかを指すようにします。状況変化に応じて、ポインタが指す State のインスタンスが変化していけば、振る舞いが変わります。

アルゴリズムを持つオブジェクトのインスタンスという意味では、[Command](https://qiita.com/tanakahisateru/items/652293901d93bb2886ae) パターンや [Strategy](https://qiita.com/tanakahisateru/items/398676a754ea1fe4cb80) パターンと似ています。この場合もやはり、クラス図の主要な箇所に着目すれば、抽象のメソッドコールを派生クラスで具象化するという点で、見分けがつかないでしょう。

State パターンで重要なのは、複数の委譲先インスタンスの切り替わりが、自律的に起きるということです。Command の実行者は、生成した者を知りませんし、切り替わりも起きません。Strategy の場合、アルゴリズムを与えるのは自分ではなく、より上の権限を持つ他者です。

それらに対して State は、自己の内部で委譲先を管理し、ステートマシンによってそれらが勝手に切り替わります。外部のオブジェクトに State の存在を知らせる必要はありません。というより、知ってしまうともはやカプセル化にならなくなってしまうのでダメです。

めもりーちゃんがやる気を出すかどうかは、他者が決めることではなくて、眠さや燃え尽き虚無感、ゲーセン行きたさで決まります。それは、直前状態と遷移トリガーによって、内部のステートマシンが決定するのです。

ゲームプログラミングでなら、キャラクターのモードがどう切り替わるか、切り替わったモードで何ができるのかをモデリングするでしょう。ビジネス用途のアプリケーションでも、そのアプリケーションが扱う情報がいまワークフローのどの段階にあるかで、誰が何をアクションできるかは変わってきます。

純粋関数型の発想と異なり、オブジェクト指向では、モノの内部状態の変化を許容して単純化するほうがわかりやすい場合は、躊躇なくそれを選びます。が、そのような選択をしたとしても、状態が多次元な変化を起こすのはやはり複雑化 (ときには２つの状態が矛盾するような場合も) を招きます。

わかりやすい例でいえば、アクティベート前のユーザーアカウントに、退会フラグが立ったとき、その人ははどういう状態なのでしょう? みたいなの、経験ないですか。

よくよく考えれば、複数のフラグが直交関係になくて、その組み合わせは一意なステートを表している、というとき、ステートグラフで考えれば、余計な心配を忘れてモデリングに集中できますよね。
$HOME/.gitconfig, $HOME/.gitignore_globalは卒業しよう

### 背景

新しい環境にgitを入れると忘れて表題のファイル名を生成してしまいがちなので

### 本題

[Git 公式](https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-%E6%9C%80%E5%88%9D%E3%81%AEGit%E3%81%AE%E6%A7%8B%E6%88%90)にも書いてありますが、`$HOME/.config/git/`配下にファイルを作るとそれがglobalに適用されます。

> Gitには、`git config`と呼ばれるツールが付属します。これで、どのようにGitが見えて機能するかの全ての面を制御できる設定変数を取得し、設定することができます。 これらの変数は三つの異なる場所に格納されうります：

> /etc/gitconfig ファイル: システム上の全てのユーザーと全てのリポジトリに対する設定値を保持します。 もし`--system`オプションを`git config`に指定すると、明確にこのファイルに読み書きを行ないます。

> ~/.gitconfig か ~/.config/git/config ファイル: 特定のユーザーに対する設定値を保持します。 `--global`オプションを指定することで、Gitに、明確にこのファイルに読み書きを行なわせることができます。

> 現在使っているリポジトリのGitディレクトリにある`config`ファイル(`.git/config`のことです): 特定の単一リポジトリに対する設定値を保持します。

##### 分類

- `$HOME/.config/git/config` : `$HOME/.gitconfig` と同じ意味
- `$HOME/.config/git/ignore` : `$HOME/.gitignore_global` と同じ意味

 なお、検索される設定ファイルは、管理者権限で`git config -f <file>`を実行すれば変更できるそうです。

### 参考

- [まだ .gitconfig に core.excludesfile を設定しているの？](https://qiita.com/ueokande/items/e0409219e7c68e4277b9)
自分用メモ　VB.net log4net MYSQL の勉強で役に立ったサイト

https://garafu.blogspot.com/2016/09/how-to-use-log4net.html

http://sumurai993.hatenablog.com/entry/2015/07/23/072345

https://www.atmarkit.co.jp/ait/articles/0712/25/news121.html

https://blog.hiros-dot.net/?p=5455

https://www.doraxdora.com/blog/2018/01/27/post-3776/

https://tmg0525.hatenadiary.jp/entry/2017/09/05/183811

https://logging.apache.org/log4net/

http://mgate.info/db/mysql/852/

https://www.websec-room.com/2013/12/15/1307

http://www.curict.com/development/dotNET/ADONET/ADONET_SqlParameterExtension.html

https://akademeia.info/index.php
VB.NET%2F%CA%B8%CB%A1%2F%A5%C7%A5%EA%A5%B2%A1%BC%A5%C8

http://hanatyan.sakura.ne.jp/dotnet/dgv03.html

https://www.adonetvb.com/AdoNetExecuteReaderSql.html
React jssでkeyframes

# CSSで行うkeyframesをjssに起こす

```react
import { createStyles, makeStyles, Theme } from "@material-ui/core/styles";

const useStyles = makeStyles((theme: Theme) => 
  createStyles({
    "@keyframes color": {
        "0%": { backgroundColor: "red" },
        "50%": { backgroundColor: "blue" },
        "100%": { backgroundColor: "green" },
    },
    root: {
       animation: "$color 10s infinite"
    },
  })
);
```

rootを適用したいコンポーネントに適用すればOK
`keyframes`は`from`/`to`でも出来るみたいです。
vbsの作法 その47

#概要

vbsの作法調べてみた。
win10、64bitでやってみた。
adodb叩いてみた。

#環境

windows10 64bit
ms office 2007 pro

#手順

batファイルで、黒い画面を開く

```
c:\Windows\SysWOW64\cmd.exe \c wscript test.vbs
```

wscript test.vbsで実行。

#サンプルコード

```
Set db = CreateObject("ADODB.Connection")
db.Open "Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb)};DBQ=db1.mdb"
Set rs = db.Execute("SELECT * FROM are")
Do Until rs.EOF
	msgbox rs(0)
	rs.MoveNext
Loop
rs.close
db.close
```

以上。