OmniAICreator/Qiita-1.07M huggingface dataset:
Fortranでユーザー定義演算子.in.を作る

# Objective and Motivation

ある整数/浮動小数点数/文字列が何らかの集合の要素であるかを調べたいときがよくありますよね．
そのときに，```if```文を使って

```Fortran

my_value_is_in_my_list=.false.
do i=1,number_of_element
    if(my_list(i)==my_value)then
        my_value_is_in_my_list=.true.
    endif 
end do

```
のように条件分岐するのが常道ですが，これは少なくとも3つのバグの温床となります．

1. イテレータをイテレーション中に誤って変更してしまう
2. 条件文を書き忘れる，ないし書き誤る
3. 戻り値の初期化を忘れる 

さらに，集合の側をどう定義するかも問題で，有限個であれば列挙したリストを作成しておくのもよいですが，任意の開集合や閉集合について判定したいときなどはまた書き方を変える必要があります．
こうした苦労なしに，

```Fortran
print *, my_value .in. [10,11,12,12]
print *, my_value .in. [-1.0d0,2.0d0,3.0d0]
print *, my_value .in. to_range(20,30)!暗黙的に，範囲は閉区間
!以下，閉区間/開区間を明示
print *, my_value .in. to_range('[',20,30,']')!閉区間
print *, my_value .in. to_range('(',20,30,')')!開区間
print *, my_value .in. to_range('(',20,30,']')!半開区間

! 文字列
print *, my_value .in. "ABCDEFG"
```
のように呼び出せたらいいなと思いました．
実装方針としては，

1. Fortranの組み込み関数```range```との衝突を避ける．
2. ```type(Range_)```を定義しておいて，そこで最小値と最大値をメンバ変数に持たせておく
3. ```interface```文を使い，演算子オーバーロードにより値がinteger/real/characterのいずれであっても適当な関数を呼び出せるようにする．

以下，実装の一部です．

```Fortran
module RangeClass
    type :: Range_
        real(real64) :: x_range(1:2)=[0.0d0 , 0.0d0]
    contains 



    interface to_range
        module procedure :: to_range_int32, to_range_real64
    end interface

    interface operator(.in.)
        module procedure :: in_detect_by_range_int32,in_detect_by_range_real64, 
    end interface



function in_detect_by_range_int32(intval,in_range) result(ret)
    integer(int32),intent(in) :: intval
    type(Range_),intent(in) :: in_range
    logical :: ret

    ret = (in_range%x_range(1) <= dble(intval) ) .and. (dble(intval) <= in_range%x_range(2)  )

end function


function in_detect_by_range_real64(intval,in_range) result(ret)
    real(real64),intent(in) :: intval
    type(Range_),intent(in) :: in_range
    logical :: ret

    ret = (in_range%x_range(1) <= intval ) .and. (intval <= in_range%x_range(2)  )

end function



function to_range_int32(from,to) result(ret_range)
    type(Range_) :: ret_range
    integer(int32),intent(in) :: from,to

    ret_range%x_range(1:2) = dble([from,to])

end function


function to_range_real64(from,to) result(ret_range)
    type(Range_) :: ret_range
    real(real64),intent(in) :: from,to

    ret_range%x_range(1:2) = [from,to]
    
end function

...

end module RangeClass
```


実際に使ってみます．

```Fortran
program main
    use RangeClass
    implicit none

    print *, 300 .in. to_range(200,400) ! True

end program
```

# 補遺

```.in.```の設計についてベストプラクティスを模索中です．
```type::range_```を定義しておいて，```to_range()```で```.in.```に渡すことで，ユーザーに```type::range_```の存在を意識させないのはよいかと思いますが，
```to_range()```引数がwordyな気もします．

このような```.in.```の設計がよいのでは，というコメントを歓迎します．この記事がきっかけとなり議論が深まることを期待しています．

また，実装は今しがた着手して上記機能のみ実装したのですが，まだ全てを実装できていません．すみません．
```character```のところまで実装できましたら追記します．
Bearer認証についてのメモ




この記事は ウェブクルー Advent Calendar 2022 23日目の記事です。
昨日は@yusuke-kobayashi0117さんの「【Flutter/Riverpod】画面遷移時の引数をProviderScopeのoverrideで設定する」でした。

## はじめに

ここら辺について知見があまりなく、お仕事でBearerって何者？ってなったのでメモ程度ですが調べてみました。



## Bearer認証って？

トークンを利用する認証・許可に使用され、RFC 6750に規定されています。
Bearerトークンを用いたweb認証で、ユーザー認証を行った後に発行されるアクセストークンを受け取って、APIリクエスト時に発信する方式です。

またBearerは持参人という意味で、そのトークンを持っているという条件を満たしていればトークンを利用できます。


## トークンについて
また、今回２つのトークンが出てきたので調べてみました。

- アクセストークン 
OAuth 2.0 で定義されている、リソースへのアクセスを認可するためのトークン。
文字通りwebAPIなどにアクセスするためのトークン。

- IDトークン
OpenID Connect で定義されている、ユーザーが認証されたことを証明するトークン。
エンコード方式が定義されており、JWT(JSON Web Token)を利用する必要がある。

ちなみに認証と認可の違いは
認証 ：相手が何者かを確認すること
認可：あるリソースへの権限を与えること


## 使い方
以下の方法でアクセストークンを送信できるらしいです。

- Authorizationヘッダーに埋め込む
- リクエストボディに埋め込む
- クエリーパラメーターとして渡す

主にAuthorizationヘッダーに埋め込んで使用します。

リクエストを投げるときはAuthorizationヘッダで以下のような形で渡してあげます。
`Authorization: <type> <token>`
typeの部分には認証スキームを入れます。今回の場合はBearerと入れます。
また、tokenの中はアクセストークンをtoken68形式でセットして送ってあげます。

レスポンスはWWW-Authenticateヘッダで以下のような形で帰ってきます。
成功の場合`WWW-Authenticate: Bearer realm=xxx`
エラーの場合`WWW-Authenticate: Bearer error=xxx`

 __エラーの例__

- リクエストパラメータが不正な場合
`WWW-Authenticate: Bearer error="invalid_request"`

- 提供されたアクセストークンが期限切れ、不正な値である場合
`WWW-Authenticate: Bearer error="invalid_token"`

- スコープが不十分である場合
`WWW-Authenticate: Bearer error="insufficient_scope"`


また、error_description パラメータにエラー内容を説明する文字列を含んだり
error_urlパラメータにエラー内容の説明が入ったページのurlを含めたりもできるそうです。


## おわりに



明日はクリスマスイブですね*･゜⛄️🎄
担当は@hiro19840624さんになります。
よろしくお願いいたします！


ウェブクルーでは一緒に働いてくれる方を絶賛募集中です！
興味のある方はぜひお問い合わせください。
https://www.webcrew.co.jp/recruit/


## 参照


https://openid-foundation-japan.github.io/rfc6750.ja.html#anchor9

https://zenn.dev/shikumiya_hata/books/33f44d4f561ec4/viewer/fd3203

https://dev.classmethod.jp/articles/auth0-access-token-id-token-difference/
あなたは何本読んだ？社員が選ぶデータマネジメント記事5選

この記事は [インフォマティカ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/informatica) Day 25 の記事として書かれています。
# はじめに
皆さんこんにちは！
クリスマスを締めくくる本日は、「社員が選ぶデータマネジメント記事5選」をご紹介します！
インフォマティカブログでは、業界別のトレンド情報や事例、製品別アップデートを定期的に投稿しています。
実は今年半ばにブログページもリニューアルされ、より記事を見つけやすくなりました。

今回はその中でも社員がおすすめするブログを５本ピックアップしました。
あなたは何本読まれましたか？まだ読んでいない記事があったら是非ご一読ください！

# 1. [2022年のクラウドデータマネジメントの課題と優先順位トップ3](https://www.informatica.com/jp/blogs/top-3-cloud-data-management-challenges-and-priorities-in-2022.html)
インフォマティカが、さまざまな業界のデータリーダーを対象に行った調査を元に、彼らが抱える現在のデータ管理の課題と優先順位について解説しています。
下記は課題として挙げられたTop3とその割合です。あなたの企業はいくつ当てはまりますか？
[こちらの資料](https://www.informatica.com/content/dam/informatica-com/ja/collateral/other/top-3-cloud-data-management-and-data-integration-priorities_infographic_4400ja.pdf)も合わせて見ていただくとより理解が深まります！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294379/4abad357-22b8-271f-78b5-84758f6ff58e.png)
# 2. [データガバナンスとデータマネジメント、何が違うの？](https://www.informatica.com/jp/blogs/data-governance-vs-data-management-whats-the-difference1.html)
皆さん、データガバナンスとデータマネジメントは違うと思いますか？
答えは「イエス」なのですが、実はこれらは密接に関連しています。
本ブログでは、データガバナンスとデータマネジメントは、建物の設計図と建物の建設に見立てて解説しています。データマネジメントを通して2024年はより強い組織を作っていきましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294379/490d3878-0596-fa88-5a30-15d4cfe153f8.png)
# 3. [データマネジメントになぜデータ品質が重要なのか](https://www.informatica.com/jp/blogs/what_is_data_quality.html)
データマネジメントにおける重要なテーマのひとつでもあるデータ品質。本ブログでは、データ品質のトレンドや、データ品質に関連する課題と解決策についてご紹介しています。
ちなみに、こちらのブログを既に読んだよという方に合わせておすすめしたいのが[「はじめてのデータ品質」ウェビナー](https://www.informatica.com/jp/about-us/webinars/reg/basic-series-data-quality-in-30-minutes_3619401.html)です。初心者でも分かるデータ品質の基礎知識を30分でまとめた動画で、配信後も継続的にご視聴いただいています。
両方見ていただくことで、データ品質についての知識がより深まりますよ!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294379/0ab309c6-cb39-d125-bbb5-fc96c963025b.png)
# 4. ハイパーオートメーション推進に向けて、企業がiPaaSを導入すべき5つの理由
この数年でより耳にするようにまったハイパーオートメーション。ハイパーオートメーションとは、組織ができる限り多くのビジネス・プロセスとITプロセスを迅速に特定して検証し、自動化するために用いられるビジネス主導の規律あるアプローチです。これによって複雑なビジネスプロセスを自動化し、ビジネスの効率化を促進することができます。本ブログではビジネスメリットを５つご紹介しています。[こちらのウェビナー](https://www.informatica.com/jp/about-us/webinars/reg/basic-series-hyper-automation-in-30-minutes-automation-of-business-processes-and-promotion-of-dx-3835439.html)も合わせて見ていただくことで、より理解が深まりますよ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294379/dcd56784-9776-485d-4a19-ad1673d55be8.png)
# 5. [インフォマティカ・技術アップデート 11月号](https://www.informatica.com/jp/blogs/technicalupdate_November.html)
CoE嶋田が毎月お届けする、技術アップデート。実はIntelligent Data Management Cloudが10月に今年3度目となる大幅アップデートを実施したことをご存じですか？これにより今まで以上に様々なサービスに対する機能が強化されました。
どんなアップデートをしたの？というあなたは是非こちらのブログをチェックしてみてくださいね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294379/4d042487-52d6-62ec-7e1c-1bb7b1e6d64b.png)
# おわりに
皆さん、最後まで読んでいただいてありがとうございます。
2023年も様々なブログを公開していきますので、お楽しみに！
freee for kintone 関連情報のまとめ

freee会計とkintoneの連携ソリューション、freee for kintoneの関連情報の備忘録です。

# freee for kintone 資料

## freeeアプリストアのfreee for kintoneの資料リンク
https://support.freee.co.jp/hc/ja/sections/4406175355417-freee-for-kintone


# freee for kintone 情報

https://kintone-sol.cybozu.co.jp/integrate/freee002.html


# Tips
Tipsというか、freee for kintoneでシステム構築するにあたり、はまった点を記載。

## freee取引の決済日が同期されない

freee会計の取引にある、決済日はkintoneのテーブル内の項目にあることが条件になっている。

これに気がつくまで３〜４ヶ月かかった。freeeのサポートとのやり取りもお客様経由でやっていて時間がかかったということもあるが、マニュアルに記載するべきだと思う。

後でスクリーンショットを掲載しておく。

---
今のところ、まとめるほどの情報が無いですね。。。

みんながんばってもらいたい。
OpenChain Japan WG 教育資料サブグループのこの１年の活動のご紹介

OpenChain Japan WG 教育資料サブグループのリーダー　岩田です。
教育資料サブグループのこの１年の活動をご紹介します。

### 活動状況
先ずは、OSS教育コンテンツに関して、各社の現状について議論しました。
・既にコンテンツを作成済みの企業もある。
・新規にコンテンツを作成する場合、多大な工数が必要。
・コンテンツ保有企業も定期メンテ、拡充に工数が必要。
・サプライチェーンには、大企業、中小企業、SIビジネス企業、製品製造ビジネス企業など
　バラエティに富んでおり、OSSの利活用レベル/教育レベルも様々と推定。
・その他、各社の教育コンテンツの種類や概要、コンテンツの更新と課題、
　提供形態（e-learning,座学他）と時間、他についても議論。

そこで、教育コンテンツをオープンなコミュニティで各社連携して開発することにより、
⇒ コミュニティの力を活かし実ビジネスにリアルに役立つ教育コンテンツ
　を開発し提供する事が可能になると考えました。
・コミュニティの中で各社の賛同を得てコンテンツを開発
・コンテンツ拡充、若しくは必要なところを持ってくる事が可能
・各社の教育事例を一部オープンに出来れば活用可能

上記のもと、どういう教育コンテンツを作るか？を議論しました。
下記の候補について検討し、
　(a)コミュニティ活動向け教育資料
　(b)ソフトウェア開発委託先向け教育資料
　(c)インナーソース向け教育資料
(b)が共通の必要性や多くの賛同が得られたので、(b)について目次、概要の纏めをスタートしました。OpenChainのカリキュラムやリーフレットを参考に、メンバーの意見を入れて目次、概要を纏めました。

基礎編
　１章：OSSと知的財産権の基礎
　２章：OSSライセンスの基礎
　３章：ライセンス違反の事例
　４章：OSS採用時の検討事項
　５章：受発注時のライセンス情報の提供
基礎編では、特にOSSの使用が初めての方向けに、”OSSとは”、”ライセンスの基礎と必要性”、”受発注時にお願いしたい事”について、事例も含め織り込む事としました。

応用編
　１章：OSSライセンスの調査
　２章：ライセンス義務の履行
　３章：SBOM
　４章：脆弱性への対応
応用編では、OSSに関連する実務に対応する上で必要な観点を挙げて、具体的な実務がイメージ出来る様、参考例や一般的な事例を織り込む様にする予定です。

実際、基礎編が概ね完成して眺めてみると、メンバーから『特に利用対象を限定する必要無し』『OSSライセンスの基礎を全般的に学ぶのに有効』との意見が聞かれました。そこで、当サブグループで過去に作成した教育コンテンツのタイトルとの整合も鑑み、タイトルを
『ソフトウェア開発委託先向け教育資料』
　↓
『OSS教育資料(サプライチェーンリスクマネジメント･バージョン)ライセンス基礎』
に変更しています。

### OSS教育資料(サプライチェーンリスクマネジメント･バージョン)ライセンス基礎
既に、pptxファイル版をOpenChain Japan WG のGitHubで公開中です。
https://github.com/OpenChain-Project/OpenChain-JWG/tree/master/Education_Material/Training
皆さんからの誤りの指摘、コメント等、大歓迎です。
![gazou1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531819/ed5e77e5-0bc7-2fb3-3a79-ff37db0e6b2b.jpeg)

### OSS教育資料(サプライチェーンリスクマネジメント･バージョン)応用（仮称）
現在、当サブグループで作成中です。出来上がり次第、同じGitHubで公開予定です。
興味のある皆さんの参加、大歓迎です。

### おわりに
以上、OpenChain Japan WG教　育資料サブグループのこの１年の活動について簡単に紹介しました。現在、応用編の作成とレビューを行っています。皆様の参加をお待ちしています。
CSSのを書くときに意識したいこと

この記事は、[Ateam Group U-30のカレンダー | Advent Calendar 2022 - Qiita](https://qiita.com/advent-calendar/2022/ateam-group-u30)の19日目の記事になります。

CSSを保守運営するために、SassやCSS moduleなど便利な機能が生まれてきました。
ただ、使えないプロダクトで生のCSSを書く場合も少なからずあります。
そんなときに意識したいことをまとめます。

大枠では以下の３つになります。
- グローバルを汚染しない
- タグに直接スタイルを当てない
- 過度なスタイルの上書きをしない

## グローバルを汚染しない
CSSはJavaScriptと同じように1つのランタイムで実行されます。
そのため、何も意識せずに書くと、セレクタの衝突やスタイルの上書きが発生します。その結果、意図しないページ崩れが発生します。

グローバルが汚染された状態で放置すると、その後の保守が大変になり、より開発に時間がかかるようになります。

## タグに直接スタイルを当てない
CSSのスタイルの当て方には大きく4種類があります。
* タグにスタイル属性をつける
* クラス名でスタイルを当てる
* タグ名でスタイルを当てる
* Idでスタイルを当てる

この中で、タグ名にスタイル属性を当てることは初期化用のCSSの中で書かれていれば良いのですが、それ以外の箇所で使用するとページ崩れを引き起こす原因となります。特に部分的に提携サービスへ配信しているCSSで行うと、配信先のページを崩してしまいます。
どうしても当てなければいけない場合は、クラス名でスコープを絞りスタイルを当てるのが良いです。

```CSS
.label-text span { 
    font-size: 12px;
}
```


## 過度なスタイルの上書きはしない
CSSは後に書かれたスタイルが優先されます。そのため、当てたく無いスタイルがあれば上書きをする場合があります。
スタイルの上書きは便利ですが、過剰に上書きをしてしまうと、どこでなんのスタイルが当たっているのか、変更の影響範囲を調べることも難しくなります。
極力上書きを避け、なぜスタイルを上書きする必要があるかに目を向け、クラス名を分けるや元のスタイルを書き換えるなど、なるべく根本的な対応をすると良いかとしましょう。

## まとめ
今では生のCSSを書くことは減ってきています。ただ、少なからず書くこともあるので、後のことを考えながらメンテナンスしやすいCSSを書いていきたいです。
Dockerを使用してWordPressを構築する

# はじめに
WordPressをローカルサーバーで環境構築した際のメモです。
# 環境
Mac(M1チップ)
Docker
# Docker Composeのバージョン確認
環境構築をしたいディレクトリに移動する。（今回はDocumentsの配下にWordPressという名でディレクトリを作成。）
以下のコマンドでDocker Composeのバージョンを確認。
```
MacBook-Air:~/Documents/WordPress
$ docker-compose --version
Docker Compose version v2.6.1
```
# docker-compose.ymlファイルの作成
WordPressディレクトリ直下にdocker-compose.ymlファイルを作成。
ファイル内容は以下の通り。
```
version: '3'

services:
   db:
     image: mysql:5.7
     platform: linux/amd64
     volumes:
       - db_data:/var/lib/mysql
       - ./php.ini:/usr/local/etc/php/conf.d/php.ini
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:l
```
# イメージの構築
WordPressディレクトリで以下のコマンドを実行。
```
MacBook-Air:~/Documents/WordPress
$ docker-compose up -d
```
イメージの構築を行い各コンテナ起動するのでdockerコンテナを確認。
```
% docker ps

CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                  NAMES
3e0ddb8e6c40   wordpress:latest   "docker-entrypoint.s…"   ２０ seconds ago   Up 12 seconds   0.0.0.0:8000->80/tcp   wordpress-wordpress-1
```
# ローカルで確認
ブラウザで以下のURLにアクセス。
```
http://localhost:8000/
```
WordPressの画面が表示される。
![スクリーンショット 2022-12-23 9.14.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802994/962cf6e7-92d9-9643-d089-b0dcf1004b44.png)

# 最後に
初めにドメインとサーバーを用意せずにローカルで環境構築する方法があって助かりました。
AZ-900:Describe cloud concepts ⑨

AZ-900の試験を英語で受けるに至り、翻訳なしで勉強をしてまとめていく勉強ノートです。

自身の復習用としても記事を書くつもりではありますが、同じように英語で受講予定＆翻訳なしでそのまま英語で勉強した方がやりやすい方の参考に少しでもなることが出来ればと思います。



# 学習内容
 Describe cloud service types
- [学習内容](#学習内容)
- [Describe Software as a Service (Saas)](#describe-software-as-a-service-saas)
	- [Shared responsibility model](#shared-responsibility-model)
	- [scenarios](#scenarios)

<a id="#describe-"></a>

# Describe Software as a Service (SaaS)

What is it?:
The most complete cloud service model from a product perspective

Characteristics:
* Allows users to...
  * rent or use fully developed applications.
* Examples of a SaaS implementation
  * email such as...
      * Gmail, Outlook, etc...
  * financial software
  * messaging applications
  * connectivity software


<a id="#shared"></a>

## Shared responsibility model

Responsibility on...
* cloud provider
  * most among the other models
* users
  * least among the other models

What the cloud provider is responsible for:
* Nearly everything else the user is responsible for.
  * physical security of the...
    * data centers
    * power
    * network connectivity
   * application development and patching

What the user is responsible for:
* data that the users put into the system
* the devices that users allow to connect to the system
* the devices that the users have access to


<a id="#scenarios"></a>

## scenarios

Common scenarios where PaaS might make sense:

* Business productivity applications.
* Finance and expense tracking.
* Email and messaging, such as....
    * Gmail, Outlook, etc.
* When you want to use already-made services to build your own ones.
    * This might happen when you want to develop while saving initial costs and operating fee
    * ex. Salesforce

---

AZ-900:Describe cloud concepts① はこちら：

https://qiita.com/fsd-lukapyon/items/0100596156d3abc7808e

AZ-900:Describe cloud concepts② はこちら：

https://qiita.com/fsd-lukapyon/items/99edd38b566f6ed0d096

AZ-900:Describe cloud concepts③ はこちら：

https://qiita.com/fsd-lukapyon/items/0324140f0b6c2034db68

AZ-900:Describe cloud concepts④ はこちら：

https://qiita.com/fsd-lukapyon/items/90ed9d652da29f19f06e

AZ-900:Describe cloud concepts⑤ はこちら：

https://qiita.com/fsd-lukapyon/items/3d489123078f765ccb87

AZ-900:Describe cloud concepts⑥ はこちら：

https://qiita.com/fsd-lukapyon/items/6b5e612044dd37b42386

AZ-900:Describe cloud concepts⑦ はこちら：

https://qiita.com/fsd-lukapyon/items/83390ae397ff8e7b8989

AZ-900:Describe cloud concepts⑧ はこちら：

https://qiita.com/fsd-lukapyon/items/abfc398d55bf28160b90
【データ抽出/BigQuery】ユーザー毎の訪問頻度を集計する方法

# 使用テーブル

**【log_table】**
|user_id|timestamp|
|:-:|:-:|
|A|2022-12-01 18:00:00|
|B|2022-12-01 18:10:00|
|A|2022-12-02 17:00:00|
|C|2022-12-02 17:10:00|
|A|2022-12-03 10:20:00|
|B|2022-12-03 10:20:00|
# ■使用クエリ
```SQL
/* 日付カラムを付与 */
with daily_col as (
    select
        user_id
        , timestamp
        , format_date("%Y-%m-%d", timestamp) as day
    from
        log_table
)
/* user_id毎にログの数をカウントする */
, daily_action_count as (
    select
        user_id
        , count(distinct day) as action_count
    from
        daily_col
    group by
        day
)
/* action_countの数値毎に */
select
    action_count
    , count(distinct user_id) as user_count
from
    daily_action_count
group by
    action_count
```
#### 手順
1. 日付カラムを付与する。
2. `user_id`毎に`day`カラムのデータの数をカウントして、ログ(`action_count`)の数を集計する。
3. `action_count`毎に、ユーザーの数をカウントする。

これで、ユーザー毎の訪問頻度（ログの数）を算出することができた。
Oculusで音声認識を試す

Unity+Oculusで音声認識を試した内容を記事にしてみました。

<h2>最初に試したこと</h2>
最初に試したのが、以下の記事を参考にMRTK3で音声認識ができるかどうか、でした。

https://bluebirdofoz.hatenablog.com/entry/2022/06/21/225944

しかしながら、どうやらWindodws上でしか動かないことが判明したので
別の方法を模索することに。

https://qiita.com/mmt/items/753bdd46668fe12bb9c9

https://note.com/oshimu/n/n82f88ba7278a

情報がわりと多くあった「Watson」を利用しようと思いましたが
（現在は？）企業用のクレカでないと登録ができなくなっているようで
利用すらできませんでした。

https://qiita.com/OKsaiyowa/items/59805da08d0da1e392e8

<h2>次に試したこと</h2>
他の内容も調べてみたのですが、自分のスキルでたどり着ける方法が
なかなかない状態でした。

https://qiita.com/tomato_sugar/items/ac4b5dbe8277496add56

AWSならばSDKがあると思い、試すことにしたのですが
Unityに対応していないようで断念。

## Azureで試すことにしました
以下の情報をメインで活用させていただきながら
音声認識を実装していくことになりました。

https://teratail.com/questions/298049

※書きためていたせいか、記事が前後しているのはご容赦ください...
Sudachi Java: 辞書のビルド

# 初めに
これまでSudachi辞書のビルドはCLIのみサポートしていたのですが、Sudachi Javaの0.6.0以降はAPIが存在しています。アプリケーションでユーザー辞書を使うときなどに、動的に辞書をコンパイルすることができるようになりました。

:::note warn
紹介するAPIはExperimentalです。1.0リリースまで変更する可能性があります。紹介するコードは変更なしで動くでしょうが、それ以外のメソッドは変更される可能性が高いです。
:::

# システム辞書をビルドしましょう

まずは[辞書ソースのCSV](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/)をダウンロードしてください。small, core, fullで複数のファイルを使う場合は同じバージョンのCSVファイルを使ってください。

## システム辞書

このAPIは`com.worksap.nlp.sudachi.dictionary.build.DicBuilder`によって実装されています。ビルダーAPIはFluent APIの思想で作られています。最終的に`build()`の関数を呼ぶとバイナリーの辞書が提供された`SeekableByteChannel`に出力されます。


Sudachiのcore辞書相当をビルドするには、以下のコードのようにします。
```java
DicBuilder.System bldr = DicBuilder.system()
        .matrix(Path.of("/path/to/matrix.def")) // ここは matrix.def のパスを指定
        .lexicon(Path.of("/path/to/small.lex.csv")) // 辞書データをCSV形式で渡す
        .lexicon(Path.of("/path/to/core.lex.csv")); // 複数を渡すのも可能

// バイナリー辞書をコンパイルする
try (SeekableByteChannel result = Files.newByteChannel(Path.of("sudachi_core.dic"),
        StandardOpenOption.WRITE, StandardOpenOption.CREATE)) {
    bldr.build(result);
}
```

## ユーザー辞書

ユーザー辞書のビルドは`DicBuilder.user`の関数でビルダーを作ります。

```java
DicBuilder.User builder = DicBuilder.user(dic)
        .lexicon(Path.of("/path/to/user.lex.csv"));
```

コンパイルの仕方はシステム辞書と一緒です。

ユーザー辞書のビルダーを作るには、システム辞書を提供する必要があります。現在渡せるものは２つあり、`BinaryDictionary`と`JapaneseDictionary`にキャストされたDictionaryFactoryからの返り値です。

# ファイルシステムを経由しない辞書コンパイル

Sudachiの新しい`Config`と辞書ビルドを組み合わせることで、CSV辞書をファイルシステムを経由せずに使えます。そのためには、書き込まれた内容を`ByteBuffer`として返す`SeekableByteChannel`を実装する必要があります。例えば、[この実装](https://github.com/WorksApplications/Sudachi/blob/develop/src/test/java/com/worksap/nlp/sudachi/dictionary/build/MemChannel.kt)です。

仮に実装したクラスの名前を`InMemoryChannel`とします。

```java
// CSV辞書を読み込んで
DicBuilder.User builder = DicBuilder.user(dic)
        .lexicon(Path.of("/path/to/user.lex.csv"));

InMemoryChannel channel = new InMemoryChannel();
builder.build(channel); // コンパイルして
BinaryDictionary user = BinaryDictionary.loadUser(channel.buffer());
// バイナリー辞書を含むDictionaryを作る
config.addUserDictionary(user);
Dictionary dic = DictionaryFactory().create(config); 
```

# 終わりに

バイナリー辞書のコンパイルは通常の使い方より多くのメモリーなどを使います。将来的に、この機能をElasticsearch-sudachiにも取り入れる予定ですが、メモリー使用やJVMの設定を考慮する必要があります。

ではよい Sudachi life を。

:::note info
SudachiPyにも似たようなAPIはある程度存在していますが、まだ公式ではないので、任意のタイミングで変更されることがあります。
:::
Next.jsとgraphile-workerをRailwayにデプロイする

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

前日は[Next.js+URQL環境でPostgreSQLのPub/Subを使ったGraphQL Subscription](https://qiita.com/shwld/items/6674288fe46eae58cdb0)について書きました
# Next.jsとgraphile-workerをRailwayにデプロイする

https://zenn.dev/shwld/articles/3aa9f53956e9ec

先日こういう記事を書きました。
上の記事内でも書いていますが、このアドベントカレンダーで作っているサービスはRailwayにホスティングしています。
# ホスティングするべき項目
- web (Next.js)
- worker (graphile-worker)
- db (PostgreSQL)

今回は、これらを利用します。

## Webサービスをデプロイする

builderは選択できますが、[Nixpacks](https://nixpacks.com/)という、Railwayが開発しているビルドツールを使いました。
これは、Herokuのbuildpackと似たもので、buildしてOpen Container Initiative (OCI)準拠のイメージを作成するようなツールになっているようです。

一般的なアプリケーションに必要な依存は含まれていそうで、今回のケースでも特に困ることなくビルドできました。

Turbopackを使ったmonorepoで作成していますが、webアプリケーションはソースコードのルートで、 `yarn build` と `yarn start` するだけで起動するようになっています。
なので、特に特別な設定は行っていません。

ちなみに今回未設定ですが、RailwayではHeroku同様 `Procfile` によってビルド、開始コマンドを指定できるようです。

一点だけ見つけづらいなと思ったのが、エンドポイントとなるドメインの設定です。
RailwayはDomainsに自動でrailwayのドメインが付与されているわけではなく、Next.jsなどのように外部からアクセスして使うサービスの場合、domainを指定して付与する必要があるのですが、どこから設定するのか最初見つけられませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51402/92bce5b9-cbd5-5bda-9478-2e8934650299.png)
SettingのここにDomainsがあり、ここでrailwayドメインとカスタムドメインを付与できます。

## ワーカーサービスをデプロイする
Webサービスと同様に設定し、 `yarn start:worker` という用意したコマンドをスタートコマンドに指定するだけでした。
ちなみに、コマンドはこんなふうに定義しています

```json:package.json
{
 "scripts": {
    "build": "turbo run build",
    "start": "yarn workspace web start",
    "start:worker": "yarn workspace worker start"
  }
}
```
[/package.json](https://github.com/shwld/uzumaki/blob/advent-calendar/package.json)
# 次回予告
明日は、[GraphQLのUnionやInputType](https://qiita.com/shwld/items/49a310aadc0a34e2a721)について書きます
MRTK + Azure + Oculus で音声認識を頑張る①

音声認識のVRコンテンツを作るため、音声認識について色々調べてきた
内容を記載していきます。

<h2>前準備</h2>
・MRTKを理解しており、構築済（今回はMRTK3を利用）

・折れない心（一番大事）
・先達のありがたい資料

https://learn.microsoft.com/ja-jp/training/modules/create-language-translator-mixed-reality-application-unity-azure-cognitive-services/

https://teratail.com/questions/298049

<h2>Azureの構築</h2>
1.Azureのサブスクリプションを登録

https://azure.microsoft.com/ja-jp/

登録しないと、以下の手順が進められないのでご注意ください。
（1時間くらい無駄にしました）

2.「音声サービス」をクリックして「作成」を選択
「Cognitive Services」の中にあります。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3009807/8730a3da-e205-af72-54e8-6eaf3bf1c449.png)

3.項目を埋めていく
ここは画像で割愛します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3009807/98ebf7c8-343e-eb34-35c7-dc01d4577e2e.png)

![aa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3009807/601427c3-d67e-6677-ed9d-c8c86647bdc5.png)

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3009807/796240c4-69ef-228e-e8be-ad74004c0358.png)

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3009807/d492c32a-d4c9-9b07-dfc8-9626e266efac.png)

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3009807/ef3fea39-fc90-2845-fa2f-de1d44d06fb5.png)

![cc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3009807/b0e0d14c-ee4e-180e-9440-b6ddf0234930.png)


しばらく待ったら、「リソースへ移動」というボタンが出てくるので
それをクリックして移動。

![bb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3009807/047d8b19-26ed-f11d-aeaf-c3b1c8c7195e.png)
(備忘録)AWSのEC2でデプロイした後、開発環境で修正・更新を本場環境にアップする方法

開発環境で作成したAPPをAWSのEC2でデプロイした後、変更や修正点があった際、引き続き本番環境にアップする手順（コマンド）をまとめた。



①user_name@computer_name ~ % cd .ssh/

②user_name@computer_name ~ .ssh % ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスに紐付けたElastic IP

③[ec2-user@作成したEC2インスタンスに紐付けたElastic IP ~]$ cd /var/www/[リポジトリ]

④[ec2-user@作成したEC2インスタンスに紐付けたElastic IP リポジトリ名]$git pull origin master
※GitHubの内容をEC2に反映させる

⑤[ec2-user@作成したEC2インスタンスに紐付けたElastic IP リポジトリ名]$rails db:create RAILS_ENV=productionCreated database ‘APP名_production’

※「RAILS_ENV=production」とは、本番環境でコマンド実行する時につくオプション
※「RAILSのENV（環境）がproduction（本番環境）ですよ」という意味。

⑥[ec2-user@作成したEC2インスタンスに紐付けたElastic IP リポジトリ名]$rails db:migrate RAILS_ENV=production

！！！ここで「Mysql2::Error: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'」というエラーが起こった場合、データベースが起動していない可能性があり
→「sudo systemctl start mariadb」というコマンドをターミナルから打ち込み、mysqlの起動を試す。

⑦[ec2-user@作成したEC2インスタンスに紐付けたElastic IP リポジトリ名]$rails assets:precompile RAILS_ENV=production

※「アセットファイル」とは、画像・CSS・JavaScript等を管理しているファイル。
※アセットファイルを圧縮し、そのデータを転送する処理を「コンパイル」と言う。
※アセットファイルを行わないと、本番環境でCSSが反映されずにビューが崩れしまったり、エラーでブラウザが表示されない、などの問題が生じる。

⑧[ec2-user@作成したEC2インスタンスに紐付けたElastic IP リポジトリ名]$bundle exec unicorn_rails -c config/unicorn.rb -E production -D
※Railsを起動

⑨[ec2-user@作成したEC2インスタンスに紐付けたElastic IP リポジトリ名]$ps aux | grep unicorn

※本番環境のRails再起動の為、「psコマンド」で、現在動いているプロセスを確認
→その後、
[ec2-user@作成したEC2インスタンスに紐付けたElastic IP リポジトリ名]$ kill <確認したunicorn rails masterのプロセスid>
で、強制終了

⑩[ec2-user@作成したEC2インスタンスに紐付けたElastic IP リポジトリ名]$RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

※「RAILS_SERVE_STATIC_FILES=1」というオプションをつけて、Rails再起動
※「RAILS_SERVE_STATIC_FILES=1」で、Railsがコンパイルされたアセットを見つけられるように指定する
勉強する仲間がいること~ねこプロに入って1年半が経った~

# 概要
私がねこプロに入ったのは、2021年6月です。
そこから約1年半が経ちました。
そこで感じたことをお伝えいたします！

# きっかけ
私は新卒でIT企業に入社しました。
ですが、未経験だったこともあり不安で仕方なく、毎日勉強をしていました。
ただ、勉強しても不安が残ったり、疑問点が解消されないままの状態があり、誰かと勉強したい！と思いました。
そんな時、まさきちさんのTwitterが流れてきて、すぐに入れてください！と連絡したのがきっかけです。

# ねこプロで得られたもの
・勉強仲間
・雑談できる仲間
・IT情報

**・勉強仲間**
学生の頃は、教室に誰かいたり、宿題を一緒にいる仲間がいました。
しかし、社会人で勉強している人はわずかと言われています。
ねこプロには、もくもくルームという部屋があります。
オンラインではありますが、勉強している人がいるということがわかるだけで、自然とやる気が出ます！
もくもくルームに入ると、勉強時間を計測してくれます。そのため、「今自分はねこプロの中でどのくらい勉強してるんだろう」と確認できて、よりやる気が出ます(ง🔥Д🔥)ง
また、チャット機能で挨拶することによって、親近感もあって、孤独感なく勉強が進められます。
私はこのチャットで話すのが好きで、もくもくルームに入ってると言っても過言ではないですꉂꉂ(ˊᗜˋ*)
![D7BC2DB4-D926-427F-BD9A-4096576A8B6C.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955266/bd2e5f86-6c96-aba0-6d39-07aae0f805b0.jpeg)



**・雑談できる仲間**
みなさんは社会人になって、友達はできましたか？
正直、社会人になって輪を広げることはすごく難しいのかなと思います（勇気がいりますよね）。
ねこプロには、雑談ができるチャンネルが多数あります。
私は朝起きて見るものは、TwitterやLINEでもなく、ねこプロの雑談です(*´艸`)
最近盛り上がったのは、デスク環境をみんなであげたときでしょうか。
オンラインでの会話ですが、みんなで盛り上がって話すのが好きなのは社会人になっても一緒です！
![4D1F2624-9DBB-469A-9B53-27F683069401.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955266/4a354e4d-9a7a-3fe8-5a86-9503c11cfbfa.jpeg)



**・IT情報**
ITといっても、色んな分野があります。
ねこプロは、特に分野を絞った募集をしていないので、いろんな方々がいます。
その中には、本業はITとは全く別です！みたいな人もいます。
私はねこプロに入っていない頃、情報は全てネットやTwitterで入手してました。
でも、その情報に疑問を持ったり共感したりする時、情報を書いた人に直接聞くことは難しいです。
ねこプロでは、わからないことや情報共有してくれた人が目の前にいるので、疑問解消などにはとても役に立ちます！
javaを始めた頃、初心的な質問にも優しく教えてくれました( ´͈ ᵕ `͈ )
![2DDF4D61-1A95-4E4E-A4E9-439807B455F3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955266/61fa673b-6b96-b2ac-a6b4-ac2a0366d6be.jpeg)



# ねこプロユーザーから見たねこプロ
ねこプロの運営に関しては、[こちら](https://qiita.com/masakichi_eng/items/0c4bdc804a12bf733bf3)に記事があるので気になる方はぜひ読んでみてください！


私は運営側ではないですが、そんな私から見たねこプロの印象をお伝えします！

・みんな本当に優しい
・運営以外からどんどんやりたいことが出てくる
・居心地がいい

**・みんな本当に優しい**
プログラミングを始めた頃、インストラクターに聴きたいけど、質問の仕方がわからなかったり、質問の仕方がダメだと答えませんと言われたことがあります。
そんなことがあったので、私は最初のスクールで挫折しました、、、
でも、ねこプロの先輩方は、本当にずーっと問題解消するまで付き合ってくれました。本当に感謝しかないです。
![DBFAC2BA-5F72-4368-B7C0-F0A3A6E9E9F9.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955266/90a76a37-3d26-921a-c919-f9f24be1b3aa.jpeg)



**・運営以外からどんどんやりたいことが出てくる**
他のコミュニティがどんな感じかわからないのですが、これって結構良いことだなって思います。
最近出たのは、みんなでこの勉強しましょーとか、輪読会って面白そうだよねとかですね！
私自身も、手元映しながら勉強するんで、もし良かったら一緒に勉強しよー！と企画しました！（みんな来てくれてありがとう😊）
運営がコミュニティを作ってるっていう印象よりも、みんなでコミュニティを盛り上げてるっていう感じが、私はすごく好きです！
（もちろん！運営の皆さん感謝してます！！！）
![DBA4C338-CA3E-48AB-9487-1C34D355BBA2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955266/00bd12d7-181c-9645-2bb6-a88dc910b2e9.jpeg)




**・居心地がいい**
やっぱりこれですね笑
みんなで高め合うこともすごく大切だと思います。それと同時に、みんなで楽しむことが最も大事だと思います。
仕事や学校の時間以外で、勉強や情報収集をしているわけですから、楽しくないと続かないし、普通に遊んでる方が楽しいです。
私はねこプロで勉強したり、知識を共有することもできて、みんなでわちゃわちゃ楽しくできる環境がすごく好きです(*´︶`*)❤︎
![90B0CA05-84E4-45E0-B79E-569AE84EB528.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955266/e6ece3b5-8ad5-5ecf-9ee9-cb43c5efe3f1.jpeg)



# ねこプロはマイペースなみんなを応援します
ねこプロのモットーは「ねこのように自由に」です！
今ねこプロには約200名のメンバーがいます。
もちろん、Discordから目に見える活動が活発な方もいれば、そうでない方もいます。
でも、それでいいんです！というか、それがいいのです！
私が思うにねこプロは、「自分のペースで時間を過ごして、何か生活にプラスされたらいいよね」というメッセージがあるような気がしています。

ねこプロがたくさんの人から愛されますように、これからもよろしくお願いします😊
2022年秋 応用情報技術者試験""不""合格体験記

# ジョブチューンの解説風 「不合格ぅ～～」
# 目的

応用情報技術者試験の結果が発表され不合格だったため、なぜ不合格だったのかを思いつくままに書き込んでいく雑記です。

# 投稿者のスペック

- 今年24歳
- 私立文系大学卒（非情報学部）
- 勉強期間2ヶ月ちょい
- 基本情報を昨年11月に取得
- 実務経験0
- 言語はPythonを3ヶ月くらい勉強した程度

## 勉強教材

- キタミ式（基本情報のものを再利用）
- 過去問道場
- 応用情報技術者 午後問題の重点対策 (重点対策シリーズ)
- YouTube

# 予想点数（甘め採点、TAC）

- 情報セキュリティ 12点
- 経営戦略 9点
- システムアーキテクチャ 10点
- 組み込みシステム開発 16点
- システム監査 8点

# 結果

**午前：70点**
**午後：36点**

## 全体を通じての課題

- 用語の意味を正しく理解できていなかった
    - ICMP
- 出題テーマの意図を理解できていなかった
    - システムアーキテクチャのDocker
    - 情報セキュリティのマルウェア対策
- 「********************************○○と△△の違い********************************」といった問題が出ると理解度不足が顕著になる
- 読解力不足
    - 経営戦略
    - システム監査
- 実際に手を動かしていない
- **極度の分かったつもり状態**
    - 「実際に○○とはなんですか？」「〇〇は何故必要なんですか？」と問われても答えられない 
    - ********************************= 暗記だけで乗り切っているから定着していない。********************************
## じゃあどうするよ？

- 暗記だけでは太刀打ちできない
- 説明できる程の理解をしないといけない

実際に手を動かしていたものについては理解度が高まると感じ、
- 学んだ内容で実践可能なものから手を動かしてみる
    1. データベース
    2. ネットワーク
    3. 情報セキュリティ
    3. dockerの利用など
- 比較対象になるもの同士で、どう優れているのか言語化する
    
    今回だと「コンテナ型仮想技術」と「サーバ型仮想技術」の違い
    
- 問題のシラバスをよく読み込む
    - 情報セキュリティポリシ
    - システム監査基準
    - PMBOK
- 問題テーマに対して旬な内容を詳しく学ぶ
    
    今回だとテレワーク、仮想化、Iot、など

# 終わりに

今までの自分が暗記で乗り切ってきただけというのが証明された試験でした。
次試験で受験するかどうかは未定ですが、実際に手を動かして学ぶのが一番の勉強法な気がしたので少しずつ理解度を深めたいと思います。
OSS-DB Silverの学習メモ(その１[一般知識])

# はじめに

OSS-DB Silver試験の勉強していることを記事にしていきたいと思います
OSS-DB Silver試験の出題構成は、「一般知識（16％）」、「運用管理（52％）」、「開発・SQL（32％）」になります。
今回は、一般知識の範囲に簡単にまとめていきます。

# 一般知識

一般知識で問われる内容は次になります。

- オープンデータベースの一般的特徴
- データベースの基礎知識

## オープンデータベースの一般的特徴

### 一般的特徴

#### PostgreSQLの特徴
1986年から開発開始を期限とする長い歴史があるデータベース。
複雑な問い合わせ、外部キー、ビュー、トランザクションなどの同時実行制御がサポートされている。
商用/非商用を問わず無償で利用可能で、WindowsやLinuxなどの様々なOSで動作する。

#### バージョン
ソフトウェアにもよるが、x.y.zの形式で表される。
先頭のx.yを「メジャーバージョン」、末尾のzを「マイナーバージョン」という。
メジャーバージョンが変更されると、大きな機能改善や変更が行われ、マイナーバージョンが変更されると、不具合やセキュリティ対策などが行われる。

### データベースの基礎知識

#### データベースマネジメントシステム(DBMS)

データを一元管理するためのソフトウェア。
データベースマネジメントシステムの機能として、データの機密保護を実現、トランザクションを制御、データの整合性を維持、障害からの安全な復旧などが用意されています。

#### SQLの基礎
 
SQLの分類として、DDL(データ定義言語)、DML(データ操作言語)、DCL(データ制御言語)の3つに分類できる

- DDL(データ定義言語)・・・テーブルやインデックスの作成・変更・削除を行う
- DML(データ操作言語)・・・データの参照・追加・更新・削除を行う
- DCL(データ制御言語)・・・権限の設定・取り消し・データの更新の確定・取り消しなどを行う

#### 正規化

正規化とは、データベース設計の工程において同一のテーブル内のデータ重複をなくすために、データを分割・整理することをいう。データベース運用時に発生する問題を未然に防止し、矛盾を生じさせない状態を作る。

- 第一正規化・・・繰り返し項目のをれぞれを別レコードとして独立させ、レコードの長さを整える
- 第二正規化・・・第一正規化されたテーブルから、部分関数従属している列を切り出したもの
- 第三正規化・・・主キー以外の列に関数従属している列を整理し、推移関数従属性が存在しない状態にする


# さいごに

いかがでしたでしょうか。
今回は、OSS-DB Silver試験の出題範囲である一般知識の部分について簡単にまとめさせていただきました。
運用管理、開発・SQLの記事を書く際に今回出てきた項目について詳しく書いていくので、そちらの記事も参考にして頂けたらと思います。

自分が過去に投稿したDB・SQL関連の記事を下記のURLからとべるので、もしよかったらこちらも参考にしてください！
- [SQL超初心者がDB・SQLについて調べてみました](https://qiita.com/takada-syunya/items/5ebd29bda11c7bd24cb3)
- [SQLの基礎的な構文まとめ](https://qiita.com/takada-syunya/items/543beb894c67af69a793)
- [正規化の要点まとめてみました！](https://qiita.com/circular/items/c1249866b5e364c8a7dd)
正規表現（PHP）

正規表現のサンプルプログラムです。
今回は拡張子が「.jpg」または「.png」だったら「YES」、それ以外だったら「NO」をブラウザに出力する仕様です。

```HTML
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>正規表現テスト</title>
</head>
<body>
  <?php
      $str = "test1.XLS";
      
      if ((preg_match("/\.jpe?g\z/i",$str) == 1) || (preg_match("/\.png\z/i",$str) == 1)){
        echo "YES";
      } else {
        echo "NO";
      }

      
  ?>
</body>
</html>
```

PHPでは

```PHP
<?php
      $str = "test1.XLS";
      
      if ((preg_match("/\.jpe?g\z/i",$str) == 1) || (preg_match("/\.png\z/i",$str) == 1)){
        echo "YES";
      } else {
        echo "NO";
      }

      
  ?>
```
の

```PHP
//「.jpg」または「.png」の時に「YES」
 if ((preg_match("/\.jpe?g\z/i",$str) == 1) || (preg_match("/\.png\z/i",$str) == 1)){
        echo "YES";
      } else {
        echo "NO";
      }
```
のようにコーディングします。
ユーザーさんと成長していく社内システム


https://qiita.com/gokkozemisei/items/79dd2e9a34fa06c67b32

この記事から早３年
このシステムを他の事業所にも使ってもらいたい、というところから個人事業主になり、[アレグロペンギン](https://www.allegro-penguin.com/)という屋号で活動しております🐧

実際のところ、この３年で開発してきたのは介護業界も含みますが、業界問わず気の合うお客様とのお付き合いがあります。社内システムのユーザーさんである社員さんとも近い距離感で開発しています。

今回は私が開発した社内システムを毎日使ってくれているお客様との取り組みを紹介したいと思います。

この記事は[Qiitaアドベントカレンダー2022 FileMaker](https://qiita.com/advent-calendar/2022/filemaker)に参加しています:santa::xmas-tree:



## 運用安定後にも価値が高まる社内システム

社内システムの運用が安定してきて、完成したと思ってそのままにしておくのは大変勿体無いことです。

”業務は変化しているのにシステムをそれに合わせるのはお金がかかるからそのままに…”

というのがシステムが負債になってしまうパターンですが、それを回避するだけではなく、もっと積極的に社内システムをひとつの切り口にして、施策を出していく、ということもできます💡

私たちは定期的に会議を開いて、開発者の私もたまにはファシリテーターになったりアイデアを出しています。具体的にどんなことを話し合っているのか、どのように関わっているかご紹介します。

## 社内システムで収集したデータやその集計結果の考察会

なぜそのようなデータ項目が必要か、どういう狙いがあってこのようなシステムになったのか？
ということ合わせて、運用が進む中で取得できたデータを見ながら振り返る時間を作っています。

開発のプロセスまで共有することで、よりデータに興味を持ってもらいたいと思っているからです。

例えば様々な切り口で売上を分析するためのグラフを作ったら、なぜそのようなグラフの見せ方にしたか？ということに加え、そこからどのようなことが読み取れるか、といった考察もセットでお伝えし、そこからユーザーさんにも意見を聞いていきます。

グラフから事実を読み取る、というスキル自体はそれほど高度なものではないはずですが、そこから深堀したり、議論を進めたり、ということを自発的にできる人が少ない場合は、そうした文化を生み出すことにも繋がります。

## ビジネスモデル研究会

社内システムを開発していると、その事業には詳しくなりますが客観性は持ち合わせたままの状態でいることができます。

お客様企業のビジネスモデルをいくつかの文脈で語ることができるので、そういう切り口から新たな施策出しが始まることもあります。

普段業務をしていると、俯瞰的にみることが難しくなることもあると思いますが、こうした時間が自分の仕事がどのように人の役に立っているかを考えることにも繋がれば良いなと思います。

私自身がビジネスを実践や本などから日々学んでいるので、それをお客様に当てはめて話することもあります。

## アクシデントが業務を考え直すきっかけとなることも

これは実家のデイサービスでの出来事ですが、救急対応があったことをきっかけに、ではどうするのがベストだったか？という議論になり、それに合わせ、ある業務が目的から再構築された、という話もあります。

そうした議論の中に”じゃあシステムでこうすれば良いか”と持ちかけられ、開発者にも話に加わってもらおう、という発想になるところが身内ながら素晴らしい！と思いました笑

## FileMakerでの開発が素早いから

FileMakerで開発されたシステムは、最初のデータモデリングがちゃんとできていれば、あとは思いついたらすぐにアイデアを実装することができています。

FileMakerで開発したシステムを使って毎日仕事をしていて、新しいアイデアをすぐにシステムに落とし込める開発者が近くにいるなら、良い企画を常に出し続けるサイクルを生み出さないともったいないです。

ユーザーさんの要求が全て要件になるわけではないので、要求自体の質を上げていくことが特に運用が始まってからは大きなポイントだと思っています。

そのために開発者ができることも多くあるのではと日々感じています。

ユーザーさんと開発者が近い関係にあると、開発者がユーザーさんの要求をなんでも聞いてしまうのが当たり前、という空気感になってしまうこともあり得るのかなと思いますが、そうなっていないのはあらかじめルールを決めていたり社内のシステム担当者が間に立って調整してくれているおかげだなと感じています。

## システムを作らせる技術

今年は”システムを作らせる”側のスキルに注目した一年だったなと思います。

[システムを作らせる技術](https://amzn.asia/d/e0jg1u6)

※システムを作らせる技術という本、こちらは大変勉強になりました。
色んな方におすすめしていて、私も何度も読み返しています。

システム開発が成功するか否かはシステムを作らせる側の影響が非常に大きいですが、そこを私の立場からもフォローすることによって、プロジェクトを成功させようと試行錯誤しました。
（そんなことができるのは、受託開発ではなくて準委任契約にしているからです。）

FileMakerで開発が早くできる分、アイデアが形になるまでの時間が早くなり、よりアイデアにオーナーシップが芽生えやすく、モチベーションを育てることができると感じています。

そういう体験をどんどん増やして、組織が活発になれば、またシステムも成長していく…というサイクルができます◎
CTO興味ある人へ：CTOの業務についてその１２　品質管理

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

# 品質管理
サービスの品質管理の適正化は、CTOのチェック事項として必要ですが、組織的に対応する必要もあります
そのため、
１．品質管理部
２．PMO
３．共通基盤管理部
４．インフラ部
等の部署を設置します。
開発組織とは独立させる部署となるため、CTO直下の組織とするのも良いと思います。
## １．品質管理部
開発部門の品質向上のための施策や計測を行う部署です。
### ・施策
　品質に関わるチェック項目の構築
　ー　システム継続性関連（可用性）
　ー　性能・拡張性関連
　ー　セキュリティ関連
　ー　運用・保守性関連
　ー　イレギュラー関連
基本的には非機能要件のテスト項目等を管理します。
### ・計測
　変更障害率、サービス復旧時間(Four Keysより）、etc

## ２．PMO
プロジェクトマネジメントの管理部署です。
### ・施策
　ー　開始判定（スケジュールと要員チェック）
　ー　プロマネの標準化、教育
　ー　プロジェクト進捗のチェック
　ー　外注の場合は、外注先体制・金額等のチェック
　ー　リリース判定

複数の新規プロジェクトが多い場合に必要となる部署です。
１プロダクトのみで常にアジャイル開発の場合は、不要です。

## ３．共通基盤管理部
汎用化、共有化すべき部分について整理を行う部署です。
### ・施策
　ー　ミドルウェアバージョン管理構成
　ー　共有フレームワーク
　ー　部品類
### ・計測
　基盤利用率、デプロイ頻度、変更リードタイム(Four Keysより）等を計測し開発品質を測定する
## ４．インフラ部
インフラ関連の汎用化、共有化すべき部分について整理を行う部署です。
### ・施策
　ー　開発環境整備
　ー　インフラ構成
　ー　バックアップ管理
　ー　ミドルウェアバージョン管理構成
　ー　CI/CD　DevOps関連
### ・計測
　サービス復元時間(Four Keysより）等を計測しインフラ品質を測定する

共通基盤管理部と業務が重なる部分もありますが、品質が考慮されたものを用意し開発業務の効率化と品質確保を行います。

品質が考慮されたものを用意し開発業務の効率化と品質確保を行います。


## メンバーはローテーション
メンバーは、2,3年毎に開発組織メンバーとローテーションさせるのがベストです。これにより、全体的なノウハウの流通・浸透が進みます。

１．開発現場のメンバーが品質管理側に異動する事で、現場の意見を取り込み、より実践的な品質管理を行う事が出来る様になります。
２．逆に品質管理側のメンバーを開発現場に異動させる事で、品質管理の重要性を浸透させる事が出来ます。ドキュメントだけ渡したり、ルールだけを押し付けても浸透が難しいものでもメンバーが異動する事で開発現場側の理解度が深まります。

このため、無理矢理でもメンバーのローテーションさせる覚悟が必要です。


# まとめ
品質管理部署を設置しCTO直下で管理する事で全体的な開発品質を向上させます。品質を向上させる事は、トータル的にコスト削減、リリース速度改善に繋がります。手を抜きがちですが、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
CTO興味ある人へ：CTOの業務についてその６　組織設計
https://qiita.com/k1morikawa@github/items/0b59893da6ecbb886a64
CTO興味ある人へ：CTOの業務についてその７　技術力アップ
https://qiita.com/k1morikawa@github/items/fa50105d0e6af34a9961
CTO興味ある人へ：CTOの業務についてその８　セキュリティ管理
https://qiita.com/k1morikawa@github/items/a4d773ac12b4c4c745a5
CTO興味ある人へ：CTOの業務についてその９　システムチェック
https://qiita.com/k1morikawa@github/items/e2c1b5d3e16c88d2f250
CTO興味ある人へ：CTOの業務についてその１０　アジリティチェック
https://qiita.com/k1morikawa@github/items/319e5a5c594a92adc482
CTO興味ある人へ：CTOの業務についてその１１　働き方チェック
https://qiita.com/k1morikawa@github/items/2ce2df5ef7dfde238b23
Releaseタグ作成からEKSへのデプロイを自動化した話

# はじめに

この記事では、`Gihub` での `Release` タグの作成 〜 `EKS` へのデプロイを自動で行うための作成した仕組みを紹介します。
`AWS` 上で使用する各リソースは、 `AWS CDK` を使って構築します。

## 注意点

この仕組みは `R&D` 的に作成した構成で、実運用では使ったことがない（実際に本番環境やステージング環境などにデプロイしたことがない）ので、参考程度にみていただけると幸甚です。

# 構成

## 全体図

![ReleaseからのEKSデプロイ.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44959/2ecbb7bb-e3d8-c477-0578-2245cbfd0d4b.png)

## 流れ

1. ユーザが `Github` 上で `Release` タグを作成
1. `Release` タグを作成したタイミングで `Github Action` が実行され、`Lambda` を実行する
1. `Lambda` で、`Github` からソースコードをダウンロードし、`zip` ファイルに圧縮し直して、`S3` へアップロードする
1. `Lambda` から `Code pipeline` を実行する
1. `Code pipeline` の中で、 `EKS` へのデプロイと、`Slack` への完了通知を送る

# 実際のコードたち

https://github.com/ijufumi/eks-deploy-sample

## 要点の説明

### `Github Action` での`Lambda` の実行

`Github` 上で `Release` タグを作成したタイミングで、 `Lambda` の `Functional endpoint` に `curl` でリクエストを送る。  
リクエストの中身には、 `Organization`、 `Repository` と `tag` が含まれている。

### `Lambda` で `zip` ファイルを、`S3` へアップロードする

`Github Action` から受け取ったリクエストから `Organization`、 `Repository` と `tag` を取得し、その情報を元に `Github` からソースコードを `zip` ファイルとしてダウンロードする。  
ダウンロード後、 `zip` ファイルの作成し直しをして、 `s3` にアップロードする

### `Lambda` から `Code pipeline` を実行する

`aws cli` を使って `Code pipeline` を実行する（実際には、 `Python` のライブラリを使って実行する）

### `Code pipeline` の中で、 `EKS` へのデプロイ

`Code pipeline` の中で実行している `Code build` の `buildspec.yml` の中で、 `EKS` へのデプロイを実行している。

### `Slack` への完了通知を送る

`Slack` の通知用URLを設定している場合、終了通知を `Slack` に通知する

# おわりに

もっと簡単にスマートにできる方法がありましたら、教えて頂けると幸いです。
Tokyo Jazug Night #42 に現地参加するまで知らなかったこと

さて 2020 年からアドベントカレンダー期に毎日何かを投稿するという奇祭に参加する習わしがあり今年もゆるゆる参加してみようと思い書くもの。タイトルは 23 日の余白を埋めたくて韻を踏もうとしたためです。ので、昨日は以下イベントを現地で見たというそのメモです。

https://jazug.connpass.com/event/267017/

https://twitter.com/Rie_Moriguchi/status/1605867087620366338?s=20&t=qI2cpx_XDkGRgMsCSEGE-w

↑写真の右側にせせこましく座っているひとが私です...
かつ、私自身は Azure をお仕事で触るようになってまだ 3 か月です。

## LT

以下、学びになった単語の羅列です。

### クラウドマイグレーション成功のコツ	Katsuyoshi Sumidaさん

- アプリケーション利用状況の把握
- Rehost, Replatform... 7つのR
- 「把握」だいじ


### Azure App Service 運用体験談(仮)	御成門プログラマーさん
- https://onarimon.jp/ 
- https://food.onarimon.jp/
- Azure App Service
- App Service Plan
- 1 App Service Plan に App Service 複数 
	- インスタンス数が最大値
	- テスト環境の負荷が本番環境に影響
	- 増えるコスト
		- 謎のダウンタイム通知
		- アプリの停止や遅延
- App Service Plan ごとに最大アプリ数はある
- 制限事項はしっかり確認しよう
- 下手なコスト節約は逆効果

https://learn.microsoft.com/ja-jp/azure/app-service/overview-hosting-plans#should-i-put-an-app-in-a-new-plan-or-an-existing-plan

### Azure で仮想デスクトップを始めよう	@mana_catさん

![Pasted image 20221222193447.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/f39e1535-e52b-ca37-d0ab-503e4acdaee5.png)

- 熊本のご出身 ↑ は熊本
- ユニバーサルプリントなるものを知った。

https://www.microsoft.com/ja-jp/microsoft-365/windows/universal-print


- iPad で Windows が使える...
- Android でも

### Azure Orbital触ってみた	HiroHataさん

- Azure Space
- Azure Orbital Ground Station
- 「宇宙船を登録する」

https://learn.microsoft.com/ja-jp/azure/orbital/register-spacecraft

- 浪漫
- 宇宙人 (ウチュンチュ) になれる。課金すれば

### 社内Azure勉強会を1年半運営してみて(仮)	小泉 裕さん

- https://blog.azure.moe/
- アップデート確認は適当で OK
- 運営するメリット
    - 自分の知識を定着させる
    - 他人に説明する経験を積む
        - 自己中で良いんだな～
- 「よわい」ひとが運営するのが良し


### Azure SQL MI Link で移行も DR もポチッとな、の時代へ	Yuji Masaoka（まっぴぃ）さん

- Azure SQL MI Link
- SQL Server を簡単に Azure SQL MI にレプリケートする
- SQL Server
- Azure SQL MI
- SQL Server Management Studio
- ヤンさんの Qiita : https://qiita.com/yangjiayi/items/68465903d5250cd11f10

### Azure App ServiceのGo紹介 [2022年12月版]	Ryuji Iwata


https://azure.github.io/AppService/2022/10/12/Go-on-AppService.html


### Azureの学習にオススメな動画コンテンツまとめ	水島 寛人さん

- Azure 界隈に貢献できる
- 幅広い Azure ユーザーにとってのお役立ち情報
- Microsoft Learn
- くらでべ
- Udemy
- 国内
	- サイオステクノロジー: https://www.youtube.com/channel/UCjIVEOLmZlBrgq7nrxVFuRw
	- 胡田のコンピューター系: https://www.youtube.com/channel/UCn_7IV61pGOfoiC5Lc8nHUw
- 英語
	- Azure Academy: https://www.youtube.com/c/AzureAcademy
	- Susanth Sutheesh: https://www.youtube.com/c/susanthsutheesh


### ネットワークを伸ばせどこまでも	工藤淳さん

https://level69.net/

https://ystatit.medium.com/dynamic-vpn-routing-between-azure-virtual-wan-and-aws-transit-gateway-using-bgp-fcd77167f6b

などなど、
なんか本当は色々 Twitter 上でメモっていたんですがともかくメモるのに精いっぱいでこんなところで。2023 年も色々なイベントを見て回りたいなという気持ちになりました。あ、Orbital なサービスは 1分 10$ で利用できるなんて知りませんでした https://azure.microsoft.com/ja-jp/pricing/details/orbital/

以上、今年の締めの参加でした :star2:
うっかりSQLServerにログインできなくなった時の対処法

## 目次
- はじめに
- ①SQLServer認証でログインできるように設定をする。
- ②CLIからユーザー作成をしてログインをする。
- 最後に
- 参考サイト

## はじめに
現場のセキュリティ対応でSQLServerからlocal/AdministratorsのグループをLoginsのエントリーから外さないといけません。

![2022-12-23 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519662/3406ef88-e722-6e24-cea7-5c9252210ed3.png)


**何も迂回路を作らず、指示通りに二つ返事でAdministratorsグループをLoginsから削除したところ、見事にSQLServerに接続できなくなったぞ！
もちろん事前にsaも無効化しているので、万全にログインできません。**

**というトラブル対応のお手伝いをしました。**

解決法として、CLIからSQLServer認証のログインアカウントを作成し、無事復旧させることができました。
という、1つ学んだトラブル対応方法のメモです。

現場での環境はSQLServer2016ですが、対応方法としてバージョンの大差はないと思います。

## ①SQLServer認証でログインできるように設定をする。

SQLServerのインストール時や、SQLServerManagementStudio(以下SSMS)のプロパティにて、ログイン時の認証を設定する項目があり、
Windows認証のみか、Windows認証とSQLServer認証の両方を使用できるようにするか選択する項目があります。

![2022-12-23 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519662/cc3730a7-0bc5-d3f8-1032-bf9b9cdc1ac9.png)



しかし、SQLServerにログインできない状態ではSSMSからプロパティを変更することができないので、レジストリエディタを使って該当する箇所の値を変更します。

レジストリエディタから、
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.[インスタンス名]\MSSQLServer
に行くと[LoginMode]という項目があります。

![2022-12-23 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519662/1746d2fd-bf7b-8bc6-18e2-7c26b268ff3a.png)

こちらの値が1の場合、Windows認証のみでのログイン、2の場合はSQLServer認証も可能となります。
この値が2でないと後続の対応ができません。


## ②CLIからユーザー作成をしてログインをする。
SQLServerの構成マネージャーを開き、SQLServerを停止させます。
ServerAgentが起動していたらこの時に同時に止めてください。

SQL Serverを右クリック→プロパティ→スタートアップのタブにて
起動オプションに-mだけの項目を追加します。

![2022-12-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519662/fad19bee-8733-e74d-7ba3-7d37174c3dcb.png)

-mをつけることでシングルユーザーモード(特権モード)で起動となるようです。
プロパティを閉じて、SQLServerのサービスを起動。
この時、Agentは立ち上げないように。奪われてしまいログインできなくなります。


次に、Powershellを実行し、SQLサーバーへ接続します。

```
SQLCMD -S [サーバーホスト名]
```


以下のコマンドを入力してログインIDを作成、
作成したIDにsysadmin権限を付与する

```
CREATE LOGIN [臨時のログインID] WITH PASSWORD='[パスワード]'
GO
EXEC sp_addsrvrolemember [臨時のログインID], sysadmin
GO
```

以下コマンド実行例
```
PS C:\Users\Administrator> SQLCMD -S localhost
1> CREATE LOGIN LOGINUSER WITH PASSWORD='Password123'
2> GO
1> EXEC sp_addsrvrolemember LOGINUSER, sysadmin
2> GO
1> quit
PS C:\Users\Administrator>
```

コマンドが正常に通ったら、構成マネージャーで先ほど操作した起動オプションから-mを外して、SQLSERVERのサービスを再起動します。

これで作成したアカウントからSQLServerにログインできるようになりました。



## 最後に
①と②は違うサーバーで起こりました。
1つ目のサーバーで行った対処は②のみで、
2つ目のサーバーで万全の対策をして臨んだところ、認証方法がWindowsのみになっており、作成したアカウントでログインできず…①の対応を行ったという結果となります。
トラブル対応からも色々と学ぶことが多いです。

## 参考サイト
[SQL Server - 完全にロックアウトされてログインできない時の対処方法](https://sql55.com/column/sql-server-completely-locked-out.php)
学んでときにこれを習う/個人開発と応用情報

# 0.
　ちょうど昨日、応用情報技術者試験の合否が発表されていて、わたしは受かっていた。すこし気分がいいので学習のことを書いてみる。

　個人開発に学習は必須ではない。むしろ、なるべく学習せずに作り切ってしまうことが大事だ。時間が限られているプロジェクトなのだから、だらだらと学習をして開発の時間を削ってしまうのはもったいない。「これを知らないから学んでからつくろう」では遅い。

　ただ、人生とかいうおっきな単位になると学習はしないといけなくなる。と、私は感じている。もしかしたら不要かもしれないが、ある程度頭の中を定期的にアップデートしておかないと落ち着かない。

　応用情報技術者試験も似たようなものだ。基本情報は取得していて、次は応用だなとやっていくことにした。テキストは有名な「キタミ式」をつかって何回も繰り返し読んだ。過去問はほぼ解いていない。午前の過去問はキタミ式にあるていど入っていたし、午後の問題はほぼ運だ。運をつかんだ人が勝つ。

　家での自由な時間（早朝）は個人開発に充てたかったので、学習時間は通勤電車の中だけとなった。ひたすらテキスト読む。何回も見る。絵で記憶する。目を閉じて頭の中で文章をつくる。ノートはつくらない。時間がないのでつくってはいけない。そうやって、散らばっていた単語がそれぞれにグループをつくり、体系立てて整列されるようになった。

　学んでときにこれを習う。はたしてこれを「習う」ときがあるか、と聞かれると困る。人生なんてなにが役に立つかわからないし、覚えたことは二度と使わないかもしれない。それでも学習は楽しい。楽しいからやっている。個人開発も楽しいからやっている。根源は同じ。楽しさ。

# 1.

　来年はPMをとる。
paiza.ioでelixir その155

# 概要
paiza.ioでelixirやってみた。
jsonパースをnode-redにお願いしてみた。

# node-redでqiita apiを叩く。

https://qiita.com/ohisama@github/items/d33529ef9317febd659c

# サンプルコード

```

:inets.start
:ssl.start



defmodule Main do
    def qiita() do
        {:ok, {_, _, body}} = :httpc.request(["https://lcdp003.enebular.com/new01/"])
        body
        body = IO.iodata_to_binary(body)
    end
    def print(nil) do
        IO.puts "ok"
    end
    def print(l) do
		#IO.puts l
		s = String.split(l, ",")
		#IO.puts Enum.at(s, 0)
        IO.puts "<tr><td>#{Enum.at(s, 0)}</td><td>#{Enum.at(s, 1)}</td><td>#{Enum.at(s, 2)}</td></tr>\n"
    end
    def main() do
        csv = qiita()
        IO.puts """
<!doctype html>
<html>
<head>
</head>
<body>
    <table  border="1">
        <thead>
        </thead>
        <tbody>
"""
        Enum.map(String.split(csv, "\n"), fn l ->
			print(l)
		end)
		IO.puts """
</tbody>
</table>
</body>
</html>
"""
	end
end

Main.main


```

# 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/8d7531d2-08de-5867-df26-a86f352a4786.png)


# 成果物

https://paiza.io/projects/ehOiH3dL-F4haxVYR2mJEQ

以上。
よく使うLaravelのコマンド, よく使うブラウザーのショートカット

# ■はじめに
コマンドを打つ際に毎回調べてという事が面倒くさいと思ったことはありませんか？
今の時代調べれば何でも出てきますから、何回も調べたらいいと思っていませんか？
でも、マニュアルを見ても、全てが１ページにまとまっていることは少ないと思います。
私はPHPの初心者ですが、自分がよく使うコマンドを、毎回作業中に手を止めて調べなくてもいいようにまとめました。

このページはlaraveのコマンドの一覧です。
SQLのコマンドそ見たい方は、こちらも一緒にご覧ください。

https://qiita.com/noa-h/items/49a33677e89f805dfdf0


# ■よく使うLaravelのコマンド

### サーバーを起動する
```bash
$ php artisan serve
$ php artisan serve --port=8080
```

portオプションは、起動する開発サーバーのポート番号を明示的に指定できます。例えば、ポート番号を「8080」に指定したい場合は、以下のように記述します。
```bash
$ php artisan serve --port=8080
```

### ファイルを開く
```bash
open ファイル名
```

### 自分が今使っているlaravelのバージョンを確認する
```bash
php artisan -V
```

### 自分が今使っているNode.jsのバージョンを確認する
```bash
node -v
```

### ディレクトリ（フォルダ）移動
```bash
cd 移動したいフォルダ名
```

### 中身をみたいフォルダの内容をリスト形式で表示する(list)
```bash
ls フォルダ名
```

### ディレクトリーを（フォルダ）作成(make directry)
```bash
mkdir
```

### ファイルを作成する
```bash
touch ファイル名
```

### ファイルを移動
```bash
mv (移動元ファイル名/フォルダ名) (移動先ファイル名/フォルダ名)　
```

### ファイルの検索をする
```bash
find / -name ファイル名
```

### 空のフォルダを削除する
```bash
rmdir フォルダ名
```

### ファイルやフォルダを削除する
```bash
rm ファイル名/フォルダ名
```

### 現在いる位置を表示する
```bash
pwd
```

### ファイルの内容を表示する
```bash
cat ファイル名
```

### コマンドの履歴を表示する

```bash
history
```


### git するとき

```bash
git add

git commit -m "分かりやすいタイトル"

git push -u origin master
```

### インスタンスの再起動
```bash　
sudo reboot
```

### コマンドなどで画面がいっぱいになった時に画面をクリアする

##### clearコマンドは実際には、操作している行を画面の一番上に表示するようにスクロールしているだけである。過去の履歴は、上にスクロールすると残っている。
```bash
clear
```

# ■よく使うブラウザーのショートカット

最後にブラウザーでよく使用するショートカットをまとめましたので、覚えておくと便利なので、参考にしてみてください。

|操作 | ショートカット|
|:-:|:-:|
|右隣のタブへ   | Ctrl + Tab  |
|左隣のタブへ  |Ctrl + Shift + Tab   |
|タブを閉じる   |Ctrl + W   |
|新しくタブを開く   |Ctrl + T   |
|閉じてしまったタブを開く   |Ctrl + Shift + T   |
|ブラウザの表の示拡大   |Ctrl + +   |
|ブラウザの表示の縮小   | Ctrl + -  |
|検索する   | Ctrl + F |
|全選択   |Ctrl + A   |
|コピーする   | Ctrl + C  |
|ペーストする   | Ctrl + V  |
WindowsでMakeFileが動かなかった時にやったこと

# 前提
- パッケージマネージャscoopをインストール
- mingwを`scoop install mingw`でインストール
- `gcc -v`が動くことを確認済み

avrアセンブリのコンパイラavraのビルドとインストールを行うときに人様のコードのビルドが初めてだったのでいろいろ躓いた
他のソースをビルドする時も役に立つ気がしたので記事にした

WSLを使えば楽という主張は分かるがあくまで素のwindowsで頑張るという話
# OS
これはavraのmakefileの構造がそうだったというだけの話
変数OSを参考に子のmakefileを切り替えていたので書き換えが必要だった
```
OS=linux
↓
OS=mingw32
```
これはあくまでavraの一例
## つまり
OSとかユーザー側で書き換えの必要な変数がないか確認するべき
# CC=gcc
次にこんなエラーが出た
```
createProcess(NULL, cc 略 ) failed.
make: *** <builtin>: main.o
make (e=2): 指定されたファイルが見つかりません。
```
ファイルというからにはソースファイルが抜けているのかと思っていろいろ試したがすべて外れ
気になったのがccというコマンド
このコマンドが記載された行はmakefileには存在しなかった
調べたところ指定のないファイルは自動的に変数`CC`に格納されたコマンドを実行する模様
そしてこの変数`CC`のデフォ値は`cc`
そんなのあったかとpowershellから確認したらなかった
`cc`は一般的なcコンパイラのコマンド
調べたところ`gcc`との違いはほぼ名前だけの模様

`gcc`はあらかじめインストールしてあるので
```make
CC=gcc
```
を先頭に書き足して解決

## つまり
- コンパイラがインストールされていること
- コンパイラのコマンドがちゃんとmakeで呼ばれていること
- 「指定されたファイルが見つかりません。」言われたら存在しないコマンドが呼ばれていないか

を確認するべき

# make install ?
これはできた実行ファイルを`/usr/local/bin`とかプログラム格納用のディレクトリに移動するコマンドとかが走る
ここで`install`とかのunixコマンドがあると走らない
コンパイル時に`-DDEFAULT_INCLUDE_PATH`で`/usr/local/include`が入っていたうえこの先この手のことがまたあると面倒なのでおとなしく`C:/usr/local/bin`を作成して頑張って読んで自分で移動しました……
`C:\usr\local\bin`でパスを通すのも忘れずに
何かいい方法ありますか？
# 動いた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479627/61cb69cd-cda7-bc47-6cc3-c84f6bc5f393.png)