OmniAICreator/Qiita-1.07M huggingface dataset:
SystemVerilog による論理回路設計(授業用) - 7章 その他

# 7章 その他

---
## 10進カウンタ

````SystemVerilog:
module count10 (
  input   logic       clock,
  output  logic [3:0] count
);

  always_ff @ (posedge clock) begin
    if (count > 4'd10) begin
      count <= 4'd0;
    end else begin
      count <= count + 1'b1;
    end
  end

endmodule
````

---
## parameter

````SystemVerilog:
module register #(parameter WIDTH = 8) (
  input                     clock,
  input   logic [WIDTH-1:0] d,
  output  logic [WIDTH-1:0] q
);

  always_ff @ (posedge clock) begin
    q <= d;
  end
endmodule
````

````SystemVerilog:
module top (
  input   logic       clock,
  input   logic [1:0] sw_2bit,
  input   logic [7:0] sw_8bit,
  output  logic [1:0] led_2bit,
  output  logic [7:0] led_8bit
);

  // 2-bit レジスタ
  register #(.WIDTH(2)) register_2bit( // registerモジュールのパラメータを上書き(WIDTH = 2)
    .clock  (clock),
    .d      (sw_2bit),
    .q      (led_2bit)
  );

  // 8-bit レジスタ
  register register_8bit (  // パラメータを指定しないとregisterモジュールで指定された値が使われる(WIDTH = 8)
    .clock  (clock),
    .d      (sw_8bit),
    .q      (led_8bit)
  );

endmodule // Top
````

---

## enum

```SystemVerilog:
module my_stm (
  input   logic       clock,
  input   logic       n_reset,
  input   logic       p,
  output  logic [1:0] y
);

  // State
  typedef enum logic[1:0] {SA, SB, SC, SD} State;

  State state;

  // next_state_generator + register(with async reset)
  always_ff @ (posedge clock, negedge n_reset) begin
    if (n_reset == 1'b0) begin  // active low async reset
      state <= SA;
    end else begin
      case ({p, state}) //  state transition
        {1'b0, SA}: state <= SB;
        {1'b0, SB}: state <= SC;
        {1'b0, SC}: state <= SD;
        {1'b0, SD}: state <= SA;
        {1'b1, SA}: state <= SA;
        {1'b1, SB}: state <= SB;
        {1'b1, SC}: state <= SC;
        {1'b1, SD}: state <= SD;
        default:    state <= SA;
      endcase
    end
  end

  // output_decoder
  always_comb begin
    case (state)
      SA:       y = 2'b00;
      SB:       y = 2'b01;
      SC:       y = 2'b00;
      SD:       y = 2'b10;
      default:  y = 2'b00;
    endcase
  end

endmodule

```
git branch 名には作成した日付も入れておくといいかも

最近gitをたくさん使ってて思ったのはgit branch名に作成した日付も入れておくと後から見返す時に便利だと思った。
自分はそのブランチがなんの機能を付け足すためだったかわかるように機能名だけブランチ名に入れるようにしていたが同じような機能の時にどのブランチがどの機能を表すか不明になることがあったので日付を入れるようにした。
MonacaクラウドIDEでブレークポイントをはってデバッグする方法

##はじめに

Monacaでスマホアプリを作るときには
スマホ実機でデバッグできるMonaca Debugerという
便利なアプリケーションがあります。

またクラウドIDEで開発するときは
ブラウザ内のプレビュー内で簡易的なデバッグが可能です。
でもデバッグ機能としては、やや物足りなく感じることがあるかもしれません。

しかし、Chromeのデバッグ機能を合わせることで、
Monacaで作ったアプリの検証がグッと楽になる事をご存知ですか？

##３つの便利ポイント
**便利ポイント①**
画面の構成要素検証が楽

**便利ポイント②**
ブレークポイントを貼ることができる

**便利ポイント③**
ローカルストレージの内容を確認できる


##デバッグやり方


**--まずは**
ChromeからクラウドIDEを開きます。

**--便利ポイント①の方法**
IDE内のプレビュー画面から、
見たい要素について右クリック⇒「検証」をクリック

![キャプチャ1.JPG](https://qiita-image-store.s3.amazonaws.com/0/260380/e2f4215c-a58e-2c88-f8c3-437489649b04.jpeg)

Chromeが別ウィンドウで開き、
HTMLとスタイル情報が表示される

![キャプチャ2.JPG](https://qiita-image-store.s3.amazonaws.com/0/260380/7faa33d0-22cc-5643-e10f-b5064efb2eab.jpeg)

スタイルの値を変更すると、プレビューにも反映されるので、
細かいパーツの位置を調整するときなどに便利！

![キャプチャ3.JPG](https://qiita-image-store.s3.amazonaws.com/0/260380/118fa0ad-31c7-9dab-f232-e488a2e55e02.jpeg)


**--便利ポイント②の方法**

Chromeデバッガーのメニューから「Sources」を選択

![キャプチャ4.JPG](https://qiita-image-store.s3.amazonaws.com/0/260380/7ec5487f-faa3-8318-7232-b352a12381d3.jpeg)

左側のツリーから「ide_preview-iframe(・・・)」⇒「PreviewFrame(・・・)」⇒「preview-・・・」⇒「www」⇒対象ソースを選択
（・・・部には何らか文字が入ります）
これでソースコードが表示されます。
（ツリーが閉じている場合は右向き▼をクリックで開く）

![キャプチャ5.JPG](https://qiita-image-store.s3.amazonaws.com/0/260380/abe39b22-2ed6-aac5-e744-a37130762767.jpeg)

エディターの左側の行番号を右クリック⇒「Add Breakpoint」をクリックで
ブレークポイントを貼ることができる。

これで該当処理が実行されるときに、処理がブレークするようになります。
変数などにマウスカーソルを当てると格納されている値が見れます。
再開ボタンをクリックすれば処理再開します。

これでかなりデバッグも捗ります！

![キャプチャ6.JPG](https://qiita-image-store.s3.amazonaws.com/0/260380/3ac4e618-4f4f-08eb-3ca9-780db2fd6275.jpeg)

**--便利ポイント③の方法**

Chromeデバッガーのメニューから「Application」を選択

![キャプチャ7.JPG](https://qiita-image-store.s3.amazonaws.com/0/260380/a5058aab-a77c-e4d2-d16d-129d0e54dc8b.jpeg)

左側のStorageツリーから「Local Storage」⇒「https://preview-・・・」を選択。
すると右側に現在のストレージに保存されている内容が表示されます。

![キャプチャ8.JPG](https://qiita-image-store.s3.amazonaws.com/0/260380/f8245cd3-c986-6109-6249-b1d18613f728.jpeg)

Valueの値を変更したり、削除したりできます。
とっても便利！


##さいごに

これらのようにChromeのデバッグ機能を使うことで、
Monacaで製作しているアプリのデバッグ効率をかなり上げることができます。
他にもChromeの便利デバッグ機能があると思いますので、
是非、色々試してみてくださいね！
API Gatewayのデフォルトのゲートウェイのレスポンスを変更

[docomo Developer support](https://dev.smt.docomo.ne.jp/)の[@akatsukaha](https://qiita.com/akatsukaha)です

API GatewayでデプロイしているAPIに対して想定外のアクセスをされたときに返却されるAPI Gatewayのデフォルトのエラーレスポンスが不親切だと思うことがあります．エラーレスポンスをカスタマイズする方法を記載します．

# **1. API Gatewayの環境**
API Gatewayにて下記の通りAPIをデプロイしているとします．

**リソース**
![00.png](https://qiita-image-store.s3.amazonaws.com/0/262328/89e80d74-d55e-9695-ba4a-be551112e20a.png)

**/aaa/bbb(GET)の統合レスポンス内容**
![01.png](https://qiita-image-store.s3.amazonaws.com/0/262328/c065cd6f-6381-5009-1058-1294e784097c.png)

**デプロイされたステージ**
![02.png](https://qiita-image-store.s3.amazonaws.com/0/262328/28ac372c-c489-ba89-6672-72d20d11a432.png)

# **2. API Gatewayのエラーメッセージの確認**

下記の通り`v1/aaa/bbb`へのアクセスは想定どおりのレスポンスです．

```
$ curl https://1a2gskfus6.execute-api.ap-northeast-1.amazonaws.com/v1/aaa/bbb
{"message":"hello world"}
```

しかし，メソッドを定義していないリソースに対するアクセスをした場合，API Gatewayのデフォルトの値が返却されます．`{"message":"Missing Authentication Token"}`と返されてもなんじゃこれ？って感じになります．

```
$ curl https://1a2gskfus6.execute-api.ap-northeast-1.amazonaws.com/v1/aaa
{"message":"Missing Authentication Token"}
```

# **3. API Gatewayのゲートウェイレスポンスのカスタマイズ**

では，デフォルトのゲートウェイのレスポンスをカスタマイズしたいと思います．

まずデフォルトのゲートウェイのレスポンスは**ゲートウェイのレスポンス**にて定義されています．ここに記載されてい内容を変更します．
![03.png](https://qiita-image-store.s3.amazonaws.com/0/262328/b9493cfb-e44c-909c-68fe-488580bc2f51.png)

今回は`Missing Authentication Token`を変更したいので，下記の通り[Missing Authentication Token403]を変更します．`{"message":"Forbidden"}`と変更し，[保存]します．
![04.png](https://qiita-image-store.s3.amazonaws.com/0/262328/9121fa69-9607-9e91-b2c3-b34fc9605cbc.png)

これだけではデプロイ済みのAPIに反映されないので，再度APIをデプロイしてください．

下記の通り試してみると，正しく反映されていることがわかります．

```
$ curl https://1a2gskfus6.execute-api.ap-northeast-1.amazonaws.com/v1/aaa/bbb
{"message":"hello world"}HayatonoMacBook-puro:~ akatsuka

$ curl https://1a2gskfus6.execute-api.ap-northeast-1.amazonaws.com/v1/aaa
{"message":"Forbidden"}
```

# **4. 参考**

- [エラーレスポンスをカスタマイズするゲートウェイレスポンスをセットアップする](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/customize-gateway-responses.html)
grid で自動配置したいけど IE11 が無理なので flex で誤魔化す Mixin

`grid` 楽なんで超使いたいけど、自動配置が無理で子要素に個別設定が必要。
でも使いたいんで flex でフォールバック。
でも `auto-fit` で `minmax` とかが無理なんで、固定分割で誤魔化す。

# Mixin
```scss
@mixin coord($col, $col-msie, $width, $gap-column: 0, $gap-row: 0) {
  display: grid;
  grid-template-columns: repeat($col, $width);
  gap: $gap-row $gap-column;
  .is-msie & { // IE判定クラス
    display: flex;
    flex-wrap: wrap;
    & > * {
      width: calc((100% - 1px - #{$gap-column * ($col-msie - 1)}) / #{$col-msie});
      margin-left: $gap-column;
      &:nth-child(#{$col-msie}n #{"-"} #{$col-msie - 1}) {
        margin-left: 0;
      }
      &:nth-child(#{$col-msie}) ~ * {
        margin-top: $gap-row;
      }
    }
  }
}

```
※ JavaScript でクラス振る前提（好きじゃないけどCSSハックに差し替えてもよいかも）

# 3分割する場合
```scss
@include coord(3, 3, 1fr, 20px, 20px);
```

# 最低幅 300px でフィットさせつつ IE11 は無理なんで常に3分割する場合
```scss
@include coord(auto-fit, 3, minmax(300px, 1fr), 20px, 20px);
```

# IE11 について
本来 IE11 の対応なんてするべきものじゃない。
そんなん制作してる側のエゴだ。
どうしてもってんで、泣く泣く対応してるだけ。
IE11 で見てる人にはそんなぞんざいな対応で良い。
というか見れるように対応してるだけ、ありえないくら素晴らしい。
LINEのBotをノンプログラミングで開発できるツール群

以下は基本的にノンプログラミングでLINEのBotができるツールのまとめです。
※随時更新予定

実際に私が触ってないものがあるため間違った情報が多くかかれてる可能性があります。
LINEと連携まで標準機能でできるという前提です。※Herokuを間にいれる、テンプレートをダウンロードするなどは除きます
拡張性などについては人それぞれの判断内容にはなりますので参考としてとらえてください。
有償無償などは私の確認した時点のものですので正しくはありませんので実際のサービスのサイトでご確認ください。
英語表記のサービスで日本語対応してたとしても最初に触る方が抵抗感があるなどの話があるのでサイトの日本語化してるかどうかも記載する予定です。

|サービス名|サービスURL|Free(無償)プラン|表記|自作システム連携|備考|参考サイト|
|:--|:--|:--|:--|:--|:--|:--|
|Repl-AI|https://repl-ai.jp/|あり|日本語|なし?||https://qiita.com/tanakaworld/items/80bcb6f559d7a0ac94a9|
|hachidori|https://hachidori.io/|あり|日本語|なし?||https://qiita.com/yutako0217/items/aecf9684d6356113bc33|
|Dialogflow|https://dialogflow.com/|あり|英語|可能||https://9bo.hateblo.jp/entry/2018/03/21/152450|
|Watson Conversation|https://www.ibm.com/watson/jp-ja/developercloud/conversation.html|利用料金の無償枠あり|英語|可能|Node-REDを利用するため、ノンプログラミングといえるかどうか。|https://qiita.com/KURO-BLACK/items/9eba2d49ff79f3778583|

その他見つけたサービス（メモ用 主に法人向け？）

|サービス名|サービスURL|
|:--|:--|
|ConciergeU|https://www.conciergeu.com/|
|Chamo|http://chamo-chat.com/|
|REBOT|https://rebot.resola.ai/|
|OKBIZ. for Chat & Bot|https://www.okwave.co.jp/business/service/okbiz-chat/|
|hitobo|https://hitobo.io/|
|サポートチャットボット|https://ai.userlocal.jp/|

このほかにあったら教えてください。
デスクトップにファイルを置きっぱなしにしないために。

## 環境
* `zsh`

## モチベーション
他人のデスクトップを見たときにファイルが多数あって、混沌としているのが気になりました。使わなくなったファイルを置きっぱなしにしていることが原因ではないかと思い、一定期間使用しないファイルをゴミ箱に入れてしまうような仕組みを作れば、半強制的に整理がされるのではないかと考えました。

## [CleanDesk](https://github.com/yoshi65/CleanDesk)
`$HOME/Desktop`にある一定期間使っていないファイルを`$HOME/.Trash`に移動してくれるシェルスクリプトです。未使用期間はデフォルトだと1週間に設定しました。
未使用期間は`-p`オプションで変更できます。`数量 + 単位 ([1-9]+[0-9]*[dm])`を引数とし、`d`が日、`m`が月を表します。例えば、
```
% ./CleanDesk.sh -p 1m
```
のようにすると、一ヶ月になります。

また、例外的に置いておきたいファイルがあることを考慮して、`Except.txt`に記述されているファイル名は例外とする設定にしました。`Except.txt`のフォーマットは一行に一ファイル名となっており、`CleanDesk.sh`と同じディレクトリに置く必要があります。

## 定期的に実行するために
[CleanDesk](https://github.com/yoshi65/CleanDesk)を思い出すたびに実行しているのではあまり効果がないと思います。定期的に実行するには、`cron`を用いるのが良いと思います。

`cron`は定期的にジョブを実行するようスケジュールしてくれます。詳細は[crontabコマンドについてまとめました 【Linuxコマンド集】](https://eng-entrance.com/linux-command-crontab)でも参照すると良いと思います。

ちなみに私は
``` 
0 12 * * * $(pwd)/CleanDesk.sh
```
とし、毎日正午に実行しています。

## 感想
若輩者ですが、やっぱりデスクトップは綺麗な方がいいと思います。
AWS Lambdaを使ってNode.jsでブラウザの言語を取得する

# フロントエンドでのブラウザ言語取得

Javascriptでブラウザの言語を取得する方法として以下を用いる方法がよく使われます。

```js
// Chrome, Firefoxだと以下で取れる
window.navigator.languages;
window.navigator.languages[0];
    
// IE 11以上だと以下で取れる
window.navigator.language;
    
// IE 10以下なら以下で取れる
window.navigator.userLanguage;
window.navigator.browserLanguage;
```
    
Chrome, Firefoxだとしっかりブラウザの設定で優先度の高い言語を取得してくれますが、
IEだとブラウザのインストールされた言語で取得してしまうため、
ブラウザの設定で言語を変更しても、取得する言語が変更されません。

# サーバサイドでのブラウザ言語取得

Lambdaのeventを用いることでヘッダ情報を取得してブラウザの言語を取得します。

Lambda関数は以下のようにします。

```js
exports.handler = function(event, context, callback) {
  callback(null, {
    statusCode: 200,
    body: JSON.stringify(event.headers)
  });
};
```

あとは、API Gatewayで上記の関数を実行するAPIをデプロイします。
デプロイ方法が分からない方は下記を参照にすると良いでしょう。

https://starhoshi.hatenablog.com/entry/2017/01/07/APIGateway_%2B_Lambda_%2B_NodeJS_%E3%81%A7_rest_api_%E3%82%92%E4%BD%9C%E3%82%8B

APIを実行すると下記のようにヘッダ情報が返ってきます。

```
{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"ja,en;q=0.9,en-US;q=0.8,fr-FR;q=0.7,fr;q=0.6","cache-control":"max-age=0",...（省略）}
```

後は、受け取った側で```Accept-Language```をキーにして言語を取得できます。
以下、優先順位が一番高い言語の取得例です。
結果が```res```に入っているとすると、

```js
language = res['Accept-Language'].split(',')[0];
language = language.split('-')[0];
```

例えば、先頭が```eu-US```であれば```en```が取得できます。
Vue.js + webpackでslugから動的にimg srcを作成する方法

# img srcを動的に作りたいよね？

vue.jsとwebpackを使った環境でimg srcを動的に作りたい！ってみんな思うよね？
でも上手くコンパイルされないとか単なるurlライクな文字列が出てきてしまって結局画像が表示されないとかの沼が広がってるみたいなんだ。私もそこにハマっちゃったよ。
でもできた！そこで！みんなに方法を共有だ！
今回はslugを使ってimg srcを動的に作るよ。サンプルコードはこれだ！

```vue
<template>
  <img :src=" image_path($route.params.slug) ">
</template>

<script>
export default {
  methods: {
    image_path: function(slug){
      return require("@/assets/images/" + slug + ".png");
    }
  }
}
</script>
```

# ポイント

## srcの前にコロンをつける
これは``v-bind:src``の略。これをすると何が嬉しいかというと、イコールの後のダブルクオーテーションの中で式が展開できるようになるんだ。超便利！

## urlをrequireしてから返す
これをすると何が嬉しいのか、実はよくわかってません。でもこれを通さずにurlを単に返して``:src``に渡すと、単なる素のurlが出力されてしまってwebpackの恩恵を受けられないのですな。
多分、静的な``src``の中身だったら勝手に``require``するんだろうけど、``:src``はそうしないんじゃないかなぁと思うのですが、自信がないです。ツッコミ歓迎！

# 引数次第で自由自在！
今回は引数に``$route.params.slug``をとりましたが、もちろん引数次第でurlは好きに作れます。あなたなりの自由なimgがこれで手に入ったね！
SSL証明書


### 中間証明書

利用中の `httpd` のバージョンによって書き方が異なるので注意する。
なお、 `2.4.7` 以前の場合に、 `2.4.8` 以降の書き方をしてもエラーにはならなかったので注意が必要。

### 2.4.7以前（2.2含む）

```:httpd.conf
SSLCertificateFile      server.crt
SSLCertificateChainFile server.chain
SSLCertificateKeyFile   server.key
```

### 2.4.8以降

```:httpd.conf
SSLCertificateFile      server.crt
SSLCertificateKeyFile   server.key
```

`SSLCertificateChainFile` は使えないので、 `server.crt` ファイルの中に
「サーバー証明書→中間証明書」の順番で記述する。

### 確認方法

中間証明書が正しくインストールされているかは、ブラウザの表示確認だけでは不十分になるケースがあるので、以下のツールなどを利用してSSL証明書を検証をする。

#### 方法1

オンラインツールを使う。

例）DigiCert SSLTools
https://ssltools.digicert.com/checker/

#### 方法2

コマンドで調べる。

```
openssl s_client -connect ssl.example.org:443 -showcerts
```

mac で `cert` コマンドが使える環境であれば以下のコマンドでも判断はできる。
（正常ではない場合は、エラーが表示される）

```
cert ssl.example.org
```
EC2をプログラムから操作

EC2を操作するプログラムを作成。
今回はEC2インスタンスを起動・停止するプログラムを作成しました。

前提条件
- AWSアカウントを作成していること
- 言語はJava
- AWS-SDKはMavenから取り込みます

#1　IAMユーザの作成
AWSのアカウントを作成した直後だとルートユーザしか存在しない状態です。
しかし、ルートユーザを使用するのは非常に危険。
プログラムに必要な権限を付与したIAMユーザを作成してプログラムからアクセスするのがベストプラクティス。

AWSマネジメントコンソールで
サービス⇒IAM⇒ユーザ⇒ユーザを追加
から作成できる。
- ユーザ名は好きなものを入力
- AWSアクセスの種類は「プログラムによるアクセス」を選択
- ポリシーの選択では今回はEC2を操作するので「AmazonEC2FullAccess 」を設定します。
- 作成が完了するとアクセスキーとシークレットアクセスキーが表示されるのでメモしておきましょう。

以上でプログラムからEC2を操作するためのIAMユーザの作成は完了です。

#2 credentials設定
上記の手順で作成したIAMユーザでプログラムがAWSにアクセスするためにユーザ情報を設定します。
プログラムに使用するIAMユーザの情報を認識させます。
これには色々方法がありますが、今回はAWS認証情報ファイルを使用する方法でやります。
C:\Users\ユーザ名\.aws
配下にcredentialsというファイルがあってこれにアクセスキーを記述します。
初期状態で[default]で記載されているものがあると思うのでそれを真似てその下に先ほど作成したIAMユーザのアクセスキー、シークレットアクセスキーを記述します。
[]の中は好きな名前でOK。後ほどプログラムで指定します。

#3 リージョン設定
C:\Users\ユーザ名\.aws
配下にconfigというファイルを作ってこれにリージョン情報を記述します。
東京リージョンならこんな感じ。

```
[default]
region = ap-northeast-1
```

これで自動的にプログラムがリージョンを認識してくれるようになります。

#4 EC2インスタンス作成
プログラムから起動・停止するインスタンスを作成します。
プログラムからAMIなどを指定して作成もできるようですが、今回はマネジメントコンソールで先に作成します。
手順は省略。

#5 プログラムの作成

##1 プログラムひな形の作成
コマンドプロンプトで下記コマンド叩いてプロジェクトのひな形作成

``` maven:Mavenコマンド
mvn -B archetype:generate \
  -DarchetypeGroupId=org.apache.maven.archetypes \
  -DgroupId=org.example.basicapp \
  -DartifactId=myAws
```

##2 pom.xmlに依存関係追加

pomにこれを追記する

``` maven:pom.xml
  <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-bom</artifactId>
      <version>1.11.373</version>
      <type>pom</type>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-ec2</artifactId>
    </dependency>
```

aws-java-sdk-bomはAWSのSDKを個別に指定するなら必要なもの。
aws-java-sdk-s3はEC2のAPIを呼び出すためのもの。

##3 EC2起動・停止プログラム作成
EC2インスタンスを起動・停止するプログラムは下記のようになりました。

``` MyAws.java
   /**
     * プロファイル設定
     */
   public MyEc2(){
       // Credentialsに記載した情報を取得
       AWSCredentialsProvider provider = new ProfileCredentialsProvider("プロファイル名"); // 2.credentials設定で指定した名前。
       ec2 = AmazonEC2ClientBuilder.standard().withCredentials(provider).build();
    }
    /**
     * 引数で渡されたIDのEC2インスタンスを起動する
     * @param instanceId　起動したいインスタンスID
     */
    public void startInstance(String instanceId){
        StartInstancesResult result = ec2.startInstances(new StartInstancesRequest().withInstanceIds(instanceId));
        System.out.println(result.toString());
    }


    /**
     * 引数で渡されたIDのEC2インスタンスを停止する
     * @param instanceId　停止したいインスタンスID
     */
    public void stopInstance(String instanceId) {
        StopInstancesResult result = ec2.stopInstances(new StopInstancesRequest().withInstanceIds(instanceId));
        System.out.println(result.toString());
    }
}
```

インタンスIDを引数で受け取り、インスタンスを起動・停止するプログラムです。
IAM情報やリージョン情報は設定ファイルを読み込んでくれるのでソース中に記載する必要がなく、
スッキリする上にGitubなどで公開しても問題ない形になってますね。
Docker で httpd 


## Point

* エントリーポイントを、`httpd -DFOREGROUND` で起動してしまうと、任意のタイミングで httpd 単体の停止等が難しくなるので、 `bash` などを指定する。
* `service httpd graceful` 等の service コマンドは使えない（Failed to get D-Bus connection: Operation not permitted）が、 `httpd -k graceful` は使える。
railsでfontawesome5.0を使う

`font-awesome-rails`を使っていてバージョン5.0のアイコンを使いたいなーと思いました。

そこで、fontawesome-railsのgithubを確認。

しかし、https://github.com/bokmann/font-awesome-rails/issues/194

まだサポートされていない！

何か方法がないかと上記のissueを見ていると、
> Hello, in our company we wanted to use new icons as soon as possible, so I've created gem with new FA5 support and with new functions like animations, layered icons etc. You can find it on tomkra/font_awesome5_rails or through rubygems.
I will appreciate any feedback. Feel free to try it or use some code samples if you want to. :)`

font_awesome5_railsを作った人を発見！

# font_awesome5_railsの導入
github: https://github.com/tomkra/font_awesome5_rails

* gemを入れる

```
gem 'font_awesome5_rails'
```
* `application.css`に記載

```
*= require font_awesome5
```

* `application.js`に記載

```
@import 'font_awesome5';
```

以上です！
VBで三角形を作る

#初めに
このぶろぐでは学校で習ったことや自分で勉強したことを
まとめて投稿しています。今回はVBで三角形を作ってみました

#開発環境
Visual Studio 2012
Win10 x64

#ソースコード

```vb

    Private Sub Btn_AST2_Click(sender As Object, e As EventArgs) Handles Btn_AST2.Click
        Dim i, j, Cnt As Integer

        Txt_Ast.Text = ""
        Cnt = Val(Txt_Cnt.Text)
        For i = 1 To Cnt Step 1
            For j = 1 To i Step 1
                Txt_Ast.Text = Txt_Ast.Text & "*"
            Next
            Txt_Ast.Text = Txt_Ast.Text & vbCrLf
        Next

    End Sub
```

まず最初のDimというところで変数を宣言しています

その後、テキストボックスに入力された値をCnt変数に代入します。
次に１回目の繰り返しで入力された数値までを指定します
二回目の繰り返しでIの数値まで＊を表示します。
これを繰り返すとこんな感じになります。

![F12.png](https://qiita-image-store.s3.amazonaws.com/0/249281/4c1aa5b7-cd3d-4eec-2862-0da0be3a1b7f.png)
ASTにしている理由は表示するものがアスタリスクだからというだけです。


---
最後まで読んでいただきありがとうございました
LM いれーの　まっぷひらきーの　てれぽーとーの

LM ギバーではありません。
タッチしたら LM のマップが開きます。
そのまま看板から飛んでもらうスタイルです。
複雑なことはしません。

~~なお下記にてフルパ販売しておりますｗ ( 5 L$ )~~
~~http://maps.secondlife.com/secondlife/Bowfin/204/202/62~~

販売はやめました。こちらのスクリをコピペして活用してね！

```LSL:teleport.lsl
/*
    LM を一緒に入れる。タッチしたユーザーに LM をマップで開いて TP を促す。
    
    27 July 2018    Esforco
*/

key request_server;
key request_http;
vector absolute;

string region_name;
vector region_pos;

default
{
    state_entry()
    {
        request_server = llRequestInventoryData(llGetInventoryName(INVENTORY_LANDMARK, 0));
    }
    
    touch_start(integer n)
    {
        llMapDestination(region_name, region_pos, ZERO_VECTOR );
    }

    
    changed(integer change)
    {
        if(change & CHANGED_INVENTORY)
        {
            llResetScript();
        }
    }

    dataserver(key id, string data)
    {
        if (id == request_server)
        {
            absolute = llGetRegionCorner() + (vector)data;
    
            vector grid = absolute / 256.0;
            request_http = llHTTPRequest("http://api.gridsurvey.com/simquery.php?xy="
                +(string)((integer)grid.x)+","+(string)((integer)grid.y)+"&item=name",[],"");
    
            vector sim_corner = < absolute.x, absolute.y, 0.0 >;
            region_pos = absolute - grid; 
            
        }
    }

    http_response(key id, integer status, list metadata, string body)
    {
        if (id == request_http)
        {
            if (status != 200)
            {
                llOwnerSay("Failure!");
                return;
            }
            if(llGetSubString(body,0,4)=="Error")
            {
                llOwnerSay("Unknown Region");
                return;
            }
            region_name = llDumpList2String(llParseString2List(body,["+"],[])," ");            
        }
    }
}
```
Keras2メモ書き


kerasをつかってcifar10
mnistをいぢいぢしてきたが、ここにきてkeras2が出ていたので
触る前のメモ書きをここに残す。

まずはこういう事らしい
>TensorFlowをランタイムバックエンドとしてサポートして来たが、
>これまでKeras APIはTensorFlowコードベースから分離されていたが 
>これからKeras APIは、TensorFlow 1.2以降のTensorFlowの一部として直接利用できるようになったようだ


こんなインタフェースも居たらしい
[java, scala用のインタフェース](https://github.com/deeplearning4j/ScalNet)
[javascript用のインタフェース](https://github.com/transcranial/keras-js)
[Unity]Androidでデバイスのカメラ映像を取得する

Unity初学者のため、備忘です。
[webcamTexture](https://docs.unity3d.com/ja/current/ScriptReference/WebCamTexture.html)を利用した最もシンプルな例

## 構成
Windows 10
Unity2017 3.1f1
Android 8.1 Oreo搭載端末

## Planeを設置する

`Hierarchy -> Create -> 3D Object -> Plane` を選択し、カラのプロジェクトにplaneを配置します。
このplaneに対して取得した映像を表示します。


<img width="913" alt="2018-07-27.png" src="https://qiita-image-store.s3.amazonaws.com/0/83956/830d973b-aa7c-67fb-c14d-2448dbbfc33b.png">

なお、私の使用している検証中の端末では以下のサイズが適していました。

<img width="263" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/83956/0c8c841e-5032-710b-1039-0e9d17cd472b.png">

## WebCamControllerを実装する

`Project -> Create -> C# Script` からコントローラーを作成し、Planeに対してドラッグドロップします。

```WebCamController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WebCamController : MonoBehaviour {

	int width = 1920;
	int height = 1080;
	int fps = 60;
	WebCamTexture webcamTexture;

	void Start () {
		WebCamDevice[] devices = WebCamTexture.devices;
		webcamTexture = new WebCamTexture(devices[0].name, this.width, this.height, this.fps);
		GetComponent<Renderer> ().material.mainTexture = webcamTexture;
		webcamTexture.Play();
	}
}

```

## Build & Run する

実機でカメラから取得した映像が取得、表示されます。

![Screenshot_20180727-135549.png](https://qiita-image-store.s3.amazonaws.com/0/83956/dfb7f402-09f6-317a-cc6f-6695ecc3f54c.png)


## 参考リンク
[【Unity】Webカメラの画像を加工して表示する](http://nn-hokuson.hatenablog.com/entry/2017/08/09/192813)
おーよーしょりぎじゅつしゃ？ おーよーぎしゅつしょりぎしゅつしゃ？

# はじめに
やあやあ、ごきげんよう。🐱です。あのね、あのね、応用情報処理技術者試験が役に立つ場合があるから、かる〜く取っちゃいましょ。

なに、簡単なことさ。少しだけハックするんだ。

# てきをしる
https://www.jitec.ipa.go.jp/1_13download/youkou_ver3_0.pdf

これがシラバスだよ。出題範囲が色々書いてあるね。

大まかにわけて、テクノロジに関することとそれ以外が出題されるみたい。体感、これはどちらも押さえておくべき。

基本をおさらいするね。システム開発はプロジェクトの体裁を取ることが多い。

プロジェクトって何かって言うと次の2点を満たすものだね。

・一回性があるもの
・有期的であるもの

この制約下においてテクノロジだけでゴリ押すのは上手くない（やってのけちゃう豪腕Engineerもいるんだけど）。マネジメントや交渉でエレガントに切り抜けたいよね。

# たのしいはっく
さて、さてさてさて。応用情報処理技術者試験は午前の四肢択一と午後の筆記からなる。どちらも簡単簡単。

気にしておくと得するポイントをこっそり教えちゃう。ここだけの秘密だよ。

１つ目：国家試験であり、過去問の出題が義務付けられていること

２つ目：6割取れればよいこと

体感的に基本情報と応用情報の出題レベルにそんなに差はない。もう少し言うと、基本情報レベルだけだと情報が断片的過ぎて、応用情報までやらないと有機的な知識体系にならない感じ。

で。一冊だけ教科書を買うといいと思う。分厚さに気圧されなくても大丈夫。精読もいらない。

章ごとに見てみると、各トピックに割かれている文書は本当に少ないと感じると思う。寝る前に一章読むくらいでいいよ。

と、言うのも。過去問千本ノックの方がずっと得点に近い。気をつけるべき点を思い出してくれよな。過去問が出るのだ。**同じ問題を出すことが義務付けられている**。

わたしはiphoneアプリで隙間時間にゲーム感覚で全ての過去問を解いたよ。

通勤中や昼休みに過去問を繰り返し解いて、家で教科書にあたって点と点を線にしよう。これで9割はいけます。

# 6わりいうたやん
ここからは受験本番のテクニックなんだけど、基数変換とかはわたしは飛ばした。ネットワーク系も変換あるから、そこそこにしておいた。

正確に言うと少しだけ計算して、それっぽい値を選んで、後で時間が余ったら見るようにした。

空欄にすると、マークシートの位置がズレてリカバリが難しいことが懸念されるので、敢えて埋めておく。

それだけで、6割は余裕で超えます。更に高みを目指すなら、計算問題もやってみよう。

午前の150分ってのはかなりガバガバなんだけど、一々まじめに計算してると、変なところでペースがおかしくなる。解ける問題を落とすリスクは避けたい。

この方式でだいたい60分余る。退出可能になるのは試験終了時刻30分前だから、残り30分、**手のひらの皺を数えるのにも飽きたら**しゃーなしで点数稼ぎましょう。

# ごごいち
午前と一緒で過去問全振り。試験準備中にいくつかの得意分野を作っておくと良いかも。簡単簡単。

わたしはストラテジ、マネジメント、RDBあたりが好きだったので、そこを得点源にしたよ。

筆記試験で文字数制限があるので、色んな言い回しを用意しとくといいと思う。"ストラテジ"と"戦略"とか、横文字と漢字を併用出来ると、文字数を自在に操れるよ。

# なんかん！
えー、なんのつもりかわからないけど、コードを鉛筆で書くという、**中世の拷問みたいな問題**に、諸賢は直面するぞ！

ジャバのおまじないなんてIDE補完に任せるかそもそもフレームワークに吸収されてあんまり意識しないでしょ。

わたしは馬鹿正直にジャバの入門書を一冊頭に入れて臨んだけど、Excelマクロあたりも出題範囲になってるみたいだから、そこを選べば良いと思います。

# だいじなこと！
時間に余裕を持って動きましょう！ この類の試験でもっとも難しいのは、朝早くに決まった場所にいること。

加えて、受験会場として大学が選ばれることが多いわけだけど、時間通りに大学正門についたからと言って、試験が行われる教室まで、**まだかなりの距離と迷子になる余地がある**のを忘れちゃダメだよ。

あと、おトイレの場所は頭に入れておきましょう。

# 結びに
気構えとしては過去問をやって教科書を読んでいるだけで、あなたは日々パワーアップしているんだから、仮に落ちたところでなんら悲観することはない。受験に制限はない。何度でもチャレンジしていい。

ついでにモチベーションをコントロールする秘訣を教えちゃう。モチベーションのコントロールをアウトソーシングするといいよ。

具体的に"おれ/あたし、今期応用受けますよ"って宣言しちゃおう。引けなくなるから。あとは周囲が勝手に監視してくれる。

ね、簡単でしょ？

My pleasure.
My honour.
see ya.
Your faithful 🐱
Inputでカメラ機能が使えない（Android）

monacaでinputタグを設置したところ、iOSでは問題なく動くのに
Androidでは「カメラ」機能が利用できないということがありました。
暫くはまっていたので覚え書きです。


###詳細
inputタグを指定すると、iOSの方は「カメラ」や「アルバム」等の選択肢が出てきますが、
Androidでは「カメラ」だけ出てきませんでした。
調べると[Android7以降ではinputタグで「カメラ」機能が使えない場合がある](https://st40.xyz/one-run/article/145/)そうです。


今回はAzureに画像を送信する際にこのinputに引っかかっていました。
カメラプラグインを利用し、取得した画像をAzureに送信できる形に変換するという方法でうまく動きました。
inputタグ自体使えないのは未解決のままです。
良い方法があれば教えてください。



###やろうとしていたこと

inputで取得した画像をAzureにアップロード


###やってみてダメだったこと
Crosswalk→[サポート終了](https://press.monaca.io/takuya/1550)（今確認したらまたサポート戻ってるっぽい？要調査）
CameraAPIで取得した画像をinputタグのvalueに書き込む→[セキュリティ上の問題で不可](https://www.hos.co.jp/blog/20180129/)
カメラプラグインでbase64の画像データを取得してバイナリデータにデコード→うまくいかない


##上手くいった方法

inputやめてカメラプラグインでカメラ起動→[Blob変換](https://qiita.com/uin010bm/items/150003f016287750cf34)

*●●カメラプラグイン部分●●*

```js
    // カメラ準備
    var options = {
      destinationType: Camera.DestinationType.DATA_URL,
      encodingType: 0     // 0=JPG 1=PNG
    };   

    // カメラ起動
    navigator.camera.getPicture(onSuccess, onFail, options);
    
    // 成功時処理
    function onSuccess (imageData) {
        // Blobを作成
        var byteCharacters = toBlob(imageData);
        
        // Azureに画像データを送る関数
        azureFunc(byteCharacters);
    }
    
    // エラー時処理
    function onFail (message) {
        console.log (message);
    }
    
    // Blob作成関数
    function toBlob(base64) {
        var blob;
        var bin = atob(base64.replace(/^.*,/, ''));
        var buffer = new Uint8Array(bin.length);
        for (var i = 0; i < bin.length; i++) {
            buffer[i] = bin.charCodeAt(i);
        }
        // Blobを作成
        try{
            blob = new Blob([buffer.buffer], {
                type: 'image/png'
            });
        }catch (e){
            return false;
        }
        return blob;
    }
```




*●●azureに送る関数のajax部分周辺●●*


```js
    function azureFunc(file){
        var YOUR_KEY = "xxxx";    // xxxxは取得したサブスクリプションキー
        var area = "xxxx";        // xxxxは選択したサーバが設置されている地域
        
        var subscriptionKey = YOUR_KEY;
        var uriBase = "https://" + area + ".api.cognitive.microsoft.com/face/v1.0/detect";
        var params = {
            "returnFaceId": "true",
            "returnFaceLandmarks": "false",
            "returnFaceAttributes": "age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise",
        };
    $.ajax({
            url: uriBase + "?" + $.param(params),

            // Request headers.000
            beforeSend: function(xhrObj){
                xhrObj.setRequestHeader("Content-Type","application/octet-stream");
                xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key", subscriptionKey);
            },
    
            type: "POST",
    
            // Request body.
            data: file,
            processData: false,
        })
```
    
Blob作成関数は[田中様の記事](https://qiita.com/uin010bm/items/150003f016287750cf34)から引用しています。

なんとかこれで送信できました。
（バイナリデータにデコードした時はなんでうまくいかなかったんだろう…画像データのヘッダーとか…？）


###参考サイト様
https://st40.xyz/one-run/article/145/
https://press.monaca.io/takuya/1550
https://www.hos.co.jp/blog/20180129/
PlatformIOでLPC812

今月初めに秋月電子で[LPC812の取り扱い](http://akizukidenshi.com/catalog/g/gI-13497/)が始まったようです。DIPではないですが130円と安価なので良いのではないでしょうか。

PlatformIOでLチカしてみました。

![写真（2018-07-27 13.11）.jpg](https://qiita-image-store.s3.amazonaws.com/0/104066/60db3d8e-2950-02df-da83-8b1803117aad.jpeg)


トラ技のLPC810基板のコネクタ(LPC-LINK2)と同じで、接続は以下のようにしました。

|コネクタ|LPC812|信号|
|:--|:--|:--|
|1|15|VCC|
|2|7|SWDIO|
|3|6|SWDCLK|
|8|16|GND|

```
$ mkdir lpc812_lchika
$ cd lpc812_lchika
$ pio init --board lpc812
```

コードはこんな風にしてみました。最初main.cでファイル作ったらビルド通らなくて、ちょっとはまりました。mbedはC++で拡張子をcppにする必要がありました。

```cpp:src/main.cpp
#include "mbed.h"

DigitalOut myled(P0_7);  // 17Pin

int main() {
    while(1) {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}
```

ビルドしてみます。

```
$ pio run
```

デフォルトのtarget uploadは使えないので、出来上がった.pioenvs/lpc812/firmware.binを[swddude](https://qiita.com/yamori813/items/837ce93262ee5cda7a31)のディレクトリにコピーして焼いてみます。

```
$ source/release/swddude -programmer um232h -flash firmware.bin -fix_lpc_checksum
```

一度電源を落とします。

Lチカできました。

2021/12追記：現在のLPCのライプラリは大きくなりLPC812では入らなくなっているので、platformio.iniを

```
[env:lpc812]
platform = nxplpc@3.5.0
board = lpc812
framework = mbed
```

のようにすると良いです。
Intune を使ってPCに 事前共有キーのWifi のプロファイルを配布する

# はじめに
Intuneを利用してMDM管理されたWindows 10 に事前共有キーを使用したWifiのプロファイルを配布します。
ネットワークに接続されているコンピューターから設定を吸い上げて配布します。
今回はカスタムプロファイルを利用します。


参照元
https://docs.microsoft.com/ja-jp/intune/wi-fi-profile-shared-key

#Wifiプロファイルの作成
まずプロファイルを吸い出すために、Wifiネットワークに事前共有キーで接続しているPCを準備します。
エクスプローラでc:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\ {guid}を開きます。
そうすると過去に接続したWifiプロファイルが出てきます。

![キャプチャ100.JPG](https://qiita-image-store.s3.amazonaws.com/0/262585/31a97487-3aa1-1adc-26b0-4cdad6adcaf6.jpeg)

この中から配布したいプロファイルを探します。中はXMLファイルなのでプレビューできます。
矢印のようにプロファイル名が入っていますので、どのWifiのプロファイルか判断できます。

共有キー部分が暗号化されていますので、このまま配布しても正常には動きません。
XMLファイルを開いて共有キーを記載します。

<Protected></Protected>の部分がTrueになっていると暗号化されていることになるので、ここをFalseに変えます
また<KeyMaterial></KeyMaterial>の値を16進の共有キーに変更します。（下図はサンプルです）
＜変更前＞
![スケッチ.png](https://qiita-image-store.s3.amazonaws.com/0/262585/78affab5-b361-b2fe-850e-e1ed90976842.png)
＜変更後＞
![スケッチ001.png](https://qiita-image-store.s3.amazonaws.com/0/262585/7402df97-fea5-8421-96b1-6e26699497ff.png)

#Intuneを使ったプロファイルの配布
カスタムプロファイルを利用して先ほどの設定を配布します。
1. [Azureの管理ポータル](https://portal.azure.com/)を開きます
2. [Intune]、[デバイス構成] 、[プロファイル] と進みプロファイルの作成を選択します。
3. [名前]、[説明]に適切な内容を記述し、プラット―フォームは ”Windows 10 以降”、プロファイルは ”カスタム”を選択します。[Oma-URIのカスタム設定]ブレードで”追加”を選択します
![スケッチ002.png](https://qiita-image-store.s3.amazonaws.com/0/262585/05d71428-9dc1-30fe-42b9-e44645289b0c.png) 
4. 行の追加ブレードで次のように入力します
　[名前]、[説明]に適切な内容を記述します。
　[OMA-URI]に[./Vendor/MSFT/WiFi/Profile/<プロファイル名>/WlanXml]
　プロファイル名はXMLの<SSID>の<name>の値と合わせます
　[データ型]に文字列を選択します
　[XML]に上記修正XMLファイルの内容を入力します
![キャプチャ001.PNG](https://qiita-image-store.s3.amazonaws.com/0/262585/d50b5260-3095-b7f2-fcc9-93e33930b304.png)
5. OKを選択し確定します
6. 必要に応じて項目を追加します
　![image.png](https://qiita-image-store.s3.amazonaws.com/0/262585/3e92b4aa-ab3d-bd42-9bd2-2639b8ed11ed.png)
7. 作成したプロファイルを割り当てしてユーザーに配布します
![キャプチャ002.PNG](https://qiita-image-store.s3.amazonaws.com/0/262585/ecc2560d-dc95-9f02-8be5-21e371573b89.png)


#確認
プロファイルが配布されたことを確認します
このWifiプロフィルだけは配布が成功しても管理画面でエラーで表示されます。
![キャプチャ003.PNG](https://qiita-image-store.s3.amazonaws.com/0/262585/389fa512-44a5-2ebb-a706-dc8dcadd7f47.png)


そのため配布されるかどうかは端末で確認します
一番簡単な方法はWifiの先にありましたプロファイルが格納されているフォルダを確認する方法です。ここに新しいファイルができていれば正常にプロファイルが適用されています。

#まとめ
Intuneを利用したPCへの事前共有キー型のWifiプロファイルの配布方法を紹介しました。
今後ほかのデバイスへも配布してみたいとおもいます。
ご指摘などありましたらお寄せください
Disqus Wordpressプラグインのコメントスクリプトをブログ以外でロードさせない

https://puntoapp.jp/ のパフォーマンスのチューニングをしてたら、なぜかトップページ以下のスクリプトを発見。。。


```
https://puntoapp.jp/wp-content/plugins/disqus-comment-system/public/js/comment_count.js
```

ふむ〜 
Wordpressで、普通はコメントなんか使わないのに、Disqusの開発者さん不親切ですね〜

なので、取り敢えずブログ以外の投稿には、読み込まないように以下を追記！


```
function disable_disqus() {

   //if not blog page, remove disqus filter
   if( !is_page('blog') ) {
      wp_dequeue_script('disqus_comment');
      wp_dequeue_script('disqus_embed');
			wp_deregister_script( 'disqus_comment' );
			wp_deregister_script( 'disqus_embed' );
   }
}

//hook onto comments_template filter with priority 1
add_action( 'wp_print_scripts' , 'disable_disqus', 100 );
```




P.S.
WPの手軽にパフォーマンスの高いサイト制作サービス提供しています。
手軽にご相談ください。
Azure Portalでサービス管理者(共同管理者)の権限を委任する

#Azure Portal(ARM)でサービス管理者(共同管理者)の作り方
※この記事は7月26日に書ききました

- サービス管理者 (Service Administrator)
- 共同管理者（Co-administrator)
- IaaS/PaaSでなんでもできちゃうスーパーユーザ）を他のユーザに委任する手順です

※下記のユーザはテストユーザで作成したものです（一応言っとく）

#Azure Portal上での操作
1. 左の[すべてのサービス]を選択し、[サブスクリプション]をクリック
<img width="822" alt="スクリーンショット 2018-07-27 11.10.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/187331/3a44f2a4-8922-8013-f70a-c28a29561d45.png">

2. 該当のサブスクリプションを選択、今回はAzure Passをクリック
<img width="822" alt="スクリーンショット 2018-07-27 11.10.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/187331/d72db4c0-08af-65af-a026-5321f6504e42.png">

3. 選んだサブスクリプションから[Access Control(IAM)]をクリック
<img width="822" alt="スクリーンショット 2018-07-27 11.10.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/187331/938b822c-531c-ca1b-6762-e1abbcff7469.png">

4. [追加]をクリック
<img width="822" alt="スクリーンショット 2018-07-27 11.11.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/187331/7dc75103-489d-d4fc-c5c8-442dd74eabe6.png">

5. [ロールを選択]する
<img width="822" alt="スクリーンショット 2018-07-27 11.13.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/187331/23023fe5-740e-a987-8720-a2f8a54fbcfe.png">
※サービス管理者と同じスーパーユーザ権限欲しいなら、[Owner(所有者)]を選択

下記がロールのリストです
<img width="261" alt="スクリーンショット 2018-07-27 11.13.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/187331/06bd3b06-f0a3-70db-3e45-227b3e029407.png">

6.[Save]を押したらユーザが追加されます
<img width="822" alt="スクリーンショット 2018-07-27 11.14.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/187331/4ad17269-02c1-9329-82db-f291bad024fa.png">

7.作成したユーザの右側の[...]をクリックして共同管理者をクリック
<img width="822" alt="スクリーンショット 2018-07-27 11.14.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/187331/54609338-5c57-dd9c-4ea9-cd4ebd5d2b96.png">

8.確認聞かれるのでYESで作業は完了
<img width="822" alt="スクリーンショット 2018-07-27 11.14.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/187331/5834af8c-a3af-4f50-7a53-0a7e030221a5.png">

これでAzureのサブスクリプションを買ったときに作ったユーザと
同一の強い権限（サブスクリプションの削除も可能）がサービス管理者（共同管理者）として与えられます

※この記事は7月26日に書ききました
変数の値がdomの属性値に含まれてるかを確認

表題のとおり。
es5とes6で2通りを書きます。

## やりたいこと
aタグのhref属性に該当の値(4953823006555)が含まれているかを確認

### HTML
```html
<div>
  <div class="item-name">
    <a href="/1234567894953823006554/">アイス</a>
  </div>
  <div class="item-name">
    <a href="/1234567894953823006555/">チョコ</a>
  </div>
  <div class="item-name">
    <a href="/1234567894953823006556/">アメ</a>
  </div>
</div>
```

### javascript es5
```js
var jan = "4953823006555";
var hasMatch = false;
var itemElement = document.querySelectorAll('.item-name a');
itemElement.forEach(function(i) {
  var matchCheck = (i.getAttribute('href')).indexOf(jan) >= 0;
  if (matchCheck) {
    hasMatch = matchCheck;
    return false;
  }
});
console.log(hasMatch)
```

### javascript es6
```js
const jan = "4953823006555";
const itemElement = document.querySelectorAll('.item-name a');
const hasMatch = Object.values(itemElement).find((i) =>
  (i.getAttribute('href')).indexOf(jan) >= 0
);
console.log(hasMatch)
```
[180727]Gitlab の Merge Request から学ぶ

今日は GraphQL の MR があったけど、勉強不足で今は理解できないのでメモだけ。
近いうちに何とかする！
[toggle wip status using GraphQL mutation](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/20443/diffs)

# [Resolve "Define /commits/ behaviour"](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/20738/diffs)
`/commits` に行くと 404 になるけど、ユーザーからするとこれはデフォルトブランチに行きたいのでは？ってのでの修正だと思う。 (from [issue #31576](https://gitlab.com/gitlab-org/gitlab-ce/issues/31576))
確かに！

# [Reset local storage between qa tests](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/20844/diffs)
テストごとに、 local storage をきれいにしましょう！ってことかな。このオプションは知らんかった...

```diff
          Capybara::Selenium::Driver.new(
            app,
            browser: :chrome,
+           clear_local_storage: true,
            desired_capabilities: capabilities,
            options: options
          )

```

# [Fix namespace move callback behavior, especially to fix Geo replication of namespace moves during certain exceptions](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/19297/diffs)
例外発生時の通知をちゃんとしてる。
例外が起こってるのに true を返してて、それもちゃんとコメントでフォローしてあるのがいいなと思った！
`true # false would cancel later callbacks but not rollback`

```diff
      begin
        send_update_instructions
        write_projects_repository_config
-
-       true
-     rescue
-       # Returning false does not rollback after_* transaction but gives
-       # us information about failing some of tasks
-       false
+     rescue => e
+       # Raise if development/test environment, else just notify Sentry
+       Gitlab::Sentry.track_exception(e, extra: { full_path_was: full_path_was, full_path: full_path, action: 'move_dir' })
      end
+
+     true # false would cancel later callbacks but not rollback
    end
```
タイル型 wm で背景を n 秒ごとに変えてみた⁽⁽٩( ˘ω˘)۶⁾⁾

# こういう方へ
- i3, xmonad 等のタイル型ウィンドウマネージャを使ってる方
- 背景を周期的に変更したい方

# どうやるの？
feh を使いますので, これをインストールしてください.

- ArchLinux : `sudo pacman -S feh`
- GentooLinux : `sudo emerge --ask media-gfx/feh`
- Ubuntu, Debian 等の他の LinuxDistro, CentOS : [ソース](https://feh.finalrewind.org/)からビルドしてください.

つづいて, 以下のシェルスクリプトを適当なディレクトリに配置してください.

```update-wallpaper.sh
#!/bin/sh
if [ $$ != $(pgrep -fo $(basename $0)) ]; then
    exit 0
fi

interval=30 # ここに描画周期
imgPath=/usr/share/backgrounds/ # ここに背景画像のディレクトリ名
imgs=(`find $imgPath -type f -regextype sed -regex ".*\.\(png\|jpg\)"`)
len=${#imgs[@]}

while true
do
    rand=$(($RANDOM % $len))
    feh --bg-fill ${imgs[$rand]}
    sleep $interval
done
```

あとは, このファイルの実行を許可して, スタートアッププログラム(wm 起動時に呼ばれるスクリプト)に登録するだけです.

```sh
$ sudo chmod +x /path/to/update-wallpaper.sh
```

## i3 の場合 
`exec_always /path/to/update-wallpaper.sh` を ~/.config/i3/config 等のコンフィグファイルに追加してください.

```config
# some other configs
exec_always /path/to/update-wallpaper.sh
```

## xmonad の場合
xmonad.hs 等の xmonad コンフィグファイルで用いる [XConfig](http://hackage.haskell.org/package/xmonad-0.13/docs/XMonad-Core.html#t:XConfig) のコンストラクタの startupHook に, `spawn "/bin/sh /path/to/update-wallpaper.sh"` を追加してください. 以下は一例です.

```xmonad.hs
myConfig = desktopConfig {
   -- some other constructors
   startupHook = do
     -- some other startup hooks
     spawn "/bin/sh /path/to/update-wallpaper.sh"
}
```
## その他のタイル型ウィンドウマネージャ
ごめんなさい, きりがないので省略させてください(´・ω・`)
大抵ウィンドウマネージャのホームページに書いてあったりするので, そちらを参照してください.


# 注意
あまり無いとは思いますが, 複数の X Server を起動して作業を行う際には, 片方でしか動作しません.

また雑に実装した結果, 連続で同じ背景が描画されることがあるコードになってしまいました. 私はあまり気にならないんですが, これが嫌だという方は, それほど難しくはないと思うのでご自分で実装してみるのもいいと思います.

~~背景の画像を大量に用意しておけば, かぶる確率も下がるんじゃないでしょうかね(適当)~~
TCP パケットをランダムに drop するカーネルモジュール

# 概要
パケットがちょくちょく lost する高負荷環境で、アプリのエラー処理のバグを踏んでデバッグする必要が出たので、ランダムで SYN パケットを drop するカーネルモジュールを作ってみました。CentOS7 で動作確認してます。

# random_packet_drop.c
```c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/ip.h>
#include <linux/inet.h>
#include <linux/netdevice.h>
#include <linux/netfilter_ipv4.h>
#include <linux/skbuff.h>
#include <linux/tcp.h>
#include <linux/random.h>
#include <net/ip.h>
#include <net/tcp.h>


MODULE_LICENSE("GPL");

static unsigned int handle_hook(const struct nf_hook_ops *ops,
                            struct sk_buff *skb,
                            const struct net_device *in,
                            const struct net_device *out,
                            int (*okfn)(struct sk_buff*))
{
    struct ethhdr *eth = eth_hdr(skb);

    struct iphdr *iph = ip_hdr(skb);

    if (!iph) {
        return NF_ACCEPT;
    }

    // IPv4 だけ対象にする
    if (iph->version != 4) {
        return NF_ACCEPT;
    }

    // TCP 以外は通す
    if (iph->protocol != IPPROTO_TCP) {
        return NF_ACCEPT;
    }

    // 192.168.1.1 (0xc0a80101) 以外からのパケットは通す
    if ((be32_to_cpu(iph->saddr) & 0xffffffff) != 0xc0a80101) {
        return NF_ACCEPT;
    }

    struct tcphdr *tcph = tcp_hdr(skb);

    // ポート 80 への通信以外は通す
    if (be16_to_cpu(tcph->dest) != 80) {
        return NF_ACCEPT;
    }

    // SYN フラグが立っていないパケットは通す
    if (!tcph->syn) {
        return NF_ACCEPT;
    }

    // ランダムで通す
    char rnd_byte;
    get_random_bytes(&rnd_byte, sizeof(rnd_byte));
    if (rnd_byte & 1) {
        return NF_ACCEPT;
    }

    printk(KERN_INFO "remote:%d -> local:%d   DROP\n", be16_to_cpu(tcph->source), be16_to_cpu(tcph->dest));

    return NF_DROP;
}


static struct nf_hook_ops hook_ops = {
    .hook = handle_hook,
    .pf = PF_INET,
    //.hooknum = NF_INET_PRE_ROUTING,
    .hooknum = NF_INET_LOCAL_IN,        // 入ってくるパケットを対象にする
    //.hooknum = NF_INET_FORWARD,
    //.hooknum = NF_INET_LOCAL_OUT,
    //.hooknum = NF_INET_POST_ROUTING,
    //.priority = NF_IP_PRI_FILTER,
    .priority = NF_IP_PRI_FIRST,
};


static int __init random_packet_drop_init() {
    int err;

    err = nf_register_hook(&hook_ops);
    if (err < 0) {
        return err;
    }
    return 0;
}


static void __exit random_packet_drop_cleanup() {
    nf_unregister_hook(&hook_ops);
}


module_init(random_packet_drop_init);
module_exit(random_packet_drop_cleanup);
```

# Makefile
```bash
obj-m := random_packet_drop.o

KERN_DIR=/usr/src/kernels/`uname -r`

all:
    make -C ${KERN_DIR} M=`pwd` modules

clean:
    rm -f *.ko.unsigned *.mod.o modules.order Module.symvers *.ko *.mod.c *.o
```

# 実行
```bash
root# make

root# insmod random_packet_drop.ko   // カーネルモジュールを有効にする
root# tail -f /var/log/messages
Jul 24 14:25:28 myhost kernel: remote:47632 -> local:80   DROP
...

root# rmmod random_packet_drop   // カーネルモジュールを無効にする
```
live2Dで自作したキャラクターをiOSアプリのfaceRigで動かすための道のり

firealpacaを使って動かしたい画像を切り分けた

live2D Cubism Editorで動きをつけた

アプリ内の課金によって「外部Live2D」のロックを外した


そこからどのようにするか

https://www.cg-method.com/entry/facerig-live2d-output-registration/

https://www.cg-method.com/entry/facerig-live2d-application-registration/


あたりを見て研究


自作のものが動くかどうかの前に、すでに動きをつけられている
http://docs.live2d.com/cubism-editor-manual/sample-model/
ここにある「ひより」というキャラクターをアプリで動かす。

ファイルを出力すると
桃瀨ひより_free.2028
桃瀨ひより_free.moc
桃瀨ひより_free.model.json
の三つができたので

これらを一つのファイルにまとめて圧縮


macだったのでfinderのファイルの圧縮　　機能ですぐできた


これをgoogledriveにアップした

公開設定にした


アプリ側を立ち上げて、live2D用の所に行き「+」ボタンを押して追加した。

その時googledriveにアップしてあるところのurlを指定。

立ち上げて動くかを確認したら


画像自体はダウンロードされてfaceRigの画面に表示された。ただ、キャラクターの目が真っ白。　体も表情も全く動かない。



どうすれば良いか調べた。
そもそも
.mocファイルとは何かhttp://sites.cybernoids.jp/cubism2/modeler/export/moc-export


moc ファイルとは、アプリなどで使用するための Live2D モデルの実データです。 
拡張子が「.moc」になっています。 




色々探していたらここが詳しそう！
http://mono-tone.blog.jp/archives/1070561267.html


この人が作って公開しているファイルを自分のPCにダウンロードして、圧縮し、googledriveにアップロード　公開設定　アプリを開いてそのURLを指定するとちゃんとアプリ上でキャラクターを動かすことができた！


なので、このページを参考に何が悪かったのかを考えてみる。
まずアップロードしたデータは、自動で出力したしたの3つのデータであった
桃瀨ひより_free.2028
桃瀨ひより_free.moc
桃瀨ひより_free.model.json

上で挙げたページには
手順25番目で必要なファイルをzipにまとめてアップロードという項目があり、そこを読むとzipでまとめて置かないといけないファイルには
mocファイル
modelファイル
physics.jsonファイル
ico_ファイル
テクスチャアトラスフォルダ

自分のところのファイルではmodelファイルがmodel.jsonファイルなので拡張子をmodelのみに変えた。
あとは動いていないことからもphysics.jsonファイルがないのが怪しい


mocファイルがどうなっているか見たいが、cubism3ではmocファイルがひらけないようだ

昔のバージョンのLive2D Viewer2を下のサイトからダウンロード
http://www.live2d.com/ja/download

インストールしようとするがこのダウンロードしたデータがadobe airというソフトが入っていないインストールできないようだ

adobe airをダウンロード

その後、viewer2がインストールできた。


これによってmocファイルも開くことができるようになった。


桃瀨ひより_free.mocファイルを開いてなかがどうなっているか、調べて見た。


目玉の黒の部分がこの時点からない！

動きはちゃんと設定されている。



なのでここまでのおかしいところをまとめると、
○ mocファイルの時点で黒目が表示されていない？　(絵のパーツの順番がおかしい？)
○ 動きは設定されているのに、アプリで起動した時、自分の動きに合わせてキャラクターが動いてくれていない。


まずは目玉に関して、
ファイルの中身を見てみると黒目のデータがあることがわかった。

何らかのせいで後ろに行っているか、表示されていない？

ファイルの順番を変えて見てもなんかうまくいかなかった。

目のファイルの中に黒目パーツを集めたフォルダとそれ以外の白目などデータになっていた。

黒目パーツをフォルダから出して、白目のデータとともに目のフォルダの中に直接入れて見た。

→ 無事、表示された。


あとは動くように設定するためにはどうしたら良いか


調べてみると動きを設定しているパラメータの名前の付け方が怪しそう。
http://forum.live2d.com/discussion/713/3-0のパラメータid名の初期値を旧パラメータid名にしてほしい

上のページで説明されているが、一括で変換する機能もあったみたい。

自分はきづかなくて、手でぽちぽち書き換えました。



結局、この２つを行うことでiOSのfaceRigでも動かすことができるようになりました。

physics.jsonファイル
ico_ファイル

はなくても、動かせました。



facerigアプリの公式の設定説明書？
https://facerig.com/resources/Mobile-Custom-Live2D-Facerig-Avatars-Documentation-JA.pdf
Lambdaの関数実行時に毎回エラーが異なる現象が起きたら

普段運用しているシステムのLambda実行時にエラーが発生しました。
Node.js を用いて開発していたのですが、最初に出た時のエラーは以下の通りです。

    {"errorCode":"<定義したエラー名>","error":"{\"code\":500,\"message\":\"Forwarding error\"}"}
    
内部でWatsonにアクセスしているのですがどうやらWatsonの接続部分で失敗しているみたいです。

再現するか何回か試したところ、毎回違うエラーがでてしまう始末。。。

    SyntaxError: Unexpected end of JSON input at Object.
    
    TypeError: Cannot read property 'statusCode' of undefined at Request._callback
    
    {"errorCode":"<定義したエラー名>","error":"<HTML><HEAD><TITLE>Error</TITLE></HEAD><BODY>\nAn error occurred while processing your request.<p>\nReference&#32;&#35;97&#46;bf7f3517&#46;1532497074&#46;fdbb3e7\n</BODY></HTML>\n","statusCode":500}
    
    Process exited before completing request
    
そこで、ログをしばらく眺めていると、エラー以外のメッセージで以下に注目してみました。

    Duration: 21587.75 ms	Billed Duration: 21600 ms Memory Size: 128 MB	Max Memory Used: 128 MB
    
メモリを上限まで使っている？
そこで、メモリを試しに上げてみたところ、エラーは出なくなりました。
iTunesにApp項目を復活させてiPhoneアプリのDocumentsフォルダを確認する（2018年7月版）


久々にデバッグしたろと思ったらiTunesにApp項目がなくてデバッグできない！
普段iTunesを使っていなかったので気づいていませんでした。。
無事復活させることができたのでメモします。

# Documentsフォルダを確認できるように共有の設定
よくApplication なんだっけ？となります。

1. `Info.plist`を開く
1. 任意の場所で右クリックし、`Add Row`を選択します
1. Key: `Application supports iTunes file sharing`, Type: `Boolean`, Value: `YES`にします
1. 実行して実機にインストール

これでDocument確認の準備完了です。

# App項目があるiTunesのダウンロード
一部のビジネスパートナーが欲しているからAppleがAppありの[iTunes 12.6.4.3](https://support.apple.com/en-gb/HT208079)を公開してくれていますので迷わずMac版をダウンロードします

## インストールしたiTunesが起動できない場合
このようなエラーが出て起動できませんでした。
![iTunes起動エラー.png](https://qiita-image-store.s3.amazonaws.com/0/187223/134ae1e8-b51e-383a-f462-cea391a44efc.png "iTunes起動エラー.png")

~~新しいバージョンのiTunesをインストールしていてもインストーラ実行できると書いてあるのにAppleの嘘つき！と思いつつ~~
ファイルを消せば起動できるのでサクッと消します。

```bash
$ rm ~/Music/iTunes/iTunes\ Library.itl
```


## Appを開く
左上のデバイスアイコンを選択します。
![デバイスアイコンを選択.png](https://qiita-image-store.s3.amazonaws.com/0/187223/10114156-fc81-2d5d-5fa8-9edf936cb428.png "デバイスアイコンを選択.png")

無事Appが復活しました！
![App復活.png](https://qiita-image-store.s3.amazonaws.com/0/187223/a00fa8f8-6e66-bde1-b2bc-d1d6c2c4d2c2.png "App復活.png")

よきデバッグ生活を〜〜
VSCodeのExplorerからファイルを除外するにはfiles.exclude

`files.exclude`というのがそれらしい。（参考：https://code.visualstudio.com/docs/getstarted/settings ）

Rユーザであれば、デフォルトに加えてknitrのキャッシュディレクトリとか`.Rproj.user`とかそのへんを入れておくとよさそう。

```json-doc
    "files.exclude": {
        // knitr cache
        "**/*_cache": true,

        // RStudio cache
        ".Rproj.user": true,

        // R files
        ".Rhistory": true
    }
```
ReactNativeでアプリ名、BundleID・PackageNameを変更する方法

## はじめに
```
$ react-native init hogehoge
```
で生成されたプロジェクトではアプリ名、識別子は以下のようになります。

|  | iOS | Android |
|:-----------|:------------:|:------------:|
| アプリ名 | hogehoge        | hogehoge         |
| 識別子  | org.reactjs.native.example.hogehoge | com.hogehoge     |
識別子：
iOSの場合は`Bundle identifier`
Androidの場合はAndroidManifest.xmlのmanifestタグ内の`packege=com.hogehoge`


## AndroidのPackege変更面倒くさい問題
iOSのバンドルID,アプリ名の変更はそれほど面倒くさくないのですが、
Androidはちょっと面倒。
ファイル内に記述されてる諸々のパッケージ名を変更したり、ディレクトリ構成も変えないといけない。

ReactNateve開発を始めたばかりの私はこれだけのことでも面倒に思ってしまい後回しにしちゃってました。

## 一発でいい感じにしてくれ！！！
ってことで登場するのがこちら！
__[react-native-ci-tools](https://www.npmjs.com/package/react-native-ci-tools)__　！！！！！

まずはさくっとインストール

```
$ npm i -g react-native-ci-tools
```

プロジェクトのディレクトリに移動し諸々変更しよう

```
$ react-native-ci-tools bundle "com.test" "TESTアプリ" -a
```
`"com.test"`は識別子。
`"TESTアプリ"`はアプリ名となります。

`-a`とオプションをつければAndroidのみを変更できます。
iOSのみを変更したい場合は`-i`をつければOKです。




現場からは以上です。それではよいReactNativeライフを。


## 2018/08/15 追記
あれ？もしかしてこれやってもAndroidはディレクトリを

```
com/hogehoge
```
から

```
com/test
```
に__手動__で変えないとだめ？
Visual Studio Community for Macで改行コードを変更する

> There are inconsistent line endings in the 'Assets/XXX.cs' script. Some are Mac OS X (UNIX) and some are Windows. This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands.

こんな感じでVisualStudioでスクリプトを作成すると、
Linux/MacとWindowsの改行コードが入り混じって警告が出る

# 解決方法

1. Preferences/Source Code/Code Formatting/C# Source Codeを選択
2. Use default settings from 'Text file'のチェックを外す
3. Line endings: をUnix/Macに変更

![Screen Shot 2018-07-27 at 12.07.50.png](https://qiita-image-store.s3.amazonaws.com/0/132627/d71881a4-4587-911d-97fa-0b3ae9f48f5a.png)

ちなみに全体のCtrl-Iでやるフォーマットをかけてもすでに作成されたスクリプトには反映されないようなので、
反映させるために全体選択->コピー->ペーストをする必要があった
(もっといい方法ありそう...)