OmniAICreator/Qiita-1.07M huggingface dataset:
ヘキサそろばん(16進数)の設計図と練習方法

#ヘキサそろばんの設計図
小さいそろばん屋さんに以下の設計図で相談してみてください。
<img width="378" alt="16進数そろばん.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13318/d86f5de7-82b2-f85b-bbc1-32a704adf7ea.png">

自分は雲州そろばん組合さんに作ってもらいました。
https://unsyusoroban.com/

完成品はこんな感じになります
![IMG_0201.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13318/fc3b9557-fb51-ac95-9ea3-47a36dcc402f.jpeg)

※.ワンタッチご破算機能も当初は想定していたのですが、小規模のオーダーメイドでは対応が難しいとのことだったので諦めました。

#ヘキサそろばんの練習方法
このような補数表を用意して、ひたすら入力していきます。
10 - F = 1 , 1 + F = 10 など、交互に指の動きを慣らしていきましょう。
<img width="377" alt="補数表.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13318/9f61a599-5d7c-b11a-20ea-0a08cb7435f9.png">

4の倍数がだんだん気持ち良くなってくると思います。
何も考えずに手だけ動かしていればいいので、手元に置いておいてプログラミングに疲れた時などに触るとよいでしょう。

#そもそも、なぜ16進数で計算するのか
メモリとアセンブラを読む力を養う為です。
C++プログラマは、どこかの段階でアセンブラと向き合う時期が出てきます。
このとき、16進数の値がわりと容赦なく出てきます。
電卓を片手にポチポチ計算していてもいいのですが、これでは効率は期待できません。
ざっくりでいいので16進数のボリューム感を捉えているだけで大分違ってきます。

ヘキサそろばんに慣れておくことで、メモリとアセンブラの読み方を養うことができます。たとえばraxに2Ch加算したアドレスがどこにあるのか、大体のアタリがつくようになるわけです。

<img width="949" alt="メモリとアセンブラ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13318/3cbb1e79-ecd0-01fa-5a47-2cf32769bb6b.png">
dockerでphpmyadminログインエラー：php_network_getaddresses: getaddrinfo failed: Name does not resolve

laracodkで環境構築後、ブラウザでphpmyadminにログインしようとしたらエラーが発生しログイン出来ませんでした。
laradockでの環境構築、mysql接続まで完了した記事は[こちら](https://qiita.com/drafts/b2aad8c63b606cf4004f)。

## エラー内容
mysqli_real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name does not resolve

## 解決方法
https://github.com/laradock/laradock/issues/1214
上記issueから.envとdocker-compose.ymlファイルをダウンロードし、差分を調査。
以下を修正し、無事ログイン出来ました。

```yml:/laradock/docker-compose.yml
phpmyadmin:
      build: ./phpmyadmin
      environment:
        - PMA_ARBITRARY=1
        - MYSQL_USER=${PMA_USER}
        - MYSQL_PASSWORD=${PMA_PASSWORD}
        - MYSQL_ROOT_PASSWORD=${PMA_ROOT_PASSWORD}
      ports:
        - "${PMA_PORT}:80"
      depends_on:
        - "${PMA_DB_ENGINE}"
      # 以下追加（ポート番号の競合が原因ならこれは無くても問題なしかも？？）
      links:
        - mysql:db
      networks:
        - frontend
        - backend
```

```:/laradock/.env
### PHP MY ADMIN Container

# PMA_DB_ENGINE=mariadb
PMA_DB_ENGINE=mysql //こちらはlaradock環境構築時に修正済みなので、今回のエラーには関係なし

～省略～
# PMA_PORT=88
PMA_PORT=8080
```

## 結論
エラー内容からして.envファイルのポート番号が他と競合していたっぽい？？？
progateの15言語を全てクリアしたぞ

##はじめに
progateは弟から教えてもらった。
ホリエモンがラジオでプログラミングの勉強はprogateと言っていたんだとか。
最初はステマかなんかだろうと思った。
だけどいろんなブログで紹介されていたので、やってみることにした。
もしかしたらすごいサービスなのかもしれない。
そう思い、やってみると、登録が驚くくらい簡単で無料でできることにも驚いた。
##progateとは
プログラミング学習サービスです。
無料ではできるコースが限られています。
全部のコースをやるには月額980円かかります。
アプリもあるそうです。
言語は
HTML&CSS
javascript
jQuery
Ruby
Ruby on Rails
PHP
Java
Python
Swift
command
git
SQL
go
saas
react
の15個です。（中にはHTML&CSSやsaasなど、プログラミング言語じゃないものもある）
##実際のprogateのレッスン
結論から言うと、progateはプログラム初心者にとってはとても良いコンテンツだった。
僕の場合、初めて触る言語もあったのだが、すぐに理解できた。
かなりの時間progateに費やしたので、思ったことを軽く書いていく。
##良い点１. 初心者向けのレッスン
今までプログラミングを学ぼうと思ったら、学校の図書館で本を借りるか、まさにこのqiitaのような個人サイトをググる必要がある。
この記事を見ている方もわかると思うが、これは結構難しい。
どれも中級者〜上級者レベルで、僕は途中で挫折してしまったことを数えるときりがない。
だけどこのprogate様はhtmlのレッスンならhtmlとは何かの説明を超基本から教えてくれる。
しかもスライドの中身が洗練されていて、かなり分かりやすい。
##良い点２. プロの書き方がわかる
プログラミングを独学でやろうとするとどうしてもコードの書き方が我流になってしまう。
僕自身、webサイトをコンテストに出したときは中身がぐちゃぐちゃだったし、ゲームをはじめてつくったときは関数を一度も使わなかった。
しかしprogate様はゴールのコードが決まっているので、我流にならずプロのコードのまま勉強ができる。
まじで最初からこれで勉強したかったと思った。

あと、同じ文法をレッスンを進むごとに復習する場面が出てくるので内容が頭に定着しやすい。
例えばrubyだと、eachという文を学ぶレッスンがあり、次のレッスンに進んだとしてもeachを使ったコードを書くことになる。
これも書籍や個人サイトと違った良さを感じた。

##良くない点. エラー処理、ググる力がつきにくい
progateは文法や表示結果に問題があると日本語でエラーメッセージを表示してくれる。
通常の開発ではエラーは英語で、何がバグなのか分かりにくい。
だけどprogateは日本語で丁寧にここが間違ってるよ、と教えてくれる。
これでは実際の開発で発生したエラーの内容を読み取れないだろうね。
それとスライドにほぼ答えが書いてあるからググって文法を調べ直す必要ない。

しかも！最近答えを見る機能がついた。
この機能は、答えがわかる上に、自分のコードと比べることができる。
しかもコピペできる。
ぶっちゃけ内容理解してなくてもレッスンの問題を解くことができる。
初心者向けなのでこういった機能がついているのはいいけど、エンジニアとしてバグの処理という大事な能力がつきにくいという印象。
##最後に
こういった初心者向けの勉強サイトができて、プログラミングのハードルがどんどん下がっているのはとてもいい傾向だと思う。
twitterでprogateと検索するといろんな人がツイートしているし、パソコン教室とかでも使っていいとも思うし。
エンジニアを独学する人が増えて、スタートアップも増えて、いい日本ができる未来が見える気がする。
あとチャットのない友達機能いらないからどうにかして。
![Snip20190515_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367062/65a9b678-0db3-4c54-a446-368990da2ac0.png)
![Snip20190515_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367062/bf4d6737-14f1-d9ef-3069-918cee2782a6.png)
ImageNetで画像を猫か否か識別する

猫か否かを判断する画像認識を作成したい。
画像を集めて作成してもよいが、すでに先人達が開発してくださっているImageNetでできないか試してみた。

やってみたのはVGG16とInception V3

まずはVGG16

VGG16とInception V3のライブラリをインポート

```
from PIL import Image
import numpy as np
from tensorflow.python.keras.preprocessing.image import img_to_array, load_img
from tensorflow.python.keras.applications.vgg16 import VGG16,preprocess_input,decode_predictions
from keras.applications.inception_v3 import InceptionV3
from keras.applications.inception_v3 import preprocess_input
```

モデルを設定。結合層はそのまま使うのでTrue

```
model=VGG16(weights='imagenet', include_top=True)
```

画像を入力用形式へ変換する。

```
img = load_img("calico.jpg",target_size=(224,224))
arr_img=img_to_array(img)
arr_img=preprocess_input(arr_img)
arr_input=np.stack([arr_img])
# (x,224,224,3)の4次元でないとmodelで読み込みできない
```

識別用テスト画像としては以下の三毛猫を使用した。
![calico.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245823/7809fadd-a388-9e3b-16e3-d56595dbf385.jpeg)


画像を識別

```
predict=model.predict(arr_input)

results = decode_predictions(predict,top=5)
results[0]

[('n03788365', 'mosquito_net', 0.096424125),
 ('n04209239', 'shower_curtain', 0.020692192),
 ('n15075141', 'toilet_tissue', 0.018790046),
 ('n03291819', 'envelope', 0.012404914),
 ('n03924679', 'photocopier', 0.010215216)]
​
```
正しく識別できていない。
なのでそのほかのImageNetをやる。
次にInception V3を試してみた。変更点はmodelを変更したことと、データサイズを224*224から299*299に変更したこと

```
model=InceptionV3(weights='imagenet', include_top=True)

img = load_img("calico.jpg",target_size=(299,299))

[('n02124075', 'Egyptian_cat', 0.158072),
 ('n02123045', 'tabby', 0.12637995),
 ('n02797295', 'barrow', 0.10442561),
 ('n02123159', 'tiger_cat', 0.08068305),
 ('n04152593', 'screen', 0.08066112)]
```

比較的猫の回答が出ており、適正な認識をしている。
rubyで列と行の合計を求めるプログラムを作ってみた。

こんにちは。

今日は[こちらの問題](https://qiita.com/jnchito/items/2fedbfa9f887635e6c6a)をやってみました。

列と行のそれぞれの合計を求めるプログラムです。
詳しい仕様はURLをご覧ください。

<b>コード</b>
このようになりました。

```rb
class SumMatrix
  attr_reader :array_num

  def initialize(array_num)
    @array_num = array_num
  end

  def sum #列と行のそれぞれの合計を出し配列に加える
    @array_num.each { |column| column << column.sum }
    @array_num << @array_num.transpose.map(&:sum)
  end

  def output #各配列を連結して出力する
    sum.each { |array|
      puts array.map { |n| n.to_s.rjust(3) }.join('|')
    }
  end
end
```

<b>解説</b>
sumメソッドは合計を出すのが目的だったので各配列にsumメソッドを使いました。
行の合計を出すときはmapを使い合計を配列にし返し、それをそのまま@array_sumに加えました。

outputメソッドは出力が目的です。
eachメソッドで数字の間隔を揃えたり、「|」を各数字は配置し連結させました。
Internet Explorer セキュリティ強化の構成 (IE Enhanced Security Configuration)をコマンドラインで無効にする

# Internet Explorer セキュリティ強化の構成 (IE Enhanced Security Configuration)をコマンドラインで無効にする

新規に Windows Server の VM を作成し、.NET Framework を最新化するためにダウンロードしようと思ったらダウンロードができない、このクソ設定め.

```powershell
$AdminPath = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}"
$UserPath = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}"
$AdminPath, $UserPath | % { Set-ItemProperty -Path $_ -Name "IsInstalled" -Value 0 }
Stop-Process -Name Explorer
```
Dockerのmysqlに文字コードを設定＆コンテナのbashで日本語入力設定

# mysqlに文字コードを設定する
docker-compose upでコンテナ起動し、mysqlログイン、mysql> show variables like 'char%'; で確認するも文字コードがlatin1になっている問題を解決する。
以下の記事を参考に、mysqlの部分にコマンドを渡すよう追記する。
＊参考記事だとバージョン'2'ですが、バージョン'3'でも同じでした。
参考：https://qiita.com/neko-neko/items/de8ea13bbad32140de87

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

### MySQL ################################################
    mysql:
      build:
        context: ./mysql
      # 〜中省略〜
      # 以下追加
      command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

```
**確認結果**
<img width="565" alt="スクリーンショット 2019-05-13 11.56.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364667/b069772f-fc1c-7b89-ed35-d2d89a41778c.png">



# mysqlコンテナのbashで日本語入力ができるよう環境変数を設定する
bashでmysqlコンテナにログイン、日本語入力が出来ない問題を解決する。
DockerFileでlocaleを指定する。
＊Linuxのディストリビュージョンによって記述が異なるので注意。今回はubuntu（debian）の場合。
参考：https://qiita.com/n_oshiumi/items/cfe91c60730f602b38eb

```:mysql/Dockerfile
ARG MYSQL_VERSION=latest
FROM mysql:${MYSQL_VERSION}

LABEL maintainer="Mahmoud Zalt <mahmoud@zalt.me>"

#####################################
# Set Timezone
#####################################

ARG TZ=UTC
ENV TZ ${TZ}
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && chown -R mysql:root /var/lib/mysql/

# 以下追加
RUN apt-get update \
    && apt-get install -y locales \
    && locale-gen ja_JP.UTF-8 \
    && echo "export LANG=ja_JP.UTF-8" >> ~/.bashrc
# ここまで

COPY my.cnf /etc/mysql/conf.d/my.cnf

CMD ["mysqld"]

EXPOSE 3306
```

**確認結果**
<img width="353" alt="スクリーンショット 2019-05-13 11.37.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364667/66daf213-552d-e14a-c03b-759bac8d37fd.png">
Magic Leap MagicScript Landscape Application. UiTimePicker

**Prepare**
Magic Leap One
https://www.magicleap.com/magic-leap-one

mlsdk v.0.20.0
https://creator.magicleap.com/downloads/lumin-sdk/overview

magic-script-cli v2.0.1
https://www.npmjs.com/package/magic-script-cli

magic-script-polyfills v2.1.1
https://www.npmjs.com/package/magic-script-polyfills

**Create Project**

```
magic-script init my-time org.magicscript.time "Time Picker"
cd my-time
```

**Code**
Change app.js

```javascript
import { LandscapeApp, ui } from 'lumin';
const { 
   UiGridLayout
  ,UiText
  ,UiTimePicker
  ,Time
  ,Side
  ,EclipseLabelType
  ,Alignment
  ,HorizontalTextAlignment } = ui;

export class App extends LandscapeApp {
  onAppStart () {
    const prism = this.requestNewPrism([0.5, 0.5, 0.5]);
    const layout = UiGridLayout.Create(prism);
    layout.setAlignment(Alignment.CENTER_CENTER);

    const text = UiText.CreateEclipseLabel(
      prism,
      '',
      EclipseLabelType.kT7
    );
    text.setAlignment(Alignment.CENTER_CENTER);
    text.setTextAlignment(HorizontalTextAlignment.kCenter);
    
    const time = new Time();
    time.setHour(8);
    time.setMinute(8);
    time.setSecond(0);
    
    const tp = 
      UiTimePicker.Create(prism, "Start Time", Side.kTop, "hh:mm:ss", time);
    tp.setColor([1.0, 1.0, 0.0, 1.0]);
    tp.setAlignment(Alignment.CENTER_CENTER);
    tp.onTimeChangedSub(function(uiEventData)
    {
      text.setText(tp.getTimeString());
    });
    layout.addItem(tp, [0.03, 0.03, 0.03, 0.03]);
    layout.addItem(text, [0.03, 0.03, 0.03, 0.03]);
    prism.getRootNode().addChild(layout);
  }
}


```

**Build**

```
magic-script build -i
```

**Run**

```
magic-script run --port=10000
```

**Reference**
UiTimePicker (MagicScript API)
https://docs.magicscript.org/lumin.ui.UiTimePicker.html

magicscript
https://www.magicscript.org/

Thanks!
LaravelのCollectionのtoJsonの日本語の文字化けを食い止める。

#解決方法
内部実装を覗くと引数がjson_encodeのオプションになっているのでそこにPHPの定数、JSON_UNESCAPED_UNICODEを渡すだけ。

```.php
$collection->toJson(JSON_UNESCAPED_UNICODE);
```
終わり。
【UE4】クラスからUPROPERTYの値を取得する方法について

# 概要
UPROPERTY を付与した変数は UE の UProperty クラスとして情報が格納されます。
変数名やその値が格納されております。
先日調べたメモをまとめておきます。

# 取得する方法
UE4 に取得したいクラスのメンバー変数名を渡すことで、
そのUPropertyを取得するメソッドがあるのでそちらを使います。

```C++:Foo.cpp
// 取得したいクラスの StaticClass と、
// そのクラスに宣言したUPROPERTY付きの変数名を引数で渡します.
UProperty* Property = FindField<UProperty>( UMyClass::StaticClass(), TEXT("FieldName"));
```

このようにすることで任意のメンバー変数を取得できます。

また、取得した UProperty クラスは型ごとに継承されたクラスとなってます。
たとえば

```C++:Sample.h

USTRUCT()
struct FStatus
{
:
    UPROPERTY()
    int32 HitPoint;
:
};

UCLASS()
class AHuman : AActor
{
public:
:
    UPROPERTY()
    FStatus* Property;
};
```

というクラスから値を取得するとします。
Humanがもつ Property は struct の変数ですので **UStructProperty** クラスになってます。

キャストしてその型の持つ値を取得できます。

```C++
UStructProperty* StructProperty = Cast<UStructProperty>( Property );

// UStructPropertyが持つstruct情報を取得します.
// 構造体が持つメンバー変数 HitPoint が取得できる想定です.
UField* Field = StructProperty->Struct->Children;
```

# クラスが持つUPROPERTYを全て取得する
最後に応用編です。
**UField**クラスはメンバー変数 **Next** に、**次の UField のポインタ**を持ってます。
これをたどることで全ての値を取得することができます。

```C++:Sample

// 適当な構造体を表します.
USTRUCT()
struct FMyStruct
{
:
    UROPERTY()
    int32 Value1;

    UPROPERTY()
    int32 Value2;
:
};

// 適当なクラスを表します.
UCLASS()
class UMyClass : UObject
{
:
    UPROPERTY()
    FMyStruct* MyStruct;
:
};

// UMyClass に含まれる変数を取得します.
UProperty* Property = FindField<UProperty>(UMyClass::StaticClass(), TEXT("MyStruct"));

// 構造体UPropertyへキャストします.
UStructProperty* StructProperty = Cast<UStructProperty>( Property );

// その構造体が持つメンバー変数を順番に取得します.
UField Field = StructProperty->Struct->Children;

// Field（MyStruct）が持つメンバー変数を取得します.
while ( Field != nullptr )
{
:
:
    // FMyStruct の Value1、Value2 の順にループします.
:
:
    // 次の要素を受け取ります.
    Field = Field->Next;
}
```

# まとめ
ゲーム側の処理ではあまり使わないと思いますが、
デバッグ用の機能で使えると思います:ok_hand:
私はデバッグ機能とドキュメントの作成時に変数名を抽出するために使いました。
[Ruby] コマンドライン引数に JSON 文字列を渡す

# 例

次の Node.js スクリプトを Ruby から実行したい。

```hoge.js
const json = process.argv[2];
console.log(json);

const obj = JSON.parse(json);
console.log(obj);
```

なお Ruby で任意のコマンドを実行する方法は複数あるが、今回は [Open3.capture2](https://docs.ruby-lang.org/ja/latest/method/Open3/m/capture2.html) を使用する。

# 方法

コマンドライン引数に JSON 文字列をそのまま渡すと、Node.js 側で正しくパースできない。

```rb
require 'json'
require 'open3'

json = { name: '鹿目まどか', age: 14 }.to_json
#=> "{\"name\":\"鹿目まどか\",\"age\":14}"

stdout, _status = Open3.capture2("node hoge.js #{json}")
# SyntaxError: Unexpected token a in JSON at position 1

puts(stdout)
# name:鹿目まどか
```

そこで JSON 文字列を [String#shellescape](https://docs.ruby-lang.org/ja/latest/method/String/i/shellescape.html) あるいは [Shellwords.#shellescape](https://docs.ruby-lang.org/ja/latest/method/Shellwords/m/shellescape.html) でエスケープすると、正しく渡すことができる。

```rb
require 'json'
require 'open3'
require 'shellwords'

json = { name: '鹿目まどか', age: 14 }.to_json
#=> "{\"name\":\"鹿目まどか\",\"age\":14}"

json.shellescape
#=> "\\{\\\"name\\\":\\\"\\鹿\\目\\ま\\ど\\か\\\",\\\"age\\\":14\\}"

stdout, _status = Open3.capture2("node hoge.js #{json.shellescape}")

puts(stdout)
# {"name":"鹿目まどか","age":14}
# { name: '鹿目まどか', age: 14 }
```
オブジェクト思考




```:ruby
class Person
   def name 
     "私は、ピーターだよ"
   end 

　　def brain
      "計算する"
   end
　
   def tall
      170
   end
   def weight
       "60kg"
   end
   def walk
      "トコトコ"
   end

end

person = Person.new
person.name
person.brain
person.tall
person.weight
person.walk
```


```:javascript

class Person{
 constructor(name,age,tall){
  this.name = name
  this.age = age
  this.tall = tall

 }

 evaluation(){
   var score = this.age * this.tall
   if (score >= 80){
    console.log("cool") 
   }else{
     console.log("not so cool")
   } 
 }
}

bob = new Person("bob",23,170)

console.log(bob.name) # bob

console.log(bob.evaluation) # cool 



```
Alibaba Cloudでのセキュリティグループ変更手順

## セキュリティグループの変更
Alibaba Cloudでインスタンスは作成したけど、セキュリティグループも設定したい方向けにセキュリティグループ変更手順を記します。

##### 1. サービスの選択
ログイン後のコンソールで[「Elastic Compute Service」](https://jp.alibabacloud.com/product/ecs)（以下ECS）をクリックします 
![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/616cd6b7-d527-cfe1-1d97-5f138d5c4ded.jpeg)
ECSダッシュボード画面で「セキュリティグループ」をクリックします
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/99408673-0a03-c2ad-95b8-85a895accef5.jpeg)

##### 2. 対象セキュリティグループの選択
変更したいセキュリティグループの「ルール設定」をクリックします
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/faa5579a-7fd2-d331-13f6-f85a54f297b8.jpeg)
当該セキュリティグループで現在有効なルールの一覧が表示されます
デフォルトでは、RDP(3389), ICMP, SSH(22)のプロトコルが0.0.0.0/0、つまり全ての場所からの接続を許可する設定になっています
![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/c09f9cf0-04c9-ef68-f622-0369e5f1e402.jpeg)

##### 3. セキュリティグループのルール変更
「ルールのクイック作成」をクリックして、以下のルールを作成します
A. 0.0.0.0/0からのRDP及びSSH接続を拒否
B. 自宅のグローバルIPアドレスからののRDP及びSSH接続を許可
![WS000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/d4fed5b5-9db6-0e9a-26e1-c930b3afbdda.jpeg)

A.のルールが追記できました。次にB.のルールを作成します
![WS000008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/7b6f448e-1da5-b252-5fd2-68b6f7672141.jpeg)
![WS000009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/bc70bf2d-5006-8e68-3224-5677317ba42b.jpeg)
B.のルールも作成できました。これでインターネットからのSSH接続を拒否しつつ、自宅から接続は可能な状態になりました。
![WS000010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/78beb0cf-6797-5e51-a9ab-00f582a5ace9.jpeg)

##### 4. 補足
AWSとは違い、セキュリティグループ内でルールのプライオリティ値を設定でき、小さい方から順に有効となります。
AWSのセキュリティグループルールは設計するのに独自の知識が必要ですが、Alibaba Cloudの場合は、既存のロードバランサーの知識が流用できそうですね。
rake で 引数の与え方

引数を与えるサンプルを作成してみました。

次のような実行結果になります。

```text
$ rake hello['鈴木','一朗']
*** start ***
Hello Rake!!
Hello, 鈴木 一朗
Firstname, 鈴木
Lastname, 一朗
Hello, 鈴木 一朗
*** こんにちは ***
*** end ***
```

```text
$ rake update[t3324,900009]
*** 開始 ***
t3324
900009
*** 終了 ***
```

```text:Rakefile
# task :default => :hello
task default: :hello

desc "hello"
task :hello, 'firstname', 'lastname'
task :hello do |task,args|
	puts "*** start ***"
	puts "Hello Rake!!"
	puts "Hello, #{args['firstname']} #{args['lastname']}"
	puts "Firstname, #{args['firstname']}"
	puts "Lastname, #{args['lastname']}"
	puts "Hello, #{args['firstname']} #{args['lastname']}"
	puts "*** こんにちは ***"
	puts "*** end ***"
end
#
# ------------------------------------------------------------
desc "read"
task :read do
	require 'mysql'
	puts "*** 開始 ***"
#
	host = "127.0.0.1"
	user = "scott"
	password = "tiger123"
	data_base = 'city'
	connection = Mysql::new(host, user,password,data_base)

	sql_str = "SELECT id,name,population,date_mod FROM cities order by ID"
	begin
		result = connection.query(sql_str)
		result.each do |row|
			print "#{row[0]}\t#{row[1]}\t#{row[2]}\t#{row[3]}\n"
		end
	end
#
connection.close
#
puts "*** 終了 ***"
end
# ------------------------------------------------------------
desc "update"
task :update, 'key', 'population'
task :update do |task,args|
	require 'mysql'
	require 'date'
	puts "*** 開始 ***"
#
	key_in = "#{args['key']}"
	population_in = "#{args['population']}"
#
	puts key_in
	puts population_in
#
	host = "127.0.0.1"
	user = "scott"
	password = "tiger123"
	data_base = 'city'
	connection = Mysql::new(host, user,password,data_base)
#
	update_proc(connection,key_in,population_in)
#
	connection.commit
	connection.close
#
	puts "*** 終了 ***"
end
#
def	update_proc (connection,id,population)
	date_mod=Date.today
	sql_str="UPDATE cities SET population='#{population}', DATE_MOD='#{date_mod}' where ID = '#{id}'"
	connection.query(sql_str)
end
#
# ------------------------------------------------------------
```

このサンプルは、mariadb にアクセスします。

使ったテーブルの様子を見るには、

```text
$ rake read
*** 開始 ***
t3321	岡山	645927	2017-05-30
t3322	倉敷	791835	2003-02-15
t3323	津山	298999	2019-05-15
t3324	玉野	900009	2019-05-15
t3325	笠岡	237451	2003-03-04
t3326	井原	518397	2003-05-21
t3328	高梁	478231	2003-10-26
t3329	新見	863751	2003-12-15
*** 終了 ***
```
hoverをスマホでも動作するように実装したメモ

スマホでもタップした感を出すためにhoverを実装して欲しいと要望を受けたのですが、
疑似要素の`:hover`ではタップして変化した後、元に戻らなかったり思うような動作にならず…
色々調べた結果、なんとか納得のいく形になったのでスニペット的にメモを残します。

最終的に取った方法としては下記のような感じです。

- PCもスマホも、擬似クラス`:hover`は使用しない。
- `hover`の効果を付けたいhtmlの要素のclassに`touch-hover`を付けておく。
- `.touch-hover`に対してjQueryで
    - `touchstart`と`mouseover`のイベント時にclassに`hover`を付与する。
    - `touchend`と`touchmove`と`mouseout`と`click`のイベント時にclassから`hover`を削除する。

##コード
``` javascript:jQuery
$("body").on({
  "touchstart": function() {
    return $(this).off("mouseover mouseout");
  },
  "touchstart mouseover": function() {
    return $(this).addClass("hover");
  },
  "touchend touchmove mouseout click": function() {
    return $(this).removeClass("hover");
  }
}, ".touch-hover");
```

あとはCSSで対象の`.hover`にhover時のスタイルを適用すれば良いはずです。
###補足

- タッチした時にマウスのイベントも呼ばれているらしく、それを回避するために`touchstart`のイベントで`mouseover`と`mouseout`のイベントを削除しています。
- `body`に対してイベントを登録しているのは、`.touch-hover`を持った要素が動的に追加されることがあったので、それらにもイベントを登録するためにこのような記述にしています。
- `touchmove`でもhoverを解除しているのは、スクロールしたときにhover状態で指に追従してくるのがなんかイヤだったためです。
- `click`でもhoverを解除しているのは、タッチしてその位置から移動する要素があった時に、hoverが残ってしまうことがあったためです。このあたりは無理矢理感があります…

参考にさせていただいたサイト
http://uenomemo.sakura.ne.jp/pcmemo/767
Raspberry Pi Zero Wについて

Raspberry Pi Zero W同士でのbluetoothによるデータ交換を行おうと思っているのですが、sudo ./upload.shの入力後、以下の画像が出てデータが送信することが出来ない状態です。Wifiであればリンク先の方法で上手くいくのですが、何か方法があればよろしくお願いします。
![bluetooth.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415765/5234cc87-20ad-48fb-469c-6a73f8a9cec9.jpeg)


[リンク]http://hendigi.karaage.xyz/2016/11/rpi-ftp/
Alibaba CloudでのVPC作成手順

## VPCの作成
Alibaba Cloudで、VPCとそれに付随するサブネット(VSwitchと呼ばれる)を作成したいと思います。

##### 1. サービスの選択
ログイン後のコンソールで、[「Virtual Private Cloud」](https://jp.alibabacloud.com/product/vpc)を選択します。
![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/a4f9a6d7-ec45-0c1e-f68f-2bfd34e33483.jpeg)

##### 2. VPCの作成
「VPCの作成」をクリックします。
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/72162c0a-341f-1e49-e458-766020cd51c7.jpeg)
以下のVPCパラメータを入力します。

- VPC名
- IPv4 CIDR ブロック
![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/92b9c36b-810b-456d-42ec-dc88f66826d6.jpeg)

##### 3. VSwitchの作成
続けて同じ画面で、VSwitchと呼ばれるサブネットを作成します。
パラメータとしては以下の3つを入力、アベイラビリティゾーン分ける為、計2つのVSwitchを作成します。

- VPC名
- アベイラビリティゾーン
- IPv4 CIDR ブロック  
![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/f492b35c-7d44-0d0a-952a-0a315789bc6e.jpeg)
![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/3199a43b-c814-32a5-6375-d209b5b870e0.jpeg)
「OK」をクリックした後、「完了」をクリックします。
![WS000007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/75ef6c74-8445-a117-a3fb-bc05d1fba0d1.jpeg)

##### 4. VPCとVSwitchの確認
「完了」をクリック後、VPCが作成されている事が確認できます。
また、VSwitchのダッシュボードより、VSWitchが作成されている事も確認できます。
![WS000008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/8e042fd2-2c5c-aef4-6f76-80e8db5ac5a4.jpeg)
![WS0001000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/e3791495-597f-a7e5-588e-6d727d3f857d.jpeg)
javaでURLのホストなど一部だけを置換する

javaでURLの一部分であるホストやポート番号だけを置換する。ここではspringの```UriComponentsBuilder```を使用するやり方について。

# ソースコード
https://stackoverflow.com/questions/46667342/java-replace-host-in-url のほぼコピペ。```UriComponentsBuilder```にオリジナルのURLを指定し、それから```host```などのメソッドで置換する。

```java
import org.springframework.web.util.UriComponentsBuilder;

        String url = "http://localhost:8080/example?param=hoge";

        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
        String url2 = builder.host("hoge-host").toUriString();

        System.out.println(url2);// http://hoge-host:8080/example?param=hoge
```


# 参考URL
* https://stackoverflow.com/questions/46667342/java-replace-host-in-url - ```UriComponentsBuilder```を使わないやり方も書かれている。
統計学分野のロジット関数やNNのシグモイド関数の対応


## Introduction

某所で人に説明する際に

- 一般化線形モデル (GLM)
- ロジスティック回帰
- ロジット関数
- 全結合層　(NN)
- シグモイド関数 (NN)

の対応を忘れていてぱっとでてこなかったので、軽くおさらいします。  

シッパイカラマナブノダイジ...
チシキバラバラヨクナイ...

厳密には同じものだといえないところがあるかもしれませんが、ご容赦下さい。  

## TLDR;

*乱暴*に言うと、

- ロジスティック関数 - シグモイド関数　- ロジット関数の逆関数
- ロジスティック回帰 -  全結合層の出力にシグモイド関数を適用 - GLMのリンク関数にロジット関数を選んだもの

なお何度もいいますが、あくまで同じなのは式の形であり、
境界やとりうる値、意味論を考えるとそうとは言えないかもしれないのでご注意を...

## 線形モデル（線形回帰)

ベースとなる単純な線形モデルは、

$$ y = WX + b  $$

Xをinput, yをtarget, Wを重み, bをバイアス（切片）とします。  
Xとyは統計だと、それぞれ説明変数、目的変数と呼ばれることが多いようです。  
また右辺は線形予測子とも呼ばれます。  

これがNNにおける一層の全結合層に対応します。  

## GLM

ここで一般化してリンク関数によりtargetを変換し線形予測子と結びつけます。  

$$link(y) = WX + b$$

これが**GLM**のベースの式です。  
先ほどの線形モデルはlink関数を恒等関数にした場合に対応します。　　  

今度はlink関数に以下の**logit(ロジット)関数**を選びます。

```math
logit(y) = log(\frac{y}{1 - y})
```

ようはオッズの対数です。  

これを左辺がyになるように変形すると

```math
log(\frac{y}{1 - y}) = z \\

y = \frac{1}{1 + exp(-z)}
```

が得られます。右辺をzの関数とすると、

```math

g(z) = \frac{1}{1 + exp(-z)}

```

となりご存知**シグモイド関数**の形になります。  
この$g(z)$は**ロジスティック関数**でもあり、　　
zを線形予測子で置き換えると、

```math

y = \frac{1}{( 1 + exp(WX + b))}

```

となりyをtargetとした*ロジスティック回帰*となります。  

同時にこれは **全結合層** にシグモイド関数を活性化関数として適用した形になります。  

## 参考文献
- データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学),久保拓也,  岩波書店, 2012/5/19
- [回帰分析 - Wikipedia](https://ja.wikipedia.org/wiki/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90)
AmazonLinux2でLetsEncryptを使ってサブドメインをワイルドカードSSL化


ドキュメントルートに.well-knownディレクトリを作成する

```sh
mkdir .well-known 
chmod 775 .well-known 
```

certbot-auto を持ってくる

```sh
mkdir -p ~/bin
curl -L https://dl.eff.org/certbot-auto \
       -o ~/bin/certbot-auto
chmod a+x ~/bin/certbot-auto
```

Amazon Linux2でも動くように設定をイジる

```sh
cd ~/bin
vi certbot-auto
```

```sh
# elif [ -f /etc/issue ] && grep -iq "Amazon Linux" /etc/issue ; then
elif grep -i "Amazon Linux" /etc/issue > /dev/null 2>&1 || \
	 grep 'cpe:.*:amazon_linux:2' /etc/os-release > /dev/null 2>&1; then
```

ファイルを移動する

```sh
mv ./certbot-auto /usr/local/bin
#あとパスも通しておく
export PATH="$PATH:/usr/local/bin"
```

以下のコマンドを流す

```
certbot-auto certonly --manual -d *.taroimo.jp -m mail-address@taroimo.jp --agree-tos --manual-public-ip-logging-ok --debug
```

--debugフラグを付けないとエラーが出るらしい。実際出る。

下のようなメッセージに加えてPlease Enter みたいなのが出たら
Route53にTXTレコードを追加
_acme-challenge.taroimo.jpに表示されたvalueを割り当てる

```
Please deploy a DNS TXT record under the name
_acme-challenge.taroimo.jp with the following value:

[TXTレコードの値がここに出る]

Before continuing, verify the record is deployed.
```

**令和元年8月14日 追記**
複数のインスタンスで同じドメインのサブドメインを使っている場合は
インスタンス毎に_acme-challengeを設定しておく必要がある。
上書き上書きでやってたら最初のインスタンスの証明書期限が切れたタイミングで
更新ができなかった（当たり前だが）
でもTXTレコードって1個しか設定出来ないし困ったなーとか思ってたけどそんなことなかった。
こんな感じで複数行にしておけばおｋぽいです。
Valueはそれぞれダブルクォートで囲んで、Value毎に改行を入れましょう。

<img width="571" alt="スクリーンショット 2019-08-14 15.00.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23195/519a0037-1697-5a22-2365-0bd64d9b9115.png">

別ターミナルを立ち上げてnslookupでacme-challengeのTXTレコードが上記の値であることを確認する

```sh
nslookup -q=txt _acme-challenge.taroimo.jp
　　_acme-challenge.taroimo.jp text = "TXTレコードの値"
```

virtualssl.confにSSL化するサイト設定を記述

```apache
<VirtualHost *:443>
	# もろもろ設定
</VirtualHost>
```

Apacheを再起動してhttpsでアクセスして証明書が適用されているか確認
適用されてたら.well-knownディレクトリを削除して完了

**おわり。**
#django | AbstractUser でカスタムユーザーを作ってマイグレーションするまでの手順のデモ

# django-custom-user-demo

django で AbstractUser でカスタムユーザーを作ってマイグレーションするまでの最小手順のデモ

# Comands


```
django-admin startproject some
cd some

./manage.py startapp users
```

# users/models.py


```py
from django.db import models

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
  middle_name = models.CharField(max_length=255, null=True, blank=True)
```

# some/settings.py

```diff
+ AUTH_USER_MODEL = 'users.User'
```

```diff
INSTALLED_APPS = [
+    'users.apps.UsersConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

```


# users/admin.py

```py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User, UserAdmin)
```

# Comands

```
./manage.py makemigrations
./manage.py migrate
```

# Create user and show ext field

```
./manage.py shell
```

```
In [2]: from users.models import User

In [3]: u = User.objects.create(middle_name='yay')

In [4]: u.middle_name
Out[4]: 'yay'
```


# Code diffs are on merged PR

- [Custom user by YumaInaura · Pull Request #1 · YumaInaura/django-custom-user-demo](https://github.com/YumaInaura/django-custom-user-demo/pull/1)
- [Update custom user add "middle_name" field by YumaInaura · Pull Request #2 · YumaInaura/django-custom-user-demo](https://github.com/YumaInaura/django-custom-user-demo/pull/2)


# 参考
 

>プロジェクトの開始時にカスタムのユーザーモデルを使用する¶
新しくプロジェクトを始める場合は、デフォルトの User で十分である場合でも、カスタムユーザーモデルを作成>することを強く推奨します。このモデルはデフォルトのユーザーモデルと同様に動作しますが、必要に応じて将来的にカスタマイズすることができます:


[Django の認証方法のカスタマイズ | Django ドキュメント | Django](https://docs.djangoproject.com/ja/2.2/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project)

---


>カスタムUserを使う場合の注意点
>カスタムUserを使うには、migrationsのinit(0001)時点でカスタムUserを使うことを含めなければならない。

[Djangoでは常にカスタムUserを使用すべき - Qiita](https://qiita.com/NAKKA-K/items/7627b6a22f364941b989)


>すでにmigrateしている場合は、DBを初期化してmakemigrationsし直すのが楽。

---

>アプリケーションを独立させると、他プロジェクトでの再利用性と、アプリケーション単位でダンプファイル操作が可能になるメリットがあります。

>「users」はcookiecutter-djangoでも使われている名前です。こちらで統一するのがよいと思います。
参考：cookiecutter-djangoを使ってみた

[Django ユーザー カスタマイズ方法 - Qiita](https://qiita.com/okoppe8/items/10ae61808dc3056f9c8e)


# その他の参考記事


[DjangoのUserモデルを継承してカスタマイズ | Hornet|静岡拠点のWeb、ホームページ制作](https://hombre-nuevo.com/python/python0048/#h2_1)

[Userモデルのカスタマイズ | Narito Blog](https://narito.ninja/blog/detail/39/)

[Django Best Practices - William Vincent](https://wsvincent.com/django-best-practices/)

[Django マイグレーション まとめ - Qiita](https://qiita.com/okoppe8/items/c9f8372d5ac9a9679396)
 


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1853








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Realm object の update の注意点

# はじめに

Android アプリを開発している際、`Realm`を用いてデータの更新をしようとすると、
>  Cannot modify managed objects outside of a write transaction.
というエラーが出力された。

# なぜ？
## エラー概要
トランザクション外でデータベースの更新を行ってしまったため。

```
...
DBの更新処理
...

realm.beginTransaction()
realm.copyToRealmOrUpdate(DB)
realm.commitTransaction()
```

## トランザクションとは
簡単にいうと、
結果の整合性が必要な複数処理のこと。

## つまり、エラーの原因は？
トランザクションの成功が必要であるにも関わらず、ある処理を分離すると整合性が取れなくなり、トランザクションに失敗してしまうため。

# 解決策
トランザクション内で更新処理を行うこと。

## 具体例
```
realm.beginTransaction()

...
DBの更新処理
...

realm.copyToRealmOrUpdate(DB)
realm.commitTransaction()
```

# 参考
[「トランザクション」とは何か？を超わかりやすく語ってみた！](https://qiita.com/zd6ir7/items/6568b6c3efc5d6a13865)
Rails5で絵文字を保存する utf8mb4 (docker)

##はじめに
Docker内のRailsで絵文字付きの文章を保存しようとしたら、めちゃ詰まったので備忘録として残しておきます。

<img width="714" alt="スクリーンショット 2019-05-15 16.25.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365406/e59eaff1-6242-618b-e8fd-a06e0427ffb5.png">


##開発環境
ruby 2.6.2

rails 5.1.1

mysql 5.7

##手順
文字エンコーディングがutf8の場合、絵文字の保存はできないのでutf8mb4を適用するためにいくつかのファイルを編集する必要がある。

###my.cnfの編集

my.cnfを以下のように編集。

```my.cnf
[client]
default-character-set = utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server = utf8mb4
skip-character-set-client-handshake
collation-server = utf8mb4_general_ci
init-connect = "SET NAMES utf8mb4"
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_file_per_table = 1
innodb_large_prefix = 1
```
my.cnfを編集する場合,mysqlを再起動する必要がある。
以下のコマンドで再起動。

```
service mysql restart
```
or

```
systemctl restart mysql
```

###database.ymlの編集

config/database.ymlに以下の設定を追加。

```database.yml
default: &default
  adapter: mysql2
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: root
  charset: utf8mb4 #追加
  encoding: utf8mb4 #追加
  collation: utf8mb4_general_ci #追加
...
```

###config/initializers/utf8mb4.rbファイルの作成
create_table時にオプションを渡すため、config/initializers/にutf8mb4.rbファイルを作成する。

```config/initializers/utf8mb4.rb
module Utf8mb4
  def create_table(table_name, options = {})
    table_options = options.merge(options: 'ENGINE=InnoDB ROW_FORMAT=DYNAMIC')
    super(table_name, table_options) do |td|
      yield td if block_given?
    end
  end
end

ActiveSupport.on_load :active_record do
  module ActiveRecord::ConnectionAdapters
    class AbstractMysqlAdapter
      prepend Utf8mb4
    end
  end
end
```

###schema.rbの編集

```
create_table "test", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC", force: :cascade do |t|
```
デフォルトの**CHARSET =utf8**を**CHARSET=utf8mb4**に変更。

###docker-compose.ymlの編集

db:にcommand:,volumes:を追加。

```docker-compose.yml
db:
    #追加
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci  
    volumes: 
     #追加
      - /mysql/my.cnf:/etc/mysql/conf.dmy.cnf  
```

これで設定完了。


##おわりに
ここに僕は二日かけてしまったので、どうか皆さんの参考になりますように。

##参考文献
Rails5.1でutf8mb4（絵文字）に対応させる
https://qiita.com/okamu_/items/5eb81688849fbe351350
Ruby on Rails 5 + MySQL5.6でutf8mb4を使う方法
https://www.playfulit.net/articles/wRxodTN3dUF34JL97bz6HNao
【小ネタ】Hyper-Vの有効化とBIOSの注意

なんとなくハマってしまったので注意点。

## 結論を先に書くと

1. [「Windowsの機能の有効化または無効化」でHyper-Vを有効化する](#windowsの機能の有効化または無効化でhyper-vを有効化する)
1. [BIOSの確認をしてVTxを有効化する](#biosの確認をしてvtxを有効化する)
1. [Hyper-Vが使える！](#hyper-vが使える)

## 「Windowsの機能の有効化または無効化」でHyper-Vを有効化する

コントロールパネル &gt; プログラムと機能 &gt; Windowsの機能の有効化または無効化 を選択する。

ウィンドウが開いたらHyper-Vのところにチェックを入れる。

[![Image from Gyazo](https://i.gyazo.com/e5514db9004f537437c92ccc25056e87.png)](https://gyazo.com/e5514db9004f537437c92ccc25056e87)

## BIOSの確認をしてVTxを有効化する

ここがハマったんだよね。

話はずれて、IntelCPUだと、Virtualization Technologyというのがあって、それが仮想化支援を行っている。なので、BIOSレベルの設定が必要なんだけど、それを知らなかったんだよね。なので、Hyper-Vが立ち上がらなくてウンウン唸ってた。

[インテル バーチャライゼーション・テクノロジー](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AB_%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%A9%E3%82%A4%E3%82%BC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC)

勉強しましょうね～。

ということで、BIOSを設定しましょう。HPのコミュニティにトピックがあったので、写真をかいつまんできました。

Hyper-Vのときは「VTx」のほうを有効化するといいです。写真のは、RAIDの話だと思うので「VTd」のほうだけど。

[![Image from Gyazo](https://i.gyazo.com/89d9d9bb009f4ce9255a36085fd175f1.jpg)](https://gyazo.com/89d9d9bb009f4ce9255a36085fd175f1)

参考：[HP ProDesk 600 G2 RAID support](https://h30434.www3.hp.com/t5/Desktops-Archive-Read-Only/HP-ProDesk-600-G2-RAID-support/td-p/5575738)

というか、上のタブが見にくくてほんとそこでハマった！

なんかおしゃれなUIになってて上のタブがわからなくて、全然BootとかAdvancedのところがわからんで困ったんだよなあ。自分みたいなおじさんには、ブルーバックかブラックバックのUIが馴染むんだよねえ…。

## Hyper-Vが使える！

Windowsキーを押してから「Hyper-V」と入力すると、Hyper-Vマネージャーというのが出てくるので、それを起動すると使えます。Windowsのプログラム探索わかりにくいけど、文字列打ち込むだけで検索できるようになったのは褒めてあげたい。

[![Image from Gyazo](https://i.gyazo.com/7d571d4c95ba7b00d5b8b228f7568601.png)](https://gyazo.com/7d571d4c95ba7b00d5b8b228f7568601)

というだけの小話でした。
[PHP その0]Web系初心者だけど今後のためにも１から勉強してみる

# シリーズ記事一覧
　[[PHP その０]　Web系初心者だけど今後のためにも１から勉強してみる](https://qiita.com/yaiza/items/d96d7a6c4bbcc9b3cd3d)
　[[PHP その１]　LAMP環境とは？](https://qiita.com/yaiza/items/c830a41c86cf6b3c65f9)
　[[PHP その２]　開発環境の構築とHello World](https://qiita.com/yaiza/items/2a4f807e9bfda07c16f3)

# 簡単な自己紹介と想定読者
・組み込み開発技術者として３年（大学ではプログラミングの基礎を学んだ程度）
・普段の使用言語はC
・Web系は基本的に独学で学んでいるため基本知識は都度調べてる

一応プログラミングがどんなものかってことは理解しているつもりだけど、普段からごりごり開発しているわけではないのでコーディングするときは毎回調べながらやってます。

そんな人向けのPHP学習してみた系のよくある内容です。
私が理解した内容を後から見返せるように残しておこうと思います。

# PHPとはなにか
PHPとはウェブ開発のためのスクリプト言語です。通常ウェブ上でコンテンツを公開する場合にはサーバ上にコンテンツを用意しておきます。そのサーバに対してユーザがブラウザを通してアクセスすることでサーバ上のコンテンツを閲覧することができますがPHPはサーバー上で動作するいわゆるサーバサイドの言語です。
大枠の動作構成を知りたい場合は "LAMP PHP"等でググるとたくさん記事が出てきます。

# なぜPHPか？
自分が今回選択した理由は２つ
・簡単（らしい）
・お仕事たくさん
簡単な上にいろんなことできるし、現状PHPの開発ってかなり多いイメージ。きっとやっておいて損はないと思ったのでチョイスしました。

# 今後の進め方について
私自身ドットインストール等を何度か見てわかった気になっていたりしましたが、腰を据えてやるのは初めてなので、基礎の基礎からやっていこうと思います。
１週間に１回くらいは更新していくことを目標にやってきます。

以上！
【git】checkoutせずに特定ブランチをpullするエイリアス

#本文
[これ](https://qiita.com/YamEiR/items/70defe1d482dc42e8199)のエイリアス版。`.gitconfig`の`[alias]`以下にそのままコピペすれば動くはず。

```shell:.gitconfig
[alias]
	pull-o = "!f(){ \
		local branch_name=${1};\
		local current_branch=$(git symbolic-ref --short HEAD);\
		local branch_remote=$(git config branch.${branch_name}.remote);\
		local branch_path=$(git config branch.${branch_name}.merge);\
		if [ ${branch_name} = ${current_branch} ];then \
			git pull ${branch_remote} ${branch_name} --ff-only;\
			return ${?};\
		else \
			git fetch ${branch_remote} && \
			git fetch . refs/remotes/${branch_remote}/${branch_name}:${branch_path};\
			return ${?};\
		fi;\
	};f"

```

引数を扱うため関数としてaliasに登録する。使い方は`git pull-o <ブランチ名>`。`HEAD`の位置によらず`origin`の指定ブランチを`pull`するので、定期的にスクリプト等で実行したい場合に便利……かもしれない。
なお、ファストフォワード不可能な場合などはちゃんと失敗する。
#解説
[「checkoutせずに特定ブランチをpullする」](https://qiita.com/YamEiR/items/70defe1d482dc42e8199)で書いたように、`git fetch . origin/<ブランチ名>:<ブランチ名>`はHEADの位置と指定のブランチが一致していると失敗する。その場合は通常の`pull`をすれば良いのだが、どうせエイリアスにするならということで一致した場合の対策も入れた。
`git symbolic-ref --short HEAD`はHEADのブランチ名を返すため、指定したブランチと比較して分岐し、等しい場合は通常の`git pull`を実行する。`git pull --ff-only`にしたのは念のため。

ブランチ名が等しくない(HEADの位置と異なる)場合は以前の記事と同等のことをしている。ただし`git fetch origin`に失敗した場合は`fetch . (略)`を実行させたくないため、ここだけは`;`ではなく`&&`で接続しておく。あと折角なので`refs/remotes/${branch_remote}/${branch_name}:refs/heads/${branch_name}`とパスを全て書いた。別に書かなくても動く。

`return ${?}`で直前の実行コマンドの戻り値をそのまま返しているので、このalias自体をシェルスクリプトや`&&`, `||`で繋ぐことが可能。

#更新履歴
しれっとアップデートしている。`remote`の名前とパスを`git config`から引っ張ってきたり、変数宣言を`local`にしたり。
Go言語におけるRestAPIのPATCH methodで飛んできたJsonの捌き方


#概要
先日、WebアプリケーションをGo言語にて組んでおり、
その際にhttpリクエストのPATCH methodで飛んできたJsonを捌くのに苦労した為、
ここに記載


#環境
- クライアントサイド：JS(React)
- サーバサイド：Go言語(AWS Lambdaで実行、APIGateWay経由でRestAPI実行)

#具体的に困った事象
JsonがPATCH methodで飛んでくる為、
明示的なNULLの値なのか？
空白での更新なのか？
ただ単に更新対象ではないのか？
というのがソースで構造体に変換すると解析が難しい

この記事を参照して下記の様に解析しました。
https://qiita.com/jagio/items/e3b2f9af0ee5096011ee

#ソースコード

```json-sample.go

var fuga map[string]interface{}

err := json.Unmarshal([]byte(JsonString), &fuga)
if err != nil {
    log.println(err)
}

for key, value := range fuga {
    switch key {
    case "stringhoge":
        //stringhogeというキーがある場合

        if value == nil {
            //stringhogeがnillの場合
        }

        if value == "" {
            //stringhogeが空文字の場合
        }
        
    case "boolhoge":
        //boolhogeというキーがある場合

        if value == nil {
            //boolhogeがnilの場合
        }
    }
}

```
PythonのError一覧

随時加筆

|ErrorType|Errorの例|Errorの原因|
|:---|:---|:---|
|SyntaxError|invalid syntax|構文の間違い。スペルミス、:がない、など|
|||文字列の中に”や’が含まれている。\\(エスケープ文字)で対処可能|
||keyword can't be an expression|計算式が間違っている
||unexpected EOF while parsing|括弧がない|
||positional argument follow keyword argument|カンマとピリオドの間違い、スペルミス|
||non-default argument follows default argument|関数の引数に初期値がない|
|TypeError|can only concatenate list (not "str") to list|print関数の中身はデータの型を合わせなければならない|
||must be str, not int|int型は使えない、str型でなければならない|
||get_name() takes 0 positional arguments but 1 was given|第一引数のselfを忘れている|
||predict() takes 2 positional arguments but 3 were given|関数に余分な引数が設定されている|
||'tuple' object does not support item assignment|タプルの要素は変更できない|
|NameError|name 'list_4' is not defined|list_4は定義されていない
|IndentationError|expected an indented block|インデントが不正|
||unexpected indent|インデントが不正|
|IndexError|list index out of range|リストのサイズを超えたインデックスの要素を参照しようとしている。|
|ModuleNotFoundError| No module named 'matplotolib'|モジュールの名前を間違えている|
|AttributeError|module 'matplotlib.pyplot' has no attribute 'sccater'|スペルミス|
|ValueError| Expected 2D array, got 1D array instead|括弧の位置がおかしい、カンマがないなど|
||sabsring not found|文字列に含まれていない文字を検索した|
オナーマクロ

```python

import pyautogui
import cv2

def kinsure(x):
    pyautogui.screenshot('filename.png')
    img = cv2.imread("filename.png", 0)
    temp = cv2.imread(x, 0)
    result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    if max_val >= 0.95:
        pyautogui.click(max_loc)
    
pyautogui.FAILSAFE = True
pyautogui.PAUSE = 0.3

while 1:
    print("あ") 
    
    
    pyautogui.screenshot('filename.png')  #BAN1  マリアかローレインを押す　　選択を押す
    img = cv2.imread("filename.png", 0)
    temp = cv2.imread("BAN1.png", 0)
    result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    if max_val >= 0.95:
        kinsure("ローレインBAN.png")
        kinsure("マリアBAN.png")
        kinsure("選択.png")
        
        
    pyautogui.screenshot('filename.png')  #英雄選択　    ユノ　　　リリア　　　ミリアンヌ　　ジェーン　　　クラウス　　　ラウディア　　　ライアス　　　グレンウィス　の順番　　選択を押す
    img = cv2.imread("filename.png", 0)
    temp = cv2.imread("参加する英雄を.png", 0)
    result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    if max_val >= 0.95:
        kinsure("グレンウィス.png")
        kinsure("ライアス.png")
        kinsure("ラウディア.png")
        kinsure("クラウス.png")
        kinsure("ジェーン.png")
        kinsure("ミリアンヌ.png")
        kinsure("リリア.png")
        kinsure("ユノ.png")
        kinsure("選択.png")
        
        
    pyautogui.screenshot('filename.png')  #BAN2
    img = cv2.imread("filename.png", 0)
    temp = cv2.imread("BAN2.png", 0)
    result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    if max_val >= 0.95:
        pyautogui.click(1800, 600)
        kinsure("選択.png")
        
    kinsure("45ポイント.png")
    kinsure("リトライ.png")
    kinsure("リトライ.png")
        

```
プログラミング学習記録88〜JavaScriptでスロットマシン〜

##今日やったこと
-　ドットインストール「JavaScriptでスロットマシンを作ろう」でスロットを作る
-　作ったスロットをアレンジしたものをYouTubeに投稿

###「JavaScriptでスロットマシンを作ろう」
今までにやってきたドットインストールのJavaScriptで作るミニアプリシリーズで一番盛り沢山な内容でした。

カリキュラムにあるものの中でクラスとインスタンスを使ったのは、初めてだったと思います。

途中、難しいところもありましたが、今までと同じようにコメントを書きながら進めていくことで理解できました。

見本では3つのスロットですが、アレンジして5つのstopボタンのあるスロットにしてみました。
<img width="619" alt="スクリーンショット 2019-05-15 19.20.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323324/6b710b71-a008-1a9e-67fe-592612281690.png">

動画はこちらです↓
https://youtu.be/3N6S-uXBQpA

ソースコードはこちらです↓
https://github.com/yuta-kinu/MySlotMachine

これでドットインストールあるJavaScript(ES2017)のレッスンは全て修了しました。

基礎文法編、オブジェクト編、DOM編で基礎を学び、ミニアプリ・ミニゲームを作りながら学んだ基礎を確認していく良いカリキュラムだったと思います。

環境構築せずにブラウザ上で動かせるのもよかったです。
手っ取り早くプログラムを書いて動かしたい人におすすめですね。

JavaScriptの基礎の基礎が終わったので、次はインターンで必要な知識を入れていきたいと思います。

おわり
DeepCreamPyをMacで使ってみた

# 概要
DeepCreamPyとは
簡単に説明すると、画像に入っているモザイクやノイズを消してくれる便利なライブラリ。

MacでDeepCreamPyを使用している日本語記事がなかったので、メモ程度に。

# 環境
macOS Mojave10.14.4
Python3.6.0

# 手順
1. [https://github.com/deeppomf/DeepCreamPy/releases][url1]からSource core(zip)、もしくはSouce code(tar.gz)をDL。

2. DLしたzip、もしくはtar.gzファイルを解凍。

3. [https://drive.google.com/file/d/1Nzh2KAUO_rYPu2vDM_YP1EgbWtjI2hRX/view][url2]をDL。

4. 手順3.を解凍し、model.h5を手順2.のmodelsの中に配置。

5. DeepCreamPyに移動。（DeepCreamPyのバージョンによってフォルダ名が変わります）
    
    ```
    cd ./DeepCreamPy-1.3.0-beta
    ```
    
6. 必要なライブラリをインストールします。
（私の場合、依存関係がややこしくなりそうだったので、requirementsに記載されていた==より後ろを削除しました。<font color="Red">削除する場合、Pillow==5.3.0は消さないで下さい。</font>） 
参照：[https://github.com/deeppomf/DeepCreamPy/issues/108][url3]
    
    ```
    pip install -r requirements.txt
    ```
    
7. decensor_inputフォルダにpngファイルを配置し、以下コマンドを実行。
    
    ```
    python decensor.py
    ```
    
# 結果
今回はDeepCreamPyに元々入っていた画像を使用しました。上は若干モザイクがかかった画像で、下はDeepCreamPyによってモザイクが無くなった画像です。
ほとんどノイズが消えてるのが分かると思います。とても優秀。
![mermaid_censored.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417265/629981ca-eaea-5e5f-f339-0b40b5bef613.png)![mermaid_censored (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417265/16c6d9d5-9bdb-fe24-9772-f34e295fd108.png)

# 感想
@koshian2 様の[DeepCreamPyで学ぶモザイク除去][url4]を購読し、とても面白かった為、PCで実行しようと思った次第です。
DeepCreamPyはとても優秀なので、是非実行して遊んでみて下さい。
感想や指摘点などございましたらコメント頂けると幸いです。


[url1]:https://github.com/deeppomf/DeepCreamPy/releases
[url2]:https://drive.google.com/file/d/1Nzh2KAUO_rYPu2vDM_YP1EgbWtjI2hRX/view
[url3]:https://github.com/deeppomf/DeepCreamPy/issues/108
[url4]:https://note.mu/koshian2/n/naa60d5c9ebba
AtCoder ABC011 C - 123引き算

#問題概要

[問題のリンク](https://atcoder.jp/contests/abc011/tasks/abc011_3)

整数$N$が与えられる。整数$N$に対して以下の操作を100回まで繰り返し、$N$を0にしたい。
操作：$1, 2, 3$から任意に選び整数$N$に対して引き算を行う。

計算途中でなってはいけないNG数字が3つあり、この数字になってしまったら失敗である。なおNG数字が$N$の場合も失敗となる。

この時、ゲームが達成可能な場合は$YES$、そうでない場合は$NO$を出力せよ。

#制約条件
- $1≦N≦300$
- $1≦NG_1≦300$
- $1≦NG_2≦300$
- $1≦NG_3≦300$

#考えたこと

ダメなパターンを考える。

すると以下3つ。

1. 操作回数が100回を越えてしまう
- NG数字が並んでいる(ex.1,2,3)
- $N$がNG数

パターン2とパターン3は場合分けできるが、パターン1は全探索したい。だが愚直に全探索すると$O(3^N)$となるのできつい。なのでうまく全探索する方法を考える。
ここでやりたい処理を考えると、100回以内の処理に収めるために3ずつ引いていくのがよく、NG数字になれば飛ばすということをしたい。
これはdpを使えば$0(N)$で解ける。$N$から$i$に最短何回の処理で至るかは$i+1, i+2,i+3$へ至る操作回数に依存しているので。

```.cpp
dp[i] == iに至るための操作回数
```
上記のようにdpを定義する。

すると遷移は以下のように定義できる。(100000程度の大きい数字で初期化しておくことを忘れずに)
これを$N$~$0$で繰り返す。

```.cpp
dp[i] = min({dp[i+1], dp[i+2], dp[i+3]})+1;
```

#解答

```c.cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n; cin >> n;
    int ng1, ng2, ng3; cin >> ng1 >> ng2 >> ng3;
    if(n==ng1 || n==ng2 || n==ng3) {
        cout << "NO" << endl;
        return 0;
    }
    vector<int> dp(n+10, 100000);
    dp[n] = 0;
    for(int i = n-1; i >= 0; i --) {
        if(i==ng1 || i==ng2 || i==ng3) continue;
        dp[i] = min({dp[i+1], dp[i+2], dp[i+3]})+1;
    }
    cout << (dp[0]>100 ? "NO" : "YES") << endl;
}
```
【SCSS】ネスト内でのplaceholder selector活用法。

SCSSで、ネスト内でもplaceholder selectorが使えることに気付いたので、記録。
※BEM記法

## 要件
`.block__ele`
`.block__ele--red`
という元パーツと、文字色が変わっただけのパーツがあるとする。

`.block__ele--red`は
前者の情報を継承しつつ、色だけ変えるCSSを作りたいとする。


## 実装
この場合、
`.p-block`というセレクター内で、
`%__ele`という placeholder selectorが使える。

> placeholder selectorとは
scssで継承元として`@extend`で読み込める変数のようなもの。

ただし、これは実態を持つものではないので、`&__ele`と別に記述し、placeholder selectorの内容を継承せねばならない。

### コード
```scss
.p-block {
	%__ele {
		//共通するCSS
	}
	&__ele {
		@extend %__ele;
		//元のみのCSS
		&--red {
			@extend %__ele;
			//redのみのCSS
		}
	}
	
}
```
記述量も少ないし、いい感じ。

こうすることで、cssの二重読み込みが避けられる。（オリジナルを継承して、オリジナルでおいた色を—redで上書きする、など）（たぶん
サーバ監視に役立つコマンドTips

入門監視の、 `8章 サーバ監視` から抜粋。
https://www.oreilly.co.jp/books/9784873118642/

# top： cpu 使用率の取得

cpu使用率の取得に役立つ。

使用率を判断するためには、ユーザ(user, us)、システム(system, sy)、優先度付きプロセス(niced processes, ni)、ハードウェア割り込み(hardware interrupts, hi)、ソフトウェア割り込み(software interrupts, si) を足し合わせた結果。

```sh
$ top
top - 15:52:01 up 77 days, 13:55,  2 users,  load average: 0.04, 0.04, 0.01
Tasks: 138 total,   1 running, 137 sleeping,   0 stopped,   0 zombie
Cpu(s):  3.5%us,  0.8%sy,  0.0%ni, 95.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  15845132k total, 14394780k used,  1450352k free,   153996k buffers
Swap:        0k total,        0k used,        0k free,  8783084k cached
```

# free: - メモリ使用量・空き容量の取得

システムの物理メモリとスワップメモリの使用量、空き容量を表示する。

デフォルトの出力はKB単位。出力単位を `-m` （MB単位）や `-g` （GB単位）などで指定できます。 `-h` を選ぶと、空気を読んで出力してくれる。

```sh
$ free -m
             total       used       free     shared    buffers     cached
Mem:         15473      14588        885          0        150       9073
-/+ buffers/cache:       5364      10109
Swap:            0          0          0
```

### buffers と cached について

`buffers` はディスクの中で最近アクセスされた領域のファイルシステムメタデータを保存している。
`cached` は最近アクセスされたファイルコンテンツを保存している。

### 2行目(-/+ buffers/cache:) について

この行はメモリ使用率の測定に便利。  

`used` は `buffers` と `cached` を <strong>引いた</strong> もの、
`free` は `buffers` と `cached` を を <strong>足した</strong> ものを表す。

システムにメモリを追加すべきかを判断するときにはこの行を見る。

### 3行目(Swap)について

そもそものスワップ領域についてはこちらを参照。
https://begi.net/read/base/09.html

システムにスワップパーティションやファイルがあるならこの値を追跡する。

スワップ使用量が増加した時のアラートは、アプリケーションがメモリに敏感な場合にメモリ使用量が増加していることを示す重要な指標になる。

# iostats: - ディスクパフォーマンスを対話的に見る

`iostats` コマンドはディスクパフォーマンスを対話的に見ることができる。

```sh
$ iostat -x
Linux 4.9.77-31.58.amzn1.x86_64 (見せられないよ) 	05/15/2019 	_x86_64_	(8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.07    0.00    0.14    0.05    0.00   98.74

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
nvme0n1           0.00     2.07    0.01    4.06     1.75  1174.84   289.14     0.07   16.19   1.14   0.46
```

`await` はディスクが処理を行うようリクエストを発行するのにかかった平均時間。
`%util` はディスク使用量を示しており、この値は100%以下に保ちたいところ。

# uptime: ロードアベレージを見る

ロードアベレージ(load)は、CPUに処理してもらうのを待っているプロセエスがいくつあるのかの指標。1分の平均、5分の平均、15分の平均の3つの値で表される。

```sh
$ uptime
 18:55:55 up 77 days, 16:59,  1 user,  load average: 0.00, 0.02, 0.00
```

コアあたりのロードが1.0なのは許容範囲。
15分平均のロードが500を超えていても顧客が問題なく利用できるシステムも存在するので、何の影響もなければ、ロードが高いのは問題にはならない。

ただし、ロードアベレージは代理指標(proxy metric)として役立つという例外がある。つまり異常に高いロードアベレージは、他の問題の存在を示すことがある（そうでない場合もある）ということ。

# 感想

こういった生々しい指標を確認できるコマンドを知っていることは非常に重要だとおもう。

# おわり