OmniAICreator/Qiita-1.07M huggingface dataset:
クラスメソッドについて調べる

昨日は、インスタンスメソッドについて調べたので
今回はクラスメソッドについて調べる

##クラスメソッドを定義する
定義する方法は、2種類ある

```rb
class クラス名
  def self.クラスメソッド名
    #処理
  end
end
```

定義したいクラスメソッドがたくさんある場合に
毎回selfをつけなくていいので、コードの記述量が減って便利！

```rb
class クラス名
  class << self
    def クラスメソッド名
      #処理
    end
  end
end
```

##実際に動かす
```rb:app/models/calculation.rb
class Calculation
  def addition(a, b, c, d, e)
    puts a + b + c + d + e
  end
end

addition(1,2,3,4,5) #=> undefined method~
```

だと、`NoMethodError`が発生

```rb:app/models/calculation.rb
class Calculation
  def self.addition(a, b, c, d, e)
    puts a + b + c + d + e
  end
end

Calculation.addition(1,2,3,4,5) #=> 15
```

##まとめ
・クラスメソッドとはレシーバーがクラス名でそのクラス名に対してのメソッド
・クラス全体に関わる情報を変更したり 参照したりするメソッドを作成するときに使うと便利
・定義するときは、「`def self.クラスメソッド名`」


##参考記事
チェリー本
https://qiita.com/right1121/items/c74d350bab32113d4f3d
https://qiita.com/right1121/items/c3997653a621c74fb97d
Selenium SeleniumBasicクラスが複数ある場合 (Python VBA)

Seleniumでクラスが複数ある要素を取得したい場合

↓記載例のようにクラスが複数あります。

```:クラスが複数例
<ul class="topic-path under-menu-title">
```

##結論
## CSSの関数を使う
### クラスは.でつなげる　先頭の.を忘れないように　空白も削除する

クラスだから
find_element_by_class_name
FindElementByClass
をつかうのかと思いきや CSSの関数を使うのです。

SeleniumBasic VBAの場合

```
↓ driverには　SeleniumBasicドライバーが設定済みとする
a に要素を取得し文字列を表示する例。

Dim a as WEbelement
set a = driver.FindElementByCss(".topic-path.under-menu-title")
Debug.print（a.Text)  ←　要素のテキストが表示されます。

```

Selenium　Pythonの場合

```
↓ driverには　Seleniumドライバーが設定済みとする
a に要素を取得し文字列を表示する例。
a = driver.find_elements_by_css_selector(".topic-path.under-menu-title")
print(a.text)
```

CSSでコーディングされたポップアップボタンなど
xpathやclassではうまくいかないこともCSSで指定するとうまくいくことよくあります。
なので、うまくいかないときは
xpath,class,cssすべて試してみます。
パスワード解析されるまでの時間をまめてみた【パスワードクラッキングについて】

悪い奴にパスワードが解析されるまでの時間とその方法についてまとめてみました。
[reddit](https://www.reddit.com/r/dataisbeautiful/comments/ihpo84/oc_i_hope_you_find_this_one_more_beautiful_than/)の記事によると解析されるまでの時間は下記の通りです。

|設定方法|数字|小文字|小+大文字|小+大+数|小+大+数+記号
|:---|:---|:--|:--|:--|:--|
|6文字|1秒以下|1秒以下|1秒以下|1秒|5秒|
|7文字|1秒以下|1秒以下|25秒|1分|6分
|8文字|1秒以下|5秒|22分|1時間|8時間|
|9文字|1秒以下|2分|19時間|3日|3週間|
|10文字|1秒以下|1分|1ヶ月|7ヶ月|5年
|11文字|2秒|1日|5年|41年|400年|
|12文字|25秒|3週間|300年|2,000年|34,000年|

こうしてみるとパスワードに大文字+小文字を必要にしてるサイトが多い理由が分かりますね。

# どうやってパスワードを解析してるの？
他のユーザーが設定したパスワードを抜き出す攻撃を**パスワードクラッキング**といいます
抜き出したパスワードで本人に成りすましてアクセスし、不正に操作します。
成りすました後は不正にクレジットカードを利用したり、サイトを書き換えたりやりたい放題されます。
悪いやつらがどういう攻撃を仕掛けてくるのか。そして開発者はどのように対策しているのかを紹介していきます。


#攻撃方法について
##ブルートフォース攻撃
![スクリーンショット 2020-12-10 9.33.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/e6c87662-d88b-6f8b-b297-89d33d555b4b.png)
「総当たり攻撃」とも呼ばれる攻撃手法で、特定のIDに対してパスワードとして使用可能なすべての文字列を組み合わせてログインを試みます。時間さえかければ確実に認証の突破が可能となる。

##辞書攻撃
![スクリーンショット 2020-12-10 9.33.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/5b4da685-7a6a-7376-414b-5dae33b4034e.png)
最近ではパスワードの文字数(8文字~32文字)が長く設定されているため、上記でご紹介した総当たり攻撃は効率が悪くなってしまっています。
そこでサイバー攻撃者が考案したのが、辞書攻撃というものです。
辞書攻撃は総当たり攻撃と比較して、効率的にパスワードを解読でき、解読時間が短いです。
パスワードが名前、誕生日、地名等、分かりやすいパスワードの場合、パスワードを解読されやすいです。



##リバースブルートフォース攻撃
![スクリーンショット 2020-12-10 9.34.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/79f4ed42-a0e1-9d07-03ea-faa2c580a65f.png)
バースブルートフォース攻撃とは、パスワードを固定して、IDを解読する方法です。
そのため、リバースブルートフォース攻撃は一つのアカウントに対し1回しか仕掛けないため、アカウントロックという方法は使用することができません。
IDはパスワードと比較して、名前等を使用している場合があるので、比較的解読されやすい傾向にあります。
リバースブルートフォース攻撃の対策として強度を確認するパスワードチェッカーを導入することが有効となります。



# 開発者の対策

###アカウントロックを設定する
IDやパスワードを入力するWebシステムで一定回数続けてログインに失敗した場合、ログインを不可能にする設定のことです。
アカウントロックを設定する方法は総当たり攻撃に有効です。


###パスワードを複雑なものに設定を促す
登録時パスワードの桁数、英数字、記号等の組み合わせた値をユーザーにお願いするパターン。これにより辞書攻撃されにくくなります。

###ログイン試行を監視する
特定のIPアドレス(インターネットの住所)から大量のログイン試行、存在しないIDへのログイン試行があった場合、IPアドレスをもとに通信を遮断するなど適切な対処を行うことでサイバー攻撃の被害を防ぐことができる

###2段階認証を利用する
ワンタイムパスワードやトークンを用いた2段階認証によるセキュリティ強化も有用です。仮にリスト攻撃による不正ログインが確認されても、被害の発生を抑制することができます。

さて、続きまして、アルサーガパートナーズ Advent Calendar 2020 19日目の記事は @miumiさんのOS、ハードウェエアの解説です。:tada:
大学生起業のススメ

岩手県立大学アドベントカレンダー12月17日の記事で投稿してみました。
#気付いたら法人代表になっていた
僕はロボットを作るのが得意で大学1年生のころ、ロボット教室を開きたいと思い色んな所にアプローチしていました。
結局昨年度で打ち切りになった岩手県立大学Eプロジェクトという助成事業に私は頼ることになるのですが、そこで30万円支援してもらい、ロボット教室を開講しました。ただ大学としては、経理系で色々手続きを踏むのが大変ということで、渋々NPO法人を設立し、ロボット教室を行うことになりました。NPOになった時には、営業回りに行ってご寄附を募ったことを覚えていますが中々根気のいる作業でした。
それが今では身を結び、そこそこの人数の生徒の入会とロボット教室で参加しているロボット大会での上位入賞という目に見える結果として表れてきています。

#僕もロボット作りたい
NPOで法人を設立したときに予想以上に簡単だったことから、自分自身もロボット作る会社が欲しいということで滝沢ロボティクス合同会社を設立しました。9割9分趣味でやってる会社なので儲けは無いですが、(と言うより儲けは全て開発費に回しています)ROSを使用した農業用のロボットを作っています。今までは自分のポケットマネーで開発していたので、生活としてはかなり楽になしました。

# 会社の設立は実はめちゃくちゃ簡単
合同会社、株式会社に至っては2-3日あれば設立できます。
定款とその他もろもろの書類を作って法務局と、税務署や県税市税の窓口に申請書を出すだけ。
実は書類作成もめんどくさかったので、ここで代行で作ってもらいました。5000円くらい。
https://www.hitodeki.com/

#費用比較
|種別|設立費用|ランニングコスト(年間)|
|---|---|---|
|合同会社|7万くらい|最低7万|
|株式会社|20万くらい|最低7万(ただし決算公告義務有)|
|NPO法人|無料|均等割免除申請で無料|
金も大してかからない！
自分に給料出さなければまず潰れることは無いですね！！！

#大学生に起業を薦める3つの理由
##その1 情報系大学生は起業と相性が良い
大学の研究成果をそのまま会社に持ってきやすいという側面があります。(研究室の先生と要相談)
大学と会社の違いは研究するか、社会実装するかというところにあります。大学生起業であればその二つの側面を上手く活用することが出来ますので良いところ取りが出来ます。
逆にせどりとか転売とかアフィリエイトとかでビジネスしたいと思っている人は大学生起業のメリットは無いですね。

##その2 経営の経験が出来る
もし事業が失敗してもただの学生に戻るだけなので大して問題はないでしょう。多額の融資を受けるとかなら別ですが。むしろその経験を就活で活かせる可能性の方が高いでしょう。技術の分かる経営者が必要なのと同時に経営の分かる技術者も必要なのです。今年あった東証の障害による記者会見がその良い例ですよね。

##その3 バイトや新卒より儲かる可能性はある
岩手の新卒給料は良くても20万前半ですよね。上手くいけばそれより儲かる可能性はあります。自分で給料を決められる訳ですからね。経営者は給与じゃなく役員報酬と言う形になるので、基本的に給料は年額固定にしないといけませんが、前年度儲かればその分出せます。
儲かる見込みが無ければ卒業と同時に辞めてそのまま新卒として、どこかの会社に入社すればいいので、こんなにおいしい話は無いでしょう。最近だと副業okの会社も増えているので、そのまま社長で居続けるのもありでしょう。

##フェルミ研究所のりんさんも行動しろといっている
結構大事なことを言ってます。
https://youtu.be/Ev9_RvXRUPg
Grove 端子の調査


# Grove システム

Grove のソフトウェア的な使い方はたくさんあるが、Grove を搭載した基板を自作するための情報はまとまったのが無かったので調べてみた

# Grove システムとは


http://wiki.seeedstudio.com/Grove_System/
pin 1 - Yellow (for example, SCL on I2C Grove Connectors)
pin 2 - White (for example, SDA on I2C Grove Connectors)
pin 3 - Red - VCC on all Grove Connectors
pin 4 - Black - GND on all Grove Connectors

# コネクタ

ストレートタイプ 110990030
https://www.digikey.jp/product-detail/ja/seeed-technology-co-ltd/110990030/1597-1082-ND/5482560

アングルタイプ 110990037

https://www.digikey.jp/product-detail/ja/seeed-technology-co-ltd/110990030/1597-1082-ND/5482560
データシート https://statics3.seeedstudio.com/images/opl/datasheet/3470130P1.pdf



## コネクタをどこで買うか

- SeeedStudio
- 秋月電子 ex., https://akizukidenshi.com/catalog/g/gC-15514/
- 千石電商
- digikey

など



# ケーブル色

GROVEケーブルの色は、M5Stack用などだと異なるので注意！

| 信号名(ex,I2C) |  GROVE端子| SeedStudio版ケーブル色 | M5Stack版ケーブル色 |
|:---:|:---:|:---:|:---:|
| SCL |Pin1|黃|白|
| SDA |Pin2|白|黄|
|(電源/VDD)|VDD|Pin3|赤|赤|
|(電源/GND)|GND|Pin4|黒|黒|

# 信号線

|  GROVE端子|  SeedStudio版ケーブル色 | M5Stack版ケーブル色 |デジタルIO|アナログIO|I2C |シリアルUART|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|Pin1|黃|白|プライマリ|プライマリ| SCL |ホストRX(デバイスTX)|
|Pin2|白|黄|セカンダリ|セカンダリ|SDA|ホストTX(デバイスRX)|
|VDD|Pin3|赤|赤|||||
|GND|Pin4|黒|黒|||||

プライマリ、セカンダリは In/Out 両方に対応。
RX,TXはデバイス側からの信号。Groveシステムはホスト側はベースユニットと呼称する。

# 電圧

信号線の電圧レベルはIOレベル。3.3Vシステムは3.3Vレベル。5Vシステムは5Vレベル。
しかしながら電源/VDD 赤ケーブルの電圧レベルは信号線の電圧レベルと異なる場合がある。

信号線が3.3Vレベル、電源が5Vと異なる。

## Arduino 

(Arduino UNO につなげた場合)
103030000 
https://wiki.seeedstudio.com/Base_Shield_V2/
のHATでは電源レベル、信号レベル、ともスイッチで切り替え？

# Seeeduino

 v4.0以降だと、電圧は電源レベル、信号レベル、ともスイッチで切り替え


## RaspberryPi

103030276などの多くのHATでは
電源レベル：3.3V
信号レベル：3.3V



## Nefry


電源レベル：3.3V
信号レベル：3.3V
 
https://nefry.studio/#nefry-bt_2

## M5Stack/M5Stick

電源レベル：5V
信号レベル：3.3V

バッテリーで動作しているときも、Grove 端子には DC-DCコンバータで生成した 5V が出ている。

なぜこんな危険なことになっているか？ NeoPixel や サーボモータの電源を取れるようにしているのだろうか？

## ペリフェラル

例えば以下のようなところに沢山あるが、
https://www.switch-science.com/catalog/list/145/
5V系と3.3V系、両方対応と様々です。

また、5V系を入力すると信号線も5Vレベルになるものがあって、そういったものをM5Stack に接続すると壊れてしまいます。

自分でペリフェラルを配線する場合、例えば、このようなものを使うと 3.3V / 5V 両方対応できる。
この中華センサーは 基板上に3.3Vのレギュレーターが搭載されていて、どちらにも対応できる。https://www.amazon.co.jp/2%E5%80%8B%E3%82%BB%E3%83%83%E3%83%88SPI-GY-9250-MPU-9250-9%E8%87%AA%E7%94%B1%E5%BA%A69%E8%BB%B8%E5%A7%BF%E5%8B%A2-%E7%A3%81%E5%8A%9B%E8%A8%88%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB/dp/B07M6KCPJ5/ref=asc_df_B07M6KCPJ5/?tag=jpgo-22&linkCode=df0&hvadid=337385759168&hvpos=&hvnetw=g&hvrand=309468070104409047&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009685&hvtargid=pla-666452707143&psc=1
www.amazon.co.jp
amazon.co.jp


# 互換コネクタ

2mmピッチ、4pin のコネクタですが、どれが使えるかな・・・

## PHコネクタ

微妙に違うらしい。
http://www.nbmosi.com/en/showArticle.asp?ID=441

## HYコネクタ

これが Grove コネクタと同じ規格らしい。

HYコネクタとして入手できるものはラッチ付なので、ラッチ無しが必要な場合は注意。

Taobaoなどでは色違いが入手できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f07af7fc-7953-1c45-8c21-7b6bdd2ebfd4.png)
学習時間の確保

#はじめに
最近職場で「仕事の後勉強する時間を作るのが難しい、、、」という言葉を耳にした。
この気持ちはものすごーくわかります！私も帰ったらご飯食べて、お風呂入ったらNetflixを見ながら寝たいです、、、そんな私も目標を達成するためどうにかこうにか勉強するために試してみた勉強時間の捻出方法を書いていきたいと思います！
###通勤中
電車通勤の場合ですが電車乗っている時間は勉強できるように本を読んでいます。プログラミングに関する本や、その時に興味を持った本などを持ち歩いて乗車したらすぐに読み始めます。程よい電車の音と揺れの中での読書は集中できます。プログラミングの勉強を始めたての頃はわからない用語がたくさん出てくるため、その場で検索できる内容は検索し時間がかかりそうなときはスマホのメモに書き留めて帰宅後、再度調べたり師匠に質問したりなんかしていました。デメリットととしては乗り換えが多いとその時間読書が止まってしまうのが難点です。また、駅まで歩いてる時間はYouTubeやVoicyなどを使って、ながら聞きをしたりなんかもしています（帰り道は音楽になってしまう事もしばしば、、、）。

※プログラミング学習を始めた頃に陥ってしまったのが本を読み込むあまり、完璧に理解しなければと思い込み、必要以上の時間をかけてしまったので注意が必要！
本を読んで勉強よりもサイトから持ってきて動かしてみるほうが早くて試しやすいが、少しでも勉強時間を確保するため電車で調べて試してみたいソースコードなどあたりを付けて家で試して動かせるか遊びながら学習するようにしていました。
###休日早朝
最近赤ちゃんが生まれたこともあり、休日は日中から夜にかけて家事育児（特に掃除や買い物！）を行うため、勉強時間は早朝赤ちゃんが起きるまでか、夜赤ちゃんが寝てからになる。なかでも早朝がオススメで起きてすぐは周りも静かで集中できる環境が作れる。「赤ちゃんが起きるまで！」という緊張感もあり、限られた時間となり返って集中できる。
###帰宅後
1番勉強時間の確保が難しいですが帰ってから寝るまでの流れは決めていて、手洗い　→ ご飯　→ 食器洗い　→ お風呂　→ 勉強！と言った流れで勉強に入るようにしています！（私事でお恥ずかしいですが）

勉強を始めて5分は集中するように心がけています。一度始めてしまえばそのまましばらくは集中力も持続されるので日中の調べたコードを書いてためしたり、調べきれなかった用語を調べるなどには十分な時間は確保出来ました。
###師匠がいる
プログラミングの勉強をしているとエラーに合わない事は100%ありません。このエラーを解決するのに時間がかかってしまうため勉強で挫折してしまう人も多いと思います。私の場合会社にプログラミングを教えてくれる師匠がいたため、一度解決方法を調べながらも、時間がかかった時には会社のSlackで直ぐに質問をさせてもらっていました。直ぐに原因やヒント、解決方法を教えてもらっていたため当時の目標も達成することが出来ました。
#最後に
私の場合、家に妻と赤ちゃんがいる事もあり逆に「勉強出来ないのを家族のせいにしない」という意識もあってかモチベーションを保つ事ができた要因なのかなーとも思いました(笑)
[ruby/php] herokuの自動スリープを「時間を指定」して抑制する

herokuは無料で使えて大変便利なサービスなんだけど、無料プランでは30分以上アクセスされないと自動でスリープするという制限がかかっている。

しかしherokuにはスケジューラーというcronみたいなサービスが別にあるので、こちらに`curl:webアプリのアドレス`のコマンドを10分に一回で登録してあげれば、10分に一回スケジューラーがアクセスしてくれるので自動スリープを防いでくれるというTipsがある。

検索をかければ山のようにそういう情報はでてくれるが、これは「24時間動かす」という前提になる。無料プランの場合、クレカを登録しておけば無料の場合でも31日24時間動いてても時間は余るようにはなってるが、スクリプトなどを回す場合そちらもカウントされ、時間を食い合ってしまう。ならば、「アクセスが大してない時間は自動スリープを意図して受け入れる」というのもありなんじゃないか？と思う。

で、具体的にそういう方法がどこにもかかれてないので、適当にメモ的にかいておく。

```ruby:lib/script/scheduler.rb
require 'time'
ENV['TZ'] = "Asia/Tokyo"

# 16時から翌7時まで、20分刻みの時間の配列を生成
timetable = []
hary = [*"00".."07",*"16".."23"]
mary = ["00","20","40"]

hary.size.times do |h|

    mary.each do |e|

      a = hary[h] + ":" + e
      b = Time.parse(a)
      timetable.push(b)

    end
end

#現在時間を600秒（10分）ごとに整形し、時間オブジェクトに変換
tm1 = Time.now.to_i / 600
now = Time.at(tm1 * 600)

# 現在時間が時間配列に一致したらアドレスを開く
if timetable.include?(now)

  require 'timeout'

  Timeout.timeout(10){
    system("curl webアプリのアドレス")
  }

end
```

herokuで実行するのでタイムゾーンはスクリプト内で指定してあげる必要があるので、`ENV['TZ'] = "Asia/Tokyo"`は日本の時間帯前提で動かすのなら必須。

今回は午前7時から午後16時までは自動スリープを受け入れるので、それ以外の時間帯を`["00:00","00:20","00:40","1:00","1:20",...]`といった配列に生成し、`Time.parse()`で時間オブジェクトに変換する。

これだけだとherokuのタイムスケジュールと一瞬でしかマッチできないので、現在時間をUNIX時間に一旦変換し、10分ごとの判定になおすために600（秒）で割ってしまう。rubyの場合はインテグラのまま割り算をすると少数点以下は切り捨てなので、600（秒）をかけ直して時間オブジェクトに戻すと、現在時間は10分ごとの表記になる。

あとはさきほどつくった指定時間の配列に、今の10分ごとの時間が含まれているのかをチェックして、含まれていたら`system("curl アドレス")`を実行しますよってやればOK。（Timeoutは保険で書いてるだけ）

あとはこのスクリプトをlib/script/などのフォルダにいれてherokuにpushして、herokuスケジューラーに`rails runner lib/script/scheduler.rb`のコマンドで指定して、10分ごとの設定にしたらよい。

自分の思いつきでかいたのでもっとシンプルな方法があるのかもしれないけど、時間帯や日程の指定には結構簡単な書き方なので、よく使っている。

# heroku外のcronでやりたい（PHP）
ただ、10分ごとにスクリプト回す性質上、当然これは頻繁にまわることになる。これ自体が無料時間を食ってしまうというのもあるし、なによりherokuの無料プランではwebアプリ以外を実行する枠は一つに制限されていて、他のスクリプトと頻繁に干渉してしまう。

なので外部のcronでもできるようにPHPなんかでも書いてみた。

```PHP:schedule.php
<?php

$hour1 = range(0,7);
$hour2 = range(16,23);
$min = array("0","20","40",);

$hour = array_merge($hour1,$hour2);
$num = count($hour);
$add = 0;
$tt = array();

while ( $add < $num ){

    foreach ($min as $val){
        $a = $hour[$add] . ":" . $val;
        array_push($tt,$a);
    }
    $add++;

}

$timetable = array();

foreach ($tt as $val){
    $a = strtotime($val);
    array_push($timetable,$a);
}

$now =  time() / 600 ;
$now = ceil($now) * 600;

if (in_array($now,$timetable)){

$url = 'webアプリのアドレス';
$curl = curl_init($url);

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // メソッド指定
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 証明書の検証を行わない
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // レスポンスを文字列で受け取る

$response = curl_exec($curl);

curl_close($curl);

}

?>
```

やってることは全く同じなので特に説明の余地はない。PHPはぜんぜんわからないので適当だけど、今のところ動いてるから、まぁたぶんいいんだろう。たぶん。
LINEBotで習慣化サポート（ひとりハッカソン）

この記事は[MDC Advent Calendar 2020 18日目](https://qiita.com/advent-calendar/2020/mdc)の記事です。

モノが完成しきっていないのでコンセプト紹介のみです、完成後に追って記事作成したいと思います...。

#はじめに
 - コロナショック以降、ほぼリモートワークになり運動不足に（30歳目前というのも相まって10kgほど増）
 - 運動習慣をつけるために[Mi Band5](https://www.amazon.co.jp/Xiaomi-%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%96%E3%83%AC%E3%82%B9%E3%83%AC%E3%83%83%E3%83%88-%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A9%E3%83%83%E3%83%81-11%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84%E3%83%A2%E3%83%BC%E3%83%89%E8%BF%BD%E5%8A%A0-bluetooth5-0/dp/B08CZH76ZC/ref=asc_df_B08CZH76ZC/?tag=jpgo-22&linkCode=df0&hvadid=342401904669&hvpos=&hvnetw=g&hvrand=7190240397259465632&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009333&hvtargid=pla-936898637673&psc=1)というスマートウォッチを身につけ始めたところ、スケジュールやLINEの通知を腕で受け取る生活に
 - はじめは歩数確認でしか使ってなかったが、意外と通知により行動を変えられそうな気がしてきたので、これを使って習慣づくりできないかと思い始める
 - 久々にAmazonで価格を見たら、発売したての頃より¥2,000くらい安くなっててモヤる



#下調べ
 - アイアンマンのJ.A.R.V.I.S.を再現できたらなと思いつつ、習慣づくりのポイントを調べるとだいたい以下のようなことだった

  - 人間は本能的に"いつも通り"を維持しようとするので、新習慣は身につけにくい
  - 習慣化したいことはなるべく小さく簡単なことにする
  - 報酬を用意する
  - 記録して見れるようにする
  - 対象は最大5個までにする

 - 他にも、習慣化にはフェーズがあったり、継続すべき期間があったりしたが、初期フェーズの「反発期」を乗り切るためものを作ることにした
 
   - 習慣化のための3フェーズと「乗り切るコツ」
     1. 反発期　　「小さな習慣でいいので毎日続けること」
     2. 不安定期　「習慣化にしたいことをパターン化すること」
     3. 倦怠期　　「新しいグッズを買うなどして目新しい変化を与えること」
 - 参考書籍
  - 小さな習慣 [Amazonリンク](https://www.amazon.co.jp/%E5%B0%8F%E3%81%95%E3%81%AA%E7%BF%92%E6%85%A3-%E3%82%B9%E3%83%86%E3%82%A3%E3%83%BC%E3%83%B4%E3%83%B3%E3%83%BB%E3%82%AC%E3%82%A4%E3%82%BA/dp/4478065772/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E7%BF%92%E6%85%A3+%E5%B0%8F%E3%81%95%E3%81%84&qid=1608238030&sr=8-2)
  - ぼくたちは習慣で、できている。 [Amazonリンク](https://www.amazon.co.jp/%E3%81%BC%E3%81%8F%E3%81%9F%E3%81%A1%E3%81%AF%E7%BF%92%E6%85%A3%E3%81%A7%E3%80%81%E3%81%A7%E3%81%8D%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82-%E4%BD%90%E3%80%85%E6%9C%A8-%E5%85%B8%E5%A3%AB/dp/4847096541/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2YIJVBXC61BU0&dchild=1&keywords=%E5%83%95%E3%81%9F%E3%81%A1%E3%81%AF%E7%BF%92%E6%85%A3%E3%81%A7%E3%81%A7%E3%81%8D%E3%81%A6%E3%81%84%E3%82%8B&qid=1608238191&sprefix=%E5%83%95%E3%81%9F%E3%81%A1%E3%81%AF%E7%BF%92%E6%85%A3%2Caps%2C250&sr=8-1)


#LINEbot 等で実現すること
 - 巷には習慣化を促すアプリも溢れているようだが、自分は以下の基本構成にした

  - 行動を促す通知は時間ごとにLINEBotで定期通知、早い時間帯に実施完了する行動が多いほど通知頻度を下げる
  - MessagingAPIで[リッチメニュー](https://developers.line.biz/ja/docs/messaging-api/using-rich-menus/)に4つの習慣を設定（例：筋トレ・リサーチ・読書・ストレッチ）
  - それぞれの行動を開始して1分以上継続できたら、各ボタンをワンタップで実施完了にする
  - Googleスプレッドシートにて記録

#報酬設計
 - 習慣化したい行動をとった後の報酬は、特に各人の好みに左右される部分だと思うが、「憧れの人物・偉人から褒められる（逆に行動できなかった時は叱咤される）」にしてみた


  - 例１：イチロー編
     - ○「少しずつ前に進んでいるという感覚は、人間としてすごく大事。」
     - × 「小さなことを積み重ねることでいつの日か信じられないような力を出せるようになっていきます。」


  - 例２：松下幸之助編
     - ○「失敗の多くは、成功するまでにあきらめてしまうところに、原因があるように思われる。最後の最後まで、あきらめてはいけないのである。」
     - × 「万策尽きたと思うな。自ら断崖絶壁の淵にたて。その時はじめて新たなる風は必ず吹く。」 

 - 名言の参考[リンク](https://iyashitour.com/)

#さいごに
 - 画像もコードもない記事になりすみませんという感じなので、後日リベンジさせてください
 - 似たようなアイデアはゴロゴロありそうですが、”自分好みにカスタマイズできること”を重点ポイントとしました
 - いまの自分は何に動かされるのかを考えたときに、LINEBotということもあり上記のような報酬設計になってます
 - 今後も自分に向き合いながら、よりよい仕組みを考えていきたいと思います
トルクスネジ

ルーターなどの機器はプラスや六角の普通のネジではなく星型のトルクスネジが使われていることが多いです。サイズはT6かT8が多いですが、それ以外のときもあります。

工具はAmazonなどでも購入できますが、ネジが深いところにあるケースもあり、軸の長いものがお勧めです。取替えセットになってるような工具は軸が太いので使えないこともあります。

![4962485310295_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/104066/47bac280-5a7d-7b3f-e6c2-0cce90ae8442.jpeg)

工具がすぐに手に入らない場合の対処法です。

# 六角レンチで代用

T6のネジはうまくすると六角レンチの2mmで回せることがあります。

![IMG_20201218_062025.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/29113ffa-9258-6a6b-d965-d48ca85e0209.jpeg)

# マイナスドライバを加工する

ネジ穴よりちょっと大きめのマイナスドライバーや類似の金属をやすり等で、ネジ穴にフィットするように加工します。

![IMG_20201218_062043.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/ce3fe010-097a-7d9a-77c3-a4fca1806cbe.jpeg)
#lesson 5 tableau public で100万行以上（エクセルでは無理）のオープンデータを公開 リレーション データ・タイプが違う場合

# リレーション（テーブル間関連付け）データ・タイプが違う場合（エラーが良く起こります。）
データタイプが異なる場合は、リレーションができません。貿易コード2桁のhs2は、アップしたときには、整数と判断されてしまい、ゼロが先頭についているとゼロなしの整数になります。そこで、 整数から文字列に変更するとリレーションができます。紹介の動画ではうまくいきますが、**エラーがよく起こります。**

**データタイプ合わせは、実際上よく問題になります。この記事は、エラーが起こらない手順です。現時点でエラーが起こる条件は特定できていません。**


## 使うデータ
[kaggle](https://www.kaggle.com/zanjibar/japantradestat) にあります。ダウンロードには、kaggle のアカウントが必要です。

- custom_y_hs2_from_1998.csv(93.49 MB)
- hs2_jpn.csv(7.14 KB)

## 説明動画は、[これ](https://youtu.be/d4OKV2c4Dss)

- データ間リレーション hs2 のデータ・タイプ変更
Cloudflare WARPの落とし穴 - 一般的なVPNだと思ってはいけない理由

# Cloudflare WARPはVPNと呼べるのか
一般的なVPNと比較して、安定的で高速なCloudflare WARPですが、巷ではそのセキュリティ面に関して大きな誤解があるように思えます。
例えば[TechCrunchの記事](https://jp.techcrunch.com/2019/04/04/2019-04-01-cloudflares-warp-is-a-vpn-that-might-actually-make-your-mobile-connection-better/)では、VPNの利点について、Cloudflare WARPと絡め、「見かけのアドレスを変更して、IPベースのトラッキングを回避することなどが可能となる。」としています。
また、[Qiitaで唯一Cloudflare WARPについて説明した記事](https://qiita.com/mnishihara/items/bc7807b241ce7c8cca8e)でも、一般的なVPNとして紹介されているように思えます。

しかし果たして本当にそうでしょうか？
結論から言えば、**Cloudflare WARPを本当のVPNと定義することは適切ではありません**。

# なぜ？
まず、WARPに接続した状態で[cman.jpのグローバルIP確認ページ](https://www.cman.jp/network/support/go_access.cgi)を踏んでみましょう。
結果はこの画像のとおり、問題なくCloudflareのIPアドレスが表示されています。
![Screenshot 2020-12-18 at 5.46.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185096/5d00b277-fe03-e620-68c7-220df97e6a1d.png)

これは一般的なVPNと同じで、自分の本当のグローバルIPアドレスが秘匿できている状態です。
(原理としては、自分→Cloudflare→cman.jpという風に、Cloudflareを経由しているので、cman.jpには自分のIPアドレスがわからない、という状態)

次に、海外サイトの[WhatIsMyIPAddress](https://whatismyipaddress.com/)でグローバルIPアドレスを確認してみましょう。
![Screenshot 2020-12-18 at 5.51.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185096/6f3678a4-cfc8-4987-4940-ba1706a0e25f.png)

そうです、ここでは**本当のグローバルIPアドレスが表示されてしまっています**。

**これがCloudflare WARPを一般的なVPNだと思ってはいけない理由です。**

## なんで自分のIPアドレスが表示されてしまうのか？
勘の言い方ならお気づきかと思いますが、自分のIPアドレスが秘匿されない条件が存在します。
それは**サイト側がCloudflareを使用している**ことです。
[CloudflareのForum](https://community.cloudflare.com/t/does-warp-hide-my-ip-from-my-isp/119760)や[Reddit](https://www.reddit.com/r/CloudFlare/comments/eb29wd/why_does_warp_leak_my_ip_address/)にあるように、サイトがCloudflareを使用している場合は、本物のIPアドレスがサイト側に開示されます。

![Screenshot 2020-12-18 at 6.09.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185096/61ce44a9-37df-9c40-88b1-968880cb8e74.png)
![Screenshot 2020-12-18 at 6.08.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185096/105f3c57-a4c1-1c95-c7c2-32d6e1bc0839.png)

これはIPアドレスから地域を判定、フィルタリングするサイトを利用する場合はメリットになり得ますが、一般的なVPNのようにグローバルIPを秘匿してくれる、と考えているユーザーにとっては大きな不利益です。

もし本当にIPアドレスを秘匿したいと考えているのであれば、ログを取らない(有料の)一部サービスを使用する+Torを併用する、などを検討したほうが良いかと思います。
クォート学部バッククォート学科（雑談：Pythonあるある）

#概要
完全に雑談になるが、Pythonでデバッグ作業とかで、**複数行をコメントアウトする際**に、
c言語ならば、`#if 0`とか書いたりするが、そんなことはできないので、
**トリプルクォート**を使ったりすると思う。

たまに、**バッククォート(3連発)**を使おうとして、叱られる。
『確か、昨日は使えたのに、、、』とか思ったりすることがあった（**個人的あるある**）。

トリプルのバッククォート、あれ、いつ使ってたっけということで、記事にする。

#トリプルのバッククォート、あれ、いつ使ってたっけ

はい。ここですね。
qiitaですね｡
**マークダウン**ですね。以下の『黒いの』を呼ぶとき。
以下は、Pythonでの複数行コメントアウトの例。(**当然､バッククォートなんか使うと叱られる!**)

```
'''a = 1
b = 2
c = 3
#kore python ni mienai
#sore ha sateoki

d = [1,2,3]
print(a,b,c,d)
'''
d = [4,5]
print(d)

```

#引用符自体もややこしい印象があるが。。。
この際、引用符について、頭を整理しようとして、、、

##Wikipediaで調べてみた

ややこしいどころの騒ぎではないですね。。。**無数にありますね。**
整理できません。無数にあることを理解しました。
ほんの一部を以下に引用。

引用：　https://en.wikipedia.org/wiki/Quotation_mark

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342207/8e8ccf89-66a2-10d3-0e43-529cbba7246b.png)


##しかーし、バッククォートは、仲間はずれみたい

上記のとおり、引用符は無数の形式があるが、
**バッククォートは仲間に入っていないよう。**

唯一、外部リンクとして、何か、problemが紹介されていた。

"ASCII and Unicode quotation marks" by Markus Kuhn (1999) – includes detailed discussion of the ASCII `backquote' problem


#まとめ
特にありません。
コメントなどあれば、お願いします。:candy:

# 追記(2022/12/18)
何年もたっての追記ですが。。。以下の記事が面白い！

https://fanta-orange-grape.hatenablog.com/entry/2022/12/18/120554
Excelで作るスマブラ技発生フレーム表

#はじめに
本日12月18日7時から大乱闘スマッシュブラザーズSPECIALに追加されるファイター「セフィロス」の使い方放送があるということでスマブラを題材になにかできないかと考えたところ、このようなものを作るに至りました。
#仕様
まずファイターと技とそれに対応するフレームの表を作ります。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869428/b0baa1af-dd85-fe4e-d2e4-8ebb1e74c7e0.png)
そうしたらファイター名と技名を入れたらフレームを出せるようにこんな感じに要素を追加します。
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869428/8541a1cb-b4d9-081a-5b41-b362e8cf4922.png)
この時、＆をつかってくっつけています。
最後にファイター名と技名が両方入力された時にフレームが表示されるように、IFとVLOOKUPを使って関数を書き込めば出来上がり。![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869428/ee85aab5-d5f4-56e1-9dcf-fd8845caa2b1.png)
後は残りの81体+セフィロスの分を入れれば完成ですね…。
#あとがき
授業で習ったことと自分の趣味を融合してなんか作れてよかったです。
ゆくゆくは後隙や硬直差などを入れて確反を表示したりできたらいいですね。
デザイナーがハッカソンに参加する3つのメリット

こんにちは！

うちの猫が可愛すぎて（親バカ）どうやったら猫がお腹の上で寝てくれるかを日々考えている系デザイナー@naomunaomuです🐱
エイチームブライズという会社で働いています。

この記事は[Ateam Brides Inc. Advent Calendar 2020](https://qiita.com/advent-calendar/2020/ateam-brides)　19日目の記事です。


## はじめに
今回は社内コンペのハッカソンに参加して感じた、デザイナーが参加するメリットをお伝えできればと思っています。

## ハッカソンis何？

>ハッカソン（英語: hackathon 、別名:hack day ,hackfest ,codefest ）とは、ソフトウェア開発分野のプログラマやグラフィックデザイナー、ユーザインタフェース設計者、プロジェクトマネージャらが集中的に作業をするソフトウェア関連プロジェクトのイベントである[1]
[wikiより引用](https://ja.m.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3)


今回の場合は、一ヶ月という短い期間かつ空き時間でプロダクトを開発するという社内コンペでした。
与えられた課題に対し、チームで解決方法のアイデアを出し、新しいサービスを作りました。
チーム構成はエンジニア3名、デザイナー2名、壁打ち役のマネージャーが1名です。

### オンライン開催、初メンバー！

この御時世ですから、現在弊社はリモートワークを推奨しており、ハッカソンもリモートでの開催でした。
ほぼ初めましてのメンバーでしたが、キックオフから発表会まで、ついに1度も対面せず開発しました。
改めて、すごい時代になったもんだなあ

## デザイナーがハッカソンに参加するメリット

### 1.企画段階から主体的に参加できる！
受託会社・事業会社勤務にかかわらず、
新規サービスのアイデア出し段階から参加できる機会って、ほんとうに少ないと思うんです。
ある程度決まった段階でデザイナーに降りてきて、この仕様の意図ってなんだろう・・・？なんて困った経験ありませんか？

ハッカソンはみんなが主役。
やろうと思えばどこまでも、サービス企画のコアメンバーとして動けます。
とくにデザイナーからディレクターへキャリアアップを考えている方にとって、とても良い成長機会に感じました💪🔥


### 2.デザインシステムも！？UI作り放題！
私は主にUIの作成と実装を担当しました。
エンジニアが用意してくれた画面設計を元に、機能を整理し、情報設計とインターフェイスに落とし込んでいきます。

プロトタイプはFigmaで作り、エンジニアにもFigma上でFBいただきました。
#### 開発中の画面の一部（一部消してます）
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321220/a58fad1a-cf3c-6794-2888-a623fcd5fe99.png">

今回私はきれいに整理できませんでしたが、
他チームにはデザインシステムを作っている猛者もいました🎉
アプリケーションの設計や、デザインシステムを作ってみたい！
流行りのツール使ってみたい！というキャッチアップ力の強いデザイナーなあなた、きっとワクワク楽しめると思います☺️

### 3.モダンなフロントエンド開発ができる！しかもエンジニアが助けてくれる！

最後はマークアップ大好きデザイナーへのおすすめです♪
２であげた「流行りのツールを使ってみたい！」は、そのままエンジニアにも同じことが言えます。
「流行りのいけてる技術使いたい！」です。ハッカソン自体がチャレンジ目的ですしね。
なので必然的にフロントエンドの技術スタックも面白い構成になります。
私は初めてTypeScriptの文化にふれました！

事業会社で働くデザジニアあるあるですが、運営が長くなるほど技術構成が古くなる課題ってありませんか？😭

普段使っていない新しい技術で開発ができる。
助けてくれる仲間もいる。
しかもちゃんとプロダクトとして動く！しかもしかも**１ヶ月**で！（大変だけど！w）

ハッカソンでは、そんな技術課題の解決ができるのはないでしょうか？👨‍💻


## まとめ

初めてのハッカソン参加で、デザイナーって何ができるんだろう？と不安もありましたが、参加することでたくさんの学びを得ることができました。
ご一緒させていただいたメンバーの皆さん、本当にありがとうございました！
また一緒に開発しましょう😊

もしハッカソンやITイベントに参加することを迷われているデザイナーの皆さん、
とっても楽しい＆学びが多いイベントですので、ぜひぜひ参加してみてください！



明日は@ttkが担当しますので、お楽しみに♪
【Laravel(多対多)】php artisan migrateエラー(SQLSTATE[HY000]: General error: 3780 Referencing column~are incompatible.)

Laravelでphp artisan migrateを実行し、SQLSTATE[HY000]: General error: 3780 Referencing column~are incompatibleといったエラーが出てきた場合、設定しているカラムタイプが異なることが原因である場合があります。
「are incompatible」は直訳すると互換性がないと言われています。


```.php

//符号なしBIGINTを使用した自動増分ID（主キー）
$table->bigIncrements('id');

//BIGINTカラム
$table->bigInteger('votes');
```

今一度、自分で設定したカラムタイプの整合性が取れているか確認してみてください。
Vue.jsまとめ③「条件付きレンダリング」と「リストレンダリング」

下書きが上限に達しているので仮の状態で投稿しています

v-if="true or false"
条件でレンダリングするかしないか決定する

v-else
v-if, v-else-ifの直後に使用
else文と同様に扱うことができる

v-else-if
v-ifの直後
else if文

templateタグ
不必要な要素を加えずにv-ifを複数の要素に適応させる

v-show
display:none;によって非表示にする(v-ifはtemplateタグごとなくなる)

v-ifとv-showの使い分け
v-if　切り替えコスト高い
v-show 初期描画コスト高い（最初に全てDOMに追加するから）

v-for リストレンダリング
<li v-for="要素 in 配列">{{ 要素 }}</li>　で配列をリスト化
<li v-for="(要素, インデックス) in 配列">{{ インデックス }} {{ 要素 }}</li>　でインデックスも扱える
<li v-for="要素 in オブジェクト">{{ 要素 }}</li>　でオブジェクトをリスト化
<li v-for="(要素,　キー, インデックス) in オブジェクト">{{ インデックス }} {{ キー }} {{ 要素 }}</li>　でキーとインデックスも扱える
templateタグとv-forを組み合わせることもできる（基本的には後述のkey属性を使う）
<li v-for="要素 in 整数">{{ 要素 }}　で整数をリスト化
inではなくofでも可能
:key="要素"　を一緒に記述することでそれぞれを対応付けることができる（templateタグは使えない）
Reactの状態管理ライブラリまとめ

#はじめに
今回はReactのReactの状態管理ライブラリについてまとめていきます。
勉強したアウトプットと備忘録として残していこうと思います。

#現在の状態管理ライブラリの状況と概要
* Redux : デファクトスタンダード？
* Recoil : Facebook社が開発
* useContext : React16.8から標準のhooksで使える
* SWR : Next.jsと同じZeit社が開発
* Apollo Client : Graph QLとの相性
* react-query : 個人的に推したい新進気鋭

下の３つは状態管理というよりもキャッシュを管理するライブラリである。


#Reduxの特徴
* Action　→ 　ActionCreator　→　Reducer　→　Storeの流れで状態の変更を管理
* 流れが一方向なので状態管理をしやすい
* reselectによる値の参照とメモ化が強力
* フロントエンドにビジネスロジックが集中しても対応可能
* パフォーマンスチューニングしやすい
* Fluxフローの概念の理解が必要
* とにかく手続きが多い

#useContextの特徴
* createContext()で生成したコンテクストオブジェクトで一元管理
* <Provider>配下のコンポーネントでuseContextを使って参照可能
* Reduxよりもシンプル
* 更新頻度が低い状態の管理に最適
* 管理している値が変化すると再レンダリングが走る
* パフォーマンスチューニングが面倒

#react-queryの特徴
* フェッチしたデータをキャッシュとして利用する
* キャッシュをどのコンポーネントからでも簡単に参照できる
* データ再フェッチの間隔や回数を調整
* フェッチの状態を返してくれる(isLoading, errorなど)
* フロントエンド先行でバックエンドの設計を必要
* フェッチしたデータを再加工しにくい

#まとめ

| |Redux | useContext | React-query |
|:--|:---:|:-----------:|:-----------:|
|導入の容易さ |❌|⭕️|🔺|
|パフォーマンスチューニング |⭕️|🔺|⭕️|
|値の参照 |⭕️|🔺|⭕️|
|値の管理方法 |1つのオブジェクト(store)|オブジェクト(複数作成可能)| APIレスポンスの戻り値(クエリごとに管理)|
|向いているアプリ|書き込みが多い|読み取りが多い|どちらもOK|


#参考
[【群雄割拠】Reactの状態管理ライブラリ事情【2020年末版】](https://www.youtube.com/watch?v=gqfVu3_vXrw&t=1019s)
Vue.jsまとめ②　Vue.jsの基礎、テンプレート構文

下書きが上限に達しているので仮の状態で投稿しています

{{}}二重中括弧でdataやmethodsの値を呼び出す
単一の式を書く

Vueインスタンス内で自分のインスタンスにアクセスするときはthisを使う


v-text
テキストを表示
v-once
一度だけ描画される
後から変更されない
v-html
htmlで表示する
悪戯できるから信頼のあるものだけ扱う

v-vind:属性、:属性に省略できる
（属性）を呼び出す
:[属性]で動的に呼び出せる
v-vind="オプジェクト"でまとめて呼び出せる

v-on:動作、＠動作に省略できる
動作をした瞬間に動作を実行する
イベントオブジェクトを取得できる（methodsにeventの引数を与える、v-on側にはいらない）
v-on:動作="関数(引数)"で引数を持たせられる。イベントと一緒に使うときは$eventも使う
イベント修飾子、v-on:動作.stopで停止、.preventでデフォルトの挙動を阻止
キー修飾子、.enterや.spaceなどで特定のキーのみに反応するようにできる
v-on:[動作]で動的に呼び出せる

v-model、双方向データバインディング
テンプレート側からモデル側を変更することができる（通常はモデルからテンプレート）

computedプロパティ
動的な表現ができる（dataではどうできな表現はできない）

computedとmethodsの違い
computed,参照先の値の変化時に更新、（）付けない、推奨
methods,関係ない値の変化時にも更新、（）付ける

computedとwatchの違い
computed,同期処理　
watch,非同期処理 computedでできない時に使う
マンガでわかる全社的おんぼろ煙突化アンチパターン

![A3038D1B-4E10-466D-A106-86C89CA26585.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11525/6eadf326-0603-b692-6cea-7a2397a77e28.png)
StovepipeEnterpriseAntiPattern (ページなし。[StovepipeAntipattern](http://wiki.c2.com/?StovepipeAntiPattern) 参照)

単独のおんぼろ煙突化 (システム間連携を考慮していない自動生成コードへの場当たり的なコード追加によるつぎはぎなど) が企業内の複数のシステムで起き、全社的なシステム統合において、それぞれが独自の文化を持つ離れ小島のようになった状態が、全社的おんぼろ煙突化です。

それぞれのシステムは、他のシステムが共通インフラストラクチャや共通ドメインモデルといった、基盤となる抽象を提供していないという事情を言い訳にして、先週要求された機能を早く実装しようと、必要なインフラやモデルを独自に決定して、自力で調達しようとします。その結果、せっかく言語やフレームワークを共通のものにしていても、そのメリットをまったく活かせない、自然な相互運用性を欠いたシステムへと成長してしまいます。それぞれの離れ小島の間には、やはり独自の連絡船が好き勝手に行き来します。そのほとんどは、壊れかけのイカダのようなものかもしれません。

このアンチパターン、エンタープライズ版のストーブパイプから抜け出すには、全社的な統合を想定した共通インフラストラクチャ(連携プロトコルのインターフェースも含んで)の上に、各アプリケーションの実行環境を設けたアーキテクチャ(垂直)が必要です。そのためには、各システムのユースケースのための強力な抽象となる、全社的標準ドメインモデルによるアーキテクチャ(水平)の分析をもとにした技術選定が必要です。

再確認ですが、冗長で複雑なシステム群の何が問題かというと、それは、企業にとってひどい金食い虫になる点、そして、ビジネスの変化に素早く対応できなくなる点です。不思議に思うかもしれませんが、それぞれのシステムの開発者が、互いに好き勝手にアドホックな変更をしていくのは、企業の成長にとってマイナスになります。閉じた世界で独断で変更できる素早さは、すぐに、全体の複雑さと冗長さによる負の生産性に飲み込まれてしまうのです。

だからって、いち開発者の立場ではどうしようもない、という状況もあるでしょう。むしろだからこそ、目の前で作られていく新たな離れ小島システムでは、全社的システムのモデルケースとなるような設計を目指し、全体に意識を向けていきましょう。ここで忘れてはいけないのは、どんなにスマートな設計をしたところで、エンタープライズ視点で見れば、まだその段階では従来同様のストーブパイプ、つまりただの技術的負債でしかないという点です。マイナススタートを覆すのが本当の目標です。かっこいいものを作っただけで、うちの島は素晴らしい設計だと奢ってしまうと、せっかく高い設計スキルを持つあなた自身が、このアンチパターンの一部になってしまいます。気をつけてください。
git rm コマンドについてのメモ【初心者用】

参加しているプログラミングスクールで、プログラムをpushした際に、あるファイルが余分なので削除してくださいとの話になった。
その時に、*git rm*コマンドが出てきたので、気になったので調べてみた。

## git rm コマンドを実行すると？？
```
git rm[ファイル名]
```
コマンドを実行すると、ワークツリーとインデックスからファイルが削除され、`git commit`時にはリポジトリにファイルが削除された事が記録される。

- ワークツリーとは？
自分のパソコンで作業してる場所のこと

- インデックスとは？
自分のパソコンから一時的にファイルを預けておくような場所

- リポジトリとは？
Githubのようなオンラインでファイルを保管してくれるような場所

## git rm --cachedとは？
```
git rm --cached [削除したいファイル]
```
を実行すると、実際のファイルを残したまま、Gitの管理対象から外すことができます。
僕の使っているテキストエディタ「VScode」では、ファイルは残っているものの、ファイル名がグレー色になっていました。
ファイルを残した場合は`.gitignore`を追記しないといけないようですが、これはまた今度調べたいと思います。

## git rm -rｆ --cachedとは？？
```
git rm -rf --cached [削除したいファイル]
```
今回プログラミングスクールで使用したコマンドはコレです。
.vscodeディレクトリの中にlunch.jsonというファイルが含まれており、.vscodeディレクトリ全てを削除したいという流れでした。

はじめ、`git rm -f --cached`を実行した所、ターミナルで
`fatal: not removing '.vscode' recursively without -r`
と怒られました。

「`git rm -f --cached`ではディレクトリは削除できませんよ！」ということですかね。
最終的に、
`git rm -rf --cached`を使い、無事にディレクトリと中のファイルごと削除する事ができました。

## 参考
- [【 git rm 】コマンド（基礎編）――ファイルを削除する／Gitの管理対象から外す](https://www.atmarkit.co.jp/ait/articles/2006/04/news022.html)
- [gitの管理対象から特定のファイル、ディレクトリを削除する](https://qiita.com/ytkt/items/a2afd6be8e4f06c1ea25)
- [【Git】git rm --cached [ファイル名]：ファイルを管理対象から除外する](https://qiita.com/megu_ma/items/a438a71c84145f14d04e)
GoLand + Ginkgoを使いやすくする設定

Ginkgoは、標準のテストフレームワークではないので、素の設定だとGoLandから使いづらいです。
テスト実行結果が見づらかったり、テスト実行範囲が広すぎたりします。
それらを解決する方法を記します。

## 前提のテストコード

以下のGinkgoのテストコードがあるとします。

```go:GinkgoSandbox_suite_test.go
import (
	"testing"

	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

func TestGinkgoSandbox(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "GinkgoSandbox Suite")
}
```

```go:sample_test.go
import (
	. "github.com/onsi/ginkgo"
)

var _ = Describe("Describe1", func() {
	It("It1-1", func() {})
	It("It1-2", func() {})
})

var _ = Describe("Describe2", func() {
	It("It2-1", func() {})
})
```

## 普通にテストを実行する

1. GoLandでテストコードのファイルGinkgoSandbox_suite_test.goを開きます
2. Run -> TestGinkgoSandbox in GinkgoSandbox_suite_test.goを選択します
  - テストは成功しますが、実行されているSpecは0です
  - 初期設定だと、Specの書かれたファイルがコンパイル対象になっていないためです
3. Run -> Edit Configurations ...
  - Test kindをFileからDirectory or Packageにする(ここではDirectoryで説明します)
  - Directoryに、GinkgoSandbox_suite_test.goが置かれているディレクトリを選択する
4. GoLandからもう1回テストを実行します
  - 今度はSpecが実行されます

### テスト実行結果

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196890/0e5107d2-052e-b3e7-e938-4ed07dd47322.png" />

Specの実行結果が全く表示されないので、分かりづらいですね。
これはGinkgoが出力するテスト実行結果をGoLandが解釈できないためです。
次は、GoLandでSpecの情報を表示する設定を説明します。

## Specの実行結果を分かるようにする
### Ginkgoのテスト実行結果のReporterの設定

Ginkgoには、テスト実行結果のReporterを変更することができます。
GoLand向けのReporterがあるのでそれを設定します。

https://pkg.go.dev/を見ると、ほぼ同じものが乱立していますが、v1.0.1となっているものを使います。
https://pkg.go.dev/github.com/TaylorOno/golandreporter

```go:Repoterの設定コード
import (
	"testing"

	. "github.com/TaylorOno/golandreporter"

	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

func TestGinkgoSandbox(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecsWithDefaultAndCustomReporters(t, "GinkgoSandbox Suite", []Reporter{NewAutoGolandReporter()})
}
```

Reporterは、GolandReporterとAutoGolandReporterの2種類ありますが、GoLandからテストを実行したときだけテスト実行結果の出力を変えたいので、後者を使います。

### GoLandのテスト実行設定

AutoGolandRepoterを選択したので、GoLand上のテスト実行設定も変える必要があります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196890/1ae84fa6-c913-c660-7e73-3e74d035ecb0.png" width="640" />

ポイントは、環境変数"OLDPWD"に"goland"を設定することです。こうすることで、ReporterはGoLand用のテスト実行結果を出力してくれます。

### 設定後のGoLandのテスト実行結果

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196890/c4a18f01-eab3-5d30-e2ff-d34eca2f7251.png" />

Specの実行結果が表示されるようになりました!

## 実行対象のSpecを絞る

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196890/9bcdf895-7844-52c9-47ac-5ce414145e78.png" width="640" />

GoLandのテスト実行設定のProgram argumentsに"-ginkgo.focus REGEXP"を指定します。REGEXPにマッチするDescribeを持つSpecが実行対象になります。

テスト実行結果は以下です。"Describe1"のSpecは実行されず、"Describe2"のSpecだけ実行されています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196890/b28f9c6e-c05d-d601-6e83-71066136f278.png" />
リモートワーク下のスクラム開発で気をつけたこと


この記事は[フラー Advent Calendar 2020 ](https://adventar.org/calendars/5034)の18日目の記事です。
17日目は[@shmokmt](https://twitter.com/shmokmt)さんで[Go の context パッケージとは何か](https://shmokmt.hatenablog.com/entry/2020/12/17/094810) でした。

## 自己紹介

フラーでiOSエンジニアをやりながらスクラムマスターをやらせていただいているyudaiです。
去年のアドベントカレンダーで書いたAR名刺の記事以降2回目の投稿です。

今年の記事は
リモートワーク下でのスクラム開発について気をつけていることや実施していることを書こうと思います。

作文は苦手なのであたたかい目で見てください🙏

## スクラムについて

まずスクラム開発について書きたいのですが、
書くと長くなるしチームによって形は変わるものだと思っているので
もし気になる方は是非[この本](https://www.amazon.co.jp/SCRUM-BOOT-CAMP-BOOK-E3-80-90-E5-A2-97-E8-A3-9C-E6-94-B9-E8-A8-82-E7-89-88-E3-80-91-E3-82-B9-E3-82/dp/4798163686/ref=dp_ob_image_bk)を読んでみてください。
![51PEs0Kbw8L._SX351_BO1,204,203,200_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180651/038cf205-db93-ceea-9aee-807f1a3b48ed.jpeg)
「スクラム開発」で検索して出てきた記事でもいいと思いますが、
会社内で起こりそうな状況を踏まえて基本的なスクラム開発のやり方を紹介してくれているので導入するイメージが掴みやすいと思います。

## 気をつけていることや実施していること

スクラムブートキャンプやスクラムについての記事を読んでいただた方はわかると思いますが...
スクラムイベントの多くはオフラインで実施されるものとして記されています。
例えばホワイトボードを用いたスプリントレビューや、KPTの実施です。

リモートワークが主となった今では何らかの工夫をしないといけないと考えたため、
気をつけていることや実施していることを書きたいと思います。

### 1.MTGを行う時はスライドを作り、議事録を残す

リモートワーク中で恐ろしいことの１つはメンバー内に認識のズレが発生しやすくなってしまうことだと思っています。
wifiの調子が悪くなってMTG中に寸断したり、ノイズが入ったためにファシリテーターが何を言ってるのか聞こえなくなった場合などです。

その状態をできる限り排除するためにスライドの作成と会議の議事録をとるようにしています。
![スクリーンショット 2020-12-17 21.11.07のコピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180651/ff90e61d-228a-cb86-a77d-e3940fca25e7.jpeg)
![スクリーンショット 2020-12-18 1.25.26のコピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180651/8a1ac543-266e-aee4-457a-60dffc3a8ca2.jpeg)

実際に利用したスライドはこのような感じで、
スライドを作成する時には必ず**アジェンダ**を作って事前に話す内容を共有することにしています。

また議事録はMTGに参加しなかったメンバーにも話した内容を共有できるだけでなく、MTG中に何を話しているのか追いつくためにも活用できます。
ただ議事録の記載は誰でも簡単にできることではないので、チーム内で誰かの負荷になりすぎない程度にやってみるのがいいと思います。

ちなみにこのスライドはスプリントレビューの時に利用したもので、自分たちのチームではKPTではなくKWTを行っています。
Wは「わかったこと」の意味でProblemで出てくる問題を「わかったこと」として捉える方がチームとしてポジティブになるのではと思ったためです。
下記にもKPTが出てきますが便宜的にKPTと記載しています。

### 2. KPTをslack上で行う

もともとホワイトボード等でやっていたKPT
この作業をオンライン上でスムーズにやる方法はないかと考えた時に最初に思い浮かぶにはMiroのようなツールだと思いますが、
僕らはslackのスレッドを利用して記載しています。

理由はいつも使っているツールなので導入が楽であるのと、入力がスムーズであること。
カスタム絵文字が利用できるため表現しやすいのもいいと思います、またスタンプが押せるのでTRYを決定する際の投票も簡単に行うことができます。

![スクリーンショット 2020-12-18 0.42.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180651/119af4ee-adc4-1f40-637e-45434a3c7c09.png)

このような感じでチームのチャンネルにスレッドを作って実施しています（黒塗りが多くでごめんなさい）

個人的に重要視しているのは記載するタイミングで、
メンバーはスレッドへ**５分間**で同時にKEEPの記載してもらっています。
slackへの記載なので事前に書いておくこともできるかと思いますが、
事前に考えておいても記載するのはこの**５分間**だけ同時に作業してもらっています。

科学的な理由があるのか分からないですが、
常に離れているメンバーが短い時間でも一時的に同じものを書くということはチームが一体感を生むことへ寄与できるのではと思っています。

記載が終わったらそれぞれ書いた内容を発表してもらい、
TRYの記載が終わった後は投票と担当者の決定をしています。

Slack上でも意外とスムーズに実施することができるので是非やってみてください。

## 最後に
常に離れているメンバーが主体的にチームのために動けるような環境を作るのはすごく難しいと考えていますが、
今後もいろいろなチャレンジをして改善していきたいと思っています。

今は仕様書が重要だと考え仕様書を中心とした新しい開発の流れを作りたいと思っていますが、
これはまだチーム内でワークできていないので...いつか共有できるくらいの完成度のものができたら記事にしたいと思います。

ありがとうございました。
ShaderGraph レシピ #5 HEX柄（ハニカム模様）

#HEX柄（ハニカム模様）

![スクリーンショット 2020-12-18 1.07.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/e8b13df3-3285-be94-3c5b-fac0e59924c9.png)

六角形の有機的な柄です。
これを作れると、バリア表現など様々な演出で重宝します。

#作り方
構造を説明するのが難しいので、こういうものだと覚えましょう。
また自分で作れなくてもUnity公式が配布しているので困ったらそれをつかいましょう。

### 1.タイルを作ります
前半部分の全体像
![スクリーンショット 2020-12-18 1.14.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/bb664500-5a1a-5fa1-d99c-896ef700b0cd.png)

まずストライプを作って、タイリングした1つ辺りのサイズの大きさに切り出します。

![スクリーンショット 2020-12-18 1.36.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/3ce71e1f-4a5a-b745-4477-434f078da8ad.png)


![スクリーンショット 2020-12-18 1.41.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/8412608a-c965-2cb2-7823-984e7af2c2c4.png)
これのことです。今はTiling=10で作ってるので、だいたい10/1くらいの部分にストライブが出ています。

これと、一番最初にMultiplyした結果をVector2のxとy成分にします。
![スクリーンショット 2020-12-18 1.46.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/d92fae98-8547-2362-6386-1afb56651493.png)
この部分ですね。
そうすると実際には下のような画像がつくられます
![スクリーンショット 2020-12-18 1.45.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/bf6da403-83ad-7907-37b9-2ddfcd73314c.png)

それをModuloノードを使って1,1で割った余りを出すときれいにタイリングされます。理屈はよくわかりません。
![スクリーンショット 2020-12-18 1.43.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/7d4c668c-cc1e-d7be-0d22-def6b9cfb0d3.png)

この結果から0.5を引いて、負数の部分を作った後、absoluteノードで絶対値を取り出すとHEXのもとになるタイルが作れます。

![スクリーンショット 2020-12-18 1.50.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/33e3de51-90f9-d3e7-e9a0-c724a0b1c8f3.png)


### 2.ヘックスに仕上げます
後半部分の全体像

![スクリーンショット 2020-12-18 1.18.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/b0a4ddaa-ce12-4453-f605-1e23e2fb1898.png)

１ノードずつ追いかけていくと、なんとなく過程が分かるのですが、要するに前半戦で作ったタイルの各成分を一度取り出して、増幅して、合成して、重なりが薄い部分（結果的に値が０に近い部分）でHEXの線を作ります。

![スクリーンショット 2020-12-18 1.59.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/3224e4c8-285b-0b72-a891-0fc4c856dcc4.png)

この部分ですね。
あとは値を倍にしてメリハリつけた後、Smoothstepノードを使って２値化して完成です。

![スクリーンショット 2020-12-18 1.59.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/25817ed6-b77e-7a98-a5e5-b1971861ef80.png)

SmoothstepノードEdge2の値の閾値を大きくするとHEXの線が太くなります。

![スクリーンショット 2020-12-18 2.03.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/9479b30a-0cea-04ba-e136-45c3166e1417.png)

![スクリーンショット 2020-12-18 2.03.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/43807a13-984c-6d54-00c3-cfaa95e9fcfb.png)



###完成！
![スクリーンショット 2020-12-18 1.07.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198311/e8b13df3-3285-be94-3c5b-fac0e59924c9.png)
---
その他のレシピは[ShaderGraphレシピ一覧](https://qiita.com/Teppy/items/73fc6141751a62f5265d)にまとまっています
作って理解するOSを読んだ感想とメモ

**この記事は[自作OS Advent Calendar 2020](https://adventar.org/calendars/4954) 18日目の記事です。**

セキュリティキャンプで 作って理解するOS という本を読みながらx86向けのOSを実装したので、（4ヶ月以上前に読み始めて少しずつ進めていたので初めの方に何を考えて読んでいたのかはうろ覚えですが）感想・メモを残しておこうと思います。


## この本の構成
この本の目次は[ここ](https://gihyo.jp/book/2019/978-4-297-10847-2)

#### 前半
解説パートになっています。2進数の解説から始まり、ハード・ソフトの基礎知識、メモリ管理、CPUの機能と使い方、各種周辺機器の制御方法などがまとめられていて、特定の機能についてわからなくなったときに探しやすい構成になっています。実装パートはフルアセンブリなのでnasmの使い方の解説もあります。

実装中、「あれ、〇〇ってなんだっけ？」となったときに何度も見返しました。

#### 後半
実装パートです。はりぼてOSのように華やかな見た目ではないですが、マルチタスクでアプリケーションを動かすなど、OSらしいことはできます。

# 実装パート各所のメモ
## リアルモードでの基本動作
この辺はBIOS呼び出しの使い方を見ながらやるだけ、という感じでした。普段アセンブリ言語を読むだけでほとんど書いたことがなかったのですが、ここでなんとなくのイメージが掴めました。

ここやっていることは単なる文字出力なのでOS作ってる～！という実感はあまり無かったです。

## プロテクトモードへ移行～現在時刻の表示
画面出力の処理を書く部分などハードウェアに近い部分の処理を抽象化していく感じが楽しかったです。OSを作ってる感が出てきて面白くなってきました。

## 割り込み・マルチタスク・特権状態
すごくOSっぽい機能です。〇〇ディスクリプタという単語がたくさん出てきてとても混乱しました。個人的には要復習ポイントです。

## 小数演算
普段は整数ばかり気にしていて浮動小数点のことを考えた事がありませんでした。

FPUのレジスタはレジスタスタックと呼ばれていて、その名の通りスタック状になっています。レジスタは80ビットで、先頭から順にST(0),ST(1)と表されるのですが、最後にプッシュした値がST(0)（図参照）となります。新しい値を追加するたび、どこにどの値が入っているのかを気にしなければならないので大変でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265415/829c909c-89a4-5f2f-0327-2f0e8d3b9082.png)

## ページング・コードの共有
ページングを実装したら残っていたバグによるページフォルトが次から次へと出てくるのでデバッグに滅茶苦茶時間がかかりました。原因は色々ありましたが、ページングとは関係ないところの超根本的な、メモリコピーのsrcとdestを間違えている、というミスもありました… どうしてここまで気づかなかったんでしょう？？？

```nasm:memcpy.s
memcpy:     ; void memcpy(src, dest, size);
    push ebp
    mov ebp, esp

    push ecx
    push esi
    push edi

    cld     ; clear direction flag
    
    ; 誤
    ; mov edi, [ebp +  8]  ; src
    ; mov esi, [ebp + 12]  ; dest
    
    ; 正
    mov esi, [ebp +  8]    ; src
    mov edi, [ebp + 12]    ; dest
    
    mov ecx, [ebp + 16]    ; size

    rep movsb

    pop edi
    pop esi
    pop ecx

    mov esp, ebp
    pop ebp

    ret
```

## ファイルシステム・ファイル読み出し
ファイルシステムは実装してとりあえず動いてはいるのですがisoイメージとしてWindowsにマウントすることができません。今後の課題です。

ファイル読み出しは、"SPECIAL.TXT" しか読み出せないのは悲しいので、関数化して任意の名前のファイルをメモリ上の任意の位置に読み出せるように機能追加しました。実行ファイルを読み込んで実行できるようにしたいですね。

## 電断処理
ACPIを使って電源を切ります。普段使っているOSだと何気なく押しているシャットダウンボタンですが、実機で電源が切れたときは感動しました。

この本では色々な過程をすっ飛ばしてとにかく電源を切るだけなのでもう少し細かく理解したいところです。

# 完成したもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265415/7c824ec6-94b0-d03c-6bfe-c80bb1026c57.png)
---

## これから挑戦してみたいこと
- 実行ファイルの読み込み→実行
- ファイルの書き込み
- APIの実装
- マウス操作
- とにかく音を鳴らす
- 他の言語で書き直す

## 全体を通しての感想
関数でのスタック操作等、C言語では自動でやってくれる部分でバグが発生するなど本筋とは関係ない部分で詰まったところが多かったです。しかし、今CPUがどんな命令を実行しているのか、メモリ上にどのようにデータが配置されているかを考えながらプログラムを書くという普段ならできない経験ができました。WindowsなどのOS上で動くプログラムを作るのに比べて、ハードウェアを直接制御している感じがマイコンを制御しているような感覚でした。

大部分の時間を消費したデバッグについては、デバッガの使い方があまり把握できていないので、もう少し勉強すれば開発効率を上げられそうです。

本を読み進める上で誤字が多いことが気になりました。特に後半は正誤表必須です。

## セキュリティキャンプの感想
デバッグを進めると初歩的なバグであることが多く、「こんなことで講師の方を呼び止めてもいいのだろうか…」となってしまい、詰まったときに質問をすることができませんでした。これで何日も溶かしたので、気軽に聞ける環境が大事だなと感じました。

当初目標にしていた、ユーザーランドでテトリスなどのゲームを動かすところまでは実装できませんでしたが、周りの刺激を受けつつ界隈の様子を知ることもできてすごく楽しく、いい経験になりました。実装できなかった部分はこれからも開発を続けていきます。講師・チューター・受講者の方々、ありがとうございました。
【Xcode12+Swift5+iOS14】 アプリ開発初心者の勉強日記 2 画像を扱う方法とメソッドの作成


## はじめに

### 簡単な紹介
UdemyのYuta Fujiiさんのコース “【iOS14対応】未経験者がiPhoneアプリ開発者になるための全て iOS Boot Camp “の授業メモです。

今回はコースの　“セクション６”　のメモとなります。

### 今回の記事の構成

- 画像を取り扱う方法

- ボタンをタップしてカウントアップ（メソッド作成、if文の使い方）
という流れでメモしたいと思います。


## 画像を取り扱う方法
1. 使いたい写真を ”Assets.xcassets” というフォルダの中にドラッグ＆ドロップで移動します。

2. “+”マークで　image viewを追加

3. 右の属性欄で　さっきほど追加したイメージの名前を　image欄に入力

4. 全画面表示させたい時、FULLに表示して欲しいと時に、右の属性欄＞View欄＞Content Mode＞Scale to Fill/Accept Fill

5. buttonやlabel上のimageももちろん可能

#### アイコンや画像を探す時に便利なサイト
1. iconfinder 　　->　　主にアイコンの素材を探すサイト

2. pixabay

3. unsplash


#### 間違えてstoryboardから引っ張ってきたプログラムを消した場合のバグ解決法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960378/a52eee75-389d-1466-88e6-fc674282e51b.png)
ここの一番左のアイコンを選び、エラーが出るところを削除すること。


## ボタンをタップしてカウントアップ

今回カウントアップのアプリ（？）の作成についてのプログラムはこちらです。↓

```countup.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label_count: UILabel!
    
    var count = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
   
        label_count.text = "0"
        
        
    }

    @IBAction func plus_action(_ sender: Any) {
        
        count = count + 1
        label_count.text = String(count)
        
        if(count > 5) {
            changeTextBackgroundColor()
            
            
        }else if(count<=5 && count >= 0){
            resetBackgroundColor()
            
        }
        
    }
    @IBAction func minus_action(_ sender: Any) {
    
    
        count = count - 1
        label_count.text = String(count)
        
        if (count<0){
            
            changeTextBackgroundColor()
            
        }else if (count<=5 && count >= 0){
            resetBackgroundColor()
            
            
        }
        
    }
    
    //新しいメソッド作成
    func changeTextBackgroundColor(){

        label_count.backgroundColor = .darkGray
        
        
    }
    
    func resetBackgroundColor(){
        label_count.backgroundColor = .clear
    }
    
}


```


主に　if文の使い方　と　メソッドの呼び出し方　を把握すれば大丈夫だと思います。

プログラミングある程度経験したらすぐ分かる部分ですが、大事な部分だけ例を載せておきます。

#### メソッド作成

```func.swift
func メソッド名{
}
```

```
    //新しいメソッド作成
    func changeTextBackgroundColor(){
        label_count.backgroundColor = .darkGray
```

#### if文の書き方

```if.swift
if(){
	}
	else if(){
}


if(){
		}
		else{
}
```
    
注：　条件文の　(　)　は省略可能です。

####  便利なCommand
1. Command + D ビルド

## 終わりに

2020年12月17日~18日にこの記事を書きました！

メモ２FINISH！

　＞　ー　＜
もうすぐ一年を迎えるスクラム活動を振り返る

@KimiChangと申します。
今年11月で入社して1年を迎えました。
アルバイト事業部にエンジニアで入社し、一ヶ月ほど前からスクラムマスターをしています。

Livesense Advent Calendar 2020 18日目では
もうすぐ1周年を迎えるアルバイト事業のスクラム活動の振り返っていこうと思います。
#なぜスクラムが始まったのか
アルバイト事業部にスクラムが導入されたのが去年の1月頃でした。
導入した経緯として開発チームの改編がありそれに伴うものでした。
簡単に言うと事業部の中にあった複数の開発チームを一つにまとめる必要がありました。
その中で働き方のFWとしてスクラムを使っていくことになりました。

立ち上げ時には他部署のスクラム経験者に協力してもらい
各スクラムイベントでフィードバックをもらいながら滑り出して行きました。

当時はまだCOVID-19が猛威を振るっていなかったこともあり大きな会議室で集まって話していたことを覚えています。
## 壁にぶち当たる
最初期ということもあり色々な問題が出てきました。
一部抜粋すると

* 差込タスクが発生したけどどうすればいいの？
* ポイント見積もりに参加するメンバーは適切？
* チケットを直前に知るので見積もりが難しい

などなど

問題が出てくること自体は改善点の多さとポジティブに捉えることもできますが
何よりも問題なのは、**自分も含めスクラムメンバー全員がスクラムに対しての理解度が低かったことでした。**

例えば、当時はPOもポイント見積もりに参加していたのですが基本的に開発メンバーのみでOKでした。
こういった初歩的なことも指摘されるまでは気付きませんでした。

## 課題の解消に向けて
誰もスクラムわからん問題を改善するために輪読会を行いました。
良書は沢山ありますが、今回はエッセンシャルスクラムをチョイスしました。
輪読会の目的は大きく分けて以下の二つでした。

* 個々のスクラム対する理解度を上げる
* スクラム改善をする中で一つの共通の認識を持つ

スクラム改善をするためにはまず、スクラム誰もわからん問題を解消しないといけなかったですし
意外と多いスクラムの用語が言語の壁みたいに立ち塞がるとその改善も難しそうなのでそれも合わせて解消していきました。

毎週3章前後読み進め、３ヶ月ほどで読了しました。
事前に資料を作成、各個人発表して議論をする形式でした。
十人十色の意見があり白熱することも多々ありました。

最終的には今日までやってきた我々の活動とエッセンシャルスクラムで学んだ基本とされる原則を比べることで
原則を鵜呑みにするでもなく、当てずっぽうの改善するでもない良い状態を作れたと思っています。

## 改善後の姿
ここの理解度が高まったことで改善行為そのものが活性化しました。

大きな改善の一つとしてグルーミングが追加されました。
・施策の概要
・今後の動き
などを話し合う時間が設けられ、今まで以上に施策に関われたりプランナーと話す時間が増えました。

また各施策について開発陣で確認する時間を設けることで作業量の把握を事前に行えるようになり
ポイント見積もり時に混乱することが減りました。

また、エッセンシャルスクラムに登場したポートフォリオプランニングを参考にし
チーム全体に事業部の方針を話すスクラムイベントがQ毎に設けられました。

# スクラムは変わり続ける
しばらく改善を続けて安定を感じる時期もありました。
ですが、エッセンシャルスクラムにある通り、スクラムの改善に終わりはありません。

* スクラム理解度のばらつき
* 上流から施策へ関われる環境
* 受託開発感の解消
* スクラム原理主義化してしまう懸念
* 今後のスクラムの到着点

まだまだ課題は山積みです。

一方で各個人の改善意識の高まりは間違いなく感じました。

* グルーミングの追加
* ポートフォリオプランニングの追加
* 各ロールの役割定義

その甲斐もありこういった改善が生まれ、アルバイト事業部のスクラムの基礎が出来上がりました。
まさしく今年のスクラム活動は今後の挑戦を支えるための基礎が出来上がった年でした。
## スクラムマスターとして何をしていくか
最後に個人的な話を少し。
最初に書いたように最近スクラムマスターになったのですがスクラムマスターの重要な役割として
「スクラムチームの成長を促す」
というものがあると思います。
責務を果たすべく今以上に知識の吸収に努めようと思いますが、一方で盲目的にスクラムを信仰せず常にスクラムが適切なのかは考えていきたいです。

以上で終わりです。最後まで読んでいただきありがとうございました。
オフショアリングにおけるコミュニケーションの問題

「良い文化も悪い文化もない」
違いが何であれ、お互いを尊重しなければなりません。

オフショアリングでコミュニケーションの問題が発生した場合、多くの企業がコミュニケーター、またはブリッジエンジニアを配置することで問題を解決するというパターンは確かに多いです。しかし、それは問題の根本的な原因の解決になりません。
お互いの文化を理解し、尊重することが非常に重要です。 お互いの信頼、理解、尊重は不可欠です。

より具体的な解決策は下記の動画にご覧ください。
https://www.youtube.com/watch?v=qaabHYg4e84&t
part6 Class 



# Class化

オブジェクト指向へ。キーとなる考え方が

-   隠蔽(capsulation)
-   継承(inheritance)
-   多形(polymorphism)であると。
    どういうことですか？



とりあえず、例へ

```ruby
def puts_hello name
  puts "Hello #{name}."
end

def gets_name
  name = ARGV[0] || 'world'
  return name
end

name = gets_name
puts_hello name
```

｜｜←これは論理演算子で、nameが ARGV[0]またはworldであるときnameを返すということですね。まだmainでloopがあるのでそこをなくそうという考えらしいです。


## 定義

以下は結構、ナニソレ美味しいの？が続きます。書式ばっか書いてます。~~個人的にこっちが好き~~
クラス化の定義は

    class クラス名
    
    end


クラス名の定義の最初の文字は大文字で始める。
そしてここに

    class クラス名
    
      def initialize()
        ...
        ...
      end
    
    end


classとendの間にinitializeメソッドを追記している。
initializeメソッドってなんぞやと
classが"new"されたときに呼び出されるメソッド。であり、classのデータの初期化も行います.
しかし、まだこの状態ではclassを使えない&#x2026;
ここででてくるのが"new"です。上でもclassが"new"された時と書いてあるけどそれすら意味不明ですよねわかります。~~書いている当時の私もわかってません~~
newメソッドを使うことでclassをインスタンス化できる。
インスタンス化とはclassの定義から新たな変数を作ることです。また、インスタンス変数とは以下で登場する@nameのように@から始まる変数のことです。
さて,newメソッドはnewに与えられた引数をそのままinitializeに与えます。

長々と書いてきたけど上のコードを変えて意味を理解していこう。

```ruby
class Greeter
  def initialize
    @name = gets_name
    puts_hello
  end

  def puts_hello #salute
    puts "Hello #{@name}."
  end

  def gets_name
    name = ARGV[0] || 'world'
    return name.capitalize
  end
end

Greeter.new
```

まず,クラス名はGreeterであり、Greeterというクラスのnewメソッドが実行されます。newでの引数がそのままinitializeに与えられます。今回はありませんね。では、@nameというインスタンス変数が現れます。そのインスタンス変数はgets\_nameで定義されるようになります.その後puts\_helloが実行され、表示に向かいます。（果たして合ってるのでしょうか）


## 継承とOverride

継承？
継承には<を使用します.
ひとまず、例

```ruby
  class Breeter
    def hello
      "Hello "
    end
  end

  class Strings < Breeter
    def mornig
      "morning"
    end
  end

greeter = Breeter.new
puts  greeter.hello
```

そして

    hello

が実行結果です。
一番最後のputs greeter morning にすると実行結果はmorningになります。
このときBreetetクラスはStringsクラスのスーパークラスという。(何故かBreeterをGreeterにするとmismatchが発生し実行できない、間違ったスーパークラスを指定するとでるみたいだけど、定義もしてないのにどこで引っかかってるんだろうか）


Override？
オーバーライドとは、スーパークラスで定義しているメソッドと同じ名前のメソッドを別のクラスで再定義すること。
例へ

```
require 'colorize'

class Breeter
  def hello
    "Hello" 
  end
end

class Strings < Breeter
  def moring
    "Morning"
  end


  def hello
    "world"
  end

end

greeter = Breeter.new
puts greeter.hello.red

string = Strings.new
puts string.hello.green
```

そして実行結果が

    Hello #赤色の文字です
    world　#緑色の文字です

これでスーパークラスのメソッドをサブクラスで書き換えて使用することができるし、スーパークラスで定義しているものも使うことができる


# 参考文献

[チャート式ruby-Ⅵ(hello class)](https://qiita.com/daddygongon/items/969ad5112878f6dab844)

\![ruby-2.5.5p157](<https://img.shields.io/badge/ruby-2.5.5p157-brightgreen>) 



------
 - **source** ~/my_ruby/grad_members_20f/members/majesty99/for_post/ruby6.org