OmniAICreator/Qiita-1.07M huggingface dataset:
C++ Builder XE4 > TeeChart > マウスクリックにて「モジュール 'XXX.exe'のアドレス XXXでアドレスXXXに対する読み取り違反がおきました。」の発生条件と、とりあえずの対策

```txt:動作環境
C++ Builder XE4
```

### 関連

- [C++ Builder 10.2 Tokyo | XE4 > TeeChart > マウスクリック位置の値を表示する > 10.2 Tokyo:動作する | XE4: エラー](https://qiita.com/7of9/items/a41564e652009a1d7b86)

### 実装

上記のXE4で発生していたエラー。

実際の実装は以下だった。

```Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <DateUtils.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
    Chart1->Series[0]->XValues->DateTime = true;
    Chart1->BottomAxis->DateTimeFormat = L"nn:ss";

    TDateTime dt;

    dt = Now();

    double yval;
    for (int idx=0; idx < 10; idx++) {
        yval = (1+ idx) % 2;
        Series1->AddXY(dt, yval, "", clRed);
		dt = IncSecond(dt, 1);
	}

	// 項目名の変更
	Chart1->Legend->LegendStyle = lsSeries;
	Chart1->Series[0]->Name = L"XXX";
	Chart1->Series[1]->Name = L"YYY";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Chart1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
	int index = Series1->Clicked(X, Y);

    if (index != -1) {
        Chart1->Canvas->TextOutW(X+15, Y, Series1->ValueMarkText[index]);
    } else {
        Series1->Repaint();
    }
}
//---------------------------------------------------------------------------
```


![2018-10-18_17h01_21.png](https://qiita-image-store.s3.amazonaws.com/0/32870/7ed688e0-4f3d-f1ae-6c7f-04641cce651e.png)

### 問題の部分

```Unit1.cpp
	// 項目名の変更
	Chart1->Legend->LegendStyle = lsSeries;
	Chart1->Series[0]->Name = L"XXX";
	Chart1->Series[1]->Name = L"YYY";
```

項目名をもともとの「Series1」から「XXX」へ変更している。
それにより、下記の実行がエラーになるようだ (Series1が見えなくなる?)。

```cpp
	int index = Series1->Clicked(X, Y);
```

Series1を明示しない下記でも同じエラーとなった。

```cpp
	int index = Chart1->Series[0]->Clicked(X, Y);
```

### とりあえずの対策

良い方法ではないが、下記のように一時的にSeries[0]->Nameをデフォルトにすることで、エラーは回避できる。

```Unit1.cpp
void __fastcall TForm1::Chart1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
		  int X, int Y)
{
	Chart1->Series[0]->Name = L"Series1"; // アドレス読取り違反の回避のため、デフォルトの名前に一旦戻す

	int index = Series1->Clicked(X, Y);

	if (index != -1) {
		Chart1->Canvas->TextOutW(X+15, Y, Series1->ValueMarkText[index]);
	} else {
		Series1->Repaint();
	}

	Chart1->Series[0]->Name = L"XXX"; // FormShow時の名前に戻す

}
```

![2018-10-18_17h25_06.png](https://qiita-image-store.s3.amazonaws.com/0/32870/f3aff100-ce65-965b-d252-5b006e5c9c8c.png)
仮想化(Hyper-V)して使っていたUbuntuが、諸事情でネットワークをUSBテザリングにしたらインターネットにアクセスできなくなった。

# 仮想化(Hyper-V)して使っていたUbuntuが、諸事情でネットワークをUSBテザリングにしたらインターネットにアクセスできなくなった。

Windows 10 Pro
Ubuntu 18.04.1 LTS (Bionic Beaver) / Hyper-V


いやー、スマホってこういうときに便利ですね、Androidつかってます。

タイトルどおりですが、いちいち調べている時間が無いのでとりあえずドラクエで言うところの「いろいろやろうぜ」的に試した結果。

適当にやった結果なので鵜呑みにはしないでください！

責任は取りません！


普段そうそうあることではないですが、元に戻すときとかを考えてメモです。


## やったこと１

**ネットワークに繋がらないよ！**


Hyper-Vマネージから、仮想スイッチマネージャを開き、新しい仮想スイッチ(環境に合わせる)から外部ネットワークを

「Remote NDIS based Internet Sharing Device」に変更した。


## やったこと２

**DNSみつかんないよ！**

そういえば、私の環境ではMACアドレスを固定し、IPは手動設定して使っている。
それを元に戻した。

デスクトップ右上のネットワークアイコンから「有線 接続済み」、「有線設定」、有線の設定アイコンからIPv4タブを開いて「自動(DHCP)」に。


## とりあえず繋がった。

こんなんでいいのかはわからないです。
とりあえず応急処置的なものなので間違ってれば指摘していただけるとありがたいです。
kintoneの使い方 (データベース編)

# はじめに

※ この記事はkintoneを触ったことのない人を対象にしています。

kintoneはノンプログラミングかつ爆速で構築できるWebデータベースです。
他にもワークフローやコミュニケーション機能もありますが、メインはデータベースです！(断言)

そんなkintoneですが、
いきなり **「はい！今からこれ使って！」** と渡されても難しいと思います。

ってことで、そんな時のために概要をさらりと説明します。

> **▼ 連載記事一覧**

> ||タイトル|
> |---|---|
> |0|[kintone環境の取得方法 (開発者ライセンス)](https://qiita.com/RyBB/items/73c50f1751ad137ba410)| 
> |1|[kintoneの使い方 (データベース編)](https://qiita.com/RyBB/items/daabb9b60d804ee2242f) ← 本記事| 
> |2|[kintone REST API について (共通事項編)](https://qiita.com/RyBB/items/8f6ca0a0e13d5fc42759)| 
> |3|[kintone REST API について (GET編)](https://qiita.com/RyBB/items/08cf511f1dbce6cf76bf)|
> |4|[kintone REST API について (POST編)](https://qiita.com/RyBB/items/94c13ca56887558bb227)|

# データベースの作り方

kintoneでは、1つのデータベースを「アプリ」と呼びます。
アプリを複数作ることで複数の種類のデータベースを作ることができます。
わかりやすい例だと

* 案件管理アプリ (案件情報をためるDB)
* 顧客管理アプリ (顧客情報をためるDB)
* 日報管理アプリ (日々の日報をためるDB)

こんな感じで作っていきます。

## アプリの作成方法

kintone公式HPに[資料](https://kintone.cybozu.co.jp/jp/feature/date.html#document)があります。

以下、簡単に説明します！

ログイン後のトップページ (このトップのことをポータルと呼びます) の右側のアプリの＋ボタンから新規にアプリを作成します。
![image1.png](https://qiita-image-store.s3.amazonaws.com/0/153051/708c4cdd-90e0-18ae-ce82-a519865039ed.png)

はじめから作成を選んで、
kintoneのメイン機能「ドラッグ&ドロップでデータベース構築」を行います！
![gif1.gif](https://qiita-image-store.s3.amazonaws.com/0/153051/b74c5ce2-8a8f-d461-7e0d-e20c7b2dbdc5.gif)
こんな感じにほしいパーツ(フィールドと呼びます)を選びます。
日付や選択形式のものもあるのでお好みで！！

で、右上の公開を押せばもうデータベースの完成！

## データの登録方法

レコード一覧画面からぽちぽちすればできます！
![gif2.gif](https://qiita-image-store.s3.amazonaws.com/0/153051/e403d35d-4af2-f3c9-d9ec-6cca7e50746d.gif)
あら簡単！！これで中身のあるデータベースが完成です！

# おわりに

kintoneはよく **レゴブロック** と例えられます。
いろいろ用意されているパーツを組み合わせて、オリジナルのデータベースをつくることができます！


と、ここまではあくまでkintoneの標準機能の説明でしたが、
kintoneにはスタンダートコースにすることで利用できる**「API・カスタマイズ」**というものがあります。

APIを使うことで、kintoneをWebブラウザの画面操作ではなく、コマンドラインやプログラムから操作することができるようになります！！これがとても便利！！

これについては、次の記事で！

連載記事一覧

||タイトル|
|------------------|--------------------------------------|
|0|[kintone環境の取得方法 (開発者ライセンス)](https://qiita.com/RyBB/items/73c50f1751ad137ba410)| 
|1|[kintoneの使い方 (データベース編)](https://qiita.com/RyBB/items/daabb9b60d804ee2242f) ← 本記事 | 
|2|[kintone REST API について (共通事項編)](https://qiita.com/RyBB/items/8f6ca0a0e13d5fc42759)| 
|3|[kintone REST API について (GET編)](https://qiita.com/RyBB/items/08cf511f1dbce6cf76bf) |
|4|[kintone REST API について (POST編)](https://qiita.com/RyBB/items/94c13ca56887558bb227)|

それでは！≧(+･` ཀ･´)≦
シェルスクリプトでtry~exceptやbegin~rescue~endっぽいことをする

シェルスクリプトはデフォルトだとひとつのコマンドがエラーになってもそのまま実行を続けるというRubyやPythonで育った人には信じられない仕様なのですが、`set -e`をつけるとRubyやPythonのようにエラーが発生（コマンドの終了ステータスが0以外だった場合）した時点でスクリプトの実行が終了します。

ifの条件式として実行すると`set -e`の影響を受けなくなるので、Rubyの`begin~rescue~end`やPythonの`try~except`相当のことができます。

```sh
#!/bin/sh

set -eu    # このサンプルだと -e だけでよいが習慣として set -eu してる

## 当然ここで停止する
#ssh aaaaaaaaaaaaa

## サブシェルで実行してもコマンドの終了ステータスがサブシェルの
## 終了ステータスになるのでやっぱりここで止まる
#(ssh aaaaaaaaaaaaa)

## ブロックで括っても同様に止まる
#{
#  ssh aaaaaaaaaaaaa
#}

# ifの条件式として実行すると終了ステータスをもとに制御ができる
if ! ssh impossible_server_abcdefghijklmnopqrstu; then
  echo "ssh error"  # エラーだった場合実行する処理
fi

echo "end of script"
```

これでいいのかな・・・？
vue(nuxt) + TypeScriptで、propsにcustom classの型を指定する

`vue-class-component`や`vue-property-decorator`を使っていて、props等をクラス名で型指定したい場合。

下記の様なクラスがあったとして、

```typescript:person.ts
export class Person {
  firstName: string;
  lastName: string;
}
```

下記の様に、componentでpropsのtypeをクラス名で縛ると、実行時エラー（ビルドは通るがブラウザ上でエラー）になる。

```typescript:pattern1(vue-class-component)
@Component({
  props: {
    someone: Person
  }
})
```

```typescript:pattern2(vue-property-decorator)
export default class SomeComponent extends Vue {
  @Prop() someone: Person;
}
```

下記の様な指定をすれば問題なく動く。


```vue:SomeComponent.vue
<template>
  <div/>
</template>

<script lang="ts">
import { Component, Vue, Prop } from 'vue-property-decorator';

@Component
export default class SomeComponent extends Vue {
  @Prop({ type: Object }) someone: Person;
}
</script>
```

これって補完が効く以外に意味あるのかわからないけど、とりあえず。
現状にいたるまでのメモと現状の問題点

#twitter bot作成の理由
現在大学院に通っているが、研究室ではテキストマイニングの研究が中心であり、対話システムなどの研究がないので個人的に初めてみたいと思ったことがきっかけである。
そこでまずは、twitter上にbotを作ることにしてみた。

この記事はメモ書きです。時間あるときにしっかりと細かい内容や、データの取得などの方法も記述できればと思います。ご了承ください。

#bot作成の事前準備
各種keyの取得をする。
そのために、Twitter [Twitter Apps](https://apps.twitter.com/)に登録が必要。
登録は以下のサイトを参考にした。
[PythonでTwitter API を利用していろいろ遊んでみる](https://qiita.com/bakira/items/00743d10ec42993f85eb)
以下の流れで各種keyの取得をする。
1.[Twitter Apps](https://apps.twitter.com/)にアクセス
2.[Create New App]で新規appを作成する
3.各種keyを手に入れる
    Consumer Key(API Key)
    Consumer Secret(API Secret)
    Access Token
    Access Token Secret

#自動ツイートのプログラム
以下を参考にした
[Twitterのbotをpythonで作成する手順](https://qiita.com/yuki_bg/items/96a1608aa3f3225386b6)

#自分のタイムラインの取得のプログラム
以下を参考にした
[PythonでTwitter API を利用していろいろ遊んでみる](https://qiita.com/bakira/items/00743d10ec42993f85eb)

ここで問題が起こっていて、自分のタイムラインの取得はできているが、リプライをもらってもリプライ情報がnoneのままであり、リプライの取得ができない。
詳しい方いたら、原因をコメントで教えていただけると幸いです。
リプライをいれても
'in_reply_to_status_id': None, 
'in_reply_to_user_id': None, 
'in_reply_to_user_id_str': None,
取得できる情報はnoneのままで困っています。
KotlinでOperatorを拡張する（作る）


Operatorの拡張というやつを初めてやったのでメモ

## Operator

まず「Operator」ってなんぞって人は手をあげてー！
このサンプルプログラムでいう「+」のことです

```kotlin
val a = 1
val b = 3

val a_plus_b = a + b
```

今回やるのは比較演算子です

## 背景

ZonedDateTimeという日付をいい感じに管理してくれるやつがあるんですけども
それのcompareToがNullableを許容してなかった

```kotlin
val dateA: ZonedDateTime? = null
val dateB: ZonedDateTime? = null

if (dateA > dateB) { // この比較ができない
..
```

これこのまま無理くりやるとこんなんになっちゃう

```kotlin
if (dateA?.let { left ->
        dateB?.let { right ->
            left.compareTo(right)
        } ?: true
    } ?: false) {
..
```

**読めん！！！！！**

## つくった

Kotlinではこういう比較演算子も拡張できたりする

`operator fun [Class].[Operator](target: Class): Return`

```kotlin
/**
 * ZonedDateTimeのNullableケースにおける比較演算子拡張
 *
 * both is null -> 0
 * left is null -> -1
 * right is null -> 1
 * both is not null -> left.compareTo(right)
 */
operator fun ZonedDateTime?.compareTo(target: ZonedDateTime?): Int {
    return this?.let { left ->
        target?.let { right ->
            left.compareTo(right)
        } ?: 1
    } ?: if (target == null) 0 else -1
}
```

これで無事こう書けるようになり、要所要所でみやすくなった

```kotlin
val dateA: ZonedDateTime? = null
val dateB: ZonedDateTime? = null

if (dateA > dateB) { // 日付がBより新しい場合
..
```

## 参考

こちらは公式ドキュメント: Operator overloading
https://kotlinlang.org/docs/reference/operator-overloading.html

他のOperatorの書き方なんかが載ってます。
x++ みたいなのも新しくかけまっせ
OpenZeppelinのERC20Burnableの目的


こんにちはJPです。(https://twitter.com/salvacion_jp)

トピックはERC20Burnableについてです。This article tackles how tokens are issued and burned.

#OpenZeppelin 
This is a library for secure smart contract development.

https://github.com/OpenZeppelin/openzeppelin-solidity

#ERC20Burnableとは

これは不可逆的に焼けたされた可能性のあるトークンです。

Source: token/ERC20/ERC20Burnable.sol

#ERC20BurnableのFunction
##_burn

Overrides ERC20._burn in order for burn and burnFrom to emit an additional Burn event.

引数:
who - address
value - uint256

function _burn(address who, uint256 value) internal

##burn

Burns a specific amount of tokens.

引数:
value - The amount of token to be burned.

function burn(uint256 value) public

##burnFrom

Burns a specific amount of tokens from the target address and decrements allowance.

引数:
from - address The address which you want to send tokens from
value - uint256 The amount of token to be burned

function burnFrom(address from, uint256 value) public

https://openzeppelin.org/api/docs/token_ERC20_ERC20Burnable.html

#ERC20Burnableの必要性

##Scalability and Security
トークンの作成中に、トークンの初期供給が定義される。 すべては当初契約作成者に属します。Function は、契約作成者だけが呼び出し可能で、呼び出されるとさらに多くのトークンを発行します。 

これからの新しいトークンは、まず契約作成者になります。

#Issue and Burn

function issueTokens(uint256 _extraTokens) public{ 
    // Make sure only the contract creator can call this
    require(msg.sender == creator);
    balances[msg.sender] = balances[msg.sender].add(_extraTokens);
    //We have to emit an event for each token that gets created
    for(uint i = maxId.add(1); i <= maxId.add(_extraTokens); i++){
        emit Transfer(0x0, creator, i);
    }
    maxId += _extraTokens; //<- SafeMath for this operation 
    // was done in for loop above
}

As per the article, in both the cases of addition add function from SafeMath was used　so that it would not result to a huge value of _extraTokens.

function burnToken(uint256 _tokenId) external{
    address owner = ownerOf(_tokenId);
    require ( owner == msg.sender 
        || allowance[_tokenId] == msg.sender
        || authorised[owner][msg.sender]
    );
    burned[_tokenId] = true;
    balances[owner]--;
    emit Transfer(owner, 0x0, _tokenId);
}

#Summary

ERC 721のトークンは、より具体的なものを表します。トークンホルダーがより多くのトークンを作成できるようにしたくない場合、functionを使います。

https://medium.com/coinmonks/jumping-into-solidity-the-erc721-standard-part-3-5f38e012248b


ありがとうございました。
2年ぶりにGitを使ったのでコマンドを書いておく

#コマンド一覧
- cloneする

`$ git clone "URL"`

- リモートブランチを確認

`$ git branch -r`

- リモートから最新情報を持ってくる

`$ git fetch`

- リモートにあるブランチを持ってくる

`$ git checkout -b "ローカルブランチ名" origin/"リモートブランチ名"`

- （例）リモートにあるブランチを持ってくる

`$ git checkout -b test origin/test`

- 作業ブランチを切る

`$ git checkout -b "開発用のブランチ名"`

- リモートブランチでローカルブランチを最新化

`$ git pull --rebase origin "ブランチ名"`

- ステータス確認

`$ git status`

- Gitの管理対象に入れる

`$ git add "ファイル名"`

- コミット

`$ git commit`

- リモートにPush

`$ git push origin "開発用のブランチ名"`

- ブランチ切り替え

`$ git checkout "ブランチ名"`

- マージ（プルリクがコンフリクトした時にローカルで修正する）

`$ git merge --no-ff "マージする側"`

- マージ済みローカルブランチ削除

`$ git branch -d "ブランチ名"`

- ローカルブランチ削除

`$ git branch -D "ブランチ名"`
AWS EC2にPython3をインストールして、SlackBotを動かしてみた

#やろうと思ったきっかけ
「今までクラウドなんてさわったことない....でも今携わっているサービスはAWSで運用しているし、インフラ周り勉強しておきたいよね！」

#で、何から勉強すりゃいいのよ
「AWSのサービス多すぎてﾜｶﾗﾅｲ」

#今プロジェクトで使ってるAWSのサービスを洗い出してみる
- Elastic Beanstalk
- EC2
- RDS(Aurora)
- Lambda
- S3
- Elasticsearch Service
- CloudFront
- CloudWatch
- API Gateway

etc...

とりあえずEC2でサーバ立てるか（ﾎﾞｿｯ
コンソール触るのも慣れるっしょ...

#コンソールにログインだ！
![スクリーンショット 2018-10-18 14.47.49.png](https://qiita-image-store.s3.amazonaws.com/0/262530/d101c8ed-6938-47d4-f2d1-522d1caaa4d8.png)

#「EC2」を検索！
![スクリーンショット 2018-10-18 14.50.36.png](https://qiita-image-store.s3.amazonaws.com/0/262530/f01e4d50-c2a7-2086-fe48-d6b9616a7d65.png)

#インスタンスの作成
![スクリーンショット 2018-10-18 14.53.36.png](https://qiita-image-store.s3.amazonaws.com/0/262530/23c67491-b739-c40e-5346-6a13b88b820b.png)

#:thinking:
![スクリーンショット 2018-10-18 14.55.13.png](https://qiita-image-store.s3.amazonaws.com/0/262530/f5b9896f-dc9b-ebfd-e950-c42123278d39.png)
*Amazon Linux 2 AMI (HVM), SSD Volume Typeをえらびました。*

#設定
デフォルトでどんどん進んで最後の画面で「作成」を押すと、インスタンス一覧画面に戻り、一覧に１つインスタンスが表示されます。
**※鍵ファイルがどこかのタイミングで生成されます。ssh接続の時に必要なのでなくさないよう注意しましょう。**
この時点ではまだ作成が終わっていなくて、インスタンスの状態が「running」になるまで数分待ちます。ボタンをポチポチするだけでインスタンスが作成できました。

#なんか動かしてみたい
このままだとただサーバが立っているだけなので、何か動かしてみようと思います。
ローカルで動かしていたPythonで書いたSlackBotを、このEC2インスタンスに乗せてみます（SlackBotの具体的な実装については割愛）。

#EC2インスタンスにsshで接続
![スクリーンショット 2018-10-18 15.06.51.png](https://qiita-image-store.s3.amazonaws.com/0/262530/4a8d5554-0509-27ee-dd15-9b8835b9b54c.png)
一覧で対象のEC2インスタンスを選択、「接続」ボタンを押下すると、コマンドを教えてくれます。
![スクリーンショット 2018-10-18 15.08.12.png](https://qiita-image-store.s3.amazonaws.com/0/262530/fa375387-c85b-d32a-6983-f7dd9c4db57f.png)

```shell
#ファイルの権限エラーの場合は下記を実行
chmod 400 [鍵ファイル名]
#接続コマンド
ssh -i [鍵ファイル名] [EC2インスタンスのエンドポイント]
```

#ログイン
![スクリーンショット 2018-10-18 15.16.12.png](https://qiita-image-store.s3.amazonaws.com/0/262530/58a42bf0-f282-f500-01af-4eb768632adc.png)

#必要なモジュールをインストール
-　git
-　pyenv(パス通す)

pyenvのデフォルトがPython2系だったので、3.6.2を入れました。
3.6.2をインストールするときに必要なモジュールはエラーのたびに追加しました。

#環境が整ったら
```shell
#ssh切断後も動いててほしい
nohup python xxx.py &
```
>start slackbot

のログが出力されてで起動成功。

#動かしてみた
SlackでBotをinviteして話しかけたらレスポンスが帰ってきた！！

ここまで読んでくださりありがとうございました。
機会があったらSlackBot側についても記事を書いてみたいと思います。
Swiftのバージョンを確認する方法

ターミナルを起動後、以下のコマンドを入力する。

swift -version


例）
$ swift -version
Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1)
Target: x86_64-apple-darwin17.7.0
【PHP】fgetcsv()とcurrent()の違い簡易備忘録

# 行取得の動きまとめ

`$fileObj->current();`
`$fileObj->fgetcsv();`
上記2点の動き

CSVファイルに3行あると仮定。

```
$fileObj->current(); //1行目の情報取得。
```
これは普通に１行目を取得する。

```
$fileObj->fgetcsv(); //1行目の情報取得。
```
これも１行目。

```
$fileObj->current(); //1行目の情報取得。
$fileObj->current(); //1行目の情報取得。
```
これも現在の位置だから１行目。

```
$fileObj->current(); //1行目の情報取得。
$fileObj->fgetcsv(); //2行目の情報取得。
$fileObj->current(); //2行目の情報取得。
```
これは`fgetcsv`すると２行目になる。現在いる次の行を取得してきてくれる。
`current`をすると現在の行取得は変わらず。

# 考察

おそらく初期値というのはなく、最初のみ`fgetcsv`と`current`が違った動きをするなという印象。
そこから進んでしまえば`current`は現在いる行の情報取得、`fgetcsv`は次の行の情報取得という動きをしてくれる。
OpenID Connect 対応してるWebサービス/製品のログイン認証関連のドキュメントリンク集

OpenID Connect 対応してるとか言っても、仕様上はOptionalだったり、定義されてなかったりで、実装上解釈の余地があるいろいろです。

というわけで、各社の現実的な実装はどうなってるのかなって思って調べるのに、リンク集をまとめておく。

特になにかを網羅するものではないですが、元ネタとしてOpenID Certificationのリンク集を参考にしております。

参考:
- [OpenID Certification](https://openid.net/certification/)
- [Certified OpenID Connect Implementations](https://openid.net/developers/certified/)

ただ上記はリンクの安定性のためか、サービス/製品のトップページとかにリンクされているものが多いようです。
が、どちらかと言えば、開発者向けのドキュメントのトップページのリンクが欲しいねん。
なので、以下は多少リンクが不安定で、時間が経つと、リンク切れなどする可能性あるけどごめんね。

ここでの分類は、便宜上、最低限OpenID Connect (Basic OP) のプロファイルをパスしているものを、OpenID Connect準拠のサービスとして分類しています。
あと数が多いので、いつくか気になったものをピックアップしたものだけですが、これが載ってないとか、あれが載ってないとかは、特に深い意味はありません。

# OpenID Connect準拠のWebサービス
* Google: https://developers.google.com/identity/protocols/OpenIDConnect
* LINE: https://developers.line.me/ja/docs/line-login/overview/
* PayPal: https://developer.paypal.com/docs/integration/direct/identity/
* Yahoo! Japan: https://developer.yahoo.co.jp/yconnect/

# OpenID Connect準拠のSaaS
* Auth0: https://auth0.com/docs/protocols/oidc
* Authlete: https://www.authlete.com/documents/definitive_guide/

# OpenID Connect準拠のOSS
* Keycloak: https://www.keycloak.org/documentation.html
* OpenAM: https://backstage.forgerock.com/docs/openam
* ORY Hydra: https://www.ory.sh/docs/guides/master/

# OpenID Connect準拠ではないサービス
* GitHub: https://developer.github.com/apps/building-oauth-apps/
* Facebook: https://developers.facebook.com/docs/facebook-login
* Twitter: https://developer.twitter.com/en/docs/twitter-for-websites/log-in-with-twitter/login-in-with-twitter
* Microsoft Azure: https://docs.microsoft.com/ja-jp/azure/active-directory/develop/
[ReactNative]未使用のstyleをESLintで検知したい

## 背景

- プロジェクトが大きくなっていくとstyleの管理が煩雑になり未使用のstyleが放置されがち
- コンポーネントの粒度を小さく作れていれば気づけるかもしれないが現実はそうも行かない場面が多い
- ESLintで検知できたら楽でいいなと思って調べた

## やり方

- [eslint-plugin-react-native](https://github.com/Intellicode/eslint-plugin-react-native)を使う
- 以下ほとんどREADMEに書いてることそのまま

```
npm i -D eslint eslint-plugin-react eslint-plugin-react-native
# or
yarn add -D eslint eslint-plugin-react eslint-plugin-react-native
```

- ESLintの設定に以下の内容を追加

```config:.eslintrc
{
  "env": {
    "react-native/react-native": true
  },
  "plugins": ["react", "react-native"],
  "rules": {
    "react-native/no-unused-styles": 2,
    "react-native/split-platform-components": 2,
    "react-native/no-inline-styles": 2,
    "react-native/no-color-literals": 2,
    "react-native/no-raw-text": 2
  }
}
```
- 使われていないstyleを検知したいだけなら`no-unused-styles`だけでOK
- エディタと連携していれば赤線がついてすぐに分かる！

<img width="312" alt="スクリーンショット 2018-10-18 19.24.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/175213/fcdd1acf-4c99-9e88-02de-f2b372830c2a.png">
RelayCommand<T>クラス（MVVM Light Toolkit リファレンス）

# RelayCommand&lt;T&gt;
## 概要

```csharp
public class RelayCommand<T> : System.Windows.Input.ICommand
```

- `ICommand`インターフェイスを実装したコマンド。
- コマンドに渡す`CommandParameter`の型は`T`である。

##### 名前空間
- `GalaSoft.MvvmLight.Command`
- `GalaSoft.MvvmLight.CommandWpf`（WPF バージョン4.5、つまりWindows 8以上はこちらを使うこと）

#### アセンブリ
- GalaSoft.MvvmLight
- GalaSoft.MvvmLight.Platform（`GalaSoft.MvvmLight.CommandWpf`名前空間）


## メソッド
### コンストラクター
<details><summary>コンストラクター</summary><div>

```csharp
public RelayCommand(System.Action<T> execute, bool keepTargetAlive = false)
public RelayCommand(System.Action<T> execute, System.Func<T, bool> canExecute, bool keepTargetAlive = false)
```

##### 概要
- `execute`は、コマンドを実行するときに呼ぶメソッド。
- `canExecute`は、コマンドを実行できるかどうかを判定するメソッド。`canExecute`を指定しない場合は、コマンドが常に実行できるとみなす。
- `keepTargetAlive`は、`execute`や`canExecute`がクロージャーの場合、`true`にすること。それ以外の場合は、メモリリークを防ぐため、`false`にすること。

##### 例外
- `System.ArgumentNullException`: `execute`が`null`である。
</div></details>


### CanExecute
<details><summary>CanExecute</summary><div>

```csharp
public bool CanExecute(object parameter)
```

##### 概要
- コマンドを実行できるかどうかを判定するメソッド。
- コンストラクターで`canExecute`を指定していれば、それを呼ぶ。`parameter`は、`T`に型変換してから`canExecute`に渡される。
- コンストラクターで`canExecute`を指定していなければ、常に`true`を戻す。

##### 戻り値
- コマンドを実行できる状態なら`true`、実行できないなら`false`を戻す。（そのような`canExecute`を指定すること）
</div></details>


### Execute
<details><summary>Execute</summary><div>

```csharp
public virtual void Execute(object parameter)
```

##### 概要
- コマンドの実行そのものであるメソッド。
- コンストラクターで指定した`execute`を呼ぶ。`parameter`は、`T`に型変換してから`execute`に渡される。
</div></details>


### RaiseCanExecuteChanged
<details><summary>RaiseCanExecuteChanged</summary><div>

```csharp
public void RaiseCanExecuteChanged()
```

##### 概要
- このコマンドを実行できるかどうかが変化するときに、このメソッドを呼び出すこと。
- `CanExecuteChanged`イベントを起こす。
</div></details>


## イベント
### CanExecuteChanged
<details><summary>CanExecuteChanged</summary><div>

```csharp
public event System.EventHandler CanExecuteChanged
```

##### 概要
- このコマンドを実行できるかどうかが変化するときに起きるイベント。
- `RaiseCanExecuteChanged`メソッドを呼ぶことで、起きる。
</div></details>


## 参照
- [目次](https://qiita.com/h084/items/c5355fa734936c56ca50/)
- [RelayCommand](https://qiita.com/h084/items/7777282333f93dff2561)
RelayCommandクラス（MVVM Light Toolkit リファレンス）

# RelayCommand
## 概要

```csharp
public class RelayCommandRelayCommand : System.Windows.Input.ICommand
```

- `ICommand`インターフェイスを実装したコマンド。
- このコマンドは、`CommandParameter`を使用しない。

##### 名前空間
- `GalaSoft.MvvmLight.Command`
- `GalaSoft.MvvmLight.CommandWpf`（WPF バージョン4.5、つまりWindows 8以上はこちらを使うこと）

#### アセンブリ
- GalaSoft.MvvmLight
- GalaSoft.MvvmLight.Platform（`GalaSoft.MvvmLight.CommandWpf`名前空間）


## メソッド
### コンストラクター
<details><summary>コンストラクター</summary><div>

```csharp
public RelayCommand(System.Action execute, bool keepTargetAlive = False)
public RelayCommand(System.Action execute, System.Func<bool> canExecute, bool keepTargetAlive = False)
```

##### 概要
- `execute`は、コマンドを実行するときに呼ぶメソッド。
- `canExecute`は、コマンドを実行できるかどうかを判定するメソッド。`canExecute`を指定しない場合は、コマンドが常に実行できるとみなす。
- `keepTargetAlive`は、`execute`や`canExecute`がクロージャーの場合、`true`にすること。それ以外の場合は、メモリリークを防ぐため、`false`にすること。

##### 例外
- `System.ArgumentNullException`: `execute`が`null`である。
</div></details>


### CanExecute
<details><summary>CanExecute</summary><div>

```csharp
public bool CanExecute(object parameter)
```

##### 概要
- コマンドを実行できるかどうかを判定するメソッド。
- コンストラクターで`canExecute`を指定していれば、それを呼ぶ。
- コンストラクターで`canExecute`を指定していなければ、常に`true`を戻す。

##### 戻り値
- コマンドを実行できる状態なら`true`、実行できないなら`false`を戻す。（そのような`canExecute`を指定すること）
</div></details>


### Execute
<details><summary>Execute</summary><div>

```csharp
public virtual void Execute(object parameter)
```

##### 概要
- コマンドの実行そのものであるメソッド。
- コンストラクターで指定した`execute`を呼ぶ。
</div></details>


### RaiseCanExecuteChanged
<details><summary>RaiseCanExecuteChanged</summary><div>

```csharp
public void RaiseCanExecuteChanged()
```

##### 概要
- このコマンドを実行できるかどうかが変化するときに、このメソッドを呼び出すこと。
- `CanExecuteChanged`イベントを起こす。
</div></details>


## イベント
### CanExecuteChanged
<details><summary>CanExecuteChanged</summary><div>

```csharp
public event System.EventHandler CanExecuteChanged
```

##### 概要
- このコマンドを実行できるかどうかが変化するときに起きるイベント。
- `RaiseCanExecuteChanged`メソッドを呼ぶことで、起きる。
</div></details>


## 参照
- [目次](https://qiita.com/h084/items/c5355fa734936c56ca50/)
- [RelayCommand&lt;T&gt;](https://qiita.com/h084/items/ceb520743bb04d6bef1b)
paizaスキルチェックの表を出力する問題におけるPython3での正解方法

paizaのスキルチェックで、例えば以下のような出力をすれば正解となる問題があったとします。

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

当初、自分は以下のようなPython3のコードを書きましたがどうしても通りませんでした。

```
cells = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]]

for row in cells:
  for cell in row:
    print(cell, end = " ")
  print()
```

paizaには以下のようにありますが……

> 期待する出力と出力結果が同じに見えるのに失敗になる場合、半角スペースや改行の数が異なっていると考えられます。 
余分な半角スペースや改行がないかを今一度ご確認ください。

「行の末尾にスペースを入れる／入れない」「最終行の末尾に改行を入れる／入れない」と、考えられるパターンをいろいろ試してもすべて不正解になります。

困り果ててしばらくの間、放置していたのですが、改めていろんな出力の仕方を調べたところ、以下のような書き方によって解決できました。

```
cells = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]]

for row in cells:
  print(*row)
```

`print(*list)`で「listの各要素を一つずつ展開して出力せよ」という意味になります。どうもこれを使わないと通らないみたいなんですね。

~~このアスタリスクの使い方は、少なくともネット上ではあまりメジャーでなく、ノーヒントで辿り着くのは難しいと思ったので記事として書いておきました。~~
@shiracamus さんよりコメント欄にてご指摘いただきました。zip関数で引数展開はよく使われるとのことです。
FireBaseをつかってTwitterのようなタイムラインを表示させたい

#ツイッターのようなタイムラインを表示させたい
Firebaseのデータ取得の処理は非同期処理なのでツイッターのタイムラインのように画像とデータベースのデータを特定の順番で表示させる場合、何も考えずに表示させると画像がずれたりするため再帰的にデータを取得させに行く方法がおすすめです。

```java.Timeline.java
public class Timeline extends AppCompatActivity{

     //取ってきたデータベースのデータを入れるList
     private ArrayList<String> getDate = new ArrayList<>();
    
     //画像の参照取得
     private ArrayList<StorageReference> spaceRef = new ArrayList<>();

     //DatabaseReferenceオブジェクト作成
     private DatabaseReference mDatabase;

     //FireBaseストレージ
     private FirebaseStorage storage = FirebaseStorage.getInstance();

     //ストレージ
     private StorageReference storageRef = storage.getReference();

    //カウント変数
    private int Count = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

          //Databaseへの参照取得
          mDatabase = FirebaseDatabase.getInstance().getReference();

          //FireBaseのイベント
          mDatabase.addValueEventListener(new ValueEventListener() {
               @Override
               public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                //取りたいデータ
                Object getObject = postSnapshot.child(/*取りたいデータ*/).getValue();

                //取得データのnullチェック
                if(getObject != null) {

                       //リストに格納
                       getDate.add(getObject .toString());

                       //画像の参照取得
                       spaceRef.add(storageRef.child(/*参照画像*/));

                       //取りに行きたい画像の処理
                       getPhoto();

                }
          }
     }
    //画像取得
    private void getPhoto() {
        int Listsize = spaceRef.size();
        //リスト外を見るのを回避
        if(Count < Listsize) {
            final long ONE_MEGABYTE = 1024 * 1024;
            //ストレージイベント
            spaceRef.get(Count).getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
                @Override
                public void onSuccess(byte[] bytes) {
                      //サムネイル画像取得
                      Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);


                      /*リストビューに追加する処理を入れる*/

                      Count++;

                      getPhoto();

                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                }
            });
     }
}
```
オリジナルのリストビュー作成済みで、あと一歩のところで躓いてる人向けに書いたのでかなり適当ですが（実際に使っている処理は参考にならないと思われます）、一先ず自分はこれでなんとかできました。
あと、javaなのでnullチェックはしっかりしたほうが個人的にはいい気がします。
友人がGithubで公開したのでリンクを乗せておきます。StutdentTimeline.javaとTeacherStudent.javaがこの方法を実際に使っています。
https://github.com/wasabimochi/ivycon
気が向いたときにしっかり綺麗に書いて投稿しようと思います（するとは言ってない）。
質問があればコメントください。
ではまた。
Shader Forge のStencil Op&Comparisonの値

自分用メモ
https://docs.unity3d.com/ja/current/Manual/SL-Stencil.html
https://forum.unity.com/threads/stencil-op-comparison-values.362425/
ここを参照

##Comparison Functions
0 - Always (?) 
1 - Never 常にステンシルテストを通しません。
2 - Less ピクセルのレファレンス値がバッファの値より小さい場合のみレンダリングします。
3 - Equal ピクセルのレファレンス値がバッファの値と等しい場合のみレンダリングします。
4 - LEqual ピクセルのレファレンス値がバッファの値より小さいか等しい場合のみレンダリングします。
5 - Greater ピクセルのレファレンス値がバッファの値より大きい場合のみレンダリングします。
6 - NotEqual ピクセルのレファレンス値がバッファの値と等しくない場合のみレンダリングします。
7 - GEqual ピクセルのレファレンス値がバッファの値より大きいか等しい場合のみレンダリングします。
8 - Always (Default) 常にステンシルテストをパスさせます。


##Stencil Operations
0 - Keep (?) バッファの現在コンテンツを保持します。
1 - Zero バッファに 0 を書き込みます。
2 - Replace リファレンス値をバッファに書き込みます。
3 - IncrSat バッファの現在値をインクリメントさせます。値がすでに 255 の場合は 255 のままです。
4 - DecrSat　バッファの現在値をデクリメントさせます。値がすでに 0 の場合は 0 のままです。
5 - Invert　すべてのビットを反転させます。
6 - IncrWrap　バッファの現在値をインクリメントさせます。値がすでに 255 の場合は 0 にします。
7 - DecrWrap　バッファの現在値をデクリメントさせます。値がすでに 0 の場合は 255 にします。
iPhoneの画面左端のタッチが0.75秒遅れる件

3D Touchを搭載したiPhoneには、画面左端(本当に端っこで全体の3%くらい)を長押しすると、実行中のアプリを選択するAppSwitcherが表示される機能があるんですが、これが悪さをして、タッチしてもOSからアプリ側へのイベントの発行が0.75秒遅れる or 手を離さないとtouchesBeganが来ない、という仕様があります。

ただこれ、iOSのバージョンや機種によって発生するしないがあるようで(正直よく分からなかった)、なかなか困ったところなんですが、iOS設定のアクセシビリティで3D Touch自体をOFFにすることが可能なのと、Appleの2018年の新製品戦略を見る限りは今後3D Touchを標準搭載にはしないっぽいので、

「仕様です」

で押し通してしまいましょう！！

※ご参考
Appleは、iPhone XRで3D Touchが失敗であることを認めた
https://jp.techcrunch.com/2018/09/17/2018-09-14-the-iphone-xr-shows-apple-admitting-3d-touch-is-a-failure/
Google Tasksのtasklistidの調べ方 by GAS

小ネタ、というか本当にこの方法しかないのでしょうか？ブラウザ、iOSのアプリからだと調べられませんでした…カレンダーはブラウザ上の設定画面からわかるんですが。

単にGoogle Apps Scriptで全タスクリストを取得して出力してるだけです。

```javascript
var list = Tasks.Tasklists.list();
list.items.forEach(function(item) {
  Logger.log(item.title + " : " + item.id); 
});
```

実行してメニュー「表示」→「ログ」を見ると↓のように表示されます。コロンの左がタスクリストの名前で、緑の部分にtasklistidが出力されます。デバッガに慣れているのであれば、list変数を覗いたほうが手っ取り早いです。

![スクリーンショット 2018-10-18 14.29.08.png](https://qiita-image-store.s3.amazonaws.com/0/23715/913b8a8b-f787-77e2-a4f6-5d9498a9a4f5.png)

このtasklistidを使えば、gasから各種タスクリストへタスクの追加・削除等できます[（公式リファレンス）](https://developers.google.com/apps-script/advanced/tasks)。

わからなかっただけでブラウザ上から調べる方法、きっとあると思うのですが…ご存知の方いらっしゃいませんか？
Redmine Auto Assign Group Pluginを利用した自動グルーピング

# やりたいこと
AD(LDAP)連携させて初回ログインする際にRedmineにユーザが自動作成されるのは標準機能で実装は可能。
多くのユーザは【利用者】というロールを割り当てたいため、【利用者】のグループに入れる必要がある。
2,3000人近いユーザを登録されるたびにグループ、ロール変更するのは非効率。
アカウントが作成される際に自動的に【利用者】グループに入るようにしたい。

# 必要なプラグイン
Redmine Auto Assign Group Plugin
https://github.com/two-pack/redmine_auto_assign_group

# 使用方法
このプラグインを入れると【管理】→【グループ】→【対象グループ名】に
【ルール】というタブが増えます。
メールアドレスで判定させたいので、とりあえず全メールアドレスを対象にして設定。
ルールの記載は下図を参照

![自動グループ.PNG](https://qiita-image-store.s3.amazonaws.com/0/207850/1ddc3da5-5558-8279-9225-a915d2e5f470.png)

これでRedmineに新しいユーザが作られると自動的に【利用者】グループに入り、【利用者】ロールが割り当てられるということが実現。
tesseractを使ってみよう（初心者編）

# はじめに

OCRに触れてみようということで、オープンソースで手軽に試せるtesseractを使ってみることにしました。
ここでは、画像を読み込ませて、画像内の読み取った文字列を出力するまでにやったことをメモに残しました。

ここでは、3系のインストールになっているので、すんなり4系が入らない場合は、[こちら](https://qiita.com/tifa2chan/items/ce3ff1565a1124eabae0)。


# tesseractとは

* https://github.com/tesseract-ocr/tesseract/wiki
* オープンソースのOCRエンジン
* Apache2.0 licence
* 画像内にあるテキストを読み取って出力

# インストール

上記のサイトを見ながら、Ubuntu 16.04.4 LTS にインストールしてみます。

* コマンドの実行

```
$ sudo apt install tesseract-ocr
$ sudo apt install libtesseract-dev
```

* インストール後の確認

```
$ tesseract -v
tesseract 3.04.01
 leptonica-1.73
  libgif 5.1.2 : libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8 : libwebp 0.4.4 : libopenjp2 2.1.2
```

# 実行してみる

* まずは普通に実行
 * 出力先ファイルは、output.txtになる。（拡張子は自動的に付与される）
 * 
```
$ tesseract test.png output
```

* **-l jpn** のオプション追加で日本語指定をすると何やらエラーが…

```
$ tesseract test.png output -l jpn
Tesseract Open Source OCR Engine v3.04.01 with Leptonica
Error opening data file /usr/share/tesseract-ocr/tessdata/jpn.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
Failed loading language 'jpn'
```

# 日本語対応をさせる

* 下記サイトから日本語の言語ファイルを落としてくる
 * https://github.com/tesseract-ocr/tessdata
* 上記のエラーメッセージにもあるとおり、/usr/share/tesseract-ocr/tessdata/ に日本語用のファイルがないというので、そこに保存

```
$ wget https://github.com/tesseract-ocr/tessdata/raw/master/jpn.traineddata
```
* 再度日本語指定で実行してみると問題解消！
* 補足：エラーメッセージにあるように、環境変数（TESSDATA_PREFIX）で指定するという方法もあるようです。

# 結果

[PythonのWiki](https://ja.wikipedia.org/wiki/Python)の目次のスクリーンショットを撮って試してみた結果がこちら。
きれいに読み取っているところもあれば、何がなんだか分からないのもあり。

読み込ませた画像(左)とその結果(右)

![test04xx.png](https://qiita-image-store.s3.amazonaws.com/0/92328/17b65fba-ca7c-d8ff-a375-11e6e3240966.png)

コマンドにオプション追加で、何ができるのかはまだ分かっていないので、試してみようと思います。
ナップサック問題を動的計画法(DP)で解く～最適解も導く～

#きっかけ
とあるプロコンに参加した時に、ナップサック問題の類似問題に出会ったので、
ググったところ、最適値を求めるプログラムを見つけることはできても、
最適解を求めるプログラムを見つけることができず、
結局自分で調べてコーディングするというある意味タイムロスをくらったので、
少しでも他の人の助けになれば。

#ナップサック問題
[ナップサック問題-wikipedia](https://ja.wikipedia.org/wiki/%E3%83%8A%E3%83%83%E3%83%97%E3%82%B5%E3%83%83%E3%82%AF%E5%95%8F%E9%A1%8C)
>「容量 C のナップサックが一つと、n 種類の品物（各々、価値 pi, 容積 ci）
が与えられたとき、ナップサックの容量 C を超えない範囲でいくつかの品物をナップサックに詰め、
ナップサックに入れた品物の価値の和を最大化するにはどの品物を選べばよいか」という整数計画問題である。

要はナップサックの耐荷重を超えないギリギリまで物を詰めたときの
総価値を最大にしたいってことです。
今回は同じものは入れることのできない0-1ナップサック問題を扱います。

#最適解へのアプローチ
今回使う金塊は次の通り。これを先頭から5個までの金塊を使って重さ4を超えないように詰めたときの最大価値を計算、その時の金塊の組み合わせを求めたい。

| 重さ|価値|
|:-:|:-:|
|2|3|
| 1           |            2 |
| 3             |              6 |
| 2               |                1 |
| 1             |             3 |
| 5          |           85 |

最適値はDPを用いてテーブルを作成することで求めることができる。
漸化式は以下の通り。例えば「先頭から5個までの金塊を使って重さ4を超えないように詰めたときの最大価値」を知りたいときはdp[5][4]にアクセスすることでわかる。
(この答えは3つ目と5つ目の金塊を使えば最大価値9を得られる。)
![2018-10-18.png](https://qiita-image-store.s3.amazonaws.com/0/216625/e75cb3e0-a5a8-1cdf-9470-192162f57a62.png)
上の式より、最適解を得るためには、dp[i+1][w]にmax関数の第一引数の値が入ればその時のi番目の金塊をナップサックに入れることは確定するので、以下のようなコードで求めることができる。


```C++:solv.cpp
// Solving knapsack problem with DP

#include <iostream>
#include <climits>
#include <algorithm>
using namespace std;

// input
// n = value of gilt
// W = limit of total weight
// weight[] = weight of each gilt
// value[] = value of each gilt
const int n=6, W=8;
const int weight[]={2,1,3,2,1,5}, value[]={3,2,6,1,3,85};

// DP table
int dp[10][10];

//------------------------------------------------------------------------------
/// 指定されたDPテーブルの要素はどの金塊の組み合わせで作れるのかを逆算する
/// @param i 使って良い金塊の個数 i番目までの金塊を使える
///        w ナップサックの耐荷重
///        ans 答え,金塊を0:入れない 1:入れる
void DP_OptimalSolution(const int i, const int w,int ans[n]){
    int local_w=w;
    for(int local_i=i-1;local_i>=0;local_i--){
        if (local_w >= weight[local_i] && max(dp[local_i][local_w-weight[local_i]] + value[local_i], dp[local_i][local_w])==dp[local_i][local_w]){
            ans[local_i]=0;
        }
        else if(local_w >= weight[local_i] && max(dp[local_i][local_w-weight[local_i]] + value[local_i], dp[local_i][local_w])==dp[local_i][local_w-weight[local_i]] + value[local_i]){
            ans[local_i]=1;
            local_w=local_w-weight[local_i];
        }
        else if(local_w < weight[local_i]){
            ans[local_i]=0;
        }
    }
}

int main() {

  // init
  for (int w = 0; w <= W; ++w) dp[0][w] = 0;

  // DP table
  for (int i = 0; i < n; ++i) {
    for (int w = 0; w <= W; ++w) {
      if (w >= weight[i]) dp[i+1][w] = max(dp[i][w-weight[i]] + value[i], dp[i][w]);
      else dp[i+1][w] = dp[i][w];
    }
  }

  //answer
  int ans[n];
  DP_OptimalSolution(5,4,ans);
  for(int i=0;i<n;i++){
    cout << ans[i] << endl;
  }
  
  return 0;
}
```

実行結果は以下の通り。金塊を0は入れない。1は入れることを示している。
よって今回は3番目と5番目の金塊をナップサックに入れることで最大値を得られることが解る。

```:output
0
0
1
0
1
0
```

#よくわかる参考記事
[典型的な DP (動的計画法) のパターンを整理 Part 1 ～ ナップサック DP 編 ～](https://qiita.com/drken/items/a5e6fe22863b7992efdb)
送信ボタンを押したときにカスタムフィールドに入力された半角英数字を全角英数字に自動変換する【View customizes Plugin】

# やりたいこと
カスタムフィールドに半角英数字が入力された際に全角英数字に自動的に変換を行いたい。

# 参考
[ある工場のRedmine画面カスタム【View customize plugin 活用例】](https://www.slideshare.net/netazone/redmineview-customize-plugin)

# 動作環境
Redmine3.4.3
View Customize plugin 1.1.4

# やり方
Redmineのプラグイン「view customize plugin」を利用します。

下記の設定をview customizeで設定します。

- Path pattern

```
/issues
```

- Type

```
JavaScript
```
- Code

```
$(function() {
  $('#issue-form').submit(function() {
    var txt = $('#issue_custom_field_values_1').val();
    var zen = txt.replace(/[A-Za-z0-9]/g, function(s) {
      return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
    });
    $('#issue_custom_field_values_1').val(zen);
  });
});
```
【#issue_custom_field_values_1】がカスタムフィールドのidを指定しているので、
ここを変えれば別のカスタムフィールドに適用可能。
jqueryでページトップを使用する（例）

ページトップのJSを使用する場合（例）

定義側js↓

```pageTop.js
$(window).load(function(){
  function pageTop () {

	var $main         = $('html, body');
	var $pTop         = $('.pagetop');
	var $header       = $('header');
	var $scrollPos    = '';
	var $headerHeight = $header.outerHeight();
	var $headerOfset  = $headerHeight + $header.offset().top;


	//ページトップボタン非表示
	$pTop.hide();

	$(window).on('scroll', function() {

		$scrollPos = $(this).scrollTop();

		if ($headerOfset < $scrollPos) {
			$pTop.fadeIn();
		} else {
			$pTop.fadeOut();
		}

	});

	$pTop.on('click', function() {

		$main.animate({
			scrollTop:$main.offset().top
		}, 2000, "easeOutQuint");

		return false;

	});

  }
});
```

呼び出し側js↓

```common.js
$(window).load(function(){
  pageTop();
});
```


定義側html↓

```index.html
<script src="./js/jquery-1.11.0.min.js"></script>
<script src="./js/jquery.easing.1.3.js"></script>
<script src="./js/pageTop.js"></script>
```

jquery.easing.1.3.jsは別に読まなくてもページトップのjsを使用できるが、easingを使用する際は必須。
もし、必要ないなら、「easeOutQuint」を消す。
研究をより効率的かつ創造的に行うために

## この記事について
**創造的な**研究を行うために試行錯誤した結果行なっていること、用いているツールのまとめ. 重要なことは小まめに目に見える形（論文・ノート・ブログ・メモ・図）にしてまとめること.

## 情報Input
###1. Spark (メーラー)
macOS版、iOS版. IMAPしかサポートしていない. Gmailに実装されたスヌーズ機能、添付ファイル一覧(iOS版のみ)、smart Inboxの設定の柔軟性、カレンダー、スワイプ操作の充実が魅力. まだ使っていないがメールの共有機能も興味深い.

###2. Slack
コミュニケーションツールとしてかつRSSリーダーとして使用.

###3. Papers3
論文管理ソフト. ノート、タグ付け、コメント、メモ、ファイリングができるのが魅力. 

## 情報Output
###1. TexPad
論文・ノートの執筆用に使用. リアルタイムでコンパイルして表示してくれるのがありがたい. 

###2. hackMD
共有できるMarkdownノート. 複数人での同時編集も可能(競合なし). 勉強会のノート、共有wikiとして. 

###3. Quiver
主に研究ノートとして使用. 基本はMarkdown記法で、数式を$\LaTeX$形式で入力できる. 

###4. hatena Blog
研究内容とは直接的には関係しないような雑感のまとめのために使用. 

## Coding
###1. Eclipse
主にJavaを使用しているので、無料でここまで充実した統合開発環境はとてもありがたい. 

###2. Spyder
Python codeはSpyderとJupyter notebookで. JupyterでテストしてSpyderでスクリプトとしてまとめる, 

###3. Jupyter
Python及びOctaveのテスト実行環境として使用. 

###4. Octave (GUI)
MatLabを使っていないのでMatLab likeな環境が必要な際にはGNU Octaveを起動. 

###5. Atom
導入したものの利用していない. Fortranの開発環境としては使えるかも.
仮想通貨の会計処理

# 仮想通貨の会計処理
こちらが原文となります。
[実務対応報告第38号
「資金決済法における仮想通貨の会計処理等に関する当面の取扱い」の公表](https://www.asb.or.jp/jp/accounting_standards/practical_solution/y2018/2018-0314.html)

## 期末における仮想通貨の評価

・活発な市場が存在する場合、市場価格に基づく価額を仮想通貨の貸借対照表価額とし、帳簿価額との差額を当期の損益とする。

・活発な市場が存在しない場合、取得原価を貸借対照表価額とする。ただし、期末における処分見込価額（ゼロ又は備忘価額を含む）が取得原価を下回る場合、処分見込価額を貸借対照表価額とし、差額は当期の損失とする。

## 活発な市場の判断

　継続的に価格情報が提供される程度に仮想通貨取引所又は仮想通貨販売所において十分な数量及び頻度で取引が行われている場合をいう。

## 仮想通貨の評価方法

・活発な市場が存在する場合
　保有する仮想通貨の種類ごとに、通常使用する自己の取引実績の最も大きい仮想通貨取引所又は仮想通貨販売所における取引価格を用いる。

> 補足
活発な市場が存在する仮想通貨が、その後、活発な市場が存在しない仮想通貨となった場合、活発な市場が存在しない仮想通貨となる前の最後の市場価格に基づく価額を取得原価とし、評価差額を当期の損益として処理する。

・活発な市場が存在しない場合
　取得原価を貸借対照表価額または、期末における処分見込価額（ゼロ又は備忘価額を含む）が取得原価を下回る場合、処分見込価額を貸借対照表価額とし、差額は当期の損失とする。

## 仮想通貨の売却損益認識時点

　仮想通貨の売却損益を、当該仮想通貨の売買の合意が成立した時点において認識する。


## 仮想通貨の勘定科目

　・売買目的での保有
　損益区分は、営業外損益(仮想通貨売買損益)
　資産区分は、投資その他の資産(投資仮想通貨)

・資金決済目的での保有
　損益区分は、営業外損益
　資産区分は当座資産(仮想通貨)

・トレーダーの場合
　損益区分は、売上高(仮想通貨売上高)
　資産区分は、棚卸資産(仮想通貨)

## 合わせ読み

[ブロックチェーン・スマートコントラクトとは[知識編]](https://qiita.com/kagami-r0927/items/09588760b94954dcc2fe)
[仮想通貨の税務](https://qiita.com/kagami-r0927/items/cabe3268921f20d16fa3)
[ブロックチェーンに関係する法律](https://qiita.com/kagami-r0927/items/098d4d2d5208c10315f8)
MacでNetBeansを使いたい→使えた！

某大学のプログラミングの授業ではJavaのプログラミングをNetBeansを使用して行っています｡
自分のマシンにもNetBeansを入れれば､課題の提出ができる(コーディングはVSCodeでやってる)ので､ぜひ入れたいのですが､これまた幾ら頑張ってもMacで使えません｡
とりあえずやるところまでやったので､だれか助けてください｡
**追記:　無事に動きました**

##　環境
マシン:MacBook 2017
OS:macOS Mojave

## Oracle JDKを入れてみた
とりあえず､最初はOracle JDKをGUIでインストールしました｡

しかし､NetBeansはメインウィンドウが出てきても､新しいプロジェクトのボタンや､その他ボタンを押してもほとんど反応がありません｡

以前LinuxでJDKやJREを複数入れたことによって同じ現象が起きたので､そのへんかな､と思い､とりあえずJREとJDKをすべて削除､Mac内からJavaの実行系のものをすべて取っ払いました｡

## OpenJDKを入れてみた｡

JREは入れずに､OpenJDK11だけを入れてみましたが、症状が改善しないです・・・
ではnetbeans.confにjdk-homeにopenjdk11の場所を書いてあげます。

うーん改善しないぞ

## OpenJDKのバージョンを落としてみる

JDK11がNetbeans8.2では動かないという情報を聞いたので、OpenJDK9,10を入れてみました。
それぞれnetbeans.confに書いてみたりもしました。

それでも症状が改善しません。

##　NetBeansの開発版を入れてみる
http://bits.netbeans.org/download/trunk/nightly/latest/
ここにあるNetBeansの開発版(Build 201804200002)を入れてみました。

うーん、LaunchPadに追加はされますが、起動させようとしてもウィンドウが出てきません・・・

##　助けて
万策尽きました。

どなたか対策方法をご存じの方、教えていただけませんか・・・・？

# 追記　動いた
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
ここからjdk8をダウンロードしてきます。
普通にインストールして、

```config:netbeans.conf

# 末尾に
netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home"

```
と書いてあげることで動きました。

JDK8がMojaveでも動いてよかったです。
PHPからSQLを記述してデータベースにアクセスして情報を取得（2テーブル連結ver.）

PHPからSQLを書いて、データベースにアクセスして、テーブル内のレコードを取得する際、２つのテーブルを連結させる必要性があったので、下記のように対応。

メモの意味で残しておく。

```
$_SELECT    = "n.cd AS n_cd, n.title AS n_title, n.news_category_cd AS n_news_category, n.date AS n_date, n.comment AS n_comment, n.img1 AS n_img1, n.link AS n_link, n.target AS n_target, ";
$_SELECT   .= "n_c.cd AS n_c_cd, n_c.name AS n_c_name";
$sql        =

	"SELECT 
		{$_SELECT}
	FROM 
		news AS n 
	INNER JOIN news_category AS n_c ON n.news_category_cd = n_c.cd 
	WHERE 
		n.disp_flg = 1 
		AND n_c.disp_flg = 1 
	ORDER BY 
		n.sort, 
		n_c.sort
	LIMIT 3";
```

{$_SELECT}のように取得するカラム部分を変数にしておくといいかもしれませんね。

↓のサイトでSQLを読みやすいようにフォーマットしてくれるので、活用するようにするといい。
https://araishi.com/sql-formatter/
ClickOnceで「ライセンス認証により例外が発生しました。」というエラーが発生しアプリが起動しない問題。

# 現象
ClickOnceで提供しているアプリケーションが起動に失敗する。
ログには以下のメッセージが出力されている。
**XXX.application のライセンス認証により例外が発生しました**

# 原因
原因は分からず。
Windows7、10で発生するが全ての端末で発生する訳でなく、端末依存の問題と思われる。

# 対応
かなり強引の対応ではあるが、
%USERPROFILE%\AppData\Local\Appsフォルダ配下にあるファイル・フォルダを全て削除したところ
正常に起動するようになる。
この方法だと、他のClickOnceアプリケーションもインストールしている場合は、
削除することになるので注意が必要。
rdateコマンドに応答するtime serviceをUbuntuで有効にする方法

シングルボードコンピュータをインターネットにつながらない環境で使っているとき、ntpdateで時刻合わせをする先がないので、時刻が1970年1月1日になってしまいます。これはあんまりなので、手元のUbuntu 18.04 でtime serviceを動かして、rdateコマンドで時刻合わせをできるようにしました。
ただしこの方法だと精度は1秒です。

# time serviceを有効にする

```
sudo apt install xinetd
cd /etc/xinetd.d/
sudo cp time time.org
sudo vi time
```

以下のようにtcpのところのdisableを`no`に変更します。

```diff
$ diff -u time.org time
--- time.org	2018-10-18 13:04:20.401692370 +0900
+++ time	2018-10-18 13:04:50.721767045 +0900
@@ -6,7 +6,7 @@
 # This is the tcp version.
 service time
 {
-	disable		= yes
+	disable		= no
 	type		= INTERNAL
 	id		= time-stream
 	socket_type	= stream
```

xinetdを再起動。

```
sudo /etc/init.d/xinetd restart
```

telnetでport 37をつついてみる

```
$ telnet localhost 37
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
�r�Connection closed by foreign host.
```

このように何か32bitのバイナリデータが読めたらOK。


# 組み込みLinux側でrdateの実行

time service を動かしているサーバのIPアドレスが `192.168.20.1` として

```
~ # date
Sat Jan  3 01:31:44 UTC 1970
~ # rdate -s 192.168.20.1
~ # date
Thu Oct 18 04:23:10 UTC 2018
~ # 
```
現在時刻を設定できました。
Nuxt.jsでVueのmountedが2回呼ばれる現象

# mountedが2回呼ばれる原因

**nuxt-link内に別のaタグを入れている**場合に自分の環境ではおきていました。
意図してそうしていたわけではないので、中のaタグを除去すればmountedが2回呼ばれることはなくなりました。

※自分の場合なので、他の要因で呼ばれてることもあるかもしれません。

メカニズム的になんでこうなっちゃうかわかっている人いたら教えて欲しいなと。。。

## 再現環境

Nuxt.js v1.4.0

しかもローカルでの実行やローカルでのproduction buildでは現象は起きず。。。
serverless-expressを使ってlambda上にデプロイした時だけ発生してました。

万が一同じ罠にハマっている人がいて参考になれば幸いです。
Rails自分用メモ

編集中

# **memo**

- モデル名.find_by ID以外のカラムで検索　一件取得
- ルーティング一覧　http://localhost:3000/rails/info/routes
- where 配列が取得できる
- belongs_to :hoge（〜〜〜.idこの場合はhoge_idのカラム） ,class_name: 'User'（モデル名）
- new_record？はDBにレコードが登録されて「いなければ」true　登録されていればfalseになります。
- inspectメソッドとは、オブジェクトや配列などをわかりやすく文字列で返してくれるメソッド
- [コールバック一覧](https://www.techscore.com/blog/2012/12/25/rails%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%E3%81%BE%E3%81%A8%E3%82%81/)
- Post.first 最初のデータを取得
- [i18n](https://ruby-rails.hatenadiary.com/entry/20150226/1424937175)
- [Rails: nil?, empty?, blank?, present?の挙動](https://qiita.com/sakaitaka/items/155badd87fdc1bd0919d)
- railsはビューではなくアクションで変数を定義するのが一般的
- Railsでは、「views/layouts/application.html.erb」に共通のHTMLを書いておくことができる



# **ActiveRecord**

- ActiveRecordとは
    - 　Ruby on RailsのORマッパー
    - 　ActiveRecordを継承するクラスはDB名の大文字、単数形に変える<br/>例：serviceplans → ServicePlan
    - 　 [ActiveRecord入門](https://qiita.com/tfrcm/items/80625a75959591c2b7cd#selectread)



has_many
所有する
ownerがcatlesを所有する場合は<br/>app/models/owner.rbに以下のように記載する        <br/>has_many :castles

belongs_to
所有されている
catlesがownerに所有されている場合は<br/>app/models/owner.rbに以下のように記載する<br/>belongs_to :owner

```ruby
class Hoge < ActiveRecord::Base
  has_many :sample_dbs
end

class Hoge < ActiveRecord::Base
  belongs_to :sample_dbs
end
```

---







dbフォルダ配下のseeds.rb（rubyで）でデータベースを作る
rails db:seed

マイグレーション機能
SQLを書くことなくRubyでデータベース内にテーブルを作成することができる機能
SQLを書く必要がない理由は、Ruby on Rails内のActiveRecordという機能が
RubyをSQLに自動翻訳することができるためです。

seeds.rb
テーブルにデータを登録する仕組み

jbuilder
views以下にxxx.json.jbuilderファイルを作ってlocalhost:3000/items.jsonにアクセスすればjson形式のレスポンスが返ってくれます
http://www.cl9.info/entry/2015/03/07/103121

rails db:migrate
Rails 5以前のバージョンでは、db:migrateコマンドはrailsコマンドではなくrakeコマンドが使われていました

・Jobとは
　メールの送信、データのインポート/エクスポートなどの時間のかかる処理を、
　適した方　法でバックエンドで行うためのコンセプト

・Delayed Jobとは
　非同期処理を行うためのgem　他にResque　Sidkiqなどがある
　https://ruby-rails.hatenadiary.com/entry/20150304/1425396671
[Railsでの非同期処理とDelayed Job](https://re-engines.com/2018/09/25/rails-async-job/)

・Active Jobとは
　色々ある非同期ライブラリに対して同じインターフェースを提供するライブラリです。


|用語|説明||備考|
|:-----------------|:------------------|:------------------|:---|
|rails s|WEBrickの起動|||
| pluck | 指定したカラムの配列を取得する |  | mapに比べて早い |
| db/schema.rb | 現在のDB（スキーマ）一覧がある |  |  |
| rake db:migrate | テーブル作成 |  |  |
| rake db:seed | データを投入 |  |  |
| rails c | コンソール起動 |  | rails c --sandbox<br/>DBを変更したくない場合はこれを使う |
| delayed_job | バックグラウンドで非同期処理をしてくれるrailsのgemの一種<br/>delay enqueueの２種類がある<br/>Class.delay.method(hoge)<br/>methodが呼ばれると、次に行われる処理がデータベース内のdelayed_jobsテーブルに格納される |  | キューに入れる、enqueueすると表現するらしい |
| DBのルール | 外部キーはxxx_idという表記になる |  |  |
# **参照リンク**

入門
[Ruby on Rails チュートリアル：実例を使って Rails を学ぼう]
(https://railstutorial.jp/)
[Ruby on Rails入門]
(https://www.rubylife.jp/rails/)
[小学生でもわかるRuby on Rails入門 | OpenBook]
(https://openbook4.me/projects/92)
[]
()
[]
()

ブログ
[Rails Webook]
(https://ruby-rails.hatenadiary.com/)
[]
()
[]
()
[]
()


その他
[Ruby on RailsのAjax処理のおさらい]
(https://qiita.com/ka215/items/dfa602f1ccc652cf2888#controller%E3%81%AE%E4%BE%8B)
[]
()
[]
()
単純だけどやったら便利なVimのキーマッピング

割り当てるコマンドは使いやすい感じに合わせてください。

### 0レジスタの貼り付け

`p`だと削除したものとかも貼り付け対象になるので、`d`したり`y`を連続でしたい時に便利

```vim:vimrc
nnoremap <C-p> "0p
```

### 行の最後までヤンク

`D`のヤンク版

```vim:vimrc
nnoremap Y y$
```

### タブの遷移

タブ移動は結構使うのにコマンドが長めなので

```vim:vimrc
" 次のタブに遷移する
nnoremap sn :tabNext<CR>
" 前のタブに遷移する
nnoremap sp :tabprevious<CR>
```

コメントでいただきました。公式で下記が使えるそうです！

```
gt
gT
```

### ウィンドウ移動

`<C-w>`って押しにくいんですよね。。

```vim:vimrc
nnoremap sh <C-w>h
nnoremap sj <C-w>j
nnoremap sk <C-w>k
nnoremap sl <C-w>l
```

### 最後に

他にもこんなものがあるよ！とか、間違ってるよ！とかあったら教えてください。
SourceTree 3.0.6にアップデートしたら、リモートからの操作ができなくなったので解決した忘備録

# 序文
当然このページを見ているプログラマーはgitを使ってソースコード管理をしていると思うのですが、
@yosida001 は、gitはgitでもSourceTreeというUIでgitを操作することができるアプリケーションを使っています。

「SourceTreeは便利だよ！使うといいよ！」みたいなことを書いてもいいのですが、面倒なので詳しい説明は、[公式サイト](https://ja.atlassian.com/software/sourcetree)を見るか、解説サイトを読んでください。

# 問題発生
さて、そんな日、いつもの通りにリモートからフェッチしようとしたらこんなエラーが発生しました
![タイトルなし.png](https://qiita-image-store.s3.amazonaws.com/0/152127/6bd493bf-fd40-2e35-7e33-f41f17c39a88.png)
**「そういえば直前に、何も考えずにSourceTreeをアップデートしたな・・・・」**
と思い出しながら、エラーを解決することにしましょう。

# Askpass.exeって何？
どうやらエラーを見る限り
`C:\Users\{User}\AppData\Local\SourceTree\app-3.0.6\tools\Askpass.exe`
が悪さをしているのは間違いがありません。
何の悪さをしているかは、どうも文字化けしていて読めませんが…
そのあとのエラーを読む限りは、SSHアクセスができなくなっているようです。

さて、このAskpass.exeというアプリケーションですが、具体的には**SourceTreeの中の、SSH接続やGit接続に利用するパスワードを管理するアプリケーション**です。
パスワードの読み出しに失敗しているのでしょうか・・・？

# 原因発見
具体的にアプリケーションの設置場所までエラー文に書かれているので、直接exeファイルを見に行きましょう。

なおAppDataディレクトリは隠しディレクトリなので、見つからなかったらなんとかして見えるようにしておいてください。方法はググればすぐ出ます。

以下はこのエラーが出た時の実際の`C:\Users\{User}\AppData\Local\SourceTree\app-3.0.6\tools\`ディレクトリの中身です。
![タイトルなし(1).png](https://qiita-image-store.s3.amazonaws.com/0/152127/65358b3c-4e66-13e9-8930-64ed853caaee.png)

そもそも**Askpass.exe**が無いことが判明します。
そりゃあエラーも出るわけです。
このあたりでSourceTreeをすべてアンインストールし、もう一度最初からインストールすれば解決しそうな予感を思いますが、現在の設定データが消えてしまうのが惜しいのでがんばります。

# Askpass.exeの調達
ところでこのエラーが出る前に私はSouceTreeをアップデートしていました。
つまり`app-3.0.6`以外にもバージョンを記したディレクトリを持っているわけです。
その中でも一番最近のやつを開いてみましょう。手元の環境では`app-2.5.5`です。
中を見てみると、ありました、Askpass.exeです。
コピーして持っていきましょう。

そしてSourceTreeを再起動してからfetch

・・・

```
�n���h������Ă��Ȃ���O: System.IO.FileNotFoundException: �t�@�C���܂��̓A�Z���u�� 'SourceTreeShared, Version=1.6.14.0, Culture=neutral, PublicKeyToken=null'�A�܂��͂��̈ˑ��֌W�� 1 ���ǂݍ��߂܂���ł����B�w�肳�ꂽ�t�@�C����������܂���B
   �ꏊ Askpass.App.Main()
Error reading SSH_ASKPASS output for prompt: git@{IP_Address}'s password: 
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

で　す　よ　ね！
Askpassを動かすためのライブラリが入っていないようです。ファイルを見比べて足りない分をすべて入れてしまいましょう。


#解決
具体的には

- Askpass.exe
- Askpass.UI.Wpf.dll
- SourceTreeShared.dll

の三つをコピーして入れると正常に動きます。

みなさんもよいSourceTreeライフを！