OmniAICreator/Qiita-1.07M huggingface dataset:
uGUIよりも手前にメッシュのオブジェクトを描画したい

#Canvasの設定を変更する
##3種類のRender Modeを使い分ける

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82250/108e6c28-939a-8b4f-6a75-8daf75dc3268.png)

- Screen Space - Overlay
- Screen Space - Camera
- World Space


## ① Screen Space - Overlay
常にUIが最前面で描画されます。

Canvas同士の描画順は**Sort Order**で制御することが可能です。
Sort Orderの値が大きいほど手前に描画されます

![01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82250/392c4169-1a57-f9a2-6924-3906c2742e07.jpeg)

UIが最前面張り付きになるので、このモードの時にはMeshをuGUIよりも手前に描画することはできません。

MeshやParticleの描画順を前後させたい時には**Screen Space - Camera**、もしくは**World Space**を使う必要があります。

Sort Orderが出てきた後で紛らわしいですが、Sprite RendererやParticle System、Mesh Rendererには**Sorting Layer**と**Order in Layer**という2つのパラメーターが存在します。

これによってそれぞれの描画順を制御することができます。

## Sorting Layer & Order in Layer
階層としてはSorting Layerの中にOrder in Layerがあります。

なのでSorting Layerで描画順を大別し、Order in LayerでLayer内の描画順を細かく制御します。

Sorting Layerは初期状態では**Default**しかないので自分で追加してあげる必要があります。

![02.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82250/cdce84d7-b998-1ddb-4a93-3e3bd9c4cb41.jpeg)

BackとForwardを足しました。
上にあるほど奥に、下にあるほど手前に描画されます。

Sorting Layerが設定されていないと、基本的にはZ値を基に描画順は変わります。
カメラより遠いものを先(奥)に描画し、近いものは後(手前)に描画します。

![03.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82250/80015390-2706-30c6-ea1d-7d21906cef73.jpeg)

真ん中の画像をDefaultをBackにし、他はDefaultのままにするとこのようになります。

![04.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82250/db3f053b-43c9-1ae3-746e-c7b860cf4169.jpeg)

描画順がZ値に関係なく、Sorting Layerの順で描画されるようになりました。

全てのSorting LayerをDefaultに戻し、一番奥の画像のOrder in Layerを1にしてみます。

![05.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82250/012c165b-366a-b3a9-0795-a5c0a1b6ad40.jpeg)

Order in Layerが0のものより手前に描画されるようになりました。

##② Screen Space - Camera
Order in Layerを使うためにモードを**Screen Space - Camera**に変更します

ここで注意が必要なのが**Render Camera**がNoneのままだと、Screen Space - Overlayと描画結果が変わらないままになってしまいます。

![06.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82250/e0fe1261-b7c7-71d5-9096-1104c3eb7b08.jpeg)

Warningに書かれているようにScreen Space - Overlayと同じ挙動になります。

Cameraを設定した状態で**Plane Distance**を使うことでカメラとUIの間にMeshを描画できるようになります。

Plane DistanceとはカメラとUIの距離を指しており、この値が例えば3だとカメラとUIの間に3m分のスペースがあるのでそこに配置されたオブジェクトはUIよりも手前に描画されます。

![07.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82250/99bda977-e17d-c58c-e9c4-9a0be0f45de4.jpeg)

![08.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82250/2505d3cf-f3bf-9451-78ee-dfac57948e0d.jpeg)

##③ World Space
これは3次元空間にUIを配置するモードなので他のGameObjectと同じようにZ値を基に描画順が制御されます。

他のモードではUIが画面張り付きだったのに対し、回転した状態で配置することもできます。
普通のGameObjectのような感覚で扱うことが可能になります。

このモードでもSorting LayerやOrder in Layerを使って描画順を制御することが可能です。

#uGUIよりも手前にメッシュのオブジェクトを描画するには
**Screen Space - Camera**か、**WorldSpace**を使うことで実現できます。

Mesh Rendererを使ったオブジェクトはSorting Layer、Order in Layerのパラメーターがインスペクター上にありませんが、スクリプトから変更可能です。

テラシュールブログさんの記事が参考になります。
[UnityのSpriteとパーティクルとかモデルの描画順番について](http://tsubakit1.hateblo.jp/entry/2015/01/05/233000)

Sorting LayerやOrder in Layerを使わなくても、基本的には手前に描画されてほしいものをカメラの近くに配置すれば問題ありません。
Cytoscapeでオートマトンの図を書いてみる

## 概要

学生にオートマトンなどの計算理論を教える機会があったのですが、そのとき結構面倒だったのが、講義スライドや演習の例題のオートマトンの状態遷移図を書くことでした。結局、PowerPointで作図しましたが、書くときの柔軟性はあるし、それなりにきれいに書けるという点では良いのですが、遷移を表すエッジと状態を表すノードをつなぎ直したり、エッジをちょうどいい感じに書いたりする等が面倒で、かなりの時間を費やしました（徐々にノウハウがたまって速くかけるようにはなりましたが）。オートマトンの状態遷移図は、そのフォーマット自体は確立しているのに、それを書くツールはみつからず、UMLを書くツールでも対応はしていないと思います。書く良い方法を探したのですが、見つけられませんでした。そこで少しツールを調査して結局、Cytoscapeを使って書く方法がよさげかなと思ったので紹介します（超ニッチな需要とは思いますが）。

##  オートマトンの状態遷移図とその特徴

オートマトンの状態遷移図は、以下のようなものです（下図）。
<img width="449" alt="スクリーンショット 2019-10-02 20.49.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/219248/48cbfeed-5ada-a183-de49-6b4cf6684dc9.png">

* 状態をノード、遷移をエッジとするグラフ（ネットワーク）
* 状態を表すノードの形は円で、円の中には状態を識別する記号が書かれる
* 遷移を表すエッジは有向で、遷移をもたらすアルファベットがラベルとしてつく
* 遷移が開始する開始状態を識別するために、その状態にのみ接続しているエッジを使う
* 系列が受理される状態である受理状態は二重円

なので、それを表示するツールには以下の条件が求められます。

* （当然だが）グラフ表示ができる
* ノードとエッジのプロパティをそれぞれ、ノードの中とエッジのラベルにマッピングできる
* 円・二重円でノードを表せる
* 片側だけノードにつながるエッジがかける

## 状態遷移図を書くツール

[この記事](https://medium.com/@c_z/ネットワーク可視化周辺の現状-1-8a4db3cd1f25)によると、　ネットーワークの可視化ではCytoscapeとGephiの2強であるということ。Cytoscapeのほうが、REST APIによる連携や、Cytoscape.jsがあることから、ノウハウをWebアプリにも持っていけそうだったので、Cytoscapeを使うことにしました。また、グラフデータベースNeo4jのNeo4j Browserを使うことも考えたのですが、カスタマイズがほとんどできなかったので、今回はあきらめることにしました。

## Cytoscapeをどう使ったか

Cytoscapeはスタイルを自分で定義することができます。スタイルは、ノードとエッジのプロパティをそのままスルーでマッピングさせたり（例えば、nameプロパティをノードに表示する等に使う）、プロパティの値毎にどの色・太さなどを使うかというマッピングも可能です。そこで、オートマトンの状態遷移図向けのスタイルを作成しました。スタイルはサンプルとまとめて[ここ](https://github.com/ggszk/automaton_cytoscape/)におきました。多少の工夫が必要でした。

* ノードの種別はtypeプロパティで区別する。
* 開始状態の課題は、出側のノードのVisible属性をfalseにすればよいのではと考えたが、そうすると、そのノードにつながるエッジはすべてunvisibleになってしまうので断念。出側のノードのラベルとボーダーを透明に設定することで対応した。その見えないノードのtypeプロパティはstartである
* 終了状態はtypeプロパティがacceptedであるものである。終了状態の二重丸は、当初ノードのボーダーを二重線にしようかと思ったが、うまく二重丸にならなかった。それで二重丸の画像をマッピングすることにした（この画像も上記の例に入っている）。

書いた結果は下図のようになりました。
![automaton_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/219248/802e774a-f526-cc45-a868-1c4a453d8c53.png)

## 状態遷移図の作成手順

では実際に書きたい図があるときに書く手順であるが、Cytoscapeのインポート・アウトポート形式であるsif形式が、純粋なグラフの論理構造を記述できるのでそれを使うのが良さそうである。最初にsif形式でグラフの論理構造を定義し、それとスタイルファイルをインポートし（スタイルファイルはデフォルトに入れてしまえば最初の一回入れるだけよい）、Cytoscapeおまかせで配置させる。その場合、forceレイアウト（ばねモデル）がたいてい適用されるが、きれいには並べられないので、自前でノードを並び替えればできあがり、その状態で保存すればレイアウトも保存される。

## おわりに

便利になったかは微妙なところである。オートマトンをうまく並べてくれるレイアウトアルゴリズムがあるとよいのだが。
指定した画像の上にスタンプのせるやつ作った

# はじめに
指定した画像の上にスタンプのせるサービスあるじゃないですか
勉強になるかと思ったので似たようなものを作ってみました
# どんなやつ
![gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329559/6638f5dd-23ff-70a3-b08a-67a60a6a7245.gif)


url
https://babu-ch.github.io/gurasan_stamp/

source
https://github.com/babu-ch/gurasan_stamp

# 使っている技術
Vue.js, JavaScript, Canvas
サーバーはGithubPagesを使用
# 仕様
画像をアップロード
↓
アプロドされた画像を表示
↓
アイコンをすきなとこに動かす
↓
合成した画像を出力
画像出力部分は
DOMを動かして最終的にCanvasでそれを再現するような仕様になっている

# 詰まったところ

canvasのrotateがちょっと難しかった

参考
https://weblike-curtaincall.ssl-lolipop.jp/blog/?p=594

# こめんと

iphoneとか古いブラウザでは動かないかもしれない

あとめっちゃ使いづらいしサングラスのアイコンとか透けとるやないかい

サンタの帽子もフチが透けとるやないかい

# おわりに

GithubPagesすげえ！

GithubPagesがあれば簡単なwebサービスはタダでサクサクつくれますね
CSS　3

挫折克服、、、！

実際自分のコードが間違っていただけなのですが。
ほんとに反応しなくて焦りました。

持つべきものは教えて貰える環境です。

あと優しい世界。
独り言でなんのアウトプットもありませんが、いいね押してもらえたり情報頂けたりと感謝です、、、

続けることができそうです。

【メモ】
今日やったこと
CSSで色を変える
デベロッパーツールを見てみる
(ctrl　＋　shift ＋　Iで出てくる)
検証してみること
【目からウロコ！】historyのインデックス番号から、簡単にコマンド実行する方法

# 何かとお世話になってるhistoryコマンド
「あれ？ssh接続するときのコマンドってなんだっけ？」

「mysqlコマンドで指定してたホスト忘れた」

そんなとき、historyコマンドを使って履歴をコピペしてました。

、、、今までは。

# historyからのコピペはやめよう

試しにコマンド履歴を見てみます。

たくさんの履歴を見ても仕方ないので、例のように直近の7件だけを表示する場合は、 `tail -7` のように件数を指定します。
参考：[historyコマンドで最新の数件だけを取得する](https://qiita.com/jnchito/items/fd6182aeedcd194d3937)

```shell:terminal
$ history | tail -7
  536  cd Desktop/
  537  ls
  538  ruby ruby.rb 
  539  irb
  540  vim ruby.rb
  541  ruby ruby.rb 
  542  history | tail -7
```

そしていよいよ本題。

例えば538の`ruby ruby.rb`を再度実行したいとき、なんとこんなコマンドが使えるんです。

```shell:terminal
$ !538
```

とっても簡単😊
【Rspec】attributes_forってなんだ...

##はじめに
ポートフォリオの機能を一通り実装し終えたので、Everyday Railsで勉強をしながらRspecでテストを書き始めました。

モデルスペックを書き終え、コントローラスペックを書いている際に「attributes_for」に出会い、ちょっと詰まったので記事にします。

##attributes_forとは
Everyday Railsによると、「プロジェクトファクトリからテスト用の属性値をハッシュとして作成します。」、だそうです。

最初の感想としては、「なんのために？？？buildでよくない？？？」でした。

##まずは見てみよう
buildとattrubutes_forの違いを以下に示します。

まずはFactoryの中身です。

```file:users.rb
FactoryBot.define do
  factory :user do
    name "test"
    sequence(:email) { |n| "test#{n}@test.com"}
    password "password"
  end
end
```

```file:posts.rb
FactoryBot.define do
  factory :post do
    content 'test content'
    association :user
  end
end
```

これらを用いたbuildとattributes_forで取得するデータの違いが以下の通りです。

```file:build
> FactoryBot.build(:post)
=> #<Post id: nil, content: "test content", user_id: 8, created_at: nil, updated_at: nil> 
```

```file:attributes_for
> FactoryBot.attributes_for(:post)
=> {:name=>"test", :email=>"test2@test.com", :password=>"password"}  
```

buildはモデルオブジェクト、attributes_forはハッシュとなっていますね。（間違えてたら教えてください）

##つまり
パラメータとして値を渡す場合、ハッシュを使って渡すことができます。複数のパラメータを送信する場合に、個々にパラメータ名を付けるのではなく、キーと値を組み合わせたハッシュとして渡せます。

これは実際に見てもらったほうがわかりやすいと思います。

```file:posts_controller_spec.rb
#省略

describe "#create" do
    context "ログインユーザーとして" do
      before do
        @user = FactoryBot.create(:user)
      end
      
      it "投稿ができる" do
          post_params = FactoryBot.attributes_for(:post)
          sign_in @user
          expect{
            post :create, params: { post: post_params}
          }.to change(@user.posts, :count).by(1)
      end
    end
  end
```

このプログラムの、post :create, params: { post: post_params}に注目してください。
これは、

```
post :create, params: { post: {:name=>"test", :email=>"test2@test.com", :password=>"password"} }
```

このプログラムと同義となります。
つまり、POSTメソッドで渡すparamsにpostキーを渡し、そのpostキーのValueをattributes_forの返り値であるハッシュを渡すことで、このように簡潔に書くことができます。（説明下手ですみません...）

上記より、buildではなくattributes_forを使用している意味がわかりました。

##最後に
私はまだ業界未経験で、なおかつRspecを書き始めて2日目です。
間違えている部分などありましたら、教えてもらえると非常に助かります。

以上です。
JMeter概要

# 概要

## 参考URL
- [TECHSCORE](http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/index/)

## JMeter
### ■JMeterとは
- パフォーマンス計測用のJavaアプリケーション

### ■テストケース
- スレッド数
   - 1回のテストで生成されるスレッド数
- Ramp-Up期間(秒)
   - 何秒間で全スレッドを生成するか
- ループ数
   - テストケースの生成を行う回数

## リスナー
### ■リスナーとは
- テスト中に収集した情報を表示したりファイルへ保存したりするリスナーという機能があります。
   - 送ったリクエストの統計情報を表にして閲覧したり、レスポンス時間をグラフにして閲覧したりすることができます。

## 設定エレメント
### ■設定エレメントとは？
- http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/3/

### ■HTTP認証マネージャ
- HTTPのBasic認証

### ■HTTPヘッダマネージャ
- 任意のヘッダを追加・上書きすることができる設定エレメント

### ■HTTPクッキーマネージャ
- 通常のブラウザと同じように、Webサーバから与えられたクッキーを保存・提供するという機能
- 任意のクッキーをWebサーバに提供するという機能

## ロジックコントローラー
### ■ロジックコントローラとは
- １回のテストにおいて、HTTPリクエストを複数回実行させたり、いくつかのHTTPリクエストのなかからランダムにひとつのリクエストを実行させたりする機能を持つものです。

### ■インターリーブコントローラ
- それに属する複数の要素のうち、ひとつだけを実行させるという機能を持っています。
- 複数回ループした場合には、実行される要素は順番に変更されます。

### ■乱数コントローラ
- 『インターリーブコントローラ』と同様に、ループのたびに属する要素のうちのひとつを実行します。 
- ただし、要素のうちのどれかひとつをランダムに選んで実行します。

### ■ループコントローラ
- 属する要素を指定した回数だけ実行します。
- 「無限ループ」にチェックを入れた場合は、ユーザが明示的にテストをやめるまで属する要素を実行し続けます。 

### ■一度だけ実行されるコントローラ
- 属する要素を一度だけ実行させるロジックコントローラです。
   - たとえ『スレッドグループ』の「ループ回数」を複数回に設定していても、『一度だけ実行されるコントローラ』に属する要素は、必ず１スレッドにつき１回だけ実行されます。
- アプリケーションへのログインを再現するため等に使用されます。

### ■シンプルコントローラ
- それ自体には何の機能もありません。
- 『HTTPリクエスト』等の各要素をグループ分けしたりして、テストの内容を整理しやすくするために使用するのです。

## アサーション
### ■アサーションとは
- テストをしているサーバから受け取った応答を検査し、その応答が正しい応答かどうかをチェックするものです。

### ■アサーション
- サーバから応答された文字列を検査します。

### ■アサーションの持続
- 指定された時間内にサーバから応答があったかどうかを検査します。

### ■サイズアサーション 
- 応答結果のバイトサイズを検査するアサーションです。

### ■XMLアサーション
- サーバからの応答が正しいXMLかどうかを検査するアサーションです。

## プロキシサーバ
### ■プロキシサーバとは
- JMeterが一時的にプロキシサーバの役割をします。
- そのプロキシサーバを通じてアクセスしたページを『HTTPリクエスト』として自動的に『スレッドグループ』に追加していくという機能です。

### ■基本的な使い方
- [参照](http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/6/)

### ■便利な設定
- [参照](http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/6-2/)  

## JDBCリクエスト
### ■JDBCリクエストとは
- データベースに対してテストを行うことができる

### ■JDBCリクエストの設定
- [参照](http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/7/)

### ■JDBCリクエストで利用する設定エレメント
- [参照](http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/7/)

## 負荷テスト計画の立て方
### ■事前に集めておく情報
- ピーク時に想定される同時アクセス数
   - アプリケーションのパフォーマンスについての信頼ある数値を取得することができます。
- アプリケーションのセッションの管理方法
- アプリケーションの標準的な使用のされ方

### ■テスト計画の作成と実施
- [参照](http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/8/)
splitの使い方

#文字列の抽出
仕事で文字列を抽出する機会が多いが、今だに効率の悪いコードを書いてしまう。今回もその一例を紹介したい。

## メールアドレスからドメインを抽出するコード
```
mail_address = 'aaa@example.com'
domain = mail_address.rsplit('@')[-1]
print(domain)  # example.comが表示される
```
実は外部ライブラリでもemailのローカルパートとドメインパートを分けるライブラリがある。しかしながら、真面目にフォーマットが正しいかどうかのチェックを度外視すると、これで十分と思われる。最初からこんなコード書ければよかったのだが、圧倒的に非効率なコードを書いてしまった。

## fqdnから最後の.を取り除くコード
```
fqdn = 'mx.hogehoge.example.com.'
domain = fqdn.rstrip('.')
print(domain)  # mx.hogehoge.example.comが表示される
```
たったこれだけなのだが、自分はこうではない無駄なコードを書いてしまった。rsplitは右から文字を検証するが、該当する文字がない場合は何もしないようだ。この例でいえば、一番右端が'.'であれば削除するし、そうでなければ何もしない。

## Pythonをもう少し使いこなすには
組み込み関数の使い方をもう少し学習した方がよいと感じたので、最低でも一日一個ずつくらい使い方を覚えていこうと思う。
express まとめ　ここにまとめる

## セットアップ

```ruby
ipm install express

var express = require('express')
var app = express();


app.listen(3000,()=> {console.log("server start")})

```

## 基本

- get

```ruby

const lists = [
{id:1, body:"hello"},
{id:2, body:"hello"},
{id:3, body:"hello"},
]

app.get('/', function(req,res){
   
  res.send(lists)

})

# json()でもOK

```


- post 


```ruby
# body-parserのimstallの必要あり

var bodyParser = require('body-parser')
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

# req.bodyなどれ受け取れる

app.post('/create', function(){

var post = {
    title: req.body.title,
    body: req.body.body
  }
  console.log("create")
  posts.push(post)
  res.redirect("/")


})

# req.params と req.body

- URL
req.params.id

- postで送られてくる
req.body.name%
```

# パスの構成変更

- Router()

```
var apiRoutes = express.Router();
app.use('/api', apiRoutes);


apiRoutes.get("/posts", function(req,res){
 console.log("get Lists")
  res.send(lists)
})

```

## クロスサイト

```ruby

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');  // ← コレを追加
    next();
  });

```


## 関連パッケージ

- ejs
- path

```ruby

console.log(__dirname)
/Users/ユーザー名/Desktop/react-router-express


app.join(__dirname + '/src/index.html')
→/Users/ユーザー名/Desktop/react-router-express/src/index.html

```
golangにおけるJSONPの解析

## How would I parse JSONP!!
https://www.reddit.com/r/golang/comments/a1oqxp/how_would_i_parse_jsonp/
上記は、
callback関数に囲まれたJSONPの形で返ってくるんですけど......
Unmarshalできなくて困るんですけど......
どうやって`JSONP` to `JSON` to `Struct`しましょう:sweat:...という記事です。

例)

```golang
func main() {
  jsonpStr := `
  callback({
    "hello": "world!!",
    "num": 123456
  });`

  var v interface{}
  err := json.Unmarshal(jsonpStr, &v)
  fmt.Println(err)
  // invalid character 'c' looking for beginning of value
  // JSONを期待しているのに先頭にcallbackという不要な文字列があるためUnmarshalがエラーを返します。
}
```

## 対応方法
一番上に乗せた`reddit`の投稿における回答より二つ紹介します。

### titpetricさんの対応方法
先頭から`(`までと、後ろから`)`までをtrimしちゃえYO!という方法です。

```go
    jsonpStr := `callback({
      "hello": "world!!",
      "num": 123456
	});`

	jsonStr := jsonpStr[strings.Index(jsonpStr, "(")+1 : strings.Index(jsonpStr, ")")]
	fmt.Println(jsonStr)
	// {
	//  "hello": "world!!",
	//  "num": 123456
	// }

	var v interface{}
	json.Unmarshal([]byte(jsonStr), &v)
	fmt.Printf("%+v", v)
	// map[hello:world!! num:123456]
```


### jerfさんの対応方法
io.ReaderのWrapperとして用意しようYO!という方法です。

```go

type JSONPWrapper struct {
	Prefix     string
	Underlying io.Reader

	gotPrefix bool
}

func (jpw *JSONPWrapper) Read(b []byte) (int, error) {
	if jpw.gotPrefix {
		return jpw.Underlying.Read(b)
	}

	prefix := make([]byte, len(jpw.Prefix))
	n, err := io.ReadFull(jpw.Underlying, prefix)
	if err != nil {
		return n, err
	}

	if string(prefix) != jpw.Prefix {
		return n, fmt.Errorf("JSONP prefix mismatch: expected %q, got %q",
			jpw.Prefix, prefix)
	}

	// read until the (; in general, this should just be one read
	char := make([]byte, 1)
	for char[0] != '(' {
		n, err = jpw.Underlying.Read(char)
		if n == 0 || err != nil {
			return n, err
		}
	}

	// We've now consumed the JSONP prefix.
	jpw.gotPrefix = true
	return jpw.Underlying.Read(b)
}

func main() {
    jsonpStr := `callback({
  	  "hello": "world!!",
  	  "num": 123456
	});`
	prefix := "callback"
	jsonp := bytes.NewBuffer([]byte(jsonpStr))
	var decoded interface{}
	decoder := json.NewDecoder(&JSONPWrapper{Prefix: prefix, Underlying: jsonp})

	// This code depends on the fact the JSON parser stops when it
	// finishes a JSON object, so we don't have to handle the concluding
	// paren.
	decoder.Decode(&decoded)
	fmt.Println(decoded)
	// map[hello:world!! num:123456]
}
```
`json.NewDecoder`の引数に`JSONPWrapper(io.Readerインターフェースを満たした)`を渡すことにて、
`decoder.Decode`のタイミングにて`JSONWrapper.Read()`が実行されます。
`JSONWrapper.Read()`の中では、`Prefix`に設定された文字列を`jsonp`文字列の先頭から比較して削除しています。
JavaScript  async/awaitに関して

## async/awaitとは？
- ```Promise```による非同期処理を簡潔に記述するための記法。
- 非同期処理は```then```を繋げる形で記載もできるが、```async/await```は可読性を向上させる。

## 使い方
1. ```async```を付与したfunctionを用意<br>→```async```を付与すると```Promise```を返却し、return後に```Promise```がresolveされる。  
2. 上記関数内の```Promise```処理部分の前に```await```を付与する。<br>→```await```は```Promise```が確定するのを待つ役割を持つ。


```JS
function sugarPromise(){
  return new Promise(function(resolve) => {
     setTimeout(() => {resolve('hogehoge2')}, 10000)
  });
}

async function sugarSync(){
  const result = await sugarPromise();
  // sugarPromise()内でPromiseが解決するまで次の処理を行わない
  console.log(result);
}

sugarSync();
console.log('hogehoge1');
```

実行すると

```
hogehoge1
hogehoge2
```

となるはず。(1と２は10秒の間隔)

## 注意点
- 複数のawaitを記述するとそれぞれ待たないといけない。上記の例を以下の通り書き直すと10秒×３=30秒待たないといけない。

```
const result1 = await sugarPromise();
const result2 = await sugarPromise();
const result3 = await sugarPromise();
```

次の通り記載すると並列で処理が可能。

```
const result1 = sugarPromise();
const result2 = sugarPromise();
const result3 = sugarPromise();
const x1 = await result1;
const x2 = await result2;
const x3 = await result3;
console.log(x1);
```
緯度経度と平面直角座標系について

# TL;DR

- 緯度経度と平面直角座標系について記載します。

## 座標系と測地系

この2つは別のものです。

### 座標系

座標系は、丸い地球を平面の地図としてをどのように表すのか、というものです。（学校でメルカトル座標系とか習ったことがあったかと思います）。

座標系とはものさしのあて方であり、「いずれかの座標系が正しい。」といった類のものではありません。例えば、「日本測地系と世界測地系の差は450mである」という表現が適切であり、「日本測地系は450m間違っている」ということではありません。

### 測地系

測地系は、経緯度（経度・緯度）および標高を用いて位置をどのように表すのか、という基準です。
地球は完全な球体ではないので、目的によって選択する必要があります。

### システム間のやり取り

以上のことから、システム間で座標系における座標情報の取り込みと出力を想定している場合などであれば、入力元のシステム、出力先のシステムの座標系と測地系を正しく把握する必要があります。

## 平面直角座標系

日本で平面地図に基本的に使用されている平面座標系です。
地球は丸いので、日本全体を平面であらわすと誤差が大きくなるので、19個に分割（系番号）しています。

中心位置からの相対位置をmで表します。よく間違えがちですが、垂直方向をX、水平方向をYと記載します。

https://www.gsi.go.jp/sokuchikijun/jpc.html 

## 測地系

- 平面直角座標系で使われる測地系：楕円体：測地成果は、以下の3つです。単に日本測地系といった場合は、日本測地系(旧日本測地系)を表すことが多いです。

|測地系|楕円体|測地成果|
|:--|:--|:--|
|日本測地系(旧日本測地系)　|ベッセル楕円体||
|日本測地系2000(世界測地系)|GRS80 楕円体|測地成果2000|
|日本測地系2011|GRS80 楕円体|測地成果2011|

- 日本測地系と世界測地系は「変換(Transformation)」可能です。つまり次のような考え方となります。

    (1) 日本測地系(旧日本測地系)・ベッセル楕円体の緯度、経度、楕円体高(B, L, H)から三次元直行座標系(X, Y, Z)に換算（**Conversion**）する。（この時点では座標系は変わっていない）
    (2) (1)の三次元直行座標系(X, Y, Z)を、異なる座標系、日本測地系2000(世界測地系)・GRS80 楕円体の三次元直行座標系(X, Y, Z)に変換（**Transformation**）する。
    (3) (2)の三次元直行座標系(X, Y, Z)を緯度、経度、楕円体高(B, L, H)に換算（**Conversion**）する。

- 日本測地系2011は、2011年の東北太平洋沖地震により、東日本が影響を受けた（地面が移動して基準位置等がずれたので）もので、西日本は影響を受けていません。
- 東京測地系という言葉がでてくることがありますが存在しません。日本測地系(旧日本測地系)の英語名、Tokyo Datumから来た誤用です。
- WGS系という測地系をみかけることがあるかもしれませんが、これは主に船舶が採用しています

### 参考
https://www.gsi.go.jp/LAW/jgd2000-AboutJGD2000.htm 
https://www.gsi.go.jp/sokuchikijun/jgd2000-2011.html 
https://www.gsi.go.jp/LAW/G2000-g2000faq-i.htm
Talendでのコンポーネント接続のおさらい

Talend7.2.1でのコンポーネントの接続方法の私的メモです。

# 基本
Talendには大別してrowデータを渡すフロー接続とそれ以外のトリガー接続がある。(ここでは反復(イテレート)もトリガー接続に含める)

## フロー接続系(row接続)
前後のコンポーネント間でrowデータが受け渡されるもの。
入力データは「row1.id」などPOJO(Plain Old Java Object)としてアクセスできる。

### メイン接続、フィルター接続
至って普通のフロー接続。フィルター接続はtFilterRowのメイン側だが特に変わりはない。

### ルックアップ接続
tMapでの2つ目の入力コンポーネントからのフロー接続。
メイン接続の違いは、tMapは外部結合についてLEFT OUTER JOINしかサポートしていないので、「メイン側のテーブルのみにレコードがある」レコードは引こうと思えば引けるが、「ルックアップ側のテーブルのみにレコードがある」レコードはCROSS JOINでもしない限り引けないこと。
ちなみに、ルックアップ接続も2つ以上持てるが、左外部結合を行う場合は常に「マップエディタで上にある接続」が左側(メイン相当)になる。

なおtMapは、メイン接続の変更は右クリックメニューのみにあるのに、ルックアップ間の順序変更は逆にマップエディターのみにある。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207347/9e834b43-a2e1-01b4-9a2a-a8c0f249eb2f.png) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207347/5802cba0-f5f7-6e7f-d01a-3db38a19d12e.png)

### リジェクト接続
tFilterRowで条件を満たさなかったレコードが送られる。
ほか、tMapで結合モデルをINNER JOINにしたとき、ルックアップ側のレコードが見つからずにリジェクトされた(メイン側の)レコードも拾うことができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207347/c029956a-ac4f-2ec3-b475-15084128a268.png)

## トリガー接続系
### 反復接続(Iterate接続)
rowデータではなくて、1回ごとにglobalMapに値をセットしなおして複数回実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207347/715977db-2f08-ef35-bd75-7777385d50a7.png)
ちなみに、接続先の後方にさらにrow接続があると、IDE上では1巡ごとに「1row」等と表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207347/be570bda-5658-0a69-0ba5-a4b6665323cc.png)

### Run if
名前の通り。接続元の処理が終わったあと、条件を満たせば接続先に処理が移る。

### コンポーネントがOKの場合
何のデータをやりとりするわけでもないが、実行順を制御したいときに使う。
接続元が複数ある場合、同じ先行コンポーネントから枝分かれした線(つまり1つのサブジョブに含まれる複数の線)を1つの接続先につなげないときがある。この制限が案外厳しく、実行順が複雑な場合は次のサブジョブ接続のほうが確実。

### サブジョブがOKの場合
サブジョブ全体で致命的なエラーが起きなかった場合、接続元に制御が移る。
ただし、接続元も接続先も各サブジョブの最初のコンポーネントしか選択できない。このため、場合によってはサブジョブ間の接続線がかなり邪魔なところを通ることになる。

使いどころとしては、[tFilterRow等で枝分かれさせたものをまたtUnite等でまとめる](https://qiita.com/kuinaein/items/b09958e5de9b0fcb1da2)ときとか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207347/91f0c4d3-7fe3-a061-edef-9d6293b2ebfe.png)

### {コンポーネント,サブジョブ}がエラーの場合
=例外が発生したとき。かなり致命的なエラーでないとこちらに分岐しない。例えばtRESTはWebリクエストが失敗してもここに**来ない**。
なので、エラー処理はtFilterRow等でやることも多い。

# 小技
## rowデータを1レコードにまとめたい
→ [tMapしてtDenormalize](https://qiita.com/kuinaein/items/39dd51f532eaa5e4c5ad#%E3%82%84%E3%82%8A%E3%81%8B%E3%81%9F)

## tFlowToIterateで反復処理したあとrow形式に戻したい
tUniteを挟めば良い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207347/a272877c-1d61-a3bd-71d5-a5241f66c0c1.png)
rbenvでのruby2.6.1インストール時「Agreeing to the Xcode/iOS license requires admin privileges」で失敗

ruby 2.6.1をrbenvを用いてインストールしようとしたときになぜか落ちたので共有。

# 落ちた箇所
```
$ rbenv install 2.6.1                                                                                                                              
Wed Oct  2 15:02:22 2019
Downloading openssl-1.1.0j.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246
Installing openssl-1.1.0j...

BUILD FAILED (OS X 10.14.6 using ruby-build 20190423)

Inspect or clean up the working tree at /var/folders/y4/jzf9wps144x1w4hp2kwp359xrk7xs7/T/ruby-build.20191002150224.4456
Results logged to /var/folders/y4/jzf9wps144x1w4hp2kwp359xrk7xs7/T/ruby-build.20191002150224.4456.log

SIXTY_FOUR_BIT_LONG mode

Configured for darwin64-x86_64-cc.

Agreeing to the Xcode/iOS license requires admin privileges, please run “sudo xcodebuild -license” and then retry this command.
```

こいつが怪しい。

`Agreeing to the Xcode/iOS license requires admin privileges, please run “sudo xcodebuild -license” and then retry this command.`

Xcodeのライセンスがどーのと言われているっぽい...

# 素直にコマンドを実行
エラー文章通りコマンドを実行する。

```
$ sudo xcodebuild -license

You have not agreed to the Xcode license agreements. You must agree to both license agreements below in order to use Xcode.
```

すると、ずらーーーーーーーーっとライセンスの情報が出ます（文章を共有するのはやめときます）

`q` で抜けると、「agree」, 「print」, 「cancel」の３つから操作を求められるので、ターミナル上で「agree」と入力しEnterを押す。

```
By typing 'agree' you are agreeing to the terms of the software license agreements. Type 'print' to print them or anything else to cancel, [agree, print, cancel]  agree

# agreeを入力してEnter

You can view the license agreements in Xcode's About Box, or at /Applications/Xcode.app/Contents/Resources/English.lproj/License.rtf
```

すると、インストールできる。

```
rbenv install 2.6.1                                                                                                                      28.2s  Wed Oct  2 15:03:58 2019
ruby-build: use openssl from homebrew
Downloading ruby-2.6.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.1.tar.bz2
Installing ruby-2.6.1...
ruby-build: use readline from homebrew
Installed ruby-2.6.1 to /Users/xxxxxx/.rbenv/versions/2.6.1
```

なぜライセンス同意をいまさら求められたのかはよくわかりませんが、インストールできたのでOK。
PHP 7.3からdate_create_from_format("u")の挙動が変わった

誰も使ってなさそうなPHP関数`date_create_from_format()`の挙動が変わった話を紹介します。

誰も困らない内容だと思いますが、気付いてしまったので記録として残しておきます。

## date_create_from_format関数とは

`date_create_from_format()`は任意のフォーマットの日付文字列を元に`DateTime`インスタンスを返す関数です。

```php
<?php
$dt = date_create_from_format("Y年m月d日 H時i分s秒", "2019年1月2日 12時34分56秒");
var_dump($dt->format("Y-m-d H:i:s"));
```

このように第一引数でフォーマットを指定し、第二引数に日付文字列を渡して利用します。上記コードを実行すると次の結果を得ます。

```php
string(25) "2019-01-02 12:34:56"
```


## 指定されていない部分の扱いについて

`date_create_from_format`の引数で年月日時分秒のうち一部しか与えられなかったような場合、指定されなかった部分には現在の時刻が採用される、とPHPマニュアルには書いてあります。

> format に文字 ! が含まれない場合は、作成した時刻値のうち format で指定されていない部分を 現在のシステム時刻で初期化します。

これは次のように確認することができます。

```php
<?php
$dt = date_create_from_format("H時i分s秒", "12時34分56秒");
var_dump($dt->format("Y-m-d H:i:s"));
```

これを2019-10-02に実行したところ次の結果が得られました。

```php
string(25) "2019-10-02 12:34:56"
```

指定されなかった年月日が現在の値で埋められており、マニュアルの記述通りの挙動であることがわかります。

しかし、マニュアルの記述は不正確で、特定の条件の時にゼロが入ることがあります。

```php
<?php
$dt = date_create_from_format("s秒", "56秒");
var_dump($dt->format("Y-m-d H:i:s"));
```

これを実行すると次のようになります。

```php
string(25) "2019-10-02 00:00:56"
```

秒しか指定しなかった場合に、時と分は現在時刻で埋められず、必ず0になります。これ以外の組み合わせでも、時分秒のうち１つまたは２つが指定された場合、指定されなかった部分は0になります（これは文書化されていない情報だと思います）。

## PHP 7.3でフォーマット文字列"u"の扱いが変わった

ようやく本題です。PHP 7.3からフォーマット文字列で"u"（マイクロ秒）を指定した場合の挙動が変更されています。


```php
<?php
$dt = date_create_from_format("Y-m-d u", "2019-01-02 654321");
var_dump($dt->format("Y-m-d H:i:s.u"));
```

これをPHP 7.2以前で実行すると、指定されていない時分秒の全てが現在時刻になります。

```php
string(26) "2019-01-02 13:05:46.654321"
```

しかし、PHP 7.3では次のようになります。

```php
string(26) "2019-01-02 00:00:00.654321"
```

マイクロ秒が指定された場合も、時分秒のうち指定されていない部分が0になるようになりました。

## まとめ

もともと文書化されていない挙動がPHPの特定バージョンから変わったよ、というお話でした。

## 補足

本件バグレポ上がってるけど瞬時にDocumentation Problemに格下げになってますね。

- [PHP :: Doc Bug \#78603 :: DateTime::createFromFormat\(\) missing component behaviour change](https://bugs.php.net/bug.php?id=78603)
超初心者向け　C# のClass とは 参照型である　

プロダクトで業務ばかりやっていると、基本的なところを全く気にせずに時間がたってしまいます。

先日Ｃ＃チョットできるヒト（社内ではない）と会話する機会という名の
~~サンドバック面談~~　1on1（社内ではない） がありまして

Ｃ＃のパフォーマンスと本当の基礎の基礎を学ばないといけないなという気になりました。

９月末に　.NET Core 3.0　がリリースされました
個人的にはblazor がとても気になってます。

結局のところ、[公式ガイド](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/classes)を読むのが一番いいのですが、  


---
###Class　(C#) 
 + 参照型
 + new することで　object となる
 + new　を使って明示的に作成されるまで　class内部の変数にはNullが入る

```csharp:Myclass.cs
//これが MyClass という class
public class MyClass
{
    
}
```

Classを実際に使うには　new を使って実体化させます→Objectになります。
Classから作られたObjectはインスタンスとも言います。

```  csharp:Program.cs
class Program
    {
        static void Main(string[] args)
        {
           //ここでインスタンスになる(Objectになる)
           MyClass mc = new MyClass();
        }
    }
```

Class は **参照型** なので クラスの型を参照することができます。 
mc2 という MyClassを用意してそれの実態を参照します

```  csharp:Program.cs
class Program
    {
        static void Main(string[] args)
        {
           //ここでインスタンスになる(Objectになる)
           MyClass mc = new MyClass();
           MyClass mc2 = mc;
        }
    }
```



上記２つを合わせます　Myclassも同一ファイルにかけるので、
下記のようになります 

```  csharp:Program.cs

//classの中に　プロパティとコンストラクタを定義
public class MyClass
{
    public string ClassName{ get; set; }
    public int ClassId { get; set; }

    public MyClass(string name, int id)
    {
        ClassName= name;
        ClassId = id;
    }
}

class Program
    {
        static void Main(string[] args)
        {
           //ここでインスタンスになる(Objectになる)
           MyClass mc = new MyClass("hoge",1); //Classname = hoge, ClassId = 1 のMyClassインスタンス 
           MyClass mc2 = mc;
     
           //MyClassは 読み書きできるので mc2を使って変数を変えてみます
           mc2.Classname = "hogehoge";
           mc2.ClassId = 2;

           //参照型なので、mc  mc2のプロパティは下記のようになる
           //Output
           // mc.Classname is "hogehoge" 
           // mc.ClassId is 2
           // mc2.Classname is "hogehoge" 
           // mc2.ClassId is 2

        }
    }


```


尚　1on1（ではない）で下記を含んだいろいろま聞かれて　頭ぺっしゃんこになってたので

**以下の疑問が解決できるまで記事を書き続けます** 

+ class と構造体の違いは?
+ それぞれのメリットとデメリットは？
+ class内のコンストラクタ、変数、プロパティ、メソッドはどう書いたら違いになる？
+ 〇〇の修飾子はどういう意味？
+ LINQはどういう処理と等価？
メイン・クラスが存在するにもかかわらず「エラー: メイン・クラスXXXが見つからなかったかロードできませんでした」が発生する

# 事象

まず以下のような`Child`クラスが存在するとします。

```java:Child.java
public class Child extends Parent {
    public static void main(String[] args) {
        System.out.println("This class is `Child`");
    }
}
```

これを`child.jar`に格納し、Java8で実行した結果が次の通りになります。

```
C:\>java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

C:\>java -cp child.jar Child
エラー: メイン・クラスChildが見つからなかったかロードできませんでした
```

`Child`クラスは確かに存在するにも関わらず「メイン・クラスChildが見つからなかったかロードできませんでした」というエラーによりJavaの実行が失敗しました。

# 原因

__真因は`Child`の親クラス`Parent`が読み込めていないためになります。__実は`Parent`は`child.jar`とは別の`parent.jar`に格納されています。しかし上記の`java`コマンド実行方法では、`parent.jar`が読み込めていません。

そこで`parent.jar`もクラスパスに加えて、`java`を実行してやると、想定通り動作しました。

```
C:\>java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

C:\>java -cp child.jar;parent.jar Child
This class is `Child`
```

「Childが見つからない」という部分だけを見ると、`Child`が正しく`child.jar`に格納できていないように思えますし、実際筆者はこの思いこみのせいでずいぶんと時間を無駄にしました……。エラーメッセージが分かりにくいのが悪いんや(逆ギレ)
Raspberry Pi で最新鋭のユーロ地図を作る話

欧州 1:1,000,000 地図のオープンデータ EuroGlobalMap を最新鋭のウェブ地図にする、しかも Raspberry Pi 一台で、という話を以下のリンク先にまとめました。

https://hackmd.io/@hfu/inazo-steps

次のバージョンは、概ね１ヶ月後を目当てに作ろうと思います。以上、[国連ベクトルタイルツールキット（UNVT）](https://github.com/un-vector-tile-toolkit)でした。
【解消法】突然機内モードしか見えなくなった（Wi-Fiつながらない）ときorz

## 突然、それはもう、突然。
フリースペースでの打ち合わせが終わってパソコンを閉じて、自席に戻ってパソコンを開いたら、ネットワークの接続が切れている。繋ごうと、タスクバーのネットワーク部分（さいきんマークが地球儀に変わった？）をクリックすると、以下の状態に。

（....と、載せたかったがスクショとっていなかった。）

どうなったかというと、

## 「機内モード」というほぼ使わないモードしか選べない状態に。Wi-Fiがあああああ・・・・繋げられない。orz

「ネットワークと共有センター」を見に行って、「利用できるネットワークの表示」などをしても、うんともすんとも。古から伝わる再起動を繰り出しても、設定画面から「ネットワークのリセット」をしても状況は変わらず。ネットで調べても、同じような事象や解消方法を見つけられず・・・・・。そのとき、16:30。帰りたい。でも、明日の朝来ても同じ状態だったら、とてもとてもテンションが下がったまま１日を始めなければならない…
## そんなのいやだ！！
と、いうわけで、ぐぐってもわからなかったため、詳しそうな先輩を直撃！！「すみません、個人的な質問なんですけど・・・・かくかくじかじかしかじかかくかく・・・・」助けてドラえもん状態。

## 解消方法：「ネットワークドライバーの更新〜」
私の場合はこれで解消しました。
先輩にチェックしていただいたところ、デバイスマネージャ（※）を開いて、「ネットワークアダプター」内のWi-fiアクセス用のドライバ（私の場合は、Intel wireless AC 9560）の部分にビックリマークが付いていて、詳細を見るとエラーになっていたのである。「うん、これを入れ直したらなると思うよ」ああ、神。

`※Windowsキー＋R→検索バーに「"dev"」くらいまで入れると、候補に「デバイスマネージャ」が出てきます`

## ネットが繋がらないのにどないすんねん
さて、私が手間取ってしまったのはここからなのですが・・・ネットが繋がらないのにどうやってドライバをインストールしたらいいの？と。
考えられる方法としては、別のPCでダウンロードして、ドライバの名前で検索をして、それを。。。

1. USBメモリ経由
2. Bluetoothでファイル送信
3. 有線のインターネットを繋ぐ

どれかの方法で、機内モード専用になったPCに送ればOKです。

※ここで、私の場合、3の有線インターネットがない状態だったので、１か２。USBが手元になかった・かつ別のPCがあったので２を選択してしまいます。が、しかしもう一つの別PCが亀PCかつ、Bluetoothで送るにはデータが重すぎた？（進捗が70%以降進まない・・・・）ため、すごく時間がかかり、結局なんとかUSBを持っている人を見つけて、貸してもらって、一件落着、という結果になりました。


# さいごに

トラブルにはまったとき、時間に余裕があって勉強がてらにいろいろいじるのはいいかもですが早急な対応が求められる場合や、定時前で早く帰りたいときは、どの順番でやるのが一番解決に結びつくのかを見極める力が大事だな・・・と、思った次第でした。
VBA によるExccelシートの一括保護と解除（クソ記事

##🔐全シート一括保護##

```vb
Private Sub 全シート一括保護()
    Dim s As Worksheet
    For Each s In ActiveWorkbook.Sheets
        s.Protect DrawingObjects:=False
    Next s
End Sub
```

` DrawingObjects:=False` はオブジェクト（画像）は編集できる、みたいな。

##🔓全シート一括解除##
```vb
Private Sub 全シート一括保護解除()
    Dim s As Worksheet
    For Each s In ActiveWorkbook.Sheets
        s.UnProtect
    Next s
End Sub
```

##🔐選択されたシートの保護を一括保護##

```vb
Sub 選択されたシートの保護を一括解除する()
　Dim cnt As Long　' 選択されているシートの数
　Dim sh_name() As String　' 選択されているシートのName
　Dim sh As Object　' WorksheetまたはChart
　Dim i As Long

　cnt = ActiveWindow.SelectedSheets.Count
　ReDim sh_name(1 To cnt)

' 選択されているシートのNameを配列に格納
　i = 1
　For Each sh In ActiveWindow.SelectedSheets
　　sh_name(i) = sh.Name
　　i = i + 1
　Next

' 選択されているシートの保護を順番に解除
　For i = 1 To cnt
　　With Sheets(sh_name(i))
　　　.Select
　　　.Protect DrawingObjects:=False
　　End With
　Next i

' 元々選択されていたシートを選択し直す
　For i = 1 To cnt
　　Sheets(sh_name(i)).Select Replace:=False
　Next i

End Sub
```

##🔓選択されたシートの保護を一括解除##

```vb
Sub 選択されたシートの保護を一括解除する()
　Dim cnt As Long　' 選択されているシートの数
　Dim sh_name() As String　' 選択されているシートのName
　Dim sh As Object　' WorksheetまたはChart
　Dim i As Long

　cnt = ActiveWindow.SelectedSheets.Count
　ReDim sh_name(1 To cnt)

' 選択されているシートのNameを配列に格納
　i = 1
　For Each sh In ActiveWindow.SelectedSheets
　　sh_name(i) = sh.Name
　　i = i + 1
　Next

' 選択されているシートの保護を順番に解除
　For i = 1 To cnt
　　With Sheets(sh_name(i))
　　　.Select
　　　.Unprotect
　　End With
　Next i

' 元々選択されていたシートを選択し直す
　For i = 1 To cnt
　　Sheets(sh_name(i)).Select Replace:=False
　Next i

End Sub
```
##Thanks##
[選択されているシートの保護を一括解除するExcelマクロ](https://www.relief.jp/docs/excel-vba-unprotect-selected-sheets.html)
[すべてのシートを一括で保護（ロック）する方法](https://tack.life/blog/copy-paste-vba-excel-protect/)


####ちっ####
アンチマイクロソフトの私が再びVB使うとは思いもしなかった
使うほどにSpreadsheetもGASもいいと思う。
しかし、どでかいデータとか非力のマシンではGoogleはありえないかなぁ
Singularityの--nvオプションのWarningについて

# WARNING内容
SingularityでGPUオプション(--nv)を使用すると以下の警告が出ました．

```
$ singularity shell --nv chainer_box/
WARNING: Skipping mount /var/run/nvidia-persistenced/socket [files]: /var/run/nvidia-persistenced/socket doesn't exist in container
```
nvidia関係のツールが足りなさそう...

# 対応手順
こちらのサイトを参考に対応しました．
[NVIDIA Container Toolkit を使って Docker コンテナで GPU を使う](https://blog.amedama.jp/entry/docker-nvidia-container-toolkit)

上記のサイトの「NVIDIA Container Toolkit をインストールする」の項目が今回の対応手順になります．コンテナでGPUを利用するときにこれを入れないといけないらしい．

```
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$(. /etc/os-release;echo $ID$VERSION_ID)/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt update
$ sudo apt -y install nvidia-container-toolkit
$ sudo reboot
```



# 参考文献
[NVIDIA Container Toolkit を使って Docker コンテナで GPU を使う](https://blog.amedama.jp/entry/docker-nvidia-container-toolkit)
【Python Pandas メモ】DataFrameで日付型項目で検索する方法

# 始めに
Python DataFrameに読み込んだ日付型の項目で絞り込みをする方法に手間取ったので、その時のメモ。

# ポイント1
日付型データは pd.to_datetime関数を使って列ごと型変換する。

```py3
from ibmdbpy import IdaDataBase, IdaDataFrame
idadb = ... # (省略)

df_plan = IdaDataFrame(idadb, 'TBL_RESULT').as_dataframe()
df_plan['CREATE_DATE'] = pd.to_datetime(df_plan['CREATE_DATE'])

```

# ポイント2
検索時は検索条件側も datetime.date関数で変換した値を使う。

```py3
import datetime

w1= df_plan.query("EMPLOYEE_CD=='1234' and CREATE_DATE==datetime.date(2019,1,10)")
```
UbuntuでGo書きたい男

11月に転職が決まりました。
次の会社から「Go言語とAWSを調べてきて」というざっくりした指令をいただき、それを遂行したい男、私です。

# とりあえずGo!!
まずはGo言語の勉強からやろうと思います。
言語の特性を知るだけならまぁそんな時間かからんでしょー

## Ubuntuで書きたいわ〜
Windows嫌いです。特に10から。理由はOSアップデートだったり、アカウント切り替えだったり、設定の面倒さだったり。
Macもいいですが、新しいのは高くて買えないので既存のWindowsノートをUbuntu18.04LTSに入れ替えました。
最初はGNOME3で使ってたんですが、KDEが気になったのでそっちに変更。今のところいい感じ。
### 環境設定
・自前ファイルサーバーをマウント
・仮想デスクトップを2x2に設定
・電源管理でディスプレイが暗くなるまでの時間とかを伸ばす
・.vimrc設定
など
### ショートカットキー
・ターミナル起動
・仮想デスクトップ上下左右に移動
・ウィンドウを仮想デスクトップ上下左右に移動
など
![Ubuntu設定画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500613/9ddaab34-e461-b02b-9960-455b7652f4c8.png)
### 参考
[何も考えず~/.vimrcにこれを書くんだ！ 〜vim初心者によるvim初心者のためのvim入門〜](https://qiita.com/morikooooo/items/9fd41bcd8d1ce9170301#)

## Go環境を入れたいわ〜
UbuntuにGoを入れてパス通すマン
### 参考
[Go言語をUbuntuに導入する](https://qiita.com/hideo9080/items/249b42b54c02aab9eee5)

## Atomかっこいいわ〜
エディタはAtom使います。かっこいいからですね。
本体、日本語化パッケージ、Go用のパッケージをインストール。
### 参考
[テキストエディタ「Atom」のインストールから日本語化まで](https://qiita.com/akikimur/items/bc342db92dbeb801ee61)
[Go言語はじめました](https://qiita.com/thimi0412/items/687ec466465dcdba79c1)

## できたわ〜
ほれ。
![Atom画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500613/56c8627a-44d0-c566-7919-5de0c8c45aa5.png)
結局全部引用なんですけどね。一連の流れが重要ってことで。
これからこの環境で色々書いてみます。さいなら。
【Rails】ページ内で読み込みたいCSSを制御する

ソースコードを見ると`/app/assets/stylesheets/`以下にあるファイルを読み込む記述が自動で書き出されている。
その記述に関してあれこれ変更したかったのでやってみました。

一応環境情報を載せておきます。
`ruby:2.6.4`
`rails:5.2.3`

##目的
１.ページ内に自動記述されるCSSの読み込み順番を変更したい。
２.SASS使用のためのimportさせるファイルは読み込ませたくない。

##方法
自動記述の制御はある程度`/app/assets/stylesheets/application.scss`内で調整ができる。

```scss:application.scss（初期状態）
 /*
  * This is a manifest file that'll be compiled into application.css, which will include all the files |
  * listed below.
  *
  * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's |
  * vendor/assets/stylesheets directory can be referenced here using a relative path. |
  *
  * You're free to add application-wide styles to this file and they'll appear at the bottom of the |
  * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS |
  * files in this directory. Styles in this file should be added after the last require_* statement. |
  * It is generally better to create a new file per style scope. |
  *
  *= require_tree .
  *= require_self
  */
```

###１.ページ内に自動記述されるCSSの読み込み順番を変更したい。
下部にある`*= require_tree .`から`*= require_self`までを変更する。
アセットパイプラインの仕組みにより、ここで読み込みに関して調整可能。
この仕組みはディレクティブと呼ばれている。
（※デフォルトだとアルファベット順？）

今回は最下部に記述される`application.css`を最上部にしたいので以下のように記述しました。

```scss:application.scss（変更後）
 *= require_self
 *= require_tree .
```
変更点は、単純に記述の順番を入れ替えただけ。

`*= require_tree .`はインクルードさせる記述。
（`.`とあるので`/app/assets/stylesheets/`を指定していることになる？）

`*= require_self`は正直よくわからなかった・・・。勉強します。

例えば`hoge01.css`、`hoge02.css`...の順で絶対並べたい！という場合は、

```scss:application.scss
 *= require_self
 *= require hoge01.css
 *= require hoge02.css
 *= require_tree .
```
のように書いてあげればOK。

ただし、今の状態だと`/app/assets/stylesheets/`以下全てのファイルが自動記述されてしまうので、次で調整する。

###２.SASS使用のためのimportさせるファイルは読み込ませたくない。
自分はSASSで使用する変数ファイルなどを`/app/assets/stylesheets/partial/`以下に格納しました。
ひとまずサブディレクトリは読み込まれないようにします。

```scss:application.scss（変更後）
 *= require_self
 *= require_directory .
```

 ` *= require_tree .`　→　`*= require_directory .`
に変更するだけ。

` *= require_directory .`は`/app/assets/stylesheets/pretial/`直下にあるファイルだけ読み込むよ、というもの。

自動でやってくれるのはとても便利ですので、なおさら制御方法は知っておかなきゃいけないなと痛感。
まだまだRails開発を始めたばかりなので、今後深掘りしていこうと思います。

##参考サイト
[RailsでCSSの読み込む順番を制御する方法 - Qiita](https://qiita.com/takish/items/c5f264577d2db75fd10c)
[Rails 使用するCSSを指定する | | KeruuWeb](https://keruuweb.com/rails-%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8Bcss%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B/)
[Railsのマニフェストファイルを使ったJsとStylesheetの呼び出し - Qiita](https://qiita.com/samurairunner/items/da22eddb64e867b4e145)
react-chartjs-2とChart.jsを使ってグラフを作ってみた

最近Reactを勉強しており、その際にグラフを作りたいと思いました。react-chartjs-2の提供もされていたので、今回は「Chart.js」を使用することにしました。

今回は線グラフですが、他にも円グラフや棒グラフなど色々あります。
https://jerairrest.github.io/react-chartjs-2/
また詳しい導入法は公式ドキュメントから確認できます。
https://github.com/jerairrest/react-chartjs-2

完成時のイメージとコードは下です。
<img width="1395" alt="スクリーンショット 2019-10-02 21.18.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323388/38fc3ec1-9506-a217-5ec5-4afc2a34cd7a.png">
必要となる「react-chartjs-2」と「chart.js」のインストール

```
yarn add react-chartjs-2 chart.js
```
```App.js
import React from "react";
import LineExample from './Line';

function App() {
  return (
    <div className='App'>
      <LineExample />
    </div>
  );
}

export default App;
```

```Line.js
import React from 'react';
import {Line} from 'react-chartjs-2';

const data = {
  labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
  datasets: [
    {
      label: 'My First dataset',
      fill: true,
      lineTension: 0.1,
      backgroundColor: 'rgba(75,192,192,0.4)',
      borderColor: 'rgba(75,192,192,1)',
      borderCapStyle: 'round',
      borderDash: [],
      borderDashOffset: 0.0,
      borderJoinStyle: 'square',
      pointBorderColor: 'rgba(75,192,192,1)',
      pointBackgroundColor: '#eee',
      pointBorderWidth: 10,
      pointHoverRadius: 5,
      pointHoverBackgroundColor: 'rgba(75,192,192,1)',
      pointHoverBorderColor: 'rgba(220,220,220,1)',
      pointHoverBorderWidth: 1,
      pointRadius: 1,
      pointHitRadius: 10,
      data: [3, 10, 21, 31, 34, 40, 48]
    }
  ]
};

const LineExample = () => {
  return (
    <div>
      <h2>Line Example</h2>
      <Line data={data} />
    </div>
  );
}

export default LineExample;
```
上の例では一つの線グラフでしたが、複数のグラフを表示することもデザインを加えることもできます。
<img width="1395" alt="スクリーンショット 2019-10-02 21.17.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323388/f9407797-b7da-4a9d-1b7e-6d6c83d1e6ab.png">
複数のグラフを表示する方法がわからなかった時に参考になったstackoverflowも一緒にのせておきます。
[create a multi line chart using Chart.js
](https://stackoverflow.com/questions/31131275/create-a-multi-line-chart-using-chart-js)

参考文献
[react-chartjs-2](https://github.com/jerairrest/react-chartjs-2  )
[react-chartjs-2のgithub](https://jerairrest.github.io/react-chartjs-2/)
[create a multi line chart using Chart.js
](https://stackoverflow.com/questions/31131275/create-a-multi-line-chart-using-chart-js)
【salesforce】取引先責任者を作成すると商談が作られるTriggerを作ってみた

#Handlerクラスを使った実装

今回はタイトル通りTriggerを作ったのでシェアしたいと思います。

今回の要件としては以下の通りです。

①取引先責任者が作成されると、その取引先責任者を参照した商談が作られる。
②商談には連番の商談番号があり、Sから始まる10桁の数字で１番目の場合はS0000000001と左に0を詰めた形になる。
③商談の完了予定日は作成日の1ヶ月後となる。

この３つくらいですかね。

ではまずTriggerからです。

```java:contactTrigger
trigger contactTrigger on Contact (after insert) {
    //ハンドラクラスのインスタンス化
    contactTriggerHandler handler = new contactTriggerHandler();

    if ( Trigger.isAfter && Trigger.isInsert ){
        handler.isAfterInsert(Trigger.new);
    }
}
```

ここではハンドラクラスを発動条件の中で呼び出すだけの
単純な動作を書いています。

次にクラスです。

```java:contactTriggerHandler
public class contactTriggerHandler {
    public void isAfterInsert(List<Contact> newList){
        List<Opportunity> opportunityList = new List<Opportunity>();
        //その時点での最大値を取得
        Opportunity maxRecord = [SELECT Name From Opportunity Order By Name DESC LIMIT 1];
        //Sを外してinteger型に変換
        Integer oppNumber = Integer.valueOf(maxRecord.Name.replace('S',''));
        //商談の作成
        for ( Contact c : newList ){
            //最大商談名に1を追加
            oppNumber += 1;
            
            Opportunity newOpp = new Opportunity(
                Name = 'S' + String.valueOf(oppNumber).LeftPad(10,'0'),
                CloseDate = system.today().addMonths(1),
                StageName = 'Prospecting',
                Contact__c = c.Id);
            
            opportunityList.add(newOpp);
        }
        insert opportunityList;
    }
}
```

こんな感じですかね。

うまいコードじゃないかもですが割とスッキリはできたかなと思います。

ハンドラクラスはもっと汎用的にすれば強力なクラスになると思いますので、

今度は汎用的なクラスになるように考えてみようかとおもいます。

#profile

生まれも育ちも大阪の浪速中の浪速っ子が30才未経験からITエンジニアとして生きるブログもやってます。
よかったらみてください:muscle_tone2:

<a href="https://blogmura.com/profiles/11016817?p_cid=11016817"><img src="https://blogparts.blogmura.com/parts_image/user/pv11016817.gif" alt="PVアクセスランキング にほんブログ村" /></a>
nRF52でSEGGER_RTT_CONFIG_DEFAULT_MODEの挙動


PRINT デバッグおじさんなので、やたらめったら
NRF_LOG_INFO
を使っていたら、苦労したお話。

# 環境 
- nRF52840
- SEGGER Embedded Studio for ARM v4.18
- nRF5 Software Development Kit v15.2.0
- Ubuntu Linux 18.04


# NRF_LOG_INFOの取りこぼし

SEGGER Embedded Studio では、NRF_LOG_INFO 構文で Debug Terminal に任意の文字列や変数を出力できる。
しかし処理がたてこむと、出力が追いつかずに取りこぼしが起こってしまう。

sdk_config.hの以下のところを


```

#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0

```
から

```

#define SEGGER_RTT_CONFIG_DEFAULT_MODE 2
```
とすることで、取りこぼしを防げます。

sdk_config.hの該当箇所のコメントによると、

```

// <o> SEGGER_RTT_CONFIG_DEFAULT_MODE  - RTT behavior if the buffer is full.
 

// <i> The following modes are supported:
// <i> - SKIP  - Do not block, output nothing.
// <i> - TRIM  - Do not block, output as much as fits.
// <i> - BLOCK - Wait until there is space in the buffer.
// <0=> SKIP 
// <1=> TRIM 
// <2=> BLOCK_IF_FIFO_FULL 
```
ということだそうです。
しかしながら・・・

# アドバタイズしない

この状態で、山のように nRF_LOG_INFOを使っているとBluetoothがアドバタイズしなくなった。
相手先デバイスにnRF52デバイスが表示されない。
特に処理にエラーが起きているのではなく、悩んだが結局不必要なnRF_LOG_INFOを消すと正常になった。
特定の処理にnRF_LOG_INFOが入ってタイミングがずれるというのではなく、main.c中のnRF_LOG_INFO総数だけが関係しているみたい。

# J-Linkがつながっていないと動作しない

J-Linkを外して動かすと数秒動いただけで止まってしまいました。

```

#define SEGGER_RTT_CONFIG_DEFAULT_MODE 2

```

このようにするとウォッチドッグと何らかの競合が起こるらしいです。
ということで、デバッグ終わったら

```

#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0

```
に戻して動かすようにしました。

なお、抜本的に解決するにはこれかな・・・
https://devzone.nordicsemi.com/f/nordic-q-a/28113/segger_rtt_config_default_mode-blocking-app
Ubuntu 16.04にPHP-FPM 7.0をインストール（OS標準）

# はじめに

Ubuntu16.04にPHP-FPMを標準インストール
親記事：[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

# apt update;apt install -y php-fpm
... 略
```

### 各種確認

```shell-session
# which php
/usr/bin/php

# which php-fpm7.0
/usr/sbin/php-fpm7.0

# php -v
PHP 7.0.33-0ubuntu0.16.04.6 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.33-0ubuntu0.16.04.6, Copyright (c) 1999-2017, by Zend Technologies

# php-fpm7.0 -v
PHP 7.0.33-0ubuntu0.16.04.6 (fpm-fcgi)
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.33-0ubuntu0.16.04.6, Copyright (c) 1999-2017, by Zend Technologies

# apt show php-fpm
Package: php-fpm
Version: 1:7.0+35ubuntu6.1
Priority: optional
Section: universe/php
Source: php-defaults (35ubuntu6.1)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 11.3 kB
Depends: php7.0-fpm
Download-Size: 2952 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages
Description: server-side, HTML-embedded scripting language (FPM-CGI binary) (default)

N: There is 1 additional record. Please use the '-a' switch to see it

# apt show php-fpm -a
Package: php-fpm
Version: 1:7.0+35ubuntu6.1
Priority: optional
Section: universe/php
Source: php-defaults (35ubuntu6.1)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 11.3 kB
Depends: php7.0-fpm
Download-Size: 2952 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages
Description: server-side, HTML-embedded scripting language (FPM-CGI binary) (default)

Package: php-fpm
Version: 1:7.0+35ubuntu6
Priority: optional
Section: universe/php
Source: php-defaults (35ubuntu6)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 11.3 kB
Depends: php7.0-fpm
Download-Size: 2926 B
APT-Sources: http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
Description: server-side, HTML-embedded scripting language (FPM-CGI binary) (default)
```
Iot検定に向けて分からない用語の確認をする(前編)


#1.戦略とマネジメント
## 企画・戦略
   - ユビキタス -> （コンピュータネットワークなど情報通信技術を利用して）いつでもどこでも簡単に、所望情報が得られるさま。
   - ５つの競争要因 -> 業界の収益性を決める要因。「買い手の交渉力」「供給企業の交渉力」「競争企業間の敵対関係」という３つの内的要因と、「新規参入事業者の脅威」「代替品の脅威」の２つの外的要因からなる。
   - バリューチェーン -> 事業活動を機能ごとに分類し、どの部分で付加価値が生み出されているか、競合と比較してどの部分に強み・弱みがあるか分析し、事業戦略の有効性や改善の方向を探ること。
   - ケイパビリティ -> 企業が全体として持つ組織的な能力。あるいは、その企業が得意とする組織てきな能力。
   - アンゾフの成長マトリクス -> 「製品」と「市場」の２つの軸で事業の成長可能性を分析する考え方。
   - PPM(Product Portfolio Management) -> 商品やサービスを市場の成長率とシェアを軸として4つの象限に位置付けし、最適な経営資源を配分するために使用される手法。
   
## プロジェクトマネジメント
- PMBOK -> プロジェクトマネジメントに関するノウハウや手法を体系立ててまとめたもの。
- CMMI -> 組織がプロセス改善を行う能力を評価する手法および指標。
- リーン開発 -> トヨタ生産方式をソフトウェアの開発工程に応用させた、プロセスから無駄を取り除くことを目的とした開発手法。
- IEC61508 -> IECが制定した基本安全規格であり、プロセス産業における電気・電子・プログラマブル電子機能安全に関する国際規格。
- パレート図 -> 値が降順にプロットされた棒グラフとその累積構成比を表す折れ線グラフを組み合わせた複合グラフである。

## 人材育成と企業間連携
- ITSS -> 「ITスキル標準」とも呼ばれる経済産業省が策定したIT人材に対するスキル体系のこと。
- ETSS -> 組み込みソフトウェアの開発に必要となる知識やスキルを明確化し体系化した指標。
- UISS -> ITシステムを活用する組織において必要なスキルや知識を、体系的に整理した基準指標。

#2.産業システム

## 世界各国におけるIoTプロジェクトに関する知識
- インダストリアルリアルインターネット -> 米国のGE社が発表した、ICT技術を活用し生産性の向上やコストの削減を支援する産業サービス。
- Industrial du Ftur/産業の未来 -> フランスが第4次産業革命で目指す社会
 
## 標準化に関する知識
- AllJoyn -> 米国のQualcommによるIoT向けの規格。
- Allseen Aliance -> LinuxOSの普及・促進を目的とするLinux Foundationのこと。
- OIC -> Intel,Samsung,Broadcom,Atmel,Wind Riverの5社によって設立されたiot関連の標準化団体。
- Thread -> ホームワークネット向けに策定した無線通信規格。
- ISO26262 -> 自動車の電気/電子に関する昨日安全についての国際規格。
- ISO9001 -> より良い製品やサービスを提供するための仕組みを評価するガイドライン。
- ISO27000 -> ISOとIECが共同で策定する情報セキュリティ規格群。
- IEC62304 ->　医療機器ソフトウェアの開発から廃業まで、製品ライフサイクル全体に適用するプロセス規格。
- ISO14971 -> リスクマネジメントの医療機器への適用。

#3.法務
## 通信関連の法律に関する知識
- 技術基準適合証明 -> 特定無線設備が電波法令の技術基準に適合していることを証明すること。
- 技術基準適合認定 -> 端末機器が電気通信事業法例の技術基準に適合していることを認定すること
- 技適マーク -> 技術基準適合証明と技術基準適合認定のいずれかあるいは両者の認証がなされていることを表示するマークで、総務省令に定められたもの。
- FCC -> 通信、電信および電波を管理する米国の連邦政府機関。
- CEマーキング認証 -> 製品を欧州（EU)に輸出する際、必要になるもの。
- KCマーク認証 -> 韓国の国家統合認証マーク。
- MRA -> 適合性評価などの認定結果を複数の国が互いに承認し合う取り決めを指す

## 製造および航空法等に関する知識
- 電気通信事業法 -> 電気通信事業について定めている日本の法律である
- 電波法 -> 電波の公平かつ能率的な利用を確保することによって、公共の福祉を増進することを目的とする。

## ライセンス、知的財産に関する知識
- GPL -> ソフトウェアの利用許諾条件などを定めたライセンスの一つ。
- MITライセンス -> MIT工科大学を起源とする代表的なソフトウェアライセンス。
- クリエイティブ・コモンズ -> 著作物の適正な再利用の促進を目的として、著作者がみずからの著作物の再利用を許可するという意思表示を手軽に行えるようにするための様々なレベルのライセンスを策定し普及を図る国際的プロジェクトおよびその運営主体である国際的非営利団体の名称。