OmniAICreator/Qiita-1.07M huggingface dataset:
機械学習｜勉強会｜要点まとめ

#GDG DevFest Tokyo 2018
<!--180901-->
- 眼のスキャンから疾患を予測する技術が進んでいる。
- メガネに情報を表示することで、作業者の両手をフリーにし、作業効率を上げるのが望ましい。（スマートファクトリー）
- 工場においてはエッジコンピューティングでないと、ラインの処理スピードに追いつけない。

#Qiita×Microsoft 共催MeetUp
<!--180511-->
- 農薬を機械学習で割り出した「散布が必要な箇所」にのみ、ピンポイントで散布することにより、農薬の散布量が90%削減された。
- IBM Watsonに代表される「cognitive computing」では、非構造化データや曖昧な入力に対し、あくまで人を主体とした意思決定支援を行う。

#第34回 WBA若手の会 実世界応用 深層学習
<!--180411-->
- ロボットの現実的作業（タオルを畳む等）においては、カメラでの「視覚／画像認識」による状態把握／行動決定よりも、触覚（今タオルに触った、等）の方が速く確実。
- タオルを畳む、という「作業のフロー」を一切プログラミングせずに、畳んでいる様子を見せ続けることで、「タオルを畳むということの概念を学習」し、畳むことができるようになっていく。

#医用画像処理の最前線 -診断AI編-
<!--180428-->
- 医療における機械学習の問題点として、「キレイなデータ（レントゲン／症例画像）を大量に集めることの難しさ」だけでなく、それらを病院／機関間での共有が困難という点がある。

#第28回 Machine Learning 15minutes!
<!--180929-->
- TensorFlow Hubの事前学習済モデルを使うことで、転移学習にかかるコストを大幅に削減できる。
- TensorFlow Hubでの自作モジュールの公開が進んでいく。
- クラウドワーカーによるアノテーション（タグ付け）が、広く行われている。
- NVIDIA株の伸びがハンパない。

#Communicative AI CONFERENCE 2018
<!--181026-->
- 仮説として、知能は認知運動／記号処理系NNで構成されている。
- 言語／数字／想像／思想などの元となる「記号処理」が、知覚→行動の元となる「認知運動」を駆動させている のは人間だけ。
- これをMLで再現することが、「記号の理解」に繋がる。

#第30回 Machine Learning 15minutes!
<!--181124-->
- Webサイトにおいて、CVを報酬、ページ遷移をアクション、とした強化学習により、UI/UXの最適化が図れる。
- SQLのスキルをつけた後は、多変量解析の学習が良い。

#AI領域でキャリアを積みたい人の機械学習学び方
<!--180729-->
- 日本において機械学習の「実務経験」を積む入り口は極端に少ないが、転職の際には実務経験が必要、という「どこからも機械学習に入っていけない」状況が多いが、抜け道として「Kaggleで実績を積み、評価される」というものがある。

#【中西 崇文氏 講演】 シンギュラリティは怖くない
<!--181013-->
- 人間の進化は知識処理と、その共有方法の進化。
（言語→文字→紙→印刷→データ→Web→ビッグデータ）
- ビッグデータにより、データというものが現実を浮かび上がらせるだけの、「解像度」を持ったと言える。

#WBA若手の会 第37回 カジュアルトーク
<!--180908-->
- 脳信号の解析／神経情報のデコードにより、人の思考を出力（描画／音声出力）させることができるかもしれない。
- 四則演算と代数計算では、脳の別部位が使用されていると思われる。
- RatSLAMにより自己地図を作成する。
CVE-2018-1133を使ってMoodleサイトを攻撃してみる（W.I.P.）

# 概要
Moodle 3.4.2以前の幅広いバージョンで[ある脆弱性](https://www.cvedetails.com/cve/CVE-2018-1133/)が確認された。
"Evil Teacher: Code Injection in Moodle"という[報告者のブログエントリ](https://blog.ripstech.com/2018/moodle-remote-code-execution/)によると、小テストの計算問題を利用して任意コード実行の攻撃ができることになる。"Evil Teacher"となっているのは小テストの編集が必要なため。

# question/type/calculated の問題について
同モジュールにはMoodle 2.xの頃にも[任意コード実行の脆弱性](https://www.cvedetails.com/cve/CVE-2014-3545/)が確認されている。

# 脆弱性についての調査
前掲のブログエントリを確認してみると、`qtype_calculated_find_formula_errors()` の中で行っているバリデーションが不適切なため、後で行う `eval()` で任意コード実行を許しているとなっている。

`eval()` の前には入力された $formula に対して以下のバリデーションが行われる。

1. `while (preg_match('~\\{[[:alpha:]][^>} <{"\']*\\}~', $formula, $regs)) { $formula = str_replace($regs[0], '1', $formula); }` で $formula の中にあるブレースで囲まれた英字（計算問題中の変数部分）を1に置換する。
2. $formula の文字列中にある空白を取り除き、英字を小文字に置き換える。
3. max, log, abs などの利用許可されている関数についての取り扱いを行う。
4. `preg_match("~[^[-+/*%>:^\~<?=&|!.0-9eE]+~", $formula, $regs)` にヒットする不正な文字が含まれていないかチェック。

このバリデーションで問題ないと判断されれば `eval('$str = '.$formula.';')` が実行される。上記のうちで1と2を通過できる攻撃コードを考える必要がある。
少し検討してみたが思ったようなコードが通らず検討中。

# おまけ
ブログエントリ中にYouTubeの動画があり、そこでこの脆弱性への攻撃方法を紹介している。その中では $formula に **{dGhpcy1pcy1hbi1leHBsb2l0LXByZXZlbnRpb24KdGhpcy1pcy1hbi1leHBsb2l0LXByZXZlbnRpb24K}** と入力しているが、どう見てもevalして有効なPHPコードになるようには見えない。
BASE64エンコードしてあるっぽいのでデコードしてみると

```
$ echo dGhpcy1pcy1hbi1leHBsb2l0LXByZXZlbnRpb24KdGhpcy1pcy1hbi1leHBsb2l0LXByZXZlbnRpb24K | base64 -d
this-is-an-exploit-prevention
this-is-an-exploit-prevention
```
oh...
[Android]KotlinでCustomViewを作るときのメモ

# はじめに

KotlinでCustomViewを作るときのメモ。
作り方は、3種類あります。

## No.1 セカンダリコンストラクタで全部書く

```CustomView1.kt
class CustomView1 : LinearLayout {

    constructor(context: Context) : this(context, null)
    constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
    constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {
        LayoutInflater.from(context).inflate(R.layout.input_item_view, this, true)
    }

}
```

## No.2 プライマリコンストラクタに@JvmOverloads

```CustomView2.kt
class CustomView2 @JvmOverloads constructor(
        context: Context,
        attrs: AttributeSet? = null,
        defStyle: Int = 0
) : LinearLayout(context, attrs, defStyle) {

    init {
        LayoutInflater.from(context).inflate(R.layout.input_item_view, this, true)
    }

}
```

## No.3 セカンダリコンストラクタに@JvmOverloads

```CustomView3.kt
class CustomView3 : LinearLayout {
    @JvmOverloads
    constructor(
            context: Context,
            attrs: AttributeSet? = null,
            defStyle: Int = 0
    ) : super(context, attrs, defStyle)

    init {
        LayoutInflater.from(context).inflate(R.layout.input_item_view, this)
    }
}
```
ProcessingでGLSLシェーダーを始めるサンプルコード(Java, Pythonどちらでも)

# はじめに

プログラミング初心者の方でも簡単に始められるツールProcessing（プロセッシング）で、フラグメントシェーダーを実行できます。JavaでもPythonでも書けます。

# 実行画面

左がJavaのコード、右がPythonのコードです。
![processing_shader2.jpg](https://qiita-image-store.s3.amazonaws.com/0/197729/528f58a7-7e80-86ff-72da-dd78a20e0cd8.jpeg)

# Javaで書きたいとき

### 実装

まずはシェーダーの中身を書いたプログラムをdataフォルダの中に置きます。

```data/FragmentShader.glsl

uniform vec2 resolution;
uniform float time;

void main() {
    vec2 uv = -1. + 2. * gl_FragCoord.xy / resolution.xy;
    gl_FragColor = vec4(
                        abs( sin( cos( time + 3. * uv.y ) * 2. * uv.x + time)),
                        abs( cos( sin( time + 2. * uv.x ) * 3. * uv.y + time)),
                        1.0,
                        1.0);
}
```

Processing本体プログラムには以下のように書きます。FragmentShader.glslとファイル名を指定するだけでdataフォルダの中を探しに行ってくれます。

```java
PShader sd;
 
void setup() {
  size(600, 600, P2D);
  sd = loadShader("FragmentShader.glsl");
}
 
void draw() {
  sd.set("time", millis() / 1000.0);
  sd.set("resolution", (float)width, (float)height);  
  shader(sd);
  rect(0, 0, width, height);
}
```


# Pythonで書きたいとき

### Pythonモードのインストール

デフォルトでは右上の言語設定がJavaしか選択できませんが、
簡単にPythonモードを追加することができます。

(こちらのリンクが画像付きで分かりやすいです)
[https://pycarnival.com/processingpy1/](https://pycarnival.com/processingpy1/)

### 実装

同じようにdataフォルダの中にJavaの時と全く同じシェーダーファイルを置いて

```data/FragmentShader.glsl

uniform vec2 resolution;
uniform float time;

void main() {
    vec2 uv = -1. + 2. * gl_FragCoord.xy / resolution.xy;
    gl_FragColor = vec4(
                        abs( sin( cos( time + 3. * uv.y ) * 2. * uv.x + time)),
                        abs( cos( sin( time + 2. * uv.x ) * 3. * uv.y + time)),
                        1.0,
                        1.0);
}
```

Processing本体プログラムには以下のように書きます。
global sdを変数を宣言しておくことで、setup関数でもdraw関数でも、同じシェーダーオブジェクトを参照することができます。

```py
def setup():
    global sd
    size(600, 600, P2D)
    sd = loadShader("FragmentShader.glsl")
 
def draw():
    global sd
    sd.set("time", millis() / 1000.0)
    sd.set("resolution", float(width), float(height))  
    shader(sd)
    rect(0, 0, width, height)
```

以上、ProcessingでJavaでもPythonでもGLSLを楽しみましょう！
Firebase hostingでSSRする際にcloud functionsとの連携(rewrites)が上手くいかない場合の解決策

VueでもReactでもなんでもいいが、Firebaseを使ってSSRを行おうとする場合、hostingとcloud functionsの連携が必須となる。

具体的には、以下のような"firebase.json"を書く。

```firebase.json
{
  "functions": {
    "source": "functions",
  },
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "function": "ssr"
      }
    ]
  }
}
```

しかし、`rewrites`にて"source"全てを"function：ssr"に向かわせているにもかかわらず、一向にfunction内に入れずに困った。かなり長い間詰まっていた。

## SSRする際はhosting対象に"index.html"があってはならない！！
なんとか[stack overflow](https://stackoverflow.com/questions/48646398/firebase-rewrite-path-to-function-not-working)で見つけた話によると、firebase hostingは"/"において、hostingの対象（つまり"firebase.json"における"public"キーの値）内に"index.html"が含まれる場合、それを勝手に表示して指定されたfunctionを無視してしまうようだ。

どうりで、"rewrites"に"/ssr"などを指定した場合は動いたわけだ。

ということなので、SSRする場合は"hosting"の"public"には、静的アセットのみが含まれたフォルダを指定しよう。

```firebase.json
  "hosting": {
    "public": "public/img",
```

### "ignore"で"index.html"を無視させるのも有効
"firebase.json"の設定で、index.htmlを無視させるのが一番効率的かもしれない。

```firebase.json
{
  "functions": {
    "source": "functions",
  },
  "hosting": {
    "public": "public",
    "ignore": [
      "index.html",     <---- ここ！！！
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "function": "ssr"
      }
    ]
  }
}
```
Where is my Dock bottom navigation Apps in Mac Book ? Use 5 Fingers grasping Gesture

Where is my Dock bottom navigation Apps in Mac Book ? Use 5 Fingers grasping Gesture

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

#199 

# Appear

![image](https://user-images.githubusercontent.com/13635059/50624465-ea624b00-0f63-11e9-9c9c-a81a1b98be13.png)

---

https://twitter.com/yumainaura

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









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
JDBCクラスロード


#SQLServerのJDBCクラスロードの方法
```java
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
```

#OracleのJDBCクラスロードの方法
```java
Class.forName("oracle.jdbc.driver.OracleDriver");
```

#MySQLのJDBCクラスロードの方法
```java
Class.forName("com.mysql.jdbc.Driver").newInstance();
```

#PostgresSQLのJDBCクラスロードの方法
```java
 Class.forName("org.postgresql.Driver");
```
For ADHD brain has low memory engineer Mac Book Super Simple Example

For ADHD brain has low memory engineer Mac Book Super Simple Example

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

# Image

- Display GoogleChrome only and hide extensions from address bar and pin some tab and close no needed tabs and i wanna disable bookmark bar but its for js bookmark applet works
- Hide Dock bottom of display but pushing bottom of display he will re appear
- Full Screen mode

![image](https://user-images.githubusercontent.com/13635059/50624322-707d9200-0f62-11e9-8aab-842d536a134d.png)


---

https://twitter.com/yumainaura

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









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
RaspberryPi3でデプスカメラ RealSenseD415を使うときの注意点


https://qiita.com/PINTO/items/2ad10526f9b2e1c8cdf3
こちらを参考に、RealSense415をラズパイで使おうとした際に、止まったポイントをいくつか。

- libgtk2.0-devやpkg-configを再度インストールしてコンパイルせよと言われる
 - OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvShowImage などのエラーが出る

 - GL Driverを変更したことでcv2.imshowなどが使えなくなってしまったのが原因
 - 対策としては、表示部分の実装をopenGLの描画に変える
 - cv2.imwrite, cv2.VideoCaptureなどは使えるので画像取得は問題ない

- realsense本体のファームが最新になっていない
 - USB2.0に対応したのが発売後なので、発売直後のrealsenseはD400シリーズで合っても本体の最新ファームへのアップデートが必要です。
AI論文の日本語全訳をスマホでサクサク読める裏技

Team AIの石井です。リサーチに便利な技をご紹介します。
これで、風呂でも電車でもトイレでもベッドでも、論文読めますよ！！！
あと、何語でも対応している所も非常に良いと思っています。

#結論

このページをスマホのChromeやGoogleAppで開いてみてください。
https://www.arxiv-vanity.com/papers/1812.08008/

下記の様に、翻訳しますか？と聞かれるので、翻訳してください。
![IMG_0495.PNG](https://qiita-image-store.s3.amazonaws.com/0/76304/157dfd4b-c259-2dc4-814a-7a00758d67ed.png)

するとこの様に、アブストラクトではなくてPDFの方の全文が日本語訳されました！
これなら電車に乗りながらAI論文がサクサク読めますね！
![IMG_0496.PNG](https://qiita-image-store.s3.amazonaws.com/0/76304/7fc8736d-4eb8-ca3f-b17f-0c093ba303bf.png)

![IMG_0497.PNG](https://qiita-image-store.s3.amazonaws.com/0/76304/3b51b080-927d-fd32-84b0-67fcfe960065.png)


謝辞：ご紹介いただいたオング優也さん有難うございました！
https://github.com/yutarochan

#やり方

Arxiv Vanity
https://www.arxiv-vanity.com/

という素晴らしいサイトがありまして、ArxivのアブストラクトではなくてPDFの方のURLを入れると、HTMLのWebPageに変換してくれます。
変換後、レスポンシブなのでスマホのレイアウトに最適化されますし、Google翻訳が可能になります。

<img width="951" alt="スクリーンショット 2019-01-03 14.01.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/76304/0c29fa21-8512-d304-20dd-8e7868802939.png">

ArxivVanityさんはPDFで論文読むのが大嫌いで始めたそうです。
いま月額定額制のクラウドファンディングされているので、
共感されたら是非支援お願いします！
https://www.patreon.com/arxivvanity
Django で既存の PDF ファイルに加筆する

次のプログラムを Django で実行できるようにしました。
[既存の PDF ファイルに加筆する (python3)](https://qiita.com/ekzemplaro/items/aa9a1886fa5d7cbb8bdb)

コードは GitHub にあります。
[ekzemplaro/django_pdf_overwrite
](https://github.com/ekzemplaro/django_pdf_overwrite)

![pdf_jan0301.png](https://qiita-image-store.s3.amazonaws.com/0/179446/a57b9b3e-a060-07af-4a56-13cf655f9ed7.png)

デブロイの手順

1) GitHub からクローン

```bash
git clone https://github.com/ekzemplaro/django_pdf_overwrite
```

2) マイグレーション

```bash
python manage.py migrate
```

3) 開発サーバーを起動

```bash
python manage.py runserver
```

4) ブラウザーで http://127.0.0.1:8000/mail_send/ にアクセス

>発行ボタンをクリックすれば、
>media/documents/ に PDF ファイルが作成されます。
2019年冬、風邪ひいた。健康なくしてエンジニアリングはできぬ マインドフルネスの呼吸を実践。

2019年冬、風邪ひいた。健康なくしてエンジニアリングはできぬ マインドフルネスの呼吸を実践。

# Mindfulness when have a cold

- 風邪をマインドフルネスで治すことはできないが、自律神経に働きかけて、治癒力を取り戻すことはできるかも
- 思考で対抗しようとはせずに、なるべく穏やかな肉体的感覚に戻ってくるイメージ
- 呼吸がよりどころとなる、鼻先だけですーっと軽やかに空気が通る、それに癒やしを感じたい


# Daily training needed

- マインドフルネスの実践も慣れていないとエネルギーを使うので、正直どうしようもないときもある
- たとえば少年野球選手がプロに勝とうと思っても、秘策なんかなかったり
- 普段から瞑想の実践をすすめておくと、体調不良になったときも役立つ

# Bitter feeling

- 風邪のときは苦い感覚が体を走るけれど、苦さを呼吸で中和するイメージ
- 頑張らないための力の抜き方が必要だけれど、力を抜こうとおもったらもう力が入っていたり
- 「どうしたら良いか」というぐるぐる思考を、思考ではない方法によって、穏やかめる、やっぱり呼吸は友達

---

https://twitter.com/yumainaura

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











<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
CodeceptJSに独自のStep Methodを追加する

[CodeceptJS](https://codecept.io/pageobjects)の記法は独特で、一人称の `I` から始まる形で操作を記述します。

```javascript
Scenario('Sample Scenario', () => {
    I.amOnPage('https://example.com')
    I.see('Example Domain')
    I.click('More information...')
    I.see('IANA-managed Reserved Domains')
})
```

標準で様々なメソッドが用意されています[^1]が、独自のメソッドを用意したい時もあります。
例えば、ログイン処理を共通化し、 `I.loginAs(email, password)` のように利用したい場合です。

標準で用意されている `step_file.js` にメソッドを記述することで、メソッドを追加することができます。
~~ちなみに、ここでアロー関数を使うと上手く動作しませんので、おとなしく `function()` を使って下さい。~~ コメントで、簡略構文が使えるとのツッコミがありましたので修正しました！

```javascript

// in this file you can append custom step methods to 'I' object

module.exports = function() {
  return actor({
    loginAs: function (email, password) {
      this.amOnPage('/')
      this.fillField('email', email)
      this.fillField('password', password)
      this.click('ログイン')
    }
  });
}
```


`step_file.js` の場所やファイル名を変更したい場合、 `codecept.conf.js` の中で定義することができます。

```javascript

  include: {
    I: './steps/steps_file.js',
  },
```

追加した定義は、typescriptの型定義ファイルを出力することで、IDEの補完を効かせることができます。

```bash

$ node_modules/.bin/codeceptjs def
TypeScript Definitions provide autocompletion in Visual Studio Code and other IDEs
Definitions were generated in steps.d.ts
Load them by adding at the top of a test file:
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/112393/67af39c7-8ac7-35c3-32ef-c0808a1e313c.png)




## 参考

https://codecept.io/pageobjects#actor

[^1]: 利用できるメソッドはドライバごとに若干異なります。例）Webdriverのメソッド一覧 https://codecept.io/helpers/WebDriver#methods
Rocket.Chat にリマインダーを組み込む

Mac上で Rocket.Chat 0.73 に Slack の `/remind` のようなリマインダーを組み込んでみます。

CentOSなどのLinuxでやる場合は、Node、Rocket.Chat、MongoDB、Redis のセットアップと Hubot サービス化の辺りの手順が異なると思います。

## 1. 準備

### 1.1 Rocket.Chat のインストールとセットアップと実行

細かいところは省略します。自分の場合は Docker ではなく開発用の Rocket.Chat を選んだので、

- brew
- node
- meteor

をインストールした上で GitHub からソースをクローンしています。

```bash
$ git clone https://github.com/RocketChat/Rocket.Chat.git
$ cd Rocket.Chat
$ meteor npm install
$ meteor npm start
```

などであらかじめ動かしておきます。この丁寧な手順は公式の 
https://rocket.chat/docs/developer-guides/quick-start/ 辺りに書いてあります。

### 1.2 Rocket.Chat でボットを使う準備

Rocket.Chat のボットにパスワードを設定しておきます。

ここでは Rocket.Chat に最初から登録されているボット (rocket.cat) を使用しますが、新しいボットユーザーを追加しても良いです。

## 2. パッケージのインストール

### 2.1 Redis のインストール

ボット経由で登録されたスケジュールを永続化するために必要です。

```bash
$ brew install redis
```

### 2.2 Hubot のインストール

Rocket.Chat の公式からアダプター付きの Hubot テンプレートを持ってくるのが便利です。

```bash
$ git clone https://github.com/RocketChat/hubot-rocketchat-boilerplate
$ cd hubot-rocketchat-boilerplate
```

## 3. Hubot のセットアップ

### 3.1 Hubot の環境変数を設定

```bash
$ vi .env
```

環境変数の意味はそれぞれ

- https://github.com/RocketChat/hubot-rocketchat/blob/master/README.md
- https://github.com/matsukaz/hubot-schedule/blob/master/README.md

辺りに書いてあります。

`HUBOT_NAME` と `HUBOT_ALIAS` を書き換えておくとボットへの呼びかけをカスタマイズできるようです。

```bash
# Configuration

# for hubot
export HUBOT_NAME='@rocket.cat'
export HUBOT_ALIAS='@rocket.cat'
export HUBOT_LOG_LEVEL=7

# for hubot-rocketchat-boilerplate 
export ROCKETCHAT_URL=http://localhost:3000/
export ROCKETCHAT_USER=rocket.cat
export ROCKETCHAT_PASSWORD=????????
export ROCKETCHAT_USESSL=false
export ROCKETCHAT_ROOM=''
export LISTEN_ON_ALL_PUBLIC=true
export RESPOND_TO_DM=true
export RESPOND_TO_EDITED=true

# for hubot-schedule
export HUBOT_SCHEDULE_DONT_RECEIVE=1
export HUBOT_SCHEDULE_DENY_EXTERNAL_CONTROL=1
export HUBOT_SCHEDULE_DEBUG=1

# EOF
```

### 3.2 Hubot に依存パッケージを追加

リマインダーの Hubot スクリプトは https://github.com/matsukaz/hubot-schedule を使わせていただきます。素晴らしい。

```bash
$ vi package.json
```

依存関係に 2 パッケージを追加します。直前の行にカンマ記号を足してから行追加しないとエラーになります。

```json
     :
  "dependencies": {
    ... ,
    "hubot-schedule": "~0.6.2",
    "hubot-redis-brain": "^1.0.0"
  }
     :
```

```bash
$ vi external-scripts.json
```

こちらはファイル全体を以下に置き換えます。

```json
[
  "hubot-schedule",
  "hubot-redis-brain"
]
```

依存パッケージをインストールします。

```bash
$ npm install
```

## 4. Hubot の実行

```bash
$ redis-server /usr/local/etc/redis.conf &
$ source .env
$ bin/hubot
```

## 5. Hubot の動作確認

Rocket.Chat 上で Administrator から Bot にスケジュールを尋ねてみます。この Bot への問い合わせは `@rocket.chat 〜` で始めます。

> <img width="360" alt="rocketchat-screenshot.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/49258/3280f76b-844d-80ff-322c-ac52c8df25d5.jpeg">

cron 形式の `*` が Rocket.Chat の太文字指定と被るのでメッセージ入力後の表示が少しおかしくなるようですが、ちゃんと動きます。(フォークして Rocket.Chat 用に直そうかしら...)
また、仕様かどうかよく分かっていませんが、ダイレクトメッセージでは問い合わせ先頭の `@rocket.chat` を省略できて、いきなり `schedule 〜` と書き始めても通じるようです。

自分の環境では一回だけ何かの拍子にメッセージが表示されなくなりましたが、ブラウザをリロードしたら直りました。 (これは Rocket.Chat のバグな気がします)


## 6. Hubot の終了

Hubot はターミナルのフォアグラウンドで実行しているので `CTRL+C` で終了です。
Redis はバックグラウンドで実行しているで、 `fg` してから`CTRL+C` で終了です。

以上です。
【PHP】加算子++使用時に値が加算されるタイミングについて

``前置加算子(++$a)``と``後置加算子($a++)``では、``加算子を使用している状態の戻り値``が異なります。

```test.php
<?php
// 前置加算子
$a = 1;
echo ++$a; // 出力結果:2
echo $a;   // 出力結果:2

// 後値加算子
$b = 1;
echo $b++; // 出力結果:1
echo $b;   // 出力結果:2
```

前置加算子では加算された値が戻りますが、後値加算子は元の値が戻ります。

配列のカウンタとして使用する場合は、初期値を0に設定し、0からカウントするかと思います。
その場合は後値加算子が使用されます。

正直、前置加算子はあまり使ったことがありません。
減算子も・・・

> [php.net〜加算子/減算子](http://php.net/manual/ja/language.operators.increment.php)
SVG画像の特性

私がAndroidアプリの開発で使用する画像の主なファイル形式はSVGとPNGです。
それぞれのファイル特性と使い分けについてまとめました。

## SVG(Scalable Vector Graphics)
SVGファイルは、ベクター画像。
ベクター画像(Vector graphics)と呼ばれる画像形式は、画像を点の集合で表現するのではなく、複雑な計算式によって色や曲線を表現。

### 特性
- **拡大縮小しても画質が劣化しない**
    - Androidは、端末によって画面サイズや解像度がばらばらなので、このメリットが非常に大きい:thumbsup:
- 数式や文字を用いたデータファイルなので、エンジニア側で色や透過度の変更が可能
- 形が複雑でなければファイルサイズは小さい
- アニメーション可能
- 透過可能

## PNG(Portable Network Graphics)
PNGは、ビットマップ画像。（「GIF」「JPEG」も同様。）
ビットマップ画像(Bitmap graphics)は、画像を格子状に細かい点(ピクセル, 画素)に分割し、それぞれの点に色や輝度などの情報を与えて表現する方法。

### 特性
- **拡大縮小すると1ピクセルの大きさも大きくなってしまうため、どうしても画像がギザギザに粗くなる**
- エンジニア側で色や透過度の変更はできない
- ベクター画像に比べるとファイルサイズが大きくなりがち
- アニメーション可能
- 透過可能

# ベクター画像とビットマップ画像の使いわけ
以上の特性を読むと、SVGの圧倒的勝利にみえる。
しかし、SVGにもデメリットがある。

それは、写真や文字など複雑で繊細な配色や曲線の画像描画が苦手な事。
SVGは、複雑な計算式によって色や曲線を表現するので、写真などたくさんの色を使う描写には不向き。

風景など複雑な画像を計算式によって図形として扱うには膨大な計算が必要になるからです。

実際、小さなアイコン画像でも文字など複雑な曲線などを含んでいると、画像が崩れて表現されてしまったりしました・・・:disappointed_relieved:

以上からざっくりですが、

- 写真や複雑な配色・曲線を必要とする画像の作成にはPNG
- アイコンなど複雑でない画像の作成にはSVG

と覚えておいて使い分けていくとよさそうです。

ただアプリ開発においては、特に拡大縮小しても画質が劣化せず、ファイルサイズも比較的小さくて済むSVG画像の特性は大きいので、複雑な画像でなければ、どの画面上でも明瞭に画像を表示できるSVGが比較的推奨されます。
【PHP】\nや\tはダブルクオーテーションで囲う

タイトルそのままです。
シングルクオーテーションだと、ただの文字列として出力されてしまいます。

```test.php
<?php
// \nで改行
echo 'test1'.'\n';
echo 'test2'."\n";

// \tでタブ表示
echo 'test3'.'\t'.'test3-2'."\n";
echo 'test4'."\t".'test4-2'."\n";
```

出力結果

```
test1\ntest2
test3\ttest3-2
test4	test4-2
```

html上で改行させたい場合に使う``<br>タグ``は、シングルクオーテーションで問題ありません。

バックスラッシュを使用する場合は、挙動の違いに気をつけたいと思います。

> [php.net〜エスケープシーケンス](http://php.net/manual/ja/regexp.reference.escape.php)
MacBookAir の 年度のナンバリングってちょっとユーザーテンション落ちるよね？ 2019年元旦に 2018 年モデルが届いたぜ

MacBookAir の 年度のナンバリングってちょっとユーザーテンション落ちるよね？ 2019年元旦に 2018 年モデルが届いたぜ
https://github.com/YumaInaura/YumaInaura/issues/203

# 風邪を引いてはエンジニアリングはできぬ 2018 winter 01-03 明日は仕事

- 最近風呂で1時間ぐらい寝ている、リラックスする
- 昨日は温度管理をミスって風邪を引いた気がする
- いつもは湯船に浸かりながら、少しずつお湯を足して冷えないようにしている

# 額が熱い

- まるで加熱中のMacBookのようだ
- MacBookにも風邪をひかせちゃいけないよな
- MacBookの熱も温度管理の失敗だったりするのだろうか‥冷やしすぎて加熱というパターンはさすがにないと思うけど

# MacBookAir 2018 

- 2019年に届いたのが2018年版というのがちょっとあれ
- 雑誌みたいに「来月号」のナンバリングにしてくれないだろうか、あれって3ヶ月後の月だったりするし
- みんながそれをやり始めたらまた混沌とするだろうな、名前付けの独自ルールができてしまって


---

https://twitter.com/yumainaura

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










<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
英語で挑戦！freeCodeCamp - Comment Your JavaScript Code

---

英語で挑戦！freeCodeCamp 第1回です。

![aa.png](https://qiita-image-store.s3.amazonaws.com/0/292473/6c486908-b8ac-6120-260c-11bef6ae5898.png)

今回は、Basic JavaScript: Comment Your JavaScript Code (JavaScriptの基本：JavaScriptのコードにコメントを加える) を読み進めます。この記事を読んだあと、freeCodeCampに英語で挑戦してみてようかな…と思っていただけると嬉しいです。

---

Basic JavaScript: Comment Your JavaScript Code
(JavaScriptの基本：JavaScriptのコードにコメントを加える)

英文を読解するときのコツは、後ろから説明を加える**後置修飾**を読み解くことです。学校の英語の授業では、英文を後ろから戻りながら英訳する練習をされた方もいるかと思いますが、実際に英文を読むときには、前から読み進めて後置修飾をうまく変換しながら読むのが良い方策です。今回は、関係代名詞、不定詞、現在分詞などが出てきますが、全て中学校で学ぶ文法項目です。学校で習う英文法を元に、英文を読み進めていきましょう。

Comments are lines of code that JavaScript will intentionally ignore. Comments are a great way to leave notes to yourself and to other people who will later need to figure out what that code does.

>注）comment：コメント、line：行、intentionally：意図的に、ignore：無視する、leave A to B：AにBを残す、figure out：理解する、way：方法
　1行目、that以下はlines of code(コードの行)を説明しています。このthatは**関係代名詞**と呼ばれるもので、実際に読むときには「そして・・・は」と変換して読み進めます。「コメントはコードの行である（そしてそれは）JavaScriptが意図的に無視する」と読みます。2行目は、to以下がwayを説明している後置修飾です。このtoは**不定詞の形容詞的用法**と呼ばれるもので、実際に読むときには「するための？」と変換します。その後に続くwhoは**関係代名詞**ですので「そして・・・は」と変換します。「コメントは良い方法、するための、注釈をあなた自身や他人に残すため、そしてその人たちは、後でそのコードが何をするかを理解する必要がある」と読みます。


There are two ways to write comments in JavaScript:

>There are〜 は「〜がある」と訳します。to以下は**不定詞の形容詞的用法**なので「何するための？」に変換します。「2つ方法がある（何するための？）コメントを書くため、JavaScriptでは」と訳します。

Using // will tell JavaScript to ignore the remainder of the text on the current line:

>注）remainder：残り、current：現在の
　'Using // ' は' //を使うこと'と訳します。また、tell A to doは「Aに〜するよう命令する」と訳します。「//を使うことは、JavaScriptに無視するように命令します、テキストの残り、現在行の」と訳します。


// This is an in-line comment.

You can make a multi-line comment beginning with /* and ending with */:

>注）multi-line：複数行の、begin with 〜：〜で始まる、end with 〜：〜で終わる
　beginning以下は、commentの説明です。現在分詞の形容詞的用法と呼ばれますが、「〜する・・・」というように説明を加えることができます。「あなたは複数行のコメントを作ることができます、そのコメントは /*で始まって*/で終わります」と訳します。

/* This is a
multi-line comment */
Best Practice

As you write code, you should regularly add comments to clarify the function of parts of your code. Good commenting can help communicate the intent of your code　—　both for others and for your future self.

>注）regularly：定期的に、add：加える、clarify：明確にする
　文頭のAsの後には、主語(You)と動詞(write)が続いています。このような場合のasは接続詞となります。訳し方は色々ありますが、ここでは「〜とき」と訳します。

Try creating one of each type of comment.
> 説明の後に、演習問題が提示されます。ここでは、「それぞれのタイプ（インラインと複数行）のコメントを1つずつ書いてください、」という問題です。help + 動詞は「〜するのを助ける」という熟語で、「あなたのコードの意図を伝えるのを助ける」と訳します。そのあとのダッシュ **-** は、前の語句の内容を説明するために使われます。「良いコメントは、あなたのコードの意図を伝えることができる。他人のためでも、将来の自分自身のためである。」と訳します。

---

以上です。もし時間があれば、freeCodeCampに挑戦してみてはどうでしょうか？

ではまた次回にお会いしましょう。さようなら。
JavaScriptでinterfaceを使ったポリモーフィズムを表現する

以下の記事を参考にさせて頂きました。

- [プログラマー１年生がポリモーフィズムについて学んだのでＲＰＧで説明する。](https://qiita.com/Nossa/items/b6e2f4ed0fa079359fc5)

##要点
この記事は素のJavaScriptでJavaやC#でinterfaceを使うように、機能を限定したポリモーフィズムを表現する実装方法を自分なりに考えたものです。



##もう少し詳しい要点
JavaScriptは変数に型という概念がないので、ポリモーフィズムの様な振る舞いは簡単に出来るんですが、**逆に何でも出来すぎるので機能を限定したインターフェースで定義した型の変数に入っているようにしたいと思いました。**
TypeScriptを使えばすむのですが、素のJavaScriptでどうにか定義して見たいと思いこの記事を書きました。

##実装
RPGゲームを例にします。
戦闘中用のインターフェース(もどき)をBattlerクラスとして下記のように定義しました。
**そしてこのBattlerクラスがこの記事のメインです。**
JSはES6からclass構文が追加されましたが、interfaceはないのでinterfaceもどきです。
この記事の中では**このBattlerクラスを「Battlerインターフェース」と呼ぶことにします。**

```javascript:Battler.js
class Battler {
    constructor(party) {
        this.party = party;
    }
    attack() {
        this.party.attack();
    }
}

```
それではこのBattlerインターフェースをつかってみます。
下記は勇者を表すHeroクラスと魔法使いを表すWizardクラスです。
Javaであればインターフェースはimplementsしますが、出来ないのでextendsでBattlerインターフェースを継承しています。
(しかし、この記事内の実装は継承しなくても出力は変わりません。)


```javascript:rpg.js
class Hero extends Battler{

    attack() {
        console.log('勇者の攻撃！');
    }
    speak() {
        console.log('勇者「Hello」');
    }
}

class Wizard extends Battler{
    attack() {
        console.log('魔法使いの攻撃！');
    }
    speak() {
        console.log('魔法使い「Hello」');
    }
}
```
**上記クラスの説明**

HeroクラスとWizardクラス両方に定義しているattackメソッドはバトル中の物理攻撃
同じく両方に定義しているspeakメソッドはフィールド移動中にキャラクターに話しかけるメソッドです。
バトル中はこのspeakメソッドを呼び出せない仕様にしたいです。
そして、その実装が下記です。

```javascript:rpg.js
//--------バトル開始--------
const hero = new Hero();
const wizard = new Wizard();
const battlers = [ //ポリモーフィズムの恩恵をうけるため配列に格納
    new Battler(hero), //Battlerインターフェース型に変換
    new Battler(wizard) //Battlerインターフェース型に変換
];

// attackメソッドを呼び出す
for (const chara of battlers) {
    chara.attack(); // 呼び出せる
}
//勇者の攻撃！
//魔法使いの攻撃！


// speakメソッドを呼び出す(Battlerインターフェースからは呼び出せない)
for (const chara of battlers) {
    chara.speak(); // エラー 呼び出せない
}
```
今回の実装は趣味で作ってるRPGゲームの実装に使っていこうと思います。
もっといい実装方法などありましたらコメント頂ければと思います。
AzureADへのアプリケーション登録ってどうやるの？

#はじめに
IT企業に入社しましたが運用系にいるため開発は趣味として行っています。
まだプログラミング経験も半年だけなので分からないこと、間違ったことたくさんあると思うので
ご指導、ご指摘の程よろしくお願いします。


##問題・やりたいこと
Microsoft Graphを使うときAzureADへのアプリケーション登録に毎回手こずるので実施した手順をまとめます。

##解決策・実施したこと
**1.AzureADポータルから[アプリの登録(プレビュー)]を開き、[＋新規登録]を選択する**
![Screenshot from 2019-01-03 11-18-03.png](https://qiita-image-store.s3.amazonaws.com/0/314548/1370d8c3-760a-a8cd-205a-c474a2a3e0d2.png)


**2.アプリケーション名・アクセス権・リダイレクトURLを設定する**

- アプリケーション名：アプリケーションの表示名(カッコイイ名前を入れる)
- Supported account types:登録するアプリケーションへのアクセス権を設定する(同テナントユーザーのみ or Notなど)
- リダイレクトURI:ユーザー認証後のリダイレクト先となるURIを設定する(flaskなどのwebアプリケーションから利用する際は設定必須)

設定後、[登録]をクリックする。


![Screenshot from 2019-01-03 11-20-33.png](https://qiita-image-store.s3.amazonaws.com/0/314548/669078da-922f-e13e-9d5e-36fd21696b7b.png)

**3.シークレットキーを生成する**
登録完了後、[証明書とシークレット]を選択し[+新しいクライアント シークレット]をクリックする。(説明や有効期間など適当に入力後シークレットキーが生成されるので暗記する)

![Screenshot from 2019-01-03 11-32-02.png](https://qiita-image-store.s3.amazonaws.com/0/314548/fd2f4db0-6949-48fc-46ce-7b43dfcf1004.png)

**4.使いたいAPIのアクセス権を登録する**
[APIのアクセス許可]を選択し[+アクセス許可の追加]をクリックする。
アプリケーションのアクセス許可の種類には2種類あるので必要な方を選択してください。
- 委任されたアクセス許可:サインインしたユーザーとしてAPIを利用する
- アプリケーションのアクセス許可:バックグラウンドサービスなどのアプリケーションとしてAPIを利用する

![Screenshot from 2019-01-03 11-36-38.png](https://qiita-image-store.s3.amazonaws.com/0/314548/76236897-d657-f805-e518-aa9c471e9a8c.png)

**5.クライアントID、シークレットキー、リダイレクトURIをプログラムに設定する**
クライアントIDは[概要]から確認できます。

![Screenshot from 2019-01-03 11-49-06.png](https://qiita-image-store.s3.amazonaws.com/0/314548/e73ccb23-c153-0c8f-46b2-70656cb9e6b5.png)


##おわりに
・flaskから使う方法は[OAuth認証を使ってMicrosoft GraphAPIを利用する](https://qiita.com/ta9ma_0k/items/82a392973ca79ca668da)で説明しています！
よかったらついでに見てください！

・参考
[Microsoft Graph のアクセス許可リファレンス](https://docs.microsoft.com/ja-jp/graph/permissions-reference)
[アプリを Azure AD v2.0 エンドポイントに登録する](https://developer.microsoft.com/ja-jp/graph/docs/concepts/auth_register_app_v2)
Google ColaboratoryでGoogle Drive上の.pyファイルをインポート

2019年1月時点の情報です。

Google Drive上の.pyファイルをインポートしようとした時に、Google Driveのマウント方法が古いものが検索で出てきたり、Google Drive上の変更がノートブックにはすぐには反映されないことに気づかずに余計な時間を使ってしまったのでシェアしておきます。

# ディレクトリ構成

Google Drive上で以下のディレクトリを作成しているものとします。

> マイドライブ > Colab > my_project

my_projectの中身は以下のようになっています。
my_note.ipynb が Colaboratoryのノートブックです。

```
my_project/
  ├ my_note.ipynb
  └ my_modules/
      ├ module1.py
      └ module2.py
```


# Google Drive をマウント

古い方法だとややこしいですが、現在は以下で簡単にマウントできます。
参考: [Google ColaboratoryでGoogle Driveのファイルを読み込んでPythonで操作](https://qiita.com/ktoyod/items/70d68d602dcf5d29d021) 

```python
from google.colab import drive
drive.mount('/content/drive')
```

（2019/12/8 追記：左ペインを開いて、「ファイル」 → 「ドライブをマウント」を選択すると、同様のコードがセルに展開されるようになっていたようです）

![ss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182604/8edd0f38-3aaf-2f79-5a30-4a7c4d52b567.png)


実行すると認証用のURLが表示されますので、リンク先で認証後に表示されるコードを入力するとマウントされます。

```
Go to this URL in a browser: https://accounts.google.com/o/oauth2/...
  Enter your authorization code:
  ··········
Mounted at /content/drive
```

# インポート

sys.path.append()でパスを通せばインポートできます。

```python
import sys
sys.path.append('/content/drive/My Drive/Colab/my_project/my_modules')

import module1
module1.hello()
```

# 注意点

- Google Drive上の見かけと実際のディレクトリの構造が違うので、見かけ上でファイルが正しく配置されていてもパスを通さないとインポートできません。

```python
from my_modules import module1 # パスを通していない
```

実行結果

```
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-5-bf86f25662ae> in <module>()
----> 1 from my_modules import module1

ModuleNotFoundError: No module named 'my_modules'

---------------------------------------------------------------------------
NOTE: If your import is failing due to a missing package, you can
manually install dependencies using either !pip or !apt.

To view examples of installing some common dependencies, click the
"Open Examples" button below.
---------------------------------------------------------------------------
```

- 冒頭にも書いた通り、__ノートブックを開いた後にGoogle Drive上でファイルを追加・移動したり、ファイルの内容を変更してもすぐには認識されません__。  
これはGoogle DriveというよりもGoogle Colaboratoryやその元となったJupyter Notebookの仕様で、一度importしたモジュールは再度importを行ってもファイルから読み込むことはせず、メモリ上のプログラムをそのまま再利用します。  
そのため、モジュールの内容を書き換えた場合、明示的にリロードする必要があります。

```python
import importlib
importlib.reload(module1)
```

私はこれに気づかず、importのエラーを解消するのに数時間を無駄にしました・・・。Jupyter Notebookに不慣れな方は、同じ轍を踏まないようにご注意ください。

【2020/12/25追記】
モジュールをインポートできない時はランタイムの再起動も試してみるといいと思います。 
参考: [マウントして、パスも通しているのにGoogle Colaboratoryにモジュールをインポートできない😭👉ランタイムを再起動しましょう](https://qiita.com/jtmk4752/items/f0690c90d575274c8b88#_reference-95355e3bc78028cee80b))
CodeceptJSのMultiple Sessionsについて

CodeceptJSには [Multiple Sessions](https://codecept.io/acceptance#multiple-sessions) という機能があり、シナリオ実行途中でCookie等を共有しない別のブラウザセッションを開くことができます。
下記のコードは次のように動作します。

- ブラウザを起動する
- `/login` に遷移する
- `foo@example.com` としてログインする
- 新しいブラウザを開く
- `/login` に遷移する
- `bar@example.com` としてログインする
- `foo@example.com` でログインしたウィンドウを開き、 `CLICK ME` と書かれたボタンをクリックする
- `bar@example.com` でログインしたウィンドウを開き、 `CLICK ME` と書かれたボタンをクリックする


```javascript
Feature('Session sample')

Scenario('Logged in without session', (I) => {

    // foo@example.comでログイン
    I.amOnPage('/login')
    I.fillField('email', 'foo@example.com')
    I.fillField('password', '1234')
    I.click('Log in')

    // 別セッションで bar@example.com としてログイン
    session('bar', () => {
        I.amOnPage('/login')
        I.fillField('email', 'bar@example.com')
        I.fillField('password', '4321')
        I.click('Log in')
    })

    I.click('CLICK ME')

    session('bar', () => {
        I.click('CLICK ME')
    }

})
```

`session()` で作成したセッションも含め、シナリオ間は完全に分離されており、セッションは共有されません。
上記のコードに加え、下記のシナリオを追加すると、テストは失敗します。

```javascript

Scenario('New Scenario', (I) => {
    I.click('CLICK ME') // this will fail
    session('suemura@openlogi.com', () => {
        I.click('CLICK ME') // this also will fail
    })
})
```
MacにWindows用キーボードを繋いだときに日本語と英語を切り替えるには？

 MacBookなどを使っていると、外部ディスプレイと外付けキーボードを繋ぐことがあると思いますが、Windowsのキーボードを繋ぐと、どのキーを押せば良いのかわからなくなってしまうことはないでしょうか？その場合は、以下の組み合わせで操作可能です。

## 日本語と英語を交互に切り替える　（Macの英語キーボードでも同様）
「Ctrl」 + 「スペース」
## Microsoft Remote Desktop で、Windowsマシンに繋いでいるときに、日本語と英語を交互に切り替える
「半角/全角」　（Windowsキーボードとしてそのまま使えるようです）
## 切り取り、コピー、貼り付け
「Windows」 + 「X」、「Windows」 + 「C」、「Windows」 + 「V」
## \\　(バックスラッシュ)
"バックスラッシュ"　と入力して変換候補から選択。　または「Alt」 + 「¥」
## Delete (１文字戻らずに削除)
ありません。「Back Space」で、削除して一文字戻ります。
Rigidbody.Moveposition

transform.positionは座標を直接代えるからワープしたようになる。
rigidbody.positionも同じ。

rigidbody.Movepositionは途中の補完をしてくれる。

コインプッシャーでpositionをつかうと上のコインが動いてくれないが、
Movepositionだと動いてくれる。

終わり。
REST APIについて考えたことメモ

前提として、REST APIではステートレスな設計が正とされている

認証にセッションを使う→ステートフル
(サーバー側でuserのセッションに対応する情報を保持していしまっているため)

認証にトークンを使う→ステートレス
(サーバー側ではトークンに含まれるuser情報を使用するため)

参考

https://developer.ntt.com/ja/blog/bcda1300-6cce-4e1c-b2ec-08e1ff441e42
https://qiita.com/pinekta/items/d10c8374b1a3003cd952
https://www.glamenv-septzen.net/view/1350
https://norikone.hatenablog.com/entry/2018/08/08/Web%E8%AA%8D%E8%A8%BC%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BToken%28JWT%29%E3%81%A8Cookie%28%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%29%E3%81%AE%E9%81%95%E3%81%84
adobeのLaunchでGTMのトリガーや変数を利用する

#はじめに
　GTMで運用していたDTMタグをLaunchに移行したのですが、一部のタグがGTMのカスタムイベントやカスタム変数に依存していたため移行後もGTMの設定を利用することにしました。ここでは、「GTM変数をLaunchの変数にする方法」「GTMトリガと同じタイミングでLaunchルールを発火させる方法」をまとめました。

#GTM変数をLaunchの変数にする方法
GTMで以下のように定義された変数をLaunchで使用する方法を説明します。

| 項目名 | 値 |
|:--|:--|
| 変数名  | Example 1  |
| 変数のタイプ  | データレイヤーの変数  |
| データレイヤーの変数名  | example_1  |

* Launch側でデータエレメントを以下のように設定します。
	![example1_in_dataelement.jpg](https://qiita-image-store.s3.amazonaws.com/0/295660/b485bafd-87f4-9d25-e9b9-c754c6319b5c.jpeg)

* 以下は上図④のソースコードです。

```javascript

return google_tag_manager['GTM-XXXXXXX'].dataLayer.get('example_1');
```

#GTMトリガと同じタイミングでLaunchルールを発火させる方法
　GTMのトリガ及びカスタムイベントは直接Launchで受信できないので、GTMに別途カスタムイベントを起こしてもらうようにします。
　カスタムイベントのトリガはLaunchで準備し、GTMはイベントを起動するだけになります。

##GTM側 - カスタムイベントを起こす

* 変数を設定します。

| 項目名 | 値 |
|:--|:--|
| 変数名  | Launch Event  |
| 変数のタイプ  | データレイヤーの変数  |
| データレイヤーの変数名  | launch_event  |
* 下記のコードをタグとして保存します。移行前に使っていたトリガで発火させます。

```javascript

<script>
var eventTrigger = {{Launch Event}};
if(eventTrigger){
    var dom = {{Click Element}};
    eventTrigger(dom);
}
</script>
```
##Launch側 - カスタムイベントのトリガを準備する
　GTM側で実行されるトリガ関数は、前もってLaunchからデータレイヤーにプッシュしておきます。

* ルールを以下のように設定します。
	![customevent_in_rule.jpg](https://qiita-image-store.s3.amazonaws.com/0/295660/cab329f6-d832-68a3-6257-70580b46d712.jpeg)



* 以下は上図④のソースコードです。

```javascript

try {
  if(!google_tag_manager['GTM-XXXXXXX'].dataLayer.get('launch_event')){
    throw 'launch_evnt is not exist.';
  }
} catch(ex) { 
  window['dataLayer'] = window['dataLayer'] || [];
  dataLayer.push({
    'launch_event':
    (function(dom){
      var e;
      try {
        e = new CustomEvent('event_valueChanged', {'bubbles':false, 'cancelable':true});
      } catch (ex) {
        e = window.document.createEvent('CustomEvent');
        e.initCustomEvent('event_valueChanged', false, true, void 0);
      }
      dom.dispatchEvent(e);
    })
  });
}
```
##Launch側 - カスタムイベントを受信する
* ルールを以下のように設定します。
	![customeventfire_in_rule.jpg](https://qiita-image-store.s3.amazonaws.com/0/295660/5629e906-4733-d443-a872-822ac2454856.jpeg)

	


以上
Django でメールを送信する（その２）

次のプログラムを改造して、宛先、タイトル、本文をページから変更できるようにしました。
[Django でメールを送信する](https://qiita.com/ekzemplaro/items/4ab21be0ea8130c2b59b)

コードは GitHub にあります。
[ekzemplaro/django_mail_send
](https://github.com/ekzemplaro/django_mail_send)

 デブロイの手順

1) 必要なライブラリーのインストール

```bash
sudo pip install django-environ
```

2) GitHub からクローン

```bash
git clone https://github.com/ekzemplaro/django_mail_send
```

3) .env の作成

```text:.env
mail_from="sample@@yahoo.co.jp"
```

4) マイグレーション

```bash
python manage.py migrate
```

5) 開発サーバーを起動

```bash
python manage.py runserver
```

6) ブラウザーで http://127.0.0.1:8000/mail_send/ にアクセス

![mail_jan0301.png](https://qiita-image-store.s3.amazonaws.com/0/179446/385d5ad8-93ac-24d6-43db-e66afc8bf77e.png)
Mac Alfred3 Clipboard 履歴からペーストできない！！！ OS Mojave MAcBook2018 うわー！

# 解決した！！

[Mac Alfred3 Clipboard 履歴からペーストできない！ Snippetも！ アクセシビリティ設定見直せ！ Mac OS Mojave MAcBook2018 - Qiita](https://qiita.com/YumaInaura/items/6f6375894bc60cff59c2)

# 以下履歴の叫び

Unable to clipboard paste from history of Alfred 3 MacBook 2018 Why?

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

# Japanese Title

Mac Alfred3 Clipboard 履歴からペーストできない！！！ OS Mojave MAcBook2018 うわー！

# Listen me...

take screenshot and paste works

![image](https://user-images.githubusercontent.com/13635059/50620843-74e78200-0f45-11e9-916f-54cb1995b32d.png)

# Paste From history does not work

![image](https://user-images.githubusercontent.com/13635059/50620850-83359e00-0f45-11e9-9432-7c74a2524dbe.png)

# In Github issue form nothing happens

why?

# Quit Alfred

![image](https://user-images.githubusercontent.com/13635059/50620865-98123180-0f45-11e9-89ca-c54dd332bd1b.png)


![image](https://user-images.githubusercontent.com/13635059/50620870-9f393f80-0f45-11e9-83e8-0a13a7beb4cc.png)

# And restart

![image](https://user-images.githubusercontent.com/13635059/50620885-b5470000-0f45-11e9-8760-7273d483a09c.png)

# Trouble keepon

😢 😢 😢 

# in Other mac app does not work e.g Note

![image](https://user-images.githubusercontent.com/13635059/50620916-e9babc00-0f45-11e9-91ac-800988a9cc2f.png)

# Emoji paste does not work

![image](https://user-images.githubusercontent.com/13635059/50620929-f6d7ab00-0f45-11e9-8a79-bcd7149f81d6.png)

# text paste does not work

![image](https://user-images.githubusercontent.com/13635059/50620946-07882100-0f46-11e9-99cb-36bf07fd80a8.png)

# OS is Mac Mojava? Mojave

![image](https://user-images.githubusercontent.com/13635059/50620966-25558600-0f46-11e9-931b-c242a36ebe0e.png)

# Ah  i throw to trash old Alfred

![image](https://user-images.githubusercontent.com/13635059/50620991-533aca80-0f46-11e9-80d7-a9ec3ae2dde3.png)

# Now only Alfred 3 app is here

![image](https://user-images.githubusercontent.com/13635059/50621011-6c437b80-0f46-11e9-8cfa-c8f8655043ee.png)

# But does not work from history...

AHHHHHHHHHHHHHHHHHHHHHH!
😱 😱 😱 😱 😱 😱 😱 😱 😱 😱 😱 😱 😱 
😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 
😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 😭 


# I will restart mac os


![image](https://user-images.githubusercontent.com/13635059/50620954-140c7980-0f46-11e9-8364-b5d6f2e4bebc.png)


try and tell you result ... later

# Alfred clipboard history is my life .... or ... dead .... today .. i maybe .. dead 😢 

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Mac Alfred 3 クリップボード パワーパック拡張で初期設定する！ショートカットその他

Mac Alfred 3 Clipboard power pack extension starter settings e.g keyboard shortcut and others

# Japanese Title

Mac Alfred 3 クリップボード パワーパック拡張で初期設定する！ショートカットその他

# Preferences

![image](https://user-images.githubusercontent.com/13635059/50620617-d4dd2900-0f43-11e9-8f92-861119865f0b.png)

# Keep max

![image](https://user-images.githubusercontent.com/13635059/50620625-ede5da00-0f43-11e9-8a59-20d52e3d2882.png)


# My fav key mapping is command + control + V

maybe not override other application mapping 
Command + V paste is brother action

![image](https://user-images.githubusercontent.com/13635059/50620641-0655f480-0f44-11e9-84ad-cb778c1bb124.png)

# Unlimited clipboard size?

i try now first time so select 5m characters

![image](https://user-images.githubusercontent.com/13635059/50620677-3a311a00-0f44-11e9-9baa-c3d01eefd4e9.png)

# Yeae Paste Free Life Since NOW!!!!!!!!!!!!!!!!

![image](https://user-images.githubusercontent.com/13635059/50620726-84b29680-0f44-11e9-88b8-f6cb68fdd0b5.png)

btw seach `image:` is good filter

# Where is ok button?

its automatic saving :)

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


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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
馬鹿な僕がそれでもプログラムを書くために使うものたち （macOSしか分かりません）

## これはなに？
馬鹿な僕がそれでもプログラムを書くために使っているツールなどを紹介する

### 馬鹿な僕がそれでもプログラムを書くために

この言葉を贈ろう
> 料理が作れなければ電子レンジを買ってその使い方を覚えろ
> そうすれば料理を作った気にはなれるはずだ
> 今の冷凍食品はすごいぞ

いい言葉だろ？　さっき風呂の中で思いついた。

ではさまざまな電子レンジを紹介しよう。

## git

バージョン管理ツールとかコード管理ツールとかいう奴。
Xcodeをインストールすると付いてくるので馬鹿でも使い始められる。
こまめにコミットすること。

馬鹿な僕はすぐプログラムを破壊してしまうので、なかったらプログラミングできない。

## gitのGUIクライアント

馬鹿な僕にはCUIなんて無理です。

XcodeのSCMも割と使えるぞ。
僕は[Tower](https://www.git-tower.com/windows)がないと死ぬけど。

## GitHub
いわずと知れたITエンジニア向けSNS。

え？変なプログラムだと叩かれそう？
バカ！その人は神だ！コードレビューを無料でやってくれる神だ！崇めろ！

### 使用法その１

gitのレポジトリを無料で預かってくれる。
馬鹿な僕はすぐローカルディスクを破壊するので必需品。

### 使用法その２

なんかすごいフレームワークとかただで使える。すごい。

## Carthage / SwiftPM / CocoaPods

GitHubにあるすごいフレームワークが簡単に組み込めるやつ。
すごい。

僕はCarthageが好き。
READMEにCarthageに対応してると書いてなくても、試してみるとCarthageが使えたりする。

GitHubとこれがあれば何もやってないのにプログラミングしてる気になれるぞ！

## プログラマ向けQAサイト

[スタックオーバーフロー](https://ja.stackoverflow.com/)とか[teratail](https://teratail.com/)とか。

きちんと質問すると大体答えが返ってくる。きちんとしてないと怒られるか無視される。
回答者が人間であることをきちんと認識すること。

絶対ではないけど、taratailは初心者用、スタックオーバーフローは中上級者用みたいな？
どっちでも答えるけど。

両方とも「回答者は人間である」ことを肝に銘じて質問すれば問題はないよ。

## Google翻訳と辞書.app

英語からは逃げられないんだよ。あきらめよう。
google翻訳は「正しくない」ってことを常に考えて使うこと。

## Apple 公式 API Reference 

泣くな！　読め！　ほら、Google翻訳も辞書.appもあるぞ。
英語怖くないよー　噛みつかないよー

使いずらい？　がんばれ！！！

## Apple 公式 ドキュメント

大丈夫。まだ使えるやつもあるはずだ。最終更新日には気をつけろ。

## Apple 公式 Sampleコード

だ、大丈夫だ、まだ使えるやつもあるはずだ。最終更新日には気をつけろ。

## Qiita

ここだよ！

## Twitterで偉い人をフォロー

偉い人をフォローしておくといろんな情報が流れてくるよ！　しかも無料！
LaravelのHomestead上のnpm installでMaximum call stack size exceededが発生する場合

# 事象

環境は以下の通り。

- Win10
- VirtualBoxでLaravelのHomesteadを構築

Laravelで開発環境作成中に、`npm install`が必要となったので実施したところ、`Maximum call stack size exceeded`が発生した。

なお、Laravelのドキュメントによると、Windowsでは（Windowsをホストとした仮想環境上でも）次のコマンドでインストールするとのこと。

```
npm install --no-bin-links
```


ログを見ると次のような内容。

```
12920 verbose stack RangeError: Maximum call stack size exceeded
12920 verbose stack     at RegExp.test (<anonymous>)
12920 verbose stack     at isDepOptional (/usr/lib/node_modules/npm/lib/install/deps.js:398:27)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:414:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
```

# 対処

## .npmrcの削除
`~/.npmrc`を削除すると解消される。
https://github.com/angular/angular-cli/issues/12231
→そもそも`~/.npmrc`が存在しなかった。

## npm installをホスト側（Windows上）で行う
Windows上で以下のコマンドを実行。（Win版node.jsはインストールされている前提）

```
npm install --no-bin-links
npm rebuild --no-bin-links
```

何故両方必要なのかはわかっていないが、情報ソースのまま行ってみている。

この後、ゲスト側（Homestead上）で必要なnpmのコマンドを認識できるようになった。

https://stackoverflow.com/questions/45678817/error-etxtbsy-text-file-is-busy-on-npm-install

# 後からわかったこと
これで一旦node_moduleが入ったからと、ゲストOS（Linux側）でnpmを実行すると失敗する。
結局、npm系操作は全てホスト側（windows側）で実行しなければならない。

# 所感
コーディングや環境の話はHomestead上で完結すると思っていたのに、npm関係はWindows上で行わなければならないのはかなりの衝撃。
多分Windowsのファイルシステムが独特なのだろうなと思うのだが、これは結構嫌な感じ。
いちいちLaravelのコマンドはHomestead、npmの更新はWindowsというのはセンス悪い。。
MacBookで五本指をぎゅっとしてアプリから検索するジェスチャー App検索の出し方

#mac book #5fingers #grasp #gesture #app #search 

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

# Japanese Title

MacBookで五本指をぎゅっとしてアプリから検索するジェスチャー App検索の出し方

# Movie

https://twitter.com/YumaInaura/status/1080632293289484288

# ScreenShot

![image](https://user-images.githubusercontent.com/13635059/50619965-00f6ab00-0f40-11e9-8a8a-fae29fffa0c1.png)

![image](https://user-images.githubusercontent.com/13635059/50619951-f3412580-0f3f-11e9-974e-b85441f3e69d.png)

# Command + F Searching 

![image](https://user-images.githubusercontent.com/13635059/50619829-17503700-0f3f-11e9-998a-74e06c3c9a44.png)









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
[ES6]JavaScriptでGETパラメーターを取得する

元記事 [JavaScriptでGETパラメーターを取得する](https://qiita.com/Evolutor_web/items/c9b940f752883676b35d) をES6で書いてみた。

```JavaScript:JavaScript
/**
 *  GETパラメータを配列にして返す
 *  
 *  @return     パラメータのObject
 *
 */
const getUrlVars = () => {
    const vars = {}; 
    location.search.substring(1).split('&').forEach(param => {
        const [key, ...val] = param.split('=');
        if (key !== '') {
            vars[key] = decodeURI(val.join('='));
        }
    });
    return vars;
}
```
2019年！2018年モデルのMacBookAirを買ったのでGoogle日本語入力の初期設定をする


# Download Goolge IME

ダウンロードとインストール

![image](https://user-images.githubusercontent.com/13635059/50619484-cccdbb00-0f3c-11e9-9394-b5cf0486b66e.png)

https://www.google.co.jp/ime/

# Use only Google IME not Mac default IME

Google日本語入力だけを使うようにする

![image](https://user-images.githubusercontent.com/13635059/50619608-72812a00-0f3d-11e9-89af-203333de532d.png)


# Preferences Switch Half width and Fullwidth

記号入力を半角がデフォルトになるように、ひとつずつ設定

![image](https://user-images.githubusercontent.com/13635059/50619478-c3dce980-0f3c-11e9-8ff8-43c8acc89dfe.png)

# Do not forget push "OK" !!!!!!!!!

![image](https://user-images.githubusercontent.com/13635059/50619713-27b3e200-0f3e-11e9-94b0-22c6475b6779.png)

i forget and re inputting now ..... 😢 😢 😢 😢 😢 

# My best settings is 

![image](https://user-images.githubusercontent.com/13635059/50619518-f555b500-0f3c-11e9-8e91-6ec7045d7a99.png)

![image](https://user-images.githubusercontent.com/13635059/50619520-fab2ff80-0f3c-11e9-9689-5cd995d08dd9.png)

![image](https://user-images.githubusercontent.com/13635059/50619528-0272a400-0f3d-11e9-9c59-814a092ca33e.png)

`?!` remember
`KAtakana / 、。 / ・「」` Full width
others HalfWidth


# One key backslash not Japanese yen mark

日本円の半角ではなくてバックスラッシュを1キーで入力できるようにする
![image](https://user-images.githubusercontent.com/13635059/50619631-a0666e80-0f3d-11e9-8ba3-2af66012fce0.png)

---

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

https://twitter.com/YumaInaura








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->