OmniAICreator/Qiita-1.07M huggingface dataset:
第6回

\![Ubuntu-20.04.1](<https://img.shields.io/badge/Ubuntu-20.04.1-brightgreen>) \![ruby-2.7.1p83](<https://img.shields.io/badge/ruby-2.7.1p83-brightgreen>) 

これは講義用のまとめサイトです。見た人は是非LGTMを押しといてください。


# やったこと

-   shellのコマンド
-   emacsのキーバインド
-   git
-   変数


# 変数(variable)

rubyでは変数の方宣言は不要、便利


### お題

受け取った引数ARGV[0]をnameという変数(variable)に代入してそれを打ち出すcodeを書け．<br>要はどっかしらで入力された文字列をそっくりそのまま返すコードを書こうということ。


### いきなりやってみる

```ruby
> ruby name_variable.rb Rudy
```

「No Such File or directory(そんなファイルとかディレクトリねえよ)」と言われるので(red)、name\_variable.rbを作る

```ruby
> emacs name_variable.rb
```

で勝手にemacsが起動する。これを後々C-x,C-sするだけでname\_variable.rbができる。terapadなんかだと編集してから最後に名前を付けて保存する作業がemacsでは先に行われてるイメージ。

```ruby
p "Rudy"
```

と書いて動かすと

```ruby
> ruby name_variable.rb Rudy
"Rudy"
```

と返ってくる(green)


# method

methodとは関数などのまとまりを定義したもの


### お題

受け取った文字列を別の文字列の後ろに連結して表示するmethodを作る


### どうやるか

helloというmethodをこう書く

```ruby
def hello(name)
  puts "Hello #(name)."
end
```

2行目では前回学んだ出力方法を使って「Hello なんとか」と出力させるようにしてる<br>しかしこのままだとnameが定義されてないのでred状態

```ruby
name = ARGV[0]
hello(name)
```

を追記してnameにARGV[0]を代入させ、次の行でhelloメソッドにnameの値を渡している<br>これを実行すると

```ruby
> ruby hello_method.rb Rudy
Hello Rudy
```

となった。green。


# 参考記事

-   [チャート式ruby-II(variable and method)](<https://qiita.com/daddygongon/items/c51f3e0695174bb3c508>)



------
 - **source** ~/MasahiroOba/grad_members_20f/members/MasahiroOba/chapter6.org
LaravelでJavaScriptに変数を渡す方法

方法はいくつかあるけど、たぶん『グローバル定義する』方法が一番良いと思う。（ファイルも分離できるから）

bladeファイルで下記のように記述。

```
<script>
window.laravel = {};
window.laravel.val1 = val1;
</script>
```

続いて、jsファイルで下記のように使える。

```
console.log(Laravel.val1);
```
2.3.3 ヒストグラム（コントラスト）のマッチング

# 目次へのリンク


[MATLABによる画像処理・コンピュータービジョン入門目次](https://qiita.com/tohruk/items/e5f7939b622bcf2e3c4c)


# 概要


MATLABによるヒストグラムマッチングについて紹介します。いつもどおりとてもシンプルです。
Image Processing Toolboxが必要です。
対応ファイル：[I2_03_3_histmatch.m]
(https://github.com/mathworks/MATLAB-IPCV-Eval-Kit-JP/blob/master/demo_files/I2_03_3_histmatch.m)

# 初期化

```matlab:Code
clear;clc;close all;imtool close all
```

# 画像の読込み･表示


まず、画像を読み込みます。



```matlab:Code
Ref = imread('I2_03_3_knee1a.tif');  % 膝のMRIイメージの読込み
  A = imread('I2_03_3_knee1b.tif');
figure;imshow([Ref A]);
```


![figure_0_png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202697/7a842a28-63d1-60dd-a2bc-1b949e4ea046.jpeg)




ご覧の通り、明るさが画像間で異なっていることがわかります。


# ヒストグラム表示


ヒストグラムでそれぞれの輝度分布を見てみましょう



```matlab:Code
figure;
subplot(2,2,1);imhist(Ref);title('リファレンス');
subplot(2,2,2);imhist(  A);
```

![figure_1_png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202697/28587c2b-d47d-b611-f44a-4a4e4d07c42d.jpeg)



目視でわかる通り、リファレンス画像に対して、knee1bの方は輝度が小さいことがわかります。


# ヒストグラムのマッチング


リファレンスにマッチするように、knee1bの輝度分布を補正してあげます。



```matlab:Code
B = imhistmatch(A, Ref, 256);  % AのヒストグラムをRefに一致させる
subplot(2,2,4);imhist(B);title('処理結果'); shg;
```


![figure_2_png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202697/6bd2e056-26c2-9be0-a4f8-bf071ce5b5b9.jpeg)




きちんと補正されている様子がわかりますね。


# 結果の表示

```matlab:Code
figure;imshow([Ref repmat(239,[512 20]) B]);
```


![figure_3_png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202697/b4444ade-1c54-fa97-4623-22ec8229c9cd.jpeg)




結果として見た目がほぼ同じになりました！

imhistに関しては、経験から１　点注意が必要です。それは入力する画像データの型ですね。
uint8型だと0-255の範囲でヒストグラムをプロットしてくれます。
singleかdoubleだと0-1の範囲でヒストグラムをプロットしてくれます。注意が必要なのはこの浮動小数点型の時ですね。データの絵ｄｓｗｐｑぉｍｋ、範囲が0-1に納まっていないと当然出てくるプロットは役に立たないものになりますので、ご注意いただければと思います。データの正規化にはrescale関数が使えますヨ。

# 謝辞


本記事は [@eigs](https://qiita.com/eigs) さんの[livescript2markdown](https://github.com/minoue-xx/livescript2markdown)を使わせていただいてます。


# 目次へのリンク


[MATLABによる画像処理・コンピュータービジョン入門目次](https://qiita.com/tohruk/items/e5f7939b622bcf2e3c4c)
Udemy フルスタック・Webエンジニア講座　セクション11.モバイルアプリ

<h1>jQueryでデータ送受信できるようにしてみた</h1>
Udemyフルスタック・Webエンジニア講座　セクション11.モバイルアプリの単元では、**App.js**を使ってモバイルアプリをつくるものでした。しかし、今回私はデータの送受信を**jQuery**で行ってみることにしました。

<h1>post()</h1>
データの送受信を行うために、jQueryのpost()というメソッドを使ってみました。

```html
 <form>
<input type="text"  name="send-name" placeholder="名前を入力してください。" value="" />
      <p></p>
<input type="text" placeholder="件名を入力してください。" value="" />
      <p></p>
<textarea placeholder="メッセージを入力して下さい。"></textarea>
      <p></p>
      <input type="submit" value="送信">
</form>
```
まず、HTMLのbodyの中に上のようなコードを書きました。これにより、名前、件名、メッセージ内容を入力し、それを送信することが出来ます。では、送信の中身をJavascriptのjQueryで書いていきます。


```javascript

 $.post( 'https://httpbin.org/post',$('form').serialize() )
 //サーバーからの返信を受け取る
 .done( function(data) {
   console.log(data.form);
   alert("送信出来ました");
   })
  
 //通信エラーの場合
 .fail( function() {
  console.log(通信エラーが発生しました);
   })

```
postのメソッドは

```Javascript

$.post(サーバーへのパス,任意のデータ)
```

という構成をしています。今回のサーバーは任意のものを使い、データは**form**の中身をとってきます。
**done**を使うことでサーバーからの返信を受取ることが出来ます。また、通信エラーが発生したときのために、**fail**も使っています。


```javascript

$('form').submit(function( event ) {
    event.preventDefault();
});

```
また、console.logを使うため、submitでホームページを更新しないように上のようなコードを書いています。

<h1>反省点</h1>
今回、任意のサーバーを使ってメールの送受信をおこなえるようにしたが、メールアドレスに送受信できるようには出来ませんでした。今後、これを可能にするためにしていきたいと思います。また、**submit**のメソッドが起動しないというエラーも発生しました。これは使い方が間違っていたためエラーが出てしまったので、しっかりと復習しようと思います。

<h1>最後に</h1>
洗練さんでインターンの課題(フルスタック・Webエンジニア講座　セクション11.モバイルアプリ)です。
[フルスタック・Webエンジニア講座](https://www.udemy.com/course/completeweb2_jp/learn/lecture/4969902#overview)
本日はメール送受信サイト作りと、ProgateのJavascriptの復習をしました。

最後に
現在ここでインターンしています。
まだまだ駆け出しですが頑張ります！やる気は人一倍です！
https://senren.work/
マルチスケールシミュレーション特論 第7回



# 学習内容

-   How to use if, elsif, else, end

```ruby
if 式 [then]
  式 ...
[elsif 式 [then]
  式 ... ]
...
[else
  式 ... ]
end
```

-   随時更新予定（まだ作成中）



------
 - **source** ~/github/grad_members_20f/members/GWT5091/docs/Doc07.org
スマホサイトでピンチアウトによる拡大をさせたくない時にやること

# まずはJavaScriptで書いてみた

~~~javascript
(".hoge").addEventListener("touchstart", function(event) {
    if (event.touches.length > 1) {
        event.preventDefault();
    }
}, {passive: false});
~~~

- **ここでのポイント**  
 - `event.touches.length`にタッチ中の指の本数が格納されている
 - `event.preventDefault();`で拡大をキャンセルしている
 - `{passive: false}`をつけないと`preventDefault()`が効かない


## ここで問題が発生

**指一本でスクロールしながらもう一本指を増やすとピンチアウトが有効になる**


# 解決策
~~~css
.hoge {
    touch-action: pan-y;
}
~~~

CSSにこれを指定するだけで実は済む。
[touch-action](https://developer.mozilla.org/ja/docs/Web/CSS/touch-action)
一括置換　VBA


## コード

``` vb
Option Explicit

Sub 一括置換()
On Error Resume Next
Application.ScreenUpdating = False
  Dim buf, Target, s1, s2
  Set Target = Application.InputBox("範囲は連続／不連続どちらでもOK", "文字列一括置換＞対象範囲を選択", Type:=8)
  If Target = "" Then: Exit Sub
  
  Set s1 = Application.InputBox("範囲は連続／不連続どちらでもOK", "文字列一括置換＞置換したい文字列群を選択", Type:=8)
  If s1 = "" Then: Exit Sub
  
  Set s2 = Application.InputBox("範囲は連続／不連続どちらでもOK", "文字列一括置換＞新しい文字列群を選択", Type:=8)
  If s1.Cells.Count <> s2.Cells.Count Then
    MsgBox "置換したい文字列群と新しい文字列群の数が一致しません。" & vbLf & _
            "処理を中断します。"
    Exit Sub
  End If
  
  Dim s1c, s2c, c, i
  ReDim s1c(UBound(s1.Value2))
  ReDim s2c(UBound(s2.Value2))
  i = 1
  For Each c In s1.Cells
    s1c(i) = c.Value
    i = i + 1
  Next
  i = 1
  For Each c In s2.Cells
    s2c(i) = c.Value
    i = i + 1
  Next
  
  Dim r As Range ', i As Long
  For Each r In Target.Cells
    For i = 1 To UBound(s1.Value2)
      r.Value = Replace(r.Value, s1c(i), s2c(i))
    Next
  Next
  Application.ScreenUpdating = True
End Sub

```
[Servicenow]Reference項目のInformationアイコンで表示される項目の変更

#概要
　Reference項目のinformationアイコンを押したときのポップアップに表示される
　項目を変更する方法

**変更前)**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922262/db304a2f-854d-c1ac-6a73-bcaf860ab7da.png)

**変更後)**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922262/765ef68e-6941-2922-1593-4f5f522ef09f.png)




#やりかた

1．対象テーブルのFormを開く
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922262/355a0928-51ef-5b31-4971-e13a1c9b4ca1.png)

2．[Context menu]>[Configure]>[Form Layout]を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922262/65b2628e-a99e-88c8-33b2-489b905ca31d.png)

3．Form view and sectionから、Newで、「sys_popup」という名前のViewを作成する。
 ※Tableによっては、既に存在する場合もあるのでその場合は、Newは不要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922262/f21a750f-fb89-5b03-6af5-0bb56fcaf821.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922262/7be549f9-ae6f-aae8-c125-104c2fa9a3db.png)

4.作成されたら、FormLayoutでレイアウト変更するか、Form Designで開きなおしてレイアウト変更をする。
　※Form Designから、Newしようとすると、「_」が使用できませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922262/06bf4dc3-4972-375f-f4b2-f8b21658f314.png)


以上で設定は終わりです。


#おまけ
作成したViewは、[System UI]>[views]のsys_popupレコードの関連としてデータが入る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922262/7b358000-8b8a-dbdf-567a-e5aad36e4c13.png)
PUN2の１


# 環境
Unity 2019.4.15f LTS
VS2019 free
win10 pro

# アカウント作成
# Unity でPUN2 freeをimport

省略

# PUN Wizard

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/f8d11afb-2890-9117-2a45-bc1eeb600803.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/fecdb1c9-8015-00d5-045b-169b27ed98e1.png)

Setup projectを行う。

# App ID
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/c934f2ad-0e42-7348-e0ec-5077011990b5.png)

WEBからAPPIDを採取してUnityダイアログに張り付ける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/a287a45f-cf76-71e6-5b5b-99cef8328b19.png)

# hello world 
これがよいと思う。
https://junyablog.site/post-2973/#toc_id_2

DeepPink <font color="DeepPink">Photon/Resourcesにunityのprefabを作成しておく。
prefabの名前は“chara”にしておく。</font>

```

using Photon.Pun;
using Photon.Realtime;

GameObject chara= PhotonNetwork.Instantiate("chara", 
    new Vector3(0.0f,0.5f,0.0f), Quaternion.identity, 0);
```

[PUN2で始めるオンラインゲーム開発入門【その１】](https://connect.unity.com/p/pun2deshi-meruonraingemukai-fa-ru-men-sono2)には　Photon/Resources　の説明ないので注意。
[URL変更になりました。](https://zenn.dev/o8que/books/bdcb9af27bdd7d/viewer)


# 公式tutorial 
[tutorial](https://doc.photonengine.com/en-us/pun/v2/demos-and-tutorials/pun-basics-tutorial/intro)

# その他

私の場合、PUN2 freeをimportしたときにビルドエラー発生しました。結局Unity再インストールでうまくいきました。原因不明です。
C# Excel セルの計算式を消して結果の値だけを残す

<p>前の記事ではエクセルで数式を作成する方法を紹介しました。もし役に立てれば嬉しく思います。</p>
<p>だけど、時には、エクセルでセルの計算式を消して、その結果の値だけを残したいと思うなら、どうしたらいいのかな？じゃあ、この記事ではSpire.XLSを利用してそれを実現する方法を見せてあげましょう！</p>
<p> </p>
<h4>下準備</h4>
<p>1.E-iceblueの公式サイトから<a href="https://www.e-iceblue.com/Download/download-excel-for-net-free.html">Free Spire.XLS</a>無料版をダウンロードしてください。</p>
<p> </p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/l/lendoris/20201202/20201202155642.png" alt="f:id:lendoris:20201202155642p:plain" title="" class="hatena-fotolife" itemprop="image" /></p>
<p> </p>
<p>2.Visual Studioを起動して新規プロジェクトを作成してから、インストールされたファイルにあった相応しいSpire.XLS.dllを参照に追加してください。</p>
<p>（Net 4.0を例としたら、デフォルトパスは“Bin→NET4.0→XLS.dll”というようです。）</p>
<p> </p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/l/lendoris/20201202/20201202155715.png" alt="f:id:lendoris:20201202155715p:plain" title="" class="hatena-fotolife" itemprop="image" /></p>
<h4><br />元のファイル</h4>
<p>関数が付いています。</p>
<p> </p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/l/lendoris/20201202/20201202155806.png" alt="f:id:lendoris:20201202155806p:plain" title="" class="hatena-fotolife" itemprop="image" /></p>
<p> </p>
<p> </p>
<h4>サンプルコード</h4>

```c#

using Spire.Xls;
using System;

namespace ConsoleApplication29
{
    class Program
    {
        static void Main(string[] args)
        {
            
            Workbook workbook = new Workbook();
            workbook.LoadFromFile("Sample.xlsx");
            //シートをループします。
            foreach (Worksheet sheet in workbook.Worksheets)
            {
                //セールをループします。
                foreach (CellRange cell in sheet.Range)
                {
                    //計算式があるかどうか判定します。
                    if (cell.HasFormula)
                    {
                        //結果の値を取得します。
                        Object value = cell.FormulaValue;
                        //セルのコンテンツを削除します。
                        cell.Clear(ExcelClearOptions.ClearContent);
                        //値をセルに追加します。
                        cell.Value2 = value;
                    }
                }
            }
            //保存します。
            workbook.SaveToFile("DeleteFormula.xlsx", ExcelVersion.Version2013);

}
```
<p></p>
<p> </p>

<p> </p>
<h4>完成例</h4>
<p>計算式を消して値だけが残っています。</p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/l/lendoris/20201202/20201202155838.png" alt="f:id:lendoris:20201202155838p:plain" title="" class="hatena-fotolife" itemprop="image" /></p>
<p> </p>
<p> </p>
<p> </p>
MitamaでTodoアプリを作ってみる(2) - Modelを作りこむ

[Mitama Advent Calendar](https://qiita.com/advent-calendar/2020/mitama)3日目です。

前回→『[MitamaでTodoアプリを作ってみる(1) - Mitamaアプリの構成](https://qiita.com/ta1g3n/items/a59a60ccd1611ab05879)』

木瓜丸です。今回は引き続きTodoアプリを組んでみましょう。

## モデルの設計
今回はTodoをオブジェクトとして表現するためのモデルを作成します。
次のようなプロパティをもたせればTodoとしては十分かなと思います。

|プロパティ名 |型 |説明 |
|---|---|---|
|node |Node |Todoを登録したユーザー、またはグループ |
|subject |String |Todoの題名 |
|dead |DateTime |Todoの期日 |
|done |Boolean |終わったかどうか |

注目してほしい点は、Nodeという型があることです。Nodeを型として指定した場合、そのプロパティにはUser、またはGroupのインスタンスを入れることができます。参照するときもUserやGroupの形で取得することができます。

## コード
では、コードを書いてみましょう。
model.pyを次のように変更してください。

```python
from mitama.db import BaseDatabase
from mitama.db.types import *        #コメントアウトを外す


class Database(BaseDatabase):
    pass


db = Database()

class Todo(db.Model):
    node = Column(Node)
    subject = Column(String)
    dead = Column(DateTime)
    done = Column(Boolean)

db.create_all()                     #コメントアウトを外す
```

...どうですかね？割と簡単に書けるかと思います。

2行目はモデルを作る上で使用する型の種類を読み込んでいます。StringやInteger、BooleanなどのSQLAlchemyに存在する型に加えて、User、Group、Node（UserとGroupを両方扱うための型）を読み込むことができます。

```python
from mitama.db.types import *
```

11行目〜15行目のクラス定義がモデルの定義です。

```python
class Todo(db.Model):
    node = Column(Node)
    subject = Column(String)
    dead = Column(DateTime)
    done = Column(Boolean)
```

17行目の処理は、作成したモデルのテーブルをデータベース上に実際に作成する作業をしています。

```python
db.create_all()
```

---

次はコントローラーとビューを作り込み、実際にアプリっぽく操作できるようにしてみましょう！
MitamaでTodoアプリを作ってみる(1) - Mitamaアプリの構成

[Mitama Advent Calendar](https://qiita.com/advent-calendar/2020/mitama)2日目です。

[木瓜丸](https://twitter.com/boke_0)です。今回から何回かに分けてMitamaで~~ゴミアプリの代名詞~~Todoアプリを組んでみましょう！

この記事では、アプリの動かし方や基本的なアプリの構成について書きます。

## アプリディレクトリの作成
アプリを動かす時は、

1. Pythonのモジュール検索パス（site-packagesとかのパス）にパッケージをインストール方法
2. プロジェクトのディレクトリの直下にパッケージを設置する方法

の2つがあります。
（「プロジェクト」ってなんや？って方は、こちら→『[Mitama + nginx + uWSGIで社内システムを立てる](https://qiita.com/ta1g3n/items/48e25f7b546934e42694#mitama%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)』）

今回は2のプロジェクトディレクトリの直下にアプリディレクトリを置く方法で動かしましょう。プロジェクトディレクトリで次のコマンドを叩いてください。

```bash
$ mitama mkapp todo
```

そうするとディレクトリができたかと思います。

## ディレクトリ構成
一度ディレクトリの構成を見てみましょう。

```
todo
├── __init__.py
├── controller.py
├── main.py
├── model.py
├── static
│   └── vertical-logo.svg
└── templates
    └── welcome.html
```

開発経験がある方ならおわかりかもしれませんが、Mitamaが木瓜丸なりにしっかり目にMVCアーキテクチャに従っています。

### main.py
```python
from mitama.app import App, Router
from mitama.utils.controllers import static_files
from mitama.app.method import view

from .controller import WelcomeController


class App(App):
    # name = 'MyApp'
    # description = 'This is my App.'
    router = Router(
        [
            view("/", WelcomeController),
            view("/static/<path:path>", static_files()),
        ]
    )
```

main.pyにはアプリの設定やルーティングの設定などの処理を記述します。

### controller.py
```python
from mitama.app import Controller
from mitama.app.http import Response


class WelcomeController(Controller):
    def handle(self, request):
        template = self.view.get_template("welcome.html")
        return Response.render(template)
```

controller.pyにはリクエストの情報を受けとり、モデルやビューを呼び出してレスポンスを作成して返す処理を記述します。基本的にはControllerクラスを継承したものを作成します。

### model.py
```python
from mitama.db import BaseDatabase
# from mitama.db.types import *


class Database(BaseDatabase):
    pass


db = Database()

# db.create_all()
```

model.pyにはデータベースに関わるオブジェクトを定義します。この状態では何もおこりません。

### その他
templates/にはControllerから使用するJinja2テンプレートを入れます。
static/は、デフォルトでは静的ファイルの読み込み先になっています。特に変更をしなければ、この中に入れたファイルがlocalhost/static/\<static下のパス\>のようなURLでアクセスできるようになります。

## 動かしてみる
では、プロジェクトでアプリを動かしてみましょう。

まずは、mitama.jsonを編集し、アプリを登録します。

```json
{
    "apps":{
        "mitama.portal": {
            "path": "/"
        },
        "todo": {
            "path": "/todo"
        }
    }
}
```

今回はプロジェクト直下にアプリを配置しているので、そのアプリのパッケージ名（フォルダ名）をキーに、pathには好きなパスを書き込んでおきましょう。

できたら、プロジェクトディレクトリで次のコマンドを叩き、テスト用のサーバーを立ち上げましょう。

```
$ mitama run
```

叩いたら、http://localhost:8080/todo にアクセスすれば、アプリが開けます。ウェルカム画面が出れば成功です。

![2020-12-01-045907_1920x1080_scrot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381826/d4ee8c36-df3b-f412-15c6-63235fafa08c.png)

---
長くなってしまったので、今回はここまでにします。

次回はModelの作り込みをしてみましょう。
powershell_フォルダアクセス権出力



①Windows PowerShellで特定フォルダ配下のフォルダアクセス権をCSVに出力する
フォルダ[sales2]フォルダアクセス権を出力

```
cd C:\inetpub\wwwroot\sales2
#sales2アクセス権だけを出力
Get-Acl | Select-object @{Label="Path";Expression={Convert-Path $_.Path}}, Owner, AccessToString |Export-Csv C:\inetpub\wwwroot\output.csv

#sales2子フォルダのアクセス権も一緒に出力
Get-ChildItem -Force -Recurse |where { $_.mode -match "d" } |Get-Acl | Select-object @{Label="Path";Expression={Convert-Path $_.Path}}, Owner, AccessToString |Export-Csv C:\inetpub\wwwroot\output.csv

```
Event annotation 機能ご存知ですか？

Splunk 7.x から追加された機能なのですが、Web UI の GUI から設定ができないというのがあり、なかなか利用されにくい機能かなと思います。
この機能は非常に便利で、例えば、リソースの利用状況が急上昇したときに、そのときに発生したイベントを時系列でグラフに表示してくれます。

例えば、Splunk の _internal インデックスには、Splunk の稼働情報が記録されています。
ログレベルが定義されており、INFO（情報）、WARM（警告）、ERROR(エラー)と言った形で、情報が記録されます。

以下の SPL で、時系列で、各ログレベルでの発生状況を視覚化します。


```
index=\_internal log_level=*
| timechart count by log_level
```

結果として、下記のようなチャートを描けます。（エリアチャートを利用）
このチャートを、”Splunk Internal Log” という名前で保存します。
![スクリーンショット 0002-12-02 午後2.23.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361613/c82a1b37-2357-45bb-be40-1103729a89a8.png)
これだと、ERROR が発生している場合、発生した時刻等が分かりづらいですよね。
こんなときに、Event Annotation の機能を使います。

今回は、log_level が ERROR のものをグラフ上に表示させたいので、それらの情報を抽出する SPL を定義します。

```
index=\_internal log_level="ERROR" 
| eval annotation_label = event_message 
| table _time annotation_label
```
ここでのミソは、annotaion_label を定義することです。
期待どおりに、イベントがテーブル形式で出力されたら、OK です。この SPL を作成したダッシュボードに追記していきます。

”Splunk Internal Log” を編集モードで開きます。
既定では、ユーザーインターフェースボタンがアクティブになっているので、ソースボタンをクリックします。
ダッシュボードのソースとして、XMLが表示されます。
今回作成済の\<chart>タグ配下に、以下のタグを追記します。

```
<search type="annotation">
	<query>
		index=_internal log_level="ERROR" | eval annotation_label = event_message | table _time annotation_label 
	</query>
	<earliest>-24h@h</earliest>
	<latest>now</latest>
</search>
```

 ※ \<earliest> タグと \<latest> タグの値は、ベースとなるSPLで定義している値と同じものにします。

設定例：四角で囲ってあるところが追記した箇所
![スクリーンショット 0002-12-02 午後2.32.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361613/b7d9427a-ffbb-ab81-06c0-095c1bb8161a.png)

エラーも特にでないようであれば、保存します。
結果として、このような形で表示できます。
Annotation されている箇所にマウスカーソル合わせると、その時のイベントメッセージが表示されます。
![スクリーンショット 0002-12-02 午後2.24.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361613/1b81a6e5-fc49-79a1-9cac-14cfb6b31218.png)

最後に：
Splunkbase にある、Dashboard Example（https://splunkbase.splunk.com/app/1603/） にもサンプルがあるので、こちらも確認することをおすすめします。

Happy Splunking!
DocBaseの人気記事ランキングを作るツールを作った

この記事は [DENSOアドベントカレンダー2020](https://qiita.com/advent-calendar/2020/denso) の1日目の記事です。

会社でDocBaseを使っているのですが、投稿が増えてくると良い記事でも見落とされたりするので、月ごとにランキング作ったら面白いんじゃね？？と思って作ってみました。

## 作ったもの
https://github.com/suusan2go/docbase-report

最初はGoで作ろうと思ったのですが、どうしても久しぶりにRubyが書きたくなってRubyで書きました。

## 使い方
この記事を書いている時点でまだ rubygems にpublishしてないので、git cloneして使ってください。ごめんなさい。

```bash
$ git clone https://github.com/suusan2go/docbase-report
$ cd docbase-report/
$ bundle install
```

環境変数として、DocBaseのアクセストークンとチーム名が必要です。アクセストークンは以下のサイトを参考に入手しましょう。
https://help.docbase.io/posts/45703
チーム名はURLの `<team名>.docbase.io` team名です。

```bash
$ export DOCBASE_TEAM=<your team name>
$ export DOCBASE_ACCESS_TOKEN=<your token>
$ bundle exec exe/docbase_report docbase_report monthly_report 2020-08-01 #8月の人気記事ランキングを作る場合
```

これで標準出力に、こんな感じで本文が出てきます。

```md

# 8月のランキング

## グッジョブランキング

### 1位 34グッジョブ　「とっても人気のある記事」
#{123456}

### 2位 21グッジョブ　「ちょっと人気のある記事」
#{6789}

### 3位 21グッジョブ　「まあまあ人気のある記事」
#{101112}

## スターランキング

### 1位 7スター　「とっても人気のある記事」
#{123456}

### 2位 6スター　「ちょっと人気のある記事」
#{6789}

### 3位 6スター　「まあまあ人気のある記事」
#{101112}


## コメントランキング

### 1位 24コメント　　「とっても人気のある記事」
#{123456}

### 2位 9コメント　「ちょっと人気のある記事」
#{6789}

### 3位 5コメント　「まあまあ人気のある記事」
#{101112}
```

これをコピーして投稿したらランキング作成完了です。正直もっと色々自動化したかったんだけど、月1のランキングなら手動で頑張ればいいかと思ってあまり頑張ってないです！プルリクエストは歓迎します！！！

### 本文をカスタマイズしたい
将来的には引数とかでerbテンプレートのパスを渡せるようにしたいと思っていますが、今の所は以下のパスにおいてあるerbを手元でいじってもらえれば好きなように出力できます。プルリクエストは歓迎です！！！
https://github.com/suusan2go/docbase-report/blob/master/lib/template/monthly_report.md.erb

```erb
# <%= target_date.month %>月のランキング

## グッジョブランキング
<% summary.good_jobs_ranking.each_with_index do |post, index| %>
### <%= index + 1 %>位 <%= post["good_jobs_count"] %>グッジョブ　「<%= post["title"] %>」
#{<%= post["id"] %>}
<% end %>
## スターランキング
<% summary.stars_ranking.each_with_index do |post, index| %>
### <%= index + 1 %>位 <%= post["stars_count"] %>スター　「<%= post["title"] %>」
#{<%= post["id"] %>}
<% end %>

## コメントランキング
<% summary.commented_ranking.each_with_index do |post, index| %>
### <%= index + 1 %>位 <%= post["comments"].length %>コメント　「<%= post["title"] %>」
#{<%= post["id"] %>}
<% end %>
```


## まとめ
QiitaにDocBaseに関する記事書くのすごく背徳感があります。
【UE4】Niagaraのイベントで任意のパラメーターを使う

|ω・｀)ﾉ ﾔｧ

Niagaraが段々便利になってて高性能オモチャにも程があると思う毎日。
私です。

Niagaraでこう　パーティクル消滅時に別のパーティクルを発生させたい
だけど既存のDeathEventだと必要なパラメーターが足りない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275100/ac47f9e1-a893-294c-c2c6-e4164583aab9.png)
色々足りねーよ！

そんなあなたに朗報です
今ならこちらの幸運の壺を買うだけで好きなパラメーターをイベントハンドラーで渡すことが出来るようになるのです！！

＝＞　購入はこちら　＜＝

嘘です

イベントハンドラーってなんぞ？　という方は以下参照
https://docs.unrealengine.com/ja/Engine/Niagara/EventHandlerOverview/index.html

# 任意のパラメーターをイベントとして書き込む
まず、既存のLocationEventなんですが　構造体です。
ただの構造体です。

データは以下の場所にあります。
```/Niagara/Content/DefaultAssets/Structs/LocationEvent```

エンジンコンテンツの改変？　構わん　やれ。
という方はこれに適当にパラメーター追加しておけばいいです。

まぁ　そんなの普通は駄目なので適当な場所に新規で構造体を作成します。
ファイル名はまぁ　適当でいいでしょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275100/d6d3149a-ab5b-8942-56fe-125552775c92.png)

次に　プロジェクト設定を開き　ナイアガラの項目を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275100/64810b60-1b94-069e-90cb-d8dfc5d4bf60.png)
すると　追加ペイロードのタイプ　というのがあるのでそこにさっき作った構造体を登録します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275100/b9698550-8361-fe7d-d6cb-0755c3406260.png)

はい　これで登録した構造体をイベントとして飛ばすことが出来るようになりました。
ね？かんたんでしょ？

# イベントの発行と受け取りの処理を追加
イベント発行用のモジュールを新規作成
モジュールのノードグラフで右クリック→eventとかするとさっき追加した構造体のやつが出てくるので書き込みを追加しますの方を選びます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275100/de8eb185-ac06-4c8d-f86e-68e6424f938d.png)
後は適当にパラメーターを渡すように作ってください

UsageBitmaskとかは既存のGenerate〇〇Event見て

イベントを受けてそのパラメーターを操作するモジュールを新規作成
同じように右クリックで追加するんですが　その時は読み取りを追加しますの方を選びます
受け取ったパラメーターはここで直接使っちゃうか　パーティクル/EventPositionとか作ってそっちに入れておくと以降のモジュールに使いやすくていいです。

# おわり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275100/3f7a5cb1-637f-438f-c8e4-55b2fa30a00e.png)
MeshParticleの回転とスケール取って　MeshParticleが消えたらMesh形状にParticle出すやーつ

話変わるけど
4.26で追加されるComponentRendererちゃん　ヤバない？
あんなのほぼなんでも出来るようになるやん

以上！　ノシ
マルチスケールシミュレーション特論：第 2 回をまとめてみた

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


# はじめに

本授業では、GitHub を用いて授業を行うので簡単な GitHub の説明を行う


# Git と GitHub の違いについて

そもそも Git と GitHub が曖昧になっている人が多いという問題があります。なのでそれぞれについてまとめます。


## Git

Git とは、オープンソースの分散バージョン管理システムの一つ。複数の開発者が共同で一つのソフトウェアを開発する際などに、ソースコードやドキュメントなどの編集履歴を統一的に管理するのに用いられる。


## GitHub

GitHub とは、バージョン管理システム「Git」（ギット）で管理するデータをインターネット上で共有・公開することができるネットサービスの一つ。米マイクロソフト（Microsoft）社傘下の同名企業（GitHub Inc.）が運営している。


# GitHub のアカウント登録方法

では一体どのようにして、GitHub にアカウント登録したらいいのか？という疑問があるので以下に手順をまとめていこうと思う

-   手順
    -   「GitHub」の公式サイト(<https://github.com/>)にアクセス
    -   GitHub 公式サイトを開いて以下を入力します。パスワードは７文字以上で作成してく下さい
        -   「ユーザー名：Pick a username」
        -   「Email：Your email address」
        -   「パスワード：Create a password」
    -   「GitHub」のプラン(無料/有料)を選択する
    -   「GitHub」からのメールを確認する
        -   最初に登録したメールアドレス宛に、「[GitHub] Please verify youremail address.」というタイトルの確認メールが届く。メールを開いて、本文にある「Verify email address」をクリック


# 便利な Git コマンド集

-   github 共有
    -   git config &#x2013;global core.eitor emacs
    -   git pull origin main
    -   git add -A
    -   git commit -m 'hoge hoge'
    -   git push origin main


# さいごに

git コマンドは複数あるので皆さんも色々と確認してみて下さい



------
 - **source** ~/Downloads/git/enjoy_unix_lecture_materials/grad_members_20f/members/taiseiyo/memos/class2.org
【GCP】billingについての備忘録

・オペレーションとロールの関係に関するドキュメント。
https://cloud.google.com/iam/docs/understanding-roles#resource-manager-roles
ロールの説明部分に実施できるオペレーションの記載有り。

https://cloud.google.com/billing/docs/how-to/billing-access?hl=JA#cloud-billing_access-control-examples
アクセス制御の例があるので、ここも参考になるかと思います。

・組織に紐付いたPJ作成に関連するロール
https://cloud.google.com/resource-manager/docs/creating-managing-projects?hl=ja&visit_id=637424873040036754-2583235604&rd=1#creating_a_project
「プロジェクト作成者（resourcemanager.projects.create） 権限が必要」

・PJに特定の請求先アカウントをリンクする際に関連するロール
請求先アカウントユーザー＋オーナーのみ
請求先アカウントユーザー＋組織管理者のみ

・「プロジェクトの支払い管理者」のみでは、請求先アカウントはリンクできませんでした。
・「プロジェクトの支払い管理者」については、以下のブログにわかりやすく書いてありました。
https://qiita.com/AkiQ/items/03c7524979799ec3555a
「プロジェクト支払い管理者＋請求先アカウント管理者」などでもヒモ付が可能かもしれないのですが、この検証が私の環境だとできません。。
（「請求先アカウント管理者」は組織単位で紐付けるのですが、検証アカウントが組織のIAMを操作できないため。）

~~~~~~~~~~~~
検証結果

・「請求先アカウントユーザ」＋「プロジェクトの支払い管理者」のみでも、コマンドからだと請求先アカウントのヒモ付が可能。
・組織の管理者はコンソール画面の遷移とかに必要になるっぽい。。。。
このへんが、GCPの不便なところ。。コマンドでやればOKとかが書いてない。
このブログの人はコマンドで基本的にはやっていたので、ここは参考になる。
https://qiita.com/AkiQ/items/03c7524979799ec3555a

~~~~~~~~~~~~
===============
請求先アカウントユーザーはかなり制限された権限になる。
billingのgcloudコマンドもできることは少ない。

https://cloud.google.com/billing/docs/how-to/reports
https://cloud.google.com/billing/docs/how-to/billing-access

https://cloud.google.com/sdk/gcloud/reference/alpha/billing
https://cloud.google.com/sdk/gcloud/reference/alpha/billing/budgets/create
gcloud billing budgets
gcloud alpha billing accounts
gcloud alpha billing accounts set-iam-policy
gcloud alpha billing projects describe

すべてを見るには
billing.accounts.getSpendingInformation
が必要
閲覧者の権限だけでも与えたほうがいいと思う。

わかりやすく解説してくれている。
https://zenn.dev/koke/articles/5416f45f4cdfbd
[Vue] ESLintを更新すると謎のエラー clear が表示される件

ESLintを更新したところ、謎のエラーが出るようになったのでメモ。

```
14:12  error  clear  vue/comment-directive
```
幾つか同じ事例を見つけたが、原因ははっきりしなかった。

https://stackoverflow.com/questions/64529114/eslint-vue-plugin-showing-false-positives-for-vue-comment-directive
https://www.v2ex.com/t/722925

ともかく、`vue/comment-directive` ルールに引っかかっているのは間違いないので、
`.eslintrc.js` にルールを無効化する設定を書いて、しのいでいるらしい。

・・・と思っていたところ、コメント欄で正しい解決方法を教えていただきました。
@mysticatea 様、ありがとうございました！

> はて、eslint-plugin-vue が使われていれば、その postprocess で削除されるので出ないはずですが...

```js
module.exports = {
  ...
  overrides: [
    {
      files: ["*.vue"],
      processor: "vue/.vue"
    }
  ]
}
```
docker  ~exit とdetach(ctrl + q + p)の違い

#docker  ~exit とdetach(ctrl + q + p)の違い

exitでコンテナから退出するとプロセスが終了する。
一般的な終了はexitで良さそう。
再度開始するには以下コマンド

```
docker restart id名　//ここでコンテナの起動
docker exec -it　id名　bash //これでコンテナに入る
```
こうすると
``` docker ps -a```をした時に
ステータスが
![スクリーンショット 2020-12-02 15.31.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670884/ca5ca0e5-1629-1e68-c318-590a776f4752.png)
だったものが
![スクリーンショット 2020-12-02 15.31.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670884/1aae103c-8c99-5c2f-1a58-a7960ddaf22d.png)

に変更され起動を確認できる。

detachで退出した場合は
``` docker ps -a```をした時に最初からUpのステータスになっている（コンテナは最初から起動されている）
ここのプロセスに入る際は

```
docker attach id名 //ここでコンテナに入る
```
で入れる
「React+Material UIのformやTextfieldがうまく動作しない」そんな場合のチェックポイント

以前に以下の様な記事を書きました。

[ReactのformをBootstrapからMaterial UIに移行する際の注意点](https://qiita.com/KOBA-RYOTA/items/6f9311afa1ffd27e2f15)

しかし書いた僕自身、またmaterial uiのformで色々躓いたので、その時に得た知識も含めて今回は、**React+Material UIのformがうまく動作しない場合のチェックポイント**を解説します。

※ここの項目をチェックすれば100%動く保証はできません。あくまで僕の経験則ですので、その辺はご了承を。

## チェックリスト 📝

以下のチェックリストを用意しました。これを全て網羅する必要はありません。
どう言うことかというと(あとで詳しく説明しますが)、例えば、valueにstateを入れる場合もあれば、inputRefを使って`〇〇Ref.current.value`で入力した値を読み取ることもあるからです。

- [ ] formタグで囲んでいるか
- [ ] formタグの`onSubmit`の処理を記述しているか
- [ ] `ref`ではなく`inputRef`を使っているか
- [ ] `value`を使っているか
- [ ] submit用のbuttonを配置しているか(`type="submit"`の記述はあるか)

以下で詳しく見ていきましょう

## formタグで囲んでいるか
まずはformタグで囲んでいるかどうかです。Material UIにはBootstrapの`<Form>`の様なものはないので、普通のformタグを使います。

BootstrapからMaterial UIに移行した場合などは要チェックポイントです🙆‍♂️

## formタグの`onSubmit`の処理を記述しているか
formタグで囲っていても`onSubmit`にformの送信の処理を書いていないと何も起こりません😨

大体は`handleSubmit`みたいな関数を用意して、その中で処理を書いていきます。`onSubmit={handleSubmit}`はよく使います。

上記の`formタグで囲んでいるか`と、この`formタグの`onSubmit`の処理を記述しているか`は**必須**です。

## `ref`ではなく`inputRef`を使っているか
ここは僕が特にハマった部分で、この記事を書くきっかけになったところです。

Bootstrapや、普通のinputでrefを使う場合、`ref={〇〇Ref}`の様にinputやForm.Controlに書けばいいのですが、Material UIの場合は違います。

Material UIのTextFieldでrefを使う場合は、`inputRef`と言う特別な物を使わなければ動作しません。

ここは意外と引っかかる人もいるかと思います。refを使っているかたは要チェックポイントです‼️

## `value`を使っているか
TextFieldへの入力した値の取得をrefを使って行っていない場合は、`value={}`を使うかと思いますが、意外と書き忘れることが多いものかもしれません。

普通に入力値をstateで保持してsubmitしたり、onChangeメソッドにuseCallbackの関数を入れて、入力を検知しつつvalueにstateを入れてそのstateをsubmitするなどをします。

要するに、(inputRefを使っている場合を除いて)`これがないと入力した値が送信できません`と言うことです。

## submit用のbuttonを配置しているか(`type="submit"`の記述はあるか)
これはつまり、`<button type="submit"></button>`があるかどうかと言うことです。

当たり前ですが、ボタンを押しても、それがただのボタン(submitの記述がない)であればonSubmitが動きません。そうなると値を送信できません。

「UIや動作に問題はないけど、なぜか値だけ送れてない」と言う場合は、この`type="submit"`があるかを確認してみてください。

## 最後に
いかがだったでしょうか？今回は、**React+Material UIのformがうまく動作しない場合のチェックポイント**を解説してきました。

書くチェックポイントを試すときは、`console,log()`で確認するといいと思います😃

もし、今回のチェックポイント以外にもチェックすべきところがあるよと言う場合はコメントにて教えてください🙇‍♂️

## 参考
[MATERIAL-UI](https://material-ui.com/ja/)

[Material-UIでrefを使う](https://dackdive.hateblo.jp/entry/2016/11/25/100000)
【bash】検索したファイルを別のコマンドの引数にして実行する

**xargs**コマンドを使う。
このコマンドを使えば、あるコマンドの結果を次のコマンドの引数に渡すことができる。

## ユースケース
* **ディレクトリ内のファイルを検索し、そのファイルを削除したい**

具体的にはこんなディレクトリがあって、sampleという名前を含むファイルだけ削除したいとする。

```
├── hoge.md
├── sample1.txt
├── sample2.txt
└── sample3.txt
```
その場合下記のコマンドで実現できる。

```
## findコマンドを使った場合
find . -name "*sample*" | xargs rm -rf

## lsとgrepコマンドを使った場合
ls | grep sample | xargs rm -rf

```

結果はこうなる。

```
└── hoge.md
```

以上です。
Blenderのエンジニアっぽい使い方: Driverという機能

#はじめに
皆さんこんにちは。この記事は[KLab 2020 Advent Calendar](https://qiita.com/advent-calendar/2020/klab)の22日目になります。  
ゲーム開発において普段コードを書く仕事を担当しているエンジニアであっても何らかのDCCツールを使えるとテスト用３Dモデルが欲しい時に便利です。
私はBlenderを愛用していまして、昨今のテレワークの状況下でもライセンスの問題などで困ることなく導入もスムーズかと思います。
今回はBlenderに搭載されているDriverという機能について紹介します。Driverはコーディングに似た側面があるのでエンジニアにとっても楽しめるものだと思います。

#Driverとは
３Dのアセットを作っていくうえで、位置/角度/スケールといったTransform情報やマテリアルの色を決定するパラメータなどを直接手で入力するのではなく、数式を使った特定の条件で動かしたいといったシチュエーションで活躍するのがDriverです。  

#Driverの使い方
以下の画像のようにSuzanneオブジェクトとArrowオブジェクトがシーンに配置されています。ArrowはX軸に対して平行に動かす想定です。その座標を利用してSuzanneのRotationZの値を変化させて回転するといったDriverを作っていきましょう。
![Capture01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872349/4f2a1d2c-59c6-b42c-7e5c-3fcb9398b1a8.png)

まずDriverを作成するには数式によって値を決定したいもの（今回で言えばSuzanneのRotationZ）の上で右クリックしてAdd Driverを選択します。
![Capture02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872349/5b044422-747b-7909-5cbf-ed15145ae2f1.png)
するとRotationZの欄が紫色になりますので再度右クリックでOpen Driver Editorを選択しましょう。
![Capture03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872349/134b43f7-1ab6-37d7-3654-9216de5218c6.png)
以下がDriverを設定する画面です。
青い部分が取得したい変数で、赤の部分がRotationZの値を決定するための数式です。
![Capture04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872349/28ba8107-dbd6-6538-a23f-d17b61edc6bb.png)
まずは変数部分の設定をしていきましょう。
変数名は任意の名前を付けることができますが、今回は1つだけなのでデフォルトのままvarで大丈夫です。
Arrowオブジェクトの座標を取得したいのでObjectの欄はArrowを選択します。
TypeをX LocationにすることでArrowオブジェクトのX座標を取得できます。
![Capture05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872349/ef459372-afe7-6736-ed11-253925de2814.png)
数式の部分は上で設定した変数varを利用して、Arrowの移動量の2倍という式を作ります。(精度を上げたければ低い倍率、少ないArrowの移動で大きく動かしたければ高い倍率にします)
![Capture06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872349/a6f854ca-a8d6-c811-26a5-456b90aba95a.png)
これでSuzanの回転をArrowで制御できるようになりました！！
![Capture07.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872349/f5864778-2d38-4c7e-af88-8b0042ec3da8.gif)


#終わりに
今回はわかりやすく説明するためにシンプルな例で紹介しますが、実践的にはRigを組むときなどに重宝します。 
ボーンのIKコンストレイントのInfluence値をDriverでコントロールするとIK/FKを切り替えるスイッチを作ることが可能です。
Driverには変数・数式といった概念が登場し複雑なプログラムを組むのに比べたら簡単なものとなりますが、コーディングの経験が３Dアセットを作る際にも活きてくることを知っていただければ嬉しいです。
Gitコマンド一覧

自分がよく使うGitのコマンドをまとめてみました。

| コマンド | 実行内容 |
|:--|:--|
| git init | リポジトリの作成(ローカル) |
| git clone GitのURL | リポジトリからソースをクローンする |
| git clone GitのURL ディレクトリ名 | 指定のディレクトリ名でリポジトリをクローンする |
| git clone -b ブランチ名 GitのURL | ブランチ名を指定してクローンする |
| git fetch | リモートのリポジトリから最新情報をローカルリポジトリに持ってくる |
| git rebase origin/master | masterの変更を取り込む |
| git rebase -i HEAD~まとめるコミット数 | コミットをまとめる<br>※1行目の「pick」以外はsに置き換えて保存する |
| git merge --no-ff 対象のブランチ名 | 指定したブランチを現在のブランチへマージを行う |
| git merge --abort | git pullでコンフリクトが発生した場合の取り消し |
| git reflog | HEAD の移動履歴を表示 |
| git reflog<br>git reset --hard HEAD@{マージ前のHEADの番号} | 成功したマージの取り消し |
| git pull | リモートのリポジトリから最新情報をローカルリポジトリに持ってきてマージを行う(fetchコマンド + mergeコマンド) |
| git branch | ローカルのブランチの一覧を表示する |
| git branch -r | リモートのブランチの一覧を表示する |
| git branch ブランチ名 | 現在のブランチから新しいブランチを作成する |
| git branch -d ブランチ名 | ブランチを削除する |
| git branch -m 古いブランチ名 新しいブランチ名 | ローカルのブランチ名を変える |
| git checkout ブランチ名 | ブランチ切り替える |
| git checkout ファイル名 | ファイルの変更を取り消す |
| git fetch <br> git checkout 対象のリモートブランチ名 | リモート上のブランチをローカルに持ってくる |
| git checkout -b 対象のリモートブランチ名 origin/ローカルでのブランチ名 | リモート上のブランチをローカルに持ってくる <br> ※ローカルでのブランチ名を変える場合 |
| git add . | カレントディレクトリ配下の変更ファイルを全てステージにあげる |
| git add 変更したファイルのパス | 指定したファイルをステージにあげる |
| git commit | エディタ上でコミットする |
| git commit -m "コメント" | コマンドライン上でコミットする |
| git commit --amend | コミット内容を変更する |
| git commit --amend　-m　"メッセージ" | 直前のコミットメッセージを修正する |
| git reset --hard HEAD^| 直前のコミットを取り消す |
| git push origin ブランチ名 | リモートへプッシュする |
| git push -f origin ブランチ名 | 強制的にリモートへプッシュする |
| git cherry-pick コミットID | 他のブランチのコミット内容を反映させる |
| git diff ファイル名 | 差分を確認する |
| git diff --color ファイル名 | 差分を色をつけて確認する |
| git diff ブランチ名A ブランチ名B | ブランチ間の差分を確認する |
| git diff ブランチ名A ブランチ名B --name-only | ブランチ間の差分を確認し、差分結果はファイル名のみにする |
| git stash [-u] | 現在の編集内容を一時的に保存する |
| git stash save "メッセージ" | 現在の編集内容をメッセージをつけて一時的に保存する |
| git stash list | 一時的に保存されているデータの一覧を表示する |
| git stash apply | 一時的に保存されているデータを反映させる(反映後も一時データは残る) |
| git stash pop | 一時的に保存されているデータを反映させる(反映後も一時データは残らない) |
| git stash drop | 直前の一時保存データを削除する |
| git submodule init <br> git submodule update | サブモジュールを追加する |
| git config --global user.name "ユーザ名" | ユーザ名を変更する |
| git config --global user.email "メールアドレス" | メールアドレスを変更する |
| git config --global color.ui true | Gitの出力に色をつける |
| git rm ファイル名 | ファイルを削除し、gitの管理対象から外す |
| git blame ファイル名 | 一行ごとに誰が編集したのかを確認 |
| git mv 移動元のファイル 移動先及び移動後のファイル名 | ファイルを移動し、同時にファイル名を変える |
| git rm --cached ファイルもしくはディレクトリ | gitの管理から外す(※基本的には.gitignoreを用いる) |
| git submodule add https://gitlab.com/hoge.git クローン先 | サブモジュールを追加する（認証情報なし） |
| git submodule add https://ユーザー:トークン@gitlab.com/hoge.git クローン先 | サブモジュールを追加する（認証情報あり） |
| git submodule deinit -f クローン先<br>rm -rf .git/クローン先<br>rm -rf クローン先 | サブモジュールを削除する |
| rm -rf .git | gitでのリポジトリの管理をやめる(※Gitコマンドではないが、一応) |
| rm -rf .git | gitでのリポジトリの管理をやめる(※Gitコマンドではないが、一応) |
readme.org

![mac os x-10.15.7](<https://img.shields.io/badge/macosx-10.15.7-brightgreen>) ![ruby-2.7.1p83](<https://img.shields.io/badge/ruby-2.7.1p83-brightgreen>) 

# qiita\_links

1.  [readme.org](https://qiita.com/syasin/private/5de24f8f147b806577f9)
2.  [第7回](https://qiita.com/syasin/private/6514e86a50db5ab8e4aa)
3.  [第8回](https://qiita.com/syasin/private/65d3b07c66160912267f)
4.  [第9回](https://qiita.com/syasin/private/b8f318edf21b1e5abbc7)
5.  [第10回](https://qiita.com/syasin/items/9e8a0bc296eb77f36206)
6.  [roman\_numerals](https://qiita.com/syasin/items/450629c1ff1e996cc774)
7.  [google\_recruit](https://qiita.com/syasin/items/cda603986e150c33feaa)

------
 - **source** ~/ghq/github.com/TeamNishitani/grad_members_20f/members/syasin-5d/README.org
[React-native]Inputタグのよく使うプロパティとvaliationメモ

##よく使うInputタグのプラパティについてまとめた。(レイアウトは適当)

```
  const [enteredValue, setEnteredValue] = useState('');
  const [selectedNumber, setSelectedNumber] = useState();

  const numberInputHandler = inputText => {
    setEnteredValue(inputText.replace(/[^0-9]/g, ''));  //0〜9以外を''に置換
  };

  const confirmInputHandler = () => {
    const chosenNumber = parseInt(enteredValue);
    if (Number.isNaN(chosenNumber) || chosenNumber <= 0 || chosenNumber > 99) {
      Alert.alert(
        'Invalid number!', 
        'Number has to be a number between 1 and 99.', 
        [{text: 'Okay', style: 'destructive', onPress: resetInputHandler }])
      return;
    }
    setSelectedNumber(parseInt(chosenNumber));
    setEnteredValue('');
    Keyboard.dismiss();   //キーボード非表示にする。
  };

  return (
    <View>
      <Input 
        style={styles.input} 
        blurOnSubmit                          //trueならsubmit時にぼやける
        autoCapitalize='none' 　　　           //自動大文字修正をキャンセル
        autoCorrect={false}                   //自動単語修正をキャンセル
        keyboardType="number-pad" 
        maxLength={2} 
        onChangeText={numberInputHandler}
        value={enteredValue}
      />
    </View>
    <Button title="Confirm" onPress={confirmInputHandler}  />
  );
```

以下プロパティの値

###autoCapitalize
characters: all characters.(全文字）
words: first letter of each word.（各語のイニシャルのみ）
sentences: first letter of each sentence (default).（文のイニシャルのみ)
none: don't auto capitalize anything.

###keyboardType#

default
number-pad
decimal-pad
numeric
email-address
phone-pad
【Vue.js】Vue.js+ cssで作る簡単なスライダー（カルーセル）


# 本記事の内容
　プラグインなどを使わず、Nuxt.js（Vue.js）とcss3だけでさくっとスライダーを作る記事です。シンプルな内容なので、Vue.jsと言わず素のJSなどでも似たような処理で作れると思います。

# 環境
- nuxt.js(2.14.3)
- css3

# 実装
``` ImageSlider.vue
<template>
  <div class="slider">
    <span v-for="(image, i) in imagePaths" :key="i">
      <img :class="{ show: currentImageId == i }" :src="image" />
    </span>
  </div>
</template>


<script>
export default {
  data() {
    return {
      currentImageId: 0,
      imagePaths: [
        './images1.jpg',
        './images2.jpg',
        './images3.jpg',
        './images4.jpg',
      ],
    }
  },
  mounted() { // 5秒ごとに次の画像に
    setInterval(() => {
      this.changeNextSlide()
    }, 5000)
  },
  methods: {
    changeNextSlide() { // 表示するcurrentの画像を変えていくため、加算していく
      if (this.currentImageId < this.imagePaths.length - 1) {
        this.currentImageId += 1
      } else {
        this.currentImageId = 0
      }
    },
  },
}
</script>
<style lang="scss" scoped>
.slider {
  width: 300px;
  position: relative;

  span {
    position: absolute;
  }

  span > img {
    width: 100%;
    opacity: 0;
    // ふわっと表示させるためのアニメーション
    transition: all 1s ease-in-out;

    // デフォルトではopacity: 0なので表示されない。
    // currentIndexのものだけopacity: 1にして表示する
    &.show {
      opacity: 1;
    }
  }
}
</style>
```

# ポイント
　単純なv-ifにするとDOMが消え、動作として違和感があるため、同じ場所に重ねて画像を表示して、opacityで非表示表示を切り替えています。

　あとはcaretをつけて、clickしたらcurrentImageIdを変更する処理などを入れれば、左右で任意に動かすカルーセルなども作れます。

# 最後に
　Vue.jsでカルーセルを使うとなれば、slick.jsやSwiperなど様々なライブラリはあります。
　勿論これらのライブラリはやれること（オプション）も多いですが、その分理解して扱うにはドキュメント読むのが大変だったり、ファイル容量も大きかったり、導入したら特定のブラウザやバージョンで動かなかったり、なんてこともあります。
　それらのライブラリに比べればシンプルでやれることも少ないですが、簡単な機能だけほしいときに、熟知していないライブラリを使うよりサクッと作っちゃうのもありじゃないかなと思います。
[MySQL]id一覧をカンマ区切りで取得したい

SQL文を作成する際に、コンマ区切りのidが欲しい時など。

### SQL

```sql
SELECT
    group_concat(id)
FROM
    order
WHERE
    created_at > '2020-10-01 00:00:00'
;
```

### 結果

```sql
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| group_concat(id)                                                                                                                                                                                                                                                                                                                                                                                                                       |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 16798554,16798555,16798556,16798557,16798558,16798559,16798560,16798561,16798562,16798563,16798564,16798565,16798566,16798567,16798568,16798569,16798570,16798571,16798572,16798573,16798574,16798575,16798576,16798577,16798578,16798579,16798580,16798581,16798582,16798583,16798584,16798585,16798586,16798587,16798588,16798589,16798590,16798591,16798592,16798593,16798594,16798595,16798596,16798597,16798598,16798599,16798600 |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
```
マルチスケールシミュレーション特論：第 12 回をまとめてみた

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


# はじめに

年内最期の授業


## 概念


### semi lattice

セミラティス（semi lattice）とは、[クリストファー・アレグザンダー](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%83%BC%E3%83%BB%E3%82%A2%E3%83%AC%E3%82%B0%E3%82%B6%E3%83%B3%E3%83%80%E3%83%BC)が考案したシステム・モデルのこと。網状交差図式とも言われる。元は数学用語。

哲学者の市川浩は『<身>の構造』所収の「<身>の構造とその生成モデル」なる論考の中で、セミ・ラティスをツリーとの対比で次のように説明している。「ツリーが、二つの集合が全く重ならないか一方が他方に完全に含まれているという形式をとるのに対して、セミ・ラティスは互いに重なりあった集合を含んでいる、という点が特徴になっている

-   定義式

```
semi_lattice = coc + chunking + memo
```

変数それぞれの概念について

-   coc
    
    概念としての知識の構造
    
    [より具体的なお話](https://qiita.com/daddygongon/items/8149eba25f8fd4d6d2aa)

-   chunking
    
    具体的な知識をどう PC 上に構築していくか
    
    [より具体的なお話](https://qiita.com/daddygongon/items/a53d806cf493b6a56dab)


## 内言語と外言語

言語には 2 種類あり以下でそれぞれの例を下記に記す

-   内言語映像，ポンチ絵
-   外言語言葉


# 引用文献

-   <https://qiita.com/daddygongon/items/8149eba25f8fd4d6d2aa>
-   <https://qiita.com/daddygongon/items/a53d806cf493b6a56dab>
-   <https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%9F%E3%83%A9%E3%83%86%E3%82%A3%E3%82%B9>
-   <https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%83%BC%E3%83%BB%E3%82%A2%E3%83%AC%E3%82%B0%E3%82%B6%E3%83%B3%E3%83%80%E3%83%BC>



------
 - **source** ~/Downloads/git/grad_members_20f/members/taiseiyo/memos/class12.org
[MySQL]1対多のテーブル構造でgorup byで取得する時に最新のレコードをJOINしたい

### テーブル構造

**order_settlementテーブル**

|  id  |  order_id  | settlement_id | created_at |
| ---- | ---- | ---- | ---- |
|  1  |  1  | 1 | 2020-12-01 12:22:54 |
|  2  |  1 | 2 | 2020-12-02 20:15:46 |
|  3  |  2 | 3 | 2020-12-02 23:22:51 |

**orderテーブル**

|  id  |  order_number  |
| ---- | ---- |
|  1  |  A2012020001  |
|  2  |  A2012020002  |

**settlementテーブル**

|  id  |  amount_jpy |
| ---- | ---- |
|  1  | 200 |
|  2  | 300 |
|  3  | 500 |

1つの注文番号(order)に対して、複数の決済情報(order_settlement)が存在する状態。最新の決済情報をJOINして注文情報と一緒に取得したい場合。

### 取得したい形

| order_number | settlement_id | amount_jpy | created_at |
| ---- | ---- | ---- | ---- |
|  A2012020001  |  2  | 300 | 2020-12-02 20:15:46 |
|  A2012020002  |  3 | 500 | 2020-12-02 23:22:51 |

### SQL

where句でidを指定する際にサブクエリを使用し、同order_idを持つorder_settlementレコードの中で、idが一番大きい値が取得されるよう指定している。maxは指定列の最大値を求める関数。

```sql
SELECT
    o.order_number,
    os.settlement_id,
    s.amount_jpy,
    os.created_at
FROM
    order_settlement os
    INNER JOIN
        settlement s
    ON  s.id = os.settlement_id
    INNER JOIN
        order o
    ON  o.id = os.order_id
WHERE
    os.id IN(
        SELECT
            MAX(id)
        FROM
            order_settlement os2
        WHERE
            os2.order_id = o.id
    )
GROUP BY
    o.id
;
```
【Swift】環境構築の際にmake: npm: No such file or directory のエラーが出る

## はじめに

プロジェクトの環境構築をする際に

```
$ make bootstrap
```

を叩いてBrew、Gem系のツール、Rubyなどをまとめて導入することがあると思います。
今回はその際に実行されたNPMでコケてしまった時の原因と対処法について書きます。

## 起きたエラー
make bootstrapを実行した際に下記のようなエラーが出ました。

```
npm ci
make: npm: No such file or directory
make: *** [renew-npm] Error 1
```
具体的にどこでエラーが起きているのか知りたくnpm installをすると

```
$ npm install
```

```
zsh: command not found: npm
```

こうなってしまいます。
どうやらそもそもnode.jsが入ってないことが原因みたいです。

## 対処法

node.jsをダウンロードします。

#### macOS Installer (.pkg)をダウンロード
https://nodejs.org/ja/download/

こちらのをダウンロードしてzipを開いた後make bootstrapを実装すると、無事成功します！
【Phalcon】ディレクトリを新規作成したときにすること

PlaconでFormsディレクトリを追加して、Controllerで呼び出してみるがnotdoundになって読み込んでくれなかった。

調べたところloader.phpのregisterNamespacesに登録してあげないといけない。
https://docs.phalcon.io/4.0/ja-jp/tutorial-invo#autoloader



```php
<?php
$loader = new \Phalcon\Loader();


$loader->registerNamespaces(
    [
        
        'hoge\Forms' => APP_PATH. '/Forms/',
        
    ]
);

$loader->register();

```

autoloadを理解していれば、すぐに気がつけそうだったのでこれを機に学習した。
[autoloadの仕組み](https://qiita.com/atwata/items/5ba72d3d881a81227c2a)
.NET 5.0 WinForms での既定のアプリケーション設定ファイル

# アプリケーション設定ファイルについて
WinFormsでアプリを作成する際に重宝する「アプリケーション設定ファイル」というのがあります。こちらを使うと、ユーザーに設定してもらうカスタム可能な設定値を簡単に保存と参照が可能になります。
デフォルトでユーザーフォルダーに作成されているので、それほど気にすることはないのですが、バージョンアップ毎に設定ファイルを作ってくれるので、長期で使用するアプリの場合は、掃除機能やアンインストール時に削除することを意識できるとよいとは思います。まぁ気になる方は、
「C:\Users\(Name)\AppData\Local」を確認して、自分で綺麗にするのもよいかもですが。
# 既定のアプリケーション設定ファイルの作成の仕方
さて、そんな便利なアプリケーション設定ファイルですが、 [ My Project ] から既定の設定ファイルを操作しようとすると、
「このプロジェクトには既定の設定ファイルが含まれていません。ファイルを作成するには、ここをクリックしてください。」
とメッセージが表示されていて、クリックすると
「指定されたファイルが見つかりません。～」
と、エラーします(;^_^A
![01_NotFound.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905868/9b7bc6df-43a2-db71-a9eb-aaa95806dfc7.png)
ですので、既定の設定ファイルを作成したい場合は、メニューから新規で作成する必要があります。
[ 新しい項目(W)... ] か [ Ctrl+Shift+A ]
![02_AddNewItem.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905868/5f56709f-bf2e-c1d9-cec5-e0d9feb21359.png)
[ 全般 ] [ 設定ファイル ] [ 名前：Settings.settings ]
![03_AddSettings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905868/76efc27a-49a0-acfd-77a1-ba8f896ff9e2.png)
追加すると、既定の設定ファイルとして扱われ、[ My Project ] からも可能で、Myの世界にも出現してくれます。
![04_MyProjectSettings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905868/963cecdf-97d2-180b-3565-8e80107874f7.png)
![05_MySettings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905868/a70ead5c-f777-218a-f7a9-c150a5e25aa4.png)
# おわりに
このアプリケーション設定ファイル、色々と活用しているので、[ Upgrade ] や 壊れた際のプログラム対処の仕方とか記載してみようかなぁ・・・なんて思っていたりたり。。。
PyInstallerのオプションを短くする。

こちらのページで調べる機会があったので気づきました。
https://pyinstaller.readthedocs.io/en/stable/usage.html#options

実は下の２行、どちら実行しても同じ結果です。

```
pyinstaller nalhodio.py --onefile --noconsole
pyinstaller nalhodio.py -F -w
```

`-w`のほうはwindowed、つまりGUIありって意味みたいです。tkinterとかそうですね。

慣れないうちは長く書いたほうがしっくりきますが、慣れてきたら短くしたいですね。
でも、記事として書く場合は長いほうで書くと親切だと思います。

コンソール表示ありのexeを作ると、たまに誤操作で止まるときがあるので怖い。。。
意図的に止める場合はタスクマネージャーを使えばいいですもんね。
ちゃんと動作してるのを確認するのもログ吐かせればいいですし。

## ほかに使えそうなオプション
使ったことないですけど、使うこともあるかもしれないと感じたのが以下のオプションです。
`--version-file FILE`
`--manifest <FILE or XML>`
`--icon=test.ico`