OmniAICreator/Qiita-1.07M huggingface dataset:
Studioフロー内で携帯電話かをチェックする

:::note alert
2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
:::

# はじめに

みなさん、こんにちは。
KDDIウェブコミュニケーションズ、Twilioエバンジェリストの高橋です。

今回は、Studioフローの中で着信番号が携帯電話かどうかをチェックする方法について説明します。
仕組みは非常にシンプルですが、つい忘れてしまうので記事にしてみました。

## 利用するウィジェット

条件分岐をするために、**Split Based On...** ウィジェットを使います。

## Config タブの設定

![スクリーンショット 2022-07-13 9.05.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/d6b6fe19-6402-8405-48d1-425bbf06b04d.png)

条件チェックをする項目（VARIABLE TO TEST）に、**trigger.call.From**を指定します。

## Transitions タブの設定

![スクリーンショット 2022-07-13 9.08.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/9fca033f-daec-db04-fa8b-8e168e971a80.png)

条件判定方法として、**Regex**（正規表現）を選択します。
正規表現には、
```text:Regex
^\+81[789]0[1-9]{1}[0-9]{7}$
```
を指定します。

## 解説

先頭が **+81**から始まり（=日本の番号である）、その次に**7** or **8** or **9**が来て、その次に**0**が来ることで、070 or 080 or 090であることを確認。
その次の **[1-9]{1}** は、0800を除外するためのもの。
で、その後には7桁の数値が来ることをチェックしています。

正規表現のテストをしたいときは以下のサイトが便利ですよ。

https://regex101.com/

# まとめ

SMSを送信するときに、携帯かどうかを確認する必要がありますが、そんなときに使ってもらえればと思います。

---
### Twilio（トゥイリオ）とは

https://cloudapi.kddi-web.com
Twilio は音声通話、メッセージング（SMS /チャット）、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウド API サービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。

Twilioに関するご相談などがございましたら、ぜひ毎週水曜日の午後に開催しております相談会をご利用ください。
[Twilio相談会（毎週水曜日）](https://cloudapi.kddi-web.com/contact/consultation?hsLang=ja-jp)

自己紹介|　
:--|:--
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/b51a8b88-abd5-ce5e-195a-de3564ba2ae6.png" height='200' width='150'/>|高橋克己（Katsumi Takahashi） 自称「<font color='red'>赤い芸人</font>」<br />グローバル・インターネット・ジャパン株式会社　代表取締役<br />株式会社KDDIウェブコミュニケーションズ　Twilio事業部エバンジェリスト<br /><br />2001年より大手通信事業者の法人サービスの教育に携わり、企業における電話のしくみや重要性を研究。2016年よりTwilio事業部にジョインし、Twilioを使ったスマートコミュニケーションの普及活動を精力的に行っている。<br />2015 Hall of Doers<br />2019 Twilio Champions
VueでWebアプリ作成#1:ESLintの設定

Webアプリを作って実践的にVueを覚えていこうと思います。
VueCliでプロジェクトを作成し、まずはESLintの設定。

ESLintはJavaScriptのための静的検証ツールで、書いたコードが正しいかどうかをチェックしてくれます。
その設定を、作りたいプロジェクトに合うように変更しました。
VueCliプロジェクトの中にある.eslintrc.jsファイルに次のソースを追加しています。

```php:.eslintrc.js
'prettier/prettier':[
      'warn',
      {
        printwidth:360,
        htmlWhitespaceSensitivity:'ignore'
      }
    ]
```

まず、「warn」でルール違反を見つけた場合警告でとどまるように設定しています。

次に「printwidth」で1行で表示する文字数を設定。

最後に「htmlWhitespaceSensitivity」でhtmlのフォーマットの指定を行います。ここではPrettierによってフォーマットが変更されず、人にとってわかりやすいフォーマットのままにできるように設定しています。
win11 otlook検索ができなくなった

最近（2022年6月～7月ごろ）outlookの検索ができなくなった。
対処のため、インデックス再構築を行ったが、どうやらインデックス再構築自体が失敗しているらしい。

↓以下の記事を実施したら、検索できるようになった。
かなり困っていたので、非常に助かった！！
https://www.itmedia.co.jp/pcuser/articles/2207/11/news157.html

ただし、
・レジストリ操作が必要なので、自己責任で注意して実施しなければならない。
・一時的な対処（Windows デスクトップ検索を無効にしてしまう）であることも覚えておく必要がある。

＞Microsoftは現在、解決策を検討中で、修正プログラムのリリース日が判明次第、サポートドキュメントを更新するとしている。
とのことなので、解決策が発表されたら上記のページを参考にWindows デスクトップ検索を有効にする必要がありそうです。

以上でござる。にんにんどろん！
100日後くらいに個人開発するぞ！day055

## 今日はファイル分割とインスタンスの配列を学んでみた！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/a82970ad-091d-d0ab-1280-68ae1ef5fba4.png)



## 今日の学び
### ファイルを分割する
* 一部のコードを別のファイルに分割して処理することができる
* 最初に`require "./ファイル名"`とすることで、ファイル名.rbのコードを読み込める

### インスタンスの配列
+ インスタンスも配列の要素にすることができる
    * 例
        * `menu1 = Menu.new(name:"パン",price:500)`
        * `menu2 = Menu.new(name:"そば",price:700)`
        * :
        * :
        * `menus = [menu1,menu2,...]`→配列の要素にする
        * `menus.each do |menu|`→each文で1つずつ表示
        * ` puts menu.info`
        * `end`
（小学生）アクセルキャンプ高学年クラス7/13  + 宿題

この記事は、岩手県八幡平市のプログラミング教室「アクセルキャンプ」の公開教材です。
[アクセルキャンプ(フリースペースプラウド)のリンク](https://freespaceproud.com)
教材の作成依頼等も承っております。ご意見等は、リンク先の問い合わせ欄からお願いします。
教材の転用・利用等は自由です。

# 算数の宿題を一瞬で終わらそう   
pythonのプログラムを使って、夏休みの算数の宿題を瞬殺して、夏休みをエンジョイしよう！夏休みの計算ドリルとかって、似たような問題が多かったりするよね？
関数の仕組みを理解すれば、そういうこともできちゃいます.

***

### ①関数の仕組み  
・関数を用意するとき
```
def 関数名(引数):
    関数の処理１
    関数の処理２
　　・・・
```
・関数を使用するとき
```
関数名()
```
①def を書くことで「ここから関数がはじまるよ」と宣言します。 
②関数名は、なんの処理をする関数なのかわかりやすい名前をつけましょう  
　例）足し算をする関数
　　◯：tashizan()  または英語でadd()  
　　☓：Ricky_senseino_ikemen_tashizan()
③引数の名前も、関数内で処理を行うときにわかりやすい名前にしましょう。　　　
  
***
では、一番かんたんな足し算関数で肩慣らししていきましょう！   

・足し算関数
引数を２つ使って、その２つの足し算の結果を返します。ここで、引数について復習しましょう。  
>引数（ひきすう）とは：関数が計算をするために必要なデータ  
足し算の場合は足す数・足される数など。  
  
足し算関数の構造はこんなかんじになります  
```
#関数を用意
def 関数名(引数１：足す数, 引数２：足される数):
    処理①：引数１と引数２を足す
    処理②：足した結果を表示（print）

#作った関数を使う
関数名(足す数のデータ. たされる数のデータ)
```
では、関数名、引数名をつけて、実行してみましょう
```python
#関数を用意
def tashizan(tasukazu, tasarerukazu):
    #処理１：引数１と引数２を足す
    kotae = tasukazu + tasarerukazu
    #処理２：足した結果を表示（print）
    print(kotae)

#作った関数を使う
関数名(3, 5)

#実行結果
#8
```
関数は複数の処理をまとめるためのものであることは、前回やりましたね！処理１と処理２を、問題を解くたびに毎回実行するのは面倒なので、tashizan()だけで実行できるように関数を作っています。

***
### ②関数を作ってみよう
では、いろんな関数を作ってみましょう  
・台形の面積を求める関数  
※台形の面積の公式：（上底＋下底）ｘ高さ÷２
```python
#関数を用意：引数はjyoutei, katei, takasa
def daikei(jyoutei, katei, takasa):
    #台形の面積を計算
    menseki = (jyoutei + katei) * takasa / 2
    #結果を出力
    print(menseki)

#関数を実行
daikei(5, 3, 2)
#実行結果:8
```
ここでひとつ、わざとエラーを出してみましょう。引数の一つ「takasa」のデータを渡さずに実行してみます。実行部分のdaikei(5,3,2)の２を入力せず、daikei(5, 3)で実行してみましょう。すると

TypeError: daikei() missing 1 required positional argument: 'takasa'

というエラーが出ます。「引数３つ用意されてるけど、もらってるデータが１つたりないよ！」といってます。引数の数とわたすデータの数が合わないとエラーになるので、実行するときにちゃんとデータを渡しているか確認しましょう。（引数の数を自由に変えられる仕組みもありますが、それはまたのちほど！）

***
### ③関数を手直ししてみよう
次のコードを見て、もっと良いコードにできないか考えてみましょう。

```python
#円の面積を求める関数 円の面積＝半径ｘ半径ｘ3.14(円周率)
def enno_menseki(hankei, ensyuuritsu):
    menseki = hankei * hankei * ensyuuritsu
    print(menseki)

#実行
ennno_menseki(5, 3.14)
#結果：78.5
```
動くには動きますが、１つ直したほうがいいところがあります！円周率って、3.14のまま変わらないよね！ということで、この関数はわざわざ3.14をensyuuritsuという引数に変えて、関数の中で使っています。必要のない引数を作ると混乱やバグのもとになるので、わかりやすいシンプルなコードに変えてあげましょう。
```python
#円の面積を求める関数 円の面積＝半径ｘ半径ｘ3.14(円周率)
def enno_menseki(hankei):
    menseki = hankei * hankei * 3.14
    print(menseki)

#実行
ennno_menseki(5)
#結果：78.5
```

# 宿題！！
①立方体の面積を求めるプログラムを作ってください
関数名；rippoutai
引数名：tate, yoko, takasa　　

②次の問題を解くための関数を作ってください  
>リッキー先生はは時速１８キロのはやさで６キロ走りました。何分で走りきったでしょう？  

時間を分に変えるところが、この問題のキモです。やってみてください！
関数名、引数名は自分で考えてみましょう！わかりやすいのにしようね！

***
プログラムはそれぞれ　[paizaのサイト](https://paiza.io/ja)　で実行しましょう。
ではまた来週!
Arch Linux で heroku-cli (AUR) をインストールする方法

## 経緯
1. 義父がいらなくなった中古PCをゆずってくれたから、とりあえずArch Linuxに換装したよ（Arch Linuxマシン３台目）
1. 上記の出来たてArchLinuxマシンで、数年ぶりにHerokuでもいじろうかと思い heroku-cli をAURからインストールしようとしたよ
1. `yay -S heroku-cli` でインストール完了
1. と思いきや、なんか heroku-cli ちゃんとインストールできてなかったよ

## 結論だけ教えて！
こうだよ

```zsh
sudo pacman -S yarn
yay -S heroku-cli
```

見ての通り、「普段JavaScript界隈の開発マシンとして利用している人」なら、お目にかかることが少ない事象だよ（yarn入れてる人多いと思うので）

## なぜ heroku-cli を入れたいだけなのに `sudo pacman -S yarn` してるの？

1. 2022年7月現在の[AURのheroku-cliパッケージ](https://aur.archlinux.org/packages/heroku-cli)は、どうやら `yay -S heroku-cli` の途中で `yarn` を使ってるみたいだよ。
2. なおかつyarnはheroku-cliのインストール中に一緒に入れてくれたりはしないみたいだよ。
3. そういうわけだから、`yay -S heroku-cli` する前に `sudo pacman -S yarn` でyarnを入れてやる必要があるよ！

## 注意
経緯にも書いたけど、事前にyarnがインストールされていない状態で、`yay -S heroku-cli` すると、一見エラーが出てないように見えるから、もしかするとちゃんとインストールできていないことに気づけないかもしれないよ。気をつけてね。

よく分からなかったら `yay -Q heroku-cli` でインストール済みパッケージとしてちゃんと表示されるか調べるといいよ。

```zsh
# インストールできていないとき
% yay -Q heroku-cli
エラー: パッケージ 'heroku-cli' は見つかりませんでした

# インストールできているとき
% yay -Q heroku-cli
heroku-cli 7.60.2-1
```

## 補足

将来状況が変わってるかもしれないから、念の為、2022年7月現在AURで公開されている heroku-cli のパッケージ情報を載せておくよ。

```text
# 現在公開されているAURの heroku-cli のパッケージ情報

Package Details: heroku-cli 7.60.2-1

Git Clone URL:	https://aur.archlinux.org/heroku-cli.git (read-only, click to copy)
Package Base:	heroku-cli
Description:	CLI to manage Heroku apps and services with forced auto-update removed
Upstream URL:	https://devcenter.heroku.com/articles/heroku-cli
Licenses:	custom, ISC
Conflicts:	heroku-cli-bin, heroku-client-standalone, heroku-toolbelt, ruby-heroku
Provides:	heroku, heroku-cli
Submitter:	Redrield
Maintainer:	sampsoncrowley
Last Packager:	sampsoncrowley
Votes:	71
Popularity:	0.075272
First Submitted:	2017-08-15 23:19 (UTC)
Last Updated:	2022-06-22 05:00 (UTC)
```

https://aur.archlinux.org/packages/heroku-cli

今回の「yarnがないと上手くインストールできないよ」っていう件は上記URL（AURのheroku-cliパッケージのページ）のコメント欄でもやりとりされてるよ。

**Arch Linux界隈はコミュニケーションが活発だから、今回みたいな「なんか上手く動かないな...」ってときはとりあえずコメント欄のやりとりみるといいよ。（たいせつ）**

コメントで情報残してくれるのとっても親切だよね。（なにか自分でも提供できる情報がある人は、積極的にコメントを残していくと後に続く人たちがとっても助かると思うよ）

## まとめ
* Arch Linux 楽しいよ
* Arch Linuxマシンは気づいたら増殖する性質があるよ（定期開催される Arch Linux Install Battle） 
* 詳しい人向けの印象があるかもしれないけど、あまりLinux詳しくない人でも見様見真似でインストールしてみるといいよ
* みんなArch Linux 使おうね

（余談：それにしてもHerokuっていつの間にか、[Salesforceのプラットフォームとして統合](https://www.salesforce.com/jp/products/platform/products/heroku/)されてたんだね。すごいね）

（数年見ないうちに色々変わったみたいで、昔Herokuにアップしたアプリが軒並み [Heroku-18 stack is now deprecated](https://devcenter.heroku.com/changelog-items/2432) になっていたよ）

## 著者プロフィール
PhpStormで git submoduleのブランチを表示する

Git submoduleを利用しているプロダクトで、
今各submoduleはどこに向き先が向いているのか確認したい時があります。

そういった時はsubmodule単位でブランチの表示をすると見通し良くなります。

# 手順１) まずsubmoduleがPhpStormで認識できているか
https://dev.classmethod.jp/articles/intellij_gitsubmodule/

こちらの記事に従って、submoduleの読み込みの設定/確認をしてください

# 手順2) Gitタブからブランチの表示をリポジトリでGroup byする

![スクリーンショット 2022-07-13 8.11.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108154/d3e438c4-1375-c936-53f1-b97d70fae1ab.png)

画像中の色分けされているのがsubmoduleです。

こうすることで
サブモジュールごとにブランチを変える操作もGUI上で操作できて便利です。

# 最後に
弊社では、一緒に働いてくれるエンジニアを募集しています。
↓最新技術や自社開発に興味のある方はこちらから↓
[Wantedly - スタジオアンビルト株式会社](https://www.wantedly.com/companies/studiounbuilt)

こんなWebサービスを作っています。
・[マドリー](https://madree.jp/)
・[Studio Unbuilt](https://www.studiounbuilt.com/)
npm run devで出てくるMissing script: "dev"のエラー解消について

ものすごく単純なミスですが、ファイルの階層が間違ってたことが原因でした。
↓今いる階層：test-test
![スクリーンショット 2022-07-13 7.58.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1646212/723d57ff-ae44-0725-e879-de2ca83f9c68.png)

　↓正しい階層：my-project
![スクリーンショット 2022-07-13 8.05.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1646212/aa0ef0ea-6e0d-be58-84e1-bdffccc93862.png)

cd my-projectで正しい階層に行ってから npm run dev を実行したら無事ローカル環境立ち上がりました。
超初心者ミスでした。。。

↓無事起動できました。
![スクリーンショット 2022-07-13 8.17.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1646212/7594417f-94e4-8650-be98-c0752d5dd4e5.png)


追記：
![スクリーンショット 2022-07-13 8.07.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1646212/93babe8b-6803-501e-2c6d-76a3850baa64.png)

package.jsonに問題があるのかと思いみてみるとnuxtが無効となってましたが、実際には問題なく起動しました。
なぜ無効となってるのかはまた調べてみます。

ひとまず動いて安心。
【C++】基礎を学ぶ⑯～クラス～

# クラス
**クラス**とは、新しいデータ型を作るための仕組み
**データ**と**機能**をまとめて定義することができる
`class`を用いて書く

## `struct`との違い
`C++`における`struct`と`class`は**1点**だけ

### デフォルトのアクセス指定子の違い
* `class`はデフォルトのアクセス指定子が`private`
* `struct`はデフォルトのアクセス指定子が`public`

### アクセス指定子
**アクセス指定子**とは、データや関数などへの**アクセス許可の範囲**のこと
メンバーを`private`とした場合、クラスの外部からは、そのクラスのそのメンバーを参照する事ができない

## クラスの構文

### クラスの宣言
```cpp
class クラス名{
  アクセス指定子:
    型1 メンバ変数名1
    型2 メンバ変数名2
    ...
    戻り値の型1 メンバ関数名1
}
```
### クラスの呼び出し
```cpp
クラス名 オブジェクト名;
オブジェクト名.メンバ変数 = メンバ変数に設定する値
オブジェクト名.メンバ関数;
```

## クラスを用いたプログラム
```cpp
#include <iostream>
using namespace std;
 
class Aisatsu {
  public:
    string japanese;
    string english;
    void speak(){
      cout << japanese << endl;
      cout << english << endl;
    }
};
 
int main() {
  Aisatsu aisatsu;
  aisatsu.japanese = "こんにちは";
  aisatsu.english = "Hello";
  aisatsu.speak();
}
```
```
こんにちは
Hello
```

## メンバ関数の定義について
**メンバ関数**の定義の仕方は2つある
1. クラスの**内部**で作る方法
1. クラスの**外部**で作る方法

関数の処理が長くなると可読性が悪くなるので、クラスの外部で定義することが多い

### 関数を外部で作成する構文
スコープ解決演算子`::`を使う
```cpp
戻り値の型 クラス名::メンバ関数名{
  // 処理
}
```
## 外部で関数を定義したプログラム
```cpp
#include <iostream>
using namespace std;
 
class Aisatsu {
  public:
    string japanese;
    string english;
    void speak();
};

void Aisatsu::speak(){
  cout << japanese << endl;
  cout << english << endl;
}

int main() {
  Aisatsu aisatsu;
  aisatsu.japanese = "こんにちは";
  aisatsu.english = "Hello";
  aisatsu.speak();
}
```
```
こんにちは
Hello
```

## 次の記事
[【C++】基礎を学ぶ⑰～カプセル化～](https://qiita.com/rapirapi/items/251ce91a387a476c2f63)
文字列/整数を日付型に変更し本日までの日数を作成する(SPSS Modeler データ加工逆引き1-6)

# 文字列/整数を日付型に変更し本日までの日数を作成（日付型）

![スクリーンショット 2022-07-08 17.30.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/8ae1ac2c-d841-c369-c7b6-b330bf492397.png)

## 1.想定される利用目的
・入会日からの日数を特徴量にする
・部品が設備に取り付けられてからの日数を求め特徴量にする

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/to_date.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2022-07-08 17.30.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d6c4b179-1196-ac64-4d81-4396e8dd971b.png)

a.入力するデータは以下の通りです。[初回]と[2回目]は文字列、[3回目]は整数型です。
![スクリーンショット 2022-07-08 17.15.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/6b7184a3-be47-90ea-9eb4-a968507e5abc.png)

b.[置換]ノードを編集します。文字列は[to_date(フィールド)]で日付型に変更します。@&#xFFF0;FIELDはワイルドカードです。同時に複数のフィールド（列）を指定できます。
![スクリーンショット 2022-07-08 17.32.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/52aef07c-03a3-a738-a965-e9a5d4b1e43e.png)

式ビルダーの変換関数を利用すると簡単に入力できます。
![スクリーンショット 2022-07-08 17.32.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/8181c53b-b07d-0731-036d-b06e0741fe9b.png)

c.[置換]ノードを編集します。整数型は一度文字列にして日付にするので２段階の処理が必要になります。
![スクリーンショット 2022-07-08 17.33.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/cacf3b0f-5213-60bb-58ec-96fab46b2b70.png)

[プレビュー]します。
![スクリーンショット 2022-07-08 17.33.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/454da08a-8f50-d764-63c0-817a6ac7999f.png)

d.[フィールド作成]ノードを編集します。[date_days_difference(日付1,日付2)]を利用し、関数@&#xFFF0;TODAYと対象フィールドの日付からの経過日を求めます。
![スクリーンショット 2022-07-08 17.34.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b6a6a3fe-bc17-2f1d-69f1-a3f58a1c0d4b.png)

[テーブル]を実行します。
![スクリーンショット 2022-07-08 17.17.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/9d5c8b0d-49f5-0ccc-8121-1bd7093cce00.png)

#### 日付型を整数に型を変更する

e.[置換]ノードを編集します。文字列への変換は関数[to_string(フィールド)]を利用します。
![スクリーンショット 2022-07-08 17.34.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/89e23b94-9ab1-d816-3968-0b429d8a35ad.png)

#### 日付型を整数に型を変更する

f.[置換]ノードを編集します。整数への変換は関数[to_string(フィールド)]を利用します。
いったん文字列にした上でハイフンを削除して（ハイフンを空文字に）から変更します。
![スクリーンショット 2022-07-08 17.34.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/bb682907-22f6-a83a-bd9c-01606dd41358.png)

#### 注意事項

日付型の表示形式はストリームのプロパティで選択できます。

![スクリーンショット 2022-07-08 17.49.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/16de4ffe-86b8-4857-6858-8f008ac91fbb.png)

## 4.参考情報

#### よく使う「日付と時間」関数

https://qiita.com/Makimaki2020/items/72e3b774039327fa4ac4

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
Python3エンジニア認定基礎模試試験5回目　-間違えた問題-

<H1>獲得点数　925/1000点</H1>
<H2>正答率: 92.5 % ( 37問 / 40問 正解 )</H2>

```python
問題文のプログラムを実行した場合の、出力結果を選びなさい。
print("出力結果:")
try:
  raise Exception("開始前","Exception発生")
  print("開始")
except IOError as msg:
  print("IOError発生:",msg.args[0])
except Exception as msg:
  print("予期せぬ問題発生:",msg.args[1])
else:
  print("Else表示")

A,出力結果:予期せぬ問題発生: Exception発生
```
:::note info
1 行目はそのまま出力されます。
次に 3 行目の raise で強制的に Exception エラーを発生させています。
そうすると 4 行目は通らず 7 行目の expect で Exception を拾い、
Exception は msg に読み替えられています。8 行目で msg が出力されています。
:::

```python
問題文のプログラムを実行した場合の、出力結果を選びなさい。
class Sample:

  c_list = []

  def add_c_list(self,data):
    self.c_list.append(data)

print("出力結果:", end=" ")
sample1 = Sample()
sample1.add_c_list("データ1") # c_list = ["データ1"]

sample2 = Sample()
sample2.add_c_list("データ2") # c_list = ["データ1","データ2"]

for item_data in sample1.c_list:
  print(item_data, end=" ")

A,出力結果: データ1 データ2
```
SES企業に勤めながらWEBエンジニアに転職するブログ ~4day

<h1>4day</h1>

おはようございます。4日目です。

昨日の深夜2時までの残業の影響により、昨日の勉強時間は確保できませんでした。
本日以降は通常通りの生活リズムに戻り、勉強時間をある程度捻出できるようになるため
リカバリに努めたいと思います。

<h2>学習進捗</h2>
１．2022年7月：基礎学習 　　HTML,CSS,ruby,コンピューターサイエンス基礎...等々
２．2022年8月～10月：ポートフォリオ作成①
　　ウェブサイト作成

３．2022年11月～1月：ポートフォリオ作成②
　　IOSアプリ開発

４．2022年2月～6月：ポートフォリオ作成③
　　webアプリケーション開発

５．2023年7月～8月：webエンジニアへの転職活動

↑現在、上記の「１」のフェーズ中です。

ウェブ制作チュートリアルは、全30章あるうちの13章まで終わらせています。
http://www.htmq.com/tutorial/

あと余談ですが、上記html,css教材でコーディングしたプログラムをgithub上で管理するようにしました。

平日は勉強時間確保のため、基本ローカル環境上で作業をしますが
休日はpullからプルリクエストまでを実践しようと考えております。
viteを削除後、なぜか削除したはずのViteでVite manifest not foundエラーが発生し、画面表示できず


viteを削除したうえでLaravel mixをダウンロードし、作成したアプリを表示させようとしたらVite manifest not foundエラーが発生してしまいました。

削除したはずのViteでエラーが発生したので、削除手順に問題なかったかを確認。

すると、
app.blade.phpとguest.blade.phpにてコメントアウトしていた、下記コードを削除してみたところ正常な挙動になりました。

↓コメントアウトしていた行を削除した。
<-- @vite([‘resources/css/app.css’, ‘resources/js/app.js’]) -->

```php:app.blade.phpとguest.blade.phpに記載していた内容
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>

        <-- @vite([‘resources/css/app.css’, ‘resources/js/app.js’]) -->
        <!-- Scripts -->
        <script src="{{ asset('js/app.js') }}" defer></script>

    </head>
```

```php:修正後
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>

        <!-- Scripts -->
        <script src="{{ asset('js/app.js') }}" defer></script>

    </head>
```

コードを修正する際、何でもかんでもコメントアウトすればいいわけじゃないことを学びました。

～追記～
記事に対して、ご教授いただいたことがあるので追記します。
今回コメントアウトした内容によってエラーが発生したのは、コメントのレベルが影響していたようです。

- `<!-- ... -->` はHTMLのコメントなので、ブラウザでは処理されず、Bladeで処理される
- `{{-- ... --}}` はBladeのコメントなので、Bladeの段階で読み飛ばされ、HTMLとしても出力されない

以上がコメントのルールですが、そもそも私の記載は`<--`なので、HTMLのコメントとしても成立していなかったみたいです。
Single Sign-On のトレイルヘッド


Set Up Single Sign-On for Your Internal Users

# We couldn't find SAML enabled in your org's setup audit trail. Make sure that you have 'SAML Enabled' checked under 'Federated Single Sign-On Using SAML' in your org's 'Single Sign-On Settings'.

+ [Why can't I enable SAML?](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000EorJ2SAJ)

:::note
What I have done to is to close my org and relaunch again, then the "Edit" option reappeared for me to disable and enable the SAML.

組織を閉じて再起動すると、[編集]オプションが再度表示され、SAMLを無効または有効にできます。
:::

+ [SSO Endpoints not configuring correctly](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000JdyzM)
この回答でも結局同じだった。

# Stuck On "Set Up Single Sign-On for Your Internal Users" - Single Sign-On Error When Attempting To Login

+ [Stuck On "Set Up Single Sign-On for Your Internal Users" - Single Sign-On Error When Attempting To Login](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000FWsB8)

:::note
Under "Issuer" in SAML Single Sign-On Settings I had it as https://axiomsso.herokuapp.com where it should have been https://axiomsso.herokuapp.com/ without a "/". Its case sensitive and it fixed everything once I put the correct character in. 

SAML シングル サインオン設定の「発行者」の下に、https://axiomsso.herokuapp.com としてありましたが、「/」なしで https://axiomsso.herokuapp.com/ にする必要がありました。大文字と小文字が区別され、正しい文字を入力するとすべてが修正されました。
:::

# 一度プレイグランドを閉じて、再度ログインすることも必要です

+ [In regards to Single Sign-On Settings Challenge](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HEGb6)

:::note
Close your org and relaunch again.
Then turn it off and then turn it on again.
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/da776d43-36ef-d4b4-43e3-5f13a520ab09.png)


# We couldn't find a SAML Configuration in your org's setup audit trail. Make sure that you have created a new 'SAML Single Sign-On Settings' record for 'Axiom Test App' in your org's 'Single Sign-On Settings'.

+ [We couldn't find a SAML Configuration in your org's setup audit trail. Make sure that you have created a new 'SAML Single Sign-On Settings' record for 'Axiom Test App' in your org's 'Single Sign-On Settings'.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007EYs38)

:::note
Please check this article. 

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A9AtBSAV
:::


# エラー？

+ [Set Up Single Sign-On for Your Internal Users Learning Objectives](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007WeWaN)

:::note
I launched new Playground and it worked !! Finally I can proceed further :)

But still after requesting SAML response on Axiomsso site it was logging in my profile rather than other user's Id (whose Federation ID was mentioned ).

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000HDqbg

I tried again, and again, and again and i found out that the problem was the My Domain. I started a new playground and didn't change the my domain and it worked

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Cfn5XSAR
:::
高解像度写真自動補正モデル 

# 高解像度画像の画質を上げたい

画像レタッチ機械学習モデルは、計算リソースの制限があるため、高解像度の画像を補正するのが従来むずかしかった。。。

# 高画質対応モデル　Image-Adaptive-LUT
画像に適応したLookUpTableを学習し、しかも高画質、高速の処理をできるモデルです。

https://github.com/HuiZeng/Image-Adaptive-3DLUT

3345*4480 の画像でも、ColabのGPUで５秒で処理できました。

***input / output***
![pexels-soulful-pizza-6941486.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/1044afd7-8444-c0c9-bbaf-773a78f17dad.jpeg) ![b4a654f2-1b43-4172-b8a8-467ac81670dc.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/97ae3a24-06b4-3e96-3dab-4a3f1222feb9.jpeg)


# 使用法

リポジトリをクローン。
必要なモジュールをインストールし、セットアップします。
少し古いバージョンのtorchなどをインストールする必要があります。
requirementsのPILとOpenCV-Pythonは最新バージョンを指定しなおします。

```shell
pip install torch==0.4.1.post2 torchvision===0.2.2 -f https://download.pytorch.org/whl/torch_stable.html
pip install -r requirements
cd trilinear_c
sh make.sh
```

実行。

```shell
python3 demo_eval.py --image_dir demo_images --image_name my_image.jpg --input_color_space sRGB
```

🐣
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習／AR関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
[GitHub](https://github.com/john-rocky)
2022/7/13主にITとかセキュリティの記事

読売新聞オンライン、アカウント2070件に不正ログインの疑い - 試行や失敗の増加も
https://www.security-next.com/138099

北朝鮮支援グループが医療機関にランサム攻撃 - 米政府が注意喚起
https://www.security-next.com/138070

「Windows 8.1」のサポート終了まで約半年 - 「同7」「WS 2008」のESUも終了へ
https://www.security-next.com/138088

IPA、「情報セキュリティ白書2022」を発売 - PDF版も同時公開予定
https://www.security-next.com/138080

ランサムウェア「LockBit2.0」の脅威とは？(7/11)
https://news.mynavi.jp/techplus/article/20220711-2396179/

イベントペイのメタップス社、経産省から改善命令(7/11)
https://cybersecurity-jp.com/news/69071

産業制御システムのセキュリティ実態調査、日本では約9割がサイバー攻撃によるシステムの中断を経験～トレンドマイクロ調査(7/11)
https://cloud.watch.impress.co.jp/docs/news/1423905.html

情報セキュリティ白書2022　7月15日発売(予定)
https://www.ipa.go.jp/security/publications/hakusyo/2022.html

偽の求人が踏み台となり6億ドルが盗まれる(7/11)
https://news.mynavi.jp/techplus/article/20220711-2396182/

マイナポータル登録できず無限ループ状態に陥る人続出「スーパーマリオ8-4より難しい」(7/10)
https://news.infoseek.co.jp/article/gadget_3310054/?tpgnr=it

Windows 7 ESU・Windows 8.1・Windows Server 2008 ESU、サポート終了に向け準備を - IPA(7/11)
https://news.mynavi.jp/techplus/article/20220711-2395028/

UNIXとは？成り立ちからコマンド体系・認定製品まで解説！(7/10)
https://and-engineer.com/articles/Yl0kARAAACIAoFvx

中国「10億人の個人情報」流出、共産党は「当局を内々で処罰する」？(7/11)
https://www.newsweekjapan.jp/stories/technology/2022/07/10-159.php

トークン発行、委託で容易に　シンガポールBOBG社(7/11)
https://www.nikkei.com/article/DGXZQOUB100J60Q2A710C2000000/

今度はAppleが「Firefox」を拒絶、サポート対象外にする動きに歯止めがかからず(7/11)
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1423870.html

Windows 11のOutlookで最近のメールが表示されない不具合　一時的な回避策も公開(7/11)
https://news.infoseek.co.jp/article/itmedia_pcuser_20220711157/?tpgnr=it

コアアップデートは年○回？ グーグルに翻弄されないために知っておきたい基本情報（前編）(7/11)
https://webtan.impress.co.jp/e/2022/07/11/43026

暗号鍵設定ガイダンス～暗号鍵の鍵長選択方法と運用方法～(7/11)
https://www.ipa.go.jp/security/vuln/ckms_setting.html

Meta、中国企業の米国子会社を提訴　情報の無断取得で(7/11)
https://www.epochtimes.jp/2022/07/110187.html

DNP、NFTでアニメ「推し活」記録　スタートアップ提携(7/11)
https://www.nikkei.com/article/DGXZQOUC110WO0R10C22A7000000/

IOST（アイオーエスティー）、注目すべきプロジェクトは？【仮想通貨相場】(7/11)
https://jp.cointelegraph.com/news/dmm-bitcoin-market-report-2022-0711

Xummウォレットは詐欺師がXRPを盗むために偽プロモーションを開始すると警告(7/11)
https://nextmoney.jp/?p=51541

米韓の捜査当局、仮想通貨犯罪で協力へ　ＵＳＴ騒動が背景か(7/11)
https://vc.morningstar.co.jp/011004.html

ガバメントクラウドを使わず独自クラウドを推進、農水省が決断したワケ(7/12)
https://xtech.nikkei.com/atcl/nxt/column/18/02121/070700002/

誤設定で2年超も公開状態だった25万人の個人情報、数千件のダウンロードも確認(7/12)
https://xtech.nikkei.com/atcl/nxt/column/18/00598/070100173/

振る舞いから異常を検知、「UEBA」で内部犯行の不正アクセスを見抜ける理由(7/12)
https://xtech.nikkei.com/atcl/nxt/column/18/02110/062200006/

プライベート5Gでデジタル医療、英Virgin Media O2が試験運用を開始(7/12)
https://xtech.nikkei.com/atcl/nxt/news/18/13276/
RxSwiftデータバインディング

# はじめに
勉強がてら、RxSwiftでのデータバインディングのサンプルアプリを製作してみました。

限りなくシンプルな実装になっているので、ぱっと見でもコードの流れがわかりやすいかと思います。

アプリの機能は、TextFieldに入力した値が、リアルタイムでLabelに反映される、ただそれだけのアプリです。

https://github.com/masatakasumida/SimpleDataBindingApp

コード全文載せておきます。

```swift: UIViewController
import UIKit
import RxSwift
import RxCocoa

class ViewModel {
    let username = BehaviorRelay<String>(value: "")
}

class ViewController: UIViewController {
    
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var textField: UITextField!
    
    let disposeBag = DisposeBag()
    var viewModel: ViewModel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupViewModel()
    }
    func setupViewModel() {
        viewModel = ViewModel()
        // MARK: ViewModelの変化をViewController(UI)に伝える
        viewModel.username
            .bind(to: label.rx.text)
            .disposed(by: disposeBag)
        
        // MARK: ViewModel(UI)の変化をViewModelに伝える
        textField.rx.text.orEmpty
            .bind(to: viewModel.username)
            .disposed(by: disposeBag)
    }
}

```
ちなみに、
```Swift
orEmpty
```
では、TextFieldのtextの型を**String?からString型**へ変換しています。
これでStringの型としてバインディング出来ている訳です。

### さいごに
非常に簡素なアプリですが、RxSwiftは覚えることが多すぎて、どうしたらいいのか解らずじまいになりがちなので、こうしてサンプルアプリを量産しながら、一つ一つ確実に理解を深めていければなと思います!!

以上です。
【VSCode】Solargraphの導入【Ruby】

## 拡張機能をインストールする
solargaphの拡張機能をVSCodeにインストールします。

https://marketplace.visualstudio.com/items?itemName=castwide.solargraph

## gemをインストールする
solargraphをグローバルインストールする場合には以下のとおりインストールします。

```:ターミナル
$ gem install solargraph

# グローバルなgemのdocumentを生成。
$ yard gems
```
`bundle exec`しないように`settings.json`に以下のように記述します。

```settings.json
"solargraph.useBundler": false
```

bundlerでinstallする場合には以下のとおりインストールします。

```:Gemfile
group :development do
  gem "solargraph"
end
```

```bash
$ bundle install

# プロジェクトにインストールしているgemのdocumentを生成
$ bundle exec yard gems
```

`bundle exec`しないように`settings.json`は以下のように記述します。

```setting.json
"solargraph.useBundler": true
```

また、`rubocop`を使用してファイル保存時にフォーマットしたい場合には以下のように記述します。
`solargraph.useBundler`はインストール方法に合わせて変更してください。

```setting.json
{ 
  "editor.defaultFormatter": "castwide.solargraph",
  "solargraph.useBundler": true, 
  "solargraph.diagnostics": true,
  "solargraph.formatting": true,
}

```

## 設定ファイルを作成

以下のコマンドを実行してsolargraphの設定ファイルを作成します。
```:ターミナル
$ solargraph config .
```
設定の詳細については以下のページをご参照ください。

https://solargraph.org/guides/configuration
Go言語でディレクトリ内のファイルを取得する方法

# はじめに
ディレクトリ内のファイル一覧を取得する方法を調べると、3つ見つかったので備忘録として残しておきます。

# 前提
確認のため、最小構成で実行しています。今回は以下のような場面での使用を想定しています。
```terminal
% tree
.
├── input
│   ├── abc.jpeg
│   ├── folder
│   │   └── in_folder.jpg
│   └── test.jpg
└── main.go
```

# 方法
### `ioutil.ReadDir`
`ReadDir`で指定したディレクトリを読み込み、ファイル名でソートし、表示されます。サブディレクトリ内のファイルは表示されません。
```main.go
package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	files, _ := ioutil.ReadDir("input")
	
	for _, f := range files {
		fmt.Println(f.Name())
	}
}
```

```
% go run main.go
abc.jpg false
folder true
test.jpg false
```

### `filepath.Walk`
指定したディレクトリ内すべてのファイルをリストしたい場合は`filepath.Walk`がおすすめ。自動的にサブディレクトリ内のファイルまで表示してくれます。


```main.go
package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func main() {
	err := filepath.Walk("input", func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		fmt.Printf("dir: %v name: %s\n", info.IsDir(), path)
		return nil
	})
	if err != nil {
		fmt.Println(err)
	}
}
```

```ターミナル
% go run main.go
dir: true name: input
dir: false name: input/abc.jpg
dir: true name: input/folder
dir: false name: input/folder/in_folder.jpg
dir: false name: input/test.jpg
```


### `os.File.Readdir`
指定されたディレクトリからディレクトリ順にファイルリストを表示してくれる。

同じファイルを続けて呼び出すとFileInfoが返ってくるらしい。(ここは未調査)

```main.go
package main

import (
	"fmt"
	"os"
)

func main() {
	f, _ := os.Open("input")
	files, _ := f.Readdir(0)

	for _, v := range files {
		fmt.Println(v.Name(), v.IsDir())
	}
}
```

```
% go run main.go
folder true
test.jpg false
abc.jpeg false
```


# さいごに
`os.File.Readdir`の挙動についてはもう少し理解しておきたいと思った。

参考
- https://golang.cafe/blog/how-to-list-files-in-a-directory-in-go.html
- https://stackoverflow.com/questions/14668850/list-directory-in-go
pod installが失敗する by M1 Mac

仕事用に用意したM1 Proにpod installしようとしたら失敗したので、解決した方法を記述しておきます。

以前以下の方法で対応できるかなと思ったんですが、解決できていませんでした。同じRosetta2は有効にしておいてください。


>・Rubyを最新バージョンに更新
>>デフォルトでインストールされているRubyは2.6.8という古いバージョンなので、更新してあげましょう。
>
>という内容を見たんですが、私の環境ではだめでした。
>
>結局TerminalをRosettaを使うというやり方で回避してます。
>
>もっとスマートなやり方あれば、そっちにしたいんですが・・・。


```
sudo gem install cocoapods
```
とやってパーミッションエラーになったら、以下を試してください。

```
sudo gem install cocoapods -n /usr/local/bin
```
すると/usr/local/binにインストールされるのでパーミッションエラーにはならなくなります。

その後、
```
arch -x86_64 sudo gem install ffi
```
としてあげれば、普通にpod installすることができる様になるはずです。
【供養】OAuth をステートレスに出来るかも！と思ったけど、出来なくない？

OAuth 2.0ではCSRF対策として認可URLにstateパラメータを指定してその値をセッション情報などに保持しておき、アクセストークンを発行するタイミングでstateの値を検証する、ということをします。

このため認可コードフローではステートレスに実装することが難しく、例えば

「アプリ内ブラウザで認可URLにアクセスし、コールバックURLへリダイレクトされるときにはデフォルトブラウザで表示」

のような挙動をするときにはエラーと判定される、ということが発生します。


この記事は **CSRF対策を行ったうえでステートレスに出来るかも！** と思ったところから冷静に考えてやっぱり駄目じゃない？と判断した経緯を記録するものです。


# 経緯

事の発端は何かの調べ物をしていた時にふと「[OAuth の state パラメータに JWT を使ってステートレスにする](https://developer.feedforce.jp/entry/2021/10/25/120000)」という記事を見つけたことでした。

内容を簡単に紹介すると

- Slackアプリを作成するためのフレームワーク「bolt」が提供するOAuthのサポートモジュールでは `ClearStateStore` というstate storeの実装が用意されている
- `ClearStateStore` は `state` にJWTを使用しており、 `state` パラメータはどこにも保存していない
- 確認した結果、CSRF対策になっていそう

という感じです。
図も文章も分かりやすく内容はスムーズに理解できたのですが、本当にCSRF対策として有効なのかが判断が付かなかったため検討を開始しました。


# 自分のユースケースでもCSRF対策になっていることを確認

結論から言うと、もしかしたらSlackアプリでは問題がCSRF対策として有効なのかもしれませんが自分が想定するユースケースではダメだと考えています。

検討の内容を前述の記事の素晴らしい図を引用しながら記録します。

まず、記事では以下の図と共に

1. 悪い人が自分のワークスペースで認可を行い、リダイレクト URL を取得する
1. リダイレクト URL をそのまま A さんに送りつけ、 A さんに踏ませる
1. `ClearStateStore` はJWTの署名を検証する
    - JWTは有効なので処理は続行される
1. JWT から options を取り出す
1.  Slack からアクセストークンを取得する
1.  Slack からは悪い人のアクセストークンが返ってきますが、Slack アプリは**それを悪い人のアクセストークンだとして（正しく）格納**する

という説明で問題ないと紹介されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314315/348e87b9-9cff-9612-c29b-aea70711baea.png)


ここで気になるのはやはり「**それを悪い人のアクセストークンだとして（正しく）格納**」の部分で、これを実現するためにはoptionsの中に 「**JWTを発行したのは悪い人**」 という情報が含まれている必要があり、OAuthする前にログイン状態である必要があります。

実際に、そういった観点で調べてみると「[ログイン中のアカウントと紐付けたOAuthのCSRF対策について](https://zenn.dev/ritou/articles/d85211a3d57787)」という記事を見つけることができ、その内容からも確かに有効そうに感じます。

これでは確かに認可コードフロー事態はステートレスなのですが事前のログインを必要としており、利用できる場面は限定的です。


# 本当にステートレスにすることは出来ないのか？

ここまででステートレスに出来ない雰囲気は感じているのですが、従来通りの検証を行う上で `state` パラメータにJWTを使用するというアイデアは良さそうに感じました。
調べてみると「[Encoding claims in the OAuth 2 state parameter using a JWT](https://datatracker.ietf.org/doc/html/draft-bradley-oauth-jwt-encoded-state-07)」という提案も存在しており、知らなかっただけで結構使われているのかもしれません。

こんな感じで、「いや実はこうやるとステートレスに出来るよ！」という情報があれば是非教えていただきたいです🙇
Chapter6　検索とスコープ（6-2）

# whereによる検索

## 複数のレコードを得る

```sample.php
$変数 = モデルクラス :: where(*フィールド名*,*値*)->get();
```

## 最初のレコードを得る

```sample.php
$変数 = モデルクラス :: where(*フィールド名*,*値*)->first();
```

＜注意店＞

上記の`where`は、ビルだクラスのインスタンスを返します。
DBクラスの`where`では、`Illuminate\Database\Query`名前空間にある
Builderクラスのインスタンスが返されました。
モデルクラスの`where`では、`Illuminate\Database\Eloquent`名前空間にある
Builderクラスのインスタンスが返されました。

## nameを検索する

```PersonController.php
<?php

namespace App\Http\Controllers;

use App\Models\Person;
use Illuminate\Http\Request;

class PersonController extends Controller
{
    public function index(Request $request)
    {
        $items = Person::all();

        return view('person.index', ['items' => $items]);
    }

    public function find(Request $request)
    {

        return view('person.find', ['input' => '']);
    }

    public function search(Request $request)
    {
        $item = Person::where('name',$request->input)->first();
        $param = ['input' => $request->input, 'item' => $item];

        return view('person.find', $param);
    }
}
```
ステージの内容を見る

# ステージの状態を表示する
## ```git ls-files```
ステージ内にあるファイルの一覧を表示する。
```
************@mbp training % git ls-files
.gitattributes
.idea/misc.xml
.idea/modules.xml
.idea/training.iml
.idea/vcs.xml
.idea/workspace.xml
.ruby-version
Gemfile
Gemfile.lock
README.md
Rakefile
app/assets/co
.
.
.
```
### 気づき
たくさんのファイルをコミットしていないことがわかる。
ステージ上にある。

## ```git ls-files -s```
-sオプションをつけると詳細な情報も表示される。
```
************@mbp training % git ls-files -s
100644 ************.gitattributes
100644 ************.idea/misc.xml
100644 ************.idea/modules.xml
100644 ************.idea/training.iml
100644 ************.idea/vcs.xml
```
**********はコミットのハッシュ値

### 気づき
コミットのハッシュ値まで表示してくれるのか。
この100644て何？
## ```git show ハッシュ```
ステージ内のファイルのハッシュ値を指定して、内容を見ることができる。
```
************@mbp training % git show *******
Rails.application.routes.draw do
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Defines the root path route ("/")
  # root "articles#index"
end
```
確認してみるとそうなっていた。

# 演習
```git ls-files -s```でハッシュを調べて、ステージにあるhello.txtの内容を表示してみよう。
```
************@mbp training % git ls-files -s
.
.
.
100644 **************  hello.txt
.
.
.
***********@mbp training % git show ******
Hello!
I am a student.
hogehoge!!
```
ステージ上がっている内容が表示されている。

出典 わかるGit 冨永和人著
git revert

## git revertについて
コミット取り消しを行う際に、気をつけること

### コマンドについて
- 取り消しのコミットを作ること
- デフォルトで自動的に取り消しコミットを作成し、コミットまで行う
　※コミットしたくない場合は、「-n」オプションを書く

### 単純なコミットの取り消し
```
git revert コミット値
```


### マージコミットの取り消し
```
git revert -m 1 コミット値
```

手順
①logの確認
```
git log
```
①マージコミットの内容確認
```
git show マージコミット値
commit マージコミット値
Merge: ①4f94f12cba2 ②f7dc3f6788d
Author: userName <メールアドレス>
Date:   Fri Dec 18 00:0:00 2020 +0000
```
③マージコミットを戻す
```
git revert -m 1 マージコミット値
```
※戻したいブランチ　→　masterにマージしたのを取り消したい場合
社内でデスクトップアプリ(GUI)を開発する手段まとめ

社内でWindowsデスクトップアプリが作りたーーーい。
しかし自由なソフトウェアやパッケージの導入ハードルが高いorできなーーーい。
そんなときの検討材料として、開発手段とメリデメをざっくり一覧するよ。


## Visual Studio (IDE)で C# を使用
### メリット
- デザインツールがありGUIが作りやすい
- デスクトップアプリ開発のデファクトスタンダード
- チュートリアルやインターネット上の知見が抜群に多い
- Microsoft製のためOffice等との連携がしやすい
- EXE化もできる
### デメリット
- 機能が多く、操作習得には時間がかかる
- 企業規模によっては無料のcommunity版が使えない
大企業でも使えるProfessional版は買い切り6万円弱、サブスクは月額45ドル
- ちょっとしたツールを作りたい、くらいの需要にはオーバーかも…

## Python ＋ Tkinter（標準ライブラリ）
### メリット
- 無料で使える
- 標準ライブラリでGUIアプリが作れるので追加インストール不要
- インターネット上の知見が多い
- サードパーティライブラリが豊富。導入できれば幅広いツールを作成できる

### デメリット
- EXE化（アプリの配布）には別途Pyinstallerなどのライブラリが必要
- あくまでTkinterは標準ライブラリのため、複雑な実装は難しい


## Electron(Node.js)を使う
### メリット
- 無料で使える
- HTML/CSS/JavaScriptで実装でき、webの知見があれば活かせる
- VSCodeなどの著名ソフトウェアの開発実績がある
- 日本語ドキュメントがある
### デメリット
- Node.jsとnpmをインストールすることが前提
- EXE化には別途ソフトウェアが必要
- 若干難易度が高そう

## Eclipse（IDE）でJavaを使用
### メリット
- 無料で使える
- Javaの開発に強い

### デメリット
- Javaに特化しており他言語を使うにはプラグイン導入が必要
- 日本語化には Pleiadesというプラグインが必要 ← これが重い
- 利用するにはJavaのSDKをインストールする必要がある

# 以下はボツ案

## React（js）
「社内で簡単なデスクトップツールを作って配布したい」くらいの用途には合わない。

## ExcelVBA
EXE化ができず、ツール起動にはExcelを絶対開く必要があるっていうのが難アリ。
あとつらいのがバージョン管理できないこと。エディタが貧弱なこと。
（Excelさえあれば利用できるので配布がしやすい点は良い）

他にもEclipseでPython使うとか、Pythonの他のGUIパッケージをpipインストールするとか、色々な方法や組み合わせがある。
社内規定・環境・用途などに合わせて検討していきましょー！


～2023.01.24追記～
当方の環境ではPythonを使うことになりました。
pipも利用許可を貰ったものの pip installでプロキシに引っかかったので
下記のような記事を参考にして突破しました。
https://qiita.com/tokkuri/items/665921e7196b2032a350
【Swift】actor

# actor
**actor**はSwift5.5から導入された、**データ競合を守るための新しい型**です。
データ競合とは複数のスレッドで同一のデータ領域にアクセスした場合に、データに不整合が生じることを言います。
マルチスレッドで別々の処理を並列で実行することは便利ですが、一つずつ実行する逐次的な処理ではないからこそデータ不整合には気をつける必要があります。
今回はactorを使いどのようにデータ競合から守るのか紹介していきます。

## actorを使用しない場合
以下のTimeクラスのupdate処理を別々のスレッドで叩いてる処理になります。
各々のスレッド処理でupdate後にベストタイムを出力してますが、出力結果としては順不同で15.3, 13.0が出力されます。
この順不同な結果が出るのはデータ競合が起きているためです。
本来なら各々のスレッドでupdateした値が出力結果になるはずです。
それではこの処理をactorを使い修正していきます。
```swift
class Time {
    var times: [Double] = []
    private(set) var bestTime: Double = 100

    func update(with time: Double) {
        times.append(time)
        if time < bestTime {
            bestTime = time
        }
    }
}

let time = Time()
DispatchQueue.global(qos: .default).async {
    time.update(with: 15.3)
    print(time.bestTime)
}
DispatchQueue.global(qos: .default).async {
    time.update(with: 13.0)
    print(time.bestTime)
}
```

# actorを使用する場合
以下がactorを使用した処理になります。
変更点としては、Timeをclassからactorで実装し直します。
次に呼び出し側の処理として、複数同時アクセスするために**Task.detached**を使用します。
後はactor内のプロパティ、メソッドにアクセスするためにawaitを付与します。
これでインスタンスに対し、複数同時アクセスを行なってもデータ競合が発生しません。

```swift
actor Time {
    var times: [Double] = []
    private(set) var bestTime: Double = 100

    func update(with time: Double) {
        times.append(time)
        if time < bestTime {
            bestTime = time
        }
    }
}

let time = Time()
Task.detached {
    await time.update(with: 15.3)
    print(await time.bestTime)
}
Task.detached {
    await time.update(with: 13.0)
    print(await time.bestTime)
}
```
# 参考
今回は以下の記事を参考に備忘録として簡略化してまとめました。
より細かく知りたい方は以下の記事をご覧ください。
https://blog.personal-factory.com/2022/01/16/explanation-of-actor-since-swift5_5/
https://qiita.com/h1d3mun3/items/f6ae63368e133e212115
Pythonで計算処理時間を計測する方法

# Pythonで計算処理時間を計測する方法
今回はプログラムの処理時間を計測する方法について解説していきます。
様々な計測方法があるのでその違いについても少し触れていこうと思います。
以下が今回のコンテンツです。

目次
1. モジュールを使わない時間計測方法
   1. %%time
   1. %%timeit
1. モジュールを使う時間計測方法
   1. time.time()
   1. time.perf_counter()
   1. time.process_time()
   1. time.monotonic()
1. 実際に処理時間を計ってみよう
1. まとめ

## モジュールを使わない場合
pythonを対話型で実行できるJupyter Notebookでは`%%time`や`%%timeit`といったマジックコマンドを使うことができます。おそらくこの方法が最も簡単に計測時間を計れる方法ではないでしょうか。以下が実行例です。

```py
%%time
-処理-
#処理時間
```
また、

```py
%%timeit
-処理-
#何回か-処理-を実行した時の平均的な時間
```

気をつけたいのは必ずプログラムの先頭に記述するということです。
勘が鋭い方は気づいたかもしれませんが先頭にしか配置できないということは部分的な処理の計測時間を計ることはできません。したがって部分的な処理の時間を計測したいなーというときは次節で紹介するモジュールを使った方法を使う方が良きです。

## モジュールを使う場合
先ほどはモジュールを使わない場合をご紹介しましたが今度は`time`モジュールをインポートして時間を計測する場合です。この方法はプログラム全体の処理時間ではなく一部の処理の時間を計測することができます。
#### `time.time()`
先ずは`time`モジュールのオーソドックスな`time.time()`です。
精度としては1/60程度だそうです。

```py
import time
start = time.time()
-処理-
end = time.time()
print(end-start)
#処理時間出力
```

### `time.perf_counter()`
次に`time.time()`より高精度で計測したい場合の方法です。
精度としてはマイクロ秒程度だそうです。
尚、Python3.3以降では`time.clock()`が廃止されてこれになったといわれています。

```py
import time
start = time.perf_counter()
-処理-
end = time.perf_counter()
print(end-start)
#処理時間出力
```

### `time.process_time()`
精度としては先ほどの`time.perf_counter()`と同程度でこちらはsleep時間を計測しない場合の処理時間の計測になります。

```py
import time
import time
start = time.process_time()
-処理-
end = time.process_time()
print(end-start)
#処理時間出力
```

### `time.monotonic()`
最後に単調増加な時刻を返すことによる計測方法です。

```py
import time
start = time.process_time()
-処理-
end = time.process_time()
print(end-start)
#処理時間出力
```

## 実際に処理時間を計ってみよう
実際に以下のフィボナッチ数列の関数を用いて処理時間を計測してみましょう。

```py
def fibonacci(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)
```

先ずはマジックコマンドを使った場合です。
今回は`n=30`のフィボナッチ数を出力する処理の計測をしていきます。

```py
%%time
fibonacci(30)
#出力
#Wall time: 271 ms
```

Wall timeの横に出てきた数字が処理に掛かった時間を表しています。
また、timeitの場合は、

```py
%%timeit
fibonacci(30)
#出力
#309 ms ± 13.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
```

色んな情報（誤差・実行回数等）が出力されますが309msという部分が計測時間になります。

次にモジュールを使った方法について一気にやちゃいます(5回の平均を出します)。

```py
import time
def cal_time(x):
    if x==0:
        return time.time()
    if x==1:
        return time.perf_counter()
    if x==2:
        return time.process_time()
    if x==3:
        return time.monotonic()
n = 5
time_list = ["time.time","time.perf_counter","time.process_time","time.monotonic"]
for j in range(4):
    t = 0
    for i in range(n):
        start = cal_time(j)
        fibonacci(30)
        end = cal_time(j)
        t+=end-start
    print(time_list[j],"：{0:.10f}".format(t/5))
```

```
#出力結果
time.time ：0.2656502724
time.perf_counter ：0.2656119600
time.process_time ：0.2718750000
time.monotonic ：0.2812000000
```

各計測方法での時間が出力されていることが分かります。

## まとめ
基本`time.perf_counter()`は精度が高くWin32 API で用意されている高分解能パフォーマンスカウンタであるQueryPerformanceCounterに匹敵すると思われます。
また、余談ですが`timeit`にも実装されているらしいので迷ったらこれを使うのが良いのではないでしょうか。
みなさんもぜひ処理を計測したい時にどれかを使ってみてください！
【Ruby on Rails】トップに戻るボタンの作成

# 目標

よくWebページで見るトップへ戻るボタン（画像右下）を作成します。

![Pagetop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730324/caaf94d0-a965-823b-b2ff-bfb22e672df9.png)

# 開発環境
Rails 6.1.4
ruby 2.6.3

# 目次
- Viewページの作成
- CSSファイルの作成
- jQueryの定義（jsファイルの作成）

## Viewページの作成

まずトップへ戻るボタンとして使用したい画像を用意します。
今回は下記の画像使用。

![arrow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730324/773d73b8-46c9-4b3e-0167-94bd61858604.png)

下記のように記述します。

```html:index.html
<!DOCTYPE html>
  <html lang="ja">
  <head>
    <meta charset="UTF-8"　/>
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>   

    <span id="back">
      <a href="#">
        <img src="img/arrow.png" alt="">
      </a>
    </span>

    <script src="js/jquery.min.js"></script>
    <script src="js/script.js"></script>
  </body>
</html>
``` 
bodyの終了タグの直前で、jquery.min.jsファイルとscript.jsファイルを読み込みます。

## CSSファイルの作成

次に、CSSファイルを作成します。

```css:style.css
@charset "UTF-8";

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

#back {
  position: fixed;
  right: 20px;
  bottom: 20px;
}

#back img {
  width: 50px;
}
``` 

ファイル保存後、ブラウザで確認をしてみます。
このまま「トップへ戻る」ボタンをクリックすると、<br>
一瞬でページ最上部へ移動してしまいます。

トップまでスーッとスクロールしてほしいですよね？
ここでjQueryの出番です。

## jQueryの定義（jsファイルの作成）

script.jsファイルに、下記のように記述します。
今回は各ファイルをjsフォルダに格納してます。

```js:js/script.js
$(function() {
  $('#back a').on('click',function(event){
    $('body, html').animate({
      scrollTop:0
    }, 800);
    event.preventDefault();
  });
});
``` 

これで再度ブラウザで確認をすると、上までスーッと移動します！
上記のアニメーション効果を設定部分（下記）のアニメーション動作時間は<br>
ミリ秒で指定する以外にも「slow」,「normal」,「fast」で指定することも可能です。

```
 $('セレクタ名').animate({
  変化対象のプロパティ名:変化値
}, アニメーションの動作時間);
``` 


お疲れ様でした！
あくまで備忘録なので足りない説明等多々あるかと思います。
行き詰まった際の助けになれば幸いです。
TensorFlow vs Keras vs PyTorch    -Overview


#  TensorFlow vs Keras vs PyTorch


||TensorFlow|Keras|PyTorch|
|:-:|:-:|:-:|:-:|
|API level| high / low | high | low |
|Speed| very fast | slower| very fast |
|Dataset| large | small | large |
|Debugging| hard | easy/less frequent | easy |
|Most commonly used| Image | | NLP / Computer Vision|
|company| google | google | facebook|


### API
- **API** : **application programming interface**
    - Low : more detailed. And allows you to have more detailed control to manipulate functions 
    - High: more simply , easier 

### Keras
- ***Keras***: *wait for tensorflow* to finish its implementation then starts its own implementation

### Dataflow
- ***Dataflow***
    - Advantage: 
        - **Parallelism**
            ->easy for the system to identify operations executed in parallel
        - **Distributed execution**
            - -> it is possible for TensorFlow to **partition** our program across multiple CPU/GPU as all tensors(variables) are immutable (can NOT update the content, and only new tensor will be created).

    - Process:
        1. Define the dataflow graph
        1. Create a TensorFlow session and Run
    

    - terms
        - node: units of computation
        - edges: data consumed/produced by a computation
        - tensor: variable e.g., x and y
        - operator: mathematical operator e.g., + and /  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1089224/a10cc537-dc5c-b535-2451-3a12d5b89db7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1089224/bb027cd4-34ca-74f5-aae7-9578d8c4ccde.png)
https://www.i2tutorials.com/how-do-you-build-computational-graph-in-tensorflow/
SwiftUIの可読性を上げるために

# 元ネタ

https://twitter.com/the_uhooi/status/1546787035524247552?s=21&t=5ZTXqmnlJiVBgquF5MY-bA

https://qiita.com/uhooi/items/7dfe7ae29adf7aea435b?utm_campaign=post_article&utm_medium=twitter&utm_source=twitter_share

# SwiftUIの課題点

SwiftUIでは、同じ見た目をあらゆる記述で表現することができます。
故に可読性はエンジニアの腕の見せ所でもあります。
ここでは、SwiftUIのコンポーネントを参考に可読性の上げ方を考えてみます。

# コンポーネントを構成する要素を考える

可読性を上げる上でヒントになるのが`Label`クラスです。

```swift
Label(title: {
  Text("name")
},icon: {
  Image("image")
})
```

このクラスは、TextとImageで構成されています。
一見すると、このLabelクラスは次のように書き換えられると思えます。

```swift
HStack {
    Text("name")
    Image("image")
}
```

しかし、このようにHStackでまとめるとHStack内の関係性が分かりにくくなります。
例えば、次のコードはImageとTextの関係性が不明瞭です。

```swift
HStack {
  Image("favorite-image")
  Image("user-image")
  Text("username")
}
```

`Label`という名前を付けることでこの組み合わせが同一の要素を示していることが明確になりました。

```swift
HStack {
  Image("favorite-image")
  Label(icon: "user-image", text: "username")
}
```

このように、SwiftUIでは要素の塊に名前を付けて一つの上位APIコンポーネントとして表現します。（アトミックデザインを想像すると分かりやすいです）
類似のコンポーネントでは、ScrollViewとGridを合わせたListやTable、Textとタップ処理を組み合わせたButtonなどがあります。
これらのAPIをなるべく利用することで、コードの可読性を上げ、またSwiftUIの標準的な挙動に沿ったアプリを作ることができます。

## 上位APIを使うメリット・デメリット

上位APIは、挙動や見た目の選択肢が絞られるという制約があります。
例えば、List内にボタンを配置した場合その大きさに関わらずタップのハイライトがセル全体にかかります。
このような挙動を回避するには、より下位のAPIやUIViewの埋め込みを利用する必要があります。
この制約を緩和するために、上位のAPIには`Style`と呼ばれる機構が用意されています。
Styleを選択することで、ある程度の見た目の選択肢を得ることができます。

```swift
Picker("Server", selection: .constant(1)) {
  Text("Production")
  Text("Development")
  Text("Local")
}.pickerStyle(.segmented) //style!
```

![CleanShot 2022-07-12 at 23.33.16@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24979/d4c5d9a5-c021-04d9-25e5-5cf0e7127f71.png)

![CleanShot 2022-07-12 at 23.33.24@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24979/b984e33d-a619-17f9-5cc3-a54c71eecd43.png)

また、一部Styleでは自作のStyleを作ることもできます。

```swift
extension LabelStyle where Self == MonsterCellLabelStyle {
    static var monster: MonsterCellLabelStyle {
        MonsterCellLabelStyle()
    }
}

struct MonsterCellLabelStyle: LabelStyle {
    func makeBody(configuration: Configuration) -> some View {
        HStack(spacing: 32) {
            configuration.icon
                .scaledToFit()
                .frame(width: 68, height: 68)
            configuration.title
                .font(.title)
        }
    }
}
```

これらを駆使することで、意味のない構造定義を減らし、より意図の伝わるコードを書くことができます。
自作の上位APIを作る際も、styleを生やせる単位で切り分けているのかを意識すると良いかもしれませんね。

# おまけ：Spacerを使う違和感の正体

より具体的な例として、次のようなSpacerの使い方になんとなく違和感を覚えることがあると思います。

```swift
HStack {
  HStack {
    Image()
    Text()
  }
  Spacer()
}
```

これは明らかにSpacerを使うために使われたHStackが認知負荷を高めているためです。
一方でほとんどの人は次のようなコードでは気にならないはずです。

```swift
HStack {
  Text()
  Spacer()
}
```

上位APIの存在は、最初のコードを次のように理解させてくれます。

```swift
HStack {
  Label()
  Spacer()
}
```

可読性が上がったことが分かるかと思います。

## 元ネタ別解
 
元ネタでは、Textの右に余白を開けるにはどうすれば良いかが議論されていましたが、自分であれば次のように書くと思います。

![CleanShot 2022-07-12 at 23.50.39@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24979/6f804f38-5f2e-7986-27d9-1c72735557ec.png)

ではでは
syslog, journalctl, docker logらへんをまとめる

## syslog

syslogとはシステムから出てくるアラートなどの情報をネットワークで転送したり、ログとしてファイル保存していく仕組み。


- 稼働しているプログラムのログを、効率的に収集し記録するデーモンプロセスがsyslog。
- ログは多くの場合、/var/logs 配下のファイルのそれぞれに残る。
- さまざまなunit(=出力元)からログを集めてくる。`$ systemctl list-units --all` でunitを確認できる。
- Rails のログをsyslogに出すためのロガーも存在する。
- 現状ではsyslogは「rsyslog」という名称のサービスに改良されています。
- 設定ファイルは「/etc/syslog.conf」もしくは「/etc/rsyslog.conf」となっている

## journalctl


systemd によって集められたログは journalctl を使用することで表示できます。
- ジャーナルは journald デーモンによって実装されている。
- systemd サービスのみならず、カーネルやその他のソースからもメッセージを取得できる。


## docker logs

> Dockerが標準で提供するログ機能は、「docker run」コマンドで起動したプロセスによる標準出力および標準エラー出力内容を、コンテナを稼動させているホストのファイルシステム上に記録するというものだ。
> 
> コンテナを実行させる「docker run」コマンドでは、「-i」オプションおよび「-d」オプションでコンソールへの出力動作を変更できるようになっている。「-i」オプションを指定した場合はコンテナ内で標準出力に出力された内容が「docker run」コマンドを実行したコンソールにそのまま出力され、「-d」オプションを指定した場合コンテナはバックグラウンドで実行されてコンソールへの出力は行われなくなるのだが、このどちらの場合も標準出力に出力された内容と同じものがDockerデーモンに送られて記録されるようになっている。


まあ要はコンテナ内のsyslogからとってきているとかではなさそう。

dockerから出されたログは、ホストマシン内でjournalctlで `sudo journalctl -u <コンテナ名>`で取ることができる。

これは、docker runするとその時のdocker logsで得られる内容と同様のものを ホストマシンのsystemctlは、そのコンテナ名のunitとして保存しているから可能なのである。



## Ref.

https://eng-entrance.com/linux-log-syslog#syslog

https://knowledge.sakura.ad.jp/6752/