OmniAICreator/Qiita-1.07M huggingface dataset:
ネストされたオブジェクトの階層構造を可視化してみる

今日必要になったので。
とりあえず以下でできました↓

``` javascript

const nestViewer = (obj, prefix = '') => {
  for (const key in obj) {
    if (typeof obj[key] == 'object') {
      if (Array.isArray(obj[key])) {
        obj[key].forEach((item, index) => {
          if (typeof item != 'object') {
            console.log({ key: `${prefix && prefix + '.'}${key}[${index}]`, value: item })
          } else {
            nestViewer(item, `${prefix && prefix + '.'}${key}[${index}]`)
          }
        })
      } else {
        nestViewer(obj[key], `${prefix && prefix + '.'}${key}`)
      }
    } else {
      console.log({ key: `${prefix && prefix + '.'}${key}`, value: obj[key] })
    }
  }
}

```

こんな感じの地獄のようなObjectがあったとして

``` json

{
  "a": 1,
  "b": [4, 5, 6],
  "c": {
    "a": 7,
    "b": [8, 9, 10],
    "c": {
      "a": 11,
      "b": [12, 13, 14],
      "c": {
        "a": 15,
        "b": [16, 17, 18],
        "c": {
          "a": 19,
          "b": [20, 21, 22],
          "c": {
            "a": 23,
            "b": [24, 25, 26],
            "c": {}
          }
        }
      }
    }
  },
  "d": [
    {
      "a": 7,
      "b": [8, 9, 10],
      "c": {
        "a": 11,
        "b": [12, 13, 14],
        "c": {}
      }
    }
  ]
}

```

実行結果

```

{key: "a", value: 1}
{key: "b[0]", value: 4}
{key: "b[1]", value: 5}
{key: "b[2]", value: 6}
{key: "c.a", value: 7}
{key: "c.b[0]", value: 8}
{key: "c.b[1]", value: 9}
{key: "c.b[2]", value: 10}
{key: "c.c.a", value: 11}
{key: "c.c.b[0]", value: 12}
{key: "c.c.b[1]", value: 13}
{key: "c.c.b[2]", value: 14}
{key: "c.c.c.a", value: 15}
{key: "c.c.c.b[0]", value: 16}
{key: "c.c.c.b[1]", value: 17}
{key: "c.c.c.b[2]", value: 18}
{key: "c.c.c.c.a", value: 19}
{key: "c.c.c.c.b[0]", value: 20}
{key: "c.c.c.c.b[1]", value: 21}
{key: "c.c.c.c.b[2]", value: 22}
{key: "c.c.c.c.c.a", value: 23}
{key: "c.c.c.c.c.b[0]", value: 24}
{key: "c.c.c.c.c.b[1]", value: 25}
{key: "c.c.c.c.c.b[2]", value: 26}
{key: "d[0].a", value: 7}
{key: "d[0].b[0]", value: 8}
{key: "d[0].b[1]", value: 9}
{key: "d[0].b[2]", value: 10}
{key: "d[0].c.a", value: 11}
{key: "d[0].c.b[0]", value: 12}
{key: "d[0].c.b[1]", value: 13}
{key: "d[0].c.b[2]", value: 14}

```


以上
Azure Cosmos DB に Java SDK からSelect*



#Maven

```xml
<dependency>
	<groupId>com.microsoft.azure</groupId>
	<artifactId>azure-documentdb</artifactId>
	<version>2.4.0</version>
</dependency>
```

#Java

```java
import java.util.List;

import com.google.gson.GsonBuilder;
import com.google.gson.JsonParser;
import com.microsoft.azure.documentdb.ConnectionPolicy;
import com.microsoft.azure.documentdb.ConsistencyLevel;
import com.microsoft.azure.documentdb.Document;
import com.microsoft.azure.documentdb.DocumentClient;
import com.microsoft.azure.documentdb.FeedOptions;

public class HelloDocumentDb002QueryDocument {

	static String DATABASE_ID = "youdatabase";
	static String COLLECTION_ID = "yourcontainer";

	public static void main(String[] args) throws Exception {

		FeedOptions queryOptions = new FeedOptions();
		queryOptions.setEnableCrossPartitionQuery(true);

		String host = "yourhost";
		// read only
		String key = "youkey-readonly";

		DocumentClient client = new DocumentClient("https://" //
				+ host //
				+ ".documents.azure.com:443", key, //
				new ConnectionPolicy(), ConsistencyLevel.Session);

		String q = "SELECT * FROM c";

		List<Document> results = client
				.queryDocuments("dbs/" + DATABASE_ID + "/colls/" + COLLECTION_ID, q, queryOptions).getQueryIterable()
				.toList();

		for (Document doc : results) {
			System.err.println(doc);
			String json = doc.toString();
			System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(new JsonParser().parse(json)));

		}
		client.close();
	}
}


```
Jetson Nanoで物体認識のデモを動かす

[前回](https://qiita.com/Hiroki-Fujimoto/items/f177540022f49686982d)に続いて、今回はUSBカメラを用いてJetson NanoのTensorRTのデモを行ってみます。こちらは[GitHub](https://github.com/dusty-nv/jetson-inference)にもチュートリアルが掲載されています。  

# Jetson Nanoのセットアップ
前回の記事を参照してください。  
[JetsonNanoのセットアップ](https://qiita.com/Hiroki-Fujimoto/items/f177540022f49686982d)  
# 今回使用するもの
- USBカメラ(後述)    
  


# 1. Gitレポジトリのクローン　コンパイル
'Ctrl+Alt+T'でターミナルを立ち上げます。  
以下のコマンドで、[GitHub](https://github.com/dusty-nv/jetson-inference)のリポジトリをクローンしてコンパイルしていきます。
  
~~~
$ sudo apt-get install git cmake
$ git clone https://github.com/dusty-nv/jetson-inference
~~~

~~~
$ cd jetson-inference
$ git submodule update --init
$ mkdir build
~~~

~~~
$ cd build
$ cmake ../
~~~

~~~
$ cd jetson-inference/build
$ make
$ sudo make install
~~~  

# 2. USBカメラの設定  
Jetson NanoはRaspberryPiのCamera Module V2とUSBカメラに対応しています。今回はUSBタイプのウェブカメラを使用します。以下のカメラを使用しました。

-  BUFFALO BSW20KM11BK  
   [詳細](https://www.buffalo.jp/product/detail/bsw20km11bk.html)  

先程コンパイルしたものは、デフォルトでJetson Nanoのオンボードカメラを使用するよう設定されています。USBカメラを使用する場合は以下のように`imagenet-camera.cpp`内の定義を修正し、再コンパイルする必要があります。  
以下のようにcppファイルを開きました。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/7894b7d1-a166-8e76-6838-a78db4438414.png)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/8c0b8473-fc9c-5a58-7634-b5bf0a2c3bab.png)
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/c256b401-799b-f19b-3bf0-4f3e85c863cd.png)




`#define DEFAULT_CAMERA`の後ろの数字を`-1`から`0`へ変更します。
  
~~~
#define DEFAULT_CAMERA 0    // -1 for onboard camera, or change to index of /dev/video V4L2 camera (>=0)
~~~

再コンパイル  

~~~
$ cd jetson-inference/build
$ make
$ sudo make install
~~~

# 3. デモを動かす
以下のコマンドでカメラを使った物体識別のデモを実行します。

~~~
$ cd jetson-inference/build/aarch64/bin
$ ./imagenet-camera googlenet
~~~

カメラのストリーミング映像から物体をTensorRTで識別します。かなり色々なものを、すばやく認識することができます。以下にいくつか画像を示します。 　　

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/ff9d5c8d-bf28-c936-f489-aee2760439e3.png)
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/76b5694a-3286-53d2-0278-13840bff30d4.png)
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/6f123446-88b9-b13b-dd82-7a9e0a948148.png)
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/39b6cbf6-4a1c-e876-70f1-265e7adb4b24.png)




次に、以下のコマンドでボトルを認識するデモを実行します。

~~~
$ cd jetson-inference/build/aarch64/bin
$ ./detectnet-camera coco-bottle
~~~
ペットボトルを薄い色の枠で囲って認識することができています。  

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/f7b0aca0-dda9-846b-0b5d-f86b8833e0ac.png)

このデモには他にも、ボトル認識と同じように顔認識を行うものもあります。興味のある方は試してみてください。
Azure Cosmos DB に Java SDK からUpsert



#Maven

```xml
<dependency>
	<groupId>com.microsoft.azure</groupId>
	<artifactId>azure-documentdb</artifactId>
	<version>2.4.0</version>
</dependency>
```

#Java

```java


import java.util.Date;
import java.util.List;

import com.google.gson.GsonBuilder;
import com.google.gson.JsonParser;
import com.microsoft.azure.documentdb.ConnectionPolicy;
import com.microsoft.azure.documentdb.ConsistencyLevel;
import com.microsoft.azure.documentdb.Document;
import com.microsoft.azure.documentdb.DocumentClient;
import com.microsoft.azure.documentdb.FeedOptions;

public class HelloDocumentDb001UpsertDocument {

	static String DATABASE_ID = "sandbox1";
	static String COLLECTION_ID = "container1";

	public static void main(String[] args) throws Exception {

		// Azure Cosmos DB Libraries for Java
		// https://docs.microsoft.com/ja-jp/java/api/overview/azure/cosmosdb?view=azure-java-stable

		FeedOptions queryOptions = new FeedOptions();
		queryOptions.setEnableCrossPartitionQuery(true);

		String host = "yourhost";

		// Get key from Azure Web Console
		// read write key
		String key = "xxx";

		DocumentClient client = new DocumentClient("https://" //
				+ host //
				+ ".documents.azure.com:443", key, //
				new ConnectionPolicy(), ConsistencyLevel.Eventual);

		// 適当なクラスを用意するとJSONに変換してくれる
		Doc d = new Doc("002", new Date(), "Hello", "Hello");

		// Nameなのか、IDなのか、ドキュメントをみてもはっきりしない。
		String collectionLink = String.format("/dbs/%s/colls/%s", DATABASE_ID, COLLECTION_ID);

		int response = client.upsertDocument(collectionLink, d, null, true).getStatusCode();
		System.err.println(response);

		client.close();
	}
}


```
深層学習（前編 1）：「Section2：活性化関数」

活性化関数とはニューラルネットワークの中間層において、次の層への出力の大きさを決める非線形の関数のことを指す。また出力層における正解値との誤差を求めるための最終結果となる関数である。入力値の値によって、次の層への信号のON/OFFや強弱を決定する働きをもつ。中間層の活性化関数にはReLU関数、シグモイド関数、ステップ関数がある。出力層の活性化関数にはソフトマックス関数、恒等写像、シグモイド関数がある。
[Ruby on Rails]メールの送信結果をブラウザ上で確認する

メール送信結果をブラウザ上で確認する方法です。
[letter_opener](https://github.com/ryanb/letter_opener)というgemを使います。
本番環境では実際に送信することになるので、開発環境でのみ確認できる状態を作ります。

# 環境
- MacOS 10.14.5（18F132）
- ruby 2.3.7p456
- rails 5.2.3

# 手順
##1. `letter_opener`をインストール

今回は開発環境でのみ確認できる状態を作るため、groupの設定をします。
すでにdevelopmentの設定が出来ている場合は、gem名のみを追記してください。

```ruby:Gemfile
group :development do
  gem 'letter_opener_web'
end
```

追記したらコマンド

```sh
$ bundle install
```

##2. 各種設定ファイルの編集

- config/routes.rb

```ruby:config/routes.rb
# 追記
if Rails.env.development?
  mount LetterOpenerWeb::Engine, at: "/letter_opener"
end
```

- config/envirronments/development.rb

```ruby:config/envirronments/development.rb
#追記
ActionMailer::Base.delivery_method = :letter_opener_web

#他にaction_mailerの設定をしている場合はコメントアウトする
#config.action_mailer.delivery_method = :smtp
#config.action_mailer.smtp_settings = {
  #省略
#}
```

##3. ブラウザから確認する
`$ rails s`でサーバーを起動して、ブラウザで[localhost:3000/letter_opener](http://localhost:3000/letter_opener)にアクセスします。
このような画面が表示されればOKです。
![スクリーンショット 2019-06-27 16.49.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131949/1cca2214-2e40-097d-70ef-ccf4c34577b0.png)


##4. メールを送信する
メールを送信する処理を実行します。

##5. 再度ブラウザから確認する
ブラウザで[localhost:3000/letter_opener](http://localhost:3000/letter_opener)にアクセスして、メールを確認します。
※deviseのパスワード再設定メールを送ってみました。
![スクリーンショット 2019-06-27 17.45.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131949/54d83b38-ab59-7323-e0d2-ec447291d287.png)
ITensorについて その1

テンソルネットワークの計算をするための
ITensor—Intelligent Tensor—
http://itensor.org/
についての忘備録。
http://itensor.org/docs.cgi?vers=cppv3&page=book
をざっくり日本語でまとめたものである。

ITensorとは、テンソルを扱うc++のライブラリである。これを使って密度行列繰り込み群（DMRG）などができ、量子多体系の計算できる。
ITensorはc++17以降で動く。


ITensorでは、インデックス(index)を定義することができる。

```cpp
auto i = Index(3);
```
これは要素が3個あるインデックスiを意味している。
なので、足が三つあるテンソルは

```cpp
auto i = Index(2,"index i");
auto j = Index(3,"index j");
auto k = Index(4,"index k");
auto T = ITensor(i,j,k);
println("The order of T is ",order(T));
```
とかける。このテンソルTは、iが2要素、jが3要素、kが4要素あり、全部で24成分ある。そしてゼロに初期化されている。
テンソルの足の数は```order(T)```で調べられる。テンソルの中身に値をセットしたいときは、

```cpp
T.set(i=2,j=1,k=3, 4.56);
```
とすればよい。また、要素を取り出したい場合には、

```cpp
auto x = elt(T,k=3,i=2,j=1);
println("x = ",x);
//prints: x = 4.56
```
とすればよい。複素数の値をセットできるし、取り出すこともできる。

```cpp
T.set(i=2,k=3,j=1, 7+8_i);
auto z = eltC(T,i=2,k=3,j=1);
println("z = ",z);
//prints: z = (7,8)
```

同じindexを持つ場合には、足し算や引き算ができる。テンソルの足の順番が違っていても、indexが同じなら、よしなに和を取ってくれる。

```cpp
auto Q = 2*T;
auto R = Q/3 + T*4_i;
auto S = R - T;
S *= 5;
//etc.
```

テンソルの積は、同じindexの足を潰すように計算される

```cpp
auto i = Index(2,"index i");
auto j = Index(3,"index j");
auto k = Index(4,"index k");

auto A = ITensor(i,j);
auto B = ITensor(k,j);
auto C = A * B;
```
足が同じところを足すので、```A*B```も```B*A```も同じ結果になる。

同じテンソル同士の積をする場合には、

```cpp
auto W = ITensor(i,s,j);
auto D = W * prime(W,s);
```
のようにする。ここでは、右側のWのindex sだけをs'にしていることを意味しており、それ以外のindexであるiとjは共通なので和が取られる。

テンソルの特異値分解は、

```cpp
auto T = ITensor(i,j,k);
auto [U,S,V] = svd(T,{i,k});
```
でできる。ここで、```{i,k}```はindexのi,kを行とみなす、ということを意味している。
つまり、行列A_{ij}での特異値分解```A = USV^+```を$A_{ij} = U_{il} S_l V_{jl}$と書いたときのiである。

特異値分解を使うと情報を減らすことができる。
特異値のうち小さいものを除去することで、行列のサイズを小さくすることができる。これは、

```cpp
auto T = randomITensor(i,j,k);
auto [U,S,V] = svd(T,{i,k},{"Cutoff=",1E-2,"MaxDim=",50});
```
とすればよい。ここで、特異値がCutoff以下のものを切り捨て、特異値の数は最大でもMaxDimとする、としている。

ある値以下の特異値を捨て去るということは、元のテンソルと差のノルムが

```cpp
auto truncerr = sqr(norm(U*S*V - T)/norm(T));
Print(truncerr);
//typical output: truncerr = 9.24E-03
```
となることを意味している。
深層学習（前編 1）：「Section1 ：入力層～中間層」

入力層は外部から与えられる情報であり、例えば動物種類の分類問題であると体長、体重、ひげの本数等の外部より与えられるデータ（説明変数）のことを指す。
中間層は入力層で与えられたデータに重みを掛け合わせ、バイアスを足して活性化関数へ代入し、次の層へ繋げる層のことを指す。
入力層で与えられるデータ: x
中間層で計算されるデータ：u = Wx + b , z = f(u) (W:重み、b:バイアス、f:活性化関数)
★Integration Architecture デザイナー勉強メモ★

**随時更新**
---
#■Integration Architecture デザイナー準備
**[【Salesforce公式】アーキテクトジャーニー：インテグレーションアーキテクチャ](https://trailhead.salesforce.com/ja/users/welcome4/trailmixes/architect-integration-architecture-jp)**

- [Lightning プラットフォーム API の基礎](https://trailhead.salesforce.com/ja/content/learn/modules/api_basics)
- [どの API を使用するか?](https://help.salesforce.com/articleView?id=integrate_what_is_api.htm&type=5)
- [Ladies Be Architects](https://archladies.com/)
- [SalesforceのSOAPとBulk APIをJavaで使う時のtips](https://qiita.com/n_slender/items/c187949c6b02b42a27b5)
- [SalesforceのAPI要求数の注意点](https://gcsf.zendesk.com/hc/ja/articles/360001674668-SalesforceのAPI要求数の注意点)
- [Understanding the Different Salesforce APIs](https://www.brcline.com/blog/understanding-salesforce-apis)
- [Salesforce Certified Integration Architecture Designer Exam Tips](http://www.alwaysablezard.com/salesforce/salesforce-certified-integration-architecture-designer-exam-tips/)
- [First Architect Certification. My Tips and Takeaways from the Integration Architecture Designer Examination](https://www.lopau.com/first-architect-certification-my-tips-and-takeaways-from-the-integration-architecture-designer-examination/)
- [Integration Designer Study Guide](https://metillium.com/2018/05/integration-designer-study-guide/)
- [JSONの基礎](http://lms.cfs-api.com/v1/12/lms.aspx?hash=WUlRa1pjd0RRUDZpRkhUZkhMM0JGd1NCWHlLZVpubDNhUFhwMk1lWCtMbCt3Q3pCNTlIN1hTZW5KTzEyVHlDWldnRWhlWkdtSGp1YmRsMTVMWmk1WmZ2UXo4TUl2VkJFV3lEYTVGNTVEeUJ1dDMyWUZNN1VtcE9KaGVsT0EzOFAvWHFTZ1JIMGZJeVBCbjJKUEtqOFR3PT0=)
- [【A-2】 基礎からの OAuth 2.0 〜 認証と認可の概念、認可コードとアクセストークンの意味 〜](https://www.youtube.com/watch?v=PqW948SFSUM)

#■追加
- [Salesforce Integration and API Overview (1)](https://www.youtube.com/watch?v=pHLDxRQCV08)
- [Salesforce Integration and API Overview (2)](https://www.youtube.com/watch?v=e8qTbc-xl9s)


#■メモ作成
- [Integration 概要](https://qiita.com/xuwenzhen/items/e6becfd36c5cde0b1f23)
- [Apex REST 勉強メモ：コールアウト](https://qiita.com/xuwenzhen/items/afbfcf9f8297cd9dbfa9)
- [Apex REST 勉強メモ：RESTful Web サービス](https://qiita.com/xuwenzhen/items/f340ef6170991b3e987b)
★Identity and Access Management デザイナー勉強メモ★

**随時更新**
---
#■Identity and Access Management デザイナー準備
**[【Salesforce公式】アーキテクトジャーニー：IDとアクセス管理](https://trailhead.salesforce.com/ja/users/welcome4/trailmixes/architect-identity-and-access-management-ja)**

- [Salesforce Certified Identity and Access Management Designer Exam Tips](http://www.alwaysablezard.com/salesforce/salesforce-certified-identity-access-management-designer-exam-tips/)
- [Identity & Access Management Certification Study Guide](https://metillium.com/2018/05/identity-access-management-certification-study-guide/)
- [How to Prepare For and PASS Identity and Access Management Designer Exam](http://salesforcememo.com/2017/09/18/how-to-prepare-for-and-pass-identity-and-access-management-designer-exam/)
- [一番分かりやすい OAuth の説明](https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be)
- [一番分かりやすい OpenID Connect の説明](https://qiita.com/TakahikoKawasaki/items/498ca08bbfcc341691fe)
- [Salesforce Identityによる企業のアイデンティティ管理(youtube)](https://www.youtube.com/watch?v=hcTNMIn3mhI)
- [SalesforceをIDプロバイダとして、外部アプリケーションとSAML認証する](https://qiita.com/comefigo/items/b06d28066cea214869e5)
- [Salesforce 指定ログイン情報で自組織にAPIアクセス](https://qiita.com/yhayashi30/items/1100905ad673ec7b68d9#手順)

#■追加

- [OAuth 2.0 and OpenID Connect (in plain English)](https://www.youtube.com/watch?v=996OiexHze0)

#■メモ作成
- [Identityの設定メニューについて](https://qiita.com/xuwenzhen/items/79092f197cb1742cd53c)
【Mac】Node.js のあれこれ

* nodebrewで入れたnodeの確認

```
MacBook-Pro-2: ~/mu$ nodebrew ls
v9.11.2
v12.4.0

current: v9.11.2
```

* nodeのバージョンの変更

```
$ nodebrew use v12.4.0
use v12.4.0
```

* バージョンの確認

```
$ node -v
```
あれ・・・変わってない。

* 環境変数の反映
変更した後、これでパスを通さないと反映しないよ！

```
$ source ~/.bash_profile
```
★Field Service Lightning勉強メモ★

**随時更新**
---
###:golf:STEP1
- [【済】Field Service Lightning を使用して作業に出向く](https://trailhead.salesforce.com/ja/content/learn/trails/field_service)
- [【済】Field Service Lightning でモダンなフィールドサービス！](https://base.terrasky.co.jp/articles/C2UYT)
- [【済】Lightning時代のService Cloud概要とカスタマイズ](https://developer.salesforce.com/events/webinars/lightning-ServiceCloud-jp)
- [【済】Field Service Lightning のコアデータモデル](https://developer.salesforce.com/docs/atlas.ja-jp.220.0.field_service_dev.meta/field_service_dev/fsl_dev_soap_core.htm)

======TODO:データモデル整理======

###:golf::golf:STEP2
**ハンズオン**

###:golf::golf::golf:STEP3
**試験準備**
fatal: pathspec '.' did not match any filesの解決方法

久々にgitがいうことを聞かない

# 問題のコマンド
.gitignoreを変更したので、全ての管理ファイルに対して適用させたかったのでいつも通り以下のコマンドを打った。

```bash
# .gitignoreに定義したファイルがgit上から消え去るが、手元の環境には残るはずだった。
git rm -r --cached .
# エラー
fatal: pathspec '.' did not match any files
```

gitの管理対象になっていないファイルが存在するとダメっぽくてうまくいかないんだろうなぁと予想。

....お見事、的中しました。
https://qiita.com/pugiemonn/items/2f6af4467b33ed3f41b5

# 結果
```
git rm -r --cached --ignore-unmatch .
```

でとおった。
★MuleSoft勉強メモ★

**随時更新**
---
- [【TrailHead】MuleSoft を使用した優れた API とインテグレーションの構築](https://trailhead.salesforce.com/ja/content/learn/trails/great-integrations-mulesoft)
- [MuleSoft开发入门课程](https://www.bilibili.com/video/BV1kQ4y1f7SQ/)
- [MuleSoft知识总结](https://blog.csdn.net/qq_53442144/article/details/110948764)
- [MuleSoft入門　Muleの学習を始めるための準備](https://quanz.co.jp/blog/mulesoft/2598/)
- [Free MuleSoft Training](https://mulesoft-enthusiast.com/free-mulesoft-training/)
- [qiita:mulesoft](https://qiita.com/tags/mulesoft)
開発中のサイトでFetch As Googleを利用する

私のやり方が正しいのか自信はありませんが、
試してみたら出来たので備忘録として書きます。

### 実装

こんな風にGoogleBotだけBASIC認証を解除したら、サイトをクロールしてくれます。

```:.htaccess
AuthUserFile /path/to/project/.htpasswd
AuthType Basic
AuthName "Web access"
Require valid-user

Satisfy any
BrowserMatchNoCase Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) isGoogleBot=1
BrowserMatchNoCase Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Safari/537.36 isGoogleBot=1

allow from env=isGoogleBot
```

### やりたいこと

* GoogleBotから自分のサイトがどのように見えるのかを確認したい

### やり方

* Google Search ConsoleのFetch As Googleを用いる
* 開発中のサイトURLをGoogle Search Consoleに登録し、一度GoogleBotにクロールしてもらう

### 問題

* 開発中のサイトはBASIC認証を設けているため、GoogleBotからはアクセスできない

### 考えた対処策

* GoogleBotのUser-AgentだけBASIC認証を解除したらクロールできるのでは？ できた。

### 備考

GoogleのUAは以下のサイトから確認できます
https://support.google.com/webmasters/answer/1061943?hl=ja
[メモ]　ReactでGoogleAnalyticsを使う


下記ライブラリを入れます。

https://github.com/react-ga/react-ga



## インストール方法

```
npm install react-ga --save
```



## 使用方法

```
import ReactGA from 'react-ga';
ReactGA.initialize('ここにID');
ReactGA.pageview(window.location.pathname + window.location.search);
```



これでトラッキングできてる。
日々の進捗ノート_言語処理100本ノック00

はんたまです．
大学時代は化学専攻なのに，理系出身というだけでプログラミングをやる部署に異動になりました．
素人ながらヒイコラ環境は作ったので，勉強と気分転換のために自然言語処理１００本ノックをやろうと思います．
ただやるのもなんなので，気づいたこととかのメモ書きにQiita始めました．

[**言語処理100本ノック 2015**](http://www.cl.ecei.tohoku.ac.jp/nlp100/)

Udemyで入門コースを2時間ぐらい見ただけのド素人状態からの挑戦です．
最後まで終わる頃には，初心者に毛が生えたくらいにはなってくれていたらいいなと思います．

# 00.文字列の逆順
>文字列"stressed"の文字を逆に（末尾から先頭に向かって）並べた文字列を得よ．

```gen00.py
s = "stressed"
print(s[::-1])
```
####結果
`desserts`

####備忘録
・文字列はそのままでもリストみたいに操作できる
・stressedは逆から読むとdesserts
各SQLで処理中にスリープする方法

プログラム側でタイムアウト設定したけど、どうやって試そう…って時用。

# SQL Server

```SQL:
-- hh:mm:ss
WAITFOR DELAY '00:00:30';
```

# Oracle

`Oracle 12c まで`
先にDBMS_LOCK権限を付与

```SQL:
CONN / AS SYSDBA
GRANT EXECUTE ON DBMS_LOCK TO ユーザー名 ;
```

```SQL:
-- 10秒
DBMS_LOCK.SLEEP(10);

-- 0.5秒
DBMS_LOCK.SLEEP(0.5);
```

`Oracle 18c 以降`
権限付与必要なし

```SQL:
-- 10秒
DBMS_SESSION.SLEEP(10);
```

# MySQL

```SQL:
-- 10秒
SELECT SLEEP(10);
```


# PostgreSQL

```SQL:
-- 10秒
SELECT pg_sleep(10);
```
よく記事になるけど。。。君たちまだ「Station」使ってないの？ 

#目次

1. [「Station」ってなに？](#stationってなに)
2. [どこがどう便利なの？](#どこがどう便利なの)
3. [他に特徴とかないの？](#他に特徴とかないの)
4. [不便な点](#不便な点)
5. [数ヶ月利用してみての感想](#数ヶ月利用してみての感想)

#「Station」ってなに？

みなさんは「Gmail」「Slack」「Chatwork」「Googleドライブ」などを普段どのように利用してますか？
基本的にはChromeやfireFoxなどのブラウザで利用しているかと思います。

Stationはよく利用するサービスを一つにまとめて利用できるアプリです。

(※モザイク多いですが許してください)

#どこがどう便利なの？

Stationを使い始めた時はそこまで便利に感じないかもしれません。
しかし、管理する対象のサービスが増えると真価を発揮すると思ってます。

例えば数種類のサービスを利用しているとしましょう。

ブラウザだとタブが大量に表示され、このようになります
![新しいタブ_と_Station.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275273/37fae6fe-9f53-0776-0b8f-a3f5872f5a64.png)

Stationだとこうなります
![Station.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275273/4c696582-15a0-2381-424c-2b02023b6fd1.png)

ブラウザのタブの部分がStationだと横に配置されましたね。

**カッコイイので僕はもう満足です。**
・
・
・

嘘です。実はこのままだとStationの良さを活かせておらず、ブラウザ利用している時と変わりません。
むしろWeb検索などができないですし、固定タブ機能を利用すればある程度スッキリした見た目になるのでブラウザを利用した方が賢い選択ですよね。

しかし！！！

実は「同一サービスの『複数タブ』」の管理を行うことで**真の力**を発揮できるのです！！


複数のシートを開いたりするとタブが増えすぎて「あれ、あのドキュメントどのタブだっけ？？」となっちゃいますよね。
たまにブラウザを複数開き増えすぎたタブに抗おうとする方もいたりします。

例えば以下のように同じ「Google drive」でも、スプレッドシートをなどをたくさん開くって方もいるかと思います。
![新しいタブ_と_Station 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275273/2fa9ee84-5aa0-acbc-2284-295e5bede346.png)

これがStationではアイコン一つにグループ化され、素早いアクセスが可能となります。
サービスのアイコンをクリックして切り替え、もう一度クリックするとタブ一覧が表示されます。
![全画面_2019_06_13_14_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275273/d9ed1c6c-77c0-beb8-e582-883b0412038f.png)


またショートカットキー`cmd + T`でアプリ内検索を行えるので、沢山サービスを登録していても簡単にアクセスできます。

#他に特徴とかないの？

- 通知設定ができる。過去の通知履歴の確認もできます
- チーム設定を行うことで、チームメンバーに利用して欲しいサービスを共有できる
- 直前にアクセスしたサービスに`ctrl+tab`で切り替えできる
- 対応しているサービスが多いのと、工夫すれば対応していないサービスも登録できる
  - 詳細 : [Stationで様々なツールを一括管理！その魅力と使い方](https://webdesign-trends.net/entry/9342)

#不便な点

便利とは言え、不便な点もあります。

- アプリウィンドウの移動が難しい。クリックできる範囲がわかりづらい
- 何かを検索する際は結局ブラウザでやらなくてはならない(そりゃそうだ)
- バグなのかわからないが、デスクトップ通知経由でStationへ遷移すると十数秒アプリがフリーズする


Webサービスの管理という点においては非常に便利なStationですが、調べ物をする場合はChromeなどのブラウザに切り替えなければならない。当たり前ですが。

一応googleのトップページをサービスとしてStationに認識させることも可能ですが、Stationからブラウザに切り替えてから調べ物した方が圧倒的に早そうなのでやめました。

#数ヶ月利用してみての感想

指３本でタッチッパッドを左右にスワイプすると仮想デスクトップの画面が切り替えられるMacbookとの相性はかなり良さげ。
Windowsでは試してませんw

ウィンドウやタブがまとまるので、スッキリしていて作業がしやすく感じました。
「使わなきゃ人生の3割損してるで」とまでは言いませんが、試しに利用してみる価値はあるかと思います。。
慣れるまで少々時間かかるかと思いますので、いきなり移行せずにGmailから、googleDriveから、など徐々に利用するサービスを増やしても良いかもしれません。

最後に、タイトルで煽ってすみませんでしたm(_ _)m
リードマクロを使って文字列の変数を展開できるようにしてみた


変数を含んだ文字列を作るときに、

```cl
  (setf hoge 'apple)
  (format nil "~a" hoge)
```
と書くことがあると思います。

個人的にはRubyのように

```ruby

"#{hoge}"
```
とできたら嬉しいので
ライブラリを作成してみました。

# 初めに
Lispに関してはまだまだ初心者ですので、間違いがあればぜひご指摘ください。すごく喜びます。

# convenience-string

[convenience-string](https://github.com/Masayukiii/convenience-string)

convenience-string is provide {{}} operator in string. The variable inside the {{}} is evaluated.

文字列に`{{}}`リテラルが含んでると、
リテラルに囲まれてる変数を評価してくれます。(*変数だけですので、(+ 1 2)などは展開できません。)

# install
```
(asdf:load-system :convenience-string)
```

# usage
`{{}}`リテラルを使えるようにします。

```cl
(convenience-string:enable)
```
基本的な使い方は、

```cl
(setf hoge 'apple)
#S"this is an {{hoge}}"
;; => "this is an apple"
```

```cl
(let ((hoge 'apple))
        (declare (special hoge))
        #S"this is an {{hoge}}")
```

になります。

レキシカル変数はfind-symbolできなかったので、`(declare (special hoge))`することで`{{}}`内で参照することができます。

# 感想

自分のための忘備録です。
おもに躓いたとこ、疑問点をまとめています。

- 定数だけでなく式も評価できるようにすれば
良かったが、そうするとeval系を使わざる負えないと思ったので断念した。

- 文字列内で`{{}}`リテラルに囲まれている変数を抽出→シンボルにコンバート→`symbol-value`で値を取得する以外に他に良いほうを見つけたい。

- 定義されたレキシカル変数のシンボルを見つける方法がわからなかった。(スコープとシンボルの理解が足りてないかも。)

# 参照・参考
リードマクロの作り方は
https://blog.3qe.us/entry/2018/11/13/023452
を参照しました。(すごくわかりやすかったです。)
Macショートカットメモ

# macのショートカット（適宜更新予定です。）

|コマンド|用途|
|:--|:--|
|fn + bakspace|deleteキー|
|command + bakspace|ファイル削除|
|command + fn + ←|home画面へ遷移(ブラウザの)|
|command + ↑|テキスト編集時のhomeキー|
|command + ↓|テキスト編集時のendキー、ファイルを開く|
|command + ←|テキスト編集時の行頭|
|command + →|テキスト編集時の行末|
|option + ←|テキスト編集時、単語単位の行頭|
|option + →|テキスト編集時、単語単位の行末|
|command + ctrl + Q|画面ロック|
|command + option + v|コピー元を削除して貼り付け＝カット＆ペースト|
|command + shift + 4|ドラッグ範囲をスクショ|
|ctrl + -|vscodeでメソッドジャンプした後、ジャンプ元へ戻るコマンド|
|command + I|Finderでファイル・フォルダの情報を開く|
|command + option + ←|【Eclipse】ヒストリー戻る|
|command + option + →|【Eclipse】ヒストリー進む|
dockerでdjangoの環境を構築する際にdjango-extensions, django-debug-toolbarを入れる

#環境構築に必要なファイル
* Dockerfile
* requierments.txt
* docker-compose.yml

これらのファイルが環境構築に必要なので、それぞれ内容を見ていきましょう。

##Dockerfile
```docker:
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
```

##requierments.txt
```:
Django>=2.0,<3.0
psycopg2>=2.7,<3.0
django-debug-toolbar==2.0
django-extensions==2.1.9
pytz==2019.1
six==1.12.0
sqlparse==0.3.0
Werkzeug==0.15.4
```

##docker-compose.yml
```yml:
version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python manage.py runserver_plus 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
```
django-extensionsのrunserver_plusを使用したいので、commandにそれを記述しています。
ここまで記述できれば環境構築の準備は完了です。

#構築手順
```:
#プロジェクト作成
docker-compose run web django-admin startproject example .

#コンテナ立ち上げ (以下のdjangoプロジェクトのファイル編集を先に済ませてください)
docker-compose up
```

#djangoプロジェクトのファイルを編集
```docker-compose up```をする前に、djangoのプロジェクトファイルを編集する必要があります。

* INSTALLED_APS
* MIDDLEWARE
* DATABASES
* INTERNAL_IPS (REMOTE_ADDRを指定)

これらを編集していきます。

```:settings.py
INSTALLED_APPS = [
    (省略)
    'debug_toolbar',
    'django_extensions',
]

MIDDLEWARE = [
    (省略)
    'debug_toolbar.middleware.DebugToolbarMiddleware',
]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

INTERNAL_IPS = ['0.0.0.0', '172.23.0.1']　<--　各自調べる必要があります
```

ここまで編集して```docker-compose up```で環境構築ができるかと思います。
CSSで版ズレエフェクト 画像編

CSSで版ズレのエフェクトをかけた画像を作ってみました。 
※2019年6月28日追記: [テキスト編](https://qiita.com/hibikikudo/items/8129785d3907f585ca07)も作りましたのでよかったらみてください。
[版ずれ（読み）はんずれ - コトバンク](https://kotobank.jp/word/%E7%89%88%E3%81%9A%E3%82%8C-7536)
> 2色以上の版を重ねて印刷した際、その印刷物の版がずれてしまう状態のこと。色が重なる部分の輪郭がぼやけたり、図形の隙間に下地の紙の色が見えていたりする。色校正の段階で、トンボの重なりなどを見て確認する。版がずれないように合わせることを、「見当を合わせる」ということもある。

上がオリジナルの画像で下が版ズレエフェクト加工をした画像となります。なんか独特の味というかエモい雰囲気が出たような？
![スクリーンショット 2019-06-27 18.07.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119598/87b9f814-6c70-0c53-430b-94927d3eea10.png)



<p class="codepen" data-height="265" data-theme-id="0" data-default-tab="result" data-user="h_kudo" data-slug-hash="OeOLEv" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="CSS misalignment effect ">
  <span>See the Pen <a href="https://codepen.io/h_kudo/pen/OeOLEv/">
  CSS misalignment effect </a> by Hibiki Kudo (<a href="https://codepen.io/h_kudo">@h_kudo</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>



## コード

```html:html
<div class="misalignment">
  <img src="http://lorempixel.com/400/200/sports/1/" alt="">
</div>
```

```scss:scss
.misalignment{
  position: relative;
  display: block;
  width: 400px;
  height: 200px;
  overflow: hidden;
  &::before,&::after{
    content:"";
    position: absolute;
    display: block;
    top: 0;
    background-image: url("http://lorempixel.com/400/200/sports/1/");
    background-size: 400px 200px;
    background-repeat: no-repeat;
    width: 400px;
    height: 200px;
    
  }
  &::before{
    transform: translate(-1px, 0) rotate(-1deg);
    filter: hue-rotate(-70deg);
    opacity: 0.6;
  }
  &::after{
    transform: translate(2px, 0) rotate(1deg);
    filter: hue-rotate(-190deg);
    opacity: 0.3;
    mix-blend-mode: screen;
  }
  img{
    position: relative;
    filter: hue-rotate(32deg) saturate(1.7);
    mix-blend-mode: color-burn;
  }
}
```

### コード解説
- `::before`, `::after`擬似要素を使って`background-image`プロパティにも`img`要素のメイン画像とまったく同じ画像を指定しています。
- その画像を`filter: hue-rotate();` で色相を大胆にずらします。色相が大きくズレていれば問題ないのですが、シアン（Cyan）、マゼンタ（Magenta）、イエロー（Yellow）のいずれかに近い色合いに合わせてやるとより雰囲気が出ます。
- さらにその画像を `opacity`（ここの数値は適当です）で透過させます。上に重なる方を少し薄くしてあげると効果的でした。
- 次に`transform`プロパティの`translate()`（上下左右への移動）と`rotate()`（角度）を使い、`::before`, `::after`擬似要素の画像をわずかにずらしていきます。ここの数値も適当で。
- さらに一番前面に来て欲しい`img`要素のメイン画像に `mix-blend-mode: color-burn;` （Photoshopの描画モードの**焼き込み**に相当）を、`::after`の画像に`mix-blend-mode: screen;`（Photoshopの描画モードの**スクリーン**に相当）を指定します。
- ここでメイン画像の色相が若干変わってしまうので、`filter: hue-rotate() saturate();`を使って色味を調整してあげます。
- 最後に全体を`overflow: hidden;`して余計なはみ出しを切り取れば完成です！

`mix-blend-mode`は2015年から主要モダンブラウザにサポートされだした比較的新しいCSSプロパティです。使用可否は[caniuse](https://caniuse.com/#search=blend-mode)でご確認いただければと思います。

それでは良きコーディングライフを〜！
SPSS Modelerの散布図に回帰直線を表示する

SPSS Modelerの散布図に回帰直線を表示する方法を紹介します。

■テスト環境
Modeler 18.2.1
R 3.3.3

#1. データの表示を使う

表示したいデータの入ったノードで右クリックし、「データの表示」を選びます。（Modeler 18.2以降の機能）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/70691f39-a073-bb25-f1d9-ae7aaa645768.png)

散布図のグラフを選び、線の当てはめで「線形」を選びます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ec50eca8-6921-e729-12f9-5caa993074c9.png)

#2. 従来の散布図のグラフノードを使う

この方法の場合、先に線形回帰のモデル作成を行い回帰式を作っておく必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5b9716d1-90fe-76b9-edbe-eb533560328d.png)



y=bx+aの式を散布図の関数の欄に入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/35aeda0f-8892-31ff-0a62-ba92cbb9cce2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ab82584c-630f-b885-23f8-d65e294828e8.png)

#3. 拡張の出力を使う

やっていることは２と同じですが、式を書きなおす必要がありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/627942dc-fa26-cd76-94e5-d62c82538d76.png)

```{r}
x=modelerData$年齢_末っ子
y=modelerData$負債_価値

plot(x,y,pch="●")
lm.obj<-lm(y~x)
abline(lm.obj,col=2)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/27a9a52d-de54-da76-3eb1-829c44c72165.png)
最もシンプルに大学や会社からsshで自宅にアクセスする。

#もっともシンプルな解決方法を示す。

sshを443で公開する。これだけです。
自鯖なんかでsslに使ってて443ポートは余ってないよ！って方はsslhを使う。　　
sslhは443アクセスを8443と22に流してくれるので443ポートを仲良く使うことができます。
UnityでPhysics Materialを使わずにボールを跳ね返らせる

## 動機
Unityでビリヤードを作ろうとして、いつものようにPhysice MaterialのBounceを使おうとしたら、発射時の力が弱すぎてうまく跳ね返ってくれない事態が発生。
じゃあ自分で実装してみよう！ということに。


## 反射ベクトルの求め方について
詳しいベクトルの解説はこちらや、
http://nn-hokuson.hatenablog.com/entry/2018/03/30/201715
こちらをご覧ください。
https://qiita.com/edo_m18/items/b145f2f5d2d05f0f29c9

## 使う関数
リンク先ではずらずらと計算式が出てきたと思いますが、Unityでは一行で反射ベクトルを求められる便利関数が存在します。

```
 Vector3 Reflect(Vector3 inDirection, Vector3 inNormal);
```
[公式リファレンス](https://docs.unity3d.com/ScriptReference/Vector3.Reflect.html)

この関数はinDirectionに物体のvelocity、inNormalに当たった物体の法線を与えてやれば、反射ベクトルを返してくれます。


## 実装
まず適当にステージを作ります。
![Unity 2017.4.18f1 Personal (64bit) - PhysicsTest.unity - Syogikuzushi - Universal Windows Platform_ _DX11_ 2019_06_27 16_28_31 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448642/5cf0d8b7-2222-b089-af75-cc456ace4ad6.png)

次に跳ね返させるオブジェクトを用意します。今回はSphereです。
RigidBodyをつけて、y軸だけ固定します。

![qiita_sphere (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448642/cea371a8-debe-14b1-d0b0-2f9934843cd7.png)

そして最初にボールを動かすために、velocityを変化させるスクリプトを書きます。

```c#:AddPower.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AddPower : MonoBehaviour {

	private Rigidbody rb;
	private BounceCalc bounceCalc;
	public float power = 1;    // 発射時の力

	// Use this for initialization
	void Start () {
		rb = this.GetComponent<Rigidbody>();
		bounceCalc = this.GetComponent<BounceCalc>();
	}
	
	// Update is called once per frame
	void Update () {
		if(Input.GetKeyDown(KeyCode.Space)){
			rb.velocity = new Vector3(power, 0, power);
            // 発射時のvelocityを取得
			bounceCalc.afterReflectVero = rb.velocity;
		}	
	}
}
```

次に、実際に反射ベクトルを計算しているスクリプトがこちらです。

```c#:BounceCalc.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BounceCalc : MonoBehaviour {

	//ボールが当たった物体の法線ベクトル
	private Vector3 objNomalVector = Vector3.zero;
	// ボールのrigidbody
	private Rigidbody rb;
	// 跳ね返った後のverocity
	[HideInInspector] public Vector3 afterReflectVero = Vector3.zero;

	public void OnCollisionEnter (Collision collision) {
        // 当たった物体の法線ベクトルを取得
		objNomalVector = collision.contacts[0].normal;
		Vector3 reflectVec = Vector3.Reflect (afterReflectVero, objNomalVector);
		rb.velocity = reflectVec;
		// 計算した反射ベクトルを保存
		afterReflectVero = rb.velocity;
		Debug.Log ("nomal:" + afterReflectVero);
	}

	// Use this for initialization
	void Start () {
		rb = this.GetComponent<Rigidbody> ();
	}
}
```

この二つのスクリプトをSphereにアタッチするとBounceを使わなくてもボールが跳ね返ってくれます。

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448642/c4f5a7f3-de7b-ff18-9c26-7a0a14b5acff.gif)
演算子の優先順位と意味

#はじめに
用語と定義をしっかり覚える事が好きな自分用です。
演算子の優先順位とその意味を見やすくまとめようと思い投稿します。


###優先順位
```
[高]   +(単項)  !  ~　　　　　　    !  否定演算子, ~a ビット演算子、aが１ならば０、またその逆
       **　　　　　　　　　　　　　  ** 代数演算子, a**b aのb乗
       -(単項)                 
       *  /  %                   %  代数演算子, a%b aをbで割った時の余り
       +  -
       > >=  < <=
       <=> ==  === !=  =~  !~    <=> 宇宙船演算子, =~ 正規表現演算子 
       &&                        && 論理演算子, a && b　aかつbが真ならば真
       ||                        || 論理演算子, a || b aまたはbが真ならば真
       ..  ...　　　　　　　　　　　 .. 範囲演算子
       ?:(条件演算子)　　　　　　　　 ?= 条件演算子, a ? b : c aが真ならばbその他はc
       =
       not
[低]   and or

```
"Please run it by a privileged user to update."と言われてAndroid Studioのupdateができない。

# Android Studioからupdateできない
いつも通り画像の通りやろうとすると

"Please run it by a privileged user to update."

と言われてできなかった。
<img width="240" alt="スクリーンショット1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215536/778f6329-d58a-98fb-03ff-40a31caee90b.png">



# JetBrains ToolBoxでした
JetBrains ToolBoxを入れたのを忘れていました。
ここからupdateで解決です。
<img width="430" alt="スクリーンショット2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215536/c82377df-3284-863c-a770-ec3905d49b49.png">
execコマンドを使ってpingを飛ばそうとしたらはまった話

## どんな状況になったのか
ウェブページからpingの疎通確認をしたいと思いexecコマンドを使って実現しようとした。すると、PHPコマンドで確認すると正常に動作するがブラウザから確認しようとすると権限不足と言われて正常に動作しない。

## 結果関係なかったけどコード
```php
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Home</title>
</head>

<body>　
</form>
  <?php
  exec(sprintf('/bin/sudo /usr/bin/ping -c1 -w3 192.168.30.12'), $output, $return_ver);
  if($return_ver == 0){
    echo "ok";
  }else{
    echo "no";
  }
  }
   ?>
</body>
</html>
```

## 環境
* サーバー
    - CentOS7
    - PHP7.1
    - Apache2.4.6
* PC側
    - Windows10
    - chorome 75.0.3770.100

## 試したこと
### ファイルの権限を変更
本当はよくないが原因究明のためいったん777にした。
が正常に動作しなかった。

```
chmod 777 test.php
```

### Apacheユーザの権限を変更
これも今回はroot権限と同様の権限を与えているが本来は危険な行為であるため避けたほうがよい。

```vim:visudo
#追記
Apache  ALL=(ALL)    NOPASS:ALL
```
これに関してはやっておかないと権限の関係でダメかもしれない

## 解決方法
### SELINUXだった
どうやらSELINUXがroot権限をとられても被害を最小限にしようと頑張っていた模様
単純にSELINUXを無効にしたら正常に動作してくれました。

### SELINUXを無効にする
一応SELINUXを無効にする方法を書いておく

```vim:/etc/selinux/config
SELINUX=enforcing
↓変更
SELINUX=disabled
```
この後rebootをかけると設定が反映される。

## まとめ
今回の原因はSELINUXでした。

以前もSELINUXに苦しめられたことがあったが忘れていて今回もやられてしまいました。
自分への備忘録のために書いたようなものですが誰かの参考になったらうれしいです。

## 参考
https://qiita.com/hanaita0102/items/5d3675e4dc1530b255ba
ログインIDをViewsに渡す[Django]

Django == 2.0.6
Python == 3.6.2

```views.py
from django.contrib.auth.models import User

def sample(request):
    loggedin_userid = request.user.id
```
この書き方で取得できました。

ここに書いてありました。
https://docs.djangoproject.com/en/2.0/topics/auth/default/

ちなみにIDでフィルターをかける方法はこちら。

    loggedin_userid = [Model].objects.filter(user_id=request.user.id)
params[:id]とfind_byメソッドの意味~ヘルスケアwebサービスを自分で作る医者の日記~

progate 9回　ラスト

URLの指定で、他人の投稿にアクセスできてしまいのを防ぐ回

```
def ensure_correct_user
    @post = Post.find_by(id: params[:id])
    if @post.user_id != @current_user.id
      flash[:notice] = "権限がありません"
      redirect_to("/posts/index")
    end
```

find_byメソッドの意味がスッキリした
SQLの id というカラムから、params[:id]に合致するものを探し、
それをインスタンス変数として＠post に渡している。
これは投稿そのもの、一列丸ごと　

ここでparams[:id]にする意味がわからなかったが

params[:id]はルートの指定を格納している
posts/1
みたいな

ユーザー各ページのURLを入れ込むことによって、ここにアクセスすることを防いでいる
と判明！！
eslint prettier husky を使った簡単環境構築


# 環境を構築するメリット

### eslint

* 一定のコーディングルールを儲けることができる為、コードレビュー負担の削減や可読性の向上を期待できます。
* プラグインを設定することで即時エラーを確認することができる為、開発スピードを向上できます。

### prettier

* コードフォーマット機能を備えており、コードフォーマットの統一による可読性の向上を期待できます。
* インデント等を気にせずプログラミングが可能な為、開発スピードを向上できます。

### husky

* コミット時に追加ファイルを**eslint**と**prettier**による自動修正が可能。
* 自動修正できない場合は、コミット時にエラーがある場合はエラー内容が出力されコミットができない。
* 定めた条件をクリアしたものだけがコミットできる為、レビュアーの負担を軽減できます。

# eslint prettier husky で作る簡単環境構築

導入する際の、基本的な構築手順を記載します。
導入後に、必要に応じてルールの追加やプラグインの追加も可能です。

## 1. eslintをinstall

```
npm install eslint  --save-dev
```

## 2. eslintの初期化
```
./node_modules/eslint/bin/eslint.js --init
```
いくつか質問されるので、好みやプロジェクトに合わせて選択する。
→ eslintの設定ファイル `.eslintrc(ファイル形式選択可能)` が作成される。 
※ style guideについてはいくつか選択肢がありますが、迷ったら最初は厳しすぎない `Standard` がオススメです。

## 3. prettierをinstall
```
npm install prettier eslint-config-prettier eslint-plugin-prettier --save-dev
```

## 4. eslintrcファイルにprettierの設定を追加

### extends
```json
  "extends": [
    "plugin:prettier/recommended"
  ]
```
`extends`（配列）に設定を追記します。

### rule
```json
  "rules": {
    "prettier/prettier": [
      "error",
      {
        "singleQuote": true,
        "semi": false
      }
    ]
  }
```
シングルクォートとセミコロンの設定を追加してます。
ここに追加したいルールを追加することでカスタマイズ可能です。

#### カスタマイズ例
``` json
  "rules": {
    "prettier/prettier": [
      "error",
      {
        "singleQuote": true,
        "semi": false
      }
    ],
    "no-var": "error",
    "prefer-const": "error",
    "object-shorthand": "error",
    "prefer-arrow-callback": "error"
  }
```

## 5. husky lint-staged をinstall
```
npm install husky lint-staged  --save-dev
```

## 6. huskyの設定追加
### package.json に追加
```json
{
  "lint-staged": {
    "*.js": [
      "eslint --fix",
      "git add"
    ]
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  }
}
```

`"scripts": {...},`などと同階層に追加します。

# おまけ. VSCode (Visual Studio Code) で保存時自動修正

1. プロジェクトルート配下に、`.vscode`ディレクトリを作成
2. `.vscode` 配下に下記ファイルを配置

## settings.json
```json
{
  "eslint.nodePath": "./node_modules/eslint/bin/eslint.js",
  "eslint.autoFixOnSave": true,
  "eslint.workingDirectories": [
    "./path/to/workingDir"
  ]
}
```
※ eslint適用したいディレクトリがサブディレクトリの場合は、`"eslint.workingDirectories"`を指定する。
atomとlatexとstyファイル

TeXにてstyファイルを導入するのに毎回困るのでメモ．
[AtomでLaTeXを導入している時のstyファイルの置き場所](https://qiita.com/tkygtr6/items/748234c53b5db4220d5a)を参考としたwindowsの場合の手順．

# 対象システム
Atom + W32TeX

# ほしいstyを検索
styで検索すればすぐ出る．
例えば，niceframe.styの場合，[niceframe.sty: LaTeXパッケージ](https://www.biwako.shiga-u.ac.jp/sensei/kumazawa/tex/niceframe.html)がすぐ見つかり，インストールの方法などが書いてある．

# 読み替え
インストールの時に，だいたい以下の記述がある(以下はniceframeの例)．

- $TEXMF/fonts/source/public/以下にフォルダをつくってファイルをコピー．．．
- texmf-distの対応するフォルダーまたはtexmf-localに作成したフォルダーに．．．

W32TeXの場合，$TEXMFやtexmf-distを以下のフォルダで読み替えて作業

- c:\w32tex\share\texmf-dist
CircleCIでAWS CLIを利用する時に環境変数(or context)が効かない

# 概要
CircleCIで環境変数やContextsに値を設定しても、AWS CLIが以下のようなエラーで落ちることがあります。

```bash
#!/bin/bash -eo pipefail
aws configure set aws_access_key_id \
$AWS_ACCESS_KEY_ID \
--profile default
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: the following arguments are required: value
Exited with code 2
```

# 原因
- GitHubのフォークしたリポジトリからPRを出している
    - そしてCircleCIの`Advanced Settings`の`Pass secrets to builds from forked pull requests`が`Off`になっている

# 対策
上記の設定を`On`にすれば解決するが、**脆弱性の懸念が大きいためおすすめできません。**(詳しくは設定画面の説明を参照)

> Pass secrets to builds from forked pull requests
Run builds for fork pull request changes with this project's configuration, environment variables, and secrets.

> There are serious security concerns with this setting (see the documentation for details.) If you have SSH keys, sensitive env vars or AWS credentials stored in your project settings and untrusted forks can make pull requests against your repo, then this option isn't for you!


各自でビルドを行わないのであればフォークしない運用とするのが良いと思われます。
App Extension使用時に発生したエラー「embedded binary is not signed with the same certificate as the parent app. Verify the embedded binary target's code sign settings match the parent app's.」の解決法

[前提]iOSの開発でApp　Extension (https://qiita.com/motokiee/items/1f9147e6eb18f51937af)
を利用していた。
アプリ配布のためApp本体のProvisioning Profileなどを整えた所、タイトルのエラーが発生した。

[原因]App本体とApp ExtensionでProvisioning Profileや開発チームが異なっていた事（App本体のProvisioning Profileと開発チームだけ手動で設定したのに、App　Extension側は自動設定のままで放置していた事）が原因だった。

[解決法]App Extension用にProvisioning Profileを作成し、Xcodeの　TARGETS > (Extensionの名前) > Signing でAutomatically manage signingを外し（手動設定にし）、同メニューのSigning(Release)> Provisioning Profile からProvisioning Profileを設定した。

同時に、TARGETS > (Extensionの名前) >Build Settings > Signing > Code Signing Identity > Release より、開発チームを親Appの開発チームと合わせた。

[参考資料]https://stackoverflow.com/questions/25927604/xcode6embedded-binary-is-not-signed-with-the-same-certificate-as-the-parent-app/29848788
複数行で文末に「...」実装（テキストエリア可変アリ）


## 課題

複数行で文末に「...」をつけるという事案について、よく作業するのでメモ。
-webkit-line-clampがIEでも対象になればとてもありがたいのだが、、。

**◆以下の要件を満たすことを前提とする**

- 複数行対応
- 文字量は可変（CMS等などで流し込まれる文字など文字量が読めない場合）
- レスポンシブでも「...」が正しく表示される


## 解決方法


```html

<p>テキストがはいりますテキストがはいりますテキストがはいりますテキストがはいります</p>

```


```css
p {
  position: relative;
  width: 20em;
  max-height: 4.2em;
  line-height: 1.4;
  overflow: hidden;
  background-color: #fff;
}
p:before,
p:after {
  background-color: #fff;
}
p:before {
  content: '...';
  position: absolute;
  top: 2.8em;
  right: 0;
  padding: 0 0.1em;
}
p:after {
  content: '';
  width: 100%;
  height: 100%;
  position: absolute;
}

```
ZIP圧縮されたファイルのbase64文字列からファイルを表示する。

**※ほぼ自分用メモ。**
e-Gov法令APIでは，法令に書式等が含まれている場合，その書式の画像やPDFを一つのZIPに纏めたものをBase64文字列にしたものを，ImageData要素のテキストとして返します。
そこで，このBASE64文字列から元のファイルを復元し，たとえばHTML内に表示したりすることが考えられます。
ImageData要素からのテキストの取り出しはまぁ後でやるとして，とりあえずファイルをちゃんと取り出すところまで。
法技研六法に組み込んだら，もうちょっと丁寧に書き直すかも。

1. Base64文字列をバイナリに変換
2. バイナリ文字列をUint8Arrayに変換
3. Zlib.Unzipを使って，2.のUint8Arrayを解凍
4. 解凍したものに含まれる各ファイル（Uint8Arrayになっている）をBase64文字列に変換
5. Base64文字列ファイルを，HTMLに埋め込む。

#1. Base64文字列をバイナリに変換
```javascript
var imageData = "UEsDBBQACAgIAJx4204AAA（中略）AAAA";
var binaryString = atob(imageData);
```

#2 バイナリ文字列をUint8Arrayに変換
```javascript
var u8a = Uint8Array.from(binaryString.split(""), e => e.charCodeAt(0))
```
#3. Zlib.Unzipを使って解凍
```javascript
var unzipped = new Zlib.Unzip(u8a);
```

#4. 各ファイルをBase64文字列に変換
```javascript
var b64s = [];
var filenames = unzipped.getFilenames();
for(var i in filenames ){
    var buffer = unzipped.decompress( filenames[i] );
    var arr = Array.from(buffer, e => String.fromCharCode(e)String.fromCharCode(e)).join(""));
    b64s[i] = arr.join("");
}
```

#5. HTMLに埋め込む（PDFの場合）
```javascript
for(var i in b64s){
  var obj = document.createElement("object");
  obj.setAttribute("type", "application/pdf" );
  obj.setAttribute("data", "data:application/pdf;base64,"+b64s[i]);
  obj.setAttribute("width", "100%");
  obj.setAttribute("height", "100%");
  
  document.body.appendChild(obj);
}
```

参考文献：
-http://var.blog.jp/archives/62330155.html
-https://github.com/imaya/zlib.js
-https://qiita.com/katzueno/items/c490361c3274d0108e7d
-https://stackoverflow.com/questions/43234936/providing-the-object-tag-with-data-directly
-https://www.e-gov.go.jp/elaws/pdf/houreiapi_shiyosyo.pdf
メモ：多次元配列への値の代入と表示、および拡張for文の練習

###概要
今まで2次元以下の配列を取り扱う時には、何となく、表、あるいは行列のようなイメージで頭を整理していました。が、3次元になった途端に頭が完全にバグるという事態に発展。

そこで、[【初心者からわかる】Javaの多次元配列の使い方](https://eng-entrance.com/java-array-multidimensional)と、[多次元配列を拡張for文で展開](http://java-lab.com/array-multidimensional-enhanced_for/)を参考にさせてもらって、頭を整理し直しました。以下は整理に使用したプログラムになります。


```java:Intdealing.java
public class Intdealing{
	public static void main(String[] args){
		int[][] nums = new int[3][4];
		
		System.out.printf("0階層の部屋数:%d\n",nums.length);
		System.out.printf("1階層の部屋数:%d×%d\n",nums.length,nums[0].length);
		
		
		int[][][] nums2 = new int[8][18][2];
		
		System.out.printf("0階層の部屋数:%d\n",nums2.length);
		System.out.printf("1階層の部屋数%d×%d\n",nums2.length,nums2[0].length);
		System.out.printf("2階層の部屋数%d×%d×%d\n",nums2.length,nums2[0].length,nums2[0][0].length);
		
		//要素番号を使用して値を代入
		for(int i=0; i<nums2.length; i++){
			for(int j=0; j<nums2[i].length; j++){
					nums2[i][j][0] = 2*i;
					nums2[i][j][1] = 2*j;
			
			}
		}
		
		//拡張for文を使用して値を表示
		for(int[][] dimension1 : nums2){
			for(int[] dimension2 : dimension1){
				for(int dimension3 : dimension2){
					System.out.println(dimension3);
				}
			}
		}
	}
}
```

###余談
4時間ほどかけてあちこちのサイトを回って、なんとかプログラムを完成させました。今、私の頭の中では、多次元配列はアリの巣のように、あるいはマンションのように縦につながって積み重なる部屋の連なりとして捉えられています。

プログラムを勉強していく中で、今回のように躓くパターンが一番多いように感じられます。そもそもイメージとして捉えるのが間違っているのか、あるいは捉えるイメージが間違っているのかのはよくわかりませんが...
配列によるメソッドの可変長引数！

## 可変長引数とは？？？
***個数に制限のない引数のこと！***
自分で、定義するメソッドで可変長引数を使いたい場合は、引数名の手順に*をつけます！

```ruby:sample.rb
def メソッド名(引数1,引数2,*可変長引数)
  #メソッドの処理
end
```
可変長引数は配列として受け取ることができます！

具体例を見ていきましょう！
次のコードは、引数として渡されたメニューの名前を、注文していくメソッドです。

```ruby:sample.rb
def order(*food)
  puts "#{food.join('と')},お願いします！"
end

order('ハンバーガー') #ハンバーガー,お願いします！
order('ハンバーガー','ポテト') #ハンバーガーとポテト,お願いします！
order('ハンバーガー','ポテト','コーラ') #ハンバーガーとポテトとコーラ,お願いします！
```
6日目: <SEO対策>ogpタグとcanonicalタグ

#今日の学び
・ogpタグ、canonicalタグ　←メイン
・background-size指定色々
・transitionで一部のプロパティだけ指定する方法
・transform:scale(x,y)は一つの値でも指定できる！

##ogpタグ、canonicalタグ
**ogpタグ**・・・サイトの情報とSNSとを連携させる！
これによってSNSでの拡散力や印象がアップ！

```HTML
<meta property="og:title" content="ページタイトル" />
<meta property="og:type" content="website　か　blog　か　article" />
<meta property="og:description" content="ページの簡単な説明" />
<meta property="og:url" content="ページのURL" />
<meta property="og:site_name" content="サイトの名前" />
<meta property="og:image" content="サムネイル画像のURL" />
```

ogt:typeは、
website・・・トップページ
article・・・下層ページ、その他　　で値を使い分ける。
他にもたくさんあるらしい。
[参考サイト](https://singoro.net/note/ogp-og_type/)

facebookやtwitter専用のogpタグもある。

```HTML
<meta property="fb:app_id" content="App-ID（15文字の半角数字）" /> <!--facebook用-->
<meta name="twitter:card" content=" Twitterカードの種類" />      <!--twitter用-->
```

App-idはfacebookにOJPタグを適応させる為に必須。
facebookを利用するのであれば取得しなければならない。
ツイッタカードの種類には以下のようなものがある。

**summary**・・・文章多め、画像小さめ
**summary large image**・・・画像大きめ、文章そこそこ
**photo**・・・画像大きめ、文章ほんのちょっと
**gallery**・・・画像複数（４枚まで）
**app**・・・アプリ表示用

###canonicalタグについて
複数ページのSEO評価をまとめる！
→SEOランクの分散を防ぐ！

```HTML
<link rel=”canonical” href=”SEOランクを集中させるサイト”/>
```
例えばこんなときに使おう！
①wwwありとなし、httpsとhttpなどを同じページ内容で併用して運用している場合
②スマホサイトとPCでページを分けているが内容が同じ場合　...etc

##background-size指定色々
contain・・・画像を切り取らずに最大で表示
cover・・・画像の縦横比を崩さず、最大で表示、はみ出す場合は切り取る
auto・・・縦横比が維持されるように適当に拡大縮小される
パーセント指定・・・１個指定と2個指定ができる。

```CSS
div{
   background-size: 30px;    /*横幅が30px,高さはauto*/
   background-size: 30px 30px; /*横幅が30px,高さ30px*/
}
```

一つ指定する場合は縦＝横でないので注意！

##transitionで一部のプロパティだけ指定する方法
一部だけ動かせるなんて知りませんでした！

```CSS
.haniwa {
   transform: translateY(30px);    /*ここをtransitionで動かなくできる！*/
   transition: opacity 1s linear;
}
.haniwa:hover {
   opacity: 0.8;
}
```

transitionプロパティに入っている**transition-property**
で指定できます。
複数指定する場合はカンマ区切りで指定できる！

```CSS
.haniwa {
   transform: translateY(30px);
   transition: opacity 1s linear,transform 2s linear;
}
```

##transform:scale(x,y)は一つの値でも指定できる！
一つの値で設定できる！

```CSS
.haniwa {
   transorm: scale (1.5)   /*scale(1.5,1.5)と同意*/
}
```

いっぺんに設定できたり、違う意味合いになったり、プロパティ毎でまちまちなので
難しい....

今日は以上！
TECH ~Day5~

学習五日目を終えて、新たにまた新しい用語を学び始めました。
一旦レビュー管理アプリケーションを作る作業を終え、今回は「クラス」と「インスタンス」を学び始めました。
これを学びながら再びレビュー管理アプリケーションを作っていく作業を始めていきます。

学習内容
・クラスとインスタンス
・クラスの定義
・newメソッド
・クラスメソッド、インスタンスメソッド
・インスタンスの定義
・クラス変数、インスタンス変数


・クラスとインスタンス
クラス
とある種類のオブジェクトの共通の属性とメソッドをまとめて定義しておく型のようなもの。
（例）「人クラス」の場合
　　　　　　　　性：名前、年齢、性別など
　　　　　メソッド：歩く、寝る、食べるなど

このような型を予め、定義しておくことによってこの方に沿った個別のオブジェクトを作ることができる。

インスタンス
クラスに基づいて生まれたオブジェクトをインスタンスと呼ぶ。
クラスが先。クラスからインスタンスが生まれるイメージ。
Rubyには予め定義されているクラスが存在する。
（例）
　　　　配列オブジェクト：Arrayクラス
　　　　数位オブジェクト：Integerクラス
　　ハッシュオブジェクト：Hashクラス　　など


・クラスの定義
書き方
　class   クラス名
　　！変数 / メソッドの定義
　end

（例）
　class   Review

  end
↑これはＲeviewクラスの定義
　もっともシンプルなクラスの定義の形


・newメソッド
定義したクラスからインスタンスを生成するには、「newメソッド」を使うとできる。
（例）
 class Review
 end

 review = Review.new
この「あるクラス.new」というインスタンス生成のコードは、「クラスがメソッドを利用している」形である。


・クラスメソッド、インスタンスメソッド
クラスメソッド
　クラスが使用できる。クラスで共通の情報を使った処理に使用する。
　クラスの定義内で行う。

インスタンスメソッド
　インスタンスが使用できる。インスタンスごとの個別の情報（属性値）を使った処理に使用。


・インスタンスの定義
インスタンスメソッドの定義はインスタンスのクラスの「定義内」で行う。
書き方
 class クラス名
  def メソッド名
   ! 処理
  end
 end


・クラス変数、インスタンス変数
クラス変数
　クラス全体で使える変数。
　クラス内ではどこでも使えるため、クラスメソッド、インスタンスメソッドの両方で使える。
　クラスを通して、値が共通の情報に使用する。

インスタンス変数
　共通の属性としてインスタンスに定義できる変数。
　その値は個々のインスタンスによって別別に設定できる。


とりあえず五日目の学習内容は以上になります。
前回まで行っていた作業よりは理解しやすいないように感じました。引き続き学習に取り組みたいと思います。