OmniAICreator/Qiita-1.07M huggingface dataset:
【jQuery】イメージマップでマウスオーバー効果をつくる方法

画像の一部にリンクなどを描いたときに、イメージマップを使うことがあります。マップ部分にマウスオンした時に効果を出すため、画像をスワップさせるスクリプトをご紹介します。jQueryを利用します。

![hover.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520138/134d9ec4-a8f5-749a-f1ec-e7fb3e976caa.png)

```javascript:JavaScript
  $(function(){
	$('area').each(function(){
  		var usemap = $(this).parent().attr('name');
  		var image = $('img[usemap="#' + usemap + '"]');
    	var src_off = image.attr('src');
    	var src_on = src_off.replace('_off','_on');
  		$(this).hover(function(){
    		image.attr('src',src_on);
		},function(){
    		image.attr('src',src_off);
    	});
    });
  });
```
```html:HTML
<img src="img/visual_off.png" usemap="#ImageMap" alt="" />
<map name="ImageMap">
    <area shape="rect" coords="219,445,878,557" href="#form" alt="" data-scroll />
</map>
```

##スクリプトの解説

スワップする画像はファイル名の最後に _off がついている画像と _on がついている画像を用意します。

```html:HTML
<img src="img/visual_off.png" usemap="#ImageMap" alt="" />
```
JavaScript内では、まず、area タグが付いているもの全てについて、name属性から、関連するusemapのついた画像を探しています。

```javascript:JavaScript
  		var usemap = $(this).parent().attr('name');
  		var image = $('img[usemap="#' + usemap + '"]');
```
その画像のsrcから、画像の場所を受け取り、それをOFFの場合の画像とします。
末尾をONに差し替えたものをONの画像として扱います。

```javascript:JavaScript
    	var src_off = image.attr('src');
    	var src_on = src_off.replace('_off','_on');

```
ホバーの第1引数に、ONの画像を、第2引数にOFFを入れて完成です。

```javascript:JavaScript

  		$(this).hover(function(){
    		image.attr('src',src_on);
		},function(){
    		image.attr('src',src_off);
    	});

```
TechAcademyが無料公開している「HTML・CSS入門講座」を受講する～CSS第3回～

# アジェンダ
* CSSの値の表現方法
    * サイズ
    * 色
    * 単語で定義されている値
* 実践

# CSSの値の表現方法
## サイズ
### 絶対サイズ
<dl>
  <dt>in</dt>
  <dd>インチ</dd>
  <dt>mm</dt>
  <dd>ミリメートル</dd>
  <dt>cm</dt>
  <dd>センチメートル</dd>
  <dt>pt</dt>
  <dd>ポイント</dd>
  <dt>pc</dt>
  <dd>パイカ</dd>
</dl>
1in = 25.4mm = 2.54cm = 72pt = 6pc

### 相対サイズ
<dl>
  <dt>px</dt>
  <dd>ピクセル。表示される画面の画素の数。</dd>
  <dt>ex</dt>
  <dd>小文字のxの高さを基準としたサイズ。</dd>
  <dt>em</dt>
  <dd>一文字分の高さを基準としたサイズ。</dd>
  <dt>%</dt>
  <dd>基準に対しての割合のサイズ。</dd>
</dl>

## 色
### 定義された色名
W3Cによって定義された色は、色名で指定することができる。
黒は```black```、白は```white```、など。
> 参考 : [とほほの色入門・色見本](http://www.tohoho-web.com/wwwcolor.htm)

### RGB(10進数)
rgb(赤の値, 緑の値, 青の値)で指定する。
黒は```rgb(0, 0, 0)```、白は```rgb(255, 255, 255)```、など。

アルファチャンネルを使用することもできる。
rgba(赤の値, 緑の値, 青の値, 透明度)で指定する。

### RGB(16進数)
```#``` を先頭に付け、赤の値,緑の値,青の値の順に16進数を指定する。
黒は```#000000```、白は```#ffffff```、など。

### HSL
hsl(色相, 彩度, 明るさ)で指定する。

アルファチャンネルを使用することもできる。
hsla(色相, 彩度, 明るさ, 透明度)で指定する。


## 単語で定義されている値
### プロパティに対して定義されてた値
プロパティによっては、定義された単語を値として使用することができる。
<dl>
  <dt>align(文書の揃え位置)</dt>
  <dd>left(左寄せ) / center(中央寄せ) / right(右寄せ)</dd>
  <dt>vertical-align(行の幅に対する位置)</dt>
  <dd>top(行の上) / middle(行の中心) / bottom(行の下)</dd>
  <dt>margin(余白)</dt>
  <dd>auto(自動で調節する)</dd>
  <dt>...</dt>
  <dd>その他多数</dd>
</dl>

### url
URLを表すときに使用することができる。
```url("http://example.com")```

# 実践
上記の内容を用いて、以下のindex.htmlとstyle.cssを作成した。

```html:index.html
<!DOCTYPE html>

<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <link type="text/css" rel="stylesheet" href="./style.css">
    <title>属性の値</title>
  </head>
  <body>
    <h1>文字の色</h1>
    <p class="rgb">rgb()を使用したブラウン。</p>
    <p class="hex">16進数を使用したブラウン。</p>
    <p class="def">定義された単語を使用したブラウン。</p>
    <h1>文字のサイズ</h1>
    <p class="inch">1インチ。</p>
    <p class="mm">20ミリメートル。</p>
    <p class="large">largeで定義されたサイズ。</p>
  </body>
</html>
```

```css:style.css
p.rgb {
  color: rgb(165, 42, 42);
}

p.hex {
  color: #a52a2a;
}

p.def {
  color: brown;
}

p.inch {
  font-size: 1in;
}

p.mm {
  font-size: 20mm;
}

p.large {
  font-size: large;
}
```
これをWebブラウザに表示させるとこんな感じ。
![index.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648214/adff5690-bcb6-dede-4d28-2db786ab408e.png)


# おわりに
今回は、値に使用するデータを学んだ。
フォントサイズや色合いは、設計というよりデザインなので、また別の知識が必要だな～。

次 >> [ここ](https://qiita.com/MakoMakoMakotsu/items/0b9c1e6245328e47b7b9)

## 参考
[3-1 サイズの指定方法（CSSの値）](https://www.youtube.com/watch?v=5xO24sKFs5g&list=PLjw-30bsJNVVa4PuUseJ5YPN1K2dJr041&index=13)
[3-2 単語による指定方法（CSSの値）](https://www.youtube.com/watch?v=FY1gelshumE&list=PLjw-30bsJNVVa4PuUseJ5YPN1K2dJr041&index=14)
[3-3 色の指定方法（CSSの値）](https://www.youtube.com/watch?v=6obAUuQ8E-Y&list=PLjw-30bsJNVVa4PuUseJ5YPN1K2dJr041&index=15)
Main.java

mport java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    
    
    System.out.print("何人分の情報を入力しますか：");
    int n = scanner.nextInt();
    
    int maxAge = 0;
    int totalAge = 0;
    for(int i = 0; i < n; i++){
      System.out.println(i + 1 + "人目");
      
      System.out.print("名前：");
      String firstName = scanner.next();
      
      System.out.print("名字：");
      String lastName = scanner.next();
      
      System.out.print("年齢：");
      int age =scanner.nextInt();
      
      if(age >maxAge){
        maxAge = age;
      }
      totalAge += age;
      
      System.out.print("身長(m)：");
      double height = scanner.nextDouble();
      
      System.out.print("体重(kg)：");
      double weight = scanner.nextDouble();
      
      Person.printData(firstName,lastName,age,height,weight);
      }
      System.out.println("最高年齢は"+maxAge+"歳です");
      System.out.println("平均年齢は"+totalAge/n+"歳です");
    }
  
  }
素人がiPhoneアプリを作った話＜ことの終わりと再開発＞

#結論
Appleのプラットフォームを使って販売することをやめ、独自の方法で開発し、Web上に会員制で公開するということにしました。
#理由
理由はふたつあります。
ひとつめは共依存関係脱出サポートアプリ「Pom Squad」は商業ベースのアプリではなく、社会貢献のボランティア要素の強いアプリで、商業的な傾向の強いプラットフォームを使う意味が失われていること。
もうひとつは、自分の考え方が時代の潮流とはあまり合っていないのでそこを貫こうとすると、お互いに共感できる人に出会うのが奇跡に近いと悟ったことです。
最後のひと押しとして、iOS13に合わせたバージョンアップができないとストアから削除するということなので、もういいやと思ったのと、ランサーズでいい出会いがなかったことがあります。
#時代の潮流と合わない考え〜こだわり〜
エンジニアが見つからなかったことは、私のこだわりのせいでもあり、それは以下の引用が代弁してくれている気がします。
>*スーザン・ソンタグ『良心の領界』　序文より*
>(前略)
>　この社会では商業が支配的な活動に、金儲けが支配的な基準になっています。商業に対抗する、あるいは商業を意に介さない思想と実践的な行動のための場所を維持するようにしてください。みずから欲するなら、私たちひとりひとりは、小さなかたちではあれ、この社会の浅薄で心が欠如したものごとに対して拮抗する力になることができます。
>(中略)
>　傾注すること。注意を向ける、それがすべての核心です。眼前にあることをできるかぎり自分のなかに取り込むこと。そして、自分に課された何らかの義務のしんどさに負け、みずからの生を狭めてはなりません。
>　傾注は生命力です。それはあなたと他者をつなぐものです。それはあなたを生き生きとさせます。いつまでも生き生きとしてください。
>　良心の領界を守ってください……。

#再開発
私程度の能力でできることと、無料で提供するために安価であること、アクセスが容易であることが次のツール選びの要点です。
基本的にはAPIとRSSを使ってWordPress上にあるコンテンツを引っ張っているので、そのままWordPressを使ったアプリに切り替えようと考えています。
ただ、この際だからPHPを勉強して独自のWebアプリを作ることも考慮しています。
とりあえず、学習コストをもう一度かけてPHPを学んでみて、Webアプリを自作するのに最も適した方法をある程度自分の能力と照らし合わせてから決めようと思います。
アドバイスなどあれば大歓迎です！
SNMPことはじめ


# はじめに
「SNMP ってなあに？」という人向けに、SNMP についてざっくりと解説します。より深い知識を得るために、初めに押さえておきたいことについてまとめています。

# SNMP is 何
SNMP とは、簡易ネットワーク管理プロトコル（Simple Network Management Protocol）というプロトコルの一種です。その名が示す通り、ネットワーク機器を管理するためのプロトコルです。161番と162番のUDPポートで通信します。[^1]

[^1]: このため、エージェント～マネージャー間は当該の通信を許可する必要があります。

現在、SNMP には v1, v2c, v3 の3種類のバージョンがあります。新しいバージョンほどセキュリティ面が強化されています。v3 の利用が推奨されており、v1 は脆弱性が指摘されているため非推奨、v2c が最も普及しています。

規格仕様については RFC で公開されています。

# 用語
## エージェント
管理対象の機器を指します。ネットワーク機器、サーバ、ソフトウエア等に相当します。

## マネージャー
エージェントを管理する側を指します。Nagios や Zabbix 等の監視ツールに相当します。

# SNMP でできること
## 1. 情報を収集する（アクティブ）
マネージャーからエージェントに問い合わせて、エージェントの情報を収集することができます。インタフェースの通信量やCPU使用率を定期的に収集して、必要なときに照会する、等の使い方ができます。

Linux コマンドでは、マネージャーから `snmpget` コマンドや `snmpwalk` コマンド等を使ってエージェントに問い合わせます。

## 2. 情報を収集する（パッシブ）
エージェントが SNMP Trap という情報を送信し、マネージャーがキャッチすることで情報を収集することができます。例えば、あるインタフェースが LinkDown したら SNMP Trap を送信するようにエージェントを設定し、マネージャーは SNMP Trap の受信を待ち受けます。

SNMP Trap でやり取りする情報は、例に挙げたようなステータス変化など、ややイレギュラーな内容が多い印象があります。

Linux コマンドでは `snmptrap` コマンドで SNMP Trap を送信することができるので、マネージャー側の動作確認に用いることができます。

## 3. 情報を操作する
マネージャーからエージェントの情報を書き換えて、エージェントの機器を制御することができます。制御できる情報は、書き込み権限のある情報に限られます。[^2]

[^2]: 前述のインタフェースの通信量やステータスは読み取り専用なので、マネージャーから書き換えることはできません。

Linux コマンドでは、マネージャーから `snmpset` コマンドを使って操作することができます。

# OID と MIB
SNMP の情報は MIB によって定義されており、OID を指定して収集・操作します。

## OID
OID（Object IDentifier）とは、各情報に対して割り当てられている一意な番号です。例えば「インデックス番号[^3]n番のインタフェースの受信バイト数」を示す OID は `.1.3.6.1.2.1.2.2.1.10.n` です。
マネージャーがエージェントに問い合わせる際に OID を併せて付与することで、指定の情報を収集します。また SNMP Trap の OID から、エージェントからどのような情報が送られてきたのか知ることができます。

[^3]: エージェント内部で各インタフェースに対して割り当てられている一意な番号です。例のように、インデックス番号と実際のインタフェースとの関連付け情報を事前に確認する必要があるケースがあります。

OID の内容は、後述の MIB ファイルで定義されています。

## MIB
MIB（Management Information Base）とは、前述の OID の情報群です。MIB は木構造になっており、OID そのものが構造内の位置を示しています。この構造は「MIB ファイル」というファイルで定義されています。

MIB ファイルには、各 OID が何を意味するのかという説明が定義として書かれています。OID を知っていれば情報そのものは収集できますが、その情報が何を意味するのかは、MIB ファイルの定義がなければ解釈することができません。

MIB は「標準 MIB」と「独自 MIB[^4]」に大別できます。
標準 MIB は一般的な情報であり、エージェントによって情報の内容が変わりません。これに対して独自 MIB は、標準 MIB 以外のものを指し、主にはエージェントのベンダーが独自に定義した OID 群を指す場合が多いです。IANA に申請することで、指定の OID 以下は申請したベンダーが自由に定義することができます。[^5]
ベンダーが定義した OID は MIB ファイルとしてエージェントの機器に同梱したり、マネージャー向けに配布されたりします。

[^4]: 拡張 MIB、プライベート MIB、ベンダー MIB 等とも呼ばれます。
[^5]: 例えば `.1.3.6.1.4.1.9` 以下は Cisco Systems が定義した OID です。

# 参考
- [Net-SNMP](http://www.net-snmp.org/)
- [RFC 1157 - Simple Network Management Protocol (SNMP)](https://tools.ietf.org/html/rfc1157)
- [Private Enterprise Numbers - IANA](https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers)
Github actionsでタグを取得する方法

# 前談

github actionsのcheckoutの仕様変更で、 `unshallow`しないと履歴が取れなくなりました。
なので、最新の情報だけではなく過去の履歴が欲しい場合はこうします。

```yaml
on:
  push:
    branches:
      - master
jobs:
  versioning:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Unshallow
        run: git fetch --prune --unshallow
```

# 今回の話

tagの一覧もほしい場合は先程のでは取れません。欲しい場合は、オプションで`unshallow`と一緒に`tags`もつけてあげます。

> 2020年の3月か4月ぐらいまではオプション追加しなくてもきちんと動いてたんだけど、gitのバージョンの問題か、checountの変更かわかりませんが、取れなくなりました。

```yaml
on:
  push:
    branches:
      - master
jobs:
  versioning:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Unshallow
        run: git fetch --prune --unshallow --tags
```

# Appendix

同じところではハマった人のissue... かなしい...
https://github.com/actions/checkout/issues/206
ERROR! MySQL server PID file could not be found!

```
asatokensei@MacBook-Air memopy % mysql.server start
Starting MySQL
......
.^C
asatokensei@MacBook-Air memopy % mysql.server stop 
 ERROR! MySQL server PID file could not be found!

asatokensei@MacBook-Air memopy % ls -la /usr/local/var/mysql/MacBook-Air.local.pid
ls: /usr/local/var/mysql/MacBook-Air.local.pid: No such file or directory

asatokensei@MacBook-Air memopy % mysql.server status
 ERROR! Multiple MySQL running but PID file could not be found (14996 15095 )
asatokensei@MacBook-Air memopy % ps ax | grep mysql
14996 s001  S      0:00.03 /bin/sh /usr/local/Cellar/mysql@5.7/5.7.29/bin/mysqld_safe --datadir=/usr/local/var/mysql --pid-file=/usr/local/var/mysql/MacBook-Air.pid
15095 s001  S      0:05.78 /usr/local/Cellar/mysql@5.7/5.7.29/bin/mysqld --basedir=/usr/local/Cellar/mysql@5.7/5.7.29 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql@5.7/5.7.29/lib/plugin --log-error=MacBook-Air.err --pid-file=/usr/local/var/mysql/MacBook-Air.pid
18863 s001  R+     0:00.00 grep mysql
asatokensei@MacBook-Air memopy % kill 14996
asatokensei@MacBook-Air memopy % kill 15095
asatokensei@MacBook-Air memopy % ps ax | grep mysql
18876 s001  S+     0:00.01 grep mysql
asatokensei@MacBook-Air memopy % mysql.server status
 ERROR! MySQL is not running
asatokensei@MacBook-Air memopy % mysql.server start 
Starting MySQL
. SUCCESS! 
asatokensei@MacBook-Air memopy % mysql.server status
 SUCCESS! MySQL running (18991)
```

https://qiita.com/avicii2314/items/cbe938339cb80f59f5a5

https://www.atmarkit.co.jp/ait/articles/1603/28/news022.html

https://qiita.com/YamKenta/items/a33499a7db7946a43381
timesyncdのFallbackNTPは「予備サーバー」ではない

# timesyncdのFallbackNTPは「予備サーバー」ではない

## 環境
Ubuntu 20.04LTS(デスクトップ版)などtimesyncdで時刻合わせをしているOS。

## 要約
`FallbackNTP`の設定は`NTP`に「アクセスできない」時**ではなく**、`NTP`が「定義されていない」時にのみ使用される。

## FallbackNTPを設定しても使用されない?
Ubuntu(デスクトップ版)は18.04以降、時刻合わせにtimesyncdを使うようになっているが、`/etc/systemd/timesyncd.conf`の設定項目に`FallbackNTP`というものがあり大抵の解説サイトで「予備サーバー」といった説明がされている。

`NTP`の設定方法がサーバーをスペース区切りで複数記載できるようになっていることもあり、ntpdの動作になまじ詳しかったりすると以下のような動作をしていると思い込むかもしれない。

+ `NTP`にリストされているNTPサーバー「すべて」にアクセスして得られた時刻を総合して現在時刻を設定する。
+ 上記が失敗した時に`FallbackNTP`のリストを`NTP`のリストの代わりに使用する。

自分も、そう信じて`NTP` `FallbackNTP`を設定していたのだが、`NTP`のサーバーにアクセスできない場合でも`FallbackNTP`が使用されず時刻同期されないままになるので納得できないでいた。

## 調査結果
探してみると同じ勘違いをしている人が…いた。

+ [Not going to servers mentioned at FallbackNTP for systemd-timesynd.service](https://github.com/systemd/systemd/issues/15644)

これによると、

+ `FallbackNTP`はNTPサーバーが「定義されていない」時に使用され、`NTP`にリストされているサーバーにアクセスできなくても「定義さえされている」なら`FallbackNTP`は使用されない。
+ `NTP`のリストは先頭から順に「一つずつ」アクセスして一つ成功すれば以降はそのサーバーが使用される。

ということらしい。[timesyncd.confの説明](https://www.freedesktop.org/software/systemd/man/timesyncd.conf.html)から、この動作を読み取れなかったのは先入観のせいなのだろうか。

## 設定の仕様
+ 残念ながらntpdのように複数のNTPサーバーから信頼できる時刻を割り出して設定するという使い方はできない。
+ 複数のNTPサーバーを指定し、優先したいNTPサーバーがなく、一つのNTPサーバーに固定されても構わないのであれば`NTP`にリストする。
+ NTPサーバーに優先順位があり、毎回(あるいは定期的に)先頭から順にNTPサーバーをチェックする(こうしたい場合が一番多いのではなかろうか)**という使い方は出来ない。**
+ `FallbackNTP`は`NTP`が空の時以外意味を持たないので無意味に思えるが、唯一違うのは、[systemd.networkで定義](https://www.freedesktop.org/software/systemd/man/systemd.network.html#NTP=)したNTPサーバーと`NTP`は対等であるのに対し、`FallbackNTP`は劣後するという点くらいに思える。
+ 明示的に書かれていないが`NTP`を空にしてsystemd.networkでの定義ごと「リセット」し、`FallbackNTP`に対象NTPサーバーをリストするというのが`FallbackNTP`の使用法だと思われる。
+ Ubuntuのデフォルトではsystemd.networkでNTPの設定をすることはないので、事実上両者に差はないということになる。

## 動作検証
`NTP`を空にして`FallbackNTP`に対象NTPサーバーをリストする設定で動作を確認した。
Ubuntu 18.04にはないが、20.04では`timedatectl timesync-status`というコマンドが使える。

+ `NTP` `FallbackNTP`両方を空にするとUbuntuの場合OSのデフォルト値`ntp.ubuntu.com`が有効になる。
+ `NTP`に不正なアドレスを入れた場合でさえ`FallbackNTP`が有効になることはない。
+ 一旦アクセス可能なNTPサーバーが見つかれば、リストでそれより前に載っているNTPサーバーにアクセスできるようになっても、サーバを変更することはない。
+ 再起動するか使用中のNTPサーバーがアクセス不能になると、リストの最初から読み直す。


## 考察
他の人の記述を見ても自分と同じような勘違いを前提にした設定内容を記載している人は結構いるように見えた。

一方、Ubuntuのデフォルト設定はコメントアウトされた状態ながら、

```
#NTP=
#FallbackNTP=ntp.ubuntu.com
```
となっており、冒頭の勘違いの解釈でも矛盾はないが、上記を踏まえて読むとデフォルト値が`NTP`でなく`FallbackNTP`の方に定義されているのは、systemd.networkでの定義によらずNTPのデフォルト値を定めるためと深読みすることもできる。

実際のところNTPサーバーにアクセス出来ないという事態がめったに無いので問題になることは稀とは思うが、以前から頭にひっかかっていた疑問が解けた。アクセスできない時の"Fallback"ではなく定義されていない時の"Fallback"であるというのは、名前の付け方が非常に紛らわしいのではないかと思った。

また、timesyncdの設定をsystemd.networkの設定に「優先させる」ために"Fallback"に設定を記載するというのも理解に苦しむが、これについては明示的に書かれた使用法ではないので自分がさらに勘違いしている可能性もあるとは思う。

## 改訂履歴(表現の修正などは除く)
+ 2020/6/20: 初版
Windows に git をインストールする手順

インストーラが英語なので一通りの画面説明を掲載しています。

## git のインストール

git コマンドが実行できない場合は、下記サイトから git をダウンロードしてインストールします。
https://git-scm.com/downloads

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/3a4b9249-8045-1038-be66-af882d9fb0b0.png)

画面の中の Download ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/3ca6f4b9-2bfe-7c06-95e6-8b6a9fb50ec2.png)
ダウロードされたファイルを実行します。

----
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/9bbe655a-7652-d12f-d328-ae094f3509d8.png)
ライセンスを確認し、問題なければNextボタンを押します。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/064ab98c-74ea-0688-7d3b-c718b568c277.png)
インストール先を聞いています。そのままNextボタンを押します。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/3aad6727-fd1f-1e28-1ed2-769c7d63e599.png)
インストールするコンポーネントを聞いています。そのままNextボタンを押します。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/dc0c529d-15c6-b28b-e4cf-bcfd592266e6.png)
スタートメニューに作成する名前を聞いています。そのままNextボタンを押します。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/a37a284f-6416-cf4d-e16c-03c1dceed3cf.png)
関連づけるエディタを聞いています。
VisualStudioCodeをインストールしていれば Use Visual Studio Code as Git's default editor を選択してNextボタンを押します。

> [VisualStudioCodeのインストール手順(Windows)](https://qiita.com/nakazawaken1/items/a9aab1b7e8075b3c5867)

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/0cc9ea66-7eaa-da7a-f8f6-e73acbb9cf35.png)

パス設定についてを聞いています。そのままNextボタンを押します。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/6d94a95d-7e3b-42b2-e57e-9ab5d34c7e70.png)
HTTPS通信に使うライブラリを聞いています。そのままNextボタンを押します。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/7cfd6590-4a8d-e913-d28e-b4a22fb2a892.png)

改行コードの自動変換について聞いています。自動変換はトラブルの元なので、変換しない Checkout as-is, commit as-is を選択し、Nextボタンを押します。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/c2ed5067-ed31-f5fd-1cce-d1e8ff0ed4f2.png)

Git Bashを使うときのターミナルを聞いています。そのままNextボタンを押します。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/57707dde-6776-2d49-2abc-6891753e53d1.png)
git pull 時の挙動を聞いています。そのままNextボタンを押します。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/1f508a1f-51c1-9065-b0a9-16b5c45b72a3.png)

その他設定を聞いています。そのままNextボタンを押します。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/cdbc7a69-7db9-3fbc-97d7-6033eb11f405.png)
試験的機能について聞いています。そのまま Install ボタンを押します。

----

しばらく待つとインストールが完了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/470199a6-1988-bde5-d1f6-c80689b0e68d.png)
View Release Notes はリリース内容を表示するものです。
そのままNextボタンを押せばブラウザが起動し表示されます。
チェックを外して、Nextボタンを押せば、終了です。
Apache Antとは何だろう？

# 第１章　Apache Antとは？
Antとは一体何をするツールなのか。
どういった特徴があり、どんなメリット、デメリットがあるのか。
ビルドツールの歴史におけるAntの位置付けとは。
といった、Antの概要について触れていきたいと思います。

## 概要
Antとは、Javaをベースに作られたビルドツールで、Jakartaプロジェクトの一部です。

一般的に、ソフトウェアはソースファイルのコンパイルやリソースの配置、設定ファイルの記述
など、さまざまな処理を経てプロダクト(最終成果物)となります。
これらの処理を適切な順序で進めなければ、動作する成果物が構築されないことは多いです。

これらのビルド作業は、プロダクトの規模が小さいうちは手順も少なく、単純なため手作業で
行ってもそこまでの負担は生まれませんが、規模が大きく、手順が煩雑になるにつれ、
手作業によるビルドには時間もかかり、ヒューマンエラーが発生しやすくなっていきます。
それらの問題を解決するため、ファイル間の依存関係の解決やファイルの配置などを自動的に
行ってビルド作業の時間を短縮化し、人の手を介入させないことでヒューマンエラーを無くそう
という考えのもと発達しているのがビルドツールです。

## ビルドツールの歴史

ビルドツールの起源とも言えるツールに、Makeというものがあります。
Makeはunix上で広く用いられており、シェルコマンドが使えるので柔軟なビルドが可能です。
その反面、シェルコマンドを使うので環境の依存性が高く、コマンドを知らない人には文法が
わかりにくかったりと、いくつかの欠点もありました。

Antはmakeの欠点を補う形で派生しているので、以下の仕様により各問題点を解決しています。
AntはJavaで記述されており、Javaの”Write once, Run anywhere.”
の考えに基づいて、Javaが動作する環境であれば利用することができます。
また、ビルドの際に実行するコマンド（Antではタスクといいます)もXML形式で記述するため、
プラットフォームに依存しない形で記述することができます。

そんなAntにも、欠点があります。それは、ビルドスクリプトが長くなりやすく、
JARファイルなどの依存ファイル間の依存関係の解決が自動化されていないことです。
こういった点を解決するために、MavenやGradleといった後続のビルドツールが発展しました。
これらのビルドツールの特徴については、各種専門書籍などを参照してください。

## まとめ

### Antとは何か

Javaで書かれたビルドツール。
そのため、プラットフォームに依存しない利用が可能。
ビルドスクリプトの記述が一般的に広く利用されているXML形式のため、
Antのためだけの文法を覚える必要がない。

### メリット

- プラットフォームに依存しない利用が可能であること
- ビルドスクリプトがプラットフォームに依存しないこと

### デメリット

- ビルドスクリプトが冗長化しやすい
- ライブラリの依存関係を手動で解決しなければならない

---
[メインページへ戻る](https://qiita.com/maple_syrup/items/e2abc9a3bce2808c3f99)
Apache Antの環境構築

# 第２章　Apache Ant の環境構築
Antの環境構築は複雑ではありません。
手順というよりは、バージョンの選択に重点を置き、解説したいと思います。

## Ant のバージョンについて

ツールは、学習に使うバージョンによって「今となっては使わないもの」
の学習に時間を取られてしまうことも。
このトピックでは、状況に適したバージョンを選ぶためのヒントになるような情報を
いくつかあげたいと思います。

### 学習書籍などに合わせる
ネット記事や書籍で学習すると、使用するバージョンが明記されていることが多いと思います。
バージョンによって無効な記述などもあったりするので、とりあえず学習をスムーズに進めたい
という人はバージョンを合わせるのが無難です。

### あえて最新バージョンを使用する
前述ではとりあえずバージョンを合わせると書きましたが、あえて最新バージョンを利用すると
学習と同時に最新バージョンでは使えなくなっているものを洗い出すことができます。
こうすることで、わざわざリリースノートを追わなくても差分箇所がエラーで出てくるので、
一つの学習のアプローチとして有効だと思います。

> 補足情報として、2020年5月現在のAntのリリース状況について軽く触れておきます。
Antは現在、2つのマイナーバージョンの開発が同時に進行しています。
既存機能のバグ修正など、ブラッシュアップ用の1.9.x系と、新規機能追加などを
活発に行う1.10.x系です。(1.9.x系の方が安定していると言えます)
また、2000年代初頭は3年周期くらいでマイナーバージョンの更新が行われて
いましたが、2013年3月7日の1.9.0へのバージョンアップ以降、7年もの間、
マイナーバージョンの更新が行われていません。
現状の開発は1.9.x系で安定していると言えるので、とりあえずでバージョンを
選択する人は、1.9.x系で問題ないと思います。

### IDEが導入しているバージョンを参考にする
ここでは私の環境である、Eclipse 4.5(Mars)を例にしたいと思います。
IDEには大体、有名な各種ツールがプラグインとして組み込まれています。Eclipseでは、
`<Eclipseのホーム>/plugins`直下に各種ツールが配置されているので、ここを確認して
同じバージョンを使います。
(Antは`org.apache.ant_1.x.x.v〜`という**フォルダ**名で格納されています)
すると、実践的な学習をしようとIDEから実行してみたらこのバージョンでは使えなかった！
なんて事態を回避できます。
(Eclipseから、参照するJARファイルを差し替えてバージョンを変更する手もありますが、
デフォルトで入っているバージョンを使った方が色々と楽ですよね。)

### 共通：リリースノートを読む
バージョンを選択したら、一度はリリースノートに目を通すことをオススメします。
各種プロジェクトがバージョンアップされる時、同時にリリースノートが掲載されるはずです。
リリースノートとは、ツールのバージョンアップ毎に発表される資料で、新規追加・削除された
機能や修正されたバグなど、前バージョンからの変更点がまとめられています。
使用するバージョンの直前〜直後のバージョンのリリースノート程度は確認してみましょう。

## 環境構築手順

### バイナリファイルのダウンロード

選択したバージョンのバイナリファイルを、以下のURLからダウンロードしてください。
ダウンロードして解凍したフォルダ群は、任意の場所へ配置します。

最新バージョン：https://ant.apache.org/bindownload.cgi

古いバージョン：https://archive.apache.org/dist/ant/binaries/

### 環境変数の設定
フォルダの配置が完了したら、以下の環境変数を設定します。

- ANT_HOME：Antのフォルダ群を配置した任意の場所
- JAVA_HOME：JDKがインストールされているディレクトリ
- PATH：Antの実行ファイルの場所(ANT_HOME/bin)

### 稼動確認
ターミナル、プロンプトで以下のコマンドを実行し、
バージョン情報が出力されたら環境構築は成功です。

```terminal
$ ant -version
Apache Ant(TM) version 1.9.0 compiled on May 10 2020
```

---
[メインページへ戻る](https://qiita.com/maple_syrup/items/e2abc9a3bce2808c3f99)
Antを独学する下地を作る

# 概要
プログラム関係の学習において、常に初学者を悩ませる
**「守備範囲が大きすぎてどこから勉強すればいいのかわからない問題」**

この記事では、初学者がAntを独学するにあたって押さえておくべき基本の知識についてのみ
触れる事で、Antの独学のスタートのお手伝いができればいいなと思います。

# 事前知識
私は、Antの学習に入る前に、Javaのビルド手順について理解しておくことをオススメします。
Javaで作ったアプリケーションはどういった手順で実行されるのか、それらを理解するには
小さなアプリケーションをCUIのみでビルドし、実行するのが一番だと思います。

私が、JavaのCUIからの実行についてまとめた以下の記事がありますので、
こちらを参考にしていただければ幸いです。

記事へのリンク：[CUIからJavaを実行する](https://qiita.com/maple_syrup/items/c0aa2eacb8f486dc52a8)

# 学習の構成
この記事では、大まかに以下の流れでAntについて知っていきます。

1. Antとはどんなツールなのか、その概要を知る
2. Antを使うための環境構築をする
3. Antを構成する核となる要素と、その関係性を大まかに把握する
4. Antのよく使われる機能を、実際に使ってみる
5. 基礎を抑えたら、次は何が勉強できるのかを考える

# [第１章　Apache Ant とは？](https://qiita.com/maple_syrup/items/180c4cf4abcc85653bcf)

# [第２章　Apache Ant の環境構築](https://qiita.com/maple_syrup/items/130bcf350a6d2ed81bb9)

# [第３章　Apache Ant を構成する要素](https://qiita.com/maple_syrup/items/4ad7ec8e207d2289beac)

# おわりに
当記事でAntの基礎は一通り理解できましたでしょうか。
基礎を理解したら今度は応用。といきたいところですが、ここで一旦、Antを学習する目的を
再確認し、学習を深めるのか、ここで切り上げるのかを判断したほうがいいと思います。

Maven、Gradleなど、Antから派生していった各種ビルドツールのより深い理解のためにAntを
勉強しているのであれば、Antに関する学習は一旦ここまでにし、ビルドツールを使う中でAntの
APIを使いたいと思った時などに適宜Javadocを調べるなどすればいいと思います。

業務でバリバリにAntを使用していて、Antツールの挙動や各種APIに対する理解がより深く求め
られる方は、専門書籍の学習や公式ドキュメントを読むといった勉強が必要だと思います。

この記事が、あなたのAnt学習の一助となれば幸いです。
10進数から２進数に変換する際の注意点

## はじめに
プログラミング初学者です。今回初めて記事を書きます。
今後アウトプットすることを習慣にするため、練習も兼ねて短いものから、徐々に書いていきたいと思います。

今回は、某スキルチェックサイトで勉強している際に少し混乱したので自分の備忘録も兼ね書きます。

## 変換する際の注意点
10進数からn進数、n進数から10進数にそれぞれ変換する場合、使うメソッドが変わります。

## 10進数をn進数に変換する場合　to_sメソッドを使う
to_sメソッドに引数を渡すことでそれぞれ2〜36進数までの文字列をかえしてくます。

```
p 255.to_s(2)    # => "11111111" １０進数 →  ２進数
p 255.to_s(8)    # => "377"      １０進数 →  8進数
p 255.to_s(16)   # => "ff"       １０進数 → 16進数
p 255.to_s(32)   # => "7v"       １０進数 → 32進数
p 255.to_s(36)   # => "73"       １０進数 → 36進数
```
## n進数を10進数に変換する場合　to_iメソッドを使う
先ほどの逆でn進数を10進数に変換したい場合は、to_iメソッドに引数を渡します。

```
p "111000".to_i(2)　 # => 56         ２進数 → １０進数
p "111888".to_i(8)　 # => 73         8進数 → １０進数
p "111fff".to_i(16)　# => 1122303   16進数 → １０進数
p "111vvv".to_i(32)　# => 34668543  3２進数 → １０進数
p "111zzz".to_i(36)　# => 62239103  36進数 → １０進数
```
### 最後に
今後も少しずつですが、記事を書いてアウトプットし私と同じような初学者の方のお力になれたら幸いです。
また、間違っている点などございましたら、遠慮なくご指摘下さい。よろしくお願い申し上げます。
University of the PeopleのMBAコースに入学してみた

#どうして入学しようと思ったのか

10年間働いてきて次のステップに進むために何かもう一度勉強したいなぁと考えていました。海外留学、MBA取得、転職。。。いろいろ考えた中で、コロナで状況も変わり、オンライン大学に魅力を感じ、入学することにしました。
半年くらい前に海外移住をしたので、日本以外の国で学びたいと思うようになりました。University of the Peopleはアメリカの大学ですが、オンラインで学習できるため、多国籍な生徒が在籍しています。また、費用も最低限に抑えられているため、新興国の学生も多いです。
これから勢いを増す新興国の学生とともに、新しい考えたりする機会ができたらなぁと思ってUniversity of the Peopleへの入学を決めました。


#難しかったこと
まだ入学したばかりなので、入学後の授業などはこれからです。入学までに難しかったことをいくつか挙げたいと思います。

- 日本の大学の卒業証明書を集めるのが大変だった。

海外に住んでいてコロナの状況で物流も混乱している中、日本の母校から郵送かFAXで申請書を送ってもらわないと発行できないといわれました。何とか、家族に手続きを手伝ってもらいました。

- MBAの場合は、英語の職務履歴書と推薦状が必要だった。

とくに推薦状は、初めて書きました。下書きを作って推薦者となる上司の方に添削してもらいサインをもらいました。そもそも英語レターの書き方もままならず、どんなことを書いたらいいのか考えたりしていたら、意外と時間がかかりました。

以上の2点をそろえることができれば、入学準備で難しいところは少なかったと思います。費用面でいうと、入学手続きの費用60ドルが必要です。これは難しくはないでしょう。

#最後に
私はIELTSなどの英語のスコアがないため、これから事前の英語基礎コースが始まります。ここで英語がクリアできれば、実際のMBAのコースの授業を受けることができます。
University of the PeopleのMBAコースは国際認証を受けているMBAではありません。そこをどうとらえるかは人によると思います。
また、オンラインで学習を続けて卒業できる人はごくわずかです。多くの人は途中で続かなくなってしまう人がいるのが現実です。
私もどこまで続くかわかりませんが、卒業までたどり着きたいと思っています。
Blazorで文字化けした話

#Blazor初心者(かつ市民ディベロッパー)がいきなり日本語の文字化けで困った話

公式のチュートリアルに従ってBlazorのプロジェクト開始後、「ちょっとタイトル日本語にしてみようか」と思うと、文字化けするかと思います。

コード

```C#
@page "/fetchdata"
@using BlazorApp1.Shared
@inject HttpClient Http

<h1>This is 天気予報</h1>

<p>This component demonstrates fetching data from the server.</p>

@if (forecasts == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <table class="table">
        <thead>
            <tr>
                <th>Date</th>
                <th>Temp. (C)</th>
                <th>Temp. (F)</th>
                <th>Summary</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var forecast in forecasts)
            {
                <tr>
                    <td>@forecast.Date.ToShortDateString()</td>
                    <td>@forecast.TemperatureC</td>
                    <td>@forecast.TemperatureF</td>
                    <td>@forecast.Summary</td>
                </tr>
            }
        </tbody>
    </table>
}

@code {
    private WeatherForecast[] forecasts;

    protected override async Task OnInitializedAsync()
    {
        forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast");
    }
}
```

こんな感じで文字化けしちゃう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486825/1a0ea390-ee2b-095c-1aa7-c824df13f3e4.png)

どうも、ASP.NET.CoreがShift-Jisに対応していない+razorファイルがshift-jisで保存されてしまう場合があるの合わせ技で文字化けするようです。
というわけでrazorファイルをutfとして保存しなおします。

1. Visual Studio で、該当のrazorファイルを選択
2. ファイル→名前を付けて保存
3. エンコード付きで保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486825/c4c997cf-5176-bd69-9476-e8710ae81c23.png)
4. BOM付きのUTFとして保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486825/9c00569a-8576-3a90-dc4b-5025724b7adc.png)

以上で終わりです！
ファイルごとにやる必要があります。。(UTFのファイルをコピーすればもとからUTFだとは思います)

こんな感じで治りました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486825/b0959a20-3906-ba78-0d4e-a4d617bb9240.png)

やったね！
VirtualBoxでのerror解決。終了コード : E_FAIL (0x80004005)

virtualBOxで、仮想環境を開く際に以下のエラーが出たが、日本語の記事がなかったので書きます。

自分の環境はwindows10, virtualBox6.1.10 , 64bitになります。

```
VMMR0_DO_NEM_INIT_VM failed: VERR_NEM_MISSING_KERNEL_API_2 (VERR_NEM_MISSING_KERNEL_API_2).
VT-x is not available (VERR_VMX_NO_VMX).
 
終了コード : 	E_FAIL (0x80004005)
コンポーネント: 	ConsoleWrap
インターフェース: 	IConsole {872da645-4a9b-1727-bee2-5585105b9eed}
 ```

以上のようなエラーメッセージが発生しました。

次の方法で解決しました。

以下の場所にアクセスします。
コントロールパネル→プログラムと機能→windowsの機能の有効化または無効化

次の二つのプログラムを無効化します。
Hyper-v , Containers 

以上で解決しました。
libcxxx + llvm-mingw(clang) では math constants が使えない模様

`_USE_MATH_DEFINES` しても, `M_PI` が定義されない.

https://github.com/llvm/llvm-project/blob/master/libcxx/include/math.h#L1515

MSVC コンパイラ限定のようです.

`M_PI` などはあまり推奨されないので, 自前コードであれば自前で定義しましょう.
C++11 以降であれば constexpr を使うか, C++20 からであれば `std::numbers::pi` が使えるようになります 

https://stackoverflow.com/questions/49778240/does-c11-14-17-or-20-introduce-a-standard-constant-for-pi
MYSQL と RAILSの接続が上手くいかなかった

#問題点

Rails db:createが上手くいかなかった。

```
$ bundle exec rails db:create
```
すると、以下のエラ〜メッセージが。

```
rails aborted!
LoadError: dlopen(/Users/naganoyuki/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib
  Referenced from: /Users/naganoyuki/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/naganoyuki/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle
/Users/naganoyuki/Desktop/VTQ2/config/application.rb:7:in `<main>'
/Users/naganoyuki/Desktop/VTQ2/Rakefile:4:in `<main>'
/Users/naganoyuki/Desktop/VTQ2/bin/rails:9:in `<top (required)>'
/Users/naganoyuki/Desktop/VTQ2/bin/spring:15:in `require'
/Users/naganoyuki/Desktop/VTQ2/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
(See full trace by running task with --trace)
```

rails sも上手くいかなかった。
bundle installも上手くいかなかった

#解決法

以下のコマンドで、一旦bundle installができるようになった。
（効果があったのかどうかは微妙）

```
$ brew switch openssl 1.0.2s
```

以下のコマンドでrails sと rails db:create　(rails db:migrate)もできるようになった。

```
$ brew info openssl
$ export LDFLAGS="-L/usr/local/opt/openssl/lib"
$ export CPPFLAGS="-I/usr/local/opt/openssl/include"
$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl/include"
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
$ bundle install
```

最後のbundle installが上手くいかなかったら、sudoをつけるべし

```
$ sudo bundle install
```


ワイはこれで解決できました。
【Python】今日から日記はじめます　Atcorder　ABC058-B

本日から日記始めます！

学びの発信と自分への備忘録のため。
少しでも他の方に有益な日記になるよう頑張ります。

とりあえず、目標は3ヶ月以内にAtCorder水色になること！
勉強になった過去問を記していきます。

記念すべき第１問はこちら。

https://atcoder.jp/contests/abc058/tasks/abc058_b

一応、自力でACとれたが、ゴリっとコード書いたので何か汚い。。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658983/4f49341f-961d-990b-d6a9-6ddcde0fdba3.png)

スマートな回答を調べてみるとこちら。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658983/cb6e813b-2bcd-4dc8-f277-752c84b7488d.png)

奇数文字が偶数文字より多い場合の対策で空白文字をあらかじめ入れとくのね。
またオプション引数「end」について学びをゲット。
デフォルトは改行文字になるので明示的に""とすることでfor文をつかっても、連結して文字を出力できることを知った。

リストばっか使う癖治したい。。。
Authentication is required to refresh system repositoriesに悩まされた話

# Authentication is required to refresh system repositoriesに悩まされた話

## 環境
+ Ubuntu 20.04LTS
+ gnome-session-flashbackでMetacityにしている。
+ ヘッドレス + vinoによるVNCリモートデスクトップ環境。
+ 自動でログインするように設定している。
+ 発生した環境とそうでない環境があった。

## 要約
上記環境で表題のダイアログが起動する度に出るなら、セットアップを続行して最後まで直らなかったらディスプレイダミープラグでごまかすのが時間の節約だと思う。

## 現象
モニターに繋いだ状態でUbuntu 20.04をインストールし、gnome-session-flashbackでClassic風のデスクトップにした後、vinoをインストールしてVNCクライアントで接続できることを確認。

ここでディスプレイケーブル(DisplayPort)を抜いてヘッドレス起動すると、"Authentication is required to refresh system repositories"というダイアログが表示される。

メニューからのシャットダウン操作が無効になり、terminalから`shutdown -h now`で停止しようとすると「'poweroff.target'を開始するには認証が必要です。」というダイアログが出現して再びパスワード入力が求められる。パスワード入力すると正常にシャットダウンされる。

物理モニターを接続して起動すると正常化するが、外すと再発する。

xserver-xorg-video-dummyを使っても回避できない。

別のハードウェアでは再現されなかった(ダイアログ表示されたことはあったが、同一現象なのかは不明。色々しているうちに出なくなった)。

## 調査結果
全く同じ現象ではないが似たような現象があった。
以下の順序でリンクを辿っていくと

+ [“Authentication required to refresh system repositories” in Ubuntu 19.10](https://askubuntu.com/questions/1193810/authentication-required-to-refresh-system-repositories-in-ubuntu-19-10)
+ [xRDP – Infamous “Authentication required to refresh system repositories” popup on Ubuntu 19.04 – The correct fix !!](https://c-nergy.be/blog/?p=14051)
+ [xRDP – The Infamous “Authentication Required to Create Managed Color Device” Explained](http://c-nergy.be/blog/?p=12073)

`/usr/share/polkit-1/actions`のフォルダ内にある設定に問題があるらしいという記述に遭遇。

```
<defaults> 
      <allow_any>auth_admin</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
</defaults>
```

で"no"や"auth_admin"となっているところに問題があるらしい。

## 対策
### 正攻法によるソフトウェア的解決は断念
設定を変えて何とかしようと思ったが、ダイアログが出現するタイミングが複数存在することから目に見えないところにまで影響が及んでいる可能性もあり、どこまで変更すれば直るか見当がつかなかったのでソフトウェア的解決を諦めた。

### ハードウェア的解決
調べるとモニターダミープラグというのが1,000円以下のお手軽価格で売っていた。PC本体にHDMIポートもあったのでHDMI用ダミープラグを購入して接続。

#### 結果
無事解決。ただし、ダミープラグを抜くと再発する。

ヘッドレス環境だと解像度が変更できない(xserver-xorg-video-dummyを使用するという手はあるが、今度は起動に失敗した時に物理モニタに出力できなくなるという問題が生じる)という難点があったが、物理モニタと同じように解像度の変更が可能になるというおまけまでついてきた。

### 気づかないうちにソフトウェア的解決していた
その後あれこれやっていたら、ダミープラグなしにしても発症しなくなった。検証したところ、以下で症状が消えたようだ。

+ fstabに設定を加えてcifsでNASをマウントする(file_mode=0777,dir_mode=0777)
+ NASはID, パスワードが設定してあったが症状消失との関係は不明。
+ NASの接続に成功しなくても設定だけで直ったようにも見えたが検証不十分。
+ sudoersの編集とtmpfsのマウントもしたがこれらは症状に影響しない。

### 別のマシンは気づかなくなっていただけだった
+ 別のマシンは最初は類似の症状があったが、上記をしていないのにいつの間にか症状が出なくなった(ヘッドレス起動が誘因と気づかないうちに症状消失したので同じ症状かどうかは不明)。
+ そのマシンで他にしたことと言えば[create_ap](https://github.com/oblique/create_ap)を導入したことと(snap版)Dockerが入っていることくらい。Dockerを入れる前に症状はなくなっていたように思う。
+ (2020/7/5追記)ダイアログは出なくなっていたが、シャットダウンに支障があるという点は同じだった。こちらはアップデートの確認間隔を「しない」にすることが発生条件の模様。

## 結論
+ "Authentication is required to refresh system repositories"ダイアログが起動時に出る症状に悩まされたら、ヘッドレス起動時限定の症状かどうかを確認し、該当するならダミープラグで解決する。
+ 何かしているうちに直ってしまう可能性もあるので、ダミープラグを試す前にセットアップ作業を完遂するという選択肢もあるかもしれない。
+ 環境により原因が異なる可能性があるので、本記事の方法で確実に直るという根拠はない。

## 改訂履歴
+ 2020/6/20: 初版
+ 2020/6/27: 思い出したことを追加。
+ 2020/7/5: もう一台のマシンの症状を記載。
Keysight DMM 34461Aから電圧を読み込んでグラフを描く②

　前回は、測定と読み取りを複数回繰り返しました。
# 接続は前回と同じ
　複数回の測定をDMM内部でまとめて行って、一度に読み取ります。デフォルトのバッファでは32個ほどが読み取れました。入力バッファを増やしましたが、最大値は不明です。`obj1.InputBufferSize = 100000;`

```matlab
%Instrument Connection
% Find a VISA-USB object.
obj1 = instrfind('Type', 'visa-usb', 'RsrcName', 'USB0::0x2A8D::0x1301::MY53216054::0::INSTR', 'Tag', '');

% Create the VISA-USB object if it does not exist
% otherwise use the object that was found.
if isempty(obj1)
    obj1 = visa('KEYSIGHT', 'USB0::0x2A8D::0x1301::MY53216054::0::INSTR');
else
    fclose(obj1);
    obj1 = obj1(1);
end

% Connect to instrument object, obj1.
obj1.InputBufferSize = 100000;
fopen(obj1);
```

  本体です。（参考文献；[Keysight Truevoltシ リ ーズ 操作およ び サービ ス ・ ガイ ド](https://literature.cdn.keysight.com/litweb/pdf/34460-90913.pdf?id=2345839)）
`CONF:VOLT:DC:RANG 1`　直流電圧、1Vレンジ
`VOLT:IMP:AUTO OFF`　DC電圧測定の入力インピーダンスが10MΩ（低くなる）、ONのとき、10V以下のレンジでは10GΩになる。
`SENS:VOLT:DC:ZERO:AUTO OFF`　DC電圧測定およびDC電圧比測定のオートゼロ・モードを無効に
`VOLT:NPLC 0.02` 　積分時間が長いと、変な電圧でサンプリングをしてしまう。
`TRIG:SOUR IMM`　 測定器を「トリガ待ち」状態にすると、トリガが直ちに実行される。
`TRIG:SLOP POS` 　正のスロープ(立ち上がりエッジ)で外部トリガを使用して測定を行う。
`TRIG:COUN 1`　トリガ・カウント を1に。測定回数は、この値×SAMP:COUNの値
`TRIG:DEL:AUTO OFF`　自動トリガ遅延を無効。DCだから？
`TRIG:DEL 0`　自動トリガ遅延なし＝各測定間の遅延は0秒
`SAMP:COUN　n`　測定回数　
`INIT`　ここまでの設定を実行に移す
`FETCh?`は、測定の完了を待機し、すべての使用可能な測定を測定器の出力バッファにコピーする。 読み値はメモリに残る。

　dは、'-5.12355133E-01,+9.25219338E-01,...'　の文字列です。str2num()は、区切り記号、ここではカンマごとに***数値***に変換し、1次元の配列dataになります。
![スクリーンショット 2020-06-20 18.21.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/d9e73cc9-a7c4-392e-6823-23516c30bef7.png)



```matlab
% Instrument Configuration and Control
% Communicating with instrument object, obj1.
fprintf(obj1, '*RST;*CLS');

% Communicating with instrument object, obj1.
fprintf(obj1, ':CONF:VOLT:DC:RANG 1');
fprintf(obj1, ':VOLT:IMP:AUTO OFF');
fprintf(obj1, ':SENS:VOLT:DC:ZERO:AUTO OFF');
fprintf(obj1, ':VOLT:NPLC 0.02');

fprintf(obj1, ':TRIG:SOUR IMM');
fprintf(obj1, ':TRIG:SLOP POS');
fprintf(obj1, ':TRIG:COUN 1');
fprintf(obj1, ':TRIG:DEL:AUTO OFF');
fprintf(obj1, ':TRIG:DEL 0');

data=[];
counter = 100;
message = ":SAMP:COUN " + counter;
fprintf(obj1, message);
fprintf(obj1, 'INIT');


d = query(obj1, 'FETCH?');
data = str2num(d);

x=[1:counter];
plot(x, data,'-o')
title('34461A DC')
xlabel('x')
ylabel('Volt [V]')

```
　前回と同様にDisconnect and Clean Upは変更なしです。

# 実行結果
　電圧源は、ファンクション・ジェネレータTEXIO FGX-2005で、1kHz、1Vp-pを出力しています。
![スクリーンショット 2020-06-20 15.12.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/b9d64ee4-081f-a760-7a6b-92a1614e7b54.png)
【formで引数が2つのもの】rails, form_for / form_with 引数

##【ゴール】


##【メリット】
■　formの理解
■　アソシエーションの理解


##【開発環境】
■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7

##カリキュラムにて

####form_for[@post, @comment].....

ん？

今までは、
form_for(@post）....

引数が一つだったのに、なんで二つも？？？

####理由は引数を2つ渡さないといけないから。

今回の場合は**アソシエーション**されている為

Post : comment = 1 : 多

なので、postのにも、commentにも値を与える必要がある、、、

なので、

####form_for[@post, @comment]になる!!!!

以上、
修正箇所ございましたら、FBください！！

##【合わせて読みたい】

■コメント機能実装について
https://qiita.com/tanaka-yu3/items/93d94b1ede8fb4be2981

■form_withについて
https://qiita.com/tanaka-yu3/items/50f54f5d4f4b8dfe19f3

■メソッド一覧
https://qiita.com/tanaka-yu3/items/89abad875187494bec53
PHP/Laravelを使ってシンプルなWebサービスを作ってみた

# はじめに
PHP・Laravelの勉強をしたので、何かしらの成果物を残そうと思い、シンプルなWebサービスを開発しました。開発時間は10時間程度です。

# サービス内容
ローソンのコンビニ商品をタンパク質で検索します。
商品内容はHPに栄養成分が記載されている揚げ物、コーヒー、ソフトアイスです。
[コンビニプロテイン](https://convenience-store-protein.herokuapp.com/)
<img width="1360" alt="スクリーンショット 2020-06-20 18.05.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619826/a3af20ba-445c-2f72-af0b-7c13f040ef0d.png">


サービスの企画は「サイゼリヤ1000円ガチャ」を参考にさせていただきました。
[サイゼリヤ1000円ガチャをつくってみた(Heroku + Flask + LINEbot)](https://qiita.com/marusho_summers/items/a2d3681fac863734ec8a)

タンパク質で検索するようにしたのは、私が筋トレ好きだからです。
数あるコンビニの中でローソンを選択したのは、商品データを登録するのが楽そうだったためです。
データ登録は商品情報をCSVにまとめて、そのCSVをDBに取り込むという方法で行いました。
(コンビニも選択して検索できるようにする予定でしたが、データ登録が大変なので、諦めました...)

# 開発環境
- PHP
- Laravel
- Clound9
- Mysql(開発環境)
- PostgreSQL(本番環境)
- heroku

# 詰まったところ
- Cloud9のエラー(メモリ不足)
- 型宣言がない

ほぼJavaしか書いたことがないので、型宣言をしないのはなかなか慣れませんでした。
特に、配列を扱っていると思っていたらCollectionだったりして、動かしてみたらエラーになるということがよくおこりました。
(実装をする前は、ajaxあたりが時間がかかるかもしれないと思っていましたが、意外とあっさり動きました。)

# 今後
管理者用のページ(商品登録など)を追加したり、スクレイピングで商品情報を取得するなどできれば良いと思っています。
gulp エラー対処 "Error: Package exports for '.../node_modules/kleur' do not define a valid './colors' target"

ハマったのでメモしておく。
node パッケージをアップデートした後で gulp のタスクを走らせると以下のエラーが発生。

```zsh
[16:40:39] Requiring external module @babel/register
internal/modules/cjs/loader.js:628
  throw e;
  ^

Error: Package exports for '/サイトパス/dev/node_modules/kleur' do not define a valid './colors' target
    // 略
    at Object.<anonymous> (/サイトパス/dev/node_modules/autoprefixer/lib/autoprefixer.js:9:13)
    at Module._compile (internal/modules/cjs/loader.js:1144:30) {
  code: 'MODULE_NOT_FOUND'
}
```

## エラー解決法方

[node を最新版にアップデート](https://qiita.com/oreo3@github/items/622fd6a09d5c1593fee4)することで解決した (v13.6.0 → v14.4.0)。
アップデート後、gulp のタスクを走らせると元のエラーは消えたが、 以下の node-sass のエラーが出た。このエラーは `npm rebuild node-sass` で解決した。

```zsh
[17:41:33] Requiring external module @babel/register
Error: Missing binding /サイトパス/dev/node_modules/node-sass/vendor/darwin-x64-83/binding.node
Node Sass could not find a binding for your current environment: OS X 64-bit with Node.js 14.x

Found bindings for the following environments:
  - OS X 64-bit with Node.js 13.x

This usually happens because your environment has changed since running `npm install`.
Run `npm rebuild node-sass` to download the binding for your current environment.
    at module.exports (/サイトパス/dev/node_modules/node-sass/lib/binding.js:15:13)
    // 略
```
MY SQLでrootパスワードを強制的に変更する  (Mysql 8.0.19)

MYSQLを初めて操作した時、パスワードを忘れてしまいました。
その時、パスワードを強制的に変更して解決しました。

備忘録です。

＜環境＞
MYSQL 8.0.19

# エラー内容

```
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
```

こんなエラーに遭遇しました。

※MYSQLのバージョンが5.6の時は以下リンクの方法で解決していました。

https://qiita.com/Yuki0531/items/6529b82ea04dd31c055d

# やったこと① - パスワードなしでログインする

以下コマンドで、MYSQLを一旦止めます。

```
$ mysql.server stop
```

下記コマンドで、セーフモードで起動させます。

```
$ mysqld_safe --skip-grant-tables &
```

rootでログイン

```
$ mysql -u root
```


# やったこと② - 新しいパスワードを設定する

以下、入力してパスワードを再設定する。

```
UPDATE mysql.user SET authentication_string=null WHERE User='root';
```
```
FLUSH PRIVILEGES;
```

```
exit;
```
Mysqlをいったん終わらせます。

```
mysql -u root
```
もう一回ログイン

```
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'ここにパスワードを記載！！';
```

Query OK　と表示されれば成功です。

以下、入力してMYSQLからログアウトしましょう。

```
quit
```

# 最後に

セーフモードで起動しているMYSQLを停止し、通常モードで起動します

```
mysql.server stop
```
```
mysql.server start
```

SUCESSとでたら成功です。


以下、参考にしたリンクです。

https://stackoverflow.com/questions/50691977/how-to-reset-the-root-password-in-mysql-8-0-11
vuex機能の使い方

#vuexについて
どのコンポーネントからもアクセスが可能なファイル

#vuexを設定する

```
$ vue add vuex

Successfully invoked generator for plugin: @vue/cli-plugin-vuex
```

#stateの設定

```js:Vue/router/src/store/index.js
export default new Vuex.Store({
  state: {
    message: 'Hello',
  },
})
```

```html:Vue/router/src/views/About.vue
<template>
  <div class="about">
    <h1>{{ $store.state.message }}</h1>
  </div>
</template>
```

#mutationsの設定

`@click="increment"`押下で methods の`increment`が動作し
 mutations の`increment(state)`で state の`counter`がincrementする

```js:Vue/router/src/views/About.vue
<template>
  <div class="about">
    <h1>{{ $store.state.counter }}</h1>
    <button @click="increment">プラス</button>
  </div>
</template>

<script>
export default {
  name: 'about',
  methods: {
    increment(){
      this.$store.commit('increment');
    }
  }
}
</script>
```

```js:Vue/router/src/store/index.js
export default new Vuex.Store({
  state: {
    counter: 0,
  },
  mutations: {
    increment(state){
      state.counter++;
    }
  },
})
```

#gettersの設定



```php:Vue/router/src/views/About.vue
<template>
  <div class="about">
    <h1>{{ cartItemsCount }}</h1> //state.cartItemsの配列の個数が表示される
  </div>
</template>

<script>
export default {
  name: 'about',
  computed: {
    cartItemsCount(){
      return this.$store.getters.cartItemsCount;
    }
  }
}
</script>
```

```js:Vue/router/src/store/index.js
export default new Vuex.Store({
  state: {
    cartItems:['お肉', 'お魚', 'りんご', 'みかん']
  },
  getters: {
    cartItemsCount(state){
      return state.cartItems.length;
    }
  },
})
```

#actionsの設定
mutationsをcommitする機能
非同期通信の処理

```php:Vue/router/src/views/About.vue
<template>
  <div class="about">
    <h1>{{ $store.state.counter }}</h1>  //１秒後、カウントアップされる
    <button @click="increment">プラス</button>
  </div>
</template>
<script>
export default {
  name: 'about',
  methods: {
    increment(){
      this.$store.dispatch('increment');
    }
  },
}
</script>
```

```js:Vue/router/src/store/index.js
export default new Vuex.Store({
  state: {
    counter: 0,
  },
  mutations: {
    increment(state){
      state.counter++;
    }
  },
  actions: {
    increment(context){
      setTimeout(() => {
        context.commit('increment');
      }, 1000)
    }
  },
})
```


#vuexヘルパーの設定
`...mapState`を使い`{{ $store.state.message }}`省略し表示する
`mapMutations, mapGetters, mapActions`などimportで処理が可能

```php:Vue/router/src/views/About.vue
<template>
  <div class="about">
    <div>{{ message }}</div>
  </div>
</template>

<script>
import { mapState, mapMutations, mapGetters, mapActions, mapState } from 'vuex'

export default {
  name: 'about',
  computed: {
    ...mapState({
      message: 'message',
    }),
  }
}
</script>
```

```js:Vue/router/src/store/index.js
export default new Vuex.Store({
  state: {
    message: 'Hello',
  },
})
```
pythonの __all__ について

pythonを以前勉強してた時期に、`__all__`について触れていましたが、なんだか最近なんだろうって迷い始めたので、ねんのためメモしておきます。

`__all__`というのは`__init__.py`ファイルに書く内容です。それで、allの中に書く文字列は全部このpythonモジュールがimportされる際にimportされます。

それで`from package import *`だと、このpackageの中にある先ほどの文字列の関数がimportされるわけです。それ以外はimportされません。

ということでした。以上

ちなみにですが、`from package import *`は非常に嫌われる書き方なので、できるだけ使わないように気をつけて

以下は参考にさせていただいた海外コミュニティにて質問された際の答えです。一応概要は上記で書いていますので、気になる方は御覧ください。


>`__all__` is a variable that can be set in the `__init__.py` file of a package.

>The `__all__` variable is a list of strings which defines those symbols that are imported when a program does

>from package import *
>If the `__all__` for this package was set as follows:

>```py
__all__ = ['echo', 'effect', 'reverb']
>```
>then

>```py
>from package import *
>```

>would be equivalent to

>```py
>from package import echo
>from package import effect
>from package import reverb
>```
>Note that using `from <package> import *` is considered bad style in production code, since you have no control over what >you are importing and what your import might shadow.

>for more information see : 6. Modules - Python 3.8.2 documentation
画像中の輝度値の平均・標準偏差を求める

# 目的
画像中の輝度値のヒストグラム、平均・分散を求めた際の備忘録です


# コード

以下の画像のヒストグラム、平均・標準偏差を求めます
lena.png    : テスト用の画像
black.png   : 一様に真っ黒な画像

```py:test.py
import numpy as np
import scipy.stats as sstats
import cv2

def print_stat(fname):

    img_name = fname
    img = cv2.imread(fname,1)
    # Grayscale
    img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    # 一次元配列化
    img = np.array(img).flatten()
    # img = img[img!=255]

    mean = img.mean()             # 平均値
    std = np.std(img)             # 標準偏差
    median = np.median(img)       # 中央値
    mode = sstats.mode(img)[0][0] # 最頻値

    print("---", img_name)
    print("mean    : ", mean)
    print("stddev  : ", std)
    print("median  : ", median)
    print("mode    : ", mode)

print_stat('lena.png')
print_stat('black.png')
```

結果

```
$ python test.py
--- lena.png
mean    :  106.4122314453125
stddev  :  45.733566693923045
median  :  107.0
mode    :  44
--- black.png
mean    :  0.0
stddev  :  0.0
median  :  0.0
mode    :  0
```

# その他

もう少しコマンドラインから使い易くするなら以下

```py:test.py
import sys
import numpy as np
import scipy.stats as sstats
import cv2

args = sys.argv

def print_stat(fname):

    img_name = fname
    img = cv2.imread(fname,1)
    # Grayscale
    img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    # 一次元配列化
    img = np.array(img).flatten()
    # img = img[img!=255]

    mean = img.mean()
    std = np.std(img)
    median = np.median(img)
    mode = sstats.mode(img)[0][0]

    print("name=" + img_name + ",")
    print("mean=" + str(mean) + ",")
    print("stddev=" + str(std) + ",")
    print("median=" + str(median) + ",")
    print("mode=" + str(mode) + ",")

arg1=args[1]
print_stat(arg1)
```

```
$ RET=$(python test.py lena.png)
$ echo $RET
name=lena.png , mean=106.4122314453125 , stddev=45.733566693923045 , median=107.0 , mode=44 ,
$ echo $RET | sed -e 's/.*name=//' |  cut -d',' -f 1 | awk '{printf "%-20s\n",$1}'
lena.png
$ echo $RET | sed -e 's/.*mean=//' |  cut -d',' -f 1 | awk '{printf "%-20s\n",$1}'
106.4122314453125
```

# 参考
[Python3 & OpenCV で画像処理を学ぶ[2] 〜 情報可視化のためのヒストグラム基礎実験](http://optie.hatenablog.com/entry/2018/02/26/183825)
QLab AppleScript: Switch cueList <next cue list-II>

<font color="Red"> **Notice**
I apologize in advance that English is not my first language and Please excuse me for my poor writing.
It is just a suggestion.
-> Written in Japanese: [QLab AppleScript: cueListの切り替え \<next cue list-II\>]( https://qiita.com/kooky_mice/items/01e0965554abb060b143)
</font>

**Activate the specified cue list using script cue in QLab4.**

Read me!!→[About Qlab AppleScript](https://qiita.com/kooky_mice/private/d6feec042be46cf3b390)  

<details><summary><b>Release Note: 2020/4/2</b></summary><div>

- To speed up the operation by the algorithm improvements.

- Changing values setting due to edit the algorithm.

</div></details>

# AppleScript
Enter this Script into script tab in script cue.

```applescript:next_cue_list.scpt
set nextcueList to "Target_cueList"
set selectcueNumber to "Select_CueNumber"

tell application id "com.figure53.QLab.4" to tell front workspace
	set selected to item 1 of (get every cue of (every cue list whose q name is nextcueList) whose q number is selectcueNumber)
	
	go
	
end tell
```


## Setting
1. Enter this script into [Script]Tab of [Inspecta].
1. Set values in this script.
1. Set the cue list name you need activate to **Target_cueList** in `set nextcueList to "Target_cueList"`
1. Compile the script with "Compile Script" button.    
   → The script executable when  *Successfully compiled.* is displayed.
![Qiita_next_cue_list_img01_eng.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411510/43952e04-8e5f-ca74-5124-b1ad732a4e7e.png)






### Variable
- **Target_cueList**
  - <font color="Red"> **Required** </font>
  - Set the name of target cueList.
  - The cueList name can set Japanese or character string.
  - Escape with backslash (\\), if the name used double-quote("").    
  __e.g.) If the cue list name is ***BGM "Monday"***:__ `set nextcueList to "BGM \"Monday\""`


-  **Select_CueNumber**
    - <font color="Red"> **Required** </font>
    - Set the cue number to select.
    - The cue number can set Japanese or character string.

### Option
+ Add `go` next `set selected to item 1 of (get every cue of (every cue list ~` to ***Go*** the cue of the activation cue list at the same time as running the script cue.
+ You need standby in the selected state, comment out (`--go`).

<!--選択状態で待機にする場合には`go`をコメントアウト(`--go`)する. -->

# Environment
<!--macOS High Sierra (10.13.6)-->
<!--QLab 4.6.3-->
+ macOS Mojave (10.14.6)
+ QLab 4.6.11

# Thanks
[A CUE LIST A DAY - The QLab Cook Book](https://qlabcookbook.com/1996/01/19/a-cue-list-a-day/)