OmniAICreator/Qiita-1.07M huggingface dataset:
プログラムを書く際の基礎的知識

授業でした内容を自分のメモとして書き残します。

---

#1. プログラムを書くための約束事

1. 基本、半角英数字で書く
	- プログラムは " 英語 " が基本

2. 大文字と小文字は別の文字である

3. 文はセミコロンで区切る
	- " 。 " と同じ意味

4. 余計なことは書かない
	- エラーの原因となるため

5. 余計なことは " コメントアウト "
	- プログラムに反映されないようにする ⇒ **コメントアウト**

```c#:例
// この部分は反映されない(コメントアウト)
Console.WriteLine("test");
```

#2. 便利な演算子

〇これだけ覚えておけば、計算には困らないというような演算子をリストアップ

- A += B
    - AにBを足す
    - 「A = A + B」
- A -= B
    - AからBを引く
    - 「A = A - B」
- A *= B
    - AにBをかける
    - 「A = A * B」
- A /= B
    - AをBで割る
    - 「A = A / B」
- A %= B
    - AをBで割った余りをAに入れる
    - 「A = A % B」
    - 例：「5 / 2 = 2 … **1**」⇐ 太字の部分が代入される
- A++ (インクリメント演算子)
    - Aに1を足す
    - 「A = A + 1」
- A-- (デクリメント演算子)
    - Aから1を引く
    - 「A = A - 1」

#3. キャスト（型変換）

〇 ある型の値を別の型に変換すること

```c#:エラーの例
double m = 10.0;
int n = m;
```
型の大小で見ると、" double " の方が " int " よりも大きい
⇒ 小さい型の中に大きい型の値は入らない、というエラーである

```c#:キャストの例
int n = (int)m;
```

〇 暗黙のキャスト

```c#:例
int m = 10.0;
double n = m;
```
上記のように、キャストをしなくてもエラーにならない
⇒大きい型の中に小さい型の値は入る、のでエラーにならない
※ これが**暗黙のキャスト**である

・キャストを禁止している会社もある
⇒ 現場の混乱を招くため

#4. 比較演算子

〇 " if-else " 文や " for " 文などに使用する式のこと

- A == B
    - AとBは等しい
    - ※ " = " だけでは " 代入 " の意味になる
- A != B
    - AとBは等しくない、ノットイコール
    - ※ 言語によっては " <> " と書くものもある
- A < B
    - AはBより小さい、B未満
- A <= B
    - AはBと等しいか、小さい
    - ※ " = " を左側に書くとエラー
- A > B
    - AはBより大きい
- A >= B
    - AにBを足す
    - ※ " = " を左側に書くとエラー

#その他

〇 プログラム言語によって拡張子が違う

| C | C# | C++ | Java | PHP | JavaScript |
|:-:|:-:|:-:|:-:|:-:|:-:|
|.c |.cs |.cpp |.java |.php |.js |

---

最後までお読みいただきありがとうございました。
Alexaカスタムスキル 作成リンク集

カスタムスキル作成に当たって参考にしたもの

+ アカウント準備
 - [失敗しないAlexa開発者アカウントの作り方](https://dev.classmethod.jp/voice-assistant/how-to-safety-create-alexa-developers-account/)
<br><br>
<br>
* 初心者向けスキル作成
 - [Alexaスキル開発トレーニング](https://developer.amazon.com/ja/alexa-skills-kit/training/building-a-skill)
 - [超初心者がAlexaスキルを作ってみる【1日目】](http://www.tomot-gadget.xyz/entry/skill-develop)
 - [Alexaの知識がないところからスキルを作ってみた日記 その1](https://dev.classmethod.jp/voice-assistant/amazon-alexa/firststep-alexa-skil-develop1/)
 - [Alexa Skills Kit を使って Amazon Alexa スキル を作成する – 実装編](https://mseeeen.msen.jp/amazon-alexa-skills-implementation/)
<br><br>
<br>
- カレンダースキル作成の参考
 - [アレクサ、〇〇さんの今日の予定を教えて](http://azure.sios.jp/archives/8450)
<br><br>
<br>
- 開発の参考
 - [複数人で同じAlexaカスタムスキルを共有して開発する方法](https://dev.classmethod.jp/voice-assistant/how-to-develop-alexa-skills-in-team/)
<br><br>
<br>
- 他に気になったもの
 - [育児日記をDashボタンとAlexaでつける](https://qiita.com/ikeyasu/items/4c9462a5d77808ac1c3c)
ちょっと欲しい

今日は、会議のファシリテートの勉強会に参加した。
初見の方とディスカッションしてて、ふと思いつく。

#最近の悩み
上司が気になるWeb ニュースとメモをメールで飛ばしてくれるんだけど、
長いWeb ページのどこが気になったんや（怒）となっちゃう。

ほならね、どこが気になったか、ぱっとメモ付きで共有できるようなサービスは無いんかな？

#近い発想の人たち
天才がいました
https://phildub.com/#


#作るモチベーションはあるか？
提案した側は、お客様がどこが気になったかすぐ分かるといった状態だ。

#どう作ればいいか
みんな見れるようにWeb だろうな

認証　＞　Web サイト　の流れか

##機能
提案書のファイルアップだな
そんで、お客様がお気に入りできるとこだな
　イメージは、アマゾンの星マークつけるあれ。
メモ。あれ？アマゾンのレビューでよくね？
　メモの情報をどうリンクさせるかな。。。
　誰々の星マーク＋メモだけ部下にリンクできれば一旦いいんじゃねぇかな。

うわ、顧客情報とか入るとヤバすだな
　セキュリティどうしよう。

まぁ、テストサイト作ればいいか
iOSアプリにReflectionライブラリ導入、あるいはSwift Package Manager製のライブラリをiOSアプリに入れる方法

## 概要

- ある日、structのオブジェクトに対して、文字列リテラルのプロパティ名を使って値をget/setしたくなりました。(Key-Value Coding)
- どうやら [Reflection](https://github.com/Zewo/Reflection) というライブラリが  

```swift
// Retrieves the value of `person.firstName`
let firstName: String = try get("firstName", from: person)

// Sets the value of `person.age`
try set(36, key: "age", for: &person)
```
こんな感じでget/set出来るので便利そう。

- しかしReflectionは[Swift Package Manager](https://swift.org/package-manager/)製・・・
    - Swift Package Managerは `CocoaPods`や`Carthage`と同様にライブラリの依存関係を管理してくれるツールですが現時点ではiOS未サポートとのこと・・
- でも、iOSに組み込むことも出来て、[swift-package-manager-ios](https://github.com/j-channings/swift-package-manager-ios) にデモがあったのでそれを試してみた・・・のがこの記事になります。

## 環境

- Swift4.1
- Xcode9.3

## 手順

以下ではライブラリを入れたいXcodeProjectをTargetProjectと書きます。

### 1. 下準備

```bash
sudo gem install xcodeproj

cd path/to/適当な場所
git clone https://github.com/j-channings/swift-package-manager-ios.git
cd swift-package-manager-ios

# デモに入っているscript等を流用したい
cp generate-dependencies-project.rb path/to/TargetProject
cp Package.swift path/to/TargetProject # Swift Package Manager用の依存関係を記述するファイル
cp -r .deps-sources path/to/TargetProject
```

### 2. path/to/TargetProject/Package.swift に導入したいライブラリの情報を書く

今回はReflectionを導入したく、以下のようなファイルにしました。

```swift
// swift-tools-version:4.0
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "Dependencies",
    products: [
        // Products define the executables and libraries produced by a package, and make them visible to other packages.
        .library(
            name: "Dependencies",
            type: .static,
            targets: ["Dependencies"]),
    ],
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        .package(url: "https://github.com/Zewo/Reflection.git", from: "0.16.0"),
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages which this package depends on.
        .target(
            name: "Dependencies",
            dependencies: ["Reflection"],
            path: ".deps-sources"
        )
    ]
)

```

### 3. 導入したいライブラリを含むxcodeprojを生成

```bash
cd path/to/TargetProject
ruby generate-dependencies-project.rb # => Dependencies.xcodeproj/ が生成される
```

### 4. Dependencies.xcodeproj をサブプロジェクトとして追加する

1. TargetProjectをXcodeで開いて、左端のナビゲーターエリアにDependencies.xcodeprojeをドロップ
<img src="https://qiita-image-store.s3.amazonaws.com/0/81874/73a58e35-2210-ede1-9e2b-1f1243616e9f.png" width=40%>

2. General -> Linked Frameworks and Libraries の + を押して 「Reflection.framework」を追加
<img src="https://qiita-image-store.s3.amazonaws.com/0/81874/3352b92d-acda-69e8-2ef5-c89bc9d476e2.png" width=60%>

3. `import Reflection` を入れた上でビルドが通るはず！

以上です :innocent: 

Special Thanks: @ask-a-lie
Tweetにタグ機能をつけたい！！RubyOnRails

#初めてのQiita体験
前回の記事で初めてQiitaを使ったのですが、タグ機能が快適でいいですねえ。正直最高です。私のタグ機能は完全に敗北しました。完全敗北。

#対象
- 言語: Ruby 2.3
- フレームワーク: Rails 4.2
- データベース: MySQL
- RailsのMVCシステムを理解している方
- Ruby、HTMLをある程度理解している方

#目指していたもの
- TwitterのようなWebアプリ
- その個人のTweetの分野に対して、タグを実装

#タグ機能の実装
タグ機能を用いるには、データベース、Viewファイル、Controller、Modelそれぞれで作業が必要でした。

まず、Gemfileに'act-as-taggable'というGemをインストールします。

```
gem 'act-as-taggable'
```

次に'act-as-taggable'向けのデータベースを作成します。きちんとmigrateしましょうね。


```Terminal
bundle exec rake act_as_taggable_on_engine:install:migrations
bundle exec rake db:migrate
```

product.rb(Tweetに関するmodelファイル)に以下の記述。
記法はacts_as_taggable_on_●● => ●●s_listとなります。

```ruby:product.rb
# acts_as_ordered_taggable_on :fields  # field.tags_list が追加される
acts_as_taggable  # acts_as_taggable_on :tags のエイリアス
```

@productインスタンスを新たに作成しています。

```ruby:product_controller.rb
def new
  @product = Product.new
end
```

new.html.erb(タグ情報の入力するページ)
form_forでデータを送信。

```html:new.html.erb
<%= form_for(@product) do |f| %>
....
  <div class="field">
    <%= f.label :tag_list, "分野" %><br>
    <%= text_field_tag 'product[tag_list]', @product.tag_list.join(',') %>
  </div>
...
<% end %>
```

index.html -> (render) -> _product.html.erbにてタグの表示を行います。
tag_list: a_product.tag_listでは、変数の結びつけを行なってます。前者が次のrender先のファイルでの変数、後者は現ファイルにおいての変数です。

```html:_product.html.erb
  <li class="collection-item">
    <div> タグ：<%= render 'products/tag_list', tag_list: a_product.tag_list %></div>
 　</li>
```

render先のhtml。

```html:_tag.html.erb
<% tag_list.each do |tag| %>
  <span class="label label-primary"><%= tag %></span>
<% end %>

```

Tweetに関するparams。
form_forで送信したデータを取得している。要素が:tag_list以外に複数あるが、これはTweetに関するカラムであるので、気にしなくても良い。

```ruby:product_controller.rb
  def product_params
    params.require(:product).permit(:name,:content, :url1, :url2,:description, :image, :tag_list)
  end
```

あらかじめ作成した@productインスタンスにtag_listを追加し、データベースに保存。
parse: trueで","でタグをくぎれる。

```ruby:product_controller.rb
  def create
    @product = Product.new(name: product_params[:name], content: product_params[:content],
                               url1: product_params[:url1], url2: product_params[:url2],user_id: current_user.id,
                               image: product_params[:image],description: product_params[:description])
    @product.tag_list.add(product_params[:tag_list], parse: true)
    @product.save
    redirect_to action: :index
  end

```

以上です。
Android NDK C++ で OpenGL ES 3.0

# 概要
**Visual Studio 2017**の**OpenGLES アプリケーション(Android, iOS)**で、**C++**のみで**NDK**を使用して**OpenGL ES 3.0**を使用するメモ

# 環境
- Visual Studio 2017
- Visual C++ > クロスプラットフォーム > OpenGLES アプリケーション(Android, iOS)
- android-23

# 内容
eglCreateContextのattribにEGL_CONTEXT_CLIENT_VERSIONを3と指定する

```c++
const EGLint ContextAttribList[] = {
    EGL_CONTEXT_CLIENT_VERSION, 3,
    EGL_NONE
};

context = eglCreateContext(display, config, EGL_NO_CONTEXT, ContextAttribList);
```
Visual Studio2012の基本的な使い方

4/18授業用メモ
#第3章 画面の作成
WinMergeというソース比較ソフトを使用した。
DFを使用したことがあったのでわかりやすかった。

#Visual Studio2012
ウィンドウの作成と設定
すでにあるプロジェクトを開きソリューションエクスプローラーを表示させる
Salesプロジェクトを右クリック
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/249275/fb459b3e-5ae8-3888-55c2-04277008a59a.png)
追加からウィンドウ
新しい項目の追加をクリックする
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/249275/5cb2dea9-d36f-407e-2d4b-c11fae2c98c5.png)
ソリューションエクスプローラーにEditView.Xamlが追加されていたらOK

#EditView.Xamlの編集
第3章の画面作成53ページを見ながらレイアウト作成
苦労した点はスタイルの適用とbuttonやwidthの記述
最後まで出ていたエラーの原因は大文字で入力するところを小文字で入力していたミスでした
C#プログラミング(基礎)

※自分の勉強用のメモとして書いています


環境：Windows10 Visual Stabio 2012

##C#の簡単なプログラミング
今回使用するのはC#コンソールアプリケーションで
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/236eae2e-0245-ed27-4007-abf58c30fb4b.png)
選択すると以下の画面になる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/da5ed63a-adde-d67c-e801-18e7b5839496.png)
とりあえず画面ができたので動作確認のためにHelloと表示するプログラムを書き込み実行してみる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/e11eb209-3a77-912b-995b-b4f521baca1f.png)![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/95f6003c-0f80-4b64-263b-45b828daf096.png)
成功。
動作確認を確認したら次はHelloの後ろにByeを追記してみる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/9d5e9a55-44aa-2144-8fb2-7021978df11d.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/8e71f07d-cb2a-a489-ef65-97e83ce21a8e.png)
こちらも成功したので次に簡単な計算を書き込んでみる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/28da275f-f05d-7563-477e-273793148fda.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/aedbf405-bf86-54c5-8484-d9396bcabc27.png)
動作を確認できたのでちょっと遊んでみる。
intとdoubleを逆にしてみた。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/43de4739-2ce4-ff59-d96a-3bd622994257.png)
エラーが出てきたので直してみる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/8511a291-3024-c050-d92b-8eda4fe68450.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/dabc15f0-b97c-dfcc-7412-09887a1e16ed.png)
直ったのでifもやってみる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/7ebe901b-9d81-69db-1122-b0fa40c7f135.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/b933e661-d403-c390-bd67-9e0ac13e5793.png)
できたのでSwitchとifの混合とキーボードからの入力を取得してみる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/8ebf07ad-2d7c-f025-f231-beba80b75bdb.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/4c156194-579f-dced-617b-d7f043a75b53.png)
これも成功。
最後にWhileもやってみる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/69e14c46-f49d-1809-c080-1c15e91cef78.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/cd77baf3-8cfd-8102-2290-bd8b5bb28f37.png)
成功。
ついでなので無限ループを起こしてみる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/bd4c8c8a-881e-941c-e005-4978eb5daf8f.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/249288/1b13b5fb-480d-7a74-a4ed-aa335ef6a7ea.png)
成功~~(?)~~した。
Celery でタスクのスケジュールさせたときのメモ

## 概要
決まった時間や周期で何かタスクや関数を実行させたいときに使えるやつです。
## 環境
- macOS 10.13.3

```txt:requirements.txt
Django==2.0.4
celery==4.1.0
redis==2.10.6
requests==2.18.4
requests-oauthlib==0.8.0
datetime==4.2
```

上の3つが django と celery まわりで必要なやつ。下3つは bot (app) で使っただけ。

git のリポジトリ。
[TedKoba/nem_bot](https://github.com/TedKoba/nem_bot)

## 準備

こういうノリで整える

```shell_session
django-admin startproject nem_bot
cd nem_bot
virtualenv env
source env/bin/activate
python manage.py startapp bot
```

```Python:nem_bot/celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nem_bot.settings')

app = Celery('nem_bot',
    broker='redis://localhost:6379/'
)
app.config_from_object('django.conf:settings')

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

```

```Python:nem_bot/settings.py
from celery.schedules import crontab

INSTALLED_APPS = [
    ...,
    'bot'
]


CELERYBEAT_SCHEDULE = {
    'post-every-hour': {
        'task': 'bot.tasks.tweet_nem_price',
        'schedule': crontab(hour='*')
    },
}
```

```Python:bot/tasks.py
from __future__ import absolute_import, unicode_literals
from nem_bot.celery import app
from bot.xem_bot import tweet_nem_price


@app.task
def scheduled_nem_bot():
    tweet_nem_price()

```

## 実行
これで動く。

```shell_session
celery -A nem_bot worker -B -l info
```

## 成果物
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">NEM<br>現在の価格: 44.6988<br>１時間前からの変動率: 2.54%<br>過去24時間の高値: 48.89<br>過去24時間の安値: 43.3<br>過去24時間の加重平均: 45.8582</p>&mdash; xem at zaif (@xem_price) <a href="https://twitter.com/xem_price/status/989021186905391104?ref_src=twsrc%5Etfw">2018年4月25日</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

## 課題
公式にあるやり方で実装しても `bot/tasks.py` タスクが認識されてるのに呼び出されなかった。
[Periodic Tasks](http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html)

```Python:celery.py
from celery import Celery
from celery.schedules import crontab

app = Celery()

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    # Calls test('hello') every 10 seconds.
    sender.add_periodic_task(10.0, test.s('hello'), name='add every 10')

    # Calls test('world') every 30 seconds
    sender.add_periodic_task(30.0, test.s('world'), expires=10)

    # Executes every Monday morning at 7:30 a.m.
    sender.add_periodic_task(
        crontab(hour=7, minute=30, day_of_week=1),
        test.s('Happy Mondays!'),
    )

@app.task
def test(arg):
    print(arg)
```

これだと `sender.add_periodic_task()` で `bot/tasks.py` の中のタスクが呼び出せなかったお話。もうちょっと調べてみる予定。
ChefTips: recipeの中で何かを確認して、NGだったらCookbook実行を止める方法

Cookbookの中で、何かを確認してそのような状況になっていなかった場合に、Cookbookをエラーで停止させる方法を説明します。

## 解決したい課題

手順書の中で、なにかの設定をする前に

* 『XXサーバのXX番ポートにConnectできること』
* 『OpenSSHとかSudoコマンドが導入されていること』

を確認が必要なケースがあります。

この手の確認は前提条件として予め確認しておいたり、Serverspecなどのテストツールで確認することが望ましいです。ですが、予め確認するにしても手で確認するのは面倒ですし、他のテストツールを用意してその使い方を覚えるのも骨が折れるものです。

ここでは、Chefを使って確認して、正常な状態でなかったらErrorでCookbook実行を止める方法をご紹介します。

ここでは、Linux上で特定のサーバの特定ポートと疎通できるか確認し、疎通できたら後続の処理を流す、疎通できなかったらエラーで止める、という処理の実装例をご紹介します。


## 実装例

ポート接続確認をする際は、古くは、`telnet www.yahoo.co.jp:80` とかで書くことが多かったです。しかし、最近のLinuxには `telnet`が入っていません。そこで、Defaultでインストールされている `curl` で実装します。

```ruby
result = shell_out('echo | curl -v telnet://www.yahoo.co.jp:81 --connect-timeout 1 --max-time 1')
if result.exitstatus != 0
  raise 'can\'t connect to www.yahoo.co.jp:81!!'
end
```

## 出力例

以下のようなエラーで停止します。そのまんまですね。

```shell

 RuntimeError
 ------------
 can't connect to www.yahoo.co.jp:81!!

(中略）

 Relevant File Content:
 ----------------------
(中略）
   9:
  10:  result = shell_out('echo | curl -v telnet://www.yahoo.co.jp:81 --connect-timeout 1 --max-time 1')
  11:  if result.exitstatus != 0
  12>>   raise 'can\'t connect to www.yahoo.co.jp:81!!'
  13:  end
```

## その他

上記の実装例は、shell_out(xxxx)の部分を、NGだったら0以外を返すシェルコマンドに置き換えてあげるだけで、様々な確認にしようできます。

Chef Cookbookで、エラー停止させたい場合は`raise` 、コマンド実行したい時は `shell_out`を使います。便利ですので覚えておいてください。

また、ポート確認をWindowsで実施したい場合、curlでなく、powershell で実装可能そうです。
[telnetコマンドのないWindowsでのTCPポート確認](https://qiita.com/_norin_/items/8f534bd0531a960af5e9)


## 参考
[【初心者向け】各OSのTCP通信チェックコマンド入門](https://dev.classmethod.jp/cloud/aws/ec2-tcp-port-check-command/)
[Chefの`shell_out`と`shell_out!`、違いと使い分け](https://qiita.com/sawanoboly/items/43bc9e15739355f9c533)
[[Chef]recipe中でchef-clientの実行を中止する](https://qiita.com/nakashii_/items/910db6c9b586d0cacb8f)
windows10とvisual studio 2017とcuda9.1を初めて使ってみる

#インストール
https://docs.microsoft.com/en-us/visualstudio/productinfo/installing-an-earlier-release-of-vs2017
でBuild Tools 15.4.5をダウンロード＆実行
Visual C++ Build Toolsでデスクトップ用のvc++ 2015.3 v140 ツールセットを選択してインストール
https://developer.nvidia.com/cuda-downloads
で自分の環境に該当するファイルをダウンロードし、インストール
私の場合はWindows10, x86_64

#コマンドプロンプト
VS2017用 x64 Native Toolsを実行、Visual Studio 2017 Developer Command Prompt v15.0を確認する。v15.6.4はダメ

#ビルド
nvcc -w sample.cu
(-w : 警告を表示しない)

#実行
a

#OpenCV build with cuda
1. cmake-guiでconfigureするとcuda toolkitがinstallされているなら、
<br> cuda関連の変数が自動的にcmake cacheに追加される。
2. Build_opencv_worldをチェックするとdllファイルがworldに統合されてlinkするとき便利だが、libの容量が大きくなる。
3. ★重要：visual studio 15 (2017)のコンパイラではエラーのため、cudaをコンパイルできないため、
<br> visual studio 14 (2015)のコンパイラをcuda専用のコンパイラとして指定する。
<br>「Visual C++ Build Toolsでデスクトップ用のvc++ 2015.3 v140 ツールセット」をinstallした場合、
<br> C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exeがあるのでこのpathを
<br> CUDA_HOST_COMPILERに指定するとbuildできる。(MSVC 14.0 -> 2015)
4. pythonがinstallされている場合、自動的に関連ライブラリーの設定が追加されるので必要ないなら消す。
5. OPENCV_EXTRA_MODULES_PATHにopencv_contrib341のmodulesのpathを指定、
<br> たとえば、C:\opencv\opencv_contrib-3.4.1\modules
6. コンパイル(Release mode)
<br> cmake.exe --build . --config Release --target INSTALL
7. コンパイル(Debug mode)
<br> cmake.exe --build . --config Debug --target INSTALL
8. 何かわけ分からないが、朝起きてまだcompileやってたのでビックリ。
<br> buildするのに非常に時間がかかった。大体、Releaseに3時間、Debugに14時間。

#Opencv GPU example code (threshold)

```c:example
//https://opencv.org/platforms/cuda.htmlのshort sampleの修正
//元のコードが旧バージョン用なので修正した
#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/cudaarithm.hpp"

int main(int argc, char* argv[])
{
	try
	{
		cv::Mat src_host = cv::imread("lenna.png", CV_LOAD_IMAGE_GRAYSCALE);
		cv::cuda::GpuMat dst, src;
        //host2device(src_host -> src)
		src.upload(src_host);
        //devicekernel(src -> dst)
		cv::cuda::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY);
		cv::Mat result_host;
        //device2host(dst -> result_host)
		dst.download(result_host);

		cv::imshow("Result", result_host);
		cv::waitKey();
	}
	catch (const cv::Exception& ex)
	{
		std::cout << "Error: " << ex.what() << std::endl;
	}
	return 0;
}
```

#ビルド with OpenCV 例
windows10の環境変数にopencv_world341.dllがあるpathを追加。

```text:command(nvcc)
nvcc -w image.cpp gray.cu opencv_world341.lib -I C:\opencv\build\install\include -L C:\opencv\build\install\x64\vc15\lib
```

```text:※command(cl)
cl opencvgpu.cpp /I C:\opencv\build\install\include /link C:\opencv\build\install\x64\vc15\lib\opencv_world341.lib
```
[超簡単]ARkitでAR(拡張現実)を体験

XcodeとiPhone6以上のデバイスがあれば、ARを速攻で体験できます。

まず、Xcodeで新しくプロジェクトを作るときに、Augmented Reality Appを選択しましょう。
<img width="727" alt="Screen Shot 2018-04-25 at 14.17.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/161088/68dd9377-0099-5b9f-0848-d7322f2bfd73.png">

次に、適当に名前を入力して、Next!!!
<img width="728" alt="Screen Shot 2018-04-25 at 14.18.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/161088/1935b3e6-d8d1-14b8-0b30-a66acde6efeb.png">

あとは、デバイスをPCに繋いで、ビルドして開いてみましょう。
<img width="382" alt="Screen Shot 2018-04-25 at 15.35.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/161088/59098270-47e8-f322-9fb5-bf3ce01505bb.png">

目の前に、飛行機(宇宙船？)が...!!!
前も後ろも上も下も見えるはずですので、動いてみてみましょう。

これを応用すれば、ピカチュウの後ろ姿を見れたり、モンスターボールの当たる場所によってゲットしやすくしたりできるかも？

夢は広がるばかりです。
Gitコマンド超基礎的な２つ


```git status
```

現在、ステージされているものを確認するコマンド。
やらないとコミットできないわけではないが、
はじめのうちは、勉強になるのでコミットする前にやると良い。


```git commit -m "任意のコメント" 　 
```

mは、メッセージのm。

初めての投稿で、練習をかねて簡潔に書いてみました。
Androidstudioの初期設定と動作確認

4/12授業用メモ
##Androidstudioの初期設定と動作確認
#開発環境
OS:Microsoft Windows10 (64bit)
IDE:Android Studio Ver3.1.1
#起動と終了の方法
　デスクトップにあるAndroidstudioから起動
#発生したエラー
途中でエラーが発生したが自分で解決しようと思い調べてみた。 
BIOSに関するエラーでvt-x is disabled in biosというエラー
 原因 仮想化機能が無効になっていた
 解決方法 一度PCをシャットダウンさせ電源を入れる
1 パソコンの電源ボタンを入れる
2 電源ボタンを入れたらすかさずEscキーを連打する
3 StartupMenuの一覧が起動されるのでF10を押す

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/249275/282e559d-0eff-2afb-b8e0-954a4024d25f.png)

4 HEWLETT-PACKARD COMPUTER SETUPが表示される
5 セキュリティメニューよりシステムのセキュリティを選択する

![img02-1.png](https://qiita-image-store.s3.amazonaws.com/0/249275/9bcd5d5e-6f67-c9f4-0aa4-09f0f5d9af3a.png)

6.上からの2つ目の [Virtualization Technology(VTx)] を選択し、右矢印キーを押し、[Disabled] から [Enabled] へ変更する。

![img03.png](https://qiita-image-store.s3.amazonaws.com/0/249275/63299941-77e2-4be3-7d5f-d5bda2f62dfe.png)

7 仮想化技術が有効になったことを確認しF10キーを押す
8 セキュリティメニューの一覧に戻るのでもう一度F10キーを押す
9 ファイルメニューの変更を保存して終了が選択されるのでEnterキーを押す
Visual Studio2012の基本的な使い方

4/11授業メモ
##授業内容
　Visual Studio2012の基本的な操作
##開発環境
 OS:MicrosoftWindows10
 IDE:Microsoft VisualStudio2012
#起動と終了の方法
　スタートメニュ→MicrosoftVisualStudio2012→VisualStudio2012
  保存した後左上のファイルから終了
#プロジェクトの作成方法
  左上のファイルから新規作成→プロジェクト→各種選ぶ
#覚えておきたいこと
ツールボックスとソリューションエクスプローラーの表示
両方とも上のメニューバーから表示を選択しツールボックスと
ソリューションエクスプローラーを選択すると表示される。移動させると任意の場所に置ける
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/249275/dc3f006e-c48c-39ee-cedf-65e89c9b146a.png)
C#の基礎的知識

授業でした内容を自分のメモとして書き残します。
C言語との比較を交えて、C#言語の基本知識を書きます。

---

#C#の基本形
##1. using
〇プログラム内で利用する「名前空間」を宣言するもの
⇒ クラスをまとめて入れておくフォルダ のようなもの
※ クラス …… プログラムの一番小さなかたまり

**ポイント**
" このフォルダ(名前空間)の中にあるクラスを使います " と宣言するための using 記述である

●Cとの比較①

```c#:c#
using System;
using System.Collections.Generic;
```
```c:c
#include <stdio.h>
```

##2. namespace
C#では " 自分で作るプログラム ＝ クラス " である
⇒クラスであるなら、どこかの名前空間内に置かないといけない

**ポイント**
それを定義するための namespace 記述
namespaceの名前は変更可

●Cとの比較②

・ Cには " namespace " のような記述は無い
・ C#独自のものである

##3. class
**ポイント**
プログラムの小さなかたまり
classの名前は変更可

・ クラス名 …… メソッド名、関数名

```c#:例
int main(){};
```
・ main(){}; の {} の中にプログラムを書く
※ 下記はその例である

●Cとの比較③

```c#:c#
Console.WriteLine("test");
Console.ReadKey();
```
```c:c
printf("test¥n");
puts("abc¥n");
```

---

最後までお読みいただきありがとうございました。
macOS Sierra で入力ソースをキーボードショートカット一発で切り替える

多数の入力ソースを使っている場合、標準の切り替え方法だと非常に面倒。特定のキーボードショートカット一発で切り替えたい。

たぶん High Sierra でも動く気がする。

# hammerspoon を使う

- https://www.hammerspoon.org/

簡単にできた。順々に切り替える場合、もうちょっと実装しなくちゃだけど普通に出来ると思う。

```
-- ~/.hammerspoon/init.lua

hs.hotkey.bind({"ctrl", "shift"}, ',', function()
    hs.keycodes.currentSourceID("com.justsystems.inputmethod.atok30.Roman")
end)

hs.hotkey.bind({"ctrl", "shift"}, '.', function()
    hs.keycodes.currentSourceID("com.justsystems.inputmethod.atok30.Japanese")
end)

hs.hotkey.bind({"ctrl", "shift"}, '/', function()
    hs.keycodes.currentSourceID("com.apple.inputmethod.SCIM.ITABC")
end)
```

## currentSourceID の取得

- https://github.com/minoki/InputSourceSelector

でできた、大変便利でありがたい。なお InputSourceSelector は引数で入力ソースの切り替え自体できるので、コマンド呼び出しで切り替えも普通に出来ると思う。

```
$ ./InputSourceSelector list-enabled
com.apple.keylayout.US (U.S.)
com.apple.inputmethod.Kotoeri.Roman (Romaji)
com.apple.inputmethod.Kotoeri.Japanese (Hiragana)
com.apple.inputmethod.Kotoeri.Japanese.Katakana (Katakana)
com.apple.inputmethod.Kotoeri (Japanese)
com.apple.50onPaletteIM (Japanese Kana Palette)
com.apple.CharacterPaletteIM (Emoji & Symbols)
com.apple.KeyboardViewer (Keyboard Viewer)
com.apple.inputmethod.SCIM.ITABC (Pinyin - Simplified)
com.apple.inputmethod.SCIM (Chinese, Simplified)
com.justsystems.inputmethod.atok30.Japanese (ひらがな（ATOK）)
com.justsystems.inputmethod.atok30.Japanese.HalfWidthEiji (半角英字（ATOK）)
com.justsystems.inputmethod.atok30.Roman (英字　　（ATOK）)
com.justsystems.inputmethod.atok30.Japanese.Katakana (カタカナ（ATOK）)
com.justsystems.inputmethod.atok30.Japanese.FullWidthRoman (全角英字（ATOK）)
com.justsystems.inputmethod.atok30 (ATOK 2017)
com.apple.inputmethod.ChineseHandwriting (Trackpad Handwriting)
com.apple.inputmethod.EmojiFunctionRowItem (EmojiFunctionRowIM_Extension)
```

# 追記

`Kawa.app` で GUI から設定して簡単にできた！Kawa.app 知らなかった…。

- https://github.com/utatti/kawa

> A better input source switcher for OS X

> Kawa helps users to switch between keyboard input sources by user-defined shortcuts.
初心者は、まず何を買うか？　LED  光らせてみるには　何を買うの？　そこから大変です。

　初心者の　闘い！
最近　毎日　あちこちで、エンジニアの方やプログラマーや
お店で何を買ったら良いかを聞いたり、足をつかって動いています。
時間ばかりかかっているかもしれないですが、

そうやってお店の中にある、ものを見て、
または他の人が作って発表するのを見て　IoT LTの登壇した人のを見て
こういうの作って見たいと　思うことは、初心者が作り始めるときに
とても大事だと思います！　が、何が必要なのか？がわからない！！

　　まず、アキバに行って、いくつかのお店に行ってみる、LEDをどれがいいのか、聞いてみる。　指導してくれる方に、聞いてみる〜〜〜そこを間違うと、つかない。
　＊＊ここをエンジニアの人は自分で探せと言いますが、、、素人に自分で買ううようになるまでは、たいへんだと思います！
　セットで、ハンズオンで習う、それと同じのを買う、が1番　楽で、早いす。自分でして、苦労しました、、、、何ヶ月もかかったのは、言葉がわからない！！そこから勉強です。


　基本　　LEDのさす場所が、電子工作は大事！！

　これを、ラズパイや他の電子工作で体験して見たら、難しかった！
その　LED   
　 IchigoJam が　1番簡単で、わかりやすいプログラミング！

　『LED をつけて』　　　LED1 で、光る！
　『LED を消して』　　　LED0 で、消える！
　　　　　　　　　　
　　　（この時に間違えやすいのは、O と、0 ）

LED1 LED0 　　　教えてあげた時　　
　　　　　　　初心者はLEDで光っただけで、喜んでくれる！

　LED の    発展をして見ましょう！
赤、黄色、青を、プログラミングしたら　信号になります。
　
＊信号LED は、作らないとならない、購入がまた、初心者は大変なのですね！
　何を買うかがが、とても　大事なのですね。
　できたのを購入するか。
（学校だと、団体で購入＝教材、なのでしょうが、ここからやらせることが、本当のプログラミングの教育的な考えて創るになると思います。）
　でもここは飛んで、半田ごても、父兄の反対が多いでしょうから、まず道具を与える環境が大事ですね。）

　コピペでもやることが、大事だと、エンジニアの方は進めますね。

　でも、できるなら　ここの基本を、ただ言われたままで写して書き写すのでない、
自分でやってみる＝改造＝　から、発展　に、信号の時間を変える
　60＝1秒　120＝2秒　を使う！

失敗していいのです！！

　ここのブログに関しても　＊＊失敗したことも書いてあげた方が、初心者がこれから増えていくので、必要だということに気づいて欲しいです！！
yum で mysql5.6をインストールする


mysql8 が出ています。おめでとうございます。

開発サーバと言う名の、（僕が）壊しては直すツギハギの検証みたいなマシンがありまして、そいつが CentOS 6.9、標準リポジトリの MySQL 5.1 を使っています。開発の都合上、そろそろ mysql5.6 を使いたいので、5.6をインストールしたいのですがコンパイルしてインストールするのも面倒なので yum を使いたいという感じです。

## あらかじめ

1. 前のデータが `dump.sql` で存在するので、それのインポートもします。
2. 既存のmysqlは *全て* アンインストールしておきます。
1. 作業とかいちいち sudo を付けるのが面倒なので、 `sudo -i` で root 権限を持った状態で作業。

## リポジトリをインストール

```
> rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el6-1.noarch.rpm
```

rpm のURLは mysql をリリースする度に変わるので[公式で](https://dev.mysql.com/downloads/repo/yum/)確認をするように。

## 使うリポジトリを変更

書きたいのはここ。初期状態では `mysql80-community` を使うようになっているので、`mysql56-community` を使うようにする。

```
> yum-config-manager --disable mysql80-community
> yum-config-manager --enable mysql56-community
```

確認は必要。なんかいろいろ入っているけど、面倒なのでほったらしている。

```
> yum repolist
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * epel: ftp.riken.jp
 * ius: mirrors.tongji.edu.cn
 * rpmforge: ftp.riken.jp
repo id                    repo name                status
base                       CentOS-6 - Base           6706
epel                       Extra Packages for Enter 12501
extras                     CentOS-6 - Extras           53
ius                        IUS Community Packages f   389
mackerel                   mackerel-agent               4
mysql-connectors-community MySQL Connectors Communi    49
mysql-tools-community      MySQL Tools Community       61
mysql56-community          MySQL 5.6 Community Serv   434
newrelic                   New Relic packages for E   171
rpmforge                   RHEL 6 - RPMforge.net -   4718
updates                    CentOS-6 - Updates        1185

```

## mysql をインストール

```
> yum install -y mysql-community-client mysql-community-common mysql-community-devel mysql-community-embedded mysql-community-embedded-devel mysql-community-libs mysql-community-libs-compat mysql-community-server

...

> mysql --version
mysql  Ver 14.14 Distrib 5.6.40, for Linux (x86_64) using  EditLine wrapper
```
laravel入門

##よく使用するコマンド
laravel内蔵サーバ起動
```
php artisan serve
```

モデルファイルの作成
```
php artisan make:model Message
```

コントローラーファイルの作成
```
php artisan make:controller XxxsController
```
※複数形(単数形でもOKだが複数形が推奨)で先頭が大文字

マイグレーションファイルの作成
```
php artisan make:migration create_XXXs_table --create=XXXs
```
テーブル名が複数形である理由は、テーブルの中に複数のレコードが格納されるため

マイグレーションの実行
```
php artisan migrate
```
ルーティングの確認
```
php artisan route:list
```

##tips
###7つの基本ルーティングの省略形
CRUD+詳細ページ＋新規作成用のフォームページ+更新用のフォームページは以下のように表現できる
```
Route::resource('XXXs', 'XXXsController');
```
※コントローラー名は先頭大文字

###ビューファイルでのコメント
```
{{--

--}}
```


※随時更新します
【PHP】任意の時刻を操作する（ふるいやり方）

```php
$time = "10:00:00";

# int型に変換
$tm = strtotime($time);

# 30分すすめる
date("H:i:s", $tm+(60*30));

# 結果
10:30:00
```
### ポイント
""で囲んで設定した$time時刻はstr型なので、strtotimeでint型（unixタイムスタンプ）に変換します。
すると、時刻を秒で扱えるようになるので、たとえば30分進めたいなら60秒/分*30分を足してください。
はてなダイアリー to Markdown > v0.4 > テーブル表記対応

[はてなダイアリー to Markdown > v0.1:sub list対応, v0.2-v0.3: スーパーpre記法対応](https://qiita.com/7of9/items/4e5c586431871e24ad33)
の続き

### code v0.4

テーブル表記に対応した。

https://ideone.com/lTmewC

```py
import sys

# on Python 3.5

'''
v0.4 Apr. 25, 2018
   - add conv_tableFormat()
v0.3 Apr. 25, 2018
   - conv_super_pre_notation() takes cpp notation
v0.2 Apr. 25, 2018
   - add conv_super_pre_notation()
   - add conv_sublist()
v0.1 Apr. 24, 2018
   - sub list is converted to Markdown style
'''


def conv_sublist(astr):
    if "---" in astr:
        astr = astr.replace("---", SPACE4 + SPACE4 + "-")
    if "--" in astr:
        astr = astr.replace("--", SPACE4 + "-")
    return astr


def conv_super_pre_notation(astr):
    astr = astr.replace(">||", "```")
    astr = astr.replace(">|cpp|", "```cpp")
    astr = astr.replace(">|c|", "```c")
    astr = astr.replace("||<", "```")
    return astr


def getTableFormat(numVertical):
    wrk = "|"
    for loop in range(numVertical - 1):   # -1: except for first
       wrk += ":-:|"
    return wrk


def conv_tableFormat(astr):
    global countTbl
    if "|" in astr:
        countTbl += 1
        if countTbl == 2:
            num = astr.count('|')
            fmt = getTableFormat(num)
            return fmt + "\r\n" + astr
    else:
        countTbl = 0
    return astr
    
# read from stdin
lines = sys.stdin.readlines()

SPACE4 = "    "

countTbl = 0  # Table format counter
for elem in lines:
    wrk = conv_sublist(elem)
    wrk = conv_super_pre_notation(wrk)
    wrk = conv_tableFormat(wrk)
    print(wrk, end='')

```
🍺Rubyでプログラミングコンテストをやるときの標準入力、標準出力

### はじめに
インターン選考でプログラミングテストがあったのだがボコボコにやられた。
Rubyで書いたのだがRailsしか書かないので標準入出力すら慣れておらず手間取った。
悔しいので、競プロをかじろうと思った。
c++が定番らしいが書いてて楽しくないので、Rubyで始めて高みを目指すようになったらc++に乗り換えようと思う。
Rubyで一行でスリムに書けるとありえん気持ちいい。

### 標準入力
標準入力とはターミナルから入力するアレのことである。
```chop```は改行文字を取り除くメソッド
```split```は一文字づつ分けるメソッド
```to_i```はIntegerに型変換するメソッド
```map```はマップするメソッド

```ruby
# ----　入力したいもの----
N
a1
a2
.
.
aN
# -------------------


n = gets.chop.to_i
a = []
n.times { a << gets.to_i }
```

```ruby
# ----　入力したいもの----
X Y Z
# -------------------


x, y, z = gets.chop.split.map(&:to_i)
```

```ruby
# ----　入力したいもの----
a1 a2 .... aN
# -------------------


a = gets.chop.split.map(&:to_i)
```

```ruby
# ----　入力したいもの----
N
a1  b1
a2  b2
.   .
.　　  .
aN　 bN
# -------------------
n = gets.chop.to_i
a = []
b = []
n.times do
  line = gets.chop.split.map(&:to_i)
  a << line.shift
  b << line
end
```


### 標準出力

基本的に```puts```で事足りると思う。
```"#{}"```で変数を埋め込める、

```ruby
var = "fuga"
puts "hoge#{var}"

# ----出力----
# hogefuga
```
Android gradle で buildType と productFlavor の組み合わせ別に定数を定義する

Android gradle で buildType と productFlavor の組み合わせ別に定数定義したい
定数とマニフェストと文字列リソースを定義できます  

## developer.android.com の情報

ビルドの設定
https://developer.android.com/studio/build/index.html
  
ビルド バリアントの設定（このbuildTypeとflavorの組み合わせはビルドしないよ！の設定も）
https://developer.android.com/studio/build/build-variants.html

ここには buildType, flavor が別々の説明で、組み合わせの仕組みが無いと思われる
`applicationVariants.all` 等を利用するしか無さそう
  
## 前提  
確認した環境

```(project)/build.gradle
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        ...
    }
```
  
``` (project)/gradle/wrapper/gradle-wrapper.properties
...
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
```

## 最も単純なもの
以下の方におすすめ

- よくわかってないのでシンプルな方が良い
- ベタ書き上等派

```(project)/app/build.gradle

    applicationVariants.all { variant ->
        def mergedFlavor = variant.getMergedFlavor()

        switch(true) {
            // demo 且つ debug の場合の hostNameを指定する
            case variant.flavorName == 'demo' && variant.buildType.name == 'debug':
                // manifest で ${hostName} として利用できる
                mergedFlavor.manifestPlaceholders = [hostName: "demo.debug.example.com"]

                // Java で BuildConfig.HOST_NAME として利用できる
                buildConfigField "String", "HOST_NAME", "\"demo.debug.example.com\""

                // resource で Javaから R.string.host_name として利用できる
                resValue "string", "host_name", "demo.debug.example.com"
                break

            case variant.flavorName == 'full' && variant.buildType.name == 'debug':
                ...
                break
        }
    }

```

## 他の仕組みを利用して完結に  
以下の方におすすめ

- gradle.properties 使う派
- switch 文を書くのは嫌な派

一般に、(project)/build.gradle からは (project)/gradle.properties
(project)/app/build.gradle からは (project)/app/gradle.properties を参照する
ディレクトリを跨ぐ参照はできるかもしれないけど追いづらくなるのでしない

```(project)/gradle.properties
demo_debug=demo.debug.example.com
full_debug=full.debug.example.com
```

```(project)/build.gradle
buildscript {
    ...
    ext.host_names = [
        demo: [
            debug: "${demo_debug}",
            release: "demo.release.example.com"
        ],
        full: [
            debug: "${full_debug}",
            release: "full.release.example.com"
        ]
    ]
}
```

```(project)/app/build.gradle

    applicationVariants.all { variant ->
        def mergedFlavor = variant.getMergedFlavor()
        // manifest で利用できる
        mergedFlavor.manifestPlaceholders = [hostName: host_names[variant.flavorName][variant.buildType.name]]
        // java に定義
        buildConfigField "String", "WEB_HOST", "\"${host_names[variant.flavorName][variant.buildType.name]}\""
        // resource に定義
        resValue "string", "host_name", "${host_names[variant.flavorName][variant.buildType.name]}"
    }

```
Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networksを読んだ

Agrim Gupta, Justin Johnson, Li Fei-Fei, Silvio Savarese, Alexandre Alahi, Stanford University, Ecole Polytechnique F´ed´erate de Lausanne

[arxiv](https://arxiv.org/abs/1803.10892), [pdf](https://arxiv.org/pdf/1803.10892.pdf)

#1.どんなもの？
軌跡情報から未来の軌跡をGANを使って予測する．
#2.先行研究と比べてどこがすごい？
人は自然に相手の行動を予測した上で自分の行動を決めることができる．
それを考慮し，人同士の相互関係を取り入れた．

過去の経路からは複数の可能な未来の経路が考えられる．
ＧＡＮを用いて複数の未来の軌跡を予測した．
#3.技術や手法のキモはどこにあるか？
![image.png](https://qiita-image-store.s3.amazonaws.com/0/252474/bf66af79-6501-e0e3-1d8d-49131f49dff1.png)
一人ずつLSTMにかけるだけでは対人関係を含ませられないので，プーリングモジュールを取り入れた．
##プーリングモジュール
![image.png](https://qiita-image-store.s3.amazonaws.com/0/252474/c40972ce-474b-acef-b3d5-98bdcc4bbb34.png)
人物同士の位置関係をパーセプトロンにかけて最大値プーリングした情報を加えることで人同士の関係を取り入れる．
#4.どうやって有効だと検証した？
複数のデータセットに対して既存手法と比較．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/252474/a058a01c-9afa-bd77-aa0e-7135f5fa03e6.png)

ADE:全ての時間における真値と予測のL2距離
FDE:最終目的地の真値と予測の誤差
左の結果：8ステップ(3.2秒) ，右の結果:12ステップ(4.8秒)
#5.議論はあるか？
#6.次に読むべき論文はあるか？
Social lstm: Human trajectory prediction in crowded spaces
[http://openaccess.thecvf.com/content_cvpr_2016/papers/Alahi_Social_LSTM_Human_CVPR_2016_paper.pdf](http://openaccess.thecvf.com/content_cvpr_2016/papers/Alahi_Social_LSTM_Human_CVPR_2016_paper.pdf)
Spring.NETでパラメータをセットする際にハマった

Qiita初投稿です。
お手柔らかに。

# 概要
- SQL文を動的生成する必要があった。
- さらにその中でIN句を使うケースがあった。
- パラメータを渡してもうまくSQLが生成されず、少々ハマった。

# 実装
※引数のkeysには"1"~"27"の値を渡しています。

```c#:hoge.cs
    public fugaClass findByKeys(string[] keys) 
	{
        StringBuilder query = new StringBuilder("SELECT * FROM hogeTable");
	    		
	    // WHERE句生成
	    StringBuilder conditions = new StringBuilder("WHERE key IN (");
	    for(int i=0; i < keys.length; i++) 
	    {
	        conditions.Add(" @Val" + generateAlphabet(i));
	    	if (i != keys.Length - 1) conditions.Add(",");
	    }
        IDbParameters params = CreateDbParameters();
	    for(int i=0; i < keys.length; i++) 
	    {
	        params.Add("Val" + generateAlphabet(i), DbType.String).Value = key
	    }

	    HogeCallback callback = new HogeCallBack
        AdoTemplate.QueryWithRowCallback(CommandType.Text, query.ToString(), callback, params);

        return callback.result;
    }

    private string generateAlphabet(int index) {
        string str = "";
        do {
            str = Convert.ToChar(index % 26 + 0x41) + str;
        } while ((index = index / 26 - 1) != -1);

        return str;
    }
```

## 生成されるSQL

```sql
SELECT * FROM hogeTable WHERE key IN (@ValA, @ValB,...@ValAA)
```

## パラメータを渡した後のSQL

```sql
SELECT * FROM hogeTable WHERE key IN ('1', '2',...'1'A)
```

なんじゃこりゃ。
どうやら同文字列が先に存在したらそっちに値が渡ってしまうようです。(説明下手)

# 改善

```c#:hoge.cs
    public fugaClass findByKeys(string[] keys) 
	{	    		
        StringBuilder query = new StringBuilder("SELECT * FROM hogeTable");
	    		
	    // WHERE句生成
	    StringBuilder conditions = new StringBuilder("WHERE key IN (");
	    for(int i=0; i < keys.length; i++) 
	    {
	        conditions.Add(" @Val" + generateAlphabet(i));
	    	if (i != keys.Length - 1) conditions.Add(",");
	    }
		IDbParameters params = CreateDbParameters();
        // 降順でパラメータを追加
	    for(int i=keys.length; i >= 0; i--) 
	    {
	        params.Add("Val" + generateAlphabet(i), DbType.String).Value = key
	    }

	    HogeCallback callback = new HogeCallBack
        AdoTemplate.QueryWithRowCallback(CommandType.Text, query.ToString(), callback, params);

        return callback.result;
    }

    private string generateAlphabet(int index) {
        string str = "";
        do {
            str = Convert.ToChar(index % 26 + 0x41) + str;
        } while ((index = index / 26 - 1) != -1);

        return str;
    }
```
## 生成されるSQL
```sql
SELECT * FROM hogeTable WHERE key IN (@ValA, @ValB,...@ValAA)
```
## パラメータを渡した後のSQL
```sql
SELECT * FROM hogeTable WHERE key IN ('1', '2',...'27')
```

⇒**OK!**
# まとめ
- 連番、連続した文字列でパラメータ文字列を生成した時は降順にセットを行う
- 調べてわかったが、LIKE句で実装すると楽らしい

投稿者はC#初心者です・・・。
素のコードをそのまま張り付けているわけではないので、なにか不備などありましたらご指摘お願いいたします。
（3ステップ）Rails ユーザーのサインアップ機能の作り方

##deviseを使ってユーザーのサインアップ画面を作る

###①deviseのインストール
deviseのgemをインストールします。

```ruby:Gemfile
gem 'devise' 
```

bundle installの実行

```ruby:terminal
$ #プロジェクトファイルのディレクトリに移動
$ bundle install
```

###②ビューファイルの作成
deviseのセットアップをします。

```ruby:terminal
$ rails g devise:install
```

deviseのビューファイルを作成します。

```ruby:terminal
$ rails g devise:views
```

これでapp>views>devise　←ここにファイルができたはずです。

###③ユーザーのモデル作成
ユーザーモデルを作成することで、サインアップ機能を実装できます。

マイグレーションファイルを作成します。

```ruby:terminal
$ rails g devise user
```

マイグレーションを実行し、usersテーブルを作成します。

```ruby:terminal
$ bundle exec rake db:migrate
```

（サーバーを立ち上げている場合）再起動させます。

```ruby:terminal
$ (control + c　の実行)
$ rails s
```

http://localhost:3000/users/sign_up にアクセスしてユーザーの作成画面に遷移できるか確認しましょう。
CWLでの出力の形式を指定する

CWLでの出力の形式を指定する
=====================

まだ調べ途中のメモ

# 概要

CWLで出力 output に関しても、型を指定したい

# まとめ


input についても、型を指定することが可能であるが、
output についても、同様に型を指定することができる。

https://www.commonwl.org/v1.0/CommandLineTool.html
```An output schema describes the valid format for an output object.```

ユーザーガイドでの例
http://www.commonwl.org/user_guide/16-file-formats/

実例をみてみる。

[grepのサンプル](https://github.com/pitagora-galaxy/cwl/wiki/CWL-Start-Guide-JP)
この書き方だと、出力形式が不定（現在調べ中）

grep の出力結果の定義に関して、
例えばこれとかどうだろう？
http://bioportal.bioontology.org/ontologies/EDAM/?p=classes&conceptid=http%3A%2F%2Fedamontology.org%2Fdata_2526&jump_to_nav=true

## EDAM で検索する



[EDAM bioinformatics operations, types of data, data formats, identifiers, and topics - Classes | NCBO BioPortal](http://bioportal.bioontology.org/ontologies/EDAM/?p=classes&conceptid=root)
Android のマテリアルテーマに添った設計を Delphi/C++Builder で行なうには

Android のネイティブアプリを作ることができる Delphi/C++Builder はスタイルを使って、容易に Android のマテリアルテーマに対応することができます

たとえば、[Android のマテリアル テーマの使用](https://developer.android.com/training/material/theme.html?hl=ja) にある

- 暗色バージョン
- 明色バージョン

など、それに対応するスタイルが提供されています
予め提供されているスタイルを設定するだけで作ったアプリ側に反映されるのです

## 実際にやってみよう

1. 予め、こんな感じの画面をコンポーネントをペタペタ貼って作ります (10.2.3 Tokyo を使用しています)
![qiita01.png](https://qiita-image-store.s3.amazonaws.com/0/164551/b9661e66-aee5-9ce7-1139-ddc7745c6078.png)

2. ここに TStyleBook をツールパレットから追加して、Form 側の StyleBook プロパティにコンポーネントを関連付けます
![qiita02.png](https://qiita-image-store.s3.amazonaws.com/0/164551/cf91926b-b0a4-e22a-a187-314acb9ebcdd.png)


3. フォーム上に貼った StyleBook コンポーネントをダブルクリックするとスタイルエディタに切り替わります
![qiita03.png](https://qiita-image-store.s3.amazonaws.com/0/164551/a0faebd8-ac63-4e9e-537a-6ebf92a4f242.png)

4. スタイルエディタの、ツールバーにある「ファイルを開く」ボタンをクリックして

- 暗色バージョンであれば - AndroidDark.fst
- 明色バージョンであれば - AndroidLight.fst

を選択します (10.2 Tokyo の場合、デフォルトでインストールした際は C:\Users\Public\Documents\Embarcadero\Studio\19.0\Styles\Android フォルダにあります)
5. あとはこのスタイルを適用するだけです

## こうなります ( 設計画面上で確認できる )

### 暗色バージョン
![qiita05.png](https://qiita-image-store.s3.amazonaws.com/0/164551/7744a7dd-25f9-a143-97e5-2ccc16a5c745.png)

### 明色バージョン
![qiita06.png](https://qiita-image-store.s3.amazonaws.com/0/164551/f7eb4fde-4b1c-d109-3586-96ecac0b3009.png)

IDE の設計画面上でも確認できるので便利ですね
他にもいろいろなスタイルが用意されていますし、自分でカスタマイズすることもできます
Capsule networkのactivation関数

自分メモ
たまたま論文[https://arxiv.org/pdf/1712.03480.pdf] を読んでいたらカプセルネットワークの活性化関数を以下のものに変えているのを発見
![eqn.png](https://qiita-image-store.s3.amazonaws.com/0/161216/aa28bf43-8ae7-eeee-064f-0739ded56a5f.png)

微小項のイプシロンは勝手に追加している。実際にMnistにてどれぐらいこの活性化関数で精度が50epoch/500 epoch / 1000epochで変わるのかを以下試した(Routingは３のみ)。
　　　　　　　50epo     500epo   1000epo
Squash関数　88.3%  94.5% 99.4%
提案関数 　　87.8%  95.7% 99.8%

やや不安定感もあるが、全体的に提案されている関数の方がよかった。
RedmineにガントチャートプラグインEasy Ganttを導入する

たまたまやる機会があったので。

#プログラムの入手

以下のページでGet Freeボタンを押して必要事項を入力、Submitをクリックします。
https://www.easyredmine.com/redmine-gantt-plugin

![image.png](https://qiita-image-store.s3.amazonaws.com/0/113188/15150934-1f1d-95db-7654-66d07d6fa59b.png)

ここからはサーバーへログインして作業しました。
Eメールが送られてきたら「Download Easy Gantt Free here」をクリックしてファイルをダウンロード。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/113188/7d5dce1d-40f8-1795-8ff7-83db6d81dcae.png)


#インストール

ダウンロードしたzipファイルを解凍。
unzipコマンドか解凍ソフトで展開する。
展開したeasy_ganttフォルダが置いてあるディレクトリで以下のコマンドでpluginsディレクトリへコピー。

$ sudo cp easy_gantt /var/lib/redmine/plugins
$ sudo bundle install
$ sudo bundle exec rake db:migrate RAILS_ENV=production
$ sudo bundle exec rake redmine:plugins:migrate RAILS_ENV=production
$ sudo service apache2 restart

サイトへアクセスし直すとトップメニューにガントチャートが追加された。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/113188/0b83972d-abf5-9c66-9a2a-6a3e0b591901.png)


警告が出るので、設定のAPIで「RESTによる・・・」をチェックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/113188/328b4659-7ae3-abcd-ec5a-eb7d387aa9e7.png)


![image.png](https://qiita-image-store.s3.amazonaws.com/0/113188/c39c6941-15d9-b3a1-4b20-f75f614b6f8a.png)

#Easyガントの表示/非表示
プロジェクトやサブプロジェクトの設定にEasyガントの表示/非表示の設定が現れます。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/113188/2ae6a3c9-643d-5b96-fd88-b5c3a022be98.png)

#Easyガントチャート画面の表示
成功すれば以下のようにサンプルデータの画面が表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/113188/8ec5e492-8634-2213-342e-d0dfed4746de.png)
HibernateのDDL Auto CreateでMySQLのストレージエンジンをInnoDBにする

# 目的

MySQLのストレージエンジンは最近はInnoDBがデフォルトになっています。InnoDBはそれ以前のデフォルトであったMyISAMに比べ、

* トランザクションに対応している
* 行ロックが使用できる

というメリットがあります。特に後者ですが、MyISAMの場合は特定行への更新もテーブルロックになってしまうため、Webアプリケーションのような複数のクライアントが同時に同じテーブルに更新をかけるようなケースでは、パフォーマンスの低下を招いてしまいます。

さて、手元の環境でMySQLを使ったアプリの性能測定をしていたところ、多重アクセス時に顕著にパフォーマンスの低下が見られました。調査したところ、テーブルのストレージエンジンがなぜかMyISAMになっていました。

結論から言いますと、私は性能測定アプリをSpring Boot + Spring Data JPAで開発し、テスト用のテーブルを`spring.jpa.hibernate.ddl-auto=create`で自動生成していました。このとき、相手がMySQLだと自動的にMyISAMを指定してテーブルが作成されていました。

本来はこのようなDDLの実行はアプリでやるのではなく、リリースやデプロイの仕組みの中でやるべきですので、恐らくHibernateのMySQL Dialectを作った人は、自動生成は簡易なテスト用途なので、管理が楽なMyISAMを使用する、という判断をしたのかもしれません。

しかし、テーブル定義が確定しない状態で試行錯誤しながら性能測定をしたいという特殊な事情もあったりするので、、、今回はAutoの場合でもInnoDBを使用する方法をメモします。

検証環境

* Spring Boot 2.0.1
* MySQL 8

# 手順

以下のシステムプロパティをセットします。application.propertiesではなくシステムプロパティである必要があります。

```
hibernate.dialect.storage_engine=innodb
```

Spring Bootの場合は実行時に-Dオプションで渡すのが楽でしょう。

```
java -Dhibernate.dialect.storage_engine=innodb -jar app.jar 
```

簡単でしたね。
【超シンプル】PCとモバイルのjquery切り替え


```html
<script>
  jQuery(function () {
    var ua = navigator.userAgent;
    if (ua.indexOf('iPhone') > 0 || ua.indexOf('Android') > 0 && ua.indexOf('Mobile') > 0) {
      // スマートフォン用コード
      jQuery('#output').html('<img src="/images/hoge.jpg">');
    } else if (ua.indexOf('iPad') > 0 || ua.indexOf('Android') > 0) {
      // タブレット用コード
    } else {
      // PC用コード
    }
  });
</script>

<div id="output"><div>
```

コンフリクトに疲れたので `$` ではなく `jQuery` を使用。ちゃんと動いたら `$` に置換。
出力後のhtmlは以下。

```html:html（モバイル）
<div id="output"><img src="/images/hoge.jpg"></div>
```
Railsで送信されてきた画像データを、そのままバイナリで返す

開発中のRailsアプリで、PUTで送信された画像を保存して、その画像データのバイナリを返す機能の実装が必要でした。
ほぼほぼ下の参考記事を組み合わせただけですが、備忘録として書いておきます。

# 結論
1. 画像データは`ActionDispatch::Http::UploadedFile`のオブジェクトとしてstrongパラメータに渡される
2. バイナリを返すので、 `send_data`を使って返せばよい
3. `send_data`の引数として、`ActionDispatch::Http::UploadedFile`オブジェクトの値を渡してあげる

ソースコード（例外処理とか無し。`upload_image_params`がstrongパラメータ）

```ruby
def update_image
    ... # 保存する
    send_data upload_image_params[:image].read,
              type: upload_image_params[:image].content_type,
              disposition: 'inline', stats: :ok
end
```

# 参考
[Rails でファイルをアップロードしてDBに登録する](https://qiita.com/k6i/items/d2c72394a490293277cc)
[ActionDispatch::Http::UploadedFileを読む (デバッグメモ)](https://qiita.com/selmertsx/items/2beb0d7ec0774cbbf050)
[Railsドキュメント - send_data](http://railsdoc.com/references/send_data)
1つのhubotを複数のslackにつなぐ(hubotを複数起動する)

hubotをすでにslackと連携していて、全く同じbotを別のslackに繋げたらいいな、  
起動時のパスでトークン渡してるんだから、別のトークン渡せばいいんじゃない？と思ったんです。
ところがうまくいかなかったので調べました。

雰囲気から察するに、複数起動できない時やはslack adapter関係なさそうなので、
複数のhubotを起動したかったんだけどうまくいかない！っていう時はチェックしてみてください。

## TL;DL
- hubotを複数起動するにはPORT環境変数の指定が必要なことがある
- bin/hubot はシェルスクリプトなのでお気に召すままカスタマイズ


## やってみた
エラーがでて2個目が起動しません。

```
[Wed Apr 25 2018 13:35:47 GMT+0900 (JST)] ERROR Error: listen EADDRINUSE 0.0.0.0:8080
  at Object._errnoException (util.js:1022:11)
  at _exceptionWithHostPort (util.js:1044:20)
  at Server.setupListenHandle [as _listen2] (net.js:1367:14)
  at listenInCluster (net.js:1408:12)
  at doListen (net.js:1517:7)
  at _combinedTickCallback (internal/process/next_tick.js:141:11)
  at process._tickCallback (internal/process/next_tick.js:180:9)
```

ということでググってみると、
-デフォルトでport 8080として起動する
-変更するには環境変数PORTを設定する

ということがわかりました。

また、 hubot の bin/hubot は実はshell scriptなので、こいつの中で環境変数を設定してやればいいようです。
せっかくなので、起動用のスクリプト内でtoken指定やadapter 指定もしてしまいましょう。
ついでに npm installをこのスクリプトが毎回やっているのですが、起動が遅くなるので必要なタイミングで自分でnpm installできるなら消してしまっていいと思います。

そんな感じで出来上がった起動スクリプトがこんな感じ

```shell:hubot-a
#!/bin/sh

set -e

export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"
#他と被らないPORTを指定する
export PORT=8091 
#slack token
export HUBOT_SLACK_TOKEN=xxx-99999999999-XXXXXXXXXXXXXXXXXXXX
#-a(--adaptor)でアダプターを決め打ちする
exec node_modules/.bin/hubot --name "hubots" "$@" -a slack 
```

2個目のhubotについては、これをコピーしてslack tokenとportだけ書き換えればOKです。


### 参考
[SSH \- 一つのVPSサーバーでhubotを複数起動することは可能でしょうか？\(112248\)｜teratail](https://teratail.com/questions/112248)