OmniAICreator/Qiita-1.07M huggingface dataset:
CreativeCoding用にP5.jsがTypeScriptで書ける環境をつくった。

「[数学から創るジェネラティブアート － Processingで学ぶかたちのデザイン](https://www.amazon.co.jp/dp/4297104636/)」という本を予約したが、しばらくProcessingを書いてないので、本を待ちつつコーディングする環境をつくった。
サンンプルで入れたのは、ローレンツ・アトラクター。カオスの一面。
![lorenz_attractor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163452/921cb557-2c82-ca8d-7148-cc7084016fb5.png)


# GitHub
https://github.com/ymnkx/creative-coding-template

考えたのは以下のこと。

- ブラウザで見たいのでP5.jsをつかう。
- TypeScriptで書きたい。
- 少しはCSS使いたいから、Sass入れる。
- もろもろWebpackでまとめる。
- でも作品ごとのjsは分けたい。
- HTMLのジェネレーターは特に入れず。
- シンプルに。



#バンドルしたP5.jsの容量が大きい！

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">p5.jsで遊ぶ環境をつくってる。p5.min.jsは500kbくらいなのに、npmから入れると1.5mbくらいになる。どうにかならんものか…</p>&mdash; Tomohiro Yamanaka (@ymnkx) <a href="https://twitter.com/ymnkx/status/1112284706605719553?ref_src=twsrc%5Etfw">2019年3月31日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


解決策はコレ。ありがたい。importの書き方を変えればよし。
https://github.com/processing/p5.js/issues/1734#issuecomment-390380630
>import p5 from "p5"
>↓
>import p5 from "p5/lib/p5.min"

ただし、p5.sound使う場合はまだ問題アリとのこと。

#リンク
p5.js
https://p5js.org/
OpenProcessing
https://www.openprocessing.org/
NEORT
https://neort.io/
Laravel でDBのテーブルを全削除して作り直す

既存のtableをリセットしたい、または、接続先のDBを変更した、というようなときに。

全tableを削除して、マイグレーションを初めから実行するartisanコマンド。

```
php artisan migrate:fresh
```

.envを書き換えてDBを変えた場合、先にcacheクリアする。

```
php artisan cache:clear
php artisan config:clear
```
Railsでテーブルのカラムを確認したい時

#Railsにてカラムを確認したい時は、コンソールからモデル名を入力すれば確認できる様子

```rb
2.4.1 :017 > User
 => User(id: integer, organization_id: integer, login_id: string, password_digest: string, first_logged_in_at: datetime, last_logged_in_at: datetime, created_at: datetime, updated_at: datetime, deleted_at: datetime) 
```

##補足：Hoge (call 'Hoge.connection' to establish a connection)が出た時

```rb

=> Hoge (call 'Hoge.connection' to establish a connection)
```

上記のように表示されたときは
`ActiveRecord::Base.clear_cache!`をコンソールに入力すれば良いらしい。

http://nyaahara.hatenablog.com/entry/2015/02/19/234513
Mac環境でのAWS-CLIのセットアップ

作業ログとして記載。

# 概要

Mac環境にawscliの設定を実施する手順（作業時間5分）

# 1. Python及びawscliのインストール

```console
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
```
```console
python get-pip.py
```
```console
pip install awscli
```
上記が失敗する場合は、以下で実行

`pip install awscli --user`

```console
I-Taka-MBA:~ root# aws --version 
aws-cli/1.16.141 Python/2.7.10 Darwin/17.7.0 botocore/1.12.131
I-Taka-MBA:~ root#
```

# 2. CLIの設定(アクセスキー・シークレットキーの設定)

```console
I-Taka-MBA:~ root# aws configure
AWS Access Key ID [None]: ****************（アクセスキー）
AWS Secret Access Key [None]: ****************（シークレットキー）
Default region name [None]: us-east-2（デフォルトで使うリージョン）
Default output format [None]: json（コマンド結果のデフォルト出力形式:json/text/table）
I-Taka-MBA:~ root#
```

# 3. awscliコマンド確認

```console
I-Taka-MBA:~ root# aws ec2 describe-instances
{
    "Reservations": [
        {
            "Instances": [
                {
                    "Monitoring": {
                        "State": "disabled"
                    }, 
                    "PublicDnsName": "ec2-xx-xxx-xxx-xxx.us-east-2.compute.amazonaws.com", 
                    "State": {
                        "Code": 16, 
                        "Name": "running"
                    }, 
                    "EbsOptimized": false, 
                    "LaunchTime": "2019-04-17T13:17:50.000Z", 
                    ], 

(以下省略)
```

```console
I-Taka-MBA:~ root# aws s3 ls 
2019-04-07 19:08:27 ********
2018-02-21 23:28:35 ********
2017-05-25 23:08:47 ********
I-Taka-MBA:~ root# 
```

```console
I-Taka-MBA:~ root# aws ec2 stop-instances --instance-ids i-***************
{
    "StoppingInstances": [
        {
            "InstanceId": "i-***************", 
            "CurrentState": {
                "Code": 64, 
                "Name": "stopping"
            }, 
            "PreviousState": {
                "Code": 16, 
                "Name": "running"
            }
        }
    ]
}
I-Taka-MBA:~ root#
```

# 参考にさせていただいたサイト
・awscliのインストール時のエラーへの対応
https://qiita.com/iwaseasahi/items/9d2e29b02df5cce7285d
【Java】制御構文ノート

#制御構文#
##構造化定理##
 - 順次
 - 分岐
    - `if`, `switch`
 - 繰り返し
    - `while`,`for`

##分岐##
 - `if`
 - `switch`

```java
// if構文
int r=new java.util.Random().nextInt(2);
if (r<1){
	System.out.println("This is true by 'if'.");
}else{
	System.out.println("This is false by 'if'.");
}

// switch構文
int s=new java.util.Random().nextInt(3);
switch(s){
	case 0:
		System.out.println("This is Case.0 by 'switch'.");
		break;
	case 1:
		System.out.println("This is Case.1 by 'switch'.");
		break;
	case 2:
		System.out.println("This is Case.2 by 'switch'.");
		break;
	default:
		System.out.println("This is default by 'switch'.");
}
```

##繰り返し##
 - `while`
 - `do while`
 - `for`

```java
// while構文
int w=1;
while(w<4){
	System.out.println("Count No."+w+" by 'while'.");
	w++;
}

// do while構文
int dw=3;
do{
	System.out.println("Count No."+dw+" by 'do while'.");
	dw--;
	System.out.println("Count decrease -1 by 'do while'.");
}while(dw>0);


// for構文
for(int i=1; i<=3; i++){
	System.out.println("Count No."+i+" by 'for'.");
}

```

##「繰り返しの中断」という概念##
 - `continue`：ループを続ける。
 - `break`：ループを抜ける。

```java
// 繰り返しの中断
for(int i=5; i>=1; i--){
	if(i==3){
		continue;
	}
	if(i==2){
		break;
	}
	System.out.println("Count No."+i+" by 'for/continue(3)/break(2)'.");
}
```

#参考書籍#
[スッキリわかるJava入門第２版]
(https://www.amazon.co.jp/dp/B00MIM1KFC/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
Pp.098-133.
An example of #markdown #HTML conversion from standard input / output using #ruker gem's redcarpet / reverse_markdown with #docker

<h1> Dockerfile </h1><pre> <code>FROM ruby RUN gem install reverse_markdown redcarpet</code> </pre><h1> EXE </h1><pre> <code>docker build . -t ruby-gems</code> </pre><pre> <code>$ echo &#39;&lt;h1&gt;hey&lt;/h1&gt;&#39; | docker run -i ruby-gems reverse_markdown # hey $ echo &quot;abc&quot; | docker run -i ruby-gems redcarpet &lt;p&gt;abc&lt;/p&gt;</code> </pre><p> # Maybe badcase </p><pre> <code>$ docker run ruby-gems /bin/bash -c &quot;echo &#39;&lt;h1&gt;head&lt;/h1&gt;&#39; | reverse_markdown&quot; # head $ docker run ruby-gems /bin/bash -c &quot;echo &#39;# h1&#39; | redcarpet&quot; &lt;h1&gt;h1&lt;/h1&gt;</code> </pre><h1> ref </h1><p> <a href="https://docs.docker.com/engine/reference/run/">| Docker Documentation</a> </p>

# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
【C#・Xamarin.Forms】NetworkInterface.GetIsNetworkAvailable()の落とし穴

#よくあるサンプル
「インターネットに接続しているか」の検証方法として、`NetworkInterface.GetIsNetworkAvailable()メソッド`を使った以下のようなソースをよく見かけます。

```Csharp
using System.Net.NetworkInformation;

if(NetworkInterface.GetIsNetworkAvailable())
    Console.WriteLine("接続済");
else
    Console.WriteLine("未接続");
```

**LANケーブルが刺さった状態や、WiFiモジュール等を積んでいる端末でこれを実際に走らせると、有効な接続がなくても利用可能判定となり結果は「接続済」となります。**
脳死してコーディングしていたため、半日くらいこれに気づかずハマりました。
これでは「インターネットに接続しているか」の確認はできません。

以下の記事に、対策方法があります。
>Windowsストアアプリでインターネット接続されているかどうかを確認する
https://blog.ch3cooh.jp/entry/20140116/1389856295

#え、Xamarinじゃ使えないやんけ
わかります。そんなときは`Xamarin.Essentials`です。
`Windows.Networking.Connectivity`と同等の機能を提供しています。
>Xamarin.Essentials:接続
https://docs.microsoft.com/ja-jp/xamarin/essentials/connectivity
mojaveのシステム言語を英語にしてるのに特定のアプリ(例はsafari)では日本語のUIを使いたい。

macOS mojaveのシステム言語を英語にしてるのに特定のアプリ(例はsafari)では日本語のUIを使いたい。という変った要望がある。普段はLanguage Switcherというアプリで変更していたのだが、どうもchromeはそれで出来るのにSafariでは出来ない。デフォルトのブラウザはSafariを使うことにしてるのでブラウザ自体は日本語で動いてくれたほうが便利なときがある。

ので変更したい。

以下を参照した。Githubの次のissue https://github.com/mathiasbynens/dotfiles/issues/849 ようするにTerminalがファイルへのアクセス権限を持ってないのでフルでアクセスできるようにしてやる。だったらLanguage Switcherに権限渡せばいいじゃん。と思わないでもないけどあまりメンテされてるソフトでもないのでTerminalに権限を渡して(それは必要なこともあるだろうと思うので)、コマンドラインで設定した。

日本語にする場合。

```
$ cd ~/Library/Preferences
$ defaults write com.apple.Safari AppleLanguages '("Japanese")'
```

当然戻したい。

```
$ cd ~/Library/Preferences
$ defaults delete com.apple.Safari AppleLanguages
```

AppleLanguages あたりでググると日本語環境で英語にする場合とかもありますので、そのあたりは自分で調べてやってみてください。
アソシエーションって？　メモ

##アソシエーションとは

モデル（テーブル）間の紐付けをする機能のこと。

アソシエーションを使うとデータの呼び出しが楽になる！:point_up::sparkles:


##どんなときに使うの？

例）userが複数の画像を追加するとき

| id  | user|    image1  | image2    | image3     |
|:----|----:|-----------:|----------:|:----------:|
| 1   |  A  | photo1     |photo4     |photo7      |
| 2   |  B  | photo2     |photo5     |photo8      |
| 3   |  C  | photo3     |photo6     |photo9      |

↑これはダメなテーブルの作り方
　画像を追加するたびにカラムを増やさなきゃいけない
　いちいちデータベースのテーブルのカラムを増やすのなんてめんどくさすぎ:weary:

#####テーブルを分けるしかない:helmet_with_cross:
userテーブル

| id     |   user |   
|:-----------------|------------------:|
|1       |              A |   
| 2      |            B|     
| 3      |              C |       

imageテーブル


| id     |       image |    article_id   |
|:-----------------|------------------:|:------------------:|
| 1             |              photo1 |  1       |
| 2           |            photo2 |       2    |
| 3          |              photo3 |        3       |
| 4         |            photo4 |       1     |
| 5        |              photo5 |        2       |
| 6        |            photo6|       3     |
| 7         |              photo7 |        1       |


バラバラになっちゃったのでuserテーブルとimageテーブルは
関係のあるテーブルだとわからせたい
#####→:angel_tone2:アソシエーションを使おう

##アソシエーションを定義する
アソシエーションを使う条件
①モデルクラスにhas_manyやbelong_toなどの定義がされている。
②所属する側のテーブルに「所属するカラム名_id」というカラムがある。

例）ツイートとユーザーを関連づける
全てのツイートはいずれかのユーザーが作成したもので、
ユーザーは自分の作成したツイートを複数もっているということになる。

:imp:userから見るとtweetを複数持っている→**has_many**の関係


```ruby:app/models/user.rb
class User < ApplicationRecord
    has_many :tweets
end
```

:scroll:tweetから見るといずれかのuserに属している→**beong_to**の関係

```ruby:app/models/tweet.rb
class Tweet < ApplicationRecord
    belongs_to :user
end
```

##アソシエーションを実装する

:frowning2:アソシエーションを使用しない場合

```
ターミナルでrails cコマンド実行
[1] pry(main)> user = User.find(1)
[2] pry(main)> Tweet.where(user_id: user.id)
  
```

:umbrella2:tweetsテーブルに対してuser_idがuserのidと等しいコードを取得している。


:relaxed:アソシエーションを使用した場合

```
ターミナルでrails cコマンド実行
[1] pry(main)> user = User.find(1)
[2] pry(main)> user.tweets
```

:star:Userモデルに「user has many tweets」の記述をしたので
userモデルのインスタンス.tweetsでそのインスタンスが持つツイートを取得できる。
→短くて楽！:sparkles:
GitHub Awesomeレポジトリ内の各レポジトリのスター数を見える化する

GitHub AwesomeレポジトリのREADMEに含まれる各GitHubレポジトリのURLにスター数を表示する(一覧化する)ための必要最低限のWebアプリです。(注意：GitHub Tokenを利用しないと、GitHub APIの制約で約50～60個のGitHubレポジトリにしかスター数が表示されません)

https://playground-d4915.firebaseapp.com/

皆さんのGitHub Awesomeレポジトリ巡りが少しでも快適になれば幸いです :dizzy::dizzy::dizzy:

![topN.png](https://qiita-image-store.s3.amazonaws.com/0/174502/44d6621f-73ed-1d99-e6b1-de2b4cbc4e80.png)|
|:-:|


![starInfo.png](https://qiita-image-store.s3.amazonaws.com/0/174502/1fbdbb71-554c-bb9a-575c-9441001599a5.png)|
|:-:|



# 背景

GitHubにはプログラミング言語のお勧めまたは人気のライブラリ、フレームワーク、URL等をまとめてくれている`Awesomeレポジトリ`が数多く存在します。Awesomeレポジトリを活用することでフレームワークやライブラリの候補を洗い出す作業等を大幅に短縮できます。

しかしAwesomeレポジトリは各分野のライブラリやフレームワークを対象としてまとめているため、Awesomeレポジトリによっては項目数が数百～数千に及ぶことがあります。このため一つ一つのページを開いてStar数を確認して優先度付けするような作業もかなり大変です。このような悩みを解決するために各GithubレポジトリのURLにスター数が表示するための最低限のWebアプリを実装して、どこでも使えるようにFirebase上に配置しています。

> NOTE:
> 一番最初にReactを試すときに各種ReactコンポーネントとTypeScriptを試すために作ったものなので、コードもデザインはほぼ何も考えていません。特にスマホからだと非常に使いづらいですが、一応使うことはできます。


# WebアプリのURL

以下のURLからアクセスできます。

https://playground-d4915.firebaseapp.com/

## 使い方

画面上部にある入力欄に必要な情報を入力して`GET`ボタンをクリックします。

1. URL欄にAwesomeのGithubレポジトリURLを入力する
2. Token欄にGithubアカウントのGithubトークンを入力する
    - 未入力の場合はGithubトークン無しで実行する
        - トークン無しの場合、Github APIの制約によりGithubレポジトリ50個弱分のGithubレポジトリのスター数しか取得できない。詳細は注意事項の節を参照。
    - 使い捨てのGithubトークンを使用することを推奨
3. Top List Number欄に表示するTop Nの数字を入力する
    - 結果が出た後に入力してTop Nの値を変更することも可能

クリックするとAwesomeページに含まれる各Github URL情報をGithub API経由で取得します。全ての取得が完了すると、結果として以下のものを表示します。(テーブルと棒グラフはReactコンポーネントの使い勝手を試すだけに入れてます)

- Top Nのテーブル
- Top Nの棒グラフ
- スター文字およびスター数を埋め込んだAwesomeページ
  - リンク先がGithubレポジトリURLでない場合、スター数は表示されない
  - Github APIの実行回数超過エラー等が発生した場合は、スター数に-1が表示される。


# 注意事項 & Githubトークンの設定方法

基本的にクライアントのブラウザ側で「各Githubレポジトリ情報をGithub API経由で取得する」ように実装しています。Githubトークン無しの場合は`1時間あたり50回`しかAPI呼び出しを行えないため、GithubレポジトリのURLが多いAwesomeレポジトリだと50件弱までしかスター数を取得できず使い物になりません。

> NOTE: 
> Github APIの呼び出し上限を超過すると、それ以降はRate LimitによりGithub APIの応答結果が403 Forbiddenとなります。

このためGithubレポジトリのURLが多いAwesomeレポジトリの場合は、Githubトークンを入力することがほぼ必須となります。Githubトークンを使用する場合は`1時間あたり5000回`API呼び出しを行えます。

[GitHub「Personal access tokens」の設定方法](https://qiita.com/kz800/items/497ec70bff3e555dacd0)

Githubトークンを入力するのに抵抗がある方もいると思います。このためGithubトークンは使い捨てのものを作成して使用することをお勧めします。

# ソースコード置き場

ソースコードは下記URLに配置しています。改造、流用、再配布などは自由にしていただいて構いません。Githubレポジトリは一時的な作業用にしか使っていませんが、極力削除しないようにします。

https://github.com/yoichiwo7/playground/tree/master/awesome-star/awesome-star-react
rails でherokuにデプロイできない、際のwarning: constant ::Fixnum is deprecated remote: warning: constant ::Bignum is deprecated remote: rake aborted! remote: SystemStackError: stack level too deep の対処法

##問題の内容
```
Bundle completed (47.31s) remote: Cleaning up the bundler cache. 
remote: -----> nstalling node-v10.14.1-linux-x64 remote: -----> 
Detecting rake tasks remote: ----->Preparing app for Rails asset pipeline remote: Running: rake assets:precompile remote: /tmp/build_14414a0b13dd75a9888c3698db467726/vendor/bundle/ruby/2.5.0/gems/activesupport-4.2.5/lib/active_support/core_ext/numeric/conversions.rb:121: 

warning: constant ::Fixnum is deprecated remote: 

/tmp/build_14414a0b13dd75a9888c3698db467726/vendor/bundle/ruby/2.5.0/gems/activesupport-4.2.5/lib/active_support/core_ext/numeric/conversions.rb:121: 

warning: constant ::Bignum is deprecated remote: rake aborted! remote: SystemStackError: stack level too deep
 /tmp/build_611b721386924ba6fb37a7ef7af1bee4/vendor/bundle/ruby/2.5.0/gems/activesupport-4.2.5/lib/active_support/core_ext/numeric/conversions.rb:131:in `block (2 levels) in <class:Numeric>'
～　以下、延々と同じエラーメッセージが大量に出力　～
```

問題が発生した環境
・Rails 4.2.5

##調べた結果
どうやらRails4.2.5のソースコードの中にFixnum?とBignum?を使っている箇所があることがエラーの原因であるみたい。なんやそれ笑

Qiitaで参考にした解説
https://qiita.com/jkr_2255/items/647c427d2c2f7892fa93

ということで、Railsを4.2.5から4.2.8に上げてみることにしました。

Gemfileのrailsのバージョン指定を次のように変更して保存し、bundle updateを実行します。

```
source 'https://rubygems.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.8'
```
その後、改めてgit push heroku masterを行うと無事、デプロイが成功するようになりました。
[Linux] sudo netstat -nap | grep 8888

自分メモです。

AWSにはまった

```terminal

sudo netstat -nap | grep 8888

```

```terminal

sudo kill -9 [PID]

```

ssl つくり

```terminal

sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout "cert.key" -out "cert.pe
m" -batch

```

```
sudo systemstl status
```


Jupyter Notebook Config

```terminal

sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py

```

Jupyter Notebook 

```terminal

sudo jupyter-notebook --allow-root

```

apache 

```terminal
sudo apt-get install apache2
```

#2

```
df -h
```

```terminal
sudo apt update
```

```

sudo apt install apt-transport-https
sudo apt install ca-certificates
sudo apt install software-properties-common
sudo apt install curl

```
matplotlibチートシート

# 環境
windows 10
python 3.7
matplotlib 3.0.3

# よく使うグラフの作り方
## 折れ線グラフ
```py
# 折れ線グラフ
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)
```
![line_chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65020/1cde9660-2990-5eda-f106-6d49bbc7a4fe.png)


## 棒グラフ
```py
x = [1, 2, 3, 4, 5]
y = [10, 20, 40, 80, 100]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(x, y)
```
![bar_chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65020/880a2e83-f251-d155-4ba5-2cf16fccbb80.png)


## 円グラフ
```py
x = [1, 5, 8, 10, 4]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.pie(x)
```
![pie_chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65020/917f0f9c-e342-4234-356e-25df1cd0d4eb.png)


## 散布図
```py
x = np.random.randn(50)
y = np.random.randn(50)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y)
```
![scatter chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65020/3b04e7eb-5710-f158-01ac-eff70128c5bf.png)


## ヒストグラム
```py
y = [1, 2, 3, 4, 2, 3, 4, 5, 3]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.hist(y, bins=5)
```
![hist gram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65020/eaeaf7fd-e364-d326-128c-8f99d24e5e3d.png)
【Rails】ローカル開発環境で、別の端末からrails serverにWEBアクセスする方法

## 前提
説明のため前提として、サーバーPCとクライアントPCは同じWi-Fi（**同一SSID**）に
接続しているものとします。
また、Wi-Fiルーターの設定が「LAN内の通信許可」されているとします。

## サーバーPCのIPアドレス確認

ターミナルで**`ifconfig`** コマンドを入力して、wi-fiで接続しているインターフェイスの**IPアドレスを確認**する。

```
$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC0: flags=0<> mtu 0
XHC20: flags=0<> mtu 0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether xxxxxxxxxxxxxxxxxxx
	inet6 fe80::a5:5017:3c48:df62%en0 prefixlen 64 secured scopeid 0x6 
	inet 192.168.11.10 netmask 0xffffff00 broadcast 192.168.11.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
```
↑`en0:` を見ると `192.168.11.10`　であるのが分かる。


## serverを立ち上げる。
サーバーPCでrails serverを立ち上げます。この時**`-b`** オプションが必要。 

```
rails s -b 0.0.0.0
```

##別の端末からWEBアクセス
`rails s` したPCと同じWi-Fi（**同一のSSID**）に接続し、
ブラウザのアドレスバーに**サーバーPCのIPアドレス**と**3000番ポート番号**を指定して入力する。
今回の場合、サーバーPCのIPアドレスが192.168.11.10なので、**`192.168.11.10:3000`**
と入力する。

<img width="334" alt="スクリーンショット 2019-04-17 22.00.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251648/c7747282-b2b4-59e7-63d7-cb6b812f6e2f.png">

これでherokuなどにデプロイしなくても、スマホから画面確認などが出来ます。
また、**http**なのでwiresharkなどでパケットキャプチャーすれば中身が見れます。
おしゃれ並列Grid Search

Joblibでぱぱっと書きました

```python
def job(X, y, params):
    ...

def grid_search(X, y, search_space, n_jobs=-1):
    search_space = [[(k, v) for v in space]
                    for k, space in search_space.items()]

    tasks = []
    for params in product(*search_space):
        tasks.append({
            'job': delayed(job)(X, y, *[p for _, p in params]),
            **dict(params)
        })

    with Parallel(n_jobs=n_jobs) as p:
        results = p([task.pop('job') for task in tasks])

    results = [{**result, **task} for task, result in zip(tasks, results)]
    results = pd.DataFrame(results)
    return results

X, y = get_data()

search_space = {
    'param_a': [1, 3, 5, 7],
    'param_b': ['a', 'b', 'c'],
    ...,
}

results = grid_search(X, y, search_space)
```
FIR／IIRフィルタまとめ

# はじめに
FIR／IIRフィルタの漸化式、伝達関数、ブロック図をまとめました。

# 漸化式
```math
\begin{align}
y[n]=\sum_{k=0}^P b_k x[n-k]  -\sum_{k=1}^Q a_k y[n-k]
\end{align}
```

# 伝達関数
```math
\begin{align}
H(z)=\frac{b_0 + b_1 z^{-1} + b_2 z^{-2} + \cdots + b_P z^{-P}}{a_1 z^{-1} + a_2 z^{-2} + \cdots + a_Q z^{-Q} }
\end{align}
```

# ブロック図
![block.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75920/8d11a8c4-322d-74db-10ab-56622451d861.png)

# 参考文献

* [ディジタルフィルタの基礎（やる夫で学ぶディジタル信号処理）](http://www.ic.is.tohoku.ac.jp/~swk/lecture/yaruodsp/dfbasic.html)
typescriptにおけるgetterとsetterを理解する

#背景
`getter`, `setter`というものを知りましたので、勉強用メモです。

#getter, setterとは

```typescript
class Me {
  private _age: number = 21;
}

let me = new Me();

console.log(me._age); //エラーが返ってくる
```

上記のコードでは`me._age`は`private`のためアクセスすることはできません。
こういったクラス内での`private`のものに対して外部からアクセスするために`getter`, `setter`を使います。
`getter`とは値を取得するもので、`setter`とは値を更新することです。そのままです。

#使ってみる

```typescript
class Me {
  private _age: number = 21;
  
  //getterメソッド
  get age(): number {
    return this._age;
  }

  //setterメソッド
  set age(value: number) {
    this._age = value;
  }
}

let me = new Me();

console.log(me.age); //getter, 21が返ってくる

me.age = 30; //setter, 値を３０に更新

console.log(me.age); //getter, 30が返ってくる
```
以上のように`getter`, `setter`を使ってみました。

#まとめ
オブジェクト指向！！
Railsの部分テンプレ(partial)をラッピングして、collection変数を渡す

# TL;DR
```slim:_item.html.slim
h3 Item Name: #{item.name}
p Item Index: #{item_counter}
```

```slim:_wrapped_item.html.slim
h2 Item Wrapper
.item-area
  = render partial: 'item',\
    locals: { item: wrapped_item, item_counter: wrapped_item_counter }
```

```slim:index.html.slim
h1 Naked Items
.naked-items = render partial: 'item', collection: @items

h1 Wrapped Items
.wrapped-items = render partial: 'wrapped_item', collection: @items
```

# はじめに
パーシャルをrenderする際、`<%= render partial: 'item', collection: @items %>`を使うと、`.each`文より見通しが良くなるだけでなく、[性能も向上される](https://qiita.com/itmammoth/items/612efc6ad3280349b7e1)とされています。
しかし、パーシャルにそれぞれラッピングやデコレーションをしたい場合、どうすれば良いのでしょう。

# 発見

```slim:_item.html.slim
h3 Item Name: #{item.name}
p Item Index: #{item_counter}
```

```slim:_wrapped_item.html.slim
h2 Item Wrapper
.item-area　= render partial: 'item'
```

```slim:index.html.slim
h1 Naked Items
.naked-items = render partial: 'item', collection: @items

h1 Wrapped Items
.wrapped-items = render partial: 'wrapped_item', collection: @items
```

上記の構文のように、そのまま`_item.html.slim`にラッピングを当てて、renderingしようとする時、`Template::Error`が発生し、変数`item`がないと言われました。

```
ActionView::Template::Error (undefined local variable or method `item' for #<#<Class:0x00007f8d8fa105d0>:0x00007f8da6f657a8>:
    1: h3 Item Name: #{item.name}
    2: p Item Index: #{item_counter}
```

だったら変数`item`を手動で渡せば良いのでは？と思って、変数`wrapped_item`を`item`として渡しました。もちろん、Indexも必要な時は、`#{variable_name}_count`も伝播しなければいけません。

```slim:_wrapped_item.html.slim
h2 Item Wrapper
.item-area
  = render partial: 'item',\
    locals: { item: wrapped_item, item_counter: wrapped_item_counter }
```

# 参考
https://qiita.com/otakumesi/items/74a75cd6ebff7eba5c63
skeletonリポジトリを継続的に適用するgitサブコマンド git-skel

# はじめに

ここで言うskeletonリポジトリとは、何かのプロジェクトを始めるときに、定型的に必要なディレクトリやスクリプト、テンプレートの類いを格納したリポジトリです。GitHub上でもskeletonで検索するとたくさん見つかります。

こういったリポジトリを使う際は、最初にcloneしてoriginを自分のリポジトリに書き換えたり、あるいは単にファイルコピーしたりすると思いますが、元のskeletonリポジトリの更新に追従するのは結構厄介な問題です。
gitの機能を使うならpull先を変えたりcherry-pickで変更を取り込むことは可能ですが、簡単にできるという感じでもありません。

そこで外部のskeletonリポジトリを簡単に取り込めるgitのサブコマンドを作りました。
実装言語はRustです。

https://github.com/dalance/git-skel/

# インストール


Linux/macOS/Windows向けのバイナリは[Releases](https://github.com/dalance/git-skel/releases)からダウンロードするか、
Rustがインストール済みで`cargo`コマンドが使える方は以下でインストールできます。

```console
$ cargo install git-skel
```

# 使い方

ディレクトリ作成、gitリポジトリ作成、skeleton適用して最後に適用前に状態の戻すまでの流れをデモ画像にしてみました。

<script id="asciicast-241332" src="https://asciinema.org/a/241332.js" async data-speed="2"></script>

## 基本的なフロー

skeletonリポジトリ(`http://example.com/skeleton.git`)をプロジェクトリポジトリ(`http://example.com/project.git`)に適用する場合を例に説明します。

初回は適用したいリポジトリにて`git skel init`を実行します。

```console
$ git clone http://example.com/project.git
$ cd project
$ git skel init http://example.com/skeleton.git
```

すると、skeletonリポジトリの内容がプロジェクトリポジトリのリポジトリルートに展開されます。
また、そのURLとその時のリビジョンを`.gitskel.toml`に書き込みます。
展開結果に問題なければ展開されたファイルを追加してコミットしてください。

skeletonリポジトリに更新があった場合は

```console
$ cd project
$ git skel update
```

で取り込めます。
これも`git diff`などで確認して問題なければコミットです。

このようにgit-skelはファイル操作しかしないので、実際にコミットする、しないはユーザー判断になっています。
また、ファイル操作の結果、何かが失われる可能性がある場合はデフォルトではなにもしません。
例えば、あるファイルが変更されて未コミットのとき、そのファイルをgit-skelコマンドが上書きしそうなら、上書きせずに中断します。オプション（`--force`）で強制も可能です。

## `.gitskelignore`

このコマンドの対象にしたくないファイルは`.gitskelignore`で指定することができます。フォーマットは`.gitignore`と同じです。

このファイルはskeletonリポジトリとプロジェクトリポジトリの両方に置くことができます。
skeletonリポジトリに置く場合は、例えば`README.md`や`LICENSE`などskeletonリポジトリそのものについてのファイルや、説明用のサンプルファイルなどを指定するといいと思います。
プロジェクトリポジトリに置く場合は、そのプロジェクト用にカスタマイズしたファイルを指定することで、更新による上書きを防ぐことができます。

## branch/tag

skeletonリポジトリの特定のブランチやタグに追従するよう設定することもできます。

```console
$ cd project
$ git skel branch branch1
$ git skel tag tag1
```

`git skel branch`や`git skel tag`コマンドを実行すると、そのブランチ・タグの内容を取り込んで`.gitskel.toml`を更新します。

また、それ以降`git skel update`を実行した場合、追従するよう設定したブランチ・タグの最新に追従します。

## クリーンアップ

プロジェクトリポジトリからskeletonリポジトリの内容を取り除きたい場合は`git skel clean`が使えます。

```console
$ cd project
$ git skel clean
```

これでプロジェクトリポジトリに展開されたskeletonリポジトリの内容を全て削除したうえで`.gitskel.toml`も削除します。
Windows環境 Eclipse / Android Studio ショートカットコマンド対応表

|Eclipse|Android Studio|内容|
|:-----------------|------------------:|:------------------:|
|Ctrl + 1 |Alt + Enter|操作候補の表示|
|Ctrl + Y|Ctrl + Shift + Z|やり直し(Redo)|
|Control + Space|Control + Space|コード補完|
|Control+B または Control+Click|Control+B または Control+Click|宣言に移動
|Control + /|Control + /|行をコメント化|
|Control + Shift + O|Control + Alt + O|インポートを最適化

※随時更新
HTMLタグ_1はじめに（覚書）

#HTMLタグ−１

<!DOCTYPE html>  ：ファイルがHTMLで書かれた文書であることを示す。

\<html> \</html>  ：HTML文書の始まりと終わりを示す。

\<head>　\</head>　：ページのタイトルや文字コードを記載。
　　　　　　　　　　　 ・ブラウザのウインドウ内には表示されない。

\<meta charset="utf-8">　：メタタグ　utf-8文字コード

\<title>　\</title> ：ウィンドウの一番上のタイトルバーあるいはタブの部分に表示される
　　　　　　　　　　　　
\<body> \</body> :ブラウザ画面に表示される文字や画像など本体

\<h1> \</h1> : 見出し　h１〜h６まで

\<p> \</p> : パラグラフ

\<hr> :　横線（区切り）

\<!-- コメント　-->

#記述例
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>タイトル</title>
</head>
<body>
　　<h1>見出し１</h1>
　　<p>本文</p>　
　　<hr>
       <!-- コメント　-->
   <h2>見出し２</h2>
   <p>本文</p>
</body>
</html>

```
Leapmotion のサンプルプログラムを動かすためにやったこと　ubuntu18.04

## これはためになった
まず、leapmotionを使うためには環境を整える必要があり、以下のサイトが参考になった。基本的には以下2つのサイト通りなのだが、エラーが出てしまうらしい。
[第302回　Ubuntuで3Dモーションセンサ『Leap Motion』を使う](http://gihyo.jp/admin/serial/01/ubuntu-recipe/0302?page=1)
[Leap Motion + Ubuntu16.04 + Unity(ゲームエンジン)](http://kconcon3.hatenablog.com/entry/2018/02/08/230000)
ダウンロードしたもの：[V2 Tracking](https://developer.leapmotion.com/sdk/v2)
### エラーが出たために参考にしたもの。
以下のサイトにあるようにファイルを追加することで、うまく行くらしい
[Ubuntu 16.04にLeapMotion導入](https://qiita.com/mu-777/items/4dd6b4c657fb9c676bdc)
[Ubuntuに Leap Motion SDKをインストールした作業メモ](https://futurismo.biz/archives/6655/)

### pythonのサンプルコードを走らせるときに見たもの
[Leap Motion を Pythonから使う方法を調べた](https://futurismo.biz/archives/6658/)


## 使わなくてもできるけど参考までに
[PythonでLeapMotionのデータを取得する。](https://qiita.com/yamashitamasato/items/01f2a1b6069cb7c4e9b9)
マストドンのストリーミングAPIで取得できるデータ形式の違い

拙作「G+Don」の開発にあたり、ストリーミングAPIも当然使っているわけですが、公式ドキュメントにどうやらなさそうだけど非常に大事そうな情報があったので、覚書きとして掲載します。

# 事の発端

　G+Donではダイレクトメッセージをやりとりするのに、マストドンの標準的なタイムラインの表示やG+Donのタイムラインは使わず、ハングアウトやLINE等のメッセンジャーよろしくなレイアウトを採用していたりします。

　スクロールすることで/api/v1/timelines/directを呼び出して更新するようにして、最低限表示できるようにはしていたのですが、/api/v1/streaming/?stream=directを実行してトゥートが流れてくるのを待っていたのですが、プログラム上、全然流れ込んでこない・・・。

　これはおかしいと思い、調べてみようと本腰を入れました。


# ストリーミングAPI

マストドンのストリーミングAPIの公式ドキュメントは次のものです。

[Streaming API - tootesuite/documentation](https://github.com/tootsuite/documentation/blob/master/Using-the-API/Streaming-API.md)

[Streaming API - Mastodon documentation](https://docs.joinmastodon.org/api/streaming/)

個人的には次のサイトに超絶助けられてます。
[Mastodon APIを使ってみる](https://www.antun.net/tips/api/mastodon.html)

これらで示されているように、ストリーミングAPIには次の種類が存在します。

* user
* list
* public
* public/local
* hashtag
* hastag/local
* direct

　普通のAPIのほうでも同名でtimelinesに存在するため説明不要だと思います。ストリーミングAPIではデータの流れ方が普通のAPIと違い、何か更新があったらこちらがパックリ開けた口（ストリーミングAPIの実行）にその都度更新データが流れ込んできます。
　仕組みはWebSocketを使っているので、こうしたことが容易に実現できるのだそうです。

　公式での説明ではデータには次の種類（Event types）があります。

* update
* delete
* notification
* filters_changed

それぞれ流れ込んでくるデータの形式は異なります。

```javascript:test.js
//---updateの場合
var a = {
  "event" : "update",
  "payload" : "{id..."
};
//payloadはStatusオブジェクト

//---deleteの場合
var a = {
  "event" : "notification",
  "payload" : "12345..." 
};
//payloadは削除されたトゥートのID

//---notificationの場合
var a = {
  "event" : "notification",
  "payload" : "{id..." 
};
//payloadはNotificationオブジェクト

```

とりあえずトゥートを確認したいなら、updateさえ正しく取得してアプリ側で解釈できればいいわけですが、実はこの4つ以外にもデータの種類が存在します。

# ダイレクトメッセージのデータ形式

　ダイレクトメッセージはその性質上、@メンションがついているためにevent=notificationでもストリーミングに流れ込んできます。（user）
　ダイレクトメッセージを取得する/api/v1/streaming/stream=directでは、実はデータが次のように流れ込んできます。

```javascript:test.js
var a = {
  "event" : "conversation",
  "payload" : {
    "id" : "123456",
    "unread"  : true,
    "accounts" : [
      {
        "id" : "934949",
        "username" : "hogehoge",
        ...
        //---中身はAccountオブジェクト
      }
    ],
    "last_status" : {
      //---中身はStatusオブジェクト
    }
  }
};

```

そう。eventが **conversation** なのです。

userやpublicなどと同じくupdateで流れてくるんだろうなと思っていると、痛い目を見ます。公式ドキュメントに記載がないため、最初は気づかないと思います。
事実私もきづかずにupdateで捕捉できると勘違いしていたため、アプリ側で解決が遅れました。

　それから、/api/v1/streaming/?stream=directだと、**event=deleteのデータが流れてこない**ようです。ダイレクトメッセージの削除を捕捉するには、userのストリーミングAPIも合わせて使う必要がありそうです。
（このあたりは引き続き動作検証中です）


# ストリーミングAPIのデータの確認方法

　こんなときにでもChromeのDevToolsは活用できます。ストリーミングAPIもNetworkタブで確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38416/dcbeb0cc-b5e7-773c-17d5-87262403a08f.png)

　赤枠で囲んだところがストリーミングAPIを呼び出した箇所・タイミングです。以後、データを受信すると、右パネルのMessagesタブ内で確認できるようになります。

　ストリーミングAPIを実装するときはとりあえず実行できるところまで実装し準備しておきましょう。アプリ側でどう表示するとかはひとまず置いておき、先にこうして確認できれば、後はスムーズに開発を継続できると思います。

　なんといいますか、WebSocketって便利ですね。
ROS(Robot Operating System)について学ぶべき全てのことがここにあります

http://bit.ly/2V440UU
![learning-ros-starts-here-robot-ignite-academy-japan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400557/b72b1b89-849c-ae96-47ae-a934cb251125.png)
Rails6 のちょい足しな新機能を試す４ (Date#before? Date#after? 編)

# はじめに

Rails 6 に追加されそうな新機能を試す第4段。 `Date#before?` `Date#after?` 編です。
記載時点では、Rails は 6.0.0.beta3 です。　`gem install rails --prerelease` でインストールできます。

# 試してみる

今回は、rails の projectを作らなくても試せるので、直接、ruby (irb) から試してみましょう。

```ruby
$ irb -ractive_support/core_ext

# 今日は昨日より後？
irb(main):001:0> Date.today.after?(Date.today.yesterday)
=> true

# 今日は明日より後？
irb(main):002:0> Date.today.after?(Date.today.tomorrow)
=> false

# 今日は昨日より前？
irb(main):003:0> Date.today.before?(Date.today.yesterday)
=> false

# 今日は明日より前?
irb(main):004:0> Date.today.before?(Date.today.tomorrow)
=> true

# 今日は今日より後？
irb(main):005:0> Date.today.after?(Date.today)
=> false

# 今日は今日より前？
irb(main):006:0> Date.today.before?(Date.today)
=> false
```

`DateTime`, `Time`, `TimeWithZone` にも同様に `before?` と　`after?` が追加されています。

これ、わかりやすいんですかね。英語ペラペラの人にとっては自然なのかもですが、そうでない人には、ちょっと微妙かもと思ったり思わなかったり。以下みたいな読み違いをしそうな気がしないでもない...

```ruby
# 今日の後は昨日？ => この解釈が間違い。
irb(main):001:0> Date.today.after?(Date.today.yesterday)
=> true
```

このメソッドは、 `:>` が `after?` の　`<:` が　`before?` の aliasとして定義されています。と書こうとしたのですが、どうやらそうではなかったようです。

```ruby
irb(main):015:0> Date.today.method(:before?).original_name
=> :before?
irb(main):016:0> Date.today.method(:after?).original_name
=> :after?
```

アレッと思ってソースを調べてみました。

```ruby
irb(main):018:0> Date.today.method(:before?).source_location
=> ["/usr/local/bundle/gems/activesupport-6.0.0.beta3/lib/active_support/core_ext/date_and_time/calculations.rb", 64]
irb(main):019:0> Date.today.method(:after?).source_location
=> ["/usr/local/bundle/gems/activesupport-6.0.0.beta3/lib/active_support/core_ext/date_and_time/calculations.rb", 69]
```

実際のコードはこんな感じです。

```ruby:calclulation.rb
    # Returns true if the date/time falls before <tt>date_or_time</tt>.
    def before?(date_or_time)
      self < date_or_time
    end

    # Returns true if the date/time falls after <tt>date_or_time</tt>.
    def after?(date_or_time)
      self > date_or_time
    end
```

調べてみたら、alias で定義していたものを refactoring してました。

元のPRが [Add `before?` and `after?` methods to date and time classes](https://github.com/rails/rails/pull/32185) で、
refactoring の PR が [Move implementation of `before?` and `after?` to `DateAndTime::Calculations`](https://github.com/rails/rails/pull/32398) です。

# 参考情報
* [What is new in Rails 6.0](https://bogdanvlviv.com/posts/ruby/rails/what-is-new-in-rails-6_0.html)
* [Add `before?` and `after?` methods to date and time classes](https://github.com/rails/rails/pull/32185)
* [Move implementation of `before?` and `after?` to `DateAndTime::Calculations`](https://github.com/rails/rails/pull/32398)
vaexを試してみた

# １．背景
[vaex](https://github.com/vaexio/vaex)がpandasの1000倍速いというので、試してみました。
参考にしたのは[ここ](https://blog.ikedaosushi.com/entry/2019/04/14/003916)や[公式のAPI](https://vaex.readthedocs.io/en/latest/api.html)。
     
    !pip install vaex
    import vaex as vx
    df = vx.open(~~~.csv,low_memory=False)

１回hdf5ファイル形式で出力し、読み直す必要がある。

    path='vaex.hdf5'
    df.export_hdf5(path, column_names=None, byteorder='=', shuffle=False, selection=False, progress=None, virtual=False, sort=None, ascending=True)    
    df = vx.open(path)

修正：
openの際にconvertを使えばよかった。[ここ](https://buildmedia.readthedocs.org/media/pdf/vaex/latest/vaex.pdf)参照
ds = vx.open('somedata*.csv', convert='bigdata.hdf5')


# ２．よかった点／困った点
良かった点
・確かに速い！：pandasだと30秒くらいかかる動作が3秒くらいで済む。
・RAMの心配をせずに済む。
　RAMにすべてのデータを入れる必要がない？そうで5GBくらいのデータでも
　処理がサクサク進みました。pandasだとsqlとの連携が必須でしたが、
　

悪かった点
pandsとの使い勝手の違い。
・pandasでのcolumnsのように列名が変更できない。
　documentを参照すると、vaexはorderdicrなので列名変更は下記のような感じ。

    rename_column(name, new_name, unique=False, store_in_state=True)

・日本語を列名にすると上手く動かない（日本語の処理が難しい？）
・pivot_tableとか使いたい
・applyなどpandasでよく使う関数の一部が使えない。

他に気付いたら、追記するかもですが、といりそぎ。


# ３．その他
現状、完全にpandasから移行とはならないとは思いますが、速度やRAMの利用効率から
見て使い場面を選んで使おうと思いました。
・機械学習や可視化も売りにしている様子。

2019/4/18追記：pandasの関数との比較
[pandas 0.24.2 documentation](https://pandas.pydata.org/pandas-docs/stable/index.html)  
[vaex 1.0.0-beta.6 documentation](https://vaex.readthedocs.io/en/latest/api.html)  
を参照。

| 項目   |      pandas      |  vaex |
|----------|:-------------:|------:|
| import| import pandas as pd | import vaex as vx |
| 入力|  pd.read_csv('~.csv') | vx.open('~.csv') |
| 出力|  pd.to_csv('##.csv')  | vx.to_csv('##.csv') |
| 集計| count/mean/std/…|同左。同じことができる。 |
| sort|有|有|
| groupby|有|（APIdocumentにはないみたいだが）有|
| 列名 | df.columns | vx.get_column_names|
| rename| df.rename(index=str, columns={"":"",…}) |vx.rename_column(old_str,new_str)|
| クロス集計| pivpot_table |    無 |
|日本語|OK|OK。（列名ではNG）|
|機械学習|無|有|
|DB連携|with sqlite3.connect~|無?|

使えそうな関数

|関数|説明|
|------|------|
|vx.from_ascii(path, seperator=None, names=True, skip_lines=0, skip_after=0, **kwargs)|asciiファイルを読み込む。日本語がいける？|
|vx.open_many(filenames)|複数のファイルを一度に読み込んでmergeした結果を返す。|
|vx.from_arrays(text=text)|配列（text)をdataframe化|
|df.text.str.contains(str)|部分一致検索の結果を返す。df[df[].text.str.contains]で使えそう|
|df.to_pandas_df|pandas.DataFrameとして返す。|





20200925.追加
[koalas](https://github.com/databricks/koalas)というのも気になる。研究しよう。

20230116追加
[polars](https://www.pola.rs/)これは良い。pandasから乗り換える要準備。
Windows10　GO言語環境構築してみた


##はじめに
今回はWindows用インストーラーからダウンロードしようとしたが.msiが何故か動かなかったため、zipファイルから環境構築することにした。
##対象者
Windows10でGo言語環境構築したい人
##設定環境
Windows10　64-bit
インストールするバージョン：go1.12.4

##1．ダウンロード
C:に（C:\Go）となるようにGoフォルダを作る。
[「公式サイト」](https://golang.org/dl/)からgo1.12.4.windows-amd64.zipをダウンロード。ダウンロードしたzipを展開し、中のデータを(C:\GO)のフォルダに移動させる。
例えば、binフォルダだと、（C:\Go\bin）となるはずである。
##2.　PATHを通す
「システム」→「システムの詳細設定」→「環境変数」から以下のようにユーザー環境変数にGOPATHを新規」ボタンから追加。<br>
次に、ユーザー環境変数のPathの欄を選択し「編集」ボタンから編集する。「新規」ボタンから「%GOPATH%bin」を追加。

![GOPATH2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340562/f12a8784-800e-7cb1-362a-43a2a697f84b.png)

##4．確認
PowerShellで「go version」で以下のように表示できれば正常にインストールできている。
![go_version.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340562/3aabcce0-b0b1-56a7-9c5a-f81acaa3dc6c.png)

##参考サイト
[「婿入りエンジニア、ブログ書くーGolang開発環境構築 – Windows10 / VisualStudioCode」](http://mukoiri-engineer.com/go-development-environment/)
[「Windows10でGO言語環境の構築」](https://qiita.com/maruyama42/items/7b6cd82eb37e2a524572)

##最後に
最後まで閲覧いただきありがとうございました。まだ、知らないことが多いので不備等ありましたらご教授のほどよろしくお願いいたします。
命名規約における基本的な心構え

# はじめに
こんなタイトルで書いていますが、
私自身、命名なんてどーでも良いと思っていました。
（正直動けば良いので過去形では無く今も思っている「かも」）

キャメルケースにしろだとか、メソッドは動詞で書けだとか、
そんな規約は色々書かれている方はいます。

しかし、それ以前の所で、
「この名前の付け方は無いだろ。。。。」
って、思うことがしばしばあるので、
自分には名前の拘りがあるかと最近思うようになったりならなかったり、、、

ガイドラインにアンチパターンを書いておけば、
とりあえず許されざる名前が増えることは防げるのかな？っと思い
この表題で4年ぶりに執筆します。

最初に言った通りこう命名しろって拘りがあまり無いので、
この命名は止めてと欲しいアンチパターンの規約となります。

~~こんな事、記事にする人は居ないよな～っとも思ってたりします。~~

# そも、命名とは？
命名は名前を付ける事です。
名前とは何か考えて付ける必要があります。
wikipedia抜粋の名前の一般論は下記

> すべての事象には名がある。我々は先ずその対象に名前を付ける。
> そのためには対象の概念を明確にし、またそれ以外の事象との区別を持たなければならない。
> この過程で名前を付けた対象が明確になる。

つまり、名前たる条件は
「対象の概念を明確にする。」
「それ以外の事象との区別する。」
の2点が必要なんじゃないかな？
っと、私は思います。

ただ、凄まじく詳細な説明チックに書いても、
上記2点の条件は満たしてしまうので、
＋Simpleにする事を追加して。

私的なルールでは
**1. 対象の概念を明確にする。**
**2. 同一名前空間内で他と区別する。**
**3. 単純にする。**

の３つを守れば良いと思います。

# 命名アンチパターン
以下私が「無いだろ」って思った名前のパターンと即興で考えた例と理由です。
## 名前に取りうる状態を持たせる
**例：「エラー・ワーニング区分」**
子供の名前に**ピアニスト太郎**って付けるようなものです。
ピアニスト以外の道が許されないと思いませんか？
エラーと警告以外の状態が増えたらどうするんだよ、、、っと思ってたら、
案の定、インフォメーションの状態が増えました。

概念が明確になっていないってのと、
エラーと警告なんて汎用的すぎて重複する可能性も高いので、
区別されない可能性が高いです。

## 情報が重複している
**例：「商品カテゴリー種別区分」**
子供の名前に**エクセル秀一**って付けるようなものです。
って、秀でた人に育って欲しい気持ち重々は解りますので、
名前の例はあまり響かないですね、、、、

商品種別区分っで良いのでは？
（区分は命名規約で一律付けるサフィックス）
あとできれば商品のなんの種別かを付けるのが良いと思いますが、
種別だと、見る観点が変わると重複する可能性があります。

## 自明の情報が付与されている
**例：テーブル名に「商品情報マスタ」**
**例：機能名に「商品登録処理機能」**
（マスタと機能は命名規約で一律付けるサフィックス）
子供の名前に**人間太郎**と付けるようなものです。
人間は解ってますから、、、、

テーブルに情報以外入りますか？
処理しない機能ってありますか？
例外はあるかもしれませんが、
こういった所を削ってシンプルな名前にした方が良いかと思います。

## 汎用的過ぎる
**例：「状態区分」**
子供の名前ネタ尽きた。。。。。

これが全ての機能で同じものを使うのなら解りますが、
特定の機能だけだったのですよね。。。
また、テーブル内、機能内に閉じているリソースであれば許せますが、
全体で使われるような名前空間が広い場合において、
汎用的な情報のみでは重複する可能性が高いです。

# さいごに
ざっと書きましたが、
子供の名前を例にしたのは、
「子供の名前を付けるときくらいに魂込めて付けろ！」
って、誰かが言っていたのを思い出したのが切っ掛け。

大げさな話ですが、
成果物は後の世に残りますから、慎重に命名した方がいいとおもいます。

とは言え、
最初に言いましたが私は名前に拘りないので、

**1. 対象の概念を明確にする。**
**2. 同一名前空間内で他と区別する。**
**3. 単純にする。**

３つを守れば良いと思います。
Nuxt.jsをvscodeでデバッグするためのメモ

## 前提

- Nuxt.jsの動作モードは `universal`(SSR有効)

- vscodeのextensionとして[Debugger for Chrome](<https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome>) がインストールされている

## やりたいこと

1.  vscodeからNuxt.jsのデバッグをしたい
2. かつ、vscodeの行クリックで設定したブレークポイントで、エディタのデバッグモード上のbreakをかけたい(debuggerを明に埋め込むのではなく)
3. 実際にbreak中に表示されるコードは、本来編集しているコードとしたい



上記2はいまいち伝えにくいのですが、こういうふうにbreakしたいということです。

<img width="499" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317673/73cdfedf-d36b-c274-6bd9-fcc075c1b383.png">

3は、build後のコードではなく、本来実装者が見ているコード上でデバッグが行えるようにしたいという意味です。これを無視すれば、 ``debugger`` (という記載)を仕込むだけで大半片付くわけですが。



で、以下のようになりました。

## nuxt.config.jsを修正

nuxt.config.jsに以下の行を足します。

SourceMapとはなんぞやという人(自分はそうでした)は [こちら](https://www.yoheim.net/blog.php?q=20180309) をご参照ください。

```javascript
  build: {
    (略)
    extend(config, ctx) {
      (略)
      // Run ESLint on save
      if (ctx.isDev && ctx.isClient) {
        config.devtool = 'inline-cheap-module-source-map' // <-- ここを足す
        config.module.rules.push({
          enforce: 'pre',
          test: /\.(js|vue)$/,
          loader: 'eslint-loader',
          exclude: /(node_modules)/,
        })
      }
    },
  },
```



以降は多分に [こちら](https://qiita.com/idani/items/ac638d5a0786aaefb8cf) を参考にしました。

## package.jsonを修正

```json
{
  "name": "nuxt-bulma",
  (略)
  "scripts": {
    "dev": "cross-env NODE_ENV=development nodemon server/index.js --watch server",
    "build": "nuxt build",
    "start": "cross-env NODE_ENV=production node server/index.js",
    "generate": "nuxt generate",
    "lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
    "precommit": "npm run lint",
    "test": "ava",
    "debug": "node --inspect-brk=9229 node_modules/nuxt/bin/nuxt" <-- 追記
  },
```

このキーとなっている ``"debug"``は、次のlauhch.jsonの``runtimeArgs`` と合わせる必要があります。



##  launch.jsonを修正

こうなりました。

```json
{
  // IntelliSense を使用して利用可能な属性を学べます。
  // 既存の属性の説明をホバーして表示します。
  // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch via NPM",
      "runtimeExecutable": "npm",
      "runtimeArgs": ["run-script", "debug"],
      "port": 9229,
      "sourceMaps": true
    },
    {
      "type": "chrome",
      "request": "launch",
      "name": "Launch Chrome",
      "url": "http://localhost:3000",
      "webRoot": "${workspaceFolder}"
    }
  ],
  "compounds": [
    {
      "name": "Full-stack",
      "configurations": ["Launch via NPM", "Launch Chrome"]
    }
  ]
}
```

この状態で、デバッグ用の再生ボタンを押すとブラウザが新規に開きます。

<img width="303" alt="スクリーンショット 2019-04-17 20.41.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317673/c7b21964-ba66-6ecf-8794-1fc42c4f9846.png">

その後一定時間が経過するとブラウザウィンドウでbuildのプログレスが表示されるようになり、その後ブレイクがかかる部分の処理を実行すると、vscode上でブレイクがかかります。

いやー、調べるのにいろいろ時間がかかりました。

ひとえに自分のNuxt.jsおよびJavaScriptの知識不足ですね。

情報を公開してくださっていた皆様に感謝します。
プログラミング学習記録60〜セキュリティ〜

##今日やったこと
- セキュリティについてざっくり学ぶ
- Railsでアプリを作り、公開するまでの過程をブログにまとめる

今日はセキュリティについてちょっと学びました。

トロイの木馬は知っていたのですが、トロイの木馬にも色々な種類があるのは知りませんでした。

サイバー攻撃にも色々なものがあることを知りました。
色々ありすぎてよくわからないくらいありますね笑

ウィルスソフトはプログラムで作られているので、ウィルスを理解するためにもプログラミングの知識はあったほうがいいなと思いました。

あと、以前、Railsで作ったアプリを公開するまでの過程をブログにまとめました。


[【Rails5】初心者が最短でWebアプリを作る方法解説](https://kinoopy.com/rails5-webapp-deploying/)


初心者向けに書いたのですが、いきなりCloud9やHerokuという言葉を出してしまっているので、もしかしたら完全な初心者の人向けにはなっていないかもしれません。

今までずっと書こう書こうと思って書いていなかったので、書けてよかったです。

ということで、明日からも引き続き頑張ります。

おわり
CentOS7にOpenSSL1.1.1をインストール

## 概要
CentOS7.5でPython3.7のインストール時に、OpenSSL1.0.2以上のインストールを求められたので1.1.1を入れた。
この記事ではその時の手順をまとめた。
ちなみに、ここではデフォルトで入っている1.0.2は残したまま、別途1.1.1をインストールする方法を取る。

### 関連記事
- [【Python2to3アップデート方法】Python3系のインストール](https://qiita.com/Esfahan/items/913fdf27ee4a564b1936)

### OpenSSLの各versionのサポート状況
1.0.2は2019-12-31にEOL。
https://www.openssl.org/policies/releasestrat.html

> The next version of OpenSSL will be 3.0.0.
Version 1.1.1 will be supported until 2023-09-11 (LTS).
Version 1.1.0 will be supported until 2019-09-11.
Version 1.0.2 will be supported until 2019-12-31 (LTS).
Version 1.0.1 is no longer supported.
Version 1.0.0 is no longer supported.
Version 0.9.8 is no longer supported.


## OpenSSLのインストール
## 依存関係のインストール

```shell-session
$ sudo yum install -y zlib-devel perl-core make gcc
```


### OpenSSLのダウンロード
以下のサイトからインストールしたいバージョンをダウンロード。
https://www.openssl.org/source/

ここでは1.1.1をインストールする。

```shell-session
$ sudo curl https://www.openssl.org/source/openssl-1.1.1.tar.gz -o /usr/local/src/openssl-1.1.1.tar.gz
```

### OpenSSLのインストール

```shell-session
$ cd /usr/local/src
$ sudo tar xvzf openssl-1.1.1.tar.gz
$ cd openssl-1.1.1/
$ sudo ./config --prefix=/usr/local/openssl-1.1.1 shared zlib
$ sudo make depend
$ sudo make
$ sudo make test
$ sudo make install
```

### インストールされたことを確認
以下にインストールされる。

```shell-sesiion
$ sudo ls -l /usr/local/openssl-1.1.1
total 0
drwxr-xr-x 2 root root  37 Apr 17 05:57 bin
drwxr-xr-x 3 root root  21 Apr 17 05:57 include
drwxr-xr-x 4 root root 159 Apr 17 05:57 lib
drwxr-xr-x 4 root root  28 Apr 17 05:58 share
drwxr-xr-x 5 root root 140 Apr 17 05:57 ssl
```

## OpenSSLを共有ライブラリに追加する
下記ページの、「システム全体で使いたい場合」以降を実施してください。
これを行わないとOpenSSLを利用できません。

- [CentOS7でldconfigを使って共有ライブラリを追加する](https://qiita.com/Esfahan/items/0064d845ca6faf7f3d47#%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%85%A8%E4%BD%93%E3%81%A7%E6%B0%B8%E7%B6%9A%E7%9A%84%E3%81%AB%E4%BD%BF%E3%81%84%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88)

## 動作確認
以下コマンドで動作確認をする。TLSv1.3に対応していることがわかる。

```shell-session
$ sudo /usr/local/openssl-1.1.1/bin/openssl ciphers -v TLSv1.3
TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
```

## 関連記事
- [【Python2to3アップデート方法】目次](https://qiita.com/Esfahan/items/067484ee0cb3dd374992)


## 参考
- [TLS1.3正式対応！OpenSSL 1.1.1 (LTS) インストールメモ](https://blog.apar.jp/linux/10588/)
MongoDBが起動しない時のメモ

研究室にて利用しているMongoDBが起動しなくなったのでメモ。

## 起動しなくなった原因
KVM上でVMを立ててMongoDBを利用しているのですが、KVMの機能を利用してVMを落としてしまい内部の設定が壊れた...?

## ググってみた

[[EC2]MongoDBが起動出来なくなって四苦八苦した話](https://qiita.com/momota10/items/cbe5c7e20b6f8d27e391)

このサイト様のようなことを紹介している記事は結構見つかるけれど、それでもなぜかうまくいかない。。。

ということで試したことをいくつか紹介。
## 試したこと

```
[root@DatabaseVM ~]# sudo chown -R mongod:mongod /var/lib/mongodb
```

権限をデータベースのあるディレクトリに対して与える。
コピペ注意。自分のデータベースがあるディレクトリを指定してください。

```
rm mongod.lock
```

強制終了とかすると残ってしまう？ファイルらしいです。

```
rm -R journal
```

こちらもディレクトリごと削除。怖かったので一応バックアップも取っておきました。

```
ps aux
```

もしかしたらプロセスが生きているかもしれないので、怪しいプロセスを探してkillしておく。

```
mongod --repair --dbpath=/var/lib/mongodb
```

ここでもはまりました。ちゃんとパスを指定してあげてください。


```
service mongod start
```

上記のことを試してみたら、ひとまず起動には成功しました。

```
mongod -f /etc/mongod.conf
```

ここでかなりはまりました。ちゃんとconfファイルを指定してあげないとちんぷんかんぷんなディレクトリを参照してしまうみたい。（デフォルトのディレクトリ？）

```
mongo [ip]:[ポート]
```

ポートを指定しなかったためここでもはまっていました。

## 感想

苦しすぎてもう再起動なんてしたくないレベルです。
ただ、ちゃんと得られたことは後輩に残してあげようとqiitaに初投稿しようといういいきっかけにはなりました。
phpのpublic・private・protectを理解しよう！

#あれ？なんでNULLになるんだ？？
データベースからデータを引っ張る関数を叩いてるのに、なぜかNULL…
`var_dump`するとちゃんと引っ張れてるみたいだけど…
ん？private？？
なんじゃこりゃ？？？

##classにはアクセス修飾子がある。
・どこからでもアクセス可能な`public`
・class内部からしかアクセス出来ない`private`
・継承された子のclassと親のclassしかアクセス出来ない`protected`
の3つがあります。
それぞれ適切に宣言することで
間違った動作を弾き、安全性を高めることが出来ます。


###public
きっとclassを学び始めたボーイアンドガールは見慣れたアクセス装飾子。

```php5
class oyakurasu{
  public $kotoba = 'たいへんなんじゃよ';
}

$oya = new oyakurasu();

echo $oya->kotoba; //たいへんなんじゃよ

$oya->kotoba = 'やっぱかんたん';

echo $oya->kotoba; //やっぱかんたん

var_dump($oya); //object(oyakurasu)#1 (1) { ["kotoba"]=> string(21) "やっぱかんたん" }
```

こんな感じでclassの外部から
アクセスして書き換えたり読み取ったり出来ます。

###private
privateはclassの内部でしかアクセス出来なくなるアクセス装飾子です。
例えばclassの中で完結する処理はprivateにすると
後でへんに変更を加えられないので安全性が高まります。

```php5
class oyakurasu{
  private $kotoba = 'たいへんなんじゃよ';
}

$oya = new oyakurasu();

echo $oya->kotoba; //Fatal error: Uncaught Error: Cannot access private property

$oya->kotoba = 'やっぱかんたん';	//Fatal error: Uncaught Error: Cannot access private property

echo $oya->kotoba; //Fatal error: Uncaught Error: Cannot access private property

var_dump($oya); //object(oyakurasu)#1 (1) { ["kotoba":"oyakurasu":private]=> string(27) "たいへんなんじゃよ" }
```
こんな感じで外部からアクセスしようとすると`Fatal error`で`privateプロパティは外部からアクセス出来ません`と怒られます。

###protected
protectedは宣言されたclass内部と
そのclassを継承した子classの内部でしかアクセス出来なくなるアクセス装飾子です。
privateと同様にclass外部からはアクセス出来ません。

```php5
class oyakurasu{
  protected $kotoba = 'たいへんなんじゃよ';
}

class kokurasu extends oyakurasu{
	public function hatugen(){
		return $this->kotoba;
	}

	public function omoidasu(){
		$this->kotoba = 'やっぱかんたん';
	}
}

$ko = new kokurasu();

echo $ko->hatugen(); //たいへんなんじゃよ

$ko->omoidasu();

echo $ko->hatugen(); //やっぱかんたん

echo $ko->kotoba; //Fatal error: Uncaught Error: Cannot access protected property

$ko->kotoba = 'でもきつい';//Fatal error: Uncaught Error: Cannot access protected property

var_dump($ko); //object(kokurasu)#1 (1) { ["kotoba":protected]=> string(21) "やっぱかんたん" }
```
こんな感じで`kokurasu`内ではprotectedの`$kotoba`はアクセスして書き換えたり読み替えたり出来ますが
classの外部からはアクセス出来ません。

##でも外部からprivateやprotectedにアクセスしたい…
そんなワガママボディをもったマダムのご要望にお答えしましょう。
privateやprotectedな部分に干渉するpublicな関数を作れば良いのです。

```php5
class oyakurasu{
  private $kotoba = 'たいへんなんじゃよ';

  public function yomitori(){
	  return $this->kotoba;
  }

  public function kakikomi($text){
	  $this->kotoba = $text;
  }
}

$oya = new oyakurasu();

echo $oya->kotoba;	//atal error: Uncaught Error: Cannot access private property

$oya->kotoba = 'やっぱかんたん';	//atal error: Uncaught Error: Cannot access private property

echo $oya->yomitori();	//たいへんなんじゃよ

$oya->kakikomi('でもきつい');

echo $oya->yomitori();	//でもきつい


var_dump($oya); //object(oyakurasu)#1 (1) { ["kotoba":"oyakurasu":private]=> string(15) "でもきつい" }
```

こうすれば
実質外部からアクセスしてない
実質内部からアクセスしてる
からprivateやprotectedへの干渉が出来ます。

#編集後記
入社13日目
すでに存在しているclassからデータを引っ張る際に困ったのでまとめました。
入社してから、ソースコードの修正ばかりやっているのでこういうテクニックが身についていきます。
と同時にあやふやにしてた部分も身につくので
やっぱ人のソースコード弄るのってレベルアップになります。
【Rails】 jQueryが動作しない時の対処法 (読み込む順番に気をつけないといけない)

いつも忘れてしまうので備忘録。

##ダメなパターン

```_head.html.erb
<%= stylesheet_link_tag    'style', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'selectordie' %>

<!-- JQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

```

`javascript_include_tag` → `jQuery CDN` の順番では期待通りになりませんでした。


## 正のパターン

```_head.html.erb
<!-- JQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<%= stylesheet_link_tag    'style', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'selectordie' %>
```

**`jQuery CDN` → `javascript_include_tag`** の順番だと期待値通りの動作！



## まとめ
先にjQueryロードしないとスクリプト読めないって話。（Railsに限った話じゃない・・・）