OmniAICreator/Qiita-1.07M huggingface dataset:
【イベント】学生向けハッカソンに運営として参加した

先日、札幌で行われた学生向けハッカソンイベントに、サポートというポジションで参加してきました。
![スクリーンショット 2022-12-14 14.45.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737303/5336b456-0c72-e483-7afb-e1075963dea4.png)

# イベント詳細
今回はノーコードの開発ツール「Click」を使用し
コロナ禍で発生した課題を解決するというテーマで、いくつかのグループに分かれてアプリケーションを作成しました。
札幌市内の企業含む４社のエンジニアが、それぞれのグループにサポートとして入りました。

イベントは以下の流れで進行されました↓
・1日目AM：clickの操作説明、簡易的なSNS機能の作成
・1日目PM：アイデア創出ワーク、開発ワーク
・2日目AM：開発ワーク、座談会
・2日目PM：プレゼンテーション

# Clickについて
ノーコードでアプリケーションの構築が可能なため、コーディングの経験が無くても扱いやすい開発ツール。「エレメント」と呼ばれるパーツを配置することで画面をデザインし、画面遷移も簡単に設定することができる。
詳細については[こちら](https://click.dev/)からどうぞ。無料でアカウント作成も可能です。
![スクリーンショット 2022-12-15 8.48.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737303/1642cc2f-b856-fb14-915a-85fb220d1627.png)

# 学生たちの様子
先ほどもありましたように、サポートエンジニアという立場でグループに参加しました。私が入ったグループは、コロナ禍でのリモート授業やサークル活動自粛の影響で、大学内での交流が希薄になっていることと授業の空きコマを有効活用したいという需要を掛け合わせて「空きコマで使えるマッチングアプリ」なるものを作成しました。
利用者各々が空きコマを登録することができ、設定されたイベントに参加又はイベントを開催できるというものです。
当初は空きコマ登録した人をマッチングさせることのみを想定していましたが、イベントというコンテンツを提供することでより大人数での交流を可能にするものにグレードアップさせていました。ユーザー目線に立った素晴らしい考えだと思います。
２日間という短い時間で試行錯誤し、話し合い、役割分担して取り組む姿は非常に頼もしかったです。一生懸命取り組める場を提供できたことが本当に嬉しかったです。
![IMG_0081.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737303/090375f9-5c3b-ab1f-3f4a-4d2517399198.jpeg)


# 私も学びがありました
開発には携わっていないものの、マネジメント的なことを担当させていただきました。
スケジュールを組む上で必要なタスクの洗い出しをしてガントチャートを作成したり、全体の進捗確認をするなどしていました。

今回の場合、
* 設計作業(機能定義、画面遷移図作成)
* 開発作業
* テスト
* プレゼンテーション準備

の４つをベースにしてスケジュールを設定しました。

実際の現場ではもっと細かく分類されると思いますが、一連の流れはこんな感じだと教えていただきました。
しかし結局時間がギリギリになってしまい、余裕をもったスケジュール作成が重要だと実感しました。

# 最後に
今回のイベントは学生の満足度も全体的に高く(アンケートより)、成功したと言えるのではないでしょうか。これをきっかけにITの世界に興味を持ってくれれば嬉しい限りです。
私自身も学生たちと関わる中で多くの学びがあり、大変勉強になる２日間でした。再びこのような機会があれば、更にクオリティを上げていけるといいなと思いました。

# おまけ
北海道も満喫しました！
![スクリーンショット 2022-12-14 14.46.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737303/17cac8e6-756e-b959-aabf-384ce9b062a4.png)
![スクリーンショット 2022-12-14 14.46.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737303/2cbbe57f-9b94-6112-e13a-dfb979b171e7.png)
Rubyではpという変数名をなるべく避ける

Rubyプログラミングの小ネタです。

Rubyに限らずプログラミング全般の慣習として、寿命の短い変数の場合、意図的にそのオブジェクトを表す名前の頭文字1文字だけにすることがよくあります。

```ruby 
books.map { |b| b.title }
```

しかし、Rubyではその場合でも`p`だけはなるべく使わない方が良いです。

```ruby 
# 問題なく動くがあまり望ましくない
people.map { |p| p.name }
```

それはなぜか？`Kernel.#p`メソッドと名前が被ってしまうからです。

https://docs.ruby-lang.org/ja/latest/method/Kernel/m/p.html

もしデバッグで`p`メソッドを使いたくなったりすると、途端にコードがわかりにくくなります。

```ruby 
# pメソッドでp.nameをターミナルに表示する（？）
people.map { |p| p p.name }
```

Rubyは懐が深い言語なので、実は上のコードもちゃんと動きます。
気になる方は以下のコードをirbにコピペしてみてください。

```ruby 
class Person
  def name = 'Alice'
end
people = [Person.new]
people.map { |p| p p.name } #=> "Alice"
```

とはいえ、決して読みやすいコードではないので、最初から`p`以外の変数名を検討した方が良いと思います。

```ruby 
# あえてpという変数名を避ける
people.map { |person| p person.name }
```

## p以外にも避けるべき1文字の変数名は何かある？
いえ、僕が調べた限り、`p`だけだと思います。
KernelモジュールやObjectクラスには`p`以外の1文字メソッドは定義されていません（2文字のメソッドとしては`pp`がありますが）。

https://docs.ruby-lang.org/ja/latest/class/Kernel.html
![Screen Shot 2022-12-15 at 8.47.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/bc26989b-af83-de88-df0f-f0de9084b92c.png)

https://docs.ruby-lang.org/ja/latest/class/Object.html
![Screen Shot 2022-12-15 at 8.48.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/6c082a2c-ff45-6fa7-c650-2ed5fb44d2b7.png)

もし他に「RubyやRailsを使う場合はこんな1文字メソッドにも注意が必要だよ」という情報を知っている方がいたら、コメント欄等で教えてください！

## hashも避けた方がいいかもしれない
（2023.1.4追記）
1文字ではありませんが、Objectクラスには`hash`メソッドが定義されているので、`hash`という変数名もなるべく避けた方がいいかもしれません。
まあ、`hash`メソッド自体を使う機会はそれほど多くないと思いますが。。。

```ruby 
# Rubyではhashメソッドが元から定義されている
hash
#=> -3904717994781455203

# hashという変数を定義すると変数が優先的に参照される
hash = {}
hash
#=> {}

# ()やself.を付けるとhashメソッドが呼び出せる
hash()
#=> -3904717994781455203
self.hash
#=> -3904717994781455203
```

https://docs.ruby-lang.org/ja/latest/method/Object/i/hash.html



## あわせて読みたい
そもそも変数名を省略しすぎるとそれだけで可読性を落とす恐れがあります。
この問題についてはこちらのブログで説明しています。

https://blog.jnito.com/entry/2020/10/20/092724
Slack(スラック)文字装飾の概要

# この記事について
- SlackへGASからメッセージを送る際の書き方について備忘録的に記載

# メッセージ書式設定について

## 太字
テキストをアスタリスクで囲みます
\*対象のテキスト\*

## イタリック体
テキストをアンダースコアで囲みます
\_対象のテキスト\_

## 取り消し線
テキストの前後をチルダで囲みます
\~対象のテキスト\~

## コードの書式設定
テキストをバッククォートで囲みます
\`対象のテキスト\`

## ブロック引用
テキストの前に山括弧を追加します
\>対象のテキスト

## コードブロック
テキストの前に 3 つのバッククォートを追加します
\```対象のテキスト

## 順序付きリスト
テキストの前に 1 とピリオドを追加して、キーを押します
行をインデントするには、 [Tab]を押します

1. 対象のテキスト

## 箇条書き
テキストの前にアスタリスクを追加して、キーを押します
行をインデントするには、 [Tab]を押します
\* 対象のテキスト
Turborepoを使ってみた


[Next.js + サーバーサイドTypeScript + 関数フレーバーでクリーンなアプリを作ったので実装意図とか書く Advent Calendar 2022](https://qiita.com/advent-calendar/2022/shwld)
の**15日目**。[株式会社mofmof](https://www.mof-mof.co.jp/)に生息している[shwld](https://twitter.com/shwld)です。

[RelayStyleページネーションをPrismaで実装する](https://qiita.com/shwld/items/6f8d186adb8064d27a65)について書きました。

# Turborepo
Next.jsを作っているVercelが提供するmonorepo構成のためのビルドツールです。

https://turbo.build/

前日に書いたプロジェクトアーキテクチャを実装するに当たり、レイヤーをちゃんと分けておきたいと思い、単にNext.js上にディレクトリを分けて実装するのではなくTurborepoによるmonorepo構成を選択しました。

[Nx](https://nx.dev/)など他のツールを選択しなかった理由はあまりなく、NextJSを選定しているため同じ開発元であるTurborepoを選択しました。

# workspace構成

構成は以下です。

```json:package.json
"workspaces": [
  "apps/*",
  "packages/*",
  "domain/*",
  "use-cases/*",
  "infrastructures/*"
]
```

Turborepoは正直使いこなせてる感じはまだないのですが、以下が良いと思ったところです

## Internal package

https://turbo.build/repo/docs/handbook/sharing-code/internal-packages

monorepo内で使えるnpmパッケージを作れるような感じのものです。
workspaceを切った中にpackage.jsonを作り、nameを設定すると他のworkspaceからもその名前で依存を解決できるというものです。

例えば以下のようにドメインロジックを参照します。

```json:package.json
{
  "dependencies": {
    "core-domain": "*"
  }
}
```

これで、

```typescript
import { tryCatch } from 'core-domain';
```

のように参照できます。

ただし、Next.jsから使う際にインポートした依存を列挙する必要があります。

```js/apps/web/next.config.js
const withTM = require('next-transpile-modules')([
  'core-domain',
  'db',
  'db-background-job',
  'db-pubsub',
  'mailer',
  'graphql-resolvers',
  'ui',
]);
```
[https://github.com/shwld/uzumaki/blob/main/apps/web/next.config.js#L1-L9](https://github.com/shwld/uzumaki/blob/main/apps/web/next.config.js#L1-L9)

## 最後に

buildの依存グラフを出してみました。

![my.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51402/6ffe17ea-f815-93f2-3c57-cb8442d73a8a.png)
（use-casesがdbに依存してるじゃないかと思うかもしれませんが、ちょっと事情があり...後日このカレンダーの別記事に書きます）
# 次回予告
明日は[Next.js/React + GraphQLのコンポーネント整頓術](https://qiita.com/shwld/items/b4956d648796b5e2f4d7)について書きます。
【プログラミング初心者向け】配列の二人三脚を避けよう

[フィヨルドブートキャンプ](https://bootcamp.fjord.jp/)のコードレビューでよく指摘してるシリーズです。

コードレビューをしていると、次のように2つ（もしくは2つ以上）の配列を作って、それらをシンクロさせながらループ処理するロジックをよく見かけます。

```ruby
# 配列を2つ用意する
names = ['Alice', 'Bob', 'Carol']
points = [90, 98, 85]

# 2つの配列から同じindexの要素を取得しながらループさせる
names.size.times do |i|
  name = names[i]
  point = points[i]
  puts "#{name}さんは#{point}点です"
end
#=> Aliceさんは90点です
#   Bobさんは98点です
#   Carolさんは85点です
```

しかし、このロジックは2つの配列の要素数と並ぶ順番に大きく依存します。たとえば次のように片方の要素が増えたり、片方の要素がソートされたりすると、おかしな内容を表示することになります。

```ruby
names = ['Alice', 'Bob', 'Carol']
points = [90, 98, 85]

# 名前だけ要素が増える
names << 'Dave'

# Daveさんの得点が表示されない！
names.size.times do |i|
  name = names[i]
  point = points[i]
  puts "#{name}さんは#{point}点です"
end
#=> Aliceさんは90点です
#   Bobさんは98点です
#   Carolさんは85点です
#   Daveさんは点です
```

```ruby
names = ['Alice', 'Bob', 'Carol']
points = [90, 98, 85]

# 点数がソートされる
points.sort!

# 90点だったAliceさんが85点になっちゃった！
names.size.times do |i|
  name = names[i]
  point = points[i]
  puts "#{name}さんは#{point}点です"
end
#=> Aliceさんは85点です
#   Bobさんは90点です
#   Carolさんは98点です
```

## 配列の二人三脚？

僕はこういうロジックを見ると配列同士が二人三脚しているように見えます。

![68747470733a2f2f626f6f7463616d702e666a6f72642e6a702f7261696c732f6163746976655f73746f726167652f626c6f62732f72656469726563742f65794a66636d467062484d694f6e73696257567a6332466e5a534936496b4a42614842424d4852775157633950534973496d563463434936626e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/61fd7171-376f-3bb9-0c09-61cc400f38e2.png)

すなわち、プログラムをちゃんと動かすには「はい、0番目の要素！」「次は1番目の要素！」と2つの配列が息を合わせて交互に足を出さなければなりません。勝手に片方の配列の要素が増えたりすると、足がもつれて転んでしまうわけです。

ちなみにコードレビューしていると「三人四脚」や「五人六脚」みたいなケースもまあまあの頻度で見かけます😅

## 自分が書いたコードは絶対に大丈夫？でも実務では……

もちろん、プログラミング学習で作るような小規模なプログラムでは「勝手に要素が増えたりソートされたりすることはないから絶対大丈夫！」と思うかもしれません。

しかし、仕事で書くコードはめちゃくちゃ巨大で複雑です（下記Qiita記事を参照）。

https://qiita.com/jnchito/items/c9ca22efa270ff1b7f3d

そのため、こういうロジックを書いていると、自分の予期しないところで配列の中身が変更されるかもしれません。実際に変更されることはなかったとしても、「ここで使っている配列はどれも絶対に変更されていない！」と断言するのが難しくなるので、不安を抱えたままリリースすることになったり、自信が得られるまでコードを調査するのに時間を取られたりします。

よってこうしたロジックは避けるべきです。

## 解決策：ハッシュを使おう

この問題の解決策はいくつかありますが、一番お手軽なのはハッシュを使うことです。ハッシュを使えば、nameだけが増えたり、pointだけがソートされたりすることは起きにくくなります。

```ruby
exam_results = []
exam_results << {name: 'Alice', point: 90}
exam_results << {name: 'Bob', point: 98}
exam_results << {name: 'Carol', point: 85}

exam_results.each do |result|
  puts "#{result[:name]}さんは#{result[:point]}点です"
end
#=> Aliceさんは85点です
#   Bobさんは90点です
#   Carolさんは98点です
```

他にもデータを格納するクラスを定義したり、Structを使ったりする解決策が考えられます。

いずれにしても、「nameとpointはいつでも1つのセットだよ！！」ということが保証できるようなデータ構造を使うのが大事なポイントです。

## まとめ：「もろいプログラム」ではなく「堅牢なプログラム」を書こう

プログラムの良し悪しを評価するときに「このプログラムはもろい」とか、「このプログラムは堅牢だ」という言い方をするときがあります。

もろいプログラムは「壊れやすいプログラム」という意味です。「うっかり○○してしまうと、エラーが出たりおかしな結果になったりする」という場合はもろいプログラムだと言えます。たとえば、最初に紹介した「2つの配列を用意して二人三脚するロジック」はもろいプログラムです。

反対に堅牢なプログラムは「壊れにくいプログラム」という意味です。「よっぽど特殊なことをしない限り、エラーが出たりおかしな結果になったりすることはない」というプログラムは堅牢なプログラムだと言えます。

ちなみに、上で示したハッシュを使う解決策は配列の二人三脚に比べれば堅牢ですが、ハッシュ自体は自由に要素を出し入れできてしまうので、実はそこまで堅牢ではありません。より堅牢さを求めるのであればクラスを導入する方がベターです。この話はチェリー本の第7章の冒頭で同じような事例を出しているので、そちらを参考にしてください。

https://gihyo.jp/book/2021/978-4-297-12437-3
自動売買も「ものづくり補助金」の対象らしい



## 自己紹介・前書き
前々からひっそりと個人的に裁量トレードの傍らでpythonやTradingViewのpineスクリプトでせこせこと検証したりやってる、がうぅ！？といいます😉
半年ぐらい前にツイッターを眺めてたら、FXや仮想通貨の自動売買ツール等も「ものづくり補助金」の対象になるとのサムネ画像が目に止まって、面白そうなのでブクマしといたんですが、他の仕事で忙殺されて忘れてしまってました😂
そして、ブクマ整理してるときに、ふと思い出したので少し整理してみようかなぁと思って筆を取ることにしたのですが、公式のプレゼン用のpdfが異様にわかりやすく整理されてたので、今回はそこからDXやデジタル枠に絞って対象になりそうな経費案件を少し具体化して整理してみようかなぁと思いました。
botter界隈のアドカレの記事みてると、数理モデルやら高度な話が多く自分自身理解するだけで精一杯のレベルの中でちょっと毛色の違う内容で恐縮ですが。
この補助金のことをそもそも知らないという方もいそうなので、少しでもハードルが下がるキッカケになれば良いなぁと。

## 結論
いきなり結論で恐縮ですが、特定ドメインに特化した経費に助成される補助金なので、高額のデータ・クラウドサービス等、共同で必要な物を買えるので、よかったら一緒に協力しませんかということです。
5人程度の少人数でも受けることは可能(助成額の効率性から考えると少ないほうが良い)なので、必要あれば有志で会社作って高額データ等を共同購入で買おうということなので、我こそはという方はお声がけ願えれば幸いです。
目的やレベルに応じて複数のグループに分けて会社を作るのも良いかと思われます。


以下色々と公式サイトのリンクや考察・注意事項等を書いているだけなので、興味あるよという方はこのままどうぞ。対象読者は個人の副業エンジニアや数人単位のチームを想定して一部抜粋しています。
内容が入り組んでて体裁を整えるのが大変なので、羅列気味になってるのはご容赦😅
理解度が高まったり実際に進めることができたら、適宜リファクタリング(笑)を進めていけたらと思います。

## 検討・懸案事項

基本の事業計画(3)の付加価値をどのように定量化するか、デジタル枠事業計画(1)の条件をどう満たすかがbotter特有のドメイン的な問題かと思われます。
(3)に関しては、自作EAをオンラインサイト売るなり、MAM口座で取引手数料からのマージンで売上もらうも有りかも。
デジタル枠裁量トレードでは難しい戦略ごとの売買記録作業、統計データ算出の省力化・AI開発により売買戦略の省力化・人材育成にも繋がる等もDXの一貫と考えることができるかもしれない。
あと、補助事業者になった後の義務の遵守も意識する必要有り。


## 参考・メモ
### 公式サイト

https://portal.monodukuri-hojo.jp/about.html

### 概要
ぶっちゃけ、↓のpdfの資料がよくまとまっており、これだけで概要は大体把握できる。
この手の行政の概要資料でここまでデザイン的にもキレイにまとまってるのは珍しく、補助金自体の運営期間や予算枠が腰を据えたものであり、広報にも力が入れてるんだなぁと改めて認識。

https://portal.monodukuri-hojo.jp/common/bunsho/ippan/6th/gaiyou_210224.pdf

### 詳細
最初に観た資料がこちらでした。行政文書あるあるで読み込むのが大変😅

https://portal.monodukuri-hojo.jp/common/bunsho/ippan/11th/reiwakoubo_20220726.pdf


### 必要なもの
事業計画作成・実行
賃金引上計画表明書（直近の最低賃金と給与支給総額の明記、引上計画に従業員が合意済の書面）
決算書(2年間程度の経営実態)
デジタル枠だと　GビズIDも必要

### 該当事項
中小企業・小規模事業者等が取り組む革新的サービス開発・試作品開発
経費が何でも該当するわけではなく、実施事業の設備投資等が補助対象

### 基本要件
以下の要件を全て満たす3〜5年の事業計画策定
(1)事業計画期間内において、給与支払総額1.5％以上増加。（一部例外で年率平均1％）
(2)事業計画期間内で最低賃金＋30円(京都府なら時給1000円)以上水準。
(3)事業者全体の付加価値額を年率平均3%以上増加

### 補助事業者の義務（交付決定後遵守事項）
・本事業完了後は30日以内もしくは、対象期限日の早い方の日までに補助事業実績報告書の提出
・事業完了の会計年度(4月〜3月)終了含む５年間、毎会計年度終了後60日以内に事業化などの事業化状況(収益状況含む)知的財産権等報告書により報告すると共に、本事業に関係する調査に協力をしなければならない。また、最低賃金の確認のため、賃金台帳の提出。

### 注意事項
・提出した事業計画書を外部有識者審査委員会で評価・事業提案採択。(グローバル展開型は特に優れた内容を求めるとのことだが、裏を返せばそれ以外は緩いともとれる)
・申請書類の不備不足に厳重注意。不備がある場合不採択・異議申立不可。（不備例：小規模事業者でないにも関わらず、通常枠で補助率2/3の事業計画を提出）
・過去の締切回において不採択となった事業者は、次回締切に再度応募可。(要件等が変更となっている可能性あるので要確認)
。不正な行為が判明した場合は、不正内容の公表等を受けることや「補助金等に係る予算の執行の適正化に関する法律」第29条に基づき、5年以下の懲役もしくは100万円以下の罰金または両方に処せられる可能性あり。
（不適切な行為の例）
・作業等にかかる費用等とかい離した高額な成功報酬等を申請者に請求する。
・補助金申請代行を主たるサービスとして営業活動等を行う。
・申請書に虚偽の内容の記載を教唆する、又は、作成支援者名を記載しないように求める

#### デジタル枠
DX（デジタルトランスフォーメーション）に資する革新的な製品・サービス開発又はデジタル技術を活用した生産プロセス・サービス提供方法の改善による生産性向上に必要な設備・システム投資等を支援
・補助率：2/3
・補助金額は従業員数に応じて変動、人数が少なくても補助額は大きい。(5人以下100万円～750万円、6～20人100万円～1000万円、21人Over100万円～1250万円)
・設備投資は単価50万円（税抜き）以上必要
・補助対象経費は機械装置・システム構築費、技術導入費、専門家経費、運搬費、クラウドサービス利用費、原材料費、外注費、知的財産権等関連経費等。(PC等汎用的に利用できるものは対象外)

また、デジタル枠の事業計画の条件が(1)～(3)とのこと。
(1)次のいずれかに該当する事業であること
・DXに資する革新的な製品・サービスの開発
・デジタル技術を活用した生産プロセス・サービス提供方法の改善
(2)経産省公開するDX推進指標を活用して、自己診断の実施と結果をIPAに提出
(3)IPAのSECURITY ACTIONの2つ星以下の宣言を応募申請時点で行う
Auth0でユーザーをエクスポートする

Auth0から登録ユーザをCSV等でダウンロードしたい。
その方法を２パターン記載します。

## Bulk User Exports
https://auth0.com/docs/manage-users/user-migration/bulk-user-exports
プログラムやcurlからManagement APIでバルクエクスポートする方法。

```
$ curl --request POST \
  --url 'https://YOUR_DOMAIN/api/v2/jobs/users-exports' \
  --header 'authorization: Bearer {yourMgmtAPIAccessToken}' \
  --header 'content-type: application/json' \
  --data '{"connection_id": "{yourConnectionId}", "format": "csv", "fields": [{"name": "user_id"}, {"name": "email"}, { "name": "user_metadata.country", "export_as": "country" }, { "name": "user_metadata.city", "export_as": "city" }]}'
```

リクエストするBodyのjson内容。件数が多い場合は"limit": 20のように項目を加える。
```json
{
   "connection_id": "{yourConnectionId}",
   "format":"csv",
   "fields":[
      {
         "name":"user_id"
      },
      {
         "name":"email"
      },
      {
         "name":"user_metadata.country", "export_as":"country"
      },
      {
         "name":"user_metadata.city", "export_as":"city"
      }
   ]
}
```


## Extensions: User Import / Export
管理画面上からダウンロードする方法。件数が少なければこれでいいと思う。

Extensions > All Extensionsから User Import / Exportを追加する。

![スクリーンショット 2022-12-05 16.22.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6404/ecae3d05-dcb9-477b-1d2e-2769235cbeb4.png)

追加したUser Import / ExportからFieldsを追加、Export FormatでCSVを選択、Connectionでデータベースを選択、エクスポートボタンを押してダウンロードする。

![スクリーンショット 2022-12-05 16.23.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6404/e5d1fee6-8ace-7ae5-67c4-ee40e40e6051.png)
「やばい、遅延...」の時に考えてほしいこと

## はじめに

エンジニアが開発をする時に、必ず遭遇する遅延。
自責・他責あるかと思いますが、遅延という事実は同じです。

## 考えてほしいこと

### 開発している機能を待っている人は誰か？いつ使うのか？

開発をしているということは、必ず、利用者がいるはずです。
`誰が、いつ、どのように、何のために利用するのか？` をあらためて整理することで、今何ができるかが見えてきます。

### 自分でやり切らない。チームでやり切る。

自身の開発が遅延しているので、自分で何とかするを考えてしまいがちです。
依頼されたタスクで、任されているから`迷惑かけたくない`と思うのは仕方ないことかもしれませんが。

何より、機能が提供されないことが、一番の問題です。
`どのような手段でもいい`ので、`完了させる`ことを目指しましょう。

## 最後に

２点だけですが、結構重要なことです。
私の経験上ですが、遅延はこの２点の考えが抜けている時に発生することが多いです。
最後に帳尻が合えばそれでいい。終わりよければ全てよし。
この考えで快適なエンジニアライフを過ごしましょ。

私がよくやっている、`遅延するかも？の検知方法`は、`完了まで脳内でタスク再生できるか？`です。
設計や、タスク計画と同じことではあるのですが、脳内でイメージするだけならすぐできるので、これでリスクを洗い出して先に潰しておくと、問題発生を減らすことができます。
１つの小さな開発でも、１つのプロジェクトでも、複数横断でも、要求定義でも結構有効でした。
LGWAN-ASPって何？調べてみた。

# はじめに
前回の記事でLGWAN（総合行政ネットワーク）について簡単にまとめました。
https://qiita.com/suzuking1125/items/578331bbe0165adb44f9

ざっくりLGWANとは
 - 地方公団体の組織内ネットワーク
 - 一般回線と比べ、セキュリティやコスト面に優れる等のメリット。
 - 情報掲示板、メーリングリスト機能、専用ドメイン（LG.JP）などの機能が備わっている。

 **わざわざ専用回線なのに機能少なくない？...** 

と思っていたら **LGWAN-ASP** というモノを通じてさまざまなサービスを使用しているとのこと、
というわけで簡単に調べてみました。

# LGWAN-ASPとは

**LGWAN-ASP(Local Government Wide Area Network Application Service Provider)** 
> LGWAN-ASPとは、LGWAN利用者（地方公共団体の職員等）に、LGWANネットワークを介してサービスを提供する事業者およびサービスを指します。

図にすると↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669659/56e6c86a-daa4-6c1b-bf95-952871001949.png)

### 目的
閉域ネットワーク（地方自治体）に向けてサービスを提供しているLGWAN-ASPを使うことで、それぞれの自治体がサービスやリソースを共同利用することができ、最近よく聞くDX化が期待できる。

# LGWAN-ASPのメリット

LGWAN-ASPはLGWANを介してサービスが提供されるので、利用者は高いセキュリティ等のLGWANの恩恵をそのまま受けることができるのも良いところ。

##### メリット
-  **経済性** 
システム開発がなく、保守運用専門人員を抱える必要がないため、開発費、保守運用費等が低コストで実現可能
 - **迅速性** 
すでに提供されているサービスを利用すれば、短期間でのサービス導入が可能
- **安定性**
サービスの機能及び品質が整備及び充実しているため、安定的にサービスの利用が可能

# どんなサービスを提供してる?

大きく分けると以下に分類される  

**アプリケーション及びコンテンツサービス** 
 アプリケーションや情報コンテンツなどを提供する。電子申請・届出、行政情報共有、電子入札・調達などがある。
**ホスティングサービス**
サーバー機器の提供、運用管理を行う。
**ネットワーク層及び基盤アプリケーションサービス**
ホスティングサービスを構成する機器の設置スペース、設置スペースでの電源、空調などの設備を提供する。
**通信サービス**
ホスティングサービスの構成機器をLGWANに接続する専用回線を提供する。
**ファシリティサービス**
IPアドレス、ドメイン名管理、基本プロトコル群及び認証基盤、LGWAN電子文書交換システムなどアプリケーション基盤を提供する。

LGWAN-ASPサービスリストを公開してるので見てみると面白いかも
[LGWAN-ASPサービスリスト](https://lgwan-asp.j-lis.go.jp/service_list)

# 感想

主に利用者側の視点でのメリットやサービスの調査をおこなったので、次調べることがあれば提供者側（事業者やサービス提供者）にフォーカスを当てて調べてみたい。

まとめるのに慣れてなくてめっちゃ時間かかる；；
ArduinoUNOとSSD1306でデモ(Adafruit SSD1306,Adafruit GFX)


x ライブラリのインストール方法は、めんどいので省略
x I2CのIDアドレスは、3Dから3Cに変更した。
x サイズは、約??KB

x OLED096UNO-Aです。


目的
OLEDのテスト

変更箇所


```c++


#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32



```


![o_cop246.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/efaeecbb-15c5-860e-f147-a1994ea1b4c2.jpeg)


![o_cop247.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/3f20b194-6352-1c0e-e176-349112844178.jpeg)



![o_con782.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/9ffe239e-66fa-dde9-718f-dd9a35d07084.jpeg)
CTO興味ある人へ：CTOの業務についてその６　組織設計

CTOを長年やってるとよく聞かれる質問です。
```
CTOの仕事ってどんな仕事があるんですか？
```
から始まった**CTOの業務について**のその６です。

# 組織設計
前回までチームビルディングで中の人にフォーカスした内容でしたが、組織設計では、組織の組み方についての話をしたいと思います。
## 機能型組織
営業、企画、デザイン、開発等の機能別の組織です。一番一般的でもあり、立上げベンチャーでは、一番最初に選択する組織形態だと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/aab694af-88cc-3e20-9fed-16720407bf02.png)
■メリット
エンジニアの場合は、上長がエンジニアでありエンジニアスキルに対して適切なジャッジ、評価が可能となる。部署のメンバーが全てエンジニアなのでスキル共有も進みやすい。

■デメリット
事業部とは、組織が違うので、PLベースの売上に向けての意識やエンドユーザーに向けたサービス等は、温度感が伝わりずらくなる。ベクトルが技術・開発強化に向かいやすい。

## 事業型組織
事業毎、プロダクト毎で機能が一貫集約している組織です。組織が大きくなってくると選択されやすいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/0b60d42f-82d9-011e-3fe6-6213f5d9688a.png)

■メリット
上長が数字管理者、サービス・プロダクト責任者なので、目標のメインがエンジニアスキルでなく、売上やサービスレベルのKPI等になるので事業強化が進みやすい。

■デメリット
エンジニアのスキルや品質が悪くなる可能性が高く、モチベーション低下のリスクが高い。特に若手エンジニアのケアが重要。

## 機能型組織と事業型組織の入替え
機能型組織と事業型組織のメリット、デメリットは相反する部分がありますが、両方とも大事な部分です。時には、開発効率や品質を強化し、時には事業数字やサービス速度を上げる必要もあります。従って、2〜３年をベースに入れ替えるのが良いと思います。但し、会社の状況やマネージャが居るかの考慮が必要でもあります。

## 業務委託型組織
エンジニア採用はコストも高く、採用体制構築自体がハードルが高いし、時間も掛かります。業務委託、フリーランスを利用した組織を構築も選択肢です。プロばかりのフラット型組織の構築となります。

詳しくは、こちらを参考にして下さい
■開発組織を全て業務委託メンバーで構築した話
https://qiita.com/k1morikawa@github/items/b2257661dd75e7365507


## 海外型組織
開発部隊を日本にもたずに海外で構築するやり方です。選択国によってはコストも抑えて、レベル高いエンジニアでの組織化が可能となります。海外の大学連携等すればレベルの高い新卒採用も現実的。
但し、文化違いや漢字や文字の課題等については、細かいコミュニケーションや業務指示が必要となる。反面、ブロックチェーンやAI等世界レベルでの技術は会話が繋がりやすいです。

詳しくは、こちらを参考にして下さい
■モンゴルに開発部隊を求めた話
https://qiita.com/k1morikawa@github/items/61e5cf9520725b4706bb
# まとめ
組織設計も色々な手法があります。基本ハイブリッド型が良いと思いますが、時には振り切った選択をする事でレッドオーシャンでなくブルーオーシャン戦略も可能になります。CTOの経験に合わせて選択する事をオススメします。

ひき続き記事を書いていきますので、フォロー、イイねお願いします！

# シリーズ記事まとめ
CTO興味ある人へ：CTOの業務についてその１　会社組織内での話
https://qiita.com/k1morikawa@github/items/5e9022a99a51d9a57576
CTO興味ある人へ：CTOの業務についてその２　チームビルディング/採用
https://qiita.com/k1morikawa@github/items/b2b3fb2246bd0984bab1
CTO興味ある人へ：CTOの業務についてその３　チームビルディング/評価制度
https://qiita.com/k1morikawa@github/items/edb2e3c20ce02a201eec
CTO興味ある人へ：CTOの業務についてその４　チームビルディング/キャリア戦略
https://qiita.com/k1morikawa@github/items/9a6573dbba510c699362
CTO興味ある人へ：CTOの業務についてその５　チームビルディングまとめ
https://qiita.com/k1morikawa@github/items/7a4c9163a69cd9303e90
エンジニアに興味のある文系学生に、早いうちに手をつけてほしいこと

### はじめに
・パソコンをあまり触ってこなかった
・ものづくりをした経験がない
・数学とお友達になれなかった

といった経歴を持つ、いわゆる文系学生のなかでも、
「エンジニアに興味がある、挑戦してみたい！」と思い立つ人はこの頃ますます増えているのではないでしょうか。

しかし情報科や理工系の学生と違って、周りにそのような分野に手を出している人が極端に少なく、まずなにから始めれば良いかわからないことが多いと思います。そして、少しずつ勉強し始めてからも、どうすれば形になるものを作れるのか？またあはどのくらいできるようになれば、エンジニア学生と名乗れるのか、自分のスキルを企業に対してPRできるのか。そういった様々なことに対して漠然と不安を抱えて、エンジニアを諦めてしまった人は実はかなりいるんじゃないかと考えています。

もちろん自力でガンガン道を拓いていける学生もそれなりにいます。けれど、そうではない多くの人たちはどこかの段階で壁にぶち当たってしまうことがよくあると思います。
その証拠に、未経験からプログラミングを勉強する数多のスクールが開校されていて、中には集めた顧客を就活サービスに売るような就活サービスとズブズブの関係になっているところまであります。結構高額だったり、未経験だからこそ費用対効果の悪いサービスに取り込まれてしまうこともあるかと思います。

かくいう私も、結論からいうとエンジニア就職はせず、総合職で就職を決めました。ただ、もしエンジニア就活をするならこのタイミングで知りたかった、やっておけばよかったといった視点や、CDLE youthに運営として関わる中で情報系の学生たちの歩みを見て気づいたことに基づいて本記事を書いていきます。どこかでつまずきかけている人の参考になれば幸いです。(機械学習の例を中心に書いていきます)

まず"はじめの１歩"としてできることは

**①独学で勉強を始める**
**②コミュニティに所属する**

このふたつです。

### ①独学で勉強を始める

 

- 概念や知識を理解する
  - 自分が興味を持ったのは具体的にどんなエンジニアリングなのか調べる
  - その領域で必要な知識の概要を知る。例えば機械学習エンジニア、データサイエンティスト等を目指すのであれば、
    - G検定の勉強で人工知能の概要を知る
    - 高校数学&大学数学の一部(線形代数、微積、統計など)を本やオンラインコース(後述)で勉強
 - プログラミングを習得する 
   - プログラミング学習サービスやオンラインコースを通じて、手法を理解する。
   - できれば実装までの経験を積む。

 - 上記の2点において、オンラインコースも非常に有効です。例えばUdemyや、英語に強い人はCorseraなど。コースによっては正式な学位の修了証ももらえます。実装まで一貫して教えてくれる授業も多いです。
 - データ分析、AI系で文系学生におすすめなものはSIGNATEです
基礎的な学習からモデリングの実装まで一通り揃っています。たしか無料で取り組めます。さらにはコンペティションまであり、一応就活にも紐づいています。


### ②コミュニティに所属する
①を進めていくうえでぶっちゃけ一番大変なことは、周りに聞ける人・共有できる人がおらず、一人で進めなければならないことだと思います。そんなとき、大学のサークルでも学生団体でもなんでもいいので、同じ分野に興味を持つ知人を作ることは大切だと思います。そういう意味で、プログラミングスクールに通うのも一つの手かもしれません。
- 学内外のサークル・学生団体に入る
- プログラミングスクールに通ってみる
- SNSで繋がる

- cdle youthも、G検定に合格したら学生が所属できる、比較的敷居が低くてオープンな団体です。ぜひ活用してください！
- SIGNATEではAI Quest という経産省と毎年冬ごろ開催している3ヶ月くらいの実践・プロジェクト型学習の機会もあります。学生から社会人まで無料で応募できておすすめだよ

さて、はじめの一歩の解説が終わりました。ここからは就活に絡む話になります。
エンジニア就活の流れは[7日目の記事](https://qiita.com/ryusei6/items/ee30e17641f4e934209b)に詳しく書かれていますので、こちらも見てみてください！
### ③社会人と話す・④インターンをする・⑤ポートフォリオを作る
どの順番から話せばよいかわからなくなってきたため、3トピックまとめて話します。[7日目の記事](https://qiita.com/ryusei6/items/ee30e17641f4e934209b)にもある通り、特にエンジニア就職したい人は就活前までになにかポートフォリオを用意したり、自分の強みとなる分野をつくっておくことが大切になってきます。①や②において、どれくらいの深度に到達しているかに関わらず、少なくとも就活をスタートする1年前にはこの③・④に踏み出しはじめることができると、慌てずに就活に臨めるかなと思います。(私自身は間に合わなかった部分です。)
 - ①のように一通りの学習を終えた状態であったとき、ポートフォリオとして形にするために、自分一人で開発や実装を進めることは難しいでしょう。そこで、①のように実装までサポートしてくれるweb授業やサービスを使って成果物を作るのも一つの手ですが、一方でポートフォリオ、そして信頼できる肩書きをもつには**④企業でインターンする**ことが近道になります。

 - インターンがなかなか見つからない？もちろん、技術力がない状態のインターン生を雇ってくれるところはそう多くはないため、みつかればラッキーという気持ちで根気よく探すのが良いと思います。時間とコストを割いて育ててくれることはとてもありがたいです。
 - インターンに合格するためには、自分がどんな領域でやっていきたいかを見極め、インターンを通じてどんな力を身につけたいのか、将来的にどんなものを作っていきたいのか説明できる力が必要になっていきます。つまり、エンジニアの実際のところで要求される水準や、その先の歩めるキャリアなどをこの時点でなんとなく理解し把握することが重要です。
 - そのためには独学で勉強するだけではなく、**③実際に社会で働いている大人と話す**ことで、エンジニアの種類や仕事の実情を知ることが大切になります。(いわゆるOB・OG訪問です)
 - CDLE youthでも、CDLEに所属する社会人と話せる継続的な企画を絶賛進行中です。興味ある方は是非運営までご連絡ください！
 
このように、どうにか自分に適したインターンの経験を積んで、そこでの経歴とポートフォリオを提出することがエンジニア就活ではすごく効果的になります。

この記事を読んだエンジニア志望の非情報系の方は、是非とも今から自分にできる範囲で動き出してみましょう！
PowerShell について知らなかったこと

2020 年からアドベントカレンダー期に毎日何かを投稿するという奇祭に参加する習わしがあり今年もゆるゆる参加してみようと思い書くもの。最近、PowerShell をせっかくなら使おうとおもっている。
[PowerShellとコマンドプロンプトの違いを簡単に解説します | MacRuby](https://macruby.info/powershell/how-powershell-differs-from-command-prompt.html)

とりあえず grep
[PowerShellでgrep (Select-String) を使う | 晴耕雨読](https://tex2e.github.io/blog/powershell/Select-String)
`Get-ChildItem -Recurse | Select-String -Pattern "REGEX" `

とか、そういうのは、以下。
[Get-Alias (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Learn](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/get-alias?view=powershell-7.3)

`Get-Alias` をすると教えてくれる

```powershell
PS C:\workspaces> Get-Alias dir

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           dir -> Get-ChildItem


PS C:\workspaces> get-Alias cd

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           cd -> Set-Location
```

あと `netstat`
[PowerShell で netstat をするにはどうするの - tech.guitarrapc.cóm](https://tech.guitarrapc.com/entry/2013/08/10/220848)
を見ると `Get-NetTCPConnection` らしいのだが、以下だと怒られるんだな。

```powershell
PS C:\workspaces> get-alias netstat
get-alias : name 'netstat' を含むエイリアスは存在しないため、このコマンドは一致するエイリアスを見つけられません。
発生場所 行:1 文字:1
+ get-alias netstat
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (netstat:String) [Get-Alias], ItemNotFoundException
    + FullyQualifiedErrorId : ItemNotFoundException,Microsoft.PowerShell.Commands.GetAliasCommand
```


結論: [PowerShell 使い方メモ - Qiita](https://qiita.com/opengl-8080/items/bb0f5e4f1c7ce045cc57) 

まあ何事も慣れである。以上私が知らなかったことでした :unlock:
CommodoreエミュレータVICEをUbuntu 22.10でソースコードからビルドして動かす

CommodoreエミュレータVICEをUbuntu 22.10でソースコードからビルドして動かします。
## コンパイル
1. ソースコードの入手
   https://sourceforge.net/projects/vice-emu/files/releases/
1. 解凍
   tar.gzをお好みで
1. 必要なパッケージをaptで
   $ sudo apt install flex bison autogen automake texinfo dos2unix xa65 libglew-dev libsdl2-dev
1. configure
   手順1.で解凍したディレクトリに入り、PDFドキュメントは別段いらないので、
   $ ./confirgure --disable-pdf-docs
1. make // 少し時間がかかります
   $ make
1. sudo make install
   $ sudo make install
## 実行方法
$ less README
冒頭に、インストールされるエミュレータの種類と実行ファイル名が記載されています。
~~~
The following programs are included:
   - x64sc, a C64 emulator focused on accuracy;
   - xscpu64, a C64 emulator with a SuperCPU cart;
   - x64dtv, a C64 Direct-to-TV (DTV) emulator;
   - x128, a C128 emulator;
   - xvic, a VIC20 emulator;
   - xpet, a PET emulator;
   - xplus4, a PLUS4 emulator;
   - xcbm2, a CBM-6x0/7x0 emulator;
   - xcbm5x0, a CBM-5x0 emulator;
   - vsid, a SID player;
   - c1541, a stand-alone disk image maintenance utility;
   - petcat, a CBM BASIC de-tokenizer;
   - cartconv, a C64/C128 cartridge conversion program.
~~~
この中から、例えば、
$ x128
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159724/9b695e5b-a905-bc9a-5f4b-df743991c7c9.png)
## 今回参考にしたサイト
+ https://vice-emu.sourceforge.io/
+ https://github.com/AreaScout/vice
## 謝辞 // 開発者のみなさまへ
ありがとうございます! 感動的です(^^) 以上です。
個人開発と子育て

# 0.

　個人開発と子育ての相性は最悪だ。開発は人生の隙間にねじこむようにコードを書いていかなければいけないのに、子はその時間をことごとく奪う。私の子達はおそらく通常よりもエキサイティングな奴らで、食うときと寝るとき以外は常に喋るか飛び跳ねていた。長男はわりと育ってきて大人しくひとりでTVを見るようになったが、次男は相変わらずである。

　結局は早朝に開発をするようになった。彼らは寝ている。私はコードを書く。時折、次男が起きてきて、めっちゃ泣いて泣いてどうしようもなくなることがあったりする。その時点でその日の開発は終了である。それから仕事へ行き、帰り、寝るまで、一瞬たりとも自宅のPCは開けないのだ。

　歯痒い。ものすっごい歯痒い。もし、子供もおらず、結婚もしていなかったらどれだけコードが書けたのだろう。私の思い描く理想の人生があったのだろうか。でも、妻と子がいない日々は想像できないし、それはとても悲しいなと思う。

　やっていくしかない。頭の中で個人開発をする。通勤中にスマホに入れたgithubのアプリを起動して、issueを立てる。戦略を立てる。前回のエラーの内容と発生原因をスマホで調べながら、あたりをつける。夜寝る前に、つぎにPCを開くときになにをやるか、考える。集中。集中する。

　そうして少しずつコードを書いていってできたのが今のアプリ。

　これからもずっと、そうやって作っていくのだろう。
【GMC-4】砂時計？

学研の4ビットマイコン GMC-4 で砂時計的な何かを作ってみた。

# 仕様

プログラムを実行すると、2進LEDの上位3個が点灯する。
時間が経過すると、点灯する位置が下位に「落ちて」いく。
2進LEDの真ん中を中心とした砂時計で、光っているLEDが砂のイメージ。
点灯する位置が落ちきったら終了。砂時計なので終了時も特に電子音などは鳴らさない。

# プログラム

以下のプログラムは、[MikeAssembler](https://mikecat.github.io/mike_assembler/) でアセンブルできる。

```
target gmc4

; [0] : 点灯させに行くときに足す数
; [1] : 消灯させに行くときに足す数

	TIY 4
	CAL SETR
	TIY 5
	CAL SETR
	TIY 6
	CAL SETR
	TIY 0
	TIA -8
	AM
	TIY 1
	TIA 7
	AM
	TIY 6
drop_loop:
	CH
	; LEDの状態を更新する位置を更新する
	TIY 0
	MA
	AIA 2
	AM
	TIY 1
	MA
	AIA -2
	AM
	; 計時用に待ちを入れる
	;TIA 14 ; 3分計
	TIA 4 ; 1分計
	TIY 9
wait_loop:
	CAL TIMR
	CAL TIMR
	CAL TIMR
	CAL TIMR
	AIY -1
	JUMP wait_loop
	CH
	CAL RSTR
	CY
	TIY 0
	M+
	CY
	CAL SETR
	CY
	TIY 1
	M+
	CY
	CIY 3
	JUMP drop_loop
finished:
	JUMP finished
```

以下は、このプログラムの機械語表現である。

```
  | 0 1 2 3  4 5 6 7  8 9 A B  C D E F
--+-----------------------------------
0 | A 4 E 1  A 5 E 1  A 6 E 1  A 0 8 8
1 | 4 A 1 8  7 4 A 6  2 A 0 5  9 2 4 A
2 | 1 5 9 E  4 8 4 A  9 E C E  C E C E
3 | C B F F  2 9 2 E  2 3 A 0  6 3 E 1
4 | 3 A 1 6  3 D 3 F  1 8 F 4  A
```

これは1分計のプログラムである。
0x26番地の `4` を `E` に変えると3分計になる。

# 解説

時間経過によるLEDの操作は、

1. 6を消灯 → 0を点灯
2. 5を消灯 → 1を点灯
3. 4を消灯 → 2を点灯

となる。操作を行う順番に位置を並べると、`6 0 5 1 4 2` であり、その差は `-6 5 -4 3 -2` である。
そこで、マイナスの差とプラスの差にわけ、それぞれの差 (移動幅) をデータメモリに格納することにした。
待つ際にLEDの操作位置を格納したレジスタを退避するので、そのついでに移動幅の更新を行う。

# 実行結果

<iframe width="560" height="315" src="https://www.youtube.com/embed/iM3J9ENbfMM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
Google Colaboratory plotly グラフ出力

Google Colaboratory で plotly を使ってグラフを出力する場合の前処理メモ
いろんなエラーが起きるため事前にこれを実行しておく。

```
!pip install plotly==5.1.0
!pip install -U kaleido
!wget https://github.com/plotly/orca/releases/download/v1.2.1/orca-1.2.1-x86_64.AppImage -O /usr/local/bin/orca
!chmod +x /usr/local/bin/orca
!apt-get install xvfb libgtk2.0-0 libgconf-2-4
```


コードはこんな感じ

```python
import plotly
import plotly.graph_objs as go

fig = go.Figure()

略

fig.show()
fig.write_image("test.png")

```


Google Drive にファイルを出力する場合
ファイル出力の前にGoogle Driveをマウントしておく。

```python
import os
from google.colab import drive
drive.mount('/content/drive')
os.chdir(f'/content/drive/MyDrive/フォルダ/')
```

フォルダ以下に出力される。
基本的なソートを勉強してみた〜ひよこになるため日記【3日目(12/11)】〜

# 3日目
こんにちわ。
今日はドトールコーヒーに来て勉強をしています。
ドトールコーヒーは安くて、wi-fi、コンセントもある。めちゃくちゃ学生の味方だと思ってます。
ここだけの話で本当はスタバに行きたいけど、お金がないかつ田舎すぎてスタバが近くにないだけ、、、、
俺もプログラミング勉強して、都会に出るぞーー😏と意気込んで３年が経った男です。
この日記もいつまで続くのか、、、
そんなことはおいといて、今日やったことはこちら


- ABC問題の今後の勉強計画
- 実際にやってみた

この三本立てです。よろしくお願いします。

# ABC問題の今後の勉強計画
まず、一回自分は何のためにプログラミングを勉強しているのか、、と改めて考えたところ
理由はは３つあって

- 就職活動でのコーディングテストを受かるため
- 情報系の学生としての威厳を保つため
- プログラミングかけたらモテそうだから

３つ目の理由は置いといて、こんな理由です。
やっぱ１番目の理由がめちゃくちゃ大きいです。
こんな形で今焦って勉強しているって感じです。

## 勉強スケジュール
今のところは2月にコーディングテストをある程度解けるようにしたい。
そのため、ネットで調べたとことB、C問題が解けるようになっていればある程度いけると言うことを見ました。
なので、2月まで毎日過去問も含めて、B問題とC問題をアウトプットする環境を作ります。

では、最初はどんな感じでやっていくか、、、
そしたら@drken さんのこちらの[記事](https://qiita.com/drken/items/fd4e5e3630d0f5859067#4-practice-%E3%81%AE%E6%AC%A1%E3%81%AF)を参考にし、今週一週間の目標をとりあえず決めました。

とりあえず、今週は**practice**の問題を解く！！
例題、類題も含めてB、C問題を完璧にしていきたいです。

では、今週の予定表
| 日付 | 内容 |
|:-:|:-:|
|  12/11 |  practice1~４ |
| 12/14  |   practice５~７|
|  12/15 |   practice８~10|
|  12/16 |   12/11,12のできなかった問題の類題を解く|
|  12/17 |   12/13のできなかった問題の類題を解く|
こんな形でまずは攻めたいと思います。

では、今日の問題を行きましょう〜〜

## ABC問題解いてみた
### [Practice1](https://atcoder.jp/contests/abc086/tasks/abc086_a)
まずは自分の書いたコードから
```python:自分が書いたコード
s,w = list(map(int,input().split()))
if s*w%2==0:
  print('Even') 
else:
  print('Odd')
```
この問題は２つの特徴があるかなと思ってます。
- 奇数、偶数の判定できるか
- 標準入力の文字を整数型に変え方わかっているか

この２つができるたら書けるかなと思いました。
もしこのコードをもう少し短くするなら
```
print("Odd" if a * b % 2 else "Even")
```
このように書き換えれます！！
自然と使えるようになりてー

### [Practice2](https://atcoder.jp/contests/abc081/tasks/abc081_a)
まずは自分の書いたコードから
```python:自分のコード
num = list(map(int,input()))
print(sum(num))
```
昨日使えなかったsumが使えたーーー
これは成長ですねーー
嬉しいーーーー
この問題のポイントは
- list()関数をしっているかどうか
- ０と１をどのように判定するか


自分は今回１の個数を数えるだけだったので足しちゃいました。
もし、0の個数を数えるなら
- 今回のように１の個数を数えて、全体から引く
- ０をif文とかでカウントする

他の人のコードには
```
print(S.count('1'))
```
1の文字をカウントするっていうのもありました。
これならif文を使わなくても綺麗に書けますね

### [Practice3](https://atcoder.jp/contests/abc081/tasks/abc081_b)
まずは自分の書いたコードはこちらから
```python:自分が書いたコード
def check(count,num,num_list):
  for i in range(num):
    if num_list[i]%2 !=0:
      print(count)
      break
    else:
      num_list[i] = num_list[i]/2
  else:
    count +=1
    check(count,num,num_list)
      

num = int(input())
num_list = list(map(int,input().split()))
count = 0
check(count,num,num_list)
```

この問題のポイントは
- 繰り返しの処理が行えるか
- [線形探索](https://qiita.com/drken/items/fdae15f6e9ede543b97a)ができているかどうか

この処理を線形探索ということを知った。。。これからかっこつけて使っていきますね


### [Prctice4](https://atcoder.jp/contests/abc087/tasks/abc087_b)

```python:自分が書いたコード
A = int(input())
B = int(input())
C = int(input())
X = int(input())
count = 0
for a in range(A+1):
  for b in range(B+1):
    for c in range(C+1):
      if X==a*500+b*100+c*50:
        count += 1
print(count)
```
これは全探索というやり方。
少しずつ、アルゴリズムの勉強をしていかないといけない。。。
っていうのを掴んだ1日でした。
地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ3.1「人間が気候変動を引き起こしていることはどのようにしてわかるか？」 (2022年版)

この記事シリーズでは地球温暖化の問題について2022年現在の最新情報を紹介し，コンピュータと地球温暖化は決して無縁ではないことを示します．その上で，Elixirで地球温暖化の解決に貢献する方法について示します．私たちは持続可能な開発目標(SDGs)を支援しています．

この記事は次の記事のアップデートです．

https://qiita.com/zacky1972/items/2c82a593fbb2e4c949d2

シリーズ

* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜序論(2022年版)](https://qiita.com/zacky1972/items/536e93af8404ed63b382)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ4.1「今後20年間で気候はどのように変化するか？」 (2022年版)](https://qiita.com/zacky1972/items/0d0e1f1c2bf773c7557a)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ4.2「二酸化炭素の排出削減の効果はどれだけ早く確認されるだろうか？」 (2022年版)](https://qiita.com/zacky1972/items/d395c82938482c8962bd)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ9.1「グリーンランド及び南極域の氷床の継続的な融解は逆転しうるか？氷床が元に戻るのにどの程度の時間がかかるだろうか？」 (2022年版)](https://qiita.com/zacky1972/items/19194e55af677524d0ce)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ9.2「海面水位は今後数十年間でどの程度上昇するか？」 (2022年版)](https://qiita.com/zacky1972/items/f4ed1bb4dd45f7d1e326)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜「コンピュータと地球温暖化は 決して無縁ではない」](https://qiita.com/zacky1972/items/a67459bf36f7b369b946)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜機械学習の消費電力あたり性能の改善に向けて](https://qiita.com/zacky1972/items/fc74503c33839b64d0a3)




# 地球温暖化と気候変動

気候変動に関する国際的な政策を議論するのがIPCC: Intergovernmental Panel on Climate Changeです．

https://www.ipcc.ch

日本では気象庁がIPCCの刊行物の日本語訳を発行しています．

[気候変動に関する政府間パネル（IPCC）〜気象庁](https://www.data.jma.go.jp/cpdinfo/ipcc/index.html)

2022年現在の最新の評価報告書は[「IPCC第6次評価報告書(AR6)」](https://www.data.jma.go.jp/cpdinfo/ipcc/ar6/index.html)です．この中の[IPCC AR6 WG1報告書 よくある質問と回答（FAQs）暫定訳（2022年11月30日版）［PDF 7.82MB］](https://www.data.jma.go.jp/cpdinfo/ipcc/ar6/IPCC_AR6_WGI_FAQs_JP.pdf)を紹介していきます．

出典: IPCC AR6 WG1報告書 よくある質問と回答（FAQs）暫定訳（2022年11月30日版）（文部科学省及び気象庁）に加筆

訳註にある次の記述に注意してください．

> 本資料は最終版ではなく，更なる編集が行われる
> ICPPの公式訳ではない

この記事では，このFAQの中から，次の「問い」を取り上げます．

## FAQ3.1 人間が気候変動を引き起こしていることはどのようにしてわかるか？

この「問い」の逆である「気候変動の問題は人為的なものではなく自然現象である」という主張は，地球温暖化や気候変動の問題に批判的な人がしばしば口にする主張です．IPCCは真っ向から否定しており，長期的な記録の分析と精密なシミュレーションによる論拠を示して「気候変動は人間が引き起こしている」と結論づけています．

> FAQ3.1 図1 観測された温暖化(1850〜2019年)は，人間の影響を含むシミュレーションでのみ再現される

![FAQ3.1 図1 観測された温暖化(1850〜2019年)は，人間の影響を含むシミュレーションでのみ再現される](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55223/8ea6fafb-5d3c-7fc1-c09c-945c5ea2563d.png)

> 世界平均気温の変化の観測値と，全ての人為起源及び自然起源の強制力(灰色の帯)，温室効果ガスのみ(赤色の帯)，エーロゾル及び他の人為起源の駆動要因のみ(青色の帯)，並びに自然起源の強制力のみ(緑の帯)に対する応答の気候モデルシミュレーションとの比較．色付きの実線は複数のモデルの平均を示し，色付きの帯は個々のシミュレーションの5〜95％の範囲を示す．

ここで自然起源の駆動要因としては主に次の2つだとしています．

* 太陽活動の変動
* 大規模な火山噴火によるエーロゾルの大気中濃度の増加

人為起源の駆動要因として，主に次の2つだとしています．

* 化石燃料の燃焼，土地利用，及び他の発生源からの温室効果ガスの大気中濃度の増加
* 人為的なエーロゾルの大気中濃度の増加

エーロゾルの増加は，火山によるものも人為的なものも，平均的に気候を寒冷化させるとしています．

地球の気候の最近の変化の直接観測，年輪，氷床，及び過去に気候がどのように変化したかを示す他の長期的な記録の分析，並びに気候システムを支配する基礎的な物理プロセスに基づくコンピュータシミュレーションを含む，複数系統の証拠からの情報の統合に基づくと，前述の自然起源・人為起源の駆動要因を全て合計した場合(図1の灰色の帯)の場合のみ，実際の観測値を説明でき，自然要因だけでは実際の観測値を説明できないことが立証されました．

関連する問いとしては次を挙げています．

* FAQ2.1 地球の気温は過去から変化している．現在の温暖化はどのように異なるか？
* FAQ3.2 自然変動とは何か，また最近の気候変動にどのように影響しているか？
* FAQ3.3 気候モデルは改良されているか？

さて，このFAQ3.1の論拠を突きつけられると，もはや，「気候変動の問題は人為的なものではなく自然現象である」と言い逃れすることはできないと考えられます．したがって，人類が責任をもって，気候変動を起こしている要因である，温室効果ガスとエーロゾルの大気中濃度を抑制する必要があると言えます．
コラム：ゲームのデザインに学ぶ UI/UX　～ゲーミフィケーションデザイン６つの観点、6つの離脱ポイント～ 先行リリース予定 と 野望について

# ゲームのデザインに学ぶ UI/UX　～ゲーミフィケーションデザイン６つの観点、6つの離脱ポイント～ 先行リリース予定 と 野望について
あまり大声で話してないけど、実は日本ゲーミフィケーション協会の理事もやってたりする、東京だけどfukuokaexのYOSUKEです。

今回は、ちょっとした野望をというかテストケースでやってみたいアプローチについて話してみよう。というコラムネタ。

実は、日本ゲーミフィケーション協会で```（会員限定）ゲームのデザインに学ぶ UI/UX　～ゲーミフィケーションデザイン６つの観点、6つの離脱ポイント～```という研修を作ったのでまずは当会員向けにテスト開催を実施予定で、そこそこいい金額なので、ちゃんとお金を払う程のニーズがありそうかについての確認をした後、次は期待値に応えられる内容かの確認をして一般向けにローンチするという段取りで進めているものです。

現在の所、「ちゃんとお金を払う程のニーズがありそうかについての確認」は第１段階は検証できたので実際に開催して期待に応えられているかについて確認し、さらにフィードバックから更新を得て、正式なリリースを出す予定。この研修は５回構成で作られていて、大まかな概要は以下の通りです。さらに詳しい内容は正式ローンチの際に記載するので、今回はこれくらいにしておいてその先の野望の話しをしたいと思います。

（全5回の構成）
第1回 UI/UXとは、ゲーミフィケーションから考えるUI/UXの設計（3.5h)　
第2回 本質的な価値を踏まえたアイデア出し （3.5h）
第3回 UXを設計するペルソナ像の作成（ES/CS）(3.5h)
第4回 ユーザーストーリー の作成 （3.5h）
第5回 UI設計の10のヒント （3.5h)

## やりたい事
ゲーミフィケーション & UI/UXの研修の５回構成を見てもらえればわかる通り、設計に対する考え方の研修になっている。しかし、ここまで行ったら実はこのあと実際に作る所も研修にして提供したいわけです。

という事で、第6回以降 UI/UX研修で学んだことを活かして Webアプリ開発をElixirでやる。までの教材は作りたいなと。

一緒に作ってもいいよ。っていう仲間募集してます。
arXiv投稿したときのTexメモ

# はじめに
修士１年生となりましたDKです．
昨年もアドベントカレンダーを書いておりましたので，自分の記事を見返したところ非常に酷い妄想が綴られておりました．
しかしここに綴られた妄想，今の自分でもわかってしまいましたのでまだまだ行けますね．黒歴史と感じるようになる日はいつなのでしょうか．
今回，たいそうなこと書けないので文字数稼ぎでやった感を出しておきましょう．
[zoom会議にバーチャルモデルで参加しよう！](https://qiita.com/potassium-19/items/ee8030484c548b1570ea)
[Another Diversity-Promoting Objective Function for Neural Dialog Generation](https://qiita.com/potassium-19/items/c348e3589b646189a6f5)
昨年の記事達です．２つも書いて偉いですね１年前のDKは．

本題に入りましょうか．実は私，最近arXivに論文を投稿しました！！！
というわけでこの投稿に関して簡単に記録に残しておこうと思います．

# コンパイラの違い
arXivを公開する時はtexファイルや画像ファイル含めた環境を丸ごと送るとコンパイルを勝手に行って，公開してくれるようです．
私はアカウントを作成することで利用可能なOverleafで論文を作成しました．
多くの学会ではtexのテンプレートがございますので，そちらを利用すると良いと思います．
その際は事前にコンパイル時のエラーや警告は全て解消しておくとよいです．
引っ掛かります．
また教授に調べていただいたことではございますが，arXivでのコンパイラはPDFLATEX，TexLiveは2020らしく（2022/10/18時点），ご自身の環境との違いによってはうまくコンパイルが通らない場合があります．
ご注意を．
私はグラフィックスオプションが
```
\usepackage[dvipdfmx]{graphicx}
```
となっておりました．
dvipdfmxはarXivのコンパイラで非対応だそうで画像（pdfファイル含む）が表示されないという事態に陥りました．

そこで，
```
\usepackage[pdftex]{graphicx}
```
こちらに変更することで解決することができました．
arXivのコンパイラはpdftexであれば利用することが可能なため，画像は無事表示されました．

# 表作成時の横線を太く細く
```
\hline
```
これを利用すれば，表に横線を加えることができます．
しかし，横線の長さを変えたい時がありませんか？私の場合は表にある項目のヘッダ下部に引く横線を細くしたかったため，以下のコマンドを作成し，長さの調整を行いました．

```
\newcommand{\thline}{\noalign{\hrule height 0.1pt}} 
```

ptを変化させれば\thlineを呼ぶだけで太さの異なる線を引くことができます．

# 表の行を結合
２行にまたがって項目を入力したい機会が訪れたことはありませんか？
私の場合はヘッダの項目を１列目は結合させたいけども，２列目以降は分けたままにしたかったので以下のパッケージを用意しました．
```
\usepackage{multirow}
```
そして
```
\multirow{2}{*}{items}
```
2は結合する行の数，*は文字の位置を結合してからどこに置くか（この場合は指定せずお任せ），itemsはもちろん表示させたい文字列です．
これで表の結合を行うことができます．

# 終わりに
こんなところですかね．
すでに記憶からなくなってしまった情報もあるかもしれませんが．
最近は[Table Generator](https://www.tablesgenerator.com/latex_tables)ようにサイト上で表の入力を行うとtexのコマンドを作ってくれるものもありますね．
しかし，これを使うとパッケージを呼び出せていないことによるエラーが発生していてもうまく表示されてしまうケースもあります．
私の実体験ですね...
そのため，arXiv投稿する際には特に気を付けてください．

そろそろ締めたいと思います．
あまりたいそうなことは書けなかったのですが，皆さんの参考になれれば嬉しいです．
他のメンバが公開している記事にもぜひ立ち寄ってみてください．



# 参考文献
[y-misc.org Tex関連](https://www.y-misc.org/tex/command/tabular-border.html)
[LaTeX の MultiRow MultiColumn のお気持ちを理解する](https://zenn.dev/ganariya/articles/latex-multi-row-and-column)
輪読会のすすめ～初めて主催して～

Ateam Group U-30 Advent Calendar 2022の15日目は
株式会社エイチームの @sugichan55 が担当します。

輪読会をしたことはありますか？
一人で読むには難しい、途中でモチベーションが落ちてしまうという方にぜひ試していただきたいです。
今回は、初めて主催として行ってみてよかったことと改善したほうがよかったと思うことをまとめました。

## そもそも輪読とは？
>〘名〙 数人が集まって一つの著作・作品を読むこと。共同で解釈研究などをする時に行なう。
精選版 日本国語大辞典より

1つの本を複数人で読む会ってかんじですね！

## 今回読んだ本！
O'Reilly 入門監視

https://www.oreilly.co.jp/books/9784873118642/

## どうやったのか

|時間|内容|詳細|
|--|--|--|
|1分|オープニング|本日の範囲再確認|
|10分|読書|気になった部分については随時メモする<br>読む量によっては5分程度延長|
|5分|気付きをまとめる|気になった部分について箇条書き|
|5分|気づきの共有|刺さったところやわからなかったところの共有|
|10分|気づきからの議論|みんなの気づきを見て|
|5分|今日のまとめ|議論したことをまとめる|
|5分|クロージング|一言と次回範囲について|

## よかったこと
- 自分とは違った見方を見つけることができる
    - 普段違う業務をしている方と同じ題材について議論できる
- 認識合わせができた
    - こうするのって大切だよね
    - アンチパターン（こうするのは良くない）
- 課題に思っていることを話しやすい
    - 本に書いてあるよねというところで思っていたけど言えなかったようなことを話す機会ができた

## もっとこうするべきだったところ
- 議論をコントロールすること
    - 議論の部分で制御ができなくなってしまうことがまれに発生した
- 時間の調整
    - メンバー全員がそろって参加できた機会のほうが少なかった
        - 議事録は残すものの、参加したのとしていないのでは話の温度感などが伝わらないことがあった
        - できれば全員が参加しやすい時間をつかむべきでした

## まとめ
- こうすればもっとよかったと思うところはあったものの概ねよい経験ができました。
- 参加者として参加するよりも主催として参加したほうが理解度が深まると思う
    - 範囲を決めたり進行の都合上、本に触れる機会が増えるので
- もっとこうしたほうがいいんじゃないか？などあればコメントで教えてください！








# 引用
https://kotobank.jp/word/%E8%BC%AA%E8%AA%AD-660163#:~:text=%E3%82%8A%E3%82%93%E2%80%90%E3%81%A9%E3%81%8F%E3%80%90%E8%BC%AA%E8%AA%AD%E3%80%91,%E3%81%AA%E3%81%A9%E3%82%92%E3%81%99%E3%82%8B%E6%99%82%E3%81%AB%E8%A1%8C%E3%81%AA%E3%81%86%E3%80%82

https://www.oreilly.co.jp/books/9784873118642/
Twitterで母の誕生日をお祝いしてもらった

# 今日はみそ姉のお母さんの誕生日です。やったね！

# ↓以下お祝いの言葉

12/14の1:51に、みそ姉が呟いたツイートです。
何を隠そう、12/14はみそ姉の母の誕生日なのです。

事の経緯は12/13の夜。私は1人でベッドに潜りながら考えていました。

#### 母の誕生日、どうしようかなぁ……。

私はこの春から一人暮らしを始めて、家族の誕生日を直接祝うことができなくなってしまいました。ですが、やはり実の親の誕生日は豪勢に祝いたいですよね。そこで、思いついたのです。

## そうだ、数の暴力でお祝いしよう！
と。

そこで実践に移したのが、12/14の1:51というわけです。

前置きが長くなってしまいましたね。実際にいただいた反応がこちらです！


>お誕生日おめでとうございます。

みそ姉はすくすくと未来大生らしいツイッタラーに成長していますよ。

こちらは、私が所属しているサークル『FUNラジ』の先輩からいただいたリプライです。
さすが私が尊敬するツイッタラー。ツイッタラーが親に1番知られたくないことを熟知していますね。

>㊗️味噌母誕生日おめでとう㊗

こちらは、つい最近まで女の子だと思ってウキウキで接していたのに、中の人が実は男だったことを知って少し衝撃を受けた1年生からいただきました。
アイデンティティである「みそ」を、勝手に「味噌」にされてしまいましたね。まぁ、彼は私にからあげをくれた優しい心の持ち主なので、私も寛容な心で許しましょう。

この他にも、純粋な「おめでとう」という言葉を送ってくださる方や、私の母を勝手に味噌汁にする方などからリプライをいただきました。本当にありがとうございます。リプライは5件、いいねは15件という想像よりは多めの反応をいただけたことを光栄に思います。

いやぁ〜、これだけの方に誕生日を祝ってもらえば母も喜ぶことでしょう。よし、それじゃあ私は母にあげるプレゼント代を持って、美原へと繰り出します。私の生活圏内でプレゼントを探すとなると、某ドン・キホーテくらいしか……、ん？



##### んん？





### んん！？



![31954AD6-37D1-4FCE-9308-7E6A9E3ED27C.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070871/c5edfe70-ccb5-8952-e4b8-717454523ec8.jpeg)



## んん！








# んま〜〜〜〜い！！！！

甘さが控えめな生クリームと、口に入れればホロっと優しい味が広がるタルト生地。それを甘みが際立つ、酸味のあるイチゴと一緒に食べて仕舞えばもう……。

美味しいものを食べて、生きている喜びを実感する。これこそ、娘が母にできる最高のプレゼントだと思うんです。

　


# ご紹介させていただいたお店

ぷてぃぱてぃ
070-4320-4357
北海道函館市美原2-38-4 
https://tabelog.com/hokkaido/A0105/A010501/1057045/

# スペシャルサンクス
みそ姉の母の誕生日を祝ってくれたフォロワー
ムシキングが僕に教えてくれたこと。

    #はじめに
はじめまして！ジーズアカデミー福岡DEV12期生のtotototoshiと申します。
こちらはジーズアカデミーアドベントカレンダー15日目の記事となっております。よろしければほかの記事もご覧ください。

    #ムシキングとは
株式会社セガ様で開発され、2003年~2010年までの間稼働していたアーケードゲームのことです。
コインを入れることでプレイヤーは虫カードかワザカードを入手でき、入手したカードを使って悪の虫軍団と戦っていきます。私は少年時代に夢中になってこのゲームで遊んでいました。

なぜ、今回ムシキングを題材にした記事を執筆しているかというと、私がプログラミングを用いて初めて制作したオリジナルプロダクトだからです。このプロダクトの制作過程で様々な気づき・学びがあったため主にプログラミング初学者の皆様に共有出来たらと思い執筆に至りました。

    #なぜムシキングを作ろうと思ったのか
JavaScriptの最初の授業で習ったことは以下の2点でした。

・Math.random()を使ったおみくじアプリ
・Math.random()を使ったじゃんけんアプリ

おみくじアプリではランダムで算出した数字に対応した運勢（0は大吉など）を画面に表示させるといったもので、この時点でなんとなくソシャゲのガチャのようなものを作ろうとしていました。それに加えて、「じゃんけん」な訳です。ガチャとじゃんけんなんてムシキング作れちゃうじゃないか！と制作を決心しました。

    #ムシキングが私に教えてくれたこと
私がムシキングのプロダクト制作を通して学んだことは以下の通りです。

・難しい技術を用いていなくても工夫次第で既存作品の再現が可能であること
・好きなものの裏側を知ることの楽しさ
・夢中になれるものを題材にすることの重要性

    #既存作品の再現をする際に難しい技術は必要ないということ
皆さんはポケモンやマリオを作ろうと思ったことはありますか？
私はあります。そしてその次に思うことは「無理だろう」でした。特に現代のゲームは凝ったグラフィックや通信機能の進化、多彩なモード設定などにより気軽に作ることはできない代物となっています。
ただ、昔のゲームを想像してみてください。インベーダーや昔ながらのシューティングゲームは意外といけそうな気がしませんか？
昔のゲームほど、淡白な作りの中に多彩なエッセンスを盛り込むことでユーザーを引き込むゲーム作りをしています。
つまりどういうことか、一旦簡単にしてみると良いのです。例として私がムシキングの模倣をする際に諦めた部分を一部記載します。

・グラフィック・アニメーション全般
ムシキングではワザを繰り出す際にそのワザごとのアニメーションが設定されていますが、諦めました。代わりに3種類のGIFを用意して、ランダムで再生される仕組みにしています。

・ユーザーが使用カードを選択する機能
ユーザーが集めたカードを選んで使用できれば楽しいですが、諦めました。代わりに、カードの種類ごとに4枚ずつ計256通りの組み合わせをランダムで選択できるようにしています。

以上のように完璧にはできなくても10％の部分を模倣し再現していくことは、何事においても成長の源泉なのではないかということをムシキングに教えてもらいました。

    #夢中になることを題材にすることの重要性
皆さんは何かを始めるときにまず何を考えるでしょうか？私は以下のようなことを考えてしまいます。

・時間や労力などのリソースに見合ったリターンが得られるか
・実際に役に立つのか

特に大学生の頃はこのような考え方が顕著だったと思います。分かりやすい例で言うと、TOEICなどは役に立つから取っておこうと思い何度か受けてみましたが特筆する成果もなく終わってしまいました。
今考えると、興味もなくただ役に立つからという理由でやる気が長続きする訳がないと思います。

今回のプロダクトでは、ゲームの内側がどうなっているか、どういうコードを書けばこのゲームを再現できるかといった興味・好奇心に突き動かされてプロダクトの制作を完了することができました。この制作の間は寝ている時間以外の全ての時間でコードのことを考えていました。

そして自己満足の塊であるムシキングというプロダクトができたのですが、その過程でプログラミングの技術は飛躍的に向上したと考えています。

    #まとめ
まだまだ学習開始から2か月しかたっていないひよっこですが、今回学んだことを忘れずこれからも少ない武器をどう工夫して活かすかを考えて学習にあたっていきたいと思います。

拙い文章でしたが最後まで読んでいただきありがとうございました。
明日は私の尊敬する同期の記事となりますので是非そちらもお読みいただけますと幸いです。

最後になりますが、以下Githubのコードサンプルを記載しておきますので、興味のある方は参考ください。

https://kokekokko0116.github.io/mushi/
趣味開発でペアプロをお願いしたら成長も可視化できて良かった話

## きっかけー趣味開発での行き詰まりー

趣味開発でWEBアプリを作っているのですが、データの持ち方に行き詰まってしまい、趣味開発の進捗がストップしておりました。そのため、知り合いのエンジニアに頼み壁打ち兼ペアプロをしてもらった。その時の感想や用意しておくべきものを備忘録がてら記載します。


## レギュレーション

とはいえ、チーム開発ではないので自分はドライバーを知り合いのエンジニアにはナビゲーター役をやってもらい開発をおこなった。社会人エンジニアの帰宅後の時間だと交代するまでもなく1ロールで完結する＋自分で乗った部分を開発するくらいの時間しか取れないのでこのやり方でちょうど良いのかなと個人的には考えている。

## ペアプロをやって得られた学び

- コードができている動いているプロダクトではなく設計レベルから考えることができるので設計をやったことない自分としては学びが多かった。
- わからないことは相手に聞くというフェーズを挟むことで「わからないことがわからない」から「何が言語化できていないのか」というところまで持っていくハードルが下がり質問がしやすくなった。
- 相手の設計の知識を借り受けて実装ができるので設計・実装がつながって理解に慣れた。デプロイしたらその辺の細かい話も記事に書きたいと思っている。
- 人に見られながらやるのでシャキッとして途中で別なことを考え始めて〜といった自体も防ぐことができた。

## オンラインペアプロで意識して良かったこと

- 質問をDiscordのチャンネルに記載する
- その答えや調べたURLを別なチャンネルに貼り付ける

ということをペアプロ中に行った。それによって自分がペアプロ前後で何がわかるようになったかが可視化され、成長も課題も実感できた。
また、これから意識したいこととして継続的にペアプロをしていこうと約束することでリズムを作ることができるのではないかなということを感じました。

## オンラインでペアプロをやる時に予め用意しておいた方がいいもの・こと

- 共有しやすい開発環境
- 聞き取りやすいマイク
- デカめのディスプレイ（自分の画面と相手の画面どちらも一目で見えた方がいいため）
- 雑に使えるDiscordサーバー
    - 自分は、雑に使えるDiscordサーバーがあったためそれにプライベートチャンネルを生やすことで対処した。
    - ゆるく個人鯖を持っておくと、ペアプロ以外にも自分の興味や知識の集約に便利。
- 時間
ffmpegで動画を同期しながら並べる

録画開始時間の異なるがサイズの同じ動画が複数あり、それらを時刻を合わせた状態で動画を並べるのに手こずった備忘録として。
開始時間の差分はマニュアルで算出しパラメータとして渡しています。

vstack, hstackはデフォルトで2つの動画を並べる。

２動画を縦に並べる。
```
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][1:v]vstack" -map "[v]" output.mp4
```

２動画を横に並べる。
```
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][1:v]hstack" -map "[v]" output.mp4
```

2動画を同期しながら横に並べる。
```
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS[v1];[1:v]trim=start='00\:00\:10'setpts=PTS-STARTPTS[v2];[v1][v2]hstack" -map "[v]" output.mp4
```
[v1]と[v2]はそれぞれ名前をつけているだけ。

3動画を同期して横に並べる。

```
ffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 -filter_complex\
 "[0:v]setpts=PTS-STARTPTS[v0];\
  [1:v]trim=start='00\:00\:10'setpts=PTS-STARTPTS[v1];\
  [2:v]trim=start='00\:00\:20'setpts=PTS-STARTPTS[v2];\
  [v0][v1][v2]hstack=inputs=3[v]" -map "[v]" output.mp4
```

xstackの例
- https://stackoverflow.com/questions/56452339/how-to-make-proper-use-of-h-w-with-xstack-filter-specifically-how-to-av

参考
- https://qiita.com/nekobake/items/8fa1be504c48c291b9f5
簡単Elixirシリーズ ~ ローカル環境でPhoenixのSSLを有効化する簡単なお仕事 ~

# 簡簡単Elixirシリーズ
## ~ ローカル環境でPhoenixのSSLを有効化する簡単なお仕事 ~

この記事は「[Elixir Advent Calendar 2022](https://qiita.com/advent-calendar/2022/elixir)」12日目の記事です
東京にいるけどFukuokaexのYOSUKEです。

簡単ElixirシリーズではElixirやPhoenixの小ネタをサクッと書いていこう。というコンセプトで作っていきます。

今回は、開発環境でHTTPS接続する必要があったので、その設定方法を調べて見た所、めちゃくちゃ簡単だったのですがQiitaには古い方法しか見当たらなかったので情報を更新しておこうと思います。という昔書いた小ネタのバージョンPhoenix1.5の時の記事だったので、1.6でも健在ですか？ というのを確認すると共に、改めて紹介する。という小ネタ（そう、この記事はサクッとがコンセプトW）

Phoenixプロジェクトのルート上で以下のコマンドを実行する。

```
$ mix phx.gen.cert
```

すると以下のように設定についての案内と注意点が返ってきます。

```
* creating priv/cert/selfsigned_key.pem
* creating priv/cert/selfsigned.pem

If you have not already done so, please update your HTTPS Endpoint
configuration in config/dev.exs:

  config :hook_learn, HookLearnWeb.Endpoint,
    http: [port: 4000],
    https: [
      port: 4001,
      cipher_suite: :strong,
      certfile: "priv/cert/selfsigned.pem",
      keyfile: "priv/cert/selfsigned_key.pem"
    ],
    ...

WARNING: only use the generated certificate for testing in a closed network
environment, such as running a development server on `localhost`.
For production, staging, or testing servers on the public internet, obtain a
proper certificate, for example from [Let's Encrypt](https://letsencrypt.org).

NOTE: when using Google Chrome, open chrome://flags/#allow-insecure-localhost
to enable the use of self-signed certificates on `localhost`.
```

まずは言われた通り、```config.exs```のconfigの内容を上記で案内されたものを追加して更新します。


```config/config.exs
# Configures the endpoint
config :hook_learn, HookLearnWeb.Endpoint,
  url: [host: "localhost"],
  http: [port: 4000],
  https: [
    port: 4001,
    cipher_suite: :strong,
    certfile: "priv/cert/selfsigned.pem",
    keyfile: "priv/cert/selfsigned_key.pem"
  ],
  render_errors: [view: HookLearnWeb.ErrorView, accepts: ~w(html json), layout: false],
  pubsub_server: HookLearn.PubSub,
  live_view: [signing_salt: "rsGkD/Tb"]
```

これでOKでは、早速```https://localhost:4001```アクセスしてみましょう。

![スクリーンショット 2022-12-15 0.44.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72962/bf2e20d2-8550-7f38-ea49-8c9c62f430f2.png)

おやおや、おかしいですね。
という事で実は、```mix phx.gen.cert```の実行結果で返ってきた ```NOTE:```に書かれていた部分がこのことに関する内容だったので、翻訳して、確認しましょう。


```
警告: 生成された証明書は閉じたネットワーク環境でのテストにのみ使用してください。
開発用サーバーを `localhost` 上で動作させるなど、閉じたネットワーク環境でのテストにのみ使用してください。
公開インターネット上の本番、ステージング、テスト用サーバーには、適切な証明書を入手してください。
Let's Encrypt](https://letsencrypt.org)などから、適切な証明書を入手してください。

注：Google Chromeを使用する場合、chrome://flags/#allow-insecure-localhostを開いてください。
を開いて、`localhost`で自己署名証明書を使用できるようにします。
```

という事で、早速 Chromeの```chrome://flags/#allow-insecure-localhost```にアクセスして、```localhost```で検索し、```Disabled```を```Enabled```に変更して、```Relaunch```をクリックして有効化します。

![スクリーンショット 2022-12-15 0.40.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72962/ff131fd4-b4fa-2f7a-a2be-cde7cec0ff9c.png)

はい、これでもう一度```https://localhost:4001```にアクセスすると以下のように表示されます。

![スクリーンショット 2022-12-15 0.45.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72962/b9dff35a-1cda-a6df-2dbe-396cefa1a6fc.png)

簡単ですね。