OmniAICreator/Qiita-1.07M huggingface dataset:
android abd shell で Permission denied がでて見れないざます

android開発していた必ず一度はハマっことがあるのではないでしょうか？

abd shellで /data/dataとcdするとそのあとなにもできない。

```
./adb shell
generic_x86:/ $ cd /data
generic_x86:/data $ cd data
generic_x86:/data/data $ ls
ls: .: Permission denied
1|generic_x86:/data/data $
```

そんなときはこれ

```
1|generic_x86:/data/data $ run-as (パッケージ名)
generic_x86:/data/data/(パッケージ名) $ ls
cache code_cache databases files shared_prefs
```

見れた。よかったよかった。。


---

パッケージ名はMainActivitiyの一番上の

```
package xxxxxxx
```

または
android manifestの

```
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxxxx">
```

ここら辺をみればわかります。 ※xxxxxのぶぶんですね。
だいたい。 `com.example.システム名`　とかになってんじゃないですかね？

例）
package="com.example.hoge" なら、コマンドは
run-as com.example.hoge ですね。


では。
kintoneで処理中にスピナーを表示してみた


# やること
新規作成画面を開いたときに別アプリのレコード件数をフィールドにセットします。
その処理中にスピナーを表示します。
![be290868c2d3c2c60b7e994d060326e1.gif](https://qiita-image-store.s3.amazonaws.com/0/102790/986bdc0c-a156-577b-12b9-f8e3e1dfcf8a.gif)

# JavaScript/CSS設定
以下の通り設定します。

1. [kintone-spinner](https://github.com/goqoo-on-kintone/kintone-spinner)をダウンロードしてdist配下のkintone-spinner.min.jsをアップロードして追加
2. https://kintone.github.io/kintoneUtility/kintoneUtility.min.jsをURL指定で追加
3. 以下のコードをアップロードして追加

```js
(function() {
    'use strict';

    kintone.events.on(['app.record.create.show'], (event) => {
        const spinner = new Spinner();
        document.body.appendChild(spinner.render());

        spinner.show();
        kintoneUtility.rest.getAllRecordsByQuery({
            app: 1222,
            query: 'date = LAST_MONTH()'
        }).then(function(response) {
            var record = kintone.app.record.get();
            record.record.count.value = response.records.length;
            kintone.app.record.set(record);
        }).catch(function(error) {
            console.log(error);
        }).finally(function() {
            spinner.hide();
        });

        return event;
    });

})();
```

# 備考
レコード取得にkintone Utilityを利用しているのでkintoneUtility.min.jsを指定しています。
app.record.create.showイベントはPromise対応していないので、kintone.app.record.set()を利用しています。
.NET Coreコンソールアプリのコンテナ化について手法図示

#はじめに
.Net coreのコンソールアプリをコンテナ化しようといろいろ調べたんですが

+ [.NET Coreでコンソールアプリを配置する](https://www.buildinsider.net/language/dotnetcore/04)
+ [.NET CoreコンソールアプリケーションをDockerで動かす方法](https://kagasu.hatenablog.com/entry/2019/01/16/100853)
+ [チュートリアル: NET Core アプリのコンテナー化](https://docs.microsoft.com/ja-jp/dotnet/core/docker/build-docker-netcore-container)

自分的にイメージしにくかったので図示してみます。

#図
![image.png](https://qiita-image-store.s3.amazonaws.com/0/109302/474052a7-9da7-7686-c5ab-d7e36c6e610e.png)

## ①ベースイメージ取得
[Docker Hub](https://hub.docker.com/)からベースとなるイメージを取得してくる。
SDKやらRuntimeやらいろいろある。

```docker:例えばsdk2.1
docker pull mcr.microsoft.com/dotnet/core/sdk:2.1
```

## ②コンテナを起動して中に入る
```docker:GitHubからソースコードを取得する想定
docker run -itd --name tmp mcr.microsoft.com/dotnet/core/sdk:2.1 /bin/bash
docker exec -it tmp /bin/bash
```

共有フォルダからソースコードを取得しようと思ったら--mountで設定必要

## ③.net coreソースコード取得
```shell:例えば.NetCoreのサンプルアプリのソースコードを取得
mkdir -p /src; cd $_
git clone https://github.com/dotnet/core.git
cd core/samples/helloworld
```
## ④dotnet publishでdll作成
```shell
mkdir /helloworld
dotnet publish -c Release -o /helloworld
```

```
dotnet /helloworld/helloworld.dll
```
で実行可能な状況になる。
配置には

+ フレームワークに依存する展開（Framework-dependent deployment、FDD）
+ 自己完結型の展開（Self-contained deployment、SFD）

があるらしい。
コンソールアプリを外部から呼びやすくする方法として[.NET Core CLI を使用して .NET Core グローバル ツールを作成する](https://docs.microsoft.com/ja-jp/dotnet/core/tools/global-tools-how-to-create)とかも。

## ⑤ docker commitでimage化
コンテナから抜け出てから

```docker
docker commit tmp helloworld
```

とするとmcr.microsoft.com/dotnet/core/sdk:2.1をベースとしたhelloworld.dllが実行可能なhelloworldというイメージが新たに出来上がる。
tmpは②で指定したコンテナ名。helloworldはイメージ名。

#DockerFile
こんなことを毎回手動ではやってられないのでDockerFileで自動化する。
解説はいきなりDockerFileの記述から始まるので根本的なところがわからなかった。

```dockerfile:dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:2.1
WORKDIR /src
RUN git clone https://github.com/dotnet/core.git
WORKDIR core/samples/helloworld
RUN mkdir /helloworld
RUN dotnet publish -c Release -o /helloworld
ENTRYPOINT ["dotnet", "/helloworld/helloworld.dll"]
```

上記ファイルがある場所で

```docker
docker build -t helloworld .
```
を実行すればイメージが出来上がる。

```docker
docker run helloworld
```
で
Hello World!
が出力される。

#イメージの配置
+ 実行環境でdocker build
+ 出来上がったイメージを実行環境にエクスポート

とかすれば使えるようになるはず。


#参考
+ [Dockerfile リファレンス](http://docs.docker.jp/engine/reference/builder.html)
+ [dotnet publish](https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-publish?tabs=netcore21)
+ [【図解】Dockerの全体像を理解する -前編-](https://qiita.com/kotaro-dr/items/b1024c7d200a75b992fc#%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%8B%E3%82%89%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E4%BD%9C%E6%88%90)
[学習用]Rails5にてCarrierWaveでサムネイル画像と最大画像と拡張子の制限をしたアプリを作る

![画像アップアプリ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132580/89828e81-2ed6-25c6-414f-0ad039e7b2a8.jpeg)
※Bootstrap入れて調整したもの。

スムーズにうまく行ったのでメモ。

```
Ralis5
Ubuntu16
```

# GemFileに追加する
```Gemfile
gem 'carrierwave'
gem 'mini_magick'
```

# コマンド入力
```
$ bundle
$ rails g scaffold upload image:string content:text name:string
$ rails g uploader images
$ rails db:migrate
```

# 必要事項の追記
## Scaffoldで作ったuploadのmodelsに追記
```app/models/upload.rb
class Upload < ApplicationRecord
  mount_uploader :image, ImagesUploader
end
```

## CarrierWaveのファイルに追加
```app/uploaders/images_uploader.rb
class ImagesUploader < CarrierWave::Uploader::Base
  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
  include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  storage :file
  # storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # 許可する画像の拡張子
  def extension_whitelist
    %w(jpg jpeg gif png)
  end

  # サムネイル画像
  version :thumb do
    process resize_to_fill: [80, 80]
  end

  # Maxサイズ
  version :content do
    process resize_to_limit: [640, 640]
  end
end
```

# Viewsファイルを修正・追加
## _horm.html.erb
```app/views/uploads/_horm.html.erb
  <div class="field">
    <%= form.label :image %>
    <%= form.file_field :image %>
  </div>

```

## show.html.erb
```app/views/uploads/show.html.erb
<%= image_tag @upload.image_url(:content) if @upload.image.present? %>
```

## index.html.erb
```app/views/uploads/index.html.erb
<table>
  <thead>
    <tr>
      <th>Image</th>
      <th>Content</th>
      <th>Name</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @uploads.each do |upload| %>
      <tr>
        <td>
          <%= image_tag upload.image_url(:thumb) if upload.image.present? %>
        </td>
        <td><%= upload.content %></td>
        <td><%= upload.name %></td>
        <td><%= link_to 'Show', upload %></td>
        <td><%= link_to 'Edit', edit_upload_path(upload) %></td>
        <td><%= link_to 'Destroy', upload, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>
```

これで画像のサムネイル投稿、最大サイズの制限、投稿拡張子の制限ができる。

##サムネイルには
ImageMagick が必要なのでサーバーに入れてない場合は入れる。

## 画像にリンクをつける
```app/views/uploads/index.html.erb
          <%= link_to (image_tag upload.image_url(:thumb) if upload.image.present?), upload %>

```
または

```app/views/uploads/index.html.erb
          <%= link_to upload do %>
            <%= image_tag upload.image_url(:thumb) if upload.image.present? %>
          <% end %>
```

##サムネイル画像
![imges1.jpg](https://qiita-image-store.s3.amazonaws.com/0/132580/f9efbafa-b3c1-9b20-d3b2-e6f779b3560d.jpeg)
完成直後のアプリ

##詳細ページの最大画像
![image2.jpg](https://qiita-image-store.s3.amazonaws.com/0/132580/e4687e89-0db1-d94a-07cf-0204242bdea3.jpeg)
完成直後のアプリ
AWS ECRにdockerイメージを登録

# ECRとは
Amazon Elastic Container Registry (ECR) は、完全マネージド型の [Docker](https://aws.amazon.com/docker/) コンテナレジストリです。このレジストリを使うと、開発者は Docker コンテナイメージを簡単に保存、管理、デプロイできます。

# ECRにレポジトリを作成
以下のコマンドでECRにレポジトリを作成します。

```bash
$ aws ecr create-repository --repository-name sample-aws-batch-repo
```

# ECRにログイン
以下のコマンドを実行すると、ECRにログインします。

```bash
$ aws ecr get-login --no-include-email --region ap-northeast-1 --profile ExampleProfile
```
作成したdocker imageに、以下のようにしてtagを付けます。

```bash
$ docker tag sample-aws-batch:latest xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sample-aws-batch-repo:latest
```

ECRにpushします。

```bash
$ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sample-aws-batch-repo:latest
```


参考：[AWSのECR] (https://aws.amazon.com/jp/ecr/)
android PreferenceFragmentCompatのEditTextPreferenceを改行させないようにする方法

なかなか調べても出てこなかったので、
EditTextPreferenceで改行ができてしまい、すこし操作性が悪かったので
改行をできなくするようにする方法です。

というよりはDialogで呼ばれるEditTextのレイアウトを指定する方法です。

preferences.xml

```xml
<EditTextPreference
      android:dialogLayout="@xml/prefernce_custom_edittext"
      android:key="userName"
      android:title="ユーザー名" />
```

android:dialogLayoutを設定します。



prefernce_custom_edittext.xml

```xml 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@android:id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="18dp"
        android:paddingRight="18dp"
        android:inputType="text|textNoSuggestions" />

</LinearLayout>
```

これで普段扱っているように自由にカスタマイズできます。

<img width="314" alt="スクリーンショット 2019-04-11 14.24.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/344266/ba722908-d952-e7b9-def8-8f60a0c7e59e.png">


改行できない！よかったよかった！
foliumを使ったGPXリーダ

#!/usr/bin/env python
# coding: utf-8

# In[ ]:


import folium


# In[ ]:


import gpxpy


# In[1]:


import gpxpy.gpx


# In[2]:


import argparse
parser = argparse.ArgumentParser()
parser.add_argument("compare_file1")
parser.add_argument("compare_file2")
args=parser.parse_args()


# In[ ]:


locations1=[]
locations2=[]


# In[ ]:


gpx_file_r = open(args.compare_file1, 'r')
gpx=gpxpy.parse(gpx_file_r)
for track in gpx.tracks:
    for segment in track.segments:
        for point in segment.points:
            locations1.append([point.latitude,point.longitude])
gpx_file_r.close()


# In[ ]:


gpx_file_r = open(args.compare_file2, 'r')
gpx=gpxpy.parse(gpx_file_r)
for track in gpx.tracks:
    for segment in track.segments:
        for point in segment.points:
            locations2.append([point.latitude,point.longitude])
gpx_file_r.close()


# In[ ]:


if args.compare_file1 == args.compare_file2:
    line2_color="red"
else:
    line2_color="blue"

line1 = folium.PolyLine(locations=locations1,color = "red" )
line2 = folium.PolyLine(locations=locations2,color = line2_color )


# In[ ]:


map = folium.Map(location=locations1[0],
                   tiles='https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png',
                   attr='国土地理院 電子国土基本図',
                   zoom_start=14)
map.add_tile_layer(tiles='https://cyberjapandata.gsi.go.jp/xyz/airphoto/{z}/{x}/{y}.png',name="airphoto",attr='国土地理院 航空写真')


# In[ ]:


map.add_child(line1)
map.add_child(line2)
map.add_child(folium.LatLngPopup())


# In[ ]:


folium.LayerControl().add_to(map)
map.save('map.html')


# In[ ]:
iterm2 with fish の「これだけはやっておけ」的な設定メモ

たまたま会社のmacを何度もセットアップする機会があって、いつもiterm2の設定を忘れるのでメモ。

完成形
---

こんな感じ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31037/175f395f-ac89-cce5-89a1-04ffdfef3230.png)


- ホットキーで表示/非表示を切り替え
- 透過フルスクリーンで表示
- manを元にコマンドラインオプションがサジェストされる
- おしゃれな色合い
- 見やすいフォント
- 文字大き目なのは好みです

設定
---

### 全画面表示にする

iTerm2 > Preferences... > Profiles > Window から

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31037/acf2c9b0-3e45-4870-25b9-4ffb6b84eab3.png)

Style: fullscreen
Screen: Screen with Cursor
Space: All spaces

(2021.1.13追記)
久しぶりに設定してみたら以下も設定しないといけなかった。

iTerm2 > Preferences... > General > Window から

`Native full screen windows`のチェックを外す

### 背景を透過する

iTerm2 > Preferences... > Profiles > Window から

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31037/b9399468-1dd0-4f20-a212-334237246a5c.png)

Transparency を適当に右にスライド
Keep background colors opaque にチェック

### ショートカットを設定

iTerm2 > Preferences... > Keys > Hotkey から

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31037/bb0de058-e38e-5979-e6a6-44d78ab60563.png)

Show/hide all windows with a system-wide hotkey にチェック
Hotkey: クリックすると"Recording..."になるので任意のキーを押して設定する

ここで一回 iTerm2 を再起動。再起動しないと Show はできても、 Hide が効きません。

### カラースキーマを設定

以下のリポジトリから任意の .itermcolors ファイルをダウンロードする。iTerm2用のスキーマファイルは`schemes`ディレクトリ以下にあります。

https://github.com/mbadolato/iTerm2-Color-Schemes

iTerm2 > Preferences... > Profiles > Colors

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31037/448594de-bef1-8e9c-2553-380f0999394c.png)

右下の Color Presets... から import... を選択してダウンロードした .itermcolors ファイルをインポートします。

インポートすると Color Presets... のプルダウン内にインポートしたカラースキーマが表示されているので選択します。

### タブの常時表示

iTerm2 > Preferences... > Appearance > Tabs

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31037/ecaf39bc-4e25-bed1-26b1-920cc160c9ce.png)

Show tab bar even when there is only one tab にチェック
Theme は自由に

### フォントを変更

iTerm2 > Preferences... > Profiles > Text > Font

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31037/cb53a0fa-cf65-15dd-b75b-978d0d1b277e.png)

Change Font から任意のフォントとフォントサイズを選択。ここでは [MyricaM M](https://myrica.estable.jp/myricamhistry/) を使用。

リガチャを使いたい方は [Fira Code](https://github.com/tonsky/FiraCode) などを使って、 Use ligatures をチェックしてください。

fishのインストール
---

### homebrew のインストール

[公式ページ](https://brew.sh/index_ja.html)を参考にインストール

### fish のインストール

[公式ページ](https://github.com/fish-shell/fish-shell)の手順に従ってインストールと設定を行います。

#### インストール

```shell
$ brew install fish
```

#### デフォルトシェルの変更

```shell
$ chsh -s /usr/local/bin/fish
```

#### ログインシェルに登録

```shell
$ echo /usr/local/bin/fish | sudo tee -a /etc/shells
```

ここでシェルの読み直し

```shell
$ exit
```

#### 設定画面表示

```shell
$ fish_config
```

ブラウザが起動するので好みの見た目に設定する。

#### オートコンプリートの更新

```shell
$ fish_update_completions
```
忘れがちなdotfilesの管理

新しいPCを使用開始する際にdotfilesを持ってこようとすると大体やり方を忘れているのでメモ

## 対象ユーザー
* Mac利用者
* fish使用者

## 手順
### 01. homebrew
```bash
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

### 02. fish
```bash
brew install fish
# fishのパスを加える
sudo vim /etc/shells
chsh -s `which fish`
```

---
以下fish上で作業

### 03. fisherman
```bash
curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
```

### 04. dot
```bash
git clone https://github.com/ssh0/dot $HOME/.zsh/dot
fisher add re3turn/fish-dot
```

#### リポジトリを設定する

```bash
set -x DOT_REPO <your dotfiles repository>
```

```bash
dot clone
# おそらく~/.config/fish辺りを上書きするか聞かれるがreplaceを選択して良い
```
sub!がnilを返すのはパターンマッチが発生しなかった場合である

[公式ドキュメント](https://docs.ruby-lang.org/ja/latest/class/String.html#I_SUB--21)によると、「sub! は通常 self を変更して返しますが、 置換が起こらなかった場合は nil を返します。」とある。
が、それだと説明できない挙動がある。

```rb
a='abd';a.sub!('abd','abc') # => 'abc'
a='abc';a.sub!('abc','abc') # => 'abc'
a='abc';a.sub!('foo','abc') # => nil
```

この例1-2で、置換が発生していないにもかかわらずselfが返ってきている。
これは「パターンマッチが発生しなかった場合はnilを返す」と解釈すると説明がつく。

特に正規表現を使う場合、この誤解は致命傷だと思う。

```rb
a='abd';a.sub!(/a\w+/,'abc') # => 'abc'
a='abc';a.sub!(/a\w+/,'abc') # => 'abc'
```

この例2-2が「pattern /a\w+/がマッチした結果が replace と一致するため」nilを返すという誤解を、私は10年以上持ち続けていた。
cssに外からパラメータを渡して表示を切り替える

最近、cssに外から任意の値を与えて表示を弄れるという事に気付いたので、備忘録として。

cssには変数の仕組みがあって、定義を纏める事が出来る。

```test.css
:root {
  --color: red;
}

div {
  color: white;
  background-color: var(--color)
}
```

これを、htmlから使うと

```test1.html

<html>
<head>
  <link rel="stylesheet" type="text/css" href="test.css">
</head>

<body>
  <div>赤</div>
</body>

</html>
```

こうなる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/394553/c6c0a811-11b6-a3f1-b3f8-0c2ad4ddf916.png)


でもこれ、css内で変数として使いまわせるってだけじゃなくて、**html側から直接スタイル指定して、変数の上書きも出来る**
つまり以下の様なhtmlであれば

```test2.html

<html>
<head>
  <link rel="stylesheet" type="text/css" href="test.css">
</head>

<body>
  <div>赤</div>
  <div style="--color: blue;">青</div>
  <div style="--color: gold;">金</div>
</body>

</html>
```

こうなる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/394553/1873a2a7-1bef-834e-2589-aa26bc646ac4.png)


この仕組みの何が嬉しいかというと、例えば、ユーザー毎に画面デザインを変えたい様な場合に、直接htmlでスタイルを弄ってしまうのではなく、あくまでデザインの指定はcssに寄せたままで値だけを切り替えるのを、htmlとcss間のやり取りだけで実現出来る所。
直接スタイルを弄るだと（`<div style="background-color: blue;">`みたいな形）、同じスタイルの指定がcssとhtmlで重複してしまうけれど、値だけ渡せれば、デザインはcssで決定するという原則を、ある程度守り続ける事が出来る。
さらにこの実現において、javascriptを通さずにいられる。
デザインはデザインの問題として完結出来るなら、それに越したことは無いので、こうやって閉じ込めてしまえると、気持ちがいい。

rails/haml/scssのアプリで動的に表示を切り替えるのに、大変お世話になりました。
Anaconda3 コマンドまとめ　

## はじめに
便利なAnaconda3のコマンドをまとめた記事です。

## コマンドリスト
* conda info
  - 現在の仮想環境情報
* conda info -e
  - 仮想環境の一覧表示
* conda create --name myenv python=3.6
  - 仮想環境作成 (仮想環境名をmyenv、使用Python versionを3.6にする場合)
* activate [仮想環境名]
　- 仮想環境を切り替える
* deactivate
  - 仮想環境を終了する
* conda list
  - インストールされているパッケージの一覧を表示
* conda install <パッケージ>
  - パッケージのインストール
* conda install <パッケージ>=バージョン指定
  - バージョンを固定してパッケージをインストールする
  - 例[`conda install tensorflow-gpu==1.8.0`]
* conda uninstall <パッケージ名>
  - パッケージのアンインストール
* conda list --export > package-list.txt
  - 環境再現のためのリストを出力
* conda create -n myenv --file package-list.txt
  - 出力したファイルに基づいて再構築(新規に環境をつくる場合)
* パッケージの検索
  - conda search <パッケージ名>

* 特定のチャンネル内に存在するパッケージの検索
  - conda search -c <チャンネル名> <パッケージ名>

* 全てのチャンネル内でパッケージの検索
  - anaconda search -t conda <パッケージ名>

## 補足 

#### 仮想環境の一覧表示
`conda info -e`コマンドを使用すれば、Anaconda Prompt上で、仮想環境の一覧表示が可能です。

```
conda info -e
WARNING: The conda.compat module is deprecated and will be removed in a future release.
# conda environments:
#
base                  *  C:\Users\<ユーザー名>\Anaconda3
tensorflow-gpu           C:\Users\<ユーザー名>\Anaconda3\envs\tensorflow-gpu
```

#### 仮想環境の作成方法
```conda create```コマンドで作成可能です。pythonの3.7のバージョンを設定したい場合は、以下のようにします。

```
conda create --name myenv python=3.7
```

#### 仮想環境の切り替え方法
```activate```コマンドで切り替え可能です。`conda info -e`と合わせて使うことが多いです。

```
activate tensorflow-gpu

conda info -e

# conda environments:
#
base                     C:\Users\<ユーザー名>\Anaconda3
tensorflow-gpu        *  C:\Users\<ユーザー名>\Anaconda3\envs\tensorflow-gpu
```

## conda listでパッケージ一覧表示
`conda list`コマンドでパッケージの一覧表示が可能です。

また、以下のように特定の文字列(例では`gpu`)を含むパッケージを抽出してリスト表示することも可能です。

```
conda list gpu

# packages in environment at <あなたの仮想環境パス>
#
# Name                    Version                   Build  Channel
keras-gpu                 2.1.6                    py36_0
tensorflow-gpu            1.8.0                h21ff451_0
tensorflow-gpu-base       1.8.0            py36h376609f_0
```

#### モジュール動作確認方法
インストールしたパッケージが正しく使用できるか、Anaconda Command Prompt上で確認する方法です。

``` python
python -c "import tensorflow as tf; print( tf.__version__ )"
```

```
python -c "import tensorflow as tf; print( tf.__version__ )"
1.13.1
```

#### Anacondaのアップデート方法
```conda update -n base conda```

## 参考
* Conda コマンド
  - https://www.python.jp/install/anaconda/conda.html

* anaconda のコマンドリストメモ
  - https://qiita.com/natsuriver/items/4ae6eed5f47e34817090

* Conda(Anaconda/Miniconda)コマンド一覧
 - https://qiita.com/FukuharaYohei/items/928f5b417337a5068a07
データベース(SQL)の概要

#データベースとは
・大量の情報を保存し、コンピュータから効率よくアクセスできるように加工したデータの集まりのこと
・データベースを管理するコンピュータシステムのことを「データベース管理システム(RDBS)」という
・SQLを使って操作する

#なぜデータベースが必要なのか
データを管理するなら、Excelのような表計算ソフトでもいいと思います。しかしデメリットもあります。
・データの共有に向かない
・大量のデータを扱えない
・万が一の事故に対応できない
など

#代表的なデータベース
・リレーショナルデータベース(RDBMS)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/378838/1ffd5db4-9c59-5e02-cb6d-323e0e0f7530.png)

関係データベースとも呼ばれる。代表的なRDBMSは次の5つ
・Oracle Database  (Oracle社)
・SQL Server       (Microsoft社)
・DB2              (IBM社)
・PostgreSQL       (オープンソース)
・MySQL            (オープンソース)


#データベース構成
・クライアント/サーバー型のシステム
・データベースを読み書きするにはサーバーにクライアントからSQL文を送信
・テーブルと呼ばれる表でデータを管理
・テーブルはデータ項目を表すカラム(列)、1件のデータを表すレコード(行)からなる
・1つのマス目をセルといい、1つセルには1つのデータしか入れられない

#SQLの概要
SQLの文には種類がある

・DDL(データ定義言語)　データを格納する入れもの
・DML(データ操作言語)　テーブルのレコードを検索・変更
・DCL(データ制御言語)　データベースに対して操作の制御設定や、変更を確定したり取り消したりする

実際に使われるSQL文のうち90％がDMLです。

#記述ルール
・SQL文はセミコロンで終わる(;)
・キーワードの大文字・小文字は区別されない　SELECTはselectと書いても同じ(ただし、テーブルに登録されているデータは別)
・文字列・日付などはシングルクォーテーションで囲む(')
・単語と単語の間は半角スペース　例）CREATE DATABASE shop;

#参考文献
・SQL 第2版 ゼロからはじめるデータベース操作
VMware Workstation 14 Pro > バグ > ウィンドウサイズを変更しても固定サイズに戻される > 対処: 3DグラフィックスアクセラレーションをOFFにする

```txt:動作環境
VMWare Workstation 14 Pro (14.1.7 build-12989993)
ホストOS: Windows 10 Pro (64bit) バージョン 1809
ゲストOS: Windows 8.1 Pro (64bit) 
```

### 症状

VMwareにてゲストOSのウィンドウサイズを変更しても、固定のサイズに戻される。
OS設定のサイズのようだ。

- 表示
    - 自動サイズ調整(A)
        - [x] ゲストをウィンドウに合わせる(G)
        - [x] ウィンドウを合わせる(W)

同じ設定のWindows 7のゲストOSでは発生せず。

### 対処

正常動作のWindows7では「3Dグラフィックスのアクセラレーション(3)」がOFFになっていた。
異常動作のWidnows8.1では「3Dグラフィックスのアクセラレーション(3)」がONになっていた。

Windows8.1についても同じ設定（下記）にしたところ、症状は出なくなった。

- デイスプレイ
    - 3Dグラフィックスのアクセラレーション(3)
        - OFFにする
AWS LightsailのWordPressにBasic認証を設定する

AWS LightsailでWordPressを運用しているのですが、特定のディレクトリにBasic認証を設定する方法がわからずハマったので、一通りの手順をメモしておきます。

WordPressと言えば`.htaccess`でルーティングの起点となるファイルにアクセスさせているので確認してみるとお決まりの設定がありました。

```apache:/home/bitnami/apps/wordpress/htdocs/.htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
```

このファイルにBasic認証の設定すればイケるかなって思いやってみましたが、**このファイル自体効いてませんでした。**
※`/home/bitnami/apps/wordpress/htdocs/.htaccess`に設定しても意味がない

なのでapacheのconfigファイルで設定することにしました。

まずは`.htpasswd`を任意のディレクトリに作成します。

```console
$ htpasswd -c -b ~/apps/.htpasswd [user] [password]
```

configファイルに設定を追記します。

```console
$ vim ~/apps/wordpress/conf/httpd-app.conf
```

```apache:~/apps/wordpress/conf/httpd-app.conf
# ↓を追記
<Directory "/opt/bitnami/apps/wordpress/htdocs/[特定のディレクトリ]/">
    AuthUserFile /home/bitnami/apps/.htpasswd　# 作成した.htpasswdをフルパスで指定
    AuthGroupFile /dev/null
    AuthName "Basic Auth"
    AuthType Basic
    Require valid-user
</Directory>
```

基本的なBasic認証の設定と変わらないので、指定するディレクトリだけ注意してもらえば大丈夫かと。
`apps`にシンボリックリンクが張ってあるので、実体は`/opt/bitnami/apps/wordpress/htdocs/`になります。

```console
$ ls -l
apps -> /opt/bitnami/apps
```

最後にapacheを再起動すれば完了です。

```console
$ sudo /etc/init.d/bitnami restart apache
```

お疲れ様でした😊
Windowsでポートを使っているプロセスを調べる

Windowsでポートが既に使われていて起動できない場合に、使っているプロセスが何かを調べる方法（備忘録）

####ポートのPIDを調べる

```php
netstat -aon | findstr 0.0.0.0:[ポート番号]
```

####PIDからタスクの詳細を調べる

```php
tasklist /svc /fi "PID eq [ポート番号]"
```

これで何者かがわかり、ユーザプロセスならタスクマネージャーで強制終了すればよい。ただし、PIDが4でSystemプロセスの場合がある。
この場合は下記のサービスが怪しい。

1. SQL Server Reporting Services (ReportServer)
1. Web Deployment Agent Service (MsDepSvc)
1. BranchCache (PeerDistSvc)
1. Sync Share Service (SyncShareSvc)
1. World Wide Web Publishing Service (W3SVC)
1. Internet Information Server (WAS, IISADMIN)
UTF-8ってそもそもどういう仕組み？



# 用語について
#### 符号化文字集合
ある文字に対してある数字やコードが当てられたリストのようなもの。例）ユニコード
#### 文字符号化方式
ビット列と符号化文字集合とを橋渡しをするもの。例）UTF-8、shift-jis

# UTF-8の規則
## 1. 基本単位 1バイト ＝ 8ビット
文字に対応するビット数(bit)は必ず8の倍数をとり、この8ビットのまとまりをバイト(byte)と呼びます。1.5バイト（12ビット）の文字などはありません。

| バイト数 | ビット数 | ユニコード |例|
|-----------------:|------------------:|:------------------:| :------------------:|
| 1 | 8 | U+0000 - U+007F | 数字 アルファベット |
| 2 | 16 | U+0080 - U+07FF | アラビア文字 |
| 3 | 24 | U+0800 - U+FFFF | ひらがな 漢字 |
| 4 | 32 | U+10000 - U+1FFFFF | 難漢字 |


## 2. バイトの先頭は固定
ビット列に１バイトの文字や４バイトの文字が混在していても大丈夫なように、UTF-8ではそれぞれのバイトの先頭が決まったパターンをとることで見分けられるようにしています。

### 1バイトの文字
先頭を`0`とする
「A」`01000001`

### 2バイトの文字
1バイト目の先頭を`110`、2バイト目の先頭を`10`とする
「д」`11000110` `10110010`

### 3バイトの文字
1バイト目の先頭を`1110`、2バイト目と3バイト目の先頭を`10`とする
「あ」`11100011` `10000001` `10000010`

文字の始まりを探そうと思えば、先頭が`10`でないバイトを探せばよいということになります。

## 3. 有効ビット
固定の数字を除いた部分は**有効ビット**と呼ばれ、文字を特定する役割があります。

例えば、UTF-8でエンコードした「あ」は
`11100011` `10000001` `10000010`
これから先頭のビットパターンを除くと
`0011` `000001` `000010`
これが有効ビットです。

これをつなげて16進数にすると、そのままユニコードの符号位置(U+○○○○)となります。

# UTF-8の例
UTF-8でエンコードした「オロナミンC」は16進数で

```
E382AAE383ADE3838AE3839FE383B343
```
2進数で

```
11100011100000101010101011100011100000111010110111100011100000111000101011100011100000111001111111100011100000111011001101000011
```
です。

これをデコードしてみましょう。

8ビット毎に区切っていくと、先頭のビットパターンの規則により、文字の区切れがわかります。最初の文字を表す二進数は`111000111000001010101010`だとわかります。

ここから有効ビットの部分を取り出すと、`0011000010101010`です。

そして16進数に戻すと、`30AA`となり、これは「オ」のユニコード U+30AA に対応しています。



# まとめ
UTF-8でエンコードしたビット列は16進数で表記されることが多いですが、それはそのままユニコードの符号位置には対応していません。
そこから文字を読み取るには、2進数に変換して文字の区切れを見つけ、有効ビットを抽出する必要があります。
Reactのまとめ（初心者）

[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしているryota_miraidenshiです。
今回はReactについて勉強しているのでまとめておきたいと思います。


#Reactって？
JavaScriptの最も人気なフレームワークがReactです。
なぜ人気なのでしょうか。

###UIが作りやすい
Reactはユーザー目線で開発されているのでUIの機能追加に特化しているのに加えて、ユーザーがストレスを感じないように高速で処理が行われます。
では、高速処理がどのように行われているのか。
それはまだまだ理解できていない部分も多いのですが、ページ全体を変更するのではなく、変更があったところだけ変更を行うというやり方だからだそうです。

###コンポーネント指向
これは、UIを部品化して管理、再利用しやすくすることができます。
HTMLのタグみたいな感じで自分で部品化できるので他のフレームワークには無い便利さがあると思います。

###一度学べばどこでも使える
「React Native」というものを使って簡単にアプリなどを作成することができます。

#まとめ
新しい言語、フレームワークなどを学ぶ際にはやれと指示されたからやるのではなく、それを学ぶことで何ができるようになるのか、なぜそれを選ぶのかを考えるとより一層理解できますし、楽しいはずです。
プログラム初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正しますのでどんどん指摘してください。
Rhinoceros / Grasshopper　Remap Numbers 数理的性質の考察




#はじめに
本記事は、あるとき友人がRevitで立体トラスシェルの屋根をモデリングしていたのを見て、Grasshopperでやってみようとなったのがきっかけです。

その際に使用したRemapNumberコンポーネントの挙動があまりにもわからなかったため、一旦内部処理を考察してみました。

GHファイルをアップロードしました。実際にコードに触れながら読んでみてください。
https://drive.google.com/open?id=1ycWlJcnIkYT_OiGK9_DCXjkwYTy7jLQA

（add:20190413 15:32)
タイトル「Rhinoceros / Grasshopper　Remap Numbers 内部処理の考察」を訂正し「数理的性質」です。
内部処理というとrhinocerosやgrashopper背後で動くコードなどを連想させてしまったかもしれません。
期待されてこられていた方、すみません！

---

#制作したもの
##パターン1
![パターン1.jpg](https://qiita-image-store.s3.amazonaws.com/0/255561/c49c9582-4bd6-0cc9-725c-b7b66ba9ab2c.jpeg)

---

##パターン2
![パターン2.jpg](https://qiita-image-store.s3.amazonaws.com/0/255561/6c1f2b11-4b31-47df-6070-70e1a4fdd102.jpeg)

---

##パターン3
![パターン3.jpg](https://qiita-image-store.s3.amazonaws.com/0/255561/5c78db8f-8663-1eef-f9a6-596f73811bed.jpeg)

---

#データやりとりの違い
これら3つは同じアルゴリズム(?)を採用していますが、一部データやりとりが違うため、3つの異なる形状が生成されています。
そのデータやり取りの違いが「Remap Numbers」(以下Remap)の入力の違いになります。

---

##パターン1のスケッチ
![パターン1　ワイヤー.PNG](https://qiita-image-store.s3.amazonaws.com/0/255561/51bc626d-050f-8594-5622-5baa8f9181c0.png)


##パターン2のスケッチ
![パターン2　ワイヤー.PNG](https://qiita-image-store.s3.amazonaws.com/0/255561/7f7db17d-93fc-4bc5-90a2-b0db00e80ba8.png)

##パターン3のスケッチ
![パターン3　ワイヤー.PNG](https://qiita-image-store.s3.amazonaws.com/0/255561/189939f9-360b-9005-8de0-f2e33480aa90.png)

ぞれぞれ、RemapのValueにsinによる値を入力しているか、sin+sin(grafted)の値を入力しているか、そしてsin+sin(grafted)をflattenするかという
3パターンに分類されます。（もう1パターンがありますが、形状がパターン1と類似しているので省いています）

---

#単純にして考えてみる
ここから雑な手書きが入ります笑
##パターン1の処理
![パターン1図解.PNG](https://qiita-image-store.s3.amazonaws.com/0/255561/664e000b-e6a9-b51c-9c76-302de18b1f8a.png)
「Remapは、ソースの配列の値の個数と変化率をそのままに、値の大きさの範囲だけがターゲットで指定した範囲に置き換わる」といえると思います。（間違っていたらコメントしていただけると助かります！）
数学的に正しい解説ではないと思いますが、図右下に書いたような処理が行われていると思います。

---

##パターン2の処理
![パターン2図解.PNG](https://qiita-image-store.s3.amazonaws.com/0/255561/9ed8c0fc-80dc-3bb2-ac41-1ef28531f979.png)
今度は、図で解釈してみました。
先ほどのパターン1で行ったように、valueのドメインと、ソースのドメインが一致していればいいのですが、
今回はboundsをflattenしたことで、これが一致していません。
その時には、図で考えたほうがわかりやすかったので書いてみました。

---

##パターン3の処理
![パターン3図解.PNG](https://qiita-image-store.s3.amazonaws.com/0/255561/a0f92d01-6663-925a-c199-08f817815811.png)
図的に考えると、どうして-1000が現れるのかがわかりやすくなったと思います。

---

#おわりに
今回は、sinに0からπを代入していますから、0や1、2という数値がでて、図を見ても半周期の形になっているのがわかります。
単純に考えるために、サーフェスをUVそれぞれ2分割して考えましたが、性質は3分割でも10分割でも以降同じです。（add:20190411 14:51）

以上で簡単にですが、RemapNumbersの数理的性質の考察を終わりにします。
図に関しては追々きれいなものに変えていきますが、ひとまず忘れないうちに雑記的にまとめておきました。
[Swift4] バックグラウンドでオーディオ再生する

iOSアプリでオーディオ再生を実装する際に、アプリがバックグラウンドになっても再生し続けるようにする設定手順です。

必要な設定は２つです。

1. Capabilities設定で、Background Modes - Audio をONにする。
2. AVAudioSession のカテゴリをPlaybackに設定する。

#Capabilities設定からBackground Modesを設定する

プロジェクトファイルを選択肢、「TARGETS」からアプリ名をクリックし、「Capabilities」を選択します。

この中の、 **「Background Modes」をON** に変更します。
さらに、「Modes」の中から、「Audio. AirPlay. and Picture in Picture」のチェックボックスをONにします。

以下の画面は、これらの設定をした後の画面です。

![スクリーンショット 2019-04-09 16.45.14.png](https://qiita-image-store.s3.amazonaws.com/0/181439/96531ffd-3200-06e1-b62b-b8ae3d0ac3a8.png)

#AVAudioSession のカテゴリをPlaybackに設定する
続いて、AVAudioSessionの設定を行います。
AVAudioSessionは、アプリでオーディオをどのように扱うかを宣言するためのオブジェクトです。
例えば、他のアプリで音声再生をしているときの挙動や、バックグラウンドでの音声再生の挙動などを扱うことができます。
[AVAudioSession - Apple Developer Document](https://developer.apple.com/documentation/avfoundation/avaudiosession)

AppDelegateにて、AVAudioSessionのCategory設定を変更してやります。

```AppDelegate.swift
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        /// AVAudioSessionCategory設定
        let session = AVAudioSession.sharedInstance()
        do {
            // CategoryをPlaybackにする
            try session.setCategory(.playback, mode: .default)
        } catch  {
            // 予期しない場合
            fatalError("Category設定失敗")
        }
        
        // session有効化
        do {
            try session.setActive(true)
        } catch {
            // 予期しない場合
            fatalError("Session有効化失敗")
        }

        return true
    }
```

以上でオーディオ再生時をアプリがバックグラウンドに移動しても継続できるようになります。
discord.js + canvasjsでユーザーの入室通知を作る

はじめまして、Discord.jsでdiscordのBOTを作っている者です。
まだまだ初心者ですが、よろしくお願いします。

※説明が下手くそです、すみません

#手始めに
まずNode.jsをインストールしてください。
(自分の場合はUbuntuなのでUbuntuでやる方法を教えます。)
1. ターミナルを開いてください
2. ターミナルに〈sudo apt install -y nodejs npm〉を打ち込みます
3. パッケージのダウンロード、インストールが開始されるのでコーヒーでも飲んで待ってましょう
4. インストールが終わったら、これでnode.js導入は完了です。

##必要なパッケージのインストール
(コマンドはnpm install <パッケージ名>です)
・discord.js
・canvas
・snekfetch

#コードを書く
パッケージのインストールが終わったら、コードを書き始めます。

```javascript:index.js
const Discord = require('discord.js');
const client = new Discord.Client
const Canvas = require('canvas');
const snekfetch = require('snekfetch');

client.on('ready', () => {
  console.log("起動しました。")
 });

client.on('guildMemberAdd', async member => {
	const channel = member.guild.channels.find(ch => ch.name === 'member-log');//member-logというチャンネルを作ると、そこにメッセージが送信される
	if (!channel) return;

	const canvas = Canvas.createCanvas(1050, 250);
	const ctx = canvas.getContext('2d');

	const background = await Canvas.loadImage('./背景画像.jpg');

	ctx.drawImage(background, 0, 0, canvas.width, canvas.height);

  
ctx.strokeStyle = '#74037b';
	ctx.strokeRect(0, 0, canvas.width, canvas.heigh)

  ctx.font = '28px DejaVu';
	ctx.fillStyle = '#ffff00';
	ctx.fillText(`Welcome to ${member.guild.name},`, canvas.width / 3.0, canvas.height / 3.5);

  ctx.font = '28px DejaVu';
	ctx.fillStyle = '#ffff00';
	ctx.fillText(`${member.user.tag}!`, canvas.width / 3.0, canvas.height / 1.8);
  
  ctx.font = '28px DejaVu';
	ctx.fillStyle = '#ffff00';
	ctx.fillText(`id: ${member.user.id}`, canvas.width / 3.0, canvas.height / 1.3);

	ctx.beginPath();
	ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
	ctx.closePath();
	ctx.clip();

	const { body: buffer } = await snekfetch.get(member.user.displayAvatarURL);
	const avatar = await Canvas.loadImage(buffer);
	ctx.drawImage(avatar, 25, 25, 200, 200);
  
  const attachment = new Discord.Attachment(canvas.toBuffer(), 'welcome-image.png');
  
	channel.send(`ようこそ ${member}さん!`, attachment);
});

client.login("トークン");
```

#トークンを取得
```JavaScript
client.login("トークン");
```
この〈トークン〉はここから取得します(https://discordapp.com/developers/applications/)
1. URLにアクセス
2. Discordにログイン
3. New Applicationを押し、BOTの名前を決める、そしてcreateを押す
4. 左側のBOTを押し、Add Botを押す、警告みたいなのが出るので、Yes, do it!を押す
5. 色々表示されるので、その中のCopyを押して、トークンのところにペーストします


これでnode index.jsと打てば起動するはずです。
初めての投稿だったのでガバガバなところが多いと思いますが、暖かい目で見守ってください。
それでは。
PHPからAccessDBに接続する

今どき・・・な感じですが、ある案件でPHPからAccessDBに接続して情報を取得する必要があったのでそのメモです。
ネットで調べてもあんまり情報がなかったので残します。
単にPHP-->Accessっていうパターンが少ないだけだとは思うのですが。

#環境

PHP7.2 32bit
Apache 2.4 32bit
Access 2010（2017でもOK） 32bit

## 大事なところ

あまりないかもしれませんが、Accessが32bitならばPHP、Apacheも32bitで揃える。
64bitであれば64bitで揃えないと正しく動きません。（少なくとも私の環境では動かなかった）


# 接続

PDOで接続します。

``` php:db.php

define('ACCESS_DB_DRIVER',   '{Microsoft Access Driver (*.mdb, *.accdb)}');
define('ACCESS_DBQ',         'C:\\test\\test_be.accdb');
define('ACCESS_DB_USER',     '');
define('ACCESS_DB_PASSWORD', '');

$objPdo = new PDO("odbc:Driver=" . ACCESS_DB_DRIVER . ";Dbq=" . ACCESS_DBQ . "; Uid=" . ACCESS_DB_USER . "; Pwd=" . ACCESS_DB_PASSWORD . " ;");
```

## Driver

データソースのドライバーの部分を指定します。
![20190410_datasource.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95842/8b68baa9-c1be-5853-cc04-5530e75540a5.png)


## DBQ

AccessDB（***.accdb）のフルパスを指定します。
ここで指定するのはAccessで「データベースの分割」を行ったデータベースのみのファイルになります。


## DB_USER、DB_PASSWORD

今回は使用していません。


# クエリ実行

``` php:test.php
<?php

ini_set('INTERNAL_ENCODING', 'UTF-8');

define('ACCESS_DB_DRIVER',   '{Microsoft Access Driver (*.mdb, *.accdb)}');
define('ACCESS_DBQ',         'C:\\test\\test_be.accdb');
define('ACCESS_DB_USER',     '');
define('ACCESS_DB_PASSWORD', '');

$objPdo = new PDO("odbc:Driver=" . ACCESS_DB_DRIVER . ";Dbq=" . ACCESS_DBQ . "; Uid=" . ACCESS_DB_USER . "; Pwd=" . ACCESS_DB_PASSWORD . " ;");

$sql = "SELECT test_column FROM tbl_test WHERE column = 10;";
$sql = convertSJIS($sql); // 文字コード変換。AccessはSJIS-winなので変換する必要あり
$stmt = $objPdo->prepare($sql);
$result = $stmt->execute();
if ($result !== false) {
    $arrData = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($arrData as $arrDetail) {
        $strValue = convertUTF8($arrDetail['test_column']); // SJIS-winからUTF-8に変換する
    }
}

/**
 * 文字コードを変換する
 * UTF-8 --> SJIS-win 
 */
function convertSJIS($strTmp) {
    return mb_convert_encoding($strTmp, "SJIS-win", "UTF-8");
}

/**
 * 文字コードを変換する
 * SJIS-win --> UTF-8
 */
function convertUTF8($strTmp) {
    return mb_convert_encoding($strTmp, "UTF-8", "SJIS-win");
}
```

ポイントとしてはAccessの文字コードが**SJIS-win**なので、クエリ発行時は**UTF-8 --> SJIS-win**へ、取得したデータは**SJIS-win-->UTF-8**に変換する必要があります。
取得するカラム名が日本語の場合はそれも変換する必要があるので、fetchAllしたあとにループですべて変換する必要がありますね。


#おまけ

このコードをテストしていたときに気づいたのですが、mb_convert_encoding関数の第1引数に連想配列を渡すと、中身をすべて変換してくれるんですね。
PHP5.4ではエラーになったのでPHP7あたりからOKになったのかな？
公式にも配列OKとはなっていないので、正式なコードではないんだとは思います。

````php:test.php
$arrData = $stmt->fetchAll(PDO::FETCH_ASSOC);
$arrData = convertUTF8($arrData);// これで配列の中身全部変換できる
````
Jupyter Notebook: pandasでJSONファイルを読み込む

本稿ではJupyter Notebookでpandasを使い、JSONファイルを読み込む方法を紹介する。前提として、[pandasをインストールしておく](https://qiita.com/suin/items/d81a0d9a8f9f9d33ae33)。

## pandasでJSONファイルを読み込む

次のようなPythonコードをセルに書くとJSONファイルが読み込める

```py
import pandas
pandas.read_json('data.json')
```

実行結果:

<img width="649" alt="SlowTest.png" src="https://qiita-image-store.s3.amazonaws.com/0/889/395c5a6e-d877-181e-ec91-a5ae48348dcf.png">

なお、`read_json`の戻り値は`pandas.core.frame.DataFrame`になる。

## ドキュメント

* [pandas.read_json — pandas 0.24.2 documentation](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_json.html)
gcloud コマンドが認識されないとき（初心者向け）

# 対象
初心者向け。Google Cloud SDKをインストールしたのに、gcloudと打っても何も反応しない方向けです。

#環境
macOSです。

# Google Cloud SDKをインストールする
google-cloud-sdkをまずはインストールしましょう。

https://cloud.google.com/sdk/downloads?hl=JA
ここからインストール出来ます。

#インストール完了後
```
gcloud init
```
と打ってみる。

```
-bash: gcloud: command not found
```
あれ？ちゃんと手順通りに打っているじゃないか！

#解決策
.bash_profileにパスを書く

ターミナルに、

```
$ cd ~
$ ls -A
```
と打つ。

```
$ vi .bash_profile
```

iを押して編集モードに入り、

```
source <sdkを入れたディレクトリ>/google-cloud-sdk/completion.bash.inc
source <sdkを入れたディレクトリ>/google-cloud-sdk/path.bash.inc
```

escを押して、編集画面から抜けて、
:wq を入力して終了。

ターミナルを再起動して、

```
gcloud init
```

を試してみる。gcloudが使えるようになっているはずである。
秋月で買ったESP32-DevKitCのセットアップの備忘録(Mac)

#ESP買って何すればいいんだろ、、
まずは環境構築とドライバの認識から。今回は慣れ親しんだArduino IDEで進めてく。
ただの備忘録であり、参考になる記事を貼り付けただけなので、この記事そのものに見る価値はない。
#大まかに2ステップ
##1. ボードマネージャーからESP32 Dev Moduleを追加
ArduinoIDEはArduinoで開発するための環境。
そこで、ArduinoIDEでESP32を認識できるようにする必要があります。

[esp32-wroomDevkitCをarduino IDEでセットアップからサーボ駆動まで(Windows) - Qiita](https://qiita.com/WK_ZAKK/items/d7fbbb8c0c8eebe5682d#arduino-ide%E7%B7%A8)

この記事のArduino IDE編の通りに、esp32 by Espressifl Systemsをインストールできれば、環境構築は完了です。
##2. ドライバをインストールして、espを認識できるようにする
プログラムを書いていきたいところですがこのままではPCがArduinoを認識してくれないことがあります。
つまりせっかく書いたプログラムをesp32に書き込むことができません。
その時はこちらのドライバをインストールしてみてください。

[cp210x USB to UART Bridge VCP Driver をmacで認識させる方法 - shangtian’s blog](http://www.shangtian.tokyo/entry/2018/09/13/224853)

ただし、ドライバをインストールするだけでは使えるようにならないこともあります。デフォルトのままではmacOSがこのドライバの読み込みを許可してくれないためです。

上の記事では設定の変更とコマンドの実行によってespを認識できるようにするまでが書かれているので、参考にすると良いかと思います。
Jupyter Notebook: ModuleNotFoundError: No module named 'pandas'

Jupyter Notebookで「ModuleNotFoundError: No module named 'pandas'」のエラーになるときは、モジュールのパスを確認して、正しい場所にpandasをインストールしよう。

## 症状

`pip install pandas`でpandasをインストールしたが、Jupyter Notebookでpandasがインポートできないエラーが発生する:

```
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-6-e0409205a3ad> in <module>
----> 1 import pandas

ModuleNotFoundError: No module named 'pandas'
```

## 原因

Jupyter Notebookのモジュールのパスを調べる:

<img width="875" alt="SlowTest.png" src="https://qiita-image-store.s3.amazonaws.com/0/889/e97ad354-c961-b536-3657-9674a40174a2.png">

上の結果を見ると、Jupyter NotebookのモジュールのパスはPython3のものになっていることが分かる。

> 参考: [jupyter notebookで、なぜかimportが通らない問題 - Qiita](https://qiita.com/verdy89/items/14b232d1bdb474bd6fc9#%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE%E3%83%91%E3%82%B9%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B)

今度は`pip`で入れたpandasのパスを調べると、Python2のものになっている。

```
$ pip show pandas
Name: pandas
Version: 0.24.2
Summary: Powerful data structures for data analysis, time series, and statistics
Home-page: http://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location: /usr/local/lib/python2.7/site-packages
Requires: python-dateutil, numpy, pytz
Required-by:
```

## 対処法


この場合Python3で動いているので、pip3でpandasを入れ直す。

```
pip3 install pandas
```

pandasのパスを確認すると、Python3のパスにインストールされていることが分かる:

```
$ pip3 show pandas
Name: pandas
Version: 0.24.2
Summary: Powerful data structures for data analysis, time series, and statistics
Home-page: http://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location: /usr/local/lib/python3.7/site-packages
Requires: numpy, pytz, python-dateutil
Required-by:
```
VS CodeでGKEが管理できる？Cloud Codeを使ってみた

# Cloud Codeとは？

クラウドネイティブなアプリケーションを簡単かつ迅速に管理・操作するためのエディタ拡張といった感じでしょうか。

https://cloud.google.com/cloud-code/

**VS Code**と**IntelliJ**で提供されるみたいです。
要するにエディタ・IDE上でk8sクラスタを操作できる拡張機能ですね。

# VS Codeで使ってみた

ちょうど使ってるエディタがVS Codeなので、早速導入してみました。
導入方法としては、普通に拡張機能の追加から`cloud code`で探すと出てくるのでインストールするだけです。

<img width="290" alt="スクリーンショット 2019-04-11 11.00.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/79302/f5d75136-4d70-d911-9698-dac60219c2ea.png">


https://cloud.google.com/code/docs/vscode/install

するとサイドバーにアイコンが出るので、ここから色々できます。また、当然ですがコマンドパレットからも各種機能にアクセスできます。

<img width="339" alt="スクリーンショット 2019-04-11 11.01.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/79302/b11781ce-e880-c2f6-1029-caf612975c6c.png">

# 何ができるのか

## 各種リソースの設定を直接編集・反映

サイドバーのツリービューから各種リソースのマニフェストファイルを開く事が可能です。

<img width="255" alt="スクリーンショット 2019-04-11 11.11.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/79302/759a6534-5daa-b797-5744-f74ec39fe3f2.png">


さらに、それを編集して保存すると以下のようなalertが出るので、

<img width="468" alt="スクリーンショット 2019-04-11 11.13.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/79302/92f2d617-b209-7072-d3ec-8d989b83112b.png">


これをOKすると実際に`apply`まで出来るみたいですね。

## 各PodのTerminalに入るのが簡単

コマンドパレットで`Cloud Code: Get Terminal`を選択するとPod一覧が出てくるので、この中から選択するとVS CodeのterminalでPodのterminalを開く事ができます。

<img width="615" alt="スクリーンショット 2019-04-11 11.15.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/79302/fce013e0-931f-0a14-d6cf-d1a8adaf3672.png">


ツリービューから選択することも可能です。

## ログの表示・ストリーム表示

`Cloud Code: View Logs`で対象Podのログをエディタで開けます。

また、`Cloud Code: Stream Logs`を使えばターミナル上でログをストリーム表示できます。

<img width="610" alt="スクリーンショット 2019-04-11 11.21.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/79302/9fbdca45-85ff-96e7-a972-7422ead21bdc.png">


## クラスタの作成・操作

新規クラスタの作成までVS Code上でできるみたいです(背景は気にしないで下さい・・・)。

<img width="1281" alt="スクリーンショット 2019-04-11 11.31.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/79302/1856e1ba-6239-c82d-2e15-dec1c74900fb.png">



更新系の操作もできそうですが、まだ試せていません。
ちなみにGKEだけではなく、AWSやAzureでも同じ事ができそうですね。

<img width="605" alt="スクリーンショット 2019-04-11 11.33.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/79302/4681461c-b515-9547-2049-bad2dca21e43.png">


# まとめ

今までもMicrosoftから提供されている以下の拡張があったので、自分もこれを使ってました。

<img width="789" alt="スクリーンショット 2019-04-11 11.37.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/79302/e84e2c4e-1d39-3b0f-9135-15455ff74227.png">


各種リソースに対する機能は共通している部分が多いですが、クラスタに対する操作は限られていました。Cloud CodeならGKEに特化した操作にも対応しているので、GKEユーザーなら導入すると捗りそうですね。
LaravelでテンプレートPDFを出力する

## PHPでPDF化の実装パターン
1. HTMLからPDFにする
2. テンプレートとなるPDFに文字を出力する

今回は2の話。

## 実装
TCPDFとFPDIを組み合わせて実装
composer require tecnickcom/tcpdf
composer require setasign/fpdi

これで使えるようになった。

以下は実際に使用した設定内容。

``` controller.php
public function generatePdf()
    {
        /*
         * PDFの初期設定
         */
        $pdf = new Fpdi('L', 'mm', 'A4');

        // テンプレートPDFの設定
        $template_path = public_path('assets/pdfs/template.pdf');
        $pdf->setSourceFile($template_path);

        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(false);
        $pdf->SetAutoPageBreak(false);
        $pdf->SetAutoPageBreak(false);
        $pdf->SetMargins(0, 0, 0);
        $pdf->addPage();

        $font = new TCPDF_FONTS();

        //フォントの設定
        $font_bold = $font->addTTFfont(storage_path('fonts/ipag.ufm'));
        $pdf->setFont($font_bold, '', 30);

        $page = $pdf->importPage(1);
        $pdf->useTemplate($page);

        /*
         * PDFに表示するデータ
         */
        //ID
        $pdf->SetXY(100, 49);
        $pdf->Write(0, '1'));

        //名前
        $pdf->SetXY(100, 61);
        $pdf->Write(1, 'やまだたろう');


        $pdf->output();

        return Redirect::back();
    }
```

1個だけ詰まった点は、SetMarginsを設定しているのに余白の調整が上手くいかない。

そもそもA4サイズ（210 × 297）で作成されていないんじゃないのかと思って変換したら、ビンゴ！

当たり前だが、HTMLのようにレイアウトの調整は出来ないからPDF側で正確に調整してもらう必要がある。

HTMLからPDFにする際はレイアウトの制限が多くて、手間だったがテンプレートがある方は文字の出力位置に手間取るぐらいでわかってしまえばサクッと実装できるのがいいね。
RailsアプリをHeroku上で、NginxとUnicornで動かす方法

# unicornの導入

``` ruby:Gemfile
gem 'unicorn'
```
追加し、bundle install

Procfileも編集するが、後でnginxの設定をするために、ここではやらない。

※参考サイト
https://workabroad.jp/posts/1225

# nginxの導入

※参考サイト
https://github.com/heroku/heroku-buildpack-nginx
あとは、このサイトのSetupに沿って進めていく。

herokuにデプロイできたら、下記コマンドで確認。

```command
heroku logs -t
```

約２日間、分からずに積んだため、このようにまとめました。
JMeterのインストール方法 for Mac

[MacでJMeterのインストールとアップデート - ブロックチェーンエンジニアとして生きる](https://tomokazu-kozuma.com/installing-and-updating-jmeter-on-mac/)

記事の通り、[Homebrew](https://brew.sh/index_ja)でインストールするのが簡単で良い。

```bash
    # インストール
    $ brew install jmeter
    
    # 実行
    $ jmeter
```

# JDKをまだインストールしていない場合

Java8じゃないと動かないという記事([MacにJMeterを入れる - Qiita](https://qiita.com/tri-comma/items/94389afaef53b7d8e80e))があるがJava12で動いたので最新Javaで問題なさそう（2019/04/11現在）。

## homebrew-cask経由でインストール

複数バージョンのJavaを設定ファイルの書き換えで切り替えできるのでおすすめ。

[MacのBrewで複数バージョンのJavaを利用する - Qiita](https://qiita.com/seijikohara/items/56cc4ac83ef9d686fab2)
[homebrew-caskって何？？？ - Qiita](https://qiita.com/guitar_char/items/3aca4950bf0adcdf419d)

## インストーラーでインストール

[Java SE - Downloads | Oracle Technology Network | Oracle](https://www.oracle.com/technetwork/java/javase/downloads/index.html)
Jupyter notebook 上で vis.js を使ってグラフを描画する

##はじめに

グラフを用いて分析した結果をすぐに確認するために、
Jupyter notebook 上で [vis.js](http://visjs.org/) を使ってグラフを描画したい。
以下サイトに設定方法が載っていたのでやってみた。

参考：https://www.codementor.io/isaib.cicourel/visjs-visualization-in-jupyter-notebook-phgb3fjv0

本内容のNotebookは[こちら](https://github.com/miotakei/utils/blob/master/notebooks/visualization_visjs.ipynb)。

---
##実行環境
mac OS 
Jupyter notebook 4.4.0
Python 3.6.6
vis.js 4.21.0

--
## 準備

- vis.js をダウンロード

[vis.js](https://github.com/almende/vis/archive/v4.21.0.zip) をダウンロードして、適当な場所でunzip

- Jupyter notebook のconfig ファイルの変更

./jupyter/jupyter_notebook_config.py にvis.js のパスを設定

```config

## Extra paths to search for serving static files.
#
#  This allows adding javascript/css to be available from the notebook server
#  machine, or overriding individual files in the IPython

c.NotebookApp.extra_static_paths = ['/Users/miotakei/Applications/vis-4.21.0/dist']

```

** ./jupyter/jupyter_notebook_config.py がない場合は以下コマンドを実行

```
$ jupyter notebook --generate-config
```

-　Jupyter notebook を起動


## 実行

グラフのデータを作成し、JSON 形式に変更後Javascript を生成

```python

from IPython.display import Javascript
import json

nodes = [
        {'id': 1, 'label': 'Beyonce', 'group': 'United States'},
        {'id': 2, 'label': 'Barak Obama', 'group': 'United States'},
        {'id': 3, 'label': 'Miley Cyrus', 'group': 'United States'},
        {'id': 4, 'label': 'Pope Francis', 'group': 'Vatican'},
        {'id': 5, 'label': 'Vladimir Putin', 'group': 'Rusia'}
]

edges = [
        {'from': 1, 'to': 2},
        {'from': 1, 'to': 3},
        {'from': 2, 'to': 4},
        {'from': 2, 'to': 5}
]

# Transform the graph into a JSON graph
data = {"nodes":nodes, "edges":edges}
jsonGraph = json.dumps(data, indent=4)

# Send to Javascript
Javascript("""window.jsonGraph={};""".format(jsonGraph))

```

HTMLを作成

```python

%%html
<div id="mynetwork"></div>
```

先ほど作成した、グラフデータの変数を受け取るようなJavascript のコードを作成

```python

%%javascript
requirejs.config({
    paths: {
        vis: 'vis'
    }
});

require(['vis'], function(vis){
    
    // create a network
    var container = document.getElementById('mynetwork');
    var options = {
        width: '800px',
        height: '400px'
    };
    
    // We load the JSON graph we generated from input
    var graph = window.jsonGraph;
    
    // Display Graph
    var network = new vis.Network(container, graph, options);
});

```

## 結果

![スクリーンショット 2019-04-11 12.16.58.png](https://qiita-image-store.s3.amazonaws.com/0/113406/2b65c57c-a1fb-eecd-ae21-b745f86776c2.png)
【備忘】WindowsでUbuntuを使えるようにする方法

普段使っているWindowsPCでUbuntuを使えるようにしたいのに方法を忘れてしまうので備忘

知ってる方法としては
１．PCに直接インストールしてデュアルブートする
２．Virtual boxでUbuntuを動かす
３．Windows Subsystem for Ubuntuをインストールする

#PCにインストールしてデュアルブートする
最近使わないので詳しい方法は省略
Windows10には高速起動みたいなのがあってオンになっているとwindowsとUbuntuどちらをbootするか選択ができない

#Virtual boxでUbuntuを動かす
[Virtual boxをダウンロードする](https://www.virtualbox.org/wiki/Downloads)
[Ubuntuをダウンロードする](https://www.ubuntulinux.jp/download)
基本ポチポチすればいける

Vagrantを使ってローカル開発環境の構築する方法
ドットインストール
https://dotinstall.com/lessons/basic_localdev_win_v2
はじめはこれみてやった


#Windows Subsystem for Linuxをインストールする
・Micsrosoft Storeから落としてくる

#設定とか

・日本サーバーに変更

```
$ sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list
```
・アップデート

```
sudo apt update
sudo apt upgrade
```

・SSH接続できるようにする

```
#openssh-serverをインストール
sudo apt install openssh-server

#configを編集
vi /etc/ssh/sshd_config

# i:編集モード　：wqで保存
# 読み取り専用の場合は:w !sudo tee %で強制的に書き込むことも可能
# PasswordAuthentication yes　PermitEmptyPasswords noを修正
#サービスを立ち上げる
sudo service ssh restart
```

・MySQL

```
#インストール
sudo apt install mysql-client
sudo apt install mysql-server
#立ち上げ
sudo usermod -d /var/lib/mysql mysql
sudo service mysql start
```
SVMの使い方メモ

svm使うと結構意外なものも分類できたりするということを聞いたので、さっそく触ってみる。


```R
install.packages("kernlab")
library(kernlab)

#trainとpredをつくる
setosa<- iris[iris$Species=="setosa",]
setosa_train <- setosa[1:45,]
setosa_pred <- setosa[45:50,]

versicolor<- iris[iris$Species=="versicolor",]
versicolor_train <- versicolor[1:45,]
versicolor_pred <- versicolor[45:50,]

virginica<- iris[iris$Species=="virginica",]
virginica_train <- virginica[1:45,]
virginica_pred <- virginica[45:50,]

iris_train <- rbind(setosa_train,versicolor_train,virginica_train)

iris_pred <- rbind(setosa_pred,versicolor_pred,virginica_pred)

iris_svm <-ksvm(as.factor(Species)~.,data=iris_train)
iris_svm

```
これで種に対して予想する分類器ができたようです。
![11.png](https://qiita-image-store.s3.amazonaws.com/0/275572/ddac21af-9499-0591-feda-9e2b986fd966.png)
どのくらい正解しているか確かめてみます。

```R
check_the_answer <- predict(iris_svm, iris_train)
table(iris_train$Species)
table(check_the_answer)
```
![22.png](https://qiita-image-store.s3.amazonaws.com/0/275572/fec7462c-fa32-45c6-a0d0-a1d903a2c334.png)

間違えてますが、あまり正確すぎるのは過学習になるようですので、どのくらいの間違いを許すかは考える必要がありそうです。

原理の部分や、分類の過程を視覚的にプロットしてわかりやすくする方法もありそうなので次回確かめてみたい。
パラメータも調整する方法があるらしいので、どのパラメータを変化させるとどうなるのかやってみたい。
Jupyter NotebookをmacOSに入れるにはHomebrewが簡単

Pythonの実行環境にとくにこだわりがない場合は、HomebrewでJupyter Notebookを入れるのが最も手軽だ。

```
brew install jupyter
```

起動方法

```
jupyter notebook
```

## 関連

* [Jupyter Notebookで簡単なグラフを書く - Qiita](https://qiita.com/suin/items/685c05ba76fb7120d01c)