OmniAICreator/Qiita-1.07M huggingface dataset:
PassengerでRailsを起動する時のRAILS_ENVの設定方法


amazon linux の場合


httpd.confのVirtualHost部分に`RailsEnv development`を追加する

```
vim /etc/httpd/conf/httpd.conf 
```

```
<VirtualHost *>
        RailsEnv development 
</VirtualHost>
```

アパッチを再起動して、反映。

```
service httpd restart
```

### 参考サイト

[[rails][ruby]開発環境でPassengerを使うには](http://d.hatena.ne.jp/conceal-rs/20080731/1217463575)
[PassengerでRuby On Railsアプリを公開するまで](https://qiita.com/tporange/items/9ab8ec21cbe4b0b29379)
TestCafe のヘッドレスブラウザからファイルを自動ダウンロードさせる方法

# 概要

Webアプリの自動テストツール [TestCafe](https://github.com/DevExpress/testcafe) にはビルトインで chrome ブラウザが付属していますが、headless モードでブラウザを起動するとファイルのダウンロードのテストが正しく動作しない問題に遭遇します。
本記事ではファイルのダウンロードを行うための方法について記載します。

# 対処方法

## 1. CDPポートの指定

chrome の起動時のオプションから [Chrome Debugging Protocol](https://devexpress.github.io/testcafe/documentation/using-testcafe/common-concepts/browsers/using-chrome-device-emulation.html#emulator-parameters) のポートを指定します。

```
chromium:headless:cdpPort=9222 --no-sandbox
```

ちなみに、ポートを指定しない場合は空いているポートが自動で割り当てられてしまうため、ポートの指定は必須となります。

## 2. ダウンロードの許可と保存先パスの指定

以下のようにテストケース内で [Page.setDownloadBehavior](https://chromedevtools.github.io/devtools-protocol/tot/Page#method-setDownloadBehavior) の `behavior` を `allow` に変更して `downloadPath` へダウンロードするファイルの保存先パスを指定することで、ファイルを自動ダウンロードさせることができます。

```
const CDP = require('chrome-remote-interface');

fixture`ファイルをダウンロードするテスト`
    .page`about:blank`;

test('ZIPファイルのダウンロード', async t => {
    const client = await CDP();
    const { Network, Page } = client;
    
    await Promise.all([
        Network.enable(),
        Page.enable()
    ]);
    
    await Page.setDownloadBehavior({
        behavior: 'allow',
        downloadPath: '/tmp'
    });

    await t
        .click(Selector('summary.btn-primary'))
        .click(Selector('a[href="/DevExpress/testcafe/archive/master.zip"]'));
});
```

このテストケースを実行すると、ダウンロードのボタンをクリックしたタイミングで `master.zip` が `/tmp` へ自動でダウンロードされます。
OS X Mojave で Postgresql.app の psqlコンソールが開かなかった件


# 概要

Mojave にアップデートしたら、Postgresql.app から psqlコンソールが開かなくなりました。
プライバシー設定のアクセシビリティを許可してあげたら、なおりました。

# 現象

いつも通りゾウさんから psglのコンソールを開こうとしたら、こんなエラーが出て開けませんでした。

```
The operation couldn't be completed.
(com.postgresapp.Postgres2.ClientLauncher error 0.)
```

![error0.png](https://qiita-image-store.s3.amazonaws.com/0/45711/11400e37-53f2-e95d-5861-ae0418c6015e.png "error0.png")


# 解決した方法

ぐぐってみたところ、こんな Issue を発見。
https://github.com/PostgresApp/PostgresApp/issues/471

システム設定のプライバシー設定でなにかを許可してあげれば良さげな感じです。

システム設定 -> セキュリティとプライバシー -> プライバシー と開いてみたところ、「アクセシビリティ」の項目に Postgres がいました。

「アクセシビリティ」のヘルプを見ると「Mac を制御するスクリプトやシステムコマンドを実行するアプリケーションが表示されます。Mac の制御を禁止したいアプリケーションの選択を解除してください。」とのことです。

Postgresql から Terminal を開くことが、スクリプトやシステムコマンドを実行するに相当している模様です。

![system_profile_privacy.png](https://qiita-image-store.s3.amazonaws.com/0/45711/ec7466fe-a3db-bf67-d625-1aa2398623ab.png "system_profile_privacy.png")


Postgresql を許可してあげて、無事、コンソールが開けるようになりました。
vimエディタでカーソルキー（矢印）が使えない場合


互換モードがオンになっている場合に，カーソルキーが使えない。
これは古いviエディタに対する互換性のことである。
古いviエディタは，挿入モードのときにカーソルキーが使えなかった。
h, j, k, lで移動していたためである。

そこで，ホームディレクトリに.vimrcファイルを作成して，以下の設定を書き込む。

```bash
echo "set nocompatible" >> ~/.vimrc
```

```txt:.vimrc
set nocompatible
```
Markdownでの資料作成とPDF変換をオンラインで

メモ程度ですが、誰かの参考になれば幸いです。

次の要件を実現できる方法を探していました

1. オンラインでmarkdownを書くことができる
2. オンラインでmarkdownをpdfに変換することができる
3. styleはmdファイル内で以下のように指定することができる

```markdown

## 職務経歴書
### 職務要約
- ほげ〜
- ふが〜

<style>.markdown-body { font-size: 11px; margin: 0px; padding: 0px; }</style>
```

VSCodeとか使っちゃった方が圧倒的に楽だと思うのですが、今回は敢えてオンラインツールだけで試しました。

用途としては**職務経歴書の作成**で、**普通に書いてそのままpdf出力すると文字サイズが大きかったり余白が大きかったり**するので、styleで調整する必要がありました。
最初何もstyle指定せずにPDFにしたら、4ページとかになっちゃいました。

[dillinger](https://dillinger.io/)を使えばpdfのプレビューもダウンロードもできるので解決かと思ったのですが、ここだと今回のようなmdファイル内でのstyleの指定はうまく行かなかったので諦めました。

そこでいくつかサービスを比較した結果、

markdownのエディターには以下を、

https://jbt.github.io/markdown-editor/

pdfへの変換には以下を使うことで要件を実現できました。

http://www.mdtr2pdf.com/index_en.html

pdfへの変換ができるサイトは他にもたくさんありますが、**日本語だと文字化け**することがあり、utf-8に対応している上記を使いました。

手順は以下です。

1. [エディタ](https://jbt.github.io/markdown-editor/)で資料を作成する
2. styleはmdファイル内に定義する
3. ページ上部からmdファイルとしてダウンロード
4. ダウンロードしたmdファイルを[ここ](http://www.mdtr2pdf.com/index_en.html)にアップロードしてpdfに変換してダウンロード

私の場合は、完成したmdファイルはGitHubで管理しています。


う〜ん、ダウンロードしてアップロードしてダウンロードして、ラクなんだかメンドウなんだか。。。
Ruby on RailsとVue.js間でのCORS対応の仕方

みなさんこんにちは！
今回が2回目の投稿になります．学生エンジニアの[タクマ](https://twitter.com/TakumaKurosawa)です．
初心者故に誤った情報や不適切な表現が多々あると思います．お手数ではございますが，都度ご指摘いただけると大変嬉しいです．

さて，今回取り上げる内容は，フロントエンドとバックエンドを完全に切り離したい方や，[SPA(シングルページアプリケーション）](https://qiita.com/momoan/items/6b0bcc92ec5ca9de6663)に興味がある方が開発を進める上でぶち当たるのではないかという壁の紹介と乗り越え方を書いていこうと思います．

今回取り上げる内容は，CORS対策です．Webブラウザには他のドメインからアクセスを拒否するという仕様([同一生成元ポリシー](https://developer.mozilla.org/ja/docs/Web/Security/Same-origin_policy))があり，例えばhttp://localhost:3000 にhttp://localhost:8080 などからGETやPOSTのリクエストを投げてもエラーになってしまいます．今回はRailsとVue.js間の通信を例に取って解決法をメモしておこうと思います．

## 今回のケース
- http://localhost:3000/labs/1 には以下のようなJsonデータが置いてある（Ruby on Railsによって実現)

``` lab.json
{
    "id": 1,
    "name": "〇〇研",
    "prefecture": "愛知県",
    "overview": "〇〇"
  }
```
- このJsonデータをhttp://localhost:8080/lab から[axios](https://uiuifree.com/blog/develop/spa-axios-api/)を使用して非同期に読み込む

## 実装したコード（※抜粋）
バックエンド側はCORS対応の部分だけ抜粋してお伝えしますので，データベース等とのやり取りは割愛します．
私自身何時間もCORS対応ができなくて悩んでいまししたが，実はたった数行程度文字列を追加するだけで対応可能です！！

``` config/application.rb
config.action_dispatch.default_headers = {
      'Access-Control-Allow-Credentials' => 'true',
      'Access-Control-Allow-Origin' => 'http://localhost:8080', # アクセス元のURL
      'Access-Control-Request-Method' => '*' # 許可するメソッド（GET,POST,DELETEなど）：'*'は全てのメソッドという意味
    }
```
この文言をRuby on Rails側のapplication.rbというファイルに**コピペするだけ**でOKです． 

フロントエンド側のコードも示しておきます．axiosの使い方などもご確認ください．

``` jsonGet.js

var GET_URL = "http://localhost:3000/labs/1";

  export default {
    el: '#lab',
    name: 'lab',
    data() {
      return {
        json_data: '',
        name: '',
        prefecture: '',
        overview: '',
      }
    },
    created() {
      axios.get(GET_URL)
        .then(response => {
          this.json_data = response.data;
          this.name = response.data.name;
          this.prefecture = response.data.prefecture;
          this.overview = response.data.overview;
        }).catch(err => {
        console.log('err:', err);
      });
```
BitriseでFlutterアプリをビルドする

## はじめに
2019年1月23日にBitrise公式でFlutterがサポートされました。
今までも利用できたみたいですが、公式のstepが利用できるので、今まで以上に簡単になったのではないかと思います。
BitriseでFlutterアプリをDeployGateに公開するまでを試してみたので、メモを残しておきます。

## 事前に用意するもの
- FlutterアプリのGitHubリポジトリ
- Bitriseのアカウント
- DeployGateのアカウント

## Bitriseのappを設定する

[公式ブログ](https://blog.bitrise.io/flutter-ci-on-bitrise-v1)の「Adding a Flutter app to Bitrise」から、GitHubのリポジトリをBitriseのappに追加します。

わかりやすくまとめられているので、スムーズに進められるはずです。
これで、適当なコミットをpushすると自動的にCIが回ってくれるようになります。
ビルドFailedになった場合は、冷静にLogを確認しましょう。
（analyzeとか実行していなかったので、いくつかエラーに引っかかりました:cry:）

## BitriseのWorkflowにDeployGateを追加する
### apkアップロードのstepを追加
- 作成したappのWorkflowsから「deploy」を選択
- 一番下に「DeployGate Upload」を追加
- DeployGate:API KeyにDeployGateアカウントのAPIKeyを追加する
（Select secret variableからKeyを設定するのがいいと思います。）
- DeployGate:Owner NameにDeployGateアカウントの名前を追加する
- App file pathにInsert variableから「$BITRISE_APK_PATH」を追加

### ipaアップロードのstepを追加
- 上で作成したstepを選択し、右上のアイコンから「Clone this step」を選択
- App file pathにInsert variableから「$BITRISE_IPA_PATH」を追加

## iOSのデプロイ設定を行う

これまた[公式サイト](https://flutter.io/docs/deployment/ios)にまとまっているので、手順通りに進める。

## iOSのProvisioning profileなどをBitriseに設定する

最後に要求されるBitriseのAccessTokenはAccountSettingsのSecurityページから生成できます。
また、アップロードされたProvisioningProfileはWorkflowEditorのCodeSigningタブで確認できます。

```
bash -l -c "$(curl -sfL https://raw.githubusercontent.com/bitrise-tools/codesigndoc/master/_scripts/install_wrap-xcode.sh)"
```

## デプロイする

- Bitriseのappから「Start/Schedule a Build」ボタンを押す
- workflowに「deploy」を選択して実行

## まとめ
以上でDeployGateにアプリがアップロードされていることが確認できます。
他のCIツールより簡単に設定できるので、精神的に楽だと思います。

## 参考

https://devcenter.bitrise.io/code-signing/ios-code-signing/collecting-files-with-codesigndoc/
:observer.start()するとERROR: Could not find 'wxe_driver.so'となる場合

asdfでErlangをインストールしている場合に， `observer` を起動すると `Could not find 'wxe_driver.so'` となったときのお話。
今回は，ElixirのIExからobserverを呼んでますが，Erlangから `erl -run observer` と呼んでも同じ感じだと思います。

## 環境
- macOS High Sierra 10.13.6
- MacBook Pro (15-inch, 2018)
- asdf 0.6.2
- Erlang OTP 21
- Elixir 1.7.4

## エラー内容
```Elixir
iex(1)> :observer.start()
[error] ERROR: Could not find 'wxe_driver.so' in: /Users/zumin/.asdf/installs/erlang/21.0/lib/wx-1.8.4/priv

{:error,
 {{:load_driver, 'No driver found'},
  [
    {:wxe_server, :start, 1, [file: 'wxe_server.erl', line: 65]},
    {:wx, :new, 1, [file: 'wx.erl', line: 115]},
    {:observer_wx, :init, 1, [file: 'observer_wx.erl', line: 98]},
    {:wx_object, :init_it, 6, [file: 'wx_object.erl', line: 372]},
    {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 249]}
  ]}}
```

## 解決方法
```zsh
$ brew install wxmac
$ asdf uninstall erlang 21.0
$ asdf install erlang 21.0
```

## 結論
`wxWidgets` がはいってないだけでした。
というわけで， `wxWidgets` を入れてErlangを再インストールしたら解決しました。

[asdf-vm/asdf-erlang](https://github.com/asdf-vm/asdf-erlang#osx) の Before install に `wxmac` 入れるように書いてありますね。 すっかり読み飛ばしてたみたいです。

`brew` から直接Erlangを入れたときは特に問題なかった気がするので， `--with-wxmac` オプションがデフォルトだったりするのかな？
fzfを利用した関数を作るときのテンプレ


# テンプレート

`.bash_profile`などに追記してください。

```bash:bash_profile
function-name() {
  # [get_list_command]にはリストを表示するコマンドを書く
  # e.g.) git branch
  # print以降はスペース区切りで何個目の要素を表示するか
  # 行全体を表示する場合は$0を書く
  local line="$([get_list_command] | fzf --height 40% | awk '{print $1}')"
  if [ -n "${line}" ]; then
    echo 'wait...'
    # [do_command]には選択された行に対して行うコマンドを書く
    # e.g.) git checkout ${line}
    [do_command] ${line}
  fi
}

```

# options

## ヘッダを消したい場合

[get_list_command]の後に `sed -e '1d'`を挟む

```bash:.bash_profile
line="$([get_list_command] | sed -e '1d' | fzf --height 40% | awk '{print $1}')"
```

## 区切り文字を変えたい場合

awkに`-F 'hoge'`を追加する

```
line="$([get_list_command] | fzf --height 40% | awk -F ':' '{print $1}')"
```

# 具体例

## gitのbranchを取得して、選択したブランチをcheckoutする

```bash:.bash_profile
git-checkout() {
  local list="$(git branch | fzf --height 40% | awk '{print $0}')"
  if [ -n "${list}" ]; then
    echo 'wait...'
    git checkout ${list}
  fi
}
```
よく忘れるコマンドの考え方

# 初めに
コマンドの暗記が苦手なのだが、思い出すきっかけのワードを自分メモしておく。
とはいえ、基本は左から右へ「左のものを右に対して行う」というのイメージはある。

関連：[よく忘れるLinuxコマンド](https://qiita.com/asuzuki2008/items/d460981fd4826673afa0)

# パイプ
##基本形

```
cat ファイル | grep 検索文字列 （ここにパイプの前半の結果が隠れている）
```
パイプの前半の結果が、パイプの後半の最終引数になる。


# chmod
##基本形

```
chmod アクセス権の種類 ファイルやディレクトリ
```
アクセス権の変更。
`アクセス権の種類`は3桁の数字で表現オーナー、グループ、その他（everyone的なの）に一桁ずつ割り当てる。

```
754 →　オーナー：7 グループ：5 その他：4
数字は2進数に表すと、3桁の数字となり、その3桁がrwx（読取、書込、実行）に割当たっている。
    rwx
7 → 111
5 → 101
4 → 100
```
権限を変える際に、次の表現も良く使う。

```
実行権限を与える
chmod +x ファイル
読取権限だけにする
chmod =r ファイル
オーナーに実行権限を与える
chmod u+x ファイル
グループに実行権限を与える
chmod g+x ファイル
その他ユーザのすべての権限をはく奪
chmod o-rwx ファイル
```


# chown
##基本形

```
chown ユーザー:グループ ファイル
```
所有者の変更。
グループの指定もいつもセットで変更している感じ。（私は所有者をapacheやnginxにする時に使うので）

# ln
##基本形

```
シンボリックリンク
ln -s ファイル（本体） リンク名

ハードリンク
ln ファイル（本体） リンク名
```
シンボリックリンク／ハードリンクを作成する。
シンボリックリンクはショートカットみたいなもの。
ハードリンクは実体のコピーに近い印象。（ディスク上１つだけど、複数個所からこの実体にアクセスできるようにする　→　複数個所どこから見ても実体なので、ショートカットのような感じではない）


# scp

##基本形

```
scp コピー元 コピー先
```

他のオプションは、上記を補助するもの。
そもそも、`secure cp`ということだから、使いかはほぼ、`cp`と同じであるはず。

# sftp

##基本形
```
sftp アカウント@ホスト名
```

ログインした後、ディレクトリの作成や、`put`コマンドでファイルの配置を行う。
基本的にsftp用のコマンドしか使えないので、`cp`などは使えない。

```
sftp> mkdir file
sftp> mkdir file/to
sftp> mkdir file/to/path
sftp> put -r ./*
```

# ssh

##基本形
```
ssh アカウント@ホスト名
```

言わずもがなだけど、`アカウント@ホスト名`というログイン対象の指定は、`scp`や`sftp`などでよく使われる。
Windows10のCortanaをレジストリで停止する

#Windows10のCortanaをレジストリで停止する

## レジストリエディタを開き対象のレジストリの設定を変更する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/303278/bb62c83c-0b02-0aa8-54a2-4b59fc6161e3.png)

コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows

![image.png](https://qiita-image-store.s3.amazonaws.com/0/303278/b195eeb8-ce26-caa0-48d5-3e63376f1899.png)


『Windows Search』キーに『DWORD(32ビット)値(D)』で『AllowCortana』を作成し、値を『0』にします。
『0』は無効で『1』は有効です。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/303278/3a4e8784-1495-7e88-baa1-64bff4d1e4a7.png)

Windwos を再起動すれば、Cortanaは起動しなくなります。

##　ローカルグループポリシーの設定でCortanaを無効にする。

『　gpedit.msc　』と検索しましょう。gpと入れただけでも出ると思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/303278/7fc6f03e-2d0f-f269-672e-e8ddc1d3258a.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/303278/af39eadb-dc82-dd7a-3ed2-a3f07e187049.png)

コンピューターの構成 -> 管理用テンプレート -> Windowsコンポーネント -> 検索

の中に、「Cortanaを許可する」の設定項目があります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/303278/7e625d66-4883-17e2-caa4-8e579b94a05d.png)

「ポリシーの編集」か、項目をダブルクリックして開きます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/303278/be0ef8a9-2acf-ef78-08ca-646e623572a1.png)

「無効」にします。

これで保存して再起動すれば、ポリシーとして無効になります。
Windows版HadoopでYARNが動かなかったときの対処メモ

## はじめに
Windows版Hadoopを[Youtubeの説明](https://www.youtube.com/watch?v=vLVWrGGqGJU)通りに設定していったはずがYARNがなぜか動かなかったため、対処した内容のメモです。
YARNの実行コマンドは「start-all.cmd」でも「start-yarn.cmd」でもどちらでもいいですが、本記事では入力のしやすさのためallの方で記述しています。

## 環境
OS Windows10(VMware上)
Hadoop 2.9.2
JDK 1.8.0_201

## Resource Managerが動かない
### エラー内容
「start-all.cmd」実行後、Resource Manager窓に以下のエラーが出てResource Managerが停止してしまいました。

```
FATAL resourcemanager.ResourceManager: Error starting ResourceManager
java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/server/timelineservice/collector/TimelineCollectorManager
```
### 解決法
hadoopフォルダにあるshare\hadoop\yarn\timelineserverの中の「hadoop-yarn-server-timelineservice-2.9.2.jar」を一つ上の階層（yarn）に移せばOKでした。

## Node Managerが動かない
### エラー内容
「start-all.cmd」実行後、Node Manager窓に以下のエラーが出てNode Managerが停止してしまいました。

```
ERROR nodemanager.NodeManager: Error starting NodeManager
org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Failed to setup local dir /tmp/hadoop-<USERNAME>/rm-local-dir, which was marked as good.
```

### 解決法
「管理者として実行」したコマンドプロンプトで「start-all.cmd」を実行するとOKでした。

## 参考URL
https://stackoverflow.com/questions/51118358/noclassdeffounderror-org-apache-hadoop-yarn-server-timelineservice-collector-tim
https://issues.apache.org/jira/browse/YARN-3120

## 最後に
Node Managerの方は他にもやりようがあると思いますが、とりあえずこれが一番楽だったのでこうしています。
timelineserviceの方はこれで解決できるのがちょっと納得いかなかったです。
railsでプロジェクトを作成

こんにちは、railsはじめたばかりのものです、
アウトプットのためにはじめたので内容には期待しないでください。
開発環境はcloud9です。


１．まずrailsのインストールです。
awsのコンソールに以下を入力します。rubyドキュメントのインストールで無駄な時間を使わないよう、設定を追加します。

```
$ printf "install: --no-rdoc --no-ri\nupdate:  --no-rdoc --no-ri\n" >> ~/.gemrc
```

続いてrailsのインストールです。

```
$ gem install rails -v 5.1.6
```

-vというオプションはバージョンを指定しています。

railsをインストールできたら

```
$ cd ~/environment
```
でenvironmentディレクトリに移動し、

```
rails new test_app
```
でtest_appという名前のプロジェクトを作成します。
test_appというディレクトリに大量のファイルとディレクトリが作成されます。
circleciでAWSサービスを使ったテストをするには？

boto3がs3のサービスを使うAWSの接続なしでテストしたいですよね？

# motoって？
そこで[moto](https://github.com/spulec/moto)を使ってきました。

（motoからの例）

```python

import boto3
from moto import mock_s3
from mymodule import MyModel


@mock_s3
def test_my_model_save():
    conn = boto3.resource('s3', region_name='us-east-1')
    # We need to create the bucket since this is all in Moto's 'virtual' AWS account
    conn.create_bucket(Bucket='mybucket')

    model_instance = MyModel('steve', 'is awesome')
    model_instance.save()

    body = conn.Object('mybucket', 'steve').get()['Body'].read().decode("utf-8")

    assert body == b'is awesome'
```

Decoratorだけで、サービスがモックされていて、シンプルでテスト書けますね。motoもs3だけじなくて、多くのサービスをサポートしています。


# localstackって？
しかし、一昨年ぐらいから、[localstack](https://github.com/localstack/localstack) というmotoなどのパッケージをまとまって、完全にサーバとして動かせるAWS仮想環境が提供されてきました。

一応、motoも”Server Mode" (moto_server)がありますが、localstackのいいところは、docker imageを提供しています。大きな差がないのですが、個人的に開発環境に必要なmock（moto）をインストールしなくて済むことは多少すっきり感がします。

ただし、当然ですが、localstackのdockerを立ち上げるだけではすまないですね。現状のコードに工夫が必要になります。

いろいろな方法はあるかと思いますが、このように使っています：
(実際のコードですね。テストコードじゃない)

```python
import os
import boto3

# reference: 
# https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html
DEFAULT_BOTO3_S3_ENDPOINT = 'https://s3.ap-northeast-1.amazonaws.com'
BOTO3_S3_ENDPOINT = os.getenv('BOTO3_S3_ENDPOINT', DEFAULT_BOTO3_S3_ENDPOINT)
s3 = boto3.client('s3', endpoint_url=BOTO3_S3_ENDPOINT)

... 

```

リジョンを跨ぐとめんどうだろうけど、これでロカールでテストしたい場合、`BOTO3_S3_ENDPOINT`の環境変数を指定だけでは済みます。

```
export BOTO3_S3_ENDPOINT=http://localhost:4572
```

これでこのようにlocalstackが起動されているなら、テストを実行して、AWSと同様にロカールで各サービスを使えます。

```bash
docker run --name development-localstack -d --rm -p 4567-4578:4567-4578 -p 8080:8080 localstack/localstack
```

# circleciって？

circleciはCI環境で、そこにもAWSのようにテスト使いたいですよね。
そこでlocalstackでの導入が難しいかなと思ったんですが、以外とらくでした。

まず、dockerの定義配下で`localstack/localstack`のイメージを定義します。

（開発中のDjangoプロジェクトを一部を例として）

```yaml

version: 2

jobs:
  build:
    working_directory: ~/erwin/
    docker:
      - image: circleci/python:3.6.5
        environment:
          PIPENV_VENV_IN_PROJECT: true
          DJANGO_SETTINGS_MODULE: myproject.settings.circleci
      - image: mdillon/postgis:9.6
        environment:
          POSTGRES_USER: circleci
          POSTGRES_DB: circle_test
      - image: localstack/localstack <---ここ！！！
...
```

次は、circleciのプロジェクト設定で、コード内で定義した環境変数をEnvironment Variables(環境変数)へ登録します。

```
BOTO3_S3_ENDPOINT=http://localhost:4572
```

以上

ポートどうなっているかなと思ったんですが、postgres/postgisのポート設定もないと気が付き、localstackも特別なポート設定なしで、プロジェクトのテストが無事にAWSの代わりにlocalstackを通信していて、テストが通りました。

嬉しい。

motoを使うかlocalstackを使うか正直にあまり変わらないですが、localstackでいいのかな？

次は、これをためしてみようかな:

- [pytest-localstack](https://pytest-localstack.readthedocs.io/en/latest/)
vue.js スワイプでタブを切り替え

# 仕様

・スワイプでタブを切り替え
・タブに応じてURLを切り替え
・前回のタブを自動的に読み込む


# ライブラリ

・vue2-touch-events
・element ui


```

<template>
    <el-tabs v-model="editableTabsValue">
        <el-tab-pane
                v-for="(item, index) in editableTabs"
                v-touch:swipe="swipeTab"
                :key="item.name"
                :label="item.title"
                :name="item.name"
        >
            {{item.content}}
        </el-tab-pane>
    </el-tabs>
</template>
<script>
    export default {
        data() {
            return {
                editableTabsValue: '1',//初期選択タブ
                editableTabs: [{
                    title: 'Tab 1',
                    name: '1',
                    content: 'Tab 1 content'
                }, {
                    title: 'Tab 2',
                    name: '2',
                    content: 'Tab 2 content'
                }, {
                    title: 'Tab 3',
                    name: '3',
                    content: 'Tab 3 content'
                }
                ],
                tabIndex: 3
            }
        },


        //前回のタブを選択
        created() {

            if(this.$route.query.tab_id) {
                this.editableTabsValue = this.$route.query.tab_id;
            }else{
                this.editableTabsValue = 1 + '';
            }

        },

        methods: {


            //スワイプしてタブを切り替え
            swipeTab(discription) {
                // muki //right or left


                if(discription == 'left'){
                    if(this.editableTabsValue == this.tabIndex){
                        this.editableTabsValue = 1 + '';
                    } else {
                        this.editableTabsValue = ++this.editableTabsValue + '';
                    }
                } else if (discription == 'right') {
                    if(this.editableTabsValue == 1){
                        this.editableTabsValue = this.tabIndex + '';
                    } else {
                        this.editableTabsValue = --this.editableTabsValue + '';
                    }
                }

            }
        },

        watch : {

            //タブが切り替わったら ルーティングをこれにする
            'editableTabsValue':function(val) { //监听切换状态-计划单
                let url = '/layout/?tab_id=' + val;
                this.$router.push(url);
            },
        }
    }
</script>


```
NavigationController - 戻るボタンを制御する

NavigationControllerで画面遷移すると戻るボタンは自動で表示されるのですが
これを制御することができずに時間がかかりました。

# 対処
自身で再度設定して、そのボタンに対して制御を行いました。

```swift

    private let disposeBag = DisposeBag()

    private var leftBarButtonItem: UIBarButtonItem =  {
        let item = UIBarButtonItem(image: , style: .plain, target: nil, action: nil)
        item.rx.tap
             .subscribe(onNext: { [weak self] _ in
                 // ここ(popViewControllerの前)に実行したい処理を書く
                 self?.navigationController?.popViewController(animated: true)
            }).disposed(by: disposeBag)
         return item
     }()


    override public func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.leftBarButtonItem = leftBarButtonItem
    }

```
PythonでGoogle Tasks APIを叩く

# はじめに
最近、家のことのto-do管理に、Google Tasksってサービスを使ってる。シンプルでいい感じなので。Google Homeから、追加できるとうれしいけれど、今のところ連携していない（はず）。自分で作ってみようかなと思い、とりあえず、Tasks APIをPythonから使ってみることにした。OAuth2.0がなんなのか、よくわからない状態で始めて、少しだけわかった気もした。GoogleのGUIDESに従って進めただけだけど、日本語の情報があまりなかったので、投稿することにした。

# 試したこと
あんまり、まとまらなかったので、やった順番に書く。

## #1
これにしたがって、進めてみる。
[Overview  |  Tasks API  |  Google Developers](https://developers.google.com/tasks/)

## #2
ここを読んでくと、APIs Explorerってのがあることを知る。
[Ways to Get Started with Tasks API  |  Tasks API  |  Google Developers](https://developers.google.com/tasks/get_started)


こんな感じで、使いたいAPIを気軽に試せる。自分のやりたいことがほんとにできるのか、すぐ確かめられるのがいい感じ。
[Google APIs Explorer](https://developers.google.com/apis-explorer/#s/tasks/v1/)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/184221/b129bb2a-dc7c-3036-625e-ae29481b574f.png)

例えば、こんな感じで表示される。
`All Versions > Tasks API v1 > tasks.tasklists.list`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184221/3f4bdc5b-b6b7-48a4-71c2-092eaddb5124.png)


ちなみに、idってのが重要で、tasklistのtasksを見たいときは、tasklistのidを調べてから、それでgetする感じ。

## #3
このあと、ここにしたがって、projectを作って、ぽちぽちした。
[Write your First App: Prerequisites  |  Tasks API  |  Google Developers](https://developers.google.com/tasks/firstapp)

## #4
まずは、Simple APIってのでやろうと思ったけど、なぜかうまくいかなかった。
Loginしろとか言われる。わからん。

```
curl https://www.googleapis.com/tasks/v1/users/@me/lists?key={my API}
{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Login Required",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "Login Required"
 }
}
```

## #5
あきらめて、OAuth 2.0ってのを少し勉強した。多少、分かった気になった。検索したのを、ちょっと読んだだけやけども。

## #6
Pythonで試した。すんなりいった。そのまんま動いた。OAuth 2.0知らんくても大丈夫そうやった。
`credentials.json`ってのにproject idとかいろいろ書かれてるのでうまいことやってくれてるみたい。必要になったら、ちゃんと仕組み調べよう。

[Python Quickstart  |  Tasks API  |  Google Developers](https://developers.google.com/tasks/quickstart/python)

こんな感じの結果が出て来る。

```
$ python quickstart.py 
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?
Task lists:
すること (id1)
アイデア (id2)
```

## #7
あとは、Referenceみながら、やってくか。
[API Reference  |  Tasks API  |  Google Developers](https://developers.google.com/tasks/v1/reference/)

# 所感
Googleさん、ドキュメントすばらしい。
ただ、なんで、Google Homeというか、Google Assistantは、Tasksに対応してないんやろう。ショッピングリストいらんから、Tasksに対応してほしい。
3分で導入できる MongoDB データ可視化ツール mongo-express

こんにちは。Rails勉強中の [@koshi_life](https://twitter.com/koshi_life) です。

MongoDBを永続化DBとて採用している案件に携わる機会があり、
データ内容の可視化、実装時の各種確認のため、 [mongo-express](https://github.com/mongo-express/mongo-express) を使ってみたので、調べた範囲で使い方、できること、感想をまとめる。

## ツールを選定にあたり参考にした記事

- [MongoのGUIツールはmongo-express一択だった](http://38ch.hateblo.jp/entry/2017/01/30/230649)
- ツールのスクショはこちら参照 https://imgur.com/a/9vHsF

要件的には可視化できればよかったので、
こちらを参考に類似ツールについては調査せず導入した。

### 試した環境について

- OS: macOS HighSierra
- node.js: v8.10.0
- MongoDB: v4.0.4 (ローカルで稼働中)

## Install

最新版をソースから導入した。 
2019/01/28時点では　`v0.51.1`

```
$ git install https://github.com/mongo-express/mongo-express.git
$ cd mongo-express
$ npm install
$ node app
No custom config.js found, loading config.default.js
Welcome to mongo-express
------------------------


Mongo Express server listening at http://localhost:8081
basicAuth credentials are "admin:pass", it is recommended you change this in your config.js!
Database connected
Connected to local...
```

<img width="６００" alt="local.png" src="https://qiita-image-store.s3.amazonaws.com/0/51734/97431ecb-b085-5dc3-4e49-5a79fefe5f92.png">

http://localhost:8081/ でサービスが立ち上がる。
デフォルトのBasic認証のID/Passは `admin` `pass` だそうだ。
既存のデータベースはこの時点では見れない。



手っ取り早くデータの中身を見たい場合は、
環境引数 `ME_CONFIG_MONGODB_AUTH_DATABASE`　に中身を見たいデータベースを指定するよい。 `testdb` を見る例

```
$ env ME_CONFIG_MONGODB_AUTH_DATABASE=testdb node app
```

## 設定ファイルについて

デフォルトの設定ファイルがあるのでコピーして独自設定を行うことができる。
コピーして作成する。　
MongoDBのホスト指定とか、デフォルト起動で操作対象データベースもこちらで指定が可能。

```
$ cp config.default.js config.js
```

### 変更例: Basic認証のパスワードを変えたい場合


```config.js
module.exports = {
  mongodb: {
    //... 略 ...
    basicAuth: {
      username: process.env.ME_CONFIG_BASICAUTH_USERNAME || 'koshikawa',
      password: process.env.ME_CONFIG_BASICAUTH_PASSWORD || 'koshikawa-pass',
    },
    //... 略 ...
```

## まとめ

導入はとても簡単だった。
UIも直感的に使えるのでとても開発する上で重宝している。

まだ設定ファイルの中身など理解度が追いついていないが、デフォルトで指定できるデータベースを複数見たいやり方など調べたら加筆したい。
Speech bubbleの画像が表示されない件

# 問題

WordPressのプラグイン **Speech bubble** は便利ですが、アイコン画像の表示ができなかった。

# 解決

Speech bubbleで利用する画像の参照先を、普通にアップロードした場合の保存先である
`/DocumentRoot/wp-content/uploads`
だとずっと考えていたのですが、
`/DocumentRoot/wp-content/plugins/speech-bubble/img`
を参照してたと言う。

ただそれだけ。

```
cd /DocumentRoot/wp-content/uploads
cp student500x500.png ../plugins/speech-bubble/img/
```


![スクリーンショット 2019-01-28 15.23.54.png](https://qiita-image-store.s3.amazonaws.com/0/71365/399b975e-ae46-7121-d14b-b5e091d4689c.png)

ちゃんと参照できれば表示されました。
インフラって難しそう…と避け続けためちゃよわプログラマが、克服のために頑張ってサーバを構築してみた。DBサーバ編

# はじめに

こんにちは、めちゃよわプログラマの[@_am](https://qiita.com/_am)です。
前回はWebAPサーバの構築をまとめました。
[インフラって難しそう…と避け続けためちゃよわプログラマが、克服のために頑張ってサーバを構築してみた。WebAPサーバ編 - Qiita](https://qiita.com/_hanairo/items/c0a1a558cbab2d6fa92c)


# 構築イメージ
![img.JPG](https://qiita-image-store.s3.amazonaws.com/0/298536/4640fc9f-65c1-1e7f-d9ee-84f3b2963b67.jpeg)

この記事では、DBサーバの構築を書き留めます。
![img_db.jpg](https://qiita-image-store.s3.amazonaws.com/0/298536/4e54b8d0-367a-5676-12f3-b01f090db404.jpeg)

# 環境
今回も、AWSのEC2で構築しました。
OS：Red Hat Enterprise Linux 7

今回はセキュリティゾーンに5432を設定しています。
必要な場合は、適宜設定を行います。

これから準備するもの…
・PostgreSQL

**※バージョンは2019年1月時点のものです。適切なものを使います。**

# 環境構築
## その前に
WebAPサーバ構築時同様、パスを知りたい場合はfindコマンドで検索しました。
本文の中では、詳細パスは記載せず [インストールしたパス] で統一します。
また、root権限が必要なコマンドもありましたが、その際はsudoで実行しました。
（今回は記載は省きます。）

## PostgreSQL
### インストール
```
$ yum -y install postgresql11-server
```

### データベース初期化
```
$ インストールしたパス/postgresql-11-setup initdb
```

### PostgreSQLを起動

```
$ systemctl start postgresql-11
```

### 状態を確認
ActiveだったらOK

```
$ systemctl status postgresql-11
```

### おまけ：自動起動の設定
```
$ systemctl enable postgresql-11
```

### postgresユーザのパスワード設定

PostgreSQLをインストールするとLinuxのユーザとして「postgres」というユーザが追加される。
※初期状態はパスワードなし

ユーザ切り替え

```
$ su - postgres
```

パスワードを聞かれたらそのままEnter

※もしパスワード違いなどでログインできなかったら、新しいパスワードを設定する

```
$ sudo passwd postgres
```

### postgresql.confを修正

```
$ vi インストールしたパス/postgresql.conf
```
開いたら、**CONNECTIONS AND AUTHENTICATION** を以下のように設定する

```
'#listen_address = 'localhost'

↓↓↓↓

listen_address = '*'
（#も外す）
```

### pg_hba.confを修正

```
$ vi インストールしたパス/pg_hba.conf
```

pg_hba.confの最後らへんのエリア（IPアドレスなどが書いてあるところ）の **"local" is for Unix domain socket connections only**に、以下を追加する

```
host all all 接続元（webAPサーバなど）のプライベートIP/32 trust
```

### PostgreSQLを再起動する

```
$ systemctl restart postgres-11
```

## ファイアウォール

### ポート5432を追加

```
$ firewall-cmd --add-port=5432/tcp --zone=public --permanent
```

※ firewalld not foundの場合はfirewalldコマンドをインストールする

```
$ yum -y install firewalld
```

### 再起動

```
$ systemctl restart firewalld
```

### 自動起動の設定

```
$ systemctl enable firewalld
```

### 確認

```
sudo firewall-cmd --list-all

ports: 5432/tcp ←追加されていればOK
```

## おわり
無事にWebAPサーバとDBサーバを構築して、Javaアプリケーションを動かすことができました！

インフラって難しそう…と避け続けましたが、実際に手を動かしてみると成功したときの嬉しさはプログラミングと同じだな～と感じました。ほんの少しだけですが、自信もつきました！

また何かきっかけがあれば投稿してみたいと思います:blush:
ホストごとに色が変わるプロンプト

作業しているホストごとにプロンプトの色が変わったら、作業ミスも無くなりそうで便利ですよね。

そんな方は↓を `bashrc` にペタッと、どうぞ。

CentOS系で確認しているので、Ubuntu系とかで動かなかったらすみません。


```bash
##### For git completion and prompt ###########################################

GIT_PROMPT="$(find /usr/share/doc/ -type f -name git-prompt.sh 2> /dev/null | head -1)"
if [ -n "$GIT_PROMPT" ]; then
  source "$GIT_PROMPT"
fi

GIT_COMPLETION="$(find /usr/share/doc/ -type f -name git-completion.bash 2> /dev/null | head -1)"
if [ -n "$GIT_COMPLETION" ]; then
  source "$GIT_COMPLETION"
fi

# Unstaged (*) and staged (+) changes will be shown next to the branch name
GIT_PS1_SHOWDIRTYSTATE=true

# A "<" indicates you are behind, ">" indicates you are ahead,
# "<>" indicates you have diverged and "=" indicates that there is no difference.
GIT_PS1_SHOWUPSTREAM=auto

# If there're untracked files, then a '%' will be shown next to the branch name.
GIT_PS1_SHOWUNTRACKEDFILES=true

# If something is stashed, then a '$' will be shown next to the branch name.
GIT_PS1_SHOWSTASHSTATE=true

##### Set prompt ##############################################################

# Defined Colors
RED="\033[38;2;255;84;88m"
GREEN="\033[38;2;98;209;150m"
#YELLOW="\033[38;2;255;179;120m"
#BLUE="\033[38;2;101;178;255m"
#MAGENTA="\033[38;2;144;108;255m"
#CYAN="\033[38;2;99;242;241m"
CLEAR_COLOR="\033[0m"

# Hostname hash
HMD5="$(hostname | md5sum)"
PROMPT_RGB="$(printf "%d;%d;%d" 0x${HMD5:0:2} 0x${HMD5:2:2} 0x${HMD5:4:2})"
PROMPT_COLOR="\033[38;2;${PROMPT_RGB}m"
GIT_PROMPT_RGB="$(printf "%d;%d;%d" 0x${HMD5:6:2} 0x${HMD5:8:2} 0x${HMD5:10:2})"
GIT_PROMPT_COLOR="\033[38;2;${GIT_PROMPT_RGB}m"

# Set prompt
case ${UID} in
0)
  PS1="\[${RED}\]\${?##0}\[${PROMPT_COLOR}\][\u@\h \W]\[${GIT_PROMPT_COLOR}\]\$(__git_ps1)\[${RED}\]\\$\[${CLEAR_COLOR}\] "
  ;;
*)
  PS1="\[${RED}\]\${?##0}\[${PROMPT_COLOR}\][\u@\h \W]\[${GIT_PROMPT_COLOR}\]\$(__git_ps1)\[${GREEN}\]\\$\[${CLEAR_COLOR}\] "
  ;;
esac
```

前半部分は、gitを使っている方がいたら、ブランチ名とかがプロンプトに表示されるというところで、gitを使っていない方は無視してもらえれば良いかと思いますー。

色を変える、みそは後半のこのあたりです。

```bash
# Hostname hash
HMD5="$(hostname | md5sum)"
PROMPT_RGB="$(printf "%d;%d;%d" 0x${HMD5:0:2} 0x${HMD5:2:2} 0x${HMD5:4:2})"
PROMPT_COLOR="\033[38;2;${PROMPT_RGB}m"
```

これだと、完全にランダムな感じの色になるので、せめて青系には、したいという方がいたら、

```bash
PROMPT_RGB="$(printf "%d;%d;255" 0x${HMD5:0:2} 0x${HMD5:2:2})"
```

こんな感じで、青だけ 255 固定とかにしたらよいかもです。

追伸：

`Defined Colors`のところは私の趣味なので、 `RED` じゃねぇぞごるぁー、とかはなしでおねがいします。
nginxでPOSTメソッドのリダイレクトを行う

アプリ側でやればいいじゃん、という話は無し。
保守とかで出番がありそうなので、備忘録。

## 前提条件
```sh:terminal
% sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.2
BuildVersion:	18C54

% brew --version
Homebrew 1.9.2
Homebrew/homebrew-core (git revision 77b54; last commit 2019-01-21)
Homebrew/homebrew-cask (git revision 44e62; last commit 2019-01-22)
```

## nginxでPOSTをリダイレクトする設定
```nginx:default.conf
server {
    listen       80;
    server_name  _;
    root  /var/www/html;
    charset utf-8;

    location / {
        index  index.php;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # '/hoge' を '/test/test.php' で置き換える
    location ~^/hoge$ {
        return 307 http://localhost:8080/test/test.php?$args;
    }

    location ~ [^/]\.php(/|$) {
        root           /var/www/html;
        fastcgi_pass   php7:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
```

## 解説・補足
### HTTP 307 Temporary Redirect
307はメソッド本文を変更しないことが保証されるので、POSTのリダイレクトが実現します。

### `$args`
POSTなのにGETのようなパラメタがついている場合に渡すことができます。

### IPで制御
[ifは使うべきではない](http://mogile.web.fc2.com/nginx_wiki/start/topics/depth/ifisevil/)ですが、先のをIPで振り分ける場合。

```nginx:default.conf
    # '/hoge' を '/test/test.php' で置き換える
    location ~^/hoge$ {
        if ($remote_addr = "172.0.0.1") {
            return 307 http://localhost:8080/test/test.php?$args;
        }
    }
```

## 雑感
良くないと書いてあっても。不可能では無いので試しにやってみました。
アプリ側で制御できれば禁じ手のような対処をせずに済むので、そういう話に持っていくことがベストでしょうか。。。
Ubuntuに最新のGolangをインストールする

#Ubuntuに最新のGolangをインストールする
備忘録も兼ねて
(Ubuntu 14.04 / 16.04 / 18.04 / 20.04.01 / 22で確認済み)

### 追記録
2019/10/05 Ubuntu 18.04確認済みの旨追記
2020/12/21 Ubuntu 20.04.01LTS(64bit)確認済みの旨追記
2022/07/26 Ubuntu 22.04LTS(64bit)確認済みの旨追記

#### コメント
備忘録すぎて半年に一回くらい自分も参照しています

### 1. 公式のパッケージを取得する
https://golang.org/dl/  から、Linux用のtar.gzのURLをコピーする。 
(2022/07/26時点では `https://go.dev/dl/go1.18.4.linux-amd64.tar.gz` )
```
$ wget https://go.dev/dl/go1.18.4.linux-amd64.tar.gz
```

### 2. 展開して配置する
```
$ sudo tar -C /usr/local -xzf go1.18.4.linux-amd64.tar.gz
```

### 3. goコマンドのパスを通す
```
$ export PATH=$PATH:/usr/local/go/bin
```

### 4. goコマンド確認
```
$ ubuntu@hogetan~$ go version
go version go1.18.4 linux/amd64
```

### 5. shell再起動
```
$ exec $SHELL -l
```

### 6. 再度goコマンド確認(パスが通っていれば使える)
```
$ ubuntu@hogetan~$ go version
go version go1.18.4 linux/amd64
```
Rで、年月の数値データから月次のパネルデータを作る方法

お世話になっております。
Rで、年月の数値データから月次のパネルデータを作る方法を教えて頂きたく投稿します。

手元に以下のようなデータがあります。

ID　開始年月　　終了年月
A　2010/4/1　2015/4/1
B　1999/4/1　2008/4/1

これを以下のような形に変換したいと考えています。

A　2010/4/1
A　2010/5/1
A　2010/6/1
A　2010/7/1
…　　…（略）
A　2014/12/1
A　2015/1/1
A　2015/2/1
A　2015/3/1
A　2015/4/1
B　1999/4/1
B　1999/5/1
B　1999/6/1
…　　…（略）
B　2008/3/1
B　2008/4/1

IDの数が膨大なため、Rで処理したいと考えています。

ご教示いただけますと幸いです。
よろしくお願いいたします。
駆け出しエンジニアのUI設計をちょっと公開してみる

#<b>デザインでアプリを使いやすくしよう！</b>

##①真似したい画面UIを探す！
→まずはデザインで参考にしたいアプリを探してみましょう！
###Mobile Design Inspiration
●モダンデザインを中心的に紹介してるサイト
https://inspirationmobile.tumblr.com/
<img width="1500" alt="スクリーンショット 2019-01-28 13.15.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/302458/8eb21776-849c-18c5-d129-d42fbaac1c5c.png">

###Pinterest
●LPなどの制作のときに欠かせない超有名サービス 
https://www.pinterest.jp/pin/253609022752112669/
<img width="1602" alt="スクリーンショット 2019-01-28 13.21.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/302458/80102cc4-db5d-e685-34c5-5be26e87daaf.png">

<b><他にもまとめてくれた便利な記事を参考してサイトからインスピレーションを貰おう！></b>
>こんな僕でもおしゃれなiOSアプリを閃く！インスピレーションを掻き立てるアプリデザインの参考サイト集1！
https://qiita.com/appwatcher/items/26f43ae8627474f34f31
>アプリのUIデザインと配色パターンまとめ（非デザイナー向け）
https://qiita.com/ShinChan/items/97849eed07a8d750a2cb



##②見やすい配色を使おう！
→視覚に大きく影響を与える色はデザインにおいて大変重要です。見やすい色の配色を提示してくれるサービスを使い倒しましょう！

###Adobe Color CC 
(https://color.adobe.com/ja/explore/?filter=most-popular&time=month)
<img width="1200" alt="スクリーンショット 2019-01-28 13.37.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/302458/f609423c-3e60-d3bf-0d61-333ecbfe8b07.png">


##③Adobe XDを使ってデザインを完成させよう！
→開発に入る前にちょっと待った！頭の中で描いてるアプリと実際作ってみるアプリが全然違うことがあるので、XDを使ってデザインを作ってみましょう！

###使い方参考
https://helpx.adobe.com/jp/xd/tutorials.html

###ポイント！
ボタンをタップした際の遷移画面なども完成させておくと、後々悩まずに開発できるのでおすすめです！
<img width="1680" alt="スクリーンショット 2019-01-28 13.44.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/302458/dda0543b-d477-199c-7391-2b4717ee23fb.png">


##追記① : 決めた色をXcodeに反映させる方法

###①Adobe Color CCのページに移動する(画像通りに進んで行く)

<img width="1256" alt="スクリーンショット 2019-01-28 13.37.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/302458/295eb8f4-89e1-19fb-7043-abdaa9448f7f.png">


<img width="1677" alt="スクリーンショット 2019-01-28 13.37.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/302458/81fea627-fa46-c841-3498-695f76690609.png">
####重要：<b>HEX</b>の値をコピ-して控える！！

###②Xcodeを開く（画像通りに進める）
<img width="1680" alt="スクリーンショット 2019-01-28 14.14.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/302458/42f0492d-76f8-9141-ffd6-4fc1f7672f24.png">


<img width="1680" alt="スクリーンショット 2019-01-28 14.14.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/302458/6857ab5b-1528-1530-c4fc-a912fca5797d.png">

####重要：控えた<b>HEX</b>の値をペーストする！！
####完成！



##追記② : 便利なライブラリーを使いこなそう！

>iOSの開発でお気に入りのライブラリN選
https://qiita.com/u651601f/items/08500df9246a6c208241

>iOSでこんなアプリ,こんな機能を作りたかったらこれを見ろ！作りたいアプリに対応するクラス、フレームワーク、ライブラリのまとめ！
https://qiita.com/appwatcher/items/b02255026a3ee6d95142
Enumに定義してあるDisplay属性を表示する。リソースファイルがある場合、リソースから取得する拡張メソッド

Enumに定義してあるDisplay属性を表示する。リソースファイルがある場合、リソースから取得する拡張メソッド

ただ単にNameから取得すると、リソースファイルがある場合正しく取得できない。
Display属性が定義してある場合、リソースの値を返す。

とりあえず、ソース。

``` EnumExtentions.cs
    public static class EnumExtentions
    {
        /// <summary>
        /// Enumに定義してあるDisplay属性を表示する。リソースファイルがある場合、リソースから取得
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string DisplayName(this Enum value)
        {
            //Enumに存在しない値の場合、空文字を返す
            if (!Enum.IsDefined(value.GetType(), value))
            {
                return "";
            }

            var fieldInfo = value.GetType().GetField(value.ToString());

            if (fieldInfo.GetCustomAttributes(typeof(DisplayAttribute), false)?.FirstOrDefault() is DisplayAttribute attribute)
            {
                //Display属性が定義してある場合、リソースの値を返す
                var nameProperty = attribute.ResourceType.GetProperty(attribute.Name,
                                           BindingFlags.Static | BindingFlags.Public);
                var name = nameProperty.GetValue(nameProperty.DeclaringType, null) as string;
                return name ?? attribute.Name;
            }
            else
            {
                //Display属性が定義していなかった場合、Enumの名称を返す
                return value.ToString();
            }

        }
    }
```
GetOldTweets-pythonではできないこと(2019年1月時点)

# 経緯
* 研究で使う必要ができたため
* twitter APIを使ったtweetを取得するには制約が多い。研究ではつかいづらいなと思ったところ
[GetOldTweets-python で遊んでみる](https://qiita.com/haniokasai/items/2b906285fad55f9f1fea#_reference-41ce7282e223d08b3a51)のqiitaの記事を発見し研究に応用してみたいなと思ったのが経緯です。
* 今回利用するものはJefferson-HenriqueさんのGetOldTweets-pythonを利用します。  

※現状の問題点をまとめる

---

#　GetOldTweets-pythonの問題点
* python3系では現在（2019年1月時点）安定して動作しない
* 非公開アカウントを公開アカウントに変更しても非公開時のツイートは取得できない

---

##　python3系では現在（2019年1月時点）安定して動作しない

```python
import got3 as got
username = input("username>")#指定したユーザ名を基にツイートを取得
number = int(input("number>"))#最新から何件までを取得
#ツイート取得
tweetCriteria = got.manager.TweetCriteria().setUsername(username).setMaxTweets(number)
tweet = got.manager.TweetManager.getTweets(tweetCriteria)

with open('tweet/'+username+'.txt','a') as f:
    for v in tweet:
        f.write(v.text+ "\n")
        print(v.text)
```
上記のプログラムを実行し200件のツイートを取得しようと試みたが、最新20件のデータが繰り返し取得されてしまった。
原因がわからず[stakoverflow](https://ja.stackoverflow.com/questions/50633/getoldtweets-python%E3%81%A720%E4%BB%B6%E4%BB%A5%E4%B8%8A%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84)に投げかけた結果、python3系はまだ安定してないよと回答をいただきました。
なのでpython2系を使いましょう

---

## 非公開アカウントを公開アカウントに変更しても非公開時のツイートは取得できない

```python
import got as got
username = input("username>")#指定したユーザ名を基にツイートを取得
number = int(input("number>"))#最新から何件までを取得
#ツイート取得
tweetCriteria = got.manager.TweetCriteria().setUsername(username).setMaxTweets(number)
tweet = got.manager.TweetManager.getTweets(tweetCriteria)

with open('tweet/'+username+'.txt','a') as f:
    for v in tweet:
        f.write(v.text+ "\n")
        print(v.text)
```
上記のプログラムを実行し200件のツイートを取得しようと試みたが、公開アカウント時のツイートのみが取得されてしまった。
twitterAPIを使ったことがないのでなんとも言えないが、ここはAPIの方が利便性が高いかもしれない。時間があったら調査します。
【VirtualBox】ホストオンリーアダプタでのインターネット接続

#ホストオンリーアダプタでのインターネット接続

通常、ホストオンリーアダプタを使うと、ホストと仮想マシンの間のみ接続ができ、
仮想マシンからはインターネットに接続できません。

NAT＋ホストオンリーアダプタですと可能になりますが、
ホストオンリーアダプタのみでインターネット接続を可能にできます。
仮想マシンへ外部からの接続が不要な場合はこれで十分な気もします。

# 環境
ホスト： Windows10
仮想マシン：　何でも

# インターネット接続共有
「インターネット接続の共有」という機能で実現できます。

# 設定方法
1. コントロール パネル -> ネットワークとインターネット -> ネットワーク接続 を開きます。
1. ホストのインターネット接続のデバイスを右クリック -> プロパティで開きます。
1. 「共有」タブを開いて、「接続を許可する」にチェックをして対象のホストオンリーアダプタを選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/108113/b852c2a3-636a-21a8-9f8e-1cfa029c8a7a.png)

# ホストオンリーアダプタ情報の確認
1. VirtualBoxマネージャー を起動します。
2. 「グローバルツール」-> 「ホストネットワークマネージャー」を選択します。
3. 対象のアダプタ名を選択すると情報が表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/108113/380174d5-dc78-ef8d-43af-b857b4c72dcc.png)

# 設定続き
1. 仮想マシンにてIPアドレスの設定
2. 例
	1. IP:192.168.137.2
	2. GW:192.168.137.1
3. ネットにつないでみる

# 接続できない場合がたまにあります
もし接続できない場合があれば、「インターネット接続の共有」をチェックし直すと
接続できるようになることがあるようです。


以上、お疲れ様でした！
最小限の労力でRailsとWordPressの統合

Railsで作成しているアプリにWordPressのブログを統合してみたのでその時の話を書きます。
RailsアプリとWordPressは別サーバで可動させており、サブドメインで完全に分離していたのですがこれを一緒にしようというコンセプトです。
もともとはRailsのアプリにブログエンジンくっつけるならヘッドレスCMSで有名なButterCMSが簡単なのでそれを検討していたのですがいろいろ問題があり、この案は没になりました。

- もともとWordPressで作ったブログが有り、移植するならButterCMSにそれなりに課金する必要がある
- ButterCMSは掲載記事数で月額費用が変わるが、現行のブログは1000記事近くあるので月額にして3万ほど取られそう
- WordPressで使っているプラグインはいくつかあるが、それらはButterCMSでは引き継がれずすべて自作する必要がある（PolyLangなど）

こんな感じなのでだったら最初から自分でRails上でなんとか作れないかと考えたところ、思い浮かんだのがWordPressのREST APIで連携して記事をDB保存してRails側で表示するというもの。

ちなみにREST APIとはこんなようなイメージです。
`(Your Website)/wp-json/wp/v2/posts`

![rest.png](https://qiita-image-store.s3.amazonaws.com/0/1593/49d0d90a-7d68-6bc1-763e-9a17e3e018c4.png)

ただ、これだとAuthor（著者）とか細かい情報は取得できません。細かい情報を出すには
`?_embed` みたいなパラメータを付ける必要があります。更に弊社のブログには言語対応もしているのでその情報も付加すると
`?_embed&lang=31`
のようなパラメータになります。意外とそのまま使っているだけでは細かいデータは取得できないようになっています。
それでも歴史や利用者の多いWordPressにはこういったことへの対応方法がきちんと用意されています。
【参考】WordPressのREST APIにAll in One SEOの項目を追加する方法
https://qiita.com/hardreggaecafe/items/4b3a0b351e708b15c5aa

また、弊社サイトはMySQLを使っているのですがデフォルトのDB設定ではWordPressで作成した記事を丸ごとDBに挿入できませんでした。パケットサイズのエラーというものになりました。

```
ActiveRecord::StatementInvalid: Mysql2::Error: The size of BLOB/TEXT data inserted in one transaction is greater than 10% of redo log size. Increase the redo log size using innodb_log_file_size.
```


これを回避するためDBのmy.cnf（AWSのRDSではパラメータグループ）の

```
max_allowed_packet=256MB
innodb_buffer_pool_size = 1000M
innodb_log_file_size = 1000M
```

を修正。普通にDB格納ができるようにしました。

これらを駆使してなんとかできたサイトがこちら。
![Gavy Setagaya   Kamimachi Anti Aging with Soymilk and Yakuzen  Do Try.png](https://qiita-image-store.s3.amazonaws.com/0/1593/a27cfed9-466a-f3d3-a3a4-9fa1e66e4f1a.png)
Bashメジャーバージョンアップで何が変わった？

# Bashメジャーバージョンアップで何が変わった？

Bashが2019年1月7日にメジャーバージョンアップ(5.0)されました。

bash4.0 RC1が2009年1月12日なので10年ぶりのメジャーバージョンアップ。

と言うか10年以上も現役なんて凄いですねw



[Bash 5.0 released](https://lwn.net/Articles/776223/)を見るとbugfixと新機能の追加です。

主な変更点は、

・nameref変数に関するbugfix

・最も注目すべき新機能は、いくつかの新しいシェル変数です。BASH_ARGV0、EPOCHSECONDS、およびEPOCHREALTIME。

・historyは、履歴を範囲指定して削除することができるようになりました。



bash-4.4とbash-5.0の間に互換性のない変更がいくつかあります。

となっていますが、nameref変数の解決方法に限った内容だそうです。



## 新機能

[Bash 5.0 released](https://lwn.net/Articles/776223/)から最新版をダウンロードし、解凍しNEWSを読んでみました。



### 新しく追加された変数



・BASH_ARGV0

説明：$0と同様みたいです。

私見：同じ機能なら、あまり追加機能としてどうなのかと・・・w



・EPOCHSECONDS

説明：UNIX時間の秒数

私見：`date`コマンドにUNIX時間を出力するオプションがあるので・・・。



・EPOCHREALTIME。

説明：UNIX時間のマイクロ秒数

私見：マイクロ秒まで使うことってスクリプトだと少ないかと・・・。



### history範囲指定削除

説明：コマンド履歴を範囲指定で削除できるようです。

私見：そもそも、削除する必要って・・・。



### その他

・ビルトインコマンドであるwaitが`-f`オプション

説明：`-f`オプションを付けることで、ちゃんと待てるようになった。

私見：今まで待てなかったんだ・・・。



・umask

説明：umaskが今まで3桁だったのが4桁まで対応できるようになった。

私見：4桁まで対応できるようになれば、今までいちいち修正していたところをdefaultで設定されるので、少し嬉しいかも・・・。



・Readline

説明：Readline系も変わったみたい。キーバインドで`next-screen-line`と`previous-screen-line`が追加され、Insertキーで上書き出来るようになった。

「Ctrl」+「↓」で次の画面に移動、「Ctrl」+「↑」で前の画面に移動。

私見：ページ移動が簡単になったのでこれは使いそうですね。



## 私見
bugfixは別としても、メジャーバージョンアップにしては、新機能があまりに使える機能がないかと。

マイナーバージョンアップでもよかったような気がするのは私だけでしょうか。
DockerでNuxt.jsの環境構築

# 概要

今回は、ローカルの環境を汚さないようにdocker上でNuxt.jsの環境構築を行います。

# 環境
- macOS High Sierra 10.13.6

```terminal:terminal
% docker -v
Docker version 18.09.0, build 4d60db4

% docker-compose -v
docker-compose version 1.23.2, build 1110ad01
```

# Dockerのインストール

https://hub.docker.com/editions/community/docker-ce-desktop-mac

# Nuxt.jsの環境構築


まずは、作成するアプリケーションのディレクトリへ移動し、
Docker関連のファイルを作成します。

```terminal:terminal
$ cd /path/to/MyApp
$ touch Dockerfile docker-compose.yml
```

## Dockerfile
```
$ vim Dockerfile
```

```Dockerfile:Dockerfile
FROM node:8.15.0-alpine

WORKDIR /app

RUN apk update && \
    npm install -g npm && \
    npm install -g @vue/cli && \
    npm install -g @vue/cli-init

ENV HOST 0.0.0.0
EXPOSE 3000

CMD ["/bin/ash"]
```

### docker-compose.yml

```yaml:docker-compose.yml
version: '3'
services:
  web:
    build: .
    ports:
      - 3002:3000
    volumes:
      - .:/app
    stdin_open: true
    tty: true
```


## ビルド,コンテナの生成

```terminal:terminal
$ docker-compose build
$ docker-compose up -d
```

## コンテナ内でNuxtアプリケーションの作成

下記のコマンドでコンテナ内に入ることができます。

```terminal:temrinal
$ docker-compose exec web /bin/ash
```

`vue init`コマンドでプロジェクトを作成することができます。
今回は
- https://github.com/nuxt-community/starter-template
こちらをテンプレートに使用します。

```terminal:コンテナ内
/app # vue init nuxt-community/starter-template my-nuxt-app
```

とりあえず以下の質問はEnterで大丈夫です！

```
? Project name my-nuxt-app
? Project description Nuxt.js project
? Author 
```
## サーバの起動

Nuxt.jsアプリケーションを作成することができたので
サーバの起動をしてみます。

```:コンテナ内
/app # cd my-nuxt-app/
/app/my-nuxt-app # npm install
/app/my-nuxt-app # npm run dev
```

アクセス!

http://localhost:3002

以下の画面が表示が確認できるとOKです。

![スクリーンショット 2019-01-28 11.19.50.png](https://qiita-image-store.s3.amazonaws.com/0/260131/5ed86e5f-c594-6b29-216e-0cd526dbe597.png)



# 参考文献
- [Nuxt.js はじめました。プロジェクト作成で 5 つの方法を試した。](https://qiita.com/high-u/items/1d2e91e97495ac90d10c)
- [Nuxt.jsビギナーズガイド - amazon](https://www.amazon.co.jp/dp/B07J5434JB/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
VSCode　上手く動かなくなった (Command not found)

# VSCode　上手く動かなくなった (Command not found)時の対応
- 現象
    - VScode使っていたら enter コマンドが効かなくなった
    - 右下に Command not found のエラーがでる
- やったこと
    - VScodeをアンインストールしたり、再インストールした⇒ダメ
    - 拡張機能の問題かと思って無効しする
        - Markdown All In One を無効にすると Command not foundは解消
    - 機能拡張　Markdown All In One　は便利なので使いたい。。
    - でも有効にすると、Enterが使えない。
- 対策
    - 完全アンインストールできてないのでは？！
    - 調べてみるとアプリをアンインストールしても
    - 以下に設定が残ってしまうようだ
        - c:\User\[ユーザ名]\AppData\Roaming\Code\User\settings.json 
        - c:\User\[ユーザ名]\.vscode\extensions\ 
        - 上がユーザ設定
        - 下が拡張機能
    - アプリのアンインストール⇒上記のフォルダを削除⇒再インストールでOK
【IBM Cloudメモ】IBM Cloudの課金情報をコマンドラインで取得する

# はじめに
IBM Cloudの課金情報をコマンドから取得できることをつい先ほど知りました。
その手順のメモをアップします。

# 前提 
Python (動作確認は3.6)
bxコマンド (0.13.1) 
gitコマンド (オプション)


# 導入手順
深く調べればもっといい方法があるかもしれませんが、取り急ぎ

[pyBill - fetch IBM Cloud billing and usage information](https://github.com/data-henrik/pyBill)

のコードをダウンロードして使うのが簡単そうです。私のPCは上の条件を満たしているのですが、次のコマンドであっという間に使えるようになりました。

```
$ git clone https://github.com/data-henrik/pyBill.git
$ cd pyBill
```

# 利用方法

上記サイトのReadmeにあるとおりです。一応コマンド例を転記しておきます。

* 2018年12月のインスタンス単位の課金を画面表示する  
 
```
$ python ./pyBill.py -riu -print -m 2018-12
```

* 2018年12月のインスタンス単位の課金をcsv出力する(リダイレクトすればファイル出力)  
  
```
$ python ./pyBill.py -riu -csv -m 2018-12
```


* 2018年12月のリソースグループ単位の課金を画面出力する  

```
$ python ./pyBill.py -rgu -print  -m 2018-12
```

(備考)リソースグループ単位のCSV出力はできない仕様のようです。データ構造が複雑なため??


# 解説
一応簡単にコードの解説をしておきます。  
このツールのミソは、API呼出しで必要な認証情報を``~/.bluemix/config.json``から読み取っている点にあります。
その部分のコードを抜き出すと以下の形になります。


```py3
with open(homedir+'/.bluemix/config.json') as data_file:
  credentials = json.load(data_file)
iam_token = credentials.get('IAMToken')
api_endpoint = credentials.get('APIEndpoint')
account_id=credentials.get('Account').get('GUID')
resourceGroupID=credentials.get('ResourceGroup').get('GUID')
```

``iam_token``, ``api_endpoint``, ``account_id``, ``resourceGroupID``の4つの値を読み取っていることがわかります。
逆にいうと、この4つの変数をマニュアルで設定する形にすれば、bxコマンドがない環境でもこのシェルは動作するものと思われます。

# 追記
ibmcloudコマンドが導入済みであれば、下記のコマンドを発行する方法が一番簡単なようです。


```
$ ibmcloud billing resource-instances-usage --json
$ ibmcloud billing  account-usage --json
```

# 参考リンク
[IBM Cloud: How to access the API for billing and usage?](https://stackoverflow.com/questions/52333121/ibm-cloud-how-to-access-the-api-for-billing-and-usage)