OmniAICreator/Qiita-1.07M huggingface dataset:
ERC-1776 Native Meta Transactions

#はじめに

Ethereumのゲームを始める場合に、トランザクションの通信量のために、
ユーザーはethereumを保有する必要があり、これがDAppsの新規ユーザー獲得ハードルをあげていることはいうまでもありません。
これらを解消するために、サイドチェーンと分割を行うなどの手法やmeta transactionというアプローチがあります。

#meta transactionとは
ユーザーがETH(Gas)を保有していなくても、network上でtransactionを発行するための仕組みです。
通常であれば、ユーザーがコントラクトを実行するときに、ユーザーのwalletからGasFeeを直接支払いますが、MetaTransactionの場合は、間にリレーヤーというコントラクトを挟む事で、サービス提供者からGasFeeを支払います。これによって、ユーザーはEthereumを保有する事なくtransactionを書き込む事が可能になります。

通常の実行フロー。GasFeeは、ユーザーのwalletから支払われる
![alt](https://cdn-images-1.medium.com/max/1600/1*QiewHW3rRMnaBwz8Nr9njw.png)

MetaTransactionの実行フロー。GasFeeはリレーヤーから支払われる
![alt](https://cdn-images-1.medium.com/max/1600/1*EaJEu6k2mRKn3MlI0xbtMg.png)

(画像引用)
https://medium.com/@RongxinZhang/meta-transactions-gasless-transactions-7c0ce64ef9bd

#ERC規格上での、MetaTransactionのhistory
ERC865: gasの支払いをtokenで可能にする規格
ERC877: signerとdeployerを分離する
ERC1077: 865と877を統一した規格

#参考事例

##1.Horizon-game
https://github.com/horizon-games/ERC20-meta-wrapper

##2.Gnosis Safe


#参考URL
ERC1776仕様
https://github.com/ethereum/EIPs/issues/1776

ドラフト
https://github.com/wighawag/EIPs/blob/41055a88efb46d9cf5797764b02554bdb26672f0/EIPS/eip-native-meta-transactions.md

Native Meta Transactions : ERC-1776
https://medium.com/sandbox-game/native-meta-transactions-erc-1776-97460cc6fcf0
junit 

junitいろいろ

試験対象例 YellowServiceImpl
① DeclaredField
ソース
@Autowired(required = true)
@Named("nameList")
private List<String> nameList;

junit:

@PrepareForTest({YellowServiceImpl.class, NameChecker.class})
public class YellowServiceImplTest {
    
@InjectMocks
private YellowServiceImpl yellowServiceImpl;
    
    
List<String> nameList = new ArrayList<String>();
nameList.add("hanmeimei");
nameList.add("lilei");

Field field2 = YellowServiceImpl.class.getDeclaredField("nameList");
field2.setAccessible(true);
field2.set(yellowServiceImpl, nameList);


②inject interface
ソース:

@Inject
NameChecker nameChecker;

nameChecker.getResult(testList);
    
junit：
import static org.mockito.ArgumentMatchers.any;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ NameChecker.class})
public class SometingImplTest {

@Mock
NameChecker nameChecker;

PowerMockito.when(nameChecker, "getResult", any())
                    .thenReturn("somthing");
                    
③static method
ソース
PropertyUtil.getProperty("name");
junit:

import static org.powermock.api.mockito.PowerMockito.mockStatic;
mockStatic(PropertyUtil.class);
when(PropertyUtil.getProperty(NAME)).thenReturn("HANMEIMEI");
 
④private method 
ソース:
private String getName(String id){

}
junit:
import java.lang.reflect.Field;
import java.lang.reflect.Method;

Method method = YellowServiceImpl.class.getDeclaredMethod("getName", String.class);
method.setAccessible(true);
//test class, method parameter
method.invoke(yellowServiceImpl, "HanMeimei");

⑤ the sample of verify the parameter of static void method 

import static org.mockito.ArgumentMatchers.any;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ TestClass.class })

            mockStatic(TestClass.class);
            try {
                PowerMockito.when(TestClass.class, "testMethodName", any(), any(), any())
                        .thenAnswer(new Answer<Void>() {
                            @Override
                            public Void answer(InvocationOnMock invocationOnMock) {
                                // (TestClass.testMethodNameのパラメータ確認
                                assertTrue(StringUtils.equals("expectString",
                                        (String) invocationOnMock.getArgument(2)));
                                return null;
                            }
                        });

                // テスト実行
                target.excute(param);
            } catch (Exception e) {
                fail();
            }
CSS装飾(基本編） ~font-size / color / font-family~

# はじめに

CSSの装飾をまとめていきたいと思います。

本日は、font-size(フォントサイズ)、color(カラー)、font-family(フォントファミリー)の３つです。
どれもよく見る装飾ですね。
# font-size(フォントサイズ)

**文字の大きさ**を指定するスタイルは「**font-size**」プロパティを使用します。

値には「**数値＋単位**」で指定します。

###  単位の設定につて

|      | 各種CSSプロパティで共通して使用できる単位は以下のものがあります。 |
| :--- | :----------------------------------------------------------- |
| px   | ピクセル。画面の解像度によって表示サイズが異なります。       |
| em   | エム。1emは使用しているフォントの高さです。                  |
| ex   | エックスハイト。1exは使用しているフォントの英数字の高さです。 |
| %    | パーセント。設定する対象により割合が異なります。             |

記述例
```ruby:qiita.rb
puts "hello word"``` 

 h1 {
>
> ​      font-size: 14px;
>
> } 

# color(カラー)

**文字の色**を指定するスタイルは「**color**」プロパティを使用します。

### カラーコード（16進数）

・「#」記号に続けて赤(R)緑(G)青(B)の各色の分量を２桁ずつで指定します。

・色の強弱は「0123456789ABCDEF」の16進数で表し「00」が最小値、「FF」が最大値となります。

・アルファベットは小文字でも構いません。

記述例

> h1 {
>
> ​      color: #FF0000;
>
> }

「#FF0000」のように各色２桁がゾロ目の場合、「#FF00」というように3桁に省略しての記述も可能です。

#font-family(フォントファミリー)

**文字のフォントの種類**を指定するスタイルは「**font-family**」プロパティを使用します。

値には「**フォント名**」または「**総称フォントファミリー名**」を指定します。

「**"** ダブルクォート」で挟み、「**,** カンマ」で区切ります。

ブラウザーはフォントを左から順に読み込むので、一番優先度の高いフォントを一番左側に記述しましょう。

＊Safari（Macintosh)ではフォント名をアルファベット表記にする必要があります。　例：「ヒラギノ角ゴ Pro W3」は「Hiragino Kaku Gothic Pro」と表記。

記述例

>h1 {
>
>​     font-family: "ヒラギノ角ゴ　Pro W3", "Hiragino Kaku Gothic Pro";
>
> }
Unity MLagents ver.0.4 と ver.0.5の変更点？

#v04, v05で結構違う点がある。
3DBallのサンプルで説明します。
###1 HierarchyのAcademyの子供にBrainが無い。
v04では学習させるときbrainをinternalからexternalに変更したが、
v05ではControlにチェックをいれるだけでいい。![Screenshot from 2019-04-19 13-12-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237059/4078e2af-5516-9eaf-f74e-be2615c1b720.png)

###2 学習が終わったあとbyteファイルが生成されない
V04では ml-agents/models/firstRun-0/3DBall.byteだったが
V05では ml-agents/models/firstRun-0/3DBallLearning.nnになる
nnファイルって何？よくわからないけど、これがtestするmodelになる。
名前は個々が指定した文字列になる。

###3 作ったmodelをアタッチする場所が違う
Ball3DAcademyのcontrolのチェックを外します。

次にbuldSettingsのplayerSettingsに書いたENABLE_TENSORFLOWを削除する。なんか反応にラグがあるけど焦らない。
⇒でもなんか面倒だし、次のverではここ変更されそう。

さっきのnnファイルをprojectにコピーする。
場所はAssets/ML-Agents/Examples/3DBall/Brains/
にしたら都合がいいと思う。
そしたら3DBallLearning.assetのmodelにさっきのnnファイルをアタッチ。

![Screenshot from 2019-04-19 13-44-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237059/b0a6bb6c-119d-a91c-1d1b-d9bf8d1219d0.png)
![Screenshot from 2019-04-19 13-44-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237059/b65f76a9-0634-8bed-014d-6c1f7d1519d0.png)
Runしてみてください。

困ったときは[github](https://github.com/Unity-Technologies/ml-agents)のissueを見てみると色々解決できることがありますが英語なんできついですね。
#Mac のショートカット設定を変えるだけで、面倒くさがりな人間のアクションまで変わりそうな件。 (あるいは無印良品の人間がダメになる椅子にもたれながらプログラミングする方法のちょっとしたヒント)

# #Mac の Command+Control+Shift+4 でのスクリーンショット撮影を本当によく使うので片手で開始できるようのショートカット設定しておく


それはとあるエンジニアのKindle読書中。「あースクリーンショット開始さえ面倒ください」と思う自分に気付いた。だがその感覚を繊細に見ていくと「右手を伸ばして4に触れるアクション」を、体がとても面倒臭がっていることに気付いた。

そのときちょうど、無理良品の人間がダメになるソファに座っていたもので。

ということで、ショートカット設定を変えることで「ほんのちょっとした肉体的なしきい値」に訴えかけることにした。これは素晴らしい。「右手を伸ばさなくて良い」ということが、ここまで我が肉体アプリケーションの挙動を変えてしまうとは。

本当に便利なのでお試しを。ところで僕は Command + Controle + Shift  + S に設定した。

![image](https://user-images.githubusercontent.com/13635059/56402428-37aac400-6298-11e9-8b59-ff61d9215cb6.png)
![image](https://user-images.githubusercontent.com/13635059/56402430-38dbf100-6298-11e9-8ac4-fc213f42b9d5.png)


# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
POSIXシェルスクリプトで困ったこと

# ファイルの更新日時を確認する方法がない

- `ls -l`だと6ヶ月以内に更新があったファイルは年月日がわからない。なんでこんな仕様にしたんだ・・・

## 解決方法

- statコマンドを使う
  - GNUとBSDで挙動が全然違う・・・
- GNU coreutilsの`ls --full-time`などを使う

# csplit(1)の挙動がGNUとBSDで違う

ほんとうに全然違う

## 解決方法

- awkで書く

例:

```denpyo.txt
PRODUCT NO: 1
PRODUCT NAME: SQL SOFTWARE
PRODUCT PRICE: 100
PRODUCT NO: 2
PRODUCT NAME: OS SOFTWARE
PRODUCT PRICE: 200
PRODUCT NO: 3
PRODUCT NAME: HTML SOFTWARE
PRODUCT PRICE 300
PRODUCT NO: 4
PRODUCT NAME: NETWORK SOFTWARE
PRODUCT PRICE 400
```

```awk:denpyoディレクトリに0000~9999というファイル名で分割するawkスクリプト
BEGIN{
  n=0
}
{
  if(match($0, /^PRODUCT NO:.*/)) {
    n+=1
  }
  print $0 > sprintf("denpyo/%04d", n)
}
```
fastlaneにswiftlintが反応して仕事できなくなった

`bundler` を使って　`fastlane` や `cocoapods` を管理しており、
`bundle install --path vendor/bundle` というコマンドを叩いて、 プロジェクトルートの `vendor` 配下にgemが入るようになっています。

この状態で、ビルドしようと思うとエラーが40件...。なんでや...。

# 原因をさがす...
エラーファイルを見てみると、ファイル上部の署名に「fastlane」と書いてあるのを発見しました。どうやら、fastlane内部にもswiftファイルが含まれており、それに対してswiftlintがエラーを吐いている様子

# どうした
`.swiftlint.yml` のlint対象外に `vendor` を追加した。

```yml:.swiftlint.yml
excluded:
  - Carthage
  - Pods
  - R.generated.swift
  - vendor
# swiftlintがfastlaneのswiftコードを見に行ってしまうので、vendorをlint対象外としている。
```

# 対策
swiftlintはpbxprojに含まれているものだけじゃなく、プロジェクトディレクトリ全てを精査するようなので、この挙動だけ忘れないようにしよう。
【Python】言語処理100本ノック:59


再帰的な正規表現を用いた解法がネット上で見つからなかったので投稿。
regexモジュールを使うと簡単にかける。（比較は別の方のプログラム参考）

# プログラム

```py
import xml.etree.ElementTree as ET
import regex as re

pat_1 = re.compile(r'(?<a>\((?:[^()]+|(?&a))*\))')
pat_2 = re.compile(r'\(.+? ([^()]+?)\)')

tree = ET.parse('nlp.txt.xml')
for parse in tree.iter('parse'):
    for capture in pat_1.search(parse.text).captures('a'):

        if capture[1:3] != 'NP':
            continue

        for match in pat_2.finditer(capture):
            print(match.group(1), end=' ')
        print()
```

※ Stanford Core NLPの句構造解析結果は nlp.txt.xml に保存されてる前提


# 出力（一部）

```
Natural language processing 
Wikipedia 
the free encyclopedia Natural language processing 
NLP 
the free encyclopedia Natural language processing -LRB- NLP -RRB- 
a field 
computer science 
a field of computer science 
artificial intelligence 
...
```
RailsコンソールでGemを使わずにデータを見やすく表示する


#### はじめに
Railsチュートリアル実施中の初心者です。
データベース内のちょっとしたデータの確認などにはRailsコンソールを利用しますが、１レコードが一行で表示されるため、少々見にくいです。
データを見やすくするためのGemはいくつかありますが、Gemに頼らず、見やすくできないか試行錯誤しました。

#### 普通に表示
```console
> User.first
=> #<User id: 1, name: "Example User", email: "example@railstutorial.org", created_at: "2019-04-16 16:22:28", updated_at: "2019-04-19 03:08:30", password_digest: "$2a$10$fN.8W9WjbZ9Nud5.Vzf7VOAxXd10K9gOYbf6g2vfXws...", remember_digest: nil, admin: true, activation_digest: "$2a$10$NaAL98dZkFHwse09sO9bWutaxjwIofiSvNUKVexHSnd...", activated: true, activated_at: "2019-04-16 16:22:28", reset_digest: "$2a$10$FJ6/086gEWuo1Urcos6bKuldLl4p.3UtRkcZYKnyaAr...", reset_sent_at: "2019-04-19 03:08:30">
```

#### 見やすく表示
```console
puts User.first.inspect.gsub(/,/,"\n")

#<User id: 1
 name: "Example User"
 email: "example@railstutorial.org"
 created_at: "2019-04-16 16:22:28"
 updated_at: "2019-04-19 03:08:30"
 password_digest: "$2a$10$fN.8W9WjbZ9Nud5.Vzf7VOAxXd10K9gOYbf6g2vfXws..."
 remember_digest: nil
 admin: true
 activation_digest: "$2a$10$NaAL98dZkFHwse09sO9bWutaxjwIofiSvNUKVexHSnd..."
 activated: true
 activated_at: "2019-04-16 16:22:28"
 reset_digest: "$2a$10$FJ6/086gEWuo1Urcos6bKuldLl4p.3UtRkcZYKnyaAr..."
 reset_sent_at: "2019-04-19 03:08:30">
=> nil
```
モノビットエンジンでかんたんサーバ接続

前回はサンプルを動かすところまでを確認しました。(前の記事は[こちら！](https://qiita.com/nisoka/items/78e6b4d609f25289024a))
今回は中身のスクリプトをひも解きながら、サーバ接続の基本について学びたいと思います。



##今回やりたいこと
1. サーバに接続する
2. ルームを作成＆入室する

以上をGUI表示でするところまでおこないます。



##はじめに注意すること
GameObjectに対してモノビットエンジンのメソッドを使いたいときは、
以下の２点が条件です。これ忘れずに。

- **MonobitEngine.Monobehaviourを継承**
- **MonovitView.csのアタッチ**

```C#:Sample,cs
// namespaceを宣言
using MonobitEngine;
// MonobitEngine.Monobehaviourを継承する
public class SampleClass : MonobitEngine.MonoBehaviour
```
![image01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401086/1cf8afa3-c2a0-f76b-57ff-2c5058dc9f0c.png)






##サーバに接続する
```C#:NetworkConnectionSample.cs
// デフォルトロビーへ自動入室を許可する
MonobitNetwork.autoJoinLobby = true;

// MUNサーバに接続する
MonobitNetwork.ConnectServer("v1.0");
```
####ロビーとは？
ルームに入るまえの待合場所。
たとえば、ロビーごとにレベル制限を設けておき、レイドバトルの時にレベルが低い人はルームに入れさせないことが可能だったりする。

####デフォルトロビーとは？
自動的に放り込まれる待合場所。
「ご新規の方はこちらでお待ちくださいねー」的な感じ。

`MonobitNetwork.autoJoinLobby = true;`
サーバに入ったとき自動的にデフォルトロビーに通す設定。
falseにする場合、ロビー入室処理をべつに書く必要がある。
[参考リンク](https://www.scriptlife.jp/contents/programming/2017/06/18/unity-monobit-connect-failed/)

`MonobitNetwork.ConnectServer("v1.0")`
サーバーに対して"つなぎたい"という要求を送信するメソッド。
要求が受理されるとtrue、無効だとfalseがかえってくる。
trueがかえってくるまでこのメソッドを呼び続けて、ロビー入室処理に進まないようにするのがベストらしい。
つなぎたいサーバのバージョンを指定している。文字列はhogeでもfugaでも何でもいい。
たとえば、v1.0→v1.1へバージョンアップをしたときなどに、前のバージョンの住人とマッチングさせたくないときに使える。
[参考リンク](http://www.monobitengine.com/vc/WebDoc/contents/Feature/ConnectToServer.htm#listtop)




##ルームを作成＆入室する
```C#:NetworkConnectionSample.cs
// MUNサーバに接続しているとき
if (MonobitNetwork.isConnect)
{
    // ルームにまだ入室していないとき
    if(!MonobitNetwork.inRoom)
    {
        // ルーム名
        string roomName = "";

        // ルーム名の入力
        GUILayout.BeginHorizontal();
        GUILayout.Label("RoomName : ");
        roomName = GUILayout.TextField(roomName, GUILayout.Width(200));
        GUILayout.EndHorizontal();

        // ルームを作成
        if (GUILayout.Button("Create Room", GUILayout.Width(100)))
        {
            MonobitNetwork.CreateRoom(roomName);
        }
    }
}
```
####ルームとは？
ロビーに紐づいた部屋。
ロビーには複数のルームがあってもよい。

`MonobitNetwork.CreateRoom(roomName);`
ルームを作成して入室するメソッド。
引数なしだと最大人数無制限、入室可で公開されたルームを作成する。
引数ありで人数制限、公開非公開、入室許可などの設定ができる。
[参考リンク](http://www.monobitengine.com/vc/WebDoc/contents/Feature/CreateRoom.htm)

##最後に
サーバ接続の基本的な方法のメモになりましたが今回はここまで。
pcDuino用のシールド

pcDuinoにAitendoの液晶をマウントするためのシールドを作ってみました。

![写真（2019-04-17 13.11）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/7b18e383-f4c5-390e-c951-59f0a332ba89.jpeg)

手持ちの基板をあててみて、スイッチサイエンスさんの[バニラシールド基板](https://www.switch-science.com/catalog/990/)を裏にして使ってみました。この基板は以前スイッチサイエンスさんに見学に行ったときに購入しました。pcDuinoが白色基板なのでちょうど良いです。

![写真（2019-04-19 12.36）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/8c3fa895-b2fc-3d45-1f5e-8aa1094c1d6c.jpeg)

![写真（2019-04-19 12.37）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/c6a120b6-a1a1-fde5-7117-6dc92dcd313c.jpeg)

計ったように、液晶の40ピンのコネクタが置けました。

この基板はISPコネクタのところが近くのホールに接続されているので注意が必要です。

接続したピンに3.3Vのピンが無かったので、レギュレータ(XC6202)でSPIコネクタの5Vから3.3V(150mA)を作っています。

XPT2046の入力ピンには必要なかったかもしれませんが、ダンピング抵抗(47Ω)を入れてあります。

XPT2046の接続はSPIでアクセスできますが、FreeBSDにはA10用のSPIドライバーがないので、GPIOのBitbangでアクセスしています。

uartはそのまま横に出しました。

白い支柱は長めのものを切りました。

各ピンヘッダーはDIPピッチで配置されています。
@supportsを使ってCSS display: grid; をサポートしているブラウザにGridレイアウト、そうでないブラウザにはFlexboxレイアウトを適用

CSS `display: grid;` をサポートしているブラウザにはGridレイアウト、そうでないブラウザにはFlexboxレイアウトを適用させるCSSの書き方を紹介します。

## `display: grid;` をサポートしている主要ブラウザ
[https://caniuse.com/#feat=css-grid](https://caniuse.com/#feat=css-grid)を参考に`display: grid;` をサポートしている主要ブラウザをまとめてみました。

|ブラウザ名  |grid使えない最終Version  |grid使えるVersion  |
|---|---|---|
|**IE**  |11 (partial support) | なし  |
|**Edge** |15 (partial support)  |16 |
|**Safari**  |10  |10.1  |
|**iOS Safari**  |10.2  |10.3  |
|**Android**  |4.4.4  | 5.0 |
|**Firefox**  | 51  |52  |
|**Chrome**  | 56  |57  |
|**Opera**  | 43  |44  |
IEとEdgeは`-ms`prefixがついた独自プロパティで部分的に対応しています。
iOS Safariが案外新しめのバージョンまで使えないので注意です。

## 機能クエリ`@supports`を使って実装
機能クエリ [`@supports`](https://developer.mozilla.org/ja/docs/Web/CSS/@supports) を使い`display: grid;`に対応しているブラウザとそれ以外に別のスタイルを出し分けます。

```css
/*例*/
.box {
  display: flex;
  flex-wrap: wrap;
}
@supports (display: grid) {
  .box {
    display: grid;
    grid-template-rows: auto;
    grid-template-columns: repeat(3, 1fr);
  }
}
```
簡単ですね！
PostgreSQLを古いバージョンで起動する方法

ローカル環境のPostgreSQLを11.2から9.5へダウングレードさせるために行った手順です。
なお、環境はMacです。

## 現状確認

```
$ psql --version
psql (PostgreSQL) 11.2
-> これを9.5にさせるのが今回の目的
```

## 実行手順

```
### バージョン指定してインストール
$ brew install postgresql@9.5

### psqlコマンドの場所を確認
$ which psql
/usr/local/bin/psql

### psqlの内容を確認
$ ls -l /usr/local/bin/psql
lrwxr-xr-x  1 toshiharu.nishina  admin  34  4  2 15:38 /usr/local/bin/psql -> ../Cellar/postgresql/11.2/bin/psql
→ 11.2のバージョンにシンボリックリンクが貼られているので、これを9.5系にすればいい

### シンボリックリンクを解除
$ unlink /usr/local/bin/psql

### シンボリックリンクを作成
$ ln -s /usr/local/Cellar/postgresql@9.5/9.5.15/bin/psql /usr/local/bin/psql

```

あわせてpg_ctlのシンボリックリンクも変更しておくとよい

```
$ unlink /usr/local/bin/pg_ctl
$ ln -s /usr/local/Cellar/postgresql@9.5/9.5.15/bin/pg_ctl /usr/local/bin/pg_ctl
```


## 作業後確認
シェルを再起動後、バージョンが変更されているのがわかる。

```
$ psql --version
psql (PostgreSQL) 9.5.15
```
Redmineの進捗率を見やすくする

# Redmineの進捗率って見づらいですよね？

正直、プログレスバーではなく数値で表現してほしい……
![見づらい.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147207/239e11c6-8768-2d94-0aaa-e94a7e92fc93.png)
自分がRedmineの管理者ならどうとでもできるような気がしますが、多くの場合そうではなく、進捗管理のためにCSVで吐き出してExcelに貼り付けるというようなおかしなことをしてしまっているのではないでしょうか？

# 苦肉の策で考えたのがこれ

* 管理者権限がないのでクライアント側でなんとかする
* どうやらjQueryが使えるようだ
* .closed（プログレスバー緑色部分）のtitle属性に進捗率がセットされているので、これを可視化すればよい

スクリプトレットを作るのが簡単でよさそう。
で、15分で作ったのがこれ。

```javascript
javascript:$('.closed').each(function(){$(this).text($(this).attr('title'));})
```

Redmineのチケット一覧を開いて、URLバーへ上記テキストを貼り付けて実行。
![見やすくなった.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147207/d31bf608-172c-3c38-c0fd-f54085957b52.png)
多少レイアウトが崩れているのはご愛嬌。読めないよりマシです。
プログレスバーの見た目を維持したまま中央寄せで数値表示できれば理想だったが……まあ、読めないよりマシです。

Redmineが古いと動かないかも。動かない場合はこっち。

```javascript
javascript:$('.closed').each(function(){$(this).text($(this).get(0).style.width);})
```

# ド素人でも使えるように改良したのがこれ

ローカル保存するなり改変するなりご自由にどうぞ。
[redmine-progress-view](https://cress.cc/redmine-progress-view/)

需要ないと思うけどリポジトリはこちら。
https://github.com/cress-cc/redmine-progress-view
PhpStormでクラス動かしたいときはクラスファイル開いてクラス名にカーソル合わせてF6押せ

PhpStormのヘルプを見て、Refactor -> MoveとかしてみたもののNamespaceが追従しなかった者たちへ捧ぐ。

# やりたいこと
Laravelでnamespaceが`app\`が`App\`になってる状態でクラスの`namespace`を変えたい。
公式ヘルプではRefactor->Move...をしたりすると変わるらしいが、なぜかそうなってくれない。

# やること
## Directoriesで`app`を`App`として扱わせる
Preferencesを開いて、Directories。
そこからSouceRouteとして`app`ディレクトリをマークする。
マークした後にそのディレクトリのPackage Prefixとして`App`を割り付ける。

右にマークされているディレクトリ一覧が並んでいるので、そこに`app`ディレクトリのパスが並んでいるとき、鉛筆マークが出ているのでそいつをクリックしてPackage Prefixを編集する。

## 移動したいクラスファイルを開いて、クラス名にカーソルをあわせF6キーを押す
移動先のNamespaceを指定してやるとファイルをそのディレクトリへ移動し、自身のNamespaceを変更し、さらには依存関係のuse句も変更してくれる。

クラス名でなくとも、namespaceにカーソルをあわせてF6を押しても、そのnamespaceのクラスとかすべてが変更されます。活用されたし。

## composer dump-autoload
autoloadのファイルを更新するのも忘れずに。

Shift + F6はクラス名の変更だとばっかり思ってて、F6単発でクラスの移動になるとは思わなんだ...
Python，"ImportError: DLL load failed"からの復旧

# 何もしてないのにPythonが壊れました！
AnacondaをインストールしてPATHを通しただけなのに！

# numpyがインポートできない
なにもしてなくないよね？どうみてもこれのせいです．本当にありがとうございました．

いろいろ弄っていたらよくわからないエラーが出るようになってしまった，見つかった記事通りにやったらうまく行かなかった，ということでそこからの復旧方法をメモ

### 障害内容
Windows10です．
もともと生でPythonをインストールしてあったところにAnacondaを追加でインストールしたら，
numpyをインポートする際に

```
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
```

という例外を吐くようになってしまったという件．

環境は
pipでPython 3.7.2
AnacondaでPython 3.7.3
がインストールされており，PATHはどっちも通っている（Anacondaの方が優先）という状況

PATHを通したり消したりしてみた結果pip版の方は関係なくAnacondaのPythonがおかしい模様．[^1]

[^1]: PATHが通っていなくてもpip版インストールされていると干渉してまずいのかもしれないが，動いているものをアンインストールして全部動かなくなると困るのでちょっと弄りたくない．

しかもAnaconda PromptやJupyterから起動すると問題なく，コマンドプロンプトから走らせたときのみ起こる．なんでや．

# 対処方法
もっぱらコマンドプロンプトから呼ぶのでこれでは困ると調べてみた結果mkl(Math Kernel Library)の参照でエラーを起こしているらしい 
[**※1**](https://qiita.com/marshi/items/a0f80c5aa3c37b0025d6#_reference-ad9a74bec672fd834dc6) によるとSystem32のmkl_intel_thread.dllを削除したら直ったということだがこのファイルが見つからない[^2]

[^2]: そもそもSystem32のファイルを勝手に削除して大丈夫なんだろうか

一方[**※2**](https://qiita.com/yryrgogo/items/1644586ff283408b28e2)を見るとmklが付属しているパッケージでインストールすると良いらしい．結局これで直った．

### .whlからのインストール
ここ( https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy )から32bit/64bitに対応する最新版のnumpy+mklパッケージをダウンロードし，インストールする．
★ここで cp○○ というバージョンがあるが，これがpipのバージョンと合っていないとインストールできない．[**※3**](https://qiita.com/r-ngtm/items/f7dc53bf713d12f6be9d)
対応バージョンを確認するには対話環境などから

```
from pip._internal.pep425tags import get_supported
get_supported()
#(例)=> [('cp37', 'cp37m', 'win_amd64'), ('cp37', 'none', 'win_amd64'), ('py3', 'none', 'win_amd64'), ...
```

とすれば見られる．
対応するバージョンを上記からダウンロードし，Anaconda Promptから

```
pip install "ファイル名.whl"
```

でインストールすれば完了．(コマンドプロンプトやcondaでは失敗した．何故だろう．)
permission denied されることがあるので適宜`--user`をつけて限定するか管理者権限を付与する．

matplotlib,pandas,scikit-learnも同様のエラーが出ていたので同様に+mklの.whlファイルをダウンロードしてきてインストールする．
matplotlib,pandasをインストールしたところでscikit-learnのエラーも消えたので依存関係があるのかもしれない．

無事Anacondaで動くようになったので元のはアンインストールしたほうがいいのかもしれない．とりあえずPATHだけ消して様子見している．
Domoの主要画面のアイコン説明

#概要
Domoの使い方が公式以外ネット上に日本語で落ちていなかったので、備忘録を兼ねた使い方記事です。(順次更新予定)

##DomoLayout（ログイン後すぐの画面）
![(1) トップページ - Domo-screenshot-1555576730915 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389933/b369d205-3788-f17f-604f-d347c29c65af.png)

番号|各ボタンの名称|概要
---|---------|---
1|Company Logo|自分の会社のロゴ。管理社設定で変更できる。
2|Search|同じ会社のユーザーやヘルプ、ダッシュボードなどの検索。
 |Add to Domo|新しいデータやユーザー、タスクなどを追加できる。
 |Help|ヘルプセンター。使い方やトレーニングビデオなどがある。
 |Main menu|カードの編集画面やアラートの管理画面、管理者設定画面などにアクセスできる。
 |User profile menu|個人情報の追加や更新はここで行う。
 |Buzz toggle|Buzzyチャンネルへのショートカット
3|Start using|Domoの使い方LP
 |Top page|自分がメンバーに追加されているカードが表示される。
 |Favorite|お気に入りにしたカードが表示される。
 |Alert|個々のカードに閾値を超えた時に通知するアラートや、他の人が作ったアラートをフォローなどできる。
 |Management(1番右のボタン)|KPIや部署ごとなど区分けしたい項目ごとにページを作ることができる(スクショでいうとCRM)
4|カード|自分がメンバーになっているカードが一覧で表示される。

#General Details view layout(カードの詳細画面)
![undefined-screenshot-1555638501541.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389933/13cbf307-cd00-d67a-3a53-676621edb261.png)

番号|各ボタンの名称|概要
---|---------|---
1|Card name|カードの名前。
2|Summary number|チャートの合計値やカウントした値を表示(カード編集画面で変更可能)
3|Content|カード上のデータをチャートなどで表している部分。
4|Invite icon|このカードに他のユーザーを招待する。
 |Buzz icon|このカードのBuzzチャンネルへのショートカット
 |Filters icon|コンバージョンやコスト、日時などでデータを絞る。
 |Annotate icon|カードのスナップショットや日付の注釈を入れられる。
 |Shere icon|他の人にカードをシェアしたり、ローカルに保存。
 |Chart picker|表示されている以外のグラフ形式でデータを見られる。
 |Alert icon|このカードに対して、閾値を超えた時などに通知をするよう設定できる。
 |Analyzer icon|カードの編集画面へのアクセス。
 |Options icon|お気に入りへの追加やカードの編集・削除などの設定が行える。
 |Chart/Table view toggle|チャートビューとテーブルビューへの切り替えボタン

#Analyzer Layout(カードの編集画面)
![undefined-screenshot-1555640884553 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389933/d3797b44-5caf-9d75-17f7-40ce8d8d9013.png)

番号|各ボタンの名称|概要
---|---------|---
1|Name/Description|カードの名前と説明を設定。
 |Auto preview toggle|データソースが更新された時にチャートも自動更新のON/OFF|
 |Invite button|編集画面への招待|
 |Save button|編集した内容を保存|
2|Filters|チャートに対してフィルターをかける|
 |Sorting|チャートの並べ替え|
 |Properties|目盛りやグリッド線、凡例などの設定
 |Color Rules|チャートの色の設定
 |Quick Filters|設定したフィルターの編集や削除を簡単に行える
 |Summary|5番の数値の表示ON/OFF
 |Date|Summaryの右横にある日付の表示ON/OFF
 |YOY|違う期間のデータを比較することができる
 |Axis|列フィールドの表示ON/OFF
 |Chart Types|7番のグラフタイプを変更できる画面の表示ON/OFF
 |Annotate|スナップショットや日付の注釈
 |Beast Mode|測定項目(CVやCostなど)の平均や絶対値を算出できる
3|Data pane|チャートの元になるデータの文字型(ディメンション)や数値型(測定)を表示している。
4|Column fields|チャートのX軸やY軸、系列(区別の基準)などを設定できる。
5|Summary number|チャート内のデータを要約した値
6|Chart|チャート本体
7|Chart picker|グラフの種類や変更できる部分
 
# 後書き
実務でもうちょい使うようになったら更新していく
エスケープシーケンス(¥)が動作しない？(for Mac)

#エスケープシーケンス(¥)が動作しない？(for Mac)

こんにちは、Myouga-Makerです
初投稿です
この4月初旬は寒い日が続いていたようなイメージがありますね
新学期や進学で新しいことにチャレンジした方もおられるのではないでしょうか？（僕もそんな一人です）
そんな時に起こった問題をメモ書きとして残しておきます

####Javaを勉強し始めた頃に発生した問題
まぁ、どんな事も基礎からということで基本的な文章から始めていったのですが

```Java
System.out.println("My favorire symbol is double quotes(¥"). ");
```

__アレ？__
**なんかエラーになった?**
ちなみにMacでEclipse4_7_1を使ってます
教科書通りのコードを書いてるはずなのにエラーが吐き出されて困惑

####Unicodeが持つ問題
何故なのか調べて見ると、円記号のWikiに答えが
[Unicodeが持つ問題（円記号問題）](https://ja.wikipedia.org/wiki/円記号#Unicodeが持つ問題（円記号問題）)
どうやら、¥がUnicodeのU+005Cの\ではなく、U+00A5の円記号¥とされていたようです。

####結局どうしたか
バックスラッシュ自体はalt+¥キーで出せます。
でも、いちいちalt押すのは面倒だという方は、（Macの場合）設定で¥から\に変更できます
Macのシステム環境設定を開いて
システム環境設定→言語と地域→"キーボード"環境設定...→"¥"キーで入力する文字：\
と変更すれば、\が打てるようになります。
ちなみにこの設定でもalt+¥キー押すと¥が出ます。自分はこうしました。





windowsだったらこのような問題は出ないのかな？慣れないMacでの問題かな？
皆さんの中で、同じような問題が起こった方はおられるのでしょうか？
もし、他に解決方法があればコメントよろしくお願いします。
rootなのにアクセス権がなくて、コピーやバックアップが上手く行かないことがある。

※細かくは延べないので、不明な単語や設定については、別途ご確認下さい。

RHELやCentOSで、バックアップソフトを利用してまるごとバックアップやファイルコピーしようとした時、
アクセス権がなくてファイルが取得できず、エラーになる…その一つのパターンがこれです。
gvfsによって、rootのアクセス権限がないディレクトリが存在している場合です。

### 1. gvfsが原因なのか確認

mountコマンドで、以下のようなものがあれば、おおよそ当たりです。fuse & gvfsコンビにやられます。

```
[root@localhost ~]# mount
～～略～～
　tmpfs on /run/user/42 type tmpfs (rw,nosuid,nodev,relatime,size=3239260k,mode=700,uid=42,gid=42)
　gvfsd-fuse on /run/user/0/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
～～略～～
```

### 2. rootにアクセス権が無い状態を確認



以下のような状態です。/run/user/42/gvfsの情報が参照できません。

```:gvfsにアクセス権が無い状態
[root@localhost ~]# ls -l /run/user/42
ls: /run/user/42/gvfs にアクセスできません: 許可がありません
合計 0
drwx------ 2 gdm gdm 60 12月 13 17:26 at-spi2-2VADUZ
drwx------ 2 gdm gdm 60 12月 13 17:26 at-spi2-G0GBUZ
drwx------ 2 gdm gdm 60 12月 13 17:26 at-spi2-NIDBUZ
drwx------ 2 gdm gdm 60  3月  4 10:30 dconf
drwx------ 3 gdm gdm 60 12月 13 17:26 gnome-shell
d????????? ? ?   ?    ?             ? gvfs
drwx------ 2 gdm gdm 80 12月 13 17:26 pulse
```

### 3. お手頃な解決方法

「/etc/fuse.conf」で「user_allow_other」を有効にします。
RHEL7.5のデフォルトでは、コメントアウトされていたので、外して以下のようにしました。

```:/etc/fuse.conf
# mount_max = 1000
user_allow_other
```

OS再起動後、rootでも以下の通り見えるようになります。
この状態ならバックアップやファイルコピーも上手く行くはずです。

```:gvfsにアクセス権が有る状態
[root@localhost ~]# ls -l /run/user/42
合計 0
drwx------ 2 gdm gdm 60 12月 13 17:26 at-spi2-2VADUZ
drwx------ 2 gdm gdm 60 12月 13 17:26 at-spi2-G0GBUZ
drwx------ 2 gdm gdm 60 12月 13 17:26 at-spi2-NIDBUZ
drwx------ 2 gdm gdm 60  3月  4 10:30 dconf
drwx------ 3 gdm gdm 60 12月 13 17:26 gnome-shell
drwx------ 2 gdm gdm 40 12月 13 17:25 gvfs
drwx------ 2 gdm gdm 80 12月 13 17:26 pulse
```
Elasticsearch で indices を操作する方法（PowerShell版）

# Elasticsearch で indices を操作する

PowerShellで使えるElasticsearchのインデックス操作コマンドのまとめ

## indicesを確認（ブラウザ）

下記URLでindicesの一覧を表示できます。

```
http://localhost:9200/_cat/indices?v
```

## indices をクローズするには

下記コマンドでクローズできます。

```
> Invoke-RestMethod -Uri "http://localhost:9200/<indices名>/_close" -Method POST
```

ついでに、indices名は `*` で ワイルドカード指定もできます。

```
> Invoke-RestMethod -Uri "http://localhost:9200/<indices名途中まで>*/_close" -Method POST
```

## indices をオープンするには

下記コマンドでオープンできます。

```
> Invoke-RestMethod -Uri "http://localhost:9200/<indices名>/_open" -Method POST
```

ついでに、indices名は `*` で ワイルドカード指定もできます。

```
> Invoke-RestMethod -Uri "http://localhost:9200/<indices名途中まで>*/_open" -Method POST
```

## indices を削除するには

下記コマンドで削除できます。

```
> Invoke-RestMethod -Uri "http://localhost:9200/<indices名>" -Method DELETE
```

下記のコマンドで全削除できます。

```
> Invoke-RestMethod -Uri "http://localhost:9200/_all" -Method DELETE
```

## 参照
参考にさせていただいたQiitaの記事です。
curlコマンドが使える場合はこちら
[Elasticsearch で indices をさくっとクローズしたりする方法]
(https://qiita.com/okaru/items/9a35c6bfe9de88ecae35)
Swiftで地図で表示する緯度経度を60進数→10進数に変換する Tips

## はじめに
つい先日、iOSアプリ開発をしている最中に緯度経度を取得して地図上にピンを置くという処理を作っていました。
その際に取得される緯度経度が10進数ではなく、60進数の緯度経度が返ってきていました。
地図上の指定した緯度経度にピンを置く場合、Double型(10進数)で指定する必要があります。[(CLLocationCoordinate2DMake)](https://developer.apple.com/documentation/corelocation/1423838-cllocationcoordinate2dmake)
あまり使われない形だからなのか、60進数→10進数に変換する方法を調べても出てこなかった内容だったので共有します。

## 10進数と60進数の緯度経度の形
まず最初に緯度経度の10進数と60進数の形の違いについてです。

```swift:10進数と60進数.swift
// こっちは60進数。
let sexagesimalScaleLat = "35°00′00.000″"
let sexagesimalScaleLon = "138°00′00.000″"

// こっちは10進数。アプリ開発社の方々がよく見る形かな？
let decimalScaleLat = "35.000000"
let decimalScaleLon = "138.000000"


// そして今回私が遭遇した60進数の緯度経度はこっち
let anotherSexagesimalScaleLat = "35/00/00.000"
let anotherSexagesimalScaleLon = "138/00/00.000"
```
## 60進数→10進数に変換する

以上の事を踏まえて60進数を10進数の形に変換します。その計算方法は簡単で
**「度」はそのままで、「分」を60、「秒」を3,600で割りそれらを足す**と計算完了です。
とても簡単ですね。では残すはその計算をする処理を実装するのみとなりました。

## 解決策
今回はメソッドを作るのも良かったですが、
・複数のクラスで使う
・APIからはStringが渡される
・度分秒は"/"で区切られる
という条件があったのでStringのextensionで60進数→10進数の計算をするgetterメソッドを定義します。

```swift:extensions.swift
extension String {
    var latlonValue: String {
        // 文字列を"/"で区切る。
        let split = self.components(separatedBy: "/")
        // 期待する60進数の形でなければ元の文字列を返して終了する
        if split.count != 3 { return self }
        // 分、秒を計算してから度を足して結果を返す
        // これらを一つにまとめると「計算式が長い」とエラーが出ます。
        let minute = (Double(split[1]) ?? 0) * 60
        let second = ((Double(split[2]) ?? 0) + minute) / 3600
        let result = (Double(split[0]) ?? 0) + second
        return result.description
    }
}

// 使い方
let anotherSexagesimalScaleLat = "35/00/00.000"
let anotherSexagesimalScaleLon = "138/00/00.000"
let convertLat = anotherSexagesimalScaleLat.latlngValue
let convertLon = anotherSexagesimalScaleLon.latlonValue
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2DMake(Double(convertLat) ?? 0, Double(convertLon) ?? 0)
```
これで問題なく地図に表示できるようになりました！

## まとめ
今回は"/"で区切られたり他のクラスで使う事が分かっていたのでStringのextensionで対応しましたが
**(考えたくないけど)**区切られる文字が固定じゃなかったり特定のクラスでのみ使うのであればprivateなメソッドを定義した方が良いかな〜と思います。

## 結論
**サーバー側で10進数で返すようにしてくれたらそれが一番！**
AWS認定ソリューションアーキテクトアソシエイト攻略

## 概要
AWS認定ソリューションアーキテクトアソシエイトに合格したので、合格を目指す人のために行なった学習法等について書きます。

## 執筆者について
- PHPとかPythonとか使ってる、しがないサーバーサイドエンジニア
- 実務で半年はAWS各サービスは使ってたけど、CloudFormationは書いたことないレベル
- 一応コンピュータサイエンス系の大学は卒業してる

## 合格までにやったこと
合格までに様々なやり方で学習を行いました。
学習時間としては平日の業務時間中、暇な時を見計らって数十分くらい勉強してました。
家に帰ったら？　遊ぶに決まってるじゃないですか！！

そんな感じでだらだらと勉強してたら、試験を受けるまで３ヶ月くらいかかってました。
このセクションではAWSの学習法を、為になる度合い３段階評価で振り返ってみます。

### 主要なAWSサービスの動画　★
とりあえずAWSにはどんなサービスがあるのかを、ぼんやりとしか理解していなかったので動画を見ていました。
動画は[AWS公式](https://aws.amazon.com/jp/)にある各サービスのページに貼り付けてある動画です。
コーヒーを飲みながらのほほんと見ていました。

まあ、身についた感じはまずしません。

### 非公式問題集　★★
https://aws.koiwaclub.com/
こちらのサイトでは非公式のWeb問題集が利用できます。有料サービスです。
問題を３ヶ月の間、解き放題になるゴールドプランのために¥3,000を投入。
概要を理解してから反復学習するリソースとしてはとても役に立ちました。

しかし、これだけでは不足です。理由は後述。

### 試験対策本　★★
https://www.amazon.co.jp/gp/product/4297103826
こちらの試験対策本を購入しました。
実はこの本を購入したタイミングは、非公式問題集を５０問くらい解いてからでした。なぜなら不正解率が高すぎて、大枠の理解が不足していたことに気が付いたからです。
この本を読んでから非公式問題集を解いたら、明らかに正解率が上がりました。

結局、この本を最初に読破してから非公式問題集を解くべきだったと思います。
よって試験対策本と非公式問題集はセットで学習すべきでしょう。

### 実務　★★★
これでも一応サーバーサイドですので、いやでもAWSのサービスは触ります。
実際にコンソールで操作したり、インフラ構成図への理解を深めることがもっとも有効な学習であることは、揺らがないでしょう。
だからこの試験は1年程度のAWSを用いた実務経験がある人を想定しているわけです。

### 模擬試験 ★★
天下のアマゾン様の模擬試験は、その偉大さにふさわしく有料です。３０分も必要ない試験なのに¥2,000も取られます。
ただ、非公式問題集とは違って実際の試験に出てくるような問題で構成されており、色々学習を行った上での力試しとしては適切です。
アマゾンの犬としてお勧めします。

## 試験について

### 受験料
アマゾン様の犬となるためには、税込で¥16,200が必要です。
あらゆる決済方法を問わず、収めるのです。

### 持ち物
身分証が２つ必要です。コピーではなく現物を持って行ってください。
私は運転免許証とパスポートを持って行きました。顔写真があるかどうかが重要です。

### 試験について
具体的にどんな問題があったかは言えませんが、恐れることはありません。模擬試験と同じです。
120分の時間が与えられているものの、ちゃんと理解しているなら６０分で見直し含め完了できます。
むしろ悩みすぎて時間がオーバーするような状況では、おそらく合格は難しいでしょう。

そしてこれは私の印象ですが、非公式問題集の問題の方が難しいです。
非公式問題集は執筆時点で120個程度の問題が設定されていますが、それを２周程度やれば大丈夫です。
非公式問題集であまり解けずにくじけそうになった時は、公式の模擬試験を受けてみましょう。少し拍子抜けします。

### 試験日程について
これが本当に共有したいこと。
**なんと延期し放題！！**
試験開始48時間前までに日程変更すれば、日程を延期することができます。ズボラ大歓喜。
試験２日前に模擬試験を受けたら、合格ラインに到達できなかったとかで病むくらいなら延期しましょう。

しかし、だからと言って延期し続けたらいつまでたっても認定されません。
私は２回延期しました。

## 最後に
AWSはクラウドコンピューティングでは最も影響力のあるサービスでしょう。
この世界はやがてクラウドの海に沈み、アマゾンを信仰しない者は息をすることすら許されない、そんな世界になる可能性もあります。（言い過ぎ）

さあ、あなたもアマゾンの犬となるのです。さすればクラウドの恩恵が、あなたに与えられるでしょう。
【3分入門】コピペで導入！swift で 3D touch

3Dtouchでview controllerをプレビューできるようにする。

```
// 3D touchを行うViewController
class 3DTouchViewController: UIViewController {
    private lazy var button: UIButton = {
        let b = UIButton()
        b.backgroundColor = .red
        b.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
        view.addSubview(b)
        return b
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        // この記述で3DTouchできるviewを登録
        if traitCollection.forceTouchCapability == UIForceTouchCapability.available {
            registerForPreviewing(with: self, sourceView: button)
        }
    }
}

// registerForPreviewing でdelegateをselfにしたためprotocol実装
extension 3DTouchViewController: UIViewControllerPreviewingDelegate {
    // 注意！！ このメソッドがpreviewに対応。
    // プレビュー表示したいVCをreturn するとプレビューされる。
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
        // previewingContext.sourceViewで登録したviewが取れる。
        // ex. 3Dtouchされたtable viewから押されたrowを取得
        // let table = previewingContext.sourceView as? UITableView
        // let indexPath = table?.indexPathForRow(at: location)

        let vc = PreviewViewController()
        return vc
    }

    // 注意！！ このメソッドはプレビューからさらに押し込まれた時の動作に対応。
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {

       // viewControllerToCommitがプレビューされてたVC
       navigationController?.pushViewController(viewControllerToCommit, animated: true)
    }
}
```

## 注意
preview時にpreviewされるVCのライフサイクルメソッド呼ばれる。
viewWillAppearなど
AWS Certified Alexa Skill Builder - Specialty を取得しました

## AWS Certified Alexa Skill Builder - Specialty
2019/4/16 に正式リリースとなった新しい[認定](https://aws.amazon.com/jp/certification/certified-alexa-skill-builder-specialty/)です。
Alexaスキル開発者としての役割を果たす個人を対象とし、
スキルを構築、テストおよび公開する能力を検証することができます。

**新しい AWS 認定 Alexa スキルビルダー – スペシャリティ試験の発表**
https://aws.amazon.com/jp/about-aws/whats-new/2019/04/new-awsexam-certified-alexa-skill-builder-specialty/

私が受験したのは2019年1月～2月まで受験可能だった[ベータ試験](https://aws.amazon.com/jp/about-aws/whats-new/2019/01/announcing-aws-certified-alexa-skill-builder-beta-exam/)です。

## 受験前の知識レベルと学習方法
### Alexa
Alexaに関しては社内の勉強会の講師をした経験もあり、スキル開発については
一定の知識がありました。とは言ってもAlexaが日本語対応した2017年末くらいから
最新のアップデートがキャッチアップできていませんでした。

Alexaは日々進化していて、2018年だけでも数多くの機能が追加されています。

**Release Update -New Alexa Skills Kit Features and Tools-**
https://developer.amazon.com/ja/alexa/feature-updates

[試験ガイド](https://d1.awsstatic.com/training-and-certification/AWS%20Certified%20Alexa%20Skill%20Builder%20-%20Specialty_Exam%20Guide.pdf)を参照しながら、足りない知識をキャッチアップしていきました。
Alexa Skills Kitの公式ドキュメントは日本語化の対応も早く、控え目にいってバイブルです。

https://developer.amazon.com/ja/docs/ask-overviews/build-skills-with-the-alexa-skills-kit.html

ガイドに記載されているその他のドキュメントにも一通り目を通しました。

また認定の正式リリースに伴い、[**サンプル問題**](https://d1.awsstatic.com/training-and-certification/AWS%20Certified%20Alexa%20Skill%20Builder%20-%20Specialty_Sample%20Questions.pdf)や模擬試験も公開されているのでこちらを
確認、受験するのもよいと思います。

また英語のみですが、無料のE-Learningコースも公開されています。

* [Getting in the Voice Mindset](https://www.aws.training/learningobject/wbc?id=29037)
* [Introduction to Skill Concepts](https://www.aws.training/learningobject/wbc?id=29036)
* [Designing for Conversation](https://www.aws.training/learningobject/wbc?id=29039)

### AWS 
AWSに関しては他の認定をいくつか取得しており、ベータ試験受験までの準備期間も
短かったことから特別な対策は行いませんでした。
LambdaやDynamoDB、CloudWatch、IAMといったサーバーレス周りの開発経験が
や知識があれば問題のないレベルだと感じました。
逆に言うとAlexa Skills Kitの知識だけで合格するのは難しいとも言えると思います。

## ベータ試験を受験することのメリット
今回始めてベータ試験を受講しましたがこちらが一番伝えたいことかもしれません。

ベータ試験自体の詳細は[こちら](https://aws.amazon.com/jp/certification/beta-exam/)に記載されています。

受験可能な期間が限られている、言語は英語のみといった成約はありますが
これらを差し引いても以下のようなメリットがあり、受験してよかったと感じています。

* 通常試験の半額(Specialtyの場合は300ドル→150ドル)で受験可能
* ベータ試験が成功し、合格スコアを取得することができれば新しい認定の最初の正式な合格者になることができます
* 不合格となった場合でも、正式リリース後に無料で再受験可能なクーポンを受け取ることができます

ベータ試験の結果はベータ期間が終了してから約90日後に発表されます。
AWS Certified Security - Specialty のように一度目のベータ検証の結果
正式リリースとはならず(合格者なし）、2回目のベータ試験を経て正式リリースになった
認定もありますが、その場合もクーポンは発行されていたようです。

英語による受験も初めてでしたが、わかりやすい英語で記載されており、
技術的な単語はすぐに理解できましたので、試験時間の170分を有効に使うことで
そこまで怯える必要がないことがわったのもよい経験でした。

以上です。
参考になれば幸いです。
【3分入門】コピペで導入！circle ciでRails のテスト

## 前提
rails
mysql
rspec
circleci

## code
最低限の設定に絞ってあります。
mysql の docker が立ち上がるのを待つ必要がありました。

```.circleci/config.yml
version: 2
jobs:
  build:
    docker:
      - image: circleci/ruby:2.5.3
        environment:
          DATABASE_HOST: 127.0.0.1
          RAILS_ENV: test
          TZ: Asia/Tokyo
      - image: circleci/mysql:8.0.12
        command: [--default-authentication-plugin=mysql_native_password]

    working_directory: ~/repo

    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "Gemfile.lock" }}
            - v1-dependencies-
      - run:
          name: install dependencies
          command: |
            bundle install --jobs=4 --retry=3 --path vendor/bundle
      - save_cache:
          paths:
            - ./vendor/bundle
          key: v1-dependencies-{{ checksum "Gemfile.lock" }}
      - run:
          name: waits for db
          command: dockerize -wait tcp://127.0.0.1:3306 -timeout 120s
      - run: bundle exec rake db:create
      - run: bundle exec rake db:schema:load
      - run:
          name: run tests
          command: |
            mkdir /tmp/test-results
            TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
              circleci tests split --split-by=timings)"

            bundle exec rspec \
              --format progress \
              --format RspecJunitFormatter \
              --out /tmp/test-results/rspec.xml \
              --format progress \
              $TEST_FILES

      - store_test_results:
          path: /tmp/test-results
      - store_artifacts:
          path: /tmp/test-results
          destination: test-results
```

## 注意
### 環境変数
rails 5.2だと RAILS_MASTER_KEYの環境変数が必要です。
これはcommitするのは危険なので、みなさん別で管理されてると思うのですが、それをcircle ciの設定から登録しないといけません。

### mysqlを待つ
mysql の docker が立ち上がるのを待つ必要がありました。
`dockerize -wait tcp://127.0.0.1:3306 -timeout 120s`
の部分

### mysqlの認証方法
password認証？を許すと楽そうでした。

` command: [--default-authentication-plugin=mysql_native_password]`


### rspec format
出力を整えるためにgemを追加しました。

```
 gem 'rspec_junit_formatter' # for circle ci
```

この部分変えればなしでもいけそうです。
```
 bundle exec rspec \
              --format progress \
              --format RspecJunitFormatter \
              --out /tmp/test-results/rspec.xml \
              --format progress \
              $TEST_FILES
```
最近学んだテスト手法

※社内共有向けにざつーに書いたので、限定共有投稿とします。予告なーく削除したり変更したりします。

## はじめに

勉強会で最近知ったテスト手法を紹介します。
Swiftの記事を中心に載せますが、KotlinやJavaでも適用できるものが多いです。

## パラメタライズドテスト

予めテストデータ(パラメータ)を列挙するテスト手法。
Go言語では「テーブル駆動テスト」と言われ、一般的に使われている。
JUnit5でも標準でサポートされている。
(iOSの場合)サポートされていないので、スライドを参考に工夫する必要がある。

- スライド
https://speakerdeck.com/yusukehosonuma/swift-parameterized-test

- ライブラリ
https://github.com/YusukeHosonuma/SwiftParamTest
まだ発展途上

__メリット__

- テストデータの追加や削除がしやすい
- 見通しがよくなる

これでメソッドの引数を変えただけのテストメソッドが増殖されることがなくなる。
積極的に取り入れていきたい！

## スナップショットテスト

画面のスクリーンショットを撮り、予め用意した画像(リファレンス画像)と差異がないか確認するテスト手法。

主に以下をテストできる。

- 端末やOSごとの表示崩れ
- 表示状態の組み合わせ
- 異常系の表示

撮ったスクリーンショットをそのまま画面カタログとして使うこともできる。

(iOSの場合)XCUITestでなくXCTestで行えるのが強み。

- スライド
https://speakerdeck.com/susieyy/snapshot-testing-in-ios

- ライブラリ
  - iOSSnapshotTestCase  
  https://github.com/uber/ios-snapshot-test-case  
  FBが作成したが現在はUberが管理している
  - SnapshotTesting  
  https://github.com/pointfreeco/swift-snapshot-testing  
  後発のライブラリ。強力とのこと

UIテストをがっつり書いている場合は不要かな、、
構造上UIテストを書けなかったり、UIテストの実行時間やFlakyが気になったりする人向けという認識でいいかも。

Viewのテストをどう行うかについては↓のやりとりを追うといいかも。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ここまで丁寧にフィードバックいただけるのとてもありがたいです！どのテストが有効かはもちろん一般的なところもあるのですが、何をテストしたいかとどこまでテストしたいかで変わるのでケースバイケースなところがあるのかなと思っています(だから難しいとも思っている) <a href="https://t.co/kmMeOHGV2f">https://t.co/kmMeOHGV2f</a></p>&mdash; kariad/かりあど (@kariad_uu) <a href="https://twitter.com/kariad_uu/status/1118200837233238016?ref_src=twsrc%5Etfw">2019年4月16日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## プロパティベースドテスト

テスト対象メソッドの性質(プロパティ)をアサーションに定義し、パラメータをランダムに渡すテスト手法。

- スライド
https://speakerdeck.com/yusukehosonuma/property-based-test-beginning-with-swiftcheck

- ライブラリ
https://github.com/typelift/SwiftCheck
HaskellのQuickCheckにインスパイアされている

正直まだよくわかっていない、、
これからスライドを読み直したり、SwiftCheckの公式ドキュメントを読んだりしようと思う。

## おわりに

DeNAのSWETチームつおい。
そして[iOSテスト全書](https://peaks.cc/iOS_testing)の発売が待ち切れない。
html,cssにおけるinline,block,inline-blockの使い分け

[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしている山田です。

html,cssについて学習のアウトプットとして投稿します。

プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください。

#inline,block

htmlのタグにはそれぞれinline、blockという値が初期値で決まっています。
この値によって、表示のされ方が決まります。

##inline:
・width,heightで幅や高さを指定できない。
→コンテンツ自身と同じ大きさ
・横に並ぶ
・text-alignが使える
・左右のmargin,paddinのみ使える
初期値をとるタグ:span,aなど

##block:
・width,heightで幅や高さを指定できる。
・縦に並ぶ
・text-alignが使えない
・上下左右にmargin,paddingが使える
初期値をとるタグ:h1,div,p,ulなど

このような性質があります。

#displayによる指定
inline,blockはdisplayというcssのプロパティで指定することができます。
displayではこの2つのほか、inline-blockという値も指定できます。
inline-blockには次の性質があります。

・width,heightで幅や高さを指定できる
・横に並ぶ
・text-alignが使える
・上下左右にmargin,paddingが使える

即ち、inlineとblockの間のような性質を持っています。
Amazon Linux に tcpflow をインストールする

t2.microだとコンパイルがメモリ不足でこけます。t2.medium以上で。

```
sudo yum groupinstall "Development Tools"
sudo yum install openssl-devel
sudo yum install boost-devel
sudo yum install cairo-devel
sudo yum install libpcap-devel
wget http://downloads.digitalcorpora.org/downloads/tcpflow/tcpflow-1.5.0.tar.gz
tar xvfz tcpflow-1.5.0.tar.gz 
cd tcpflow-1.5.0/
./configure
make
sudo make install
```
dhcpcd.conf 覚書

``/etc/dhcpcd.conf`` に記載されているコメントの日本語訳。

## dhcpcd 設定例

詳細は ``dhcpcd.conf(5)`` を参照してください。

指定したグループのユーザが制御ソケットを介して dhcpcd と対話できるようにします。

```bash
controlgroup wheel
```

DDNS 用のホスト名を DHCP サーバーに通知します。

```bash
hostname
```

クライアント ID には、インターフェースのハードウェアアドレスを使用してください。

```bash
clientid
```

または RFC4361 に従って DHCPv4 ClientID に 
DHCPv6 で設定されているものと同じ ``DUID + IAID`` を使用してください。
RFC に準拠していない DHCP サーバーの中には、上記の組合せで応答しないものがあります。
この場合は、 duid をコメントアウトして先述の clientid を有効にしてください。

```bash
duid
```

dhcpcd が終了してもインタフェース設定を保持します。

```bash
persistent
```

迅速なコミットサポート。
サーバー上で実際に動作しているのと同等のオプションセットを要求する為、
デフォルトで有効にしても安全です。

```bash
option rapid_commit
```

DHCP サーバーから要求するオプションのリスト。

```bash
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
```

ほとんどのディストリビューションは NTP をサポートしています。

```bash
option ntp_servers
```

ネットワーク MTU を尊重します。これは DHCP ルートに適用されます。

```bash
option interface_mtu
```

ServerID は RFC2131 で必要とされています。

```bash
require dhcp_server_identifier
```

ハードウェアに基づくアドレスではなく、安定したプライベート IPv6 アドレスを生成する。

```bash
slaac private
```

静的 IP の設定例

```bash
interface eth0
static ip_address=192.168.0.10/24
static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
```

DHCP が失敗した場合は、静的 IP にフォールバックすることが可能です。
以下に静的プロファイルの定義例を掲載します。

```bash
profile static_eth0
static ip_address=192.168.1.23/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
```

eth0 の静的プロファイルへのフォールバック

```bash
interface eth0
fallback static_eth0
```
Visual Studio 2019 Ctrl+Shift+V でクリップボード履歴から貼り付け

Visual Studio 2019 から `Ctrl + Shift + V` でクリップボード履歴からで貼り付けをできるようになりました。

参考：
New Little Features in Visual Studio 2019
[https://youtu.be/u5YauFxb2Ho](https://youtu.be/u5YauFxb2Ho)
PhpSotrm上で簡単に翻訳出来るTranslationプラグインを使ってみた

# TL;DR

- プラグイン「[Translation](https://plugins.jetbrains.com/plugin/8579-translation/)」をインストール
- エディタ上で知りたい単語にカーソルを合わせて「`Ctrl + Shift + Y`」（もしくは右クリック→Translate）
- 文を翻訳したい場合は、文を選択して「`Ctrl + Shift + Y`」！
- 日本語 → 英語, 英語→日本語どちらにも対応

# 前置き

プログラミング中に英語の意味を知りたい、もしくは変数名考えるのに英語単語を知りたいといったことがよくあります。
今まではGoogle Chromeで[Google翻訳](https://translate.google.com/)を開いて調べるってやっていました。
今回非常に便利なプラグインを知ったので、インストール～使い方を紹介します。

# インストール～使い方

## インストール

1. PhpStormを起動して、設定を開きます（`Ctrl + Alt + S`, or メニュー： `File > Settings...`)
2. 左のメニューから、`Plugins`を選択 ※下記画像内の①
3. `Marketplace`タブを選択　※下記画像内の②
4. 「`translation`」を入力して検索　※下記画像内の③
4. 「Install」ボタンを押すとインストールが開始され、完了すると「Restart IDE」というボタンに代わります。　※下記画像内の④
5. そのまま「Restart IDE」ボタンを押してIDEを再起動

![111.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87995/1a25f319-1dd8-bc81-4bf5-4947a945f928.png)

![2222.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87995/77401ca5-a4f9-7f8c-ed11-9751ff4c2352.png)

## 使い方

知りたい単語にカーソルを合わせて `Ctrl + Shift + Y`(マウス右クリック→`Translate`)
文をまとめて翻訳する場合は、文を選択してから`Ctrl + Shift + Y`

`camelCate`, `StudlyCaps`, `under_score`で書かれたものは、スペース区切り単語で翻訳にかけてくれます。

### 動作デモ

![Jp_En.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87995/4098be8d-6d0e-44a9-1aa3-7c158de08b49.gif)
svn使い方メモ

自分用メモ。書きかけ

# svn checkout
git clone相当

```bash
$ svn checkout https://svn.ruby-lang.org/repos/ruby/trunk ruby
```

# svn update
git pull相当

```bash
$ svn update
```

# svn info
git show相当

```bash
$ svn info
```

# svn log
git log相当

```bash
$ svn log -l 5
```

# svn revert
git reset --hard HEAD相当

```
svn revert --recursive .
```

# svnlook
このコマンドはsvnリポジトリをホストしているサーバーでしか実行できない。

```bash
$ svnlook log /var/svn/repos/ruby -r XXXXX
$ svnlook info /var/svn/repos/ruby -r XXXXX
$ svnlook dirs-changed /var/svn/repos/ruby -r XXXXX
$ svnlook changed /var/svn/repos/ruby -r XXXXX
$ svnlook diff /var/svn/repos/ruby -r XXXXX
$ svnlook cat /var/svn/repos/ruby -r XXXXX <file>
```
CentOS7にPostgres9.5インストール＆設定

しようとしていて
https://qiita.com/SOJO/items/a1d97887d24c3e44596f
を見つけたのですが
なんかこちらと環境が違うし
とりあえずやった事とエラーメッセージを書いて
後学のために役立てるっ(๑•̀ㅁ•́๑)✧

現状（何かいじって【最下部に表記】）リスタートしても

```
[root@localhost ~]# systemctl restart postgresql-9.5
Job for postgresql-9.5.service failed because the control process exited with error code. See "systemctl status postgresql-9.5.service" and "journalctl -xe" for details.
```
とエラーが出たのでステータスを見てみると

```
[root@localhost ~]# systemctl status postgresql-9.5
● postgresql-9.5.service - PostgreSQL 9.5 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-9.5.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 金 2019-04-19 09:46:06 JST; 12min ago
     Docs: https://www.postgresql.org/docs/9.5/static/
  Process: 32816 ExecStop=/usr/pgsql-9.5/bin/pg_ctl stop -D ${PGDATA} -s -m fast (code=exited, status=0/SUCCESS)
  Process: 33172 ExecStart=/usr/pgsql-9.5/bin/pg_ctl start -D ${PGDATA} -s -w -t 300 (code=exited, status=1/FAILURE)
  Process: 33167 ExecStartPre=/usr/pgsql-9.5/bin/postgresql95-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 32098 (code=exited, status=0/SUCCESS)

 4月 19 09:46:05 localhost.localdomain systemd[1]: Starting PostgreSQL 9.5 database server...
 4月 19 09:46:05 localhost.localdomain pg_ctl[33172]: < 2019-04-19 09:46:05.897 JST >LOG:  ログ出力をログ収集プロセスにリダイレクトしています
 4月 19 09:46:05 localhost.localdomain pg_ctl[33172]: < 2019-04-19 09:46:05.897 JST >ヒント:  ここからのログ出力はディレクトリ"pg_log"に現れます。
 4月 19 09:46:06 localhost.localdomain systemd[1]: postgresql-9.5.service: control process exited, code=exited status=1
 4月 19 09:46:06 localhost.localdomain systemd[1]: Failed to start PostgreSQL 9.5 database server.
 4月 19 09:46:06 localhost.localdomain systemd[1]: Unit postgresql-9.5.service entered failed state.
 4月 19 09:46:06 localhost.localdomain systemd[1]: postgresql-9.5.service failed.
```
となってうまく動作出来ない模様……

後出しっぽいけど初めに設定した事と言えば

```
yum -y install postgresql95-server postgresql95-devel postgresql95-contrib
/usr/pgsql-9.5/bin/postgresql95-setup initdb　　（初期設定）
systemctl enable postgresql-9.5
systemctl start postgresql-9.5　　　　　　　　　（postgresqlの起動設定）

firewall-cmd --permanent --add-service=postgresql（postgresqlを許可）
firewall-cmd --permanent --add-port=15432/tcp　　（ポート15432を許可）
firewall-cmd --reload　　　　　　　　　　　　　　（パラメータのリロード）
firewall-cmd --list-all　　　　　　　　　　　　　（確認）
systemctl restart firewalld 　　　　　　　　　　 （FWの再起動）
```

vi /var/lib/pgsql/9.5/data/pg_hba.conf

```
#
listen_addresses = '*'
port=15432
timezone='UTC'
#
host all all 0.0.0.0/0 trust
```
ってやったつもりです……

また初めからインストールして確認しようかな……
カスタム投稿詳細のページネーション 


「次の記事へ」、「前の記事へ」を表示させる
`previous_post _link()`と`next_post_link()`
ですが、カスタム投稿タイプのsingleページで何も表示されずにいろいろ調べていました。

##自分が記述したコード
```
<?php next_post_link('%link', '<span class="r">« 次の記事へ</span>', TRUE); ?>
```

##singleページで動くコード
```
<?php next_post_link('%link', '<span class="r">« 次の記事へ</span>'); ?>
```

TRUEを消せば動きました！！
numpyの2次元リストから1次元リストを検索し、行番号を取得する

numpyで2次元リストから1次元リストそのものを検索し、行番号を取得する。

```python:
import numpy as np

a=np.random.randint(0,2,(10,2))
b=np.random.randint(0,2,2)
c=np.where(np.all(a==b,axis=1))
print('a={}'.format(a))
print('b={}'.format(b))
print('c={}'.format(c[0]))
```
こんな感じで出力される。

```python:
a=[[0 1]
 [0 1]
 [0 1]
 [1 1]
 [0 0]
 [1 1]
 [0 0]
 [0 0]
 [0 0]
 [1 0]]
b=[1 0]
c=[9]

```
Pycharm 2019.1 でフォントがちらつくのをなんとかする

Pycharm を 2019.1 にアップグレードしてから、フォントの太さがコロコロ変わって、非常にみずらい画面になってしまいました。

環境は masOS Mojave です。

調べてみると、次のページに回避策が書いてありました。

https://youtrack.jetbrains.com/issue/JBR-1348

### 回避策

JDK 8 に切り替えるか、
`defaults write -g CGFontRenderingFontSmoothingDisabled -bool Yes`
を端末で実行する。

`defaults ...` のコマンドは Mac の設定を変更するのであまりやりたくないので、JDK8 に切り替える方をやってみます。


### 手順

- JB SDK Bintray Downloader プラグインをインストールする

![capture 2019-04-19 9.33.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788/01a3a77c-1af3-bfd6-bcd1-3288b49fcb08.png)

- IDE を再起動
- Cmd + Shift + A で Action を検索
- get jb sdk と入力して、Enter キーを押す

![capture 2019-04-19 9.36.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788/36c948d2-7732-f56d-caec-26b4ac219fee.png)

- インストールするバージョンを指定
  - JDK8 で一番新しそうなものを選択

![capture 2019-04-19 9.38.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788/c8626c22-850a-a01c-2d8e-996d55cf615d.png)

- Download をクリック
- 完了したら Install をクリック
- 再起動のメッセージが出るので再起動する

僕の場合は、上記の対策でちらつきが止まりました。