OmniAICreator/Qiita-1.07M huggingface dataset:
aws lambda layers でライブラリをアップロードするときは決まったディレクトリ構成でなければならない

# 概要
aws lambda layers でライブラリをアップロードするときは決まったディレクトリ構成でなければいけません。

# 解説
例えば、nodejs の場合だと、nodejsディレクトリにnode_modulesディレクトリを入れます。
zipのファイル名は何でもokです。

```
xray-sdk.zip
└ nodejs/node_modules/aws-xray-sdk
```

知らないとはまる可能性があるので共有でした。

当然 nodejs 以外の言語でもディレクトリ構成が決まっているので、下記公式ドキュメントで確認してください。

AWS Lambda レイヤー
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html
Azure CLIで操作する（Traffic Mangaer編）

## Azure CLIを利用して有効なエンドポイントを変更する
### Azure CLIとは
Windows、MacOS、Linuxなどクロスプラットフォームで利用出来るAzureをコマンドラインで操作出来るツールです。
ダウロードは下記のページから
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest

1. Azureにログイン
az login
ログインするとサブスクリプションIDなどの情報が表示されます。
※プロキシサーバがある環境では、必要に応じてプロキシを環境変数に設定して下さい。
一時的な場合は、下記のコマンドを入力
set HTTP_PROXY=http://username:password@proxy.contoso.com:8000
set HTTPS_PROXY=http://username:password@proxy.contoso.com:800

2. Azure CLIのバージョンを確認する。
az --version
![cli2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/86d0fd67-bb3d-b67d-c0e3-7de7c4c0aed7.png)

### 構成について
東日本リージョン、西日本リージョンにWeb Appsを配置して、Traffic Managerを利用してユーザーからのアクセス先を変更します。
![構成図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/79d9c1b6-8ac0-b545-f0e6-40bce81fb72a.jpeg)

1. 東日本リージョンのサーバの表示
URL：https://k-sampleapp1.azurewebsites.net
![eastside.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/6778bef4-97bc-5845-8d46-53ed7933496c.png)

2. 西日本リージョンのサーバの表示
URL：https://k-sampleapp2.azurewebsites.net
![westside.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/ba12986f-0e83-d583-a1ce-e28ac43141db.png)

### 切替前
Traffic Managerに名前解決を依頼すると優先度高の東日本リージョンのIPアドレスが返され、東日本リージョンのサーバが表示されます。

1. ブラウザでの確認
![tm1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/e43d77e4-0bf6-d7a4-ed03-70388bd6afc7.png)
2. Azure CLIでの確認
![endlist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/8cf1a1fd-d96d-95c0-a418-511e5aaa4ad7.png)
3. CMANにてDNSの動作確認
![正常時.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/59934207-9edf-2324-36a9-0c6b652704cc.png)

### Azure CLIによる切替
Traffic Manager のエンドポイント1（東日本リージョンのサーバ）を無効化します。
![切替.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/ff502b03-d695-2f54-b256-92bd8a550f9d.png)

### 切替後
切替前と同様にTraffic Manager名前解決を依頼しているが、西日本リージョンのIPアドレスが返され、西日本リージョンのサーバが表示されます。

1. ブラウザでの確認
![tm2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/e5c3b614-d437-dc63-efd9-53cafb6f352f.png)
2. Azure CLIでの確認
![切替確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/5a466022-6999-461b-84fb-5c80b09af728.png)
3. CMANにてDNSの動作確認
![切替時.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270447/06bf6231-d404-fd22-924f-84dc93d157f4.png)

### 備考
今回はWeb Appsのみを利用した簡易な構成ですが、多くの場合、Web AppsのバックにAzure SQL DatabaseなどDBを配置していることが多いかと思います。
Azure SQL Database の場合には、プライマリとセカンダリの切替も必要になってきます。
災対目的での、マルチリージョンを構成する際は、手順を検証しておきましょう。
デブサミ2020レポート

##devsumi2020に行ってきました。
[公式ページ](https://event.shoeisha.jp/devsumi/20200213)


行ってきましたというか、今回は出展者側でした。
![IMG_1768.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43851/9132e4cd-2293-9e11-4bc0-10ffd20533d8.png)
V-CUBEのメインサービースはWEB会議システムですが、デブサミでは組み込み系のSDK「agora.io」についてのブースを出しました。ラズパイ＋ビデオ通話のデモを出してましたが、ラズパイの食いつきはやはりいいですね。

基本的にSEとしてブース見学に来られた方（学生さんも！）の対応をしてましたが、セッションの開催中は割と時間が開いたので他のブースを見てきました。

##見学してきたブース(2/13)
**NGINX**
**Autify**
**JFrog**

##NGINX
[公式サイト](https://www.nginx.com/)
お恥ずかしながら、F5に買収されていた事を今日知りました。。。
そしてロゴがかなりかっこよくなっていました。
・アプリケーション開発者もネットワーク設定ができる
・カナリアリリースにも柔軟に対応
・柔軟なWAF対応
といったメリットがあるとのことです。NGINXから目が離せなくなってきました。

##Autify
[公式サイト](https://autify.com/ja/)
AIを用いたテスト自動化ツール(国産)です。
seleniumはコードを書く必要があり、学習コストがかかりますが、こちらはテストシナリオを誰でも作れる（コード不要）とのことです。
実際にテスト対象のアプリケーションを操作しながらテストのシナリオを埋め込んでいくツールです。
結果がシナリオと異なっているかをAIを用いた画像認識で判断してくれます。
単純な画面遷移のテストを繰り返し行っているような開発現場にはもってこいのツールだと思います。
又、国産ということで日本語の対応もしっかりしているということでこれから楽しみなサービスです。

##JFrog
[公式サイト](https://jfrog.co.jp/)
こちらはかなり興味深いデモがみれました。（説明が英語でしたが、がんばって聞いてみました）
一言で言うと「バイナリデータのGit管理」といった感じです。
ソースコードなどのテキストデータについてはGit管理するのが当たり前で差分等も可視化できます。
ですが、ソースコードの差分が無いのに成果物に違いが出てくるケースがあります。

以下のようなDockerfileがあったとします。

```yaml:Dockerfile
FROM centos
#以下略
```

このDockerfileをGitで管理したとして、ファイル自体に変更がなければ差分は永久に発生しません。
しかし、イメージをビルドするタイミングではバイナリデータは置き換わってまったく別のものになっている場合があります。（Pullする元のイメージがアップデートされる等）
結果として、テスト段階で正常に動作していたアプリケーションがいざ本番にデプロイした際にバグが発生するという事がおきます。
このようなバイナリレベルでの差分を確認できるツールを提供しているようです。

その他にも依存関係のファイルでセキュリティホールがある場合は警告を表示させたり、そもそもプロジェクトに取り込めないようにする設定もあるとのこと。
開発の終盤でこのような事に気づいてしまえば実装、テストのやり直しという事になりますが、このツールを活用することで開発開始時点でチェックできる素晴らしい機能です。

こちらも注目のサービスになりそうです。

##見学してきたブース(2/14)
**grasys**
**EngineerCafe**
**子供プログラミング本大賞2020投票会**
**ネクストビート**
**インターシステムズ**
**グレープシティ**
**Findy**
**jetbrains**

##grasys
[公式サイト](https://www.grasys.io/)
GCPパートナー。インフラの設計、運用をお任せできる会社さん。
気になるポイントは複数のIaaSをまたがった安定運用だけど、そのあたりの話は詳しく聞けなかった。（エンジニアさんじゃなかったので）
公式サイトのドメインが.ioというのもイマドキな感じでかっこいいです。

##EngineerCafe
[公式サイト](https://engineercafe.jp/ja/)
福岡にあるエンジニア向けコアワーキングスペース。仙台にもありましたが、地方にコミュニケーションがとれる場所があるのはいい事ですね。現場を実際に見てませんが、HPや資料をみるとかなりお洒落な雰囲気です。
エンジニアカフェというネーミングがストレートでわかりやすくていいですね。

##子供プログラミング本大賞2020投票会
子供向けのプログラミング本の多さに驚きました。
実際にはハード＋ソフトで楽しく遊ぶ系の書籍が多い印象。
日本も海外に負けず、ソフトウェアに強くなって欲しいと願ってます。

##ネクストビート
[公式サイト](https://www.nextbeat.co.jp/)
我が子が通う保育園でも導入されている「KIDSNA」の開発会社。
ユーザー目線でどうしても直して欲しいポイントがあり、想いを伝えてきましたw

##インターシステムズ
[公式サイト](https://www.intersystems.com/jp/)
データベース系。という事だけしかまだ理解できていません、、、すいません。
Dockerのイメージもあるということだけ興味わいてます。メモメモ。

##グレープシティ
[公式サイト](https://www.grapecity.co.jp/)
エクセルのUIをJSで簡単に再現するライブラリを紹介していました。
HPを改めて見て思い出しました。仙台でオフィスが特徴あるとけっこう話題になった会社さんでした。

##Findy
[公式サイト](https://findy-code.io/)
最近やたらとTwitterで広告が出ている。（私だけ？）
Githubでスキルが可視化されるとのことで、私のコード見られるとボロボロな判断されそう。

##jetbrains
[公式サイト](https://www.jetbrains.com/ja-jp/)
IDEツールの提供。エディターがとにかく優秀で、AIでもはいってるんでしょうか、空気を読んで補完やら選択範囲選んでくれたりします。
コード書く時間半分くらいになるんじゃないでしょうか。
【備忘録】Ruby : 継承(override,super) 

https://qiita.com/noytdm1021/items/9e3a5d67234fd6a904c1 の追記

```ruby:sample.rb

class Greeting
	def hello
		puts "こんにちは #{@name}さん"
	end

end

class User < Greeting
	# Greeting を継承
	def initialize(name)
		@name = name
	end

	def hello
		super
		# super で親クラスの hello メソッド呼び出し
		# override
		puts "Hello. #{@name}."
	end
end

user = User.new("Tanaka")
user.hello
#=>こんにちは Tanakaさん
#=>Hello. Tanaka.
#どちらも出力


```
Rails チュートリアル 5.0（第4版）演習と解答(11.3.3)

# はじめに
11.3.3のうち演習3のテストコード作成のみ記載しています。
これまでのテストコードを書く演習では、多少なりともコードの雛形が用意されていたが、今回はコードについてはノーヒントだったので、結構悩みました。

# 演習内容
ここまでの演習課題で変更したコードをテストするために、/users と /users/:id の両方に対する統合テストを作成してみましょう。
訳注: updateメソッドは、コールバックとバリデーションを実行せずにスキップしますので、コールバックやバリデーションをかける必要がある場合は注意が必要です。
# 解答
## /users　に対するテスト　⇨　green

`/users`（ユーザ一覧を表示するindex画面）、には有効化されていない（`activated:false`)のユーザが表示されないことを確認する。
まず、現状のtest用に作成したユーザ一覧は全て有効化されているため、（`activated:false`)のユーザを追加する。

```users.yml
ghost:
  name: Ghost Example
  email: ghost@example.com
  password_digest: <%= User.digest('password') %>
  activated: false   #defaultでfalseなので、記載不要だが他との違いを明確にするため記載
  activated_at: nil

    ・・・
```


次に、一覧画面上に上記の有効化されていないユーザは表示されないことを、テストコードに追加。一覧画面の`a`タグに有効化されたユーザの名前は存在するが、有効化されていないユーザはないことを検証しています。

``` users_index_test.rb
  def setup
    @admin = users(:michael)
    @non_admin = users(:archer)
    @activated = users(:archer)      #今回追加
    @non_activated = users(:ghost)   #今回追加
  end
  
  test "index includes only activated user" do
    log_in_as(@activated)
    get users_path
    assert_template 'users/index'
    assert_select 'a',text: @non_activated.name, count:0
    assert_select 'a',text: @activated.name,     count:1
  end
```
## /users/:id に対するテスト　⇨　green

演習1で、仕様変更を行った、有効化されていないユーザ（`activated:false`)のユーザプロフィール画面(`/users/:id`）を指定した場合には、プロフィール表示を行わず、ルート画面へリダイレクトされること検証する。
逆説的に、有効化されているユーザのユーザプロフィール画面を指定した場合には、ただしくプロフィール表示が行われることもセットで検証

どのテストファイルで実施するか迷ったが、controllerの挙動を確認するという意味で`users_controller_test.rb`に追加することにした。

```users_controller_test.rb

  def setup
    @user = users(:michael)
    @other_user = users(:archer)
    @non_activated = users(:ghost)
  end

# 途中略

  test "should redirect to root when get non_activated user_path" do
    log_in_as(@user)
    get user_path(@non_activated)
    assert_redirected_to root_url
  end
  
  test "should show user when get activated user_path" do
    log_in_as(@user)
    get user_path(@other_user)
    assert_template 'users/show'
  end
```


# 終わりに
テストコードを書いてみたが、演習に記載された以下の訳注が何を意味するのかは理解できなかった。もしご存じの方いれば、コメントお願いします。
**訳注: updateメソッドは、コールバックとバリデーションを実行せずにスキップしますので、コールバックやバリデーションをかける必要がある場合は注意が必要です。**
Kofax(Bizrobo!) の日本語化(version10.7.0.1)

# 環境
kofax RPA 10.7.0.1
windows10

# 手順

1)  メモ帳を管理者権限で開く  

  タスクバーのメモ帳を右クリック -> メモ帳をさらに右クリック
-> 管理者として実行

![kofax_to_ja_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83177/74a05322-2975-5dca-1da5-7ddaf41152f4.png)

2)  メモ帳の「開く」から、
PC > ローカルディスク(C:) > Program Files > Kofax RPA 10.7.0.1 181 x64 > binへ移動
　![スクリーンショット 2020-02-13 22.35.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83177/9d2aa1ba-630d-44b5-ea42-0f871d73702d.png)

-> common.confを開く
（出てこない場合は、ファイル名の隣のテキスト文書(*.txt)を、すべてのファイル(*.*)へ変更する）

※間違って修正することもあるので、コピーをとっておくと良い


3) common.confの19行目　
wrapper.lang=en_US # en_US or ja_JP　を、
wrapper.lang=ja_JP # en_US or ja_JP　へ変更

![スクリーンショット 2020-02-13 22.41.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83177/45b8f599-09f5-87fa-5c5d-60f9e2adb0d6.png)

4) common.confの63行目　
wrapper.java.additional.4=-Duser.language=en　を、
wrapper.java.additional.4=-Duser.language=ja　へ変更

![スクリーンショット 2020-02-13 22.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83177/55a44481-617e-4d48-732a-f8f358f9dc60.png)

5) common.confを保存

6) Start Managemnet Consoleを管理者として実行する
![スクリーンショット 2020-02-13 22.47.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83177/96999dd0-9aa7-83a8-4b93-18dd76fdf0eb.png)

7) RoboServer startedが出るまで待つ

![スクリーンショット 2020-02-13 22.50.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83177/564e3e12-fec0-21f5-9554-252616ae7aab.png)


8) Design Studioを起動
![スクリーンショット 2020-02-13 22.51.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83177/7b5b672e-afb4-1ca9-52f9-af06508c896f.png)


9) 日本語になっていることを確認
![スクリーンショット 2020-02-13 22.52.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83177/6827db16-d523-4a0b-adfe-4c65e0982d03.png)

# 参考
https://qiita.com/y1102t/items/d94fcb30828467dcd100
Vue.jsのmodalにうまくCSSが効かなかった話

## Vue.jsのmodal

こんにちは。最近Vue.jsを書いている学生のwebエンジニアです。
動的にsession管理するために、Vue.jsでmodal使いたいよねという話になり、ごねごね書いていましたが、いきなりcssが効かなくなり、こんな画面になってしまった。。（一応ぼかしいれますがご了承ください）

![](https://vps18-d.kuku.lu/files/20200213-1350_8b0d5b5637895e46fdb52767ecfb29e5.png)

高さが足りなくて「作成」ボタンが埋もれてしまった、、、


## CSSが効いていないときのコード

```Modal.vue
<script>
import ~

export default {
  props: {
    省略
  },
  data() {
   return{};
  },
  methods: {
    showModal() {
      this.$modal.show(
        CreateUserModal,
        { UserId: this.UserId },
        { NameLists: this.NameLists },
        { name: "CreateUserModal", height: "800", scrollable: true }
      );
    }
  },
  created() {}
};
</script>
```

このコードだと最初みたいな画像のmodalになってしまう、

## 解決方法
```Modal_.vue
<script>
import ~

export default {
  props: {
    省略
  },
  data() {
   return{};
  },
  methods: {
    showModal() {
      this.$modal.show(
        CreateUserModal,
        // ここを変える
        { UserId: this.UserId,
          NameLists: this.NameLists },
        { name: "CreateUserModal", height: "800", scrollable: true }
      );
    }
  },
  created() {}
};
</script>

```

show()は`第一引数にプロパティ、第二引数にcssを書かないと適用されないらしい。引数追加しすぎて、第三引数に書いていたのが問題でした。

こんな感じに修正！
![](https://vps18-d.kuku.lu/files/20200213-1351_7118e04196dd6d0853cbe2a5d02f6695.png)
参考
[vue-modal公式ドキュメント]
(https://www.npmjs.com/package/vue-js-modal)

## まとめ

公式ドキュメントをしっかり読もう
プログラミングのための線形代数１～２章

##概要
機械学習の内容理解には線形代数の知識が必要そうなことが分かりました。
行列の計算くらいは出来ますが、そもそも行列がどういう役割を果たすものなのかさっぱりンコなので
この機会に勉強することにしました。
入門書としてオススメされていた「プログラミングのための線形代数」を取り組みんでいきます。
忘備録として重要そうなところをまとめていきます。

##基底について
原点のみが与えられる空間を線形空間と呼ぶ。
イメージとしては白紙の上に原点Oがあるだけの世界。この空間では目盛りも方向もなく、長さや角度は定義されていない。
この真っ白な世界に番地を振るのが基底の役割。

####基底の条件

①どんなベクトル $\vec{v}$でも
$$\vec{v} = x_1\vec{e_1}+…+x_n\vec{e_n}$$
という形で表せる（$x_1,...,x_n$は任意の数）

②しかも、その表し方は1通りだけ
<br>
それぞれ解説すると、①はどの土地にも番地がついている、②は1つの土地には番地が1つだけ、という意味。
平面空間で1本のベクトルでは足りず、3本では多すぎる。
同じ方向のベクトルを用意しても意味ないよ、ということ。

## 行列と写像
ベクトルという「対象」間の関係を示す便利な表記方法。
例えば、
肉を $x_1$ グラム（$a_1$円、$b_1$カロリー）、 豆を $x_2$ グラム（$a_2$円、$b_2$カロリー）、 米を $x_3$ グラム（$a_3$円、、$b_3$カロリー）買いました。合計でいくらでしょう？また、合計で何カロリーになるでしょう？

という問題は、

```math
y_1(金額) = a_1x_1+a_2x_2+a_3x_3 \\
y_2(カロリー) = b_1x_1+b_2x_2+b_3x_3
```

となり、行列で表すと

```math
\begin{pmatrix}
y_1 \\
y_2 
\end{pmatrix} = 
\begin{pmatrix}
a_1&a_2&a_3 \\
b_1&b_2&b_3
\end{pmatrix}
\begin{pmatrix}
x_1 \\
x_2\\
x_3
\end{pmatrix} 
```
と表すことができる。
これが「行列とベクトルの積」である。
この時、行列の列数が「入力」の次元数、行数が「出力」の次元数となる。

$n$次元ベクトル$x$に$m \times n$行列を掛けると、$m$次元ベクトル$y=Ax$が得られる。
つまり、行列$A$はベクトルを別のベクトルに移す写像が定まるということ。
行列を見たら数の集まりではなく写像として認識しよう。

##逆行列
$A$が逆行列を持つ（正則行列）とき、
$x=A^{-1}y$
により行列により変換される前のベクトルが求まる。

たちが悪い行列の場合、変換前後の次元が異なったり（①）、変換前のベクトルがユニークに定まらなかったり（②）する場合がある。（ベクトルがぺしゃんこになる）

```math
①\begin{pmatrix}
*\\
*\\
*
\end{pmatrix} =
\begin{pmatrix}
*&*&*\\
*&*&*
\end{pmatrix} \times
\begin{pmatrix}
*\\
*\\
*
\end{pmatrix}
\\
\\
②A=\begin{pmatrix}
0.8&-0.6\\
0.4&-0.3
\end{pmatrix}
```
ポイントは、
1. 同じ結果$y$が出るような原因$x$は唯一か（単射）
2. どんな結果$y$にも、それが出るような原因$x$が存在するか（全射）
である。

写像$A$でぺしゃんこになる次元数を$KerA$、写像にて変換された$y$の集合を$ImA$と呼ぶ。
$KerA$が原点のみの場合、写像は単射であり、$ImA$が「行き先の全空間」に一致する場合、写像は全射である。

変換後のベクトルがぺしゃんこになってしまうということは、元は別々のベクトルなのに変換後は同じになってしまう場合がある。
つまり、$Ax=Ax'$が成り立つ。

```math
\begin{pmatrix}
a_1,...a_n\\
\end{pmatrix} \times
\begin{pmatrix}
x_1\\
.\\
.\\
.\\
x_n
\end{pmatrix} =
\begin{pmatrix}
a_1,...a_n\\
\end{pmatrix} \times
\begin{pmatrix}
x'_1\\
.\\
.\\
.\\
x'_n
\end{pmatrix}
```

このような$a_1...a_n$を線形従属であるといい、$Ax≠Ax'$の場合は線形独立であるという。

##終わりに
多次元の計算がいっぺんに出来る行列の便利さが何となく分かりました。
ただ、概念的な部分が多いためまとめるのが難しい…
正規表現で、テキストエディタに光を当てよう（コーディング規約チェック）

# はじめに
最近、VSCodeを使い始めまして、自分のPC上で、秀丸やサクラエディタが空気になりつつあります。
そんなテキストエディタたちに光を当てるべく、コーディング規約チェックツール代わりにすることを考えてみました。

この投稿は、アイデアのメモです。なので・・・

- 世の中は広いもので、既に同じアイデアがあるかもしれません。かぶっていたら、本当にごめんなさい。。。
- 思いついたら、内容が増えていく予定です。（永久に増えないかも）
- 実は、VSCodeに独自のハイライト設定を追加する方法が分からなかっただけ、だったりします・・・教えて、エロい人！

# アイデア

秀丸やサクラエディタにある強調表示の配色設定にて、「優先度が高いほうに」どぎつい配色を用意してください。
<font color="#FF0000">$\style{background-color:pink;}{こんな感じですね。}$</font>
ちなみに秀丸の場合、強調表示1～強調表示8だと、強調表示8のほうが、優先度が高いです。

で、この設定を何に使うかというと、コーディング規約違反を視覚的にパッと見せるために使います。
後で示す正規表現にヒットしたら、どぎつい配色で表示させるのです。

後で示すパターン3を例にして、どんな表示になるかのイメージを示しておきます。
<font color="#00C0C0">int</font> <font color="#FF00FF">max</font>(<font color="#00C0C0">int</font> a, <font color="#00C0C0">int</font> b)
{
　　<font color="#0000FF">if</font> (a > b)
<font color="#FF0000">$\style{background-color:pink;}{　}$</font>{
　　　　<font color="#0000FF">return</font> a;
　　} <font color="#0000FF">else</font> {
<font color="#FF0000">$\style{background-color:pink;}{　　　}$</font><font color="#0000FF">return</font> b;
　　}
}

## パターン1：コード1行あたりの文字数はｎ文字以内

例えば、1行あたり120文字以内にしろ、というルールですね。

```
^.{121,}
```

任意の文字が121個以上あったらOUT、ということです。
強調表示での検索は1行ずつなので、検索文字列先頭の`^`は有っても無くてもよいかと思います。

## パターン2：タブ使用禁止

組み込みソフトだと、コードにタブ使うな、って言われることあるんです。

```
\t
```

・・・ごめんなさい、石は投げないでください＞＜

## パターン3：インデントは半角空白4文字ずつ

4n+1 ≦ [空白の個数] ≦ 4n+3 かどうかをチェックします。

```
^( {4})* {1,3}(?! )
```

後ろの`(?! )`は、インデントのために、普通に書いた4連続空白でも、先頭3文字がどぎつい配色になってしまうことを防止します。
【UE4】無料アニメーションの整理／第13回UE4ぷちコンの前準備 - 2012/02/13

[1]:http://historia.co.jp/
[2]:http://historia.co.jp/ue4petitcon13
[3]:https://qiita.com/EGJ-Kaz_Okada/items/097898f91a34038f4fb1


[株式会社ヒストリア][1]さん主催の[第13回UE4ぷちコン][2]が待ちきれずに、それ用の作業を始めてしまったメモ。
※テーマ発表はあしたの12:00。（待てばいいのに）

# 各地のグレイマンのアニメーションを一つのスケルトンにまとめる

今日は帰宅が遅かったので、サクッとできることを。

毎月の無料コンテンツや永久無料コンテンツで入手したアニメーション群は、スケルトンがそれぞれのコンテンツの持つグレイマンを参照している。実際、混ぜて使いたいときに面倒くさい。
これはあの「おかずさん」が
[［UE4］Animation Sequenceをアセット複製せずに直接リターゲットする方法について - Qiita@EGJ-Kaz_Okada][3]
で解決策を教えてくださっているので、ありがたく頂戴して対応しようかと。

# 最終的にこうした

![20200213_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358170/5059d971-c586-3c08-e354-58dd237cfad7.png)

- もともとAnimation Starter Packに入っていたUE4_MannequinフォルダをContentフォルダ直下に移動。すべてのアニメーションアセット(Anim Sequence)はこのグレイマンを参照することにする。
- その下にAnimationsフォルダを作って、さらにその下に各種パッケージのフォルダを作成。
    - その中にそれぞれのアニメーションアセット(Anim Sequence)を置いた。
- すべてのアニメーションをおかずさんのツールでUE4_Mannequin/Meshの下のSK_Mannequinを参照するように変更。

> ※EditorAnimUtils::RetargetAnimations() を使っている付近だけを目コピして使わせていただきました。

うん。使いやすくなった。
（おかずさん、ありがとう）

# おかずさんのコードを一部変更して使わせてもらいました

汎用性を捨てて、自分の欲しい機能のみに特化した形に。
つまり「複製しない」「リネームしない」「コンポーネントスペースでコンバートしない」の決め打ちに。

```C++:変更箇所
	EditorAnimUtils::RetargetAnimations(
		animSequence->GetSkeleton(),	// USkeleton* OldSkeleton
		InNewSkeleton,					// USkeleton* NewSkeleton
		objectToRetarget,				// TArray<TWeakObjectPtr<UObject>> AssetsToRetarget
		true,							// bool bRetargetReferredAssets
		nullptr,						// const FNameDuplicationRule* NameRule
		false);							// bool bConvertAnimationDataInComponentSpaces
```

※引数の最後の３つ(true, nullptr, false)がそれ。

今日はここまで。
明日のテーマ発表が待ち遠しい…
強力なtext-shadow！　ぼやけていない、くっきりしたテキストシャドウ

## text-shadow使ってますか
文字に影をつけるためのCSSプロパティ。
以前は使ってみても影が付いてるのかどうかはっきりしないくらい効果が薄かったので編み出した方法なのですが久しぶりに使ってみたらはっきりくっきり出ている。記憶違いかな。

<p class="codepen" data-height="265" data-theme-id="dark" data-default-tab="css,result" data-user="sphenisc" data-slug-hash="GRJogEp" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="GRJogEp">
  <span>See the Pen <a href="https://codepen.io/sphenisc/pen/GRJogEp">
  GRJogEp</a> by sphenisc (<a href="https://codepen.io/sphenisc">@sphenisc</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
これはどういう時に使うかと言うと写真背景の上に白い文字を表示しなければいけないような状況で読みにくさを緩和するためのものです。
text-shadow を12回重ねがけして効果を増強しています。

## バリエーション
SCSSで影の色と濃さを調整できるようにしたもの
<p class="codepen" data-height="265" data-theme-id="dark" data-default-tab="css,result" data-user="sphenisc" data-slug-hash="rNVxazr" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="rNVxazr">
  <span>See the Pen <a href="https://codepen.io/sphenisc/pen/rNVxazr">
  rNVxazr</a> by sphenisc (<a href="https://codepen.io/sphenisc">@sphenisc</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

- $sha: #fff;　が影の色を設定する項目で
- $opa: 0.4;　で影の濃さを調整できます。

text-shadow: 2px 2px 2px rgba($sha, $opa)
パラメータの意味は　影のX座標をいくつずらすか／Y座標を～以下略／ぼかす範囲／影の色

* 影を強く、濃くする　→　同じ範囲の影を十数個重ねる
* くっきりさせる　　→　影のぼかす範囲(3つ目のパラメータ)を狭くする(0.4em → 0.1em等)
* ぼやけさせる　　　→　影のXとY座標をバラけさせたりランダムにする
head, tail コマンドを同時に実行

テスト用に 1 から 100 が書かれたファイルを作成します。

```bash:create-output
$ for i in {1..100}; do echo $i >> output.txt; done
```

#### 上から５件取得したい場合

```bash:head
$ head -5 output.txt
1
2
3
4
5
```

#### 下から５件取得したい場合

```bash:tail
$ tail -5 output.txt
96
97
98
99
100
```

#### 上から５件、下から５件を同時に取得したい場合
そのファイルがタイムスタンプを持つ場合、最初と最後の値が同時に取得できるなど、意外と使い道はあるかもしれません。

```bash:head-tail
$ (head -5;tail -5) < output.txt
1
2
3
4
5
96
97
98
99
100
```
ウサギとカメのアルゴリズム

平成26年春期、応用情報技術者試験の午後問3にて、フロイドの循環検出法のアルゴリズムに関する問題が出されました。

問題文に関してはあまりにも長いため、問題は [応用情報技術者試験.com](https://www.ap-siken.com/kakomon/26_haru/pm03.html) で確認お願いします。
問題の中で、循環を追う手順をウサギとカメの歩みに例えています。

Python で実装してみたので、ここにメモしておきます。時間に余裕ができたら解説を追記したいです。

# Python による実装

Python のテストフレームワークには標準にある unittest を使いました。
問題では (s, t) の**タプル (Pair)**を返すように誘導していますが、一つの関数で循環節の長さを計算したかったのでこちらでは若干変えています。

```python: 
import unittest


def cycle_finding(n):
    m, p = 1, 1  # m.. カメの計算の余り  p.. ウサギの計算の余り
    s, t = 0, 0  # s.. 循環節の先頭小数桁位置  t.. 循環節の末尾小数桁位置

    # 余りが一致するまで
    while True:
        m = (m * 10) % n                # カメが1歩進む
        p = (((p * 10) % n) * 10) % n   # ウサギが2歩進む
        if m == p:
            break

    if p != 0:
        # 循環節の先頭の検知
        p = 1
        s = 1
        while m != p:
            s += 1
            m = (m * 10) % n
            p = (p * 10) % n
        # 循環節の末尾の検知
        p = (p * 10) % n
        t = s
        while m != p:
            t += 1
            p = (p * 10) % n

    if s == 0 and t == 0:
        return 0
    else:
        return t - s + 1


class TestCycleFinding(unittest.TestCase):
    def test_1st_decimal_place(self):
        # n = 3     1 / 3 = 0.33333... -> 0.(3)
        self.assertEqual(cycle_finding(3), 1)

    def test_2nd_decimal_place(self):
        # n = 6     1 / 6 = 0.16666... -> 0.1(6)
        self.assertEqual(cycle_finding(6), 1)

    def test_max_digits(self):
        # n = 7     1 / 7 = 0.14285714285714... -> 0.(142857)
        self.assertEqual(cycle_finding(7), 6)

    def test_two_digit_number(self):
        # n = 56    1 / 56 = 0.01785714285714285... -> 0.017(857142)
        self.assertEqual(cycle_finding(56), 6)


if __name__ == '__main__':
    unittest.main()
```

# 解答の続き

> 与えられた n に基づき，O記法で表した場合，関数 junkan のプログラムが必要とする記憶域の大きさは`　オ　`となり，計算量は`　カ　`となる。

上で書いた Python のコードでは junkan ではなく cycle_finding という関数名に変更しています。
サイト元に解説がついていなかったので驚きつつも自分の解答として、

**記憶域の大きさは m, p, s, t の4つの変数しか扱っていないのでΟ(1)**

時間計算量は

> このように，循環小数となる全ての n において，ウサギは循環部分の何巡目かで周回遅れのカメに必ず追い付き，両者の余りは一致する。

...

>両者の余りが一致したら，図4に示すように，カメは引き続き，ウサギは最初に戻って今度は両者とも1歩ずつ進む。最初に両者の余りが一致したところ(〈9〉と《9》)の次の割り算の商が，循環節の先頭である。

...

> 循環節の先頭を検出した後，図5に示すように，ウサギだけが再びカメと余りが一致するところ(〈9〉と《15》)まで1歩ずつ進むことによって，循環節の末尾を検出する。

**上記 3 ループが高々 Ο(n) であることから Ο(n) とわかります。**

解説があっているか責任は持てません。今度過去問題集買ってきます。

# さいごに

最初、C++ で書いていたのですが、今後 Python で書いたほうがよさそうと考えたので Python で書き直しました。
Route53 & CloudFront & +α を使った wwwドメインから、wwwなしドメインへリダイレクトする構成図(ssl対応)

## はじめに
本記事の主な目的は、ssl対応したwwwドメインからwwwなしドメインへリダイレクトするための全体的な構成イメージを提供することです。
ざっと探してみて文章しかなく、全体的な図がないのでイメージしにくかったので作りました。
Frontendのファイル群をS3に配置し、そこに対してルーティングする設定です。
[こちら](https://qiita.com/teco_naka/items/5fb6ba0c14b141d9020c)の図作成、という感じです。

### 書くこと

* 全体図
* 個人的にハマったところ一言メモ

### 書かないこと

* 各種な設定
    * SSL証明書発行手順とか
    * DNSホスト設定、ドメイン設定とか


## 構成

### 構成イメージ全体図
構成イメージは以下です。

[![](http://www.plantuml.com/plantuml/svg/d4xBIWD14BpdApOVa0mOl7WohWyyA68GpvsPsasJsPwbfySbV-_4W1VPYwUYg4VLRJPIAqDSB0Cw5ZJRpzrRvSt1RCmtpYbDwvxjKFObGtqIWzZQfy7Hb2FjynbNN8MywfAknaXoBdG3POEwmDaMInOVI_XjTnNRD0n9rcEbV_LNs9JqoD9l9RINqNj4_eAUt7igXklDVw9jJ2KyQXARIUyiAVLmkyrTyKVCsUhviHZSGtirutY2G2cwZmpDSsFmHTbEpm5Y5NyE3sDa4W_NGeqxzcHu8Q4UUgbPH7JMM6gK-uCrWHNUlXkddfQ4WY1-tq-nU7f1hqlNYFeANID2z5M26FGE7Y9eTo4g8YAA_dG8ouEe6UJ5qEh3JFdiMpJZlhUp96G7TPdrz-StCrlQhWWnrWfeJhCobyDFjLe5rGHr1UO8J0rq7KmNL0lq0-Xdq7tGhxaP3xUE2CR-ZHAJ1eC2brAQE2wF6eFXzUdmhfTqQidP0K5Nq7A-ibcEv2-PKUFfgtChTqKwv627VgqjiZGNvx514IqWiI-3QOFkWXaGYMgD0slGnyb50rI7nvtSzBzFNb2QIq61ZfoOhO8-_tpx0FK8wXwBrXDYiwK8udc6SPEP6bGFJ1FC_ZXKcxfc3f5Wpq_kSDFpeyhKt9Rhtxdzp9FnqjiD-dzKAI8bc4lGrcGhUQ_RCDdAo31Sb6vImfwokckpS2Uv48RIsnLtOn6slSBoCxVbPKxXCVXL-avvCehLhL8H7zbQEGfbPbgG32bYqIcmSnzYBvUm4_W0Vm00)](http://www.plantuml.com/plantuml/uml/d4xBIWD14BpdApOVa0mOl7WohWyyA68GpvsPsasJsPwbfySbV-_4W1VPYwUYg4VLRJPIAqDSB0Cw5ZJRpzrRvSt1RCmtpYbDwvxjKFObGtqIWzZQfy7Hb2FjynbNN8MywfAknaXoBdG3POEwmDaMInOVI_XjTnNRD0n9rcEbV_LNs9JqoD9l9RINqNj4_eAUt7igXklDVw9jJ2KyQXARIUyiAVLmkyrTyKVCsUhviHZSGtirutY2G2cwZmpDSsFmHTbEpm5Y5NyE3sDa4W_NGeqxzcHu8Q4UUgbPH7JMM6gK-uCrWHNUlXkddfQ4WY1-tq-nU7f1hqlNYFeANID2z5M26FGE7Y9eTo4g8YAA_dG8ouEe6UJ5qEh3JFdiMpJZlhUp96G7TPdrz-StCrlQhWWnrWfeJhCobyDFjLe5rGHr1UO8J0rq7KmNL0lq0-Xdq7tGhxaP3xUE2CR-ZHAJ1eC2brAQE2wF6eFXzUdmhfTqQidP0K5Nq7A-ibcEv2-PKUFfgtChTqKwv627VgqjiZGNvx514IqWiI-3QOFkWXaGYMgD0slGnyb50rI7nvtSzBzFNb2QIq61ZfoOhO8-_tpx0FK8wXwBrXDYiwK8udc6SPEP6bGFJ1FC_ZXKcxfc3f5Wpq_kSDFpeyhKt9Rhtxdzp9FnqjiD-dzKAI8bc4lGrcGhUQ_RCDdAo31Sb6vImfwokckpS2Uv48RIsnLtOn6slSBoCxVbPKxXCVXL-avvCehLhL8H7zbQEGfbPbgG32bYqIcmSnzYBvUm4_W0Vm00)

以下図の簡易説明など。

* 図上部「wwwドメイン設定」内が、wwwドメイン用の設定
* 図下部「wwwなしドメイン設定」内が、wwwなしドメイン用の設定
* AWSアカウントは同一のものを想定
* ユーザがwwwドメインにアクセスすると、「wwwドメイン設定」内のS3バケットにルーティング -> wwwなしドメインにリダイレクトする設定

### 個人的ポイント

* ssl対応(http->httpsリダイレクト)するために、以下2つのCloudFrontが必要
    * wwwドメイン用のCloudFront(`http://www.~` から`https://www.~`へのリダイレクト)
    * wwwなしドメイン用のCloudFront(`http://~` から `https://~`へのリダイレクト)
* wwwなしにリダイレクトする場合、S3のバケット名は特に何でもよい
    * [こちら](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html)には「バケット名は、ドメインと一致する必要があります」とありますが、CloudFrontを使うので特に気にする必要はない


### 使用ツール & 参考 
* https://github.com/awslabs/aws-icons-for-plantuml
* https://qiita.com/ryskiwt/items/06c1322ebae8af376f7a#_reference-4d1bc8ba718333c07d0e
* https://qiita.com/teco_naka/items/5fb6ba0c14b141d9020c
* https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html
Mac環境でgodocをインストールできなかった時にしたこと

以下コマンドでgodocをインストールしようとしたら

```go
go get golang.org/x/tools/cmd/godoc
```

`operation not permitted`が表示され、インストールできない。。。

[stackoverflowに似た現象](https://stackoverflow.com/questions/48617574/go-install-command-results-in-open-bin-palindrome-operation-not-permitted-in-m)に遭遇した人が。

以下手順で解決した。

```
brew install go
mkdir Go
cd Go && mkdir bin pkg src
```
VisualEffectGraphをスクリプトから発火させる。



unityのnode baseでEffectの作成が行えるVisualEffectGraphの、スクリプトから制御する方法を書き留めておきます。

**準備**

VisualEffectGraphをスクリプトから呼び出すために、
①<font color="Red">using UnityEngine.Experimental.VFX;</font>
を追加、
②<font color="Red">public VisualEffect effect;</font>
で変数を設定します。


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

using UnityEngine.Experimental.VFX;
//VFXを使えるよう定義

public class EffectFire : MonoBehaviour
{
    public VisualEffect effect;
    //VisualEffect変数を設定。
    
    void Start()
    {

    }

    void Update()
    {

    }
}

```
②<font color="Red">Scene上の「Visual Effect」オブジェクトを、自身で作成したスクリプトにアタッチします。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/4c6359da-a3c7-dc08-424a-f48846433218.png)


**Effectを発火させる**
Effectの発火はParticleSystemと同じように、<font color="Red">Play()</font>を使います。
今回は、わかりやすく確認するためにWキーを押したときに発火するようにします。

```
    void Update()
    {
        　void OnTriggerEnter(Collider other)
          {
            effect.Play();
          }  
    }
```

これでEffectを発火させることができます。
スクリプトから発火させる場合には、Play()だけでは事足りない場面が多いことがあります。

例えば、Effectは衝突判定がされた場合に呼び出すことが多いです。その際は、<font color="Red">EventTrigger()</font>を使います。
VisualEffectGraphでEventTriggerを使うためには、Node上でEvent Node/Nameを設定します(Event Nameを今回は初期のままの「OnPlay」としておきます。)そして、Event Nameスクリプト上でEvent Nameを任意のタイミングで呼び出してあげる必要があります。

まずは、VisualEffectGraphのNodeの設定をします。
Nodeを開いて
①EnterKeyでNode Boxを開き、<font color="Red">Event Nodeを追加。</font>
②<font color="Red">任意のEvent Nameを設定。</font>
③Event Nodeの「SpawnEvent」と <font color="Red">Spawn Nodeの「Start」</font>につなげます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/bf0fe172-2126-5369-c23e-482989f5e4ec.png)

先ほどのスクリプトのUpdate関数に、<font color="Red">SendEvent("OnPlay(Eventの名前は任意)")()</font>を追加します。

```
　　void Update()
    {
        void OnTriggerEnter(Collider other)
        {
            effect.Play();
        }  
    }
```

これで衝突判定を行った際にEffectが発火するようになりました。

(また、これらの発火をわかりやすくするために、Spawn Node の「Constant Spawn Rate」を取り除き、「Single Burst」を追加し、「Count(Min:0)」を「5」に設定します。これでEventが呼ばれた瞬間のみEffectが発火します。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558933/e7e6c9cb-3915-ac8e-d271-574b85644515.png)


**まとめ**

これでVisualEffectGraphのスクリプトから簡単に発火させることができました。
ほかにもスクリプトからいじれるものは多いので便利なものを試し次第まとめていこうと思います。
【備忘録】Ruby : 基本的な継承クラスの使い方

```ruby:sample.rb

class Greeting
	def hello
		puts "こんにちは #{@name}さん"
	end

	def goodmorning
		puts "おはよう #{@name}さん"
	end

	def goodevening
		puts "こんばんわ #{@name}さん"
	end
end

class Tanaka < Greeting
	# Greeting を継承
	def initialize(name)
		@name = name
	end

	def goodbye
		# Tanaka クラスのオブジェクトで使用可能な goobye メソッド
		puts "#{@name}さん さよなら"
	end
end

class Sato < Greeting
	# Greeting を継承
	def initialize(name)
		@name = name
	end
end


tanaka = Tanaka.new("Tanaka")
tanaka.hello #=>こんにちは Tanakaさん
tanaka.goodmorning #=>おはよう Tanakaさん
tanaka.goodevening #=>こんばんわ Tanakaさん
tanaka.goodbye #=>Tanakaさん さよなら

sato = Sato.new("Sato")
sato.hello #=><こんにちは Satoさん
sato.goodmorning #=>おはよう Satoさん
sato.goodevening #=>こんばんわ Satoさん
#sato.goodbye => エラー

# Userオブジェクトなので継承したGreetingクラスのhelloメソッドを使用可能
#継承の使い方は複数あるクラスの共通処理をまとめて置いたりする。
# => つまり継承元にメソッドを定義しておくことによって複数のクラスオブジェクトで使うことが
#可能となる。


```
「小説家になろう」バックアップファイルをTeX変換する

#「小説家になろう」について
[小説家になろう](http://syosetu.com)は、近年、ファンタジー系のWeb小説個人投稿サイトでは（たぶん）最大手のWebサイトです。
書いた小説は、作者自身ならバックアップ用ファイルをtext形式でダウンロードできます。
このファイルはプレーンテキストであり、htmlやjson等の構造化テキストではありません。

#TeXにしてみよう
元々WebサイトをHTML化してもつまらないのでTeXファイルに変換することにしました。
出力はレイアウト最低限の措置のみとし、一般に印刷不要の内容は削っています。また、正規表現の置換なので、偶然にキーワードと一致する記述が作品中にあれば誤変換します。
なお、Perlは普段、ほとんど使わないのでshellに混ぜて使用という邪道です。（Perlやsedの熟練した人には効率の悪いスクリプトですが。）

とりあえずMacOS Catalina + ptex2pdfで変換できました。BSD sedはGNU sedを使えばもっと楽なコードになるかと思います。（「小説家になろう」ユーザーとしては、GNU sed版は呪文感があるなどと余計なことを思いますが。閑話休題。）
「小説家になろう」のTeX化にどれほど需要があるかわかりませんが、一つのテストケースとして。

##bash+Perl版
```bash
#!/bin/bash
LANG=C
FILE=Desktop/result.tex
cat << 'EOF' > $FILE
\documentclass[uplatex,a4paper,12pt]{jsbook}
\usepackage[utf8]{inputenc}
\usepackage[driver=dvipdfm,truedimen]{geometry}
\geometry{left=25truemm,right=25truemm,top=25truemm,bottom=25truemm}
{\catcode`\^^M=\active
 \gdef\xobeylines{\catcode`\^^M\active \def^^M{\par\leavevmode}
 \setlength\parindent{0pt}
}
\global\def^^M{\par\leavevmode}}
EOF
perl -0pe 's/\n【免責事項】.*/\\end{document}/s' $1 |
perl -0pe 's/【本文】\n|----.*\n//mg' |
perl -0pe 's/【サブタイトル】\n(.*)\n/\\section{$1}/mg' |
perl -0pe 's/【第.章】\n(.*)\n/\\chapter{$1}/mg' |
perl -0pe 's/【タイトル】\n(.*)\n/\\title{$1}/m' |
perl -0pe 's/【作者名】\n(.*)\n/\\author{$1}/m' |
perl -0pe 's/【最終掲載日時】\n(.*)\n/\\date{$1}/m' |
perl -0pe 's/【.*?\\/\\/sg' |
perl -0pe 's/(\\chapter)+?/\\begin{document}\n\\maketitle\n\\xobeylines\n\\chapter/' >> $FILE
```

##sed版（BSD sed）
sed版はヒアドキュメントの中でエスケープ（「\`」「\\\」など）が幾つかあるので留意。

```bash
#!/bin/bash
LANG=C
FILE=Desktop/result.tex
cat << EOF > $FILE
\documentclass[uplatex,a4paper,12pt]{jsbook}
\usepackage[utf8]{inputenc}
\usepackage[driver=dvipdfm,truedimen]{geometry}
\geometry{left=25truemm,right=25truemm,top=25truemm,bottom=25truemm}
{\catcode\`\^^M=\active
\gdef\xobeylines{\catcode\`\^^M\active \def^^M{\par\leavevmode}
\setlength\parindent{0pt}
}
\global\def^^M{\par\leavevmode}}
\title{`w='【タイトル】';grep -A 1 $w $1|grep -v $w`}
\author{`w='【作者名】';grep -A 1 $w $1|grep -v $w`}
\date{`w='【最終掲載日時】';grep -A 1 $w $1|grep -v $w`}
\begin{document}
\maketitle
\xobeylines
`sed -n '/----/,$p' $1|sed -n '/【免責事項】/q;p'|sed '$d'|sed -e ':a' -e 'N' -e '$!ba' -e 's/【サブタイトル】\n/\\\section{/g'|sed -e ':a' -e 'N' -e '$!ba' -e 's/【第.章】\n/\\\chapter{/g'|sed -e '/【本文】/d' -e '/----/d' -e 's/section{.*/&}/g' -e 's/chapter{.*/&}/g'|sed -e ':a' -e 'N' -e '$!ba' -e 's/}\n/}/g'`
\end{document}
EOF
```
なお、ptex2pdfをインストール済みの場合、いずれもシェルスクリプトの最後に下記を付け足せばPDF生成まで自動で進められます。

```bash
ptex2pdf -u -l -i -output-directory 'Desktop/' $FILE
```

##参考ページ
 [TeXでつくる可能な限りWYSIWYGな文書](https://qiita.com/isari/items/26f94a9ec89803b992a6)
[sedで改行を置換・削除する | 俺的備忘録 〜なんかいろいろ〜](https://orebibou.com/2016/07/sedで改行を置換・削除する/)
ファイルの作成

```py:
f = open('test.text', 'w')
f.write('test test test\n')
print('This', 'is', 'test', sep='#', end='!', file=f)
f.close()
```

```:実行結果
test.textとういうファイルが作成されて、
中身は、

test test test
This#is#test!

となる。
```
iPhoneで撮影した画像の形式HEICを全部まとめてJPEGに変換する

## 概要

僕は普段ブログ用の画像をiPhoneで撮影して、airdropでMacBook Proに転送しているんですが、得られる画像が `IMG_%04d.HEIC` というあまり馴染みのない画像形式 `HEIC` になっています。 (→追記1

画像・動画の変換には普段 `ffmpeg` を使うんですが、僕が `brew` でインストールした `ffmpeg` は `HEIC` 形式に対応しておらず、変換ができず。

諦めてプレビューで開いて `ファイル > 書き出す` を使って `jpeg` 形式に変換していたのですが、流石に今後もずっとやる作業 && 量が多いと本当に時間がもったいないので機械的に処理したいと思い、したのスクリプトを作りました

## 作ったスクリプト

できることは、「同じディレクトリにある `.HEIC` で終わるファイルを全て同名の `.jpg` に変換し保存する」ことです。

```zsh
#!/bin/zsh

for file in `ls *.HEIC`; do
  filename=$file:t:r
  sips --setProperty format jpeg $file --out ${filename}.jpg
done
```

`convert.zsh` とかにして `chmod u+x convert.zsh` で実行権限を与えた後 `./convert.zsh` とかで使います。

`:t` とか `:r` とかはおそらく `zsh` にはあるが `bash` `sh` にはないと思うので（たぶん）、これは `zsh` でしか動きません。

僕が使っているMacBook Pro 16"は元々Catalinaで `zsh` が標準だったので、便利に使わせてもらいました。

参考1. [画像ファイルの形式をHEICからJPGにしたい](https://qiita.com/teruru/items/1cce463f3c2d3bbb65f8)
参考2. [Zsh: Get Filename or Extension from Path](https://zaiste.net/zsh_get_filename_extension_path/)

## 追記1

@ktysne さんからのコメントで(ありがとうございます)、「iOSの[設定]>[カメラ]>[フォーマット]から[互換性優先]」を設定するとそもそも `JPEG/H264` で保存できることがわかりました。設定調べる前にスクリプト書いてしまった..

![IMG_2274.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252348/71c09758-ca32-3791-7891-5690b65cd9c4.jpeg)

4K/60fpsとか1080p/240fpsを使うには高効率にしないといけないようなので注意が必要そう。iPhoneで4K/60fpsで動画撮影もしている人は今回書いてしまったスクリプトが便利かも。笑
LIFEBOOK SH76/DNをHDD→SSDに換えてみた(※追記あり)

# はじめに
先日Windows10に移行できたSH76/DNは2011年モデルなのでもう８年半前のものだけど、せっかく使い続けられるし、何よりもったいないおばけが怖いので使い続けてあげようかと。でもさすがに重い、電源入れてからログインして使えるようにまでに２～３分かかるのは勘弁なので、かねてから１度やってみたかったSSDへの換装をやることにした。

でも、そんな記事は腐るほどあるので、ネットを参考にしつつもハマってしまった点を取り上げようと思う。

# 材料
・SSD(480GB)・・・PCdepoで6,500円で売ってた
・昔買ったUSB接続2.5inch用(S-ATA)のケース・・・かなり前に買ったものだがS-ATAだからOKだった。今買っても2,000円ぐらいかな。

# ハマった
### パーティーションがいっぱいあって焦る
見た目にはCとDの２ドライブなのだが、市販品なので？回復パーティーションとか見えない領域が２つあり、全部で４つもパーティーションがある。できればそのまま移行したいのだが、元のHDDが500GBで、SSDが480GBとちょっと少ないのでうまく入るのか？なんか設定変えないと動かないんじゃ？とかハナから疑心暗鬼で始めてしまった。

### 導入するソフトを間違えた
イーサス社の製品は昔からディスクのパーティーションを調整するのでよく使っていたから、今回もEaseUS Partition Masterを使えばいいだろうと、最新の13.8をインストールし、クローンを選んでいざ実行！

・・・とやったら、Trial版では出来ないことが判明。

結局、同じイーサス社の「EaseUS Todo Backup」を入れ直してクローンすることに。こちらは問題なく実施できました。

※2020/02/16追記
EaseUS Partition Masterにクローン機能はありますが、Trial版ではプレビューまでになっています。ちゃんと説明を読もう＞自分

### USB接続のまま動作確認しようとした
Todoで３時間ほどかけてクローンが終わったので、そのままUSB接続のままPCを再起動し、ブートデバイスでUSBを選んで起動をかけたところ、途中でなんか致命的なエラーだと言われて再起動に失敗。何度か試すもうまくいかなかったので、「まさか失敗してる？」と余計な疑いを持ってしまったことが後に響いてしまった。

### コマンドプロンプトでなんかやってしまった
HDDから起動した後、ネットで調べていたら、なにやらコマンドプロンプトでうんにゃらかんにゃらやるといいと見たのでよくわからずエイやとやってみた(注：diskpartコマンドで不適切なパーティーションをactiveにした)。

再起動してUSBから立ち上げてみると「MBRが壊れてるよん♪」と言われて、やってしまったことを認識。しかたなくクローンからやり直すことになった。

### ブートレコード
昔はMBRしかなかったけど、今はGPTなるものがあるようで。色々調べてみて2TB以上じゃないのでMBRでよいと判断。

# 結局
終わってみれば、余計なことをしてしまった結果、却って手間がかかってしまったのであった。

1. SSDをケースにいれてUSBで繋ぎ、PCが認識することを確認
2. MBRを指定して一旦フォーマットしてみた
3. EaseUS Todo Backup Freeをインストール
4. Todo BackupでHDD→SSDにクローンする。SSD最適化オプションはONにしたが、他は一切いじらない。各パーティーションのサイズもそのまま。
5. クローンが終わったら面倒がらずにHDDをSSDに換装する
6. 電源を入れる
7. 無事起動！

素直にこれでよかったのである。

SSDに入れ替えたおかげで起動が本当に早くなり、パスワード入れる画面が出るのに10秒程度、ログインしてあれやこれやがサービスやアプリが起動し終わるのに１分ちょいぐらい。うーむ、おそるべしSSD。

---
(追記)
ということで今回利用させていただいた製品はこちら。

■ ディスクのパーティション管理なら：EaseUS Partition Master Free
https://jp.easeus.com/partition-manager-software/free.html

■ HDD→SSDへのクローンなら：EaseUS Todo Backup Free
https://jp.easeus.com/backup-software/free.html

---
AWS Organizationsで組織内のアカウントを簡単に消したかった

# TL;DR
- AWS Organizationsで組織に属しているアカウントは、アカウントにログインして（AssumeRoleではダメ）からアカウントの解約を実行すれば可能。組織から離す必要はない。
- AWS Organizationsで作成したアカウントを組織から外すときは、大量の追加情報が必要。
- ~~組織に属したままアカウントを解約しようとすると「アクセス権限が必要です」というエラーが出る。~~ルートアカウントでログインした後、「アカウント解約」を実行するとアカウントを消すことができた。
- 組織内のアカウントが悪さした時には、アカウントを消すのではなく権限を全て奪うことで対処する方法もある

# はじめに
みなさんAWS使ってますか？

僕は記事作成時点で1週間ほど業務で使っています。会社で「AWS Organizationsで複数アカウント管理したいから、調査よろしくね」とお願いされまして、あれこれ毎日奮闘しています。ちなみに僕は、AWSにめっちゃ興味ありまくりのAWS実務未経験者です。

色々調査している中で、**組織で管理しているアカウントがもし誰かに乗っ取られたら、そのアカウント速攻で抹消したい**という要望が湧いてきまして、じゃあそれ具体的にどうやるんだろう、ということで実際にアカウント消す方法を色々試してみることにしました。

# AWS Organizations管理下のアカウントを消す方法
まずOrganizations管理下のアカウントを消すために、まず所属している組織からアカウントを切り離す方法を試しました。

[公式の資料](https://aws.amazon.com/jp/premiumsupport/knowledge-center/remove-account-from-consolidated-billing/)を読むとわかるのですが、消したいアカウントがもしAWS Organizationsで作成されたアカウントだった場合、アカウントを組織から離す際に、電話番号やクレジットカードなどのパーソナリティ度の高い追加情報を入力しないといけません。

組織からアカウントを切り離した後、アカウント情報のページから「アカウント解約」を選択することでアカウントを消すことができます。（アカウントを解約してもすぐに消えるわけではなく、90日間はアカウントにアクセスできます。詳しくは[こちら](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/close-account.html)を参照）

この方法なのですが追加情報の入力が地味に面倒臭いですし、**何より消したいアカウントにクレジット情報みたいなクリティカルな情報を入力したくありません**。なんとか別の方法でアカウント消せないかな〜と足掻いてみました。

# 組織内のアカウントを直接解約してみた
組織から離さなくても、直接アカウント解約できたら良いのでは？ということで早速実践。
AssumeRoleで目的のアカウントにアクセスし解約したいアカウントのアカウントページで「アカウント解約」を押すと

<img width="1415" alt="スクリーンショット 2020-02-13 20.21.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73712/1f03ed2e-e0e6-7b80-0b16-b35c4aada462.png">


「アクセス権限が必要です」と怒られて解約に失敗しました。じゃあ権限付与したら良いんだよね、ということで請求情報のフルアクセス権限用SCP作成して適応。作ったSCPは以下です。


```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "aws-portal:*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

もう一度チャレンジすると...

<img width="1415" alt="スクリーンショット 2020-02-13 20.21.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73712/261d0ab9-b311-26b3-759a-48df7656af26.png">


ダメかぁ。やはり組織から離してからアカウントを解約する以外にアカウントを消す方法はなさそう。

しかしここでミスが発覚。AssumeRoleで消したいアカウントに入って「アカウント解約」を実行していたのがダメだったんじゃないの？。というわけで、きちんとアカウントにルートでログインして試してみると、無事アカウントが解約できました。
![part3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73712/fd450be1-9951-5ecb-cba9-1ddd15ebd505.png)

アカウントのステータスが「停止」なっているのがわかるかと思います。

# そもそもアカウントを消す必要はあるのか？
悪さをしている組織内アカウントがあったらサクッと消したいという要望は叶いました。

しかしアカウントが消さなくても、それ以上余計な操作ができないように権限を全て奪ってしまえば良いのではないか？と考えました。**いざアカウントが不正利用された場合は、SCPで可能な限りの権限を剥奪するプラン**もありかなと考えております。

# さいごに
今回はAWS Organizations管理下のアカウントをなるべく簡単に消す方法を試してみました。

アカウントを消す方法は「消したいアカウントのルートアカウントでログインしてからを解約」です。もし組織内のアカウントが不正利用などされた場合は、アカウントを解約するかもしくは即座にアクセス権限を奪うような対処をしようと思います。

もっと良い方法があるよ〜といった知見をお持ちの方は是非ご一報いただければと存じます。ここまで記事を読んでいただきありがとうございました。
Windows使いがMacを使ってみました

今までWindows、Ubuntuのデスクトップを使ってきましたが、サブ機としてMacBook Airを購入しました。
所感やひとまずやることを備忘録として記載します。

# 購入したブツ

MacBook Air（MacOS X）13インチ　US配列キーボード　シルバー

とりあえずラップトップがほしかったのですが、中古のWindowsマシンにUbuntuを入れるかMacにするかずっと迷ってました。
最終的に、以下のような理由でMacにしました。

- 中古でWindows 10を買ってUbuntu入れてもなんか損した気持ちになりそうだったから。
- Macは触ったことがあっても所有したことがなかったから。
- Unixライクな使い方ができたほうが便利だろうなと思ったから。

Proを選ばなかったのは、そこまで使わないかなと思ったのと予算の都合です。
周りはスペースグレーを選ぶ人が多いみたいなんですが、シルバーの「Mac感」がいいなと思いました。

## どうしてUS配列のキーボードにしたのか

いくつか理由があります。

- 普段仕事では東プレのUS配列を使っているのでなれているから。
- キー配置がWindowsに近いように思ったからストレスも少ないかなと思ったから。（Controlキーの配置とか）

# とりあえず設定を変更します

- 共有フォルダに.DS_Storeを作らないようにする
    - [Macからアクセスしても共有フォルダに「.DS_Store」を作らなくする方法](https://quartet-communications.com/info/topics/12074)
- ファンクションキーの役割を変える。
    - [Mac でファンクションキーを使う方法](https://support.apple.com/ja-jp/HT204436)
- 不可視ファイル・フォルダを表示できるようにする。
    - [【Mac】隠しファイル・隠しフォルダを表示する方法](https://qiita.com/TsukasaHasegawa/items/fa8e783a556dc1a08f51)
- `brew install vim`
    - `.zshrc`に`export LC_ALL=en_US.UTF-8`を追加。
- `.zshrc`に`alias ll='ls -la'`を追加。
- `.vimrc`を[好みの設定](https://github.com/tomgoodsun/centos7_lamp_configs/blob/master/00.%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A.md#%E6%9C%80%E4%BD%8E%E9%99%90%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A8%E8%A8%AD%E5%AE%9A)に変更。
- インターフェースを英語にする。
    - Windowsでも英語にしています。慣れるとこっちのほうが楽だったりします。

# 必要なソフトウェアをインストールします

Windowsで使っていてMacにも入れられるものは入れていきます。あとMacではどんなソフトが使えるのかとかしらべていきました。

- [Homebrew](https://brew.sh/index_ja)
- [FileZilla](https://filezilla-project.org/)
- [Firefox](https://www.mozilla.org/ja/firefox/new/)
- [Google Chrome](https://www.google.com/intl/ja_jp/chrome/)
- [Google日本語入力](https://www.google.co.jp/ime/)
    - もともと入っているIMEがどうも使いにくくて。。。
- [iTerm2](https://iterm2.com/)
    - WindowsではMinTTYを使っていて、背景を透過にしたかったから。
- [MacVim](https://github.com/splhack/macvim-kaoriya)
    - WindowsではGvimを使っていたけど、Mac版ってこれぐらいしかないんですね。。。他にもあるんだろうけど、同じ操作感が良かったからひとまず。
- [SmartGit](https://www.syntevo.com/smartgit/)
- [Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)
- [Vivaldi](https://vivaldi.com/ja/)
- [VLC Media Player](https://www.videolan.org/vlc/index.ja.html)

他にも入れたものはあるんですが、割愛。
Windows使っていると、WinMergeとかWinSCPとか使いたくなるのですが、Macで動かすにはちょっと面倒な設定をしないといけないので、必要になったら考えます。

# 未だに戸惑うこと・困ること

- `Ctrl+Insert`、`Ctrl+Shift+Insert`が染み付いていて、INSERTキーを探してしまう。
- フォルダのコンテキストメニューでテキストファイルが作れない。（なにかいい方法があれば教えて下さい）
    - [Mac > 右クリックでテキストファイル作成](https://qiita.com/sugasaki/items/d52c33ea8ad6b74c052e)
- Windowsのキーを探してしまう。（`Insert`、`Backspace`、`Delete`、`Page Up`、`Page Down`）
- ターミナル上で`Command+C`、`Command+V`が許される。
    - Windows感覚だとキャンセル扱いの感覚だから。。。
- Officeどうすのか問題
    - とりあえずデフォルトではいっているやつかLibreOfficeを使います。

# まとめ

いろいろ違いがありますが、Windowsではいろいろやりにくいこととかできそうです。（Dockerとか）
調べ物もMac前提で書かれている記事が多いので、困ることもありました。相変わらず仕事ではWindowsを使うんでしょうが、
WindowsからMacを買おうとしている人の参考にしていただければいいと思います。
Mac Pro (2019)にM.2 PCI3.0 NVMe SSDを増設した

#Mac Pro 2019にストレージを増設したい

　TimeMachineやデータ置き場としてストレージを増設したいとお考えの方も多いのではないでしょうか。Promise Pegasus J2iは純正品のように美しく、良いのはわかっていても**高い!**。ましてR4iなんて...。

#どのストレージが使えるのか？
- 内蔵SATAポートあり
- 内蔵ドライブベイなし
- M.2スロットなし
- PCI Express x8, x16あきスロットあり

　以上の条件から、PCI Expressボード型SSDの増設にチャレンジすることとしました。ネットの情報を漁ってみても、これに手を出した人は本日時点では見かけませんでした。

#SSDの検討
　PCI Expressボード型のSSDは、一時期市場に多く出回っていた印象ですが、2020年現在ではあまり見かけません。Intel製のOptaneなどは高価なので、検討から外しました。M.2のSATA接続またはPCIe接続のSSDを変換ボードをかませて使用することに挑戦です。

#現在の構成
-AINEX AIF-08(https://www.ainex.jp/products/aif-08/)
-WD Blue SN550 WDS100T2B0C(https://www.westerndigital.com/ja-jp/products/internal-drives/wd-blue-nvme-ssd)
　　　以上。

#取り付け手順など
-AIF-08付属のヒートパッドは厚いものをSSD両面に貼り付けて使用
-MacProの上から2番目のPCIeスロットに挿入。カードエッジのロックは効かないので、ブラケットを止める固定のみ。
-MacProを起動、ログイン。するとあっさり未フォーマットのドライブとして認識されるので、（今回は）APFS、GUIDでフォーマット。
これだけで、あっさり使用することができました。人柱にならなくて済みました。

#おわりに
　RAIDコントローラー内蔵のSSDマウンタやSATA接続のM.2SSDマウンタなども市販されていますが、今回は未検証です。SATA型はSATAケーブルがケース内をはい回るので心情的に避けました。PCIeのM.2もPCI3.0からPCI4.0などへの高速化もあり、3.0対応のものはだいぶ価格が安くなってきています。
　今回はTimeMachine用のドライブとして使っています。TimeMachineにSSD!?という方もいるかもしれませんが、価格的に1TB程度だと落ち着いてきていること、バックアップといえど速いと嬉しいと考えております。2020年2月時点で、上記の構成で¥14,389でした。
　なお、全ての商品が使用できるとは限りませんが、PCIe M.2をPCIeボード型に変換するマウンタは、電子的な部品が少なく、物理的な形状変換程度のものがほとんどなので、多くの場合同じように使用できることが期待できると思います。MacProを買ったはいいけれども周辺機器に回すお金がなくなってきたみなさんにお役に立てれば幸いです。
【備忘録】Ruby : privateメソッドの使い方

```ruby:sample.rb

require 'date'

class User
	attr_accessor :name,:birthday

	def initialize(name,birthday)
		@name = name
		@birthday = birthday
	end

	def display_birthday
		@birthday.strftime("%Y年 %m月 %d日")
	end

	def inner_call_display_birthday
		self.display_birthday
		# self は省略可能。オブジェクト化して外部から呼び出した場合、
		# この self がオブジェクト自体を指す。
		# 下の例でいうと user を指す。
		display_birthday
	end

	def call_private_name
		private_name
		# インスタンスメソッドからならprivateメソッドを呼び出せる。
		# しかし冒頭に self をつけるとエラーになるので注意。selfはオブジェクト自体をさす。
		# selfをつけないメソッドの呼び出しを「関数形式」というらしい。
	end

	private #ここより下に定義されたメソッドは private メソッドになる

	def private_name
		#クラス外部から直接呼び出すことは不可能
		#同じクラスのインスタンスメソッドからなら呼び出して使える。
		@name
	end
end

birthday = Date.new(2000,1,1)
user = User.new("sato",birthday)
puts user.inner_call_display_birthday #=> 2000年01月01日
#puts user.private_name => private_name は private メソッドなので外部から呼び出し不可
puts user.call_private_name #=> sato

## おまけ
# あまり使うことはないがprotectedメソッドも同じように定義し、protectedメソッドでは self
# をつけても大丈夫


```
Math.random()を使って確率操作してみる(おみくじ)

```qiita.js
'use strict';

{
  const btn = document.getElementById('btn');

  btn.addEventListener('click', () => {
    // const results = ['大吉', '中吉', '凶', '大凶'];
    // const results = ['大吉', '中吉', '中吉', '中吉', '凶'];
    // btn.textContent = results[Math.floor(Math.random() * results.length)];
    const n = Math.random();
    if (n < 0.05) {
      btn.textContent = '大吉'; // 確率は5%
    } else if (n < 0.2) {
      btn.textContent = '中吉'; // 確率は15%
    } else {
      btn.textContent = '凶'; // 確率は80%
    }
  });
}
```

if (n < 確率)と記述するし、確率操作が可能になる。
チーム開発GitHubでForkが作成される、margin後のpull originができない

チーム開発スタート
github操作で難航

コミットプッシュ後マスターがマージ

自分のgithubアプリに入ってmasterブランチからfetch originを実行

この後本来pull originが出現するはずが出ない。

原因を探していると、どうもforkというシステムが働いた為だった
githubブラウザーでマスターがマージの権限を付与する事ができる
作業あとはマージした後にmasterでfetch origin後、pull originできた。

ただしこの場合マージは権限を付与されたメンバー全員できるので注意。
x86レジスタ　備忘録

# はじめに

OSの勉強をする際に、レジスタ関係の項目が忘れそうなので備忘録を作成しました。

# 参考文献

[セキュリティコンテストチャレンジブック](https://book.mynavi.jp/ec/products/detail/id=42421)


# x86レジスタ

32bitのレジスタ長を持つ

|レジスタ|名前|備考|
|:---|:---|:---|
|汎用レジスタ|||
|EAX|アキュムレータレジスタ|演算結果を格納|
|ECX|カウンタレジスタ|ループの回数などのカウントを格納|
|EDX|データレジスタ|演算に用いるデータを格納|
|EBX|ベースレジスタ|アドレスの基点を格納|
|ESI|ソースインデックスレジスタ(インデックスレジスタ)|読み込みインデックス|
|EDI|デスティネーションインデックスレジスタ(インデックスレジスタ)|書き込みインデックス|
| |||
|特殊レジスタ|||
|EBP|ベースポインタレジスタ|ベース用ポインタ|
|ESP|スタックポインタレジスタ|スタック用ポインタ|
|EIP|インストラクションポインタレジスタ|次に実行するアセンブリ命令のアドレスを格納|
|フラグレジスタ|||
|EFLAGS|||
| |||
|セグメントレジスタ|||
|CS|||
|DS|||
|SS|||
|ES|||
|FS|||
|GS|||

## 汎用レジスタ

上記であげた汎用レジスタのうちEAX, ECX, EDX, EBXは下位16bitにそれぞれAX,CX,DX,BXレジスタを持つ。さらに、AX,CX,DX,BXレジスタは上位8bitと下位8bitに分割される。

* EAX
    * AX: 下位16bit
        * AH: 上位8bit
        * AL: 下位8bit
* ECX
    * CX: 下位16bit
        * CH: 上位8bit
        * CL: 下位8bit
* EDX
    * DX: 下位16bit
        * DH: 上位8bit
        * DL: 下位8bit
* EBX
    * BX: 下位16bit
        * BH: 上位8bit
        * BL: 下位8bit



## インデックスレジスタ

汎用レジスタに分類されているESIとEDIはまとめてインデックスレジスタとも呼ばれる。インデックスレジスタの下位16bitはそれぞれSI,DIレジスタと呼ばれる。

* ESI
    * SI: 下位16bit
* EDI
    * DI: 下位16bit
エラー " project PROJECT called with incorrect number of arguments"

# CLionでcmakeのbuildエラー

```
project PROJECT called with incorrect number of arguments
```





```CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project()

set(CMAKE_CXX_STANDARD 11)

add_executable(PCAD main.cpp)
```
プロジェクト名を日本語にしていた.するとproject()のカッコ内が空欄になっていた.
このproject()が日本語のディレクトリ名を認識できなかったことが原因
`project()`
->
`project(ディレクトリ名)`


これでOK

# 参考文献
https://qiita.com/janus_wel/items/a673793d448c72cbc95e
https://qiita.com/hasepy/items/22cbaa9e232f5dc891ca
fizzbuzzについて

##fizzbuzzとは
1から100まで数を数える時に、3の倍数なら「fizz」、5の倍数なら「buzz」、ただし15の倍数なら「fizzbuzz」、それ以外はその数を答えるもの。

##例
1
2
Fizz
4
.
.

##これを実現するコード

```
num = 1
while num < 101
  str = ""
  if num % 3 == 0
    str = str + "fizz"
  end

  if num % 5 == 0
    str = str + "buzz"
  end
  if str == ""
    str = str + num.to_s
  end
  puts str
  num += 1
end
```

##終わりに

fizzbuzz・・・rubyの基礎って感じがしますね・・・
もっと勉強します！
innerからの脱獄2

## 画面端まで中身を伸ばす
前回innerより横幅の広い要素を中央揃えにする方法を紹介しました。
今回は幅が決まっていない場合はどうすればいいのかを紹介します。

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

画面幅いっぱいまで広げると
<p class="codepen" data-height="265" data-theme-id="dark" data-default-tab="css,result" data-user="sphenisc" data-slug-hash="WNvrNpe" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="WNvrNpe">
  <span>See the Pen <a href="https://codepen.io/sphenisc/pen/WNvrNpe">
  WNvrNpe</a> by sphenisc (<a href="https://codepen.io/sphenisc">@sphenisc</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
こうなります。
中身の領域を変えずに背景だけ広げたいならその要素に

```
padding: 0 calc(50vw - 50%);
margin: 0 calc(50% - 50vw);
```
をつけます。何をしているかというと
例えばディスプレイの画面幅が1920px　広げたい要素の横幅が980pxだとすると

- margin： 980pxの50%で490px - 1920pxの半分の960px = -470px　左右に470pxのマイナスマージンをとる。つまり横幅が470px×2 だけ広くなる
- padding： 960px - 490px = 470px　左右に470pxの余白ができる
(NormalizeCSSの影響で box-sizing: border-box; が適用されている)

→中身の領域は変えず、背景だけを画面幅いっぱいにすることができるわけです。
中身も含めて画面幅いっぱいにしたい場合は padding: 0 calc(50vw - 50%); を消すだけで修正できます。

## 活用例
タイトルの装飾を左端または右端まで伸ばす
<p class="codepen" data-height="265" data-theme-id="dark" data-default-tab="css,result" data-user="sphenisc" data-slug-hash="OJVMJpG" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="OJVMJpG">
  <span>See the Pen <a href="https://codepen.io/sphenisc/pen/OJVMJpG">
  OJVMJpG</a> by sphenisc (<a href="https://codepen.io/sphenisc">@sphenisc</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>