OmniAICreator/Qiita-1.07M huggingface dataset:
メモリリークテスト

#メモリリークしているかテストするのが容易なライブラリー

https://github.com/tarunon/XCTAssertNoLeak

# XCTAssertNoLeak
[![Build Status](https://travis-ci.org/tarunon/XCTAssertNoLeak.svg?branch=master)](https://travis-ci.org/tarunon/XCTAssertNoLeak)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
![pod](https://img.shields.io/cocoapods/v/XCTAssertNoLeak.svg)

Provides memory leak test cases for Swift.

![](https://github.com/tarunon/XCTAssertNoLeak/blob/master/Readme/screenshot.png?raw=true)

Found memory leak objects from traverse object tree using Mirror.

# Support version
|Swift|Support|Note|
|-|-|-|
|5.0|○|-|
|4.2 (Xcode 10.2)|○|-|
|4.2 (Xcode 10.1)|×|[SR-8878](https://bugs.swift.org/browse/SR-8878)|
|4.1|○|-|

# Instration

## Carthage
```rb
github "tarunon/XCTAssertNoLeak"
```

## CocoaPods
Write it below Pods for testing.
```rb
pod 'XCTAssertNoLeak'
```
ファイル同期するときは向きに注意

[さばぴょい伝説](https://qiita.com/tosiooooooo/items/93fc0cff06c496866f73)と似たような話なのですが、ファイル同期のコマンドとかアプリとか使うときは、**同期の向き**に気をつけましょうねという話。

# 何が起きたのか

社内全体で使っていたWindows Serverのファイルサーバがあり、仕様書などチームで共有するようなファイルは全てそこに入れていたのですが、ネットワークの問題なのかサーバスペックの問題なのか、そこからのダウンロードが遅くてみんなストレスがたまっていました。

そこで業を煮やしたある社員が「せや！自動でファイル同期するフリーウェアを自分のPCに入れて、自分のところに常にダウンロードしておけば、ファイルサーバいちいち見に行かなくても済むで！」と思い立ち、窓の杜とかに転がっているファイル同期フリーウェアをインストールし実行したのですが・・・。

**ファイルサーバのファイルが全て消えました**

そう、**「ファイルサーバのディレクトリ -> マイPCのディレクトリ」**の同期をすべきところを、**「マイPCのディレクトリ(空) -> ファイルサーバのディレクトリ」**の同期をしてしまったのです。

ファイルサーバのバックアップも取っていなかったので、[さばぴょい伝説](https://qiita.com/tosiooooooo/items/93fc0cff06c496866f73)と同様に各自のPCに保存されている資料をかき集めることになりました・・・。

# どうすれば良かったのか

- 同期実行前に同期の内容を確認する
    - rsyncならdryrunオプションで事前に同期内容の確認ができます
- 削除の同期はしない
    - rsyncならdeleteオプションをつけない限りは削除の同期をしません
- 初めて使うフリーウェアとかコマンドは事前にテストする
    - テスト用のディレクトリを二つ作って適当なファイルを置いてみたりして
- バックアップはとりましょう
    - 当然ですが、おろそかになりがち
vscode ver1.6.3でsvnの拡張機能が使えなくなった

私の職場ではシステムのバージョン管理にTortoiseSVNを使用しているのだが、今日仕事中それが使えなくなっていることに気づいた。

そしてvscodeの右下を見てみると、何やらエラーが
````Missing dependency: jschardet svn
````
昨日今日で何かインストールしたということもないし、なんだろうと調べていると、vscodeのバージョンアップが前日にあったことが判明。

他に原因が見つからなかったので、vscodeのバージョンを下げてみることに。
すると予想通り上記エラーは発生せず。
めでたしめでたし^^
slickのパラメータを使って正方形のスライドをつくる

こんにちは、ウェブエンジニアのmasakichiです。
需要があるかわからない程度のtipsなどを書いています。
今回はslick.jsです。

# なにが書いてある？
slick.jsといえば多機能なスライダーを簡単に実装できるjQueryベースのプラグインです。
そんなslick.jsを使いつつ、スライド画像を正方形に整える方法を書きました。

相当特殊な要件でなければ、とりあえずslick使っとけばなんとかなるので、普段から愛用しています。
jQuery依存から脱却すべし！とか言わないでください

# さっそく完成形

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="mdBJQzB" data-user="masakichi" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/masakichi/pen/mdBJQzB">
  slick-item square</a> by masakichi (<a href="https://codepen.io/masakichi">@masakichi</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

こんな感じです。
スライドする画像がしっかりと正方形になっています。猫がかわいいです。

# なにが大変だったのか
slickを使うにあたって、まずはHTMLから記述すると思います。今回は下記のような一般的なHTMLを用意しました。
`.slide_item`がスライド要素となります。

```html:HTML
<div class="slide">
    <div class="slide_item">
      <img src="hoge/img01.jpg" alt="neko01">
    </div>
    <div class="slide_item">
      <img src="hoge/img02.jpg" alt="neko02">
    </div>
    <div class="slide_item">
      <img src="hoge/img03.jpg" alt="neko03">
    </div>
    <div class="slide_item">
      <img src="hoge/img04.jpg" alt="neko04">
    </div>
  </div>
```

最初は`.slide_item`に`padding-top:１００％;`などを指定すればいけるのでは？と思いました。

しかし、slickが生成する`.slide_item`の親要素`.slick-track`にwidthが自動スタイリングされてしまいます。
![slick_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/5ddd8880-c239-5605-5c93-b105a1f1331f.png)
その関係で、スライドのアイテム要素に`padding-top:１００％;`などを指定しても、うまく正方形になってくれませんでした。

そこで、うまいことスライド要素の横幅を取得して、そのまま高さとしてスタイリングすることはできないかなと模索してみました。

#スライド要素`.slide_item`の横幅を取得する
JavaScript側で取得します。下記サンプルコードです。

**【要点】**

1. `.slick-slide`の横幅を取得するには`setPosition`というslickで用意されているイベントを利用します
2. setPositionを使うと、ロード時やリサイズ時などに毎回イベントが発火されるようになります。
3. setPositionには`event,slick`の2つのパラメータが渡せるので、これらをsetCSSという関数に渡します。
4. パラメータslickから、`.slick-slide`の横幅が取得できるので、その値を`padding-top`としてスタイリングする

```js
class Slick {
    constructor(){
        this.$view = $('.slide');
        this.runSlick();
    }
    runSlick(){
        this.$view.slick({
            arrows: false,
            autoplay: true
        })
        //slickの再計算時にイベント発火、setCSS関数を呼び出す
        .on('setPosition',(e,slick)=>{this.setCSS(e,slick)});
    }
    setCSS(e,slick){
        //引数slickからスライド要素の横幅が取得可能
        let slideWidth = slick.listWidth;
        this.$view.find('.slide_item').css('padding-top',slideWidth+"px");
    }
}

new Slick();
```

#CSSでobject-fitで正方形にスタイリングする

JavaScriptでpaddingのスタイリングが適用されているので、下記のようにCSSを記述します。

```css:SCSS
.slide{
    max-width: 200px;
    margin: 0 auto;
    &_item{
        position: relative;
        img{
            position: absolute;
            object-fit: cover;
            width: 100%;
            height: 100%;
        }
    }
}
```

これで無事に正方形の完成です。

# 参考リンク先
[Slickドキュメント](https://github.com/kenwheeler/slick/)
Qiitaの登録時にメールアドレス認証でつまづく。

Qiitaに登録したら一発目でメールアドレス認証ができず、なんどもメールボックスとブラウザを行き来することに。
しかも最初に連絡用メアドを打ち間違えていたので厄介でした。

解決法ですが、こちらの記事にあるように過去のメールのリンクのどれかで止まっているので、そのリンクを踏んだうえで再度認証メールを依頼すればOKです。
（いったん”メールアドレスが見つかりません”のメッセージを出させる必要があります。）

https://qiita.com/Teba_eleven/items/a042569ebdba2ff62486
【Harmoware-VIS】移動体の方向

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#移動体の方向

Harmoware-VIS で移動を可視化するアイコンの表示方向を指定することが出来ます。
移動体データの表示方向は２点間の位置から Harmoware-VIS で自動計算されます。
[`movedData`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#moveddata-object-array) 内の自動計算の結果を設定する予約の Key名は「`direction`」です。
この「`direction`」は北をゼロとして角度で自動計算します。

アイコンの方向をカスタマイズしたい場合は、予約 Key名の「`direction`」以外で指定してください。

方向の Key名を `orientation` とした場合の移動データ設定

```json
[ //移動体データの配列
    {
        "operation": [
                {"elapsedtime": 99999,
                "position": [999.9999, 999.9999, 999.9999],
                "orientation": 999, //アイコンの表示方向
                ・・・ //その他の情報
                },・・・
        ] //移動経路データ配列
    },・・・
]
```

また、 [`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) の props でアクセサを変更する必要があります。
[`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) の方向データのアクセサは `getOrientation` で、デフォルト値を以下に示します。

```javascript
getOrientation: x => x.direction ? [0,(x.direction * -1),90] : [0,0,90]
```

オブジェクトの向きは、オイラー角[ピッチ、ヨー、ロール]を度数で表した vec3 で定義されています。
このアクセサの変更例を以下に示します。

```javascript
getOrientation: x => x.orientation ? [0,(x.orientation * -1),90] : [0,0,90]
```

アイコン自体の方向もあるのでこの限りではないです。
適切なアクセサを設定してください。
CompositeパターンをSwiftで書いてみる

## はじめに
本記事では[GoFのデザインパターン](https://qiita.com/i-tanaka730/items/c63c6c22abd1477e0ba0)の一種であるCompositeパターンをSwiftで書いてみる内容となっています．

## Compositeパターンとは
Compositeは日本語で「複合物」などの意味がある．
Compositeパターンのコンセプトは「容器と中身を同一視」して再帰的な処理を容易にすること．

わかりやすい例としてよく挙げられるのがファイルシステム
フォルダを削除するときにその配下にあるものファイルやフォルダを同一視して削除できたほうが都合がいい．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477548/b3b5963f-2d94-958b-4959-92c6c7162e68.png">

### クラス図
ファイルシステムを例として作成したクラス図です．　
ディレクトリとファイルのクラスに加えてそれぞれに共通する削除メソッドを持ったEntryというインターフェースを定義しています．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477548/3684901a-e649-b1c9-0580-4146c561617e.png">

## Swiftで書いてみる
### Entry
```swift
protocol Entry {
    func remove()
}
```
Entryはprotocolで定義します．
### File
```swift
struct File: Entry {
    private var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func remove() {
        print("\(self.name)を削除しました．")
    }
}
```
Fileクラス　Entryプロトコルに準拠しています．
### Directory
```swift
struct Directory: Entry {
    private var name: String
    private var directories: [Entry] = []
    
    init(name: String) {
        self.name = name
    }
    
    mutating func add(entry: Entry) {
        self.directories.append(entry)
    }
    
    func remove() {
        for dir in self.directories {
            dir.remove()
        }
        print("\(self.name)を削除しました．")
    }
}
```
Directoryクラス　こちらも同様にEntryプロトコルに準拠しています．
### メイン
```swift
// ファイルを作成
let file1 = File(name: "file1")
let file2 = File(name: "file2")
let file3 = File(name: "file3")
let file4 = File(name: "file4")

// フォルダ1を作成
var dir1 = Directory(name: "dir1")
// ファイル1と2をフォルダ1に入れる
dir1.add(entry: file1)
dir1.add(entry: file2)

var dir2 = Directory(name: "dir2")
dir2.add(entry: dir1)
dir2.add(entry: file3)
dir2.add(entry: file4)

dir2.remove()
```

### 実行結果
```
file1を削除しました．
file2を削除しました．
dir1を削除しました．
file3を削除しました．
file4を削除しました．
dir2を削除しました．
```

## まとめ
このパターンのメリットとしてはオブジェクトが共通のインターフェースを持っていることで実行側で中身を意識することなく使えるところだと思います．
また，新たにオブジェクトを追加する必要が出た場合も容易に実装できそうですね．

以下，活用例としてCompositeパターンを使ったValidationを実装した記事を見つけたので載せておきます．
[【iOS】アプリクライアント側での文字入力のValidation機構について（UITextField, UITextViewなど)
](https://iganin.hatenablog.com/entry/2019/09/23/171221)

もっと色んなデザインパターンを学んで活用していきたいですね〜
## 参考
[TECHSCORE Compositeパターン](https://www.techscore.com/tech/DesignPattern/Composite.html/)
[デザインパターン ~Composite~](https://qiita.com/i-tanaka730/items/577ca124f05bfe172248)
【Harmoware-VIS】移動体アイコンを複数レイヤーで表示

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#移動体アイコンを複数レイヤーで表示

Harmoware-VIS で移動体を表示する [`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) は、Harmoware-VIS で移動体データが複数管理できないため、重複させることが出来ません。
その問題を解決するため、一つの移動体データ内で移動体の type を識別することで、 [`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) 内で複数のアイコンレイヤーを重ねることが出来ます。

移動体データの type 定義の例

```json
[ //移動体データの配列
    {"type": "train", //この移動体のtypeをtrainと定義
        "operation": [・・・・・・] //移動経路データ配列
    },
    {"type": "bus", //この移動体のtypeをbusと定義
        "operation": [・・・・・・] //移動経路データ配列
    },
    {"type": "walker", //この移動体のtypeをwalkerと定義
        "operation": [・・・・・・] //移動経路データ配列
    },・・・・・・
]
```

[`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) のコード例

```javascript
new MovesLayer({
    routePaths, movedData, movesbase, clickedObject, actions,
    iconDesignations:[ //ここでtype毎に使用するレイヤーを指定する。
        {type:'train', layer:'SimpleMesh'},
        {type:'bus', layer:'Scenegraph'},
        {type:'walker', layer:'Scatterplot'},],
})
```

上の例ではtype毎のレイヤー指定のみですが、色やサイズ、３Ｄアイコンデータなどもtype毎にprops設定できます。
詳細は[`MovesLayer`のリファレンス](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer)の `iconDesignations` の項目を参照してください。

移動体データでtypeの設定をしていないオブジェクトは [`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer) 全体へのprops設定値を適用します。
highcharts : 外部要素からマウスオーバーを着火する

<p class="codepen" data-height="400" data-default-tab="result" data-slug-hash="BawzWgx" data-user="KazuyoshiGoto" style="height: 400px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/KazuyoshiGoto/pen/BawzWgx">
  highcharts : 外部要素からマウスオーバーを有効にする</a> by Kazuyoshi Goto (<a href="https://codepen.io/KazuyoshiGoto">@KazuyoshiGoto</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

highcharts 標準で出力される凡例ではなく、グラフ外部のHTML要素からグラフのマウスオーバーを着火させたかったので試した。

## HTML

凡例を構成する表のHTMLは、大まかに以下のような形。

```html
<table class="legend-table">
  <tr class="legend-row" data-num="0"></tr>
  〜
  <tr class="legend-row" data-num="5"></tr>
</table>
```

行に`legend-row`クラスと`data-num`属性を付与しているのが要。
（JSからの参照の仕方次第ではlegend-rowは付与しなくても良いと思えるが、可読性の面で付与した）

## JS

HTML側からhighcartsのマウスオーバーを制御する処理は以下。

```javascript
document.addEventListener('DOMContentLoaded', function () {
  //※highcarts描画の処理は省略
  //`chart`にチャート情報が入っている

  //以下よりマウスオーバー用の処理
  const rows = document.querySelectorAll('.legend-row');
  rows.forEach(function (row) {
      var num = row.dataset.num;
      row.addEventListener('mouseover', function() {
          chart.series[0].data.forEach(function(data) {
              data.setState('inactive');
          });
          chart.series[0].data[num].setState('hover');
          chart.tooltip.refresh(chart.series[0].points[num]);
      });
      row.addEventListener('mouseleave', function() {
          chart.series[0].data.forEach(function(data) {
              data.setState();
          });
          chart.tooltip.hide();
      });
  });
});
```

- まず`legend-row`一式を`rows`に取得
- `rows`の中身を`forEach`で回す。
- マウスオーバーしたら…
    - まず全データの`setState`を`inactive`にする（半透明化）
    - 次に、マウスオーバーしている`data-num`に該当するデータの`setState`をhoverにする
    - 同様に`tooltip`も表示する
- マウスが外れたら、全データの`setState`と`tooltip`を消す
【Harmoware-VIS】独自のActionを追加する

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#独自のActionを追加する

Harmoware-VIS を使用したアプリで独自の`Action（reducer）`をマージしたい場合は以下のようにします。
React.jsの作法と同じです

```index.js
import { render } from 'react-dom';
import { createStore } from 'redux';
import { Provider } from 'react-redux';
import { getCombinedReducer } from 'harmoware-vis';
import * as React from 'react';
import App from './containers';
import reducer from './reducers'; //独自のreducerをimport

// importした独自のreducerを連結したstoreを生成
const store = createStore(getCombinedReducer({reducer}));

render(
  <Provider store={store}>
      <App />
  </Provider>,
  document.getElementById('app')
);
```

```app.js
import { connectToHarmowareVis } from 'harmoware-vis';
import * as moreActions from '../actions'; //独自のactionsをimport

class App extends Container {
・・・
}
// importした独自のactionsを接続
export default connectToHarmowareVis(App, moreActions);
```
2021.12.09現在→Ubuntu 20.04 LTS にて node-red 最新環境(現時点で2.1)を構築する

# 参考サイト
https://nodered.org/docs/getting-started/local

https://nodered.org/docs/faq/starting-node-red-on-boot

https://nodered.org/docs/user-guide/runtime/securing-node-red

# 目標

※ ローカル環境での利用が前提なので注意すること

・node-red の最新環境(現時点で2.1)を Ubuntu 20.04 LTS にインストールする
・node-red を自動起動できるようにする。
・ユーザー認証機能をつける

# インストール

事前に npm をインストールしておくこと。

```
sudo apt update
sudo apt install npm
など ... 
```

node-red 最新版のインストールは以下のコマンドで実行できる

```
sudo npm install -g --unsafe-perm node-red
```

# 自動起動

PM2 を利用するのでインストールする。

```
sudo npm install -g pm2
```

node-red のパスを確認する

```
which node-red
```

私の環境では、
```/usr/local/bin/node-red```
だった。

PM2 にて、node-red を起動する。

```
pm2 start /usr/bin/node-red -- -v
```


自動起動の準備

```
pm2 save
pm2 startup
```

実行すると、

```
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env  ... 
```
のような内容が表示されるので、command: より後の部分をターミナルにコピペして実行すると自動起動が登録される。
（PM2 の状況は service コマンドで確認＆制御できる）

OS を再起動して自動起動されることを確認する。

# ユーザー認証

settings.js ファイルを編集する。

私の環境では、
```~/.node-red/settings.js``` 
に存在していた。

ファイルの中に、以下のようなコメント部分がある。

```
    //adminAuth: {
    //    type: "credentials",
    //    users: [{
    //        username: "admin",
    //        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
    //        permissions: "*"
    //    }]
    //},
```

上記を参考にしてユーザ認証を行うように設定する。

```
adminAuth: {
    type: "credentials",
    users: [
        {
            username: "admin",
            password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
            permissions: "*"
        },
        {
            username: "kosayan",
            password: "$2b$08$y.PoMnrvECs6TO5qudxNIOHZQ7cszX7xu75Or/23CZDJVVmF.hiO2",
            permissions: "read"
        }
    ]
}
```

password には ハッシュ値を設定する必要がある。
ハッシュパスワードの生成は以下のコマンドで行う。

```
node-red admin hash-pw
```
上記を実行するとパスワードの入力を促されるので、入力すると、
ハッシュ値を生成してくれる。
その値を settings.js の password に記述すれば良い。


認証機能はいろいろあるので詳細は公式サイトを確認してほしい。
OAuth/OpenID based authentication とかもある。

https://nodered.org/docs/user-guide/runtime/securing-node-red


* * *
以上
* * *
【Harmoware-VIS】OBJフォーマットのデータをアイコンに設定

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#OBJフォーマットのデータをアイコンに設定

３ＤアイコンとしてＯＢＪフォーマットのデータを使用する場合の手順

[`@loaders.gl/obj`](https://www.npmjs.com/package/@loaders.gl/obj)をインストールします。

```console
npm i @loaders.gl/obj
```

[`@loaders.gl/obj`](https://www.npmjs.com/package/@loaders.gl/obj)の`OBJLoader`を`registerLoaders`で登録します。

```javascript
import {registerLoaders} from '@loaders.gl/core';
import {OBJLoader} from '@loaders.gl/obj';
registerLoaders([OBJLoader]);
```

[`MovesLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#moveslayer)のpropsで以下の設定にします。

```javascript
new MovesLayer({
    iconChange: true,
    iconCubeType: 0,
    mesh:'objフォーマットデータのパス'
    ...
    })
```

[`DepotsLayer`](https://qiita.com/ucl_Harmoware_VIS/items/cc65d90488d2f0d66ae1#depotslayer)も上記と同じ

ＯＢＪフォーマット以外のデータを使用したい場合は`loaders.gl`のドキュメントを参照してください。

https://loaders.gl/docs
Microsoft IgniteでAzure資格の勉強ができそうなリンク集

#はじめに
　先月、Azureの資格の勉強になるかもと思い、Microsoft Igniteに参加してみました。その結果、思った以上にAzureの勉強になりそうだったのでシェアがてらリンクを残しておこうと思います。
　Microsoft Ignite自体は11月の上旬に終了していますが、Microsoft Igniteで配信されていた内容は動画として残っているようです。主要なものはニュースとしてあがっていますが、それ以外はMy Igniteのページから見ないといけないようです。
　Microsoft Ignite Cloud Skills ChallengeもChallengeとしては11月いっぱいで終了したものの、学習できるモジュール自体は残っているのでとりあえずリンクだけでも残そうかと思います。

#Microsoft Ignite
　My Igniteのページ。

https://myignite.microsoft.com/home

<font color="red">※2021年度のMicrosoft Igniteは2021年11月4日に終了しています。</font>

---

　Microsoft Igniteのニュースページ。

https://news.microsoft.com/november-2021-ignite/

---

　一個ずつAzure関係のセッションをピックアップしようとしたけどパッと調べただけでも167件あったので断念しました。
　とりあえずセッション一覧に"Azure"で検索かけた検索結果を代わりに載せておきます。

https://myignite.microsoft.com/sessions?q=azure&s=%257B%2522name%2522%253A%2522translate.refine.label.sort.relevance%2522%252C%2522type%2522%253A0%257D&t=%257B%2522from%2522%253A%25222021-11-03T00%253A00%253A00%252B09%253A00%2522%252C%2522to%2522%253A%25222021-11-04T23%253A59%253A00%252B09%253A00%2522%257D

#Microsoft Ignite Cloud Skills Challenge

　Microsoft Ignite Cloud Skills Challengeトップ。

https://csc.docs.microsoft.com/ignite/registration/fall2021

<font color="red">※Microsoft Ignite Cloud Skills Challengeは2021年12月1日に終了しています。</font>

---
　以下Cloud Skills Challengeの中からAzure関係のみピックアップ。

　■ Azure Admin Challenge

https://docs.microsoft.com/ja-jp/learn/challenges?id=10d2f838-16b2-4c16-ba6d-bc85422e43c7&wt.mc_id=cloudskillschallenge_ignite21falleml3_email_cnl

　■ Azure Developer Challenge

https://docs.microsoft.com/ja-jp/learn/challenges?id=af95eabc-aafa-4ba1-8ec7-1c6444102f70&WT.mc_id=cloudskillschallenge_af95eabc-aafa-4ba1-8ec7-1c6444102f70

　■ Azure Database Admin Challenge

https://docs.microsoft.com/ja-jp/learn/challenges?id=9909bf69-bb07-4444-8108-67bd3290ed26&WT.mc_id=cloudskillschallenge_9909bf69-bb07-4444-8108-67bd3290ed26

#さいごに

　このAzureのChallengeですが、期間内に全モジュールを終わらせるとAzure中級資格の無料チケットが付与されていたようです。期間が終了してAzure中級資格の無料チケットの付与こそなくなったものの、配信もモジュールもAzureの勉強に役立つこと間違いなしなので一度挑戦してみてはいかがでしょうか。
　過去、Microsoft Igniteは毎年年末付近になると開かれているので、来年参加してみるというのもいいかもしれませんね。
無料・商用利用可なイラストサイト

# はじめに
オークファンに入社して約半年のデザイナーのタナベです。
前職は未経験でデザイナーとして小さな人材会社で働いていました。
前職では、有料画像の購入が難しい環境だったのでイラストが必要なときは自分で描くか、時間がない場合は無料で商用利用可のイラストサイトに助けてもらっていました。
（今はAdobeStockでダウンロードできるので本当に助かっています:pray_tone1:）

今回は前職で収集した商用利用可のイラストサイトを紹介します。


# おすすめの無料イラストサイト

## オールジャンルなイラスト

### イラストAC
無料ダウンロード会員は１日画像9回(AI、EPSは1回)ダウンロード可
みなさんお馴染みのAC。幅広く探したい人に。

https://www.ac-illust.com/

【利用規約】
https://help.freebie-ac.jp/detail/36


## シンプルで使い勝手がいいイラスト
### ソコスト
シンプルで親しみやすい印象のイラスト。医療系や子供向けのデザインでおすすめ。

https://soco-st.com/

【利用規約】
https://soco-st.com/guide

### Linustock
細めの線で具体的に描かれたイラスト。種類が豊富。シンプルな大人、男性向けデザインに使いやすそう。

https://www.linustock.com/


【利用規約】
https://www.linustock.com/about


### ちょうどいいイラスト
癖がないシンプルなイラスト。種類が豊富。

https://tyoudoii-illust.com/

【利用規約】
https://soco-st.com/guide

##女性、子供向けの可愛らしいイラスト

### Sui-Sai
水彩で描いた綺麗なイラスト。女性や子供向けのデザインにおすすめ。

https://www.sui-sai.jp/

【利用規約】
https://www.sui-sai.jp/info/

### shigureni free illust
シンプルで丸っこくて可愛いイラスト。カジュアル系で女の子のイラストを探しているときにおすすめ。

https://www.shigureni.com/

【利用規約】
https://www.shigureni.com/terms-of-use

## 手描き風イラスト

### えんぴつ素材
えんぴつで描かれたゆるめのイラストサイト。

https://enpitsu-sozai.com/

【利用規約】
https://enpitsu-sozai.com/privacy-policy/


### イラストナビ
えんぴつや絵の具で描かれたような繊細で優しいイラストサイト。

https://illust-navi.com/

【利用規約】
https://illust-navi.com/about/



# まとめ
各サイト利用規約が違うので、利用規約を必ず読んで理解してから使ってください。
加工OKのサイトもあれば加工NGのサイトもあるので、加工したい方は特に注意しましょう。
探してみて、希望するイラストがなければ自分で描いた方が早いこともあるので諦めて描いてみるのもアリです。望んだ絵にならなくてもイラレでちょいちょい修正できるので、整えればいい感じになったりします。

オークファンではデザインチーム全員でデザインレビューをするので、今回紹介したようなイラストや素材を上手に使ったあしらいを仲間から学ぶことも多いです。まだまだですが、入社前よりデザイン力がレベルアップできた気がします。
イラストを上手に使って、みなさん素敵なデザインライフを。
【mt4/mql4】一定期間の最低価格を算出する



# はじめに
<!-- 発端や概要を記載 -->
システムトレードプログラマのmt4/mql4のメモノートです。
初心者向けの簡単なトピックから公開していきます。
.noteでEAそのものも公開していますので良ければそちらも見てください。


# 目次
<!-- タイトルとアンカー名を編集 -->
1. [処理内容](#処理内容)
1. [mql4ソースコード](#mql4ソースコード)

<!-- 各チャプター -->
<a id="#処理内容"></a>
# 処理内容
任意に指定した一定期間の最低価格を算出するコードです。
使うシーンとしては
現在値と最低値の剥離額でエントリーするかどうかを判断するとか
期間別に最低値を算出して、トレンドを解析するとか
色々なシーンで使えるコードだと思います。

ちなみに期間は時間足種の本数で指定します。何本前から何本前までという感じです。
なので、算出した時間は足種によって異なりますので注意してください。

使いたいシーンに挿入して使ってください。


<a id="#mql4ソースコード"></a>
# mql4ソースコード

こちらがソースコードです。



```c++:test.mq4

int OnInit()
  {
//---一定期間内の最高値確認
int Start_bar = 1;//検索開始するバーの本数　3であれば3本前の足から検索
int count = 100;//検索開始するバーから何本前まで検索するか？

int l_Index = iLowest(“USDJPY”,PERIOD_H1,MODE_LOW,End_bar,Start_bar);//MODE_LOWで期間中の高値を配列に格納
double Low_Price = iLow[l_Index];//格納した配列から最高値を抽出する。
   
//---
  }
```


皆様の手助けになりますように。
間違いなどあればご指摘いただけると助かります。
以上です
オフライン環境下でのバイオインフォマティクス環境構築

# 目的
オフライン環境下でバイオインフォマティクス解析を行うときの備忘録。
今回はR環境とその環境で動くPackageをインストールしたので、その時の状況で記す。

# 必要なもの
- インターネットにつながるPC（開放環境）
    - Dockerインストール済み
    - Mac (10.15.7)
- 閉鎖環境
    - singularityインストール済み
    - Linux系マシン

# 方法
## 1. 開放環境（Mac）でdocker image作成
### 1-1. RStudio Serverを起動
```docker
# Base imageとなるrocker/tidyverseをpull
docker pull rocker/tidyverse:latest

# とりあえず立ち上げる
docker run --rm -p 8787:8787 -v (MacのマウントしたいDir):/home/rstudio/var rocker/tidyverse
```

### 1-2. 起動したRStudio Serverにアクセス
[localhost:8787](http://localhost:8787)からRStudio Serverにアクセスする。
Username, Passwordはいずれも「rstudio」でOK
(追記）`The password is set to "xxxxxxxxx"`とターミナルに表示されるので、Passwordは表示されたものを使う

### 1-3. 必要なパッケージをインストール

### 1-4. 別のターミナルからdocker imageをcommit
```docker
# idを確認
docker ps

# commit
docker commit docker_id hogehoge:latest
```

### 1-5. USBにdocker imageを出力
```docker
docker save hogehoge -o USB/path/hogehoge.tar
```

## 2. 閉鎖環境で.sif作成
### 2-1. USB経由で閉鎖環境にhogehoge.tarを入れる
### 2-2. singularityで.sifを作成
```
# ~/docker_images/hogehoge.tarを基に、~/singularity/hogehoge.sifを作成
singularity build singularity/hogehoge.sif docker-archive:docker_images/hogehoge.tar
```

## 3. singularityで実行
```bash
# 共有ディレクトリ（/Data）をマウントした状態で実行する
singularity shell --bind /Data:Data singularity/hogehoge.sif
```

# その他
- 誰かに環境を渡すときは、2で作成したhogehoge.sifをそのまま渡せばOK
- RStudio Serverは閉鎖環境では動かなかった（おそらくジョブシステムとか、Port制限が原因）
- Rと使いたかったPackagesは使えたのでOK（CUIでの作業になるからちょっと使いにくいけど）
- sifファイルへの変換をMacでそのままやろうとしたが、うまくいかなかった。Macでbuildするには、Remote builderを使ったり、VirtualBoxとVagrantをインストールしたりする必要があるらしい（[リンク](https://qiita.com/HoriThe3rd/items/6982247ac0f612d0474a#macやwindowsでビルドする)）ので、閉鎖環境でbuildした。Macではなく、dockerとsingularityいれたLinuxマシンで構築すれば、docker → singularity → 閉鎖環境へとできるはず（docker挟む意味もあんまりないかも...）
- docker commitのときに、ENTYPOINTが変更されて少し躓いた。rocker/tidyverseではENTYPOINTが`/init`になっていたが、これが`bash`に変更されてしまっていたようだった。`docker run --rm -p 8787:8787 hogehoge /init`した状態で再度commitすることで解決した。もっとスマートな方法が多分あると思う（が解決したのでOK）
- ちなみにdockerのENTYPOINTは、`docker inspect rocker/tidyverse --format='{{.Config.Cmd}}'`で確認した。
今日はNext.j……（リモートワーク中に毎日食べられるスープの作り方）

今日はエンジニアらしく技術についての記事を書こうと思う。弊社のフロントエンドには、主にReactが使われている。Reactは面白い。私（エンジニア2号）はこの会社に入ってから初めてReactを本格的に触ったのだが、APIから受け取った値をコンポーネント単位で組み上げていくReactの思想に今やもうすっかりハマってしまった。特に最近気になっているのがNext.j……

と、その前にふと夕飯を作っていなかったことを思い出した。
なので今日は**リモートワークに最適**な、炊飯器を使った簡単に作れるスープを紹介したいと思う。

きっと皆さんもリモートワークで毎日の料理が大変になっているはず。献立を考えるのも一苦労だ。

炊飯器でスープを作るとたくさんできるし、味付けを変えながらなら飽きずに食べられる。何より野菜がたくさん食べれて体にいいので、日々の野菜が不足しがちなエンジニアにもおすすめだ。

さて作り方だが、まず炊飯器は大きいものがいい。なぜなら大きいとたくさんスープが作れるからだ。
ちなみに私は一升炊きの炊飯器を使っている。
ちなみにマイコンかIHかはどちらでもいい。迷ったら安いマイコンの方がいいだろう。
結局スープなので熱が入ればなんでもいい。

さて炊飯器を用意したら次は野菜を準備しよう。

- キャベツ
- 玉ねぎ
- にんじん
- ｼﾒｼﾞ

を並べよう。

なぜこの4つなのかはちゃんと理由がある。
もちろん栄養価の面で優れているのはさることながら、この4種類の野菜は**常に**スーパーで購入ができるからだ。

特に葉物野菜にはたくさんの種類があるのだが、白菜や小松菜や菜葉といったものには旬がある。
旬以外の時期にはスーパーの棚から無くなってしまうこともよくあるのだ。
その点キャベツはいつでも年中棚に並んでいる。
ほんの時々、一瞬だけ、長雨などでしょぼいキャベツしかなくなってしまうこともあるが、基本的には年中並んでいる。
だからこそ迷うことがない。
迷わないということがこの炊飯器スープの良さでもある。
もちろんそれ以外の玉ねぎ、にんじん、ｼﾒｼﾞも常にスーパーにあるはずだ。優秀な野菜たちだ。

野菜が準備できたら早速作っていこう。

まず水を150ccほど入れる。
これは炊飯器が空焚きにならないようにするためだ。

キャベツは三分の一に切ろう。
その三分の一をザクザク切って炊飯器鍋の中に放りこもう。
少し塩を振る。

次は玉ねぎだ。
くし切りにしてからそれを三分の一にすると割といい感じになる。
また塩を振る。

それからにんじんだ。
半分に切ってから輪切りにするか、乱切りにするのがいい。
あまり大きくなりすぎない方がいい。
塩を振る。

最後にｼﾒｼﾞ。
これは適当にちぎろう。

さあ、ここまでできたら炊飯ボタンorスープボタンを押そう。

……

途中で開けたりしないように。

……

ちゃんと水を入れたなら焦げたりしないので大丈夫。

……

ピーと完了の音がしたらここから10分〜15分蒸らす。

蒸らし終わったら基本の野菜スープはできた！

もう食べられる！

ここからはアレンジとなる。

もう少し水を足してから、

豚肉を入れてさらに追加で15分煮る → 味覇を入れる → 中華スープ！
牛肉とトマト缶を入れて20分煮る → 塩で味をつける → ビーフストロガノフ風！
鶏肉と白だしを入れて10分煮る → 鶏の和風スープ！

という感じでアレンジは無限大だ！！！！

ぜひみんなも炊飯器スープを作って~~Qiitaにオリジナルレシピを投稿してほしい！~~自宅で楽しんでみてほしい！

さて、全く関係ない話ばかりになってしまったが、ふとこれが[Catallaxyアドベントカレンダー](https://qiita.com/advent-calendar/2021/catallaxy)の8日目の記事だということを思い出した。

料理というのはどことなくエンジニアの業務に近いような気もする。
要素を整形しながら組み立ててひとつのもの作り上げるところもReactコンポーネントを書くのに似ているような気もしなくもない。
煮たり焼いたりするところなんて、propsに複数の野菜を入れてうまい具合に処理された野菜が出てくるコンポーネントにそっくりだ。

そして唐突に採用の話をしたいと思う。

~~これこそが最強の炊飯器スープのレシピだ~~私こそがReactマスターだという方はぜひ以下のリンクからフロントエンドエンジニアに応募してほしい！
[https://open.talentio.com/r/1/c/catallaxy/pages/30279](https://open.talentio.com/r/1/c/catallaxy/pages/30279)

~~みんなで一緒に炊飯器スープ業界を盛り上げよう！~~Catallaxyは製造業商取引プラットフォーム「Mitsuri」を一緒に成長させてくれる方を募集しています！

たくさんのご応募お待ちしております！
【Harmoware-VIS】シミュレーションの再生速度の値を変更

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#シミュレーションの再生速度の値を変更
Harmoware-VISでのシミュレーション時の再生速度（[`secperhour`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#secperhour-number)）のデフォルト値は180です。
１時間分のデータを180秒で再生します。

この再生速度を変更するには以下のコードを使用します。

```javascript
this.props.actions.setSecPerHour(720);
```

上記の例で設定すると、１時間分のデータを720秒で再生します。
ちなみに実際と同じ速度で再生する場合は3600を設定します。

<hr>
また「`secperhour`」の他に「[`multiplySpeed`](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#multiplyspeed-number)」でもシミュレーション時の再生速度をコントロールできます。
`multiplySpeed`のデフォルト値は20です。
20倍速で再生します。

この再生速度を変更するには以下のコードを使用します。

```javascript
this.props.actions.setMultiplySpeed(10);
```

上記の例で設定すると、10倍速で再生します。
ちなみに実際と同じ速度で再生する場合は1倍速を設定します。
ファイルを作成してすぐに開く

## はじめに
ファイルを作成した後に、勝手に開いて欲しいなと思ったのでやってみました！

## やり方
```zsh:
% touch DBConnect.php && open DBConnect.php
```

## &&とは
`A && B`：Aが成功したらBを実行してくれるイメージです。
今回の場合、ファイル作成できたら開いてくれます。
ファイル作成に失敗したら、`open DBConnect.php`は実行されません。

## 最後に
コマンド関連はいろんな使い方があるので、他にいい方法があれば教えていただきたいです！
【Harmoware-VIS】デフォルト表示の３Ｄ建築物を非表示にする

#Harmoware-VIS とは

https://qiita.com/ucl_Harmoware_VIS/items/e861e0f651ffde647b6a

#デフォルト表示の３Ｄ建築物を非表示にする
[HarmoVisLayers](https://qiita.com/ucl_Harmoware_VIS/items/ea97c5e0e112a3d0ecca#harmovislayers) コンポーネントのpropsのmapboxAddLayerValueにnullを設定します。

```javascript
<HarmoVisLayers
mapboxAddLayerValue={null} ..... />
```

mapboxAddLayerValueのデフォルト値は以下です。

```javascript
    mapboxAddLayerValue: [{
      "id": '3d-buildings',
      "source": 'composite',
      "source-layer": 'building',
      "filter": ['==', 'extrude', 'true'],
      "type": 'fill-extrusion',
      "paint": {
          "fill-extrusion-color": '#888',
          "fill-extrusion-height": [
              "interpolate", ["linear"], ["zoom"],
              5, 0, 5.05, ["get", "height"] ],
          "fill-extrusion-base": [
              "interpolate", ["linear"], ["zoom"],
              5, 0, 5.05, ["get", "min_height"] ],
          "fill-extrusion-opacity": .6
      }
    }]
```

mapbox提供の他のレイヤーを使用する場合はここに設定します。
mapbox提供のレイヤーの詳細はmapboxのドキュメントを参照してください。

https://docs.mapbox.com/jp/mapbox-gl-js/example/#layers
今年ナレッジストアに追加された技術書のご紹介

「[Applibot Advent Calendar 2021](https://qiita.com/advent-calendar/2021/applibot)」 9日目の記事になります。
前日は @growsic さんの
「[[Python]WordCloudで岸田首相の所信表明演説のキーワードを可視化する](https://qiita.com/growsic/items/0663299ff8ed07ba9d30)」という記事でした!

# はじめに
アプリボットでは**ナレッジストア**と呼ばれる技術書[^1]を集めた書架があり、エンジニアに限らず書籍を借りることができます。

本記事では今年一年のまとめとして、今年本棚に追加された本の感想をインタビューしました。

* どのような内容の本ですか？
* なぜこの本をリクエストしましたか？
* こういう人におすすめ！

の3点について、アプリボットメンバーの声をご紹介します！


## 仕事ではじめる機械学習
**--どのような内容の本ですか？**

機械学習をビジネスに活用するにはどうしたら良いか、という時点で機械学習について説明した本です。
多くの場合はソリューションとして機械学習を使う必要性のないなど、目的と手段を取り違えないための示唆が多く含まれています。

**--なぜリクエストしましたか？**

機械学習を用いた新規事業を考案するにあたり、個別の技術ではなく活用の考え方やフローをしりたいと思いリクエストしました。

**-- こういう人におすすめ！**

新規事業を考えている人や、機械学習を仕事で使いたいと思っている人にオススメです。

(Sさん)

## コンピューターシステムの理論と実装
**--どのような内容の本ですか？**

コンピューターを理解するにはゼロからコンピューターを作ってみるのが良いという視点で、ハードウェア、ソフトウェア、コンパイラ、OSを順に作っていく本です。

**--なぜリクエストしましたか？**

エンジニアとしての基礎力を上げたいと思い調べていて、目に止まったのでリクエストしました。
（いざ手に取ってみたら非常にボリュームが多く、早々に脱落しました…)

**-- こういう人におすすめ！**

「コンピューター」についてもっと知識を深めたいなと思った時にパラパラめくってみる程度でも良いと思います。
オフィスで飲み物を取りに行くついでに、ナレッジストアによって手に取ってみましょう！ 

(Sさん)

## 図解即戦力 暗号と認証のしくみと理論がこれ1冊でしっかりわかる教科書
**--どのような内容の本ですか？**

タイトル通りに暗号と認証についての仕組みと理論を網羅的に解説されている。
図解と章立てで興味ある部分から読み進めることもでき、大変読みやすい。

**--なぜリクエストしましたか？**

twitter上での評判がよく、言葉だけ知っている状態となっていそうな言葉が多く表紙に書かれていたため。

**-- こういう人におすすめ！**

暗号と認証周りの技術でなんとなくいろんな言葉は知っているけど、深く理解できていないと感じる人。
本自体は前提知識がなくでも読める部分が多いです。自分に関係が深い箇所から読み、関連がある章へと進んでいくという見方もおすすめです。

（Nさん）

## スターティングGo言語
**--どのような内容の本ですか？**

Go言語をこれから始めようという人向けの本。
Go言語の基本的な構文、特徴的な機能、開発ツールや使用頻度の高いパッケージの使い方など、実際にプログラムを書いてみたい方に必要な知識を解説している。

**--なぜリクエストしましたか？**

applibotがこれからGo言語の開発を行っていくということと自分自身がGo言語の初心者だったので、初心者がまず手にするのにどの本がいいかをいろんな方に聞いたところこのこの本の名前が多く挙がったためリクエストしました。

**-- こういう人におすすめ！**

これからGoを学ぼうと思っている人。

(Mさん)

## ゲームプログラミングC++
**--どのような内容の本ですか？**

ゲームエンジンがよしなにやってくれているゲームプログラミングの基礎の部分をしっかり学ぼう、という本。

**--なぜリクエストしましたか？**

ゲームのクライアント部分を基礎からしっかり形から入って理解してみたかった。

**-- こういう人におすすめ！**

C++の文法の文法と標準ライブラリの機能がある程度わかる人（自分は全然わからなかったので厳しかったです）。

(Sさん)

## SCRUMMASTER THE BOOK 優れたスクラムマスターになるための極意――メタスキル、学習、心理、リーダーシップ

**--どのような内容の本ですか？**

 スクラムマスターだけでなく、組織のリーダーのための組織形成のガイドブックです。
組織形成の第一歩に相応しい内容の本です。

**--なぜリクエストしましたか？**

 所属しているプロジェクトでチームビルドが盛んに行われており、会社として教科書のようなものが欲しかったのでリクエストしました。

**-- こういう人におすすめ！**

マネジメントに興味がある人、組織でマネジメントをする人、マネジメントされる人に読んでいただきたいです。

(Kさん)

## ゲームデザインバイブル
**--どのような内容の本ですか？**

ゲームデザイナー向けの本として10年以上も支持されていると知り、購入しました。
ゲームデザイン上の重要なテーマについて網羅性があり、触れてこなかったテーマについて考察するのが楽しかったです。

**-- こういう人におすすめ！**

開発フェーズのディレクターやプランナーの方に特におすすめの本です。

(Oさん)

# おわりに
技術書の紹介でした。
密度の高い情報に触れること、そしてそれをチームメンバーに共有することは自分やメンバーの成長のためにとても有用なことだと思います。
気になった本があればぜひ読んでみてください！

[^1]: 定義が難しいところですが、特定の技術スタックに関する本や、ソフトウェア工学的なもの、マネジメントやチームビルディングに関するもの、一部ビジネス書などがあります。
【Linux】エイリアスの登録

# ■.bashrcにエイリアスを記述する

初めに`.bashrc`にエイリアスを定義する。
`.bashrc`は、bashを起動したときに読み込まれる設定ファイル。
シェル起動時に1回実行される。

```bash:
vim ~/.bashrc
```

ファイルを開いたら記述する。

```bash:.bashrc
alias ee='export ENV=dev'
```

# ■source ~/.bash_profileの実行

`.bashrc`にエイリアスを定義したら、`.bash_profile`に反映させる必要がある。
`.bash_profile`は`.bashrc`同様にbashの設定ファイルで、ターミナルを起動したときなどログイン時に1回実行される。
ここには環境変数などを定義する。
以下コマンドで`.bashrc`の設定を`.bash_profile`に反映させる。

```bash:
source ~/.bash_profile
```

コマンドを実行したら、ターミナルを再起動。

```bash:
alias
```

aliasコマンド実行すると登録したエイリアスが表示される。
Rustに触れてみたい！ ～第1回　ダウンロード編～

Windows環境で書いていますが走らせるコマンドはほとんど同じなので適宜読み替えてください！
## 1. こう言う方に読んでもらいたい！
* 難しい事は一旦置いておいてRustを触ってみたいという方
* 文章を読むのが苦手な方

この記事を読んでもらうとRustをダウンロードできるようになります！
Rustは本当に面白いプログラミング言語なのでこの記事で触れてみて面白いなと思われたら他の記事や本が巷にはたくさんありますのでぜひ手に取ってRustの世界に足を踏み入れてください！

## 2. 始めるにあたって必要な知識
* CMDやターミナル等を開ける
* cdやcurl等の基本的なコマンドを使える

## 3. ダウンロードしてみよう！
DLするには、https://rustup.rs/ に行きます。
画像はWindowsで遷移した場合の画面です。
![image-20211209102317738.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895676/52df2e84-526c-6ce8-512b-f048e72d5d2a.png)
上記ページからWindows環境なら `rustup-init.exe` をWSL等でLinuxを使用されている場合は `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`を実行します。
## 4. Hello World！
プログラミング言語を始めるとまず行いたいのがHelloWorldです！
Rustをインストールした時に一緒にCargoがインストールされているのでこちらを使って行いたいと思います！

```
path\to\rust\project>dir

 path\to\rust\project のディレクトリ

2021/12/09  10:30    <DIR>          .
2021/12/09  10:30    <DIR>          ..
               0 個のファイル                   0 バイト
               2 個のディレクトリ  106,362,707,968 バイトの空き領域

path\to\rust\project>cargo new hello
     Created binary (application) `hello` package

path\to\rust\project>dir

 path\to\rust\project のディレクトリ

2021/12/09  10:33    <DIR>          .
2021/12/09  10:33    <DIR>          ..
2021/12/09  10:33    <DIR>          hello
               0 個のファイル                   0 バイト
               3 個のディレクトリ  106,362,703,872 バイトの空き領域

path\to\rust\project>cd hello

path\to\rust\project\hello>cargo run
   Compiling hello v0.1.0 (path\to\rust\project\hello)
    Finished dev [unoptimized + debuginfo] target(s) in 2.85s
     Running `target\debug\hello.exe`
Hello, world!

path\to\rust\project\hello>
```
このように作成したい場所に遷移して
`cargo new hello` helloプロジェクトを作成
`cd hello` helloプロジェクトに移動
`cargo run` helloプロジェクトを実行
という三つのコマンドでHelloWorldを実行できました。

これにてダウンロード編完結です！

次回からはより深くrustと触れ合っていける記事を書いていきます。
読んでくださりありがとうございました！
コメントお待ちしています！
Cisco Secure Cloud Insights で AWS 環境と Google Cloud 環境を一元監視してみる

# はじめに
この記事は Cisco Systems Japan の有志による Advent Calendar 2021 (2枚目) の 12 日目として投稿しています。
　2021年版(1枚目): https://qiita.com/advent-calendar/2021/cisco
　2021年版(2枚目): https://qiita.com/advent-calendar/2021/cisco2 <--- ココ


# 今回やりたいこと
先月からシスコが CSPM 機能の役割を担うセキュリティソリューション (Secure Cloud Insights) を提供し始めたので、トライアルライセンスを使って自分の AWS 環境と Google Cloud 環境の監視設定を行ってダッシュボードを操作してみます。

:::note info
CSPM (Cloud Security Posture Management) とはパブリッククラウドに対して API 連携を行い、クラウド側の設定を自動的に確認することでセキュリティリスクを伴う設定ミスや各種コンプライアンススタンダード等への違反が無いかを継続してチェックする機能のこと。
:::


# 設定
ガイドに従い、Secure Cloud Insights が AWS と Google Cloud から情報を引っ張ってこれるように IaaS 側で Role (Read Only) を作成します。

AWS はこちら↓↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2334441/97d9c1a9-6c81-5bc9-4611-7aec266e8cc6.png)


Google Cloud はこちら↓↓ (アクセスするための key を生成)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2334441/3cb3858e-8edb-a63e-acc9-8fb4cf30308c.png)


次に Secure Cloud Insights 側で下記の設定を行います。

AWS はこちら↓↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2334441/252b66f2-7261-fa9c-5d23-7fb42e436e48.png)

Google Cloud はこちら↓↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2334441/901783df-7acd-0a79-3720-95cea6f4ca76.png)


設定は以上です。あっという間に連携が完了！


# ダッシュボードを見てみる

:::note warn
私の AWS と Google Cloud のアカウントでは監視対象が少なすぎてつまらないのでここからデモ環境の画面です。
:::



まずはアセット管理画面です↓↓　マルチクラウド環境のアセットを一元的に管理できるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2334441/f1b690ba-d7f6-c9c2-ba2c-4d98128e224c.png)


上記のカテゴリ一覧のうち "Host" をクリックすると下記の通りインスタンスの一覧が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2334441/f3c62285-91f0-e7c8-1418-e6b7c303b886.png)

上記では種類が異なるインスタンスを一元的にメタデータとして管理できていることがわかります。下記は試しに特定のインスタンスを選択し、リレーションシップマップで表示させたものです（赤字は補足として追記したもの）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2334441/00b7b0f3-fdfb-52fa-6774-858402d01232.png)

上記の通り、選択したインスタンスがどのアカウントのもので、かつそれに関連する設定情報の全体像を表示することができます（各ノードをクリックして展開することで更なる詳細情報も確認可能）。

# おわりに
本ソリューションが何らかの問題を自動的に検知した際、同様に設定の関連情報をマップ表示できるのでその問題に伴う影響範囲（インターネットからアクセス可能になっていないか or 誰がどのロールでアクセス可能か or コンフィデンシャルな情報を含むストレージまでアクセス可能かなど）を迅速に把握できそうですね！


[Secure Cloud Insights のトライアルはこちらから！](https://www.cisco.com/c/en/us/products/security/secure-cloud-insights/free-trial.html "トライアルリンクはこちらから！")
[py2rb] __slots__

# はじめに
移植やってます
# __slots__ (Python)
```python
class cvstr(str):
    __slots__ = ('accession', 'unit_accession')
```
`Python`はインスタンス変数を自由に追加できます。
それを制限する機能が`__slots__`
# @ (Ruby)
```ruby
class Cvstr < String
  @accession
  @unit_accession
end
```
`Ruby`は平常運転で。
# メモ
+ Python の __slots__ を学習した
+ 道のりは遠そう
Flutter テキストテーマを編集(Theme.of(context).textTheme.XXX)

これからも使いそうだなと思ったことを、メモ用として書きます。

記述する対象は、マテリアルデザインのテキストテーマについてです。

<h2>テキストテーマ</h2>
マテリアルデザインのテキストテーマについては、以下の記事について見てください。
https://qiita.com/kurararara/items/e452d8fd5a33ae391378

<h2>編集方法</h2>
テキストテーマを編集するには、copyWithを使えば編集できます。
ソースコードは、こんな感じです。

```
Theme.of(context)>textTheme.XXX.copyWith(XXX: XXX)
```


以下のコードを実行すると、デバイスには写真のように表示されます。

```
         children: <Widget>[
            Text(
              'Color is red',
              style: Theme.of(context).textTheme.headline4?.copyWith(color: Colors.red),
            ),
            Text(
              'Color is blue, size is 30',
              style: Theme.of(context).textTheme.headline4?.copyWith(fontSize: 60, color: Colors.blue),
            ),
            Text(
              'Color is red, size is 15, weight is w900',
              style: Theme.of(context).textTheme.headline4?.copyWith(fontWeight: FontWeight.w900,fontSize: 50, color: Colors.blue),
            ),
          ],
```

<div align="center">
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1878133/4e0b6503-a50f-0ac5-1337-352235c437b5.png">
</div>
えっ！？ &&で繋ぐだけで出し分けられるんじゃないんですか！？

[Ateam Lifestyle Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ateam-lifestyle) 10日目は株式会社エイチームライフスタイル デザイナーの @kmfj がお送りします！

## 概要

`&&`で繋いでもうまく出し分けられない時があったので、仕組みをまとめてみた備忘録です。
「とりあえず`&&`で繋げば出し分けられるんだな」と思っている人向けです。

## 出し分けられないパターン？

`&&`を使って表示・非表示を出し分ける処理を書いてみます。

```tsx
const name = '山田太郎'
return (
  <div>
    <p>こんにちは</p>
    {name && <p>{name}さん</p>}
  </div>
)
```

結果はこちら
![スクリーンショット 2021-12-08 22.29.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545547/b27ee708-6338-91d5-4560-a423e3a16d09.png)

変数に空文字を入れてみます。

```tsx
const name = ''
return (
  <div>
    <p>こんにちは</p>
    {name && <p>{name}さん</p>}
  </div>
)
```
![スクリーンショット 2021-12-08 22.30.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545547/285fa689-f296-181f-f9fb-8347c3c92c64.png)

表示されなくなりました！完全に理解しました。

変数を数字にしてみます。

```tsx
const count = 1
return (
  <div>
    <p>こんにちは</p>
    {count && <p>あなたは{count}番です</p>}
  </div>
)
```
![スクリーンショット 2021-12-08 22.43.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545547/8d0997b3-0c7a-de8a-ff18-e2f16d27f808.png)

同じように0を入れてみます。

```tsx
const count = 0
return (
  <div>
    <p>こんにちは</p>
    {count && <p>あなたは{count}番です</p>}
  </div>
)
```

![スクリーンショット 2021-12-08 22.30.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545547/f637d2a6-d69b-a67b-05b1-d463c9997e80.png)

**なんかいる…**

## なんで？:thinking:

この`&&`という表記は**論理演算子**といい、JavaScriptには4つの論理演算子(`||(OR)` `&&(AND)` `!(NOT)` `??(Null合体)`)があります。

その中で、JavaScriptの`&&(AND)`は、次のように振舞います。 [^1]

- 左から右にデータを評価
- それぞれのデータをbooleanに変換
- データがfalseに変換できる(falsyな)とき、評価をやめ、そのデータ本来の値を返す
- すべてのデータがtrueに変換できる(truthyな)とき、最後のデータを返す

例

```js
console.log( 1 && 2 && 5 ) //5
console.log( 1 && null && 5 ) //null
```

ひとつでもfalsyが出てきた場合、式の真偽値がtrueになることはありません。
そのため、falsy以降の評価をしても無駄な処理になってしまいます。
そういった不要な処理をしないことによって、最小のコストで評価をする仕様を**「短絡評価」**と呼びます。
この短絡評価を利用して出し分けていたのです。

## つまり？:thinking::thinking:

変数とコンポーネントなどを`&&`でつないだとき、
変数がtruthyなときは最後のデータであるコンポーネントを返し、
変数がfalsyなときは変数の値がそのまま返る、ということです。

変数がないときに非表示にしてくれる！というわけではなく
falseに変換できた値を返しているだけです。
空文字や`null`、`undefined`は値が返ってきたところで見かけ上変化がないため
**非表示になったように見える**のでした。

しかし、数字の`0`が返ってきた場合、そのまま数字が表示されてしまうため
上記のような結果になります。

## 解消したいよ:frowning2:

number型を使って出し分けがしたいときは、
`!(NOT)`を2つ重ねてboolean型に変換してあげるだけでOKです！

`!(NOT)`はデータをboolean型に変換し逆の値を返すので、
二重否定にすればそのデータのboolean型が取れます。

```tsx
const count = 0
return (
  <div>
    <p>こんにちは</p>
    {!!count && <p>{count}人目です</p>}
  </div>
)
```

![スクリーンショット 2021-12-08 22.39.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545547/ef3acafc-975f-3fe9-07d4-49e0068c2ce6.png)

無事に出し分けられました！

## おわりに

`&&`についてざっくりまとめました。何らかの参考になれば幸いです。
間違いがあればコメントいただけると助かります…！

[Ateam Lifestyle Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ateam-lifestyle) 明日は @ryosuketter さんの記事です。お楽しみに！

[^1]: 参考：https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Logical_AND
第二新卒エンジニア 転職体験記

# はじめに
先日第一志望の企業から内定をいただきました。
2021年の下半期までには転職先を決めるぞ！と意気込んでいましたが、なんせ初めての転職活動。
反省点も学んだこともたくさんありました。
以降よほどのことがない限り転職することがないと思うので、忘れないためにもここに自身の転職体験記を記しておこうと思います。

# 自身の経歴と転職活動のスケジュール
- 2020年03月　文系専攻の大学を卒業
- 2020年04月　未経験で受託開発やSESを行っているIT企業へ入社
    - プロジェクトメンバーとして開発、保守開発の経験を積む
    - 業務担当範囲：詳細設計、製造、テスト、他メンバーのコードレビューの実施
- 2021年08月　転職をしようと考えだす
- 2021年10月　転職活動を本格的に開始
- 2021年12月　第一志望の企業から内定をいただく

経歴、そして転職活動のスケジュールはこのような形でした。

今までJavaをメインで使用して業務システムの開発を行っていました。
同年代、未経験で入社した方よりも抜きん出ていることと言えば、Javaに触れる機会が多くあったことと、一から開発を行った経験があること。
あとはストアドプロシージャを書きまくった時期があったことでしょうか。

# 転職活動の軸
そもそもなぜ転職をしようと思ったのか？

未経験で入社し、様々なプロジェクトにアサインして育てていただいた今の会社には感謝しかありません。
しかし、本音を言えば数年先の転職を見据えての入社でした。
もともと自身の仕事がどのようにエンドユーザーや社会に影響を与えているのかを実感することがやりがいに繋がるタイプのポケモンでした。

未経験ではそのような仕事ができる企業に就職することは難しいと分かっていたため、未経験でも入社ができ、自身の視野を広げるためにも様々な業界の企業と取引をしている会社を選びました。

また、私は地元から出て仕事をしているのですが、コロナ禍で自分自身を見つめなおした際、もっと両親に会ってより多くの時間を共に過ごして親孝行がしたいなと考えるようになりました。

- より社会に貢献できる仕事がしたい。
- より気軽に両親を訪ねることができるように、柔軟な勤務形態ががいい。

この2つが主な理由で転職をしようと考えるようになりました。
このことと自身の強みや成長を考えて、今回の転職活動で外すことが出来ない条件は以下のようになりました。

- 熱い思いを持つことができるような事業内容である。
- フルリモートで勤務可能である。
- 新しい技術を取り入れる風土がある。
- 上流工程から下流工程まで携わることが出来る。
- グローバルに働くことができる。

ここからは簡単です。
以上の条件に当てはまり、自分の実績とスキルに合ったポジションで募集をかけている企業を見つけて応募するだけ。

そして気付きます。「あれ、こんな会社ってほぼないんじゃね？」と。

# 転職活動の実績
転職に一番必要なことは何だと思いますか？経験でしょうか？スキルでしょうか？
否、転職する勇気です。はじめの一歩を踏み出す勇気だと私は考えています。

自分の転職活動の軸に合った企業なんて絶対ないよ！あったとしても絶対受からないよ！
そう思って何もせずにいると、チャンスなんて皆無です。
とりあえず一歩踏み出すこと。そしたら0.1％のチャンスを自分のモノにできるかもしれない。
じゃあ、行くっしょ！精神で生きることが大切です。

私は今回の転職活動では**カジュアル面談**を**5社**受けました。

- 不動産系の自社サービスを持っている企業
- 自社開発ツールを持っている企業
- ブライダル系の自社サービスを持っている企業
- 今後社会問題解決のための自社サービスを立ち上げる予定の企業
- 農業系の自社サービスを持っている企業

この中の1社からは暗に「ウチの会社と合ってないから選考進まんでええよ～。」といった内容のメッセージを受け取りました。残念！

この中から**最終的に面接を受けた会社**は**2社**で、**内定を頂いた会社**も**2社**でした。


# 感じたこと
実際に転職活動をしてみて、感じたことは三つあります。

一つ目は、**とりあえずカジュアル面談を受けるべき**だなと感じました。

行きたい企業がなくても、転職時期が未定であっても、ちょっとでも受けてみたいなと思った会社があればカジュアル面談を受けることをおすすめします。
面談を受け、様々な話を聞けばいつのまにか「転職の軸」が決まっていたり、思いがけない出会いがあるかもしれません。

先ほど挙げた私の転職活動の軸も最初からかっちりと決まっていたわけではありません。
面談を受けながら転職活動を進めていく中で自ずと見えてきたものでした。

また、カジュアル面談は求人を出している会社が求職者に対して会社をアピールする場でもあります。
求人だけでは見えてないこともありますし、ここで事業内容や社風を事細かに聞いて本番の面接にも生かせる情報をゲットすることができます。

二つ目は、**WEB面接が出来る今がチャンス**だなと感じました。

正直言ってコロナ禍でなく、WEB面接が主流でないときに転職されてた方々はすごいなと思います。
有給休暇を取っていたのでしょうか？それとも仕事終わりにしていたのでしょうか？
WEB面接であれば移動がないため一日に受けられる企業も増えますし、現職の仕事時間をずらせば昼間でも行えます。
求人量に関しては何とも言えませんが、より効率的に転職活動が行えるのではないかと思います。
カジュアル面談も本当にカジュアルに受けれますしね。

三つ目は、**妥協をしないこと**が大切だなと感じました。

仕事を続けながら転職活動を進めると、どうしてもプライベートの時間が削れてしまいますし、メンタル的にも少なからず負担はあります。
ついつい、内定を頂くと「現状よりも良さそうだから、とりあえずここでいいか。」とそこで転職活動を終わらせてしまいたくなる場合もあります。
そこで思い出してほしいのは「転職をして何を成し遂げたいか？」ということです。

「成し遂げたいこと」のために転職をするのであって、「転職すること」が目的にすり替わっていないか？その「成し遂げたいこと」のための環境はこの会社で合っているのか？これを十分に考え直す必要があるのではないかと思います。

# 最後に
長々と書きましたが、人生初めての転職活動はなかなか面白かったです。
学びもたくさんありました。
一年後には今の会社も退職し、新しい会社で頑張っているのだなと思うとワクワクします。
この新鮮な気持ちをいつまでも忘れずに、今後も仕事に打ち込めたらと思います。
zsh: operation not permittedと言われてシェルスクリプトが動かなくなってしまったら

Macでさっきまで、動いてたシェルスクリプトが急に動かなくなってしまった……

`zsh: operation not permitted`

これでなおった！！

`xattr -d com.apple.quarantine /PATH/TO/SCRIPT.sh`
Mac標準搭載アプリAutomatorを使って作業時間を短縮しよう！（すぐに使えるレシピ付き）

# はじめに
株式会社LITALICOでエンジニアをしています@yknoguchiです。この記事は[『LITALICO Advent Calendar 2021』](https://qiita.com/advent-calendar/2021/litalico)10日目の記事の2本目です。

[1本目](https://qiita.com/yknoguchi/private/a640b4dc28121fda2643)はあんまりプログラム関係ないので、こっちはちょっとだけコードを書きます。
1本目は新卒エンジニア研修のメンターをやった僕が、その時にメンターとして必要だなと感じたものを挙げています。メンター以外にも今後新人エンジニアが入ってくる予定の方々にも参考になるかもしれないので、是非そちらもよろしくお願いします。

さてこの記事は、単純な作業を簡単に自動化できるMac標準搭載アプリのAutomatorを紹介する記事です。すぐに使えるレシピもありますので、是非最後までお付き合いをお願いします。

## この記事の対象読者
- Macユーザー

# Automatorとは
Automatorとは、さまざまなワークフローを自動化してくれるMacの標準搭載アプリです。
そしてその効果は百聞は一見にしかず。以下の動画をご覧ください。

![画面収録 2021-12-08 18.54.50.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615860/a79c9433-4bac-13bd-6e41-8562edad182e.gif)

はい、この通り。

MacのQuickTime Playerで画面収録したMOVファイルも数クリックでgifに変換することが可能です。これで簡単にQiitaなどいろんなところで共有できるようになりましたね！！（最近になってGitHubで動画ファイルを直接貼れるようになりましたが、、、。）

また、クイックアクションが動いているときはメニューバーで歯車が動くのでちょっと楽しいです。

# Automatorの使い方
今回は上記の、「MOVファイルをgifに変換するクイックアクション」を例として作成していきます。
なお、このクイックアクションにはffmpegを使用するので、あらかじめインストールをしておいてください。（やり方は調べるとたくさん出てくるのでお好みで。）

まずはAutomatorを開きます。アプリケーションフォルダーの中にあります。もしくはSpotlightで検索してください。
そしたら以下の画面が開くと思うので、今回作成する「クイックアクション」を選択します。

![84216DD9-9394-471D-9907-27D0B692A4AA.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615860/3ccac495-749e-8a69-8c41-6dfd6e83e62f.jpeg)

次にクイックアクションを使用する場所のアプリケーションと対象ファイルを設定します。今回はFinder上で動画ファイルを対象に使用しますので、以下の画像の箇所を設定します。

![C410127E-E287-4E1F-B626-B5EFA298087D.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615860/a39a2172-7010-18ac-abd0-a49bb4ed5a2d.jpeg)

今回はシェルスクリプトからffmpegを実行します。そのため、シェルスクリプトを実行するアクションを左のアクション一覧から探し追加します。数が多いので上の検索から「シェル」と入力して絞ってあげると見つかりやすくなります。

![52E307C7-AD26-42EF-B1FB-26EC2A46BF1B.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615860/4d8da38a-f50d-9153-8c88-93513b441b66.jpeg)

シェルのアクションを追加したら実際に実行させるコードを画像のように記述しましょう。

![F8BBD080-C24C-4296-A48E-31BFC38CEF81.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615860/9c900e38-16e9-de30-7b3a-dcf21540764b.jpeg)

今回書いたコードは以下の通りです。

```bash
for f in "$@"
do
    if [ -f "$f" ]; then
        case "$f" in
            *\.[mM][oO][vV])
            dir=`dirname "$f"`
            file=`basename "${f%.[mM][oO][vV]}"`.gif
            /usr/local/bin/ffmpeg -i "$f" -r 10 "${dir}/${file}"
			;;
        esac
    fi
done
```

ポイントは変換するファイルのパスの渡し方です。「入力の引き渡し方法」を「引数として」で設定します。こうすることで選択されたファイル名が引数として`$@`に渡されます。

あとは渡されたファイル名がMOVファイルであることを確認し、変換先の拡張子をgifにし、ffmpegコマンドを記述すれば完成です。
完成したら⌘Sで名前を入力し保存したら終了！簡単！！

![9C517F37-5198-49BC-B39F-81EA0F52221D.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615860/bc3e5058-523b-67d6-40de-7aecdcd336cf.jpeg)

# おわりに

今回はサンプルとしてシェルスクリプトを利用したクイックアクションを作成しましたが、他にも左のアクション一覧から分かるようにいろんなアプリケーションを使用したクイックアクションが作成可能です。もちろん、今回使用したシェルとffmpegだけでも色々な物が作れます。僕は動画ファイルをh264に変換するものなどを作成して活用しています。

まさにアイディア次第で可能性は無限大です！！

これまで時間を割いていた単純な作業も、Automatorを使用すれば簡単に一瞬で終わらせることができます。是非この機会にAutomatorの使い方をマスターして、来年の業務効率を上げてみてはいかがでしょうか？

おすすめのAutomatorレシピがあれば、コメントで教えていただけると嬉しいです！

次回は@bashikoさんの記事になります！
是非！！お楽しみに！！
[py2rb] repr() str()

# はじめに
移植やってます
# repr() str() (Python)
```python
>>> import datetime
>>> td = datetime.date.today()
>>> print(str(td))
2021-12-09
>>> print(repr(td))
datetime.date(2021, 12, 9)
```
内容はよく分かりませんが、`Ruby`だと次の感じかも。
# inspect to_s (Ruby)
```ruby
> require 'date'
> td = Date.today
> puts td.to_s
2021-12-09
> puts td.inspect
#<Date: 2021-12-09 ((2459558j,0s,0n),+0s,2299161j)>
```
上記の場合、`.to_s`は付けても付けなくても同じ結果になります。
# メモ
+ Python の repr を学習した
+ 道のりは遠そう
SQLAlchemy で動的にカラム名を指定したい場合

pythonからSQLAlchemyを使ってPostgreSQLを操作することが度々あるのですが、初心者的に忘れがちなものを備忘録として残しておきます。

## オブジェクトのカラムを動的に指定する
例えば、Userモデルがこんな感じであったとします。

``` python:models.py
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True) 
    clm_0 = db.Column(db.Boolean, default=False)
    clm_1 = db.Column(db.Boolean, default=False)
    clm_2 = db.Column(db.Boolean, default=False)
    clm_3 = db.Column(db.Boolean, default=False)
    clm_4 = db.Column(db.Boolean, default=False)
    clm_5 = db.Column(db.Boolean, default=False)
    clm_6 = db.Column(db.Boolean, default=False)
    clm_7 = db.Column(db.Boolean, default=False)
    clm_8 = db.Column(db.Boolean, default=False)
    clm_9 = db.Column(db.Boolean, default=False)
    clm_10 = db.Column(db.Boolean, default=False)
```

clm_0〜clm_10は何らかの条件でフラグが入ると思っていて下さい。

例えば、
- Aが0だったら、clm_0をTrueにしたい
- Aが1だったら、clm_1をTrueにしたい

みたいな感じの処理を書く場合に、全部定義するのは面倒です。ということで動的にカラムを指定したい。
そういう場合はsetattrを使います。

```python
new_user = User()
target_clm = 'clm_' + str(A)
setattr(new_user,target_clm,True)
```

こんな風に、カラム指定することが出来ます。


## 動的にカラム指定してフィルタしたい
例えば、上述のUserテーブルの中から、動的に変化するAに合わせてカラム指定でフィルタしたユーザーリストを取得したい時。


```python
target_clm = 'clm_' + str(A)
user_list = local_session.query(User).filter(getattr(User, target_clm)==True)all()
```

そんなときは、getattrを使います。

## インスタンスのプロパティに動的にアクセスしたい
上述のUserを取得してきたあとに、そのプロパティに動的にアクセスしたい場合はどうするかというとこのような形で取得します。
使っているのはgetattrなので↑と同じですね。

```python
user_row = local_session.query(User).filter_by(id=10).first()
target_clm = 'clm_0'
clm_0 = getattr(user_row, target_clm)
```




### 以上
よく使うんだけど忘れがちな2選でした。