OmniAICreator/Qiita-1.07M huggingface dataset:
Kivyアプリ実行時に引数を与えるだけで使えるようになる便利なツール群

# kivy.modules

このパッケージ内には、プログラム実行時に組み込むことができる便利な機能があります。ここではその中で良さ気な物を幾つか選んで紹介したいと思います。全ての機能を知りたいのなら[公式](https://kivy.org/docs/api-kivy.modules.html)をご覧ください。

## Inspector

使いたい時は`python ./main.py -m inspector`のようにコマンドに`-m inspector`を付けるかソースコードに

```python
from kivy.config import Config
Config.set('modules', 'inspector', '')
```

と書きます。

アプリが立ち上がってから Ctrl + E を押すと

![07_inspector_00.png](https://qiita-image-store.s3.amazonaws.com/0/144673/b01511ed-ca9d-7c09-0cc2-0a2ebe689491.png)

が出てくるので 画面上にあるWidgetをどれでもいいのでClick。

![07_inspector_01.png](https://qiita-image-store.s3.amazonaws.com/0/144673/e3bb6d3c-a994-e968-1d3a-9bb7c6cf1fbc.png)

それから下にある `<kivy.uix.button.Button...>` と書かれたButtonを押すと

![07_inspector_02.png](https://qiita-image-store.s3.amazonaws.com/0/144673/a1b0e7ef-8b31-c950-86c7-27f2f69d092e.png)

Widget階層やPropertyの値を確認できます。

## Keybinding

使いたい時はInspectorと同じ要領で、手順中の`inspector`を`keybinding`に代えてください。

このmoduleは幾つかの機能をKeyboardに割り当てます。

- F11 ... Windowを回転
- Shift + F11 ... landscape,portraitの切り替え
- F12 ... Screenshot撮影(OSの持つScreenshotとは違ってWindowの枠は含まれない)

## TouchRing

画面を触っている間(MouseのButtonを押し下げている間)その位置に白い輪っかを表示してくれます。

![07_touchring_00.png](https://qiita-image-store.s3.amazonaws.com/0/144673/d09d6761-f875-427d-9cf4-9a60b3601830.png)

このmoduleは上の２つとは違い、任意で追加の引数を与える事ができます。例えば白い輪の代わりに好きな画像を使いたい時は

コマンドなら`python ./main.py -m touchring:image=好きな画像.png`、ソースコードからなら

```python
from kivy.config import Config
Config.set('modules', 'touchring', 'image=好きな画像.png')
```

とします。

![07_touchring_01.png](https://qiita-image-store.s3.amazonaws.com/0/144673/efa89ff5-8453-e736-6ce6-e3a15cb4b3ff.png)

さらに透明度と拡大率を指定

`python ./main.py -m touchring:image=好きな画像.png,alpha=0.5,scale=2`

```python
from kivy.config import Config
Config.set('modules', 'touchring', 'image=好きな画像.png,alpha=0.5,scale=2')
```

![07_touchring_02.png](https://qiita-image-store.s3.amazonaws.com/0/144673/74190ea0-7b06-b2fa-9fd7-e825bc185f55.png)

## ShowBorder

使い方は他の物と同様です。これを使う事で例えば以下の実行結果は

```python
from kivy.lang import Builder
from kivy.app import runTouchApp


runTouchApp(Builder.load_string('''
GridLayout:
    padding: 10
    spacing: 10
    cols: 3
    Widget:
    Label:
        text: 'Label'
    Button:
        text: 'Button'
    RelativeLayout:
'''))
```

![07_showborder_00.png](https://qiita-image-store.s3.amazonaws.com/0/144673/e6dbfc33-39e4-97e8-22e4-f8e337d8545e.png)

以下のようになります。

![07_showborder_01.png](https://qiita-image-store.s3.amazonaws.com/0/144673/2045e873-1e31-41d2-35d0-a47ce05caba0.png)

このように元々境界線の無かったWidgetにそれができる為、Widgetの配置が正しく行われているか確かめるのに非常に便利です。

## WebDebugger

これの実行には`flask`が必要なのであらかじめ入れておいたら、他のmoduleと同じ要領で有効にします。その後web browserで`http://localhost:5000/`を開くと

![webdebugger.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144673/7a1ef1ab-5c29-3d62-37ff-cfcaae6eb5b1.png)

といった具合に内部の状態を覗けます。
gitlabからgithub リポジトリに向き先 url を変更する

社内でgitlabからgithubに移行した際に少しハマった点です。。。
```
git remote set-url origin git@github.com:8mamo10/new.git
```
古いレポジトリに触りたいこともありそうな場合、origin とは別名で登録しておくとよさそう。
```
git remote set-url old-repos git@github.com:8mamo10/old.git
```
EF CoreでCode Firest multipl prymarykey

EF 6とかだとアノテーションでこうできたけど

``` Model.cs
        [Key, Column(Order = 0) ]
        public int AId { get; set; }
        [Key, Column(Order = 1) ]
        public int BId { get; set; }
        [Key, Column(Order = 2) ]
        public int CId { get; set; }
```

EFCoreはこう

``` DbContext.cs
            builder.Entity<Model>().HasKey(p => new {p.AId, p.BId, p.CId});

```
Excel for Mac 2016が起動しないまたはすぐに落ちる

# Excel for Mac 2016が落ちるようになりました。

1. 特定のファイルで落ちる場合→使用してるフォントを変更しましょう
2. どんなファイルでも落ちる場合→OSに追加でインストールしたフォントを一旦全て退避させましょう

だいたいこれで治ります。
PTVSのFlaskアプリでAzureテーブルストレージ

#Table ストレージとは
[Azure Table ストレージ サービス](https://azure.microsoft.com/ja-jp/documentation/articles/storage-python-how-to-use-table-storage/)は、大量の構造化データを格納します。
このサービスは、Azure クラウドの内部および外部からの認証された呼び出しを受け付ける **NoSQL データストア**です。要は、外部にSQLのデータをストアできるというものです。PTVSを使った場合DjangoでSQLを使いたいという時には便利です。

#FlaskアプリでAzureのテーブルストレージを使う
##プロジェクト作成
**【新しいプロジェクト】▶︎【Python/Sample】▶︎【Polls Flask Web Projetc】**
Flaskの新規プロジェクトを作成する
<img width="1274" alt="１.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/e76a6ba7-3b7d-c671-d591-37ca890e10be.png">

##アプリ実行
Runして実行するとPollsのサンプルが起動する。
<img width="1099" alt="２.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/be7c3d7d-ab91-9cef-914d-748db3341f3b.png">
What is your favorite season?を選択する
<img width="1099" alt="３.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/2cef7218-e32a-2fc9-6fe9-c135b38d7ab2.png">
実際にVoteする
<img width="1098" alt="４.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/f99bc8c9-d427-ef99-91e0-c66503ac188f.png">

実際に投票される！
<img width="1094" alt="５.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/d2f77596-e03e-8efc-40c0-a9ddd06c4f1a.png">

##Azureテーブルストレージを使用する
ここで**About**を選択するとCurrent repositoryに　**In-Memory**とある。
**Azureテーブルストレージ**を利用できるようにする
<img width="1097" alt="６.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/f5f86ad0-5cb2-a158-851a-b8e4c3729192.png">

**【プロジェクト/右クリック】▶︎【Debug】▶︎【Debug Server Command】**
Environmentで下のように記入する。ここで、Azureでのストレージの作成方法は省略します。
詳しくは[こちら](http://qiita.com/saiyuki1919/items/61b6c666aecd7c313e47)を参考に

```
REPOSITORY_NAME=azuretablestorage
STORAGE_NAME=<storage account name>
STORAGE_KEY=<primary access key>
```

<img width="1273" alt="７.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/ba7c420d-cac4-9627-010d-fa934e9aebd9.png">

**※記入後、ソリューションを右クリックして、リビルドしてください**
**実行後、エラーが発生しますが【続行】を押してください！**
Aboutを押すと**In memory**から**Azure Table Storage**に変わりました！
<img width="1090" alt="８.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/832ce145-a6b2-4914-abc6-6e963e7a5b86.png">

##Azure上にデプロイ
Azureに[デプロイ](http://qiita.com/saiyuki1919/items/db6f9a2c705a1c9135dc)し、
**【App Service】▶︎【APP】▶︎【アプリケーション設定】**
を選択しアプリ設定にVS上でやったのと同様に記入することでAzure Table Storageになる。
※デプロイすると**In Memory**に戻ってしまいますので、Azure上で再度設定する必要がある

```
REPOSITORY_NAME=azuretablestorage
STORAGE_NAME=<storage account name>
STORAGE_KEY=<primary access key>
```
![９.png](https://qiita-image-store.s3.amazonaws.com/0/130097/4a544b2e-7fc8-5bbd-9a03-854fd3bce016.png)

実行後、実際のWeb上でAboutを選択すると**Azure Tbale Storage**になっている
![１０.png](https://qiita-image-store.s3.amazonaws.com/0/130097/3dbe940f-b51e-2903-be11-b95232d9bc24.png)
Ruby で map するときに気をつけていること


Ruby で map を用いて配列から新しい配列を作る場合、以下のように配列の中身に気をつける必要があります。

```rb:sample1.rb
original = [
  {key: "foo"},
  {key: "bar"}
]
mapped = original.map do |obj|
  obj[:hoge] = "fuga"
  obj
end
original == mapped # => true
original # => [{:key=>"foo", :hoge=>"fuga"}, {:key=>"bar", :hoge=>"fuga"}]
```

配列内のハッシュに `hoge: "fuga"` を追加した新しい配列を map で生成するコードですが、`original` も書き換わってしまいます。

# ハッシュの配列を map する場合

`original` を書き換えないために `dup` を使います。

```rb:sample2.rb
original = [
  {key: "foo"},
  {key: "bar"}
]
mapped = original.map do |original_obj|
  obj = original_obj.dup
  obj[:hoge] = "fuga"
  obj
end
original == mapped # => false
original # => [{:key=>"foo"}, {:key=>"bar"}]
```

## 何故 `map` しているのに `original` が書き換わるのか

`original[0]` には ハッシュオブジェクト `{key: "foo"}` が格納されているのではなく、ハッシュオブジェクト `{key: "foo"}` の **参照** が格納されています。

sample1.rb の場合 map のブロック変数 `obj` には、配列の各要素であるハッシュの **参照が渡される** ため、`obj` に対し代入等の操作を行うと、`original` の各要素が参照しているハッシュオブジェクトが変更されます。

また、map の返り値は `obj` となっているため **`mapped` の各要素は `original` の各要素と同じハッシュオブジェクトの参照を格納している** 事になります。

Ruby は値渡しですが、変数が参照を保持している場合は **参照の値渡し** となることに注意が必要です。

詳しくは、[Rubyist Magazine - 値渡しと参照渡しの違いを理解する](http://magazine.rubyist.net/?0032-CallByValueAndCallByReference)を参照してください。

## ちなみに `original.dup.map` の場合

以下のように `original` が書き換わってしまいます。

```rb:sample3.rb
original = [
  {key: "foo"},
  {key: "bar"}
]
mapped = original.dup.map do |obj|
  obj[:hoge] = "fuga"
  obj
end
original == mapped # => true
original # => [{:key=>"foo", :hoge=>"fuga"}, {:key=>"bar", :hoge=>"fuga"}]
```

dup は浅い複製 (shallow copy)のため、`original.dup` を行っても、配列内の各要素がハッシュオブジェクトの参照のままであるため、`original` が書き換わってしまいます。

以下のように pry を使って `object_id` を確認すると、`original` と `cloned` の `object_id` は異なりますが、配列の第1要素は同じオブジェクトを指していることが分かります。

```rb:pry
[1] pry(main)> original = [{key: "foo"}, {key: "bar"}]
=> [{:key=>"foo"}, {:key=>"bar"}]
[2] pry(main)> cloned = original.dup
=> [{:key=>"foo"}, {:key=>"bar"}]
[3] pry(main)> original.object_id
=> 70201156677940
[4] pry(main)> cloned.object_id
=> 70201161775220
[5] pry(main)> original[0].object_id
=> 70201156678620
[6] pry(main)> cloned[0].object_id
=> 70201156678620
[7] pry(main)>
```
今の話を聞いて思ったんですけど。

## コミュニケーションにおけるtips
エンジニアやっていてコミュニケーション取る時に、
タイトルの様なワードを意識して出すようになってから以下のような変化があって良かった。

- 話の流れと、自分の意見を上手くコントロールして、言いたいことを伝える事ができるようになった。

## なぜそうなったのか（自己分析）

### 前提条件
- 何かの議論をしている時を想定、AとB案があるとする。

### 問題
- 自分の意見がブレている様に相手に捉えられてしまう。

議論をしている時に事前情報などから、自分の立ち位置がだいたい決まっていると思う。たとえばA案だとする。
Aがいいと自分の意見を熱く語ってしまったとする。
他の意見を聞いてくるうちにB案がやっぱいいのかな、とか、いやいやC案を新しく思いつく。
でも、先程A案について熱く語ってしまったゆえに、言い出しづらい場面がある。
（少なくても自分はあるし、他の人を観察していても自分はそう思う。）
そこでおちいりがちなのが、自分の体裁を守るためA案に固執してしまったり、よりよいB、C案を提案しずらくなる。

### 解決策
そこで、タイトルのワードである、新しいコンテキストをかみした上で、
`こういうコンテキストではB案の方がいいし、弊社の状況を考えるとこういうコンテキストもある、だから改善してC案がいいのでは!`
という当たり前の事が、自分の考えがブレているんではなくて、柔軟に意見を取り入れて答えをだしているという
風に伝わってコミュニケーションしやすくなった気がする。
ちなみに、A案とB案が180度方向性が違う時にすごく効果が発揮する気がする。

気のせいかもしれないが、自分が使い始めて周りの人も使いだしたような気もする。
AppleScriptで自動でネットワークディレクトリに接続する

##起動時に自動接続するだけではなく、接続が切れた場合にもすぐ接続を再開したい
- 現在接続されているディレクトリ名を取得し、その中に希望の名前がなかったら接続実行する

```vbnet
on idle
	tell application "System Events"
		set diskNames to name of every disk
		if diskNames contains "ディレクトリ名" then
			--display dialog "もうつながってます"
		else
			try
				mount volume "smb://IPアドレス/ディレクトリ名/" as user name "ログインID名" with password "パスワード"
			end try
		end if
		return 10
	end tell
end idle

```

##上記スクリプトをアプリケーションとして保存
- 「ファイルフォーマット」を「アプリケーション」として保存する際、「ハンドラの実行後に終了しない」にチェックを入れて保存してください。

##起動時に必ず実行する設定
 - システム環境設定の「User & Groups」で現在のユーザの「ログイン項目」に保存したアプリファイルを登録しておきます。

##注意点
 - 接続先が完全にフリーズしている場合や、電源が落ちている場合などは、上記スクリプトがタイムアウトしてエラーダイアログを表示します。それが表示されている間は、他の自動処理のスクリプトが実行できなくなりますので、ご注意ください。
Sublime TextでTexするときに'This file needs format 'pLatex2e'エラーが出る原因とその対策

(2016/11/15 修正: 原因および恒久的な解決方法を加筆・修正)

環境はSublime Text2(2.0.2, build 2221), MacOS Sierra 10.12.1, LaTeXTools 3.12.7

traditionalBuilder.pyが定期的にバグるので、そのたびに修正しています。

修正の仕方は以下の記事が詳しいです。
[This file needs format 'pLatex2e'のエラー](http://qiita.com/gash717/items/f9417fd50385e0350366)

以前、SublimeでTexの作業をしている際、
ファイルに変更を加えていないのにもかかわらず、いきなりこのエラーが出たことがありました。
そして、よく観察してみると、Package Control Messagesのタブが……！！

どうやら、~~Package Controlがアップデートされるたび~~ **LaTeXToolsがアップデートされるたび**にtraditionalBuilder.pyが書き換わるようです。

そうすると、アップデートの際、traditionalBuilder.pyが書き換えられないようにしたいのですが、まだ未解決です。

解決方法を知っている方がいらっしゃいましたら、ご教示下さい……

#2016/11/15 追記
原因はPackage Controlのアップデートではなく、Package Control によって管理されているパッケージLaTeXToolsのアップデートでした。
LaTeXToolsがアップデートされるたびに、traditionalBuilder.pyが書き換わるという仕様は変えられないみたいなので、ユーザー設定を変えましょう。

Sublime Text2 -> Package Settings -> LaTeXTools -> Settings – User

388行目付近にある、builder_settingsの中に以下の記述を追加:

```
"command":["latexmk", "-cd",
    "-e", "$latex = 'platex -synctex=1 -src-specials -interaction=nonstopmode'",
    "-e", "$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B'",
    "-e", "$bibtex = 'pbibtex %O %B'",
    "-e", "$makeindex = 'makeindex %O -o %D %S'",
    "-e", "$dvipdf = 'dvipdfmx %O -o %D %S'",
    "-e", "$pdf_mode = '3'",
    "-e", "$pdf_update_method = '0'",
    "-e", "$pdf_previewer = 'open -a preview.app'",
    "-f", "-norc", "-gg", "-pdfdvi"],
```

これにより、traditionalBuilder.pyのデフォルト設定より、こちらの設定が優先されるので、問題は解決する（はず）。

今のところ、再発は確認していません。
Wockerでvagrant box addするときにエラーが出て、はまったこと　

## 問題
vagrant box addできない。

```
The box 'scotch/box' could not be found or
could not be accessed in the remote catalog. If this is a private
box on HashiCorp's Atlas, please verify you're logged in via
`vagrant login`. Also, please double-check the name. The expanded
URL and error message are shown below:

URL: ["https://atlas.hashicorp.com/scotch/box"] 
```

というエラーが出てしまう。

## 環境
OS : macOS Sierra 10.12.1
vagrant : 1.8.7

## 解決策

Vagrant の cURL を削除すると、addできるようになった。

```
sudo rm /opt/vagrant/embedded/bin/curl
```

(参考)↓
http://stackoverflow.com/questions/40473943/vagrant-box-could-not-be-found-or-could-not-be-accessed-in-the-remote-catalog
Python3 > inキーワード > 部分一致でTrue?

http://docs.python.jp/3/tutorial/controlflow.html#default-argument-values
を読んでいて、inキーワードを使用したコードが気になった。

以下のコードを試した。

http://ideone.com/kOEGWg

```py
inp = 'ten'

if inp in 'tensor':
	print('include1')
	
if inp in 'ten':
	print('include2')

if inp in 'te':
	print('include3')
```

```txt:結果
Success	time: 0.01 memory: 9992 signal:0
include1
include2
```

部分一致時にTrueになるようだ。

関連 http://www.pythonweb.jp/tutorial/list/index10.html

しかしながら、部分一致でTrueとなるとすれば、以下の`if ok in ('y', 'ye', 'yes'):`は`if ok in 'yes':`で済むような気がする。ideoneで確認した。

```
def ask_ok(prompt, retries=4, reminder='Please try again!'):
    while True:
        ok = input(prompt)
        if ok in ('y', 'ye', 'yes'):
            return True
        if ok in ('n', 'no', 'nop', 'nope'):
            return False
        retries = retries - 1
        if retries < 0:
            raise ValueError('invalid user response')
        print(reminder)
```
VisualStudioCodeでPython実行した時にハマったメモ


# 環境
1. MacでPython3系、virtualenvを使ってライブラリを切り替えてる
2. VisualStudio側の設定

	拡張機能： Python
	workspace設定：

```javascript:setting.json
	"python.pythonPath"="~/.virtualenvs/[virtualenv名]/bin/python"
```

# 問題発生・・・

macのターミナルで実行する分には全く問題はないが、VisualStudio側の `Run Python File in Terminal` で実行した場合は日本語のコメントやらなんやらが入るとUnicodeEncodeError・・・
もちろんMacでのターミナルでは実行できているのでVisualStudioのPython実行ターミナル側の問題というのはわかった。

# 解決？

とりあえず、

```python:hogehoge.py
import sys
print(sys.stdout.encoding)
```

を実行したところ、Mac側ターミナルでは「utf-8」、VisualStudioでは「US-ASCII」が表示。なんじゃそりゃ。

なので、標準出力のエンコーディング変更を先ほどエラーになってたファイルに追加してみたら、ちゃんと実行可能。

とはいえ、毎回記入するのは面倒なので、sitecustomize.pyファイルを作成することに。どうせvirtualenvだし、いらなくなったら消せば良いよねー、というわけで以下のファイルを作成、virtualenvで指定しているsite-packages配下に配置。

```python:sitecustomize.py
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
```

無事、ターミナル上だけでなく、VisualStudioCodeのターミナルでも日本語が使えるようになりましたとさ。

Python実行の拡張機能で設定している部分での設定で本来はいじる部分だとは思うので、見つけたら更新します。（力つきるかもしれませんが。）
Android Studio でビルドされたクラスのメソッドのシグネチャを確認する

## 概要

`javap -s` を使う

クラスファイルは `app/build/intermediates/classes/debug/パッケージ/クラス名.class` に入っている

```bash
javap -s /path/to/HogefugaApp/app/build/intermediates/classes/debug/com/covelline/hogefugaapp/FooManager.class
```

## 背景

JNI で C++ から Java のメソッドを叩く時に、メソッドシグネチャが欲しい

Java のクラスがこういうふうになっている場合について

```java
package com.covelline.hogefugaapp;

import android.content.Context;

public class FooManager {
    private Context context;

    FooManager(Context context) {
        this.context = context;
    }

    public void removeAll() {
        // ...
    }

    public void load(int index, String name) {
        // ...
    }

    public void restart(int index) {
        // ...
    }

    public boolean isAvailable(int index) {
        // ...
    }

    public byte[] getImage(int id) {
        // ...
    }
}
```

## 結果

javap -s の出力はこうなる

欲しかった `byte[] getFrame(int id)` のシグネチャは `(I)[B` だとわかった

```bash
Compiled from "FooManager.java"
public class com.covelline.hogefugaapp.FooManager {
  com.covelline.hogefugaapp.FooManager(android.content.Context);
    descriptor: (Landroid/content/Context;)V

  public void removeAll();
    descriptor: ()V

  public void load(int, java.lang.String);
    descriptor: (ILjava/lang/String;)V

  public void restart(int);
    descriptor: (I)V

  public boolean isAvailable(int);
    descriptor: (I)Z

  public byte[] getFrame(int);
    descriptor: (I)[B
}
```
iTerm2のshell integrationを無効にする方法

参照：https://groups.google.com/forum/#!msg/iterm2-discuss/GbXOOaJDhvk/-mmgUwarAAAJ

Look in your ~/.profile, ~/.bash_profile, ~/.login, ~/.zshrc, or ~/.config/fish/config.fish (which file it's in depends on what shell you use) for a line like this:

```
test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash"
```
And remove it.
「信頼済みサイト」に何が登録されているか

## はじめに

IE の話です。

「信頼済みサイト」は画面から確認できますが、グレーアウトしていることがあります。システム部門に管理された PC だと個々に設定が変えられないようになっているためです。いくつかはグレーアウトしていても確認できますが、たくさんのサイトが登録されているとスクロールもできないため確認できません。

## 確認方法

ネットで検索すると以下のレジストリキー配下に保存されていることが分かります。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1050818830
http://www.atmarkit.co.jp/fwin2k/win2ktips/278iezonebu/iezonebu.html

```
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap
```

しかし管理された PC の設定はここではなく、以下のレジストリキー配下です。

```
HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap
```

ここを見ます。
[WinMerge] 片方にしかないフォルダの除外

WinMerge のファイルフィルタでフォルダ除外の設定は以下のように記述します。

```
d: \\Test$
```

しかし上記のように書いても効かない場合があります。フォルダ内のファイルは比較されませんが、フォルダ自体は、その「有無」により「差異がある」とされるのです。

その場合、「編集」メニューの「設定...」でオプション画面を表示し、カテゴリ「比較 > フォルダ」の「片方にしか存在しないサブフォルダ内も含める」にチェックを入れ、「OK」をクリックします。
Google App Engine datastoreのEntityを一括で消したいとき（Win ローカルホスト環境、プロダクション環境）

# Winローカルホスト環境（goapp serve時）

テンポラリディレクトリの`datastore.db`ファイルを削除する。
`"C:\tmp\appengine.{{project}}\datastore.db"`

# プロダクション環境

1. データストア＞管理
2. （有効になっていない場合は有効化）
3. データストア管理を開く
 - ![image](https://qiita-image-store.s3.amazonaws.com/0/2883/091e0b90-9955-155f-eac3-82ff4d52e0ea.png)
4. 削除したいEntityを選択して、削除する
 - ![image](https://qiita-image-store.s3.amazonaws.com/0/2883/3cad7c05-20f7-27c6-0352-c0286a532bdb.png)


# プログラムでも消せないことはない…が

```go:プログラムでがんばって消すサンプル
ctx := appengine.NewContext(r)
var users []*User
q := datastore.NewQuery("User")
keys, err := q.GetAll(ctx, &users)
datastore.DeleteMulti(keys)
```

消せないことはないんですが、タイムアウトとか、取得上限制限とかあるからアレ（GetAllでつまづく）。

ちなみに、ローカルホストでdatastoreの挙動があやしいときは、tmpのそれっぽいフォルダーを消すと快調になったりもします。
Maya | オイラー角、クォータニオン変換

```py
import math
import maya.OpenMaya as om

# x,y,z
rot = [90, 90, 90]

# オイラー角を作成
euler = om.MEulerRotation(math.radians(rot[0]), math.radians(rot[1]), math.radians(rot[2]), om.MEulerRotation.kXYZ)

# オイラー角をクォータニオンに変換する
quat = euler.asQuaternion()
print quat.x, quat.y, quat.z, quat.w

# クォータニオンをオイラー角に変換する
euler = quat.asEulerRotation()
print math.degrees(euler.x), math.degrees(euler.y), math.degrees(euler.z)
```
技術英語 > Battle station 

@ Star Trek Voyager > どこかのエピソード

> Battle station

http://eow.alc.co.jp/search?q=battle%20station
> 1.《陸軍・海軍》戦闘配置

「戦闘配置（につけ）」とJaneway艦長が使っていたりする。

## 最近の7of9のBattle station

1. 起床 > Battle station
   - 席についてTensorFlow関連のコーディング学習を始める
   - 仕事に出るための身支度開始時刻まで
2. 昼 > Battle station
   - 昼ごはん後に機械学習の本を読み始める
   - 眠いときはもちろん寝る
3. 帰宅後 > Battle station
   - Youtubeの良さげなTutorialを見始める

数年前には以下もあった。最近してない。

4. 喫茶店 > Battle station
   - 喫茶店に入ってから技術書/英語教材/数式展開/その時々の仕事資料を読みふける
   - 毎日1.5時間以上

## 著名人のBattle station

### スティーブンキングさん

@ 偉人達のブレイクスルー勉強術 by 斎藤孝さん

> スティーブン・キングは、目標を定めたら、達成するまで書斎のドアは開けないと自身に誓って、あとはひたすら言葉を並べていくのだそうです。

...

> スティーブン・キング「言うなれば、これは創造的睡眠の話だと思う。寝室と同じで、書斎は一人ボッチで夢を見る場所である。毎日ほぼ同じ時間に書斎に入り、千語書いてデスクを離れることを繰り返すのは、習慣を身につけて夢を見る体勢をととのえるためである。

### 中島聡さん

https://codeiq.jp/magazine/2014/01/5330/

> 僕の場合は早朝が一番充実している。毎朝4時に起き、妻が起きてくる6時半までの2時間半が最も集中できる。その間はトイレも行かず、メールも読まず、一心不乱。

### 伊達政宗さん

@ 少しだけ無理をして生きる by 城山三郎さん

> 質素ですし、朝は早く起きます。...「閑所（かんじょ）」と称する、たった二畳の部屋に入る。そこには三段の棚があって、本や筆が置いてあるだけの部屋。そこで本を読み、歌を作る。時には２時間くらい、一人でそんな時間を過ごしていた。...１日の終わりにはまた閑所へ戻って、ふたたび物を書いたり考えことをしたりする。

### フィリップ・スタルクさん

@ [Wired記事]( http://wired.jp/2012/01/08/%E3%83%95%E3%82%A3%E3%83%AA%E3%83%83%E3%83%97%E3%83%BB%E3%82%B9%E3%82%BF%E3%83%AB%E3%82%AF%E3%81%8C%E8%AA%9E%E3%82%8B%E5%89%B5%E9%80%A0%E6%80%A7_%E3%81%8A%E9%87%91_%E3%82%BB%E3%83%83%E3%82%AF%E3%82%B9/)

> また、世の中の主流の考え方から意識的に離れて生きる必要もある。毎晩、外食やカクテルパーティに出かけて誰かと話しても、結局は誰かの言うことを繰り返すようになるだけで、何かを創造することはできない。人と話ばかりしていると、とても居心地が良くなりはするが、同時に独創性も失われていく。創造的になる唯一の方法は独りで居ることだ。誰もいない場所で、まっさらな紙やコンピューターと向き合うこと。それが、自分独自のアイディアと直感を見つけるために最適な方法だ。


### Grady Boochさん

@ ソフトウェアの世界でキャリアを築く by Sam Lightstoneさん

> 私は自分の家にある仕事場とは別の場所にもオフィスを１つ借りています。週に2,3日そこで仕事をすることで、インターネットから完全に自分を隔離して、Handbook of Softawre Architectureに関する仕事を集中してこなせます。

### John Carmackさん

@ https://blog.codinghorror.com/you-dont-need-millions-of-dollars/

> His devotion to the machine borders on fanatical; he regularly worked 80 hour weeks and he'd take "vacations" where it was just him and a computer alone in a hotel room for a whole week – just for fun, to relax. 

(補足) 働きすぎはだめかと思う。しかしながら自分を集中できる環境に置くことは良いと思う。

### 西谷昇二さん

@ 壁を越える技術 by 西谷昇二さん

> 予備校もない田舎の高校生である私が最初に自分に課したのは、とにかく毎日図書館に行くことだった。

> ９時の開館前から入り口に並び、自分のお気に入りの席をとる。それから図書館が閉まる６時までひたすら勉強に集中する。


### 松居吉哉さん(ミノルタ?)

@ めざすはライカ by 神尾健三さん

> そこで松居は毎週土曜日の夕方になると、会社から機械式のタイガー計算機を借りて帰る。風呂敷に包み、２時間近く電車に乗って自宅に帰るのだ。日曜日、家でコツコツ計算して、レンズ設計の実技を独学で始めたのである。

### 立石一真さん

@「できません」と云うな - オムロン創業者 立石一真 - by 湯谷昇羊さん

> 一真は、宴席から帰った後も、日刊紙から業界紙まで、６，７紙に目を通し、能率や経営の本を読み、夜遅くまで書き物をした。睡眠時間は５，６時間だった。

### What is your battle station?
[Python]pserveではダメな理由

新しいWebサービスサーバを立てることになったが、そのためのサーバをどうするか、決める必要があった。
自分でベンチマークをとったわけではなく、ネット上の情報を集めただけだが、その時に調べたことを備忘録的にメモしておく。


#前提
- そのサービスはPython(Pyramid)で作られている
- 開発中はpyramid導入時に自動で使えるようになる「pserve」コマンドを使ってサービスを起動していた(pyramidのチュートリアルにこれ使えと書かれていた)

#疑問点
- 公開後もこの「pserve」コマンドを使ってサービスを提供しても、本当にいいの？
- それ以外の手段を考慮し、もっといいものがあればそれを使うべきでは？

#個人的結論
- pserveではなくnginx+gunicornを使おう

#理由
- pserveは画像などの静的コンテンツの提供とクエリの結果などの動的コンテンツの提供、両方を担っている
- 静的コンテンツの提供と動的コンテンツの提供は別サーバが行った方がいい(いわゆるリバース
プロキシ)
    
1. [nginxの動的コンテンツに対して](http://q.hatena.ne.jp/1453869503)
2. [WebサーバーとAPサーバの分離について](http://ja.stackoverflow.com/questions/18417/web%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A8ap%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E5%88%86%E9%9B%A2%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/18449#18449)

##なぜnginxなのか
- 同時リクエストを多く処理することに特化しており、シンプルで早い
    - [Nginxとは？Apacheとの違いについてエンジニアに聞いてみた](https://academy.gmocloud.com/qa/20160616/2761)

##なぜgunicornなのか
- そこそこ早く、Pyramidとの親和性も高く運用しやすい　
    - [PyramidをGunicornで動かした](http://inoshiro.hatenablog.com/entry/20111024/1319467079)
    - [vs fastcgi](https://www.ianlewis.org/jp/django-gunicorn-fastcgi)
    - [vs uwsagi](https://speakerdeck.com/bungoume/uwsgi-docker-pycon2015?slide=27)
SoundVisualiserのエラー解決

<img width="917" alt="スクリーンショット 2016-11-12 12.24.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/118756/687ce97a-ec1b-0016-95ca-11e9d1f9b6a6.png">




http://yoppa.org/ma2_10/2032.html


動的配列を利用したオブジェクトの管理

では次にオブジェクトを動的に大量に生成して、配列に格納して使用してみようと思います。動的に生成や消去されるオブジェクトを配列で管理するには、配列も動的に使用できる必要があります。

このサンプルでは、「vector (動的配列)」という新たな概念が導入されています。

たくさんの要素を一度に扱う際には、今までは配列(Array)を使用してきました。例えば、100個のMyCircleのインスタンスを扱いたいのであれば、今までのやり型ですと配列(Array)を使用して次のように定義していたでしょう。

1
MyCircle circles[100];
今回のサンプルでは、ユーザがクリックした回数だけ制限なくMyCircleを複製していきたいと考えています。ところが、配列はまず生成する際に確保する要素の数を指定しなければなりません。先程の配列の例では、100個以上はオブジェクトを格納できません。これを避けるために、例えば、最初から大量の数を確保する(たとえば10000個の領域を確保する)というのも一つの方法です。しかし、確保した10000という数字には根拠がなく、さらにメモリを無駄に消費してしまうという問題もあり、あまり賢い方法ではありません。

そこで、「vector (動的配列)」というものを使用します。vectorは通常の配列と違って、最初に要素数を宣言する必要がありません。要素数は必要な際に後から追加していくことが可能となっています。vectorを使うことで今回のケースのように要素の数があらかじめわからないような場合でも効率良くプログラムすることが可能です。

vectorの宣言は、下記のような書式になっています。

1
vector  《vector名》;
MyCircleのポインタ型を、動的配列(vector)であるcirclesに格納するには、下記のような書式になります。

1
vector  circles;
動的配列であるcirclesは、通常の配列と同じように使用することが可能です。例えば、特定の要素の内容を参照したければ、下記のように通常の配列と同じ書式で値を取りだすことができます。下記の例では、circles配列の5番目の要素のプロパティradiusを参照しています。circles配列はポインタ型なので、プロパティを取りだすにはアロー演算子「-&gt;」を使用しているところに注意してください。

1
radius = circles[4]-&gt;radius;
通常の配列としての機能の他、vectorには様々な関数が用意されています。

at() 指定した位置の要素を返す
back() 最終要素を返す
front() 先頭要素を返す
clear() 全ての要素を削除する
front() 先頭要素を返す
insert() 要素をベクタに挿入する
pop_back() 最終要素を削除する
push_back() ベクタの末尾に要素を追加する
size() ベクタ中の要素数を返す
例えば、動的配列のcirclesの最後の要素に新規にCircleクラスのオブジェクトを追加するには、以下のように指定します。



http://boysenberrypi.hatenadiary.jp/entry/2014/01/27/211542


openFrameworksのmain関数では主に2つの処理を行う。
ofSetupOpenGL：アプリケーションのウィンドウ生成
ofRunApp：描画を行う無限ループの開始
ofSetupOpenGLではウィンドウサイズを設定し，ウィンドウの生成を行う。
ofRunAppは引数としてofBaseAppのポインタを渡して，描画アプリケーションを起動する。基本的にはofBaseAppを継承しているtestAppクラスのインスタンスを引数として渡す。
testAppクラスにはdraw()やupdate()など，アプリケーションの根幹となるようなメソッドを含んでいる。そのため，openFrameworksのアプリケーション作成においてはtestAppクラスのコーディングがアプリケーション作成のメインとなる。




http://nonbiri-tereka.hatenablog.com/entry/2014/07/23/101047

まず、皆さんの知りたいことはなんでしょうか？
このよくわからない（と思われる）文章の意味であることが多いと思います。
「error: no matching function for call to 意味」や実際に動いていないので「error: no matching function for call to 動かない」
また、google の関連キーワードを見てみましょう



http://marupeke296.com/CPP_HederFileALaCarte.html

　「重複定義」となるもう1つのルートがあります。それは「同じヘッダーファイルを2つ以上の別のファイルがインクルードする」というものです。このやっかいなところは、それぞれのファイルにしてみたら、重複先のヘッダーファイルを呼んでいるだけに過ぎないという点にあります。


では、また🖐
![ga_08.jpeg](https://qiita-image-store.s3.amazonaws.com/0/118756/328556a4-ac8c-6737-e832-62d305d80009.jpeg)
Emacsで、VimのCtrl-oみたいにマークをたどる

Vimは、`C-o`を連打することで、直前に編集していた箇所に戻れるという素晴らしい機能がある。

Emacsでは`C-x C-x`で直前のマークに戻れるが、更に前に付けたマークに戻るにはどうすればよいか分からなかった。

が、ちゃんとWikiを読んだら書いてあった。

https://www.gnu.org/software/emacs/manual/html_node/emacs/Mark-Ring.html

`C-u C-SPC` でOK。

Emacsには標準でマークリングという機能があり、マークの位置は最大16個まで記憶される。

Vimと違い、バッファ間の移動をしない仕様になっているが、自分にはこちらの方が合っている。

これで、安心してバッファ内を走り回れるようになった。
MySQLから1対多のデータを結合した状態で一発取得する

##MySQLから1対多のデータを結合した状態で一発取得する

- まずMySQLにテーブルを用意する

**テーブル1　tb_category**

| cat_id | category_name |
|:-:|:-:|
| 101  | 人間  |
| 102  | 超人  |

**テーブル2　tb_entry_name**

| cat_id | entry_name |
|:-:|:-:|
| 101  | 千代の富士  |
| 101  | 王貞治  |
| 101  |   |
| 101  | 霊長類最強女子  |
| 102  | バッファローマン  |
| 102  | キン肉マン  |
| 102  | ウォーズマン  |


##cat_idで紐づくentry_nameをすべて読点でつながった状態で取得したい
- ほしい結果は以下の表の様になります。

| category_name | entry_name |
|:-:|:-:|
| 人間  | 千代の富士、王貞治、霊長類最強女子  |
| 超人  | バッファローマン、キン肉マン、ウォーズマン  |

##そのSQLはこちら
```vbnet
select a.category_name,
 group_concat(distinct b.entry_name, order by b.cat_id separator '、')
 from tb_category as a inner join 
 tb_entry_name as b
 on a.cat_id = b.cat_id
 WHERE b.entry_name != ''
 group by b.cat_id
 order by a.cat_id;
```

##ポイント
- `WHERE b.entry_name != ''` ←この文がないと、nullの行まで連結しちゃいます。（千代の富士、王貞治、、霊長類最強女子）
- `group by b.cat_id` ←これを入れないとcat_idごとのグループでわかれてくれませんので、ご注意ください。

##固定の文字を追加する場合（例えば、カッコをつけたい場合）
```vbnet
select a.cat_id,
 group_concat(distinct b.entry_name,'(',a.category_name,')' order by b.cat_id separator '、')
 from tb_category as a inner join 
 tb_entry_name as b
 on a.cat_id = b.cat_id
 WHERE b.entry_name != ''
 group by b.cat_id
 order by a.cat_id;
```

- 結果はこちら

| cat_id | entry_name |
|:-:|:-:|
| 101  | 千代の富士(人間)、王貞治(人間)、霊長類最強女子(人間)  |
| 102  | バッファローマン(超人)、キン肉マン(超人)、ウォーズマン(超人)  |

※ウォーズマンはロボットで、超人じゃないかもしれないです
VBSでFor文を使って細胞分裂の計算プログラムを作りました

以下、スクリプトです。
メモ帳などにコピーし、拡張子を.vbsで保存すると実行いただけます。
***

```vbnet
'==========================================
'変数定義
'==========================================
Dim intNumber,nissuu,kaisuu,I,Title

'==========================================
'変数初期値
'==========================================
intNumber=1
Title="細胞分裂計算プログラム"

MsgBox "細胞の数を調べます。",,Title
MsgBox "ひとつの細胞から始まり、1日目は1回分裂、2日目はさらに2回分裂という風に増えてゆきます。",,Title
nissuu=InputBox("何日目の細胞の数が知りたいですか？",Title)
kaisuu=0

'==========================================
'計算
'==========================================
For I=1 To nissuu Step 1
    kaisuu=kaisuu+I
Next

For I=1 To kaisuu Step 1
    intNumber=intNumber*2
Next
MsgBox nissuu & "日目の細胞の数は、" & intNumber & "個です。",,Title
```
***
PerlスクリプトのExe化のために（インストール編）

# はじめに
>「PerlスクリプトをExe化して（実行に必要なライブラリをまとめてくれる）、Active PerlがないWindows環境下でも実行できる様にしてくれるPerlパッケージャ（pp）に関するエントリ。Perlを扱うエントリ関連で時折見かける定番めいたもの。」

上記の情報が若干古くなっていたので備忘録として投稿しました。
引用元：[PerlスクリプトのExe化（Active Perl 5.16.3）](http://seizo-igawa.hatenablog.jp/entry/2014/09/17/215245)

# PerlスクリプトのExe化のために必要なモジュール
* [Getopt-ArgvFile](http://search.cpan.org/dist/Getopt-ArgvFile/ArgvFile.pm)
* [Module-ScanDeps 1.22](http://search.cpan.org/~rschupp/Module-ScanDeps-1.22/lib/Module/ScanDeps.pm)
* [Par-1.011](http://search.cpan.org/~rschupp/PAR-1.011/lib/PAR.pm)
* [Par-Dist-0.49](http://search.cpan.org/~rschupp/PAR-Dist-0.49/lib/PAR/Dist.pm)
* [Win32-ShellQuote-0.002002](http://search.cpan.org/~haarg/Win32-ShellQuote-0.002002/lib/Win32/ShellQuote.pm)
* [Win32-Exe-0.17](http://search.cpan.org/~mdootson/Win32-Exe-0.17/lib/Win32/Exe.pm)
* [PAR-Packer-1.035](http://search.cpan.org/~rschupp/PAR-Packer-1.035/lib/PAR/Packer.pm)
<br>----上記まで引用元から参照、下記も導入していない方は必要----</br>
* [ExtUtils-MakeMaker-7.25](http://search.cpan.org/~bingos/ExtUtils-MakeMaker-7.24/lib/ExtUtils/MakeMaker.pm)
* [Capture-Tiny-0.44](http://search.cpan.org/~dagolden/Capture-Tiny-0.44/lib/Capture/Tiny.pm)
* [Win32-0.52](http://search.cpan.org/~jdb/Win32-0.52/Win32.pm)

# ダウンロード
ダウンロードするときは、各ページに入って右側のDownloadをクリック！
![pic1.png](https://qiita-image-store.s3.amazonaws.com/0/89402/d4e52e9a-b0f5-da06-3255-a2204cf3076a.png)

※著者の場合は、企業PCのためプロキシサーバを経由することになっているため、手動でモジュールをダウンロードしています(*´Д｀)=3

# インストール
以下を参照してください
参照：[Strawberry Perl+Proxy接続環境でCPANモジュールをインストールする](http://www.koikikukan.com/archives/2014/01/17-005555.php)
JavaScript CSV -> ObjectArray

# CSV(文字列)をObject配列に変換します

## 前提
個人的にライブラリに頼れるなら頼ったほうが良い派です。
勉強のためにとかライブラリ使えないだとかそういった感覚で読んでいただけると :bow: 
2016年に書いたソース&記事みたいなので、リファクタ&リライト？してみました。

```sh
$ node -v
master
v14.15.0
$ npm -v
7.16.0
```

## なんで変換したいの？？

csv形式になっているのを読み込む時に
こんなんするの嫌だったからcsv->Objectの配列に変換するやーつ作りましたー。
多少の入れ子は耐えれるように作ったはず...はず.

```js
var columns = line.split(",")
var id = columns[0]
console.log(id)
```


## ソースコード

### 実行部分

```js:index.js
import fs from 'fs'
import CsvUtils from './csvUtils.js'

const fileName = process.argv[2]
const fileBody = fs.readFileSync(`./data/${fileName}`, 'utf-8')
console.log('fileBody', fileBody)

const csv = new CsvUtils(fileBody)
const usres = csv.toObjectList()
console.log('usres:', JSON.stringify(usres, null, 2))
```

### 内部処理
```js:csvUtils.js
// ソースコード公開しているので気になったら読んでください...決して面倒になったわけではないです...決して
```

## 使い方
```js
$ npm run test:example

fileBody id,name,profile.birth.year,profile.birth.day,profile.blood,profile.address,hoge.fuga.hoge.fuga
1,ito,1990,06-06,O,Minato-Ku Tokyo,aaa
2,saito,1991,06-06,O,Minato-Ku Tokyo,aaa
3,naito,1991,06-06,O,Minato-Ku Tokyo,bbb

usres: [
  {
    "id": "1",
    "name": "ito",
    "profile": {
      "birth": {
        "year": "1990",
        "day": "06-06"
      },
      "blood": "O",
      "address": "Minato-Ku Tokyo"
    },
    "hoge": {
      "fuga": {
        "hoge": {
          "fuga": "aaa"
        }
      }
    }
  },
  ...
}]
```
以上。

## GitHub
公開しました。
https://github.com/atsushi-ito-110/csv-utils-js

## 余談ですが
記事を書いた当時PHPをメインに触っていて、objectのことを連想配列と呼んでいてJSぽくない表現になってなんとも言えない気分になったことと、虎ノ門に勤めてたからテストデータが港区になってたことと、PHPでビルトインサーバ立ち上げてHTML+JSだったのもなんだか成長を感じられたというかなんというか
【テクニカルトピック】11月02日号

■サーバ監視・性能測定ツールまとめ
http://qiita.com/tunepolo/items/25b7a33d473a6a37cde7
公開しているサービスのサーバ性能を常に監視する必要があります。
この記事はサーバ監視・性能測定ツールの強みよ弱みを紹介してくれます。
そのため、監視ツールを選ぶ時に参考になると思います

■Building for Production: Web Applications
https://www.digitalocean.com/community/tutorial_series/building-for-production-web-applications
この記事はウェブアプリのための本番サーバの構築方法を丁寧に教えてくれる。サーバ構築、ロードバランサー、バックアップ、監視、ログ管理などのマニュアルが記載される。

■LEGOブロック互換のIoTデバイス自作キット「MODI」--“モノのロボット化”を手軽に
http://japan.cnet.com/news/service/35091269/
「MODI」という手軽にIoTデバイスを自作できるブロック型キットの紹介ページです。
LEGOと互換性があるというのが面白いです。

■Twitter、6秒動画のVineを終了へ
http://www.itmedia.co.jp/news/articles/1610/28/news056.html
Vineのサービスを終了するという記事です。
アップロードした動画をのこしておきたい場合はサービス終了までにダウンロードしておく必要があります。

■「WebAssembly」がITの未来に変革もたらす
https://blog.techstars.jp/webassembly-4521/
WebAssemblyは、これまでのようにWebブラウザ上で動的なWebアプリ動作を実現するために必要だったJavaScriptを不要にします。
まだまだ先のようですが、全ての言語で実現するとすごいですね。
leJOSへのJava8導入

# はじめに
このページはLEGO MINDSTORM EV3にleJOSをインストールし、
Java SE1.7しか使えなくて困っている人向けの記事です。

下記のページによると、Java8に対応したとのことですが、こちらで確認したところ
ラムダ式等のJava8の文法は使うことができず、対応したといっていいのが疑問が生じます。
http://www.afrel.co.jp/archives/16542

下記ページを参考に、ラムダ式が使える、本当のJava8対応を目指します。
http://www.lejos.org/forum/viewtopic.php?t=6435

# ダウンロードするもの
- [JDK1.8 for ev3](http://www.oracle.com/technetwork/java/embedded/downloads/javase/javaseemeddedev3-1982511.html)
- tar.gzが解凍できるツール
※lhaz等のtgz圧縮では駄目です。7zipを推奨します。

# 手順
- ejdk1.8 for ev3を任意の場所(例:temp/ejdk1.8.0)に展開する。
- 環境変数にJAVA_HOMEを設定する。※ejdkではなく、PCのjdkです。
- コマンドプロンプトを開き、以下の操作を行う。

```
cd C:\tmp\edjk1.8.0\bin
jrecreate.bat --dist jre --profile compact2 --vm client
```
- binにjreフォルダが出来上がるのでejre-8-hogehogeにリネームする。
- 7zipでejre-8-hogehogeをtar圧縮する。
- 7zipでejre-8-hogehoge.tarをgz圧縮する。
- SDカードをフォーマットする
- leJOS with jre7を導入した要領で、jre8を導入する。

# 用語
- ejdk: 組み込み用のjdk
- jdk: PC(母艦)用のjdk
作りかけの趣味的プロダクトをしばらく放置してしまった後、再開するための方法

むしろ、私が知りたい。知りたいよう。

かくいう趣味的プロダクトは、実際のところ「例えば校正ソフトのような（例えだからね、校正ソフトじゃないよ）、アルゴリズムはさほど面白みがないけど、データとその構造に妙味があるタイプ」のプロダクトで、言語はpythonの部分とC++の部分があって、アルゴリズムはちょこちょこホワイトボードで試行錯誤した跡がEvernoteに入っているので後は組むだけ。しかし、データのほうは8段階くらい加工する必要があるうちの2段階目くらいまでしか済んでなくて、データを加工するコードを書いて、データを放り込んで何週間かPCを回し続けて、次の段階のデータができる、という感じ。この辺は、サチる目処があんまり立っていないので、各段階でどのくらい回せば充分かは分からない（現実的な時間で充分だろう、という目算は立っている）

個人的に欲しいけど、既存のプロダクトには満足できないので自分で作っているんだけど、正直、前の段階での処理を回した後に忙しさに見舞われて以来放置しすぎてしまい、再開するモチベーションが足りない。

コメントでも良いので、どうしたらモチベーションが上がるか、教えてもらえると嬉しい。単に、檄をもらえば良いのかも知れない。「怠けてるだけでしょう、子豚ちゃん」とかヴィクトルの声で言われれば済む話なのかも知れない。
Sublime Text > 選択した文字列の中から","の個数を数える > Ctrl+F / ","を入力 

```txt:動作確認
Sublime Text2 on Windows 7 pro
```

","が多数含まれる文字列からその個数を知りたかった。

以下で確認できた。

1. ","を多数含む文字列を選択
2. Ctrl+F
3. 検索キーワードのテキストボックスに","と入力

左下に以下のような表示がされる。

> 13 matches

以下のような表示になる場合もある。

> 1 of 12 matches
Debian8 Fujitsu PH50/Cに不足したドライバーをインストール

富士通のPH50/Cをもらいました。

Debian8は、インストール出来たのですがエラーが気になったので
ファームウェアをインストールしたメモです。

```
su -
cd /etc/apt
cp sources.list sources.list_org
sed -i -e 's/main/main contrib non-free/' sources.list

aptitude update
aptitude install firmware-atheros
aptitude install firmware-realtek
aptitude install firmware-linux-nonfree
```

これで、起動時にエラーが出なくなる。
git stash apply の名前指定が上手くいかない時

git stash apply hogehogeで名前を指定しても上手くいかない時

↓

```
$ git stash apply stash@{0}
fatal: ambiguous argument stash@: unknown revision or path not in the working tree.
```

そんな時は「"」で括るっぽい

```
$ git stash apply stash@"{0}"
```
【SQL Server】数値項目に小数点以下の値があるレコードのみを抽出する

SQL Serverのテーブルから、小数点以下の値があるレコードのみを抽出する方法です。

```sql
select
    qty
from
    table
where
    qty % 1 > 0 /* 小数点以下の値があるレコードのみ */
```

上記のSQLのqtyを数値項目とします。
qty % 1 にて、qtyを 1 で割った剰余を求めます。
条件に [ > 0 ] とすることで小数点以下の値があるレコードのみを抽出できます。

***

[参考にしたページ]
[ORACLE SQL 小数点以下がある値だけを抽出する – MOD 関数](http://www.saka-en.com/oracle/oracle-sql-mod-decimal-point/)
Windowsでファイルのフルパスを取得する方法

# まとめ
サクラエディタをいれとけば何とかなる。

# 単一ファイル
## Vimを使う

次の処理でパスをコピーできます。

```:viml
let @+ = expand("%:p")
```

私は、こんな感じで Map 作っています。

```:viml
nnoremap <leader>fp<CR> :<C-u>let @+ = expand("%:p")\|echo @+<CR>
```

## サクラエディタを使う - その1

`<C-\>`でフルパスがコピーできます。


# 複数ファイル
## サクラエディタを使う - その2
フォルダからファイルを選択して、コピペするとフルパスが表示されます。

## サクラエディタを使う - その3
Grep時に検索キーワードをいれなければファイル名が表示されます。

## コマンドを使う
次のコマンドです。`a-d`はディレクトリ除外です。

```
dir /b/s/a-d
```
Linode Tokyo2 Beta開始

いよいよ東京データセンター第二開始、参加しましょう。
-----------------------------------
Hello there,

We are pleased to announce that our second Tokyo datacenter is almost ready to launch! As one of our best customers, I would like to offer you the opportunity to participate in beta testing our new datacenter to ensure that we’ve got everything ready to go. 

Since Tokyo 2 is still in the beta stage, please review and understand the following points:

- You are participating at your own risk
- It’s possible that you will experience downtime and/or data loss
- This facility is KVM *only*

If you like to migrate an existing Linode over to Tokyo 2, our Support team will just need you to confirm and accept the following:

- Your IP address will be changed
- You will experience 10-15 minutes of downtime per GB of data migrated
- Backups stored will not be transferred from your previous datacenter. However, the service will resume once the migration is complete.

We encourage you to test out as many services as you’d like! If you notice any issues or if you have any suggestions, please let us know by opening a ticket or sending an email to support@linode.com.

We’re very excited to offer this additional option to the Linode lineup. Please let us know if would like to participate.

Kind Regards,
Holden M.
Linode Support
-----------------------------------
Cognos BI のキャッシュのOFF方法

Cognos BIのレポートレスポンスの向上に、キャッシュの利用は欠かせないものですが、データ更新を頻繁に行っている環境では、データソースのデータの更新をしても、Cognosのキャッシュが効いてしまって、即時にレポート表示に反映されない事ありますよね。

そんな時のキャッシュをオフする方法です。
どちらの方法も、CQMモードでもDQMモードでも同じ動きになりました。

■パッケージレベルでのキャッシュオフ

Framework Managerの「プロジェクト」→「ガバナーの編集」で「ローカル・キャッシュの使用を許可」のチェックを外します。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/9265661c-36ac-88b6-54f6-94e6f84e8ae8.png)

その後、モデルを保存し、パッケージを発行すれば、そのパッケージを使っているレポートは全て、キャッシュはオフになります。

・データ更新前
![CQM_ON01.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/9353ed6d-3420-0db4-1471-98b806d17f76.png)

・データ更新後 - キャッシュオフ(CQM,DQM)
![CQM_OFF2.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/45c31cf4-aee1-bb32-f1d6-3ed99b4ed41d.png)

・データ更新後 - キャッシュオン(CQM,DQM)
→ブラウザの落とし上げをしても反映されません。モードにより、特定の条件を満たすとキャッシュは開放されますが、その話はまた別の記事で。
![CQM_ON02.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/7cb6b65a-c1bd-6df1-9036-5b3f551c1aa2.png)


■レポート内クエリーレベルでのキャッシュオフ
パッケージ全体のキャッシュオフだと影響が大きすぎる場合は、レポート内のクエリーのプロパティで、「ローカル・キャッシュを使用」を「いいえ」にすると、このクエリーのキャッシュがオフになります。
![QE.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f6ceb426-f7cb-5cea-6676-e76e28d77f00.png)

・データ更新後 - FMガバナーキャッシュオン - クエリーキャッシュオフ
![CQM_ON03.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/9a329290-e06f-1911-daf6-c48d57a01c58.png)
newrelic


## newrelicの概要

7種類のサービスを提供している。

* APM
	* アプリケーションのパフォーマンス監視
* Browser
	* ブラウザのパフォーマンス監視
	* GoogleAnalyticsぽいデータを収集出来るようになる
* Mobile
	* モバイルアプリのパフォーマンス監視
* Synthetics
	* Webアプリ、サイトの疎通確認、障害監視
* Plugins
	* サードパーティによる各種のプラグイン
* Insights
	* リアルタイム分析ツール

## New Relic APMの始め方

だいたい会話の中で「New Relicが〜」とか出てくる場合はAPMを指している場合が多い。
仕組みもシンプルで、``エージェント``というライブラリを対象サーバにデプロイ。
すると後はサーバが自動的にNew Relicのサーバにデータを送信してくれるので、
New Relic上の管理画面でデータが見れるようになる。


### centos向け、エージェントの設定方法

[マニュアル](https://docs.newrelic.com/docs/agents/php-agent/installation/php-agent-installation-redhat-centos)を参考にしてます。

※ 全部sudo権限で行います

```
$ sudo yum install newrelic-php5
```

```
$ sudo newrelic-install install
```

途中でライセンスキーの入力を求められるので、newRelic上で取得したライセンスキーを入力する。
すると・・・


```bash
New Relic is now installed on your system. Congratulations!

1. Set newrelic.appname in your newrelic.ini file.

2. Restart your web server. This will fix most reporting issues and
   load the agent's new features and bug fixes.



If you have questions or comments, go to http://support.newrelic.com.
```

newrelic.iniのappnameを編集して、apacheを再起動しろ的な事が書いてあるので従います。

* newrelic.iniの編集

```
$ sudo vim /etc/php.d/newrelic.ini
```

appnameの項目を自分の好きな名前に変更しておきます。

```newrelic.ini
newrelic.appname = "rikiishi app"
```

* apache再起動

```
$ sudo httpd restart
```

これでphpinfoを見ると、newrelic関連の設定が反映されてるのがわかります。

![スクリーンショット 2016-11-11 09.02.36.png](https://qiita-image-store.s3.amazonaws.com/0/23276/8ebb55a0-b7c9-a20a-948b-238a18080b7f.png "スクリーンショット 2016-11-11 09.02.36.png")

#### ダッシュボードを見てみる

各種


![スクリーンショット 2016-11-11 09.03.56.png](https://qiita-image-store.s3.amazonaws.com/0/23276/cd24b20b-3ea2-d0ee-dbc9-38f83dbfb400.png "スクリーンショット 2016-11-11 09.03.56.png")

レスポンスタムやスループットなどが、PHP/MySQL毎に見れるようになってたりします。
設定次第で、具体的なSQLも見れるようになります。
Salesforce：数式にて改行を除去する

Salesforceの数式(formula)にて、値から改行を除去する関数は用意されていないのでちょっとトリッキーな方法を使う必要があります。

# LineBreak（改行）を表現する変数を定義する

SalesforceにはLineBreak(改行)を表現するグローバル定数がありません（2016年11月11日現在）。[^1]
そこで、カスタム表示ラベルを使ってLineBreakを表現する変数を定義します。

[設定] -> [ビルド] -> [作成] -> [カスタム表示ラベル] にアクセスして、新規のカスタム表示ラベルを次の内容で作成します。

- 簡単な説明: LineBreak
- 名前: LineBreak
- 値: (テキストエリア内にて)-(改行)-を入力

![スクリーンショット 2016-11-11 08.33.33.png](https://qiita-image-store.s3.amazonaws.com/0/69460/dd935278-7a0d-4129-a692-0346f2cbc2a8.png)

定義したカスタム表示ラベルは数式にて$Label.LineBreakで呼び出すことができます。

## $Label.LineBreakを改行そのものとして使うには

$Label.LineBreakの値は「-(改行)-」ですので、改行そのものではありません。
実際に改行そのものとして使うにはSUBSTITUTE関数を使って-を除去します。
SUBSTITUTE関数は第一引数に与えた文字列から、第二引数の文字列を探し、第三引数の文字列に置換した結果を返します。

`SUBSTITUTE($Label.LineBreak, "-", "")`

ここで、改行は"\n"じゃダメなのか？と思った方。残念ながらSalesforceの数式では"\n"は改行を表現しないのです。。。。（"\r"や"\r\n"もダメです）[^2]

# 改行を除去する数式を組み立てる

改行を表現することができるようになりましたので、改行を除去する数式を組み立てます。
改行除去対象の項目のAPI参照名がtarget__cであるとして、SUBSTITUTE関数を用いて改行を除去します。

`SUBSTITUTE(target__c, SUBSTITUTE($Label.LineBreak, "-", ""), "")`

たかだか、改行を取るだけでこの手間。。。早く関数作って、Salesforceさん。

[^1]: こういうところがSalesforceのイケてないところですね。
[^2]: ほんとイケてない。
Swift3のAlamofireをiOS8サポートのプロジェクトで使う

<div class='alert alert-warning'><h4>警告</h4>
Alamofire 4.1.0でDeployment Targetが iOS8.0 に戻りました :tada:
</div>

# Alamofire

AlamofireのSwift3版はAlamofire4です。 (2016/11/11現在)
Alamofire4はDeploymentTargetがiOS9.0になっています。

よって、通常ではAlamofire4を使用する場合はiOS8のサポートを切る必要があります。


しかし、いろいろな悲しい事情があり、iOS8のサポートが切れないけれど、Swift3が使いたいという状況があると思います。

## URLSessionStreamTask

Alamofire4がiOS8のサポートを切った理由は、`URLSessionStreamTask`というiOS9.0+のクラスを使用するためです。

Alamofireの中を覗くと、このクラスは新しく追加されたメソッドで使用されているようです。

つまりこれまで、Alamofireを使っていたiOS8サポートのプロジェクトではこれらのメソッドは使っていないはずです。

そこで、`URLSessionStreamTask`に関係する実装をすべて取り外してしまうことでAlamofire4をiOS8で動作するように変えました。

## 修正作業

AlamofireをcloneしてiOSのDeployment TargetをiOS8.0に下げて、ビルドします。
そこでエラーになった箇所を全部`#if HOGE`で囲ってビルド対象から除外します。

## 完成物

https://github.com/tattn/Alamofire

Carthageで既存のiOS8サポートのプロジェクトに入れてみました。

```
github "tattn/Alamofire" "swift3-ios8"
```

動作に問題ありませんでした。


本来はこれを機会にiOS8のサポートを切って使用するべきですが、そうはいかない事情があると思いますので、このような対応も **しばらくの間** は仕方がないのではないでしょうか？

お困りの方は検討してみてはいかがでしょうか。
rangeとxrange

python2系にはxrangeというのがあるらしい


### 単純な呼び出し
```python
import time

start = time.time()
for x in range(10000):
    pass
print "range : {}".format(time.time - start)

start = time.time()
for x in range(10000):
    pass
print "range : {}".format(time.time - start)
```

結果

```
range  : 0.00071907043457
xrange : 0.000457048416138
```

xrangeのが呼び出し早い
メモ: mhash関数は7.0(5.3以降)でも使えた

> PHP 5.2.x から PHP 5.3.x への移行

* [PHP: 削除された拡張モジュール - Manual](http://jp2.php.net/manual/ja/migration53.removed-extensions.php)

* [PHP: mhash - Manual](http://php.net/manual/en/function.mhash.php)

## 説明

* [PHP: Installation - Manual](http://php.net/manual/ja/mhash.installation.php)

>  PHP 5.3.0 以降では、 Hash 拡張モジュールが mhash 拡張モジュールの動作をエミュレートするようになりました。 そのため、mhash インストールディレクトリの指定は無意味となりました。 また、hash 拡張モジュールで mhash サポートを有効にしておく必要があります。 

## 書き方

* [PHP: Hash Functions - Manual](http://php.net/manual/en/ref.hash.php)

```php
<?php
$Input = date("Y-m-d");

$MD4Hash=bin2hex(mhash(MHASH_MD4,$Input));
echo $MD4Hash."\n";

// You could use this instead, but mhash works on PHP 4 and 5 or above
// The hash function only works on 5 or above
$MD4Hash=hash('md4',$Input);
echo $MD4Hash."\n";
```

両方とも `1315f4cec4dd5efd5693b1d7fbff61b9` のような同じ値が出力されることを確認。
CloudFlareでAPIを使って個別や全部のファイルキャッシュを削除させる

# はじめに
CloudFlare便利です。
とりあえずの設定を入れておくだけでそこそこ運用できるのですが、もうちょっと突っ込んだ運用ができないか、ということでキャッシュの個別削除を行ってみました。

1. APIキーの取得
2. 環境変数の設定
3. zone idの取得
4. 実際の削除

という流れになります。
新しいAPIをいじるときはだいたいそうですが、なかなかうまく行かなくて苦労しました。

ちなみにAPIは5分間に1200回のアクセスまでとなっています。お気を付けください。


# APIキーの取得
まずはAPIキーを取得します。

ログイン後、アカウント設定＞API Keyにあります。
https://www.cloudflare.com/a/account/my-account

![Screen Shot 2016-11-11 at 7.32.35.png](https://qiita-image-store.s3.amazonaws.com/0/47327/08689910-76bb-016e-d3c8-d43d38974f91.png)

この値をメモしておきます。

# 事前準備
メールアドレスとAPIキーでアクセスするので、変数に取っておきましょう。

```bash
$ export API=1234abcdxxxxxxxxxxxxxxxxxx
$ export MAIL=user@example.com
```

# zone idを取得
APIアクセスではzone id (zone identifier)を使います。
アカウントとドメインに対してユニークなIDとなっています。

まずはそれを調べます。

```bash
$ export DOMAIN=example.com

curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=${DOMAIN}&status=active&page=1&per_page=20&order=status&direction=desc&match=all" \
-H "X-Auth-Email: ${MAIL}" \
-H "X-Auth-Key: ${API}" \
-H "Content-Type: application/json" 
```

戻り値にあるidを控えておきます。
jqを使ってidを抜き出す場合にはこうです。

```bash
curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=${DOMAIN}&status=active&page=1&per_page=20&order=status&direction=desc&match=all" \
-H "X-Auth-Email: ${MAIL}" \
-H "X-Auth-Key: ${API}" \
-H "Content-Type: application/json" | jq '.result[0].id'
```

<img width="685" alt="Screen_Shot_2018-09-24_at_16_32_00.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/47327/396a96bf-d445-a5e4-c854-af45c206426d.jpeg">


アカウントにある全てのドメイン情報を取得するには次のようにします。

```bash
curl -X GET "https://api.cloudflare.com/client/v4/zones" \
    -H "X-Auth-Email: ${MAIL}" \
    -H "X-Auth-Key: ${API}" \
    -H "Content-Type: application/json"
```
https://api.cloudflare.com/#getting-started-resource-ids

こちらも同じように設定しておきます。

```bash
$ export ZONEID=123412342134214321423142134
```

# キャッシュの削除
さていよいよキャッシュの削除です。

```bash
curl -X DELETE "https://api.cloudflare.com/client/v4/zones/${ZONEID}/purge_cache" \
     -H "Content-Type:application/json" \
     -H "X-Auth-Key: ${API}" \
     -H "X-Auth-Email: ${MAIL}" \
     --data '{"files":["http://example.com/"]}'
```

--dataでfilesとして渡す箇所に削除したいファイルのURLを入れてください。
トップページであれば上記のように / で終わらせます。index.html ではうまく消えません。

## 全部消す
全部を消すにはPOSTで送りつつ、リクエストボディに purge_everythingを記載します。

```bash
 curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONEID}/purge_cache" \
     -H "Content-Type:application/json" \
     -H "X-Auth-Key: ${API}" \
     -H "X-Auth-Email: ${MAIL}" \
     --data '{"purge_everything":true}';
```

<img width="668" alt="Screen_Shot_2018-09-24_at_16_38_36.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/47327/a6184636-dd7b-fc95-17f3-8a3bb0db7ed0.jpeg">


> https://api.cloudflare.com/#zone-purge-all-files


# 最後に
CloudFlare便利ですね！なんでもできるのでファンになりそうです。
もっと色々と使っていきたいです。

# おまけ
APIアクセスのときには出力結果について、jqを使うと見易いです。
http://qiita.com/yousan/items/ac83ae06673c6745052b
python > codeのコピペ > SyntaxError: Non-ASCII character '\xe3' in file > -*- coding: utf-8 -*- を追加する

```txt:動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
```

TensorFlowというDeep Learningのフレームワークを用いたプログラムの試行中。

csvファイルを読込むサンプルコードを試そうとした。
http://qiita.com/learn_tensorflow/items/3e46b2512a1bab73f5b2

以下を行った。

1. 3e46b2512a1bab73f5b2.pyを新規作成
   - Sublime Textで開く
2. ChromeにてQiitaの記事のコード(train.py)をコピー
3. Sublime Textでペースト
4. python 3e46b2512a1bab73f5b2.py

以下のエラーが出た。

```
$ python 3e46b2512a1bab73f5b2.py 
  File "3e46b2512a1bab73f5b2.py", line 4
SyntaxError: Non-ASCII character '\xe3' in file 3e46b2512a1bab73f5b2.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
```

以下のあたりが関係しそう。
http://yono.cc/python/python_basics/japanese.html


## 対処

上記のリンクに基づいて以下を行った。

3e46b2512a1bab73f5b2.pyの先頭に以下の２行を追加した。

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

python 3e46b2512a1bab73f5b2.py にてエラーが出なくなった。

2行目(utf-8の行)だけ先頭に追加しても動作することも確認した。

しかしながら、今度はまた別のエラーが出るようである。

input.csvを作り忘れていた。作成すると正常動作した。

```
$ python 3e46b2512a1bab73f5b2.py 
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcurand.so locally
WARNING:tensorflow:sum_of_squares (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-10-01.
Instructions for updating:
Use mean_squared_error.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:925] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:951] Found device 0 with properties: 
name: GeForce GTX 1070
major: 6 minor: 1 memoryClockRate (GHz) 1.7715
pciBusID 0000:01:00.0
Total memory: 7.91GiB
Free memory: 7.43GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:972] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:1041] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)
step 100: loss=0.247862
step 200: loss=0.247688
step 300: loss=0.247384
step 400: loss=0.241975
step 500: loss=0.238029
step 600: loss=0.162714
step 700: loss=0.073538
step 800: loss=0.032851
step 900: loss=0.016584
step 1000: loss=0.008190
step 1100: loss=0.007613
step 1200: loss=0.005846
step 1300: loss=0.004516
step 1400: loss=0.003045
step 1500: loss=0.003138
step 1600: loss=0.002398
step 1700: loss=0.002074
step 1800: loss=0.001769
step 1900: loss=0.001600
step 2000: loss=0.001209
```