OmniAICreator/Qiita-1.07M huggingface dataset:
Solidity Ver.0.5.0の変更点をまとめた（互換性なし）

# Solidity Ver. 0.5.0の変更点をまとめた（互換性なし）
SolidityがVersion 0.5.0にアップデートされたため、互換性のない変更部分に関してまとめてみました。

[参照](https://solidity.readthedocs.io/en/v0.5.1/050-breaking-changes.html#interoperability)

## セマンティクスとシンタックスの変更
このセクションはシンタックスとセマンティクスに影響を与える変更を強調します。

以下の関数はシングルバイトの引数のみ許容します。さらに、引数はパッドされません。
この変更により引数の連結方法がより明確になります。

- `call()`
- `delegatecall()`
- `staticcall()`
- `keccak256()`
- `sha256()`
- `ripemd160()`

`.call()`を`.call("")`、`.call(signature, a, b, c)`を`.call(abi.encodeWithSignature(signature, a, b, c))`（最後の一つの引数はvalue型でのみ動きます。）

`keccak256(a, b, c)`を`keccak256(abi.encodePacked(a, b, c))`に変更してください。

互換性を破る変更ではありませんが、開発者には`x.call(bytes4(keccak256("f(uint256)"), a, b)`を`x.call(abi.encodeWithSignature("f(uint256)", a, b))`に変更することをおすすめします。

関数`.call()`、`.delegatecall()`、`.staticcall()`は`（bool, bytes memory）`を返し、返されたデータにアクセスすることができます。
`bool success = otherContract.call("f")`から`(bool success, bytes memory data) = otherContract.call("f")`に変更してください。

SolidityはC99スタイルのスコープルールを関数内ローカル変数に適応しています。これは、変数は宣言後に使用可能であり、同じあるいはネストされたスコープ内でのみ使えます。for文の初期化ブロック内で宣言された変数はループ内のどこでも有効です。

## Explicitness Requirements
このセクションはコードをより明確に記述する必要がある部分を説明します。ほとんどのトピックでは、コンパイラーがおすすめの記述方法を提供します。


- 関数の可視性
    - 関数の可視性の明確化は現在は強制です。全ての関数とコンストラクターにはpublic修飾子をつけてください。fallback関数とインターフェース関数にはexternalをつけて下さい。
- 変数の保存領域
    - 構造体、配列、マッピング型の全ての変数の保存領域の明確化は強制です。これは関数のパラメーターと返り値にも適応されます。
    - 例：`uint[] x = m_x`から`uint[] storage x = m_x`に変更して下さい。
    - 例：`function f(uint[][] x)`から`function f(uint[][] memory x)`に変更して下さい。
    - `memory`がデータ領域です、状況に応じて`storage`や`calldata`に変更して下さい。
    - `external`関数は`calldata`データ領域と共にパラメーターが必要です。
- コントラクトのアドレス
    - 名前空間を分けるために、コントラクト型は`address`メンバーを持ちません。
    - コントラクト型からアドレス型への変更は明示的に行う必要があります。
    - 例：cがコントラクトの場合、`c.transfer(...)`を`address(c).transfer(...)`に、`c.balance`を`address(c).balance`に変更する必要があります。
- コントラクト間の変換
    - 無関係なコントラクト型間の明示的な変換は現在禁止されています。
    - コントラクト型は、基本型または祖先型のいずれかにのみ変換できます。
    - コントラクトが変換したいコントラクトタイプと互換性があることが確かな場合はそれを継承しませんが、最初にaddress型に変換することで対応できます。
    - 例：A及びBがコントラクト型で、BはAを継承していない、bはB型のコントラクトであるとする。
        - `A(address(b))`を用いれば、bからaに変換することが可能です。以下で説明するように、依然としてpayableなフォールバック関数を考慮する必要があることに注意してください。
- `address`型
    - `address`型は`address`型と`address payable`型に別れました。`address payable`型のみ`transfer(...)`関数を提供します。
    - `address payable`型から`address`型への直接変換は可能ですが、逆はできません。
    - `address`型から`address payable`型への変換は、uint160を経由することで可能です。
        - cがコントラクトで、かつcがpayableなフォールバック関数を持つ場合のみ、`address(c)`より`address payable`型に変換できる
    - もし[withdraw](https://solidity.readthedocs.io/en/v0.5.1/common-patterns.html#withdrawal-pattern)パターンを用いていた場合、コードを変更する必要はほとんどの場合必要ありません。
        - なぜなら、transferには`msg.sender`のみ用いており、`msg.sender`は`address payable`型であるためです。
C〇Dのエンブレム作成用にツールを作ってみた

この記事は [SLP KBIT Advent Calendar 2018](https://qiita.com/advent-calendar/2018/slp_kbit) の7日目の記事です。

最近、講義でC#に触れているのでC#で何かしたいな。 
でも何しよう……、と思っていたんですが、最近某FPSゲームでアニメエンブレムを作ることがあり、それを楽にできるアプリケーションを作ってみることにしました。
はじめに言っておくと、クオリティが残念なので期待せずに見てください。

#はじめに

![figure.PNG](https://qiita-image-store.s3.amazonaws.com/0/219366/021929d3-08bc-6eb6-b284-9a712e90ef66.png)
このような素材を複数組み合わせてエンブレムを作るのですが、何もなしだと結構難しい。

なら元画像があればよいのでは？と思い、画像の不透明度を下げ、表示するアプリケーションを作ってみることにしました。

#概要

C#のフォームアプリケーションを用いて作っていきます。
![easy.PNG](https://qiita-image-store.s3.amazonaws.com/0/219366/fda0a54d-7c37-cbfd-d8d0-5a2c54cbdc62.png)

構造はこのようになっています。formにpictureboxを置き、contextmenuで画像の挿入、透過率を変更することができるようになっています。
![test.PNG](https://qiita-image-store.s3.amazonaws.com/0/219366/b26deb45-8684-9277-7b89-83805dd90157.png)
このように画像の上からレイヤーを重ねていくことができるため、楽にエンブレムが作れます。


#さいごに

コード量はコンテキストメニューのコードを書いただけのため、かなり少なく、楽に実装することができました。
ただ、目的にある、画像を表示し、不透明度を下げることはできましたが、開発した、という気が起こらないため、今後様々な機能を付け、用途を広げたい。
今現在、画像の拡大縮小等ができないため、エンブレムにしたい部分を切り抜き、使ってもらうことしかできないため、今後実装していきたい。
あと、モニターがない人は、リモートプレイで、エンブレムを作ったほうが細部まで作れるので、オヌヌメですよ。
ReactNativeでドラクエ風の会話画面を作った

良いライブラリがあったのでそれの紹介になります。

<img src="https://qiita-image-store.s3.amazonaws.com/0/69627/fa8b49bd-09d4-8a64-9190-08c1592c91fc.gif" width="40%" />

タイプライターアニメーション
------
- [react-native-typewriter](https://github.com/TaylorBriggs/react-native-typewriter)を使いました

```jsx
import { View } from 'react-native'
import TypeWriter from 'react-native-typewriter'

...(省略)...

<View style={styles.talkWrap}>
  <TypeWriter typing={1} style={styles.talk}>
    おぉ、目覚めたか？\n自分の名前は覚えておるか？
  </TypeWriter>
</View>

...(省略)...

const styles = {
  talk: {
    color: '#eee',
    fontWeight: 'bold',
  },
  talkWrap: {
    backgroundColor: '#000',
    borderColor: '#ccc',
    borderRadius: 15,
    borderWidth: 3,
    margin: 1,
    padding: 8
  },
}
```

フォームとエラー表示
-----
- Native BaseのToastとFormを使いました
  - [Toast](https://docs.nativebase.io/Components.html#toast-def-headref)
  - [Form](https://docs.nativebase.io/Components.html#error-textbox-headref)

```jsx:Toast
import { Toast } from 'native-base'

...(省略)...

Toast.show({
  text: 'たしか６文字までの名前だったはずじゃ',
  type: 'danger',
  duration: 3000,
  textStyle: { fontWeight: 'bold' }
})
```

```jsx:Form
import { Text, Item, Input, Icon } from 'native-base'

...(省略)...

const ToggleForm = ({ isError, name, handleChangeName }) => (
  isError ? (
    <Item error>
      <Text>名前:</Text>
      <Input value={name} onChangeText={handleChangeName} />
      <Icon active name="close-circle" />
    </Item>
  ) : (
    <Item success>
      <Text>名前:</Text>
      <Input value={name} onChangeText={handleChangeName} />
      <Icon active name="checkmark-circle" />
    </Item>
  )
)
```
Advent of Code 2018 Day1 で OpenResty に入門した

# Advent of Code 2018 Day1 で OpenResty に入門した

Advent of Code [https://adventofcode.com/] というものを教えてもらったので, 良い機会なので　Lua で書いて OpenResty に入門した.
問題の解説とかは特にしない.
公式ドキュメントの「Getting Started」のプラスアルファくらいの内容.

ロジックが書ける Nginx くらいの認識だったが, 色々調べてみて夢広がった.
この感動をみなさんに伝えたかった.

## 環境

- Mac(OS X 10.13.6) 
- OpenResty(1.13.6.2)
    - 必要なものが全部(Nginx とか Lua とか)入ってるのが OpenResty の良いところ.
    - 公式ドキュメントを参考に(https://openresty.org/en/installation.html)
      - もし Mac を使っていれば Homebrew でもインストールできる
          - 私は asdf を利用した
          - https://github.com/smashedtoatoms/asdf-openresty

## 本編

### ディレクトリ構成

```
├── input.txt
├── logs
├── conf
│   └── nginx.conf
└── lua
    └── part1.lua
```

- input.txt
  - Advent of Code の input データ
    - OpenResty とは関係ない
- logs
  - nginx のログ出力先ディレクトリ
  - error.log とか access.log とか
- conf/nginx.conf, lua/part1.lua
  - **下記で説明**
 
#### conf/nginx.conf

nginx の設定ファイル.

```nginx

worker_processes  1;
error_log logs/error.log;

events {
  worker_connections 1024;
}

server {
  listen 8080;
  location / {
    default_type text/html;
    # lua ファイルパス指定
    # nginx の起動オプション(p)にカレントディレクトを指定するため,
    # カレントディレクトリからの相対パス
    content_by_lua_file lua/part1.lua;
  }
}
```

#### lua/part1.lua

```lua

ngx.req.read_body()
local d = ngx.req.get_body_data()

local result = 0
for v in string.gmatch(d, "(.-)\n") do
	result = result + tonumber(v)
end

ngx.say(result)
```

### 実行

#### nginx 起動

```shell
$ openresty -p `pwd`/ -c conf/nginx.conf
```

#### リクエスト

```shell
$ curl -X POST --data-binary @input.txt http://localhost:8080/
445
```

## 感想

- 単一機能のマイクロサービスとかは OpenResty で良さそう
- OpenResty の Github とか awesome-resty を見てると夢が広がる
    - OpenResty[https://github.com/openresty]
    - awesome-resty[https://github.com/bungle/awesome-resty]
webpack + babel の開発環境でIE対応させる

まず　babel-polyfill をインストール。

```bash
yarn add @babel/polyfill
```

その次に webpack.babel.config.js の entry の項目を以下のように修正

```javascript
// 修正前
entry: {
        test: './src/test/main.js'
}

// 修正後
entry: {
        test: ['@babel/polyfill', './src/test/main.js']
}
```

これでトランスパイルすればIEなどES6対応していないブラウザのサポート完了。

詳細は[公式ページ](https://babeljs.io/docs/en/babel-polyfill)

Polyfillは prototype を上書きしたりするため使用にはいくらか注意が必要。問題点などはこの記事によくまとめられている。

https://blog.jxck.io/entries/2017-02-17/polyfill-implementation-guideline.html
CSSのみでクリスマスツリーを書いてみる

この記事は[ウェブクルー Advent Calendar 2018](https://qiita.com/advent-calendar/2018/webcrew)の16日目の記事です。
昨日は@kalzitさんの「KtorでWebAPI」でした。

# はじめに
もうすぐクリスマスですね！
弊社のある恵比寿ガーデンプレイスでは広場に毎年大きなクリスマスツリーが展示されます。
そこからレッドカーペットがすーっと伸び、その先にはアノ有名なBaccarat様のグラスツリーが･･･（美）

ということで、かなりデフォルメされイラスト化してますが、思い付きでそのクリスマスツリーをHTMLとCSSだけで書いてみました。
どうぞさらっとご覧ください。

# ソースコード
<p data-height="750" data-theme-id="0" data-slug-hash="oQGexy" data-default-tab="result" data-user="maiunderwood" data-pen-title="CSSでクリスマスツリー" class="codepen">See the Pen <a href="https://codepen.io/maiunderwood/pen/oQGexy/">CSSでクリスマスツリー</a> by maiunderwood (<a href="https://codepen.io/maiunderwood">@maiunderwood</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

# 解説
ざっくりですが、解説しますと･･･。
基本は**要素を作り、形を作り、色をつけ、回転させ、配置する**の繰り返しです。
図形を作り、それを組み合わせていくイメージです。

- もみの木
divで正方形を作成します。
border-radiusで1つの角だけ50%にする（扇形の完成）。
弧の部分が下に来るようにtransform:rotateで回転させる。
これを3つ作成して、正方形の大きさを少しずつ変え、ずらして重ねれば完成！
ちなみに下に黒いborderをつけることで影を演出し、上に白いborderをつけることで雪が積もった感を演出してみました。

- オーナメント（赤）
もみの木に似ていて、今度は1つの角以外をすべてのborder-radiusを50%にします。
そうすると涙型になりますね、これもtransform:rotateで回転させます。

- 6点の星（トップスター）
divを作成したら、borderを使って三角形を作ります。
疑似要素を使ってもう一つ三角形を作るのですが、この時最初に作った三角形とは逆になるように作ります。
これらをpositionでうまく重ね合わせると･･･6点の星の出来上がりです。

･･･とこのようにお好きなオーナメントを作成していき、それをpositionで配置（飾り付け）します。
オーナメントはCSSアニメーションを取り入れて動きを出すと雰囲気が出てちょっとリッチになります。

- レッドカーペット
borderを使って台形を作成します。
長さが出るように調整すれば･･･ちょっとだけ奥行きのある感じに見えますね！

- 雪
サイズを大小作り、CSSアニメーションを使ってハラハラと舞わせてみました。
落ちていきながら左右に少し移動させると舞ってる感がでますね。こちらはtransform: translateで左右に移動させました。
さらに少し時間差をつけてあげると･･･いい雰囲気が出ます（笑）

# 最後に
こんな遊びのようなコーディングも、実際やってみるとすごく勉強になります。
CSSプロパティもたくさん種類があって業務だけではなかなか使いこなせないので、こういったときに色々試してみるといいかもです。

***
ウェブクルーでは一緒に働いていただける方を随時募集しております。
お気軽にエントリーくださいませ。

[開発エンジニアの募集](https://hrmos.co/pages/1004681658307198976/jobs/0000005)

[フロントエンドエンジニアの募集](https://hrmos.co/pages/1004681658307198976/jobs/0000001)
Intellijでunused importを消す

いらないimportいつも消し忘れるのでIDEでなんとかできないかなと思って、調べてみたら[IntelliJのヘルプ](https://www.jetbrains.com/help/idea/managing-imports-in-scala.html#optimize_imports)にありました。

## やり方
自分はUltimate2018.2.5を使っています。

+ メニューから ` Code > Optimize Imports` , または
+ `control + option + O` を押す

だけ。ファイル単位でもディレクトリ単位でも実行できます。
ただし広域でやるとちょっと怖い…

optimizeなのでunused import以外順番とかも並べ直してくれます。
あとgitとか使っている場合は、
`process only VCS changed files`をチェックしとけばローカルで変更したファイルだけ適用されます。
![スクリーンショット 2018-12-07 15.29.41.png](https://qiita-image-store.s3.amazonaws.com/0/158482/e6e1771d-1191-29bb-bcc0-72279b259916.png)

## 自動的にやってもらう
`Preferences > Editor > General > Auto Import` で,
`Optimize imports on the fly(for current project)` にオンにしとけばいいです。
チーム開発の時import layoutを揃えとかないとdiffがすごいことになってしまいそう…
クラッピーで小さく拍手

この記事は[#クラッピーチャレンジ Advent Calendar 2018](https://adventar.org/calendars/3029) ７日目の記事です。

![clappygif_s.gif](https://qiita-image-store.s3.amazonaws.com/0/59911/bda18e9c-1316-4e1b-1cfb-f8dfa1f1a964.gif)![clappygif_s.gif](https://qiita-image-store.s3.amazonaws.com/0/59911/bda18e9c-1316-4e1b-1cfb-f8dfa1f1a964.gif)![clappygif_s.gif](https://qiita-image-store.s3.amazonaws.com/0/59911/bda18e9c-1316-4e1b-1cfb-f8dfa1f1a964.gif)![clappygif_s.gif](https://qiita-image-store.s3.amazonaws.com/0/59911/bda18e9c-1316-4e1b-1cfb-f8dfa1f1a964.gif)![clappygif_s.gif](https://qiita-image-store.s3.amazonaws.com/0/59911/bda18e9c-1316-4e1b-1cfb-f8dfa1f1a964.gif)![clappygif_s.gif](https://qiita-image-store.s3.amazonaws.com/0/59911/bda18e9c-1316-4e1b-1cfb-f8dfa1f1a964.gif)

年末ですね。盛り上げ時にはクラッピーは欠かせません。
ただ、少々お堅いイベント等で拍手のかわりにクラッピーを鳴らすと、**お前らうるさい**、と言われることもあります。やっぱり時と場所を選んでクラッピーを鳴らしたいですね。というか、**時と場所に合わせて持っていくクラッピーを選びたい**ですね。

そんなわけで、今回は**あまりうるさくないクラッピー**を作ってみることにします。

###音の出るしくみを調べる
クラッピーの両手はバネでつながっています。トリガーを引くと両手が開くとともにバネがのびはじめ、トリガーを引ききったところでバネがもとに戻り、閉じた両手が衝突することで音を発生させています。
![IMG_6156.jpg](https://qiita-image-store.s3.amazonaws.com/0/59911/85562a63-f755-3934-2eb2-5eb1bd979527.jpeg)

###騒音対策１　バネをのばす
そこで、このバネを少しゆるくすることで衝突時の衝撃を和らげ、音を小さくします。
![IMG_6145.jpg](https://qiita-image-store.s3.amazonaws.com/0/59911/d525ac2b-b687-456b-e304-b78c03a620ee.jpeg)
上がもとの長さのバネ、下が少し左右に引きのばしたバネです。あまり伸ばしすぎると拍手の機能に支障をきたすので慎重に行ってください。
これで少し音をやわらげることができます。

しかしやはりバネですので、バネが収縮する間は常に

```math
F=kx
```
の力が発生し、衝突時には最高速度に達しているものと思われます。衝突速度を下げようとさらにバネをのばすと、拍手の機能そのものを損なうおそれがあります。

###騒音対策２　磁石の反発力を利用する
そこで、衝突前に減速するよう、両手に磁石を埋め込みます。
![IMG_6146.jpg](https://qiita-image-store.s3.amazonaws.com/0/59911/789b99f0-93f6-d5fe-f9a9-5887f8426b85.jpeg)
磁石には百円ショップで売っているネオジム磁石を使用しました。両面テープで固定し、念の為その上からさらにテープで固定しています。
両手に入れる磁石はおなじ極が向き合うように固定してください。向きを間違えると逆効果になります。

![IMG_6157.jpg](https://qiita-image-store.s3.amazonaws.com/0/59911/cb15d8e2-b0f3-f5ed-180e-e0364d2cccce.jpeg)
実装を終えるとこのような形になります。磁石の反発力によって少し開いた手が、「うるさくないよ」と言っているようで好感が持てます。

###実演
[こんな感じ](https://youtu.be/QMBJd5Un644)になりました。
動画だと思ったほど音の違いがわからなくて残念ですが、かなりマイルドな音になりました。
これからはTPOにあわせてこのクラッピーを使っていこうと思います。

[あわせて読んでね](https://blogs.yahoo.co.jp/stake2722/65159860.html)
Planning Analytics for Excel (PAx)のバージョン確認方法

#Planning Analytics for Excelのバージョン確認方法
Planning Analytics for Excel(通称PAx)が導入されている環境で、自分が使ってるPAxのバージョンってどうやって確認するのか、と質問を受けましたが、探しても全然情報が無く、仕方がないので全バージョン(2018年12月時点)のcmplst.txtを見比べて判定しました。
という訳で、結構面倒くさかったので、もったいないので共有しておきます。

#手順
PAxが導入されているPCで、
C:\Program Files\IBM\cognos\IBM for Microsoft Office\cmplst.txt  ※64bit
C:\Program Files (x86)\IBM\cognos\IBM for Microsoft Office\cmplst.txt　※32bit
ファイルを開いて、以下の太字の箇所を見ます。

[Main Applications]

COR_APP_version=COR_APP-AW32-ML-RTM-11.0.26.25-0
COR_APP_name=Cognos 8 Analysis for Excel
CAFES_version=CAFES-AW32-ML-RTM-10.3.0.1-0
CAFES_name=Cafes for Excel
**CORREDIST_version=CORREDIST-AW32-ML-RTM-11.0.26.29-0**
CORREDIST_name=IBM Planning Analytics for Excel

この「CORREDIST_version」の11.0.26.29-0って、どのバージョンよというのは公開されていないようなので、全バージョンダウンロードして、一覧表作成してみました。

| Planning Analytics for Excel バージョン | CORREDIST_version |
|:-----------------|------------------:|
| 2.0.0             | 11.0.0.368-0 |
| 2.0.1             | 11.0.0.373-0 |
| 2.0.2             | 11.0.0.485-0 |
| 2.0.3             | 11.0.26.29-0 |
| 2.0.4             | 11.0.30.17-0 |
| 2.0.5             | 11.0.34.13-0 |
| 2.0.6             | 11.0.36.10-0 |


よって、例にあったcmplst.txtは、11.0.26.29-0なので、PAx 2.0.3のという事がわかります。

以上、ご活用下さい。
PHP、SQL Serverで絵文字を含むデータをLIKE検索したい

##前提
・PHP 5.6.38
・SQL Server 12.0.2000.8
・対象のテーブルとデータ
**MyCats**

| ID(INT)          | Name(NVARCHAR(32))|
|:-----------------|:------------------|
| 1                |バブルス🐣          |
| 2                |ブロッサム🐈         |
| 3                |バターカップ😇       |

登録の際はphp側でデータを変換してからSQLでinsertしています。

```sample.php
$name = mb_convert_encoding($name, 'UTF-16LE','UTF-8');
$name = bin2hex($name);
$name = '0x' . $name;
```

```
INSERT
 MyCats(ID, Name)
VALUES
　(4, CONVERT(varbinary(MAX), N'{$name}', 1));
```

こうすることで4バイト文字のデータを保持しています。
参考：[freetds + SQLServer で絵文字をSELECT, INSERTする](https://qiita.com/koji-oura/items/7d691f1aec459a6459e7)

##方法
やはりまずphpで変換します。

```sample.php
$name = mb_convert_encoding($name, 'UTF-16LE','UTF-8');
$name = bin2hex($name);
$name = '0x' . $name;
```
そして

```
SELECT ID, Name FROM MyCats WHERE Name LIKE '%' + CONVERT(NVARCHAR(32), {$name}) + '%';
```

っていうのでできました。
他にもやり方あるのかもしれませんが、一応これでできましたという一例でした。
Macでコードのデプロイが終わったら音がなるようにしたメモ

#背景
頻繁なクラウドへのコードデプロイをしている数分間れなにか作業するよね
↓
ずっとログみてるのも時間の無駄だから別作業するよね
↓
でも終わった直後からそっちの作業に戻りたいよね
↓
デプロイ終わったら音鳴ればよいのに

#やったこと
####①bash_profileを開く

```bash
vi ~/.bash_profile
```

####②エイリアスを書き込む
※今回はIBM Cloudでカレントディレクトリのソースをクラウドへデプロイするコマンド

```bash
alias push='bx app push && afplay /System/Library/Sounds/Ping.aiff'
```


####③変更を反映させる

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

####④試してみる
・・・・ぽんっ

#まとめ
音がなるまで別作業に集中することができた！！

#おまけ
これだけだと本当にただのメモになってしまうので、デフォルトで私のMacに入っていた音声ファイルとその音をまとめたチートシートを作ってこの記事を締めたいと思う。

| ファイル名     | 音       |
|----------------|----------|
| Basso.aiff     | ぐぉ     |
| Funk.aiff      | とぅん   |
| Ping.aiff      | ぽんっ   |
| Submarine.aiff | ふぉーん |
| Blow.aiff      | ふーん   |
| Glass.aiff     | ちーん   |
| Pop.aiff       | こっ     |
| Tink.aiff      | でぃっ   |
| Bottle.aiff    | きっ     |
| Hero.aiff      | ふぉん   |
| Purr.aiff      | ふぇー   |
| Frog.aiff      | ぴゅん   |
| Morse.aiff     | ふぉっ   |
| Sosumi.aiff    | きょん   |
【Ruby】アルファベット1種禁止縛りでFizzBuzz

[【java】アルファベット1種禁止縛りでFizzBuzz【縛り】](https://qiita.com/ki_ki33/items/c54bd4c55b30e7f8f926)という面白い記事を見つけたので、これを~~パクって~~Rubyでもやってみた。

# ルール
元記事をだいたい継承する。

1. Ruby2.5 (CRuby)
2. 標準出力にFizzBuzzを出力する
   1. 数字1つにつき1行
   2. 文字は「Fizz」「Buzz」「FizzBuzz」
3. ループや条件分岐するところを埋め込みで解決しない
4. 余計な標準出力、エラー出力は禁止（改行はOK）
5. アルファベットを1種類だけ使用禁止
6. 大文字小文字は区別なし
7. 外部ファイル禁止（Ruby標準ライブラリのみ可能）

ちなみに、使用していない文字は以下のコマンドで確かめた。

``` bash
tr -cd 'a-zA-Z' < fizzbuzz.rb | ruby -ne 'p [*"a".."z"] - $_.downcase.split(//)'
```

# 結論
Javaと違って全文字縛れます

# 詳細
## acghjkmqvwxy
元記事にならい、[ウィキペディアのFizzBuzz](https://ja.wikipedia.org/wiki/Fizz_Buzz)のPythonコードをそのままRubyで実装した。

```ruby:fizzbuzz.rb
for 数 in 1..20
  if 数 % 15 == 0
    puts "FizzBuzz"
  elsif 数 % 3 == 0
    puts "Fizz"
  elsif 数 % 5 == 0
    puts "Buzz"
  else
    puts 数
  end
end
```

## bfioprtuz
元記事は`System.out.format`を使っていたので、こちらは`String#%`を使ってbuzを削った。
forはeachに（もちろんdo~endではなく{}）、ifはcaseに、putsは`$> <<`に変えてfioprtの6文字を削った。
ちなみに`$>`は`$stdout`のエイリアスで、`IO#<<`は`IO#write`とほぼ同じことをするメソッドである。

```ruby:fizzbuzz.rb
(1..20).each { |数|
  case 0
  when 数 % 15
    $> << "%c%c%c%c%c%c%c%c%c" % [70, 105, 122, 122, 66, 117, 122, 122, 10]
  when 数 % 3
    $> << "%c%c%c%c%c" % [70, 105, 122, 122, 10]
  when 数 % 5
    $> << "%c%c%c%c%c" % [66, 117, 122, 122, 10]
  else
    $> << 数 << "%c" % 10
  end
}
```

# delns
case ~ when ~ else ~ endを消すため、配列に入れたProcをcallすることで、あまりの判定を配列のインデックスですることにした。elseとendが消えたので、これでdlnsがなくなった。
あとはeachをuptoに変えればeも消える。

```ruby:fizzbuzz.rb
1.upto(20) { |i|
  p15 = -> {
    $> << "%c%c%c%c%c%c%c%c%c" % [70, 105, 122, 122, 66, 117, 122, 122, 10]
  }
  p3 = -> {
    $> << "%c%c%c%c%c" % [70, 105, 122, 122, 10]
  }
  p5 = -> {
    $> << "%c%c%c%c%c" % [66, 117, 122, 122, 10]
  }

  a = [p15]
  a[3] = p3
  a[6] = p3
  a[9] = p3
  a[12] = p3
  a[5] = p5
  a[10] = p5

  (a[i % 15] || -> { $> << i << "%c" % 10 })[]
}
```
変数名を除けば、アルファベットは文字列のcとuptoの5文字しか使っていない。もはや記号プログラミングに近くなってきた。

# まとめ
意外とあっさり全文字出来てしまった。

今回は使わなかったが、`"%c" % 数字`でどんな文字列でもつくれるとなれば、evalを使えばcとevalの5文字で何でも出来る。
スクリプト言語で同じことをやる場合はevalも禁止したほうが面白いかもしれない:thinking_face:

# おまけ
せっかくなので、アルファベット以外でも縛ってみることにした。
ただ数字は1文字縛ったところで足し算引き算でいくらでも作れるので、記号に関してやってみる。
1つ目のfor版のコードに含まれる`.%="`を無くしていく。

## %="
"は'に置き換えればいいだけ。==はcaseにして回避する。
%は`Numeric#modulo`でもいいが、今回は`Integer#chr`で得た文字列をsendするやり方にした。

```ruby:fizzbuzz.rb
for 数 in 1..20
  case 0
  when 数.send(37.chr, 15)
    puts 'FizzBuzz'
  when 数.send(37.chr, 3)
    puts 'Fizz'
  when 数.send(37.chr, 5)
    puts 'Buzz'
  else
    puts 数
  end
end
```

## .
1つ目のコードで`.`が登場するのは`1..20`のみ。`Range.new`にしたいところだが、`.`が入るので`Range::new(1, 20)`とする。
ロリポップにSSL入れたらJavaScriptが動かなくなった話

#初めに
前のバイト先の知り合いからホームページ作成の仕事をもらいました。
それでサイトをつくりそれをロリポップを使って公開したのですが「SSLを導入してない!!」と怒られたので導入しました。

#なぜかJavaScriptが動かなくなった
まずSSLを導入しそのあとhttpにアクセスされたらhttpsにリダイレクトするようにしました。

これで終わり…と思ったのですがなぜがJavaScriptが動いてない。

コンソールを見てみると酷いことになってました。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/207921/eef9f899-5a62-86f5-3c3d-abe764ccfdf9.png)


#httpsを使っているサイトからhttpにアクセス出来ない
エラーを見たところjqueryを使うのにhttp://code.jquery.comにアクセスしていてそれがこれがいけないっぽい。

とりあえずhttps://code.jquery.comに変更したらうまくうごきました。めでたしめでたし




#ちなみに

ロリポップでhttpsにリダイレクトする設定をしたい場合はロリポップFTPを使って.htaccessというファイルを作ってパーミッションを604にして中身に


RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


これを書いたらいけると思います。

またhttpsにリダイレクトさせるわけではなくhttpにアクセスできなくしたい場合は

.htaccessに

SSLRequireSSL 

とかけばOKです。
[コミュニティガイドラインに抵触している可能性があります]Qiitaのレビュー

「Qiitaユーザー大決戦、ベストレビュアーは誰だ!?《その１》 Advent Calendar 2018」というアドベントカレンダーを見て、登録して真面目に考えました。
このキャンペーンそのままやったらコミュニティガイドラインに抵触するよね？

ツール名:Qiita

## 良いポイント

プログラミングに関して多数の記事が共有されており、最新のこと以外は調べればだいたい出てくるので非常に重宝しています。
また、アウトプットする場所としても多くの方に見ていただくことができ、訓練になります。

## 改善してほしいポイント

コミュニティのあり方についてもう少し考えてほしいと思います。
今回の企画は「レビュー」という明らかにコミュニティ・ガイドラインに抵触しなければ書けない内容になっています。

具体的には、

* プログラミングに関する記事を投稿しよう
* 宣伝や販売を主目的とした記事を投稿しない
* Qiitaへの要望や意見はサポート窓口へ（Qiitaをレビューした場合）

特に上から２つです。

上記のキャンペーン必須項目をそのままなぞった記事が投稿された場合、その記事は「プログラミングに関する再利用性・汎用性の高い情報が集まる場をつくろう」というQiitaのコミュニティ趣旨に反しているように思います。レビューに再利用性・汎用性なんてあるのでしょうか？　IT製品やクラウド製品のレビューはプログラミングに関する記事になるのでしょうか？

__Qiitaを利用するコミュニティと対話をして、どんな記事を共有するのが望ましいか、コミュニティが守るべきガイドラインはなんなのか、上からではなく対話から導き出してほしいと思います__

## メリット

様々な人の興味に基づいて、プログラミングに関する再現性の高い情報が集まっているため、読むだけで学ぶことが多い、書くことで学ぶことが多い、といった点は非常に魅力的です。また、Qiitaに投稿する人同士緩やかなコミュニティを形成できるため、楽しめるのがメリットです。

## まとめ

Qiitaがどういう場を提供して、ユーザーがどういうコミュニティを形成するのか、適切な答えを導き出していただきたいと思います。
WWRというライトニングトーク会の取り組みについての話（Photocreate Advent Calendar 10日目 ）

フォトクリエイト カスタマーバリュー開発部長 の @yoshiokahideki です。
この記事は [Photocreate Advent Calendar 2018](https://qiita.com/advent-calendar/2018/photocreate) の 10日目 の記事です。

## はじめに
私の部署では、WWR（WeeklyWorksReview）というライトニングトーク的なものを行っていたのでご紹介します。

## WWRを始めた経緯と変遷
WWR（WeeklyWorksReview）とは、もともとは自分達が取り組んだことを、同じチーム内の人達に定例会議の場で共有するための説明会になります。
各自持ち回りで順番が回ってきます。部長であろうと、絶対にプレゼンをする必要があります。

![14f6ddd3123e7638a2cd6565e7b96ef5.jpg](https://qiita-image-store.s3.amazonaws.com/0/57235/8df8df3f-5c1e-fc49-3987-7944953a0220.jpeg)
ゆるーくやってます。

資料を作り込んでもヨシ、簡単な資料と喋りで説明してもヨシ、資料を作らずにホワイトボードに書きながら説明してもヨシ、と伝わるならばどんなスタイルでもOKです。

当初の目的は、

- 取り組んだ内容を共有し、チーム内にノウハウを蓄積すること。
- 参加したセミナー等をフィードバックする場。

裏目的は、

 - 人前で話す機会を作ることで、公の場で話をすることに慣れること。

になります。

当たり前ですが、最初は、お堅い仕事の話が中心でした。

徐々に、自分が仕事以外で取り組んでいることや、自分が好きなこと・体験したことの説明などに幅が広がっていき、結果的に「テーマ自由」となりました。


しばらくやってみて、目的に、

- お互いのことを知ることでコミュニケーションを促進させる。

が追加されます。

また、WWRがキッカケで話が広がり、他部署を巻き込んだセミナーのフィードバック会やワークショップも展開されました。
![image.jpg](https://qiita-image-store.s3.amazonaws.com/0/57235/442590de-52a0-b07f-a841-cd7433820e9f.jpeg)
GAIQや上級Web解析士・初級Web解析士を持つ方々も参加いただき、部署の垣根を超えて大盛り上がりでした。

## WWRでどんな内容のものが語られたか
WWR内で語られたタイトルのみを一部抜粋してみると下記のようなものがあります。

- ディレクションガイドラインについて
- 水木しげると私
- 最近ハマっているマンガの紹介
- 宅配ピザランキング
- 星の撮影方法
- 書籍「起業の科学」
- 祖父母会員増加施策の結果
- Spotifyについて
- SCSSとCompassのチートシートについて
- CESについて
- アルバム機能について
- 広告について（What to say）
- 平標山遭難未遂事件
- スーパー戦隊について
- ドローンはどこで飛ばせるのか？
- 自己紹介＆人間工学
- ヘビーメタルの歴史
- フルサイズのカメラを購入した話
- 音ゲーについて
- 山岳レスキュー訓練に参加してみた
- アライアンスの取り組み概要
- 稲川祭りについて
- 目標立ててますか？
- ライブ会場について
- 節税しながらグルメを楽しむ方法
- クラフトビールについて
- USJとディズニーリゾート 徹底 じゃないけど 比較
- 今年の競馬名勝負
- チーズの小話
- 多言語（海外向け）サイトについて
- はがきテンプレ追加手順
- 国内旅行をお得に快適に行く
- 映画「エイリアン」の魅力を語る
 
見事にwork以外が多いことがわかります（笑）

読んでいると、コレとコレは同じ人だな・・などがわかると思います。
真面目な仕事の話から、冬山で遭難しかかった話（をプロジェクトに例えて）、オカルトネタまで（笑）幅広い内容となっています。

## WWRをやってみた結果
- 取り扱う内容の幅が広がったことで、参加のハードルやプレッシャーが下がった。
- 下がったことにより自分の話やすいテーマからプレゼンを行うことができるようになった。
- work以外のプレゼンからその人自体への理解が深まり、部内でのコミュニケーションが活発になった。
- 普段のコミュニケーションが活発になることで、プロジェクト内でもコミュニケーションが活発になり、プロジェクトが円滑に進んだり、トラブルが減少した。
- コミュニケーションが活発になることで、workのプレゼンも増えてきた。
- 人前で話をすることに慣れた事で、社員会（全従業員が参加する会）で受賞した際のスピーチを自分の言葉で伝えれるようになった。
- 提案の場でも雰囲気にのまれないようにプレゼンができるようになった。

## まとめ
コミュニケーションを取りやすい場・促進させるキッカケをつくることで、物事が円滑に進み、職場の雰囲気も良くなり、状況の変化にも柔軟に対応できるようになりました。
また、その人の発信力が増えることで、活躍の場が増え、結果的に人材の育成にも寄与できたのではないかと思います。
コミュニケーションの問題が解決されると、かなり多くの物事が円滑になりますね！


<!--
## 明日は

明日の記事は @%{@アカウント} さんが %{テーマ／タイトル} について です。
（次の人が更新したらあとで記事を更新してリンクを自分で張る）

-->

フォトクリエイトでは、趣味が多彩な面白い方からの [ご応募をお待ちしております](https://recruit.photocreate.co.jp/entry/?utm_source=qiita&utm_medium=advc2018&utm_campaign=885e5af7123d84e6de23)。
GET(アクティブレコード番号)の話

ちょっと戸惑ったので備忘録的に

#リストレイアウトにボタンを配置するとこんなことになる問題
![1207.jpg](https://qiita-image-store.s3.amazonaws.com/0/181254/a93c3a35-cc85-490a-b390-c60953b647be.jpeg)
ボタンはすべてのレコードに表示されるので、まあこうなります
うまいこと回避する方法を紹介されていた記事をどこかで見かけたのですが、改めて探しても見つけられず
(ご存知の方いたらコメントいただけると嬉しいです)。
とはいえ、FM17では**GET(アクティブレコード番号)**というのがあるので、
これで一発じゃね？と思ったらハマった話です

##FileMakerのヘルプ
https://fmhelp.filemaker.com/help/17/fmp/ja/index.html#page/FMP_Help/get-activerecordnumber.html
によると、**現在の対象レコード内のフォーカスがあるレコードを表す番号を返します。**とありますし、
>その行がアクティブなポータル行ではない場合にボタンを非表示にするには、対象のボタンを選択します。インスペクタのデータ 数式 タブで、[次の場合にオブジェクトを隠す] に次の式を入力します:
>not (Get (レコード番号) = Get (アクティブレコード番号))

とありますので、簡単だね、指示通りに入力してみます

![1207.jpg](https://qiita-image-store.s3.amazonaws.com/0/181254/a93c3a35-cc85-490a-b390-c60953b647be.jpeg)
変わらないじゃないか

レコードに**GET(アクティブレコード番号)**を仕込んで試してみると、どうやら選択したレコード番号が想像したようには反映されていない

##答えはここにあった
https://www.genecom.co.jp/tech-info/new-features-17/get-activerecordnumber
Genecom様どうもありがとうございます

>リストレイアウトでこの関数を用いて「条件付き書式」や「オブジェクトを隠す」機能を使う場合は、レコードの切り替え後に [ウインドウ内容の再表示] スクリプトステップを実行する必要があります

スクリプトトリガ>OnRecordLoad　に「ウインドウ内容の再表示[]」を設定しました
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/181254/1d850d54-1ac1-2446-e831-1cf408f4e372.png)
イエーイ
hard-source-webpack-plugin でエラーになった時の対処法

`laravel-mix`で以下のように設定

```js
mix.webpackConfig({
  devtool: "source-map",
  plugins: [new hardSourceWebpackPlugin()]
});
```

ここで`yarn watch`すると以下のように処理が止まる。`yarn dev`は処理が止まらず成功する。

```
[centos@5deeeb5bfbc3 html]$ yarn watch &
[1] 2004
yarn run v1.10.1
$ cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js

Webpack is watching the files…

[hardsource:ad92f9f9] Using 17 MB of disk space.
[hardsource:ad92f9f9] Tracking node dependencies with: yarn.lock.
[hardsource:ad92f9f9] Reading from cache ad92f9f9...
 10% building modules 6/6 modules 0 active/var/www/html/node_modules/loader-runner/lib/LoaderRunner.js:19
        var i = req.indexOf("?");
```

キャッシュ、上記に`Reading from cache ad92f9f9...`とあるので、以下のように消したらとりあえず動いた。

```zsh
rm -rf node_modules/.cache/hard-source/ad92f9f920d89dd2a52183af7881d7d8fb99d4e88d612e39fbd2168d391e200d/
```
ブロックの署名検証(catapult)

# はじめに

**Don't trust veryfy!**

とはよく言いますが、

**そんなこと言われてもどうすりゃいいのさ...**

ですよね。ほぼすべての人が自分で確認なんてしないと思います。
ですが、やりましょう。（署名検証だけだけど）

今回はcatapultでやります。

# 署名検証するブロック

今回署名検証してみるブロックは、下記の通り。署名されるフィールドも合わせて確認してください。

自分で作ったネットワーク上のデータなので、テストネットのデータなどとは全く関係の無いデータです。

![2018-12-7-block-signature-auth-1.png](https://qiita-image-store.s3.amazonaws.com/0/216882/c08183e1-4b9a-818a-5c43-4a2aeb87da83.png)

言わずもがなですが、 **署名が検証される = データが公開鍵に紐づく秘密鍵の持ち主が署名したことが確認できる** という意味を持ちます。つまり、ブロックをリレーしているときに、署名されたデータ部分を誰かが改ざんするとバレるということですね。

# 電子署名は何を使っているか

catapultで使われる電子署名は `ed25519` です。この `ed25519` は内部でハッシュ関数をつかっているのですが、そのハッシュ関数がcatapultだと `SHA3_512` になっています。 NIS1(現行のNEM)だと、 `Keccak_512` を使っています。

ちなみに、NIS2に関しては、ここはNIS1のものに合わせられるそうです。あくまでcatapultでは `SHA3_512` を使っているよということです。

`ed25519`のフローはこちら。

![ed25519_algorithm.png](https://qiita-image-store.s3.amazonaws.com/0/216882/778a654a-9eaa-2dc1-458f-b9dd3a9867a6.png)

図の中に `HashFunction` があるのが分かると思います。これが違うと署名も変わりますし、検証できるものもできなくなります。

SHA3とKeccakの関係はこちら。
https://qiita.com/mincoshi/items/4b8fd450f13637e6a1f2

# 検証してみる

言語は何でも良かったのですが、今回はrubyで

```ruby
require "ed25519_keccak"

class Deterministic_block_nis2
  attr_reader :size, :signature, :pubkey_of_signer, :version, :entity_type, :height, :timestamp, :diff, :prev_block_hash, :tx_hash , :private_key

  def initialize
    @size = "c0000000"
    @signature = "addb1df57ee20e94b43ba09b2789689be51dc80f3f3557cb7973d1fb7107ef32a7f5810d3a0c554d5d8a8dfab0e95e6ef1537ce1aafe62282d8a6186627c260d"
    @pubkey_of_signer = "f59240141852736bc2a23832833eb2114ce037b0066217e09207ddfea0e08478"
    @version = "0390"
    @entity_type = "4381"
    @height = "0200000000000000"
    @timestamp = "141e9dd512000000"
    @diff = "00407a10f35a0000"
    @prev_block_hash = "9050e352bb5bf321522a7067b78c87c3c3cd5c7c7fbc1c96fae82f6d73974452"
    @tx_hash = "0000000000000000000000000000000000000000000000000000000000000000"
  end

  def get_data_buffer
    data_buffer = @version + @entity_type + @height + @timestamp + @diff + @prev_block_hash + @tx_hash
    return data_buffer
  end
end

nis2_block = Deterministic_block_nis2.new

publickey = nis2_block.pubkey_of_signer
message   = nis2_block.get_data_buffer
signature = nis2_block.signature

ed25519 = Ed25519Keccak::SHA3_512.new

is_verify = ed25519.verify( publickey, message , signature, :hex )
puts( "is verify ? : " + is_verify.to_s )
```

実行すると、結果trueが表示されます。

# ライブラリがなかった

rubyを使ったのに深い意味はありません。繰り返しになりますが...

> catapultで使われる電子署名は `ed25519` です。この `ed25519` は内部でハッシュ関数をつかっているのですが、そのハッシュ関数がcatapultだと `SHA3_512` になっています。 NIS1(現行のNEM)だと、 `Keccak_512` を使っています。

ここで困ったことに、rubyのgemを探してもこれがありません。`SHA2_512` ならすぐに見つかったのですが。

で、別の言語使おうかとも思ったのですが、どうせならといろいろ勉強がてら作ってみました。(実装自体は、 `RFC8032` 内にあるpythonのコードをrubyに書き換えたものです)

https://github.com/mijinc0/ed25519_keccak

暗号って自分で触りたくないですよね。この辺がNEMの辛いところかも知れません。

# 参考

https://tools.ietf.org/html/rfc8032
Hyperledger Fabric (v1.2/v1.3) で CouchDB のインデックスを設定し、高速な検索を実現する

IBM developerWorksに記事を書いたので、困っている方は見てみてください。
https://www.ibm.com/developerworks/jp/cloud/library/cl-hyperledger-fabric-couchdb-serach/
Azureの日付設定について(デフォルトタイムゾーンがJSTじゃない問題)


# ん?デフォルトのVMなのにAzureの日付がおかしい・・
昼下がりの午後3時ごろ、Azure上のMarketPlaceにあるCentOSのイメージを利用してVMを作成し、ディスク監視のcronの登録をすすめていたのですが、なぜか出力結果が下記に・・


```
[user@VM ~]$ df -h | grep ramdisk | awk '{ print strftime("%H%M"),$5 }'
0600 0%
```


```0600``` って...:sweat: 朝やんけ:hatching_chick:
現在午後3時、24時間表記では15時。
strftimeで%H%Mでフォーマット定義しているおり、
HH(時間)MM(分)形式で出力されることを想定していたのですが・・
(期待値は```1500```)

初回の時刻同期でいていないのかなぁと思いながら
dateしてみると・・

# dateの確認


```
$ date
Fri Dec  7 05:32:42 UTC 2018
```

...お、おうそういうことか。

時刻同期の問題ではなく

``` UTC ``` だったのね。。

UTCとJSTの時差は+9時間
6(標準時間)+9(時差)=15(日本時間)
で計算上もあってる・・

Azureはグローバルな環境だからタイムゾーンは日本時間(JST)ではなくUTCになっているんだなぁとすごいなぁと
最初思ったのですが、
ふとよく考えればオンプレの場合は何も考えずにルーチンで設定変更作業してるだけかｗ
と一人突っ込みしつつ設定変更を一応ググる。

#設定変更方法の調査

検索してみた結果特にポータル等から設定するわけではなく
Linux側での設定変更でOKなよう。

調査の過程で時刻同期周りも気になって調べましたが、どうやら時刻の同期については[こちら](https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/time-sync)のような形で
NTPで行っているようではない様子。今回の本題からはずれるので別途調査します。


なんとなくIaaSって何でもやってくれるようなイメージにかられますが、
ラッキングや仮想マシンの払い出しに該当する作業を知らないだれかがしてくれるだけで、
サーバー観点からみるとOSからの設定はオンプレと同じっていうイメージそのままのようです。

# 日本時間(JST)へ設定変更
そんなこんな考えながら下記良記事みつけたのでこちらに従ってタイムゾーンを変更していきます。

- [Azure VM Linuxを構築する際に最低限やること](
https://qiita.com/pir0w/items/bf2012a64e785bcfb4c7)

```
$ timedatectl
      Local time: Fri 2018-12-07 05:46:15 UTC
  Universal time: Fri 2018-12-07 05:46:15 UTC
        RTC time: Fri 2018-12-07 05:46:15
       Time zone: Etc/UTC (UTC, +0000)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
$ sudo timedatectl set-timezone Asia/Tokyo
$ sudo timedatectl set-local-rtc 0
$ timedatectl
      Local time: Fri 2018-12-07 14:46:47 JST
  Universal time: Fri 2018-12-07 05:46:47 UTC
        RTC time: Fri 2018-12-07 05:46:48
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
```

もう一度dateも確認すると
```
$ date
Fri Dec  7 15:00:02 JST 2018
```
おぉぉぉ。
dfの結果も下記のようになりログ取れそうです:v:
```
$ df -h | grep ramdisk | awk '{ print strftime("%H%M"),$5 }'
1510 0%
```

#(おまけ)
今回の環境はIaaSでしたがPaaSでも同様なようで下記のようなtipsを発見。
PaaSについても同様の現象が発生するようなので注意が必要です。

[Azureへデプロイ後に陥るトラブルのNo.1は時間関係（UTC）だと思う]
(http://shin21.hatenablog.com/entry/2016/05/05/203000)
Javaメモ(標準クラス) substring

Java 標準クラス 簡単メモ
　部分的に文字数を数えるメソッド

　【substring】
　　
　　・指定位置以降の文字を選択
　　使い方：変数 = String変数.substring(開始位置番号);
　　※変数に落とし込まなくてもそのまま表記することも可能

　　・指定位置から指定位置までの文字を選択(部分的な選択)
　　使い方：変数 = string変数.substring(開始位置番号,終了位置番号)
　　※番号のカウントは0からスタートすること

　　ex）
　　　String word = "ABCDEFGHI";
　　　0=A,1=B,2=C...のようなイメージ
　　
　　//ex)
　　public static void main(String[] args){
　　　//String変数wordにABCDEFGHIを格納　
　　　String word = "ABCDEFGHI";
　　　
　　　//String変数selectWordに"E"以降の文字を格納
　　　String selectWord = word.substring(4);
　　　
　　　//String変数を表示
　　　System.out.println(selectWord);
　　　
　　　//"F"以降を直接表示
　　　System.out.println(word.substring(5));

　　　//"BからG"までの文字を直接表示
　　　System.out.println(word.substring(1,7));
　　}

　　※表示結果※
　　　EFGHI
　　　FGHI
　　　BCDEFG
VisualStudio > React > react-scripts


以下の投稿の続きです。
[React > IE11 > react-scripts ver2 でエラーになる件の対処 - Qiita](https://qiita.com/sugasaki/items/300a2d64b797cf50670c)


## 前段

Visual Studio テンプレートで作成されるプロジェクトにおいて

![image](https://qiita-image-store.s3.amazonaws.com/0/49910/230e4887-e0d1-fbe1-05b8-54090be043fc.png)

create-react-app のreact-scriptsは１.1系である。

```js
  "dependencies": {
    "react": "^16.0.0",
    "react-scripts": "^1.1.5",
  },
```

これを2018.12.7時点の最新2.1.1に上げたところ、IE11ではエラーになる箇所があった。

```js
  "dependencies": {
    "react": "16.6.3",
    "react-scripts": "2.1.1",
  },
```
### Error

Fecth にてエラー

![image](https://qiita-image-store.s3.amazonaws.com/0/49910/9be0e28b-7167-43cb-572a-ee1de3eabb29.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/49910/8e4d9009-f469-3bba-3564-cf0405dbd868.png)



## 原因


[Last call for Create React App v2 · Issue #5103 · facebook/create-react-app](https://github.com/facebook/create-react-app/issues/5103)

 > We have dropped default support for Internet Explorer 9, 10, and 11.
 > Internet Explorer 9,10、および11の既定のサポートを削除しました。

react-scripts2 ではIEのサポートをやめたのが原因


## 対策

とはいえまったく使えなくなった訳ではなく、助け舟も用意されてました。
（いつまで使えるかは不明ですが）

>  If you still need to support these browsers, follow the instructions below.
>  これらのブラウザをサポートする必要がある場合は、以下の手順に従ってください


1, install react-app-polyfill:

```
$ npm install react-app-polyfill --save
$ # or
$ yarn add react-app-polyfill
```

2, src/index.js の先頭行に追加

以下を1行目に追加

```js:src/index.js
import 'react-app-polyfill/ie11'; // For IE 11 support
```


package.jsonは以下のようになりました。

```js:package.json
{
  "name": "WebApplication1",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "bootstrap": "^4.1.3",
    "jquery": "3.3.1",
    "react": "16.6.3",
    "react-app-polyfill": "^0.1.3",
    "react-dom": "16.6.3",
    "react-grid-layout": "0.16.6",
    "react-router-bootstrap": "^0.24.4",
    "react-router-dom": "4.3.1",
    "react-scripts": "2.1.1",
    "reactstrap": "6.5.0"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }
}

```

## 結果

無事にIE11でも動作するようになりました。

![image](https://qiita-image-store.s3.amazonaws.com/0/49910/87718d05-ff7e-0a73-bc87-5d911eedb8db.png)
PHP:UTF-8の文字を1文字ずつに区切る方法

PHPでは`preg_split`で、UTF-8の文字を1文字ずつに区切ることができる。

```php
preg_split('//u', $区切りたい文字列, -1, PREG_SPLIT_NO_EMPTY);
```

* 第一引数: `'//u'`
    * //: 1文字ごとに区切る。
    * u (PCRE_UTF8): パターンと対象文字列は、UTF-8として処理される。UTF-8の1文字(1コードポイント)ごとに区切られるようになる。
* 第三引数: `-1`
    * 分割数の上限を儲けない設定。
* 第四引数: `PREG_SPLIT_NO_EMPTY`
    * 空文字列じゃないものだけが、戻り値の配列の要素になる。
    * 例えば、`$区切りたい文字列 = '';`のとき、`['', '']`が返ってくるのを抑制する働きがある。


## デモ


```php
var_dump(preg_split('//u', 'A1Ä①⌘あ漢😊🐬🙌🏻👨🏻‍💻', -1, PREG_SPLIT_NO_EMPTY));
```

```
array(15) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "1"
  [2]=>
  string(2) "Ä"
  [3]=>
  string(3) "①"
  [4]=>
  string(3) "⌘"
  [5]=>
  string(3) "あ"
  [6]=>
  string(3) "漢"
  [7]=>
  string(4) "😊"
  [8]=>
  string(4) "🐬"
  [9]=>
  string(4) "🙌"
  [10]=>
  string(4) "🏻"
  [11]=>
  string(4) "👨"
  [12]=>
  string(4) "🏻"
  [13]=>
  string(3) "‍"
  [14]=>
  string(4) "💻"
}
```

UTF-8の1コードポイントごとに分解されるので、ひらがなや漢字はおおかた期待通りだが、合成絵文字とか異体字セレクタまで考慮しての分解は流石に無理っぽい。このへんのUTF-8の深淵は、[『絵文字を支える技術の紹介』](https://qiita.com/nonanona/items/b148c212ba7c24942e93)や[『人名や地名に含まれる異体字を壊さないようにするために grapheme_substr もしくは grapheme_extract を使う』](https://qiita.com/masakielastic/items/cb3a9ebd7a03a01c0709)を読むといい。
AWS MediaLive で 4K ライブ配信ってできるの？ 



夜に眠れるって幸せ！ cloudpack の streampack チームリーダー木村です。

突然ですが現在インフラチーム、Web アプリ開発チーム共に絶賛人材募集中でございます。
AWS大好き！ 動画やってみたい！　というそこのあなた！
ご連絡をお待ちしておりますm(_ _)m

# 10/2 加筆

<font color="Red">2019/9/13 に 4K/UHD HEVC ライブ配信に対応しました。（４K AVC は未対応）</font>

https://aws.amazon.com/jp/about-aws/whats-new/2019/09/aws-elemental-medialive-supports-hevc-4k-uhd-outputs-live-channels/

#4K ライブ配信

さてさて、最近 4K ライブ配信の案件があり、それは違うソリューションを利用するのですが、そういえば MediaLive で 4K 配信ってできたんだっけ？ と思い試してみることにしました。

さらっと仕様を確認すると以下のようにあります。

https://aws.amazon.com/jp/medialive/features/

<img width="645" alt="スクリーンショット 2018-11-29 16.32.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/32630672-6121-6ac2-3c42-af34c5dfdac3.png">

ほうほう、確かリリース時にはライブの ４K は未対応と聞いていた記憶があったけど対応したのかぁ、と思いさっそくセットアップですよ！

# チャンネル作成

## Channel and input details

**Input specifications** > **Input resolution** で `UHD` を選択します。

![medialive_home.png](https://qiita-image-store.s3.amazonaws.com/0/172426/55240b83-0f9a-3468-4954-dfb79863f466.png)

## HLS group

**Output groups** > **HLS group**  で 10M/5M/3Mbps の HLS ABR を構成します。

<img width="667" alt="スクリーンショット 2018-11-29 16.55.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/5449ef8a-e7cc-98c0-f082-624522994dc2.png">

## Outputs

各出力設定は以下として、最後に **Update Channel** で更新します。 

| Outputs | Resolution | Video Bitrate |
|:-----------|:------------|:------------|
| Output 1   | 3840x2160   | 10Mbps      |
| Output 1   | 2560x1440   | 5Mbps      |
| Output 1   | 1920x1080   | 3Mbps      |

<img width="667" alt="スクリーンショット 2018-11-29 17.01.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/af20cfc2-4369-89bb-8c67-6e2bbc63a32e.png">

# 結果

怒られたよﾏﾏﾝ....

<img width="678" alt="スクリーンショット 2018-11-29 17.02.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/3b48b854-d1a2-289f-29cd-fa816d2dc010.png">

どうやら入力に 4K を利用できるけど、出力は FHD までってことなのでしょうか。

例によってドキュメントには何も書いてないんですわこれが。

https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/what-is.html

一応出力を FHD に変更して 4K ストリームを入力してみると FHD での配信は可能でした。

# まとめ

2018年12月7日現在、MediaLive で 4K ライブはできませんでした〜

これが対応してくれると色々と楽なのになー。
今後のアップデートに期待です！
laravelのcolumn-sortableでマルチカラムソートする

# やりたいこと

- [Kyslik/column-sortable](https://github.com/Kyslik/column-sortable)を使う
- 複数カラム(日付、時刻)を指定してソート

# 前提

[laravelのページネーションにソート機能を追加する](https://qiita.com/GreatFailure/items/e7daeae404b675f739e1)

# やった

[こんな感じ](https://github.com/Kyslik/column-sortable#columnsortable-overriding-advanced)でオリジナルのソートメソッド作れるからそれでやる。

## Model

カスタムソートメソッドを追加

``` php:Reservation.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Kyslik\ColumnSortable\Sortable;

class Reservation extends Model
{
    use Sortable;

    public $sortable = ['id', 'reserve_date', 'time_from'];

    /**
     * 日付と時刻でorderByするメソッドを追加
     * xxxSortableの形にする
     */
    public function reserveDateTimeSortable($query, $direction)
    {
        // ORDER BY reserve_date ASC/DESC, time_from ASC/DESC
        return $query->orderBy('reserve_date', $direction)->orderBy('time_from', $direction);

        // 日付だけ昇順/降順切り替えで時間は常に昇順にする場合
        // ORDER BY reserve_date ASC/DESC, time_from ASC
        // return $query->orderBy('reserve_date', $direction)->orderBy('time_from', 'asc');
    }
}

```

## View

引数のカラム名を作ったメソッド名にする

``` php:reservation/index.php
<th>@sortablelink('reserveDateTime', '予約日時')</th>

``` 

# 備考

`<th>@sortablelink('reserve_date, time_from', '予約日時')</th>` とかでいけんじゃね？

ダメでした。
今のところ基本機能ではマルチカラムソート対応してなさそう。
ソートのカスタマイズが簡単だからそこまで問題でもないかな。
僕の作業効率はトラックボールを3台買っても変わらなかった

# はじめに

この記事は、[キーボードとマウスとコーヒーと Advent Calendar 2018 - Qiita](https://qiita.com/advent-calendar/2018/keyboard_mouse)の9日目の記事です。

# 自己紹介

* マウスより人差し指トラックボール派
* QWERTY配列キーボードをそのままにDvorak配列使っている
    * QWERTYも0.8倍速になるが打てる
* キースイッチはメカニカルの青軸が一番好き
* 左右分離式キーボード欲しい人
    * ErgoDox
    * Redox
    * Iris
    * その辺り……。
* 飲み物
    * コーヒー（本当はターキッシュスタイルが飲みたいけど、インスタントコーヒー）
    * シーシャ（水タバコ）

# 「弘法筆を選ばず」とは言うが

特にこだわりが無ければ、2000円未満のキーボード、1000円未満のマウス、スマートフォンのフリック入力で事足りる。

しかし環境要因というのは、入力者本人が思っている以上に影響を与えるらしい。

タイピング音、クリック感、よく使うキーへの手首のストローク……。

何があっているかは人それぞれで、自分はたまたま親父がX68000を持っていたので、そのキーボードのイメージがあり、音のよく鳴るメカニカルキースイッチに惹かれがちである。
そんな感じで、会社では FILCO Majestouch MINILA、家では `W` キーや `Ctrl` キーの効きが悪くなってる、Thermaltake Poseidon Zの青軸モデルを使っている。

家でのキーボードにストレスを感じつつある今日このごろ、会社でタイピングしていたら右腕を痛めた。
幸い今は治ったが、おそらく原因はバックスペースやEnterキーを押す時に手首だけをひねってアクセスしていたため、それで負荷がかかって痛めたと思う。

そんな感じで、あと2年半で30歳になることなどを考えると、身体に負荷を掛けない事が求められている気がするので、ErgoDoxとかその辺りの設計のキーボードが欲しいなと思っている所存。Kinesisは身の丈にあってない気がするのでちょっとね……。

左右分割にこだわるのは、タイピングばかりしていると身体が縮みがちなので、酸素の供給量も少なくなり、そして頭が働きにくくなって生産性が落ちる（コードが思いつかないetc……）というのは悲しいので、それならタイピングしている時点で胸を開く姿勢がやはり良いのではと思うため。

# トラックボールを3台も買ってしまったわけ

一時期マウスにしていた。
しかし、やはりマウスは本体を移動させるスペースが必要なのと、手首がすぐに緊張して痛くなってしまうため、トラックボールに今年の6月に戻ってきた。戻ってきてしまった。

お家、会社、持ち運びのラップトップ用。
すべてElecom製で、HUGE, DEPT Pro, DEPTという具合。
「安物買いの銭失い」とは言うかもしれないが、とりあえず今の自分には不満はない。

## そして能率は上がったか → 上がっていない……

道具を変えただけでは、人の能力は上がらない。道具というものは、その人間の潜在的能力を引き出すものである。
元々大した能力の持っていない私のような、Python好きでGoをやる予定のPHPコーダー程度では、そんなものなのだろう。

そもそもの話として、机の上が手の置き場に困るほどに散らかっているのが大分でかい。特に家のデスク。
おかげで、口は散々、
「Blenderでモデリングしたい……Kritaでイラスト描きたい……」
と動かしているだけで、家に帰ると何もしない。何もする気力も起きない。
油圧の弱くなった椅子に腰掛ければ、椅子は勝手に下がり始め、汚い机の何処に腕を置くか困りながら、文字入力を委ねるキーボードはところどころ反応が悪い。
道具のメンテナンスは怠ってはダメだ。そもそもメンテナンスの方法を知らないのでどうしようも無いのかもしれないが……。

# 閑話: 嗜好品について

本当は、コーヒーを脇に置き、水タバコをくゆらせながら作業したい気持ちが凄くある。

会社ではもちろん許されないので家でやりたいが、自宅が残念ながらシェアハウスの3畳半の個室で禁煙である。
なので、本当にそういう事をしたい場合は、たまに行きつけの水タバコ屋でラップトップかスマートフォンとBluetoothキーボードで作業するのが現状の関の山である。

キーボードを買う前に、悠々自適に作業できる部屋に引っ越すお金を貯めるのが先決かもしれない。

# まとめ −環境大事・身体大事−

やはり環境は大事である。

自分の快適な空間を作った上で、道具も良いものを使うのが、一番ストレスがかからないし、身体も痛めないだろう。

自分の身体に負荷がかからないのが一番いいし、負荷がかかっていたら緊張を緩めることも大切にしたいものである。
ということで、寝る前にヨガごっこをやったり、夏場はランニングしたりしてる。

入力デバイスにこだわりすぎて、入力する自分自身のコンディションが最悪だったら、生産性もクソもないだろ？

ということを、また業務時間中に書いていた……。
仕事しろよ……。
算譜中心見直し

ソフトウェアで資料の見直しは算譜(code)が原則

場合によっては、数式、図、動作を記録した動画なども。

紙に書いて図もない設計書はゴミ。

WBSとかいう意味不明の書類は見たことがない。
（見た事がないから意味不明なだけで、意味があるWBSがあるかもしれない）

逆に、算譜(code)だけでわからないこともある。

算譜(code)に制約条件を書いていない場合。

入力の範囲、出力の範囲、入力と出力の関係のうち、算譜に記述していないことを、どのように表現するか。

命名規則。複数の作成元の算譜(code)を一緒に使おうとする場合に、命名規則に矛盾があり、違う意味の変数・関数が同じ名前で衝突することがある。そのように交通整理するか。
50インチモニターにGoogle データポータルでダッシュボードを出してみた （Photocreate Advent Calendar 9日目 ）

こんにちは。CVD部でディレクターを担当している @Takuya-Yamaguchiです。
この記事は[Photocreate Advent Calendar 2018](https://qiita.com/advent-calendar/2018/photocreate) の 9 日目です。

## 僕が働いている環境

僕が所属している`CVD(部)` とは、`Customer Value Development` の頭文字です。
プロダクト、サービスをアップデートしていくことで、顧客体験価値を高めていく。ということを目的としたチームで、エンジニア、デザイナー、ディレクター、プロジェクトマネージャー、プロダクトマネージャーなど、様々な職種のメンバーが在籍しています。

顧客体験価値を高めていくことがミッションですので、機能を追加したり、UIを変更した際に、それらのサービスの利用者に意図した形で受け入れられているのか？日々データを検証して改善していく必要があります。

## この記事の内容

この記事では、データと向き合いながらサービスを成長させていく働き方をしていく為に、取り組んだことについてご説明します。

## 感じていた課題

フォトクリエイトには、CVD部に在籍している開発メンバーの他にも、営業やカスタマーサポートのチームもあります。普段データと向き合う機会が少ないメンバーも交えて、みんなでサービスを良くしていく為には、データをもとにサービスの改善方法を議論したり、意思決定ができるような働き方が必要だと感じていました。

また実際に開発を担当しているエンジニアや、UIを作っているデザイナーも、担当している開発が終わると、別な開発に着手することになるので、自身で開発したもののその後の成果を確認しづらいという課題もありました。

## 実施したこと

サイネージディスプレイを購入し、作業フロアに設置しました。
そしてGoogle Data Studioで作った、ダッシュボードを表示してみました。

まずは、 **サービスがどのように使われているのか？という事実を知ってもらうことが大切** だと思いGoogleアナリティクスの情報をGoogleデータポータルを使って表示してみました。

![display1_03.jpg](https://qiita-image-store.s3.amazonaws.com/0/213595/fe3d35fe-a23b-3174-5b16-039d3f1caf1d.jpeg)

### Googleデータポータルとは

[Googleデータポータル](https://datastudio.google.com/navigation/reporting?hl=ja)は、Google社が提供しているダッシュボードです。
Googleアナリティクス、MySQL、PostgreSQLなど様々なデータソースにアクセスすることが出来て、ブラウザ上の簡単な操作で、データを可視化することが出来ます。そして無料で使えます。


### サイネージディスプレイには他にもこんな内容を映しています

![display_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/213595/479f17f7-8c94-7b72-4b1f-2e24cb329e72.jpeg)

こちらは[IoT機器とIFTTTとSlackで仕事環境の改善してみた （Photocreate Advent Calendar 2日目 ）](https://qiita.com/yoshiokahideki/items/d4caa8d18646c4917189)に
紹介させて頂いた、作業フロアのCO2濃度をグラフ化したものです。
メンバーの出社とともにCO2が増えていくのがわかります。

その他にもサービスに来訪した利用者が購入を完了するまでのプロセスをファネル上に可視化したものや、デイリーの売上情報、AWSの稼働状況なども映しています。


## やってよかったこと

## やるべきことの優先順位に納得感が出てくる

少しづつではありますが、データをもとにサービスを改善していく為の優先順位を決めたり、実施可否の判断ポイントがより納得感のいくものになってきました。
○○の部分を改修することで、売上に紐付く○○のKPIに貢献できそう。開発工数は○人日くらいだから、十分採算が取れるね。という具合に進んでいきます。
またアイデアを形にしたいメンバーは、その必要性を示す為に、裏付けとなるデータを見つけようとしてくれます。このサイクルが、価値のある開発をする上で必要だと考えています。

### 企画の具体性が高まる

達成したいゴールに近づく為に必要なKPIは何か？またはどのようなKPIを設定すべきか？
という意見が増えて来たことにより、企画の具体性が高まったと思います。

例えば一つのスポーツイベントの写真販売で、


- 購入額が○万円以上購入しているロイヤルユーザーは○%
- 購入額が○千円以下のユーザーは○%
- 写真は見てくれているけども、購入頂いていないユーザは○%
- 写真を見に来ていないユーザーが○%

と分類することができます。

写真を見に来てくれているユーザー数は少ないけれど、購入率は高いよね。
という状況であれば、写真を見に来てくれるユーザーを増やすことができれば、売上に貢献できそうです。


### 新しい視点が見つかる

サービスの利用状況を俯瞰して見ると、普段気にしていなかった部分に着目しやすくなります。
CVD部のフロアを訪れた他部署のメンバーが、サイネージディスプレイを見た時に、
カスタマーサポートへのお問い合わせ数が、とても多いことが気になりました。
その内容を見てみると、領収書を送って欲しいという内容が多く含まれていることに気づきました。
ユーザーが自身で領収書をダウンロードできる機能があまり使われていなかった為、
領収書を発行する画面への導線や、UIを刷新したことで、同様のお問い合わせはぐんと減らすことができました。
素晴らしい気づきですね。

## 最後に

フォトクリエイトは約10億枚の写真データを保有しており、サービスサイトも多くの方にご利用頂いております。
データと向き合いながらサービスを一緒に作っていける方の[ご応募をお待ちしております](https://recruit.photocreate.co.jp/entry/?utm_source=qiita&utm_medium=advc2018&utm_campaign=dbd6d56126667534c945)

<!--
明日の記事は [@yoshiokahideki](https://qiita.com/yoshiokahideki)の WWRという取り組みについての話(Photocreate Advent Calendar 10日目)です。
-->
nncでxor

#概要
nncでxorやってみた。
クラウド版。

#データセットを作る。

test2.csvをアップロードする。

```
x__0,x__1,y
0,0,0
1,0,1
0,1,1
1,1,0
```

![d.png](https://qiita-image-store.s3.amazonaws.com/0/18104/5263a2ee-1f0f-e14c-35b1-e389efde3cb6.png)

#プロジェクトを作る。

input 2 x
affine 100
relu  100
affine 1
huberloss 1

![c.png](https://qiita-image-store.s3.amazonaws.com/0/18104/e3113377-5426-1a72-deaa-1a3f1285da7a.png)

#学習する。

100 epoc
1 batch

![b.png](https://qiita-image-store.s3.amazonaws.com/0/18104/5c39ad64-3523-318d-484b-ed4c9931d67a.png)

#評価する。

![a.png](https://qiita-image-store.s3.amazonaws.com/0/18104/d6b02b45-1d8a-8367-e20a-c00a57a30687.png)

#リンク

nnc
https://dl.sony.com/ja/

以上。
Rubyのselect,map,eachのサンプルメモ

# メモ

```ruby:test.rb
require "pp"

arrs = [1,2,3,4,5]

# select
# ブロック引数itemに要素を入れながらブロックを繰り返し、ブロックの戻り値が真になったときの要素を集め、新しい配列にして返します
result_select = arrs.select do |item|
  true
end
pp result_select

result_select = arrs.select do |item|
  false
end

pp result_select

result_select = arrs.select do |item|
  item == 3
end

pp result_select

# each
# 配列の要素の数だけブロックを繰り返し実行します。繰り返しごとにブロック引数には各要素が順に入ります。戻り値はレシーバ自身

result_select = arrs.each do |item|
  true
end
pp result_select

result_select = arrs.each do |item|
  false
end
pp result_select

result_select = arrs.each do |item|
  pp item
  item == 3
end
pp result_select

# map
# mapメソッドは、要素の数だけ繰り返しブロックを実行し、ブロックの戻り値を集めた配列を作成して返します

result_select = arrs.map do |item|
  true
end
pp result_select

result_select = arrs.map do |item|
  false
end
pp result_select

result_select = arrs.map do |item|
  item+1
end
pp result_select
```

```sh:実行結果
[1, 2, 3, 4, 5]
[]
[3]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
1
2
3
4
5
[1, 2, 3, 4, 5]
[true, true, true, true, true]
[false, false, false, false, false]
[2, 3, 4, 5, 6]
```

# 参考

map, map! (Array) - Rubyリファレンス https://ref.xaio.jp/ruby/classes/array/map

select (Array) - Rubyリファレンス https://ref.xaio.jp/ruby/classes/array/select

each (Array) - Rubyリファレンス https://ref.xaio.jp/ruby/classes/array/each
TiddlyWiki5 の検索最低文字数の変更

TiddlyWiki5 のデフォルト検索最低文字数を変更する手順です。

# TyddlyWiki5の検索窓
![image.png](https://qiita-image-store.s3.amazonaws.com/0/272275/e7f54492-5362-890c-683c-f7e7c5de35ef.png)
↑これ

## 最低文字数設定
[TyddlyWiki5](https://tiddlywiki.com/)の検索窓は最低文字数が決まっており、これに満たない文字数の場合検索が行えない。
デフォルトでは3文字が設定されている。

* 2文字以下の場合  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/272275/24c7d0f1-c452-b4c1-b3cd-1c199835a4cf.png)
* 3文字以上の場合  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/272275/d52f9962-a954-f391-4ca6-32ca3620766e.png)


## 設定変更
TyddlyWiki5から以下のページにアクセスし、値を変更して保存すればOK。
`$:/config/Search/MinLength`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/272275/a09743b6-554b-a46f-a74a-ee5240890630.png)
↓ 3文字から2文字に設定
![image.png](https://qiita-image-store.s3.amazonaws.com/0/272275/6fbb3c74-d53c-98e7-ea5f-0a87011ca9cd.png)

## 確認
* 1文字の場合  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/272275/3888e7b5-97f0-1d40-a49a-ac95e280a10e.png)
* 2文字の場合  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/272275/99ef4207-4f60-25e1-2113-d19e6798aa77.png)

2文字以上で検索ができるようになった。

# 最後に
自分用備忘録でした。
日本語は2文字の言葉が多いので最低3文字の縛りを解きたかった。
（作業、勤怠、日報とか…）
情報技術(Information Technology)業界はサーカスだ

#綱渡り

毎日、その日に動かすソフトをその日に導入して、試験して、それからプログラム書いて、コンパイルして、試験して。

daily buildってかっこいいけど、早い話、綱渡り。


#ピエロ

人前で説明するのに、笑いを三回とるとよいと教えてくださったのは、
ご高名な相談員(consultant)。

緊張がほぐれると、理解が進み、大事なことを質問してくださる気になるとのこと。

#アクロバット

綱渡りだけでなく、ありとあらゆる芸当を駆使する。

##ネットワーク接続
無線、有線、なんでもござれ。
##ネットワークエラー回避
ありとあらゆるネットワークのエラーを、
wiresharkで収集して対応を考える。

##OS
Windows, macintosh, Linux, Docker
どんなOSでも相互にデータを変換して動かす。