OmniAICreator/Qiita-1.07M huggingface dataset:
blastengineのNode.js SDKで利用状況を取得する


blastengineは開発者にとって使いやすいメール配信サービスを提供しています。まだサービスローンチしたばかりでSDKが不足しているのですが、徐々に開発を進めています。

現在Node.js向けにSDK開発を進めていますが、blastengineの利用状況を取得するAPIに対応しましたので、その使い方を解説します。

[blastengine - npm](https://www.npmjs.com/package/blastengine)

## ユーザ登録する

blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします（ユーザIDは後で使います）。

![getting-started-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/515541ad-b74e-e1e2-ac34-46d181ee2924.jpeg)

## 送信元ドメインのSPFを設定する

送信元として利用するドメイン（自分で持っているもの）の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。

```
txt @ v=spf1 include:spf.besender.jp ~all
```

## APIキーを取得する

ログイン後、管理画面の右上にある設定メニューに移動します。

![getting-started-6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/47b2b2ac-2e41-77fe-d84f-0ae0b7541f36.jpeg)


そして設定の中で、APIキーを取得します。

![getting-started-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/2b5ca124-3020-1d39-84e4-911cd4db27e2.png)

## 必要な情報について

SDKを使う上で必要なのは、先ほどのAPIキーとユーザIDになります。

## SDKのインストール

SDKは npm コマンドでインストールできます。

```
npm i blastengine
```

## SDKのインポート

まずSDKをインポートします。 `Usage` が利用状況を取得するオブジェクトです。

```js
import { BlastEngine, Usage } from 'blastengine';
```

## 初期化

先ほどのAPIキーとユーザIDを使って初期化します。

```js
new Blastengine(YOUR_USER_ID, YOUR_API_KEY);
```

## 利用状況をまとめて取得する

複数月の利用状況を取得する際には、 `Usage.get` を使います。引数を指定しないと最新月のデータを取得します。

```ts
const usages = await Usage.get(3);
const usage = usages[0];
usage.month // -> 202208
usage.current // ->  44
usage.remaining // ->  9956
usage.update_time // ->  undefined
usage.plan_id // ->  'be-plan-10000
```

Usageクラスには次のようなプロパティがあります。

```ts
class Usage extends BEObject{
	// 該当月
	public month?: number;
	// 現在の利用量
	public current?: number;
	// 残量
	public remaining?: number;
	// 更新日時
	public update_time?: string;
	// 利用プランID
	public plan_id?: string;
}
```

## 詳細な利用状況を取得する

詳細を取得する際には、インスタンスで `get` を実行します。取得後は上記同様に各プロパティに値が入ります。

```ts
const usages = await Usage.get(3);
const usage = usages[0];
await usage.get();

// こちらでも可
const usage = new Usage({month: '202208'});
await usage.get();
```

## 最新の利用状況を取得する

`getLatest` を使えば、最新の利用状況が取得できます。

```ts
const usage = await Usage.getLatest();
```

## まとめ

このAPIを使うことで、月にどれくらいのメールを送信しているかといったレポーティングの元データが作成できます。各プランごとの残数も分かりますので、ぜひblastengineを利用する際に使ってください。

[エンジニア向けメール配信システム「ブラストエンジン」](https://blastengine.jp/)
n!と平方数「2011東京工業大学特別入学試験【1-1】」をexcelとsympyでやってみたい。

sympyでできますか？　教えて下さい。
「...となるような自然数をすべて求めよ．」。私は、有限個だと思い込んだのが間違いの始まりでした。

オリジナル
**n!がn^2の倍数となるような自然数をすべて求めよ．**

[Ⅰ-1]問題

https://mixedmoss.com/exams/toko2011/mondai.pdf

[Ⅰ-1]解答，研究
合成数(素数でない整数)＜

https://mixedmoss.com/exams/toko2011/1-1.pdf

https://mixedmoss.com/exams/toko2011/


大学入試数学問題集成＞問題はオリジナルと同じです。

https://mathexamtest.web.fc2.com/2011/201110267/2011102670300mj.html

# excelでオーバーフローしました。

n=1,n!mod n^2=0

```vb
'Const iMax = 13  'オーバーフローしました。できませんでした。
Const iMax = 12
'
Sub main()
Worksheets("Sheet1").Cells.Clear
    Dim i As Long
    j = 0
    For i = 1 To iMax
        If nの階乗(i) Mod i ^ 2 = 0 Then
           j = j + 1
           Cells(1, j) = i
        End If
    Next
    MsgBox "終了"
    
End Sub
 
Function nの階乗(n As Long) As Variant
    If n = 1 Then
        nの階乗 = 1
    Else
        nの階乗 = n * nの階乗(n - 1)
    End If

End Function
' 1	6	8	9	10	12
```

# sympyでやってみたい。
pythonに'オーバーフロー'がないはずです。

```python
from sympy import *
iMax=20
ans=[]
for i in range(iMax):
    n=i+1
    if  factorial(n) % n**2 ==0:
        ans=ans+[n]
print("#",ans)
# [1, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20]　.......(補足)
```

# 解答は、これでいいですか？

A056653		Composite numbers together with 1 but excluding 4.


http://oeis.org/A056653


# 合成数について調べてみた。
1 と素数と合成数から自然数が構成される＜

https://ja.wikipedia.org/wiki/%E5%90%88%E6%88%90%E6%95%B0

https://en.wikipedia.org/wiki/Composite_number

# 参考

https://moripro.net/vba-factorial/

何かよく似ている。

https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%83%AB%E3%82%BD%E3%83%B3%E3%81%AE%E5%AE%9A%E7%90%86

有限個って何ですか？

https://www.google.com/search?q=%E6%9C%89%E9%99%90%E5%80%8B&rlz=1C1CHBD_jaJP908JP908&oq=%E6%9C%89%E9%99%90%E5%80%8B&aqs=chrome..69i57j0i512l3.2789j0j7&sourceid=chrome&ie=UTF-8

平方数（へいほうすう、square number）,四角数（しかくすう）

https://ja.wikipedia.org/wiki/%E5%B9%B3%E6%96%B9%E6%95%B0
【クエリビルダ】MS SQLやオラクルだけがデータソースではない

あるWebサイトに一般向け情報が表形式で表示されている場合、クエリビルダでその表に対してクエリをかけることができます。
早速試してみましょう。
このようなページをみつけました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/baa66bd5-dbac-e10d-b756-08e2821d2876.png)
[Sharperlight](https://sharperlight.jp/)アプリケーションメニューから`クエリビルダ`を起動します。
製品には、`システム`を選択。
テーブルには、`Web ページのテーブル、CSV、JSON、XML またはOData`を選択。
URLリンクに、見つけたWebページのアドレスを貼り付けます。Sharperlightエンジンが、そのページを解析し、表の内容を取得します。
選択領域には、タイトルや列の見出し等が表示されます。そういったフィールドを出力領域に転送します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/cce88c74-fe01-e395-d62f-e9399a52f723.png)
プレビューで、はい！このような結果が返却されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/011b0ed3-03a1-b69a-bc2d-ad511d6fa73c.png)
このクエリをSharperlightパブリッシャーの公開クエリにコピーし、Webレポートとして表示することも可能です。また数時間おきにそのWebレポートをリフレッシュするように設定すると、最新の情報が表示されますね。
天気や株価などちょっとした情報を社内のグループで共有したい場合など、一般公開されているサイトのページからお借りすることができますね。
**著作権の問題等が発生する場合があると思われます、ご利用にあたっては十分な配慮をお願いします。**
`MS SQLやOracleのようなデータベースだけが、Sharperlightのデータソースではないですよ`という紹介でした。
batch conver mp4

```bash
for i in *.mov; do
    # [ -f "$i" ] || break
    name=$(echo "$i" | cut -f 1 -d '.')
    echo $name
    I:/script/bin/td/tools/opensource/ImageMagick-6.8.9-Q16/ffmpeg.exe  -i $i -qscale 0 mp4/$name.mp4
done
```

```batch
for %%f in (*.mov) do (
  I:/script/bin/td/tools/opensource/ImageMagick-6.8.9-Q16/ffmpeg.exe  -i %%f -qscale 0 %%~nf.mp4
)
```
using static禁止令

C#の`using`によるインポートの際に、`using static 静的クラス名;`とすると、クラスの静的メンバを読み込める。

``` C#
using static System.Math;

public static void Main()
{
    var sine = Sin(0.5 * PI); // using staticが無ければ「Math.Sin(0.5 * Math.PI)」とする必要がある
}
```

こうすると、特に長いクラス名をいちいち連呼せずに済むのでコーディングが楽になる。しかし、これは「後は野となれ山となれ」である。

## Javaの開発者は何と言っているか

静的インポートを先に実装したJavaではこんなことを言っている。

> 静的インポートはいつ使うの？　**めったに使わないでね！**　そうしないと定数のコピーを宣言したくなる場合や、継承を濫用（定数インターフェイスのアンチパターン）したくなる場合だけ使いましょう。言い換えるなら、2つ程度のクラスの静的メンバに頻繁にアクセスする必要がある場合です。静的インポートを使いすぎると、インポートした静的メンバで名前空間が汚染され、プログラムが読めなくなりメンテナンス不能に陥ります。コードを読む人（数か月後のあなたも含みます）には静的メンバがどのクラスにあるのか分かりません。クラスの**全ての**静的メンバを読み込むのは可読性を特に損ねます。メンバが1，2個だけ必要なら、別々にインポートしてください。正しく使えば、クラス名を繰り返す定型句が無くなるので、静的インポートはコードを読みやすくします。

――[Java Documentation](https://docs.oracle.com/javase/8/docs/technotes/guides/language/static-import.html)より英訳。強調は原文に則る

要するに可能な限り避けてほしいということだ。もはや筆者の言いたいことは出尽くしたように思うが、書いてないことを補足してみよう。

## コピペができない

今回は`Main`のみの極小規模なコードだったが、いろいろなクラスがあるコードを考えてほしい。作っていくうちに同じ静的メンバが必要になってくることは多い。その際に大抵の場合はコードをコピペするだろう。するとコードはエラーを返す。上の例における`Sin()`は大抵の場合コピペ先のクラスに存在しないメンバだからだ。

そこでコード上部の`using static`を見つけた。**おめでとう、複数の`using static`があって、どちらか分からないね！** それを見極めるためにはIntellisenseで当該メンバの所属クラスを探さなければならない。インポートが複数クラスにまたがっていたら面倒だ。

## C言語的発想

しかし、上記の問題はC# 10で導入された`global using static`で解決できる。これなら静的メンバの場所が分からなくても問題なさそうだし、修正ならVisual Studioの「実装に移動」を使えば問題無くできる。しかし、問題はそこではない。

そもそも、どの名前空間か分からない関数や変数というのが、C言語のグローバルメンバと同じような発想だ。オブジェクト指向言語のメソッドやフィールドはどこかに属していなければならない。C#ですべてのクラスが`Object`を引き継ぐことからも分かるだろう。これを濫用するのはオブジェクト指向がまだ身にしみついていないということであろう。

## 改善方法

### オブジェクトとして表現する

そもそも論として、オブジェクト指向ならなるべくクラス（動的なインスタンス）として表すべきだ。ポップアップメッセージならメッセージをクラスとして表現できないか模索する。これなら変数定義を巡ってあっちこっちたらいまわしにされるよりも、値のべた書きの方が意味合いが分かりやすくなる。Web系のプロジェクトならメッセージに付随させてHTMLクラス名などを盛り込んだりできる。

クラス化することで、それに付随する処理もパッケージングできるという利点がある。条件分岐が複雑になっているなら、なおさらクラス作成のモチベーションにつながる。

### 定数クラスはネ申オブジェクトである

さらに言えば、`NewsImportConstants`というのは`NewsImportManager`同様曖昧模糊で、筋の悪い名前である。クラス化ができなかったり、使いまわす必然性があり定数にするのなら**定数の種別ごとに静的クラスを切り分けるべきだ**。例えばファイル拡張子を格納したいなら`FileExtensions`というクラスにするのが自然だろう。このように意味のある名前を使うという手間を踏むことで、自分が何をしたいかが分かりやすくなるし、読者にも当然伝わるようになる。そして、本来用途の違う定数を、たまたま同じクラスに入っていたから読んでしまうという失敗もせずに済むはずだ。


### 定数クラスの名前を的確かつ簡潔なものにする

例えば、クラス名が`Supercalifragilisticexpialidocious`とか言うなら静的インポートをしたくなるだろう。しかし、そのような場合はほぼ間違いなくクラス名に問題がある。`FileExtensions`だったら書くのは苦でない。名前は分かりやすくあるべきだ。

## まとめ

C#では`using static`を使うべき理由はほとんど無いと思われる。C#にはインターフェイスに定数を定義できない（そもそもなんでJavaはインターフェイスに定数があるの？）ので、定数をコピーしたい場合しか必要無いからだ。おそらく、JavaでできることだからC#に導入しようという考えで実装された機能だろう。

`using static`を使うならグローバルユージングしかないと思うが、それにより定数クラスをひとまとめにしたくなる欲が出てくると思われる。グローバルユージングが読み出しをひとまとめにできる機能だからだ。そうすると定数クラスのネ申オブジェクト化が助長される。`using static`は百害あって一利も無い誰得機能としか言いようが無い。

この機能を使いたくなるのは大抵の場合コードから異臭がしている時だ。クラスと定数の関係を見直すいい機会ととらえて、クラスの名前を変更すべきだ。「名は体を表す」とはよく言われる言葉ではあるが、オブジェクト指向においてはまさにそうなのだ。
Reactでアナログゲームつくってみた【Slipe】

# 序
会社の事業部でReact強化しよう！みたいな話があり、アプリを作ってみました。
初学者なので、Reactいろいろ触りたいなーと思いつつ、テキトーなアプリでお茶を濁すのも…とか考えながらいろいろ入れられそうなゲームを作ってみました。

github pagesで公開中

https://monaka-13.github.io/slipe-react/

## slipe
今回はアナログゲームのslipeを作ってみました。最初はチェスを作ろうと思っていたのですが、キャスリングとかアンパッサンとかプロモーションとか無理すぎて頓挫。
そこまで壮大じゃないけど、特殊なコマ移動とチェスみたいな戦略性のあるslipeというゲームに白羽の矢が立った次第です。

ルール
https://bodoge.org/2020/01/01/slipe/

# 実装
今回reactで使った主な技術です
## コンポーネント構造
![components.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/741385/153f6424-d563-4274-eda5-02889f9baae7.png)

HTMLの塊みたいなもの(コンポーネント)を入れ子にして管理することができます。
```react:App.js
import { Header } from './Header'
import { Rule } from './Rule'
import { Presentation } from './Presentation'
import { Game } from './Game'

export const App = () {
  return(
    <>
      <Header />
      <Rule />
      <Presentation />
      <Game />
    </>
  )
}
```
## 関数コンポーネント
reactにはクラスコンポーネントと関数コンポーネントという書き方があります。
公式のチュートリアルはクラスコンポーネントを使っていますが、関数コンポーネントのほうが現代的らしいです(よく分からずに関数コンポーネントを使いました)。https://tyotto-good.com/blog/reaseons-to-use-function-component
## props
コンポーネント間のデータの受け渡しやメソッドの呼び出しを行うことができます。
```react:Oya.js
import { Ko } from './Ko'
export const Oya = () {
  function funcInOya(){  //⑤
    console.log("oya")  //⑥
  }
  return(
    <>
      Oya
      <Ko  callFunc={funcInOya}/>{/* ④ */}
    </>
  )
}
```
```react:Ko.js
export const Ko = (props) {
  function funcInKo(){  //②
    props.callFunc()  //③
    console.log("ko")  //⑦
  }
  return(
    <>
      <button onClick={() => funcInKo()}>Koボタン</button> {/* ① */}
    </>
  )
}
```
ざっくり手順はこんなかんじ
1. Koのボタンをクリックする
2. KoのfuncInKo()が発火
3. funcInKo()内のprops.callFunc()が発火
4. OyaがKoに渡した値(props)からcallFuncに当てはまるものを呼び出し
5. OyaのfuncInOyaが発火
6. console.log("Oya")
7. console.log("Ko")

## state
状態を保存してくれます。書くのめんどくさいのでぐぐってください。気が向いたら個別記事書きます。

## styledComponents
スタイルを設定して独自タグみたいに使えます。ターミナルからnpmでインストールします

まずはインスト
```
npm install styled-components
```

```react
import styled from 'styled-components';
export const StyleDiv =styled.div`
  height: 60px;
  width: 60px;
  border: 1px solid #999;
  margin: 10px;
  padding: 0;

  background: red;
  border-radius: 10%;
`;
export const Sample = (props) {
  }
  return(
    <>
      <StyleDiv />
    </>
  )
}
```
StyleDivを定義したことで、StyleDivタグをCSSのついたdiv要素として扱うことができます。
ボタンにしたいときはこうです
```
export const StyleButton =styled.button`
```

# 終
単純にメインのゲーム実装は2.5日くらいかかりましたが、それ以上に周りの機能(configとかタブとか)やリファクタ(ハードコード、コンポーネント構造・props・state整理など)に時間がかかって総時間はだいたい10日くらいです。

3/4アドインに使ったのか...(これはひどいｗ)

調べたものの実装してない技術もあるので(ReduxとかuseEffectとか)機会があればまた何か作ります。
WSAを自作アプリでざくっと調べた感想

Windows Subsystem for AndroidがWindows Insider Previewに載ったということで、ついついうっかり試してしまったので、Android屋から見た雑感をメモっておきます。(2022/8/24現在)

# 結論

ChromebookのAndroidよりもマシ。

以下、雑感。他人のアプリはほぼ使ってません。

# Android バージョン

昨年書かれた記事ではAndroid 11となっていたのですが、インストールされたのはAndroid 12でした。ホーム画面がないのに、Material Youテーマとか死なずに動く。（意味はないけど）
Androidのメジャーアップデートに追随できているので、この先のメジャーアップデートにもついて行けるかも？

# メモリ使用量

Surface Laptop Go (RAM 8GB)にインストールしたところ、起動前 4GB→Androidアプリ起動後 6GB(2GB空き)ぐらいの状態。もう少しメモリ欲しい。

# CPU利用率

Core i5 (4C8T)で、アイドル状態でも4core x 1.0～1.3GHz x 10～15%ぐらいの負荷がかかり続ける。

VMWareにインストールしたBliss OS(Android 9)でアイドル時のCPU負荷が6～9%なので、ちょっと負荷が高い印象。使ってても割と電池が減ってく。

# ADB接続

```adb connect <PCのIPv4アドレス>:58526``` で、LAN内のPCからリモート接続できる。
Android StudioのリモートADB機能(QRとかコードで繋がる奴)には未対応。

# アプリ間通信周り

結構ちゃんとしてる。

Intent -> 問題なく通る。(Chromebookでは一部Actionが置き換えられたりする)
Service -> ちゃんと動く。(別アプリのサービスをBind出来る)
Broadcast -> 通る。
Storage Access Framework -> 普通に使える。(Chromebookでは、OPEN_DOCUMENTではChromeOSのファイルマネージャが開くのに、CREATE_DOCUMENTではAndroid側で画面が出るとか、整合性がとれてなかったりする）
Document Provider -> 自作のDropbox Providerが普通に使えた。
Query Package -> ちゃんと動く。

などなど、アプリ間通信で連携しまくる自作アプリ群がちゃんと連動できました。

# ブラウザ連携周り

Dropbox SDKからブラウザにOAUTHを投げるシーンでは、Android側のアプリ内ブラウザでは認証が通らない問題が出たが、Windows側のChromeで開き直すことが可能だった。認証後、コールバック用のカスタムスキーマをAndroidアプリに返してくれる。ちゃんとしてる。

# 日本語入力周り

## WindowsのIMEを使う

AndroidのTextViewにWindowsのIMEから入力が出来る。
MS-IMEは使い込まなかったので未評価。ATOKでも動くが、使ってるうちにカーソル位置と文字が入力される場所が変わってくるなど、バギーなので実質使い物にならない。

## AndroidのIMEを使う

外部キーボード用のIMEをインストールしてみたところ、キーボード切り替え設定画面の呼出で、Windowsの関係ない設定画面を呼び出してしまうので先に進めない。

```adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings```
これで設定画面を呼び出してやると、言語の設定でAndroid内のIMEをアクティブに出来る。

このままだと、ALT+`とかのホットキーをWindows側のIMEに取られてしまうので、WindowsのIMEにENGを追加してやって、AndroidのIMEに全部のキーを渡せるようにする必要がある。
これで、AndroidのIMEを使った日本語入力が可能になる。

ただし、IMEアプリからターゲットアプリのWindowに描画が出来ないので、変換候補を出すためのポップアップが表示されない。
これはWSAの基本仕様と思われるので、AndroidIMEを使うのは諦めた方がいいかも。(Chromebookも一時期導入されたものの、似たような感じで諦めてた)


ちなみに設定アプリを出しても、ほとんど役に立つ項目は無い。

# キーボード周り

BACKキーは ALT+左矢印キーに割り当てられてる。
ESCAPEキーをBACKに割り当てたかったんで、キーボードレイアウトを入れ替えてみたけど、反映されなかった。

# ポップアップウインドウ

アプリ内で出しているポップアップウインドウが、Anchorとはかけ離れたところに描画される。

Windows IMEの候補ウインドウが、キャレットとかけ離れたところに描画される。

この辺はそのうち直ると思う。

# 原因不明

DeployGateが起動後10数秒でクラッシュしてウインドウ毎消えてしまう。仕方がないので、DeployGateからWindowsにAPKをダウンロードしてADBインストールしました。

# 技術情報がでてないこと

Microsoftはロードマップと技術情報ちゃんと出せよな。

- 今動いている環境がWSAであることをどうやって検出したらいいのか。
- 課金機能に関するエコシステムをどうするつもりなのか。
- Windowsストアでのアプリの扱いどうするのか。
- OpenGapps入れる輩をどうするのか。
- 海賊版の繁殖の地にならないようにどうするつもりなのか。

などなど。課題はいっぱいある。

# 個人的要望

二本指ジェスチャーでBACK/FORWARDをエミュレーションして欲しい。

# まとめ

PCでAndroidをやるための環境比較。（個人的な感想）

|環境|評価|
|----------|---------------|
|WSA|×電池消費が多い|
||×IME周りが不安定で実用の域に達していない|
||○レスポンス・描画性能は割といい|
|Chromebook|×IMEの選択肢がない|
||×OSの機嫌が悪いとアプリ毎吹き飛ぶ|
||○レスポンス・描画性能は割といい|
||○Google Playが使える|
|VMWare+BlissOS(Android9)|×フットプリントが大きい|
||×電池消費が多い|
||×時々プチフリする|
||○安定して動く|
|BlissOS(Android11)実機|×電池状態が読めないので安心して使えない|
||×スリープ中の電池消費がそれなりにあるので、気付いたら電池使い切ってる|
||○レスポンス・描画性能はいい|
||○安定して動く|
||○メモリが全部使える|

てな感じで、今の所、VMWareでBlissOS(Androdi9)を使うのが一番安定してる。

理想のAndroidBookを探す道のりはまだまだ遠そうである。

# 使い途（Android屋限定）

Android屋がちょっとしたGUIツールを作るのにWSAを選ぶのは、余り割に合わない気がする。（フットプリントが大きいため）
Android Studioのエミュレータの代わりにするのも、ないかな。
【Markdown】文章を折りたたむ方法

## 記述方法

Markdownでは以下のように記述することで文章を折りたためます。

```markdown :sample.md
<details>
  <summary>見出し（クリックすると以下の文章が展開される）</summary>

  折りたたまれる内容
</details>
```

## 注意事項

`<summary></summary>`の後に空行を挿入しないとスタイルが適用されません。

````markdown :sample.md
<details>
  <summary>空行なし(クリックしてください)</summary>
  ### Heading
  1. Foo
  2. Bar
     * Baz
     * Qux
      
  ### Some Code
  ```js
  function logSomething(something) {
    console.log('Something', something);
  }
  ```
</details>
````

上記のように空行を挿入しないと以下のようになります。
<details>
  <summary>空行なし(クリックしてください)</summary>
  ### Heading
  1. Foo
  2. Bar
     *Baz
     * Qux
  ### Some Code
  ```js
  function logSomething(something) {
    console.log('Something', something);
  }
  ```
</details>

````markdown :sample.md
<details>
  <summary>空行あり(クリックしてください)</summary>
  
  ### Heading
  1. Foo
  2. Bar
     * Baz
     * Qux
  
  ### Some Code
  ```js
  function logSomething(something) {
    console.log('Something', something);
  }
  ```
</details>
````

空行を挿入した場合には以下のように表示されます。
<details>
  <summary>空行あり(クリックしてください)</summary>
  
  ### Heading

  1. Foo
  2. Bar
     * Baz
     * Qux
  
  ### Some Code

  ```js
  function logSomething(something) {
    console.log('Something', something);
  }
  ```

</details>

## デフォルトで展開

`<details open>`と記述するとデフォルトで展開された状態にできます。

````markdown :sample.md
<details open>
  <summary>デフォルトで展開</summary>
  
  ### Sample
  1. Foo
  2. Bar
     * Baz
     * Qux
  
  ### Sample Code
  ```js
  function logSomething(something) {
    console.log('Something', something);
  }
  ```
</details>
````

Qiitaでは展開されなかったので画像を添付します。

![IMG_778734B79E74-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/2ed5e79a-dd5b-5660-cfc2-293fae89d99b.jpeg)
Reactでセレクトボックスを実装する方法【コピペ→書き換えるだけ】

## 序
Reactでセレクトボックスを実装する方法です。
調べて時間がかかったので、自分用も兼ねて記事にしました。

## サンプルコード(そのままコピペ)
```react:App.js
export const App = (props) => {
  const arr = ["りんご","みかん","ぶどう","いちご"]
  let txt = "みかん"
　function method(data){
    txt = data
  }
  return (
    <>
      <select
        onChange={(e) => method(e.target.value)}
        value="0">
        {arr().map((data, index) => {
          return <option value={data}>{index + 1}. {data}</option>;
          //選択肢はこんなかんじ
            // 1.りんご
            // 2.みかん
            // 3.ぶどう
            // 4.いちご
        })}
      </select>
    </>
  );
}
```
セレクトボックスによってtxt変数の値を変更するコードです。

## 少し解説(急がない人向け)
### selectタグ
```react:App.js
<select
  onChange={(e) => method(e.target.value)}> 
  value="0"  // 初期表示(selected)
```
まず普通のselectです。
onChangeはselectに変化があったら処理を実行するというものです。今回はmethod()を呼び出します。
valueは初期表示を指定することができます。optionタグを使ったときに使える「selected」です。
```react:App.js
<select>
 <option>りんご</option>
 <option selected>みかん</option>  {/* ←これ */}
 <option>ぶどう</option>
 <option>いちご</option>
</select>
```
### optionタグ
```react:App.js
{arr().map((data, index) => {
  return <option value={data}>{index+1}. {data}</option>;
})}
```
今回はmapを使ってoptionタグを繰り返すようプログラムしてみました。optionタグを量産してもよいのですが、あんまりカッコよくない＋Reactのスキルを上げたかったのでmap使ってみました。

dataとindexが繰り返しごとに違う値を持ちます。初回は[data→"りんご", index→0]、次回は[data→"みかん", index→1]という具合です。

りんごは「1.」で表示させたかったので、0からはじまるindexは+1して表示させています

arrがオブジェクトの時はこんな感じで指定します
```react
arr = [{name: "りんご", price: 100},{name: "みかん", price: 150}]
{arr().map((data, index) => {
  return <option value={data}>{index}. {data.name}:{data.price}円</option>;
  // 選択肢はこんなかんじ
    // 1.りんご:100円
    // 2.みかん:150円
})}
```
## 終
Reactで書いた時のコードですが、ここらへんの本質はJavaScriptのため、細かい記法を合わせればどのJS技術でも使えるコードになっています。

「じゃあfor文でよくね？」という声もある気がしますが、map、慣れましょう。慣れると便利です、多分。
【クエリビルダ：拡張表現】SwitchPipe文を使ってみる

今回は、データのマッピング等に使用できる**SwitchPipe**文を使用してみます。
[Sharperlight](https://sharperlight.jp/)アプリケーションメニューから`クエリビルダ`を起動します。
下図のようなフィルター設定にし、カスタムでデータセットを準備します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5459aad1-0a8d-5c0c-1b6f-ca47e92fd8f1.png)
```
"勘定科目コード::String","金額::Number",勘定科目名::String,"店名::String"
"10000", 10000, "Cash", "AUS"
"10100", 230000, "Bank Account", "AUS"
"10200", 560000, "Accounts Receivable", "AUS"
"10300", 380000, "Bills Recivable", "AUS"
"50000", 10000, "現金", "東京"
"50100", 230000, "預金", "東京"
"50200", 560000, "売掛金", "東京"
"50300", 380000, "受取手形", "東京"
```
プレビューするとこのようなデータセットが返ってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5e2c8451-592f-4a49-9530-788f5c4e91f3.png)
では、早速**SwitchPipe**文を記してみましょう。
上記データでは、Australiaと東京で同じ勘定科目を表現するコードが異なっています。また、勘定科目名も英語と日本語の違いがあります。
SwitchPipe文を使用して、その異なる部分を吸収してみます
出力領域の右クリックから**拡張表現を追加**を選択します。出力オプションダイアログが開いたら、関数一覧より**SwitchPipe**文を探し、ダブルクリックで上部エディタ領域にテンプレートを転送します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/17dabcf8-ec43-439d-c235-8008af034d34.png)
これを元に編集を行います。
1行目は、どのフィールド値を判断基準(drive Value)にするかです。ここでは勘定科目コードがその対象となります。
`drivevalueに指定した勘定科目コードに合致した場合`という記述を2行目で行います。
よって、"10000,10100,10200,10300"　Australiaの勘定科目コードおよび名称を東京に合わせたいのでこのようになります。
3行目には、合致した場合の結果値を記述します。2行目で指定した判断基準値の順番に合わせます。なので "現金,預金,売掛金,受取手形"となります。
で最後は、2行目で指定した判断基準値以外、つまり勘定科目コードが東京のコードの場合、科目名はそのまま表示ということで、勘定科目名への参照`{%勘定科目名}`となります。
```
SwitchPipe( {%勘定科目コード} ,
"10000,10100,10200,10300"
,"現金,預金,売掛金,受取手形"
,{%勘定科目名} )
```
では早速プレビューしてみます。その前にデータ型をText型にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/12fddb1b-8633-5895-dbe1-fbdfc7f574a9.png)
結果はこのようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/2e2e3199-a6a2-9edc-5a68-c3feda627315.png)
元の勘定科目名の表示は必要ないので**非表示**オプションで非表示にします。また追加した拡張表現の**説明**を`勘定科目名`とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/bb02217f-0abe-7dbe-d8b8-112e416a9f54.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c30af184-1d7f-f49c-217f-8279a14a8022.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/694f2970-d322-112d-5500-c83ea006f319.png)
再度プレビューをすると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c0e1e36f-b941-e373-2b8c-7cf7c215720f.png)
今回は簡単な紹介となりましたが、是非様々な場面で使用してみてくださいね。

では、失礼します。
npm audit fix で エラー

# エラー

```
found 1 high severity vulnerability
  run `npm audit fix` to fix them, or `npm audit` for details
```

本来なら `npm audit fix` で修正される。

# エラーが止まらない

```
# npm audit report
scss-tokenizer  <=0.4.2
//色々略

```

composer.jsonを見る限り、問題なさそうな場合

```
vim package-lock.json
```

バージョンが 0.4.2 だったので該当3箇所ほど
直接0.4.3に変更。

![名称未設定-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/bc511920-0385-f884-9818-88d174196dc1.png)

# 再インスコ

```
rm -rf node_modules/
npm install
```

# エラーチェック

npm audit

```
121 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
```

`OK`
PHPのインスタンス変数の中にオブジェクトは入ってない

# 概要

- 忘れないようにインスタンス変数の内容について簡単にまとめる。

# インスタンス変数の中にオブジェクトは入ってない

- [オブジェクトと参照](https://www.php.net/manual/ja/language.oop5.references.php)を読んでいたら下記のような内容が書いてあった。

:::note info
PHP では、オブジェクト変数の値にオブジェクト自身は含まれません。 
含まれるのはオブジェクトの ID のみで、 これを用いて実際のオブジェクトにアクセスできるようになっています。
:::

- ようはオブジェクト変数にはオブジェクトそのものは格納されていない。
- 別の領域に作られたオブジェクトのIDだけがオブジェクト変数に格納されているようだ。
PHP オブジェクトと参照を読んでみた

# 概要

- PHPのマニュアルの[オブジェクトと参照](https://www.php.net/manual/ja/language.oop5.references.php)を読んでみたので自分なりにまとめてみる。

# 今の自分の知識量

- オブジェクトは参照渡しとはちょっと違うけど似たような振る舞いをすることは知っている。

# 内容

- 「オブジェクトはデフォルトで参照渡しになります！」とよく言われるけど、厳密に言うと少し違うらしい。
- オブジェクト変数の値にオブジェクトそのものは格納されない。格納されているのはオブジェクトのIDのみ。
- PHPではオブジェクトのIDを用いてオブジェクトにアクセスできるようになっている。
- だからオブジェクト変数を他の変数に更に格納したりしてもオブジェクトのIDが他の変数に格納されるだけなのでオブジェクトIDを用いてオブジェクトを参照すると同じオブジェクトを参照する。
- なのでインスタンス変数の値を他の変数に格納してもオブジェクトID値がコピーされる。結果として同じオブジェクトを指すようになっているだけ。
- 参照渡し：参照先情報を他の変数に渡される。結果同じ値をいじれる。
- オブジェクト：インスタンス変数内のオブジェクトIDが他の変数に渡される。結果アクセスするオブジェクトが同じになる。
- オブジェクトは参照渡しとは一切関係ない！むしろ普通の変数と同じように「格納されている値のコピー」が行われている。ただ、「格納されている値」がオブジェクトIDであり、そのオブジェクトIDをコピーするので同じオブジェクトを閲覧している。

![private__Online_Whiteboard_for_Visual_Collaboration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/21bd5f30-7e57-f25f-1fa6-6b1ab566c843.png)

# 作成下オブジェクトを別ものとしてコピーしたい場合

- オブジェクトを別のオブジェクトとしてコピーしたい場合はクローンを用いる。
    - [PHP オブジェクトのクローン](https://qiita.com/miriwo/items/1ef6d6fdfa99f3d4d8a1)

# 追加情報

@error_401 様より下記のご知見を頂きました！

- PHPでは他言語で「参照」といっているものを「リファレンス」と呼んでいます。
    - `リファレンスとは同じ変数の内容を異なった名前でコールすることを意味します。ポインタとは異なります。リファレンスは実メモリアドレスでも有りません。` [リファレンスとは](https://www.php.net/manual/ja/language.references.whatare.php)
- さらに他言語で「参照渡し」といっているものを「リファレンス渡し」と呼んでいます。
    - `リファレンスにより関数に変数を渡すことが可能です。この場合関数内でその引数を修正可能になります。` [リファレンス渡し](https://www.php.net/manual/ja/language.references.pass.php)



# 参考文献

- [https://www.php.net/manual/ja/language.oop5.references.php](https://www.php.net/manual/ja/language.oop5.references.php)
ランサムウェアについて調べてみた

# ランサムウェアとは
ランサムウェアとは、身代金を意味する「Ransom」と「Software」を組み合わせた造語で、
大きな特徴は2つあります。
１つはパソコン自体をロックして使えなくすることで、
もう１つは特定の種類のファイルだけを暗号化して使用不可にすることです。
身代金にはビットコインのような仮想通貨を指定することが多く、これは仮想通貨の方が
「足がつきにくい」「送金に便利」という利点があるためのようです。

# ランサムウェアで起こる問題
* 金銭以上の資源ともなりえるデータを凍結されてしまうこと
* 金銭の要求をするうえに犯人が身元不明であること
* 支払ってもデータが返ってくる保証はないこと
* 金融機関や医療機関などの大きな組織をターゲットにすることも多く、生活インフラ凍結の引き金になること
* 支払った金銭は裏組織・闇社会の手にわたる可能性が高いこと

# 標的型ランサムウェアについて
一般的なランサムウェアは「バラマキ型」で、個人ユーザーに数万円程度の身代金を請求することが多いです。
しかし最近では特定の企業がターゲットになるパターンも増えています。
企業が相手なので、数万円だった身代金額も数千万円～数億円単位に高額化するケースもあります。

# ランサムウェアの事例
* Tesla Crypt (2015年)
2015年に感染が広がった、ビットコインによる身代金の支払いを要求する事例で、
フィッシングメールやWebサイト経由でパソコンに侵入します。
日本では、「.vvv」の拡張子で暗号化される事例が多数発生したので「vvvウイルス」とも呼ばれています。
ロサンゼルスの病院で、ウイルスに侵され、コンピュータネットワークが機能しなくなってしまいました。

* WannaCry　（2017年5月）
こちらの記事で紹介しました！
https://qiita.com/akino_13/items/cea6e89750e3c5c72340

* Oni (2017年)
Oniはフィッシングメールに添付された不正ファイルから感染します。
日本企業の事例が多く、身代金を要求する脅迫文が日本語だったことから、
日本企業を主なターゲットとしたランサムウェアだと推測されています。
長期間潜伏する特徴があり、不正ファイルを開くと遠隔操作ツールがダウンロードされ、
情報収集の為に3～9ヶ月潜伏した後、ファイルが暗号化されて身代金の要求となります。

# 対応策
* バックアップからリカバリーをする
* ネットワークと感染端末を遮断する（被害拡大を防ぐため）
LANを使用している場合は、すぐにLANケーブルを抜く。Wi-Fiを使っている場合は、
ワイヤレススイッチを切りパソコンをオフライン状態にします。
* セキュリティーベンダーが提供しているロック解除、ファイル復号ツールを利用する

# 最後に
必ずしも絶対に防げるという問題ではないので、日頃からバックアップを取ったり
対応できる方法を考えておくということが大切ですね！
Microsoft365で指定したバージョンへ変更（ロールバックなど）

# 概要

Microsoft365がアップデートによって想定外の動作になってしまったので、前のバージョンに戻したい…。

そんな時。

# やり方（バージョン決定）

まず、 **どのバージョンにするか** を決めないといけない。
その為には **どういったバージョンにできるか** の選択肢を知る必要がある。


下記の更新（バージョン）履歴のサイトへ行く。

https://docs.microsoft.com/en-us/officeupdates/update-history-microsoft365-apps-by-date

下記がバージョンの選択肢。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/105f6901-86d0-41df-befd-ef1164bc0604.png)
15427.20210にするのか、15427.20194にするのか…といったことを検討。
（実際はバージョン変更⇒動作確認を繰り返してどのバージョンにするかを決めていくことになると思う）

# バージョンについての補足

バージョンは2つの値がある。

左上。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/f32f6ba3-50b3-6e29-0444-a54cf2afc392.png)

左下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/e14dd44a-0bfd-62cb-d95a-f93b31901599.png)

『Excelのバージョン情報』の横に書いてある。
でも『Excelのバージョン情報』を押すと別の値が出てくる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/fd50c70c-0547-5b73-251c-8b7e8a88e618.png)

この記事での『バージョン』は上記画像の矢印が付いている方の値。

もし『問題が起きていないPCと同じバージョンにする』なんて時は、『Excelのバージョン情報』の横に書いてある値を控える。


# やり方（バージョン変更実行）

コマンドプロンプトを管理者として起動して下記コマンド。

```bat:15427.20194にしたい時はこう
"C:\Program Files\Common Files\microsoft shared\ClickToRun\OfficeC2RClient.exe" /update user displaylevel=True updatetoversion=16.0.15427.20194
```

```bat:15427.20210にしたい時はこう
"C:\Program Files\Common Files\microsoft shared\ClickToRun\OfficeC2RClient.exe" /update user displaylevel=True updatetoversion=16.0.15427.20210
```

実行中は下記が出る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/40ab1997-4b11-f6ef-5e5b-452a4304290a.png)

終了通知は特に無し。
PC再起動の必要は無し。

# 誤って存在しないバージョンを指定した場合

こうなる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/e25388cb-f4af-18f7-ae4f-96d6cb6da296.png)
この画面が出た時は『インターネットに接続できていない』『サーバー側の例外』という可能性もあり。

# やり方（更新停止）

『更新を無効にする』に変更する時は管理者権限を求められる。
PC再起動の必要は無し。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/762113a2-3987-6b45-05af-e84d52262cc3.png)

# 参考サイトさん

https://answers.microsoft.com/ja-jp/msoffice/forum/all/office/67665e18-c4c7-4c1c-b5d1-3ff6e6cd8334

# バージョン

Windows 10 Pro 21H2 OSビルド 19044.1889

TODO:『Excelだけバージョン下げてWordは最新版に』みたいに特定ソフトのみバージョンコントロールできるか調べる
Grafana + InfluxDBで可視化を行うのならInfluxQLよりもFluxをおすすめする理由

2022年10月に、 [InfluxDB IOx として発表され](https://www.influxdata.com/blog/influxdb-engine/)、2023年5月現在 [InfluxDB Cloud Serverless](https://www.influxdata.com/products/influxdb-cloud/serverless/) としてサービスが提供されているバージョンの InfluxDB では、SQLクエリのネイティブサポートが実装されているため、新たなクエリ言語（Flux）を覚えるりよも単純に SQL のクエリで pivot を実施すれば良くなりました。
このため、この記事の内容は今後不要になる可能性があります。

ただし、Grafana などを利用している場合に Flux が必要になる場合がまだありますので、当面の間記事は公開したままにしておきます。

## この記事の想定読者

- InfluxDB の基本概念は知っている。
- (Optional) InfluxQL を使って Grafana で可視化をしたことがある。


## はじめに &mdash; なぜFluxを使うべきか？

InfluxDB + Grafana の組み合わせは時系列データを用いた各種の可視化でポピュラーな組み合わせかと思いますが、Grafana側がどちらかというとまだ InfluxQL をデフォルトのクエリ言語として利用することを想定している（ように見える）こともあり、InfluxQL を使ってクエリを書いている人が多いのではないかと思います。

しかし、InfluxDB が現在推している新しいクエリ言語 Flux を使うほうが高度な可視化が（容易に）可能になります：

- Fluxには `pivot()` 機能があり、テーブルの行列の入れ替えが可能。これにより InfluxQL ではできなかった種類の可視化が可能になる。
- `pivot()` を活用すると、InfluxDBの _tag_ と _field_ をほぼ等価に使える。例えば _field_ を使って `group()` 関数でグループ化するような処理が可能。
- Fluxではクエリの結果として得られる _Stream of Tables_ を変数として保存し、再利用することが容易にできる。

## GrafanaでFluxクエリを使うための最初の一歩 &mdash; _Field_ をテーブルの列（column）に変換する

Fluxでクエリをかけると最初すべての _Field_ が別々の行（row）として出力されるので面食らうと思います。
各 _Field_ を _Table_ の列に変換する場合は `pivot()` 関数を使って以下のような感じでクエリを書きます。

```
from(bucket: "${bucket}")
|> range(start: v.timeRangeStart, stop:v.timeRangeStop)
|> filter(fn: (r) =>
  r._measurement == "${measurement}"
)
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> group()
```

要するにタイムスタンプが同じ Field のレコード（行として表現される）をまとめて列に変換します。
捕捉：この例では、Bucketの名前と、Measurementの名前はGrafanaの変数として保存されていると想定しています。

ここまでは、InfluxQL のほうが Flux よりも簡単ですので、シンプルなクエリを行うだけなら InfluxQL を使うほうが良いかもしれません。

## 動作確認をした環境

2022-08-25時点の以下の環境
- InfluxDB Cloud v2.0
- Grafana Cloud v9.1.0-76166 (7002c1100)
テンプレートを使う場合と使わない場合のメンバ関数の関数ポインタ

よく忘れるので、メモ

```cpp
#include <iostream>

//普通の関数ポインタを使う場合
template<class CLS,class... ARGS>
void call1(void(CLS::*func)(ARGS...),CLS* cls,ARGS... args){
    (cls->*func)(args...);
}

//テンプレートを使う場合
template<class FUNC,class CLS,class... ARGS>
void call2(FUNC func,CLS* cls,ARGS... args){
    (cls->*func)(args...);
}


class TEST{
    public:
        void test_func(int a,int b){
            std::cout<<"test func "<<a<<" "<<b<<std::endl;
        }
};


int main(){
    TEST t;
    call1(&TEST::test_func,&t,1,2);
    call2(&TEST::test_func,&t,3,4);

    return 0;
}
```
cscの作法 その270

# 概要
cscの作法、調べてみた。
unvell.ReoGrid.dll使って、みた。
練習問題やってみた。

# 練習問題
reogridに、csvを読み込め、そしてセーブせよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/5b99d44f-c8e5-76d6-f8f1-562017e9692d.png)

# サンプルコード

```
using System;
using System.Windows.Forms;
using System.Drawing;
using unvell.ReoGrid;

class form1: Form {
	ReoGridControl grid;
	form1() {
		Text = "ReoGrid";
		ClientSize = new Size(800, 500);
		grid = new ReoGridControl() {
			Dock = DockStyle.Fill,
		};
		this.Controls.Add(grid);
		CreateMenu();
		grid.Load("test3.csv");
	}
	void CreateMenu() {
		ToolStripMenuItem menuItemGenerate = new ToolStripMenuItem("save");
		menuItemGenerate.Click += MenuItemGenerate_Click;
		MenuStrip menuStrip = new MenuStrip();
		this.Controls.Add(menuStrip);
		menuStrip.Items.Add(menuItemGenerate);
	}
	private void MenuItemGenerate_Click(object sender, EventArgs e) {
		var worksheet = grid.CurrentWorksheet;
		worksheet.Save("test3.csv");
		MessageBox.Show("ok");
	}
	[STAThread]
	public static void Main() {
		Application.Run(new form1());
	}
}


```

以上。
cscの作法 その269

# 概要
cscの作法、調べてみた。
「Chaplus API」使って、みた。
練習問題やってみた。

# 練習問題
人工無脳を実装せよ。

# サンプルコード

```
using System.Collections;
using System.IO;
using System;
using System.Text;
using LitJson;
using System.Net;

namespace app
{
	class test0 {
		static void Main() {
			ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
			do
			{
				string str = Console.ReadLine();
				if (str == null)
				{
					break;
				}
				WebClient wc = new WebClient();
				string json = "{\"utterance\": \"" + str + "\",\"username\": \"太郎\", \"addition\": {\"utterancePairs\": [{\"utterance\": \"\"}],\"ngWords\": [\"NGワード\"],\"options\": [\"\"]},\"agentState\": {\"agentName\": \"エージェント\",\"age\":\"10歳\",\"tone\": \"normal\"}}";
				wc.Encoding = System.Text.Encoding.UTF8;
				wc.Headers[HttpRequestHeader.ContentType] = "application/json";
				string response = wc.UploadString("https://www.chaplus.jp/v1/chat?apikey=*****", "POST", json);
				LitJson.JsonData data = LitJson.JsonMapper.ToObject(response);
				Console.WriteLine(data["bestResponse"]["utterance"]);
			} while (true);
		}
	}
}


```

# 実行結果

```
>chat2
お掃除します
片付いていない部屋にいると、心が落ち着かない気がしますよね。
今日は晴れ
愛に出来ることはまだあるかい
明日は
晴れますように
貴方は
どうかお気持ちをお鎮めください。私の非力さゆえにご。
私は
・・・・・・・・・・・・・・・・・・・・・・・
私は誰
太郎です。
ここはどこ
癒しの世界
いつ
: 時は金なり

```

以上。
pymolのpythonスクリプトで複数の構造を同じ方向からまとめて出力するときのpythonスクリプトの例

Pymolはタンパク質の構造を解析するためのソフトウェアである。

https://pymol.org/2/

複数のタンパク質の構造を比較する場合、同じ角度からの画像を出力する必要がある。
比較対象が多いと操作が煩雑になるが、本方法でまとめてpng画像を出力することができる。
pymol上でpythonを動かすことでまとめて画像を出力する方法である。
以下のサイトを参考に記述した。

https://pymolwiki.org/index.php/Python_Integration
https://www.blopig.com/blog/2020/11/using-python-in-pymol/
https://github.com/schrodinger/pymol-open-source
https://pymol.org/pymol-command-ref.html

以下のコードをテキストエディタなどに貼り付け、「XXXX.py」 (XXXXは任意の文字列)と名前をつけ保存する。

```
#make overall view pymol 実行はspawnで行う。runだと画像が適切に出力しない。
import pymol

#保存先のフォルダを指定する
f_path = '/folder_name/'
#objectの名前のリストを獲得する。
g_obj_l = pymol.cmd.get_object_list('(all)') 

#全てのobjectを一度隠す
pymol.cmd.disable('(all)') 

#pngファイルを連続して出力する。
for i in g_obj_l:
   pymol.cmd.enable(i)
   pymol.cmd.png(f_path + i + '.png')
   #print(i)
   pymol.cmd.disable(i)
```

pymolのターミナルに以下のコマンドを入力し実行する。
runでもpythonは実行されるが、spawnで実行しないと適切に画像が出力されないので、注意が必要である。
```
spawn /file_path/XXXX.py
```
過去の自分のコードを修正してみる - PHP カレンダー編③

# 前回までのまとめ
これを

```php

<?php
if ($t == 0) {
  print "<table border='0' width='100%' align='center' class='calender_gyou'>\n<tr>\n<td>\n<div style='float:left;margin-right:20px;margin-bottom:8px;'>";
  $t++;
} elseif (($t == 1) or ($t == 2)) {
  print "<div style='float:left;margin-right:20px;margin-bottom:8px;'>";
  $t++;
} else {
  print "<div style='float:left;margin-right:20px;margin-bottom:8px;'>";
  $t = 0; //次の段へ
}

```

こうした

```php

if ($t === 0) :
?>
  <table class="calender_gyou first-table">
    <tr>
      <td>
<?php
endif;
?>
  <div class="<?php echo $t === 0 ? 'div-of-first-table' : 'div-of-month' ?>">
<?php
// 段の最後まで印字したら$tを0に戻して次の段にする…んだけど、
// 三項演算子で書いてみたら思ったより伝わらなさそうだったので普通にif文にする
// $t = $t > 2 ?  0 : $t++;
if ($t > 2) {
  $t = 0;
} else {
  $t++;
}
?>

```

```css

.first-table {
  border-style:  none;
  width:         100%;
  text-align:    center; 
}
.div-of-first-table {
   float:        left;
   margin-right: 20px;
   margin-bottom:8px;
}
.div-of-month {
   float:        right;
   margin-right: 20px;
   margin-bottom:8px;
}

```

# 観測範囲を上に伸ばす

```php

// テーブルの数を数えるための変数(改行処理に使う)
$t = 0;
?>
<div class="calender_div">
<?php
//月に１を足しながら12月まで繰り返し
for ($gatsu = 1; $gatsu < 13; $gatsu++) {
  // "日"は 1 から始める
  $hi = 1;
  // $gatsu 月１日の曜日を算出する
  $you = date("w", mktime(0, 0, 0, $gatsu, $hi, $nen));

```

……んー
曜日の求め方が気に入らない
というかDateTimeImmutableを知ってから、基本それしか使ってないからな…
あと見てわかるコメント多くない？当時は分からなかったから残してたのかな…

# 今の趣味に合わせて書き換える

```php

// 4×3段で組みたいので今いくつか数える
$t = 0;
?>
<div class="calender_div">
<?php
for ($gatsu = 1; $gatsu < 13; $gatsu++) {
  $hi = 1;
  // カレンダーを何曜日から印字させるか求めたい
  // あ、今更ですが$nenはもっと上で定義してます
  $you = (new DateTimeImmutable("${nen}-${gatsu}-${hi}"))->format('w');

  // ここから前回までに修正したコード(cssは変わってないので省略)
  if ($t === 0) :
  ?>
    <table class="calender_gyou first-table">
      <tr>
        <td>
  <?php
  endif;
  ?>
  <div class="<?php echo $t === 0 ? 'div-of-first-table' : 'div-of-month' ?>">
  <?php
  // 段の最後まで印字したら$tを0に戻して次の段にする…んだけど、
  // 三項演算子で書いてみたら思ったより伝わらなさそうだったので普通にif文にする
  // $t = $t > 2 ?  0 : $t++;
  if ($t > 2) {
    $t = 0;
  } else {
    $t++;
  }

```

…あれ
これ変数tってなんとかならん？
gatsuから計算すればいいじゃん。tにインクリメントしたり初期化したりしなくていい気がする

# tを計算で求めてみる

```php

<div class="calender_div">
<?php
date_default_timezone_set('Asia/Tokyo');
for ($gatsu = 1; $gatsu < 13; $gatsu++) {
  // 今列のなかで何番目か。0ならその列の最後の月。[1, 2, 3, 0]になってく感じ
  // ここ見やすさ重視で値調整したほうがいいのかなぁ
  $t = $gatsu % 4;
  $hi = 1;
  // カレンダーを何曜日から印字させるか求めたい
  // あ、今更ですが$nenはもっと上で定義してます
  $you = (new DateTimeImmutable("${nen}-${gatsu}-${hi}"))->format('w');

  // $tの値が連動して変わるためその辺は修正
  if ($t === 1) :
  ?>
    <table class="calender_gyou first-table">
      <tr>
        <td>
  <?php
  endif;
  ?>
  <div class="<?php echo $t === 1 ? 'div-of-first-table' : 'div-of-month' ?>">

```

動かしてないけどこういうことだと思うんだ。
余力があるときにきちんと動かして修正かけるかもしれません。
Caseを複製するトリガー

回答を得たら即消している。

まぁ、おかげでただでさえ嫌いな外国語が不信感が芽生えたので余計に嫌いになります。英語嫌いがどんどん進みますね。

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

消されちゃったけどコードは残っているので、ここに記録しておきます。
テストクラスまで準備したんだけどなぁ。　こいつの質問位は二度と答えないです。

```
trigger CaseTrigger on Case (After insert,After update) {
    
    List<Case> insertCaseList = new List<Case>();
    
    if (Trigger.isInsert || Trigger.isUpdate) {
        for (Case c : Trigger.new){

          if ( c.Status =='Closed' && c.Accept_Solution__c) {

              Case ca = new Case();
              ca.subject = c.subject;
              insertCaseList.add(ca);
          }
            
        }
    }
    
    system.debug(Logginglevel.INFO,'-- insertCaseList.size()  ' + insertCaseList.size() );    
    if ( insertCaseList.size() > 0) insert insertCaseList;    

}
```

```
@isTest
public class CaseTrigger_test {
    
    @isTest
    public static void test01() {
        
        Test.startTest();
        
        Case ca = new Case();
        ca.subject ='test';
        ca.Status ='Closed';
        ca.Accept_Solution__c = true;
        insert ca;
        
        //System.assertEquals(ContactList[0].OwnerId, u.Id);
        
        Test.stopTest();
        
    }    
    
}
```
命名規則の名称と実例をまとめてみた

# 初めに
今回は、Android実装で使う命名規則の名称と実際の形を合わせて紹介していこうと思います。
### 本文
基本的には下記の4種類のみとなります。
* ローワーキャメルケース
* アッパーキャメルケース
* ローワースネークケース
* アッパースネークケース

***ローワーキャメルケース***は`forExample`と記述します。
先頭の頭文字を小文字にして、そのあとに来る要素語の頭文字を大文字にしていく命名規則になります。
関数名や変数名などに多く使われています。

---
***アッパーキャメルケース***は`ForExample`と記述します。
こちらは***ローワーキャメルケース***の先頭の頭文字も大文字にした場合の書き方です。
こちらはクラス名に多く使われており大きな括りであることが多いです。

---
***ローワースネークケース***は`for_example`と記述します。
全て小文字で記述し、アンダーバーでつないでいく命名規則になります。
xmlファイルや要素名に使われることが多いです。

---
***アッパースネークケース***は`FOR_EXAMPLE`と記述します。
こちらは***ローワースネークケース***の先頭の頭文字も大文字にした場合の書き方です。
こちらは定数名に多く使われています。

### 最後に
今回は、Androidで使う命名規則を紹介していきました。
最初のうちは使用例もわからなければ、どれが何を指すのかがわからなかったので新人さんのために残しておこうと思います。
Xcodeでプリプロセッサによるソースコードの切り替え方法を行う方法。


## Configurationを作成する。


今回はDebugをコピーします。

![OtherViews_と_Sample_—_Sample_xcodeproj.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99731/677d51e0-5319-a46b-f20d-af1ccb47e95c.png)

![Sample_—_Sample_xcodeproj.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99731/e0202196-0921-2aa4-f625-c5c2a9d0bce8.png)

## スキームを作成する。

先ほど作ったConfigurationを使うためにスキームを追加します。

![Sample_—_Sample_xcodeproj_と_メモ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99731/5d99ac22-d0b2-51f6-782e-0ea3520a37fc.png)


![OtherViews_と_Sample_—_Sample_xcodeproj.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99731/ad5ef175-8e0b-dfe7-ef3e-ec0e28d9b3dd.png)


![スクリーンショット_2022_08_25_9_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99731/561f456e-0633-7736-89c5-c1cd886b9eef.png)


![Menubar_と_Sample_—_Sample_xcodeproj_と_作業の開始_—_SchemeSwitch_xcodeproj.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99731/ccd82e31-2e75-9770-f476-4e6a1e9068d9.png)

## TARGETS のBuild Settingから、Active Compilation Conditionsを設定する

![Sample_—_Sample_xcodeproj.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99731/c8dd34db-988e-d5e7-24dd-050713d0af5a.png)

![Sample_—_Sample_xcodeproj.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99731/c74823f5-6c7c-60ce-28cd-d021f1338c04.png)


## スキームを切り替えて確認


```swift

struct ContentView: View {
    var body: some View {
        Text("Hello, world!")
            .padding()
            .onAppear {
                #if STUB_SERVER
                    print("STUB_SERVER")
                #endif

                #if STUB_BLE
                    print("STUB_BLE")
                #endif
            }
    }
}


```
Linux for,while,if,case,testコマンドについて（自分用メモ

●シェルスクリプトにおいて繰り返し処理を行うにはfor文やwhile文などを使う。

■for

for 変数名　in 値のリスト
do
　実行分
done

for文は、指定された「値のリスト」を「変数名」に1つずつ格納していき、その度にdo ～ doneの間の「実行文」を処理


■while

while 条件分
do
　実行分
done

while文は、条件文に記述されたコマンドの終了ステータスを使用し、繰り返し処理を継続するか終了するかを判定する。条件文が真（0）の場合に繰り返し処理を継続し、条件文が偽（0以外）の時点で繰り返し処理を終了


シェルスクリプトにおいて、処理の内容によって動作を変える（条件分岐）にはif文やcase文などを使用。

●if

if 条件分
then
　実行分１
else
　実行分２
fi

※実行文2を記述しない場合は「else」を省略できる。


●case

case 値　in
　パターン１）実行文　;;
　パターン２）実行文　;;
　・・・・・
esac

値とパターンを照合し、パターンに一致するとそのパターンに指定されている実行文を処理。
パターンは任意の数の指定が可能。上から順番に値との照合を行い、一番最初に一致したパターンに対応する処理を実行し、case文を終了。一致するパターンが無い場合は、処理は実行されない


●testコマンド
条件式の真偽を判断し、その結果を終了ステータスとして返す（真は0、偽は1）。testコマンドは標準出力に何も表示しないため、while文やif文（条件分岐）などを使用する際に便利。

test 条件式
または
[ 条件式 ]　※「[」の後ろと「]」の前にはスペースが必要

▲ファイルに関する主な条件式

・-d パス　指定したパスが存在し、ディレクトリであれば真
・-e パス　指定したパスが存在すれば真
・-f パス　指定したパスが存在し、ファイルであれば真
・-r パス　指定したパスが存在し、読み込み可能であれば真
・-w パス　指定したパスが存在し、書き込み可能であれば真
・-x パス　指定したパスが存在し、実行可能であれば真

▲数値の比較に関する主な条件式

・数値1 -eq 数値2 数値1と数値2が等しければ真
・数値1 -ge 数値2 数値1が数値2以上であれば真
・数値1 -gt 数値2 数値1が数値2より大きければ真
・数値1 -le 数値2 数値1が数値2以下であれば真
・数値1 -lt 数値2 数値1が数値2未満であれば真
・数値1 -ne 数値2 数値1と数値2が等しくなければ真

▲ファイルの比較に関する主な条件式

・ファイル1 -nt ファイル2 ファイル1の更新日付がファイル2より新しければ真
・ファイル1 -ot ファイル2 ファイル1の更新日付がファイル2より古ければ真


▲以下の条件式はtestコマンドのオプションで結合できる

・!条件　条件が偽であれば真
・条件1 -a 条件2 条件1と条件2の両方が真であれば真(andと同じ意味)
・条件1 -o 条件2 条件1と条件2のどちらかが真であれば真(orと同じ意味)
【Rails】DBの一意性について【備忘録】

本記事はRailsチュートリアル6.2.5の備忘録です。
URL：https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-uniqueness_validation

内容としては、ユーザ(Userクラス)のメールアドレス(email)を一意なものとして定義し、そのテストをしていくというものです。
アプリ側(モデル)とDB側の両方で、一意性を設定することができますが、結論から言うとどちらも設定する方が良いようです。

それでは詳細に説明していきます。

アプリ側では、以下のように一意性を持たせることができます。
```ruby:アプリ側
class User < ApplicationRecord
  …
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: /正規表現/ },
                    uniqueness: true #####追記#####
end
```

ただ「**Active Recordはデータベースのレベルでは一意性を保証していない**(Railsチュートリアルより引用)」とのことです。

例えば、山田太郎さんがユーザ登録する際、登録ボタンを誤って二回連続で押してしまったとします。（手が震えてカチカチってなることたまーにありますよね）

このケースだと、DB内で同じメールアドレスが重複して登録されてしまいます。
そのため、DB側にも一意性を持たせて万全に備えようというわけです。

DB側にはインデックスを追加することで一意性を持たせます。
まずはマイグレーション作成
```
$ rails generate migration (任意の名前)
```

上記のマイグレーションを編集
```
class (クラス名) < ActiveRecord::Migration[5.0]
  ###ここから追記###
  def change
    add_index :users, :email, unique: true
  end
  ###ここまで###
end
```

最後にマイグレートして上記の変更を反映させます。
```
$ rails db:migrate
```
2つの日付の間に残っている月数を計算します

[Answersで回答する時に使う情報のまとめに戻る](https://qiita.com/Keiji_otsubo/items/9e6e0e946826133eddc7)

# 2つの日付の間に残っている月数を計算します

```
(MONTH(Custom_End_Date__c) + (12*(YEAR(Custom_End_Date__c)-YEAR(TODAY()))) - MONTH(TODAY())
```

[Calculate the number of month left between two dates](https://developer.salesforce.com/forums/?id=906F0000000BRXQIA4)


# 変形バージョン、年と月を表示したい。

上記月バージョンを使って楽をします。

YEAR :

 ```
FLOOR( (MONTH(ales_Start_Date__c) + (12*(YEAR(ales_Start_Date__c)-YEAR(TODAY()))) - MONTH(TODAY())/12)
 ```

MONTH:

```
MOD( (MONTH(ales_Start_Date__c) + (12*(YEAR(ales_Start_Date__c)-YEAR(TODAY()))) - MONTH(TODAY()),12)
```

[Formula to help count months](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000J7i0pSAB)
【Laravel livewire】複合主キーのモデルで実装すると死ぬ

## 概要

前提条件
- Hogeモデルは複合主キーで実装されている

```php
public Hoge $hoge;

public function mount()
{
    $this->hoge = Hoge:first();
}
```

livewireのコンポーネント内で複合主キーで作られたモデルを取得すると死ぬ。

``array_key_exists(): Argument #1 ($key) must be a valid array offset type (View:``


https://laracasts.com/discuss/channels/livewire/livewire-with-composite-keys

よくわからないがどっかのタイミングで単一の主キーを探してるみたい。誰か詳しく教えてください。

## 回避方法（やめた方がいい気がする）

```php
public $hoge;

public function mount()
{
    $this->hoge = Hoge:first()->toArray();
}
```

型の宣言をやめて只の配列として取得すれば回避出来るっちゃ出来るが、複合種キーじゃ無いとダメ！とかではないなら一意のid持とう

## 理想

複合主キー辞めてサロゲートキーで実装しよう。
僕はそうしようと思う。
Ubuntu20.04、日本語入力を設定しました。

# はじめに

日本語入力を設定しました。

# 最終更新日

2022年8月25日

# 環境の情報

OS
Ubuntu20.04

# 注意

最新の状態を確認して下さい。

# 参考さまはこちら

https://wiki.debian.org/JapaneseEnvironment/Mozc

https://wiki.archlinux.jp/index.php/IBus

# 状況

逝かれたので、OSをインストールし直したところ、言語を切り替えるところが、何も無い。
キーボードで日本語が入力出来ない。
何も話せない、何も語れない٩( ᐛ )و


# 行ったこと

左上から、設定を開く。
![153D305A-4A50-43C5-A0A2-12B3175F0941.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/3a4ddf52-bbf1-70a2-d982-359632d52224.png)

![3F285CA7-1F64-440C-9F52-0A0F8D85A333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/afc77889-40c5-5d15-ca38-473bd23e0599.png)

↓

左上から、ランゲージを開く。
Mozcがあるか、確認する。

![A98FBDAA-7AE6-43A6-A758-DAC3A6562CE1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/145e7279-a41c-1c8b-4588-c9233929132b.png)

↓

無ければコマンドで以下を入力する。

```
$ sudo apt install ibus-mozc
[sudo] password for user: 
$ ibus restart
$ gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'jp'), ('ibus', 'mozc-jp')]"
```
↓

jaが出るようになればOK。
![B815428C-133E-48F5-B53F-F64598A97C57.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/30007af9-9a75-8879-a908-526982142d65.jpeg)

↓

設定で確認。
Mozcがあるか、確認する。
OK🙆‍♀️
![F8BDF53B-9EE1-4923-908C-0A5473D123D3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/00ee172d-f25f-17ba-dd70-01221cffee10.png)



# 用語など

## Mozc

もずく。
（海藻じゃ〜ないよ。）（うるさい。）
日本語の入力システム。
Googleが作った。
Mozcじゃないとちゃん、日本語入力ちゃんと出ないっぽい。他は、ぱちもんみたいになる。


## IBus 

Intelligent Input Bus
色んな言語の文字を入力するためのシステム。
Amazon Sagemaker Studio Labを試してみる

# はじめに
[Amazon Sagemaker Studio Lab][link-2]はAWSが提供している**無料**の機械学習開発環境です。
そもそも[Amazon SageMaker][link-1]とは、機械学習で必要となるプロセス(データ準備・モデル構築・トレーニング・デプロイ等)をフルマネージド型で提供するサービス群のことであり、Amazon SageMaker Studio Lab はそんなAmazon SageMaker内のサービスの一つです。

マネジメントコンソール上からは以下のリンクから飛べます。
![image01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/dd50f524-7c73-6ce3-deaf-eef42c77481f.png)

本サービスは**勉強・研究目的のみ利用可能**となっています。本番環境での利用はできません。また、アカウントを他人と共有したり、仮想通貨マイニングを行うなどの利用はできません。

# 利用するメリット
私が思う利点は以下の通りです。
- **無料**である。
    - 勉強目的でクラウドサービスを利用する場合、最大の観点となるのが料金だと思います。
- メールアドレスがあれば使える。
- インタフェースが直感的でわかりやすい。
- CPUとGPUを選択できる。
    - 1セッション当たりそれぞれCPU：12時間,GPU：4時間の制限があります。
    - この記事の執筆時点でのそれぞれのインスタンスタイプはCPU：t3.xlarge ,GPU：g4dn.xlargeのようです。
- メモリ、ストレージが利用できる。
    - メモリ：16GB,ストレージ：15GBとなっています。
- Terminalが使える。
- Gitとの連携が行える。

その他特徴は[公式ページ][link-2]や[FAQ][link-3]をご参照ください。

# 利用開始してみる
公式ページから利用開始ができます。

https://studiolab.sagemaker.aws/

メールアドレスを入力し、(任意で他項目を埋めたうえで)登録申請を行います。後日、登録承認メールが送られると利用を開始できます。私の場合は承認されるまで約1週間かかりました。

AWSのサービスですが、AWSアカウントを登録すればシームレスに利用できるわけではなく、別途サービスページからアカウント申請が必要となります。(裏を返せば、利用に際しAWSアカウントは不要になります。)

プロジェクトを立ち上げると以下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/0deba663-d24e-663b-2187-bf8ee8ecc8d8.png)

プロジェクトはJupyter Labがベースの為、とっつきやすい見た目だと思います。
左上の「+」ボタンからNotebookやTerminalを開けます。また、ファイルブラウザーからフォルダの作成やファイルのアップロードなどのファイル操作を行うことができます。

## 試してみる
Scikit-learnのサンプルプログラムを動かしてみました。
![image_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/518ddb4d-b573-14a2-f9e6-b9d5a2cd5582.png)

特に不満点もなく、利用できました。ブラウザ上で動作に難があるのではないかと懸念していましたが問題ありませんでした。

私はScikit-learnを試しましたが、GitHubにAmazon SageMaker Studio Lab用に作成されたサンプルリポジトリが存在しています。
対象のリポジトリはリポジトリページからバッチをクリックすることで自分の環境に簡単にインポートできるようになっています。

https://aws.amazon.com/jp/blogs/news/now-in-preview-amazon-sagemaker-studio-lab-a-free-service-to-learn-and-experiment-with-ml/

# さいごに
機械学習を無料で試してみたい方にはうってつけのサービスかと思います。
似たようなサービスにGoogleが提供している[Google Colaboratory][link-4]がありますが、それぞれメリデメがあると思うので、うまく使い分けたいですね。
<!---以下リンク集--->
[link-1]:https://aws.amazon.com/jp/sagemaker/
[link-2]:https://aws.amazon.com/jp/sagemaker/studio-lab/
[link-3]:https://studiolab.sagemaker.aws/faq
[link-4]:https://colab.research.google.com/
Salesforce認定アドミニストレーター試験の公式練習問題を解説してみた-その003

こんにちは。本橋孝昭です。

Salesforce認定アドミニストレーター試験の公式練習問題があるのはご存じでしょうか。
Trailheadにフラッシュカードとして何度も解ける練習問題がございます。

今回はTrailhead
アドミニストレーター認定の準備: 構成、設定とオブジェクト
構成と設定の学習　にある練習問題3問目をご紹介します。
https://trailhead.salesforce.com/ja/content/learn/modules/administrator-certification-prep-setup-and-objects/study-up-on-org-setup

なお、こちらの内容はYouTubeでも公開しております

https://www.youtube.com/watch?v=F35kX_hjcM8
<iframe width="560" height="315" src="https://www.youtube.com/embed/F35kX_hjcM8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


練習問題3問目はこちらです
![試験003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/cc8d0821-472d-d743-3b76-a8d390ef424a.png)


今回の問題は、リストビューからレコードを編集する方法ですね

それでは、解説について深堀りしていきましょう

今回の正解である
・インライン編集を有効化
・拡張リストを有効化
の設定はこちら「ユーザインターフェース」となっております
![ユーザ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/7b39cadf-e4ca-fe86-6ced-b1d3cdfcf5ab.png)



こちらのチェックをすれば、リストビューからレコードの編集が可能です。

なお、この
・インライン編集を有効化
・拡張リストを有効化
の設定で変更される設定はClassic環境のみです。Lightning環境の設定とは関係ないです。


Lightning環境は元々インライン編集がされる設定になっています。

もしもLightning環境でインライン編集の設定をしたくない場合は、サポートに問い合わせとのことです。
詳細は下記ヘルプ参照してください。

https://help.salesforce.com/articleView?id=000352720&type=1&mode=1


今日の内容はここまでです。
皆さん楽しく元気にSalesforceを学びましょう！
トロイの木馬とは？

## トロイの木馬とは
トロイの木馬とはマルウェアの１種であり、有益または無害なプログラムのふりをしてデバイスに侵入する特徴を持ちます。同じくマルウェアであるウイルスやワームは増殖するのに対し、トロイの木馬は単体でソフトウェアとして動作します。そのためトロイの木馬は宿主となるファイルを必要としません。感染すると個人情報が流出したり、気づかないうちに他の人を攻撃したりします。

## 由来
トロイの木馬という名前はギリシャ神話のトロイア戦争の話に出てくる木馬に由来しています。神話の内容は、敵軍が持ち帰った木馬の中に潜んだ兵士が、敵国の城内に侵入した後、城門を内側から開き味方の軍を引き入れて敵国を壊滅させたというお話です。この話のように、安全だと思って招き入れたプログラムが、侵入した後に悪さをするというのがトロイの木馬です。

## 種類
トロイの木馬にはいくつか種類があります。代表的なものが以下の７つです。
- バックドア型：バックドアを通じて攻撃するやりかたです。

- ダウンローダ型：侵入した後新しいマルウェアをダウンロードするものです。

- プロキシ型：感染したPCのIPアドレスを勝手に生成するものです。

- パスワード剽窃型：PCに保存されているパスワードを剽窃するものです。

- キーロガー型：キーボード入力のログを記録し、攻撃者に送信するものです。

- クリッカー型：ブラウザ設定を勝手に変更するものです。

- ボット型：侵入したPC内部でボットのように動きDDos攻撃に利用されたりします。

## パソコン遠隔操作事件
トロイの木馬を利用して2012年に起こったパソコン遠隔操作事件です。犯人は２ちゃんねるを通じてトロイの木馬を仕込んだアプリケーションを他の人にダウンロードさせ、そのPCから殺害予告や襲撃予告を行いました。感染したPCの持ち主はIPアドレスをもとに逮捕されるということが起こりました。この事件で５人の無実の人が誤認逮捕されてしまいました。

## 対策
- OS、アプリケーションのアップデート

- セキュリティソフトの導入

- 提供元の不明なアプリのダウンロード、リンクのクリックを行わないようする。

## 終わりに
トロイの木馬という言葉はよく聞きますが、調べてみてなかなか恐ろしいものだと感じました。感染しないように気をつけましょう。