OmniAICreator/Qiita-1.07M huggingface dataset:
bがarrayの時、a = b.delete("c")は何をしているのか

## 結論

cを変数aに乗せた上で配列bからcを削除している。

## 確認

ruby 2.5.0にて検証

```ruby
> pets = ["coco", "sora", "maron", "choco", "hana"]
=> ["coco", "sora", "maron", "choco", "hana"]
> elder_pets_name = pets.delete("coco")
=> "coco"
> pets
=> ["sora", "maron", "choco", "hana"]
```

## ちなみに(hashの場合)

```ruby
> total_home_runs = {:oh => 868, :nomu => 657, :kadota => 567, :yamamoto => 536, :kiyohara => 525}
=> {:oh=>868, :nomu=>657, :kadota=>567, :yamamoto=>536, :kiyohara=>525}

> from_seibu_lions = total_home_runs.delete(:kiyohara)
=> 525

> total_home_runs
=> {:oh=>868, :nomu=>657, :kadota=>567, :yamamoto=>536}
```

## なぜこんな分かりきったことを書こうと思ったのか

https://qiita.com/ricoirico/items/5cfcac1b8e67184641f1

> ※コーディングしてて詰まったことはqiitaにアウトプットすることで定着率が1500％アップするという自分調べに基づいています。
HyperLedger Fabric v1.1 chaincodeのコーディングの第一歩

# １．はじめに
初めて、HyperLedger Fabricのchaincodeのコーディングする人向けの記事です。コーディングのとっかかりになって頂けたら幸いです。

## １．１　想定読者

 - HyperLedger Fabricのサンプルソースを取得している人（gitから取得できます `git clone https://github.com/hyperledger/fabric-samples.git`）
 - Go言語の基本的な知識がある人（但しC++やjavaができる人であればついていけると思います）
 - HyperLedger Fabricの基本的な知識がある人
 - HyperLedger Fabricのchaincodeの実行環境がある人（なくてもいいですが、やりながら試してもらうと理解しやすいと思いますので）これから作る人はこのページを参考にしてみてください。コマンドラインでの実行方法について記載しています(【[vagrant(ベイグラント)を使って、HyperLedger Fabric v1.1の環境を簡単構築](https://qiita.com/yukike/items/093b9277296886746f91)】、【[HyperLedger Fabric v1.1でchaincodeを実行する](https://qiita.com/yukike/items/f3654bae36e8c68e1f6c)】)

# ２．サンプルソース
HyperLedger Fabricにはサンプルソースがありますので、サンプルソースをコピーして、コーディングを始めるのがいいかと思います。今回はchaincode_example02というサンプルソースを参考にしたいと思います。サンプルソースは以下にあります。サンプルソースは単純な送金アプリで、A→BにX送金する(サンプルソースのファンクション：invoke)。AやBの残高を参照する(サンプルソースのファンクション：query)機能があります。

```
サンプルソース格納場所
/home/vagrant/fabric-samples/chaincode/chaincode_example02/go/chaincode_example02.go
※HyperLedger FabricのサンプルソースをgitからCloneする必要があります。/home/vagrantの部分は各自の環境によって異なります
```

# ３．呼び出されるファンクション
chaincodeで呼び出されるファンクションは以下のみです。

 - Init   ・・・インストール時（初期化）に実施されるファンクション
 - Invoke ・・・chaincodeが呼び出された場合に実施されるファンクション

サンプルソースを見るともっといろいろとファンクションがありますが、`Invoke`からパラメータを参照して各処理へ分岐しているので、基本はこれだけです。

chaincode_example02.goを使用して別のプログラムを作る場合は、invoke(上のInvokeとは違うファンクション)とqueryを修正して使っていけばいいのではと思います。deleteについては不要の人もいるかと思いますのでいらない場合は削除してしまえばいいと思います。

# ４．ＤＢを更新、参照する
HyperLedgerで使用するＤＢはキーバリューストアタイプのＤＢで、キーワードに対して、対応した値を設定、参照するというものになります。chaincodeのコーディングについてはとりあえず下の２つを覚えればスタートできると思います。（もちろんGo言語の知識も必要ですが）。DBを更新するファンクションは以下になります。第一引数が、キーワードで、第二引数が値です。複数の値を設定したい場合は第二引数をjsonバイト列にします。jsonバイト列を使用する場合は、encoding/jsonパッケージのMarshal関数を使用します。結果はエラーだった場合、errにエラー内容が入ります。正常である場合はnilです。
※encoding/jsonパッケージやMarshal関数については別のHPを参照してもらえればと。。。

```go:chaincode_example02.go
更新関数
err = stub.PutState(A, []byte(strconv.Itoa(Aval)))
```

参照の場合は第一引数にキーワードを入れます。Avalbytesに参照結果が入ります。errにはエラー内容が入ります。正常である場合はnilです。json形式で値が設定されている場合はAvalbytesをencoding/jsonパッケージのUnmarshal関数を使用して、パースしてください。

```go:chaincode_example02.go
参照関数
Avalbytes, err := stub.GetState(A)
```

# ５．おわりに
上記に記載したことはサンプルソースを見ればわかることですが、後学のためまとめさせてもらいました。今後は取引履歴の参照の仕方や、ソースの更新時にＤＢに登録した内容がクリアされてしまう問題の対処について調べたいと思います。
別のユーザーアカウントでChromeを動かす

# 環境準備

## "スタートメニューから別のユーザーとして実行する"ためのレジストリを追加する

1. regedit.exeを開きます。
2. HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorerキーを開きます。
3. DWORD値「ShowRunAsDifferentUserInStart」を作成し、データを「1」に変更します。

## 他のアカウントを追加

1. 設定を開きます。
2. メニュー"家族とその他のユーザー"を選択し、ローカルアカウントを追加します。

※1 Microsoftアカウントを使用しないオフラインアカウントとして作成します。
※2 何も指定しなければ標準ユーザーとして作成されます。

## Chromeインストール

Chromeはスタンドアロン版を使用しました。
※これ以外注意することは無いと思われます。


# 実際の使用

1. スタートメニューにて、chromeを右クリック。[別のユーザーとして実行]を選択。
2. アカウントとパスワードの入力を要求されるので、先ほど作成した他のユーザーアカウントの名前とパスワードを入力。
3. タスクマネージャーにてchromeが別のユーザーで実行されていることを確認する。


# その他の方法
windows10homeでもrunasコマンドが使用できる。
chrome.exeを実行する例としてはこんな感じ

```:
runas /user:username "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"

username のパスワードを入力してください: xxxxxx
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe をユーザー "hostname\username" として開始しています...
```

# 結果
アカウントを切り替えないと使用できないような環境にいても同じような処理をすることによってユーザー切り替えの手間をかけることなく、オペレーションが出来るので便利。
また、Users権限で作られたアカウントは別のユーザーアカウント、Administratorsアカウント、システムフォルダに影響することがほぼ不可能に近いのでWebプロセス分離ともいえる(...いえないか)。

## タスクマネージャで確認した結果
ランダムに名前がつけられたコンピュータではuser1(初期登録ユーザ)で作業していて、chromeを動かす為のユーザーアカウント"chrome"でプロセスを実行していることを確認できる。

![chrome run as chrome.png](https://qiita-image-store.s3.amazonaws.com/0/184939/04b8780c-9af1-936b-d9f6-0058d1c273b3.png)
AE レイヤーをグループ化してリンクする

#レイヤーのグループ化
考え方として、レイヤー名にGrp1 とかGrp2とかつけておいてそれを参照させる。
具体的にはレイヤー名は「Grp1/Parent」とかになっています。

エクスプレッションでレイヤー名を 「/」でスピリットして配列に格納しておき
「/」で分けた名前の前後(Grp1 か　Parent)を活用する感じです。
今回はシェイプを横に並べていくだけになりますが、こんなエクスプレッションになります。

```jsx
var ParentCheck = thisLayer.name.split('/')[1];
if (ParentCheck == 'Parent'){
[value[0],value[1]]
}

try{
var check = thisComp.layer(thisLayer,+1).name.split('/')[0];
}
catch (e){
[value[0],value[1]]
}

var GrpNum = thisLayer.name.split('/')[0];
if (check  == GrpNum ){
var x = thisComp.layer(thisLayer,+1).content("グループ 1").content("長方形パス 1").size[0];
var xp = thisComp.layer(thisLayer,+1).position[0];
[xp+x,value[1]]
}
else{
[value[0],value[1]]
}
```

![bandicam 2018-07-24 09-29-13-899.jpg](https://qiita-image-store.s3.amazonaws.com/0/178061/adc6034b-ea57-2322-2688-2aa8b28200d9.jpeg)
CakePHP2でstatic function内からモデルのプロパティへアクセスする

## 概要
CakePHP2のComponentに実装した静的メソッド内から、モデルのプロパティへアクセスする必要があったのでメモ。
静的メソッド内からは`$this->Model->property`ではアクセスできない[^1] ので、別の方法で対応。

## 対応方法
```php
public static function foo() {
  $val = ClassRegistry::init('Model')->property;
  ...
}
```

[^1]: [PHPオブジェクト指向入門（前半）](https://qiita.com/mpyw/items/41230bec5c02142ae691) 内の 「[静的プロパティ / 静的メソッド / クラス定数](https://qiita.com/mpyw/items/41230bec5c02142ae691#%E9%9D%99%E7%9A%84%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3--%E9%9D%99%E7%9A%84%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89--%E3%82%AF%E3%83%A9%E3%82%B9%E5%AE%9A%E6%95%B0)」
Ubuntu で Audacity でデスクトップ録音

Windows10でやろうとしたが、うまくいかないのであきらめてUbuntuでやるようにしました。

あらかじめ、Audacityを起動しておく。

```

$ pavucontrol 
```
で「pulseaudio 音量調節」を起動

録音タブで、audacityに割り当てる。

![image](https://qiita-image-store.s3.amazonaws.com/0/139524/7ece8e2a-56bd-1cf2-40dd-e100e9c1b4de.png)

録音できた

![image](https://qiita-image-store.s3.amazonaws.com/0/139524/3dbdd064-dcd0-9533-ac94-95f6025ea723.png)

今回、「夏休み子ども科学電話相談」を「らじるらじる」でチェックして録音しようとした。下図のようにして録音したが、もう少しゲインを上げたほうがいいみたい。


![image](https://qiita-image-store.s3.amazonaws.com/0/139524/8e79e54b-e4c0-d447-bd7c-1718b962417a.png)

問題点　マスターボリュームを絞るとAudacityも小さくなる（続行中）
【ランダムフォレスト】twitterデータを使ってテキストのポジネガ判定を行う


テキストの感情分析をしたいと思って作ってみました．
動機:テキスト文の極性(ポジティブ，ネガティブ)の判定を手っ取り早く行いたい．　>>　ある商品レビュー，話題分析に，twitterのリアルデータを使うことができないか．

#実装した内容
- ツイートを取得してきて， mysqlに格納する．(今回は「嬉し」，「悲し」の2クエリ)
- モデル: ランダムフォレスト
- モデルの保存: pickle
- 教師ラベル(正例，負例)の付け方: 「嬉し」で集めてきたツイートを全部POSのカテゴリ，「悲し」で集めてきたツイートを全部NEGのカテゴリとする．(手っ取り早くラベルを付けたかったので．)
- ブラウザ上でシステムを動かす方法: python3.6標準のCGIモジュールを使って，POST通信でデータの受け渡しを行う．

#全体の流れ
1， twitterからモデル学習のためのツイートを収集する．　
2， 集めてきたツイートの前処理を行う(形態素解析，　全n個の出現単語の出現頻度を換算して，n次元のベクトルを生成する．)
3，　前処理後のデータを用いて，ランダムフォレストのモデルを学習させる＆モデルをpickleに保存する．
4，　HTMLからPOST通信でデータを取ってこれるように，　htmlファイルを作成し，　pythonプログラムにCGIのコードを組み込む．
5,テキストデータをブラウザから持ってきて，　モデルを使って，POSかNEGの判定を行う．
FCMの対象端末へのプッシュ通知をGAS使って簡単に実現する

# はじめに
FCMのプッシュ通知、便利ですよね。でも、ちょっとした個人向けのアプリにわざわざPush通知用のサーバーを用意したりするのは面倒ですよね？
はい、GASを使ってパパッとやっちゃいましょう。

#FCMとAndroidの設定
といっても外部の記事に丸投げします。
[AndroidアプリにFirebase Cloud Messagingを実装する(1) - アプリとFirebaseを接続する](https://qiita.com/outerlet/items/e3fe96a3d1e15ed42573)
[AndroidアプリにFirebase Cloud Messagingを実装する(2) - アプリでメッセージを受信する](https://qiita.com/outerlet/items/49a5346ba206eaf877d5)

# GASの設定
以下のテンプレをカスタマイズして使えばさっくり実現できる

```javascript:main.gs
Const = {
  FCMServerKey: "AAAAW1C_znk:APA91bHcG..."
}

function sendNotification(token, value1, value2) {
  var data = {
    "to": token,
    "data":{
      "value1": value1, //hogehoge
      "value2": value2  //mogemoge
    }
  }
  var auth = "key=" + Const.FCMServerKey;
  var headers = {
    'Authorization': auth,
    "contentType" : "application/json",
  };
  var options = {
     "method" : "post",
     "payload" : data,
     "headers" : headers,
     "muteHttpExceptions": true
  };
  
  var url = "https://fcm.googleapis.com/fcm/send";
  
  var res = UrlFetchApp.fetch(url, options);
  Logger.log(res);
  return res;
}
```

## 実装のポイント
- FCMServerKeyはFirebaseの設定アイコン>クラウドメッセージングと開けば書いてある([参考](https://qiita.com/outerlet/items/49a5346ba206eaf877d5#4-2curl%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6fcm%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B))
- tokenは端末トークン。`onNewToken`で通知されるやつ。GAS側で保存するならSpreadsheetに保存すれば一瞬で終わる。
- dataのJSONの中身は割と自由に書ける。サンプルでvalue1,2としたが、数の制限もないし、構造の縛りも特にない、はず。ただし一度に送信できるバイト数の上限が決まっているので大きなデータはNG(たしか上限4kByteくらいだった気がする)。
- Android側では`"data": {"data": { "value1": "hogehoge" , "value2": "mogemoge" } }`というデータ構造で受信する。あとはGSONなりを噛ませればOK。

# 終わりに
ね、簡単でしょ？
pythonでTwitterAPIを利用してみた

# 環境
・python3.6
・python-twitter
# 事前準備
#### 1, twitterアカウントを作成する
#### 2, 下記からtwitter appの登録をする
https://apps.twitter.com/
※使用するtwitterアカウントに電話番号が設定されていないと登録できない
#### 3, python-twitterをインストールする
下記コマンドでバージョンを指定してインストールする
`pip install python-twitter==3.0rc1`
※バージョンを指定せずインストールすると2.2がインストールされpython3で使用できない
# 利用手順
#### 1,python-twitterのインポート
```py
import twitter
```
上手くインポートできない場合はパスを指定する
パスがわからない場合は`pip show twitter`で確認する

```py
import sys
sys.path.append('python-twitterのパス')
import twitter
```
#### 2,各種キーの設定
```py
api = twitter.Api(consumer_key=' ',
                  consumer_secret=' ',
                  access_token_key=' ',
                  access_token_secret=' '
                  ))
```
※keyは下記で確認する
https://apps.twitter.com/

#### 3,tweetしてみる
```py
api.PostUpdates('ツイートする文言')
```
※retweetする場合はツイートのURLをpostする
#### 4,ユーザー情報を取得してみる
```py
userInfo = api.GetUser(screen_name = 'スクリーンネーム')

# ユーザID
userInfo.id
# 名前
userInfo.name
# 自己紹介文
userInfo.description
# tweet数
userInfo.statuses_count
# フォロワー数
userInfo.followers_count
# フォロー数
userInfo.friends_count
# お気に入り数
userInfo.favourites_count
# タイムラインの一番上のツイート
userInfo.status
```
create-react-appのindex.htmlで.envに定義した環境変数を使う

create-react-appで.envに以下のように定義してあるとする。

```.env
REACT_APP_EXAMPLE=ex
```

jsxでこの環境変数を利用するには

```javascript
console.log(process.env.REACT_APP_EXAMPLE);
```

とすれば利用できる。

create-react-appでのindex.html内でそれらを利用したいケースがあり調べたところ以下の記法で環境変数を利用できる。

```index.html
<script>
  console.log("%REACT_APP_EXAMPLE%");
</script>
```

## 参考

https://github.com/facebook/create-react-app/pull/1440
Qiita始めました

初投稿です。非プログラマーです。画像処理やデータ解析の自動化のために昨年９月ごろからPythonを使い始めました。

趣味でラズパイをいじったりしています。

プログラミングの練習と備忘録を兼ねて、Qiitaに投稿することにしました。主にPython周りで勉強したことや実装したコードをアップしていく予定です。たまにRや他の言語についても投稿するかもしれません。

まだまだわからないことだらけですが、よろしくお願いします。
GitLab on DockerのGitLab-Runnerの設定手順

# shared runner登録
## registration tokenの確認

![Screenshot from 2018-02-19 11-31-54.png](https://qiita-image-store.s3.amazonaws.com/0/114392/95e45fcd-4af5-7ecb-6af4-6b8f4fe9fb52.png)

## gitlab-runner登録コマンドの実行

```bash:入力
docker exec -it docker_gitlab-runner_1 gitlab-runner register
```

```bash:出力
Running in system-mode.                            
                                                   
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab 

Please enter the gitlab-ci token for this runner:


Please enter the gitlab-ci description for this runner:
[c75554f46727]: docker_gitlab-runner_1

Please enter the gitlab-ci tags for this runner (comma separated):
shell,shared

Whether to run untagged builds [true/false]:
[false]: 

Whether to lock the Runner to current project [true/false]:
[true]: 

Registering runner... succeeded                     runner=
Please enter the executor: parallels, docker-ssh+machine, kubernetes, docker, docker-ssh, virtualbox, docker+machine, shell, ssh:
shell

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
```

## gitlab-runner登録結果の確認

![Screenshot from 2018-02-19 11-32-12.png](https://qiita-image-store.s3.amazonaws.com/0/114392/080bc98f-b4f6-c1ba-0143-72e564d55bb5.png)

# specific runner登録
## registration tokenの確認

![Screenshot from 2018-02-19 14-58-53.png](https://qiita-image-store.s3.amazonaws.com/0/114392/dcdd5cd1-2173-e289-3b03-e93df3f2e05e.png)

## gitlab-runner登録コマンドの実行

```bash:入力
docker exec -it docker_gitlab-specific-runner_1 gitlab-runner register
```

```bash:出力
Running in system-mode.                            
                                                   
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab

Please enter the gitlab-ci token for this runner:


Please enter the gitlab-ci description for this runner:
[e753bf486618]: docker_gitlab-specific-runner_1

Please enter the gitlab-ci tags for this runner (comma separated):
shell,shared

Whether to run untagged builds [true/false]:
[false]: 

Whether to lock the Runner to current project [true/false]:
[true]: 

Registering runner... succeeded                     runner=
Please enter the executor: ssh, docker+machine, docker-ssh+machine, docker, docker-ssh, parallels, shell, virtualbox, kubernetes:
shell

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 
```

## gitlab-runner登録結果の確認

![Screenshot from 2018-02-19 15-11-12.png](https://qiita-image-store.s3.amazonaws.com/0/114392/51e15628-0892-dbf2-75b9-d50cafcc81e5.png)
Event-B入門

# はじめに
## Event-Bとは
Event-Bとは、「システムレベルのモデル化と解析のための形式手法」である。Event-Bの特長は以下の３点である。

* 「モデル化表記法での集合論利用」
* 「異なる抽象レベルのシステム表現のためのリファインメントの利用」
* 「リファインメントレベル間の一貫性の検証のための数学的証明の利用」

>
Event-B is a formal method for system-level modelling and analysis. Key features of Event-B are the use of set theory as a modelling notation, the use of refinement to represent systems at different abstraction levels and the use of mathematical proof to verify consistency between refinement levels. - [Event-B.org](http://www.event-b.org/)

## Rodin とは

Rodin Platformとは、「リファインメントと数学的証明のための効果的支援を提供するEvent-BのためのEclipseベースのIDE」である。これは「オープンソースであり、Eclipseフレームワークに貢献し、プラグインによってさらなる拡張が可能」である。

>
The Rodin Platform is an Eclipse-based IDE for Event-B that provides effective support for refinement and mathematical proof. The platform is open source, contributes to the Eclipse framework and is further extendable with plugins. - [Event-B.org](http://www.event-b.org/)
素因数分解やってみた

# 素因数分解

Wikipediaに読んでみると、「ある正の整数を素数の積の形で表すこと」である、とのことです。[先の記事](https://qiita.com/YumeYakata/items/1d40c0d90ef12a875705
)で素数を求めましたので、今度は素因数分解をやってみました。

```init.js
// mSosuは得られた素数のテーブルのポインターです。
	var mSosu=null;
// mSosuCntは得られた素数の数が入っています。
	var mSosuCnt=0;
```

方法は簡単。ひたすら割ってみて、割れたら因数とします。次の関数は、素数テーブルの小さい値から割ってみて、割れたらその数を、割れなかったら -1 を返します。

```nextInsu.js
// 
	function NextInsu(nn){
		var rst=-1;
		var mm=Math.floor(nn/2);//割る数は割られる数の半分までとします。
		for(var i=0; i<mSosuCnt; i++){
			if(mSosu[i]>mm) break;
			if(!(nn%mSosu[i])){
				rst=mSosu[i];
				break;
			}
		}
		return rst;
	}
```

NextInsu(nn)を呼び出す側で、因数配列を作成します。

``` insu.js
	var mInsu=[]; //因数のバッファー
	function fInsu(nn){
		mInsu=[];
		var mm=-1;
		while(1){
			mm=NextInsu(nn);
			if(mm==-1){
				mInsu.push(nn);
				break;
			}
			mInsu.push(mm);
			nn/=mm;
		}
	}

```
## 計算時間を計ってみた

65536までの素数テーブルを作成し、2 から131072の数字の素因数分解を行い時間を測定しました。

私の環境
- Windows 7 32bit
- Intel Core i5 M450 @2.4GHz
- Chrome 67

で計算したところ 6secから7sec の時間がかかりました。

``` test.js
	mSosuCnt=fSosu(65536);
	var start_ms = new Date().getTime();
	for(var i=2; i<=131072; i++){
		fInsu(i);
	}
	var elapsed_ms = new Date().getTime() - start_ms;
	console.log(mInsu.length + ' : ' + elapsed_ms);
'''
【Dartメモ】DartPadで初めるDart言語（必要なものはブラウザのみ）

Flutterの言語であるDartをブラウザ上で実行出来る方法を記述します．

# **1. Dartpadについて**

DartPadのサイトを利用することで，Dart言語をブラウザ上で実行することができます．
（あくまでお試しとして)

https://dartpad.dartlang.org/

# **2. 実際に触ってみる**

画面の説明

- 上のパネル:メニュー
- 中央左のパネル：Dart言語を記述するパネル
- 中央右上のパネル：出力結果を表示するパネル
- 中央右下のパネル：デバッギングに必要な情報を表示する情報パネル 

![スクリーンショット 2018-07-14 22.29.31.png](https://qiita-image-store.s3.amazonaws.com/0/262328/ac577e0e-b589-aeec-7199-58489641fed6.png)

## **2.1. サンプル１：Hello World**

せっかくなのでHello Worldを作ってみる．非常にシンプルにDartでは記述できる．

```dart
main() {
  print("Hello World!");
}
```

![スクリーンショット 2018-07-14 22.37.08.png](https://qiita-image-store.s3.amazonaws.com/0/262328/7a1e30dc-1732-166c-a80c-fc9171919f8e.png)

わざと';'を削除してシンタックスエラーを起こす．右下のパネルで怒られる．シンタックスエラーも教えてもらえる．

```dart
main() {
  print("Hello World!")
}
```

![スクリーンショット 2018-07-14 22.37.55.png](https://qiita-image-store.s3.amazonaws.com/0/262328/2069b68b-ac19-4750-ab6d-7aef28ce2bbc.png)

ローカルPCに何も設定せずブラウザ上で簡易的にDartを学習するには良いかもしれない．


## **2.2. サンプル2：掛け算**

シンプルな掛け算を関数を使って試してみる．

```dart
void main(){
  var a = 3;
  var b = 2;
  var result = multiply(a,b);
  print('$a x $b = $result');
}

int multiply(a,b){
  return a * b;
}
```

![スクリーンショット 2018-07-14 22.54.30.png](https://qiita-image-store.s3.amazonaws.com/0/262328/65cadc9c-a657-5bcd-f21d-1f3d06bd0096.png)


型の推論によって型の記述省略が可能．

```dart
void main(){
  var a = 3;
  var b = 2;
  var result = multiply(a,b);
  print('$a x $b = $result');
}

multiply(a,b){
  return a * b;
}
```

![スクリーンショット 2018-07-14 23.03.21.png](https://qiita-image-store.s3.amazonaws.com/0/262328/e2a38693-9347-3b3b-7511-44a929deeec7.png)
[C++11] コンパイル時に概ね1000要素以上の配列を初期化する

C++11という**古代言語**では配列をコンパイル時に初期化することにも大変な苦痛が伴った。
以下は0〜9999の数値を入力として受け取り、その2乗の値をコンパイル時に構築したルックアップテーブルから引いてきて出力するサンプルである。

# サンプルコード

```cpp
#include <iostream>
#include <array>

template <int... V> struct sequence {
  template <typename T> using join = typename T::template prepend<V...>;
  template <int... U> using prepend = sequence<U..., V...>;
  static constexpr std::array<int, sizeof...(V)> value = {V...};
};
template <int... V> constexpr std::array<int, sizeof...(V)> sequence<V...>::value;

template <int I, int N> struct pow_range {
  using to_sequence = typename pow_range<I, N / 2>::to_sequence::template join<typename pow_range<I + N / 2, N - N / 2>::to_sequence>;
};
template <int I> struct pow_range<I, 1> {
  using to_sequence = sequence<I * I>;
};

int main() {
  int x;
  std::cin >> x;
  std::cout << pow_range<0, 10000>::to_sequence::value[x] << std::endl;
  return 0;
}
```

# ポイント

* テンプレートには再帰限界（C++11では推奨値1024）がある。概ね1000要素以上の大きな配列をコンパイル時に構築する場合は、再帰回数がlogNのオーダーになるよう、二分探索的にテンプレートを展開していく必要がある。
* 外出しで`sequence<V...>::value`の行が再度無意味に書かれているように見えるが、これが無いとリンカでエラーになってしまう。以下は私の理解。
    * `value[(実行時に決まる値)]`をするためには`value`が定義されている必要がある。
    * 最初の`value`はただの宣言。
    * 次の外出しの`value`が定義になっている。
【YouTube, Twitch】Restream+棒読みちゃんでコメント読み上げ ※2018/07/24現在


# デモ

![demo.gif](https://qiita-image-store.s3.amazonaws.com/0/55365/96efeb5b-dc69-8025-1b49-e637a7fac67d.gif)


# 初めに

Restreamを使うとYouTube Live(YouTube Gaming)やTwitchなど複数のサービスに同時に配信をすることが出来ます。

また、RestreamのChatアプリを使うと複数の配信サービスのコメントを一か所に集約することができ、さらに棒読みちゃんを組み合わせることに読み上げることも可能です。

今回はYouTube LiveとTwitchに対応した正規表現のコードと一緒にその手順を紹介しようと思います。

# 実現方法

## 確認済みの動作環境

- Windows 10 Home

## 使用アプリ

- [Restream](https://restream.io/)
- [Restream Chat 1.0](https://restream.io/chat)
- [棒読みちゃん](http://chi.usamimi.info/Program/Application/BouyomiChan/)
- [BouLog](https://qt.hotmint.com/boulog.html)

## 導入手順

こちらのページの手順が参考になりました。
[【Youtube,Twitch,Mixer】Restreamで棒読みちゃんの使い方 - AkaMaruServer](https://webcache.googleusercontent.com/search?q=cache:wZnMw9etYYIJ:https://25reinyan25.net/%3Fp%3D4248+&cd=1&hl=ja&ct=clnk&gl=jp)

中段辺りにある「Boulog」の説明の**「基本設定」と「設定1」の設定方法**まで進めたら以下をご覧ください。

## BouLogの設定

### 設定の例

![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/55365/e4bf3c1e-4e41-9ca9-70db-93ebba153cc5.png)

**YouTube Live**
検索文字列: `\[.*\] Twitch.tv.*, (.*) (.*)`

**Twitch**
検索文字列: `\[.*\] Youtube.com.*, (.*): (.*)`

「設定 1」にTwitchを、「設定 2」にYouTube Liveを設定しています。他の配信サービスを追加する場合は、「設定 3」以降を使用してください。


### 置換文字列について

`(`と`)`で囲った部分にマッチした文字列を左から順に`$1`,`$2`で取得することが出来ます。

そのため、上記画像の設定を例にすると以下の整形することが可能です。

元の文字列: `[2:56:45] Youtube.com UCQAEaOgBMidPZqlluTpAb4A, なかじ: テスト`
置換文字列: `$1さんのコメント、$2`
実際に読み上げられる文字列: `なかじさんのコメント、テスト`

# おまけ: 正規表現文字列の作り方

![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/55365/c8ec558d-7799-b342-2c9b-44e1dd2a6d41.png)

Sublime Textで左下辺りの正規表現オプションを入れた状態で試すとやりやすいと思います。

# 関連

- [雑記、引用、その他諸々 — Beamでチャットを棒読みちゃんに読ませるにはちょっと一手間かかるよ](https://hideblack.tumblr.com/post/153234871781/beam%E3%81%A7%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%92%E6%A3%92%E8%AA%AD%E3%81%BF%E3%81%A1%E3%82%83%E3%82%93%E3%81%AB%E8%AA%AD%E3%81%BE%E3%81%9B%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A1%E3%82%87%E3%81%A3%E3%81%A8%E4%B8%80%E6%89%8B%E9%96%93%E3%81%8B%E3%81%8B%E3%82%8B%E3%82%88)
depを導入した環境でmultiple-value uuid.NewV4() in single-value contextと怒られる

割とよくあることだと思うんですけど、日本語の情報がほとんどなかったのでメモ。
なにが起きたかと言うと、[dep](https://github.com/golang/dep)を使ってる環境で[go.uuid](https://github.com/satori/go.uuid)を使うと**multiple-value uuid.NewV4() in single-value context**と怒られるって話です。
要は最新のgo.uuidとdepの取ってくるやつのバージョンが違うからだと思うんですけど。

**Gopkg.toml**にこいつを書き足すと治るかと思います。たぶん。

```toml
[[override]]
  name = "github.com/satori/go.uuid"
  branch = "master"
```

```bash
dep ensure
```
を忘れないでね。
LoadingView表示用のUIViewのExtensionを作る

##はじめに

通信実行中にLoadingを表示するということが多くありますが、
いちいちindicatorViewを作成してaddSubViewして表示するのは正直面倒です。
その辺りの処理を簡潔にするUIViewのExtensionを作成したのでメモします。

##検証環境
以下の環境を使用しています。

* macOS High Sierra Version 10.13.4
* Xcode Version 9.4.1


#実装

UIViewのExtensionにLoading表示用のメソッドと、非表示にするメソッドを作成しています。Loading表示中はViewの操作を行って欲しくないため、isUserInteractionEnabledをLoadingを表示するタイミングでdisableに変更し、Loadingを非表示に変更したタイミングでenableにしています。

UIViewを継承していれば使用できるため、UITableViewの各セルの情報を通信で取得する際や、画像の通信取得中などに対応可能です。
LoadingOverLayViewの内部のindicatorViewを別のクラス等に置き換えることで、Loading中の表示を変更できます。
副次的な効果として、Loading中の表示には本メソッドを使用するようにすれば、アプリ内でのloadingの表示を統一できます。

```Swift
///表示用のIndicator本体 UIViewのExtension以外からの生成を防ぐためfileprivateにしています
fileprivate final class LoadingOverLayView: UIView {
    
    // MARK: - Property
    private var indicatorView: UIActivityIndicatorView!
    
    // MARK: - LifeCycle
    init(frame: CGRect, indicatorStyle: UIActivityIndicatorViewStyle) {
        indicatorView = UIActivityIndicatorView(activityIndicatorStyle: indicatorStyle)
        indicatorView.hidesWhenStopped = true
        super.init(frame: frame)
        addSubview(indicatorView)
        indicatorView.center = center
        backgroundColor = UIColor.black
        alpha = 0.4
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // MARK: - Method
    func startAnimation() {
        indicatorView.startAnimating()
    }
    
    func stopAnimation() {
        indicatorView.stopAnimating()
    }
}

// MARK: - UIView Extension
extension UIView {
    
    /// LoadingViewを表示します
    ///
    /// - Parameter indicatorStyle: UIActivityIndicatorViewのstyle（gray, white, whiteLarge)
    func showLoading(with indicatorStyle: UIActivityIndicatorViewStyle = .whiteLarge) {
        // Loading中にはView操作をして欲しくないためユーザー操作を不可にしています
        isUserInteractionEnabled = false
        let overLayView = LoadingOverLayView(frame: frame, indicatorStyle: indicatorStyle)
        addSubview(overLayView)
        overLayView.startAnimation()
    }
    
    /// 表示されているIndicatorViewを非表示にします
    func hideLoading() {
        // Loadingを非表示にしたタイミングでユーザー操作を可能にしています
        isUserInteractionEnabled = true
        subviews.forEach { subView in
            if let subView = subView as? LoadingOverLayView {
                subView.stopAnimation()
                subView.removeFromSuperview()
            }
        }
    }
}
```
Git for Windowsでdocker execをwinptyなしで実行する

Docker for Windows + Git for Windows環境で、dockerコンテナに入るために、docker execコマンドを実行すると、以下のエラーとなった。

```
$ docker exec -it my-container bash
the input device is not a TTY.
If you are using mintty, try prefixing the command with 'winpty'
```

winptyをつければエラーとならずにコンテナに入ることができる。

```
$ winpty docker exec -it my-container bash
bash-4.2#
```

しかし、毎回winptyコマンドをつけるのが面倒。
そこで、/etc/profile.d/aliases.shを以下のように編集し、Git for Windowsを再起動すると、

```diff
-	for name in node ipython php php5 psql python2.7
+	for name in node ipython php php5 psql python2.7 docker
```

winptyなしでdocker execができるようになった。

```
$ docker exec -it my-container bash
bash-4.2# 
```

aliases.shのファイルは上書き禁止になっているので注意が必要。
一度デスクトップ等にコピーし、エディタで編集してから管理者権限でコピーし直すとかが楽かも。
【C#】カスタムAttributeまとめ　概要編

#概要
自作でAttributeをするときのメモとしてまとめようと思います。

#カスタムAttribute

カスタムAttributeはAttributeクラスをアトリビュートを付けたい対象のクラスに継承することで実現します。

例としでint型の値を入れられるAttributeを作ってみます。
何をしているかの説明は次の項目で説明します。

```c#

[System.AttributeUsage(AttributeTargets.All,
 Inherited = false, AllowMultiple = true)]
sealed class TestIntAttribute : Attribute
{
    public TestIntAttribute(int value)
    {
        this.value = value;
    }

    public int value { get; set; }
}

```


参考
AttributeUsage (C#)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/attributes/attributeusage

#AttributeTargets
Attributeは付けられる対象を指定できます。
クラスだけに付けたいとか、フィールドとプロパティだけに付けたいとかそんな感じです。全ての対象につけることも出来ます。

付けられる設定は以下です。

| AttributeTargets| 内容 |
|:-----------------|------------------:|:------------------:|
| All             |        全ての要素で使える        |
| Assembly| アセンブリに使える|
| Class              |クラスで使える        |
| Constructor|        コンストラクタで使える|
| Delegate|       デリゲートで使える|
| Enum|       列挙型で使える|
| Event|       イベントで使える|
| Field|       フィールドで使える|
| GenericParameter|       ジェネリックパラメータで使える|
| Interface|       インターフェースで使える|
| Method|       メソッドで使える|
| Module|       モジュールで使える|
| Parameter|       パラメーターで使える|
| Property|       プロパティで使える|
| ReturnValue|       戻り値で使える|
| Struct|       構造体で使える|

#AllowMultiple
複数のAttributeを付けられるかのプロパティです。
デフォルトはfalseになってます。

#Inherited
カスタムAttributeを付けたクラスの継承先でも使えるかどうかを示すプロパティです。
デフォルトはfalseになってます。

#終わりに
なんとなくですが自分なりにまとめました。
実際に作ったカスタムAttributeの取得は次回以降にやります。
Prismaの中で何が起こっているか(2) Introspect

# prisma init (既存データベースを利用するIntrospect)

通常`prisma init`コマンドでは新しいデータベース、テーブルを作成しますが、最近追加されたIntrospectでは、**既存データベース・スキーマを読み込んでGraphQLのデータモデルを自動で書き起こす**ことをしてくれます。

さらに、既存データベースに接続するprisma用の`docker-compose.yml`ファイルを作ってくれます。

やり方は簡単で、`prisma init`中に`既存データがある`を選べばよいです。

```
$ prisma init test-load
? Set up a new Prisma server or deploy to an existing server? Use existing database
? What kind of database do you want to deploy to? PostgreSQL
? Does your database contain existing data? Yes　←★ここ
? Enter database host ←★PostgreSQLのアドレスを入れます
? Enter database port ←★ポート番号を入れます
? Enter database user prisma　←★ユーザ名を入れます（ここでは昔Prismaで作ったデータベースを参照します）
? Enter database password prisma
? Enter name of existing database prisma
? Use SSL? No
? Enter name of existing schema default$default　←★（これも昔Prismaで作ったためこの設定）

Introspecting database 90ms
Created datamodel definition based on 2 database tables.

Created 3 new files:

  prisma.yml           Prisma service definition
  datamodel.graphql    GraphQL SDL-based datamodel (foundation for database)
  docker-compose.yml   Docker configuration file

Next steps:

  1. Open folder: cd test-load
  2. Start your Prisma server: docker-compose up -d
  3. Deploy your Prisma service: prisma deploy
  4. Read more about introspection:
     http://bit.ly/prisma-introspection
```

もとのデータベースには下記のようなテーブルが含まれておりました。

```
prisma=# \d "User"
              Table "default$default.User"
  Column   |              Type              | Modifiers
-----------+--------------------------------+-----------
 id        | character varying(25)          | not null
 name      | text                           | not null
 updatedAt | timestamp(3) without time zone | not null
 createdAt | timestamp(3) without time zone | not null
Indexes:
    "User_pkey" PRIMARY KEY, btree (id)
```

そのため、出力された`datamodel.graphql`には以下のようにGraphQLスキーマ形式で同じ内容が記載されます。

```graphql
type User @pgTable(name: "User") {
  id: ID! @unique
  createdAt: DateTime!
  name: String!
  updatedAt: DateTime!
}
```
Prismaの中で何が起こっているか(1)

# prisma deploy 

`datamodel.graphql`の記載に合わせてPrismaサーバ経由でデータベースが作成される。

データベースがpostgresqlの場合、

postgresqlの中の

|項目|名前|
|---|---|
|データベース|prisma|
|スキーマ|default$default|
|テーブル|`<datamodel.graphqlに定義したテーブル名>`|

たとえば`datamodel.graphql`に下記が記載されていたとする。

```graphql

type User {
  id: ID! @unique
  name: String!
}
```

テーブルは下記のようになる。

```
prisma=# set search_path to default$default;

prisma=# \dt
 default$default | User     | table | prisma
 default$default | _RelayId | table | prisma
```

`User`というテーブルができていることがわかる。
このように、データベースの中に同じ名前のテーブルを作っていくのが`prisma deploy`。
RAD Studio Community Editionでフリーカーソル無効化アドインを使う

RAD Studio Community Editionが公開されて無料でRAD Studioが使えるようになったので、フリーカーソル無効化アドインを使うためにRAD Studio XE2でビルドします。

- [Delphi Community Edition](https://www.embarcadero.com/jp/products/delphi/starter)
- [C++ Builder Community Edition](https://www.embarcadero.com/jp/products/cbuilder/starter)

# 用意するもの

- フリーカーソル無効化アドイン（のソースコード）
- RAD Studio XE2
- RAD Studio 2010（ATL用のファイルが同梱されているもの）

# ATL関係のファイルをRAD Studio 2010からコピー
RAD Studio XE2(C++ Builder)にはATL関係のファイルが同梱されていないので、RAD Studio 2010のフォルダからファイルをコピーします。

- $(BDS)\include\atl\\\*.*
- $(BDS)\lib\bcbatl.lib

includeフォルダのファイルは\$(BDS)\include\windows\atl\フォルダに、bcbatl.libは\$(BDS)\lib\win32\フォルダにコピーします。

# フリーカーソル無効化アドインのプロジェクトを開く
RADStudio XE2でnfcur101\Source_BCB\NFCur.cbprojを開きます。

# include、libパスの設定
includeパスに\$(BDS)\include\windows\vcl\design\を追加、libパスに\$(BDS)\lib\win32\を追加します。

# ソースコードの書き換え
KeyBindBase.hのAnsiStringをUnicodeStringに置換します。

# ビルド
プロジェクトをビルドします。
いくつか警告が出ますが、ビルドが成功すればDLLが出来ているはずです。

# DLLを任意の場所にコピー
出来上がったDLLを任意の場所にコピーします。

# アドインの登録

>　レジストリのHKEY_CURRENT_USER\Software\Borland\BDS\1.0\Experts
>(C#Builderの場合。他の環境では適当に読み替えてください。キーが存在しない
>場合は作成してください)キーの下に、新規の文字列値を作成し、名前を
>「フリーカーソル無効化アドイン」(任意の名前でかまいません)、値に、
>NFCur.dllのフルパスを設定してください。
>　これで、対象の開発環境を立ち上げるとアドインの機能が有効になります。
(NFCur.txtより引用)

Community Edition(10.2.3)ではHKEY_CURRENT_USER\Software\Embarcadero\BDS\19.0\Expertsでした。

以上でフリーカーソル無効化アドインが使えるようになっていると思います。
【bat】コマンドまとめ

#概要
コマンドプロンプトやbatファイル内でコマンドを叩く時に、コマンドをよく忘れるのでメモも含めてまとめます。
調べた内容はこの記事にどんどん追記で追加していく予定です。

#コマンド一覧

###文字列を出力

まずは基礎的なコマンド。

```bash:コマンドプロンプト
echo 出力したい文字列
```

例:Helloを出力する

```bash:コマンドプロンプト
echo Hello
```

```bash:出力結果
Hello
```

### 指定されたディレクトリに移動
```bash:コマンドプロンプト
cd 指定のディレクトリのパス
```

例:カレントディレクトリからDocumentに移動

```bash:コマンドプロンプト
cd Document
```

例:カレントディレクトリからDocumentの中にあるSampleディレクトリに移動

```bash:コマンドプロンプト
cd Document/Sample
```

例:カレントディレクトリから1階層上のDocumentに移動

```bash:コマンドプロンプト
cd ../Document
```


###ヘルプを見る

```bash

コマンド名 /?
```

試しにcdを見てみます。

```bash:出力結果

cd /?
現在のディレクトリを変更したり、ディレクトリ名を変更したりします。

CHDIR [/D] [ドライブ:][パス]
CHDIR [..]
CD [/D] [ドライブ:][パス]
CD [..]

  ..   親ディレクトリに変更するときに指定します。

CD ドライブ: と入力すると指定されたドライブの現在のディレクトリが表示
されます。パラメーターを指定しないで CD と入力すると、現在のドライブと
ディレクトリが表示されます。

現在のディレクトリだけでなく、現在のドライブも変更するには /D オプショ
ンを使用してください。

コマンド拡張機能を有効にすると、CHDIR は次のように変更されます:

現在のディレクトリの文字列に入力された大文字と小文字は、ディスク上の名前
と同じになるように変換されます。たとえば、ディスク上のディレクトリ名が
Temp である場合、CD C:\TEMP と入力すると、現在のディレクトリは C:\Temp に設定されます。

CHDIR コマンドは空白を区切り文字として扱わなくなるため、空白文字を
含むサブディレクトリ名を引用符で囲まなくても、CD を実行して
にそのサブディレクトリに移動できるようになります。たとえば、

    cd \winnt\profiles\username\programs\start menu

```




###引数を受け取る
渡された引数は「%1 から %9までの変数」として保存される。
引数10個以上はshiftを使う。

例 1,2つ目の引数を受け取って出力する

```bash:コマンドプロンプト
set_test.bat Hello World 
```

```bash:set_test.bat

echo %1 %2
```

```bash:出力結果
Hello World
```



### 指定されたプログラムまたはコマンドを開く 

```bash:コマンドプロンプト
start プログラム/コマンドのパス
```

###ファイルをコピー

```bash:コマンドプロンプト
copy コピーしたいファイルのパス　コピー先のパス
```

例:test.txtをDocumentディレクトリにコピーする

```bash:コマンドプロンプト
copy test.txt Document\
```

###ファイルをディレクトリごとコピーする

```bash:コマンドプロンプト

xcopy オプション コピー元のディレクトリ コピー先のディレクトリ
```

試しにDocumentフォルダにあるSampleフォルダをCopyフォルダにコピーします

```bash:コマンドプロンプト
xcopy Document\Sample Document\Copy
```
Hylang で適当にHTTPサーバを立てる(2) （2018年7月現在）

# 前回の続き
[Hylang で適当にHTTPサーバを立てる(1) （2018年7月現在）](https://qiita.com/elect/items/76b56a97c444298d52ee)
## ハンドラを書こう
 SimpleHTTPRequestHandler を書き換えて、適当なテキストを返すようにしてみよう。

## BaseHTTPRequestHandler を継承したクラスを書こう
Lisperならお馴染みのクラスの継承。    
現在のHylangでは、クラスの宣言は大体こんな感じ。

```
(defclass <class-name> [<superclass1> <superclass2>]
  <methods>)
```

これに合わせて BaseHTTP... を継承した EchoHandler なるものを書く(名前は適当につけた。深い意味はない)

``` hylang
(defclass EchoHandler [BaseHTTPRequestHandler]
  (defn do_GET [self]
    (setv content-len (int (.get self.headers "content-length")))
    (setv requestBody (-> (.read self.rfile content-len)
                          (.decode "UTF-8")))
    (print requestBody)
    (.send_response self 200)
    (.send_header self "Content-type" "text/json")
    (.end_headers self)
    (.wfile.write self (.encode "テキスト\n" "utf-8"))))
```

あとはこれをハンドラに設定して実行するだけ。    
全体のコードはこれだけ

``` hylang
(import [http.server [HTTPServer SimpleHTTPRequestHandler BaseHTTPRequestHandler]]
        [urllib.parse [urlparse]]
        json)

(defclass EchoHandler [BaseHTTPRequestHandler]
  (defn do_GET [self]
    (setv content-len (int (.get self.headers "content-length")))
    (setv requestBody (-> (.read self.rfile content-len)
                          (.decode "UTF-8")))
    (print requestBody)
    (.send_response self 200)
    (.send_header self "Content-type" "text/json")
    (.end_headers self)
    (.wfile.write self (.encode "テキスト\n" "utf-8"))))

(setv httpd (HTTPServer (, "localhost" 8887) EchoHandler))

(.serve_forever httpd)
```

## 結果
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147520/5c10a9d8-4ee1-4e2e-2fa6-54afbb70a15d.png)

## Bodyに入ったJSONを読んでみよう
リクエストで飛んで来やすいものベスト3には入っているであろうJSONを読んでみる

やっていることは簡単で、飛んできたrequest-bodyに対して json.loads 関数を適用しているだけ。

``` hylang
(import [http.server [HTTPServer SimpleHTTPRequestHandler BaseHTTPRequestHandler]]
        [urllib.parse [urlparse]]
        json)

(defclass EchoHandler [BaseHTTPRequestHandler]
  (defn do_GET [self]
    (setv content-len (int (.get self.headers "content-length")))
    (setv request-body (-> (.read self.rfile content-len)
                          (.decode "UTF-8")))
    (print request-body)
    (setv json-data (.loads json request-body))
    (print json-data)
    (print (. json-data ["type"]))
    (print (. json-data ["params"]))
    (.send_response self 200)
    (.send_header self "Content-type" "text/json")
    (.end_headers self)
    (.wfile.write self (.encode "テキスト\n" "utf-8"))))

(setv httpd (HTTPServer (, "localhost" 8887) EchoHandler))

(.serve_forever httpd)

```

## 送ってみたコマンド

```
curl -H "Content-type: application/json" -X GET -d "{\"type\" : \"message\", \"params\" : \"メッセージ本文\"}" http://localhost:8887/
```


## 結果
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147520/28ff6473-d52a-015c-10d2-ba599bd3f2be.png)

## 次にやること
JSONで値を返す
適当に何かの処理を足してみる
[Hylang で適当にHTTPサーバを立てる(3) （2018年7月現在）](https://qiita.com/elect/items/98849c5424b0d4255536)
FuelPHPのよく使う機能をPackageとして切り出してみた

FuelPHPを何度か触ってみて、こんな機能が欲しいと思い、自分でパッケージを作ってみた。

## 作成したパッケージ
* TemplateView ([Qiita](https://qiita.com/ohnaka0410/items/7c78a309f74bf237d882)  / [Github](https://github.com/ohnaka0410/FuelPHP-TemplateView))
* Validation ([Qiita](https://qiita.com/ohnaka0410/items/05c342158df1855a5228)  / [Github](https://github.com/ohnaka0410/FuelPHP-Validation))
* Fieldset ([Qiita](https://qiita.com/ohnaka0410/items/3c1aeaa3da53e5ffef72)  / [Github](https://github.com/ohnaka0410/FuelPHP-Fieldset))

## 作成予定のパッケージ
* Auth
* Log

## まとめ
追加して欲しい機能やバグがありましたら、Qiitaのコメント欄やGithubでご連絡ください。
Hylang で適当にHTTPサーバを立てる(1) （2018年7月現在）

# Webでちょっと機械学習をしてみたい
## モチベーション
 Clojure で適当にWebサービス書いていたら、突如でっぷらーにんぐの電波を受信し、簡単に出来ないかなーと思いたち、Hylangで軽めのサーバ立てればいいじゃん？ってなった。

### 推奨環境
* Spacemacs - hylang の編集ならこれかVimがおすすめ。今回はSpacemacsを使って進める。  
* 任意のLinux

## まずは雑に作ってみよう
* 適当にディレクトリを作って、以下のようにする

```
._
 |- test.hy
```

* ファイルを編集する    
 localhost の 8888 でサーバ立ち上げてね、あとハンドラは SimpleHTTPRequestHandlerでよろしく、ってこと

``` hylang
(import [http.server[HTTPServer SimpleHTTPRequestHandler]])

(setv httpd (HTTPServer (, "localhost" 8888) SimpleHTTPRequestHandler))
(.serve_forever httpd)
```

* 実行する
Spacemacs の場合
上から順に `C-c C-e`
をしていくと、最後の行で固まるので、`C-g`を打ち込む。(ここらへんはSpacemacsの拡張機能のガバっぽい？)    
そして適当なブラウザで、**localhost:8888** にアクセスする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147520/7c44c938-ba9c-0ddd-12f3-7ef344b462f2.png)

こうなればうまく動いたことになる。(\_\_pycache\_\_はあったりなかったりする)

# 次やること
なにかテキストを受け取ってテキストを返すだけの簡単なサーバを立てる。
[Hylang で適当にHTTPサーバを立てる(2) （2018年7月現在](https://qiita.com/elect/items/abde4ab668b17c39393d)
NaoetuGPSの使用モジュール

#フロントエンド
![html01_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/271873/62bed9b8-39bd-247c-b8f3-6595ce19c1f5.jpeg)![jsrogo.jpg](https://qiita-image-store.s3.amazonaws.com/0/271873/0aa167c7-7170-8fd7-cb15-cd80389945ef.jpeg)
![UI_Shield_Bootstrap.png](https://qiita-image-store.s3.amazonaws.com/0/271873/f853650b-ede5-865c-a1d7-1ba8c947660f.png)![jquery-dev-summit-mark.gif](https://qiita-image-store.s3.amazonaws.com/0/271873/790faa86-2ff7-e70a-7095-f962fd8bde7f.gif)![developers.png](https://qiita-image-store.s3.amazonaws.com/0/271873/90eee6c5-341a-6a86-b689-a1af66db3737.png)

---

#バックエンド
![logo_dti.png](https://qiita-image-store.s3.amazonaws.com/0/271873/198a9a95-3e1b-2982-241c-c1f765ffb246.png)
![centos.png](https://qiita-image-store.s3.amazonaws.com/0/271873/89601489-18c9-b09a-2d6d-70650c449492.png)![Apache-Logo.png](https://qiita-image-store.s3.amazonaws.com/0/271873/832219d4-068e-c926-d420-4a0ff22ea520.png)
![nodejs.jpeg](https://qiita-image-store.s3.amazonaws.com/0/271873/69a28fed-7e40-9a50-dc84-fdcca9f6890a.jpeg)![socketio.png](https://qiita-image-store.s3.amazonaws.com/0/271873/7a137022-88c7-22c2-ee59-71317d8c3ccf.png)![MariaDB-Foundation-vertical-small.png](https://qiita-image-store.s3.amazonaws.com/0/271873/ead25bc0-2577-495b-fc24-98fc59005282.png)![rapidssl-trust-seal-300x205.png](https://qiita-image-store.s3.amazonaws.com/0/271873/255ae7ed-f7f6-a9a4-a76d-60e45cd06585.png)
FuelPHPのValidationにマルチバイト系のバリデーション機能を追加してみた

FuelPHPのよく使う機能をPackageとして切り出してみるその②

## パッケージ名
Validation ([Github](https://github.com/ohnaka0410/FuelPHP-Validation))

## 概要
Validationクラスに全角半角などのバリデーション機能を追加するパッケージ

## 作った動機
FuelPHPには標準でバリデーション機能があるが、日本語サイトでよく利用する全角／半角チェックなどが入っていないため、よく使うバリデーションをパッケージとして切り出そうと思った。

## 使い方(実装例)
### パッケージの読み込み
```php:fuel/app/config/config.php
return array(
	'always_load'  => array(
		'packages'  => array(
			// パッケージをロード
			'validation',
		),
	),
);
```

### Validation基底クラスを自作のクラスに差し替える
```php:fuel/app/bootstrap.php
\Autoloader::add_classes(array(
	// Add classes you want to override here
	// Example: 'View' => APPPATH.'classes/view.php',
	// Validation基底クラスを自作のクラスに差し替える
	'Validation' => APPPATH.'classes/validation.php',
));

```

### Validationクラスを拡張する
```php:fuel/app/classes/validation.php
class Validation extends \Fuel\Validation\Validation
{
	// 独自のバリデーションを追加する
}
```


## まとめ
よく使うバリデーションがあれば随時追加していく予定。
FuelPHPのViewにテンプレート機能を追加してみた

FuelPHPのよく使う機能をPackageとして切り出してみるその①

## パッケージ名
TemplateView ([Github](https://github.com/ohnaka0410/FuelPHP-TemplateView))

## 概要
Presenter/Viewクラスにテンプレート機能を追加するパッケージ

## 作った動機
FuelPHPのViewを作るときに、HTMLの共通部分はテンプレート化したい。
そんな時のために、FuelPHPには標準でTemplateControllerクラスが用意されている。
しかし、MVCの役割的にControllerにViewの拡張機能が実装されているのってなんか気持ち悪い。
Viewの拡張機能であれば、Viewクラス(ついでにPresenterクラス)に実装したほうがいいのではないかと思いやってみた。

## 使い方(実装例)
### パッケージの読み込み
```php:fuel/app/config/config.php
return array(
	'always_load'  => array(
		'packages'  => array(
			// パッケージをロード
			'templateview',
		),
	),
);
```

### Presenter基底クラスを自作のクラスに差し替える
```php:fuel/app/bootstrap.php
\Autoloader::add_classes(array(
	// Add classes you want to override here
	// Example: 'View' => APPPATH.'classes/view.php',
	// Presenter基底クラスを自作のクラスに差し替える
	'Presenter' => APPPATH.'classes/presenter.php',
));

```

### ControllerでPresenterインスタンスを生成する
```php:fuel/app/classes/controller/sample.php
class Controller_Sample extends \Controller
{
	public function action_index()
	{
		// Viewをセット
		$view = \Presenter::forge('sample/index');

		return \Response::forge($view);
	}
}
```

### Presenterの基底クラスで共通部品のViewをセットする
```php:fuel/app/classes/presenter.php
class Presenter extends \Fuel\TemplateView\Presenter
{
	/**
	 * Executed before the view method
	 */
	public function before()
	{
		// 共通のViewをテンプレートに分割してセット

		// Sets the view's head template filename.
		$this->set_template_head('template/head');

		// Sets the view's header template filename.
		$this->set_template_header('template/header');

		// Sets the view's footer template filename.
		$this->set_template_footer('template/footer');

		// Sets the view's foot template filename.
		$this->set_template_foot('template/foot');
	}
}
```

### Presenterの派生クラスで、各ページ個別の変数をセットする。
```php:fuel/app/classes/presenter/sample/index.php
class Presenter_Sample_Index extends \Presenter
{
	/**
	 * The default view method
	 * Should set all expected variables upon itself
	 */
	public function view()
	{
		// 変数をセットする
		// ※ここでセットした変数は全View内から参照可能
		$this->set('title', 'Page Title');
	}
}
```

## まとめ
PresenterクラスでViewのテンプレート管理ができるようになり、個人的にはすっきりした。
今のところ、4種類のテンプレートファイルを保持できるようにしているが、
そのうち配列で管理して、個数を可変にするかも。
Javascript でドラック＆ドロップを実装 (ライブラリ使わない)


<img src="https://qiita-image-store.s3.amazonaws.com/0/134076/3613bf2d-7742-0c41-2df9-d2642950eac0.gif" width="300px" />


## はじめに
Javascript でドラックアンドドロップを実装してみます。
全体の流れは以下です。
1. 移動させたい要素のpositionをabsoluteにする
2. マウスが移動するイベントを受け取り、移動させたい要素の(x,y)をマウスポインタの(x,y)と同じにする
3. マウスが離れたとき、ある矩形にマウスポインタが入ってるかどうか判定。


## 実装
### クリックに対応させる
まずはマウスがクリックされたイベントを受け取りましょう。
簡単なhtml を書いてimgタグで画像を表示させます。
次にjavascriptでマウスクリックに対応させます。
htmlの要素がマウスクリックされると、onmousedownイベントが呼ばれます。
javascriptでonmousedownイベントをフックして、コンソールに文字列を表示させます。

``` index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>balltest</title>
</head>
<body>
  <div id="app">
    <img src="ball.png" id="ball" width="80px">
  </div>
  <script>
    var ball = document.getElementById("ball");
    ball.onmousedown = function(event){
      console.log("タップされたよ!");
    }
  </script>
</body>
</html>
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/134076/513e8c23-30a6-56bd-fd87-18eeb716bde1.gif" width="300px" />

### 画像がマウスの位置についてくる
次に、マウスが移動するイベントをフックします。
画像の位置を自由自在に操れるようにしたいので、positionをabsoluteにしておきます。

``` js
ball.style.position = "absolute";
```
ondragstartイベントはドラッグ操作を開始したときに呼ばれます。
ですが今回はmousemoveイベントを使って実装するのはこれは不要です。

```js
ball.ondragstart = function(event){
  return false;
}
```

マウスが移動したときに、それと同じ位置に画像を配置します。
マウスポインタの(x,y)と、画像の(x,y)が同期するイメージです。
clientX は、ブラウザ画面の左端からの距離を取得します。
clientY はブラウザ画面の上端からの距離を取得します。
offsetWidth, offsetHeight では要素のサイズが取得できます。
これらの組み合わせて、マウスポインタの位置と画像の位置を同じにしましょう。
マウスポインタがすこしでも移動したとき(mousemoveイベント)にこれを登録します。

```js
ball.onmousedown = function(event){
  document.addEventListener("mousemove",onMouseMove);
}
var onMouseMove = function(event){
  var x = event.clientX;
  var y = event.clientY;
  var width = ball.offsetWidth;
  var height = ball.offsetHeight;
  ball.style.top = (y-height/2) + "px";
  ball.style.left = (x-width/2) + "px";
}
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/134076/4b00ab0e-a172-a341-cadf-adf41746ac02.gif" width="300px" />

### ドロップで画像を削除

ある矩形内でマウスが離されたときに画像を削除する処理を追加します。
今回はいらすと屋からゴミ箱の画像を借りてきました。
マウスが離された時(onmouseupイベントが呼ばれた時)にやるべきことは2つです。

* 画像がマウスポインタにひっついてくるイベントを解除
* マウスポインタがゴミ箱の矩形内に存在するか判定する。trueならばボールを削除、falseならば何もしない


```js
<img src="gomibako.png" id="gomibako" width="150px"><br>

(省略)

ball.onmouseup = function(event){
  var x = event.clientX;
  var y = event.clientY;
  var width = ball.offsetWidth;
  var height = ball.offsetHeight;
  var gomibakoRect = gomibako.getBoundingClientRect();
  if((x>=gomibakoRect.left && x<=(gomibakoRect.left+gomibakoRect.width)) && (y>=gomibakoRect.top && y<=(gomibakoRect.top+gomibakoRect.height))){
    var app = document.getElementById("app");
    app.removeChild(ball);
  }
  document.removeEventListener("mousemove",onMouseMove);
}
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/134076/3613bf2d-7742-0c41-2df9-d2642950eac0.gif" width="300px" />


以上、こんな感じでドラックアンドドロップが実装できました！

## まとめ
javascriptでドラックアンドドロップを実装するには・・・

* 要素のpositionをabsolute にする
* mousemove、mousedown、mousemoveイベントハンドラを上手に使う

デモは[こちら](https://gomi.netlify.com/)から試せます。
以上です。
【PowerBI】存在しない欠損データにダミーデータを入れる

初投稿です。
https://qiita.com/quincedaddy/items/6a90c6c0da829dd59584
こちらの記事に大変お世話になったので自分でも書いてみようと思いました。
twitterで教えてくださった@hrkasnoさんありがとうございます！！

#存在しない欠損データを埋めてグラフを実際に近い形に近づけよう
データをしっかり整えて、より実際的できれいなグラフを描こう！という記事です。

##PowerBIでグラフがデータ欠損部分を無視して直線を描いてしまう問題
###BIツールって手軽に動的なビジュアライズできるのが良いとこだよね
PowerBIって何がいいかって、グラフを自動で更新してくれたりとか、大量のデータをつかっても手軽にビジュアルをつくってくれるところですよね。しかもグラフにマウスを重ねることでいろいろ情報表示してくれたり、詳しい情報を出してくれたり、パワポとかのただの画像じゃんっていうようなグラフよりもリッチ！！触っていてめちゃくちゃ楽しい！！

が、そのビジュアル化がうまくいかないと、PowerBI使う意味がありません。

###でもPowerBIってデータ欠損部分のグラフ、勝手に直線引いちゃうじゃん
今回直面したのが、欠損しているデータ（特に今回は、０が入っているわけでも、空白なわけでもない、存在しないデータを扱います）部分があるとき、PowerBIの挙動として、二点があったら直線が引かれてしまうこと、一点のみならただの点になってしまうこと。
例として、各時間にデータがどのくらいあったのかカウントしたものをあげます。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/274446/e81f404d-0c8b-f109-ced6-c5632d1b50ca.png)

みたいな感じです。本当だったらAの13時以降とか、Cの10時、15時以降のデータもゼロとして表示してほしいのに。。
あと、Cの12時は本当はカウント０のはずなのにグラフとしてはあたかも4.5くらいあるように見える！！

本当はこういうグラフを作りたいんです
![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/274446/2c50a222-7c2f-e6b8-241e-17bc36c6ef59.png)
でも、たぶんPowerBIでデータ欠損している部分を勝手にゼロで埋めてくれるという機能は今のところない、、はず。
ということで、二つ目のグラフみたいに、ダミーデータというか、ゼロという数字が入ったデータを足してやらないといけないのです。

#ダミーデータを入れて対処する方法
僕がこの問題に直面したときは、行数百万件以上ある、いわゆるビッグデータでした。
まさか手動ではできないし、Excelで処理にするにも行の上限をオーバーしてしまうかもしれない。
かといってPythonとかで書くのもめんどくさい。
というか、特に時系列データって日々更新していくからこそ価値があるもので、できれば追加で吐き出されてきた素のCSVをPowerBIに投げるだけで更新終わりにしたいですよね。あんまり間にプログラムもはさみたくない。
と、いうことで、PowerBIでダミーデータつくるのも完結させようというのが今回の趣旨です。

##2列（あるいはそれ以上）のかけ合わせのテーブル（マトリクス）をつくる 
その部分がNULLとかでデータのレコード、行自体は存在しているなら楽です。
列の追加で適当なDAX関数使ってやればよい。今回は割愛します。
問題は、そもそも行が存在しないことです。
では、どうすればよいか。
該当する列をクロス結合していけばよいのです。
クロス結合って何ぞや、というと、列同士の全部の組み合わせを作ることです。
たとえば[A,B,C]ていうカテゴリと、[10:00,11:00,12:00,13:00]という時間があったら、
組み合わせは、[A-10:00,A-11:00,A-12:00…C-12:00,C-13:00]という3×4の12通りになりますよね。
それを全部つくって、データがある場合は呼び出してきて、データがなければ0を入れてやればよいのです。
それにはDAX関数の"CROSSJOIN"を使います。

##DAX関数CROSSJOINの使い方
CROSSJOIN関数は、CROSSJOIN(テーブル1,テーブル2[,テーブル3...]）という形で使います。
「モデリング」の「計算」から「新しいテーブル」をつくってやり、この関数を入れれば全部の組み合わせができてしまいます。ですが、テーブル1やテーブル2には、列は入りません。あくまでもテーブルです。
なので、列から重複を除いた一列のテーブルをつくってくれる関数DISTINCTを使います。
DISTINCTはDISTINCT(列)とするだけ。簡単ですね。

ということで、新しいテーブルを作ってこんな感じの式を入れてやります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/274446/5daa4251-3c9e-9d39-4409-2e44f78f9c93.png)

これで、２つの列の掛け合わせテーブルができたので、後はそこにデータを入れつつ、データがないところに０を埋めていくだけです。

###CALCULATE関数とCOUNTA関数、FILTER関数でExcelでいうところのCOUNTIFを実装
ということで、「モデリング」の「計算」から「列の追加」をして、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/274446/c6482d34-3d91-916a-487b-7f59b63dfb2a.png)

こんな感じの式を入れてやるだけ。
COUNTA関数で全データ数を数えて、各行でじかんが一致するものと、カテゴリが一致するものだけにフィルタリングしています。
詳しくは「PowerBI　COUNTIF」とかで調べると出てくるかも。
最後の＋０がミソですね。最初にあげたURLから教えていただきました。
これがないとNULL値だと判定されてデータが入らず、グラフにも表示されないんです。
あとは折れ線グラフだったら軸にじかん、凡例にカテゴリ、値に新しく追加した列を指定するだけで実際の数値に近いきれいなグラフが描けます。

以上になります。初投稿ですがうまく書けたかなぁ。
次は、VLOOKUP的なことをしようとして詰まったので、そういったところと、あとヒント表示の編集に感動したのでそういうの書きたいですね。
外が暑すぎる！！(研究室でお昼寝が趣味になりました)

# 初投稿です！

大学最後なのでさすがに何かしないとまずい・・・
とういうことなので勉強を少しずつして投稿できたら、と思ってます！

**目指せ週１更新！！** (守れる気が全くしません・・・)

公開されているQiita記事のURLの末尾に「.md」をつけるとマークダウンが見れるそうなので色々参考にしていきます。

友達の持ってきたコードを読んでいて気づいた。今後これ使えば綺麗に書けるかもしれない

```python
def print_3():
    return 3

def print_10():
    return 10

if __name__ == "__main__":
    list = {}
    list['3'] = print_3
    list['10'] = print_10
    print(list['3']) # <function print_3 at 0x109c91f28>が表示された。関数のアドレスかな？
    print(list['3']()) # print_3()関数が呼び出され3が表示される                                                 
    print(list['10']()) # print_10()関数が呼び出され10が表示される
```

関数の場所を辞書配列に入れることができるみたいで、辞書配列に()をつけると関数として使えるみたい。

<img width="368" alt="スクリーンショット 2018-07-24 0.34.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/247551/1bc008cb-117d-c4d0-f4fc-760fc121db79.png">

情報処理学会のSamurAI Cordingの話もいずれ・・
これ半年ぐらいやってるのに成果出たり出なかったり・・
強化学習はできてるのかできてないのかすぐわからないのが辛い！
【swift4】 内部ネットワークでの時刻同期に対応する

特定の閉ざされたネットワーク環境下で動作させる端末において、iPhone,iPad自体の時刻同期ができず、開発したアプリで正しい時刻で動作させられなくなってしまっていたので、その時の対処法を記載いたします。

##事象
閉ざされた環境下で動作するアプリを開発したが、iPad本体の時刻同期がされず徐々に時刻がずれる自体が発生。Single App Modeを使用していたために管理者のみしか時刻を直せない。

##対処方法
API通信時にレスポンスとして、サーバ側の時刻をレスポンスとしてもらうように修正。iPad端末との時刻の差分をUserDefaultsに保存し、Date（）初期化時に必ず、時刻の差分を追加するようにDateクラスを拡張。
実際に修正したDateクラスが下記になります。

```swift:Date+.swift
import Foundation

extension Date {
    init() {
        self = Date(timeIntervalSinceNow: UserDefaults.standard.object(forKey: "TimeInterval") as! Double)
    }
}
```